@embedpdf/engines 1.0.17 → 1.0.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/engine-CkrTs7st.cjs +2 -0
- package/dist/engine-CkrTs7st.cjs.map +1 -0
- package/dist/{engine-uSZXjmb5.js → engine-DMU8HkGx.js} +162 -154
- package/dist/engine-DMU8HkGx.js.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +36 -37
- package/dist/index.js.map +1 -1
- package/dist/lib/converters/index.cjs +1 -1
- package/dist/lib/converters/index.cjs.map +1 -1
- package/dist/lib/converters/index.d.ts +4 -4
- package/dist/lib/converters/index.js +11 -2
- package/dist/lib/converters/index.js.map +1 -1
- package/dist/lib/pdfium/engine.d.ts +49 -38
- package/dist/lib/pdfium/index.cjs +1 -1
- package/dist/lib/pdfium/index.js +2 -2
- package/dist/lib/pdfium/runner.d.ts +2 -1
- package/dist/lib/pdfium/web/direct-engine.cjs +1 -1
- package/dist/lib/pdfium/web/direct-engine.cjs.map +1 -1
- package/dist/lib/pdfium/web/direct-engine.js +2 -2
- package/dist/lib/pdfium/web/direct-engine.js.map +1 -1
- package/dist/lib/pdfium/web/worker-engine.cjs +1 -1
- package/dist/lib/pdfium/web/worker-engine.js +7 -2
- package/dist/lib/pdfium/web/worker-engine.js.map +1 -1
- package/dist/lib/utils.d.ts +2 -0
- package/dist/lib/webworker/engine.cjs +1 -1
- package/dist/lib/webworker/engine.cjs.map +1 -1
- package/dist/lib/webworker/engine.d.ts +18 -18
- package/dist/lib/webworker/engine.js +43 -117
- package/dist/lib/webworker/engine.js.map +1 -1
- package/dist/preact/index.cjs +1 -1
- package/dist/preact/index.js +1 -1
- package/dist/react/index.cjs +1 -1
- package/dist/react/index.js +1 -1
- package/dist/runner-BPhmukiN.cjs +2 -0
- package/dist/runner-BPhmukiN.cjs.map +1 -0
- package/dist/{runner-BOJ4naYI.js → runner-TzQFlVIQ.js} +10 -10
- package/dist/runner-TzQFlVIQ.js.map +1 -0
- package/dist/vue/index.cjs +1 -1
- package/dist/vue/index.js +1 -1
- package/package.json +3 -3
- package/dist/engine-Bcr-xNy6.cjs +0 -2
- package/dist/engine-Bcr-xNy6.cjs.map +0 -1
- package/dist/engine-uSZXjmb5.js.map +0 -1
- package/dist/runner-BOJ4naYI.js.map +0 -1
- package/dist/runner-C64KrEhP.cjs +0 -2
- package/dist/runner-C64KrEhP.cjs.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("./engine-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./engine-CkrTs7st.cjs"),r=require("./runner-BPhmukiN.cjs"),t=require("./lib/webworker/engine.cjs"),n=require("@embedpdf/models");exports.BitmapFormat=e.BitmapFormat,exports.PdfiumEngine=e.PdfiumEngine,exports.PdfiumErrorCode=e.PdfiumErrorCode,exports.RenderFlag=e.RenderFlag,exports.browserImageDataToBlobConverter=e.browserImageDataToBlobConverter,exports.readArrayBuffer=e.readArrayBuffer,exports.readString=e.readString,exports.EngineRunner=r.EngineRunner,exports.PdfiumEngineRunner=r.PdfiumEngineRunner,exports.WebWorkerEngine=t.WebWorkerEngine,exports.WorkerTask=t.WorkerTask,exports.createMockPdfDocument=function(e){const r=[];for(let t=0;t<10;t++)r.push({index:t,size:{width:100,height:200}});return{id:"id",pageCount:10,pages:r,...e}},exports.createMockPdfEngine=function(e){return{openDocumentUrl:jest.fn(((e,r)=>n.PdfTaskHelper.create())),openDocumentBuffer:jest.fn(((e,r)=>n.PdfTaskHelper.create())),getMetadata:()=>n.PdfTaskHelper.resolve({title:"title",author:"author",subject:"subject",keywords:"keywords",producer:"producer",creator:"creator",creationDate:"creationDate",modificationDate:"modificationDate"}),getDocPermissions:e=>n.PdfTaskHelper.resolve(4294967295),getDocUserPermissions:e=>n.PdfTaskHelper.resolve(4294967295),getSignatures:e=>n.PdfTaskHelper.resolve([]),getBookmarks:e=>{const r=[];return r.push({title:"Page 1",target:{type:"destination",destination:{pageIndex:1,zoom:{mode:n.PdfZoomMode.FitPage},view:[]}}},{title:"Page 2",target:{type:"destination",destination:{pageIndex:2,zoom:{mode:n.PdfZoomMode.FitPage},view:[]}},children:[{title:"Page 3",target:{type:"destination",destination:{pageIndex:3,zoom:{mode:n.PdfZoomMode.FitPage},view:[]}}}]}),n.PdfTaskHelper.resolve({bookmarks:r})},renderPage:jest.fn(((e,r,t)=>{const{scaleFactor:o=1,rotation:a=n.Rotation.Degree0,dpr:s=1}=t??{},i=a%2==0?r.size:n.swap(r.size),d=Math.ceil(i.width*o)*Math.ceil(i.height*o),f=new Uint8ClampedArray(4*d),l=r.index%255;for(let n=0;n<d;n++){for(let e=0;e<3;e++){f[4*n+e]=l}f[4*n+3]=255}const p=f.buffer,c=p instanceof ArrayBuffer?p:new Uint8Array(f).buffer,g=new Blob([c],{type:"application/octet-stream"});return n.PdfTaskHelper.resolve(g)})),renderPageRect:jest.fn(((e,r,t,o)=>{const{scaleFactor:a=1,rotation:s=n.Rotation.Degree0,dpr:i=1}=o??{},d=s%2==0?r.size:n.swap(r.size),f=Math.ceil(d.width*a)*Math.ceil(d.height*a),l=new Uint8ClampedArray(4*f),p=r.index%255;for(let n=0;n<f;n++){for(let e=0;e<3;e++){l[4*n+e]=p}l[4*n+3]=255}const c=l.buffer,g=c instanceof ArrayBuffer?c:new Uint8Array(l).buffer,u=new Blob([g],{type:"application/octet-stream"});return n.PdfTaskHelper.resolve(u)})),renderThumbnail:jest.fn(((e,r)=>{const t=r.size.width/4*(r.size.height/4),o=new Uint8ClampedArray(4*t),a=r.index%255;for(let n=0;n<t;n++){for(let e=0;e<3;e++){o[4*n+e]=a}o[4*n+3]=255}const s=o.buffer,i=s instanceof ArrayBuffer?s:new Uint8Array(o).buffer,d=new Blob([i],{type:"image/png"});return n.PdfTaskHelper.resolve(d)})),renderPageAnnotation:jest.fn(((e,r,t,o)=>n.PdfTaskHelper.resolve(new Blob([],{type:"image/png"})))),getAllAnnotations:jest.fn((e=>n.PdfTaskHelper.resolve({}))),getPageAnnotations:jest.fn(((e,r)=>{const t={pageIndex:r.index,id:"1",type:n.PdfAnnotationSubtype.LINK,target:{type:"action",action:{type:n.PdfActionType.URI,uri:"https://localhost"}},rect:{origin:{x:0,y:0},size:{width:100,height:100}}},o=[];return o.push(t),n.PdfTaskHelper.resolve(o)})),createPageAnnotation:jest.fn((()=>n.PdfTaskHelper.resolve(n.uuidV4()))),updatePageAnnotation:jest.fn((()=>n.PdfTaskHelper.resolve(!0))),removePageAnnotation:jest.fn((()=>n.PdfTaskHelper.resolve(!0))),getPageTextRects:jest.fn(((e,r)=>n.PdfTaskHelper.resolve([{content:"pdf text",font:{family:"sans-serif",size:12},rect:{origin:{x:0,y:0},size:{width:100,height:100}}}]))),closeDocument:e=>n.PdfTaskHelper.resolve(!0),saveAsCopy:e=>n.PdfTaskHelper.resolve(new ArrayBuffer(0)),flattenPage:(e,r,t)=>n.PdfTaskHelper.resolve(n.PdfPageFlattenResult.Success),extractPages:(e,r)=>n.PdfTaskHelper.resolve(new ArrayBuffer(0)),extractText:(e,r)=>n.PdfTaskHelper.resolve(""),redactTextInRects:(e,r,t,o)=>n.PdfTaskHelper.resolve(!0),getTextSlices:(e,r)=>n.PdfTaskHelper.resolve([]),getPageGlyphs:(e,r)=>n.PdfTaskHelper.resolve([]),getPageGeometry:(e,r)=>n.PdfTaskHelper.resolve({runs:[]}),merge:e=>n.PdfTaskHelper.resolve({id:"id",content:new ArrayBuffer(0)}),mergePages:e=>n.PdfTaskHelper.resolve({id:"id",content:new ArrayBuffer(0)}),searchAllPages:(e,r,t)=>{const o={pageIndex:0,charIndex:0,charCount:r.length,rects:[{origin:{x:0,y:0},size:{width:50,height:20}}],context:{before:"",match:"",after:"",truncatedLeft:!1,truncatedRight:!1}};return n.PdfTaskHelper.resolve({results:[o],total:1})},getAttachments:e=>n.PdfTaskHelper.resolve([]),readAttachmentContent:(e,r)=>n.PdfTaskHelper.resolve(new ArrayBuffer(0)),setFormFieldValue:(e,r,t,o)=>n.PdfTaskHelper.resolve(!0),...e}},exports.createMockPdfFile=function(e){return{id:"id",content:new ArrayBuffer(0)}};
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/lib/mock/index.ts"],"sourcesContent":["import {\n PdfDocumentObject,\n PdfEngine,\n PdfPageObject,\n PdfAnnotationSubtype,\n PdfLinkAnnoObject,\n Rotation,\n swap,\n PdfZoomMode,\n PdfActionType,\n PdfAnnotationObject,\n PdfBookmarkObject,\n PdfTextRectObject,\n SearchTarget,\n SearchResult,\n PdfAttachmentObject,\n PdfSignatureObject,\n Rect,\n PdfRenderOptions,\n PdfFile,\n PdfAnnotationObjectStatus,\n PdfWidgetAnnoObject,\n FormFieldValue,\n PdfTaskHelper,\n PdfPageFlattenFlag,\n PdfPageFlattenResult,\n PdfFileLoader,\n SearchAllPagesResult,\n MatchFlag,\n Task,\n Logger,\n NoopLogger,\n PdfAnnotationTransformation,\n PdfEngineError,\n PdfMetadataObject,\n PdfErrorCode,\n PdfErrorReason,\n PdfBookmarksObject,\n PdfUrlOptions,\n PdfFileUrl,\n PdfGlyphObject,\n PdfPageGeometry,\n PageTextSlice,\n PdfAnnotationObjectBase,\n PdfAlphaColor,\n WebAlphaColor,\n AppearanceMode,\n ImageConversionTypes,\n} from '@embedpdf/models';\n\n/**\n * Create mock of pdf engine\n * @param partialEngine - partial configuration of engine\n * @returns - mock of pdf engine\n *\n * @public\n */\nexport function createMockPdfEngine(partialEngine?: Partial<PdfEngine>): PdfEngine {\n const engine: PdfEngine = {\n openDocumentUrl: jest.fn((file: PdfFileUrl, options?: PdfUrlOptions) => {\n return PdfTaskHelper.create();\n }),\n openDocumentFromBuffer: jest.fn((file: PdfFile, password: string) => {\n return PdfTaskHelper.create();\n }),\n openDocumentFromLoader: jest.fn((file: PdfFileLoader, password: string) => {\n return PdfTaskHelper.create();\n }),\n getMetadata: () => {\n return PdfTaskHelper.resolve({\n title: 'title',\n author: 'author',\n subject: 'subject',\n keywords: 'keywords',\n producer: 'producer',\n creator: 'creator',\n creationDate: 'creationDate',\n modificationDate: 'modificationDate',\n });\n },\n getDocPermissions: (doc: PdfDocumentObject) => {\n return PdfTaskHelper.resolve(0xffffffff);\n },\n getDocUserPermissions: (doc: PdfDocumentObject) => {\n return PdfTaskHelper.resolve(0xffffffff);\n },\n getSignatures: (doc: PdfDocumentObject) => {\n const signatures: PdfSignatureObject[] = [];\n return PdfTaskHelper.resolve(signatures);\n },\n getBookmarks: (doc: PdfDocumentObject) => {\n const bookmarks: PdfBookmarkObject[] = [];\n bookmarks.push(\n {\n title: 'Page 1',\n target: {\n type: 'destination',\n destination: {\n pageIndex: 1,\n zoom: {\n mode: PdfZoomMode.FitPage,\n },\n view: [],\n },\n },\n },\n {\n title: 'Page 2',\n target: {\n type: 'destination',\n destination: {\n pageIndex: 2,\n zoom: {\n mode: PdfZoomMode.FitPage,\n },\n view: [],\n },\n },\n children: [\n {\n title: 'Page 3',\n target: {\n type: 'destination',\n destination: {\n pageIndex: 3,\n zoom: {\n mode: PdfZoomMode.FitPage,\n },\n view: [],\n },\n },\n },\n ],\n },\n );\n return PdfTaskHelper.resolve({\n bookmarks,\n });\n },\n renderPage: jest.fn(\n (\n doc: PdfDocumentObject,\n page: PdfPageObject,\n scaleFactor: number,\n rotation: Rotation,\n dpr: number,\n options: PdfRenderOptions,\n ) => {\n const pageSize = rotation % 2 === 0 ? page.size : swap(page.size);\n const imageSize = {\n width: Math.ceil(pageSize.width * scaleFactor),\n height: Math.ceil(pageSize.height * scaleFactor),\n };\n const pixelCount = imageSize.width * imageSize.height;\n const array = new Uint8ClampedArray(pixelCount * 4);\n const rgbValue = page.index % 255;\n const alphaValue = 255;\n for (let i = 0; i < pixelCount; i++) {\n for (let j = 0; j < 3; j++) {\n const index = i * 4 + j;\n array[index] = rgbValue;\n }\n array[i * 4 + 3] = alphaValue;\n }\n\n const ab = array.buffer;\n const realBuffer = ab instanceof ArrayBuffer ? ab : new Uint8Array(array).buffer;\n const blob = new Blob([realBuffer], { type: 'application/octet-stream' });\n return PdfTaskHelper.resolve(blob);\n },\n ),\n renderPageRect: jest.fn(\n (\n doc: PdfDocumentObject,\n page: PdfPageObject,\n scaleFactor: number,\n rotation: Rotation,\n dpr: number,\n rect: Rect,\n options: PdfRenderOptions,\n ) => {\n const pageSize = rotation % 2 === 0 ? page.size : swap(page.size);\n const imageSize = {\n width: Math.ceil(pageSize.width * scaleFactor),\n height: Math.ceil(pageSize.height * scaleFactor),\n };\n const pixelCount = imageSize.width * imageSize.height;\n const array = new Uint8ClampedArray(pixelCount * 4);\n const rgbValue = page.index % 255;\n const alphaValue = 255;\n for (let i = 0; i < pixelCount; i++) {\n for (let j = 0; j < 3; j++) {\n const index = i * 4 + j;\n array[index] = rgbValue;\n }\n array[i * 4 + 3] = alphaValue;\n }\n\n const ab = array.buffer;\n const realBuffer = ab instanceof ArrayBuffer ? ab : new Uint8Array(array).buffer;\n const blob = new Blob([realBuffer], { type: 'application/octet-stream' });\n return PdfTaskHelper.resolve(blob);\n },\n ),\n renderThumbnail: jest.fn((doc: PdfDocumentObject, page: PdfPageObject) => {\n const thumbnailWidth = page.size.width / 4;\n const thumbnailHeight = page.size.height / 4;\n const pixelCount = thumbnailWidth * thumbnailHeight;\n const array = new Uint8ClampedArray(pixelCount * 4);\n const rgbValue = page.index % 255;\n const alphaValue = 255;\n for (let i = 0; i < pixelCount; i++) {\n for (let j = 0; j < 3; j++) {\n const index = i * 4 + j;\n array[index] = rgbValue;\n }\n array[i * 4 + 3] = alphaValue;\n }\n\n const ab = array.buffer;\n const realBuffer = ab instanceof ArrayBuffer ? ab : new Uint8Array(array).buffer;\n const blob = new Blob([realBuffer], { type: 'image/png' });\n\n return PdfTaskHelper.resolve(blob);\n }),\n renderAnnotation: jest.fn(\n (\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfAnnotationObject,\n scaleFactor: number,\n rotation: Rotation,\n dpr: number,\n mode: AppearanceMode,\n imageType: ImageConversionTypes,\n ) => {\n return PdfTaskHelper.resolve(new Blob([], { type: 'image/png' }));\n },\n ),\n getAllAnnotations: jest.fn((doc: PdfDocumentObject) => {\n return PdfTaskHelper.resolve({});\n }),\n getPageAnnotations: jest.fn((doc: PdfDocumentObject, page: PdfPageObject) => {\n const link: PdfLinkAnnoObject = {\n pageIndex: page.index,\n id: page.index + 1,\n type: PdfAnnotationSubtype.LINK,\n target: {\n type: 'action',\n action: {\n type: PdfActionType.URI,\n uri: 'https://localhost',\n },\n },\n text: 'localhost',\n rect: {\n origin: {\n x: 0,\n y: 0,\n },\n size: {\n width: 100,\n height: 100,\n },\n },\n };\n const annotations: PdfAnnotationObject[] = [];\n annotations.push(link);\n return PdfTaskHelper.resolve(annotations);\n }),\n createPageAnnotation: jest.fn(() => {\n return PdfTaskHelper.resolve(1);\n }),\n updatePageAnnotation: jest.fn(() => {\n return PdfTaskHelper.resolve(true);\n }),\n removePageAnnotation: jest.fn(() => {\n return PdfTaskHelper.resolve(true);\n }),\n getPageTextRects: jest.fn(\n (doc: PdfDocumentObject, page: PdfPageObject, scaleFactor: number, rotation: Rotation) => {\n const textRects: PdfTextRectObject[] = [\n {\n content: 'pdf text',\n font: {\n family: 'sans-serif',\n size: 12,\n },\n rect: {\n origin: {\n x: 0,\n y: 0,\n },\n size: {\n width: 100,\n height: 100,\n },\n },\n },\n ];\n return PdfTaskHelper.resolve(textRects);\n },\n ),\n closeDocument: (pdf: PdfDocumentObject) => {\n return PdfTaskHelper.resolve(true);\n },\n saveAsCopy: (pdf: PdfDocumentObject) => {\n return PdfTaskHelper.resolve(new ArrayBuffer(0));\n },\n flattenPage: (pdf: PdfDocumentObject, page: PdfPageObject, flag: PdfPageFlattenFlag) => {\n return PdfTaskHelper.resolve<PdfPageFlattenResult>(PdfPageFlattenResult.Success);\n },\n extractPages: (pdf: PdfDocumentObject, pageIndexes: number[]) => {\n return PdfTaskHelper.resolve(new ArrayBuffer(0));\n },\n extractText: (pdf: PdfDocumentObject, pageIndexes: number[]) => {\n return PdfTaskHelper.resolve('');\n },\n getTextSlices: (doc: PdfDocumentObject, slices: PageTextSlice[]) => {\n return PdfTaskHelper.resolve([] as string[]);\n },\n getPageGlyphs: (doc: PdfDocumentObject, page: PdfPageObject) => {\n return PdfTaskHelper.resolve([] as PdfGlyphObject[]);\n },\n getPageGeometry: (doc: PdfDocumentObject, page: PdfPageObject) => {\n return PdfTaskHelper.resolve({\n runs: [],\n } as PdfPageGeometry);\n },\n merge: (files: PdfFile[]) => {\n return PdfTaskHelper.resolve({\n id: 'id',\n content: new ArrayBuffer(0),\n });\n },\n mergePages: (mergeConfigs: Array<{ docId: string; pageIndices: number[] }>) => {\n return PdfTaskHelper.resolve({\n id: 'id',\n content: new ArrayBuffer(0),\n });\n },\n searchAllPages: (doc: PdfDocumentObject, keyword: string, flags?: MatchFlag[]) => {\n // Create a mock search result\n const mockResult: SearchResult = {\n pageIndex: 0,\n charIndex: 0,\n charCount: keyword.length,\n rects: [\n {\n origin: {\n x: 0,\n y: 0,\n },\n size: {\n width: 50,\n height: 20,\n },\n },\n ],\n context: {\n before: '',\n match: '',\n after: '',\n truncatedLeft: false,\n truncatedRight: false,\n },\n };\n\n // Return a mock SearchAllPagesResult with a single result\n return PdfTaskHelper.resolve<SearchAllPagesResult>({\n results: [mockResult],\n total: 1,\n });\n },\n getAttachments: (doc: PdfDocumentObject) => {\n return PdfTaskHelper.resolve([] as PdfAttachmentObject[]);\n },\n readAttachmentContent: (doc: PdfDocumentObject, attachment: PdfAttachmentObject) => {\n return PdfTaskHelper.resolve(new ArrayBuffer(0));\n },\n setFormFieldValue: (\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfWidgetAnnoObject,\n text: FormFieldValue,\n ) => {\n return PdfTaskHelper.resolve(true);\n },\n ...partialEngine,\n };\n\n return engine;\n}\n/**\n * Create mock of pdf document\n * @param doc - partial configuration of document\n * @returns mock of pdf document\n *\n * @public\n */\nexport function createMockPdfDocument(doc?: Partial<PdfDocumentObject>): PdfDocumentObject {\n const pageCount = 10;\n const pageWidth = 100;\n const pageHeight = 200;\n const pages = [];\n for (let i = 0; i < pageCount; i++) {\n pages.push({\n index: i,\n size: {\n width: pageWidth,\n height: pageHeight,\n },\n });\n }\n\n return {\n id: 'id',\n pageCount: pageCount,\n pages: pages,\n ...doc,\n };\n}\n\n/**\n * Create mock of pdf file\n * @param file - partial configuration of file\n * @returns mock of pdf file\n *\n * @public\n */\nexport function createMockPdfFile(file?: Partial<PdfFile>): PdfFile {\n return {\n id: 'id',\n content: new ArrayBuffer(0),\n };\n}\n"],"names":["doc","pages","i","push","index","size","width","height","id","pageCount","partialEngine","engine","openDocumentUrl","jest","fn","file","options","PdfTaskHelper","create","openDocumentFromBuffer","password","openDocumentFromLoader","getMetadata","resolve","title","author","subject","keywords","producer","creator","creationDate","modificationDate","getDocPermissions","getDocUserPermissions","getSignatures","getBookmarks","bookmarks","target","type","destination","pageIndex","zoom","mode","PdfZoomMode","FitPage","view","children","renderPage","page","scaleFactor","rotation","dpr","pageSize","swap","pixelCount","Math","ceil","array","Uint8ClampedArray","rgbValue","j","ab","buffer","realBuffer","ArrayBuffer","Uint8Array","blob","Blob","renderPageRect","rect","renderThumbnail","renderAnnotation","annotation","imageType","getAllAnnotations","getPageAnnotations","link","PdfAnnotationSubtype","LINK","action","PdfActionType","URI","uri","text","origin","x","y","annotations","createPageAnnotation","updatePageAnnotation","removePageAnnotation","getPageTextRects","content","font","family","closeDocument","pdf","saveAsCopy","flattenPage","flag","PdfPageFlattenResult","Success","extractPages","pageIndexes","extractText","getTextSlices","slices","getPageGlyphs","getPageGeometry","runs","merge","files","mergePages","mergeConfigs","searchAllPages","keyword","flags","mockResult","charIndex","charCount","length","rects","context","before","match","after","truncatedLeft","truncatedRight","results","total","getAttachments","readAttachmentContent","attachment","setFormFieldValue"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/lib/mock/index.ts"],"sourcesContent":["import {\n PdfDocumentObject,\n PdfEngine,\n PdfPageObject,\n PdfAnnotationSubtype,\n PdfLinkAnnoObject,\n Rotation,\n swap,\n PdfZoomMode,\n PdfActionType,\n PdfAnnotationObject,\n PdfBookmarkObject,\n PdfTextRectObject,\n SearchResult,\n PdfAttachmentObject,\n PdfSignatureObject,\n Rect,\n PdfFile,\n PdfWidgetAnnoObject,\n FormFieldValue,\n PdfTaskHelper,\n PdfPageFlattenResult,\n SearchAllPagesResult,\n PdfOpenDocumentUrlOptions,\n PdfFileUrl,\n PdfGlyphObject,\n PdfPageGeometry,\n PageTextSlice,\n PdfPageSearchProgress,\n PdfRenderPageOptions,\n PdfRenderPageAnnotationOptions,\n PdfFlattenPageOptions,\n PdfRedactTextOptions,\n PdfSearchAllPagesOptions,\n PdfOpenDocumentBufferOptions,\n uuidV4,\n} from '@embedpdf/models';\n\n/**\n * Create mock of pdf engine\n * @param partialEngine - partial configuration of engine\n * @returns - mock of pdf engine\n *\n * @public\n */\nexport function createMockPdfEngine(partialEngine?: Partial<PdfEngine>): PdfEngine {\n const engine: PdfEngine = {\n openDocumentUrl: jest.fn((file: PdfFileUrl, options?: PdfOpenDocumentUrlOptions) => {\n return PdfTaskHelper.create();\n }),\n openDocumentBuffer: jest.fn((file: PdfFile, options?: PdfOpenDocumentBufferOptions) => {\n return PdfTaskHelper.create();\n }),\n getMetadata: () => {\n return PdfTaskHelper.resolve({\n title: 'title',\n author: 'author',\n subject: 'subject',\n keywords: 'keywords',\n producer: 'producer',\n creator: 'creator',\n creationDate: 'creationDate',\n modificationDate: 'modificationDate',\n });\n },\n getDocPermissions: (doc: PdfDocumentObject) => {\n return PdfTaskHelper.resolve(0xffffffff);\n },\n getDocUserPermissions: (doc: PdfDocumentObject) => {\n return PdfTaskHelper.resolve(0xffffffff);\n },\n getSignatures: (doc: PdfDocumentObject) => {\n const signatures: PdfSignatureObject[] = [];\n return PdfTaskHelper.resolve(signatures);\n },\n getBookmarks: (doc: PdfDocumentObject) => {\n const bookmarks: PdfBookmarkObject[] = [];\n bookmarks.push(\n {\n title: 'Page 1',\n target: {\n type: 'destination',\n destination: {\n pageIndex: 1,\n zoom: {\n mode: PdfZoomMode.FitPage,\n },\n view: [],\n },\n },\n },\n {\n title: 'Page 2',\n target: {\n type: 'destination',\n destination: {\n pageIndex: 2,\n zoom: {\n mode: PdfZoomMode.FitPage,\n },\n view: [],\n },\n },\n children: [\n {\n title: 'Page 3',\n target: {\n type: 'destination',\n destination: {\n pageIndex: 3,\n zoom: {\n mode: PdfZoomMode.FitPage,\n },\n view: [],\n },\n },\n },\n ],\n },\n );\n return PdfTaskHelper.resolve({\n bookmarks,\n });\n },\n renderPage: jest.fn(\n (doc: PdfDocumentObject, page: PdfPageObject, options?: PdfRenderPageOptions) => {\n const { scaleFactor = 1, rotation = Rotation.Degree0, dpr = 1 } = options ?? {};\n const pageSize = rotation % 2 === 0 ? page.size : swap(page.size);\n const imageSize = {\n width: Math.ceil(pageSize.width * scaleFactor),\n height: Math.ceil(pageSize.height * scaleFactor),\n };\n const pixelCount = imageSize.width * imageSize.height;\n const array = new Uint8ClampedArray(pixelCount * 4);\n const rgbValue = page.index % 255;\n const alphaValue = 255;\n for (let i = 0; i < pixelCount; i++) {\n for (let j = 0; j < 3; j++) {\n const index = i * 4 + j;\n array[index] = rgbValue;\n }\n array[i * 4 + 3] = alphaValue;\n }\n\n const ab = array.buffer;\n const realBuffer = ab instanceof ArrayBuffer ? ab : new Uint8Array(array).buffer;\n const blob = new Blob([realBuffer], { type: 'application/octet-stream' });\n return PdfTaskHelper.resolve(blob);\n },\n ),\n renderPageRect: jest.fn(\n (doc: PdfDocumentObject, page: PdfPageObject, rect: Rect, options?: PdfRenderPageOptions) => {\n const { scaleFactor = 1, rotation = Rotation.Degree0, dpr = 1 } = options ?? {};\n const pageSize = rotation % 2 === 0 ? page.size : swap(page.size);\n const imageSize = {\n width: Math.ceil(pageSize.width * scaleFactor),\n height: Math.ceil(pageSize.height * scaleFactor),\n };\n const pixelCount = imageSize.width * imageSize.height;\n const array = new Uint8ClampedArray(pixelCount * 4);\n const rgbValue = page.index % 255;\n const alphaValue = 255;\n for (let i = 0; i < pixelCount; i++) {\n for (let j = 0; j < 3; j++) {\n const index = i * 4 + j;\n array[index] = rgbValue;\n }\n array[i * 4 + 3] = alphaValue;\n }\n\n const ab = array.buffer;\n const realBuffer = ab instanceof ArrayBuffer ? ab : new Uint8Array(array).buffer;\n const blob = new Blob([realBuffer], { type: 'application/octet-stream' });\n return PdfTaskHelper.resolve(blob);\n },\n ),\n renderThumbnail: jest.fn((doc: PdfDocumentObject, page: PdfPageObject) => {\n const thumbnailWidth = page.size.width / 4;\n const thumbnailHeight = page.size.height / 4;\n const pixelCount = thumbnailWidth * thumbnailHeight;\n const array = new Uint8ClampedArray(pixelCount * 4);\n const rgbValue = page.index % 255;\n const alphaValue = 255;\n for (let i = 0; i < pixelCount; i++) {\n for (let j = 0; j < 3; j++) {\n const index = i * 4 + j;\n array[index] = rgbValue;\n }\n array[i * 4 + 3] = alphaValue;\n }\n\n const ab = array.buffer;\n const realBuffer = ab instanceof ArrayBuffer ? ab : new Uint8Array(array).buffer;\n const blob = new Blob([realBuffer], { type: 'image/png' });\n\n return PdfTaskHelper.resolve(blob);\n }),\n renderPageAnnotation: jest.fn(\n (\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfAnnotationObject,\n options?: PdfRenderPageAnnotationOptions,\n ) => {\n return PdfTaskHelper.resolve(new Blob([], { type: 'image/png' }));\n },\n ),\n getAllAnnotations: jest.fn((doc: PdfDocumentObject) => {\n return PdfTaskHelper.resolve({});\n }),\n getPageAnnotations: jest.fn((doc: PdfDocumentObject, page: PdfPageObject) => {\n const link: PdfLinkAnnoObject = {\n pageIndex: page.index,\n id: '1',\n type: PdfAnnotationSubtype.LINK,\n target: {\n type: 'action',\n action: {\n type: PdfActionType.URI,\n uri: 'https://localhost',\n },\n },\n rect: {\n origin: {\n x: 0,\n y: 0,\n },\n size: {\n width: 100,\n height: 100,\n },\n },\n };\n const annotations: PdfAnnotationObject[] = [];\n annotations.push(link);\n return PdfTaskHelper.resolve(annotations);\n }),\n createPageAnnotation: jest.fn(() => {\n return PdfTaskHelper.resolve(uuidV4());\n }),\n updatePageAnnotation: jest.fn(() => {\n return PdfTaskHelper.resolve(true);\n }),\n removePageAnnotation: jest.fn(() => {\n return PdfTaskHelper.resolve(true);\n }),\n getPageTextRects: jest.fn((doc: PdfDocumentObject, page: PdfPageObject) => {\n const textRects: PdfTextRectObject[] = [\n {\n content: 'pdf text',\n font: {\n family: 'sans-serif',\n size: 12,\n },\n rect: {\n origin: {\n x: 0,\n y: 0,\n },\n size: {\n width: 100,\n height: 100,\n },\n },\n },\n ];\n return PdfTaskHelper.resolve(textRects);\n }),\n closeDocument: (pdf: PdfDocumentObject) => {\n return PdfTaskHelper.resolve(true);\n },\n saveAsCopy: (pdf: PdfDocumentObject) => {\n return PdfTaskHelper.resolve(new ArrayBuffer(0));\n },\n flattenPage: (pdf: PdfDocumentObject, page: PdfPageObject, options?: PdfFlattenPageOptions) => {\n return PdfTaskHelper.resolve<PdfPageFlattenResult>(PdfPageFlattenResult.Success);\n },\n extractPages: (pdf: PdfDocumentObject, pageIndexes: number[]) => {\n return PdfTaskHelper.resolve(new ArrayBuffer(0));\n },\n extractText: (pdf: PdfDocumentObject, pageIndexes: number[]) => {\n return PdfTaskHelper.resolve('');\n },\n redactTextInRects: (\n pdf: PdfDocumentObject,\n page: PdfPageObject,\n rects: Rect[],\n options?: PdfRedactTextOptions,\n ) => {\n return PdfTaskHelper.resolve(true);\n },\n getTextSlices: (doc: PdfDocumentObject, slices: PageTextSlice[]) => {\n return PdfTaskHelper.resolve([] as string[]);\n },\n getPageGlyphs: (doc: PdfDocumentObject, page: PdfPageObject) => {\n return PdfTaskHelper.resolve([] as PdfGlyphObject[]);\n },\n getPageGeometry: (doc: PdfDocumentObject, page: PdfPageObject) => {\n return PdfTaskHelper.resolve({\n runs: [],\n } as PdfPageGeometry);\n },\n merge: (files: PdfFile[]) => {\n return PdfTaskHelper.resolve({\n id: 'id',\n content: new ArrayBuffer(0),\n });\n },\n mergePages: (mergeConfigs: Array<{ docId: string; pageIndices: number[] }>) => {\n return PdfTaskHelper.resolve({\n id: 'id',\n content: new ArrayBuffer(0),\n });\n },\n searchAllPages: (\n doc: PdfDocumentObject,\n keyword: string,\n options?: PdfSearchAllPagesOptions,\n ) => {\n // Create a mock search result\n const mockResult: SearchResult = {\n pageIndex: 0,\n charIndex: 0,\n charCount: keyword.length,\n rects: [\n {\n origin: {\n x: 0,\n y: 0,\n },\n size: {\n width: 50,\n height: 20,\n },\n },\n ],\n context: {\n before: '',\n match: '',\n after: '',\n truncatedLeft: false,\n truncatedRight: false,\n },\n };\n\n // Return a mock SearchAllPagesResult with a single result\n return PdfTaskHelper.resolve<SearchAllPagesResult, PdfPageSearchProgress>({\n results: [mockResult],\n total: 1,\n });\n },\n getAttachments: (doc: PdfDocumentObject) => {\n return PdfTaskHelper.resolve([] as PdfAttachmentObject[]);\n },\n readAttachmentContent: (doc: PdfDocumentObject, attachment: PdfAttachmentObject) => {\n return PdfTaskHelper.resolve(new ArrayBuffer(0));\n },\n setFormFieldValue: (\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfWidgetAnnoObject,\n text: FormFieldValue,\n ) => {\n return PdfTaskHelper.resolve(true);\n },\n ...partialEngine,\n };\n\n return engine;\n}\n/**\n * Create mock of pdf document\n * @param doc - partial configuration of document\n * @returns mock of pdf document\n *\n * @public\n */\nexport function createMockPdfDocument(doc?: Partial<PdfDocumentObject>): PdfDocumentObject {\n const pageCount = 10;\n const pageWidth = 100;\n const pageHeight = 200;\n const pages = [];\n for (let i = 0; i < pageCount; i++) {\n pages.push({\n index: i,\n size: {\n width: pageWidth,\n height: pageHeight,\n },\n });\n }\n\n return {\n id: 'id',\n pageCount: pageCount,\n pages: pages,\n ...doc,\n };\n}\n\n/**\n * Create mock of pdf file\n * @param file - partial configuration of file\n * @returns mock of pdf file\n *\n * @public\n */\nexport function createMockPdfFile(file?: Partial<PdfFile>): PdfFile {\n return {\n id: 'id',\n content: new ArrayBuffer(0),\n };\n}\n"],"names":["doc","pages","i","push","index","size","width","height","id","pageCount","partialEngine","engine","openDocumentUrl","jest","fn","file","options","PdfTaskHelper","create","openDocumentBuffer","getMetadata","resolve","title","author","subject","keywords","producer","creator","creationDate","modificationDate","getDocPermissions","getDocUserPermissions","getSignatures","getBookmarks","bookmarks","target","type","destination","pageIndex","zoom","mode","PdfZoomMode","FitPage","view","children","renderPage","page","scaleFactor","rotation","Rotation","Degree0","dpr","pageSize","swap","pixelCount","Math","ceil","array","Uint8ClampedArray","rgbValue","j","ab","buffer","realBuffer","ArrayBuffer","Uint8Array","blob","Blob","renderPageRect","rect","renderThumbnail","renderPageAnnotation","annotation","getAllAnnotations","getPageAnnotations","link","PdfAnnotationSubtype","LINK","action","PdfActionType","URI","uri","origin","x","y","annotations","createPageAnnotation","uuidV4","updatePageAnnotation","removePageAnnotation","getPageTextRects","content","font","family","closeDocument","pdf","saveAsCopy","flattenPage","PdfPageFlattenResult","Success","extractPages","pageIndexes","extractText","redactTextInRects","rects","getTextSlices","slices","getPageGlyphs","getPageGeometry","runs","merge","files","mergePages","mergeConfigs","searchAllPages","keyword","mockResult","charIndex","charCount","length","context","before","match","after","truncatedLeft","truncatedRight","results","total","getAttachments","readAttachmentContent","attachment","setFormFieldValue","text"],"mappings":"osBAyXO,SAA+BA,GACpC,MAGMC,EAAQ,GACd,IAAA,IAASC,EAAI,EAAGA,EAJE,GAIaA,IAC7BD,EAAME,KAAK,CACTC,MAAOF,EACPG,KAAM,CACJC,MAPY,IAQZC,OAPa,OAYZ,MAAA,CACLC,GAAI,KACJC,UAhBgB,GAiBhBR,WACGD,EAEP,8BAjWO,SAA6BU,GAmU3BC,MAlUmB,CACxBC,gBAAiBC,KAAKC,IAAG,CAACC,EAAkBC,IACnCC,EAAAA,cAAcC,WAEvBC,mBAAoBN,KAAKC,IAAG,CAACC,EAAeC,IACnCC,EAAAA,cAAcC,WAEvBE,YAAa,IACJH,EAAAA,cAAcI,QAAQ,CAC3BC,MAAO,QACPC,OAAQ,SACRC,QAAS,UACTC,SAAU,WACVC,SAAU,WACVC,QAAS,UACTC,aAAc,eACdC,iBAAkB,qBAGtBC,kBAAoB9B,GACXiB,EAAAA,cAAcI,QAAQ,YAE/BU,sBAAwB/B,GACfiB,EAAAA,cAAcI,QAAQ,YAE/BW,cAAgBhC,GAEPiB,EAAAA,cAAcI,QADoB,IAG3CY,aAAejC,IACb,MAAMkC,EAAiC,GA4ChCjB,OA3CGiB,EAAA/B,KACR,CACEmB,MAAO,SACPa,OAAQ,CACNC,KAAM,cACNC,YAAa,CACXC,UAAW,EACXC,KAAM,CACJC,KAAMC,EAAAA,YAAYC,SAEpBC,KAAM,MAIZ,CACErB,MAAO,SACPa,OAAQ,CACNC,KAAM,cACNC,YAAa,CACXC,UAAW,EACXC,KAAM,CACJC,KAAMC,EAAAA,YAAYC,SAEpBC,KAAM,KAGVC,SAAU,CACR,CACEtB,MAAO,SACPa,OAAQ,CACNC,KAAM,cACNC,YAAa,CACXC,UAAW,EACXC,KAAM,CACJC,KAAMC,EAAAA,YAAYC,SAEpBC,KAAM,SAOX1B,EAAAA,cAAcI,QAAQ,CAC3Ba,aACD,EAEHW,WAAYhC,KAAKC,IACf,CAACd,EAAwB8C,EAAqB9B,KACtC,MAAA+B,YAAEA,EAAc,EAAAC,SAAGA,EAAWC,EAAAA,SAASC,QAAAC,IAASA,EAAM,GAAMnC,GAAW,CAAC,EACxEoC,EAAWJ,EAAW,GAAM,EAAIF,EAAKzC,KAAOgD,EAAAA,KAAKP,EAAKzC,MAKtDiD,EAHGC,KAAKC,KAAKJ,EAAS9C,MAAQyC,GAC1BQ,KAAKC,KAAKJ,EAAS7C,OAASwC,GAGhCU,EAAQ,IAAIC,kBAA+B,EAAbJ,GAC9BK,EAAWb,EAAK1C,MAAQ,IAE9B,IAAA,IAASF,EAAI,EAAGA,EAAIoD,EAAYpD,IAAK,CACnC,IAAA,IAAS0D,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAE1BH,EADkB,EAAJvD,EAAQ0D,GACPD,CAAA,CAEXF,EAAI,EAAJvD,EAAQ,GANG,GAME,CAGrB,MAAM2D,EAAKJ,EAAMK,OACXC,EAAaF,aAAcG,YAAcH,EAAK,IAAII,WAAWR,GAAOK,OACpEI,EAAO,IAAIC,KAAK,CAACJ,GAAa,CAAE3B,KAAM,6BACrCnB,OAAAA,EAAAA,cAAcI,QAAQ6C,EAAI,IAGrCE,eAAgBvD,KAAKC,IACnB,CAACd,EAAwB8C,EAAqBuB,EAAYrD,KAClD,MAAA+B,YAAEA,EAAc,EAAAC,SAAGA,EAAWC,EAAAA,SAASC,QAAAC,IAASA,EAAM,GAAMnC,GAAW,CAAC,EACxEoC,EAAWJ,EAAW,GAAM,EAAIF,EAAKzC,KAAOgD,EAAAA,KAAKP,EAAKzC,MAKtDiD,EAHGC,KAAKC,KAAKJ,EAAS9C,MAAQyC,GAC1BQ,KAAKC,KAAKJ,EAAS7C,OAASwC,GAGhCU,EAAQ,IAAIC,kBAA+B,EAAbJ,GAC9BK,EAAWb,EAAK1C,MAAQ,IAE9B,IAAA,IAASF,EAAI,EAAGA,EAAIoD,EAAYpD,IAAK,CACnC,IAAA,IAAS0D,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAE1BH,EADkB,EAAJvD,EAAQ0D,GACPD,CAAA,CAEXF,EAAI,EAAJvD,EAAQ,GANG,GAME,CAGrB,MAAM2D,EAAKJ,EAAMK,OACXC,EAAaF,aAAcG,YAAcH,EAAK,IAAII,WAAWR,GAAOK,OACpEI,EAAO,IAAIC,KAAK,CAACJ,GAAa,CAAE3B,KAAM,6BACrCnB,OAAAA,EAAAA,cAAcI,QAAQ6C,EAAI,IAGrCI,gBAAiBzD,KAAKC,IAAG,CAACd,EAAwB8C,KAC1C,MAEAQ,EAFiBR,EAAKzC,KAAKC,MAAQ,GACjBwC,EAAKzC,KAAKE,OAAS,GAErCkD,EAAQ,IAAIC,kBAA+B,EAAbJ,GAC9BK,EAAWb,EAAK1C,MAAQ,IAE9B,IAAA,IAASF,EAAI,EAAGA,EAAIoD,EAAYpD,IAAK,CACnC,IAAA,IAAS0D,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAE1BH,EADkB,EAAJvD,EAAQ0D,GACPD,CAAA,CAEXF,EAAI,EAAJvD,EAAQ,GANG,GAME,CAGrB,MAAM2D,EAAKJ,EAAMK,OACXC,EAAaF,aAAcG,YAAcH,EAAK,IAAII,WAAWR,GAAOK,OACpEI,EAAO,IAAIC,KAAK,CAACJ,GAAa,CAAE3B,KAAM,cAErCnB,OAAAA,EAAAA,cAAcI,QAAQ6C,EAAI,IAEnCK,qBAAsB1D,KAAKC,IACzB,CACEd,EACA8C,EACA0B,EACAxD,IAEOC,EAAAA,cAAcI,QAAQ,IAAI8C,KAAK,GAAI,CAAE/B,KAAM,iBAGtDqC,kBAAmB5D,KAAKC,IAAId,GACnBiB,EAAAA,cAAcI,QAAQ,MAE/BqD,mBAAoB7D,KAAKC,IAAG,CAACd,EAAwB8C,KACnD,MAAM6B,EAA0B,CAC9BrC,UAAWQ,EAAK1C,MAChBI,GAAI,IACJ4B,KAAMwC,EAAqBA,qBAAAC,KAC3B1C,OAAQ,CACNC,KAAM,SACN0C,OAAQ,CACN1C,KAAM2C,EAAcA,cAAAC,IACpBC,IAAK,sBAGTZ,KAAM,CACJa,OAAQ,CACNC,EAAG,EACHC,EAAG,GAEL/E,KAAM,CACJC,MAAO,IACPC,OAAQ,OAIR8E,EAAqC,GAEpCpE,OADPoE,EAAYlF,KAAKwE,GACV1D,EAAAA,cAAcI,QAAQgE,EAAW,IAE1CC,qBAAsBzE,KAAKC,IAAG,IACrBG,EAAAA,cAAcI,QAAQkE,EAAAA,YAE/BC,qBAAsB3E,KAAKC,IAAG,IACrBG,EAAAA,cAAcI,SAAQ,KAE/BoE,qBAAsB5E,KAAKC,IAAG,IACrBG,EAAAA,cAAcI,SAAQ,KAE/BqE,iBAAkB7E,KAAKC,IAAG,CAACd,EAAwB8C,IAoB1C7B,EAAAA,cAAcI,QAnBkB,CACrC,CACEsE,QAAS,WACTC,KAAM,CACJC,OAAQ,aACRxF,KAAM,IAERgE,KAAM,CACJa,OAAQ,CACNC,EAAG,EACHC,EAAG,GAEL/E,KAAM,CACJC,MAAO,IACPC,OAAQ,WAOlBuF,cAAgBC,GACP9E,EAAAA,cAAcI,SAAQ,GAE/B2E,WAAaD,GACJ9E,EAAcA,cAAAI,QAAQ,IAAI2C,YAAY,IAE/CiC,YAAa,CAACF,EAAwBjD,EAAqB9B,IAClDC,gBAAcI,QAA8B6E,EAAAA,qBAAqBC,SAE1EC,aAAc,CAACL,EAAwBM,IAC9BpF,EAAcA,cAAAI,QAAQ,IAAI2C,YAAY,IAE/CsC,YAAa,CAACP,EAAwBM,IAC7BpF,EAAAA,cAAcI,QAAQ,IAE/BkF,kBAAmB,CACjBR,EACAjD,EACA0D,EACAxF,IAEOC,EAAAA,cAAcI,SAAQ,GAE/BoF,cAAe,CAACzG,EAAwB0G,IAC/BzF,EAAAA,cAAcI,QAAQ,IAE/BsF,cAAe,CAAC3G,EAAwB8C,IAC/B7B,EAAAA,cAAcI,QAAQ,IAE/BuF,gBAAiB,CAAC5G,EAAwB8C,IACjC7B,EAAAA,cAAcI,QAAQ,CAC3BwF,KAAM,KAGVC,MAAQC,GACC9F,EAAAA,cAAcI,QAAQ,CAC3Bb,GAAI,KACJmF,QAAS,IAAI3B,YAAY,KAG7BgD,WAAaC,GACJhG,EAAAA,cAAcI,QAAQ,CAC3Bb,GAAI,KACJmF,QAAS,IAAI3B,YAAY,KAG7BkD,eAAgB,CACdlH,EACAmH,EACAnG,KAGA,MAAMoG,EAA2B,CAC/B9E,UAAW,EACX+E,UAAW,EACXC,UAAWH,EAAQI,OACnBf,MAAO,CACL,CACEtB,OAAQ,CACNC,EAAG,EACHC,EAAG,GAEL/E,KAAM,CACJC,MAAO,GACPC,OAAQ,MAIdiH,QAAS,CACPC,OAAQ,GACRC,MAAO,GACPC,MAAO,GACPC,eAAe,EACfC,gBAAgB,IAKb5G,OAAAA,EAAAA,cAAcI,QAAqD,CACxEyG,QAAS,CAACV,GACVW,MAAO,GACR,EAEHC,eAAiBhI,GACRiB,EAAAA,cAAcI,QAAQ,IAE/B4G,sBAAuB,CAACjI,EAAwBkI,IACvCjH,EAAcA,cAAAI,QAAQ,IAAI2C,YAAY,IAE/CmE,kBAAmB,CACjBnI,EACA8C,EACA0B,EACA4D,IAEOnH,EAAAA,cAAcI,SAAQ,MAE5BX,EAIP,4BAsCO,SAA2BK,GACzB,MAAA,CACLP,GAAI,KACJmF,QAAS,IAAI3B,YAAY,GAE7B"}
|
package/dist/index.js
CHANGED
|
@@ -1,16 +1,13 @@
|
|
|
1
|
-
import { B, a, P, R, b, c, r } from "./engine-
|
|
2
|
-
import { E, P as P2 } from "./runner-
|
|
1
|
+
import { B, a, P, R, b, c, r } from "./engine-DMU8HkGx.js";
|
|
2
|
+
import { E, P as P2 } from "./runner-TzQFlVIQ.js";
|
|
3
3
|
import { WebWorkerEngine, WorkerTask } from "./lib/webworker/engine.js";
|
|
4
|
-
import { PdfTaskHelper, PdfActionType, PdfAnnotationSubtype, swap, PdfPageFlattenResult, PdfZoomMode } from "@embedpdf/models";
|
|
4
|
+
import { PdfTaskHelper, uuidV4, PdfActionType, PdfAnnotationSubtype, Rotation, swap, PdfPageFlattenResult, PdfZoomMode } from "@embedpdf/models";
|
|
5
5
|
function createMockPdfEngine(partialEngine) {
|
|
6
6
|
const engine = {
|
|
7
7
|
openDocumentUrl: jest.fn((file, options) => {
|
|
8
8
|
return PdfTaskHelper.create();
|
|
9
9
|
}),
|
|
10
|
-
|
|
11
|
-
return PdfTaskHelper.create();
|
|
12
|
-
}),
|
|
13
|
-
openDocumentFromLoader: jest.fn((file, password) => {
|
|
10
|
+
openDocumentBuffer: jest.fn((file, options) => {
|
|
14
11
|
return PdfTaskHelper.create();
|
|
15
12
|
}),
|
|
16
13
|
getMetadata: () => {
|
|
@@ -85,7 +82,8 @@ function createMockPdfEngine(partialEngine) {
|
|
|
85
82
|
});
|
|
86
83
|
},
|
|
87
84
|
renderPage: jest.fn(
|
|
88
|
-
(doc, page,
|
|
85
|
+
(doc, page, options) => {
|
|
86
|
+
const { scaleFactor = 1, rotation = Rotation.Degree0, dpr = 1 } = options ?? {};
|
|
89
87
|
const pageSize = rotation % 2 === 0 ? page.size : swap(page.size);
|
|
90
88
|
const imageSize = {
|
|
91
89
|
width: Math.ceil(pageSize.width * scaleFactor),
|
|
@@ -109,7 +107,8 @@ function createMockPdfEngine(partialEngine) {
|
|
|
109
107
|
}
|
|
110
108
|
),
|
|
111
109
|
renderPageRect: jest.fn(
|
|
112
|
-
(doc, page,
|
|
110
|
+
(doc, page, rect, options) => {
|
|
111
|
+
const { scaleFactor = 1, rotation = Rotation.Degree0, dpr = 1 } = options ?? {};
|
|
113
112
|
const pageSize = rotation % 2 === 0 ? page.size : swap(page.size);
|
|
114
113
|
const imageSize = {
|
|
115
114
|
width: Math.ceil(pageSize.width * scaleFactor),
|
|
@@ -151,8 +150,8 @@ function createMockPdfEngine(partialEngine) {
|
|
|
151
150
|
const blob = new Blob([realBuffer], { type: "image/png" });
|
|
152
151
|
return PdfTaskHelper.resolve(blob);
|
|
153
152
|
}),
|
|
154
|
-
|
|
155
|
-
(doc, page, annotation,
|
|
153
|
+
renderPageAnnotation: jest.fn(
|
|
154
|
+
(doc, page, annotation, options) => {
|
|
156
155
|
return PdfTaskHelper.resolve(new Blob([], { type: "image/png" }));
|
|
157
156
|
}
|
|
158
157
|
),
|
|
@@ -162,7 +161,7 @@ function createMockPdfEngine(partialEngine) {
|
|
|
162
161
|
getPageAnnotations: jest.fn((doc, page) => {
|
|
163
162
|
const link = {
|
|
164
163
|
pageIndex: page.index,
|
|
165
|
-
id:
|
|
164
|
+
id: "1",
|
|
166
165
|
type: PdfAnnotationSubtype.LINK,
|
|
167
166
|
target: {
|
|
168
167
|
type: "action",
|
|
@@ -171,7 +170,6 @@ function createMockPdfEngine(partialEngine) {
|
|
|
171
170
|
uri: "https://localhost"
|
|
172
171
|
}
|
|
173
172
|
},
|
|
174
|
-
text: "localhost",
|
|
175
173
|
rect: {
|
|
176
174
|
origin: {
|
|
177
175
|
x: 0,
|
|
@@ -188,7 +186,7 @@ function createMockPdfEngine(partialEngine) {
|
|
|
188
186
|
return PdfTaskHelper.resolve(annotations);
|
|
189
187
|
}),
|
|
190
188
|
createPageAnnotation: jest.fn(() => {
|
|
191
|
-
return PdfTaskHelper.resolve(
|
|
189
|
+
return PdfTaskHelper.resolve(uuidV4());
|
|
192
190
|
}),
|
|
193
191
|
updatePageAnnotation: jest.fn(() => {
|
|
194
192
|
return PdfTaskHelper.resolve(true);
|
|
@@ -196,37 +194,35 @@ function createMockPdfEngine(partialEngine) {
|
|
|
196
194
|
removePageAnnotation: jest.fn(() => {
|
|
197
195
|
return PdfTaskHelper.resolve(true);
|
|
198
196
|
}),
|
|
199
|
-
getPageTextRects: jest.fn(
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
197
|
+
getPageTextRects: jest.fn((doc, page) => {
|
|
198
|
+
const textRects = [
|
|
199
|
+
{
|
|
200
|
+
content: "pdf text",
|
|
201
|
+
font: {
|
|
202
|
+
family: "sans-serif",
|
|
203
|
+
size: 12
|
|
204
|
+
},
|
|
205
|
+
rect: {
|
|
206
|
+
origin: {
|
|
207
|
+
x: 0,
|
|
208
|
+
y: 0
|
|
207
209
|
},
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
y: 0
|
|
212
|
-
},
|
|
213
|
-
size: {
|
|
214
|
-
width: 100,
|
|
215
|
-
height: 100
|
|
216
|
-
}
|
|
210
|
+
size: {
|
|
211
|
+
width: 100,
|
|
212
|
+
height: 100
|
|
217
213
|
}
|
|
218
214
|
}
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
),
|
|
215
|
+
}
|
|
216
|
+
];
|
|
217
|
+
return PdfTaskHelper.resolve(textRects);
|
|
218
|
+
}),
|
|
223
219
|
closeDocument: (pdf) => {
|
|
224
220
|
return PdfTaskHelper.resolve(true);
|
|
225
221
|
},
|
|
226
222
|
saveAsCopy: (pdf) => {
|
|
227
223
|
return PdfTaskHelper.resolve(new ArrayBuffer(0));
|
|
228
224
|
},
|
|
229
|
-
flattenPage: (pdf, page,
|
|
225
|
+
flattenPage: (pdf, page, options) => {
|
|
230
226
|
return PdfTaskHelper.resolve(PdfPageFlattenResult.Success);
|
|
231
227
|
},
|
|
232
228
|
extractPages: (pdf, pageIndexes) => {
|
|
@@ -235,6 +231,9 @@ function createMockPdfEngine(partialEngine) {
|
|
|
235
231
|
extractText: (pdf, pageIndexes) => {
|
|
236
232
|
return PdfTaskHelper.resolve("");
|
|
237
233
|
},
|
|
234
|
+
redactTextInRects: (pdf, page, rects, options) => {
|
|
235
|
+
return PdfTaskHelper.resolve(true);
|
|
236
|
+
},
|
|
238
237
|
getTextSlices: (doc, slices) => {
|
|
239
238
|
return PdfTaskHelper.resolve([]);
|
|
240
239
|
},
|
|
@@ -258,7 +257,7 @@ function createMockPdfEngine(partialEngine) {
|
|
|
258
257
|
content: new ArrayBuffer(0)
|
|
259
258
|
});
|
|
260
259
|
},
|
|
261
|
-
searchAllPages: (doc, keyword,
|
|
260
|
+
searchAllPages: (doc, keyword, options) => {
|
|
262
261
|
const mockResult = {
|
|
263
262
|
pageIndex: 0,
|
|
264
263
|
charIndex: 0,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/lib/mock/index.ts"],"sourcesContent":["import {\n PdfDocumentObject,\n PdfEngine,\n PdfPageObject,\n PdfAnnotationSubtype,\n PdfLinkAnnoObject,\n Rotation,\n swap,\n PdfZoomMode,\n PdfActionType,\n PdfAnnotationObject,\n PdfBookmarkObject,\n PdfTextRectObject,\n SearchTarget,\n SearchResult,\n PdfAttachmentObject,\n PdfSignatureObject,\n Rect,\n PdfRenderOptions,\n PdfFile,\n PdfAnnotationObjectStatus,\n PdfWidgetAnnoObject,\n FormFieldValue,\n PdfTaskHelper,\n PdfPageFlattenFlag,\n PdfPageFlattenResult,\n PdfFileLoader,\n SearchAllPagesResult,\n MatchFlag,\n Task,\n Logger,\n NoopLogger,\n PdfAnnotationTransformation,\n PdfEngineError,\n PdfMetadataObject,\n PdfErrorCode,\n PdfErrorReason,\n PdfBookmarksObject,\n PdfUrlOptions,\n PdfFileUrl,\n PdfGlyphObject,\n PdfPageGeometry,\n PageTextSlice,\n PdfAnnotationObjectBase,\n PdfAlphaColor,\n WebAlphaColor,\n AppearanceMode,\n ImageConversionTypes,\n} from '@embedpdf/models';\n\n/**\n * Create mock of pdf engine\n * @param partialEngine - partial configuration of engine\n * @returns - mock of pdf engine\n *\n * @public\n */\nexport function createMockPdfEngine(partialEngine?: Partial<PdfEngine>): PdfEngine {\n const engine: PdfEngine = {\n openDocumentUrl: jest.fn((file: PdfFileUrl, options?: PdfUrlOptions) => {\n return PdfTaskHelper.create();\n }),\n openDocumentFromBuffer: jest.fn((file: PdfFile, password: string) => {\n return PdfTaskHelper.create();\n }),\n openDocumentFromLoader: jest.fn((file: PdfFileLoader, password: string) => {\n return PdfTaskHelper.create();\n }),\n getMetadata: () => {\n return PdfTaskHelper.resolve({\n title: 'title',\n author: 'author',\n subject: 'subject',\n keywords: 'keywords',\n producer: 'producer',\n creator: 'creator',\n creationDate: 'creationDate',\n modificationDate: 'modificationDate',\n });\n },\n getDocPermissions: (doc: PdfDocumentObject) => {\n return PdfTaskHelper.resolve(0xffffffff);\n },\n getDocUserPermissions: (doc: PdfDocumentObject) => {\n return PdfTaskHelper.resolve(0xffffffff);\n },\n getSignatures: (doc: PdfDocumentObject) => {\n const signatures: PdfSignatureObject[] = [];\n return PdfTaskHelper.resolve(signatures);\n },\n getBookmarks: (doc: PdfDocumentObject) => {\n const bookmarks: PdfBookmarkObject[] = [];\n bookmarks.push(\n {\n title: 'Page 1',\n target: {\n type: 'destination',\n destination: {\n pageIndex: 1,\n zoom: {\n mode: PdfZoomMode.FitPage,\n },\n view: [],\n },\n },\n },\n {\n title: 'Page 2',\n target: {\n type: 'destination',\n destination: {\n pageIndex: 2,\n zoom: {\n mode: PdfZoomMode.FitPage,\n },\n view: [],\n },\n },\n children: [\n {\n title: 'Page 3',\n target: {\n type: 'destination',\n destination: {\n pageIndex: 3,\n zoom: {\n mode: PdfZoomMode.FitPage,\n },\n view: [],\n },\n },\n },\n ],\n },\n );\n return PdfTaskHelper.resolve({\n bookmarks,\n });\n },\n renderPage: jest.fn(\n (\n doc: PdfDocumentObject,\n page: PdfPageObject,\n scaleFactor: number,\n rotation: Rotation,\n dpr: number,\n options: PdfRenderOptions,\n ) => {\n const pageSize = rotation % 2 === 0 ? page.size : swap(page.size);\n const imageSize = {\n width: Math.ceil(pageSize.width * scaleFactor),\n height: Math.ceil(pageSize.height * scaleFactor),\n };\n const pixelCount = imageSize.width * imageSize.height;\n const array = new Uint8ClampedArray(pixelCount * 4);\n const rgbValue = page.index % 255;\n const alphaValue = 255;\n for (let i = 0; i < pixelCount; i++) {\n for (let j = 0; j < 3; j++) {\n const index = i * 4 + j;\n array[index] = rgbValue;\n }\n array[i * 4 + 3] = alphaValue;\n }\n\n const ab = array.buffer;\n const realBuffer = ab instanceof ArrayBuffer ? ab : new Uint8Array(array).buffer;\n const blob = new Blob([realBuffer], { type: 'application/octet-stream' });\n return PdfTaskHelper.resolve(blob);\n },\n ),\n renderPageRect: jest.fn(\n (\n doc: PdfDocumentObject,\n page: PdfPageObject,\n scaleFactor: number,\n rotation: Rotation,\n dpr: number,\n rect: Rect,\n options: PdfRenderOptions,\n ) => {\n const pageSize = rotation % 2 === 0 ? page.size : swap(page.size);\n const imageSize = {\n width: Math.ceil(pageSize.width * scaleFactor),\n height: Math.ceil(pageSize.height * scaleFactor),\n };\n const pixelCount = imageSize.width * imageSize.height;\n const array = new Uint8ClampedArray(pixelCount * 4);\n const rgbValue = page.index % 255;\n const alphaValue = 255;\n for (let i = 0; i < pixelCount; i++) {\n for (let j = 0; j < 3; j++) {\n const index = i * 4 + j;\n array[index] = rgbValue;\n }\n array[i * 4 + 3] = alphaValue;\n }\n\n const ab = array.buffer;\n const realBuffer = ab instanceof ArrayBuffer ? ab : new Uint8Array(array).buffer;\n const blob = new Blob([realBuffer], { type: 'application/octet-stream' });\n return PdfTaskHelper.resolve(blob);\n },\n ),\n renderThumbnail: jest.fn((doc: PdfDocumentObject, page: PdfPageObject) => {\n const thumbnailWidth = page.size.width / 4;\n const thumbnailHeight = page.size.height / 4;\n const pixelCount = thumbnailWidth * thumbnailHeight;\n const array = new Uint8ClampedArray(pixelCount * 4);\n const rgbValue = page.index % 255;\n const alphaValue = 255;\n for (let i = 0; i < pixelCount; i++) {\n for (let j = 0; j < 3; j++) {\n const index = i * 4 + j;\n array[index] = rgbValue;\n }\n array[i * 4 + 3] = alphaValue;\n }\n\n const ab = array.buffer;\n const realBuffer = ab instanceof ArrayBuffer ? ab : new Uint8Array(array).buffer;\n const blob = new Blob([realBuffer], { type: 'image/png' });\n\n return PdfTaskHelper.resolve(blob);\n }),\n renderAnnotation: jest.fn(\n (\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfAnnotationObject,\n scaleFactor: number,\n rotation: Rotation,\n dpr: number,\n mode: AppearanceMode,\n imageType: ImageConversionTypes,\n ) => {\n return PdfTaskHelper.resolve(new Blob([], { type: 'image/png' }));\n },\n ),\n getAllAnnotations: jest.fn((doc: PdfDocumentObject) => {\n return PdfTaskHelper.resolve({});\n }),\n getPageAnnotations: jest.fn((doc: PdfDocumentObject, page: PdfPageObject) => {\n const link: PdfLinkAnnoObject = {\n pageIndex: page.index,\n id: page.index + 1,\n type: PdfAnnotationSubtype.LINK,\n target: {\n type: 'action',\n action: {\n type: PdfActionType.URI,\n uri: 'https://localhost',\n },\n },\n text: 'localhost',\n rect: {\n origin: {\n x: 0,\n y: 0,\n },\n size: {\n width: 100,\n height: 100,\n },\n },\n };\n const annotations: PdfAnnotationObject[] = [];\n annotations.push(link);\n return PdfTaskHelper.resolve(annotations);\n }),\n createPageAnnotation: jest.fn(() => {\n return PdfTaskHelper.resolve(1);\n }),\n updatePageAnnotation: jest.fn(() => {\n return PdfTaskHelper.resolve(true);\n }),\n removePageAnnotation: jest.fn(() => {\n return PdfTaskHelper.resolve(true);\n }),\n getPageTextRects: jest.fn(\n (doc: PdfDocumentObject, page: PdfPageObject, scaleFactor: number, rotation: Rotation) => {\n const textRects: PdfTextRectObject[] = [\n {\n content: 'pdf text',\n font: {\n family: 'sans-serif',\n size: 12,\n },\n rect: {\n origin: {\n x: 0,\n y: 0,\n },\n size: {\n width: 100,\n height: 100,\n },\n },\n },\n ];\n return PdfTaskHelper.resolve(textRects);\n },\n ),\n closeDocument: (pdf: PdfDocumentObject) => {\n return PdfTaskHelper.resolve(true);\n },\n saveAsCopy: (pdf: PdfDocumentObject) => {\n return PdfTaskHelper.resolve(new ArrayBuffer(0));\n },\n flattenPage: (pdf: PdfDocumentObject, page: PdfPageObject, flag: PdfPageFlattenFlag) => {\n return PdfTaskHelper.resolve<PdfPageFlattenResult>(PdfPageFlattenResult.Success);\n },\n extractPages: (pdf: PdfDocumentObject, pageIndexes: number[]) => {\n return PdfTaskHelper.resolve(new ArrayBuffer(0));\n },\n extractText: (pdf: PdfDocumentObject, pageIndexes: number[]) => {\n return PdfTaskHelper.resolve('');\n },\n getTextSlices: (doc: PdfDocumentObject, slices: PageTextSlice[]) => {\n return PdfTaskHelper.resolve([] as string[]);\n },\n getPageGlyphs: (doc: PdfDocumentObject, page: PdfPageObject) => {\n return PdfTaskHelper.resolve([] as PdfGlyphObject[]);\n },\n getPageGeometry: (doc: PdfDocumentObject, page: PdfPageObject) => {\n return PdfTaskHelper.resolve({\n runs: [],\n } as PdfPageGeometry);\n },\n merge: (files: PdfFile[]) => {\n return PdfTaskHelper.resolve({\n id: 'id',\n content: new ArrayBuffer(0),\n });\n },\n mergePages: (mergeConfigs: Array<{ docId: string; pageIndices: number[] }>) => {\n return PdfTaskHelper.resolve({\n id: 'id',\n content: new ArrayBuffer(0),\n });\n },\n searchAllPages: (doc: PdfDocumentObject, keyword: string, flags?: MatchFlag[]) => {\n // Create a mock search result\n const mockResult: SearchResult = {\n pageIndex: 0,\n charIndex: 0,\n charCount: keyword.length,\n rects: [\n {\n origin: {\n x: 0,\n y: 0,\n },\n size: {\n width: 50,\n height: 20,\n },\n },\n ],\n context: {\n before: '',\n match: '',\n after: '',\n truncatedLeft: false,\n truncatedRight: false,\n },\n };\n\n // Return a mock SearchAllPagesResult with a single result\n return PdfTaskHelper.resolve<SearchAllPagesResult>({\n results: [mockResult],\n total: 1,\n });\n },\n getAttachments: (doc: PdfDocumentObject) => {\n return PdfTaskHelper.resolve([] as PdfAttachmentObject[]);\n },\n readAttachmentContent: (doc: PdfDocumentObject, attachment: PdfAttachmentObject) => {\n return PdfTaskHelper.resolve(new ArrayBuffer(0));\n },\n setFormFieldValue: (\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfWidgetAnnoObject,\n text: FormFieldValue,\n ) => {\n return PdfTaskHelper.resolve(true);\n },\n ...partialEngine,\n };\n\n return engine;\n}\n/**\n * Create mock of pdf document\n * @param doc - partial configuration of document\n * @returns mock of pdf document\n *\n * @public\n */\nexport function createMockPdfDocument(doc?: Partial<PdfDocumentObject>): PdfDocumentObject {\n const pageCount = 10;\n const pageWidth = 100;\n const pageHeight = 200;\n const pages = [];\n for (let i = 0; i < pageCount; i++) {\n pages.push({\n index: i,\n size: {\n width: pageWidth,\n height: pageHeight,\n },\n });\n }\n\n return {\n id: 'id',\n pageCount: pageCount,\n pages: pages,\n ...doc,\n };\n}\n\n/**\n * Create mock of pdf file\n * @param file - partial configuration of file\n * @returns mock of pdf file\n *\n * @public\n */\nexport function createMockPdfFile(file?: Partial<PdfFile>): PdfFile {\n return {\n id: 'id',\n content: new ArrayBuffer(0),\n };\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/lib/mock/index.ts"],"sourcesContent":["import {\n PdfDocumentObject,\n PdfEngine,\n PdfPageObject,\n PdfAnnotationSubtype,\n PdfLinkAnnoObject,\n Rotation,\n swap,\n PdfZoomMode,\n PdfActionType,\n PdfAnnotationObject,\n PdfBookmarkObject,\n PdfTextRectObject,\n SearchResult,\n PdfAttachmentObject,\n PdfSignatureObject,\n Rect,\n PdfFile,\n PdfWidgetAnnoObject,\n FormFieldValue,\n PdfTaskHelper,\n PdfPageFlattenResult,\n SearchAllPagesResult,\n PdfOpenDocumentUrlOptions,\n PdfFileUrl,\n PdfGlyphObject,\n PdfPageGeometry,\n PageTextSlice,\n PdfPageSearchProgress,\n PdfRenderPageOptions,\n PdfRenderPageAnnotationOptions,\n PdfFlattenPageOptions,\n PdfRedactTextOptions,\n PdfSearchAllPagesOptions,\n PdfOpenDocumentBufferOptions,\n uuidV4,\n} from '@embedpdf/models';\n\n/**\n * Create mock of pdf engine\n * @param partialEngine - partial configuration of engine\n * @returns - mock of pdf engine\n *\n * @public\n */\nexport function createMockPdfEngine(partialEngine?: Partial<PdfEngine>): PdfEngine {\n const engine: PdfEngine = {\n openDocumentUrl: jest.fn((file: PdfFileUrl, options?: PdfOpenDocumentUrlOptions) => {\n return PdfTaskHelper.create();\n }),\n openDocumentBuffer: jest.fn((file: PdfFile, options?: PdfOpenDocumentBufferOptions) => {\n return PdfTaskHelper.create();\n }),\n getMetadata: () => {\n return PdfTaskHelper.resolve({\n title: 'title',\n author: 'author',\n subject: 'subject',\n keywords: 'keywords',\n producer: 'producer',\n creator: 'creator',\n creationDate: 'creationDate',\n modificationDate: 'modificationDate',\n });\n },\n getDocPermissions: (doc: PdfDocumentObject) => {\n return PdfTaskHelper.resolve(0xffffffff);\n },\n getDocUserPermissions: (doc: PdfDocumentObject) => {\n return PdfTaskHelper.resolve(0xffffffff);\n },\n getSignatures: (doc: PdfDocumentObject) => {\n const signatures: PdfSignatureObject[] = [];\n return PdfTaskHelper.resolve(signatures);\n },\n getBookmarks: (doc: PdfDocumentObject) => {\n const bookmarks: PdfBookmarkObject[] = [];\n bookmarks.push(\n {\n title: 'Page 1',\n target: {\n type: 'destination',\n destination: {\n pageIndex: 1,\n zoom: {\n mode: PdfZoomMode.FitPage,\n },\n view: [],\n },\n },\n },\n {\n title: 'Page 2',\n target: {\n type: 'destination',\n destination: {\n pageIndex: 2,\n zoom: {\n mode: PdfZoomMode.FitPage,\n },\n view: [],\n },\n },\n children: [\n {\n title: 'Page 3',\n target: {\n type: 'destination',\n destination: {\n pageIndex: 3,\n zoom: {\n mode: PdfZoomMode.FitPage,\n },\n view: [],\n },\n },\n },\n ],\n },\n );\n return PdfTaskHelper.resolve({\n bookmarks,\n });\n },\n renderPage: jest.fn(\n (doc: PdfDocumentObject, page: PdfPageObject, options?: PdfRenderPageOptions) => {\n const { scaleFactor = 1, rotation = Rotation.Degree0, dpr = 1 } = options ?? {};\n const pageSize = rotation % 2 === 0 ? page.size : swap(page.size);\n const imageSize = {\n width: Math.ceil(pageSize.width * scaleFactor),\n height: Math.ceil(pageSize.height * scaleFactor),\n };\n const pixelCount = imageSize.width * imageSize.height;\n const array = new Uint8ClampedArray(pixelCount * 4);\n const rgbValue = page.index % 255;\n const alphaValue = 255;\n for (let i = 0; i < pixelCount; i++) {\n for (let j = 0; j < 3; j++) {\n const index = i * 4 + j;\n array[index] = rgbValue;\n }\n array[i * 4 + 3] = alphaValue;\n }\n\n const ab = array.buffer;\n const realBuffer = ab instanceof ArrayBuffer ? ab : new Uint8Array(array).buffer;\n const blob = new Blob([realBuffer], { type: 'application/octet-stream' });\n return PdfTaskHelper.resolve(blob);\n },\n ),\n renderPageRect: jest.fn(\n (doc: PdfDocumentObject, page: PdfPageObject, rect: Rect, options?: PdfRenderPageOptions) => {\n const { scaleFactor = 1, rotation = Rotation.Degree0, dpr = 1 } = options ?? {};\n const pageSize = rotation % 2 === 0 ? page.size : swap(page.size);\n const imageSize = {\n width: Math.ceil(pageSize.width * scaleFactor),\n height: Math.ceil(pageSize.height * scaleFactor),\n };\n const pixelCount = imageSize.width * imageSize.height;\n const array = new Uint8ClampedArray(pixelCount * 4);\n const rgbValue = page.index % 255;\n const alphaValue = 255;\n for (let i = 0; i < pixelCount; i++) {\n for (let j = 0; j < 3; j++) {\n const index = i * 4 + j;\n array[index] = rgbValue;\n }\n array[i * 4 + 3] = alphaValue;\n }\n\n const ab = array.buffer;\n const realBuffer = ab instanceof ArrayBuffer ? ab : new Uint8Array(array).buffer;\n const blob = new Blob([realBuffer], { type: 'application/octet-stream' });\n return PdfTaskHelper.resolve(blob);\n },\n ),\n renderThumbnail: jest.fn((doc: PdfDocumentObject, page: PdfPageObject) => {\n const thumbnailWidth = page.size.width / 4;\n const thumbnailHeight = page.size.height / 4;\n const pixelCount = thumbnailWidth * thumbnailHeight;\n const array = new Uint8ClampedArray(pixelCount * 4);\n const rgbValue = page.index % 255;\n const alphaValue = 255;\n for (let i = 0; i < pixelCount; i++) {\n for (let j = 0; j < 3; j++) {\n const index = i * 4 + j;\n array[index] = rgbValue;\n }\n array[i * 4 + 3] = alphaValue;\n }\n\n const ab = array.buffer;\n const realBuffer = ab instanceof ArrayBuffer ? ab : new Uint8Array(array).buffer;\n const blob = new Blob([realBuffer], { type: 'image/png' });\n\n return PdfTaskHelper.resolve(blob);\n }),\n renderPageAnnotation: jest.fn(\n (\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfAnnotationObject,\n options?: PdfRenderPageAnnotationOptions,\n ) => {\n return PdfTaskHelper.resolve(new Blob([], { type: 'image/png' }));\n },\n ),\n getAllAnnotations: jest.fn((doc: PdfDocumentObject) => {\n return PdfTaskHelper.resolve({});\n }),\n getPageAnnotations: jest.fn((doc: PdfDocumentObject, page: PdfPageObject) => {\n const link: PdfLinkAnnoObject = {\n pageIndex: page.index,\n id: '1',\n type: PdfAnnotationSubtype.LINK,\n target: {\n type: 'action',\n action: {\n type: PdfActionType.URI,\n uri: 'https://localhost',\n },\n },\n rect: {\n origin: {\n x: 0,\n y: 0,\n },\n size: {\n width: 100,\n height: 100,\n },\n },\n };\n const annotations: PdfAnnotationObject[] = [];\n annotations.push(link);\n return PdfTaskHelper.resolve(annotations);\n }),\n createPageAnnotation: jest.fn(() => {\n return PdfTaskHelper.resolve(uuidV4());\n }),\n updatePageAnnotation: jest.fn(() => {\n return PdfTaskHelper.resolve(true);\n }),\n removePageAnnotation: jest.fn(() => {\n return PdfTaskHelper.resolve(true);\n }),\n getPageTextRects: jest.fn((doc: PdfDocumentObject, page: PdfPageObject) => {\n const textRects: PdfTextRectObject[] = [\n {\n content: 'pdf text',\n font: {\n family: 'sans-serif',\n size: 12,\n },\n rect: {\n origin: {\n x: 0,\n y: 0,\n },\n size: {\n width: 100,\n height: 100,\n },\n },\n },\n ];\n return PdfTaskHelper.resolve(textRects);\n }),\n closeDocument: (pdf: PdfDocumentObject) => {\n return PdfTaskHelper.resolve(true);\n },\n saveAsCopy: (pdf: PdfDocumentObject) => {\n return PdfTaskHelper.resolve(new ArrayBuffer(0));\n },\n flattenPage: (pdf: PdfDocumentObject, page: PdfPageObject, options?: PdfFlattenPageOptions) => {\n return PdfTaskHelper.resolve<PdfPageFlattenResult>(PdfPageFlattenResult.Success);\n },\n extractPages: (pdf: PdfDocumentObject, pageIndexes: number[]) => {\n return PdfTaskHelper.resolve(new ArrayBuffer(0));\n },\n extractText: (pdf: PdfDocumentObject, pageIndexes: number[]) => {\n return PdfTaskHelper.resolve('');\n },\n redactTextInRects: (\n pdf: PdfDocumentObject,\n page: PdfPageObject,\n rects: Rect[],\n options?: PdfRedactTextOptions,\n ) => {\n return PdfTaskHelper.resolve(true);\n },\n getTextSlices: (doc: PdfDocumentObject, slices: PageTextSlice[]) => {\n return PdfTaskHelper.resolve([] as string[]);\n },\n getPageGlyphs: (doc: PdfDocumentObject, page: PdfPageObject) => {\n return PdfTaskHelper.resolve([] as PdfGlyphObject[]);\n },\n getPageGeometry: (doc: PdfDocumentObject, page: PdfPageObject) => {\n return PdfTaskHelper.resolve({\n runs: [],\n } as PdfPageGeometry);\n },\n merge: (files: PdfFile[]) => {\n return PdfTaskHelper.resolve({\n id: 'id',\n content: new ArrayBuffer(0),\n });\n },\n mergePages: (mergeConfigs: Array<{ docId: string; pageIndices: number[] }>) => {\n return PdfTaskHelper.resolve({\n id: 'id',\n content: new ArrayBuffer(0),\n });\n },\n searchAllPages: (\n doc: PdfDocumentObject,\n keyword: string,\n options?: PdfSearchAllPagesOptions,\n ) => {\n // Create a mock search result\n const mockResult: SearchResult = {\n pageIndex: 0,\n charIndex: 0,\n charCount: keyword.length,\n rects: [\n {\n origin: {\n x: 0,\n y: 0,\n },\n size: {\n width: 50,\n height: 20,\n },\n },\n ],\n context: {\n before: '',\n match: '',\n after: '',\n truncatedLeft: false,\n truncatedRight: false,\n },\n };\n\n // Return a mock SearchAllPagesResult with a single result\n return PdfTaskHelper.resolve<SearchAllPagesResult, PdfPageSearchProgress>({\n results: [mockResult],\n total: 1,\n });\n },\n getAttachments: (doc: PdfDocumentObject) => {\n return PdfTaskHelper.resolve([] as PdfAttachmentObject[]);\n },\n readAttachmentContent: (doc: PdfDocumentObject, attachment: PdfAttachmentObject) => {\n return PdfTaskHelper.resolve(new ArrayBuffer(0));\n },\n setFormFieldValue: (\n doc: PdfDocumentObject,\n page: PdfPageObject,\n annotation: PdfWidgetAnnoObject,\n text: FormFieldValue,\n ) => {\n return PdfTaskHelper.resolve(true);\n },\n ...partialEngine,\n };\n\n return engine;\n}\n/**\n * Create mock of pdf document\n * @param doc - partial configuration of document\n * @returns mock of pdf document\n *\n * @public\n */\nexport function createMockPdfDocument(doc?: Partial<PdfDocumentObject>): PdfDocumentObject {\n const pageCount = 10;\n const pageWidth = 100;\n const pageHeight = 200;\n const pages = [];\n for (let i = 0; i < pageCount; i++) {\n pages.push({\n index: i,\n size: {\n width: pageWidth,\n height: pageHeight,\n },\n });\n }\n\n return {\n id: 'id',\n pageCount: pageCount,\n pages: pages,\n ...doc,\n };\n}\n\n/**\n * Create mock of pdf file\n * @param file - partial configuration of file\n * @returns mock of pdf file\n *\n * @public\n */\nexport function createMockPdfFile(file?: Partial<PdfFile>): PdfFile {\n return {\n id: 'id',\n content: new ArrayBuffer(0),\n };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});exports.browserImageDataToBlobConverter=(e,t="image/webp")=>{if("undefined"==typeof OffscreenCanvas)throw new Error("OffscreenCanvas is not available in this environment. This converter is intended for browser use only. Please use createNodeImageDataToBlobConverter() or createNodeCanvasImageDataToBlobConverter() for Node.js.");const
|
|
1
|
+
"use strict";function e(e){const{buffer:t,byteOffset:r,byteLength:a}=e;if(t instanceof ArrayBuffer)return t.slice(r,r+a);const n=new ArrayBuffer(a);return new Uint8Array(n).set(new Uint8Array(t,r,a)),n}Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});exports.browserImageDataToBlobConverter=(e,t="image/webp")=>{if("undefined"==typeof OffscreenCanvas)throw new Error("OffscreenCanvas is not available in this environment. This converter is intended for browser use only. Please use createNodeImageDataToBlobConverter() or createNodeCanvasImageDataToBlobConverter() for Node.js.");const r=new OffscreenCanvas(e.width,e.height);return r.getContext("2d").putImageData(e,0,0),r.convertToBlob({type:t})},exports.createCustomImageDataToBlobConverter=function(t){return async(r,a="image/webp")=>{const n=await t(r);return new Blob([e(n)],{type:a})}},exports.createCustomImageDataToBufferConverter=function(e){return async(t,r="image/webp")=>await e(t,r)},exports.createNodeCanvasImageDataToBlobConverter=function(e){return async(t,r="image/webp")=>{const{width:a,height:n}=t,o=e(a,n);let i;switch(o.getContext("2d").putImageData(t,0,0),r){case"image/webp":i=o.toBuffer("image/webp");break;case"image/png":i=o.toBuffer("image/png");break;case"image/jpeg":i=o.toBuffer("image/jpeg");break;default:throw new Error(`Unsupported image type: ${r}`)}return i}},exports.createNodeImageDataToBufferConverter=function(e){return async(t,r="image/webp")=>{const{width:a,height:n,data:o}=t;let i,s=e(Buffer.from(o),{raw:{width:a,height:n,channels:4}});switch(r){case"image/webp":i=await s.webp().toBuffer();break;case"image/png":i=await s.png().toBuffer();break;case"image/jpeg":i=await s.flatten({background:{r:255,g:255,b:255}}).jpeg().toBuffer();break;default:throw new Error(`Unsupported image type: ${r}`)}return i}};
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../src/lib/converters/index.ts"],"sourcesContent":["/**\n * Function type for converting ImageData to Blob\n * In browser: uses OffscreenCanvas\n * In Node.js: can use Sharp or other image processing libraries\n */\nexport type ImageDataConverter<T = Blob> = (\n imageData: ImageData,\n imageType?: ImageConversionTypes,\n) => Promise<T>;\n\nexport type ImageConversionTypes = 'image/webp' | 'image/png' | 'image/jpeg';\n/**\n * Browser implementation using OffscreenCanvas\n * This is the default implementation used in browser environments\n */\nexport const browserImageDataToBlobConverter: ImageDataConverter = (\n imageData: ImageData,\n imageType: ImageConversionTypes = 'image/webp',\n): Promise<Blob> => {\n // Check if we're in a browser environment\n if (typeof OffscreenCanvas === 'undefined') {\n throw new Error(\n 'OffscreenCanvas is not available in this environment. ' +\n 'This converter is intended for browser use only. ' +\n 'Please use createNodeImageDataToBlobConverter() or createNodeCanvasImageDataToBlobConverter() for Node.js.',\n );\n }\n\n const off = new OffscreenCanvas(imageData.width, imageData.height);\n off.getContext('2d')!.putImageData(imageData, 0, 0);\n return off.convertToBlob({ type: imageType });\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/pdfium/image-converters';\n *\n * const
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/lib/utils.ts","../../../src/lib/converters/index.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 { toArrayBuffer } from '../utils';\n\n/**\n * Function type for converting ImageData to Blob\n * In browser: uses OffscreenCanvas\n * In Node.js: can use Sharp or other image processing libraries\n */\nexport type ImageDataConverter<T = Blob> = (\n imageData: ImageData,\n imageType?: ImageConversionTypes,\n) => Promise<T>;\n\nexport type ImageConversionTypes = 'image/webp' | 'image/png' | 'image/jpeg';\n/**\n * Browser implementation using OffscreenCanvas\n * This is the default implementation used in browser environments\n */\nexport const browserImageDataToBlobConverter: ImageDataConverter = (\n imageData: ImageData,\n imageType: ImageConversionTypes = 'image/webp',\n): Promise<Blob> => {\n // Check if we're in a browser environment\n if (typeof OffscreenCanvas === 'undefined') {\n throw new Error(\n 'OffscreenCanvas is not available in this environment. ' +\n 'This converter is intended for browser use only. ' +\n 'Please use createNodeImageDataToBlobConverter() or createNodeCanvasImageDataToBlobConverter() for Node.js.',\n );\n }\n\n const off = new OffscreenCanvas(imageData.width, imageData.height);\n off.getContext('2d')!.putImageData(imageData, 0, 0);\n return off.convertToBlob({ type: imageType });\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/pdfium/image-converters';\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 imageData: ImageData,\n imageType: ImageConversionTypes = 'image/webp',\n ): Promise<Buffer> => {\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.webp().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 .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/pdfium/image-converters';\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 imageData: ImageData,\n imageType: ImageConversionTypes = 'image/webp',\n ): Promise<Buffer> => {\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: (imageData: ImageData) => Promise<Buffer>,\n): ImageDataConverter {\n return async (imageData, imageType = 'image/webp') => {\n const bytes = await processor(imageData);\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: (imageData: ImageData, imageType: ImageConversionTypes) => Promise<Buffer>,\n): ImageDataConverter<Buffer> {\n return async (\n imageData: ImageData,\n imageType: ImageConversionTypes = 'image/webp',\n ): Promise<Buffer> => {\n return await processor(imageData, imageType);\n };\n}\n"],"names":["toArrayBuffer","view","buffer","byteOffset","byteLength","ArrayBuffer","slice","ab","Uint8Array","set","imageData","imageType","OffscreenCanvas","Error","off","width","height","getContext","putImageData","convertToBlob","type","processor","async","bytes","Blob","createCanvas","canvas","toBuffer","sharp","data","sharpInstance","Buffer","from","raw","channels","webp","png","flatten","background","r","g","b","jpeg"],"mappings":"aACO,SAASA,EAAcC,GAC5B,MAAMC,OAAEA,EAAAC,WAAQA,EAAYC,WAAAA,GAAeH,EAC3C,GAAIC,aAAkBG,YACpB,OAAOH,EAAOI,MAAMH,EAAYA,EAAaC,GAGzC,MAAAG,EAAK,IAAIF,YAAYD,GAEpB,OADH,IAAAI,WAAWD,GAAIE,IAAI,IAAID,WAAWN,EAA2BC,EAAYC,IACtEG,CACT,4GCOmE,CACjEG,EACAC,EAAkC,gBAG9B,GAA2B,oBAApBC,gBACT,MAAM,IAAIC,MACR,qNAMJ,MAAMC,EAAM,IAAIF,gBAAgBF,EAAUK,MAAOL,EAAUM,QAE3D,OADAF,EAAIG,WAAW,MAAOC,aAAaR,EAAW,EAAG,GAC1CI,EAAIK,cAAc,CAAEC,KAAMT,GAAW,+CAuHvC,SACLU,GAEO,OAAAC,MAAOZ,EAAWC,EAAY,gBAC7B,MAAAY,QAAcF,EAAUX,GACvB,OAAA,IAAIc,KAAK,CAACxB,EAAcuB,IAAS,CAAEH,KAAMT,GAAW,CAE/D,iDAQO,SACLU,GAEO,OAAAC,MACLZ,EACAC,EAAkC,qBAErBU,EAAUX,EAAWC,EAEtC,mDAvEO,SACLc,GAEO,OAAAH,MACLZ,EACAC,EAAkC,gBAE5B,MAAAI,MAAEA,EAAOC,OAAAA,GAAWN,EAGpBgB,EAASD,EAAaV,EAAOC,GAK/B,IAAAd,EACJ,OALYwB,EAAOT,WAAW,MAC1BC,aAAaR,EAAW,EAAG,GAIvBC,GACN,IAAK,aACMT,EAAAwB,EAAOC,SAAS,cACzB,MACF,IAAK,YACMzB,EAAAwB,EAAOC,SAAS,aACzB,MACF,IAAK,aACMzB,EAAAwB,EAAOC,SAAS,cACzB,MACF,QACE,MAAM,IAAId,MAAM,2BAA2BF,KAGxC,OAAAT,CAAA,CAEX,+CAxFO,SACL0B,GAEO,OAAAN,MACLZ,EACAC,EAAkC,gBAElC,MAAMI,MAAEA,EAAAC,OAAOA,EAAQa,KAAAA,GAASnB,EAIhC,IASIR,EATA4B,EAAgBF,EAAMG,OAAOC,KAAKH,GAAO,CAC3CI,IAAK,CACHlB,QACAC,SACAkB,SAAU,KAMd,OAAQvB,GACN,IAAK,aACHT,QAAe4B,EAAcK,OAAOR,WACpC,MACF,IAAK,YACHzB,QAAe4B,EAAcM,MAAMT,WACnC,MACF,IAAK,aAEHzB,QAAe4B,EACZO,QAAQ,CAAEC,WAAY,CAAEC,EAAG,IAAKC,EAAG,IAAKC,EAAG,OAC3CC,OACAf,WACH,MACF,QACE,MAAM,IAAId,MAAM,2BAA2BF,KAGxC,OAAAT,CAAA,CAEX"}
|
|
@@ -19,8 +19,8 @@ export declare const browserImageDataToBlobConverter: ImageDataConverter;
|
|
|
19
19
|
* import sharp from 'sharp';
|
|
20
20
|
* import { createNodeImageDataToBufferConverter } from '@embedpdf/engines/pdfium/image-converters';
|
|
21
21
|
*
|
|
22
|
-
* const
|
|
23
|
-
* const engine = new PdfiumEngine(pdfiumModule, logger,
|
|
22
|
+
* const imageDataConverter = createNodeImageDataToBufferConverter(sharp);
|
|
23
|
+
* const engine = new PdfiumEngine(pdfiumModule, { logger, imageDataConverter });
|
|
24
24
|
* ```
|
|
25
25
|
*/
|
|
26
26
|
export declare function createNodeImageDataToBufferConverter(sharp: any): ImageDataConverter<Buffer>;
|
|
@@ -33,8 +33,8 @@ export declare function createNodeImageDataToBufferConverter(sharp: any): ImageD
|
|
|
33
33
|
* import { createCanvas } from 'canvas';
|
|
34
34
|
* import { createNodeCanvasImageDataToBlobConverter } from '@embedpdf/engines/pdfium/image-converters';
|
|
35
35
|
*
|
|
36
|
-
* const
|
|
37
|
-
* const engine = new PdfiumEngine(pdfiumModule, logger,
|
|
36
|
+
* const imageDataConverter = createNodeCanvasImageDataToBlobConverter(createCanvas);
|
|
37
|
+
* const engine = new PdfiumEngine(pdfiumModule, { logger, imageDataConverter });
|
|
38
38
|
* ```
|
|
39
39
|
*/
|
|
40
40
|
export declare function createNodeCanvasImageDataToBlobConverter(createCanvas: any): ImageDataConverter<Buffer>;
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
function toArrayBuffer(view) {
|
|
2
|
+
const { buffer, byteOffset, byteLength } = view;
|
|
3
|
+
if (buffer instanceof ArrayBuffer) {
|
|
4
|
+
return buffer.slice(byteOffset, byteOffset + byteLength);
|
|
5
|
+
}
|
|
6
|
+
const ab = new ArrayBuffer(byteLength);
|
|
7
|
+
new Uint8Array(ab).set(new Uint8Array(buffer, byteOffset, byteLength));
|
|
8
|
+
return ab;
|
|
9
|
+
}
|
|
1
10
|
const browserImageDataToBlobConverter = (imageData, imageType = "image/webp") => {
|
|
2
11
|
if (typeof OffscreenCanvas === "undefined") {
|
|
3
12
|
throw new Error(
|
|
@@ -61,8 +70,8 @@ function createNodeCanvasImageDataToBlobConverter(createCanvas) {
|
|
|
61
70
|
}
|
|
62
71
|
function createCustomImageDataToBlobConverter(processor) {
|
|
63
72
|
return async (imageData, imageType = "image/webp") => {
|
|
64
|
-
const
|
|
65
|
-
return new Blob([
|
|
73
|
+
const bytes = await processor(imageData);
|
|
74
|
+
return new Blob([toArrayBuffer(bytes)], { type: imageType });
|
|
66
75
|
};
|
|
67
76
|
}
|
|
68
77
|
function createCustomImageDataToBufferConverter(processor) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/lib/converters/index.ts"],"sourcesContent":["/**\n * Function type for converting ImageData to Blob\n * In browser: uses OffscreenCanvas\n * In Node.js: can use Sharp or other image processing libraries\n */\nexport type ImageDataConverter<T = Blob> = (\n imageData: ImageData,\n imageType?: ImageConversionTypes,\n) => Promise<T>;\n\nexport type ImageConversionTypes = 'image/webp' | 'image/png' | 'image/jpeg';\n/**\n * Browser implementation using OffscreenCanvas\n * This is the default implementation used in browser environments\n */\nexport const browserImageDataToBlobConverter: ImageDataConverter = (\n imageData: ImageData,\n imageType: ImageConversionTypes = 'image/webp',\n): Promise<Blob> => {\n // Check if we're in a browser environment\n if (typeof OffscreenCanvas === 'undefined') {\n throw new Error(\n 'OffscreenCanvas is not available in this environment. ' +\n 'This converter is intended for browser use only. ' +\n 'Please use createNodeImageDataToBlobConverter() or createNodeCanvasImageDataToBlobConverter() for Node.js.',\n );\n }\n\n const off = new OffscreenCanvas(imageData.width, imageData.height);\n off.getContext('2d')!.putImageData(imageData, 0, 0);\n return off.convertToBlob({ type: imageType });\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/pdfium/image-converters';\n *\n * const
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/lib/utils.ts","../../../src/lib/converters/index.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 { toArrayBuffer } from '../utils';\n\n/**\n * Function type for converting ImageData to Blob\n * In browser: uses OffscreenCanvas\n * In Node.js: can use Sharp or other image processing libraries\n */\nexport type ImageDataConverter<T = Blob> = (\n imageData: ImageData,\n imageType?: ImageConversionTypes,\n) => Promise<T>;\n\nexport type ImageConversionTypes = 'image/webp' | 'image/png' | 'image/jpeg';\n/**\n * Browser implementation using OffscreenCanvas\n * This is the default implementation used in browser environments\n */\nexport const browserImageDataToBlobConverter: ImageDataConverter = (\n imageData: ImageData,\n imageType: ImageConversionTypes = 'image/webp',\n): Promise<Blob> => {\n // Check if we're in a browser environment\n if (typeof OffscreenCanvas === 'undefined') {\n throw new Error(\n 'OffscreenCanvas is not available in this environment. ' +\n 'This converter is intended for browser use only. ' +\n 'Please use createNodeImageDataToBlobConverter() or createNodeCanvasImageDataToBlobConverter() for Node.js.',\n );\n }\n\n const off = new OffscreenCanvas(imageData.width, imageData.height);\n off.getContext('2d')!.putImageData(imageData, 0, 0);\n return off.convertToBlob({ type: imageType });\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/pdfium/image-converters';\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 imageData: ImageData,\n imageType: ImageConversionTypes = 'image/webp',\n ): Promise<Buffer> => {\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.webp().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 .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/pdfium/image-converters';\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 imageData: ImageData,\n imageType: ImageConversionTypes = 'image/webp',\n ): Promise<Buffer> => {\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: (imageData: ImageData) => Promise<Buffer>,\n): ImageDataConverter {\n return async (imageData, imageType = 'image/webp') => {\n const bytes = await processor(imageData);\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: (imageData: ImageData, imageType: ImageConversionTypes) => Promise<Buffer>,\n): ImageDataConverter<Buffer> {\n return async (\n imageData: ImageData,\n imageType: ImageConversionTypes = 'image/webp',\n ): Promise<Buffer> => {\n return await processor(imageData, imageType);\n };\n}\n"],"names":[],"mappings":"AACO,SAAS,cAAc,MAAoC;AAChE,QAAM,EAAE,QAAQ,YAAY,WAAe,IAAA;AAC3C,MAAI,kBAAkB,aAAa;AACjC,WAAO,OAAO,MAAM,YAAY,aAAa,UAAU;AAAA,EAAA;AAGnD,QAAA,KAAK,IAAI,YAAY,UAAU;AACjC,MAAA,WAAW,EAAE,EAAE,IAAI,IAAI,WAAW,QAA2B,YAAY,UAAU,CAAC;AACjF,SAAA;AACT;ACOO,MAAM,kCAAsD,CACjE,WACA,YAAkC,iBAChB;AAEd,MAAA,OAAO,oBAAoB,aAAa;AAC1C,UAAM,IAAI;AAAA,MACR;AAAA,IAGF;AAAA,EAAA;AAGF,QAAM,MAAM,IAAI,gBAAgB,UAAU,OAAO,UAAU,MAAM;AACjE,MAAI,WAAW,IAAI,EAAG,aAAa,WAAW,GAAG,CAAC;AAClD,SAAO,IAAI,cAAc,EAAE,MAAM,WAAW;AAC9C;AAeO,SAAS,qCACd,OAC4B;AACrB,SAAA,OACL,WACA,YAAkC,iBACd;AACpB,UAAM,EAAE,OAAO,QAAQ,KAAS,IAAA;AAIhC,QAAI,gBAAgB,MAAM,OAAO,KAAK,IAAI,GAAG;AAAA,MAC3C,KAAK;AAAA,QACH;AAAA,QACA;AAAA,QACA,UAAU;AAAA;AAAA,MAAA;AAAA,IACZ,CACD;AAGG,QAAA;AACJ,YAAQ,WAAW;AAAA,MACjB,KAAK;AACH,iBAAS,MAAM,cAAc,KAAK,EAAE,SAAS;AAC7C;AAAA,MACF,KAAK;AACH,iBAAS,MAAM,cAAc,IAAI,EAAE,SAAS;AAC5C;AAAA,MACF,KAAK;AAEH,iBAAS,MAAM,cACZ,QAAQ,EAAE,YAAY,EAAE,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,EAAG,CAAA,EAClD,OACA,SAAS;AACZ;AAAA,MACF;AACE,cAAM,IAAI,MAAM,2BAA2B,SAAS,EAAE;AAAA,IAAA;AAGnD,WAAA;AAAA,EACT;AACF;AAeO,SAAS,yCACd,cAC4B;AACrB,SAAA,OACL,WACA,YAAkC,iBACd;AACd,UAAA,EAAE,OAAO,OAAA,IAAW;AAGpB,UAAA,SAAS,aAAa,OAAO,MAAM;AACnC,UAAA,MAAM,OAAO,WAAW,IAAI;AAC9B,QAAA,aAAa,WAAW,GAAG,CAAC;AAG5B,QAAA;AACJ,YAAQ,WAAW;AAAA,MACjB,KAAK;AACM,iBAAA,OAAO,SAAS,YAAY;AACrC;AAAA,MACF,KAAK;AACM,iBAAA,OAAO,SAAS,WAAW;AACpC;AAAA,MACF,KAAK;AACM,iBAAA,OAAO,SAAS,YAAY;AACrC;AAAA,MACF;AACE,cAAM,IAAI,MAAM,2BAA2B,SAAS,EAAE;AAAA,IAAA;AAGnD,WAAA;AAAA,EACT;AACF;AAeO,SAAS,qCACd,WACoB;AACb,SAAA,OAAO,WAAW,YAAY,iBAAiB;AAC9C,UAAA,QAAQ,MAAM,UAAU,SAAS;AAChC,WAAA,IAAI,KAAK,CAAC,cAAc,KAAK,CAAC,GAAG,EAAE,MAAM,WAAW;AAAA,EAC7D;AACF;AAQO,SAAS,uCACd,WAC4B;AACrB,SAAA,OACL,WACA,YAAkC,iBACd;AACb,WAAA,MAAM,UAAU,WAAW,SAAS;AAAA,EAC7C;AACF;"}
|