@embedpdf/engines 2.0.0-next.3 → 2.0.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/README.md +15 -9
- package/dist/browser-C6QEa8uk.cjs +2 -0
- package/dist/browser-C6QEa8uk.cjs.map +1 -0
- package/dist/{browser-Cm3DA8l_.js → browser-awZxztMA.js} +28 -22
- package/dist/browser-awZxztMA.js.map +1 -0
- package/dist/{direct-engine-BZRK27cv.js → direct-engine-DuLFAbiv.js} +23 -21
- package/dist/direct-engine-DuLFAbiv.js.map +1 -0
- package/dist/direct-engine-JeNRkc7w.cjs +2 -0
- package/dist/direct-engine-JeNRkc7w.cjs.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +65 -48
- package/dist/index.js.map +1 -1
- package/dist/lib/converters/browser.d.ts +15 -14
- package/dist/lib/converters/index.cjs +1 -1
- package/dist/lib/converters/index.cjs.map +1 -1
- package/dist/lib/converters/index.js +2 -2
- package/dist/lib/orchestrator/pdf-engine.d.ts +0 -1
- package/dist/lib/orchestrator/remote-executor.d.ts +0 -1
- package/dist/lib/pdfium/engine.d.ts +2 -9
- package/dist/lib/pdfium/index.cjs +1 -1
- package/dist/lib/pdfium/index.cjs.map +1 -1
- package/dist/lib/pdfium/index.d.ts +1 -0
- package/dist/lib/pdfium/index.js +6 -4
- package/dist/lib/pdfium/index.js.map +1 -1
- 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 +4 -7
- 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 +0 -6
- package/dist/lib/webworker/engine.js +0 -13
- package/dist/lib/webworker/engine.js.map +1 -1
- package/dist/{pdf-engine-yZzBqL_l.js → pdf-engine-BVNF_Yo9.js} +6 -14
- package/dist/pdf-engine-BVNF_Yo9.js.map +1 -0
- package/dist/pdf-engine-C3JeKij1.cjs +2 -0
- package/dist/pdf-engine-C3JeKij1.cjs.map +1 -0
- package/dist/preact/index.cjs +1 -1
- package/dist/preact/index.cjs.map +1 -1
- package/dist/preact/index.js +3 -11
- package/dist/preact/index.js.map +1 -1
- package/dist/react/index.cjs +1 -1
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.js +3 -11
- package/dist/react/index.js.map +1 -1
- package/dist/svelte/index.cjs +1 -1
- package/dist/svelte/index.cjs.map +1 -1
- package/dist/svelte/index.js +2 -10
- package/dist/svelte/index.js.map +1 -1
- package/dist/vue/index.cjs +1 -1
- package/dist/vue/index.cjs.map +1 -1
- package/dist/vue/index.js +2 -11
- package/dist/vue/index.js.map +1 -1
- package/package.json +4 -4
- package/dist/browser-B5Y-F6il.cjs +0 -2
- package/dist/browser-B5Y-F6il.cjs.map +0 -1
- package/dist/browser-Cm3DA8l_.js.map +0 -1
- package/dist/direct-engine-BZRK27cv.js.map +0 -1
- package/dist/direct-engine-CZAhOupl.cjs +0 -2
- package/dist/direct-engine-CZAhOupl.cjs.map +0 -1
- package/dist/pdf-engine-CrarIjJ6.cjs +0 -2
- package/dist/pdf-engine-CrarIjJ6.cjs.map +0 -1
- package/dist/pdf-engine-yZzBqL_l.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sources":["../../../src/lib/webworker/engine.ts"],"sourcesContent":["import {\n FormFieldValue,\n PdfAttachmentObject,\n PdfFile,\n PdfMetadataObject,\n PdfSignatureObject,\n PdfTextRectObject,\n PdfWidgetAnnoObject,\n Task,\n Logger,\n NoopLogger,\n PdfAnnotationObject,\n PdfBookmarksObject,\n PdfDocumentObject,\n PdfEngine,\n PdfPageObject,\n Rect,\n PdfErrorCode,\n PdfErrorReason,\n PdfPageFlattenResult,\n SearchAllPagesResult,\n PdfFileUrl,\n PdfGlyphObject,\n PdfPageGeometry,\n PageTextSlice,\n AnnotationCreateContext,\n PdfEngineMethodArgs,\n PdfEngineMethodName,\n PdfPageSearchProgress,\n PdfRenderThumbnailOptions,\n PdfSearchAllPagesOptions,\n PdfFlattenPageOptions,\n PdfRedactTextOptions,\n PdfRenderPageAnnotationOptions,\n PdfRenderPageOptions,\n PdfOpenDocumentUrlOptions,\n PdfOpenDocumentBufferOptions,\n PdfAnnotationsProgress,\n PdfPrintOptions,\n PdfBookmarkObject,\n PdfAddAttachmentParams,\n} from '@embedpdf/models';\nimport { ExecuteRequest, Response, SpecificExecuteRequest } from './runner';\n\nconst LOG_SOURCE = 'WebWorkerEngine';\nconst LOG_CATEGORY = 'Engine';\n\n/**\n * Create a request for the webworker\n * @param id - id of the request\n * @param name - name of the method\n * @param args - arguments of the method\n * @returns request\n */\nfunction createRequest<M extends PdfEngineMethodName>(\n id: string,\n name: M,\n args: PdfEngineMethodArgs<M>,\n): SpecificExecuteRequest<M> {\n return {\n id,\n type: 'ExecuteRequest',\n data: {\n name,\n args,\n },\n };\n}\n\n/**\n * Task that executed by webworker\n */\nexport class WorkerTask<R, P = unknown> extends Task<R, PdfErrorReason, P> {\n /**\n * Create a task that bind to web worker with specified message id\n * @param worker - web worker instance\n * @param messageId - id of message\n *\n * @public\n */\n constructor(\n public worker: Worker,\n private messageId: string,\n ) {\n super();\n }\n\n /**\n * {@inheritDoc @embedpdf/models!Task.abort}\n *\n * @override\n */\n abort(e: PdfErrorReason) {\n super.abort(e);\n\n this.worker.postMessage({\n id: this.messageId,\n type: 'AbortRequest',\n });\n }\n\n /**\n * {@inheritDoc @embedpdf/models!Task.progress}\n *\n * @override\n */\n progress(p: P) {\n super.progress(p);\n }\n}\n\n/**\n * PDF engine that runs within webworker\n */\nexport class WebWorkerEngine implements PdfEngine {\n static readyTaskId = '0';\n /**\n * Task that represent the state of preparation\n */\n readyTask: WorkerTask<boolean>;\n /**\n * All the tasks that is executing\n */\n tasks: Map<string, WorkerTask<any>> = new Map();\n\n /**\n * Create an instance of WebWorkerEngine, it will create a worker with\n * specified url.\n * @param worker - webworker instance, this worker needs to contains the running instance of {@link EngineRunner}\n * @param logger - logger instance\n *\n * @public\n */\n constructor(\n private worker: Worker,\n private logger: Logger = new NoopLogger(),\n ) {\n this.worker.addEventListener('message', this.handle);\n\n this.readyTask = new WorkerTask<boolean>(this.worker, WebWorkerEngine.readyTaskId);\n this.tasks.set(WebWorkerEngine.readyTaskId, this.readyTask);\n }\n\n /**\n * Handle event from web worker. There are 2 kinds of event\n * 1. ReadyResponse: web worker is ready\n * 2. ExecuteResponse: result of execution\n * @param evt - message event from web worker\n * @returns\n *\n * @private\n */\n handle = (evt: MessageEvent<any>) => {\n this.logger.debug(\n LOG_SOURCE,\n LOG_CATEGORY,\n 'webworker engine start handling message: ',\n evt.data,\n );\n try {\n const response = evt.data as Response;\n const task = this.tasks.get(response.id);\n if (!task) {\n return;\n }\n\n switch (response.type) {\n case 'ReadyResponse':\n this.readyTask.resolve(true);\n break;\n case 'ExecuteProgress':\n task.progress(response.data);\n break;\n case 'ExecuteResponse':\n {\n switch (response.data.type) {\n case 'result':\n task.resolve(response.data.value);\n break;\n case 'error':\n task.reject(response.data.value.reason);\n break;\n }\n this.tasks.delete(response.id);\n }\n break;\n }\n } catch (e) {\n this.logger.error(LOG_SOURCE, LOG_CATEGORY, 'webworker met error when handling message: ', e);\n }\n };\n\n /**\n * Generate a unique message id\n * @returns message id\n *\n * @private\n */\n generateRequestId(id: string) {\n return `${id}.${Date.now()}.${Math.random()}`;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.initialize}\n *\n * @public\n */\n initialize() {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'initialize');\n const requestId = this.generateRequestId('General');\n const task = new WorkerTask<boolean>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'initialize', []);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.destroy}\n *\n * @public\n */\n destroy() {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'destroy');\n const requestId = this.generateRequestId('General');\n const task = new WorkerTask<boolean>(this.worker, requestId);\n\n const finish = () => {\n this.worker.removeEventListener('message', this.handle);\n this.worker.terminate();\n };\n\n task.wait(finish, finish);\n\n const request: ExecuteRequest = createRequest(requestId, 'destroy', []);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.openDocumentUrl}\n *\n * @public\n */\n openDocumentUrl(file: PdfFileUrl, options?: PdfOpenDocumentUrlOptions) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'openDocumentUrl', file.url, options);\n const requestId = this.generateRequestId(file.id);\n const task = new WorkerTask<PdfDocumentObject>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'openDocumentUrl', [file, options]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.openDocument}\n *\n * @public\n */\n openDocumentBuffer(file: PdfFile, options?: PdfOpenDocumentBufferOptions) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'openDocumentBuffer', file, options);\n const requestId = this.generateRequestId(file.id);\n const task = new WorkerTask<PdfDocumentObject>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'openDocumentBuffer', [file, options]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.getMetadata}\n *\n * @public\n */\n getMetadata(doc: PdfDocumentObject) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getMetadata', doc);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<PdfMetadataObject>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'getMetadata', [doc]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.setMetadata}\n *\n * @public\n */\n setMetadata(doc: PdfDocumentObject, metadata: Partial<PdfMetadataObject>) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'setMetadata', doc, metadata);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<boolean>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'setMetadata', [doc, metadata]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.getDocPermissions}\n *\n * @public\n */\n getDocPermissions(doc: PdfDocumentObject) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getDocPermissions', doc);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<number>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'getDocPermissions', [doc]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.getDocUserPermissions}\n *\n * @public\n */\n getDocUserPermissions(doc: PdfDocumentObject) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getDocUserPermissions', doc);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<number>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'getDocUserPermissions', [doc]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.getBookmarks}\n *\n * @public\n */\n getBookmarks(doc: PdfDocumentObject) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getBookmarks', doc);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<PdfBookmarksObject>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'getBookmarks', [doc]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.setBookmarks}\n *\n * @public\n */\n setBookmarks(doc: PdfDocumentObject, payload: PdfBookmarkObject[]) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'setBookmarks', doc, payload);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<boolean>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'setBookmarks', [doc, payload]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.deleteBookmarks}\n *\n * @public\n */\n deleteBookmarks(doc: PdfDocumentObject) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'deleteBookmarks', doc);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<boolean>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'deleteBookmarks', [doc]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.getSignatures}\n *\n * @public\n */\n getSignatures(doc: PdfDocumentObject) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getSignatures', doc);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<PdfSignatureObject[]>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'getSignatures', [doc]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.renderPage}\n *\n * @public\n */\n renderPage(doc: PdfDocumentObject, page: PdfPageObject, options?: PdfRenderPageOptions) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'renderPage', doc, page, options);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<Blob>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'renderPage', [doc, page, options]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.renderPageRect}\n *\n * @public\n */\n renderPageRect(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n rect: Rect,\n options?: PdfRenderPageOptions,\n ) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'renderPageRect', doc, page, rect, options);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<Blob>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'renderPageRect', [\n doc,\n page,\n rect,\n options,\n ]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.renderAnnotation}\n *\n * @public\n */\n renderPageAnnotation(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfAnnotationObject,\n options?: PdfRenderPageAnnotationOptions,\n ) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'renderAnnotation', doc, page, annotation, options);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<Blob>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'renderPageAnnotation', [\n doc,\n page,\n annotation,\n options,\n ]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.getAllAnnotations}\n *\n * @public\n */\n getAllAnnotations(doc: PdfDocumentObject) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getAllAnnotations', doc);\n const requestId = this.generateRequestId(doc.id);\n\n const task = new WorkerTask<Record<number, PdfAnnotationObject[]>, PdfAnnotationsProgress>(\n this.worker,\n requestId,\n );\n\n const request: ExecuteRequest = createRequest(requestId, 'getAllAnnotations', [doc]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.getPageAnnotations}\n *\n * @public\n */\n getPageAnnotations(doc: PdfDocumentObject, page: PdfPageObject) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getPageAnnotations', doc, page);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<PdfAnnotationObject[]>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'getPageAnnotations', [doc, page]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.createPageAnnotation}\n *\n * @public\n */\n createPageAnnotation<A extends PdfAnnotationObject>(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: A,\n context?: AnnotationCreateContext<A>,\n ) {\n this.logger.debug(\n LOG_SOURCE,\n LOG_CATEGORY,\n 'createPageAnnotations',\n doc,\n page,\n annotation,\n context,\n );\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<string>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'createPageAnnotation', [\n doc,\n page,\n annotation,\n context,\n ] as PdfEngineMethodArgs<'createPageAnnotation'>);\n this.proxy(task, request);\n\n return task;\n }\n\n updatePageAnnotation(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfAnnotationObject,\n ) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'updatePageAnnotation', doc, page, annotation);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<boolean>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'updatePageAnnotation', [\n doc,\n page,\n annotation,\n ]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.removePageAnnotation}\n *\n * @public\n */\n removePageAnnotation(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfAnnotationObject,\n ) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'removePageAnnotations', doc, page, annotation);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<boolean>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'removePageAnnotation', [\n doc,\n page,\n annotation,\n ]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.getPageTextRects}\n *\n * @public\n */\n getPageTextRects(doc: PdfDocumentObject, page: PdfPageObject) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getPageTextRects', doc, page);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<PdfTextRectObject[]>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'getPageTextRects', [doc, page]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.renderThumbnail}\n *\n * @public\n */\n renderThumbnail(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n options?: PdfRenderThumbnailOptions,\n ) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'renderThumbnail', doc, page, options);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<Blob>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'renderThumbnail', [\n doc,\n page,\n options,\n ]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.searchAllPages}\n *\n * @public\n */\n searchAllPages(doc: PdfDocumentObject, keyword: string, options?: PdfSearchAllPagesOptions) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'searchAllPages', doc, keyword, options);\n\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<SearchAllPagesResult, PdfPageSearchProgress>(\n this.worker,\n requestId,\n );\n\n const request: ExecuteRequest = createRequest(requestId, 'searchAllPages', [\n doc,\n keyword,\n options,\n ]);\n\n this.proxy(task, request);\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.saveAsCopy}\n *\n * @public\n */\n saveAsCopy(doc: PdfDocumentObject) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'saveAsCopy', doc);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<ArrayBuffer>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'saveAsCopy', [doc]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.getAttachments}\n *\n * @public\n */\n getAttachments(doc: PdfDocumentObject) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getAttachments', doc);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<PdfAttachmentObject[]>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'getAttachments', [doc]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.addAttachment}\n *\n * @public\n */\n addAttachment(doc: PdfDocumentObject, params: PdfAddAttachmentParams) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'addAttachment', doc, params);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<boolean>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'addAttachment', [doc, params]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.removeAttachment}\n *\n * @public\n */\n removeAttachment(doc: PdfDocumentObject, attachment: PdfAttachmentObject) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'removeAttachment', doc, attachment);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<boolean>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'removeAttachment', [doc, attachment]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.readAttachmentContent}\n *\n * @public\n */\n readAttachmentContent(doc: PdfDocumentObject, attachment: PdfAttachmentObject) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'readAttachmentContent', doc, attachment);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<ArrayBuffer>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'readAttachmentContent', [\n doc,\n attachment,\n ]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.setFormFieldValue}\n *\n * @public\n */\n setFormFieldValue(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfWidgetAnnoObject,\n value: FormFieldValue,\n ) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'setFormFieldValue', doc, annotation, value);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<boolean>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'setFormFieldValue', [\n doc,\n page,\n annotation,\n value,\n ]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.flattenPage}\n *\n * @public\n */\n flattenPage(doc: PdfDocumentObject, page: PdfPageObject, options?: PdfFlattenPageOptions) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'flattenPage', doc, page, options);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<PdfPageFlattenResult>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'flattenPage', [doc, page, options]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.extractPages}\n *\n * @public\n */\n extractPages(doc: PdfDocumentObject, pageIndexes: number[]) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'extractPages', doc);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<ArrayBuffer>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'extractPages', [doc, pageIndexes]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.redactTextInQuads}\n *\n * @public\n */\n redactTextInRects(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n rects: Rect[],\n options?: PdfRedactTextOptions,\n ) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'redactTextInRects', doc, page, rects, options);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<boolean>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'redactTextInRects', [\n doc,\n page,\n rects,\n options,\n ]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.extractText}\n *\n * @public\n */\n extractText(doc: PdfDocumentObject, pageIndexes: number[]) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'extractText', doc);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<string>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'extractText', [doc, pageIndexes]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.getTextSlices}\n *\n * @public\n */\n getTextSlices(doc: PdfDocumentObject, slices: PageTextSlice[]) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getTextSlices', doc, slices);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<string[]>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'getTextSlices', [doc, slices]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.getPageGlyphs}\n *\n * @public\n */\n getPageGlyphs(doc: PdfDocumentObject, page: PdfPageObject) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getPageGlyphs', doc, page);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<PdfGlyphObject[]>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'getPageGlyphs', [doc, page]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.getPageGeometry}\n *\n * @public\n */\n getPageGeometry(doc: PdfDocumentObject, page: PdfPageObject) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getPageGeometry', doc, page);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<PdfPageGeometry>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'getPageGeometry', [doc, page]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.merge}\n *\n * @public\n */\n merge(files: PdfFile[]) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'merge', files);\n const fileIds = files.map((file) => file.id).join('.');\n const requestId = this.generateRequestId(fileIds);\n const task = new WorkerTask<PdfFile>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'merge', [files]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.mergePages}\n *\n * @public\n */\n mergePages(mergeConfigs: Array<{ docId: string; pageIndices: number[] }>) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'mergePages', mergeConfigs);\n const requestId = this.generateRequestId(mergeConfigs.map((config) => config.docId).join('.'));\n const task = new WorkerTask<PdfFile>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'mergePages', [mergeConfigs]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.preparePrintDocument}\n *\n * @public\n */\n preparePrintDocument(doc: PdfDocumentObject, options?: PdfPrintOptions) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'preparePrintDocument', doc, options);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<ArrayBuffer>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'preparePrintDocument', [\n doc,\n options,\n ]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.closeDocument}\n *\n * @public\n */\n closeDocument(doc: PdfDocumentObject) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'closeDocument', doc);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<boolean>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'closeDocument', [doc]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.closeAllDocuments}\n *\n * @public\n */\n closeAllDocuments() {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'closeAllDocuments');\n const requestId = this.generateRequestId('closeAllDocuments');\n const task = new WorkerTask<boolean>(this.worker, requestId);\n const request: ExecuteRequest = createRequest(requestId, 'closeAllDocuments', []);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * Send the request to webworker inside and register the task\n * @param task - task that waiting for the response\n * @param request - request that needs send to web worker\n * @param transferables - transferables that need to transfer to webworker\n * @returns\n *\n * @internal\n */\n proxy<R>(task: WorkerTask<R>, request: ExecuteRequest, transferables: any[] = []) {\n this.logger.debug(\n LOG_SOURCE,\n LOG_CATEGORY,\n 'send request to worker',\n task,\n request,\n transferables,\n );\n this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `${request.data.name}`, 'Begin', request.id);\n this.readyTask.wait(\n () => {\n this.worker.postMessage(request, transferables);\n task.wait(\n () => {\n this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `${request.data.name}`, 'End', request.id);\n },\n () => {\n this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `${request.data.name}`, 'End', request.id);\n },\n );\n this.tasks.set(request.id, task);\n },\n () => {\n this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `${request.data.name}`, 'End', request.id);\n task.reject({\n code: PdfErrorCode.Initialization,\n message: 'worker initialization failed',\n });\n },\n );\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"engine.js","sources":["../../../src/lib/webworker/engine.ts"],"sourcesContent":["import {\n FormFieldValue,\n PdfAttachmentObject,\n PdfFile,\n PdfMetadataObject,\n PdfSignatureObject,\n PdfTextRectObject,\n PdfWidgetAnnoObject,\n Task,\n Logger,\n NoopLogger,\n PdfAnnotationObject,\n PdfBookmarksObject,\n PdfDocumentObject,\n PdfEngine,\n PdfPageObject,\n Rect,\n PdfErrorCode,\n PdfErrorReason,\n PdfPageFlattenResult,\n SearchAllPagesResult,\n PdfFileUrl,\n PdfGlyphObject,\n PdfPageGeometry,\n PageTextSlice,\n AnnotationCreateContext,\n PdfEngineMethodArgs,\n PdfEngineMethodName,\n PdfPageSearchProgress,\n PdfRenderThumbnailOptions,\n PdfSearchAllPagesOptions,\n PdfFlattenPageOptions,\n PdfRedactTextOptions,\n PdfRenderPageAnnotationOptions,\n PdfRenderPageOptions,\n PdfOpenDocumentUrlOptions,\n PdfOpenDocumentBufferOptions,\n PdfAnnotationsProgress,\n PdfPrintOptions,\n PdfBookmarkObject,\n PdfAddAttachmentParams,\n} from '@embedpdf/models';\nimport { ExecuteRequest, Response, SpecificExecuteRequest } from './runner';\n\nconst LOG_SOURCE = 'WebWorkerEngine';\nconst LOG_CATEGORY = 'Engine';\n\n/**\n * Create a request for the webworker\n * @param id - id of the request\n * @param name - name of the method\n * @param args - arguments of the method\n * @returns request\n */\nfunction createRequest<M extends PdfEngineMethodName>(\n id: string,\n name: M,\n args: PdfEngineMethodArgs<M>,\n): SpecificExecuteRequest<M> {\n return {\n id,\n type: 'ExecuteRequest',\n data: {\n name,\n args,\n },\n };\n}\n\n/**\n * Task that executed by webworker\n */\nexport class WorkerTask<R, P = unknown> extends Task<R, PdfErrorReason, P> {\n /**\n * Create a task that bind to web worker with specified message id\n * @param worker - web worker instance\n * @param messageId - id of message\n *\n * @public\n */\n constructor(\n public worker: Worker,\n private messageId: string,\n ) {\n super();\n }\n\n /**\n * {@inheritDoc @embedpdf/models!Task.abort}\n *\n * @override\n */\n abort(e: PdfErrorReason) {\n super.abort(e);\n\n this.worker.postMessage({\n id: this.messageId,\n type: 'AbortRequest',\n });\n }\n\n /**\n * {@inheritDoc @embedpdf/models!Task.progress}\n *\n * @override\n */\n progress(p: P) {\n super.progress(p);\n }\n}\n\n/**\n * PDF engine that runs within webworker\n */\nexport class WebWorkerEngine implements PdfEngine {\n static readyTaskId = '0';\n /**\n * Task that represent the state of preparation\n */\n readyTask: WorkerTask<boolean>;\n /**\n * All the tasks that is executing\n */\n tasks: Map<string, WorkerTask<any>> = new Map();\n\n /**\n * Create an instance of WebWorkerEngine, it will create a worker with\n * specified url.\n * @param worker - webworker instance, this worker needs to contains the running instance of {@link EngineRunner}\n * @param logger - logger instance\n *\n * @public\n */\n constructor(\n private worker: Worker,\n private logger: Logger = new NoopLogger(),\n ) {\n this.worker.addEventListener('message', this.handle);\n\n this.readyTask = new WorkerTask<boolean>(this.worker, WebWorkerEngine.readyTaskId);\n this.tasks.set(WebWorkerEngine.readyTaskId, this.readyTask);\n }\n\n /**\n * Handle event from web worker. There are 2 kinds of event\n * 1. ReadyResponse: web worker is ready\n * 2. ExecuteResponse: result of execution\n * @param evt - message event from web worker\n * @returns\n *\n * @private\n */\n handle = (evt: MessageEvent<any>) => {\n this.logger.debug(\n LOG_SOURCE,\n LOG_CATEGORY,\n 'webworker engine start handling message: ',\n evt.data,\n );\n try {\n const response = evt.data as Response;\n const task = this.tasks.get(response.id);\n if (!task) {\n return;\n }\n\n switch (response.type) {\n case 'ReadyResponse':\n this.readyTask.resolve(true);\n break;\n case 'ExecuteProgress':\n task.progress(response.data);\n break;\n case 'ExecuteResponse':\n {\n switch (response.data.type) {\n case 'result':\n task.resolve(response.data.value);\n break;\n case 'error':\n task.reject(response.data.value.reason);\n break;\n }\n this.tasks.delete(response.id);\n }\n break;\n }\n } catch (e) {\n this.logger.error(LOG_SOURCE, LOG_CATEGORY, 'webworker met error when handling message: ', e);\n }\n };\n\n /**\n * Generate a unique message id\n * @returns message id\n *\n * @private\n */\n generateRequestId(id: string) {\n return `${id}.${Date.now()}.${Math.random()}`;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.destroy}\n *\n * @public\n */\n destroy() {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'destroy');\n const requestId = this.generateRequestId('General');\n const task = new WorkerTask<boolean>(this.worker, requestId);\n\n const finish = () => {\n this.worker.removeEventListener('message', this.handle);\n this.worker.terminate();\n };\n\n task.wait(finish, finish);\n\n const request: ExecuteRequest = createRequest(requestId, 'destroy', []);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.openDocumentUrl}\n *\n * @public\n */\n openDocumentUrl(file: PdfFileUrl, options?: PdfOpenDocumentUrlOptions) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'openDocumentUrl', file.url, options);\n const requestId = this.generateRequestId(file.id);\n const task = new WorkerTask<PdfDocumentObject>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'openDocumentUrl', [file, options]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.openDocument}\n *\n * @public\n */\n openDocumentBuffer(file: PdfFile, options?: PdfOpenDocumentBufferOptions) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'openDocumentBuffer', file, options);\n const requestId = this.generateRequestId(file.id);\n const task = new WorkerTask<PdfDocumentObject>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'openDocumentBuffer', [file, options]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.getMetadata}\n *\n * @public\n */\n getMetadata(doc: PdfDocumentObject) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getMetadata', doc);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<PdfMetadataObject>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'getMetadata', [doc]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.setMetadata}\n *\n * @public\n */\n setMetadata(doc: PdfDocumentObject, metadata: Partial<PdfMetadataObject>) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'setMetadata', doc, metadata);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<boolean>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'setMetadata', [doc, metadata]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.getDocPermissions}\n *\n * @public\n */\n getDocPermissions(doc: PdfDocumentObject) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getDocPermissions', doc);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<number>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'getDocPermissions', [doc]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.getDocUserPermissions}\n *\n * @public\n */\n getDocUserPermissions(doc: PdfDocumentObject) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getDocUserPermissions', doc);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<number>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'getDocUserPermissions', [doc]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.getBookmarks}\n *\n * @public\n */\n getBookmarks(doc: PdfDocumentObject) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getBookmarks', doc);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<PdfBookmarksObject>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'getBookmarks', [doc]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.setBookmarks}\n *\n * @public\n */\n setBookmarks(doc: PdfDocumentObject, payload: PdfBookmarkObject[]) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'setBookmarks', doc, payload);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<boolean>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'setBookmarks', [doc, payload]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.deleteBookmarks}\n *\n * @public\n */\n deleteBookmarks(doc: PdfDocumentObject) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'deleteBookmarks', doc);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<boolean>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'deleteBookmarks', [doc]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.getSignatures}\n *\n * @public\n */\n getSignatures(doc: PdfDocumentObject) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getSignatures', doc);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<PdfSignatureObject[]>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'getSignatures', [doc]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.renderPage}\n *\n * @public\n */\n renderPage(doc: PdfDocumentObject, page: PdfPageObject, options?: PdfRenderPageOptions) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'renderPage', doc, page, options);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<Blob>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'renderPage', [doc, page, options]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.renderPageRect}\n *\n * @public\n */\n renderPageRect(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n rect: Rect,\n options?: PdfRenderPageOptions,\n ) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'renderPageRect', doc, page, rect, options);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<Blob>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'renderPageRect', [\n doc,\n page,\n rect,\n options,\n ]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.renderAnnotation}\n *\n * @public\n */\n renderPageAnnotation(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfAnnotationObject,\n options?: PdfRenderPageAnnotationOptions,\n ) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'renderAnnotation', doc, page, annotation, options);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<Blob>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'renderPageAnnotation', [\n doc,\n page,\n annotation,\n options,\n ]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.getAllAnnotations}\n *\n * @public\n */\n getAllAnnotations(doc: PdfDocumentObject) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getAllAnnotations', doc);\n const requestId = this.generateRequestId(doc.id);\n\n const task = new WorkerTask<Record<number, PdfAnnotationObject[]>, PdfAnnotationsProgress>(\n this.worker,\n requestId,\n );\n\n const request: ExecuteRequest = createRequest(requestId, 'getAllAnnotations', [doc]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.getPageAnnotations}\n *\n * @public\n */\n getPageAnnotations(doc: PdfDocumentObject, page: PdfPageObject) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getPageAnnotations', doc, page);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<PdfAnnotationObject[]>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'getPageAnnotations', [doc, page]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.createPageAnnotation}\n *\n * @public\n */\n createPageAnnotation<A extends PdfAnnotationObject>(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: A,\n context?: AnnotationCreateContext<A>,\n ) {\n this.logger.debug(\n LOG_SOURCE,\n LOG_CATEGORY,\n 'createPageAnnotations',\n doc,\n page,\n annotation,\n context,\n );\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<string>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'createPageAnnotation', [\n doc,\n page,\n annotation,\n context,\n ] as PdfEngineMethodArgs<'createPageAnnotation'>);\n this.proxy(task, request);\n\n return task;\n }\n\n updatePageAnnotation(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfAnnotationObject,\n ) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'updatePageAnnotation', doc, page, annotation);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<boolean>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'updatePageAnnotation', [\n doc,\n page,\n annotation,\n ]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.removePageAnnotation}\n *\n * @public\n */\n removePageAnnotation(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfAnnotationObject,\n ) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'removePageAnnotations', doc, page, annotation);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<boolean>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'removePageAnnotation', [\n doc,\n page,\n annotation,\n ]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.getPageTextRects}\n *\n * @public\n */\n getPageTextRects(doc: PdfDocumentObject, page: PdfPageObject) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getPageTextRects', doc, page);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<PdfTextRectObject[]>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'getPageTextRects', [doc, page]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.renderThumbnail}\n *\n * @public\n */\n renderThumbnail(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n options?: PdfRenderThumbnailOptions,\n ) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'renderThumbnail', doc, page, options);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<Blob>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'renderThumbnail', [\n doc,\n page,\n options,\n ]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.searchAllPages}\n *\n * @public\n */\n searchAllPages(doc: PdfDocumentObject, keyword: string, options?: PdfSearchAllPagesOptions) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'searchAllPages', doc, keyword, options);\n\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<SearchAllPagesResult, PdfPageSearchProgress>(\n this.worker,\n requestId,\n );\n\n const request: ExecuteRequest = createRequest(requestId, 'searchAllPages', [\n doc,\n keyword,\n options,\n ]);\n\n this.proxy(task, request);\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.saveAsCopy}\n *\n * @public\n */\n saveAsCopy(doc: PdfDocumentObject) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'saveAsCopy', doc);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<ArrayBuffer>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'saveAsCopy', [doc]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.getAttachments}\n *\n * @public\n */\n getAttachments(doc: PdfDocumentObject) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getAttachments', doc);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<PdfAttachmentObject[]>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'getAttachments', [doc]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.addAttachment}\n *\n * @public\n */\n addAttachment(doc: PdfDocumentObject, params: PdfAddAttachmentParams) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'addAttachment', doc, params);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<boolean>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'addAttachment', [doc, params]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.removeAttachment}\n *\n * @public\n */\n removeAttachment(doc: PdfDocumentObject, attachment: PdfAttachmentObject) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'removeAttachment', doc, attachment);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<boolean>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'removeAttachment', [doc, attachment]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.readAttachmentContent}\n *\n * @public\n */\n readAttachmentContent(doc: PdfDocumentObject, attachment: PdfAttachmentObject) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'readAttachmentContent', doc, attachment);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<ArrayBuffer>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'readAttachmentContent', [\n doc,\n attachment,\n ]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.setFormFieldValue}\n *\n * @public\n */\n setFormFieldValue(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfWidgetAnnoObject,\n value: FormFieldValue,\n ) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'setFormFieldValue', doc, annotation, value);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<boolean>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'setFormFieldValue', [\n doc,\n page,\n annotation,\n value,\n ]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.flattenPage}\n *\n * @public\n */\n flattenPage(doc: PdfDocumentObject, page: PdfPageObject, options?: PdfFlattenPageOptions) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'flattenPage', doc, page, options);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<PdfPageFlattenResult>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'flattenPage', [doc, page, options]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.extractPages}\n *\n * @public\n */\n extractPages(doc: PdfDocumentObject, pageIndexes: number[]) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'extractPages', doc);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<ArrayBuffer>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'extractPages', [doc, pageIndexes]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.redactTextInQuads}\n *\n * @public\n */\n redactTextInRects(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n rects: Rect[],\n options?: PdfRedactTextOptions,\n ) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'redactTextInRects', doc, page, rects, options);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<boolean>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'redactTextInRects', [\n doc,\n page,\n rects,\n options,\n ]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.extractText}\n *\n * @public\n */\n extractText(doc: PdfDocumentObject, pageIndexes: number[]) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'extractText', doc);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<string>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'extractText', [doc, pageIndexes]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.getTextSlices}\n *\n * @public\n */\n getTextSlices(doc: PdfDocumentObject, slices: PageTextSlice[]) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getTextSlices', doc, slices);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<string[]>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'getTextSlices', [doc, slices]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.getPageGlyphs}\n *\n * @public\n */\n getPageGlyphs(doc: PdfDocumentObject, page: PdfPageObject) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getPageGlyphs', doc, page);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<PdfGlyphObject[]>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'getPageGlyphs', [doc, page]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.getPageGeometry}\n *\n * @public\n */\n getPageGeometry(doc: PdfDocumentObject, page: PdfPageObject) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getPageGeometry', doc, page);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<PdfPageGeometry>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'getPageGeometry', [doc, page]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.merge}\n *\n * @public\n */\n merge(files: PdfFile[]) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'merge', files);\n const fileIds = files.map((file) => file.id).join('.');\n const requestId = this.generateRequestId(fileIds);\n const task = new WorkerTask<PdfFile>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'merge', [files]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.mergePages}\n *\n * @public\n */\n mergePages(mergeConfigs: Array<{ docId: string; pageIndices: number[] }>) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'mergePages', mergeConfigs);\n const requestId = this.generateRequestId(mergeConfigs.map((config) => config.docId).join('.'));\n const task = new WorkerTask<PdfFile>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'mergePages', [mergeConfigs]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.preparePrintDocument}\n *\n * @public\n */\n preparePrintDocument(doc: PdfDocumentObject, options?: PdfPrintOptions) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'preparePrintDocument', doc, options);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<ArrayBuffer>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'preparePrintDocument', [\n doc,\n options,\n ]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.closeDocument}\n *\n * @public\n */\n closeDocument(doc: PdfDocumentObject) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'closeDocument', doc);\n const requestId = this.generateRequestId(doc.id);\n const task = new WorkerTask<boolean>(this.worker, requestId);\n\n const request: ExecuteRequest = createRequest(requestId, 'closeDocument', [doc]);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.closeAllDocuments}\n *\n * @public\n */\n closeAllDocuments() {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'closeAllDocuments');\n const requestId = this.generateRequestId('closeAllDocuments');\n const task = new WorkerTask<boolean>(this.worker, requestId);\n const request: ExecuteRequest = createRequest(requestId, 'closeAllDocuments', []);\n this.proxy(task, request);\n\n return task;\n }\n\n /**\n * Send the request to webworker inside and register the task\n * @param task - task that waiting for the response\n * @param request - request that needs send to web worker\n * @param transferables - transferables that need to transfer to webworker\n * @returns\n *\n * @internal\n */\n proxy<R>(task: WorkerTask<R>, request: ExecuteRequest, transferables: any[] = []) {\n this.logger.debug(\n LOG_SOURCE,\n LOG_CATEGORY,\n 'send request to worker',\n task,\n request,\n transferables,\n );\n this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `${request.data.name}`, 'Begin', request.id);\n this.readyTask.wait(\n () => {\n this.worker.postMessage(request, transferables);\n task.wait(\n () => {\n this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `${request.data.name}`, 'End', request.id);\n },\n () => {\n this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `${request.data.name}`, 'End', request.id);\n },\n );\n this.tasks.set(request.id, task);\n },\n () => {\n this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `${request.data.name}`, 'End', request.id);\n task.reject({\n code: PdfErrorCode.Initialization,\n message: 'worker initialization failed',\n });\n },\n );\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -295,16 +295,6 @@ class PdfEngine {
|
|
|
295
295
|
]);
|
|
296
296
|
return task;
|
|
297
297
|
}
|
|
298
|
-
initialize() {
|
|
299
|
-
const task = new Task();
|
|
300
|
-
try {
|
|
301
|
-
this.executor.initialize();
|
|
302
|
-
task.resolve(true);
|
|
303
|
-
} catch (error) {
|
|
304
|
-
task.reject({ code: PdfErrorCode.Unknown, message: String(error) });
|
|
305
|
-
}
|
|
306
|
-
return task;
|
|
307
|
-
}
|
|
308
298
|
destroy() {
|
|
309
299
|
const task = new Task();
|
|
310
300
|
try {
|
|
@@ -328,10 +318,12 @@ class PdfEngine {
|
|
|
328
318
|
id: file.id,
|
|
329
319
|
content: arrayBuf
|
|
330
320
|
};
|
|
331
|
-
|
|
321
|
+
this.openDocumentBuffer(pdfFile, {
|
|
332
322
|
password: options == null ? void 0 : options.password
|
|
333
|
-
}).
|
|
334
|
-
|
|
323
|
+
}).wait(
|
|
324
|
+
(doc) => task.resolve(doc),
|
|
325
|
+
(error) => task.fail(error)
|
|
326
|
+
);
|
|
335
327
|
} catch (error) {
|
|
336
328
|
task.reject({ code: PdfErrorCode.Unknown, message: String(error) });
|
|
337
329
|
}
|
|
@@ -795,4 +787,4 @@ class PdfEngine {
|
|
|
795
787
|
export {
|
|
796
788
|
PdfEngine as P
|
|
797
789
|
};
|
|
798
|
-
//# sourceMappingURL=pdf-engine-
|
|
790
|
+
//# sourceMappingURL=pdf-engine-BVNF_Yo9.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdf-engine-BVNF_Yo9.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 PdfWidgetAnnoObject,\n FormFieldValue,\n PdfFlattenPageOptions,\n PdfPageFlattenResult,\n PdfRedactTextOptions,\n Rect,\n PageTextSlice,\n PdfGlyphObject,\n PdfPageGeometry,\n PdfPrintOptions,\n PdfEngineFeature,\n PdfEngineOperation,\n PdfSignatureObject,\n AnnotationCreateContext,\n Task,\n PdfErrorCode,\n SearchResult,\n CompoundTask,\n ImageDataLike,\n IPdfiumExecutor,\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 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 }).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 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 /**\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 // ========== 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 ): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.updatePageAnnotation(doc, page, annotation),\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 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 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 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 // ========== 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"],"names":["LOG_SOURCE","LOG_CATEGORY","Priority"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
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 o{constructor(t={}){this.queue=[],this.running=0,this.resultTasks=new Map,this.idleListeners=new Set;const{concurrency:r=1,comparator:i,ranker:o,onIdle:n,maxQueueSize:s,autoStart:u=!0,logger:a}=t;this.logger=a??new e.NoopLogger,this.opts={concurrency:Math.max(1,r),comparator:i,ranker:o,onIdle:n??(()=>{}),maxQueueSize:s??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(i,o={}){const n=this.generateId(),s=o.priority??1,u=new e.Task;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 a={id:n,priority:s,meta:o.meta??i.meta,executeFactory:i.execute};this.queue.push(a),this.logger.debug(t,r,`Task enqueued: ${n} | Priority: ${s} | Running: ${this.running} | Queued: ${this.queue.length}`);const c=u.abort.bind(u);return u.abort=e=>{this.logger.debug(t,r,`Task aborted: ${n}`),this.cancel(n),c(e)},this.opts.autoStart&&this.process(!0===o.fifo),u}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 o=this.resultTasks.get(i.id);o&&(this.running++,(async()=>{let e=null;try{if(e=i.executeFactory(),!e)throw new Error("Task factory returned null/undefined");e.wait(e=>{0===o.state.stage&&o.resolve(e)},e=>{0===o.state.stage&&("abort"===e.type?o.abort(e.reason):o.reject(e.reason))}),e.onProgress(e=>{o.progress(e)}),await e.toPromise()}catch(n){0===o.state.stage&&o.reject(n)}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),o=i(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 n="PdfEngine",s="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 o({concurrency:1,autoStart:!0,logger:this.logger}),this.logger.debug(n,s,"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(){const t=new e.Task;try{this.executor.destroy(),t.resolve(!0)}catch(r){t.reject({code:e.PdfErrorCode.Unknown,message:String(r)})}return t}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),o=await e.arrayBuffer(),n={id:t.id,content:o};this.openDocumentBuffer(n,{password:null==r?void 0:r.password}).wait(e=>i.resolve(e),e=>i.fail(e))}catch(o){i.reject({code:e.PdfErrorCode.Unknown,message:String(o)})}})(),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,o){return this.renderWithEncoding(()=>this.executor.renderPageRect(e,t,r,o),o,e.id,t.index,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,o){return this.renderWithEncoding(()=>this.executor.renderPageAnnotationRaw(e,t,r,o),o,e.id,t.index,i.MEDIUM)}renderWithEncoding(t,r,o,n,s=i.CRITICAL){const u=new e.Task,a=this.workerQueue.enqueue({execute:()=>t(),meta:{docId:o,pageIndex:n,operation:"render"}},{priority:s}),c=u.abort.bind(u);return u.abort=e=>{a.abort(e),c(e)},a.wait(e=>{0===u.state.stage&&this.encodeImage(e,r,u)},e=>{0===u.state.stage&&u.fail(e)}),u}encodeImage(t,r,i){const o=(null==r?void 0:r.imageType)??"image/webp",n=null==r?void 0:r.quality,s={data:new Uint8ClampedArray(t.data),width:t.width,height:t.height};this.options.imageConverter(()=>s,o,n).then(e=>i.resolve(e)).catch(t=>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,o){return this.workerQueue.enqueue({execute:()=>this.executor.createPageAnnotation(e,t,r,o),meta:{docId:e.id,pageIndex:t.index,operation:"createPageAnnotation"}},{priority:i.MEDIUM})}updatePageAnnotation(e,t,r){return this.workerQueue.enqueue({execute:()=>this.executor.updatePageAnnotation(e,t,r),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(n,s,`getAllAnnotations: ${t.pages.length} pages in ${r.length} chunks`);const o=new e.CompoundTask({aggregate:e=>Object.assign({},...e)});return r.forEach((e,r)=>{const n=this.workerQueue.enqueue({execute:()=>this.executor.getAnnotationsBatch(t,e),meta:{docId:t.id,operation:"getAnnotationsBatch",chunkSize:e.length}},{priority:i.LOW});n.onProgress(e=>{o.progress({page:e.pageIndex,result:e.result})}),o.addChild(n,r)}),o.finalize(),o}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,o){const u=Array.isArray(null==o?void 0:o.flags)?o.flags.reduce((e,t)=>e|t,0):(null==o?void 0:o.flags)??0,a=this.chunkArray(t.pages,25);this.logger.debug(n,s,`searchAllPages: ${t.pages.length} pages in ${a.length} chunks`);const c=new e.CompoundTask({aggregate:e=>{const t=e.flatMap(e=>Object.values(e).flat());return{results:t,total:t.length}}});return a.forEach((e,o)=>{const n=this.workerQueue.enqueue({execute:()=>this.executor.searchBatch(t,e,r,u),meta:{docId:t.id,operation:"searchBatch",chunkSize:e.length}},{priority:i.LOW});n.onProgress(e=>{c.progress({page:e.pageIndex,results:e.result})}),c.addChild(n,o)}),c.finalize(),c}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})}setFormFieldValue(e,t,r,o){return this.workerQueue.enqueue({execute:()=>this.executor.setFormFieldValue(e,t,r,o),meta:{docId:e.id,pageIndex:t.index,operation:"setFormFieldValue"}},{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,o){return this.workerQueue.enqueue({execute:()=>this.executor.redactTextInRects(e,t,r,o),meta:{docId:e.id,pageIndex:t.index,operation:"redactTextInRects"}},{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})}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})}};
|
|
2
|
+
//# sourceMappingURL=pdf-engine-C3JeKij1.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdf-engine-C3JeKij1.cjs","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 PdfWidgetAnnoObject,\n FormFieldValue,\n PdfFlattenPageOptions,\n PdfPageFlattenResult,\n PdfRedactTextOptions,\n Rect,\n PageTextSlice,\n PdfGlyphObject,\n PdfPageGeometry,\n PdfPrintOptions,\n PdfEngineFeature,\n PdfEngineOperation,\n PdfSignatureObject,\n AnnotationCreateContext,\n Task,\n PdfErrorCode,\n SearchResult,\n CompoundTask,\n ImageDataLike,\n IPdfiumExecutor,\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 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 }).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 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 /**\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 // ========== 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 ): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.updatePageAnnotation(doc, page, annotation),\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 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 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 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 // ========== 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"],"names":["LOG_SOURCE","LOG_CATEGORY","Priority","WorkerTaskQueue","constructor","options","this","queue","running","resultTasks","Map","idleListeners","Set","concurrency","comparator","ranker","onIdle","maxQueueSize","autoStart","logger","NoopLogger","opts","Math","max","Number","POSITIVE_INFINITY","setComparator","setRanker","size","length","inFlight","isIdle","drain","Promise","resolve","check","offIdle","notifyIdle","forEach","fn","clear","add","delete","enqueue","taskDef","id","generateId","priority","resultTask","Task","error","Error","reject","set","queuedTask","meta","executeFactory","execute","push","debug","originalAbort","abort","bind","reason","cancel","process","fifo","taskId","before","filter","t","cancelled","kick","queueMicrotask","sortQueue","shift","get","realTask","wait","result","state","stage","type","onProgress","progress","toPromise","catch","sort","rankCache","getRank","has","defaultRank","a","b","ar","br","extractTime","_task","crypto","randomUUID","Date","now","random","toString","slice","split","isFinite","executor","imageConverter","fetcher","fetch","url","init","workerQueue","chunkArray","items","chunkSize","chunks","i","isSupport","feature","task","PdfEngineOperation","Create","Read","Update","Delete","destroy","code","PdfErrorCode","Unknown","message","String","openDocumentUrl","file","response","requestOptions","arrayBuf","arrayBuffer","pdfFile","content","openDocumentBuffer","password","doc","fail","docId","operation","CRITICAL","getMetadata","MEDIUM","setMetadata","metadata","getDocPermissions","getDocUserPermissions","getSignatures","getBookmarks","setBookmarks","bookmarks","deleteBookmarks","renderPage","page","renderWithEncoding","renderPageRaw","index","renderPageRect","rect","HIGH","renderThumbnail","renderThumbnailRaw","renderPageAnnotation","annotation","renderPageAnnotationRaw","renderFn","pageIndex","renderHandle","rawImageData","encodeImage","imageType","quality","plainImageData","data","Uint8ClampedArray","width","height","then","getPageAnnotations","createPageAnnotation","context","updatePageAnnotation","removePageAnnotation","getAllAnnotations","pages","compound","CompoundTask","aggregate","results","Object","assign","chunkPages","chunkIndex","batchTask","getAnnotationsBatch","LOW","batchProgress","addChild","finalize","getPageTextRects","searchAllPages","keyword","flags","Array","isArray","reduce","acc","flag","allResults","flatMap","batchResult","values","flat","total","searchBatch","getAttachments","addAttachment","params","removeAttachment","attachment","readAttachmentContent","setFormFieldValue","value","flattenPage","extractPages","pageIndexes","extractText","redactTextInRects","rects","getTextSlices","slices","getPageGlyphs","getPageGeometry","merge","files","map","join","mergePages","mergeConfigs","config","preparePrintDocument","saveAsCopy","closeDocument","closeAllDocuments"],"mappings":"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"}
|
package/dist/preact/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.create,Object.defineProperty,Object.getOwnPropertyDescriptor,Object.getOwnPropertyNames,Object.getPrototypeOf,Object.prototype.hasOwnProperty;Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("preact/hooks"),r=require("preact"),t=require("@embedpdf/models"),n=require("preact/jsx-runtime"),
|
|
1
|
+
"use strict";Object.create,Object.defineProperty,Object.getOwnPropertyDescriptor,Object.getOwnPropertyNames,Object.getPrototypeOf,Object.prototype.hasOwnProperty;Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("preact/hooks"),r=require("preact"),t=require("@embedpdf/models"),n=require("preact/jsx-runtime"),o="https://cdn.jsdelivr.net/npm/@embedpdf/pdfium@2.0.1/dist/pdfium.wasm";const i=r.createContext(void 0);function u(){const r=e.useContext(i);if(void 0===r)throw new Error("useEngineContext must be used within a PdfEngineProvider");return r}exports.PdfEngineProvider=function({children:e,engine:r,isLoading:t,error:o}){const u={engine:r,isLoading:t,error:o};return n.jsx(i.Provider,{value:u,children:e})},exports.useEngine=function(){const{engine:e,error:r}=u();if(r)throw r;return e},exports.useEngineContext=u,exports.usePdfiumEngine=function(r){const{wasmUrl:n=o,worker:i=!0,logger:u,encoderPoolSize:s}=r??{},[c,d]=e.useState(null),[l,a]=e.useState(!0),[p,g]=e.useState(null),f=e.useRef(null);return e.useEffect(()=>{let e=!1;return(async()=>{try{const{createPdfiumEngine:e}=i?await import("@embedpdf/engines/pdfium-worker-engine"):await import("@embedpdf/engines/pdfium-direct-engine"),r=await e(n,{logger:u,encoderPoolSize:s});f.current=r,d(r),a(!1)}catch(r){e||(g(r),a(!1))}})(),()=>{var r,n;e=!0,null==(n=null==(r=f.current)?void 0:r.closeAllDocuments)||n.call(r).wait(()=>{var e,r;null==(r=null==(e=f.current)?void 0:e.destroy)||r.call(e),f.current=null},t.ignore)}},[n,i,u]),{engine:c,isLoading:l,error:p}};
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../src/shared/hooks/use-pdfium-engine.ts","../../src/shared/context/pdf-engine-context.ts","../../src/shared/hooks/use-engine-context.ts","../../src/shared/components/pdf-engine-provider.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from '@framework';\nimport { ignore, Logger, PdfEngine } from '@embedpdf/models';\n\nconst defaultWasmUrl = `https://cdn.jsdelivr.net/npm/@embedpdf/pdfium@__PDFIUM_VERSION__/dist/pdfium.wasm`;\n\ninterface UsePdfiumEngineProps {\n wasmUrl?: string;\n worker?: boolean;\n logger?: Logger;\n encoderPoolSize?: number;\n}\n\nexport function usePdfiumEngine(config?: UsePdfiumEngineProps) {\n const { wasmUrl = defaultWasmUrl, worker = true, logger, encoderPoolSize } = config ?? {};\n\n const [engine, setEngine] = useState<PdfEngine | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n const engineRef = useRef<PdfEngine | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n\n (async () => {\n try {\n const { createPdfiumEngine } = worker\n ? await import('@embedpdf/engines/pdfium-worker-engine')\n : await import('@embedpdf/engines/pdfium-direct-engine');\n\n const pdfEngine = await createPdfiumEngine(wasmUrl, { logger, encoderPoolSize });\n engineRef.current = pdfEngine;\n
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/shared/hooks/use-pdfium-engine.ts","../../src/shared/context/pdf-engine-context.ts","../../src/shared/hooks/use-engine-context.ts","../../src/shared/components/pdf-engine-provider.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from '@framework';\nimport { ignore, Logger, PdfEngine } from '@embedpdf/models';\n\nconst defaultWasmUrl = `https://cdn.jsdelivr.net/npm/@embedpdf/pdfium@__PDFIUM_VERSION__/dist/pdfium.wasm`;\n\ninterface UsePdfiumEngineProps {\n wasmUrl?: string;\n worker?: boolean;\n logger?: Logger;\n encoderPoolSize?: number;\n}\n\nexport function usePdfiumEngine(config?: UsePdfiumEngineProps) {\n const { wasmUrl = defaultWasmUrl, worker = true, logger, encoderPoolSize } = config ?? {};\n\n const [engine, setEngine] = useState<PdfEngine | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n const engineRef = useRef<PdfEngine | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n\n (async () => {\n try {\n const { createPdfiumEngine } = worker\n ? await import('@embedpdf/engines/pdfium-worker-engine')\n : await import('@embedpdf/engines/pdfium-direct-engine');\n\n const pdfEngine = await createPdfiumEngine(wasmUrl, { logger, encoderPoolSize });\n engineRef.current = pdfEngine;\n setEngine(pdfEngine);\n setLoading(false);\n } catch (e) {\n if (!cancelled) {\n setError(e as Error);\n setLoading(false);\n }\n }\n })();\n\n return () => {\n cancelled = true;\n engineRef.current?.closeAllDocuments?.().wait(() => {\n engineRef.current?.destroy?.();\n engineRef.current = null;\n }, ignore);\n };\n }, [wasmUrl, worker, logger]);\n\n return { engine, isLoading: loading, error };\n}\n","import { createContext } from '@framework';\nimport type { PdfEngine } from '@embedpdf/models';\n\nexport interface PdfEngineContextState {\n engine: PdfEngine | null;\n isLoading: boolean;\n error: Error | null;\n}\n\nexport const PdfEngineContext = createContext<PdfEngineContextState | undefined>(undefined);\n","import { useContext } from '@framework';\nimport { PdfEngineContext, PdfEngineContextState } from '../context';\n\n/**\n * Hook to access the PDF engine from context.\n * @returns The PDF engine context state\n * @throws Error if used outside of PdfEngineProvider\n */\nexport function useEngineContext(): PdfEngineContextState {\n const contextValue = useContext(PdfEngineContext);\n\n if (contextValue === undefined) {\n throw new Error('useEngineContext must be used within a PdfEngineProvider');\n }\n\n return contextValue;\n}\n\n/**\n * Hook to access the PDF engine, with a more convenient API.\n * @returns The PDF engine or null if loading/error\n */\nexport function useEngine() {\n const { engine, error } = useEngineContext();\n\n if (error) {\n throw error;\n }\n\n return engine;\n}\n","import { ReactNode } from '@framework';\nimport { PdfEngineContext } from '../context';\nimport type { PdfEngine } from '@embedpdf/models';\n\nexport interface PdfEngineProviderProps {\n children: ReactNode;\n engine: PdfEngine | null;\n isLoading: boolean;\n error: Error | null;\n}\n\n/**\n * Provider component that makes a PDF engine instance available\n * to all child components via context.\n *\n * This provider is completely engine-agnostic - it accepts any engine\n * and its loading state from the parent component.\n */\nexport function PdfEngineProvider({ children, engine, isLoading, error }: PdfEngineProviderProps) {\n const contextValue = {\n engine,\n isLoading,\n error,\n };\n\n return <PdfEngineContext.Provider value={contextValue}>{children}</PdfEngineContext.Provider>;\n}\n"],"names":["defaultWasmUrl","PdfEngineContext","createContext","useEngineContext","contextValue","useContext","Error","children","engine","isLoading","error","Provider","value","config","wasmUrl","worker","logger","encoderPoolSize","setEngine","useState","loading","setLoading","setError","engineRef","useRef","useEffect","cancelled","createPdfiumEngine","import","pdfEngine","current","e","_b","_a","closeAllDocuments","call","wait","destroy","ignore"],"mappings":"uVAGMA,EAAiB,uECMhB,MAAMC,EAAmBC,EAAAA,mBAAiD,GCD1E,SAASC,IACd,MAAMC,EAAeC,EAAAA,WAAWJ,GAEhC,QAAqB,IAAjBG,EACF,MAAM,IAAIE,MAAM,4DAGlB,OAAOF,CACT,2BCEO,UAA2BG,SAAEA,EAAAC,OAAUA,EAAAC,UAAQA,EAAAC,MAAWA,IAC/D,MAAMN,EAAe,CACnBI,SACAC,YACAC,SAGF,aAAQT,EAAiBU,SAAjB,CAA0BC,MAAOR,EAAeG,YAC1D,oBDJO,WACL,MAAMC,OAAEA,EAAAE,MAAQA,GAAUP,IAE1B,GAAIO,EACF,MAAMA,EAGR,OAAOF,CACT,qDFlBO,SAAyBK,GAC9B,MAAMC,QAAEA,EAAUd,EAAAe,OAAgBA,GAAS,SAAMC,EAAAC,gBAAQA,GAAoBJ,GAAU,CAAA,GAEhFL,EAAQU,GAAaC,EAAAA,SAA2B,OAChDC,EAASC,GAAcF,EAAAA,UAAS,IAChCT,EAAOY,GAAYH,EAAAA,SAAuB,MAC3CI,EAAYC,EAAAA,OAAyB,MAgC3C,OA9BAC,EAAAA,UAAU,KACR,IAAIC,GAAY,EAoBhB,MAlBA,WACE,IACE,MAAMC,mBAAEA,GAAuBZ,QACrBa,OAAO,gDACPA,OAAO,0CAEXC,QAAkBF,EAAmBb,EAAS,CAAEE,SAAQC,oBAC9DM,EAAUO,QAAUD,EACpBX,EAAUW,GACVR,GAAW,EACb,OAASU,GACFL,IACHJ,EAASS,GACTV,GAAW,GAEf,CACF,EAhBA,GAkBO,aACLK,GAAY,EACZ,OAAAM,EAAA,OAAAC,EAAAV,EAAUO,cAAV,EAAAG,EAAmBC,oBAAnBF,EAAAG,KAAAF,GAAyCG,KAAK,aAC5C,OAAAJ,EAAA,OAAAC,EAAAV,EAAUO,gBAAVG,EAAmBI,UAAnBL,EAAAG,KAAAF,GACAV,EAAUO,QAAU,MACnBQ,EAAAA,UAEJ,CAACxB,EAASC,EAAQC,IAEd,CAAER,SAAQC,UAAWW,EAASV,QACvC"}
|