@embedpdf/engines 2.4.0 → 2.4.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 (36) hide show
  1. package/dist/{browser-C6QEa8uk.cjs → browser-13mzox-R.cjs} +2 -2
  2. package/dist/{browser-C6QEa8uk.cjs.map → browser-13mzox-R.cjs.map} +1 -1
  3. package/dist/{browser-awZxztMA.js → browser-qfUHZxQ6.js} +7 -3
  4. package/dist/{browser-awZxztMA.js.map → browser-qfUHZxQ6.js.map} +1 -1
  5. package/dist/{direct-engine-6BoAmGsC.js → direct-engine-5RWKENek.js} +3 -3
  6. package/dist/{direct-engine-6BoAmGsC.js.map → direct-engine-5RWKENek.js.map} +1 -1
  7. package/dist/{direct-engine-Byh1BweU.cjs → direct-engine-DnHo6z8a.cjs} +2 -2
  8. package/dist/{direct-engine-Byh1BweU.cjs.map → direct-engine-DnHo6z8a.cjs.map} +1 -1
  9. package/dist/index.cjs +1 -1
  10. package/dist/index.js +3 -3
  11. package/dist/lib/converters/browser.d.ts +2 -2
  12. package/dist/lib/converters/index.cjs +1 -1
  13. package/dist/lib/converters/index.js +1 -1
  14. package/dist/lib/converters/types.d.ts +12 -2
  15. package/dist/lib/pdfium/index.cjs +1 -1
  16. package/dist/lib/pdfium/index.js +4 -4
  17. package/dist/lib/pdfium/web/direct-engine.cjs +1 -1
  18. package/dist/lib/pdfium/web/direct-engine.js +3 -3
  19. package/dist/lib/pdfium/web/worker-engine.cjs +1 -1
  20. package/dist/lib/pdfium/web/worker-engine.js +2 -2
  21. package/dist/pdf-engine-B4lt8-5f.cjs +2 -0
  22. package/dist/pdf-engine-B4lt8-5f.cjs.map +1 -0
  23. package/dist/{pdf-engine-D_Dua_6w.js → pdf-engine-CVXuu1xQ.js} +3 -1
  24. package/dist/pdf-engine-CVXuu1xQ.js.map +1 -0
  25. package/dist/preact/index.cjs +1 -1
  26. package/dist/preact/index.js +1 -1
  27. package/dist/react/index.cjs +1 -1
  28. package/dist/react/index.js +1 -1
  29. package/dist/svelte/index.cjs +1 -1
  30. package/dist/svelte/index.js +1 -1
  31. package/dist/vue/index.cjs +1 -1
  32. package/dist/vue/index.js +1 -1
  33. package/package.json +6 -6
  34. package/dist/pdf-engine-BXctylEz.cjs +0 -2
  35. package/dist/pdf-engine-BXctylEz.cjs.map +0 -1
  36. package/dist/pdf-engine-D_Dua_6w.js.map +0 -1
@@ -1,2 +1,2 @@
1
- "use strict";class e extends Error{constructor(e){super(e),this.name="ImageConverterError"}}const t=(t,r="image/webp",n)=>{if("undefined"==typeof document)return Promise.reject(new e("document is not available. This converter requires a browser environment."));const a=t(),o=new ImageData(a.data,a.width,a.height);return new Promise((t,a)=>{const i=document.createElement("canvas");i.width=o.width,i.height=o.height,i.getContext("2d").putImageData(o,0,0),i.toBlob(r=>{r?t(r):a(new e("Canvas toBlob returned null"))},r,n)})};exports.ImageConverterError=e,exports.browserImageDataToBlobConverter=t,exports.createHybridImageConverter=function(e){return async(r,n="image/webp",a)=>{try{const t=r(),o=new Uint8ClampedArray(t.data);return await e.encode({data:o,width:t.width,height:t.height},n,a)}catch(o){return console.warn("Worker encoding failed, falling back to main-thread Canvas:",o),t(r,n,a)}}},exports.createWorkerPoolImageConverter=function(e){return(t,r="image/webp",n)=>{const a=t(),o=new Uint8ClampedArray(a.data);return e.encode({data:o,width:a.width,height:a.height},r,n)}};
2
- //# sourceMappingURL=browser-C6QEa8uk.cjs.map
1
+ "use strict";class e extends Error{constructor(e){super(e),this.name="ImageConverterError"}}const t=(t,r="image/webp",n)=>{if("undefined"==typeof document)return Promise.reject(new e("document is not available. This converter requires a browser environment."));const a=t(),o=new ImageData(a.data,a.width,a.height);return new Promise((t,a)=>{const i=document.createElement("canvas");i.width=o.width,i.height=o.height,i.getContext("2d").putImageData(o,0,0),i.toBlob(r=>{r?t(r):a(new e("Canvas toBlob returned null"))},r,n)})};exports.ImageConverterError=e,exports.browserImageDataToBlobConverter=t,exports.createHybridImageConverter=function(e){const r=async(r,n="image/webp",a)=>{try{const t=r(),o=new Uint8ClampedArray(t.data);return await e.encode({data:o,width:t.width,height:t.height},n,a)}catch(o){return console.warn("Worker encoding failed, falling back to main-thread Canvas:",o),t(r,n,a)}};return r.destroy=()=>e.destroy(),r},exports.createWorkerPoolImageConverter=function(e){const t=(t,r="image/webp",n)=>{const a=t(),o=new Uint8ClampedArray(a.data);return e.encode({data:o,width:a.width,height:a.height},r,n)};return t.destroy=()=>e.destroy(),t};
2
+ //# sourceMappingURL=browser-13mzox-R.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser-C6QEa8uk.cjs","sources":["../src/lib/converters/browser.ts"],"sourcesContent":["import type { ImageConversionTypes } from '@embedpdf/models';\nimport type { ImageDataConverter, LazyImageData } from './types';\nimport { ImageEncoderWorkerPool } from '../image-encoder';\n\n// ============================================================================\n// Error Classes\n// ============================================================================\n\nexport class ImageConverterError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'ImageConverterError';\n }\n}\n\n// ============================================================================\n// Browser Converters\n// ============================================================================\n\n/**\n * Main-thread Canvas-based image converter\n * Simple and works everywhere, but blocks the main thread during encoding\n *\n * Use this as a fallback when worker-based encoding isn't available\n */\nexport const browserImageDataToBlobConverter: ImageDataConverter<Blob> = (\n getImageData: LazyImageData,\n imageType: ImageConversionTypes = 'image/webp',\n quality?: number,\n): Promise<Blob> => {\n if (typeof document === 'undefined') {\n return Promise.reject(\n new ImageConverterError(\n 'document is not available. This converter requires a browser environment.',\n ),\n );\n }\n\n const pdfImage = getImageData();\n const imageData = new ImageData(pdfImage.data, pdfImage.width, pdfImage.height);\n\n return new Promise((resolve, reject) => {\n const canvas = document.createElement('canvas');\n canvas.width = imageData.width;\n canvas.height = imageData.height;\n canvas.getContext('2d')!.putImageData(imageData, 0, 0);\n\n canvas.toBlob(\n (blob) => {\n if (blob) {\n resolve(blob);\n } else {\n reject(new ImageConverterError('Canvas toBlob returned null'));\n }\n },\n imageType,\n quality,\n );\n });\n};\n\n/**\n * Worker pool image converter using OffscreenCanvas in dedicated workers\n * Non-blocking - encoding happens off the main thread\n *\n * This is the preferred approach for performance\n *\n * @param workerPool - Instance of ImageEncoderWorkerPool\n * @returns ImageDataConverter function\n */\nexport function createWorkerPoolImageConverter(\n workerPool: ImageEncoderWorkerPool,\n): ImageDataConverter<Blob> {\n return (\n getImageData: LazyImageData,\n imageType: ImageConversionTypes = 'image/webp',\n quality?: number,\n ): Promise<Blob> => {\n const pdfImage = getImageData();\n\n // Copy the data since we'll transfer it to another worker\n const dataCopy = new Uint8ClampedArray(pdfImage.data);\n\n return workerPool.encode(\n {\n data: dataCopy,\n width: pdfImage.width,\n height: pdfImage.height,\n },\n imageType,\n quality,\n );\n };\n}\n\n/**\n * Hybrid converter: Worker pool (OffscreenCanvas) → Main thread Canvas fallback\n *\n * Best of both worlds:\n * - Primary: Non-blocking worker-based encoding with OffscreenCanvas\n * - Fallback: Main-thread Canvas for older browsers without OffscreenCanvas in workers\n *\n * @param workerPool - Instance of ImageEncoderWorkerPool\n * @returns ImageDataConverter function\n */\nexport function createHybridImageConverter(\n workerPool: ImageEncoderWorkerPool,\n): ImageDataConverter<Blob> {\n return async (\n getImageData: LazyImageData,\n imageType: ImageConversionTypes = 'image/webp',\n quality?: number,\n ): Promise<Blob> => {\n try {\n // Try worker pool encoding first (OffscreenCanvas in worker)\n const pdfImage = getImageData();\n const dataCopy = new Uint8ClampedArray(pdfImage.data);\n\n return await workerPool.encode(\n {\n data: dataCopy,\n width: pdfImage.width,\n height: pdfImage.height,\n },\n imageType,\n quality,\n );\n } catch (error) {\n // Fallback to main-thread Canvas\n console.warn('Worker encoding failed, falling back to main-thread Canvas:', error);\n return browserImageDataToBlobConverter(getImageData, imageType, quality);\n }\n };\n}\n"],"names":["ImageConverterError","Error","constructor","message","super","this","name","browserImageDataToBlobConverter","getImageData","imageType","quality","document","Promise","reject","pdfImage","imageData","ImageData","data","width","height","resolve","canvas","createElement","getContext","putImageData","toBlob","blob","workerPool","async","dataCopy","Uint8ClampedArray","encode","error","console","warn"],"mappings":"aAQO,MAAMA,UAA4BC,MACvC,WAAAC,CAAYC,GACVC,MAAMD,GACNE,KAAKC,KAAO,qBACd,EAaK,MAAMC,EAA4D,CACvEC,EACAC,EAAkC,aAClCC,KAEA,GAAwB,oBAAbC,SACT,OAAOC,QAAQC,OACb,IAAIb,EACF,8EAKN,MAAMc,EAAWN,IACXO,EAAY,IAAIC,UAAUF,EAASG,KAAMH,EAASI,MAAOJ,EAASK,QAExE,OAAO,IAAIP,QAAQ,CAACQ,EAASP,KAC3B,MAAMQ,EAASV,SAASW,cAAc,UACtCD,EAAOH,MAAQH,EAAUG,MACzBG,EAAOF,OAASJ,EAAUI,OAC1BE,EAAOE,WAAW,MAAOC,aAAaT,EAAW,EAAG,GAEpDM,EAAOI,OACJC,IACKA,EACFN,EAAQM,GAERb,EAAO,IAAIb,EAAoB,iCAGnCS,EACAC,iHAiDC,SACLiB,GAEA,OAAOC,MACLpB,EACAC,EAAkC,aAClCC,KAEA,IAEE,MAAMI,EAAWN,IACXqB,EAAW,IAAIC,kBAAkBhB,EAASG,MAEhD,aAAaU,EAAWI,OACtB,CACEd,KAAMY,EACNX,MAAOJ,EAASI,MAChBC,OAAQL,EAASK,QAEnBV,EACAC,EAEJ,OAASsB,GAGP,OADAC,QAAQC,KAAK,8DAA+DF,GACrEzB,EAAgCC,EAAcC,EAAWC,EAClE,EAEJ,yCA/DO,SACLiB,GAEA,MAAO,CACLnB,EACAC,EAAkC,aAClCC,KAEA,MAAMI,EAAWN,IAGXqB,EAAW,IAAIC,kBAAkBhB,EAASG,MAEhD,OAAOU,EAAWI,OAChB,CACEd,KAAMY,EACNX,MAAOJ,EAASI,MAChBC,OAAQL,EAASK,QAEnBV,EACAC,GAGN"}
1
+ {"version":3,"file":"browser-13mzox-R.cjs","sources":["../src/lib/converters/browser.ts"],"sourcesContent":["import type { ImageConversionTypes } from '@embedpdf/models';\nimport type { ImageDataConverter, LazyImageData } from './types';\nimport { ImageEncoderWorkerPool } from '../image-encoder';\n\n// ============================================================================\n// Error Classes\n// ============================================================================\n\nexport class ImageConverterError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'ImageConverterError';\n }\n}\n\n// ============================================================================\n// Browser Converters\n// ============================================================================\n\n/**\n * Main-thread Canvas-based image converter\n * Simple and works everywhere, but blocks the main thread during encoding\n *\n * Use this as a fallback when worker-based encoding isn't available\n */\nexport const browserImageDataToBlobConverter: ImageDataConverter<Blob> = (\n getImageData: LazyImageData,\n imageType: ImageConversionTypes = 'image/webp',\n quality?: number,\n): Promise<Blob> => {\n if (typeof document === 'undefined') {\n return Promise.reject(\n new ImageConverterError(\n 'document is not available. This converter requires a browser environment.',\n ),\n );\n }\n\n const pdfImage = getImageData();\n const imageData = new ImageData(pdfImage.data, pdfImage.width, pdfImage.height);\n\n return new Promise((resolve, reject) => {\n const canvas = document.createElement('canvas');\n canvas.width = imageData.width;\n canvas.height = imageData.height;\n canvas.getContext('2d')!.putImageData(imageData, 0, 0);\n\n canvas.toBlob(\n (blob) => {\n if (blob) {\n resolve(blob);\n } else {\n reject(new ImageConverterError('Canvas toBlob returned null'));\n }\n },\n imageType,\n quality,\n );\n });\n};\n\n/**\n * Worker pool image converter using OffscreenCanvas in dedicated workers\n * Non-blocking - encoding happens off the main thread\n *\n * This is the preferred approach for performance\n *\n * @param workerPool - Instance of ImageEncoderWorkerPool\n * @returns ImageDataConverter function with destroy() for cleanup\n */\nexport function createWorkerPoolImageConverter(\n workerPool: ImageEncoderWorkerPool,\n): ImageDataConverter<Blob> {\n const converter: ImageDataConverter<Blob> = (\n getImageData: LazyImageData,\n imageType: ImageConversionTypes = 'image/webp',\n quality?: number,\n ): Promise<Blob> => {\n const pdfImage = getImageData();\n\n // Copy the data since we'll transfer it to another worker\n const dataCopy = new Uint8ClampedArray(pdfImage.data);\n\n return workerPool.encode(\n {\n data: dataCopy,\n width: pdfImage.width,\n height: pdfImage.height,\n },\n imageType,\n quality,\n );\n };\n\n // Attach destroy method to clean up worker pool\n converter.destroy = () => workerPool.destroy();\n\n return converter;\n}\n\n/**\n * Hybrid converter: Worker pool (OffscreenCanvas) → Main thread Canvas fallback\n *\n * Best of both worlds:\n * - Primary: Non-blocking worker-based encoding with OffscreenCanvas\n * - Fallback: Main-thread Canvas for older browsers without OffscreenCanvas in workers\n *\n * @param workerPool - Instance of ImageEncoderWorkerPool\n * @returns ImageDataConverter function with destroy() for cleanup\n */\nexport function createHybridImageConverter(\n workerPool: ImageEncoderWorkerPool,\n): ImageDataConverter<Blob> {\n const converter: ImageDataConverter<Blob> = async (\n getImageData: LazyImageData,\n imageType: ImageConversionTypes = 'image/webp',\n quality?: number,\n ): Promise<Blob> => {\n try {\n // Try worker pool encoding first (OffscreenCanvas in worker)\n const pdfImage = getImageData();\n const dataCopy = new Uint8ClampedArray(pdfImage.data);\n\n return await workerPool.encode(\n {\n data: dataCopy,\n width: pdfImage.width,\n height: pdfImage.height,\n },\n imageType,\n quality,\n );\n } catch (error) {\n // Fallback to main-thread Canvas\n console.warn('Worker encoding failed, falling back to main-thread Canvas:', error);\n return browserImageDataToBlobConverter(getImageData, imageType, quality);\n }\n };\n\n // Attach destroy method to clean up worker pool\n converter.destroy = () => workerPool.destroy();\n\n return converter;\n}\n"],"names":["ImageConverterError","Error","constructor","message","super","this","name","browserImageDataToBlobConverter","getImageData","imageType","quality","document","Promise","reject","pdfImage","imageData","ImageData","data","width","height","resolve","canvas","createElement","getContext","putImageData","toBlob","blob","workerPool","converter","async","dataCopy","Uint8ClampedArray","encode","error","console","warn","destroy"],"mappings":"aAQO,MAAMA,UAA4BC,MACvC,WAAAC,CAAYC,GACVC,MAAMD,GACNE,KAAKC,KAAO,qBACd,EAaK,MAAMC,EAA4D,CACvEC,EACAC,EAAkC,aAClCC,KAEA,GAAwB,oBAAbC,SACT,OAAOC,QAAQC,OACb,IAAIb,EACF,8EAKN,MAAMc,EAAWN,IACXO,EAAY,IAAIC,UAAUF,EAASG,KAAMH,EAASI,MAAOJ,EAASK,QAExE,OAAO,IAAIP,QAAQ,CAACQ,EAASP,KAC3B,MAAMQ,EAASV,SAASW,cAAc,UACtCD,EAAOH,MAAQH,EAAUG,MACzBG,EAAOF,OAASJ,EAAUI,OAC1BE,EAAOE,WAAW,MAAOC,aAAaT,EAAW,EAAG,GAEpDM,EAAOI,OACJC,IACKA,EACFN,EAAQM,GAERb,EAAO,IAAIb,EAAoB,iCAGnCS,EACAC,iHAsDC,SACLiB,GAEA,MAAMC,EAAsCC,MAC1CrB,EACAC,EAAkC,aAClCC,KAEA,IAEE,MAAMI,EAAWN,IACXsB,EAAW,IAAIC,kBAAkBjB,EAASG,MAEhD,aAAaU,EAAWK,OACtB,CACEf,KAAMa,EACNZ,MAAOJ,EAASI,MAChBC,OAAQL,EAASK,QAEnBV,EACAC,EAEJ,OAASuB,GAGP,OADAC,QAAQC,KAAK,8DAA+DF,GACrE1B,EAAgCC,EAAcC,EAAWC,EAClE,GAMF,OAFAkB,EAAUQ,QAAU,IAAMT,EAAWS,UAE9BR,CACT,yCAzEO,SACLD,GAEA,MAAMC,EAAsC,CAC1CpB,EACAC,EAAkC,aAClCC,KAEA,MAAMI,EAAWN,IAGXsB,EAAW,IAAIC,kBAAkBjB,EAASG,MAEhD,OAAOU,EAAWK,OAChB,CACEf,KAAMa,EACNZ,MAAOJ,EAASI,MAChBC,OAAQL,EAASK,QAEnBV,EACAC,IAOJ,OAFAkB,EAAUQ,QAAU,IAAMT,EAAWS,UAE9BR,CACT"}
@@ -33,7 +33,7 @@ const browserImageDataToBlobConverter = (getImageData, imageType = "image/webp",
33
33
  });
34
34
  };
35
35
  function createWorkerPoolImageConverter(workerPool) {
36
- return (getImageData, imageType = "image/webp", quality) => {
36
+ const converter = (getImageData, imageType = "image/webp", quality) => {
37
37
  const pdfImage = getImageData();
38
38
  const dataCopy = new Uint8ClampedArray(pdfImage.data);
39
39
  return workerPool.encode(
@@ -46,9 +46,11 @@ function createWorkerPoolImageConverter(workerPool) {
46
46
  quality
47
47
  );
48
48
  };
49
+ converter.destroy = () => workerPool.destroy();
50
+ return converter;
49
51
  }
50
52
  function createHybridImageConverter(workerPool) {
51
- return async (getImageData, imageType = "image/webp", quality) => {
53
+ const converter = async (getImageData, imageType = "image/webp", quality) => {
52
54
  try {
53
55
  const pdfImage = getImageData();
54
56
  const dataCopy = new Uint8ClampedArray(pdfImage.data);
@@ -66,6 +68,8 @@ function createHybridImageConverter(workerPool) {
66
68
  return browserImageDataToBlobConverter(getImageData, imageType, quality);
67
69
  }
68
70
  };
71
+ converter.destroy = () => workerPool.destroy();
72
+ return converter;
69
73
  }
70
74
  export {
71
75
  ImageConverterError as I,
@@ -73,4 +77,4 @@ export {
73
77
  browserImageDataToBlobConverter as b,
74
78
  createWorkerPoolImageConverter as c
75
79
  };
76
- //# sourceMappingURL=browser-awZxztMA.js.map
80
+ //# sourceMappingURL=browser-qfUHZxQ6.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser-awZxztMA.js","sources":["../src/lib/converters/browser.ts"],"sourcesContent":["import type { ImageConversionTypes } from '@embedpdf/models';\nimport type { ImageDataConverter, LazyImageData } from './types';\nimport { ImageEncoderWorkerPool } from '../image-encoder';\n\n// ============================================================================\n// Error Classes\n// ============================================================================\n\nexport class ImageConverterError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'ImageConverterError';\n }\n}\n\n// ============================================================================\n// Browser Converters\n// ============================================================================\n\n/**\n * Main-thread Canvas-based image converter\n * Simple and works everywhere, but blocks the main thread during encoding\n *\n * Use this as a fallback when worker-based encoding isn't available\n */\nexport const browserImageDataToBlobConverter: ImageDataConverter<Blob> = (\n getImageData: LazyImageData,\n imageType: ImageConversionTypes = 'image/webp',\n quality?: number,\n): Promise<Blob> => {\n if (typeof document === 'undefined') {\n return Promise.reject(\n new ImageConverterError(\n 'document is not available. This converter requires a browser environment.',\n ),\n );\n }\n\n const pdfImage = getImageData();\n const imageData = new ImageData(pdfImage.data, pdfImage.width, pdfImage.height);\n\n return new Promise((resolve, reject) => {\n const canvas = document.createElement('canvas');\n canvas.width = imageData.width;\n canvas.height = imageData.height;\n canvas.getContext('2d')!.putImageData(imageData, 0, 0);\n\n canvas.toBlob(\n (blob) => {\n if (blob) {\n resolve(blob);\n } else {\n reject(new ImageConverterError('Canvas toBlob returned null'));\n }\n },\n imageType,\n quality,\n );\n });\n};\n\n/**\n * Worker pool image converter using OffscreenCanvas in dedicated workers\n * Non-blocking - encoding happens off the main thread\n *\n * This is the preferred approach for performance\n *\n * @param workerPool - Instance of ImageEncoderWorkerPool\n * @returns ImageDataConverter function\n */\nexport function createWorkerPoolImageConverter(\n workerPool: ImageEncoderWorkerPool,\n): ImageDataConverter<Blob> {\n return (\n getImageData: LazyImageData,\n imageType: ImageConversionTypes = 'image/webp',\n quality?: number,\n ): Promise<Blob> => {\n const pdfImage = getImageData();\n\n // Copy the data since we'll transfer it to another worker\n const dataCopy = new Uint8ClampedArray(pdfImage.data);\n\n return workerPool.encode(\n {\n data: dataCopy,\n width: pdfImage.width,\n height: pdfImage.height,\n },\n imageType,\n quality,\n );\n };\n}\n\n/**\n * Hybrid converter: Worker pool (OffscreenCanvas) → Main thread Canvas fallback\n *\n * Best of both worlds:\n * - Primary: Non-blocking worker-based encoding with OffscreenCanvas\n * - Fallback: Main-thread Canvas for older browsers without OffscreenCanvas in workers\n *\n * @param workerPool - Instance of ImageEncoderWorkerPool\n * @returns ImageDataConverter function\n */\nexport function createHybridImageConverter(\n workerPool: ImageEncoderWorkerPool,\n): ImageDataConverter<Blob> {\n return async (\n getImageData: LazyImageData,\n imageType: ImageConversionTypes = 'image/webp',\n quality?: number,\n ): Promise<Blob> => {\n try {\n // Try worker pool encoding first (OffscreenCanvas in worker)\n const pdfImage = getImageData();\n const dataCopy = new Uint8ClampedArray(pdfImage.data);\n\n return await workerPool.encode(\n {\n data: dataCopy,\n width: pdfImage.width,\n height: pdfImage.height,\n },\n imageType,\n quality,\n );\n } catch (error) {\n // Fallback to main-thread Canvas\n console.warn('Worker encoding failed, falling back to main-thread Canvas:', error);\n return browserImageDataToBlobConverter(getImageData, imageType, quality);\n }\n };\n}\n"],"names":[],"mappings":"AAQO,MAAM,4BAA4B,MAAM;AAAA,EAC7C,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;AAYO,MAAM,kCAA4D,CACvE,cACA,YAAkC,cAClC,YACkB;AAClB,MAAI,OAAO,aAAa,aAAa;AACnC,WAAO,QAAQ;AAAA,MACb,IAAI;AAAA,QACF;AAAA,MAAA;AAAA,IACF;AAAA,EAEJ;AAEA,QAAM,WAAW,aAAA;AACjB,QAAM,YAAY,IAAI,UAAU,SAAS,MAAM,SAAS,OAAO,SAAS,MAAM;AAE9E,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,WAAO,QAAQ,UAAU;AACzB,WAAO,SAAS,UAAU;AAC1B,WAAO,WAAW,IAAI,EAAG,aAAa,WAAW,GAAG,CAAC;AAErD,WAAO;AAAA,MACL,CAAC,SAAS;AACR,YAAI,MAAM;AACR,kBAAQ,IAAI;AAAA,QACd,OAAO;AACL,iBAAO,IAAI,oBAAoB,6BAA6B,CAAC;AAAA,QAC/D;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ,CAAC;AACH;AAWO,SAAS,+BACd,YAC0B;AAC1B,SAAO,CACL,cACA,YAAkC,cAClC,YACkB;AAClB,UAAM,WAAW,aAAA;AAGjB,UAAM,WAAW,IAAI,kBAAkB,SAAS,IAAI;AAEpD,WAAO,WAAW;AAAA,MAChB;AAAA,QACE,MAAM;AAAA,QACN,OAAO,SAAS;AAAA,QAChB,QAAQ,SAAS;AAAA,MAAA;AAAA,MAEnB;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACF;AAYO,SAAS,2BACd,YAC0B;AAC1B,SAAO,OACL,cACA,YAAkC,cAClC,YACkB;AAClB,QAAI;AAEF,YAAM,WAAW,aAAA;AACjB,YAAM,WAAW,IAAI,kBAAkB,SAAS,IAAI;AAEpD,aAAO,MAAM,WAAW;AAAA,QACtB;AAAA,UACE,MAAM;AAAA,UACN,OAAO,SAAS;AAAA,UAChB,QAAQ,SAAS;AAAA,QAAA;AAAA,QAEnB;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ,SAAS,OAAO;AAEd,cAAQ,KAAK,+DAA+D,KAAK;AACjF,aAAO,gCAAgC,cAAc,WAAW,OAAO;AAAA,IACzE;AAAA,EACF;AACF;"}
1
+ {"version":3,"file":"browser-qfUHZxQ6.js","sources":["../src/lib/converters/browser.ts"],"sourcesContent":["import type { ImageConversionTypes } from '@embedpdf/models';\nimport type { ImageDataConverter, LazyImageData } from './types';\nimport { ImageEncoderWorkerPool } from '../image-encoder';\n\n// ============================================================================\n// Error Classes\n// ============================================================================\n\nexport class ImageConverterError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'ImageConverterError';\n }\n}\n\n// ============================================================================\n// Browser Converters\n// ============================================================================\n\n/**\n * Main-thread Canvas-based image converter\n * Simple and works everywhere, but blocks the main thread during encoding\n *\n * Use this as a fallback when worker-based encoding isn't available\n */\nexport const browserImageDataToBlobConverter: ImageDataConverter<Blob> = (\n getImageData: LazyImageData,\n imageType: ImageConversionTypes = 'image/webp',\n quality?: number,\n): Promise<Blob> => {\n if (typeof document === 'undefined') {\n return Promise.reject(\n new ImageConverterError(\n 'document is not available. This converter requires a browser environment.',\n ),\n );\n }\n\n const pdfImage = getImageData();\n const imageData = new ImageData(pdfImage.data, pdfImage.width, pdfImage.height);\n\n return new Promise((resolve, reject) => {\n const canvas = document.createElement('canvas');\n canvas.width = imageData.width;\n canvas.height = imageData.height;\n canvas.getContext('2d')!.putImageData(imageData, 0, 0);\n\n canvas.toBlob(\n (blob) => {\n if (blob) {\n resolve(blob);\n } else {\n reject(new ImageConverterError('Canvas toBlob returned null'));\n }\n },\n imageType,\n quality,\n );\n });\n};\n\n/**\n * Worker pool image converter using OffscreenCanvas in dedicated workers\n * Non-blocking - encoding happens off the main thread\n *\n * This is the preferred approach for performance\n *\n * @param workerPool - Instance of ImageEncoderWorkerPool\n * @returns ImageDataConverter function with destroy() for cleanup\n */\nexport function createWorkerPoolImageConverter(\n workerPool: ImageEncoderWorkerPool,\n): ImageDataConverter<Blob> {\n const converter: ImageDataConverter<Blob> = (\n getImageData: LazyImageData,\n imageType: ImageConversionTypes = 'image/webp',\n quality?: number,\n ): Promise<Blob> => {\n const pdfImage = getImageData();\n\n // Copy the data since we'll transfer it to another worker\n const dataCopy = new Uint8ClampedArray(pdfImage.data);\n\n return workerPool.encode(\n {\n data: dataCopy,\n width: pdfImage.width,\n height: pdfImage.height,\n },\n imageType,\n quality,\n );\n };\n\n // Attach destroy method to clean up worker pool\n converter.destroy = () => workerPool.destroy();\n\n return converter;\n}\n\n/**\n * Hybrid converter: Worker pool (OffscreenCanvas) → Main thread Canvas fallback\n *\n * Best of both worlds:\n * - Primary: Non-blocking worker-based encoding with OffscreenCanvas\n * - Fallback: Main-thread Canvas for older browsers without OffscreenCanvas in workers\n *\n * @param workerPool - Instance of ImageEncoderWorkerPool\n * @returns ImageDataConverter function with destroy() for cleanup\n */\nexport function createHybridImageConverter(\n workerPool: ImageEncoderWorkerPool,\n): ImageDataConverter<Blob> {\n const converter: ImageDataConverter<Blob> = async (\n getImageData: LazyImageData,\n imageType: ImageConversionTypes = 'image/webp',\n quality?: number,\n ): Promise<Blob> => {\n try {\n // Try worker pool encoding first (OffscreenCanvas in worker)\n const pdfImage = getImageData();\n const dataCopy = new Uint8ClampedArray(pdfImage.data);\n\n return await workerPool.encode(\n {\n data: dataCopy,\n width: pdfImage.width,\n height: pdfImage.height,\n },\n imageType,\n quality,\n );\n } catch (error) {\n // Fallback to main-thread Canvas\n console.warn('Worker encoding failed, falling back to main-thread Canvas:', error);\n return browserImageDataToBlobConverter(getImageData, imageType, quality);\n }\n };\n\n // Attach destroy method to clean up worker pool\n converter.destroy = () => workerPool.destroy();\n\n return converter;\n}\n"],"names":[],"mappings":"AAQO,MAAM,4BAA4B,MAAM;AAAA,EAC7C,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;AAYO,MAAM,kCAA4D,CACvE,cACA,YAAkC,cAClC,YACkB;AAClB,MAAI,OAAO,aAAa,aAAa;AACnC,WAAO,QAAQ;AAAA,MACb,IAAI;AAAA,QACF;AAAA,MAAA;AAAA,IACF;AAAA,EAEJ;AAEA,QAAM,WAAW,aAAA;AACjB,QAAM,YAAY,IAAI,UAAU,SAAS,MAAM,SAAS,OAAO,SAAS,MAAM;AAE9E,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,WAAO,QAAQ,UAAU;AACzB,WAAO,SAAS,UAAU;AAC1B,WAAO,WAAW,IAAI,EAAG,aAAa,WAAW,GAAG,CAAC;AAErD,WAAO;AAAA,MACL,CAAC,SAAS;AACR,YAAI,MAAM;AACR,kBAAQ,IAAI;AAAA,QACd,OAAO;AACL,iBAAO,IAAI,oBAAoB,6BAA6B,CAAC;AAAA,QAC/D;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ,CAAC;AACH;AAWO,SAAS,+BACd,YAC0B;AAC1B,QAAM,YAAsC,CAC1C,cACA,YAAkC,cAClC,YACkB;AAClB,UAAM,WAAW,aAAA;AAGjB,UAAM,WAAW,IAAI,kBAAkB,SAAS,IAAI;AAEpD,WAAO,WAAW;AAAA,MAChB;AAAA,QACE,MAAM;AAAA,QACN,OAAO,SAAS;AAAA,QAChB,QAAQ,SAAS;AAAA,MAAA;AAAA,MAEnB;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AAGA,YAAU,UAAU,MAAM,WAAW,QAAA;AAErC,SAAO;AACT;AAYO,SAAS,2BACd,YAC0B;AAC1B,QAAM,YAAsC,OAC1C,cACA,YAAkC,cAClC,YACkB;AAClB,QAAI;AAEF,YAAM,WAAW,aAAA;AACjB,YAAM,WAAW,IAAI,kBAAkB,SAAS,IAAI;AAEpD,aAAO,MAAM,WAAW;AAAA,QACtB;AAAA,UACE,MAAM;AAAA,UACN,OAAO,SAAS;AAAA,UAChB,QAAQ,SAAS;AAAA,QAAA;AAAA,QAEnB;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ,SAAS,OAAO;AAEd,cAAQ,KAAK,+DAA+D,KAAK;AACjF,aAAO,gCAAgC,cAAc,WAAW,OAAO;AAAA,IACzE;AAAA,EACF;AAGA,YAAU,UAAU,MAAM,WAAW,QAAA;AAErC,SAAO;AACT;"}
@@ -1,7 +1,7 @@
1
1
  import { init } from "@embedpdf/pdfium";
2
2
  import { Rotation, NoopLogger, PdfTaskHelper, PdfErrorCode, pdfDateToDate, isUuidV4, uuidV4, PdfAnnotationSubtype, PdfPageFlattenFlag, stripPdfUnwantedMarkers, PdfAnnotationIcon, PdfAnnotationBorderStyle, PdfAnnotationColorType, PdfAnnotationLineEnding, PdfStandardFont, PdfStampFit, PdfTrappedStatus, pdfColorToWebColor, webColorToPdfColor, pdfAlphaToWebOpacity, webOpacityToPdfAlpha, PdfAnnotationReplyType, dateToPdfDate, quadToRect, rectToQuad, PdfPageObjectType, flagsToNames, namesToFlags, PDF_FORM_FIELD_TYPE, AppearanceMode, Task, toIntRect, transformRect, buildUserToDeviceMatrix, PdfZoomMode, PdfActionType } from "@embedpdf/models";
3
- import { P as PdfEngine } from "./pdf-engine-D_Dua_6w.js";
4
- import { b as browserImageDataToBlobConverter } from "./browser-awZxztMA.js";
3
+ import { P as PdfEngine } from "./pdf-engine-CVXuu1xQ.js";
4
+ import { b as browserImageDataToBlobConverter } from "./browser-qfUHZxQ6.js";
5
5
  function readString(wasmModule, readChars, parseChars, defaultLength = 100) {
6
6
  let buffer = wasmModule.wasmExports.malloc(defaultLength);
7
7
  for (let i = 0; i < defaultLength; i++) {
@@ -7600,4 +7600,4 @@ export {
7600
7600
  isValidCustomKey as i,
7601
7601
  readString as r
7602
7602
  };
7603
- //# sourceMappingURL=direct-engine-6BoAmGsC.js.map
7603
+ //# sourceMappingURL=direct-engine-5RWKENek.js.map