@embedpdf/engines 2.0.0-next.3 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/README.md +15 -9
  2. package/dist/browser-C6QEa8uk.cjs +2 -0
  3. package/dist/browser-C6QEa8uk.cjs.map +1 -0
  4. package/dist/{browser-Cm3DA8l_.js → browser-awZxztMA.js} +28 -22
  5. package/dist/browser-awZxztMA.js.map +1 -0
  6. package/dist/{direct-engine-BZRK27cv.js → direct-engine-DuLFAbiv.js} +23 -21
  7. package/dist/direct-engine-DuLFAbiv.js.map +1 -0
  8. package/dist/direct-engine-JeNRkc7w.cjs +2 -0
  9. package/dist/direct-engine-JeNRkc7w.cjs.map +1 -0
  10. package/dist/index.cjs +1 -1
  11. package/dist/index.cjs.map +1 -1
  12. package/dist/index.js +65 -48
  13. package/dist/index.js.map +1 -1
  14. package/dist/lib/converters/browser.d.ts +15 -14
  15. package/dist/lib/converters/index.cjs +1 -1
  16. package/dist/lib/converters/index.cjs.map +1 -1
  17. package/dist/lib/converters/index.js +2 -2
  18. package/dist/lib/orchestrator/pdf-engine.d.ts +0 -1
  19. package/dist/lib/orchestrator/remote-executor.d.ts +0 -1
  20. package/dist/lib/pdfium/engine.d.ts +2 -9
  21. package/dist/lib/pdfium/index.cjs +1 -1
  22. package/dist/lib/pdfium/index.cjs.map +1 -1
  23. package/dist/lib/pdfium/index.d.ts +1 -0
  24. package/dist/lib/pdfium/index.js +6 -4
  25. package/dist/lib/pdfium/index.js.map +1 -1
  26. package/dist/lib/pdfium/web/direct-engine.cjs +1 -1
  27. package/dist/lib/pdfium/web/direct-engine.js +3 -3
  28. package/dist/lib/pdfium/web/worker-engine.cjs +1 -1
  29. package/dist/lib/pdfium/web/worker-engine.cjs.map +1 -1
  30. package/dist/lib/pdfium/web/worker-engine.js +4 -7
  31. package/dist/lib/pdfium/web/worker-engine.js.map +1 -1
  32. package/dist/lib/webworker/engine.cjs +1 -1
  33. package/dist/lib/webworker/engine.cjs.map +1 -1
  34. package/dist/lib/webworker/engine.d.ts +0 -6
  35. package/dist/lib/webworker/engine.js +0 -13
  36. package/dist/lib/webworker/engine.js.map +1 -1
  37. package/dist/{pdf-engine-yZzBqL_l.js → pdf-engine-BVNF_Yo9.js} +6 -14
  38. package/dist/pdf-engine-BVNF_Yo9.js.map +1 -0
  39. package/dist/pdf-engine-C3JeKij1.cjs +2 -0
  40. package/dist/pdf-engine-C3JeKij1.cjs.map +1 -0
  41. package/dist/preact/index.cjs +1 -1
  42. package/dist/preact/index.cjs.map +1 -1
  43. package/dist/preact/index.js +3 -11
  44. package/dist/preact/index.js.map +1 -1
  45. package/dist/react/index.cjs +1 -1
  46. package/dist/react/index.cjs.map +1 -1
  47. package/dist/react/index.js +3 -11
  48. package/dist/react/index.js.map +1 -1
  49. package/dist/svelte/index.cjs +1 -1
  50. package/dist/svelte/index.cjs.map +1 -1
  51. package/dist/svelte/index.js +2 -10
  52. package/dist/svelte/index.js.map +1 -1
  53. package/dist/vue/index.cjs +1 -1
  54. package/dist/vue/index.cjs.map +1 -1
  55. package/dist/vue/index.js +2 -11
  56. package/dist/vue/index.js.map +1 -1
  57. package/package.json +4 -4
  58. package/dist/browser-B5Y-F6il.cjs +0 -2
  59. package/dist/browser-B5Y-F6il.cjs.map +0 -1
  60. package/dist/browser-Cm3DA8l_.js.map +0 -1
  61. package/dist/direct-engine-BZRK27cv.js.map +0 -1
  62. package/dist/direct-engine-CZAhOupl.cjs +0 -2
  63. package/dist/direct-engine-CZAhOupl.cjs.map +0 -1
  64. package/dist/pdf-engine-CrarIjJ6.cjs +0 -2
  65. package/dist/pdf-engine-CrarIjJ6.cjs.map +0 -1
  66. package/dist/pdf-engine-yZzBqL_l.js.map +0 -1
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./lib/pdfium/index.cjs"),r=require("./lib/webworker/engine.cjs"),t=require("@embedpdf/models"),s=require("./direct-engine-CZAhOupl.cjs"),a=require("./lib/pdfium/web/worker-engine.cjs"),o=require("./browser-B5Y-F6il.cjs"),n="WebWorkerEngineRunner",i="Engine";exports.DEFAULT_PDFIUM_WASM_URL=e.DEFAULT_PDFIUM_WASM_URL,exports.WebWorkerEngine=r.WebWorkerEngine,exports.WorkerTask=r.WorkerTask,exports.BitmapFormat=s.BitmapFormat,exports.PdfiumErrorCode=s.PdfiumErrorCode,exports.PdfiumNative=s.PdfiumNative,exports.RenderFlag=s.RenderFlag,exports.computeFormDrawParams=s.computeFormDrawParams,exports.createPdfiumDirectEngine=s.createPdfiumEngine,exports.isValidCustomKey=s.isValidCustomKey,exports.readArrayBuffer=s.readArrayBuffer,exports.readString=s.readString,exports.createPdfiumWorkerEngine=a.createPdfiumEngine,exports.OffscreenCanvasError=o.OffscreenCanvasError,exports.browserImageDataToBlobConverter=o.browserImageDataToBlobConverter,exports.createHybridImageConverter=o.createHybridImageConverter,exports.createWorkerPoolImageConverter=o.createWorkerPoolImageConverter,exports.EngineRunner=class{constructor(e=new t.NoopLogger){this.logger=e,this.execute=async e=>{if(this.logger.debug(n,i,"runner start exeucte request"),!this.engine){const r={type:"reject",reason:{code:t.PdfErrorCode.NotReady,message:"engine has not started yet"}},s={id:e.id,type:"ExecuteResponse",data:{type:"error",value:r}};return void this.respond(s)}const r=this.engine,{name:s,args:a}=e.data;if(!r[s]){const r={type:"reject",reason:{code:t.PdfErrorCode.NotSupport,message:`engine method ${s} is not supported yet`}},a={id:e.id,type:"ExecuteResponse",data:{type:"error",value:r}};return void this.respond(a)}let o;switch(s){case"isSupport":case"initialize":case"destroy":case"openDocumentUrl":case"openDocumentBuffer":case"getDocPermissions":case"getDocUserPermissions":case"getMetadata":case"setMetadata":case"getBookmarks":case"setBookmarks":case"deleteBookmarks":case"getSignatures":case"renderPage":case"renderPageRect":case"renderPageAnnotation":case"renderThumbnail":case"getAllAnnotations":case"getPageAnnotations":case"createPageAnnotation":case"updatePageAnnotation":case"removePageAnnotation":case"getPageTextRects":case"searchAllPages":case"closeDocument":case"closeAllDocuments":case"saveAsCopy":case"getAttachments":case"addAttachment":case"removeAttachment":case"readAttachmentContent":case"setFormFieldValue":case"flattenPage":case"extractPages":case"extractText":case"redactTextInRects":case"getTextSlices":case"getPageGlyphs":case"getPageGeometry":case"merge":case"mergePages":case"preparePrintDocument":o=this.engine[s](...a)}o.onProgress(r=>{const t={id:e.id,type:"ExecuteProgress",data:r};this.respond(t)}),o.wait(r=>{const t={id:e.id,type:"ExecuteResponse",data:{type:"result",value:r}};this.respond(t)},r=>{const t={id:e.id,type:"ExecuteResponse",data:{type:"error",value:r}};this.respond(t)})}}listen(){self.onmessage=e=>this.handle(e)}handle(e){this.logger.debug(n,i,"webworker receive message event: ",e.data);try{const r=e.data;if("ExecuteRequest"===r.type)this.execute(r)}catch(r){this.logger.info(n,i,"webworker met error when processing message event:",r)}}ready(){this.listen(),this.respond({id:"0",type:"ReadyResponse"}),this.logger.debug(n,i,"runner is ready")}respond(e){this.logger.debug(n,i,"runner respond: ",e),self.postMessage(e)}};
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./lib/pdfium/index.cjs"),r=require("./lib/webworker/engine.cjs"),t=require("@embedpdf/models"),a=require("./direct-engine-JeNRkc7w.cjs"),s=require("./lib/pdfium/web/worker-engine.cjs"),o=require("./browser-C6QEa8uk.cjs"),n=require("./pdf-engine-C3JeKij1.cjs"),c="WebWorkerEngineRunner",i="Engine";exports.DEFAULT_PDFIUM_WASM_URL=e.DEFAULT_PDFIUM_WASM_URL,exports.WebWorkerEngine=r.WebWorkerEngine,exports.WorkerTask=r.WorkerTask,exports.BitmapFormat=a.BitmapFormat,exports.PdfiumErrorCode=a.PdfiumErrorCode,exports.PdfiumNative=a.PdfiumNative,exports.RenderFlag=a.RenderFlag,exports.computeFormDrawParams=a.computeFormDrawParams,exports.createPdfiumDirectEngine=a.createPdfiumEngine,exports.isValidCustomKey=a.isValidCustomKey,exports.readArrayBuffer=a.readArrayBuffer,exports.readString=a.readString,exports.createPdfiumWorkerEngine=s.createPdfiumEngine,exports.ImageConverterError=o.ImageConverterError,exports.browserImageDataToBlobConverter=o.browserImageDataToBlobConverter,exports.createHybridImageConverter=o.createHybridImageConverter,exports.createWorkerPoolImageConverter=o.createWorkerPoolImageConverter,exports.PdfEngine=n.PdfEngine,exports.EngineRunner=class{constructor(e=new t.NoopLogger){this.logger=e,this.execute=async e=>{if(this.logger.debug(c,i,"runner start exeucte request"),!this.engine){const r={type:"reject",reason:{code:t.PdfErrorCode.NotReady,message:"engine has not started yet"}},a={id:e.id,type:"ExecuteResponse",data:{type:"error",value:r}};return void this.respond(a)}const r=this.engine,{name:a,args:s}=e.data;if(!r[a]){const r={type:"reject",reason:{code:t.PdfErrorCode.NotSupport,message:`engine method ${a} is not supported yet`}},s={id:e.id,type:"ExecuteResponse",data:{type:"error",value:r}};return void this.respond(s)}let o;switch(a){case"isSupport":o=r.isSupport(...s);break;case"destroy":o=r.destroy(...s);break;case"openDocumentUrl":o=r.openDocumentUrl(...s);break;case"openDocumentBuffer":o=r.openDocumentBuffer(...s);break;case"getDocPermissions":o=r.getDocPermissions(...s);break;case"getDocUserPermissions":o=r.getDocUserPermissions(...s);break;case"getMetadata":o=r.getMetadata(...s);break;case"setMetadata":o=r.setMetadata(...s);break;case"getBookmarks":o=r.getBookmarks(...s);break;case"setBookmarks":o=r.setBookmarks(...s);break;case"deleteBookmarks":o=r.deleteBookmarks(...s);break;case"getSignatures":o=r.getSignatures(...s);break;case"renderPage":o=r.renderPage(...s);break;case"renderPageRect":o=r.renderPageRect(...s);break;case"renderPageAnnotation":o=r.renderPageAnnotation(...s);break;case"renderThumbnail":o=r.renderThumbnail(...s);break;case"getAllAnnotations":o=r.getAllAnnotations(...s);break;case"getPageAnnotations":o=r.getPageAnnotations(...s);break;case"createPageAnnotation":o=r.createPageAnnotation(...s);break;case"updatePageAnnotation":o=r.updatePageAnnotation(...s);break;case"removePageAnnotation":o=r.removePageAnnotation(...s);break;case"getPageTextRects":o=r.getPageTextRects(...s);break;case"searchAllPages":o=r.searchAllPages(...s);break;case"closeDocument":o=r.closeDocument(...s);break;case"closeAllDocuments":o=r.closeAllDocuments(...s);break;case"saveAsCopy":o=r.saveAsCopy(...s);break;case"getAttachments":o=r.getAttachments(...s);break;case"addAttachment":o=r.addAttachment(...s);break;case"removeAttachment":o=r.removeAttachment(...s);break;case"readAttachmentContent":o=r.readAttachmentContent(...s);break;case"setFormFieldValue":o=r.setFormFieldValue(...s);break;case"flattenPage":o=r.flattenPage(...s);break;case"extractPages":o=r.extractPages(...s);break;case"extractText":o=r.extractText(...s);break;case"redactTextInRects":o=r.redactTextInRects(...s);break;case"getTextSlices":o=r.getTextSlices(...s);break;case"getPageGlyphs":o=r.getPageGlyphs(...s);break;case"getPageGeometry":o=r.getPageGeometry(...s);break;case"merge":o=r.merge(...s);break;case"mergePages":o=r.mergePages(...s);break;case"preparePrintDocument":o=r.preparePrintDocument(...s);break;default:const n={type:"reject",reason:{code:t.PdfErrorCode.NotSupport,message:`engine method ${a} is not supported`}},c={id:e.id,type:"ExecuteResponse",data:{type:"error",value:n}};return void this.respond(c)}o.onProgress(r=>{const t={id:e.id,type:"ExecuteProgress",data:r};this.respond(t)}),o.wait(r=>{const t={id:e.id,type:"ExecuteResponse",data:{type:"result",value:r}};this.respond(t)},r=>{const t={id:e.id,type:"ExecuteResponse",data:{type:"error",value:r}};this.respond(t)})}}listen(){self.onmessage=e=>this.handle(e)}handle(e){this.logger.debug(c,i,"webworker receive message event: ",e.data);try{const r=e.data;if("ExecuteRequest"===r.type)this.execute(r)}catch(r){this.logger.info(c,i,"webworker met error when processing message event:",r)}}ready(){this.listen(),this.respond({id:"0",type:"ReadyResponse"}),this.logger.debug(c,i,"runner is ready")}respond(e){this.logger.debug(c,i,"runner respond: ",e),self.postMessage(e)}};
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/lib/webworker/runner.ts"],"sourcesContent":["import {\n Logger,\n NoopLogger,\n PdfEngine,\n PdfEngineError,\n PdfEngineMethodArgs,\n PdfEngineMethodName,\n PdfEngineMethodReturnType,\n PdfErrorCode,\n TaskReturn,\n} from '@embedpdf/models';\n\n/**\n * Request body that represent method calls of PdfEngine, it contains the\n * method name and arguments\n */\nexport type PdfEngineMethodRequestBody = {\n [P in PdfEngineMethodName]: {\n name: P;\n args: PdfEngineMethodArgs<P>;\n };\n}[PdfEngineMethodName];\n\n/**\n * Request body that represent method calls of PdfEngine, it contains the\n * method name and arguments\n */\nexport type SpecificExecuteRequest<M extends PdfEngineMethodName> = {\n id: string;\n type: 'ExecuteRequest';\n data: {\n name: M;\n args: PdfEngineMethodArgs<M>;\n };\n};\n\n/**\n * Response body that represent return value of PdfEngine\n */\nexport type PdfEngineMethodResponseBody = {\n [P in PdfEngineMethodName]: TaskReturn<PdfEngineMethodReturnType<P>>;\n}[PdfEngineMethodName];\n\n/**\n * Request that abort the specified task\n */\nexport interface AbortRequest {\n /**\n * message id\n */\n id: string;\n /**\n * request type\n */\n type: 'AbortRequest';\n}\n/**\n * Request that execute pdf engine method\n */\nexport interface ExecuteRequest {\n /**\n * message id\n */\n id: string;\n /**\n * request type\n */\n type: 'ExecuteRequest';\n /**\n * request body\n */\n data: PdfEngineMethodRequestBody;\n}\n/**\n * Response that execute pdf engine method\n */\nexport interface ExecuteResponse {\n /**\n * message id\n */\n id: string;\n /**\n * response type\n */\n type: 'ExecuteResponse';\n /**\n * response body\n */\n data: PdfEngineMethodResponseBody;\n}\n\n/**\n * Response that indicate progress of the task\n */\nexport interface ExecuteProgress<T = unknown> {\n /**\n * message id\n */\n id: string;\n /**\n * response type\n */\n type: 'ExecuteProgress';\n /**\n * response body\n */\n data: T;\n}\n\n/**\n * Response that indicate engine is ready\n */\nexport interface ReadyResponse {\n /**\n * message id\n */\n id: string;\n /**\n * response type\n */\n type: 'ReadyResponse';\n}\n\n/**\n * Request type\n */\nexport type Request = ExecuteRequest | AbortRequest;\n/**\n * Response type\n */\nexport type Response = ExecuteResponse | ReadyResponse | ExecuteProgress;\n\nconst LOG_SOURCE = 'WebWorkerEngineRunner';\nconst LOG_CATEGORY = 'Engine';\n\n/**\n * Pdf engine runner, it will execute pdf engine based on the request it received and\n * send back the response with post message\n */\nexport class EngineRunner {\n engine: PdfEngine | undefined;\n\n /**\n * Create instance of EngineRunnder\n * @param logger - logger instance\n */\n constructor(public logger: Logger = new NoopLogger()) {}\n\n /**\n * Listening on post message\n */\n listen() {\n self.onmessage = (evt: MessageEvent<Request>) => {\n return this.handle(evt);\n };\n }\n\n /**\n * Handle post message\n */\n handle(evt: MessageEvent<Request>) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'webworker receive message event: ', evt.data);\n try {\n const request = evt.data as Request;\n switch (request.type) {\n case 'ExecuteRequest':\n this.execute(request);\n break;\n }\n } catch (e) {\n this.logger.info(\n LOG_SOURCE,\n LOG_CATEGORY,\n 'webworker met error when processing message event:',\n e,\n );\n }\n }\n\n /**\n * Send the ready response when pdf engine is ready\n * @returns\n *\n * @protected\n */\n ready() {\n this.listen();\n\n this.respond({\n id: '0',\n type: 'ReadyResponse',\n });\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'runner is ready');\n }\n\n /**\n * Execute the request\n * @param request - request that represent the pdf engine call\n * @returns\n *\n * @protected\n */\n execute = async (request: ExecuteRequest) => {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'runner start exeucte request');\n if (!this.engine) {\n const error: PdfEngineError = {\n type: 'reject',\n reason: {\n code: PdfErrorCode.NotReady,\n message: 'engine has not started yet',\n },\n };\n const response: ExecuteResponse = {\n id: request.id,\n type: 'ExecuteResponse',\n data: {\n type: 'error',\n value: error,\n },\n };\n this.respond(response);\n return;\n }\n\n const engine = this.engine;\n const { name, args } = request.data;\n if (!engine[name]) {\n const error: PdfEngineError = {\n type: 'reject',\n reason: {\n code: PdfErrorCode.NotSupport,\n message: `engine method ${name} is not supported yet`,\n },\n };\n const response: ExecuteResponse = {\n id: request.id,\n type: 'ExecuteResponse',\n data: {\n type: 'error',\n value: error,\n },\n };\n this.respond(response);\n return;\n }\n\n let task: PdfEngineMethodReturnType<typeof name>;\n switch (name) {\n case 'isSupport':\n task = this.engine[name]!(...args);\n break;\n case 'initialize':\n task = this.engine[name]!(...args);\n break;\n case 'destroy':\n task = this.engine[name]!(...args);\n break;\n case 'openDocumentUrl':\n task = this.engine[name]!(...args);\n break;\n case 'openDocumentBuffer':\n task = this.engine[name]!(...args);\n break;\n case 'getDocPermissions':\n task = this.engine[name]!(...args);\n break;\n case 'getDocUserPermissions':\n task = this.engine[name]!(...args);\n break;\n case 'getMetadata':\n task = this.engine[name]!(...args);\n break;\n case 'setMetadata':\n task = this.engine[name]!(...args);\n break;\n case 'getBookmarks':\n task = this.engine[name]!(...args);\n break;\n case 'setBookmarks':\n task = this.engine[name]!(...args);\n break;\n case 'deleteBookmarks':\n task = this.engine[name]!(...args);\n break;\n case 'getSignatures':\n task = this.engine[name]!(...args);\n break;\n case 'renderPage':\n task = this.engine[name]!(...args);\n break;\n case 'renderPageRect':\n task = this.engine[name]!(...args);\n break;\n case 'renderPageAnnotation':\n task = this.engine[name]!(...args);\n break;\n case 'renderThumbnail':\n task = this.engine[name]!(...args);\n break;\n case 'getAllAnnotations':\n task = this.engine[name]!(...args);\n break;\n case 'getPageAnnotations':\n task = this.engine[name]!(...args);\n break;\n case 'createPageAnnotation':\n task = this.engine[name]!(...args);\n break;\n case 'updatePageAnnotation':\n task = this.engine[name]!(...args);\n break;\n case 'removePageAnnotation':\n task = this.engine[name]!(...args);\n break;\n case 'getPageTextRects':\n task = this.engine[name]!(...args);\n break;\n case 'searchAllPages':\n task = this.engine[name]!(...args);\n break;\n case 'closeDocument':\n task = this.engine[name]!(...args);\n break;\n case 'closeAllDocuments':\n task = this.engine[name]!(...args);\n break;\n case 'saveAsCopy':\n task = this.engine[name]!(...args);\n break;\n case 'getAttachments':\n task = this.engine[name]!(...args);\n break;\n case 'addAttachment':\n task = this.engine[name]!(...args);\n break;\n case 'removeAttachment':\n task = this.engine[name]!(...args);\n break;\n case 'readAttachmentContent':\n task = this.engine[name]!(...args);\n break;\n case 'setFormFieldValue':\n task = this.engine[name]!(...args);\n break;\n case 'flattenPage':\n task = this.engine[name]!(...args);\n break;\n case 'extractPages':\n task = this.engine[name]!(...args);\n break;\n case 'extractText':\n task = this.engine[name]!(...args);\n break;\n case 'redactTextInRects':\n task = this.engine[name]!(...args);\n break;\n case 'getTextSlices':\n task = this.engine[name]!(...args);\n break;\n case 'getPageGlyphs':\n task = this.engine[name]!(...args);\n break;\n case 'getPageGeometry':\n task = this.engine[name]!(...args);\n break;\n case 'merge':\n task = this.engine[name]!(...args);\n break;\n case 'mergePages':\n task = this.engine[name]!(...args);\n break;\n case 'preparePrintDocument':\n task = this.engine[name]!(...args);\n break;\n }\n\n task.onProgress((progress) => {\n const response: ExecuteProgress = {\n id: request.id,\n type: 'ExecuteProgress',\n data: progress,\n };\n this.respond(response);\n });\n\n task.wait(\n (result) => {\n const response: ExecuteResponse = {\n id: request.id,\n type: 'ExecuteResponse',\n data: {\n type: 'result',\n value: result,\n },\n };\n this.respond(response);\n },\n (error) => {\n const response: ExecuteResponse = {\n id: request.id,\n type: 'ExecuteResponse',\n data: {\n type: 'error',\n value: error,\n },\n };\n this.respond(response);\n },\n );\n };\n\n /**\n * Send back the response\n * @param response - response that needs sent back\n *\n * @protected\n */\n respond(response: Response) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'runner respond: ', response);\n self.postMessage(response);\n }\n}\n"],"names":["LOG_SOURCE","LOG_CATEGORY","constructor","logger","NoopLogger","this","execute","async","request","debug","engine","error","type","reason","code","PdfErrorCode","NotReady","message","response","id","data","value","respond","name","args","NotSupport","task","onProgress","progress","wait","result","listen","self","onmessage","evt","handle","e","info","ready","postMessage"],"mappings":"8TAoIMA,EAAa,wBACbC,EAAe,k1BAMd,MAOL,WAAAC,CAAmBC,EAAiB,IAAIC,EAAAA,YAArBC,KAAAF,OAAAA,EAwDnBE,KAAAC,QAAUC,MAAOC,IAEf,GADAH,KAAKF,OAAOM,MAAMT,EAAYC,EAAc,iCACvCI,KAAKK,OAAQ,CAChB,MAAMC,EAAwB,CAC5BC,KAAM,SACNC,OAAQ,CACNC,KAAMC,EAAAA,aAAaC,SACnBC,QAAS,+BAGPC,EAA4B,CAChCC,GAAIX,EAAQW,GACZP,KAAM,kBACNQ,KAAM,CACJR,KAAM,QACNS,MAAOV,IAIX,YADAN,KAAKiB,QAAQJ,EAEf,CAEA,MAAMR,EAASL,KAAKK,QACda,KAAEA,EAAAC,KAAMA,GAAShB,EAAQY,KAC/B,IAAKV,EAAOa,GAAO,CACjB,MAAMZ,EAAwB,CAC5BC,KAAM,SACNC,OAAQ,CACNC,KAAMC,EAAAA,aAAaU,WACnBR,QAAS,iBAAiBM,2BAGxBL,EAA4B,CAChCC,GAAIX,EAAQW,GACZP,KAAM,kBACNQ,KAAM,CACJR,KAAM,QACNS,MAAOV,IAIX,YADAN,KAAKiB,QAAQJ,EAEf,CAEA,IAAIQ,EACJ,OAAQH,GACN,IAAK,YAGL,IAAK,aAGL,IAAK,UAGL,IAAK,kBAGL,IAAK,qBAGL,IAAK,oBAGL,IAAK,wBAGL,IAAK,cAGL,IAAK,cAGL,IAAK,eAGL,IAAK,eAGL,IAAK,kBAGL,IAAK,gBAGL,IAAK,aAGL,IAAK,iBAGL,IAAK,uBAGL,IAAK,kBAGL,IAAK,oBAGL,IAAK,qBAGL,IAAK,uBAGL,IAAK,uBAGL,IAAK,uBAGL,IAAK,mBAGL,IAAK,iBAGL,IAAK,gBAGL,IAAK,oBAGL,IAAK,aAGL,IAAK,iBAGL,IAAK,gBAGL,IAAK,mBAGL,IAAK,wBAGL,IAAK,oBAGL,IAAK,cAGL,IAAK,eAGL,IAAK,cAGL,IAAK,oBAGL,IAAK,gBAGL,IAAK,gBAGL,IAAK,kBAGL,IAAK,QAGL,IAAK,aAGL,IAAK,uBACHG,EAAOrB,KAAKK,OAAOa,MAAUC,GAIjCE,EAAKC,WAAYC,IACf,MAAMV,EAA4B,CAChCC,GAAIX,EAAQW,GACZP,KAAM,kBACNQ,KAAMQ,GAERvB,KAAKiB,QAAQJ,KAGfQ,EAAKG,KACFC,IACC,MAAMZ,EAA4B,CAChCC,GAAIX,EAAQW,GACZP,KAAM,kBACNQ,KAAM,CACJR,KAAM,SACNS,MAAOS,IAGXzB,KAAKiB,QAAQJ,IAEdP,IACC,MAAMO,EAA4B,CAChCC,GAAIX,EAAQW,GACZP,KAAM,kBACNQ,KAAM,CACJR,KAAM,QACNS,MAAOV,IAGXN,KAAKiB,QAAQJ,KApQoC,CAKvD,MAAAa,GACEC,KAAKC,UAAaC,GACT7B,KAAK8B,OAAOD,EAEvB,CAKA,MAAAC,CAAOD,GACL7B,KAAKF,OAAOM,MAAMT,EAAYC,EAAc,oCAAqCiC,EAAId,MACrF,IACE,MAAMZ,EAAU0B,EAAId,KACpB,GACO,mBADCZ,EAAQI,KAEZP,KAAKC,QAAQE,EAGnB,OAAS4B,GACP/B,KAAKF,OAAOkC,KACVrC,EACAC,EACA,qDACAmC,EAEJ,CACF,CAQA,KAAAE,GACEjC,KAAK0B,SAEL1B,KAAKiB,QAAQ,CACXH,GAAI,IACJP,KAAM,kBAERP,KAAKF,OAAOM,MAAMT,EAAYC,EAAc,kBAC9C,CAgOA,OAAAqB,CAAQJ,GACNb,KAAKF,OAAOM,MAAMT,EAAYC,EAAc,mBAAoBiB,GAChEc,KAAKO,YAAYrB,EACnB"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/lib/webworker/runner.ts"],"sourcesContent":["import {\n Logger,\n NoopLogger,\n PdfEngine,\n PdfEngineError,\n PdfEngineMethodArgs,\n PdfEngineMethodName,\n PdfEngineMethodReturnType,\n PdfErrorCode,\n TaskReturn,\n} from '@embedpdf/models';\n\n/**\n * Request body that represent method calls of PdfEngine, it contains the\n * method name and arguments\n */\nexport type PdfEngineMethodRequestBody = {\n [P in PdfEngineMethodName]: {\n name: P;\n args: PdfEngineMethodArgs<P>;\n };\n}[PdfEngineMethodName];\n\n/**\n * Request body that represent method calls of PdfEngine, it contains the\n * method name and arguments\n */\nexport type SpecificExecuteRequest<M extends PdfEngineMethodName> = {\n id: string;\n type: 'ExecuteRequest';\n data: {\n name: M;\n args: PdfEngineMethodArgs<M>;\n };\n};\n\n/**\n * Response body that represent return value of PdfEngine\n */\nexport type PdfEngineMethodResponseBody = {\n [P in PdfEngineMethodName]: TaskReturn<PdfEngineMethodReturnType<P>>;\n}[PdfEngineMethodName];\n\n/**\n * Request that abort the specified task\n */\nexport interface AbortRequest {\n /**\n * message id\n */\n id: string;\n /**\n * request type\n */\n type: 'AbortRequest';\n}\n/**\n * Request that execute pdf engine method\n */\nexport interface ExecuteRequest {\n /**\n * message id\n */\n id: string;\n /**\n * request type\n */\n type: 'ExecuteRequest';\n /**\n * request body\n */\n data: PdfEngineMethodRequestBody;\n}\n/**\n * Response that execute pdf engine method\n */\nexport interface ExecuteResponse {\n /**\n * message id\n */\n id: string;\n /**\n * response type\n */\n type: 'ExecuteResponse';\n /**\n * response body\n */\n data: PdfEngineMethodResponseBody;\n}\n\n/**\n * Response that indicate progress of the task\n */\nexport interface ExecuteProgress<T = unknown> {\n /**\n * message id\n */\n id: string;\n /**\n * response type\n */\n type: 'ExecuteProgress';\n /**\n * response body\n */\n data: T;\n}\n\n/**\n * Response that indicate engine is ready\n */\nexport interface ReadyResponse {\n /**\n * message id\n */\n id: string;\n /**\n * response type\n */\n type: 'ReadyResponse';\n}\n\n/**\n * Request type\n */\nexport type Request = ExecuteRequest | AbortRequest;\n/**\n * Response type\n */\nexport type Response = ExecuteResponse | ReadyResponse | ExecuteProgress;\n\nconst LOG_SOURCE = 'WebWorkerEngineRunner';\nconst LOG_CATEGORY = 'Engine';\n\n/**\n * Pdf engine runner, it will execute pdf engine based on the request it received and\n * send back the response with post message\n */\nexport class EngineRunner {\n engine: PdfEngine | undefined;\n\n /**\n * Create instance of EngineRunnder\n * @param logger - logger instance\n */\n constructor(public logger: Logger = new NoopLogger()) {}\n\n /**\n * Listening on post message\n */\n listen() {\n self.onmessage = (evt: MessageEvent<Request>) => {\n return this.handle(evt);\n };\n }\n\n /**\n * Handle post message\n */\n handle(evt: MessageEvent<Request>) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'webworker receive message event: ', evt.data);\n try {\n const request = evt.data as Request;\n switch (request.type) {\n case 'ExecuteRequest':\n this.execute(request);\n break;\n }\n } catch (e) {\n this.logger.info(\n LOG_SOURCE,\n LOG_CATEGORY,\n 'webworker met error when processing message event:',\n e,\n );\n }\n }\n\n /**\n * Send the ready response when pdf engine is ready\n * @returns\n *\n * @protected\n */\n ready() {\n this.listen();\n\n this.respond({\n id: '0',\n type: 'ReadyResponse',\n });\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'runner is ready');\n }\n\n /**\n * Execute the request\n * @param request - request that represent the pdf engine call\n * @returns\n *\n * @protected\n */\n execute = async (request: ExecuteRequest) => {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'runner start exeucte request');\n if (!this.engine) {\n const error: PdfEngineError = {\n type: 'reject',\n reason: {\n code: PdfErrorCode.NotReady,\n message: 'engine has not started yet',\n },\n };\n const response: ExecuteResponse = {\n id: request.id,\n type: 'ExecuteResponse',\n data: {\n type: 'error',\n value: error,\n },\n };\n this.respond(response);\n return;\n }\n\n const engine = this.engine;\n const { name, args } = request.data;\n if (!engine[name]) {\n const error: PdfEngineError = {\n type: 'reject',\n reason: {\n code: PdfErrorCode.NotSupport,\n message: `engine method ${name} is not supported yet`,\n },\n };\n const response: ExecuteResponse = {\n id: request.id,\n type: 'ExecuteResponse',\n data: {\n type: 'error',\n value: error,\n },\n };\n this.respond(response);\n return;\n }\n\n let task: PdfEngineMethodReturnType<typeof name>;\n switch (name) {\n case 'isSupport':\n task = engine.isSupport!(...args);\n break;\n case 'destroy':\n task = engine.destroy!(...args);\n break;\n case 'openDocumentUrl':\n task = engine.openDocumentUrl!(...args);\n break;\n case 'openDocumentBuffer':\n task = engine.openDocumentBuffer!(...args);\n break;\n case 'getDocPermissions':\n task = engine.getDocPermissions!(...args);\n break;\n case 'getDocUserPermissions':\n task = engine.getDocUserPermissions!(...args);\n break;\n case 'getMetadata':\n task = engine.getMetadata!(...args);\n break;\n case 'setMetadata':\n task = engine.setMetadata!(...args);\n break;\n case 'getBookmarks':\n task = engine.getBookmarks!(...args);\n break;\n case 'setBookmarks':\n task = engine.setBookmarks!(...args);\n break;\n case 'deleteBookmarks':\n task = engine.deleteBookmarks!(...args);\n break;\n case 'getSignatures':\n task = engine.getSignatures!(...args);\n break;\n case 'renderPage':\n task = engine.renderPage!(...args);\n break;\n case 'renderPageRect':\n task = engine.renderPageRect!(...args);\n break;\n case 'renderPageAnnotation':\n task = engine.renderPageAnnotation!(...args);\n break;\n case 'renderThumbnail':\n task = engine.renderThumbnail!(...args);\n break;\n case 'getAllAnnotations':\n task = engine.getAllAnnotations!(...args);\n break;\n case 'getPageAnnotations':\n task = engine.getPageAnnotations!(...args);\n break;\n case 'createPageAnnotation':\n task = engine.createPageAnnotation!(...args);\n break;\n case 'updatePageAnnotation':\n task = engine.updatePageAnnotation!(...args);\n break;\n case 'removePageAnnotation':\n task = engine.removePageAnnotation!(...args);\n break;\n case 'getPageTextRects':\n task = engine.getPageTextRects!(...args);\n break;\n case 'searchAllPages':\n task = engine.searchAllPages!(...args);\n break;\n case 'closeDocument':\n task = engine.closeDocument!(...args);\n break;\n case 'closeAllDocuments':\n task = engine.closeAllDocuments!(...args);\n break;\n case 'saveAsCopy':\n task = engine.saveAsCopy!(...args);\n break;\n case 'getAttachments':\n task = engine.getAttachments!(...args);\n break;\n case 'addAttachment':\n task = engine.addAttachment!(...args);\n break;\n case 'removeAttachment':\n task = engine.removeAttachment!(...args);\n break;\n case 'readAttachmentContent':\n task = engine.readAttachmentContent!(...args);\n break;\n case 'setFormFieldValue':\n task = engine.setFormFieldValue!(...args);\n break;\n case 'flattenPage':\n task = engine.flattenPage!(...args);\n break;\n case 'extractPages':\n task = engine.extractPages!(...args);\n break;\n case 'extractText':\n task = engine.extractText!(...args);\n break;\n case 'redactTextInRects':\n task = engine.redactTextInRects!(...args);\n break;\n case 'getTextSlices':\n task = engine.getTextSlices!(...args);\n break;\n case 'getPageGlyphs':\n task = engine.getPageGlyphs!(...args);\n break;\n case 'getPageGeometry':\n task = engine.getPageGeometry!(...args);\n break;\n case 'merge':\n task = engine.merge!(...args);\n break;\n case 'mergePages':\n task = engine.mergePages!(...args);\n break;\n case 'preparePrintDocument':\n task = engine.preparePrintDocument!(...args);\n break;\n default:\n // This should never be reached due to the earlier check, but provides exhaustiveness\n const error: PdfEngineError = {\n type: 'reject',\n reason: {\n code: PdfErrorCode.NotSupport,\n message: `engine method ${name} is not supported`,\n },\n };\n const response: ExecuteResponse = {\n id: request.id,\n type: 'ExecuteResponse',\n data: {\n type: 'error',\n value: error,\n },\n };\n this.respond(response);\n return;\n }\n\n task.onProgress((progress) => {\n const response: ExecuteProgress = {\n id: request.id,\n type: 'ExecuteProgress',\n data: progress,\n };\n this.respond(response);\n });\n\n task.wait(\n (result) => {\n const response: ExecuteResponse = {\n id: request.id,\n type: 'ExecuteResponse',\n data: {\n type: 'result',\n value: result,\n },\n };\n this.respond(response);\n },\n (error) => {\n const response: ExecuteResponse = {\n id: request.id,\n type: 'ExecuteResponse',\n data: {\n type: 'error',\n value: error,\n },\n };\n this.respond(response);\n },\n );\n };\n\n /**\n * Send back the response\n * @param response - response that needs sent back\n *\n * @protected\n */\n respond(response: Response) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'runner respond: ', response);\n self.postMessage(response);\n }\n}\n"],"names":["LOG_SOURCE","LOG_CATEGORY","constructor","logger","NoopLogger","this","execute","async","request","debug","engine","error","type","reason","code","PdfErrorCode","NotReady","message","response","id","data","value","respond","name","args","NotSupport","task","isSupport","destroy","openDocumentUrl","openDocumentBuffer","getDocPermissions","getDocUserPermissions","getMetadata","setMetadata","getBookmarks","setBookmarks","deleteBookmarks","getSignatures","renderPage","renderPageRect","renderPageAnnotation","renderThumbnail","getAllAnnotations","getPageAnnotations","createPageAnnotation","updatePageAnnotation","removePageAnnotation","getPageTextRects","searchAllPages","closeDocument","closeAllDocuments","saveAsCopy","getAttachments","addAttachment","removeAttachment","readAttachmentContent","setFormFieldValue","flattenPage","extractPages","extractText","redactTextInRects","getTextSlices","getPageGlyphs","getPageGeometry","merge","mergePages","preparePrintDocument","onProgress","progress","wait","result","listen","self","onmessage","evt","handle","e","info","ready","postMessage"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,9 +1,10 @@
1
1
  import { DEFAULT_PDFIUM_WASM_URL } from "./lib/pdfium/index.js";
2
2
  import { WebWorkerEngine, WorkerTask } from "./lib/webworker/engine.js";
3
3
  import { NoopLogger, PdfErrorCode } from "@embedpdf/models";
4
- import { B, P, a, R, d, c, i, b, r } from "./direct-engine-BZRK27cv.js";
4
+ import { B, P, a, R, d, c, i, b, r } from "./direct-engine-DuLFAbiv.js";
5
5
  import { createPdfiumEngine } from "./lib/pdfium/web/worker-engine.js";
6
- import { O, b as b2, a as a2, c as c2 } from "./browser-Cm3DA8l_.js";
6
+ import { I, b as b2, a as a2, c as c2 } from "./browser-awZxztMA.js";
7
+ import { P as P2 } from "./pdf-engine-BVNF_Yo9.js";
7
8
  const LOG_SOURCE = "WebWorkerEngineRunner";
8
9
  const LOG_CATEGORY = "Engine";
9
10
  class EngineRunner {
@@ -58,131 +59,146 @@ class EngineRunner {
58
59
  let task;
59
60
  switch (name) {
60
61
  case "isSupport":
61
- task = this.engine[name](...args);
62
- break;
63
- case "initialize":
64
- task = this.engine[name](...args);
62
+ task = engine.isSupport(...args);
65
63
  break;
66
64
  case "destroy":
67
- task = this.engine[name](...args);
65
+ task = engine.destroy(...args);
68
66
  break;
69
67
  case "openDocumentUrl":
70
- task = this.engine[name](...args);
68
+ task = engine.openDocumentUrl(...args);
71
69
  break;
72
70
  case "openDocumentBuffer":
73
- task = this.engine[name](...args);
71
+ task = engine.openDocumentBuffer(...args);
74
72
  break;
75
73
  case "getDocPermissions":
76
- task = this.engine[name](...args);
74
+ task = engine.getDocPermissions(...args);
77
75
  break;
78
76
  case "getDocUserPermissions":
79
- task = this.engine[name](...args);
77
+ task = engine.getDocUserPermissions(...args);
80
78
  break;
81
79
  case "getMetadata":
82
- task = this.engine[name](...args);
80
+ task = engine.getMetadata(...args);
83
81
  break;
84
82
  case "setMetadata":
85
- task = this.engine[name](...args);
83
+ task = engine.setMetadata(...args);
86
84
  break;
87
85
  case "getBookmarks":
88
- task = this.engine[name](...args);
86
+ task = engine.getBookmarks(...args);
89
87
  break;
90
88
  case "setBookmarks":
91
- task = this.engine[name](...args);
89
+ task = engine.setBookmarks(...args);
92
90
  break;
93
91
  case "deleteBookmarks":
94
- task = this.engine[name](...args);
92
+ task = engine.deleteBookmarks(...args);
95
93
  break;
96
94
  case "getSignatures":
97
- task = this.engine[name](...args);
95
+ task = engine.getSignatures(...args);
98
96
  break;
99
97
  case "renderPage":
100
- task = this.engine[name](...args);
98
+ task = engine.renderPage(...args);
101
99
  break;
102
100
  case "renderPageRect":
103
- task = this.engine[name](...args);
101
+ task = engine.renderPageRect(...args);
104
102
  break;
105
103
  case "renderPageAnnotation":
106
- task = this.engine[name](...args);
104
+ task = engine.renderPageAnnotation(...args);
107
105
  break;
108
106
  case "renderThumbnail":
109
- task = this.engine[name](...args);
107
+ task = engine.renderThumbnail(...args);
110
108
  break;
111
109
  case "getAllAnnotations":
112
- task = this.engine[name](...args);
110
+ task = engine.getAllAnnotations(...args);
113
111
  break;
114
112
  case "getPageAnnotations":
115
- task = this.engine[name](...args);
113
+ task = engine.getPageAnnotations(...args);
116
114
  break;
117
115
  case "createPageAnnotation":
118
- task = this.engine[name](...args);
116
+ task = engine.createPageAnnotation(...args);
119
117
  break;
120
118
  case "updatePageAnnotation":
121
- task = this.engine[name](...args);
119
+ task = engine.updatePageAnnotation(...args);
122
120
  break;
123
121
  case "removePageAnnotation":
124
- task = this.engine[name](...args);
122
+ task = engine.removePageAnnotation(...args);
125
123
  break;
126
124
  case "getPageTextRects":
127
- task = this.engine[name](...args);
125
+ task = engine.getPageTextRects(...args);
128
126
  break;
129
127
  case "searchAllPages":
130
- task = this.engine[name](...args);
128
+ task = engine.searchAllPages(...args);
131
129
  break;
132
130
  case "closeDocument":
133
- task = this.engine[name](...args);
131
+ task = engine.closeDocument(...args);
134
132
  break;
135
133
  case "closeAllDocuments":
136
- task = this.engine[name](...args);
134
+ task = engine.closeAllDocuments(...args);
137
135
  break;
138
136
  case "saveAsCopy":
139
- task = this.engine[name](...args);
137
+ task = engine.saveAsCopy(...args);
140
138
  break;
141
139
  case "getAttachments":
142
- task = this.engine[name](...args);
140
+ task = engine.getAttachments(...args);
143
141
  break;
144
142
  case "addAttachment":
145
- task = this.engine[name](...args);
143
+ task = engine.addAttachment(...args);
146
144
  break;
147
145
  case "removeAttachment":
148
- task = this.engine[name](...args);
146
+ task = engine.removeAttachment(...args);
149
147
  break;
150
148
  case "readAttachmentContent":
151
- task = this.engine[name](...args);
149
+ task = engine.readAttachmentContent(...args);
152
150
  break;
153
151
  case "setFormFieldValue":
154
- task = this.engine[name](...args);
152
+ task = engine.setFormFieldValue(...args);
155
153
  break;
156
154
  case "flattenPage":
157
- task = this.engine[name](...args);
155
+ task = engine.flattenPage(...args);
158
156
  break;
159
157
  case "extractPages":
160
- task = this.engine[name](...args);
158
+ task = engine.extractPages(...args);
161
159
  break;
162
160
  case "extractText":
163
- task = this.engine[name](...args);
161
+ task = engine.extractText(...args);
164
162
  break;
165
163
  case "redactTextInRects":
166
- task = this.engine[name](...args);
164
+ task = engine.redactTextInRects(...args);
167
165
  break;
168
166
  case "getTextSlices":
169
- task = this.engine[name](...args);
167
+ task = engine.getTextSlices(...args);
170
168
  break;
171
169
  case "getPageGlyphs":
172
- task = this.engine[name](...args);
170
+ task = engine.getPageGlyphs(...args);
173
171
  break;
174
172
  case "getPageGeometry":
175
- task = this.engine[name](...args);
173
+ task = engine.getPageGeometry(...args);
176
174
  break;
177
175
  case "merge":
178
- task = this.engine[name](...args);
176
+ task = engine.merge(...args);
179
177
  break;
180
178
  case "mergePages":
181
- task = this.engine[name](...args);
179
+ task = engine.mergePages(...args);
182
180
  break;
183
181
  case "preparePrintDocument":
184
- task = this.engine[name](...args);
185
- break;
182
+ task = engine.preparePrintDocument(...args);
183
+ break;
184
+ default:
185
+ const error = {
186
+ type: "reject",
187
+ reason: {
188
+ code: PdfErrorCode.NotSupport,
189
+ message: `engine method ${name} is not supported`
190
+ }
191
+ };
192
+ const response = {
193
+ id: request.id,
194
+ type: "ExecuteResponse",
195
+ data: {
196
+ type: "error",
197
+ value: error
198
+ }
199
+ };
200
+ this.respond(response);
201
+ return;
186
202
  }
187
203
  task.onProgress((progress) => {
188
204
  const response = {
@@ -276,7 +292,8 @@ export {
276
292
  B as BitmapFormat,
277
293
  DEFAULT_PDFIUM_WASM_URL,
278
294
  EngineRunner,
279
- O as OffscreenCanvasError,
295
+ I as ImageConverterError,
296
+ P2 as PdfEngine,
280
297
  P as PdfiumErrorCode,
281
298
  a as PdfiumNative,
282
299
  R as RenderFlag,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/lib/webworker/runner.ts"],"sourcesContent":["import {\n Logger,\n NoopLogger,\n PdfEngine,\n PdfEngineError,\n PdfEngineMethodArgs,\n PdfEngineMethodName,\n PdfEngineMethodReturnType,\n PdfErrorCode,\n TaskReturn,\n} from '@embedpdf/models';\n\n/**\n * Request body that represent method calls of PdfEngine, it contains the\n * method name and arguments\n */\nexport type PdfEngineMethodRequestBody = {\n [P in PdfEngineMethodName]: {\n name: P;\n args: PdfEngineMethodArgs<P>;\n };\n}[PdfEngineMethodName];\n\n/**\n * Request body that represent method calls of PdfEngine, it contains the\n * method name and arguments\n */\nexport type SpecificExecuteRequest<M extends PdfEngineMethodName> = {\n id: string;\n type: 'ExecuteRequest';\n data: {\n name: M;\n args: PdfEngineMethodArgs<M>;\n };\n};\n\n/**\n * Response body that represent return value of PdfEngine\n */\nexport type PdfEngineMethodResponseBody = {\n [P in PdfEngineMethodName]: TaskReturn<PdfEngineMethodReturnType<P>>;\n}[PdfEngineMethodName];\n\n/**\n * Request that abort the specified task\n */\nexport interface AbortRequest {\n /**\n * message id\n */\n id: string;\n /**\n * request type\n */\n type: 'AbortRequest';\n}\n/**\n * Request that execute pdf engine method\n */\nexport interface ExecuteRequest {\n /**\n * message id\n */\n id: string;\n /**\n * request type\n */\n type: 'ExecuteRequest';\n /**\n * request body\n */\n data: PdfEngineMethodRequestBody;\n}\n/**\n * Response that execute pdf engine method\n */\nexport interface ExecuteResponse {\n /**\n * message id\n */\n id: string;\n /**\n * response type\n */\n type: 'ExecuteResponse';\n /**\n * response body\n */\n data: PdfEngineMethodResponseBody;\n}\n\n/**\n * Response that indicate progress of the task\n */\nexport interface ExecuteProgress<T = unknown> {\n /**\n * message id\n */\n id: string;\n /**\n * response type\n */\n type: 'ExecuteProgress';\n /**\n * response body\n */\n data: T;\n}\n\n/**\n * Response that indicate engine is ready\n */\nexport interface ReadyResponse {\n /**\n * message id\n */\n id: string;\n /**\n * response type\n */\n type: 'ReadyResponse';\n}\n\n/**\n * Request type\n */\nexport type Request = ExecuteRequest | AbortRequest;\n/**\n * Response type\n */\nexport type Response = ExecuteResponse | ReadyResponse | ExecuteProgress;\n\nconst LOG_SOURCE = 'WebWorkerEngineRunner';\nconst LOG_CATEGORY = 'Engine';\n\n/**\n * Pdf engine runner, it will execute pdf engine based on the request it received and\n * send back the response with post message\n */\nexport class EngineRunner {\n engine: PdfEngine | undefined;\n\n /**\n * Create instance of EngineRunnder\n * @param logger - logger instance\n */\n constructor(public logger: Logger = new NoopLogger()) {}\n\n /**\n * Listening on post message\n */\n listen() {\n self.onmessage = (evt: MessageEvent<Request>) => {\n return this.handle(evt);\n };\n }\n\n /**\n * Handle post message\n */\n handle(evt: MessageEvent<Request>) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'webworker receive message event: ', evt.data);\n try {\n const request = evt.data as Request;\n switch (request.type) {\n case 'ExecuteRequest':\n this.execute(request);\n break;\n }\n } catch (e) {\n this.logger.info(\n LOG_SOURCE,\n LOG_CATEGORY,\n 'webworker met error when processing message event:',\n e,\n );\n }\n }\n\n /**\n * Send the ready response when pdf engine is ready\n * @returns\n *\n * @protected\n */\n ready() {\n this.listen();\n\n this.respond({\n id: '0',\n type: 'ReadyResponse',\n });\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'runner is ready');\n }\n\n /**\n * Execute the request\n * @param request - request that represent the pdf engine call\n * @returns\n *\n * @protected\n */\n execute = async (request: ExecuteRequest) => {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'runner start exeucte request');\n if (!this.engine) {\n const error: PdfEngineError = {\n type: 'reject',\n reason: {\n code: PdfErrorCode.NotReady,\n message: 'engine has not started yet',\n },\n };\n const response: ExecuteResponse = {\n id: request.id,\n type: 'ExecuteResponse',\n data: {\n type: 'error',\n value: error,\n },\n };\n this.respond(response);\n return;\n }\n\n const engine = this.engine;\n const { name, args } = request.data;\n if (!engine[name]) {\n const error: PdfEngineError = {\n type: 'reject',\n reason: {\n code: PdfErrorCode.NotSupport,\n message: `engine method ${name} is not supported yet`,\n },\n };\n const response: ExecuteResponse = {\n id: request.id,\n type: 'ExecuteResponse',\n data: {\n type: 'error',\n value: error,\n },\n };\n this.respond(response);\n return;\n }\n\n let task: PdfEngineMethodReturnType<typeof name>;\n switch (name) {\n case 'isSupport':\n task = this.engine[name]!(...args);\n break;\n case 'initialize':\n task = this.engine[name]!(...args);\n break;\n case 'destroy':\n task = this.engine[name]!(...args);\n break;\n case 'openDocumentUrl':\n task = this.engine[name]!(...args);\n break;\n case 'openDocumentBuffer':\n task = this.engine[name]!(...args);\n break;\n case 'getDocPermissions':\n task = this.engine[name]!(...args);\n break;\n case 'getDocUserPermissions':\n task = this.engine[name]!(...args);\n break;\n case 'getMetadata':\n task = this.engine[name]!(...args);\n break;\n case 'setMetadata':\n task = this.engine[name]!(...args);\n break;\n case 'getBookmarks':\n task = this.engine[name]!(...args);\n break;\n case 'setBookmarks':\n task = this.engine[name]!(...args);\n break;\n case 'deleteBookmarks':\n task = this.engine[name]!(...args);\n break;\n case 'getSignatures':\n task = this.engine[name]!(...args);\n break;\n case 'renderPage':\n task = this.engine[name]!(...args);\n break;\n case 'renderPageRect':\n task = this.engine[name]!(...args);\n break;\n case 'renderPageAnnotation':\n task = this.engine[name]!(...args);\n break;\n case 'renderThumbnail':\n task = this.engine[name]!(...args);\n break;\n case 'getAllAnnotations':\n task = this.engine[name]!(...args);\n break;\n case 'getPageAnnotations':\n task = this.engine[name]!(...args);\n break;\n case 'createPageAnnotation':\n task = this.engine[name]!(...args);\n break;\n case 'updatePageAnnotation':\n task = this.engine[name]!(...args);\n break;\n case 'removePageAnnotation':\n task = this.engine[name]!(...args);\n break;\n case 'getPageTextRects':\n task = this.engine[name]!(...args);\n break;\n case 'searchAllPages':\n task = this.engine[name]!(...args);\n break;\n case 'closeDocument':\n task = this.engine[name]!(...args);\n break;\n case 'closeAllDocuments':\n task = this.engine[name]!(...args);\n break;\n case 'saveAsCopy':\n task = this.engine[name]!(...args);\n break;\n case 'getAttachments':\n task = this.engine[name]!(...args);\n break;\n case 'addAttachment':\n task = this.engine[name]!(...args);\n break;\n case 'removeAttachment':\n task = this.engine[name]!(...args);\n break;\n case 'readAttachmentContent':\n task = this.engine[name]!(...args);\n break;\n case 'setFormFieldValue':\n task = this.engine[name]!(...args);\n break;\n case 'flattenPage':\n task = this.engine[name]!(...args);\n break;\n case 'extractPages':\n task = this.engine[name]!(...args);\n break;\n case 'extractText':\n task = this.engine[name]!(...args);\n break;\n case 'redactTextInRects':\n task = this.engine[name]!(...args);\n break;\n case 'getTextSlices':\n task = this.engine[name]!(...args);\n break;\n case 'getPageGlyphs':\n task = this.engine[name]!(...args);\n break;\n case 'getPageGeometry':\n task = this.engine[name]!(...args);\n break;\n case 'merge':\n task = this.engine[name]!(...args);\n break;\n case 'mergePages':\n task = this.engine[name]!(...args);\n break;\n case 'preparePrintDocument':\n task = this.engine[name]!(...args);\n break;\n }\n\n task.onProgress((progress) => {\n const response: ExecuteProgress = {\n id: request.id,\n type: 'ExecuteProgress',\n data: progress,\n };\n this.respond(response);\n });\n\n task.wait(\n (result) => {\n const response: ExecuteResponse = {\n id: request.id,\n type: 'ExecuteResponse',\n data: {\n type: 'result',\n value: result,\n },\n };\n this.respond(response);\n },\n (error) => {\n const response: ExecuteResponse = {\n id: request.id,\n type: 'ExecuteResponse',\n data: {\n type: 'error',\n value: error,\n },\n };\n this.respond(response);\n },\n );\n };\n\n /**\n * Send back the response\n * @param response - response that needs sent back\n *\n * @protected\n */\n respond(response: Response) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'runner respond: ', response);\n self.postMessage(response);\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/lib/webworker/runner.ts"],"sourcesContent":["import {\n Logger,\n NoopLogger,\n PdfEngine,\n PdfEngineError,\n PdfEngineMethodArgs,\n PdfEngineMethodName,\n PdfEngineMethodReturnType,\n PdfErrorCode,\n TaskReturn,\n} from '@embedpdf/models';\n\n/**\n * Request body that represent method calls of PdfEngine, it contains the\n * method name and arguments\n */\nexport type PdfEngineMethodRequestBody = {\n [P in PdfEngineMethodName]: {\n name: P;\n args: PdfEngineMethodArgs<P>;\n };\n}[PdfEngineMethodName];\n\n/**\n * Request body that represent method calls of PdfEngine, it contains the\n * method name and arguments\n */\nexport type SpecificExecuteRequest<M extends PdfEngineMethodName> = {\n id: string;\n type: 'ExecuteRequest';\n data: {\n name: M;\n args: PdfEngineMethodArgs<M>;\n };\n};\n\n/**\n * Response body that represent return value of PdfEngine\n */\nexport type PdfEngineMethodResponseBody = {\n [P in PdfEngineMethodName]: TaskReturn<PdfEngineMethodReturnType<P>>;\n}[PdfEngineMethodName];\n\n/**\n * Request that abort the specified task\n */\nexport interface AbortRequest {\n /**\n * message id\n */\n id: string;\n /**\n * request type\n */\n type: 'AbortRequest';\n}\n/**\n * Request that execute pdf engine method\n */\nexport interface ExecuteRequest {\n /**\n * message id\n */\n id: string;\n /**\n * request type\n */\n type: 'ExecuteRequest';\n /**\n * request body\n */\n data: PdfEngineMethodRequestBody;\n}\n/**\n * Response that execute pdf engine method\n */\nexport interface ExecuteResponse {\n /**\n * message id\n */\n id: string;\n /**\n * response type\n */\n type: 'ExecuteResponse';\n /**\n * response body\n */\n data: PdfEngineMethodResponseBody;\n}\n\n/**\n * Response that indicate progress of the task\n */\nexport interface ExecuteProgress<T = unknown> {\n /**\n * message id\n */\n id: string;\n /**\n * response type\n */\n type: 'ExecuteProgress';\n /**\n * response body\n */\n data: T;\n}\n\n/**\n * Response that indicate engine is ready\n */\nexport interface ReadyResponse {\n /**\n * message id\n */\n id: string;\n /**\n * response type\n */\n type: 'ReadyResponse';\n}\n\n/**\n * Request type\n */\nexport type Request = ExecuteRequest | AbortRequest;\n/**\n * Response type\n */\nexport type Response = ExecuteResponse | ReadyResponse | ExecuteProgress;\n\nconst LOG_SOURCE = 'WebWorkerEngineRunner';\nconst LOG_CATEGORY = 'Engine';\n\n/**\n * Pdf engine runner, it will execute pdf engine based on the request it received and\n * send back the response with post message\n */\nexport class EngineRunner {\n engine: PdfEngine | undefined;\n\n /**\n * Create instance of EngineRunnder\n * @param logger - logger instance\n */\n constructor(public logger: Logger = new NoopLogger()) {}\n\n /**\n * Listening on post message\n */\n listen() {\n self.onmessage = (evt: MessageEvent<Request>) => {\n return this.handle(evt);\n };\n }\n\n /**\n * Handle post message\n */\n handle(evt: MessageEvent<Request>) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'webworker receive message event: ', evt.data);\n try {\n const request = evt.data as Request;\n switch (request.type) {\n case 'ExecuteRequest':\n this.execute(request);\n break;\n }\n } catch (e) {\n this.logger.info(\n LOG_SOURCE,\n LOG_CATEGORY,\n 'webworker met error when processing message event:',\n e,\n );\n }\n }\n\n /**\n * Send the ready response when pdf engine is ready\n * @returns\n *\n * @protected\n */\n ready() {\n this.listen();\n\n this.respond({\n id: '0',\n type: 'ReadyResponse',\n });\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'runner is ready');\n }\n\n /**\n * Execute the request\n * @param request - request that represent the pdf engine call\n * @returns\n *\n * @protected\n */\n execute = async (request: ExecuteRequest) => {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'runner start exeucte request');\n if (!this.engine) {\n const error: PdfEngineError = {\n type: 'reject',\n reason: {\n code: PdfErrorCode.NotReady,\n message: 'engine has not started yet',\n },\n };\n const response: ExecuteResponse = {\n id: request.id,\n type: 'ExecuteResponse',\n data: {\n type: 'error',\n value: error,\n },\n };\n this.respond(response);\n return;\n }\n\n const engine = this.engine;\n const { name, args } = request.data;\n if (!engine[name]) {\n const error: PdfEngineError = {\n type: 'reject',\n reason: {\n code: PdfErrorCode.NotSupport,\n message: `engine method ${name} is not supported yet`,\n },\n };\n const response: ExecuteResponse = {\n id: request.id,\n type: 'ExecuteResponse',\n data: {\n type: 'error',\n value: error,\n },\n };\n this.respond(response);\n return;\n }\n\n let task: PdfEngineMethodReturnType<typeof name>;\n switch (name) {\n case 'isSupport':\n task = engine.isSupport!(...args);\n break;\n case 'destroy':\n task = engine.destroy!(...args);\n break;\n case 'openDocumentUrl':\n task = engine.openDocumentUrl!(...args);\n break;\n case 'openDocumentBuffer':\n task = engine.openDocumentBuffer!(...args);\n break;\n case 'getDocPermissions':\n task = engine.getDocPermissions!(...args);\n break;\n case 'getDocUserPermissions':\n task = engine.getDocUserPermissions!(...args);\n break;\n case 'getMetadata':\n task = engine.getMetadata!(...args);\n break;\n case 'setMetadata':\n task = engine.setMetadata!(...args);\n break;\n case 'getBookmarks':\n task = engine.getBookmarks!(...args);\n break;\n case 'setBookmarks':\n task = engine.setBookmarks!(...args);\n break;\n case 'deleteBookmarks':\n task = engine.deleteBookmarks!(...args);\n break;\n case 'getSignatures':\n task = engine.getSignatures!(...args);\n break;\n case 'renderPage':\n task = engine.renderPage!(...args);\n break;\n case 'renderPageRect':\n task = engine.renderPageRect!(...args);\n break;\n case 'renderPageAnnotation':\n task = engine.renderPageAnnotation!(...args);\n break;\n case 'renderThumbnail':\n task = engine.renderThumbnail!(...args);\n break;\n case 'getAllAnnotations':\n task = engine.getAllAnnotations!(...args);\n break;\n case 'getPageAnnotations':\n task = engine.getPageAnnotations!(...args);\n break;\n case 'createPageAnnotation':\n task = engine.createPageAnnotation!(...args);\n break;\n case 'updatePageAnnotation':\n task = engine.updatePageAnnotation!(...args);\n break;\n case 'removePageAnnotation':\n task = engine.removePageAnnotation!(...args);\n break;\n case 'getPageTextRects':\n task = engine.getPageTextRects!(...args);\n break;\n case 'searchAllPages':\n task = engine.searchAllPages!(...args);\n break;\n case 'closeDocument':\n task = engine.closeDocument!(...args);\n break;\n case 'closeAllDocuments':\n task = engine.closeAllDocuments!(...args);\n break;\n case 'saveAsCopy':\n task = engine.saveAsCopy!(...args);\n break;\n case 'getAttachments':\n task = engine.getAttachments!(...args);\n break;\n case 'addAttachment':\n task = engine.addAttachment!(...args);\n break;\n case 'removeAttachment':\n task = engine.removeAttachment!(...args);\n break;\n case 'readAttachmentContent':\n task = engine.readAttachmentContent!(...args);\n break;\n case 'setFormFieldValue':\n task = engine.setFormFieldValue!(...args);\n break;\n case 'flattenPage':\n task = engine.flattenPage!(...args);\n break;\n case 'extractPages':\n task = engine.extractPages!(...args);\n break;\n case 'extractText':\n task = engine.extractText!(...args);\n break;\n case 'redactTextInRects':\n task = engine.redactTextInRects!(...args);\n break;\n case 'getTextSlices':\n task = engine.getTextSlices!(...args);\n break;\n case 'getPageGlyphs':\n task = engine.getPageGlyphs!(...args);\n break;\n case 'getPageGeometry':\n task = engine.getPageGeometry!(...args);\n break;\n case 'merge':\n task = engine.merge!(...args);\n break;\n case 'mergePages':\n task = engine.mergePages!(...args);\n break;\n case 'preparePrintDocument':\n task = engine.preparePrintDocument!(...args);\n break;\n default:\n // This should never be reached due to the earlier check, but provides exhaustiveness\n const error: PdfEngineError = {\n type: 'reject',\n reason: {\n code: PdfErrorCode.NotSupport,\n message: `engine method ${name} is not supported`,\n },\n };\n const response: ExecuteResponse = {\n id: request.id,\n type: 'ExecuteResponse',\n data: {\n type: 'error',\n value: error,\n },\n };\n this.respond(response);\n return;\n }\n\n task.onProgress((progress) => {\n const response: ExecuteProgress = {\n id: request.id,\n type: 'ExecuteProgress',\n data: progress,\n };\n this.respond(response);\n });\n\n task.wait(\n (result) => {\n const response: ExecuteResponse = {\n id: request.id,\n type: 'ExecuteResponse',\n data: {\n type: 'result',\n value: result,\n },\n };\n this.respond(response);\n },\n (error) => {\n const response: ExecuteResponse = {\n id: request.id,\n type: 'ExecuteResponse',\n data: {\n type: 'error',\n value: error,\n },\n };\n this.respond(response);\n },\n );\n };\n\n /**\n * Send back the response\n * @param response - response that needs sent back\n *\n * @protected\n */\n respond(response: Response) {\n this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'runner respond: ', response);\n self.postMessage(response);\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,32 +1,33 @@
1
- import { ImageConversionTypes } from '@embedpdf/models';
2
1
  import { ImageDataConverter } from './types';
3
2
  import { ImageEncoderWorkerPool } from '../image-encoder';
4
- export declare class OffscreenCanvasError extends Error {
3
+ export declare class ImageConverterError extends Error {
5
4
  constructor(message: string);
6
5
  }
7
6
  /**
8
- * Browser-based image converter using OffscreenCanvas in the same thread
9
- * This is the simplest approach but blocks the thread during encoding
7
+ * Main-thread Canvas-based image converter
8
+ * Simple and works everywhere, but blocks the main thread during encoding
9
+ *
10
+ * Use this as a fallback when worker-based encoding isn't available
10
11
  */
11
12
  export declare const browserImageDataToBlobConverter: ImageDataConverter<Blob>;
12
13
  /**
13
- * Create an image converter that uses a dedicated worker pool for encoding
14
- * This prevents blocking the main/PDFium worker thread
14
+ * Worker pool image converter using OffscreenCanvas in dedicated workers
15
+ * Non-blocking - encoding happens off the main thread
16
+ *
17
+ * This is the preferred approach for performance
15
18
  *
16
19
  * @param workerPool - Instance of ImageEncoderWorkerPool
17
20
  * @returns ImageDataConverter function
18
21
  */
19
22
  export declare function createWorkerPoolImageConverter(workerPool: ImageEncoderWorkerPool): ImageDataConverter<Blob>;
20
23
  /**
21
- * Hybrid converter: tries worker pool first, falls back to WASM encoding
22
- * This provides the best performance with graceful degradation
24
+ * Hybrid converter: Worker pool (OffscreenCanvas) Main thread Canvas fallback
25
+ *
26
+ * Best of both worlds:
27
+ * - Primary: Non-blocking worker-based encoding with OffscreenCanvas
28
+ * - Fallback: Main-thread Canvas for older browsers without OffscreenCanvas in workers
23
29
  *
24
30
  * @param workerPool - Instance of ImageEncoderWorkerPool
25
- * @param wasmFallback - WASM-based encoding function
26
31
  * @returns ImageDataConverter function
27
32
  */
28
- export declare function createHybridImageConverter(workerPool: ImageEncoderWorkerPool, wasmFallback: (imageData: {
29
- data: Uint8ClampedArray;
30
- width: number;
31
- height: number;
32
- }, imageType: ImageConversionTypes, quality?: number) => Blob): ImageDataConverter<Blob>;
33
+ export declare function createHybridImageConverter(workerPool: ImageEncoderWorkerPool): ImageDataConverter<Blob>;
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../../browser-B5Y-F6il.cjs");function r(e){const{buffer:r,byteOffset:t,byteLength:a}=e;if(r instanceof ArrayBuffer)return r.slice(t,t+a);const o=new ArrayBuffer(a);return new Uint8Array(o).set(new Uint8Array(r,t,a)),o}exports.OffscreenCanvasError=e.OffscreenCanvasError,exports.browserImageDataToBlobConverter=e.browserImageDataToBlobConverter,exports.createHybridImageConverter=e.createHybridImageConverter,exports.createWorkerPoolImageConverter=e.createWorkerPoolImageConverter,exports.createCustomImageDataToBlobConverter=function(e){return async(t,a="image/webp",o)=>{const n=t(),s=await e(n,a,o);return new Blob([r(s)],{type:a})}},exports.createCustomImageDataToBufferConverter=function(e){return async(r,t="image/webp",a)=>{const o=r();return await e(o,t,a)}},exports.createNodeCanvasImageDataToBlobConverter=function(e){return async(r,t="image/webp",a)=>{const o=r(),{width:n,height:s}=o,i=e(n,s);let g;switch(i.getContext("2d").putImageData(o,0,0),t){case"image/webp":g=i.toBuffer("image/webp");break;case"image/png":g=i.toBuffer("image/png");break;case"image/jpeg":g=i.toBuffer("image/jpeg");break;default:throw new Error(`Unsupported image type: ${t}`)}return g}},exports.createNodeImageDataToBufferConverter=function(e){return async(r,t="image/webp",a)=>{const o=r(),{width:n,height:s,data:i}=o;let g,f=e(Buffer.from(i),{raw:{width:n,height:s,channels:4}});switch(t){case"image/webp":g=await f.webp({quality:a}).toBuffer();break;case"image/png":g=await f.png().toBuffer();break;case"image/jpeg":g=await f.flatten({background:{r:255,g:255,b:255}}).jpeg({quality:a}).toBuffer();break;default:throw new Error(`Unsupported image type: ${t}`)}return g}};
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../../browser-C6QEa8uk.cjs");function r(e){const{buffer:r,byteOffset:t,byteLength:a}=e;if(r instanceof ArrayBuffer)return r.slice(t,t+a);const o=new ArrayBuffer(a);return new Uint8Array(o).set(new Uint8Array(r,t,a)),o}exports.ImageConverterError=e.ImageConverterError,exports.browserImageDataToBlobConverter=e.browserImageDataToBlobConverter,exports.createHybridImageConverter=e.createHybridImageConverter,exports.createWorkerPoolImageConverter=e.createWorkerPoolImageConverter,exports.createCustomImageDataToBlobConverter=function(e){return async(t,a="image/webp",o)=>{const n=t(),i=await e(n,a,o);return new Blob([r(i)],{type:a})}},exports.createCustomImageDataToBufferConverter=function(e){return async(r,t="image/webp",a)=>{const o=r();return await e(o,t,a)}},exports.createNodeCanvasImageDataToBlobConverter=function(e){return async(r,t="image/webp",a)=>{const o=r(),{width:n,height:i}=o,g=e(n,i);let s;switch(g.getContext("2d").putImageData(o,0,0),t){case"image/webp":s=g.toBuffer("image/webp");break;case"image/png":s=g.toBuffer("image/png");break;case"image/jpeg":s=g.toBuffer("image/jpeg");break;default:throw new Error(`Unsupported image type: ${t}`)}return s}},exports.createNodeImageDataToBufferConverter=function(e){return async(r,t="image/webp",a)=>{const o=r(),{width:n,height:i,data:g}=o;let s,u=e(Buffer.from(g),{raw:{width:n,height:i,channels:4}});switch(t){case"image/webp":s=await u.webp({quality:a}).toBuffer();break;case"image/png":s=await u.png().toBuffer();break;case"image/jpeg":s=await u.flatten({background:{r:255,g:255,b:255}}).jpeg({quality:a}).toBuffer();break;default:throw new Error(`Unsupported image type: ${t}`)}return s}};
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../src/lib/utils.ts","../../../src/lib/converters/node.ts"],"sourcesContent":["// Returns a plain ArrayBuffer (no SharedArrayBuffer), sliced to the view’s region.\nexport function toArrayBuffer(view: ArrayBufferView): ArrayBuffer {\n const { buffer, byteOffset, byteLength } = view;\n if (buffer instanceof ArrayBuffer) {\n return buffer.slice(byteOffset, byteOffset + byteLength);\n }\n // SharedArrayBuffer (or unknown) → copy once\n const ab = new ArrayBuffer(byteLength);\n new Uint8Array(ab).set(new Uint8Array(buffer as ArrayBufferLike, byteOffset, byteLength));\n return ab;\n}\n\n// Ensures ImageData gets a Uint8ClampedArray backed by a real ArrayBuffer.\nexport function toClampedRGBA(\n data: ArrayBufferView | Uint8Array | Uint8ClampedArray,\n): Uint8ClampedArray {\n if (data instanceof Uint8ClampedArray && data.buffer instanceof ArrayBuffer) return data;\n return new Uint8ClampedArray(toArrayBuffer(data as ArrayBufferView));\n}\n","import type { PdfImage, ImageConversionTypes } from '@embedpdf/models';\nimport { toArrayBuffer } from '../utils';\nimport type { ImageDataConverter, LazyImageData } from './types';\n\n// ============================================================================\n// Node.js Converters\n// ============================================================================\n\n/**\n * Node.js implementation using Sharp\n * This requires the 'sharp' package to be installed\n *\n * @example\n * ```typescript\n * import sharp from 'sharp';\n * import { createNodeImageDataToBufferConverter } from '@embedpdf/engines';\n *\n * const imageDataConverter = createNodeImageDataToBufferConverter(sharp);\n * const engine = new PdfiumEngine(pdfiumModule, { logger, imageDataConverter });\n * ```\n */\nexport function createNodeImageDataToBufferConverter(\n sharp: any, // Using 'any' to avoid requiring sharp as a dependency\n): ImageDataConverter<Buffer> {\n return async (\n getImageData: LazyImageData,\n imageType: ImageConversionTypes = 'image/webp',\n imageQuality?: number,\n ): Promise<Buffer> => {\n const imageData = getImageData();\n const { width, height, data } = imageData;\n\n // Convert ImageData to Sharp format\n // ImageData uses RGBA format, Sharp expects the same\n let sharpInstance = sharp(Buffer.from(data), {\n raw: {\n width,\n height,\n channels: 4, // RGBA\n },\n });\n\n // Apply the appropriate format conversion based on imageType\n let buffer: Buffer;\n switch (imageType) {\n case 'image/webp':\n buffer = await sharpInstance\n .webp({\n quality: imageQuality,\n })\n .toBuffer();\n break;\n case 'image/png':\n buffer = await sharpInstance.png().toBuffer();\n break;\n case 'image/jpeg':\n // JPEG doesn't support transparency, so we need to composite onto a white background\n buffer = await sharpInstance\n .flatten({ background: { r: 255, g: 255, b: 255 } }) // Remove alpha channel with white background\n .jpeg({\n quality: imageQuality,\n })\n .toBuffer();\n break;\n default:\n throw new Error(`Unsupported image type: ${imageType}`);\n }\n\n return buffer;\n };\n}\n\n/**\n * Alternative Node.js implementation using canvas (node-canvas)\n * This requires the 'canvas' package to be installed\n *\n * @example\n * ```typescript\n * import { createCanvas } from 'canvas';\n * import { createNodeCanvasImageDataToBlobConverter } from '@embedpdf/engines';\n *\n * const imageDataConverter = createNodeCanvasImageDataToBlobConverter(createCanvas);\n * const engine = new PdfiumEngine(pdfiumModule, { logger, imageDataConverter });\n * ```\n */\nexport function createNodeCanvasImageDataToBlobConverter(\n createCanvas: any, // Using 'any' to avoid requiring canvas as a dependency\n): ImageDataConverter<Buffer> {\n return async (\n getImageData: LazyImageData,\n imageType: ImageConversionTypes = 'image/webp',\n _imageQuality?: number,\n ): Promise<Buffer> => {\n const imageData = getImageData();\n const { width, height } = imageData;\n\n // Create a canvas and put the image data\n const canvas = createCanvas(width, height);\n const ctx = canvas.getContext('2d');\n ctx.putImageData(imageData, 0, 0);\n\n // Convert to buffer and create blob based on the requested type\n let buffer: Buffer;\n switch (imageType) {\n case 'image/webp':\n buffer = canvas.toBuffer('image/webp');\n break;\n case 'image/png':\n buffer = canvas.toBuffer('image/png');\n break;\n case 'image/jpeg':\n buffer = canvas.toBuffer('image/jpeg');\n break;\n default:\n throw new Error(`Unsupported image type: ${imageType}`);\n }\n\n return buffer;\n };\n}\n\n/**\n * Generic Node.js implementation that works with any image processing library\n * that can handle raw RGBA data\n *\n * @example\n * ```typescript\n * const converter = createCustomImageDataToBlobConverter(async (imageData) => {\n * // Your custom image processing logic here\n * // Return a Buffer that will be wrapped in a Blob\n * return processImageWithYourLibrary(imageData);\n * });\n * ```\n */\nexport function createCustomImageDataToBlobConverter(\n processor: (\n imageData: PdfImage,\n imageType?: ImageConversionTypes,\n imageQuality?: number,\n ) => Promise<Buffer>,\n): ImageDataConverter {\n return async (\n getImageData: LazyImageData,\n imageType: ImageConversionTypes = 'image/webp',\n imageQuality?: number,\n ) => {\n const imageData = getImageData();\n const bytes = await processor(imageData, imageType, imageQuality);\n return new Blob([toArrayBuffer(bytes)], { type: imageType });\n };\n}\n\n/**\n * Create a custom converter that returns a Buffer\n * @param processor - function to process the image data\n * @param imageType - image type\n * @returns ImageDataToBlobConverter<Buffer>\n */\nexport function createCustomImageDataToBufferConverter(\n processor: (\n imageData: PdfImage,\n imageType: ImageConversionTypes,\n imageQuality?: number,\n ) => Promise<Buffer>,\n): ImageDataConverter<Buffer> {\n return async (\n getImageData: LazyImageData,\n imageType: ImageConversionTypes = 'image/webp',\n imageQuality?: number,\n ): Promise<Buffer> => {\n const imageData = getImageData();\n return await processor(imageData, imageType, imageQuality);\n };\n}\n"],"names":["toArrayBuffer","view","buffer","byteOffset","byteLength","ArrayBuffer","slice","ab","Uint8Array","set","processor","async","getImageData","imageType","imageQuality","imageData","bytes","Blob","type","createCanvas","_imageQuality","width","height","canvas","getContext","putImageData","toBuffer","Error","sharp","data","sharpInstance","Buffer","from","raw","channels","webp","quality","png","flatten","background","r","g","b","jpeg"],"mappings":"8HACO,SAASA,EAAcC,GAC5B,MAAMC,OAAEA,EAAAC,WAAQA,EAAAC,WAAYA,GAAeH,EAC3C,GAAIC,aAAkBG,YACpB,OAAOH,EAAOI,MAAMH,EAAYA,EAAaC,GAG/C,MAAMG,EAAK,IAAIF,YAAYD,GAE3B,OADA,IAAII,WAAWD,GAAIE,IAAI,IAAID,WAAWN,EAA2BC,EAAYC,IACtEG,CACT,oTC4HO,SACLG,GAMA,OAAOC,MACLC,EACAC,EAAkC,aAClCC,KAEA,MAAMC,EAAYH,IACZI,QAAcN,EAAUK,EAAWF,EAAWC,GACpD,OAAO,IAAIG,KAAK,CAACjB,EAAcgB,IAAS,CAAEE,KAAML,IAEpD,iDAQO,SACLH,GAMA,OAAOC,MACLC,EACAC,EAAkC,aAClCC,KAEA,MAAMC,EAAYH,IAClB,aAAaF,EAAUK,EAAWF,EAAWC,GAEjD,mDAxFO,SACLK,GAEA,OAAOR,MACLC,EACAC,EAAkC,aAClCO,KAEA,MAAML,EAAYH,KACZS,MAAEA,EAAAC,OAAOA,GAAWP,EAGpBQ,EAASJ,EAAaE,EAAOC,GAKnC,IAAIpB,EACJ,OALYqB,EAAOC,WAAW,MAC1BC,aAAaV,EAAW,EAAG,GAIvBF,GACN,IAAK,aACHX,EAASqB,EAAOG,SAAS,cACzB,MACF,IAAK,YACHxB,EAASqB,EAAOG,SAAS,aACzB,MACF,IAAK,aACHxB,EAASqB,EAAOG,SAAS,cACzB,MACF,QACE,MAAM,IAAIC,MAAM,2BAA2Bd,KAG/C,OAAOX,EAEX,+CAlGO,SACL0B,GAEA,OAAOjB,MACLC,EACAC,EAAkC,aAClCC,KAEA,MAAMC,EAAYH,KACZS,MAAEA,EAAAC,OAAOA,EAAAO,KAAQA,GAASd,EAIhC,IASIb,EATA4B,EAAgBF,EAAMG,OAAOC,KAAKH,GAAO,CAC3CI,IAAK,CACHZ,QACAC,SACAY,SAAU,KAMd,OAAQrB,GACN,IAAK,aACHX,QAAe4B,EACZK,KAAK,CACJC,QAAStB,IAEVY,WACH,MACF,IAAK,YACHxB,QAAe4B,EAAcO,MAAMX,WACnC,MACF,IAAK,aAEHxB,QAAe4B,EACZQ,QAAQ,CAAEC,WAAY,CAAEC,EAAG,IAAKC,EAAG,IAAKC,EAAG,OAC3CC,KAAK,CACJP,QAAStB,IAEVY,WACH,MACF,QACE,MAAM,IAAIC,MAAM,2BAA2Bd,KAG/C,OAAOX,EAEX"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../src/lib/utils.ts","../../../src/lib/converters/node.ts"],"sourcesContent":["// Returns a plain ArrayBuffer (no SharedArrayBuffer), sliced to the view’s region.\nexport function toArrayBuffer(view: ArrayBufferView): ArrayBuffer {\n const { buffer, byteOffset, byteLength } = view;\n if (buffer instanceof ArrayBuffer) {\n return buffer.slice(byteOffset, byteOffset + byteLength);\n }\n // SharedArrayBuffer (or unknown) → copy once\n const ab = new ArrayBuffer(byteLength);\n new Uint8Array(ab).set(new Uint8Array(buffer as ArrayBufferLike, byteOffset, byteLength));\n return ab;\n}\n\n// Ensures ImageData gets a Uint8ClampedArray backed by a real ArrayBuffer.\nexport function toClampedRGBA(\n data: ArrayBufferView | Uint8Array | Uint8ClampedArray,\n): Uint8ClampedArray {\n if (data instanceof Uint8ClampedArray && data.buffer instanceof ArrayBuffer) return data;\n return new Uint8ClampedArray(toArrayBuffer(data as ArrayBufferView));\n}\n","import type { PdfImage, ImageConversionTypes } from '@embedpdf/models';\nimport { toArrayBuffer } from '../utils';\nimport type { ImageDataConverter, LazyImageData } from './types';\n\n// ============================================================================\n// Node.js Converters\n// ============================================================================\n\n/**\n * Node.js implementation using Sharp\n * This requires the 'sharp' package to be installed\n *\n * @example\n * ```typescript\n * import sharp from 'sharp';\n * import { createNodeImageDataToBufferConverter } from '@embedpdf/engines';\n *\n * const imageDataConverter = createNodeImageDataToBufferConverter(sharp);\n * const engine = new PdfiumEngine(pdfiumModule, { logger, imageDataConverter });\n * ```\n */\nexport function createNodeImageDataToBufferConverter(\n sharp: any, // Using 'any' to avoid requiring sharp as a dependency\n): ImageDataConverter<Buffer> {\n return async (\n getImageData: LazyImageData,\n imageType: ImageConversionTypes = 'image/webp',\n imageQuality?: number,\n ): Promise<Buffer> => {\n const imageData = getImageData();\n const { width, height, data } = imageData;\n\n // Convert ImageData to Sharp format\n // ImageData uses RGBA format, Sharp expects the same\n let sharpInstance = sharp(Buffer.from(data), {\n raw: {\n width,\n height,\n channels: 4, // RGBA\n },\n });\n\n // Apply the appropriate format conversion based on imageType\n let buffer: Buffer;\n switch (imageType) {\n case 'image/webp':\n buffer = await sharpInstance\n .webp({\n quality: imageQuality,\n })\n .toBuffer();\n break;\n case 'image/png':\n buffer = await sharpInstance.png().toBuffer();\n break;\n case 'image/jpeg':\n // JPEG doesn't support transparency, so we need to composite onto a white background\n buffer = await sharpInstance\n .flatten({ background: { r: 255, g: 255, b: 255 } }) // Remove alpha channel with white background\n .jpeg({\n quality: imageQuality,\n })\n .toBuffer();\n break;\n default:\n throw new Error(`Unsupported image type: ${imageType}`);\n }\n\n return buffer;\n };\n}\n\n/**\n * Alternative Node.js implementation using canvas (node-canvas)\n * This requires the 'canvas' package to be installed\n *\n * @example\n * ```typescript\n * import { createCanvas } from 'canvas';\n * import { createNodeCanvasImageDataToBlobConverter } from '@embedpdf/engines';\n *\n * const imageDataConverter = createNodeCanvasImageDataToBlobConverter(createCanvas);\n * const engine = new PdfiumEngine(pdfiumModule, { logger, imageDataConverter });\n * ```\n */\nexport function createNodeCanvasImageDataToBlobConverter(\n createCanvas: any, // Using 'any' to avoid requiring canvas as a dependency\n): ImageDataConverter<Buffer> {\n return async (\n getImageData: LazyImageData,\n imageType: ImageConversionTypes = 'image/webp',\n _imageQuality?: number,\n ): Promise<Buffer> => {\n const imageData = getImageData();\n const { width, height } = imageData;\n\n // Create a canvas and put the image data\n const canvas = createCanvas(width, height);\n const ctx = canvas.getContext('2d');\n ctx.putImageData(imageData, 0, 0);\n\n // Convert to buffer and create blob based on the requested type\n let buffer: Buffer;\n switch (imageType) {\n case 'image/webp':\n buffer = canvas.toBuffer('image/webp');\n break;\n case 'image/png':\n buffer = canvas.toBuffer('image/png');\n break;\n case 'image/jpeg':\n buffer = canvas.toBuffer('image/jpeg');\n break;\n default:\n throw new Error(`Unsupported image type: ${imageType}`);\n }\n\n return buffer;\n };\n}\n\n/**\n * Generic Node.js implementation that works with any image processing library\n * that can handle raw RGBA data\n *\n * @example\n * ```typescript\n * const converter = createCustomImageDataToBlobConverter(async (imageData) => {\n * // Your custom image processing logic here\n * // Return a Buffer that will be wrapped in a Blob\n * return processImageWithYourLibrary(imageData);\n * });\n * ```\n */\nexport function createCustomImageDataToBlobConverter(\n processor: (\n imageData: PdfImage,\n imageType?: ImageConversionTypes,\n imageQuality?: number,\n ) => Promise<Buffer>,\n): ImageDataConverter {\n return async (\n getImageData: LazyImageData,\n imageType: ImageConversionTypes = 'image/webp',\n imageQuality?: number,\n ) => {\n const imageData = getImageData();\n const bytes = await processor(imageData, imageType, imageQuality);\n return new Blob([toArrayBuffer(bytes)], { type: imageType });\n };\n}\n\n/**\n * Create a custom converter that returns a Buffer\n * @param processor - function to process the image data\n * @param imageType - image type\n * @returns ImageDataToBlobConverter<Buffer>\n */\nexport function createCustomImageDataToBufferConverter(\n processor: (\n imageData: PdfImage,\n imageType: ImageConversionTypes,\n imageQuality?: number,\n ) => Promise<Buffer>,\n): ImageDataConverter<Buffer> {\n return async (\n getImageData: LazyImageData,\n imageType: ImageConversionTypes = 'image/webp',\n imageQuality?: number,\n ): Promise<Buffer> => {\n const imageData = getImageData();\n return await processor(imageData, imageType, imageQuality);\n };\n}\n"],"names":["toArrayBuffer","view","buffer","byteOffset","byteLength","ArrayBuffer","slice","ab","Uint8Array","set","processor","async","getImageData","imageType","imageQuality","imageData","bytes","Blob","type","createCanvas","_imageQuality","width","height","canvas","getContext","putImageData","toBuffer","Error","sharp","data","sharpInstance","Buffer","from","raw","channels","webp","quality","png","flatten","background","r","g","b","jpeg"],"mappings":"8HACO,SAASA,EAAcC,GAC5B,MAAMC,OAAEA,EAAAC,WAAQA,EAAAC,WAAYA,GAAeH,EAC3C,GAAIC,aAAkBG,YACpB,OAAOH,EAAOI,MAAMH,EAAYA,EAAaC,GAG/C,MAAMG,EAAK,IAAIF,YAAYD,GAE3B,OADA,IAAII,WAAWD,GAAIE,IAAI,IAAID,WAAWN,EAA2BC,EAAYC,IACtEG,CACT,kTC4HO,SACLG,GAMA,OAAOC,MACLC,EACAC,EAAkC,aAClCC,KAEA,MAAMC,EAAYH,IACZI,QAAcN,EAAUK,EAAWF,EAAWC,GACpD,OAAO,IAAIG,KAAK,CAACjB,EAAcgB,IAAS,CAAEE,KAAML,IAEpD,iDAQO,SACLH,GAMA,OAAOC,MACLC,EACAC,EAAkC,aAClCC,KAEA,MAAMC,EAAYH,IAClB,aAAaF,EAAUK,EAAWF,EAAWC,GAEjD,mDAxFO,SACLK,GAEA,OAAOR,MACLC,EACAC,EAAkC,aAClCO,KAEA,MAAML,EAAYH,KACZS,MAAEA,EAAAC,OAAOA,GAAWP,EAGpBQ,EAASJ,EAAaE,EAAOC,GAKnC,IAAIpB,EACJ,OALYqB,EAAOC,WAAW,MAC1BC,aAAaV,EAAW,EAAG,GAIvBF,GACN,IAAK,aACHX,EAASqB,EAAOG,SAAS,cACzB,MACF,IAAK,YACHxB,EAASqB,EAAOG,SAAS,aACzB,MACF,IAAK,aACHxB,EAASqB,EAAOG,SAAS,cACzB,MACF,QACE,MAAM,IAAIC,MAAM,2BAA2Bd,KAG/C,OAAOX,EAEX,+CAlGO,SACL0B,GAEA,OAAOjB,MACLC,EACAC,EAAkC,aAClCC,KAEA,MAAMC,EAAYH,KACZS,MAAEA,EAAAC,OAAOA,EAAAO,KAAQA,GAASd,EAIhC,IASIb,EATA4B,EAAgBF,EAAMG,OAAOC,KAAKH,GAAO,CAC3CI,IAAK,CACHZ,QACAC,SACAY,SAAU,KAMd,OAAQrB,GACN,IAAK,aACHX,QAAe4B,EACZK,KAAK,CACJC,QAAStB,IAEVY,WACH,MACF,IAAK,YACHxB,QAAe4B,EAAcO,MAAMX,WACnC,MACF,IAAK,aAEHxB,QAAe4B,EACZQ,QAAQ,CAAEC,WAAY,CAAEC,EAAG,IAAKC,EAAG,IAAKC,EAAG,OAC3CC,KAAK,CACJP,QAAStB,IAEVY,WACH,MACF,QACE,MAAM,IAAIC,MAAM,2BAA2Bd,KAG/C,OAAOX,EAEX"}
@@ -1,4 +1,4 @@
1
- import { O, b, a, c } from "../../browser-Cm3DA8l_.js";
1
+ import { I, b, a, c } from "../../browser-awZxztMA.js";
2
2
  function toArrayBuffer(view) {
3
3
  const { buffer, byteOffset, byteLength } = view;
4
4
  if (buffer instanceof ArrayBuffer) {
@@ -79,7 +79,7 @@ function createCustomImageDataToBufferConverter(processor) {
79
79
  };
80
80
  }
81
81
  export {
82
- O as OffscreenCanvasError,
82
+ I as ImageConverterError,
83
83
  b as browserImageDataToBlobConverter,
84
84
  createCustomImageDataToBlobConverter,
85
85
  createCustomImageDataToBufferConverter,
@@ -37,7 +37,6 @@ export declare class PdfEngine<T = Blob> implements IPdfEngine<T> {
37
37
  */
38
38
  private chunkArray;
39
39
  isSupport(feature: PdfEngineFeature): PdfTask<PdfEngineOperation[]>;
40
- initialize(): PdfTask<boolean>;
41
40
  destroy(): PdfTask<boolean>;
42
41
  openDocumentUrl(file: PdfFileUrl, options?: PdfOpenDocumentUrlOptions): PdfTask<PdfDocumentObject>;
43
42
  openDocumentBuffer(file: PdfFile, options?: PdfOpenDocumentBufferOptions): PdfTask<PdfDocumentObject>;
@@ -47,7 +47,6 @@ export declare class RemoteExecutor implements IPdfiumExecutor {
47
47
  * Cleanup and terminate worker
48
48
  */
49
49
  destroy(): void;
50
- initialize(): void;
51
50
  openDocumentBuffer(file: PdfFile, options?: PdfOpenDocumentBufferOptions): PdfTask<PdfDocumentObject>;
52
51
  getMetadata(doc: PdfDocumentObject): PdfTask<PdfMetadataObject>;
53
52
  setMetadata(doc: PdfDocumentObject, metadata: Partial<PdfMetadataObject>): PdfTask<boolean>;
@@ -63,18 +63,11 @@ export declare class PdfiumNative implements IPdfiumExecutor {
63
63
  */
64
64
  private logger;
65
65
  /**
66
- * Create an instance of PdfiumEngine
66
+ * Create an instance of PdfiumNative and initialize PDFium
67
67
  * @param wasmModule - pdfium wasm module
68
- * @param logger - logger instance
69
- * @param imageDataToBlobConverter - function to convert ImageData to Blob
68
+ * @param options - configuration options
70
69
  */
71
70
  constructor(pdfiumModule: WrappedPdfiumModule, options?: PdfiumEngineOptions);
72
- /**
73
- * {@inheritDoc @embedpdf/models!PdfEngine.initialize}
74
- *
75
- * @public
76
- */
77
- initialize(): Task<boolean, PdfErrorReason, unknown>;
78
71
  /**
79
72
  * {@inheritDoc @embedpdf/models!PdfEngine.destroy}
80
73
  *
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../../direct-engine-CZAhOupl.cjs"),r=require("../../browser-B5Y-F6il.cjs"),t=require("./web/worker-engine.cjs");exports.BitmapFormat=e.BitmapFormat,exports.PdfiumErrorCode=e.PdfiumErrorCode,exports.PdfiumNative=e.PdfiumNative,exports.RenderFlag=e.RenderFlag,exports.computeFormDrawParams=e.computeFormDrawParams,exports.createPdfiumDirectEngine=e.createPdfiumEngine,exports.isValidCustomKey=e.isValidCustomKey,exports.readArrayBuffer=e.readArrayBuffer,exports.readString=e.readString,exports.OffscreenCanvasError=r.OffscreenCanvasError,exports.browserImageDataToBlobConverter=r.browserImageDataToBlobConverter,exports.createHybridImageConverter=r.createHybridImageConverter,exports.createWorkerPoolImageConverter=r.createWorkerPoolImageConverter,exports.createPdfiumWorkerEngine=t.createPdfiumEngine,exports.DEFAULT_PDFIUM_WASM_URL="https://cdn.jsdelivr.net/npm/@embedpdf/pdfium@2.0.0-next.3/dist/pdfium.wasm";
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../../direct-engine-JeNRkc7w.cjs"),r=require("../../browser-C6QEa8uk.cjs"),t=require("../../pdf-engine-C3JeKij1.cjs"),o=require("./web/worker-engine.cjs");exports.BitmapFormat=e.BitmapFormat,exports.PdfiumErrorCode=e.PdfiumErrorCode,exports.PdfiumNative=e.PdfiumNative,exports.RenderFlag=e.RenderFlag,exports.computeFormDrawParams=e.computeFormDrawParams,exports.createPdfiumDirectEngine=e.createPdfiumEngine,exports.isValidCustomKey=e.isValidCustomKey,exports.readArrayBuffer=e.readArrayBuffer,exports.readString=e.readString,exports.ImageConverterError=r.ImageConverterError,exports.browserImageDataToBlobConverter=r.browserImageDataToBlobConverter,exports.createHybridImageConverter=r.createHybridImageConverter,exports.createWorkerPoolImageConverter=r.createWorkerPoolImageConverter,exports.PdfEngine=t.PdfEngine,exports.createPdfiumWorkerEngine=o.createPdfiumEngine,exports.DEFAULT_PDFIUM_WASM_URL="https://cdn.jsdelivr.net/npm/@embedpdf/pdfium@2.0.1/dist/pdfium.wasm";
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../src/lib/pdfium/index.ts"],"sourcesContent":["export * from './engine';\nexport * from './helper';\nexport * from '../converters/types';\nexport * from '../converters/browser';\n\n// Export web factory functions (avoid ambiguous exports)\nexport { createPdfiumEngine as createPdfiumDirectEngine } from './web/direct-engine';\nexport { createPdfiumEngine as createPdfiumWorkerEngine } from './web/worker-engine';\nexport type { CreatePdfiumEngineOptions } from './web/direct-engine';\n\nexport const DEFAULT_PDFIUM_WASM_URL: string =\n 'https://cdn.jsdelivr.net/npm/@embedpdf/pdfium@__PDFIUM_VERSION__/dist/pdfium.wasm';\n"],"names":[],"mappings":"i6BAWE"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../src/lib/pdfium/index.ts"],"sourcesContent":["export * from './engine';\nexport * from './helper';\nexport * from '../converters/types';\nexport * from '../converters/browser';\nexport * from '../orchestrator/pdf-engine';\n\n// Export web factory functions (avoid ambiguous exports)\nexport { createPdfiumEngine as createPdfiumDirectEngine } from './web/direct-engine';\nexport { createPdfiumEngine as createPdfiumWorkerEngine } from './web/worker-engine';\nexport type { CreatePdfiumEngineOptions } from './web/direct-engine';\n\nexport const DEFAULT_PDFIUM_WASM_URL: string =\n 'https://cdn.jsdelivr.net/npm/@embedpdf/pdfium@__PDFIUM_VERSION__/dist/pdfium.wasm';\n"],"names":[],"mappings":"w+BAYE"}
@@ -2,6 +2,7 @@ export * from './engine';
2
2
  export * from './helper';
3
3
  export * from '../converters/types';
4
4
  export * from '../converters/browser';
5
+ export * from '../orchestrator/pdf-engine';
5
6
  export { createPdfiumEngine as createPdfiumDirectEngine } from './web/direct-engine';
6
7
  export { createPdfiumEngine as createPdfiumWorkerEngine } from './web/worker-engine';
7
8
  export type { CreatePdfiumEngineOptions } from './web/direct-engine';
@@ -1,11 +1,13 @@
1
- import { B, P, a, R, d, c, i, b, r } from "../../direct-engine-BZRK27cv.js";
2
- import { O, b as b2, a as a2, c as c2 } from "../../browser-Cm3DA8l_.js";
1
+ import { B, P, a, R, d, c, i, b, r } from "../../direct-engine-DuLFAbiv.js";
2
+ import { I, b as b2, a as a2, c as c2 } from "../../browser-awZxztMA.js";
3
+ import { P as P2 } from "../../pdf-engine-BVNF_Yo9.js";
3
4
  import { createPdfiumEngine } from "./web/worker-engine.js";
4
- const DEFAULT_PDFIUM_WASM_URL = "https://cdn.jsdelivr.net/npm/@embedpdf/pdfium@2.0.0-next.3/dist/pdfium.wasm";
5
+ const DEFAULT_PDFIUM_WASM_URL = "https://cdn.jsdelivr.net/npm/@embedpdf/pdfium@2.0.1/dist/pdfium.wasm";
5
6
  export {
6
7
  B as BitmapFormat,
7
8
  DEFAULT_PDFIUM_WASM_URL,
8
- O as OffscreenCanvasError,
9
+ I as ImageConverterError,
10
+ P2 as PdfEngine,
9
11
  P as PdfiumErrorCode,
10
12
  a as PdfiumNative,
11
13
  R as RenderFlag,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/lib/pdfium/index.ts"],"sourcesContent":["export * from './engine';\nexport * from './helper';\nexport * from '../converters/types';\nexport * from '../converters/browser';\n\n// Export web factory functions (avoid ambiguous exports)\nexport { createPdfiumEngine as createPdfiumDirectEngine } from './web/direct-engine';\nexport { createPdfiumEngine as createPdfiumWorkerEngine } from './web/worker-engine';\nexport type { CreatePdfiumEngineOptions } from './web/direct-engine';\n\nexport const DEFAULT_PDFIUM_WASM_URL: string =\n 'https://cdn.jsdelivr.net/npm/@embedpdf/pdfium@__PDFIUM_VERSION__/dist/pdfium.wasm';\n"],"names":[],"mappings":";;;AAUO,MAAM,0BACX;"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/lib/pdfium/index.ts"],"sourcesContent":["export * from './engine';\nexport * from './helper';\nexport * from '../converters/types';\nexport * from '../converters/browser';\nexport * from '../orchestrator/pdf-engine';\n\n// Export web factory functions (avoid ambiguous exports)\nexport { createPdfiumEngine as createPdfiumDirectEngine } from './web/direct-engine';\nexport { createPdfiumEngine as createPdfiumWorkerEngine } from './web/worker-engine';\nexport type { CreatePdfiumEngineOptions } from './web/direct-engine';\n\nexport const DEFAULT_PDFIUM_WASM_URL: string =\n 'https://cdn.jsdelivr.net/npm/@embedpdf/pdfium@__PDFIUM_VERSION__/dist/pdfium.wasm';\n"],"names":[],"mappings":";;;;AAWO,MAAM,0BACX;"}