@embedpdf/engines 2.10.0 → 2.11.0

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.
Files changed (42) hide show
  1. package/dist/direct-engine-BNQEVS9L.cjs +2 -0
  2. package/dist/direct-engine-BNQEVS9L.cjs.map +1 -0
  3. package/dist/{direct-engine-4LZYs06h.js → direct-engine-cyecHjwI.js} +346 -27
  4. package/dist/direct-engine-cyecHjwI.js.map +1 -0
  5. package/dist/index.cjs +1 -1
  6. package/dist/index.cjs.map +1 -1
  7. package/dist/index.js +17 -2
  8. package/dist/index.js.map +1 -1
  9. package/dist/lib/orchestrator/pdf-engine.d.ts +5 -0
  10. package/dist/lib/orchestrator/remote-executor.d.ts +5 -0
  11. package/dist/lib/pdfium/cache.d.ts +1 -0
  12. package/dist/lib/pdfium/engine.d.ts +51 -7
  13. package/dist/lib/pdfium/index.cjs +1 -1
  14. package/dist/lib/pdfium/index.js +3 -3
  15. package/dist/lib/pdfium/web/direct-engine.cjs +1 -1
  16. package/dist/lib/pdfium/web/direct-engine.js +2 -2
  17. package/dist/lib/pdfium/web/worker-engine.cjs +1 -1
  18. package/dist/lib/pdfium/web/worker-engine.cjs.map +1 -1
  19. package/dist/lib/pdfium/web/worker-engine.js +22 -2
  20. package/dist/lib/pdfium/web/worker-engine.js.map +1 -1
  21. package/dist/lib/webworker/engine.cjs +1 -1
  22. package/dist/lib/webworker/engine.cjs.map +1 -1
  23. package/dist/lib/webworker/engine.d.ts +10 -0
  24. package/dist/lib/webworker/engine.js +79 -0
  25. package/dist/lib/webworker/engine.js.map +1 -1
  26. package/dist/pdf-engine-BoFryxxe.cjs +2 -0
  27. package/dist/{pdf-engine-BeHgaBOW.cjs.map → pdf-engine-BoFryxxe.cjs.map} +1 -1
  28. package/dist/{pdf-engine-sORqXhQk.js → pdf-engine-Dj-haWhC.js} +54 -1
  29. package/dist/{pdf-engine-sORqXhQk.js.map → pdf-engine-Dj-haWhC.js.map} +1 -1
  30. package/dist/preact/index.cjs +1 -1
  31. package/dist/preact/index.js +1 -1
  32. package/dist/react/index.cjs +1 -1
  33. package/dist/react/index.js +1 -1
  34. package/dist/svelte/index.cjs +1 -1
  35. package/dist/svelte/index.js +1 -1
  36. package/dist/vue/index.cjs +1 -1
  37. package/dist/vue/index.js +1 -1
  38. package/package.json +7 -7
  39. package/dist/direct-engine-4LZYs06h.js.map +0 -1
  40. package/dist/direct-engine-C29Euebw.cjs +0 -2
  41. package/dist/direct-engine-C29Euebw.cjs.map +0 -1
  42. package/dist/pdf-engine-BeHgaBOW.cjs +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"pdf-engine-sORqXhQk.js","sources":["../src/lib/orchestrator/task-queue.ts","../src/lib/orchestrator/pdf-engine.ts"],"sourcesContent":["import { Task, TaskError, Logger, NoopLogger } from '@embedpdf/models';\n\nconst LOG_SOURCE = 'TaskQueue';\nconst LOG_CATEGORY = 'Queue';\n\nexport enum Priority {\n CRITICAL = 3,\n HIGH = 2,\n MEDIUM = 1,\n LOW = 0,\n}\n\n// ============================================================================\n// Type Utilities\n// ============================================================================\n\n/**\n * Extract result type from Task\n */\nexport type ExtractTaskResult<T> = T extends Task<infer R, any, any> ? R : never;\n\n/**\n * Extract error type from Task\n */\nexport type ExtractTaskError<T> = T extends Task<any, infer D, any> ? D : never;\n\n/**\n * Extract progress type from Task\n */\nexport type ExtractTaskProgress<T> = T extends Task<any, any, infer P> ? P : never;\n\n// ============================================================================\n// Queue Interfaces\n// ============================================================================\n\nexport interface QueuedTask<T extends Task<any, any, any>> {\n id: string;\n priority: Priority;\n meta?: Record<string, unknown>;\n executeFactory: () => T; // Factory function - called when it's time to execute!\n cancelled?: boolean;\n}\n\nexport interface EnqueueOptions {\n priority?: Priority;\n meta?: Record<string, unknown>;\n fifo?: boolean;\n}\n\nexport type TaskComparator = (a: QueuedTask<any>, b: QueuedTask<any>) => number;\nexport type TaskRanker = (task: QueuedTask<any>) => number;\n\nexport interface WorkerTaskQueueOptions {\n concurrency?: number;\n comparator?: TaskComparator;\n ranker?: TaskRanker;\n onIdle?: () => void;\n maxQueueSize?: number;\n autoStart?: boolean;\n logger?: Logger;\n}\n\n// ============================================================================\n// WorkerTaskQueue - Corrected with Deferred Execution\n// ============================================================================\n\nexport class WorkerTaskQueue {\n private queue: QueuedTask<any>[] = [];\n private running = 0;\n private resultTasks = new Map<string, Task<any, any, any>>();\n private logger: Logger;\n private opts: Required<Omit<WorkerTaskQueueOptions, 'comparator' | 'ranker' | 'logger'>> & {\n comparator?: TaskComparator;\n ranker?: TaskRanker;\n };\n\n constructor(options: WorkerTaskQueueOptions = {}) {\n const {\n concurrency = 1,\n comparator,\n ranker,\n onIdle,\n maxQueueSize,\n autoStart = true,\n logger,\n } = options;\n this.logger = logger ?? new NoopLogger();\n this.opts = {\n concurrency: Math.max(1, concurrency),\n comparator,\n ranker,\n onIdle: onIdle ?? (() => {}),\n maxQueueSize: maxQueueSize ?? Number.POSITIVE_INFINITY,\n autoStart,\n };\n }\n\n setComparator(comparator?: TaskComparator): void {\n this.opts.comparator = comparator;\n }\n\n setRanker(ranker?: TaskRanker): void {\n this.opts.ranker = ranker;\n }\n\n size(): number {\n return this.queue.length;\n }\n\n inFlight(): number {\n return this.running;\n }\n\n isIdle(): boolean {\n return this.queue.length === 0 && this.running === 0;\n }\n\n async drain(): Promise<void> {\n if (this.isIdle()) return;\n await new Promise<void>((resolve) => {\n const check = () => {\n if (this.isIdle()) {\n this.offIdle(check);\n resolve();\n }\n };\n this.onIdle(check);\n });\n }\n\n private idleListeners = new Set<() => void>();\n private notifyIdle() {\n if (this.isIdle()) {\n [...this.idleListeners].forEach((fn) => fn());\n this.idleListeners.clear();\n this.opts.onIdle();\n }\n }\n private onIdle(fn: () => void) {\n this.idleListeners.add(fn);\n }\n private offIdle(fn: () => void) {\n this.idleListeners.delete(fn);\n }\n\n /**\n * Enqueue a task factory - with automatic type inference!\n *\n * The factory function is ONLY called when it's the task's turn to execute.\n *\n * Usage:\n * const task = queue.enqueue({\n * execute: () => this.executor.getMetadata(doc), // Factory - not called yet!\n * meta: { operation: 'getMetadata' }\n * }, { priority: Priority.LOW });\n *\n * The returned task has the SAME type as executor.getMetadata() would return!\n */\n enqueue<T extends Task<any, any, any>>(\n taskDef: {\n execute: () => T; // Factory function that returns Task when called!\n meta?: Record<string, unknown>;\n },\n options: EnqueueOptions = {},\n ): T {\n const id = this.generateId();\n const priority = options.priority ?? Priority.MEDIUM;\n\n // Create a proxy task that we return to the user\n // This task bridges to the real task that will be created later\n const resultTask = new Task<\n ExtractTaskResult<T>,\n ExtractTaskError<T>,\n ExtractTaskProgress<T>\n >() as T;\n\n if (this.queue.length >= this.opts.maxQueueSize) {\n const error = new Error('Queue is full (maxQueueSize reached).');\n resultTask.reject(error as any);\n return resultTask;\n }\n\n // Store the result task for bridging\n this.resultTasks.set(id, resultTask);\n\n const queuedTask: QueuedTask<T> = {\n id,\n priority,\n meta: options.meta ?? taskDef.meta,\n executeFactory: taskDef.execute, // Store factory, don't call it yet!\n };\n\n this.queue.push(queuedTask);\n\n this.logger.debug(\n LOG_SOURCE,\n LOG_CATEGORY,\n `Task enqueued: ${id} | Priority: ${priority} | Running: ${this.running} | Queued: ${this.queue.length}`,\n );\n\n // Set up automatic abort handling\n // When result task is aborted externally, remove from queue\n const originalAbort = resultTask.abort.bind(resultTask);\n resultTask.abort = (reason: any) => {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, `Task aborted: ${id}`);\n this.cancel(id);\n originalAbort(reason);\n };\n\n if (this.opts.autoStart) this.process(options.fifo === true);\n\n return resultTask;\n }\n\n /**\n * Cancel/remove a task from the queue\n */\n private cancel(taskId: string): void {\n const before = this.queue.length;\n this.queue = this.queue.filter((t) => {\n if (t.id === taskId) {\n t.cancelled = true;\n return false;\n }\n return true;\n });\n\n this.resultTasks.delete(taskId);\n\n if (before !== this.queue.length) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, `Task cancelled and removed: ${taskId}`);\n this.kick();\n }\n }\n\n private kick() {\n queueMicrotask(() => this.process());\n }\n\n private async process(fifo = false): Promise<void> {\n this.logger.debug(\n LOG_SOURCE,\n LOG_CATEGORY,\n `process() called | Running: ${this.running} | Concurrency: ${this.opts.concurrency} | Queued: ${this.queue.length}`,\n );\n\n while (this.running < this.opts.concurrency && this.queue.length > 0) {\n this.logger.debug(\n LOG_SOURCE,\n LOG_CATEGORY,\n `Starting new task | Running: ${this.running} | Queued: ${this.queue.length}`,\n );\n\n if (!fifo) this.sortQueue();\n\n const queuedTask = this.queue.shift()!;\n if (queuedTask.cancelled) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, `Skipping cancelled task: ${queuedTask.id}`);\n continue;\n }\n\n const resultTask = this.resultTasks.get(queuedTask.id);\n if (!resultTask) continue; // Shouldn't happen, but guard anyway.\n\n this.running++;\n\n // NOW call the factory to create the real task!\n (async () => {\n let realTask: Task<any, any, any> | null = null;\n\n try {\n // Call the factory function NOW - this is when execution actually starts\n realTask = queuedTask.executeFactory();\n\n // Guard against null/undefined return from factory\n if (!realTask) {\n throw new Error('Task factory returned null/undefined');\n }\n\n // Bridge the real task to the result task\n realTask.wait(\n (result) => {\n if (resultTask.state.stage === 0 /* Pending */) {\n resultTask.resolve(result);\n }\n },\n (error) => {\n if (resultTask.state.stage === 0 /* Pending */) {\n if (error.type === 'abort') {\n resultTask.abort(error.reason);\n } else {\n resultTask.reject(error.reason);\n }\n }\n },\n );\n\n // Bridge progress\n realTask.onProgress((progress) => {\n resultTask.progress(progress);\n });\n\n // Wait for completion\n await realTask.toPromise();\n } catch (error) {\n // Handle any errors from factory or execution\n if (resultTask.state.stage === 0 /* Pending */) {\n resultTask.reject(error as any);\n }\n } finally {\n this.resultTasks.delete(queuedTask.id);\n this.running--;\n\n this.logger.debug(\n LOG_SOURCE,\n LOG_CATEGORY,\n `Task completed: ${queuedTask.id} | Running: ${this.running} | Queued: ${this.queue.length}`,\n );\n\n if (this.isIdle()) {\n this.notifyIdle();\n } else if (this.queue.length > 0) {\n this.kick();\n }\n }\n })().catch((error) => {\n this.logger.error(\n LOG_SOURCE,\n LOG_CATEGORY,\n 'Unhandled error in task execution wrapper:',\n error,\n );\n this.running = Math.max(0, this.running - 1);\n if (this.isIdle()) {\n this.notifyIdle();\n } else if (this.queue.length > 0) {\n this.kick();\n }\n });\n }\n }\n\n private sortQueue(): void {\n const { comparator, ranker } = this.opts;\n if (comparator) {\n this.queue.sort(comparator);\n return;\n }\n\n const rankCache = new Map<string, number>();\n const getRank = (t: QueuedTask<any>) => {\n if (!ranker) return this.defaultRank(t);\n if (!rankCache.has(t.id)) rankCache.set(t.id, ranker(t));\n return rankCache.get(t.id)!;\n };\n\n this.queue.sort((a, b) => {\n if (a.priority !== b.priority) return b.priority - a.priority;\n const ar = getRank(a);\n const br = getRank(b);\n if (ar !== br) return br - ar;\n return this.extractTime(a.id) - this.extractTime(b.id);\n });\n }\n\n private defaultRank(_task: QueuedTask<any>): number {\n return 0;\n }\n\n private generateId(): string {\n if (typeof crypto !== 'undefined' && 'randomUUID' in crypto) {\n return crypto.randomUUID();\n }\n return `${Date.now()}-${Math.random().toString(36).slice(2)}`;\n }\n\n private extractTime(id: string): number {\n const t = Number(id.split('-')[0]);\n return Number.isFinite(t) ? t : 0;\n }\n}\n","import {\n BatchProgress,\n Logger,\n NoopLogger,\n PdfEngine as IPdfEngine,\n PdfDocumentObject,\n PdfPageObject,\n PdfTask,\n PdfErrorReason,\n PdfFileUrl,\n PdfFile,\n PdfOpenDocumentUrlOptions,\n PdfOpenDocumentBufferOptions,\n PdfMetadataObject,\n PdfBookmarksObject,\n PdfBookmarkObject,\n PdfRenderPageOptions,\n PdfRenderThumbnailOptions,\n PdfRenderPageAnnotationOptions,\n PdfAnnotationObject,\n PdfTextRectObject,\n PdfSearchAllPagesOptions,\n SearchAllPagesResult,\n PdfPageSearchProgress,\n PdfAnnotationsProgress,\n PdfAttachmentObject,\n PdfAddAttachmentParams,\n PdfDocumentJavaScriptActionObject,\n PdfWidgetAnnoObject,\n PdfWidgetAnnoField,\n PdfWidgetJavaScriptActionObject,\n FormFieldValue,\n PdfFlattenPageOptions,\n PdfPageFlattenResult,\n PdfRedactTextOptions,\n Rect,\n PageTextSlice,\n PdfGlyphObject,\n PdfPageGeometry,\n PdfPageTextRuns,\n PdfPrintOptions,\n PdfEngineFeature,\n PdfEngineOperation,\n PdfSignatureObject,\n AnnotationCreateContext,\n Task,\n PdfErrorCode,\n SearchResult,\n CompoundTask,\n ImageDataLike,\n IPdfiumExecutor,\n AnnotationAppearanceMap,\n} from '@embedpdf/models';\nimport { WorkerTaskQueue, Priority } from './task-queue';\nimport type { ImageDataConverter } from '../converters/types';\n\n// Re-export for convenience\nexport type { ImageDataConverter } from '../converters/types';\nexport type { ImageDataLike, IPdfiumExecutor, BatchProgress } from '@embedpdf/models';\n\nconst LOG_SOURCE = 'PdfEngine';\nconst LOG_CATEGORY = 'Orchestrator';\n\nexport interface PdfEngineOptions<T> {\n /**\n * Image data converter (for encoding raw image data to Blob/other format)\n */\n imageConverter: ImageDataConverter<T>;\n /**\n * Fetch function for fetching remote URLs\n */\n fetcher?: typeof fetch;\n /**\n * Logger instance\n */\n logger?: Logger;\n}\n\n/**\n * PdfEngine orchestrator\n *\n * This is the \"smart\" layer that:\n * - Implements the PdfEngine interface\n * - Uses WorkerTaskQueue for priority-based task scheduling\n * - Orchestrates complex multi-page operations\n * - Handles image encoding with separate encoder pool\n * - Manages visibility-based task ranking\n */\nexport class PdfEngine<T = Blob> implements IPdfEngine<T> {\n private executor: IPdfiumExecutor;\n private workerQueue: WorkerTaskQueue;\n private logger: Logger;\n private options: PdfEngineOptions<T>;\n\n constructor(executor: IPdfiumExecutor, options: PdfEngineOptions<T>) {\n this.executor = executor;\n this.logger = options.logger ?? new NoopLogger();\n this.options = {\n imageConverter: options.imageConverter,\n fetcher:\n options.fetcher ??\n (typeof fetch !== 'undefined' ? (url, init) => fetch(url, init) : undefined),\n logger: this.logger,\n };\n\n // Create worker queue with single concurrency (PDFium is single-threaded)\n this.workerQueue = new WorkerTaskQueue({\n concurrency: 1,\n autoStart: true,\n logger: this.logger,\n });\n\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'PdfEngine orchestrator created');\n }\n\n /**\n * Split an array into chunks of a given size\n */\n private chunkArray<U>(items: U[], chunkSize: number): U[][] {\n const chunks: U[][] = [];\n for (let i = 0; i < items.length; i += chunkSize) {\n chunks.push(items.slice(i, i + chunkSize));\n }\n return chunks;\n }\n\n // ========== IPdfEngine Implementation ==========\n\n isSupport(feature: PdfEngineFeature): PdfTask<PdfEngineOperation[]> {\n const task = new Task<PdfEngineOperation[], PdfErrorReason>();\n // PDFium supports all features\n task.resolve([\n PdfEngineOperation.Create,\n PdfEngineOperation.Read,\n PdfEngineOperation.Update,\n PdfEngineOperation.Delete,\n ]);\n return task;\n }\n\n destroy(): PdfTask<boolean> {\n const task = new Task<boolean, PdfErrorReason>();\n try {\n this.executor.destroy();\n // Clean up image converter resources (e.g., encoder worker pool)\n this.options.imageConverter.destroy?.();\n task.resolve(true);\n } catch (error) {\n task.reject({ code: PdfErrorCode.Unknown, message: String(error) });\n }\n return task;\n }\n\n openDocumentUrl(\n file: PdfFileUrl,\n options?: PdfOpenDocumentUrlOptions,\n ): PdfTask<PdfDocumentObject> {\n const task = new Task<PdfDocumentObject, PdfErrorReason>();\n\n // Handle fetch in main thread (not worker!)\n (async () => {\n try {\n if (!this.options.fetcher) {\n throw new Error('Fetcher is not set');\n }\n\n const response = await this.options.fetcher(file.url, options?.requestOptions);\n const arrayBuf = await response.arrayBuffer();\n\n const pdfFile: PdfFile = {\n id: file.id,\n content: arrayBuf,\n };\n\n // Then open in worker - use wait() to properly propagate task errors\n this.openDocumentBuffer(pdfFile, {\n password: options?.password,\n normalizeRotation: options?.normalizeRotation,\n }).wait(\n (doc) => task.resolve(doc),\n (error) => task.fail(error),\n );\n } catch (error) {\n // This only catches fetch errors (network issues, etc.)\n task.reject({ code: PdfErrorCode.Unknown, message: String(error) });\n }\n })();\n\n return task;\n }\n\n openDocumentBuffer(\n file: PdfFile,\n options?: PdfOpenDocumentBufferOptions,\n ): PdfTask<PdfDocumentObject> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.openDocumentBuffer(file, options),\n meta: { docId: file.id, operation: 'openDocumentBuffer' },\n },\n { priority: Priority.CRITICAL },\n );\n }\n\n getMetadata(doc: PdfDocumentObject): PdfTask<PdfMetadataObject> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getMetadata(doc),\n meta: { docId: doc.id, operation: 'getMetadata' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n setMetadata(doc: PdfDocumentObject, metadata: Partial<PdfMetadataObject>): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.setMetadata(doc, metadata),\n meta: { docId: doc.id, operation: 'setMetadata' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n getDocPermissions(doc: PdfDocumentObject): PdfTask<number> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getDocPermissions(doc),\n meta: { docId: doc.id, operation: 'getDocPermissions' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n getDocUserPermissions(doc: PdfDocumentObject): PdfTask<number> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getDocUserPermissions(doc),\n meta: { docId: doc.id, operation: 'getDocUserPermissions' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n getSignatures(doc: PdfDocumentObject): PdfTask<PdfSignatureObject[]> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getSignatures(doc),\n meta: { docId: doc.id, operation: 'getSignatures' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n getBookmarks(doc: PdfDocumentObject): PdfTask<PdfBookmarksObject> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getBookmarks(doc),\n meta: { docId: doc.id, operation: 'getBookmarks' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n setBookmarks(doc: PdfDocumentObject, bookmarks: PdfBookmarkObject[]): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.setBookmarks(doc, bookmarks),\n meta: { docId: doc.id, operation: 'setBookmarks' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n deleteBookmarks(doc: PdfDocumentObject): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.deleteBookmarks(doc),\n meta: { docId: doc.id, operation: 'deleteBookmarks' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n // ========== Rendering with Encoding ==========\n\n renderPage(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n options?: PdfRenderPageOptions,\n ): PdfTask<T> {\n return this.renderWithEncoding(\n () => this.executor.renderPageRaw(doc, page, options),\n options,\n doc.id,\n page.index,\n Priority.CRITICAL,\n );\n }\n\n renderPageRect(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n rect: Rect,\n options?: PdfRenderPageOptions,\n ): PdfTask<T> {\n return this.renderWithEncoding(\n () => this.executor.renderPageRect(doc, page, rect, options),\n options,\n doc.id,\n page.index,\n Priority.HIGH,\n );\n }\n\n // ========== Raw Rendering (no encoding) ==========\n\n renderPageRaw(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n options?: PdfRenderPageOptions,\n ): PdfTask<ImageDataLike> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.renderPageRaw(doc, page, options),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'renderPageRaw' },\n },\n { priority: Priority.HIGH },\n );\n }\n\n renderPageRectRaw(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n rect: Rect,\n options?: PdfRenderPageOptions,\n ): PdfTask<ImageDataLike> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.renderPageRect(doc, page, rect, options),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'renderPageRectRaw' },\n },\n { priority: Priority.HIGH },\n );\n }\n\n renderThumbnail(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n options?: PdfRenderThumbnailOptions,\n ): PdfTask<T> {\n return this.renderWithEncoding(\n () => this.executor.renderThumbnailRaw(doc, page, options),\n options,\n doc.id,\n page.index,\n Priority.MEDIUM,\n );\n }\n\n renderPageAnnotation(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfAnnotationObject,\n options?: PdfRenderPageAnnotationOptions,\n ): PdfTask<T> {\n return this.renderWithEncoding(\n () => this.executor.renderPageAnnotationRaw(doc, page, annotation, options),\n options,\n doc.id,\n page.index,\n Priority.MEDIUM,\n );\n }\n\n renderPageAnnotations(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n options?: PdfRenderPageAnnotationOptions,\n ): PdfTask<AnnotationAppearanceMap<T>> {\n const resultTask = new Task<AnnotationAppearanceMap<T>, PdfErrorReason>();\n\n const renderHandle = this.workerQueue.enqueue(\n {\n execute: () => this.executor.renderPageAnnotationsRaw(doc, page, options),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'renderPageAnnotationsRaw' },\n },\n { priority: Priority.MEDIUM },\n );\n\n // Wire up abort: when resultTask is aborted, also abort the queue task\n const originalAbort = resultTask.abort.bind(resultTask);\n resultTask.abort = (reason) => {\n renderHandle.abort(reason);\n originalAbort(reason);\n };\n\n renderHandle.wait(\n (rawMap) => {\n if (resultTask.state.stage !== 0 /* Pending */) {\n return;\n }\n this.encodeAppearanceMap(rawMap, options, resultTask);\n },\n (error) => {\n if (resultTask.state.stage === 0 /* Pending */) {\n resultTask.fail(error);\n }\n },\n );\n\n return resultTask;\n }\n\n renderPageAnnotationsRaw(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n options?: PdfRenderPageAnnotationOptions,\n ): PdfTask<AnnotationAppearanceMap<ImageDataLike>> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.renderPageAnnotationsRaw(doc, page, options),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'renderPageAnnotationsRaw' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n /**\n * Helper to render and encode in two stages with priority queue\n */\n private renderWithEncoding(\n renderFn: () => PdfTask<ImageDataLike>,\n options?: PdfRenderPageOptions | PdfRenderThumbnailOptions | PdfRenderPageAnnotationOptions,\n docId?: string,\n pageIndex?: number,\n priority: Priority = Priority.CRITICAL,\n ): PdfTask<T> {\n const resultTask = new Task<T, PdfErrorReason>();\n\n // Step 1: Add HIGH/MEDIUM priority task to render raw bytes\n const renderHandle = this.workerQueue.enqueue(\n {\n execute: () => renderFn(),\n meta: { docId, pageIndex, operation: 'render' },\n },\n { priority },\n );\n\n // Wire up abort: when resultTask is aborted, also abort the queue task\n const originalAbort = resultTask.abort.bind(resultTask);\n resultTask.abort = (reason) => {\n renderHandle.abort(reason); // Cancel the queue task!\n originalAbort(reason);\n };\n\n renderHandle.wait(\n (rawImageData) => {\n // Check if resultTask was already aborted before encoding\n if (resultTask.state.stage !== 0 /* Pending */) {\n return;\n }\n this.encodeImage(rawImageData, options, resultTask);\n },\n (error) => {\n // Only forward error if resultTask is still pending\n if (resultTask.state.stage === 0 /* Pending */) {\n resultTask.fail(error);\n }\n },\n );\n\n return resultTask;\n }\n\n /**\n * Encode image using encoder pool or inline\n */\n private encodeImage(\n rawImageData: ImageDataLike,\n options: any,\n resultTask: Task<T, PdfErrorReason>,\n ): void {\n const imageType = options?.imageType ?? 'image/webp';\n const quality = options?.quality;\n\n // Convert to plain object for encoding\n const plainImageData = {\n data: new Uint8ClampedArray(rawImageData.data),\n width: rawImageData.width,\n height: rawImageData.height,\n };\n\n this.options\n .imageConverter(() => plainImageData, imageType, quality)\n .then((result) => resultTask.resolve(result))\n .catch((error) => resultTask.reject({ code: PdfErrorCode.Unknown, message: String(error) }));\n }\n\n /**\n * Encode a full annotation appearance map to the output type T.\n */\n private encodeAppearanceMap(\n rawMap: AnnotationAppearanceMap<ImageDataLike>,\n options: PdfRenderPageAnnotationOptions | undefined,\n resultTask: Task<AnnotationAppearanceMap<T>, PdfErrorReason>,\n ): void {\n const imageType = options?.imageType ?? 'image/webp';\n const quality = options?.imageQuality;\n\n const convertImage = (rawImageData: ImageDataLike): Promise<T> => {\n const plainImageData = {\n data: new Uint8ClampedArray(rawImageData.data),\n width: rawImageData.width,\n height: rawImageData.height,\n };\n return this.options.imageConverter(() => plainImageData, imageType, quality);\n };\n\n const jobs: Promise<void>[] = [];\n const encodedMap: AnnotationAppearanceMap<T> = {};\n const modes: Array<'normal' | 'rollover' | 'down'> = ['normal', 'rollover', 'down'];\n\n for (const [annotationId, appearances] of Object.entries(rawMap)) {\n const encodedAppearances: NonNullable<AnnotationAppearanceMap<T>[string]> = {};\n encodedMap[annotationId] = encodedAppearances;\n\n for (const mode of modes) {\n const appearance = appearances[mode];\n if (!appearance) continue;\n\n jobs.push(\n convertImage(appearance.data).then((encodedData) => {\n encodedAppearances[mode] = {\n data: encodedData,\n rect: appearance.rect,\n };\n }),\n );\n }\n }\n\n Promise.all(jobs)\n .then(() => {\n if (resultTask.state.stage === 0 /* Pending */) {\n resultTask.resolve(encodedMap);\n }\n })\n .catch((error) => {\n if (resultTask.state.stage === 0 /* Pending */) {\n resultTask.reject({ code: PdfErrorCode.Unknown, message: String(error) });\n }\n });\n }\n\n // ========== Annotations ==========\n\n getPageAnnotations(doc: PdfDocumentObject, page: PdfPageObject): PdfTask<PdfAnnotationObject[]> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getPageAnnotations(doc, page),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'getPageAnnotations' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n createPageAnnotation<A extends PdfAnnotationObject>(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: A,\n context?: AnnotationCreateContext<A>,\n ): PdfTask<string> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.createPageAnnotation(doc, page, annotation, context),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'createPageAnnotation' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n updatePageAnnotation(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfAnnotationObject,\n options?: { regenerateAppearance?: boolean },\n ): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.updatePageAnnotation(doc, page, annotation, options),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'updatePageAnnotation' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n removePageAnnotation(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfAnnotationObject,\n ): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.removePageAnnotation(doc, page, annotation),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'removePageAnnotation' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n /**\n * Get all annotations across all pages\n * Uses batched operations to reduce queue overhead\n */\n getAllAnnotations(\n doc: PdfDocumentObject,\n ): CompoundTask<Record<number, PdfAnnotationObject[]>, PdfErrorReason, PdfAnnotationsProgress> {\n // Chunk pages for batched processing\n const chunks = this.chunkArray(doc.pages, 500);\n\n this.logger.debug(\n LOG_SOURCE,\n LOG_CATEGORY,\n `getAllAnnotations: ${doc.pages.length} pages in ${chunks.length} chunks`,\n );\n\n // Create compound task for result aggregation\n const compound = new CompoundTask<\n Record<number, PdfAnnotationObject[]>,\n PdfErrorReason,\n PdfAnnotationsProgress\n >({\n aggregate: (results) => Object.assign({}, ...results),\n });\n\n // Create one task per chunk and wire up progress forwarding\n chunks.forEach((chunkPages, chunkIndex) => {\n const batchTask = this.workerQueue.enqueue(\n {\n execute: () => this.executor.getAnnotationsBatch(doc, chunkPages),\n meta: { docId: doc.id, operation: 'getAnnotationsBatch', chunkSize: chunkPages.length },\n },\n { priority: Priority.LOW },\n );\n\n // Forward batch progress (per-page) to compound task\n batchTask.onProgress((batchProgress: BatchProgress<PdfAnnotationObject[]>) => {\n compound.progress({\n page: batchProgress.pageIndex,\n result: batchProgress.result,\n });\n });\n\n compound.addChild(batchTask, chunkIndex);\n });\n\n compound.finalize();\n return compound;\n }\n\n getPageTextRects(doc: PdfDocumentObject, page: PdfPageObject): PdfTask<PdfTextRectObject[]> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getPageTextRects(doc, page),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'getPageTextRects' },\n },\n {\n priority: Priority.MEDIUM,\n },\n );\n }\n\n // ========== Search ==========\n\n /**\n * Search across all pages\n * Uses batched operations to reduce queue overhead\n */\n searchAllPages(\n doc: PdfDocumentObject,\n keyword: string,\n options?: PdfSearchAllPagesOptions,\n ): PdfTask<SearchAllPagesResult, PdfPageSearchProgress> {\n const flags = Array.isArray(options?.flags)\n ? options.flags.reduce((acc, flag) => acc | flag, 0)\n : (options?.flags ?? 0);\n\n // Chunk pages for batched processing\n const chunks = this.chunkArray(doc.pages, 25);\n\n this.logger.debug(\n LOG_SOURCE,\n LOG_CATEGORY,\n `searchAllPages: ${doc.pages.length} pages in ${chunks.length} chunks`,\n );\n\n // Create compound task for result aggregation\n const compound = new CompoundTask<SearchAllPagesResult, PdfErrorReason, PdfPageSearchProgress>({\n aggregate: (results) => {\n // Merge all batch results into a flat array\n const allResults = results.flatMap((batchResult: Record<number, SearchResult[]>) =>\n Object.values(batchResult).flat(),\n );\n return { results: allResults, total: allResults.length };\n },\n });\n\n // Create one task per chunk and wire up progress forwarding\n chunks.forEach((chunkPages, chunkIndex) => {\n const batchTask = this.workerQueue.enqueue(\n {\n execute: () => this.executor.searchBatch(doc, chunkPages, keyword, flags),\n meta: { docId: doc.id, operation: 'searchBatch', chunkSize: chunkPages.length },\n },\n { priority: Priority.LOW },\n );\n\n // Forward batch progress (per-page) to compound task\n batchTask.onProgress((batchProgress: BatchProgress<SearchResult[]>) => {\n compound.progress({\n page: batchProgress.pageIndex,\n results: batchProgress.result,\n });\n });\n\n compound.addChild(batchTask, chunkIndex);\n });\n\n compound.finalize();\n return compound;\n }\n\n // ========== Attachments ==========\n\n getAttachments(doc: PdfDocumentObject): PdfTask<PdfAttachmentObject[]> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getAttachments(doc),\n meta: { docId: doc.id, operation: 'getAttachments' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n addAttachment(doc: PdfDocumentObject, params: PdfAddAttachmentParams): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.addAttachment(doc, params),\n meta: { docId: doc.id, operation: 'addAttachment' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n removeAttachment(doc: PdfDocumentObject, attachment: PdfAttachmentObject): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.removeAttachment(doc, attachment),\n meta: { docId: doc.id, operation: 'removeAttachment' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n readAttachmentContent(\n doc: PdfDocumentObject,\n attachment: PdfAttachmentObject,\n ): PdfTask<ArrayBuffer> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.readAttachmentContent(doc, attachment),\n meta: { docId: doc.id, operation: 'readAttachmentContent' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n // ========== Forms ==========\n\n getDocumentJavaScriptActions(\n doc: PdfDocumentObject,\n ): PdfTask<PdfDocumentJavaScriptActionObject[]> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getDocumentJavaScriptActions(doc),\n meta: { docId: doc.id, operation: 'getDocumentJavaScriptActions' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n getPageAnnoWidgets(doc: PdfDocumentObject, page: PdfPageObject): PdfTask<PdfWidgetAnnoObject[]> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getPageAnnoWidgets(doc, page),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'getPageAnnoWidgets' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n getPageWidgetJavaScriptActions(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n ): PdfTask<PdfWidgetJavaScriptActionObject[]> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getPageWidgetJavaScriptActions(doc, page),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'getPageWidgetJavaScriptActions' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n setFormFieldValue(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfWidgetAnnoObject,\n value: FormFieldValue,\n ): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.setFormFieldValue(doc, page, annotation, value),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'setFormFieldValue' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n setFormFieldState(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfWidgetAnnoObject,\n field: PdfWidgetAnnoField,\n ): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.setFormFieldState(doc, page, annotation, field),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'setFormFieldState' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n renameWidgetField(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfWidgetAnnoObject,\n name: string,\n ): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.renameWidgetField(doc, page, annotation, name),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'renameWidgetField' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n shareWidgetField(\n doc: PdfDocumentObject,\n sourcePage: PdfPageObject,\n sourceAnnotation: PdfWidgetAnnoObject,\n targetPage: PdfPageObject,\n targetAnnotation: PdfWidgetAnnoObject,\n ): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () =>\n this.executor.shareWidgetField(\n doc,\n sourcePage,\n sourceAnnotation,\n targetPage,\n targetAnnotation,\n ),\n meta: {\n docId: doc.id,\n pageIndex: sourcePage.index,\n operation: 'shareWidgetField',\n },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n regenerateWidgetAppearances(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotationIds: string[],\n ): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.regenerateWidgetAppearances(doc, page, annotationIds),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'regenerateWidgetAppearances' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n flattenPage(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n options?: PdfFlattenPageOptions,\n ): PdfTask<PdfPageFlattenResult> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.flattenPage(doc, page, options),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'flattenPage' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n // ========== Text Operations ==========\n\n extractPages(doc: PdfDocumentObject, pageIndexes: number[]): PdfTask<ArrayBuffer> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.extractPages(doc, pageIndexes),\n meta: { docId: doc.id, pageIndexes: pageIndexes, operation: 'extractPages' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n extractText(doc: PdfDocumentObject, pageIndexes: number[]): PdfTask<string> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.extractText(doc, pageIndexes),\n meta: { docId: doc.id, pageIndexes: pageIndexes, operation: 'extractText' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n redactTextInRects(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n rects: Rect[],\n options?: PdfRedactTextOptions,\n ): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.redactTextInRects(doc, page, rects, options),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'redactTextInRects' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n applyRedaction(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfAnnotationObject,\n ): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.applyRedaction(doc, page, annotation),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'applyRedaction' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n applyAllRedactions(doc: PdfDocumentObject, page: PdfPageObject): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.applyAllRedactions(doc, page),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'applyAllRedactions' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n flattenAnnotation(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfAnnotationObject,\n ): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.flattenAnnotation(doc, page, annotation),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'flattenAnnotation' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n getTextSlices(doc: PdfDocumentObject, slices: PageTextSlice[]): PdfTask<string[]> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getTextSlices(doc, slices),\n meta: { docId: doc.id, slices: slices, operation: 'getTextSlices' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n getPageGlyphs(doc: PdfDocumentObject, page: PdfPageObject): PdfTask<PdfGlyphObject[]> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getPageGlyphs(doc, page),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'getPageGlyphs' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n getPageGeometry(doc: PdfDocumentObject, page: PdfPageObject): PdfTask<PdfPageGeometry> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getPageGeometry(doc, page),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'getPageGeometry' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n getPageTextRuns(doc: PdfDocumentObject, page: PdfPageObject): PdfTask<PdfPageTextRuns> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getPageTextRuns(doc, page),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'getPageTextRuns' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n // ========== Document Operations ==========\n\n merge(files: PdfFile[]): PdfTask<PdfFile> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.merge(files),\n meta: { docId: files.map((file) => file.id).join(','), operation: 'merge' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n mergePages(mergeConfigs: Array<{ docId: string; pageIndices: number[] }>): PdfTask<PdfFile> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.mergePages(mergeConfigs),\n meta: {\n docId: mergeConfigs.map((config) => config.docId).join(','),\n operation: 'mergePages',\n },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n preparePrintDocument(doc: PdfDocumentObject, options?: PdfPrintOptions): PdfTask<ArrayBuffer> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.preparePrintDocument(doc, options),\n meta: { docId: doc.id, operation: 'preparePrintDocument' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n saveAsCopy(doc: PdfDocumentObject): PdfTask<ArrayBuffer> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.saveAsCopy(doc),\n meta: { docId: doc.id, operation: 'saveAsCopy' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n closeDocument(doc: PdfDocumentObject): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.closeDocument(doc),\n meta: { docId: doc.id, operation: 'closeDocument' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n closeAllDocuments(): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.closeAllDocuments(),\n meta: { operation: 'closeAllDocuments' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.setDocumentEncryption}\n */\n setDocumentEncryption(\n doc: PdfDocumentObject,\n userPassword: string,\n ownerPassword: string,\n allowedFlags: number,\n ): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () =>\n this.executor.setDocumentEncryption(doc, userPassword, ownerPassword, allowedFlags),\n meta: { docId: doc.id, operation: 'setDocumentEncryption' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.removeEncryption}\n */\n removeEncryption(doc: PdfDocumentObject): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.removeEncryption(doc),\n meta: { docId: doc.id, operation: 'removeEncryption' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.unlockOwnerPermissions}\n */\n unlockOwnerPermissions(doc: PdfDocumentObject, ownerPassword: string): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.unlockOwnerPermissions(doc, ownerPassword),\n meta: { docId: doc.id, operation: 'unlockOwnerPermissions' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.isEncrypted}\n */\n isEncrypted(doc: PdfDocumentObject): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.isEncrypted(doc),\n meta: { docId: doc.id, operation: 'isEncrypted' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.isOwnerUnlocked}\n */\n isOwnerUnlocked(doc: PdfDocumentObject): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.isOwnerUnlocked(doc),\n meta: { docId: doc.id, operation: 'isOwnerUnlocked' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n}\n"],"names":["LOG_SOURCE","LOG_CATEGORY","Priority"],"mappings":"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"}
1
+ {"version":3,"file":"pdf-engine-Dj-haWhC.js","sources":["../src/lib/orchestrator/task-queue.ts","../src/lib/orchestrator/pdf-engine.ts"],"sourcesContent":["import { Task, TaskError, Logger, NoopLogger } from '@embedpdf/models';\n\nconst LOG_SOURCE = 'TaskQueue';\nconst LOG_CATEGORY = 'Queue';\n\nexport enum Priority {\n CRITICAL = 3,\n HIGH = 2,\n MEDIUM = 1,\n LOW = 0,\n}\n\n// ============================================================================\n// Type Utilities\n// ============================================================================\n\n/**\n * Extract result type from Task\n */\nexport type ExtractTaskResult<T> = T extends Task<infer R, any, any> ? R : never;\n\n/**\n * Extract error type from Task\n */\nexport type ExtractTaskError<T> = T extends Task<any, infer D, any> ? D : never;\n\n/**\n * Extract progress type from Task\n */\nexport type ExtractTaskProgress<T> = T extends Task<any, any, infer P> ? P : never;\n\n// ============================================================================\n// Queue Interfaces\n// ============================================================================\n\nexport interface QueuedTask<T extends Task<any, any, any>> {\n id: string;\n priority: Priority;\n meta?: Record<string, unknown>;\n executeFactory: () => T; // Factory function - called when it's time to execute!\n cancelled?: boolean;\n}\n\nexport interface EnqueueOptions {\n priority?: Priority;\n meta?: Record<string, unknown>;\n fifo?: boolean;\n}\n\nexport type TaskComparator = (a: QueuedTask<any>, b: QueuedTask<any>) => number;\nexport type TaskRanker = (task: QueuedTask<any>) => number;\n\nexport interface WorkerTaskQueueOptions {\n concurrency?: number;\n comparator?: TaskComparator;\n ranker?: TaskRanker;\n onIdle?: () => void;\n maxQueueSize?: number;\n autoStart?: boolean;\n logger?: Logger;\n}\n\n// ============================================================================\n// WorkerTaskQueue - Corrected with Deferred Execution\n// ============================================================================\n\nexport class WorkerTaskQueue {\n private queue: QueuedTask<any>[] = [];\n private running = 0;\n private resultTasks = new Map<string, Task<any, any, any>>();\n private logger: Logger;\n private opts: Required<Omit<WorkerTaskQueueOptions, 'comparator' | 'ranker' | 'logger'>> & {\n comparator?: TaskComparator;\n ranker?: TaskRanker;\n };\n\n constructor(options: WorkerTaskQueueOptions = {}) {\n const {\n concurrency = 1,\n comparator,\n ranker,\n onIdle,\n maxQueueSize,\n autoStart = true,\n logger,\n } = options;\n this.logger = logger ?? new NoopLogger();\n this.opts = {\n concurrency: Math.max(1, concurrency),\n comparator,\n ranker,\n onIdle: onIdle ?? (() => {}),\n maxQueueSize: maxQueueSize ?? Number.POSITIVE_INFINITY,\n autoStart,\n };\n }\n\n setComparator(comparator?: TaskComparator): void {\n this.opts.comparator = comparator;\n }\n\n setRanker(ranker?: TaskRanker): void {\n this.opts.ranker = ranker;\n }\n\n size(): number {\n return this.queue.length;\n }\n\n inFlight(): number {\n return this.running;\n }\n\n isIdle(): boolean {\n return this.queue.length === 0 && this.running === 0;\n }\n\n async drain(): Promise<void> {\n if (this.isIdle()) return;\n await new Promise<void>((resolve) => {\n const check = () => {\n if (this.isIdle()) {\n this.offIdle(check);\n resolve();\n }\n };\n this.onIdle(check);\n });\n }\n\n private idleListeners = new Set<() => void>();\n private notifyIdle() {\n if (this.isIdle()) {\n [...this.idleListeners].forEach((fn) => fn());\n this.idleListeners.clear();\n this.opts.onIdle();\n }\n }\n private onIdle(fn: () => void) {\n this.idleListeners.add(fn);\n }\n private offIdle(fn: () => void) {\n this.idleListeners.delete(fn);\n }\n\n /**\n * Enqueue a task factory - with automatic type inference!\n *\n * The factory function is ONLY called when it's the task's turn to execute.\n *\n * Usage:\n * const task = queue.enqueue({\n * execute: () => this.executor.getMetadata(doc), // Factory - not called yet!\n * meta: { operation: 'getMetadata' }\n * }, { priority: Priority.LOW });\n *\n * The returned task has the SAME type as executor.getMetadata() would return!\n */\n enqueue<T extends Task<any, any, any>>(\n taskDef: {\n execute: () => T; // Factory function that returns Task when called!\n meta?: Record<string, unknown>;\n },\n options: EnqueueOptions = {},\n ): T {\n const id = this.generateId();\n const priority = options.priority ?? Priority.MEDIUM;\n\n // Create a proxy task that we return to the user\n // This task bridges to the real task that will be created later\n const resultTask = new Task<\n ExtractTaskResult<T>,\n ExtractTaskError<T>,\n ExtractTaskProgress<T>\n >() as T;\n\n if (this.queue.length >= this.opts.maxQueueSize) {\n const error = new Error('Queue is full (maxQueueSize reached).');\n resultTask.reject(error as any);\n return resultTask;\n }\n\n // Store the result task for bridging\n this.resultTasks.set(id, resultTask);\n\n const queuedTask: QueuedTask<T> = {\n id,\n priority,\n meta: options.meta ?? taskDef.meta,\n executeFactory: taskDef.execute, // Store factory, don't call it yet!\n };\n\n this.queue.push(queuedTask);\n\n this.logger.debug(\n LOG_SOURCE,\n LOG_CATEGORY,\n `Task enqueued: ${id} | Priority: ${priority} | Running: ${this.running} | Queued: ${this.queue.length}`,\n );\n\n // Set up automatic abort handling\n // When result task is aborted externally, remove from queue\n const originalAbort = resultTask.abort.bind(resultTask);\n resultTask.abort = (reason: any) => {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, `Task aborted: ${id}`);\n this.cancel(id);\n originalAbort(reason);\n };\n\n if (this.opts.autoStart) this.process(options.fifo === true);\n\n return resultTask;\n }\n\n /**\n * Cancel/remove a task from the queue\n */\n private cancel(taskId: string): void {\n const before = this.queue.length;\n this.queue = this.queue.filter((t) => {\n if (t.id === taskId) {\n t.cancelled = true;\n return false;\n }\n return true;\n });\n\n this.resultTasks.delete(taskId);\n\n if (before !== this.queue.length) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, `Task cancelled and removed: ${taskId}`);\n this.kick();\n }\n }\n\n private kick() {\n queueMicrotask(() => this.process());\n }\n\n private async process(fifo = false): Promise<void> {\n this.logger.debug(\n LOG_SOURCE,\n LOG_CATEGORY,\n `process() called | Running: ${this.running} | Concurrency: ${this.opts.concurrency} | Queued: ${this.queue.length}`,\n );\n\n while (this.running < this.opts.concurrency && this.queue.length > 0) {\n this.logger.debug(\n LOG_SOURCE,\n LOG_CATEGORY,\n `Starting new task | Running: ${this.running} | Queued: ${this.queue.length}`,\n );\n\n if (!fifo) this.sortQueue();\n\n const queuedTask = this.queue.shift()!;\n if (queuedTask.cancelled) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, `Skipping cancelled task: ${queuedTask.id}`);\n continue;\n }\n\n const resultTask = this.resultTasks.get(queuedTask.id);\n if (!resultTask) continue; // Shouldn't happen, but guard anyway.\n\n this.running++;\n\n // NOW call the factory to create the real task!\n (async () => {\n let realTask: Task<any, any, any> | null = null;\n\n try {\n // Call the factory function NOW - this is when execution actually starts\n realTask = queuedTask.executeFactory();\n\n // Guard against null/undefined return from factory\n if (!realTask) {\n throw new Error('Task factory returned null/undefined');\n }\n\n // Bridge the real task to the result task\n realTask.wait(\n (result) => {\n if (resultTask.state.stage === 0 /* Pending */) {\n resultTask.resolve(result);\n }\n },\n (error) => {\n if (resultTask.state.stage === 0 /* Pending */) {\n if (error.type === 'abort') {\n resultTask.abort(error.reason);\n } else {\n resultTask.reject(error.reason);\n }\n }\n },\n );\n\n // Bridge progress\n realTask.onProgress((progress) => {\n resultTask.progress(progress);\n });\n\n // Wait for completion\n await realTask.toPromise();\n } catch (error) {\n // Handle any errors from factory or execution\n if (resultTask.state.stage === 0 /* Pending */) {\n resultTask.reject(error as any);\n }\n } finally {\n this.resultTasks.delete(queuedTask.id);\n this.running--;\n\n this.logger.debug(\n LOG_SOURCE,\n LOG_CATEGORY,\n `Task completed: ${queuedTask.id} | Running: ${this.running} | Queued: ${this.queue.length}`,\n );\n\n if (this.isIdle()) {\n this.notifyIdle();\n } else if (this.queue.length > 0) {\n this.kick();\n }\n }\n })().catch((error) => {\n this.logger.error(\n LOG_SOURCE,\n LOG_CATEGORY,\n 'Unhandled error in task execution wrapper:',\n error,\n );\n this.running = Math.max(0, this.running - 1);\n if (this.isIdle()) {\n this.notifyIdle();\n } else if (this.queue.length > 0) {\n this.kick();\n }\n });\n }\n }\n\n private sortQueue(): void {\n const { comparator, ranker } = this.opts;\n if (comparator) {\n this.queue.sort(comparator);\n return;\n }\n\n const rankCache = new Map<string, number>();\n const getRank = (t: QueuedTask<any>) => {\n if (!ranker) return this.defaultRank(t);\n if (!rankCache.has(t.id)) rankCache.set(t.id, ranker(t));\n return rankCache.get(t.id)!;\n };\n\n this.queue.sort((a, b) => {\n if (a.priority !== b.priority) return b.priority - a.priority;\n const ar = getRank(a);\n const br = getRank(b);\n if (ar !== br) return br - ar;\n return this.extractTime(a.id) - this.extractTime(b.id);\n });\n }\n\n private defaultRank(_task: QueuedTask<any>): number {\n return 0;\n }\n\n private generateId(): string {\n if (typeof crypto !== 'undefined' && 'randomUUID' in crypto) {\n return crypto.randomUUID();\n }\n return `${Date.now()}-${Math.random().toString(36).slice(2)}`;\n }\n\n private extractTime(id: string): number {\n const t = Number(id.split('-')[0]);\n return Number.isFinite(t) ? t : 0;\n }\n}\n","import {\n BatchProgress,\n Logger,\n NoopLogger,\n PdfEngine as IPdfEngine,\n PdfDocumentObject,\n PdfPageObject,\n PdfTask,\n PdfErrorReason,\n PdfFileUrl,\n PdfFile,\n PdfOpenDocumentUrlOptions,\n PdfOpenDocumentBufferOptions,\n PdfMetadataObject,\n PdfBookmarksObject,\n PdfBookmarkObject,\n PdfRenderPageOptions,\n PdfRenderThumbnailOptions,\n PdfRenderPageAnnotationOptions,\n PdfAnnotationObject,\n PdfTextRectObject,\n PdfSearchAllPagesOptions,\n SearchAllPagesResult,\n PdfPageSearchProgress,\n PdfAnnotationsProgress,\n PdfAttachmentObject,\n PdfAddAttachmentParams,\n PdfDocumentJavaScriptActionObject,\n PdfWidgetAnnoObject,\n PdfWidgetAnnoField,\n PdfWidgetJavaScriptActionObject,\n FormFieldValue,\n PdfFlattenPageOptions,\n PdfPageFlattenResult,\n PdfRedactTextOptions,\n Rect,\n PageTextSlice,\n PdfGlyphObject,\n PdfPageGeometry,\n PdfPageTextRuns,\n PdfPrintOptions,\n PdfEngineFeature,\n PdfEngineOperation,\n PdfSignatureObject,\n AnnotationCreateContext,\n Task,\n PdfErrorCode,\n SearchResult,\n CompoundTask,\n ImageDataLike,\n IPdfiumExecutor,\n AnnotationAppearanceMap,\n} from '@embedpdf/models';\nimport { WorkerTaskQueue, Priority } from './task-queue';\nimport type { ImageDataConverter } from '../converters/types';\n\n// Re-export for convenience\nexport type { ImageDataConverter } from '../converters/types';\nexport type { ImageDataLike, IPdfiumExecutor, BatchProgress } from '@embedpdf/models';\n\nconst LOG_SOURCE = 'PdfEngine';\nconst LOG_CATEGORY = 'Orchestrator';\n\nexport interface PdfEngineOptions<T> {\n /**\n * Image data converter (for encoding raw image data to Blob/other format)\n */\n imageConverter: ImageDataConverter<T>;\n /**\n * Fetch function for fetching remote URLs\n */\n fetcher?: typeof fetch;\n /**\n * Logger instance\n */\n logger?: Logger;\n}\n\n/**\n * PdfEngine orchestrator\n *\n * This is the \"smart\" layer that:\n * - Implements the PdfEngine interface\n * - Uses WorkerTaskQueue for priority-based task scheduling\n * - Orchestrates complex multi-page operations\n * - Handles image encoding with separate encoder pool\n * - Manages visibility-based task ranking\n */\nexport class PdfEngine<T = Blob> implements IPdfEngine<T> {\n private executor: IPdfiumExecutor;\n private workerQueue: WorkerTaskQueue;\n private logger: Logger;\n private options: PdfEngineOptions<T>;\n\n constructor(executor: IPdfiumExecutor, options: PdfEngineOptions<T>) {\n this.executor = executor;\n this.logger = options.logger ?? new NoopLogger();\n this.options = {\n imageConverter: options.imageConverter,\n fetcher:\n options.fetcher ??\n (typeof fetch !== 'undefined' ? (url, init) => fetch(url, init) : undefined),\n logger: this.logger,\n };\n\n // Create worker queue with single concurrency (PDFium is single-threaded)\n this.workerQueue = new WorkerTaskQueue({\n concurrency: 1,\n autoStart: true,\n logger: this.logger,\n });\n\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'PdfEngine orchestrator created');\n }\n\n /**\n * Split an array into chunks of a given size\n */\n private chunkArray<U>(items: U[], chunkSize: number): U[][] {\n const chunks: U[][] = [];\n for (let i = 0; i < items.length; i += chunkSize) {\n chunks.push(items.slice(i, i + chunkSize));\n }\n return chunks;\n }\n\n // ========== IPdfEngine Implementation ==========\n\n isSupport(feature: PdfEngineFeature): PdfTask<PdfEngineOperation[]> {\n const task = new Task<PdfEngineOperation[], PdfErrorReason>();\n // PDFium supports all features\n task.resolve([\n PdfEngineOperation.Create,\n PdfEngineOperation.Read,\n PdfEngineOperation.Update,\n PdfEngineOperation.Delete,\n ]);\n return task;\n }\n\n destroy(): PdfTask<boolean> {\n const task = new Task<boolean, PdfErrorReason>();\n try {\n this.executor.destroy();\n // Clean up image converter resources (e.g., encoder worker pool)\n this.options.imageConverter.destroy?.();\n task.resolve(true);\n } catch (error) {\n task.reject({ code: PdfErrorCode.Unknown, message: String(error) });\n }\n return task;\n }\n\n openDocumentUrl(\n file: PdfFileUrl,\n options?: PdfOpenDocumentUrlOptions,\n ): PdfTask<PdfDocumentObject> {\n const task = new Task<PdfDocumentObject, PdfErrorReason>();\n\n // Handle fetch in main thread (not worker!)\n (async () => {\n try {\n if (!this.options.fetcher) {\n throw new Error('Fetcher is not set');\n }\n\n const response = await this.options.fetcher(file.url, options?.requestOptions);\n const arrayBuf = await response.arrayBuffer();\n\n const pdfFile: PdfFile = {\n id: file.id,\n content: arrayBuf,\n };\n\n // Then open in worker - use wait() to properly propagate task errors\n this.openDocumentBuffer(pdfFile, {\n password: options?.password,\n normalizeRotation: options?.normalizeRotation,\n }).wait(\n (doc) => task.resolve(doc),\n (error) => task.fail(error),\n );\n } catch (error) {\n // This only catches fetch errors (network issues, etc.)\n task.reject({ code: PdfErrorCode.Unknown, message: String(error) });\n }\n })();\n\n return task;\n }\n\n openDocumentBuffer(\n file: PdfFile,\n options?: PdfOpenDocumentBufferOptions,\n ): PdfTask<PdfDocumentObject> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.openDocumentBuffer(file, options),\n meta: { docId: file.id, operation: 'openDocumentBuffer' },\n },\n { priority: Priority.CRITICAL },\n );\n }\n\n getMetadata(doc: PdfDocumentObject): PdfTask<PdfMetadataObject> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getMetadata(doc),\n meta: { docId: doc.id, operation: 'getMetadata' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n setMetadata(doc: PdfDocumentObject, metadata: Partial<PdfMetadataObject>): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.setMetadata(doc, metadata),\n meta: { docId: doc.id, operation: 'setMetadata' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n getDocPermissions(doc: PdfDocumentObject): PdfTask<number> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getDocPermissions(doc),\n meta: { docId: doc.id, operation: 'getDocPermissions' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n getDocUserPermissions(doc: PdfDocumentObject): PdfTask<number> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getDocUserPermissions(doc),\n meta: { docId: doc.id, operation: 'getDocUserPermissions' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n getSignatures(doc: PdfDocumentObject): PdfTask<PdfSignatureObject[]> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getSignatures(doc),\n meta: { docId: doc.id, operation: 'getSignatures' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n getBookmarks(doc: PdfDocumentObject): PdfTask<PdfBookmarksObject> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getBookmarks(doc),\n meta: { docId: doc.id, operation: 'getBookmarks' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n setBookmarks(doc: PdfDocumentObject, bookmarks: PdfBookmarkObject[]): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.setBookmarks(doc, bookmarks),\n meta: { docId: doc.id, operation: 'setBookmarks' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n deleteBookmarks(doc: PdfDocumentObject): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.deleteBookmarks(doc),\n meta: { docId: doc.id, operation: 'deleteBookmarks' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n // ========== Rendering with Encoding ==========\n\n renderPage(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n options?: PdfRenderPageOptions,\n ): PdfTask<T> {\n return this.renderWithEncoding(\n () => this.executor.renderPageRaw(doc, page, options),\n options,\n doc.id,\n page.index,\n Priority.CRITICAL,\n );\n }\n\n renderPageRect(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n rect: Rect,\n options?: PdfRenderPageOptions,\n ): PdfTask<T> {\n return this.renderWithEncoding(\n () => this.executor.renderPageRect(doc, page, rect, options),\n options,\n doc.id,\n page.index,\n Priority.HIGH,\n );\n }\n\n // ========== Raw Rendering (no encoding) ==========\n\n renderPageRaw(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n options?: PdfRenderPageOptions,\n ): PdfTask<ImageDataLike> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.renderPageRaw(doc, page, options),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'renderPageRaw' },\n },\n { priority: Priority.HIGH },\n );\n }\n\n renderPageRectRaw(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n rect: Rect,\n options?: PdfRenderPageOptions,\n ): PdfTask<ImageDataLike> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.renderPageRect(doc, page, rect, options),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'renderPageRectRaw' },\n },\n { priority: Priority.HIGH },\n );\n }\n\n renderThumbnail(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n options?: PdfRenderThumbnailOptions,\n ): PdfTask<T> {\n return this.renderWithEncoding(\n () => this.executor.renderThumbnailRaw(doc, page, options),\n options,\n doc.id,\n page.index,\n Priority.MEDIUM,\n );\n }\n\n renderPageAnnotation(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfAnnotationObject,\n options?: PdfRenderPageAnnotationOptions,\n ): PdfTask<T> {\n return this.renderWithEncoding(\n () => this.executor.renderPageAnnotationRaw(doc, page, annotation, options),\n options,\n doc.id,\n page.index,\n Priority.MEDIUM,\n );\n }\n\n renderPageAnnotations(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n options?: PdfRenderPageAnnotationOptions,\n ): PdfTask<AnnotationAppearanceMap<T>> {\n const resultTask = new Task<AnnotationAppearanceMap<T>, PdfErrorReason>();\n\n const renderHandle = this.workerQueue.enqueue(\n {\n execute: () => this.executor.renderPageAnnotationsRaw(doc, page, options),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'renderPageAnnotationsRaw' },\n },\n { priority: Priority.MEDIUM },\n );\n\n // Wire up abort: when resultTask is aborted, also abort the queue task\n const originalAbort = resultTask.abort.bind(resultTask);\n resultTask.abort = (reason) => {\n renderHandle.abort(reason);\n originalAbort(reason);\n };\n\n renderHandle.wait(\n (rawMap) => {\n if (resultTask.state.stage !== 0 /* Pending */) {\n return;\n }\n this.encodeAppearanceMap(rawMap, options, resultTask);\n },\n (error) => {\n if (resultTask.state.stage === 0 /* Pending */) {\n resultTask.fail(error);\n }\n },\n );\n\n return resultTask;\n }\n\n renderPageAnnotationsRaw(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n options?: PdfRenderPageAnnotationOptions,\n ): PdfTask<AnnotationAppearanceMap<ImageDataLike>> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.renderPageAnnotationsRaw(doc, page, options),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'renderPageAnnotationsRaw' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n /**\n * Helper to render and encode in two stages with priority queue\n */\n private renderWithEncoding(\n renderFn: () => PdfTask<ImageDataLike>,\n options?: PdfRenderPageOptions | PdfRenderThumbnailOptions | PdfRenderPageAnnotationOptions,\n docId?: string,\n pageIndex?: number,\n priority: Priority = Priority.CRITICAL,\n ): PdfTask<T> {\n const resultTask = new Task<T, PdfErrorReason>();\n\n // Step 1: Add HIGH/MEDIUM priority task to render raw bytes\n const renderHandle = this.workerQueue.enqueue(\n {\n execute: () => renderFn(),\n meta: { docId, pageIndex, operation: 'render' },\n },\n { priority },\n );\n\n // Wire up abort: when resultTask is aborted, also abort the queue task\n const originalAbort = resultTask.abort.bind(resultTask);\n resultTask.abort = (reason) => {\n renderHandle.abort(reason); // Cancel the queue task!\n originalAbort(reason);\n };\n\n renderHandle.wait(\n (rawImageData) => {\n // Check if resultTask was already aborted before encoding\n if (resultTask.state.stage !== 0 /* Pending */) {\n return;\n }\n this.encodeImage(rawImageData, options, resultTask);\n },\n (error) => {\n // Only forward error if resultTask is still pending\n if (resultTask.state.stage === 0 /* Pending */) {\n resultTask.fail(error);\n }\n },\n );\n\n return resultTask;\n }\n\n /**\n * Encode image using encoder pool or inline\n */\n private encodeImage(\n rawImageData: ImageDataLike,\n options: any,\n resultTask: Task<T, PdfErrorReason>,\n ): void {\n const imageType = options?.imageType ?? 'image/webp';\n const quality = options?.quality;\n\n // Convert to plain object for encoding\n const plainImageData = {\n data: new Uint8ClampedArray(rawImageData.data),\n width: rawImageData.width,\n height: rawImageData.height,\n };\n\n this.options\n .imageConverter(() => plainImageData, imageType, quality)\n .then((result) => resultTask.resolve(result))\n .catch((error) => resultTask.reject({ code: PdfErrorCode.Unknown, message: String(error) }));\n }\n\n /**\n * Encode a full annotation appearance map to the output type T.\n */\n private encodeAppearanceMap(\n rawMap: AnnotationAppearanceMap<ImageDataLike>,\n options: PdfRenderPageAnnotationOptions | undefined,\n resultTask: Task<AnnotationAppearanceMap<T>, PdfErrorReason>,\n ): void {\n const imageType = options?.imageType ?? 'image/webp';\n const quality = options?.imageQuality;\n\n const convertImage = (rawImageData: ImageDataLike): Promise<T> => {\n const plainImageData = {\n data: new Uint8ClampedArray(rawImageData.data),\n width: rawImageData.width,\n height: rawImageData.height,\n };\n return this.options.imageConverter(() => plainImageData, imageType, quality);\n };\n\n const jobs: Promise<void>[] = [];\n const encodedMap: AnnotationAppearanceMap<T> = {};\n const modes: Array<'normal' | 'rollover' | 'down'> = ['normal', 'rollover', 'down'];\n\n for (const [annotationId, appearances] of Object.entries(rawMap)) {\n const encodedAppearances: NonNullable<AnnotationAppearanceMap<T>[string]> = {};\n encodedMap[annotationId] = encodedAppearances;\n\n for (const mode of modes) {\n const appearance = appearances[mode];\n if (!appearance) continue;\n\n jobs.push(\n convertImage(appearance.data).then((encodedData) => {\n encodedAppearances[mode] = {\n data: encodedData,\n rect: appearance.rect,\n };\n }),\n );\n }\n }\n\n Promise.all(jobs)\n .then(() => {\n if (resultTask.state.stage === 0 /* Pending */) {\n resultTask.resolve(encodedMap);\n }\n })\n .catch((error) => {\n if (resultTask.state.stage === 0 /* Pending */) {\n resultTask.reject({ code: PdfErrorCode.Unknown, message: String(error) });\n }\n });\n }\n\n // ========== Annotations ==========\n\n getPageAnnotations(doc: PdfDocumentObject, page: PdfPageObject): PdfTask<PdfAnnotationObject[]> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getPageAnnotations(doc, page),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'getPageAnnotations' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n createPageAnnotation<A extends PdfAnnotationObject>(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: A,\n context?: AnnotationCreateContext<A>,\n ): PdfTask<string> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.createPageAnnotation(doc, page, annotation, context),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'createPageAnnotation' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n updatePageAnnotation(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfAnnotationObject,\n options?: { regenerateAppearance?: boolean },\n ): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.updatePageAnnotation(doc, page, annotation, options),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'updatePageAnnotation' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n removePageAnnotation(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfAnnotationObject,\n ): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.removePageAnnotation(doc, page, annotation),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'removePageAnnotation' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n /**\n * Get all annotations across all pages\n * Uses batched operations to reduce queue overhead\n */\n getAllAnnotations(\n doc: PdfDocumentObject,\n ): CompoundTask<Record<number, PdfAnnotationObject[]>, PdfErrorReason, PdfAnnotationsProgress> {\n // Chunk pages for batched processing\n const chunks = this.chunkArray(doc.pages, 500);\n\n this.logger.debug(\n LOG_SOURCE,\n LOG_CATEGORY,\n `getAllAnnotations: ${doc.pages.length} pages in ${chunks.length} chunks`,\n );\n\n // Create compound task for result aggregation\n const compound = new CompoundTask<\n Record<number, PdfAnnotationObject[]>,\n PdfErrorReason,\n PdfAnnotationsProgress\n >({\n aggregate: (results) => Object.assign({}, ...results),\n });\n\n // Create one task per chunk and wire up progress forwarding\n chunks.forEach((chunkPages, chunkIndex) => {\n const batchTask = this.workerQueue.enqueue(\n {\n execute: () => this.executor.getAnnotationsBatch(doc, chunkPages),\n meta: { docId: doc.id, operation: 'getAnnotationsBatch', chunkSize: chunkPages.length },\n },\n { priority: Priority.LOW },\n );\n\n // Forward batch progress (per-page) to compound task\n batchTask.onProgress((batchProgress: BatchProgress<PdfAnnotationObject[]>) => {\n compound.progress({\n page: batchProgress.pageIndex,\n result: batchProgress.result,\n });\n });\n\n compound.addChild(batchTask, chunkIndex);\n });\n\n compound.finalize();\n return compound;\n }\n\n getPageTextRects(doc: PdfDocumentObject, page: PdfPageObject): PdfTask<PdfTextRectObject[]> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getPageTextRects(doc, page),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'getPageTextRects' },\n },\n {\n priority: Priority.MEDIUM,\n },\n );\n }\n\n // ========== Search ==========\n\n /**\n * Search across all pages\n * Uses batched operations to reduce queue overhead\n */\n searchAllPages(\n doc: PdfDocumentObject,\n keyword: string,\n options?: PdfSearchAllPagesOptions,\n ): PdfTask<SearchAllPagesResult, PdfPageSearchProgress> {\n const flags = Array.isArray(options?.flags)\n ? options.flags.reduce((acc, flag) => acc | flag, 0)\n : (options?.flags ?? 0);\n\n // Chunk pages for batched processing\n const chunks = this.chunkArray(doc.pages, 25);\n\n this.logger.debug(\n LOG_SOURCE,\n LOG_CATEGORY,\n `searchAllPages: ${doc.pages.length} pages in ${chunks.length} chunks`,\n );\n\n // Create compound task for result aggregation\n const compound = new CompoundTask<SearchAllPagesResult, PdfErrorReason, PdfPageSearchProgress>({\n aggregate: (results) => {\n // Merge all batch results into a flat array\n const allResults = results.flatMap((batchResult: Record<number, SearchResult[]>) =>\n Object.values(batchResult).flat(),\n );\n return { results: allResults, total: allResults.length };\n },\n });\n\n // Create one task per chunk and wire up progress forwarding\n chunks.forEach((chunkPages, chunkIndex) => {\n const batchTask = this.workerQueue.enqueue(\n {\n execute: () => this.executor.searchBatch(doc, chunkPages, keyword, flags),\n meta: { docId: doc.id, operation: 'searchBatch', chunkSize: chunkPages.length },\n },\n { priority: Priority.LOW },\n );\n\n // Forward batch progress (per-page) to compound task\n batchTask.onProgress((batchProgress: BatchProgress<SearchResult[]>) => {\n compound.progress({\n page: batchProgress.pageIndex,\n results: batchProgress.result,\n });\n });\n\n compound.addChild(batchTask, chunkIndex);\n });\n\n compound.finalize();\n return compound;\n }\n\n // ========== Attachments ==========\n\n getAttachments(doc: PdfDocumentObject): PdfTask<PdfAttachmentObject[]> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getAttachments(doc),\n meta: { docId: doc.id, operation: 'getAttachments' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n addAttachment(doc: PdfDocumentObject, params: PdfAddAttachmentParams): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.addAttachment(doc, params),\n meta: { docId: doc.id, operation: 'addAttachment' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n removeAttachment(doc: PdfDocumentObject, attachment: PdfAttachmentObject): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.removeAttachment(doc, attachment),\n meta: { docId: doc.id, operation: 'removeAttachment' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n readAttachmentContent(\n doc: PdfDocumentObject,\n attachment: PdfAttachmentObject,\n ): PdfTask<ArrayBuffer> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.readAttachmentContent(doc, attachment),\n meta: { docId: doc.id, operation: 'readAttachmentContent' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n // ========== Forms ==========\n\n getDocumentJavaScriptActions(\n doc: PdfDocumentObject,\n ): PdfTask<PdfDocumentJavaScriptActionObject[]> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getDocumentJavaScriptActions(doc),\n meta: { docId: doc.id, operation: 'getDocumentJavaScriptActions' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n getPageAnnoWidgets(doc: PdfDocumentObject, page: PdfPageObject): PdfTask<PdfWidgetAnnoObject[]> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getPageAnnoWidgets(doc, page),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'getPageAnnoWidgets' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n getPageWidgetJavaScriptActions(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n ): PdfTask<PdfWidgetJavaScriptActionObject[]> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getPageWidgetJavaScriptActions(doc, page),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'getPageWidgetJavaScriptActions' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n setFormFieldValue(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfWidgetAnnoObject,\n value: FormFieldValue,\n ): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.setFormFieldValue(doc, page, annotation, value),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'setFormFieldValue' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n setFormFieldState(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfWidgetAnnoObject,\n field: PdfWidgetAnnoField,\n ): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.setFormFieldState(doc, page, annotation, field),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'setFormFieldState' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n renameWidgetField(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfWidgetAnnoObject,\n name: string,\n ): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.renameWidgetField(doc, page, annotation, name),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'renameWidgetField' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n shareWidgetField(\n doc: PdfDocumentObject,\n sourcePage: PdfPageObject,\n sourceAnnotation: PdfWidgetAnnoObject,\n targetPage: PdfPageObject,\n targetAnnotation: PdfWidgetAnnoObject,\n ): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () =>\n this.executor.shareWidgetField(\n doc,\n sourcePage,\n sourceAnnotation,\n targetPage,\n targetAnnotation,\n ),\n meta: {\n docId: doc.id,\n pageIndex: sourcePage.index,\n operation: 'shareWidgetField',\n },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n regenerateWidgetAppearances(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotationIds: string[],\n ): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.regenerateWidgetAppearances(doc, page, annotationIds),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'regenerateWidgetAppearances' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n flattenPage(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n options?: PdfFlattenPageOptions,\n ): PdfTask<PdfPageFlattenResult> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.flattenPage(doc, page, options),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'flattenPage' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n // ========== Text Operations ==========\n\n extractPages(doc: PdfDocumentObject, pageIndexes: number[]): PdfTask<ArrayBuffer> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.extractPages(doc, pageIndexes),\n meta: { docId: doc.id, pageIndexes: pageIndexes, operation: 'extractPages' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n createDocument(id: string): PdfTask<PdfDocumentObject> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.createDocument(id),\n meta: { docId: id, operation: 'createDocument' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n importPages(\n destDoc: PdfDocumentObject,\n srcDoc: PdfDocumentObject,\n srcPageIndices: number[],\n insertIndex?: number,\n ): PdfTask<PdfPageObject[]> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.importPages(destDoc, srcDoc, srcPageIndices, insertIndex),\n meta: { docId: destDoc.id, operation: 'importPages' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n deletePage(doc: PdfDocumentObject, pageIndex: number): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.deletePage(doc, pageIndex),\n meta: { docId: doc.id, operation: 'deletePage' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n extractText(doc: PdfDocumentObject, pageIndexes: number[]): PdfTask<string> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.extractText(doc, pageIndexes),\n meta: { docId: doc.id, pageIndexes: pageIndexes, operation: 'extractText' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n redactTextInRects(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n rects: Rect[],\n options?: PdfRedactTextOptions,\n ): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.redactTextInRects(doc, page, rects, options),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'redactTextInRects' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n applyRedaction(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfAnnotationObject,\n ): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.applyRedaction(doc, page, annotation),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'applyRedaction' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n applyAllRedactions(doc: PdfDocumentObject, page: PdfPageObject): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.applyAllRedactions(doc, page),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'applyAllRedactions' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n flattenAnnotation(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfAnnotationObject,\n ): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.flattenAnnotation(doc, page, annotation),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'flattenAnnotation' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n exportAnnotationAppearanceAsPdf(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfAnnotationObject,\n ): PdfTask<ArrayBuffer> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.exportAnnotationAppearanceAsPdf(doc, page, annotation),\n meta: {\n docId: doc.id,\n pageIndex: page.index,\n operation: 'exportAnnotationAppearanceAsPdf',\n },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n exportAnnotationsAppearanceAsPdf(\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotations: PdfAnnotationObject[],\n ): PdfTask<ArrayBuffer> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.exportAnnotationsAppearanceAsPdf(doc, page, annotations),\n meta: {\n docId: doc.id,\n pageIndex: page.index,\n operation: 'exportAnnotationsAppearanceAsPdf',\n },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n getTextSlices(doc: PdfDocumentObject, slices: PageTextSlice[]): PdfTask<string[]> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getTextSlices(doc, slices),\n meta: { docId: doc.id, slices: slices, operation: 'getTextSlices' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n getPageGlyphs(doc: PdfDocumentObject, page: PdfPageObject): PdfTask<PdfGlyphObject[]> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getPageGlyphs(doc, page),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'getPageGlyphs' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n getPageGeometry(doc: PdfDocumentObject, page: PdfPageObject): PdfTask<PdfPageGeometry> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getPageGeometry(doc, page),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'getPageGeometry' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n getPageTextRuns(doc: PdfDocumentObject, page: PdfPageObject): PdfTask<PdfPageTextRuns> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.getPageTextRuns(doc, page),\n meta: { docId: doc.id, pageIndex: page.index, operation: 'getPageTextRuns' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n // ========== Document Operations ==========\n\n merge(files: PdfFile[]): PdfTask<PdfFile> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.merge(files),\n meta: { docId: files.map((file) => file.id).join(','), operation: 'merge' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n mergePages(mergeConfigs: Array<{ docId: string; pageIndices: number[] }>): PdfTask<PdfFile> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.mergePages(mergeConfigs),\n meta: {\n docId: mergeConfigs.map((config) => config.docId).join(','),\n operation: 'mergePages',\n },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n preparePrintDocument(doc: PdfDocumentObject, options?: PdfPrintOptions): PdfTask<ArrayBuffer> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.preparePrintDocument(doc, options),\n meta: { docId: doc.id, operation: 'preparePrintDocument' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n saveAsCopy(doc: PdfDocumentObject): PdfTask<ArrayBuffer> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.saveAsCopy(doc),\n meta: { docId: doc.id, operation: 'saveAsCopy' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n closeDocument(doc: PdfDocumentObject): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.closeDocument(doc),\n meta: { docId: doc.id, operation: 'closeDocument' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n closeAllDocuments(): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.closeAllDocuments(),\n meta: { operation: 'closeAllDocuments' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.setDocumentEncryption}\n */\n setDocumentEncryption(\n doc: PdfDocumentObject,\n userPassword: string,\n ownerPassword: string,\n allowedFlags: number,\n ): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () =>\n this.executor.setDocumentEncryption(doc, userPassword, ownerPassword, allowedFlags),\n meta: { docId: doc.id, operation: 'setDocumentEncryption' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.removeEncryption}\n */\n removeEncryption(doc: PdfDocumentObject): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.removeEncryption(doc),\n meta: { docId: doc.id, operation: 'removeEncryption' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.unlockOwnerPermissions}\n */\n unlockOwnerPermissions(doc: PdfDocumentObject, ownerPassword: string): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.unlockOwnerPermissions(doc, ownerPassword),\n meta: { docId: doc.id, operation: 'unlockOwnerPermissions' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.isEncrypted}\n */\n isEncrypted(doc: PdfDocumentObject): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.isEncrypted(doc),\n meta: { docId: doc.id, operation: 'isEncrypted' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n\n /**\n * {@inheritDoc @embedpdf/models!PdfEngine.isOwnerUnlocked}\n */\n isOwnerUnlocked(doc: PdfDocumentObject): PdfTask<boolean> {\n return this.workerQueue.enqueue(\n {\n execute: () => this.executor.isOwnerUnlocked(doc),\n meta: { docId: doc.id, operation: 'isOwnerUnlocked' },\n },\n { priority: Priority.MEDIUM },\n );\n }\n}\n"],"names":["LOG_SOURCE","LOG_CATEGORY","Priority"],"mappings":"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"}
@@ -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"),o="https://cdn.jsdelivr.net/npm/@embedpdf/pdfium@2.10.0/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,fontFallback:c}=r??{},[l,d]=e.useState(null),[a,p]=e.useState(!0),[g,f]=e.useState(null),m=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,fontFallback:c});m.current=r,d(r),p(!1)}catch(r){e||(f(r),p(!1))}})(),()=>{var r,n;e=!0,null==(n=null==(r=m.current)?void 0:r.closeAllDocuments)||n.call(r).wait(()=>{var e,r;null==(r=null==(e=m.current)?void 0:e.destroy)||r.call(e),m.current=null},t.ignore)}},[n,i,u,c]),{engine:l,isLoading:a,error:g}};
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.11.0/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,fontFallback:c}=r??{},[l,d]=e.useState(null),[a,p]=e.useState(!0),[g,f]=e.useState(null),m=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,fontFallback:c});m.current=r,d(r),p(!1)}catch(r){e||(f(r),p(!1))}})(),()=>{var r,n;e=!0,null==(n=null==(r=m.current)?void 0:r.closeAllDocuments)||n.call(r).wait(()=>{var e,r;null==(r=null==(e=m.current)?void 0:e.destroy)||r.call(e),m.current=null},t.ignore)}},[n,i,u,c]),{engine:l,isLoading:a,error:g}};
2
2
  //# sourceMappingURL=index.cjs.map
@@ -2,7 +2,7 @@ import { useState, useRef, useEffect, useContext } from "preact/hooks";
2
2
  import { createContext } from "preact";
3
3
  import { ignore } from "@embedpdf/models";
4
4
  import { jsx } from "preact/jsx-runtime";
5
- const defaultWasmUrl = `https://cdn.jsdelivr.net/npm/@embedpdf/pdfium@2.10.0/dist/pdfium.wasm`;
5
+ const defaultWasmUrl = `https://cdn.jsdelivr.net/npm/@embedpdf/pdfium@2.11.0/dist/pdfium.wasm`;
6
6
  function usePdfiumEngine(config) {
7
7
  const {
8
8
  wasmUrl = defaultWasmUrl,
@@ -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("react"),r=require("@embedpdf/models"),t=require("react/jsx-runtime"),n="https://cdn.jsdelivr.net/npm/@embedpdf/pdfium@2.10.0/dist/pdfium.wasm";const o=e.createContext(void 0);function i(){const r=e.useContext(o);if(void 0===r)throw new Error("useEngineContext must be used within a PdfEngineProvider");return r}exports.PdfEngineProvider=function({children:e,engine:r,isLoading:n,error:i}){const u={engine:r,isLoading:n,error:i};return t.jsx(o.Provider,{value:u,children:e})},exports.useEngine=function(){const{engine:e,error:r}=i();if(r)throw r;return e},exports.useEngineContext=i,exports.usePdfiumEngine=function(t){const{wasmUrl:o=n,worker:i=!0,logger:u,encoderPoolSize:s,fontFallback:c}=t??{},[l,d]=e.useState(null),[a,g]=e.useState(!0),[f,p]=e.useState(null),m=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(o,{logger:u,encoderPoolSize:s,fontFallback:c});m.current=r,d(r),g(!1)}catch(r){e||(p(r),g(!1))}})(),()=>{var t,n;e=!0,null==(n=null==(t=m.current)?void 0:t.closeAllDocuments)||n.call(t).wait(()=>{var e,r;null==(r=null==(e=m.current)?void 0:e.destroy)||r.call(e),m.current=null},r.ignore)}},[o,i,u,c]),{engine:l,isLoading:a,error:f}};
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("react"),r=require("@embedpdf/models"),t=require("react/jsx-runtime"),n="https://cdn.jsdelivr.net/npm/@embedpdf/pdfium@2.11.0/dist/pdfium.wasm";const o=e.createContext(void 0);function i(){const r=e.useContext(o);if(void 0===r)throw new Error("useEngineContext must be used within a PdfEngineProvider");return r}exports.PdfEngineProvider=function({children:e,engine:r,isLoading:n,error:i}){const u={engine:r,isLoading:n,error:i};return t.jsx(o.Provider,{value:u,children:e})},exports.useEngine=function(){const{engine:e,error:r}=i();if(r)throw r;return e},exports.useEngineContext=i,exports.usePdfiumEngine=function(t){const{wasmUrl:o=n,worker:i=!0,logger:u,encoderPoolSize:s,fontFallback:c}=t??{},[l,d]=e.useState(null),[a,g]=e.useState(!0),[f,p]=e.useState(null),m=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(o,{logger:u,encoderPoolSize:s,fontFallback:c});m.current=r,d(r),g(!1)}catch(r){e||(p(r),g(!1))}})(),()=>{var t,n;e=!0,null==(n=null==(t=m.current)?void 0:t.closeAllDocuments)||n.call(t).wait(()=>{var e,r;null==(r=null==(e=m.current)?void 0:e.destroy)||r.call(e),m.current=null},r.ignore)}},[o,i,u,c]),{engine:l,isLoading:a,error:f}};
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1,7 +1,7 @@
1
1
  import { useState, useRef, useEffect, createContext, useContext } from "react";
2
2
  import { ignore } from "@embedpdf/models";
3
3
  import { jsx } from "react/jsx-runtime";
4
- const defaultWasmUrl = `https://cdn.jsdelivr.net/npm/@embedpdf/pdfium@2.10.0/dist/pdfium.wasm`;
4
+ const defaultWasmUrl = `https://cdn.jsdelivr.net/npm/@embedpdf/pdfium@2.11.0/dist/pdfium.wasm`;
5
5
  function usePdfiumEngine(config) {
6
6
  const {
7
7
  wasmUrl = defaultWasmUrl,
@@ -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("svelte/internal/client"),t=require("svelte"),n=require("@embedpdf/models");function r(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e)for(const n in e)if("default"!==n){const r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:()=>e[n]})}return t.default=e,Object.freeze(t)}require("svelte/internal/disclose-version");const i=r(e),o=Symbol("pdfEngineContext");function s(){const e=t.getContext(o);if(void 0===e)throw new Error("getPdfEngineContext must be used within a PdfEngineProvider");return e}const l="https://cdn.jsdelivr.net/npm/@embedpdf/pdfium@2.10.0/dist/pdfium.wasm";exports.PdfEngineProvider=function(e,n){i.push(n,!0),i.user_effect(()=>{var e;e={engine:n.engine,isLoading:n.isLoading,error:n.error},t.setContext(o,e)});var r=i.comment(),s=i.first_child(r);i.snippet(s,()=>n.children),i.append(e,r),i.pop()},exports.useEngine=function(){const{engine:e,error:t}=s();if(t)throw t;return e},exports.useEngineContext=function(){const e=s();if(void 0===e)throw new Error("useEngineContext must be used within a PdfEngineProvider");return e},exports.usePdfiumEngine=function(e){const{wasmUrl:t=l,worker:r=!0,logger:o,fontFallback:s}=e??{},d=i.proxy({engine:null,isLoading:!0,error:null});let c=i.state(null);return"undefined"!=typeof window&&i.user_effect(()=>{let e=!1;return(async()=>{try{const{createPdfiumEngine:e}=r?await import("@embedpdf/engines/pdfium-worker-engine"):await import("@embedpdf/engines/pdfium-direct-engine"),n=await e(t,{logger:o,fontFallback:s});i.set(c,n,!0),d.engine=n,d.isLoading=!1}catch(n){e||(d.error=n,d.isLoading=!1)}})(),()=>{var t,r;e=!0,null==(r=null==(t=i.get(c))?void 0:t.closeAllDocuments)||r.call(t).wait(()=>{var e,t;null==(t=null==(e=i.get(c))?void 0:e.destroy)||t.call(e),i.set(c,null)},n.ignore)}}),d};
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("svelte/internal/client"),t=require("svelte"),n=require("@embedpdf/models");function r(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e)for(const n in e)if("default"!==n){const r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:()=>e[n]})}return t.default=e,Object.freeze(t)}require("svelte/internal/disclose-version");const i=r(e),o=Symbol("pdfEngineContext");function s(){const e=t.getContext(o);if(void 0===e)throw new Error("getPdfEngineContext must be used within a PdfEngineProvider");return e}const l="https://cdn.jsdelivr.net/npm/@embedpdf/pdfium@2.11.0/dist/pdfium.wasm";exports.PdfEngineProvider=function(e,n){i.push(n,!0),i.user_effect(()=>{var e;e={engine:n.engine,isLoading:n.isLoading,error:n.error},t.setContext(o,e)});var r=i.comment(),s=i.first_child(r);i.snippet(s,()=>n.children),i.append(e,r),i.pop()},exports.useEngine=function(){const{engine:e,error:t}=s();if(t)throw t;return e},exports.useEngineContext=function(){const e=s();if(void 0===e)throw new Error("useEngineContext must be used within a PdfEngineProvider");return e},exports.usePdfiumEngine=function(e){const{wasmUrl:t=l,worker:r=!0,logger:o,fontFallback:s}=e??{},d=i.proxy({engine:null,isLoading:!0,error:null});let c=i.state(null);return"undefined"!=typeof window&&i.user_effect(()=>{let e=!1;return(async()=>{try{const{createPdfiumEngine:e}=r?await import("@embedpdf/engines/pdfium-worker-engine"):await import("@embedpdf/engines/pdfium-direct-engine"),n=await e(t,{logger:o,fontFallback:s});i.set(c,n,!0),d.engine=n,d.isLoading=!1}catch(n){e||(d.error=n,d.isLoading=!1)}})(),()=>{var t,r;e=!0,null==(r=null==(t=i.get(c))?void 0:t.closeAllDocuments)||r.call(t).wait(()=>{var e,t;null==(t=null==(e=i.get(c))?void 0:e.destroy)||t.call(e),i.set(c,null)},n.ignore)}}),d};
2
2
  //# sourceMappingURL=index.cjs.map
@@ -27,7 +27,7 @@ function useEngine() {
27
27
  }
28
28
  return engine;
29
29
  }
30
- const defaultWasmUrl = "https://cdn.jsdelivr.net/npm/@embedpdf/pdfium@2.10.0/dist/pdfium.wasm";
30
+ const defaultWasmUrl = "https://cdn.jsdelivr.net/npm/@embedpdf/pdfium@2.11.0/dist/pdfium.wasm";
31
31
  function usePdfiumEngine(config) {
32
32
  const {
33
33
  wasmUrl = defaultWasmUrl,
@@ -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("vue"),n=require("@embedpdf/models"),r=Symbol("pdfEngineKey");function t(){const n=e.inject(r);if(!n)throw new Error("useEngineContext must be used within a PdfEngineProvider");return n}const o="https://cdn.jsdelivr.net/npm/@embedpdf/pdfium@2.10.0/dist/pdfium.wasm";const i=e.defineComponent({__name:"pdf-engine-provider",props:{engine:{},isLoading:{type:Boolean},error:{}},setup(n){const t=n,{engine:o,isLoading:i,error:u}=e.toRefs(t);return e.provide(r,{engine:o,isLoading:i,error:u}),(n,r)=>e.renderSlot(n.$slots,"default")}});exports.PdfEngineProvider=i,exports.useEngine=function(){const{engine:e,error:n}=t();if(n.value)throw n.value;return e},exports.useEngineContext=t,exports.usePdfiumEngine=function(r={}){const{wasmUrl:t=o,worker:i=!0,logger:u,fontFallback:l}=r,s=e.ref(null),a=e.ref(!0),d=e.ref(null);async function c(){try{const{createPdfiumEngine:e}=i?await import("@embedpdf/engines/pdfium-worker-engine"):await import("@embedpdf/engines/pdfium-direct-engine"),n=await e(t,{logger:u,fontFallback:l});s.value=n,a.value=!1}catch(e){d.value=e,a.value=!1}}function p(){var e,r;null==(r=null==(e=s.value)?void 0:e.closeAllDocuments)||r.call(e).wait(()=>{var e,n;null==(n=null==(e=s.value)?void 0:e.destroy)||n.call(e),s.value=null},n.ignore)}return e.onMounted(c),e.onBeforeUnmount(p),e.watch(()=>[t,i,u,l],()=>{p(),c()}),{engine:s,isLoading:a,error:d}};
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("vue"),n=require("@embedpdf/models"),r=Symbol("pdfEngineKey");function t(){const n=e.inject(r);if(!n)throw new Error("useEngineContext must be used within a PdfEngineProvider");return n}const o="https://cdn.jsdelivr.net/npm/@embedpdf/pdfium@2.11.0/dist/pdfium.wasm";const i=e.defineComponent({__name:"pdf-engine-provider",props:{engine:{},isLoading:{type:Boolean},error:{}},setup(n){const t=n,{engine:o,isLoading:i,error:u}=e.toRefs(t);return e.provide(r,{engine:o,isLoading:i,error:u}),(n,r)=>e.renderSlot(n.$slots,"default")}});exports.PdfEngineProvider=i,exports.useEngine=function(){const{engine:e,error:n}=t();if(n.value)throw n.value;return e},exports.useEngineContext=t,exports.usePdfiumEngine=function(r={}){const{wasmUrl:t=o,worker:i=!0,logger:u,fontFallback:l}=r,s=e.ref(null),a=e.ref(!0),d=e.ref(null);async function c(){try{const{createPdfiumEngine:e}=i?await import("@embedpdf/engines/pdfium-worker-engine"):await import("@embedpdf/engines/pdfium-direct-engine"),n=await e(t,{logger:u,fontFallback:l});s.value=n,a.value=!1}catch(e){d.value=e,a.value=!1}}function p(){var e,r;null==(r=null==(e=s.value)?void 0:e.closeAllDocuments)||r.call(e).wait(()=>{var e,n;null==(n=null==(e=s.value)?void 0:e.destroy)||n.call(e),s.value=null},n.ignore)}return e.onMounted(c),e.onBeforeUnmount(p),e.watch(()=>[t,i,u,l],()=>{p(),c()}),{engine:s,isLoading:a,error:d}};
2
2
  //# sourceMappingURL=index.cjs.map
package/dist/vue/index.js CHANGED
@@ -15,7 +15,7 @@ function useEngine() {
15
15
  }
16
16
  return engine;
17
17
  }
18
- const defaultWasmUrl = "https://cdn.jsdelivr.net/npm/@embedpdf/pdfium@2.10.0/dist/pdfium.wasm";
18
+ const defaultWasmUrl = "https://cdn.jsdelivr.net/npm/@embedpdf/pdfium@2.11.0/dist/pdfium.wasm";
19
19
  function usePdfiumEngine(props = {}) {
20
20
  const { wasmUrl = defaultWasmUrl, worker = true, logger, fontFallback } = props;
21
21
  const engine = ref(null);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@embedpdf/engines",
3
- "version": "2.10.0",
3
+ "version": "2.11.0",
4
4
  "description": "Pluggable runtime layer that abstracts over multiple PDF engines (PDF-ium, Web Workers, mocks, etc.) to provide a unified API for rendering, search, annotation, and other document-level operations in EmbedPDF.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -88,15 +88,15 @@
88
88
  "@embedpdf/build": "1.1.0"
89
89
  },
90
90
  "dependencies": {
91
- "@embedpdf/fonts-jp": "1.0.0",
92
- "@embedpdf/fonts-kr": "1.0.0",
93
91
  "@embedpdf/fonts-arabic": "1.0.0",
94
- "@embedpdf/fonts-tc": "1.0.0",
92
+ "@embedpdf/fonts-hebrew": "1.0.0",
93
+ "@embedpdf/fonts-kr": "1.0.0",
94
+ "@embedpdf/fonts-jp": "1.0.0",
95
95
  "@embedpdf/fonts-latin": "1.0.0",
96
96
  "@embedpdf/fonts-sc": "1.0.0",
97
- "@embedpdf/models": "2.10.0",
98
- "@embedpdf/pdfium": "2.10.0",
99
- "@embedpdf/fonts-hebrew": "1.0.0"
97
+ "@embedpdf/fonts-tc": "1.0.0",
98
+ "@embedpdf/pdfium": "2.11.0",
99
+ "@embedpdf/models": "2.11.0"
100
100
  },
101
101
  "peerDependencies": {
102
102
  "preact": "^10.26.4",