@embedpdf/engines 2.10.1 → 2.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser-BpXqcQ3U.cjs +2 -0
- package/dist/browser-BpXqcQ3U.cjs.map +1 -0
- package/dist/{browser-BISJ9naB.js → browser-BuzIa755.js} +95 -6
- package/dist/browser-BuzIa755.js.map +1 -0
- package/dist/direct-engine-IJ8DmFTb.cjs +2 -0
- package/dist/direct-engine-IJ8DmFTb.cjs.map +1 -0
- package/dist/{direct-engine-4LZYs06h.js → direct-engine-oh_i6TH_.js} +351 -32
- package/dist/direct-engine-oh_i6TH_.js.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +18 -3
- package/dist/index.js.map +1 -1
- package/dist/lib/converters/index.cjs +1 -1
- package/dist/lib/converters/index.js +1 -1
- package/dist/lib/image-encoder/bmp.d.ts +13 -0
- package/dist/lib/image-encoder/image-encoder-worker.d.ts +1 -1
- package/dist/lib/image-encoder/worker-pool.d.ts +1 -1
- package/dist/lib/orchestrator/pdf-engine.d.ts +5 -0
- package/dist/lib/orchestrator/remote-executor.d.ts +5 -0
- package/dist/lib/pdfium/cache.d.ts +1 -0
- package/dist/lib/pdfium/engine.d.ts +51 -7
- package/dist/lib/pdfium/index.cjs +1 -1
- package/dist/lib/pdfium/index.js +4 -4
- package/dist/lib/pdfium/web/direct-engine.cjs +1 -1
- package/dist/lib/pdfium/web/direct-engine.js +3 -3
- package/dist/lib/pdfium/web/worker-engine.cjs +1 -1
- package/dist/lib/pdfium/web/worker-engine.cjs.map +1 -1
- package/dist/lib/pdfium/web/worker-engine.js +147 -5
- package/dist/lib/pdfium/web/worker-engine.js.map +1 -1
- package/dist/lib/webworker/engine.cjs +1 -1
- package/dist/lib/webworker/engine.cjs.map +1 -1
- package/dist/lib/webworker/engine.d.ts +10 -0
- package/dist/lib/webworker/engine.js +79 -0
- package/dist/lib/webworker/engine.js.map +1 -1
- package/dist/{pdf-engine-sORqXhQk.js → pdf-engine-D9v0RfKe.js} +56 -3
- package/dist/pdf-engine-D9v0RfKe.js.map +1 -0
- package/dist/pdf-engine-DeiICuca.cjs +2 -0
- package/dist/{pdf-engine-BeHgaBOW.cjs.map → pdf-engine-DeiICuca.cjs.map} +1 -1
- package/dist/preact/index.cjs +1 -1
- package/dist/preact/index.js +1 -1
- package/dist/react/index.cjs +1 -1
- package/dist/react/index.js +1 -1
- package/dist/svelte/index.cjs +1 -1
- package/dist/svelte/index.js +1 -1
- package/dist/vue/index.cjs +1 -1
- package/dist/vue/index.js +1 -1
- package/package.json +7 -7
- package/dist/browser-13mzox-R.cjs +0 -2
- package/dist/browser-13mzox-R.cjs.map +0 -1
- package/dist/browser-BISJ9naB.js.map +0 -1
- package/dist/direct-engine-4LZYs06h.js.map +0 -1
- package/dist/direct-engine-C29Euebw.cjs +0 -2
- package/dist/direct-engine-C29Euebw.cjs.map +0 -1
- package/dist/pdf-engine-BeHgaBOW.cjs +0 -2
- package/dist/pdf-engine-sORqXhQk.js.map +0 -1
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";const e=require("@embedpdf/models"),t="TaskQueue",r="Queue";var i=(e=>(e[e.CRITICAL=3]="CRITICAL",e[e.HIGH=2]="HIGH",e[e.MEDIUM=1]="MEDIUM",e[e.LOW=0]="LOW",e))(i||{});class n{constructor(t={}){this.queue=[],this.running=0,this.resultTasks=new Map,this.idleListeners=new Set;const{concurrency:r=1,comparator:i,ranker:n,onIdle:o,maxQueueSize:u,autoStart:a=!0,logger:s}=t;this.logger=s??new e.NoopLogger,this.opts={concurrency:Math.max(1,r),comparator:i,ranker:n,onIdle:o??(()=>{}),maxQueueSize:u??Number.POSITIVE_INFINITY,autoStart:a}}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(i,n={}){const o=this.generateId(),u=n.priority??1,a=new e.Task;if(this.queue.length>=this.opts.maxQueueSize){const e=new Error("Queue is full (maxQueueSize reached).");return a.reject(e),a}this.resultTasks.set(o,a);const s={id:o,priority:u,meta:n.meta??i.meta,executeFactory:i.execute};this.queue.push(s),this.logger.debug(t,r,`Task enqueued: ${o} | Priority: ${u} | Running: ${this.running} | Queued: ${this.queue.length}`);const d=a.abort.bind(a);return a.abort=e=>{this.logger.debug(t,r,`Task aborted: ${o}`),this.cancel(o),d(e)},this.opts.autoStart&&this.process(!0===n.fifo),a}cancel(e){const i=this.queue.length;this.queue=this.queue.filter(t=>t.id!==e||(t.cancelled=!0,!1)),this.resultTasks.delete(e),i!==this.queue.length&&(this.logger.debug(t,r,`Task cancelled and removed: ${e}`),this.kick())}kick(){queueMicrotask(()=>this.process())}async process(e=!1){for(this.logger.debug(t,r,`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(t,r,`Starting new task | Running: ${this.running} | Queued: ${this.queue.length}`),e||this.sortQueue();const i=this.queue.shift();if(i.cancelled){this.logger.debug(t,r,`Skipping cancelled task: ${i.id}`);continue}const n=this.resultTasks.get(i.id);n&&(this.running++,(async()=>{let e=null;try{if(e=i.executeFactory(),!e)throw new Error("Task factory returned null/undefined");e.wait(e=>{0===n.state.stage&&n.resolve(e)},e=>{0===n.state.stage&&("abort"===e.type?n.abort(e.reason):n.reject(e.reason))}),e.onProgress(e=>{n.progress(e)}),await e.toPromise()}catch(o){0===n.state.stage&&n.reject(o)}finally{this.resultTasks.delete(i.id),this.running--,this.logger.debug(t,r,`Task completed: ${i.id} | Running: ${this.running} | Queued: ${this.queue.length}`),this.isIdle()?this.notifyIdle():this.queue.length>0&&this.kick()}})().catch(e=>{this.logger.error(t,r,"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,i=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=i(e),n=i(t);return r!==n?n-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 o="PdfEngine",u="Orchestrator";exports.PdfEngine=class{constructor(t,r){this.executor=t,this.logger=r.logger??new e.NoopLogger,this.options={imageConverter:r.imageConverter,fetcher:r.fetcher??("undefined"!=typeof fetch?(e,t)=>fetch(e,t):void 0),logger:this.logger},this.workerQueue=new n({concurrency:1,autoStart:!0,logger:this.logger}),this.logger.debug(o,u,"PdfEngine orchestrator created")}chunkArray(e,t){const r=[];for(let i=0;i<e.length;i+=t)r.push(e.slice(i,i+t));return r}isSupport(t){const r=new e.Task;return r.resolve([e.PdfEngineOperation.Create,e.PdfEngineOperation.Read,e.PdfEngineOperation.Update,e.PdfEngineOperation.Delete]),r}destroy(){var t,r;const i=new e.Task;try{this.executor.destroy(),null==(r=(t=this.options.imageConverter).destroy)||r.call(t),i.resolve(!0)}catch(n){i.reject({code:e.PdfErrorCode.Unknown,message:String(n)})}return i}openDocumentUrl(t,r){const i=new e.Task;return(async()=>{try{if(!this.options.fetcher)throw new Error("Fetcher is not set");const e=await this.options.fetcher(t.url,null==r?void 0:r.requestOptions),n=await e.arrayBuffer(),o={id:t.id,content:n};this.openDocumentBuffer(o,{password:null==r?void 0:r.password,normalizeRotation:null==r?void 0:r.normalizeRotation}).wait(e=>i.resolve(e),e=>i.fail(e))}catch(n){i.reject({code:e.PdfErrorCode.Unknown,message:String(n)})}})(),i}openDocumentBuffer(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.openDocumentBuffer(e,t),meta:{docId:e.id,operation:"openDocumentBuffer"}},{priority:i.CRITICAL})}getMetadata(e){return this.workerQueue.enqueue({execute:()=>this.executor.getMetadata(e),meta:{docId:e.id,operation:"getMetadata"}},{priority:i.MEDIUM})}setMetadata(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.setMetadata(e,t),meta:{docId:e.id,operation:"setMetadata"}},{priority:i.MEDIUM})}getDocPermissions(e){return this.workerQueue.enqueue({execute:()=>this.executor.getDocPermissions(e),meta:{docId:e.id,operation:"getDocPermissions"}},{priority:i.MEDIUM})}getDocUserPermissions(e){return this.workerQueue.enqueue({execute:()=>this.executor.getDocUserPermissions(e),meta:{docId:e.id,operation:"getDocUserPermissions"}},{priority:i.MEDIUM})}getSignatures(e){return this.workerQueue.enqueue({execute:()=>this.executor.getSignatures(e),meta:{docId:e.id,operation:"getSignatures"}},{priority:i.MEDIUM})}getBookmarks(e){return this.workerQueue.enqueue({execute:()=>this.executor.getBookmarks(e),meta:{docId:e.id,operation:"getBookmarks"}},{priority:i.MEDIUM})}setBookmarks(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.setBookmarks(e,t),meta:{docId:e.id,operation:"setBookmarks"}},{priority:i.MEDIUM})}deleteBookmarks(e){return this.workerQueue.enqueue({execute:()=>this.executor.deleteBookmarks(e),meta:{docId:e.id,operation:"deleteBookmarks"}},{priority:i.MEDIUM})}renderPage(e,t,r){return this.renderWithEncoding(()=>this.executor.renderPageRaw(e,t,r),r,e.id,t.index,i.CRITICAL)}renderPageRect(e,t,r,n){return this.renderWithEncoding(()=>this.executor.renderPageRect(e,t,r,n),n,e.id,t.index,i.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:i.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:i.HIGH})}renderThumbnail(e,t,r){return this.renderWithEncoding(()=>this.executor.renderThumbnailRaw(e,t,r),r,e.id,t.index,i.MEDIUM)}renderPageAnnotation(e,t,r,n){return this.renderWithEncoding(()=>this.executor.renderPageAnnotationRaw(e,t,r,n),n,e.id,t.index,i.MEDIUM)}renderPageAnnotations(t,r,n){const o=new e.Task,u=this.workerQueue.enqueue({execute:()=>this.executor.renderPageAnnotationsRaw(t,r,n),meta:{docId:t.id,pageIndex:r.index,operation:"renderPageAnnotationsRaw"}},{priority:i.MEDIUM}),a=o.abort.bind(o);return o.abort=e=>{u.abort(e),a(e)},u.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:i.MEDIUM})}renderWithEncoding(t,r,n,o,u=i.CRITICAL){const a=new e.Task,s=this.workerQueue.enqueue({execute:()=>t(),meta:{docId:n,pageIndex:o,operation:"render"}},{priority:u}),d=a.abort.bind(a);return a.abort=e=>{s.abort(e),d(e)},s.wait(e=>{0===a.state.stage&&this.encodeImage(e,r,a)},e=>{0===a.state.stage&&a.fail(e)}),a}encodeImage(t,r,i){const n=(null==r?void 0:r.imageType)??"image/webp",o=null==r?void 0:r.quality,u={data:new Uint8ClampedArray(t.data),width:t.width,height:t.height};this.options.imageConverter(()=>u,n,o).then(e=>i.resolve(e)).catch(t=>i.reject({code:e.PdfErrorCode.Unknown,message:String(t)}))}encodeAppearanceMap(t,r,i){const n=(null==r?void 0:r.imageType)??"image/webp",o=null==r?void 0:r.imageQuality,u=e=>{const t={data:new Uint8ClampedArray(e.data),width:e.width,height:e.height};return this.options.imageConverter(()=>t,n,o)},a=[],s={},d=["normal","rollover","down"];for(const[e,c]of Object.entries(t)){const t={};s[e]=t;for(const e of d){const r=c[e];r&&a.push(u(r.data).then(i=>{t[e]={data:i,rect:r.rect}}))}}Promise.all(a).then(()=>{0===i.state.stage&&i.resolve(s)}).catch(t=>{0===i.state.stage&&i.reject({code:e.PdfErrorCode.Unknown,message:String(t)})})}getPageAnnotations(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.getPageAnnotations(e,t),meta:{docId:e.id,pageIndex:t.index,operation:"getPageAnnotations"}},{priority:i.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:i.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:i.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:i.MEDIUM})}getAllAnnotations(t){const r=this.chunkArray(t.pages,500);this.logger.debug(o,u,`getAllAnnotations: ${t.pages.length} pages in ${r.length} chunks`);const n=new e.CompoundTask({aggregate:e=>Object.assign({},...e)});return r.forEach((e,r)=>{const o=this.workerQueue.enqueue({execute:()=>this.executor.getAnnotationsBatch(t,e),meta:{docId:t.id,operation:"getAnnotationsBatch",chunkSize:e.length}},{priority:i.LOW});o.onProgress(e=>{n.progress({page:e.pageIndex,result:e.result})}),n.addChild(o,r)}),n.finalize(),n}getPageTextRects(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.getPageTextRects(e,t),meta:{docId:e.id,pageIndex:t.index,operation:"getPageTextRects"}},{priority:i.MEDIUM})}searchAllPages(t,r,n){const a=Array.isArray(null==n?void 0:n.flags)?n.flags.reduce((e,t)=>e|t,0):(null==n?void 0:n.flags)??0,s=this.chunkArray(t.pages,25);this.logger.debug(o,u,`searchAllPages: ${t.pages.length} pages in ${s.length} chunks`);const d=new e.CompoundTask({aggregate:e=>{const t=e.flatMap(e=>Object.values(e).flat());return{results:t,total:t.length}}});return s.forEach((e,n)=>{const o=this.workerQueue.enqueue({execute:()=>this.executor.searchBatch(t,e,r,a),meta:{docId:t.id,operation:"searchBatch",chunkSize:e.length}},{priority:i.LOW});o.onProgress(e=>{d.progress({page:e.pageIndex,results:e.result})}),d.addChild(o,n)}),d.finalize(),d}getAttachments(e){return this.workerQueue.enqueue({execute:()=>this.executor.getAttachments(e),meta:{docId:e.id,operation:"getAttachments"}},{priority:i.MEDIUM})}addAttachment(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.addAttachment(e,t),meta:{docId:e.id,operation:"addAttachment"}},{priority:i.MEDIUM})}removeAttachment(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.removeAttachment(e,t),meta:{docId:e.id,operation:"removeAttachment"}},{priority:i.MEDIUM})}readAttachmentContent(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.readAttachmentContent(e,t),meta:{docId:e.id,operation:"readAttachmentContent"}},{priority:i.MEDIUM})}getDocumentJavaScriptActions(e){return this.workerQueue.enqueue({execute:()=>this.executor.getDocumentJavaScriptActions(e),meta:{docId:e.id,operation:"getDocumentJavaScriptActions"}},{priority:i.MEDIUM})}getPageAnnoWidgets(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.getPageAnnoWidgets(e,t),meta:{docId:e.id,pageIndex:t.index,operation:"getPageAnnoWidgets"}},{priority:i.MEDIUM})}getPageWidgetJavaScriptActions(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.getPageWidgetJavaScriptActions(e,t),meta:{docId:e.id,pageIndex:t.index,operation:"getPageWidgetJavaScriptActions"}},{priority:i.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:i.MEDIUM})}setFormFieldState(e,t,r,n){return this.workerQueue.enqueue({execute:()=>this.executor.setFormFieldState(e,t,r,n),meta:{docId:e.id,pageIndex:t.index,operation:"setFormFieldState"}},{priority:i.MEDIUM})}renameWidgetField(e,t,r,n){return this.workerQueue.enqueue({execute:()=>this.executor.renameWidgetField(e,t,r,n),meta:{docId:e.id,pageIndex:t.index,operation:"renameWidgetField"}},{priority:i.MEDIUM})}shareWidgetField(e,t,r,n,o){return this.workerQueue.enqueue({execute:()=>this.executor.shareWidgetField(e,t,r,n,o),meta:{docId:e.id,pageIndex:t.index,operation:"shareWidgetField"}},{priority:i.MEDIUM})}regenerateWidgetAppearances(e,t,r){return this.workerQueue.enqueue({execute:()=>this.executor.regenerateWidgetAppearances(e,t,r),meta:{docId:e.id,pageIndex:t.index,operation:"regenerateWidgetAppearances"}},{priority:i.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:i.MEDIUM})}extractPages(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.extractPages(e,t),meta:{docId:e.id,pageIndexes:t,operation:"extractPages"}},{priority:i.MEDIUM})}extractText(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.extractText(e,t),meta:{docId:e.id,pageIndexes:t,operation:"extractText"}},{priority:i.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:i.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:i.MEDIUM})}applyAllRedactions(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.applyAllRedactions(e,t),meta:{docId:e.id,pageIndex:t.index,operation:"applyAllRedactions"}},{priority:i.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:i.MEDIUM})}getTextSlices(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.getTextSlices(e,t),meta:{docId:e.id,slices:t,operation:"getTextSlices"}},{priority:i.MEDIUM})}getPageGlyphs(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.getPageGlyphs(e,t),meta:{docId:e.id,pageIndex:t.index,operation:"getPageGlyphs"}},{priority:i.MEDIUM})}getPageGeometry(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.getPageGeometry(e,t),meta:{docId:e.id,pageIndex:t.index,operation:"getPageGeometry"}},{priority:i.MEDIUM})}getPageTextRuns(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.getPageTextRuns(e,t),meta:{docId:e.id,pageIndex:t.index,operation:"getPageTextRuns"}},{priority:i.MEDIUM})}merge(e){return this.workerQueue.enqueue({execute:()=>this.executor.merge(e),meta:{docId:e.map(e=>e.id).join(","),operation:"merge"}},{priority:i.MEDIUM})}mergePages(e){return this.workerQueue.enqueue({execute:()=>this.executor.mergePages(e),meta:{docId:e.map(e=>e.docId).join(","),operation:"mergePages"}},{priority:i.MEDIUM})}preparePrintDocument(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.preparePrintDocument(e,t),meta:{docId:e.id,operation:"preparePrintDocument"}},{priority:i.MEDIUM})}saveAsCopy(e){return this.workerQueue.enqueue({execute:()=>this.executor.saveAsCopy(e),meta:{docId:e.id,operation:"saveAsCopy"}},{priority:i.MEDIUM})}closeDocument(e){return this.workerQueue.enqueue({execute:()=>this.executor.closeDocument(e),meta:{docId:e.id,operation:"closeDocument"}},{priority:i.MEDIUM})}closeAllDocuments(){return this.workerQueue.enqueue({execute:()=>this.executor.closeAllDocuments(),meta:{operation:"closeAllDocuments"}},{priority:i.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:i.MEDIUM})}removeEncryption(e){return this.workerQueue.enqueue({execute:()=>this.executor.removeEncryption(e),meta:{docId:e.id,operation:"removeEncryption"}},{priority:i.MEDIUM})}unlockOwnerPermissions(e,t){return this.workerQueue.enqueue({execute:()=>this.executor.unlockOwnerPermissions(e,t),meta:{docId:e.id,operation:"unlockOwnerPermissions"}},{priority:i.MEDIUM})}isEncrypted(e){return this.workerQueue.enqueue({execute:()=>this.executor.isEncrypted(e),meta:{docId:e.id,operation:"isEncrypted"}},{priority:i.MEDIUM})}isOwnerUnlocked(e){return this.workerQueue.enqueue({execute:()=>this.executor.isOwnerUnlocked(e),meta:{docId:e.id,operation:"isOwnerUnlocked"}},{priority:i.MEDIUM})}};
|
|
2
|
-
//# sourceMappingURL=pdf-engine-BeHgaBOW.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pdf-engine-sORqXhQk.js","sources":["../src/lib/orchestrator/task-queue.ts","../src/lib/orchestrator/pdf-engine.ts"],"sourcesContent":["import { Task, TaskError, Logger, NoopLogger } from '@embedpdf/models';\n\nconst LOG_SOURCE = 'TaskQueue';\nconst LOG_CATEGORY = 'Queue';\n\nexport enum Priority {\n CRITICAL = 3,\n HIGH = 2,\n MEDIUM = 1,\n LOW = 0,\n}\n\n// ============================================================================\n// Type Utilities\n// ============================================================================\n\n/**\n * Extract result type from Task\n */\nexport type ExtractTaskResult<T> = T extends Task<infer R, any, any> ? R : never;\n\n/**\n * Extract error type from Task\n */\nexport type ExtractTaskError<T> = T extends Task<any, infer D, any> ? D : never;\n\n/**\n * Extract progress type from Task\n */\nexport type ExtractTaskProgress<T> = T extends Task<any, any, infer P> ? P : never;\n\n// ============================================================================\n// Queue Interfaces\n// ============================================================================\n\nexport interface QueuedTask<T extends Task<any, any, any>> {\n id: string;\n priority: Priority;\n meta?: Record<string, unknown>;\n executeFactory: () => T; // Factory function - called when it's time to execute!\n cancelled?: boolean;\n}\n\nexport interface EnqueueOptions {\n priority?: Priority;\n meta?: Record<string, unknown>;\n fifo?: boolean;\n}\n\nexport type TaskComparator = (a: QueuedTask<any>, b: QueuedTask<any>) => number;\nexport type TaskRanker = (task: QueuedTask<any>) => number;\n\nexport interface WorkerTaskQueueOptions {\n concurrency?: number;\n comparator?: TaskComparator;\n ranker?: TaskRanker;\n onIdle?: () => void;\n maxQueueSize?: number;\n autoStart?: boolean;\n logger?: Logger;\n}\n\n// ============================================================================\n// WorkerTaskQueue - Corrected with Deferred Execution\n// ============================================================================\n\nexport class WorkerTaskQueue {\n private queue: QueuedTask<any>[] = [];\n private running = 0;\n private resultTasks = new Map<string, Task<any, any, any>>();\n private logger: Logger;\n private opts: Required<Omit<WorkerTaskQueueOptions, 'comparator' | 'ranker' | 'logger'>> & {\n comparator?: TaskComparator;\n ranker?: TaskRanker;\n };\n\n constructor(options: WorkerTaskQueueOptions = {}) {\n const {\n concurrency = 1,\n comparator,\n ranker,\n onIdle,\n maxQueueSize,\n autoStart = true,\n logger,\n } = options;\n this.logger = logger ?? new NoopLogger();\n this.opts = {\n concurrency: Math.max(1, concurrency),\n comparator,\n ranker,\n onIdle: onIdle ?? (() => {}),\n maxQueueSize: maxQueueSize ?? Number.POSITIVE_INFINITY,\n autoStart,\n };\n }\n\n setComparator(comparator?: TaskComparator): void {\n this.opts.comparator = comparator;\n }\n\n setRanker(ranker?: TaskRanker): void {\n this.opts.ranker = ranker;\n }\n\n size(): number {\n return this.queue.length;\n }\n\n inFlight(): number {\n return this.running;\n }\n\n isIdle(): boolean {\n return this.queue.length === 0 && this.running === 0;\n }\n\n async drain(): Promise<void> {\n if (this.isIdle()) return;\n await new Promise<void>((resolve) => {\n const check = () => {\n if (this.isIdle()) {\n this.offIdle(check);\n resolve();\n }\n };\n this.onIdle(check);\n });\n }\n\n private idleListeners = new Set<() => void>();\n private notifyIdle() {\n if (this.isIdle()) {\n [...this.idleListeners].forEach((fn) => fn());\n this.idleListeners.clear();\n this.opts.onIdle();\n }\n }\n private onIdle(fn: () => void) {\n this.idleListeners.add(fn);\n }\n private offIdle(fn: () => void) {\n this.idleListeners.delete(fn);\n }\n\n /**\n * Enqueue a task factory - with automatic type inference!\n *\n * The factory function is ONLY called when it's the task's turn to execute.\n *\n * Usage:\n * const task = queue.enqueue({\n * execute: () => this.executor.getMetadata(doc), // Factory - not called yet!\n * meta: { operation: 'getMetadata' }\n * }, { priority: Priority.LOW });\n *\n * The returned task has the SAME type as executor.getMetadata() would return!\n */\n enqueue<T extends Task<any, any, any>>(\n taskDef: {\n execute: () => T; // Factory function that returns Task when called!\n meta?: Record<string, unknown>;\n },\n options: EnqueueOptions = {},\n ): T {\n const id = this.generateId();\n const priority = options.priority ?? Priority.MEDIUM;\n\n // Create a proxy task that we return to the user\n // This task bridges to the real task that will be created later\n const resultTask = new Task<\n ExtractTaskResult<T>,\n ExtractTaskError<T>,\n ExtractTaskProgress<T>\n >() as T;\n\n if (this.queue.length >= this.opts.maxQueueSize) {\n const error = new Error('Queue is full (maxQueueSize reached).');\n resultTask.reject(error as any);\n return resultTask;\n }\n\n // Store the result task for bridging\n this.resultTasks.set(id, resultTask);\n\n const queuedTask: QueuedTask<T> = {\n id,\n priority,\n meta: options.meta ?? taskDef.meta,\n executeFactory: taskDef.execute, // Store factory, don't call it yet!\n };\n\n this.queue.push(queuedTask);\n\n this.logger.debug(\n LOG_SOURCE,\n LOG_CATEGORY,\n `Task enqueued: ${id} | Priority: ${priority} | Running: ${this.running} | Queued: ${this.queue.length}`,\n );\n\n // Set up automatic abort handling\n // When result task is aborted externally, remove from queue\n const originalAbort = resultTask.abort.bind(resultTask);\n resultTask.abort = (reason: any) => {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, `Task aborted: ${id}`);\n this.cancel(id);\n originalAbort(reason);\n };\n\n if (this.opts.autoStart) this.process(options.fifo === true);\n\n return resultTask;\n }\n\n /**\n * Cancel/remove a task from the queue\n */\n private cancel(taskId: string): void {\n const before = this.queue.length;\n this.queue = this.queue.filter((t) => {\n if (t.id === taskId) {\n t.cancelled = true;\n return false;\n }\n return true;\n });\n\n this.resultTasks.delete(taskId);\n\n if (before !== this.queue.length) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, `Task cancelled and removed: ${taskId}`);\n this.kick();\n }\n }\n\n private kick() {\n queueMicrotask(() => this.process());\n }\n\n private async process(fifo = false): Promise<void> {\n this.logger.debug(\n LOG_SOURCE,\n LOG_CATEGORY,\n `process() called | Running: ${this.running} | Concurrency: ${this.opts.concurrency} | Queued: ${this.queue.length}`,\n );\n\n while (this.running < this.opts.concurrency && this.queue.length > 0) {\n this.logger.debug(\n LOG_SOURCE,\n LOG_CATEGORY,\n `Starting new task | Running: ${this.running} | Queued: ${this.queue.length}`,\n );\n\n if (!fifo) this.sortQueue();\n\n const queuedTask = this.queue.shift()!;\n if (queuedTask.cancelled) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, `Skipping cancelled task: ${queuedTask.id}`);\n continue;\n }\n\n const resultTask = this.resultTasks.get(queuedTask.id);\n if (!resultTask) continue; // Shouldn't happen, but guard anyway.\n\n this.running++;\n\n // NOW call the factory to create the real task!\n (async () => {\n let realTask: Task<any, any, any> | null = null;\n\n try {\n // Call the factory function NOW - this is when execution actually starts\n realTask = queuedTask.executeFactory();\n\n // Guard against null/undefined return from factory\n if (!realTask) {\n throw new Error('Task factory returned null/undefined');\n }\n\n // Bridge the real task to the result task\n realTask.wait(\n (result) => {\n if (resultTask.state.stage === 0 /* Pending */) {\n resultTask.resolve(result);\n }\n },\n (error) => {\n if (resultTask.state.stage === 0 /* Pending */) {\n if (error.type === 'abort') {\n resultTask.abort(error.reason);\n } else {\n resultTask.reject(error.reason);\n }\n }\n },\n );\n\n // Bridge progress\n realTask.onProgress((progress) => {\n resultTask.progress(progress);\n });\n\n // Wait for completion\n await realTask.toPromise();\n } catch (error) {\n // Handle any errors from factory or execution\n if (resultTask.state.stage === 0 /* Pending */) {\n resultTask.reject(error as any);\n }\n } finally {\n this.resultTasks.delete(queuedTask.id);\n this.running--;\n\n this.logger.debug(\n LOG_SOURCE,\n LOG_CATEGORY,\n `Task completed: ${queuedTask.id} | Running: ${this.running} | Queued: ${this.queue.length}`,\n );\n\n if (this.isIdle()) {\n this.notifyIdle();\n } else if (this.queue.length > 0) {\n this.kick();\n }\n }\n })().catch((error) => {\n this.logger.error(\n LOG_SOURCE,\n LOG_CATEGORY,\n 'Unhandled error in task execution wrapper:',\n error,\n );\n this.running = Math.max(0, this.running - 1);\n if (this.isIdle()) {\n this.notifyIdle();\n } else if (this.queue.length > 0) {\n this.kick();\n }\n });\n }\n }\n\n private sortQueue(): void {\n const { comparator, ranker } = this.opts;\n if (comparator) {\n this.queue.sort(comparator);\n return;\n }\n\n const rankCache = new Map<string, number>();\n const getRank = (t: QueuedTask<any>) => {\n if (!ranker) return this.defaultRank(t);\n if (!rankCache.has(t.id)) rankCache.set(t.id, ranker(t));\n return rankCache.get(t.id)!;\n };\n\n this.queue.sort((a, b) => {\n if (a.priority !== b.priority) return b.priority - a.priority;\n const ar = getRank(a);\n const br = getRank(b);\n if (ar !== br) return br - ar;\n return this.extractTime(a.id) - this.extractTime(b.id);\n });\n }\n\n private defaultRank(_task: QueuedTask<any>): number {\n return 0;\n }\n\n private generateId(): string {\n if (typeof crypto !== 'undefined' && 'randomUUID' in crypto) {\n return crypto.randomUUID();\n }\n return `${Date.now()}-${Math.random().toString(36).slice(2)}`;\n }\n\n private extractTime(id: string): number {\n const t = Number(id.split('-')[0]);\n return Number.isFinite(t) ? t : 0;\n }\n}\n","import {\n BatchProgress,\n Logger,\n NoopLogger,\n PdfEngine as IPdfEngine,\n PdfDocumentObject,\n PdfPageObject,\n PdfTask,\n PdfErrorReason,\n PdfFileUrl,\n PdfFile,\n PdfOpenDocumentUrlOptions,\n PdfOpenDocumentBufferOptions,\n PdfMetadataObject,\n PdfBookmarksObject,\n PdfBookmarkObject,\n PdfRenderPageOptions,\n PdfRenderThumbnailOptions,\n PdfRenderPageAnnotationOptions,\n PdfAnnotationObject,\n PdfTextRectObject,\n PdfSearchAllPagesOptions,\n SearchAllPagesResult,\n PdfPageSearchProgress,\n PdfAnnotationsProgress,\n PdfAttachmentObject,\n PdfAddAttachmentParams,\n PdfDocumentJavaScriptActionObject,\n PdfWidgetAnnoObject,\n PdfWidgetAnnoField,\n PdfWidgetJavaScriptActionObject,\n FormFieldValue,\n PdfFlattenPageOptions,\n PdfPageFlattenResult,\n PdfRedactTextOptions,\n Rect,\n PageTextSlice,\n PdfGlyphObject,\n PdfPageGeometry,\n PdfPageTextRuns,\n PdfPrintOptions,\n PdfEngineFeature,\n PdfEngineOperation,\n PdfSignatureObject,\n AnnotationCreateContext,\n Task,\n PdfErrorCode,\n SearchResult,\n CompoundTask,\n ImageDataLike,\n IPdfiumExecutor,\n AnnotationAppearanceMap,\n} from '@embedpdf/models';\nimport { WorkerTaskQueue, Priority } from './task-queue';\nimport type { ImageDataConverter } from '../converters/types';\n\n// Re-export for convenience\nexport type { ImageDataConverter } from '../converters/types';\nexport type { ImageDataLike, IPdfiumExecutor, BatchProgress } from '@embedpdf/models';\n\nconst LOG_SOURCE = 'PdfEngine';\nconst LOG_CATEGORY = 'Orchestrator';\n\nexport interface PdfEngineOptions<T> {\n /**\n * Image data converter (for encoding raw image data to Blob/other format)\n */\n imageConverter: ImageDataConverter<T>;\n /**\n * Fetch function for fetching remote URLs\n */\n fetcher?: typeof fetch;\n /**\n * Logger instance\n */\n logger?: Logger;\n}\n\n/**\n * PdfEngine orchestrator\n *\n * This is the \"smart\" layer that:\n * - Implements the PdfEngine interface\n * - Uses WorkerTaskQueue for priority-based task scheduling\n * - Orchestrates complex multi-page operations\n * - Handles image encoding with separate encoder pool\n * - Manages visibility-based task ranking\n */\nexport class PdfEngine<T = Blob> implements IPdfEngine<T> {\n private executor: IPdfiumExecutor;\n private workerQueue: WorkerTaskQueue;\n private logger: Logger;\n private options: PdfEngineOptions<T>;\n\n constructor(executor: IPdfiumExecutor, options: PdfEngineOptions<T>) {\n this.executor = executor;\n this.logger = options.logger ?? new NoopLogger();\n this.options = {\n imageConverter: options.imageConverter,\n fetcher:\n options.fetcher ??\n (typeof fetch !== 'undefined' ? (url, init) => fetch(url, init) : undefined),\n logger: this.logger,\n };\n\n // Create worker queue with single concurrency (PDFium is single-threaded)\n this.workerQueue = new WorkerTaskQueue({\n concurrency: 1,\n autoStart: true,\n logger: this.logger,\n });\n\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'PdfEngine orchestrator created');\n }\n\n /**\n * Split an array into chunks of a given size\n */\n private chunkArray<U>(items: U[], chunkSize: number): U[][] {\n const chunks: U[][] = [];\n for (let i = 0; i < items.length; i += chunkSize) {\n chunks.push(items.slice(i, i + chunkSize));\n }\n return chunks;\n }\n\n // ========== IPdfEngine Implementation ==========\n\n isSupport(feature: PdfEngineFeature): PdfTask<PdfEngineOperation[]> {\n const task = new Task<PdfEngineOperation[], PdfErrorReason>();\n // PDFium supports all features\n task.resolve([\n PdfEngineOperation.Create,\n PdfEngineOperation.Read,\n PdfEngineOperation.Update,\n PdfEngineOperation.Delete,\n ]);\n return task;\n }\n\n destroy(): PdfTask<boolean> {\n const task = new Task<boolean, PdfErrorReason>();\n try {\n this.executor.destroy();\n // Clean up image converter resources (e.g., encoder worker pool)\n this.options.imageConverter.destroy?.();\n task.resolve(true);\n } catch (error) {\n task.reject({ code: PdfErrorCode.Unknown, message: String(error) });\n }\n return task;\n }\n\n openDocumentUrl(\n file: PdfFileUrl,\n options?: PdfOpenDocumentUrlOptions,\n ): PdfTask<PdfDocumentObject> {\n const task = new Task<PdfDocumentObject, PdfErrorReason>();\n\n // Handle fetch in main thread (not worker!)\n (async () => {\n try {\n if (!this.options.fetcher) {\n throw new Error('Fetcher is not set');\n }\n\n const response = await this.options.fetcher(file.url, options?.requestOptions);\n const arrayBuf = await response.arrayBuffer();\n\n const pdfFile: PdfFile = {\n id: file.id,\n content: arrayBuf,\n };\n\n // Then open in worker - use wait() to properly propagate task errors\n this.openDocumentBuffer(pdfFile, {\n password: options?.password,\n normalizeRotation: options?.normalizeRotation,\n }).wait(\n (doc) => task.resolve(doc),\n (error) => task.fail(error),\n );\n } catch (error) {\n // This only catches fetch errors (network issues, etc.)\n task.reject({ code: PdfErrorCode.Unknown, message: String(error) });\n }\n })();\n\n return task;\n }\n\n openDocumentBuffer(\n file: PdfFile,\n options?: PdfOpenDocumentBufferOptions,\n ): PdfTask<PdfDocumentObject> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.openDocumentBuffer(file, options),\n meta: { docId: file.id, operation: 'openDocumentBuffer' },\n },\n { priority: Priority.CRITICAL },\n );\n }\n\n getMetadata(doc: PdfDocumentObject): PdfTask<PdfMetadataObject> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getMetadata(doc),\n meta: { docId: doc.id, operation: 'getMetadata' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n setMetadata(doc: PdfDocumentObject, metadata: Partial<PdfMetadataObject>): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.setMetadata(doc, metadata),\n meta: { docId: doc.id, operation: 'setMetadata' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n getDocPermissions(doc: PdfDocumentObject): PdfTask<number> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getDocPermissions(doc),\n meta: { docId: doc.id, operation: 'getDocPermissions' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n getDocUserPermissions(doc: PdfDocumentObject): PdfTask<number> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getDocUserPermissions(doc),\n meta: { docId: doc.id, operation: 'getDocUserPermissions' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n getSignatures(doc: PdfDocumentObject): PdfTask<PdfSignatureObject[]> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getSignatures(doc),\n meta: { docId: doc.id, operation: 'getSignatures' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n getBookmarks(doc: PdfDocumentObject): PdfTask<PdfBookmarksObject> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getBookmarks(doc),\n meta: { docId: doc.id, operation: 'getBookmarks' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n setBookmarks(doc: PdfDocumentObject, bookmarks: PdfBookmarkObject[]): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.setBookmarks(doc, bookmarks),\n meta: { docId: doc.id, operation: 'setBookmarks' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n deleteBookmarks(doc: PdfDocumentObject): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.deleteBookmarks(doc),\n meta: { docId: doc.id, operation: 'deleteBookmarks' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n // ========== Rendering with Encoding ==========\n\n renderPage(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n options?: PdfRenderPageOptions,\n ): PdfTask<T> {\n return this.renderWithEncoding(\n () => this.executor.renderPageRaw(doc, page, options),\n options,\n doc.id,\n page.index,\n Priority.CRITICAL,\n );\n }\n\n renderPageRect(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n rect: Rect,\n options?: PdfRenderPageOptions,\n ): PdfTask<T> {\n return this.renderWithEncoding(\n () => this.executor.renderPageRect(doc, page, rect, options),\n options,\n doc.id,\n page.index,\n Priority.HIGH,\n );\n }\n\n // ========== Raw Rendering (no encoding) ==========\n\n renderPageRaw(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n options?: PdfRenderPageOptions,\n ): PdfTask<ImageDataLike> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.renderPageRaw(doc, page, options),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'renderPageRaw' },\n },\n { priority: Priority.HIGH },\n );\n }\n\n renderPageRectRaw(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n rect: Rect,\n options?: PdfRenderPageOptions,\n ): PdfTask<ImageDataLike> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.renderPageRect(doc, page, rect, options),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'renderPageRectRaw' },\n },\n { priority: Priority.HIGH },\n );\n }\n\n renderThumbnail(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n options?: PdfRenderThumbnailOptions,\n ): PdfTask<T> {\n return this.renderWithEncoding(\n () => this.executor.renderThumbnailRaw(doc, page, options),\n options,\n doc.id,\n page.index,\n Priority.MEDIUM,\n );\n }\n\n renderPageAnnotation(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfAnnotationObject,\n options?: PdfRenderPageAnnotationOptions,\n ): PdfTask<T> {\n return this.renderWithEncoding(\n () => this.executor.renderPageAnnotationRaw(doc, page, annotation, options),\n options,\n doc.id,\n page.index,\n Priority.MEDIUM,\n );\n }\n\n renderPageAnnotations(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n options?: PdfRenderPageAnnotationOptions,\n ): PdfTask<AnnotationAppearanceMap<T>> {\n const resultTask = new Task<AnnotationAppearanceMap<T>, PdfErrorReason>();\n\n const renderHandle = this.workerQueue.enqueue(\n {\n execute: () => this.executor.renderPageAnnotationsRaw(doc, page, options),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'renderPageAnnotationsRaw' },\n },\n { priority: Priority.MEDIUM },\n );\n\n // Wire up abort: when resultTask is aborted, also abort the queue task\n const originalAbort = resultTask.abort.bind(resultTask);\n resultTask.abort = (reason) => {\n renderHandle.abort(reason);\n originalAbort(reason);\n };\n\n renderHandle.wait(\n (rawMap) => {\n if (resultTask.state.stage !== 0 /* Pending */) {\n return;\n }\n this.encodeAppearanceMap(rawMap, options, resultTask);\n },\n (error) => {\n if (resultTask.state.stage === 0 /* Pending */) {\n resultTask.fail(error);\n }\n },\n );\n\n return resultTask;\n }\n\n renderPageAnnotationsRaw(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n options?: PdfRenderPageAnnotationOptions,\n ): PdfTask<AnnotationAppearanceMap<ImageDataLike>> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.renderPageAnnotationsRaw(doc, page, options),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'renderPageAnnotationsRaw' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n /**\n * Helper to render and encode in two stages with priority queue\n */\n private renderWithEncoding(\n renderFn: () => PdfTask<ImageDataLike>,\n options?: PdfRenderPageOptions | PdfRenderThumbnailOptions | PdfRenderPageAnnotationOptions,\n docId?: string,\n pageIndex?: number,\n priority: Priority = Priority.CRITICAL,\n ): PdfTask<T> {\n const resultTask = new Task<T, PdfErrorReason>();\n\n // Step 1: Add HIGH/MEDIUM priority task to render raw bytes\n const renderHandle = this.workerQueue.enqueue(\n {\n execute: () => renderFn(),\n meta: { docId, pageIndex, operation: 'render' },\n },\n { priority },\n );\n\n // Wire up abort: when resultTask is aborted, also abort the queue task\n const originalAbort = resultTask.abort.bind(resultTask);\n resultTask.abort = (reason) => {\n renderHandle.abort(reason); // Cancel the queue task!\n originalAbort(reason);\n };\n\n renderHandle.wait(\n (rawImageData) => {\n // Check if resultTask was already aborted before encoding\n if (resultTask.state.stage !== 0 /* Pending */) {\n return;\n }\n this.encodeImage(rawImageData, options, resultTask);\n },\n (error) => {\n // Only forward error if resultTask is still pending\n if (resultTask.state.stage === 0 /* Pending */) {\n resultTask.fail(error);\n }\n },\n );\n\n return resultTask;\n }\n\n /**\n * Encode image using encoder pool or inline\n */\n private encodeImage(\n rawImageData: ImageDataLike,\n options: any,\n resultTask: Task<T, PdfErrorReason>,\n ): void {\n const imageType = options?.imageType ?? 'image/webp';\n const quality = options?.quality;\n\n // Convert to plain object for encoding\n const plainImageData = {\n data: new Uint8ClampedArray(rawImageData.data),\n width: rawImageData.width,\n height: rawImageData.height,\n };\n\n this.options\n .imageConverter(() => plainImageData, imageType, quality)\n .then((result) => resultTask.resolve(result))\n .catch((error) => resultTask.reject({ code: PdfErrorCode.Unknown, message: String(error) }));\n }\n\n /**\n * Encode a full annotation appearance map to the output type T.\n */\n private encodeAppearanceMap(\n rawMap: AnnotationAppearanceMap<ImageDataLike>,\n options: PdfRenderPageAnnotationOptions | undefined,\n resultTask: Task<AnnotationAppearanceMap<T>, PdfErrorReason>,\n ): void {\n const imageType = options?.imageType ?? 'image/webp';\n const quality = options?.imageQuality;\n\n const convertImage = (rawImageData: ImageDataLike): Promise<T> => {\n const plainImageData = {\n data: new Uint8ClampedArray(rawImageData.data),\n width: rawImageData.width,\n height: rawImageData.height,\n };\n return this.options.imageConverter(() => plainImageData, imageType, quality);\n };\n\n const jobs: Promise<void>[] = [];\n const encodedMap: AnnotationAppearanceMap<T> = {};\n const modes: Array<'normal' | 'rollover' | 'down'> = ['normal', 'rollover', 'down'];\n\n for (const [annotationId, appearances] of Object.entries(rawMap)) {\n const encodedAppearances: NonNullable<AnnotationAppearanceMap<T>[string]> = {};\n encodedMap[annotationId] = encodedAppearances;\n\n for (const mode of modes) {\n const appearance = appearances[mode];\n if (!appearance) continue;\n\n jobs.push(\n convertImage(appearance.data).then((encodedData) => {\n encodedAppearances[mode] = {\n data: encodedData,\n rect: appearance.rect,\n };\n }),\n );\n }\n }\n\n Promise.all(jobs)\n .then(() => {\n if (resultTask.state.stage === 0 /* Pending */) {\n resultTask.resolve(encodedMap);\n }\n })\n .catch((error) => {\n if (resultTask.state.stage === 0 /* Pending */) {\n resultTask.reject({ code: PdfErrorCode.Unknown, message: String(error) });\n }\n });\n }\n\n // ========== Annotations ==========\n\n getPageAnnotations(doc: PdfDocumentObject, page: PdfPageObject): PdfTask<PdfAnnotationObject[]> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getPageAnnotations(doc, page),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'getPageAnnotations' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n createPageAnnotation<A extends PdfAnnotationObject>(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: A,\n context?: AnnotationCreateContext<A>,\n ): PdfTask<string> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.createPageAnnotation(doc, page, annotation, context),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'createPageAnnotation' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n updatePageAnnotation(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfAnnotationObject,\n options?: { regenerateAppearance?: boolean },\n ): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.updatePageAnnotation(doc, page, annotation, options),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'updatePageAnnotation' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n removePageAnnotation(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfAnnotationObject,\n ): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.removePageAnnotation(doc, page, annotation),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'removePageAnnotation' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n /**\n * Get all annotations across all pages\n * Uses batched operations to reduce queue overhead\n */\n getAllAnnotations(\n doc: PdfDocumentObject,\n ): CompoundTask<Record<number, PdfAnnotationObject[]>, PdfErrorReason, PdfAnnotationsProgress> {\n // Chunk pages for batched processing\n const chunks = this.chunkArray(doc.pages, 500);\n\n this.logger.debug(\n LOG_SOURCE,\n LOG_CATEGORY,\n `getAllAnnotations: ${doc.pages.length} pages in ${chunks.length} chunks`,\n );\n\n // Create compound task for result aggregation\n const compound = new CompoundTask<\n Record<number, PdfAnnotationObject[]>,\n PdfErrorReason,\n PdfAnnotationsProgress\n >({\n aggregate: (results) => Object.assign({}, ...results),\n });\n\n // Create one task per chunk and wire up progress forwarding\n chunks.forEach((chunkPages, chunkIndex) => {\n const batchTask = this.workerQueue.enqueue(\n {\n execute: () => this.executor.getAnnotationsBatch(doc, chunkPages),\n meta: { docId: doc.id, operation: 'getAnnotationsBatch', chunkSize: chunkPages.length },\n },\n { priority: Priority.LOW },\n );\n\n // Forward batch progress (per-page) to compound task\n batchTask.onProgress((batchProgress: BatchProgress<PdfAnnotationObject[]>) => {\n compound.progress({\n page: batchProgress.pageIndex,\n result: batchProgress.result,\n });\n });\n\n compound.addChild(batchTask, chunkIndex);\n });\n\n compound.finalize();\n return compound;\n }\n\n getPageTextRects(doc: PdfDocumentObject, page: PdfPageObject): PdfTask<PdfTextRectObject[]> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getPageTextRects(doc, page),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'getPageTextRects' },\n },\n {\n priority: Priority.MEDIUM,\n },\n );\n }\n\n // ========== Search ==========\n\n /**\n * Search across all pages\n * Uses batched operations to reduce queue overhead\n */\n searchAllPages(\n doc: PdfDocumentObject,\n keyword: string,\n options?: PdfSearchAllPagesOptions,\n ): PdfTask<SearchAllPagesResult, PdfPageSearchProgress> {\n const flags = Array.isArray(options?.flags)\n ? options.flags.reduce((acc, flag) => acc | flag, 0)\n : (options?.flags ?? 0);\n\n // Chunk pages for batched processing\n const chunks = this.chunkArray(doc.pages, 25);\n\n this.logger.debug(\n LOG_SOURCE,\n LOG_CATEGORY,\n `searchAllPages: ${doc.pages.length} pages in ${chunks.length} chunks`,\n );\n\n // Create compound task for result aggregation\n const compound = new CompoundTask<SearchAllPagesResult, PdfErrorReason, PdfPageSearchProgress>({\n aggregate: (results) => {\n // Merge all batch results into a flat array\n const allResults = results.flatMap((batchResult: Record<number, SearchResult[]>) =>\n Object.values(batchResult).flat(),\n );\n return { results: allResults, total: allResults.length };\n },\n });\n\n // Create one task per chunk and wire up progress forwarding\n chunks.forEach((chunkPages, chunkIndex) => {\n const batchTask = this.workerQueue.enqueue(\n {\n execute: () => this.executor.searchBatch(doc, chunkPages, keyword, flags),\n meta: { docId: doc.id, operation: 'searchBatch', chunkSize: chunkPages.length },\n },\n { priority: Priority.LOW },\n );\n\n // Forward batch progress (per-page) to compound task\n batchTask.onProgress((batchProgress: BatchProgress<SearchResult[]>) => {\n compound.progress({\n page: batchProgress.pageIndex,\n results: batchProgress.result,\n });\n });\n\n compound.addChild(batchTask, chunkIndex);\n });\n\n compound.finalize();\n return compound;\n }\n\n // ========== Attachments ==========\n\n getAttachments(doc: PdfDocumentObject): PdfTask<PdfAttachmentObject[]> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getAttachments(doc),\n meta: { docId: doc.id, operation: 'getAttachments' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n addAttachment(doc: PdfDocumentObject, params: PdfAddAttachmentParams): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.addAttachment(doc, params),\n meta: { docId: doc.id, operation: 'addAttachment' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n removeAttachment(doc: PdfDocumentObject, attachment: PdfAttachmentObject): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.removeAttachment(doc, attachment),\n meta: { docId: doc.id, operation: 'removeAttachment' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n readAttachmentContent(\n doc: PdfDocumentObject,\n attachment: PdfAttachmentObject,\n ): PdfTask<ArrayBuffer> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.readAttachmentContent(doc, attachment),\n meta: { docId: doc.id, operation: 'readAttachmentContent' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n // ========== Forms ==========\n\n getDocumentJavaScriptActions(\n doc: PdfDocumentObject,\n ): PdfTask<PdfDocumentJavaScriptActionObject[]> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getDocumentJavaScriptActions(doc),\n meta: { docId: doc.id, operation: 'getDocumentJavaScriptActions' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n getPageAnnoWidgets(doc: PdfDocumentObject, page: PdfPageObject): PdfTask<PdfWidgetAnnoObject[]> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getPageAnnoWidgets(doc, page),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'getPageAnnoWidgets' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n getPageWidgetJavaScriptActions(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n ): PdfTask<PdfWidgetJavaScriptActionObject[]> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getPageWidgetJavaScriptActions(doc, page),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'getPageWidgetJavaScriptActions' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n setFormFieldValue(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfWidgetAnnoObject,\n value: FormFieldValue,\n ): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.setFormFieldValue(doc, page, annotation, value),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'setFormFieldValue' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n setFormFieldState(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfWidgetAnnoObject,\n field: PdfWidgetAnnoField,\n ): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.setFormFieldState(doc, page, annotation, field),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'setFormFieldState' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n renameWidgetField(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfWidgetAnnoObject,\n name: string,\n ): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.renameWidgetField(doc, page, annotation, name),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'renameWidgetField' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n shareWidgetField(\n doc: PdfDocumentObject,\n sourcePage: PdfPageObject,\n sourceAnnotation: PdfWidgetAnnoObject,\n targetPage: PdfPageObject,\n targetAnnotation: PdfWidgetAnnoObject,\n ): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () =>\n this.executor.shareWidgetField(\n doc,\n sourcePage,\n sourceAnnotation,\n targetPage,\n targetAnnotation,\n ),\n meta: {\n docId: doc.id,\n pageIndex: sourcePage.index,\n operation: 'shareWidgetField',\n },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n regenerateWidgetAppearances(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotationIds: string[],\n ): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.regenerateWidgetAppearances(doc, page, annotationIds),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'regenerateWidgetAppearances' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n flattenPage(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n options?: PdfFlattenPageOptions,\n ): PdfTask<PdfPageFlattenResult> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.flattenPage(doc, page, options),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'flattenPage' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n // ========== Text Operations ==========\n\n extractPages(doc: PdfDocumentObject, pageIndexes: number[]): PdfTask<ArrayBuffer> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.extractPages(doc, pageIndexes),\n meta: { docId: doc.id, pageIndexes: pageIndexes, operation: 'extractPages' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n extractText(doc: PdfDocumentObject, pageIndexes: number[]): PdfTask<string> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.extractText(doc, pageIndexes),\n meta: { docId: doc.id, pageIndexes: pageIndexes, operation: 'extractText' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n redactTextInRects(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n rects: Rect[],\n options?: PdfRedactTextOptions,\n ): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.redactTextInRects(doc, page, rects, options),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'redactTextInRects' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n applyRedaction(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfAnnotationObject,\n ): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.applyRedaction(doc, page, annotation),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'applyRedaction' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n applyAllRedactions(doc: PdfDocumentObject, page: PdfPageObject): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.applyAllRedactions(doc, page),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'applyAllRedactions' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n flattenAnnotation(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfAnnotationObject,\n ): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.flattenAnnotation(doc, page, annotation),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'flattenAnnotation' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n getTextSlices(doc: PdfDocumentObject, slices: PageTextSlice[]): PdfTask<string[]> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getTextSlices(doc, slices),\n meta: { docId: doc.id, slices: slices, operation: 'getTextSlices' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n getPageGlyphs(doc: PdfDocumentObject, page: PdfPageObject): PdfTask<PdfGlyphObject[]> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getPageGlyphs(doc, page),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'getPageGlyphs' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n getPageGeometry(doc: PdfDocumentObject, page: PdfPageObject): PdfTask<PdfPageGeometry> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getPageGeometry(doc, page),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'getPageGeometry' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n getPageTextRuns(doc: PdfDocumentObject, page: PdfPageObject): PdfTask<PdfPageTextRuns> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getPageTextRuns(doc, page),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'getPageTextRuns' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n // ========== Document Operations ==========\n\n merge(files: PdfFile[]): PdfTask<PdfFile> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.merge(files),\n meta: { docId: files.map((file) => file.id).join(','), operation: 'merge' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n mergePages(mergeConfigs: Array<{ docId: string; pageIndices: number[] }>): PdfTask<PdfFile> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.mergePages(mergeConfigs),\n meta: {\n docId: mergeConfigs.map((config) => config.docId).join(','),\n operation: 'mergePages',\n },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n preparePrintDocument(doc: PdfDocumentObject, options?: PdfPrintOptions): PdfTask<ArrayBuffer> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.preparePrintDocument(doc, options),\n meta: { docId: doc.id, operation: 'preparePrintDocument' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n saveAsCopy(doc: PdfDocumentObject): PdfTask<ArrayBuffer> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.saveAsCopy(doc),\n meta: { docId: doc.id, operation: 'saveAsCopy' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n closeDocument(doc: PdfDocumentObject): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.closeDocument(doc),\n meta: { docId: doc.id, operation: 'closeDocument' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n closeAllDocuments(): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.closeAllDocuments(),\n meta: { operation: 'closeAllDocuments' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.setDocumentEncryption}\n */\n setDocumentEncryption(\n doc: PdfDocumentObject,\n userPassword: string,\n ownerPassword: string,\n allowedFlags: number,\n ): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () =>\n this.executor.setDocumentEncryption(doc, userPassword, ownerPassword, allowedFlags),\n meta: { docId: doc.id, operation: 'setDocumentEncryption' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.removeEncryption}\n */\n removeEncryption(doc: PdfDocumentObject): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.removeEncryption(doc),\n meta: { docId: doc.id, operation: 'removeEncryption' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.unlockOwnerPermissions}\n */\n unlockOwnerPermissions(doc: PdfDocumentObject, ownerPassword: string): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.unlockOwnerPermissions(doc, ownerPassword),\n meta: { docId: doc.id, operation: 'unlockOwnerPermissions' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.isEncrypted}\n */\n isEncrypted(doc: PdfDocumentObject): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.isEncrypted(doc),\n meta: { docId: doc.id, operation: 'isEncrypted' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.isOwnerUnlocked}\n */\n isOwnerUnlocked(doc: PdfDocumentObject): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.isOwnerUnlocked(doc),\n meta: { docId: doc.id, operation: 'isOwnerUnlocked' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n}\n"],"names":["LOG_SOURCE","LOG_CATEGORY","Priority"],"mappings":"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"}
|