Conversation
There was a problem hiding this comment.
Sorry @ArgoZhang, your pull request is larger than the review limit of 150000 diff characters
There was a problem hiding this comment.
Pull request overview
Bumps the BootstrapBlazor.EmbedPDF component to v10.0.3 and refreshes the shipped JS assets to the newly built bundle outputs.
Changes:
- Update NuGet/package version to 10.0.3.
- Swap
embedpdf.jsto re-export from the newly hashed bundle entry. - Replace/remove hashed runtime JS chunk files under
wwwrootto match the new build output.
Reviewed changes
Copilot reviewed 4 out of 11 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| src/components/BootstrapBlazor.EmbedPDF/wwwroot/embedpdf.js | Points re-exports at the newly hashed core bundle file. |
| src/components/BootstrapBlazor.EmbedPDF/wwwroot/direct-engine-BKalS8iM.js | Removes an old hashed chunk from wwwroot. |
| src/components/BootstrapBlazor.EmbedPDF/wwwroot/browser-BISJ9naB-DfsGA31F.js | Removes an old hashed chunk from wwwroot. |
| src/components/BootstrapBlazor.EmbedPDF/wwwroot/browser-BISJ9naB-D71PyCCt.js | Adds the newly built hashed browser/runtime chunk. |
| src/components/BootstrapBlazor.EmbedPDF/BootstrapBlazor.EmbedPDF.csproj | Bumps package version to 10.0.3. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| @@ -1 +1 @@ | |||
| export{J as AnnotationPlugin,K as AttachmentPlugin,L as BookmarkPlugin,M as CapturePlugin,O as CommandsPlugin,Q as DocumentManagerPlugin,S as EmbedPdfContainer,U as ExportPlugin,V as FullscreenPlugin,W as HistoryPlugin,X as I18nPlugin,Y as InteractionManagerPlugin,Z as PanPlugin,_ as PrintPlugin,$ as RedactionMode,a0 as RedactionPlugin,a1 as RenderPlugin,a2 as RotatePlugin,R as Rotation,a3 as ScrollPlugin,a4 as ScrollStrategy,a5 as SearchPlugin,a6 as SelectionPlugin,a7 as SpreadMode,a8 as SpreadPlugin,a9 as ThumbnailPlugin,aa as TilingPlugin,ab as UIPlugin,ac as ViewportPlugin,ad as ZoomMode,ae as ZoomPlugin,af as createTheme,ag as darkTheme,ah as default,ai as ignore,aj as lightTheme,ak as registerIcon,al as registerIcons,am as version}from"./embedpdf-DX_zb2Zx.js"; | |||
| export{M as AnnotationPlugin,O as AttachmentPlugin,Q as BookmarkPlugin,S as CapturePlugin,U as CommandsPlugin,V as DocumentManagerPlugin,W as EmbedPdfContainer,X as ExportPlugin,Y as FullscreenPlugin,Z as HistoryPlugin,_ as I18nPlugin,$ as InteractionManagerPlugin,a0 as PanPlugin,a1 as PrintPlugin,a2 as RedactionMode,a3 as RedactionPlugin,a4 as RenderPlugin,a5 as RotatePlugin,R as Rotation,a6 as ScrollPlugin,a7 as ScrollStrategy,a8 as SearchPlugin,a9 as SelectionPlugin,aa as SpreadMode,ab as SpreadPlugin,ac as ThumbnailPlugin,ad as TilingPlugin,ae as UIPlugin,af as ViewportPlugin,ag as ZoomMode,ah as ZoomPlugin,ai as createTheme,aj as darkTheme,ak as default,al as ignore,am as lightTheme,an as registerIcon,ao as registerIcons,ap as version}from"./embedpdf-xgzA9lZs.js"; | |||
There was a problem hiding this comment.
The public embedpdf.js shim hard-depends on a hash-named bundle file (embedpdf-xgzA9lZs.js), which forces source changes for every rebuild and increases the chance of packaging drift. Consider configuring the build to emit a stable internal entry filename (or a manifest-based lookup) so embedpdf.js doesn’t need to be edited/committed for hash churn.
| export{M as AnnotationPlugin,O as AttachmentPlugin,Q as BookmarkPlugin,S as CapturePlugin,U as CommandsPlugin,V as DocumentManagerPlugin,W as EmbedPdfContainer,X as ExportPlugin,Y as FullscreenPlugin,Z as HistoryPlugin,_ as I18nPlugin,$ as InteractionManagerPlugin,a0 as PanPlugin,a1 as PrintPlugin,a2 as RedactionMode,a3 as RedactionPlugin,a4 as RenderPlugin,a5 as RotatePlugin,R as Rotation,a6 as ScrollPlugin,a7 as ScrollStrategy,a8 as SearchPlugin,a9 as SelectionPlugin,aa as SpreadMode,ab as SpreadPlugin,ac as ThumbnailPlugin,ad as TilingPlugin,ae as UIPlugin,af as ViewportPlugin,ag as ZoomMode,ah as ZoomPlugin,ai as createTheme,aj as darkTheme,ak as default,al as ignore,am as lightTheme,an as registerIcon,ao as registerIcons,ap as version}from"./embedpdf-xgzA9lZs.js"; | |
| export{M as AnnotationPlugin,O as AttachmentPlugin,Q as BookmarkPlugin,S as CapturePlugin,U as CommandsPlugin,V as DocumentManagerPlugin,W as EmbedPdfContainer,X as ExportPlugin,Y as FullscreenPlugin,Z as HistoryPlugin,_ as I18nPlugin,$ as InteractionManagerPlugin,a0 as PanPlugin,a1 as PrintPlugin,a2 as RedactionMode,a3 as RedactionPlugin,a4 as RenderPlugin,a5 as RotatePlugin,R as Rotation,a6 as ScrollPlugin,a7 as ScrollStrategy,a8 as SearchPlugin,a9 as SelectionPlugin,aa as SpreadMode,ab as SpreadPlugin,ac as ThumbnailPlugin,ad as TilingPlugin,ae as UIPlugin,af as ViewportPlugin,ag as ZoomMode,ah as ZoomPlugin,ai as createTheme,aj as darkTheme,ak as default,al as ignore,am as lightTheme,an as registerIcon,ao as registerIcons,ap as version}from"./embedpdf-bundle.js"; |
| @@ -0,0 +1 @@ | |||
| import{N as e,T as t,K as r,P as n,L as o}from"./embedpdf-xgzA9lZs.js";const i="TaskQueue",a="Queue";var u=(e=>(e[e.CRITICAL=3]="CRITICAL",e[e.HIGH=2]="HIGH",e[e.MEDIUM=1]="MEDIUM",e[e.LOW=0]="LOW",e))(u||{});class s{constructor(t={}){this.queue=[],this.running=0,this.resultTasks=new Map,this.idleListeners=new Set;const{concurrency:r=1,comparator:n,ranker:o,onIdle:i,maxQueueSize:a,autoStart:u=!0,logger:s}=t;this.logger=s??new e,this.opts={concurrency:Math.max(1,r),comparator:n,ranker:o,onIdle:i??(()=>{}),maxQueueSize:a??Number.POSITIVE_INFINITY,autoStart:u}}setComparator(e){this.opts.comparator=e}setRanker(e){this.opts.ranker=e}size(){return this.queue.length}inFlight(){return this.running}isIdle(){return 0===this.queue.length&&0===this.running}async drain(){this.isIdle()||await new Promise(e=>{const t=()=>{this.isIdle()&&(this.offIdle(t),e())};this.onIdle(t)})}notifyIdle(){this.isIdle()&&([...this.idleListeners].forEach(e=>e()),this.idleListeners.clear(),this.opts.onIdle())}onIdle(e){this.idleListeners.add(e)}offIdle(e){this.idleListeners.delete(e)}enqueue(e,r={}){const n=this.generateId(),o=r.priority??1,u=new t;if(this.queue.length>=this.opts.maxQueueSize){const e=new Error("Queue is full (maxQueueSize reached).");return u.reject(e),u}this.resultTasks.set(n,u);const s={id:n,priority:o,meta:r.meta??e.meta,executeFactory:e.execute};this.queue.push(s),this.logger.debug(i,a,`Task enqueued: ${n} | Priority: ${o} | Running: ${this.running} | Queued: ${this.queue.length}`);const c=u.abort.bind(u);return u.abort=e=>{this.logger.debug(i,a,`Task aborted: ${n}`),this.cancel(n),c(e)},this.opts.autoStart&&this.process(!0===r.fifo),u}cancel(e){const t=this.queue.length;this.queue=this.queue.filter(t=>t.id!==e||(t.cancelled=!0,!1)),this.resultTasks.delete(e),t!==this.queue.length&&(this.logger.debug(i,a,`Task cancelled and removed: ${e}`),this.kick())}kick(){queueMicrotask(()=>this.process())}async process(e=!1){for(this.logger.debug(i,a,`process() called | Running: ${this.running} | Concurrency: ${this.opts.concurrency} | Queued: ${this.queue.length}`);this.running<this.opts.concurrency&&this.queue.length>0;){this.logger.debug(i,a,`Starting new task | Running: ${this.running} | Queued: ${this.queue.length}`),e||this.sortQueue();const t=this.queue.shift();if(t.cancelled){this.logger.debug(i,a,`Skipping cancelled task: ${t.id}`);continue}const r=this.resultTasks.get(t.id);r&&(this.running++,(async()=>{let e=null;try{if(e=t.executeFactory(),!e)throw new Error("Task factory returned null/undefined");e.wait(e=>{0===r.state.stage&&r.resolve(e)},e=>{0===r.state.stage&&("abort"===e.type?r.abort(e.reason):r.reject(e.reason))}),e.onProgress(e=>{r.progress(e)}),await e.toPromise()}catch(e){0===r.state.stage&&r.reject(e)}finally{this.resultTasks.delete(t.id),this.running--,this.logger.debug(i,a,`Task completed: ${t.id} | Running: ${this.running} | Queued: ${this.queue.length}`),this.isIdle()?this.notifyIdle():this.queue.length>0&&this.kick()}})().catch(e=>{this.logger.error(i,a,"Unhandled error in task execution wrapper:",e),this.running=Math.max(0,this.running-1),this.isIdle()?this.notifyIdle():this.queue.length>0&&this.kick()}))}}sortQueue(){const{comparator:e,ranker:t}=this.opts;if(e)return void this.queue.sort(e);const r=new Map,n=e=>t?(r.has(e.id)||r.set(e.id,t(e)),r.get(e.id)):this.defaultRank(e);this.queue.sort((e,t)=>{if(e.priority!==t.priority)return t.priority-e.priority;const r=n(e),o=n(t);return r!==o?o-r:this.extractTime(e.id)-this.extractTime(t.id)})}defaultRank(e){return 0}generateId(){return"undefined"!=typeof crypto&&"randomUUID"in crypto?crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2)}`}extractTime(e){const t=Number(e.split("-")[0]);return Number.isFinite(t)?t:0}}const c="PdfEngine",d="Orchestrator";class h{constructor(t,r){this.executor=t,this.logger=r.logger??new e,this.options={imageConverter:r.imageConverter,fetcher:r.fetcher??("undefined"!=typeof fetch?(e,t)=>fetch(e,t):void 0),logger:this.logger},this.workerQueue=new s({concurrency:1,autoStart:!0,logger:this.logger}),this.logger.debug(c,d,"PdfEngine orchestrator created")}chunkArray(e,t){const r=[];for(let n=0;n<e.length;n+=t)r.push(e.slice(n,n+t));return r}isSupport(e){const n=new t;return n.resolve([r.Create,r.Read,r.Update,r.Delete]),n}destroy(){var e,r;const o=new t;try{this.executor.destroy(),null==(r=(e=this.options.imageConverter).destroy)||r.call(e),o.resolve(!0)}catch(e){o.reject({code:n.Unknown,message:String(e)})}return o}openDocumentUrl(e,r){const o=new t;return(async()=>{try{if(!this.options.fetcher)throw new Error("Fetcher is not set");const t=await this.options.fetcher(e.url,null==r?void 0:r.requestOptions),n=await t.arrayBuffer(),i={id:e.id,content:n};this.openDocumentBuffer(i,{password:null==r?void 0:r.password,normalizeRotation:null==r?void 0:r.normalizeRotation}).wait(e=>o.resolve(e),e=>o.fail(e))}catch(e){o.reject({code:n.Unknown,message:String(e)})}})(),o}openDocumentBuffer(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.openDocumentBuffer(e,t),meta:{docId:e.id,operation:"openDocumentBuffer"}},{priority:u.CRITICAL})}getMetadata(e){return this.workerQueue.enqueue({execute:()=>this.executor.getMetadata(e),meta:{docId:e.id,operation:"getMetadata"}},{priority:u.MEDIUM})}setMetadata(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.setMetadata(e,t),meta:{docId:e.id,operation:"setMetadata"}},{priority:u.MEDIUM})}getDocPermissions(e){return this.workerQueue.enqueue({execute:()=>this.executor.getDocPermissions(e),meta:{docId:e.id,operation:"getDocPermissions"}},{priority:u.MEDIUM})}getDocUserPermissions(e){return this.workerQueue.enqueue({execute:()=>this.executor.getDocUserPermissions(e),meta:{docId:e.id,operation:"getDocUserPermissions"}},{priority:u.MEDIUM})}getSignatures(e){return this.workerQueue.enqueue({execute:()=>this.executor.getSignatures(e),meta:{docId:e.id,operation:"getSignatures"}},{priority:u.MEDIUM})}getBookmarks(e){return this.workerQueue.enqueue({execute:()=>this.executor.getBookmarks(e),meta:{docId:e.id,operation:"getBookmarks"}},{priority:u.MEDIUM})}setBookmarks(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.setBookmarks(e,t),meta:{docId:e.id,operation:"setBookmarks"}},{priority:u.MEDIUM})}deleteBookmarks(e){return this.workerQueue.enqueue({execute:()=>this.executor.deleteBookmarks(e),meta:{docId:e.id,operation:"deleteBookmarks"}},{priority:u.MEDIUM})}renderPage(e,t,r){return this.renderWithEncoding(()=>this.executor.renderPageRaw(e,t,r),r,e.id,t.index,u.CRITICAL)}renderPageRect(e,t,r,n){return this.renderWithEncoding(()=>this.executor.renderPageRect(e,t,r,n),n,e.id,t.index,u.HIGH)}renderPageRaw(e,t,r){return this.workerQueue.enqueue({execute:()=>this.executor.renderPageRaw(e,t,r),meta:{docId:e.id,pageIndex:t.index,operation:"renderPageRaw"}},{priority:u.HIGH})}renderPageRectRaw(e,t,r,n){return this.workerQueue.enqueue({execute:()=>this.executor.renderPageRect(e,t,r,n),meta:{docId:e.id,pageIndex:t.index,operation:"renderPageRectRaw"}},{priority:u.HIGH})}renderThumbnail(e,t,r){return this.renderWithEncoding(()=>this.executor.renderThumbnailRaw(e,t,r),r,e.id,t.index,u.MEDIUM)}renderPageAnnotation(e,t,r,n){return this.renderWithEncoding(()=>this.executor.renderPageAnnotationRaw(e,t,r,n),n,e.id,t.index,u.MEDIUM)}renderPageAnnotations(e,r,n){const o=new t,i=this.workerQueue.enqueue({execute:()=>this.executor.renderPageAnnotationsRaw(e,r,n),meta:{docId:e.id,pageIndex:r.index,operation:"renderPageAnnotationsRaw"}},{priority:u.MEDIUM}),a=o.abort.bind(o);return o.abort=e=>{i.abort(e),a(e)},i.wait(e=>{0===o.state.stage&&this.encodeAppearanceMap(e,n,o)},e=>{0===o.state.stage&&o.fail(e)}),o}renderPageAnnotationsRaw(e,t,r){return this.workerQueue.enqueue({execute:()=>this.executor.renderPageAnnotationsRaw(e,t,r),meta:{docId:e.id,pageIndex:t.index,operation:"renderPageAnnotationsRaw"}},{priority:u.MEDIUM})}renderWithEncoding(e,r,n,o,i=u.CRITICAL){const a=new t,s=this.workerQueue.enqueue({execute:()=>e(),meta:{docId:n,pageIndex:o,operation:"render"}},{priority:i}),c=a.abort.bind(a);return a.abort=e=>{s.abort(e),c(e)},s.wait(e=>{0===a.state.stage&&this.encodeImage(e,r,a)},e=>{0===a.state.stage&&a.fail(e)}),a}encodeImage(e,t,r){const o=(null==t?void 0:t.imageType)??"image/webp",i=null==t?void 0:t.quality,a={data:new Uint8ClampedArray(e.data),width:e.width,height:e.height};this.options.imageConverter(()=>a,o,i).then(e=>r.resolve(e)).catch(e=>r.reject({code:n.Unknown,message:String(e)}))}encodeAppearanceMap(e,t,r){const o=(null==t?void 0:t.imageType)??"image/webp",i=null==t?void 0:t.imageQuality,a=e=>{const t={data:new Uint8ClampedArray(e.data),width:e.width,height:e.height};return this.options.imageConverter(()=>t,o,i)},u=[],s={},c=["normal","rollover","down"];for(const[t,r]of Object.entries(e)){const e={};s[t]=e;for(const t of c){const n=r[t];n&&u.push(a(n.data).then(r=>{e[t]={data:r,rect:n.rect}}))}}Promise.all(u).then(()=>{0===r.state.stage&&r.resolve(s)}).catch(e=>{0===r.state.stage&&r.reject({code:n.Unknown,message:String(e)})})}getPageAnnotations(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.getPageAnnotations(e,t),meta:{docId:e.id,pageIndex:t.index,operation:"getPageAnnotations"}},{priority:u.MEDIUM})}createPageAnnotation(e,t,r,n){return this.workerQueue.enqueue({execute:()=>this.executor.createPageAnnotation(e,t,r,n),meta:{docId:e.id,pageIndex:t.index,operation:"createPageAnnotation"}},{priority:u.MEDIUM})}updatePageAnnotation(e,t,r,n){return this.workerQueue.enqueue({execute:()=>this.executor.updatePageAnnotation(e,t,r,n),meta:{docId:e.id,pageIndex:t.index,operation:"updatePageAnnotation"}},{priority:u.MEDIUM})}removePageAnnotation(e,t,r){return this.workerQueue.enqueue({execute:()=>this.executor.removePageAnnotation(e,t,r),meta:{docId:e.id,pageIndex:t.index,operation:"removePageAnnotation"}},{priority:u.MEDIUM})}getAllAnnotations(e){const t=this.chunkArray(e.pages,500);this.logger.debug(c,d,`getAllAnnotations: ${e.pages.length} pages in ${t.length} chunks`);const r=new o({aggregate:e=>Object.assign({},...e)});return t.forEach((t,n)=>{const o=this.workerQueue.enqueue({execute:()=>this.executor.getAnnotationsBatch(e,t),meta:{docId:e.id,operation:"getAnnotationsBatch",chunkSize:t.length}},{priority:u.LOW});o.onProgress(e=>{r.progress({page:e.pageIndex,result:e.result})}),r.addChild(o,n)}),r.finalize(),r}getPageTextRects(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.getPageTextRects(e,t),meta:{docId:e.id,pageIndex:t.index,operation:"getPageTextRects"}},{priority:u.MEDIUM})}searchAllPages(e,t,r){const n=Array.isArray(null==r?void 0:r.flags)?r.flags.reduce((e,t)=>e|t,0):(null==r?void 0:r.flags)??0,i=this.chunkArray(e.pages,25);this.logger.debug(c,d,`searchAllPages: ${e.pages.length} pages in ${i.length} chunks`);const a=new o({aggregate:e=>{const t=e.flatMap(e=>Object.values(e).flat());return{results:t,total:t.length}}});return i.forEach((r,o)=>{const i=this.workerQueue.enqueue({execute:()=>this.executor.searchBatch(e,r,t,n),meta:{docId:e.id,operation:"searchBatch",chunkSize:r.length}},{priority:u.LOW});i.onProgress(e=>{a.progress({page:e.pageIndex,results:e.result})}),a.addChild(i,o)}),a.finalize(),a}getAttachments(e){return this.workerQueue.enqueue({execute:()=>this.executor.getAttachments(e),meta:{docId:e.id,operation:"getAttachments"}},{priority:u.MEDIUM})}addAttachment(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.addAttachment(e,t),meta:{docId:e.id,operation:"addAttachment"}},{priority:u.MEDIUM})}removeAttachment(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.removeAttachment(e,t),meta:{docId:e.id,operation:"removeAttachment"}},{priority:u.MEDIUM})}readAttachmentContent(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.readAttachmentContent(e,t),meta:{docId:e.id,operation:"readAttachmentContent"}},{priority:u.MEDIUM})}setFormFieldValue(e,t,r,n){return this.workerQueue.enqueue({execute:()=>this.executor.setFormFieldValue(e,t,r,n),meta:{docId:e.id,pageIndex:t.index,operation:"setFormFieldValue"}},{priority:u.MEDIUM})}flattenPage(e,t,r){return this.workerQueue.enqueue({execute:()=>this.executor.flattenPage(e,t,r),meta:{docId:e.id,pageIndex:t.index,operation:"flattenPage"}},{priority:u.MEDIUM})}extractPages(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.extractPages(e,t),meta:{docId:e.id,pageIndexes:t,operation:"extractPages"}},{priority:u.MEDIUM})}extractText(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.extractText(e,t),meta:{docId:e.id,pageIndexes:t,operation:"extractText"}},{priority:u.MEDIUM})}redactTextInRects(e,t,r,n){return this.workerQueue.enqueue({execute:()=>this.executor.redactTextInRects(e,t,r,n),meta:{docId:e.id,pageIndex:t.index,operation:"redactTextInRects"}},{priority:u.MEDIUM})}applyRedaction(e,t,r){return this.workerQueue.enqueue({execute:()=>this.executor.applyRedaction(e,t,r),meta:{docId:e.id,pageIndex:t.index,operation:"applyRedaction"}},{priority:u.MEDIUM})}applyAllRedactions(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.applyAllRedactions(e,t),meta:{docId:e.id,pageIndex:t.index,operation:"applyAllRedactions"}},{priority:u.MEDIUM})}flattenAnnotation(e,t,r){return this.workerQueue.enqueue({execute:()=>this.executor.flattenAnnotation(e,t,r),meta:{docId:e.id,pageIndex:t.index,operation:"flattenAnnotation"}},{priority:u.MEDIUM})}getTextSlices(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.getTextSlices(e,t),meta:{docId:e.id,slices:t,operation:"getTextSlices"}},{priority:u.MEDIUM})}getPageGlyphs(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.getPageGlyphs(e,t),meta:{docId:e.id,pageIndex:t.index,operation:"getPageGlyphs"}},{priority:u.MEDIUM})}getPageGeometry(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.getPageGeometry(e,t),meta:{docId:e.id,pageIndex:t.index,operation:"getPageGeometry"}},{priority:u.MEDIUM})}getPageTextRuns(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.getPageTextRuns(e,t),meta:{docId:e.id,pageIndex:t.index,operation:"getPageTextRuns"}},{priority:u.MEDIUM})}merge(e){return this.workerQueue.enqueue({execute:()=>this.executor.merge(e),meta:{docId:e.map(e=>e.id).join(","),operation:"merge"}},{priority:u.MEDIUM})}mergePages(e){return this.workerQueue.enqueue({execute:()=>this.executor.mergePages(e),meta:{docId:e.map(e=>e.docId).join(","),operation:"mergePages"}},{priority:u.MEDIUM})}preparePrintDocument(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.preparePrintDocument(e,t),meta:{docId:e.id,operation:"preparePrintDocument"}},{priority:u.MEDIUM})}saveAsCopy(e){return this.workerQueue.enqueue({execute:()=>this.executor.saveAsCopy(e),meta:{docId:e.id,operation:"saveAsCopy"}},{priority:u.MEDIUM})}closeDocument(e){return this.workerQueue.enqueue({execute:()=>this.executor.closeDocument(e),meta:{docId:e.id,operation:"closeDocument"}},{priority:u.MEDIUM})}closeAllDocuments(){return this.workerQueue.enqueue({execute:()=>this.executor.closeAllDocuments(),meta:{operation:"closeAllDocuments"}},{priority:u.MEDIUM})}setDocumentEncryption(e,t,r,n){return this.workerQueue.enqueue({execute:()=>this.executor.setDocumentEncryption(e,t,r,n),meta:{docId:e.id,operation:"setDocumentEncryption"}},{priority:u.MEDIUM})}removeEncryption(e){return this.workerQueue.enqueue({execute:()=>this.executor.removeEncryption(e),meta:{docId:e.id,operation:"removeEncryption"}},{priority:u.MEDIUM})}unlockOwnerPermissions(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.unlockOwnerPermissions(e,t),meta:{docId:e.id,operation:"unlockOwnerPermissions"}},{priority:u.MEDIUM})}isEncrypted(e){return this.workerQueue.enqueue({execute:()=>this.executor.isEncrypted(e),meta:{docId:e.id,operation:"isEncrypted"}},{priority:u.MEDIUM})}isOwnerUnlocked(e){return this.workerQueue.enqueue({execute:()=>this.executor.isOwnerUnlocked(e),meta:{docId:e.id,operation:"isOwnerUnlocked"}},{priority:u.MEDIUM})}}class g extends Error{constructor(e){super(e),this.name="ImageConverterError"}}const p=(e,t="image/webp",r)=>{if("undefined"==typeof document)return Promise.reject(new g("document is not available. This converter requires a browser environment."));const n=e(),o=new ImageData(n.data,n.width,n.height);return new Promise((e,n)=>{const i=document.createElement("canvas");i.width=o.width,i.height=o.height,i.getContext("2d").putImageData(o,0,0),i.toBlob(t=>{t?e(t):n(new g("Canvas toBlob returned null"))},t,r)})};function l(e){const t=async(t,r="image/webp",n)=>{try{const o=t(),i=new Uint8ClampedArray(o.data);return await e.encode({data:i,width:o.width,height:o.height},r,n)}catch(e){return console.warn("Worker encoding failed, falling back to main-thread Canvas:",e),p(t,r,n)}};return t.destroy=()=>e.destroy(),t}export{h as P,p as b,l as c}; | |||
There was a problem hiding this comment.
encodeImage() reads quality from options.quality, but encodeAppearanceMap() reads quality from options.imageQuality. This inconsistency is likely to confuse API consumers and can silently ignore a caller’s quality setting when rendering annotation appearances. Consider standardizing on a single option name (e.g., quality) or supporting both (imageQuality ?? quality) for backward/forward compatibility.
| import{N as e,T as t,K as r,P as n,L as o}from"./embedpdf-xgzA9lZs.js";const i="TaskQueue",a="Queue";var u=(e=>(e[e.CRITICAL=3]="CRITICAL",e[e.HIGH=2]="HIGH",e[e.MEDIUM=1]="MEDIUM",e[e.LOW=0]="LOW",e))(u||{});class s{constructor(t={}){this.queue=[],this.running=0,this.resultTasks=new Map,this.idleListeners=new Set;const{concurrency:r=1,comparator:n,ranker:o,onIdle:i,maxQueueSize:a,autoStart:u=!0,logger:s}=t;this.logger=s??new e,this.opts={concurrency:Math.max(1,r),comparator:n,ranker:o,onIdle:i??(()=>{}),maxQueueSize:a??Number.POSITIVE_INFINITY,autoStart:u}}setComparator(e){this.opts.comparator=e}setRanker(e){this.opts.ranker=e}size(){return this.queue.length}inFlight(){return this.running}isIdle(){return 0===this.queue.length&&0===this.running}async drain(){this.isIdle()||await new Promise(e=>{const t=()=>{this.isIdle()&&(this.offIdle(t),e())};this.onIdle(t)})}notifyIdle(){this.isIdle()&&([...this.idleListeners].forEach(e=>e()),this.idleListeners.clear(),this.opts.onIdle())}onIdle(e){this.idleListeners.add(e)}offIdle(e){this.idleListeners.delete(e)}enqueue(e,r={}){const n=this.generateId(),o=r.priority??1,u=new t;if(this.queue.length>=this.opts.maxQueueSize){const e=new Error("Queue is full (maxQueueSize reached).");return u.reject(e),u}this.resultTasks.set(n,u);const s={id:n,priority:o,meta:r.meta??e.meta,executeFactory:e.execute};this.queue.push(s),this.logger.debug(i,a,`Task enqueued: ${n} | Priority: ${o} | Running: ${this.running} | Queued: ${this.queue.length}`);const c=u.abort.bind(u);return u.abort=e=>{this.logger.debug(i,a,`Task aborted: ${n}`),this.cancel(n),c(e)},this.opts.autoStart&&this.process(!0===r.fifo),u}cancel(e){const t=this.queue.length;this.queue=this.queue.filter(t=>t.id!==e||(t.cancelled=!0,!1)),this.resultTasks.delete(e),t!==this.queue.length&&(this.logger.debug(i,a,`Task cancelled and removed: ${e}`),this.kick())}kick(){queueMicrotask(()=>this.process())}async process(e=!1){for(this.logger.debug(i,a,`process() called | Running: ${this.running} | Concurrency: ${this.opts.concurrency} | Queued: ${this.queue.length}`);this.running<this.opts.concurrency&&this.queue.length>0;){this.logger.debug(i,a,`Starting new task | Running: ${this.running} | Queued: ${this.queue.length}`),e||this.sortQueue();const t=this.queue.shift();if(t.cancelled){this.logger.debug(i,a,`Skipping cancelled task: ${t.id}`);continue}const r=this.resultTasks.get(t.id);r&&(this.running++,(async()=>{let e=null;try{if(e=t.executeFactory(),!e)throw new Error("Task factory returned null/undefined");e.wait(e=>{0===r.state.stage&&r.resolve(e)},e=>{0===r.state.stage&&("abort"===e.type?r.abort(e.reason):r.reject(e.reason))}),e.onProgress(e=>{r.progress(e)}),await e.toPromise()}catch(e){0===r.state.stage&&r.reject(e)}finally{this.resultTasks.delete(t.id),this.running--,this.logger.debug(i,a,`Task completed: ${t.id} | Running: ${this.running} | Queued: ${this.queue.length}`),this.isIdle()?this.notifyIdle():this.queue.length>0&&this.kick()}})().catch(e=>{this.logger.error(i,a,"Unhandled error in task execution wrapper:",e),this.running=Math.max(0,this.running-1),this.isIdle()?this.notifyIdle():this.queue.length>0&&this.kick()}))}}sortQueue(){const{comparator:e,ranker:t}=this.opts;if(e)return void this.queue.sort(e);const r=new Map,n=e=>t?(r.has(e.id)||r.set(e.id,t(e)),r.get(e.id)):this.defaultRank(e);this.queue.sort((e,t)=>{if(e.priority!==t.priority)return t.priority-e.priority;const r=n(e),o=n(t);return r!==o?o-r:this.extractTime(e.id)-this.extractTime(t.id)})}defaultRank(e){return 0}generateId(){return"undefined"!=typeof crypto&&"randomUUID"in crypto?crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2)}`}extractTime(e){const t=Number(e.split("-")[0]);return Number.isFinite(t)?t:0}}const c="PdfEngine",d="Orchestrator";class h{constructor(t,r){this.executor=t,this.logger=r.logger??new e,this.options={imageConverter:r.imageConverter,fetcher:r.fetcher??("undefined"!=typeof fetch?(e,t)=>fetch(e,t):void 0),logger:this.logger},this.workerQueue=new s({concurrency:1,autoStart:!0,logger:this.logger}),this.logger.debug(c,d,"PdfEngine orchestrator created")}chunkArray(e,t){const r=[];for(let n=0;n<e.length;n+=t)r.push(e.slice(n,n+t));return r}isSupport(e){const n=new t;return n.resolve([r.Create,r.Read,r.Update,r.Delete]),n}destroy(){var e,r;const o=new t;try{this.executor.destroy(),null==(r=(e=this.options.imageConverter).destroy)||r.call(e),o.resolve(!0)}catch(e){o.reject({code:n.Unknown,message:String(e)})}return o}openDocumentUrl(e,r){const o=new t;return(async()=>{try{if(!this.options.fetcher)throw new Error("Fetcher is not set");const t=await this.options.fetcher(e.url,null==r?void 0:r.requestOptions),n=await t.arrayBuffer(),i={id:e.id,content:n};this.openDocumentBuffer(i,{password:null==r?void 0:r.password,normalizeRotation:null==r?void 0:r.normalizeRotation}).wait(e=>o.resolve(e),e=>o.fail(e))}catch(e){o.reject({code:n.Unknown,message:String(e)})}})(),o}openDocumentBuffer(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.openDocumentBuffer(e,t),meta:{docId:e.id,operation:"openDocumentBuffer"}},{priority:u.CRITICAL})}getMetadata(e){return this.workerQueue.enqueue({execute:()=>this.executor.getMetadata(e),meta:{docId:e.id,operation:"getMetadata"}},{priority:u.MEDIUM})}setMetadata(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.setMetadata(e,t),meta:{docId:e.id,operation:"setMetadata"}},{priority:u.MEDIUM})}getDocPermissions(e){return this.workerQueue.enqueue({execute:()=>this.executor.getDocPermissions(e),meta:{docId:e.id,operation:"getDocPermissions"}},{priority:u.MEDIUM})}getDocUserPermissions(e){return this.workerQueue.enqueue({execute:()=>this.executor.getDocUserPermissions(e),meta:{docId:e.id,operation:"getDocUserPermissions"}},{priority:u.MEDIUM})}getSignatures(e){return this.workerQueue.enqueue({execute:()=>this.executor.getSignatures(e),meta:{docId:e.id,operation:"getSignatures"}},{priority:u.MEDIUM})}getBookmarks(e){return this.workerQueue.enqueue({execute:()=>this.executor.getBookmarks(e),meta:{docId:e.id,operation:"getBookmarks"}},{priority:u.MEDIUM})}setBookmarks(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.setBookmarks(e,t),meta:{docId:e.id,operation:"setBookmarks"}},{priority:u.MEDIUM})}deleteBookmarks(e){return this.workerQueue.enqueue({execute:()=>this.executor.deleteBookmarks(e),meta:{docId:e.id,operation:"deleteBookmarks"}},{priority:u.MEDIUM})}renderPage(e,t,r){return this.renderWithEncoding(()=>this.executor.renderPageRaw(e,t,r),r,e.id,t.index,u.CRITICAL)}renderPageRect(e,t,r,n){return this.renderWithEncoding(()=>this.executor.renderPageRect(e,t,r,n),n,e.id,t.index,u.HIGH)}renderPageRaw(e,t,r){return this.workerQueue.enqueue({execute:()=>this.executor.renderPageRaw(e,t,r),meta:{docId:e.id,pageIndex:t.index,operation:"renderPageRaw"}},{priority:u.HIGH})}renderPageRectRaw(e,t,r,n){return this.workerQueue.enqueue({execute:()=>this.executor.renderPageRect(e,t,r,n),meta:{docId:e.id,pageIndex:t.index,operation:"renderPageRectRaw"}},{priority:u.HIGH})}renderThumbnail(e,t,r){return this.renderWithEncoding(()=>this.executor.renderThumbnailRaw(e,t,r),r,e.id,t.index,u.MEDIUM)}renderPageAnnotation(e,t,r,n){return this.renderWithEncoding(()=>this.executor.renderPageAnnotationRaw(e,t,r,n),n,e.id,t.index,u.MEDIUM)}renderPageAnnotations(e,r,n){const o=new t,i=this.workerQueue.enqueue({execute:()=>this.executor.renderPageAnnotationsRaw(e,r,n),meta:{docId:e.id,pageIndex:r.index,operation:"renderPageAnnotationsRaw"}},{priority:u.MEDIUM}),a=o.abort.bind(o);return o.abort=e=>{i.abort(e),a(e)},i.wait(e=>{0===o.state.stage&&this.encodeAppearanceMap(e,n,o)},e=>{0===o.state.stage&&o.fail(e)}),o}renderPageAnnotationsRaw(e,t,r){return this.workerQueue.enqueue({execute:()=>this.executor.renderPageAnnotationsRaw(e,t,r),meta:{docId:e.id,pageIndex:t.index,operation:"renderPageAnnotationsRaw"}},{priority:u.MEDIUM})}renderWithEncoding(e,r,n,o,i=u.CRITICAL){const a=new t,s=this.workerQueue.enqueue({execute:()=>e(),meta:{docId:n,pageIndex:o,operation:"render"}},{priority:i}),c=a.abort.bind(a);return a.abort=e=>{s.abort(e),c(e)},s.wait(e=>{0===a.state.stage&&this.encodeImage(e,r,a)},e=>{0===a.state.stage&&a.fail(e)}),a}encodeImage(e,t,r){const o=(null==t?void 0:t.imageType)??"image/webp",i=null==t?void 0:t.quality,a={data:new Uint8ClampedArray(e.data),width:e.width,height:e.height};this.options.imageConverter(()=>a,o,i).then(e=>r.resolve(e)).catch(e=>r.reject({code:n.Unknown,message:String(e)}))}encodeAppearanceMap(e,t,r){const o=(null==t?void 0:t.imageType)??"image/webp",i=null==t?void 0:t.imageQuality,a=e=>{const t={data:new Uint8ClampedArray(e.data),width:e.width,height:e.height};return this.options.imageConverter(()=>t,o,i)},u=[],s={},c=["normal","rollover","down"];for(const[t,r]of Object.entries(e)){const e={};s[t]=e;for(const t of c){const n=r[t];n&&u.push(a(n.data).then(r=>{e[t]={data:r,rect:n.rect}}))}}Promise.all(u).then(()=>{0===r.state.stage&&r.resolve(s)}).catch(e=>{0===r.state.stage&&r.reject({code:n.Unknown,message:String(e)})})}getPageAnnotations(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.getPageAnnotations(e,t),meta:{docId:e.id,pageIndex:t.index,operation:"getPageAnnotations"}},{priority:u.MEDIUM})}createPageAnnotation(e,t,r,n){return this.workerQueue.enqueue({execute:()=>this.executor.createPageAnnotation(e,t,r,n),meta:{docId:e.id,pageIndex:t.index,operation:"createPageAnnotation"}},{priority:u.MEDIUM})}updatePageAnnotation(e,t,r,n){return this.workerQueue.enqueue({execute:()=>this.executor.updatePageAnnotation(e,t,r,n),meta:{docId:e.id,pageIndex:t.index,operation:"updatePageAnnotation"}},{priority:u.MEDIUM})}removePageAnnotation(e,t,r){return this.workerQueue.enqueue({execute:()=>this.executor.removePageAnnotation(e,t,r),meta:{docId:e.id,pageIndex:t.index,operation:"removePageAnnotation"}},{priority:u.MEDIUM})}getAllAnnotations(e){const t=this.chunkArray(e.pages,500);this.logger.debug(c,d,`getAllAnnotations: ${e.pages.length} pages in ${t.length} chunks`);const r=new o({aggregate:e=>Object.assign({},...e)});return t.forEach((t,n)=>{const o=this.workerQueue.enqueue({execute:()=>this.executor.getAnnotationsBatch(e,t),meta:{docId:e.id,operation:"getAnnotationsBatch",chunkSize:t.length}},{priority:u.LOW});o.onProgress(e=>{r.progress({page:e.pageIndex,result:e.result})}),r.addChild(o,n)}),r.finalize(),r}getPageTextRects(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.getPageTextRects(e,t),meta:{docId:e.id,pageIndex:t.index,operation:"getPageTextRects"}},{priority:u.MEDIUM})}searchAllPages(e,t,r){const n=Array.isArray(null==r?void 0:r.flags)?r.flags.reduce((e,t)=>e|t,0):(null==r?void 0:r.flags)??0,i=this.chunkArray(e.pages,25);this.logger.debug(c,d,`searchAllPages: ${e.pages.length} pages in ${i.length} chunks`);const a=new o({aggregate:e=>{const t=e.flatMap(e=>Object.values(e).flat());return{results:t,total:t.length}}});return i.forEach((r,o)=>{const i=this.workerQueue.enqueue({execute:()=>this.executor.searchBatch(e,r,t,n),meta:{docId:e.id,operation:"searchBatch",chunkSize:r.length}},{priority:u.LOW});i.onProgress(e=>{a.progress({page:e.pageIndex,results:e.result})}),a.addChild(i,o)}),a.finalize(),a}getAttachments(e){return this.workerQueue.enqueue({execute:()=>this.executor.getAttachments(e),meta:{docId:e.id,operation:"getAttachments"}},{priority:u.MEDIUM})}addAttachment(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.addAttachment(e,t),meta:{docId:e.id,operation:"addAttachment"}},{priority:u.MEDIUM})}removeAttachment(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.removeAttachment(e,t),meta:{docId:e.id,operation:"removeAttachment"}},{priority:u.MEDIUM})}readAttachmentContent(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.readAttachmentContent(e,t),meta:{docId:e.id,operation:"readAttachmentContent"}},{priority:u.MEDIUM})}setFormFieldValue(e,t,r,n){return this.workerQueue.enqueue({execute:()=>this.executor.setFormFieldValue(e,t,r,n),meta:{docId:e.id,pageIndex:t.index,operation:"setFormFieldValue"}},{priority:u.MEDIUM})}flattenPage(e,t,r){return this.workerQueue.enqueue({execute:()=>this.executor.flattenPage(e,t,r),meta:{docId:e.id,pageIndex:t.index,operation:"flattenPage"}},{priority:u.MEDIUM})}extractPages(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.extractPages(e,t),meta:{docId:e.id,pageIndexes:t,operation:"extractPages"}},{priority:u.MEDIUM})}extractText(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.extractText(e,t),meta:{docId:e.id,pageIndexes:t,operation:"extractText"}},{priority:u.MEDIUM})}redactTextInRects(e,t,r,n){return this.workerQueue.enqueue({execute:()=>this.executor.redactTextInRects(e,t,r,n),meta:{docId:e.id,pageIndex:t.index,operation:"redactTextInRects"}},{priority:u.MEDIUM})}applyRedaction(e,t,r){return this.workerQueue.enqueue({execute:()=>this.executor.applyRedaction(e,t,r),meta:{docId:e.id,pageIndex:t.index,operation:"applyRedaction"}},{priority:u.MEDIUM})}applyAllRedactions(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.applyAllRedactions(e,t),meta:{docId:e.id,pageIndex:t.index,operation:"applyAllRedactions"}},{priority:u.MEDIUM})}flattenAnnotation(e,t,r){return this.workerQueue.enqueue({execute:()=>this.executor.flattenAnnotation(e,t,r),meta:{docId:e.id,pageIndex:t.index,operation:"flattenAnnotation"}},{priority:u.MEDIUM})}getTextSlices(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.getTextSlices(e,t),meta:{docId:e.id,slices:t,operation:"getTextSlices"}},{priority:u.MEDIUM})}getPageGlyphs(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.getPageGlyphs(e,t),meta:{docId:e.id,pageIndex:t.index,operation:"getPageGlyphs"}},{priority:u.MEDIUM})}getPageGeometry(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.getPageGeometry(e,t),meta:{docId:e.id,pageIndex:t.index,operation:"getPageGeometry"}},{priority:u.MEDIUM})}getPageTextRuns(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.getPageTextRuns(e,t),meta:{docId:e.id,pageIndex:t.index,operation:"getPageTextRuns"}},{priority:u.MEDIUM})}merge(e){return this.workerQueue.enqueue({execute:()=>this.executor.merge(e),meta:{docId:e.map(e=>e.id).join(","),operation:"merge"}},{priority:u.MEDIUM})}mergePages(e){return this.workerQueue.enqueue({execute:()=>this.executor.mergePages(e),meta:{docId:e.map(e=>e.docId).join(","),operation:"mergePages"}},{priority:u.MEDIUM})}preparePrintDocument(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.preparePrintDocument(e,t),meta:{docId:e.id,operation:"preparePrintDocument"}},{priority:u.MEDIUM})}saveAsCopy(e){return this.workerQueue.enqueue({execute:()=>this.executor.saveAsCopy(e),meta:{docId:e.id,operation:"saveAsCopy"}},{priority:u.MEDIUM})}closeDocument(e){return this.workerQueue.enqueue({execute:()=>this.executor.closeDocument(e),meta:{docId:e.id,operation:"closeDocument"}},{priority:u.MEDIUM})}closeAllDocuments(){return this.workerQueue.enqueue({execute:()=>this.executor.closeAllDocuments(),meta:{operation:"closeAllDocuments"}},{priority:u.MEDIUM})}setDocumentEncryption(e,t,r,n){return this.workerQueue.enqueue({execute:()=>this.executor.setDocumentEncryption(e,t,r,n),meta:{docId:e.id,operation:"setDocumentEncryption"}},{priority:u.MEDIUM})}removeEncryption(e){return this.workerQueue.enqueue({execute:()=>this.executor.removeEncryption(e),meta:{docId:e.id,operation:"removeEncryption"}},{priority:u.MEDIUM})}unlockOwnerPermissions(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.unlockOwnerPermissions(e,t),meta:{docId:e.id,operation:"unlockOwnerPermissions"}},{priority:u.MEDIUM})}isEncrypted(e){return this.workerQueue.enqueue({execute:()=>this.executor.isEncrypted(e),meta:{docId:e.id,operation:"isEncrypted"}},{priority:u.MEDIUM})}isOwnerUnlocked(e){return this.workerQueue.enqueue({execute:()=>this.executor.isOwnerUnlocked(e),meta:{docId:e.id,operation:"isOwnerUnlocked"}},{priority:u.MEDIUM})}}class g extends Error{constructor(e){super(e),this.name="ImageConverterError"}}const p=(e,t="image/webp",r)=>{if("undefined"==typeof document)return Promise.reject(new g("document is not available. This converter requires a browser environment."));const n=e(),o=new ImageData(n.data,n.width,n.height);return new Promise((e,n)=>{const i=document.createElement("canvas");i.width=o.width,i.height=o.height,i.getContext("2d").putImageData(o,0,0),i.toBlob(t=>{t?e(t):n(new g("Canvas toBlob returned null"))},t,r)})};function l(e){const t=async(t,r="image/webp",n)=>{try{const o=t(),i=new Uint8ClampedArray(o.data);return await e.encode({data:i,width:o.width,height:o.height},r,n)}catch(e){return console.warn("Worker encoding failed, falling back to main-thread Canvas:",e),p(t,r,n)}};return t.destroy=()=>e.destroy(),t}export{h as P,p as b,l as c}; | |
| import{N as e,T as t,K as r,P as n,L as o}from"./embedpdf-xgzA9lZs.js";const i="TaskQueue",a="Queue";var u=(e=>(e[e.CRITICAL=3]="CRITICAL",e[e.HIGH=2]="HIGH",e[e.MEDIUM=1]="MEDIUM",e[e.LOW=0]="LOW",e))(u||{});class s{constructor(t={}){this.queue=[],this.running=0,this.resultTasks=new Map,this.idleListeners=new Set;const{concurrency:r=1,comparator:n,ranker:o,onIdle:i,maxQueueSize:a,autoStart:u=!0,logger:s}=t;this.logger=s??new e,this.opts={concurrency:Math.max(1,r),comparator:n,ranker:o,onIdle:i??(()=>{}),maxQueueSize:a??Number.POSITIVE_INFINITY,autoStart:u}}setComparator(e){this.opts.comparator=e}setRanker(e){this.opts.ranker=e}size(){return this.queue.length}inFlight(){return this.running}isIdle(){return 0===this.queue.length&&0===this.running}async drain(){this.isIdle()||await new Promise(e=>{const t=()=>{this.isIdle()&&(this.offIdle(t),e())};this.onIdle(t)})}notifyIdle(){this.isIdle()&&([...this.idleListeners].forEach(e=>e()),this.idleListeners.clear(),this.opts.onIdle())}onIdle(e){this.idleListeners.add(e)}offIdle(e){this.idleListeners.delete(e)}enqueue(e,r={}){const n=this.generateId(),o=r.priority??1,u=new t;if(this.queue.length>=this.opts.maxQueueSize){const e=new Error("Queue is full (maxQueueSize reached).");return u.reject(e),u}this.resultTasks.set(n,u);const s={id:n,priority:o,meta:r.meta??e.meta,executeFactory:e.execute};this.queue.push(s),this.logger.debug(i,a,`Task enqueued: ${n} | Priority: ${o} | Running: ${this.running} | Queued: ${this.queue.length}`);const c=u.abort.bind(u);return u.abort=e=>{this.logger.debug(i,a,`Task aborted: ${n}`),this.cancel(n),c(e)},this.opts.autoStart&&this.process(!0===r.fifo),u}cancel(e){const t=this.queue.length;this.queue=this.queue.filter(t=>t.id!==e||(t.cancelled=!0,!1)),this.resultTasks.delete(e),t!==this.queue.length&&(this.logger.debug(i,a,`Task cancelled and removed: ${e}`),this.kick())}kick(){queueMicrotask(()=>this.process())}async process(e=!1){for(this.logger.debug(i,a,`process() called | Running: ${this.running} | Concurrency: ${this.opts.concurrency} | Queued: ${this.queue.length}`);this.running<this.opts.concurrency&&this.queue.length>0;){this.logger.debug(i,a,`Starting new task | Running: ${this.running} | Queued: ${this.queue.length}`),e||this.sortQueue();const t=this.queue.shift();if(t.cancelled){this.logger.debug(i,a,`Skipping cancelled task: ${t.id}`);continue}const r=this.resultTasks.get(t.id);r&&(this.running++,(async()=>{let e=null;try{if(e=t.executeFactory(),!e)throw new Error("Task factory returned null/undefined");e.wait(e=>{0===r.state.stage&&r.resolve(e)},e=>{0===r.state.stage&&("abort"===e.type?r.abort(e.reason):r.reject(e.reason))}),e.onProgress(e=>{r.progress(e)}),await e.toPromise()}catch(e){0===r.state.stage&&r.reject(e)}finally{this.resultTasks.delete(t.id),this.running--,this.logger.debug(i,a,`Task completed: ${t.id} | Running: ${this.running} | Queued: ${this.queue.length}`),this.isIdle()?this.notifyIdle():this.queue.length>0&&this.kick()}})().catch(e=>{this.logger.error(i,a,"Unhandled error in task execution wrapper:",e),this.running=Math.max(0,this.running-1),this.isIdle()?this.notifyIdle():this.queue.length>0&&this.kick()}))}}sortQueue(){const{comparator:e,ranker:t}=this.opts;if(e)return void this.queue.sort(e);const r=new Map,n=e=>t?(r.has(e.id)||r.set(e.id,t(e)),r.get(e.id)):this.defaultRank(e);this.queue.sort((e,t)=>{if(e.priority!==t.priority)return t.priority-e.priority;const r=n(e),o=n(t);return r!==o?o-r:this.extractTime(e.id)-this.extractTime(t.id)})}defaultRank(e){return 0}generateId(){return"undefined"!=typeof crypto&&"randomUUID"in crypto?crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2)}`}extractTime(e){const t=Number(e.split("-")[0]);return Number.isFinite(t)?t:0}}const c="PdfEngine",d="Orchestrator";class h{constructor(t,r){this.executor=t,this.logger=r.logger??new e,this.options={imageConverter:r.imageConverter,fetcher:r.fetcher??("undefined"!=typeof fetch?(e,t)=>fetch(e,t):void 0),logger:this.logger},this.workerQueue=new s({concurrency:1,autoStart:!0,logger:this.logger}),this.logger.debug(c,d,"PdfEngine orchestrator created")}chunkArray(e,t){const r=[];for(let n=0;n<e.length;n+=t)r.push(e.slice(n,n+t));return r}isSupport(e){const n=new t;return n.resolve([r.Create,r.Read,r.Update,r.Delete]),n}destroy(){var e,r;const o=new t;try{this.executor.destroy(),null==(r=(e=this.options.imageConverter).destroy)||r.call(e),o.resolve(!0)}catch(e){o.reject({code:n.Unknown,message:String(e)})}return o}openDocumentUrl(e,r){const o=new t;return(async()=>{try{if(!this.options.fetcher)throw new Error("Fetcher is not set");const t=await this.options.fetcher(e.url,null==r?void 0:r.requestOptions),n=await t.arrayBuffer(),i={id:e.id,content:n};this.openDocumentBuffer(i,{password:null==r?void 0:r.password,normalizeRotation:null==r?void 0:r.normalizeRotation}).wait(e=>o.resolve(e),e=>o.fail(e))}catch(e){o.reject({code:n.Unknown,message:String(e)})}})(),o}openDocumentBuffer(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.openDocumentBuffer(e,t),meta:{docId:e.id,operation:"openDocumentBuffer"}},{priority:u.CRITICAL})}getMetadata(e){return this.workerQueue.enqueue({execute:()=>this.executor.getMetadata(e),meta:{docId:e.id,operation:"getMetadata"}},{priority:u.MEDIUM})}setMetadata(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.setMetadata(e,t),meta:{docId:e.id,operation:"setMetadata"}},{priority:u.MEDIUM})}getDocPermissions(e){return this.workerQueue.enqueue({execute:()=>this.executor.getDocPermissions(e),meta:{docId:e.id,operation:"getDocPermissions"}},{priority:u.MEDIUM})}getDocUserPermissions(e){return this.workerQueue.enqueue({execute:()=>this.executor.getDocUserPermissions(e),meta:{docId:e.id,operation:"getDocUserPermissions"}},{priority:u.MEDIUM})}getSignatures(e){return this.workerQueue.enqueue({execute:()=>this.executor.getSignatures(e),meta:{docId:e.id,operation:"getSignatures"}},{priority:u.MEDIUM})}getBookmarks(e){return this.workerQueue.enqueue({execute:()=>this.executor.getBookmarks(e),meta:{docId:e.id,operation:"getBookmarks"}},{priority:u.MEDIUM})}setBookmarks(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.setBookmarks(e,t),meta:{docId:e.id,operation:"setBookmarks"}},{priority:u.MEDIUM})}deleteBookmarks(e){return this.workerQueue.enqueue({execute:()=>this.executor.deleteBookmarks(e),meta:{docId:e.id,operation:"deleteBookmarks"}},{priority:u.MEDIUM})}renderPage(e,t,r){return this.renderWithEncoding(()=>this.executor.renderPageRaw(e,t,r),r,e.id,t.index,u.CRITICAL)}renderPageRect(e,t,r,n){return this.renderWithEncoding(()=>this.executor.renderPageRect(e,t,r,n),n,e.id,t.index,u.HIGH)}renderPageRaw(e,t,r){return this.workerQueue.enqueue({execute:()=>this.executor.renderPageRaw(e,t,r),meta:{docId:e.id,pageIndex:t.index,operation:"renderPageRaw"}},{priority:u.HIGH})}renderPageRectRaw(e,t,r,n){return this.workerQueue.enqueue({execute:()=>this.executor.renderPageRect(e,t,r,n),meta:{docId:e.id,pageIndex:t.index,operation:"renderPageRectRaw"}},{priority:u.HIGH})}renderThumbnail(e,t,r){return this.renderWithEncoding(()=>this.executor.renderThumbnailRaw(e,t,r),r,e.id,t.index,u.MEDIUM)}renderPageAnnotation(e,t,r,n){return this.renderWithEncoding(()=>this.executor.renderPageAnnotationRaw(e,t,r,n),n,e.id,t.index,u.MEDIUM)}renderPageAnnotations(e,r,n){const o=new t,i=this.workerQueue.enqueue({execute:()=>this.executor.renderPageAnnotationsRaw(e,r,n),meta:{docId:e.id,pageIndex:r.index,operation:"renderPageAnnotationsRaw"}},{priority:u.MEDIUM}),a=o.abort.bind(o);return o.abort=e=>{i.abort(e),a(e)},i.wait(e=>{0===o.state.stage&&this.encodeAppearanceMap(e,n,o)},e=>{0===o.state.stage&&o.fail(e)}),o}renderPageAnnotationsRaw(e,t,r){return this.workerQueue.enqueue({execute:()=>this.executor.renderPageAnnotationsRaw(e,t,r),meta:{docId:e.id,pageIndex:t.index,operation:"renderPageAnnotationsRaw"}},{priority:u.MEDIUM})}renderWithEncoding(e,r,n,o,i=u.CRITICAL){const a=new t,s=this.workerQueue.enqueue({execute:()=>e(),meta:{docId:n,pageIndex:o,operation:"render"}},{priority:i}),c=a.abort.bind(a);return a.abort=e=>{s.abort(e),c(e)},s.wait(e=>{0===a.state.stage&&this.encodeImage(e,r,a)},e=>{0===a.state.stage&&a.fail(e)}),a}encodeImage(e,t,r){const o=(null==t?void 0:t.imageType)??"image/webp",i=(null==t?void 0:t.imageQuality)??(null==t?void 0:t.quality),a={data:new Uint8ClampedArray(e.data),width:e.width,height:e.height};this.options.imageConverter(()=>a,o,i).then(e=>r.resolve(e)).catch(e=>r.reject({code:n.Unknown,message:String(e)}))}encodeAppearanceMap(e,t,r){const o=(null==t?void 0:t.imageType)??"image/webp",i=(null==t?void 0:t.imageQuality)??(null==t?void 0:t.quality),a=e=>{const t={data:new Uint8ClampedArray(e.data),width:e.width,height:e.height};return this.options.imageConverter(()=>t,o,i)},u=[],s={},c=["normal","rollover","down"];for(const[t,r]of Object.entries(e)){const e={};s[t]=e;for(const t of c){const n=r[t];n&&u.push(a(n.data).then(r=>{e[t]={data:r,rect:n.rect}}))}}Promise.all(u).then(()=>{0===r.state.stage&&r.resolve(s)}).catch(e=>{0===r.state.stage&&r.reject({code:n.Unknown,message:String(e)})})}getPageAnnotations(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.getPageAnnotations(e,t),meta:{docId:e.id,pageIndex:t.index,operation:"getPageAnnotations"}},{priority:u.MEDIUM})}createPageAnnotation(e,t,r,n){return this.workerQueue.enqueue({execute:()=>this.executor.createPageAnnotation(e,t,r,n),meta:{docId:e.id,pageIndex:t.index,operation:"createPageAnnotation"}},{priority:u.MEDIUM})}updatePageAnnotation(e,t,r,n){return this.workerQueue.enqueue({execute:()=>this.executor.updatePageAnnotation(e,t,r,n),meta:{docId:e.id,pageIndex:t.index,operation:"updatePageAnnotation"}},{priority:u.MEDIUM})}removePageAnnotation(e,t,r){return this.workerQueue.enqueue({execute:()=>this.executor.removePageAnnotation(e,t,r),meta:{docId:e.id,pageIndex:t.index,operation:"removePageAnnotation"}},{priority:u.MEDIUM})}getAllAnnotations(e){const t=this.chunkArray(e.pages,500);this.logger.debug(c,d,`getAllAnnotations: ${e.pages.length} pages in ${t.length} chunks`);const r=new o({aggregate:e=>Object.assign({},...e)});return t.forEach((t,n)=>{const o=this.workerQueue.enqueue({execute:()=>this.executor.getAnnotationsBatch(e,t),meta:{docId:e.id,operation:"getAnnotationsBatch",chunkSize:t.length}},{priority:u.LOW});o.onProgress(e=>{r.progress({page:e.pageIndex,result:e.result})}),r.addChild(o,n)}),r.finalize(),r}getPageTextRects(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.getPageTextRects(e,t),meta:{docId:e.id,pageIndex:t.index,operation:"getPageTextRects"}},{priority:u.MEDIUM})}searchAllPages(e,t,r){const n=Array.isArray(null==r?void 0:r.flags)?r.flags.reduce((e,t)=>e|t,0):(null==r?void 0:r.flags)??0,i=this.chunkArray(e.pages,25);this.logger.debug(c,d,`searchAllPages: ${e.pages.length} pages in ${i.length} chunks`);const a=new o({aggregate:e=>{const t=e.flatMap(e=>Object.values(e).flat());return{results:t,total:t.length}}});return i.forEach((r,o)=>{const i=this.workerQueue.enqueue({execute:()=>this.executor.searchBatch(e,r,t,n),meta:{docId:e.id,operation:"searchBatch",chunkSize:r.length}},{priority:u.LOW});i.onProgress(e=>{a.progress({page:e.pageIndex,results:e.result})}),a.addChild(i,o)}),a.finalize(),a}getAttachments(e){return this.workerQueue.enqueue({execute:()=>this.executor.getAttachments(e),meta:{docId:e.id,operation:"getAttachments"}},{priority:u.MEDIUM})}addAttachment(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.addAttachment(e,t),meta:{docId:e.id,operation:"addAttachment"}},{priority:u.MEDIUM})}removeAttachment(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.removeAttachment(e,t),meta:{docId:e.id,operation:"removeAttachment"}},{priority:u.MEDIUM})}readAttachmentContent(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.readAttachmentContent(e,t),meta:{docId:e.id,operation:"readAttachmentContent"}},{priority:u.MEDIUM})}setFormFieldValue(e,t,r,n){return this.workerQueue.enqueue({execute:()=>this.executor.setFormFieldValue(e,t,r,n),meta:{docId:e.id,pageIndex:t.index,operation:"setFormFieldValue"}},{priority:u.MEDIUM})}flattenPage(e,t,r){return this.workerQueue.enqueue({execute:()=>this.executor.flattenPage(e,t,r),meta:{docId:e.id,pageIndex:t.index,operation:"flattenPage"}},{priority:u.MEDIUM})}extractPages(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.extractPages(e,t),meta:{docId:e.id,pageIndexes:t,operation:"extractPages"}},{priority:u.MEDIUM})}extractText(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.extractText(e,t),meta:{docId:e.id,pageIndexes:t,operation:"extractText"}},{priority:u.MEDIUM})}redactTextInRects(e,t,r,n){return this.workerQueue.enqueue({execute:()=>this.executor.redactTextInRects(e,t,r,n),meta:{docId:e.id,pageIndex:t.index,operation:"redactTextInRects"}},{priority:u.MEDIUM})}applyRedaction(e,t,r){return this.workerQueue.enqueue({execute:()=>this.executor.applyRedaction(e,t,r),meta:{docId:e.id,pageIndex:t.index,operation:"applyRedaction"}},{priority:u.MEDIUM})}applyAllRedactions(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.applyAllRedactions(e,t),meta:{docId:e.id,pageIndex:t.index,operation:"applyAllRedactions"}},{priority:u.MEDIUM})}flattenAnnotation(e,t,r){return this.workerQueue.enqueue({execute:()=>this.executor.flattenAnnotation(e,t,r),meta:{docId:e.id,pageIndex:t.index,operation:"flattenAnnotation"}},{priority:u.MEDIUM})}getTextSlices(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.getTextSlices(e,t),meta:{docId:e.id,slices:t,operation:"getTextSlices"}},{priority:u.MEDIUM})}getPageGlyphs(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.getPageGlyphs(e,t),meta:{docId:e.id,pageIndex:t.index,operation:"getPageGlyphs"}},{priority:u.MEDIUM})}getPageGeometry(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.getPageGeometry(e,t),meta:{docId:e.id,pageIndex:t.index,operation:"getPageGeometry"}},{priority:u.MEDIUM})}getPageTextRuns(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.getPageTextRuns(e,t),meta:{docId:e.id,pageIndex:t.index,operation:"getPageTextRuns"}},{priority:u.MEDIUM})}merge(e){return this.workerQueue.enqueue({execute:()=>this.executor.merge(e),meta:{docId:e.map(e=>e.id).join(","),operation:"merge"}},{priority:u.MEDIUM})}mergePages(e){return this.workerQueue.enqueue({execute:()=>this.executor.mergePages(e),meta:{docId:e.map(e=>e.docId).join(","),operation:"mergePages"}},{priority:u.MEDIUM})}preparePrintDocument(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.preparePrintDocument(e,t),meta:{docId:e.id,operation:"preparePrintDocument"}},{priority:u.MEDIUM})}saveAsCopy(e){return this.workerQueue.enqueue({execute:()=>this.executor.saveAsCopy(e),meta:{docId:e.id,operation:"saveAsCopy"}},{priority:u.MEDIUM})}closeDocument(e){return this.workerQueue.enqueue({execute:()=>this.executor.closeDocument(e),meta:{docId:e.id,operation:"closeDocument"}},{priority:u.MEDIUM})}closeAllDocuments(){return this.workerQueue.enqueue({execute:()=>this.executor.closeAllDocuments(),meta:{operation:"closeAllDocuments"}},{priority:u.MEDIUM})}setDocumentEncryption(e,t,r,n){return this.workerQueue.enqueue({execute:()=>this.executor.setDocumentEncryption(e,t,r,n),meta:{docId:e.id,operation:"setDocumentEncryption"}},{priority:u.MEDIUM})}removeEncryption(e){return this.workerQueue.enqueue({execute:()=>this.executor.removeEncryption(e),meta:{docId:e.id,operation:"removeEncryption"}},{priority:u.MEDIUM})}unlockOwnerPermissions(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.unlockOwnerPermissions(e,t),meta:{docId:e.id,operation:"unlockOwnerPermissions"}},{priority:u.MEDIUM})}isEncrypted(e){return this.workerQueue.enqueue({execute:()=>this.executor.isEncrypted(e),meta:{docId:e.id,operation:"isEncrypted"}},{priority:u.MEDIUM})}isOwnerUnlocked(e){return this.workerQueue.enqueue({execute:()=>this.executor.isOwnerUnlocked(e),meta:{docId:e.id,operation:"isOwnerUnlocked"}},{priority:u.MEDIUM})}}class g extends Error{constructor(e){super(e),this.name="ImageConverterError"}}const p=(e,t="image/webp",r)=>{if("undefined"==typeof document)return Promise.reject(new g("document is not available. This converter requires a browser environment."));const n=e(),o=new ImageData(n.data,n.width,n.height);return new Promise((e,n)=>{const i=document.createElement("canvas");i.width=o.width,i.height=o.height,i.getContext("2d").putImageData(o,0,0),i.toBlob(t=>{t?e(t):n(new g("Canvas toBlob returned null"))},t,r)})};function l(e){const t=async(t,r="image/webp",n)=>{try{const o=t(),i=new Uint8ClampedArray(o.data);return await e.encode({data:i,width:o.width,height:o.height},r,n)}catch(e){return console.warn("Worker encoding failed, falling back to main-thread Canvas:",e),p(t,r,n)}};return t.destroy=()=>e.destroy(),t}export{h as P,p as b,l as c}; |
Link issues
fixes #947
Summary By Copilot
Regression?
Risk
Verification
Packaging changes reviewed?
☑️ Self Check before Merge