@uploadista/flow-documents-pdflib 0.0.20 → 0.1.0-beta.5

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.
@@ -1,15 +1,16 @@
1
-
2
- > @uploadista/flow-documents-pdflib@0.0.20-beta.9 build /Users/denislaboureyras/Documents/uploadista/dev/uploadista-workspace/uploadista-sdk/packages/flow/documents/pdflib
3
- > tsc --noEmit && tsdown
4
-
5
- ℹ tsdown v0.18.0 powered by rolldown v1.0.0-beta.53
6
- ℹ entry: src/index.ts
7
- ℹ tsconfig: tsconfig.json
8
- ℹ Build start
9
- ℹ Cleaning 4 files
10
- ℹ dist/index.mjs  8.68 kB │ gzip: 1.99 kB
11
- ℹ dist/index.mjs.map 17.07 kB │ gzip: 3.74 kB
12
- ℹ dist/index.d.mts.map  0.33 kB │ gzip: 0.23 kB
13
- ℹ dist/index.d.mts  0.83 kB │ gzip: 0.37 kB
14
- ℹ 4 files, total: 26.91 kB
15
- ✔ Build complete in 10776ms
1
+
2
+ 
3
+ > @uploadista/flow-documents-pdflib@0.1.0-beta.4 build /Users/denislaboureyras/Documents/uploadista/dev/uploadista-workspace/uploadista-sdk/packages/flow/documents/pdflib
4
+ > tsc --noEmit && tsdown
5
+
6
+ ℹ tsdown v0.19.0 powered by rolldown v1.0.0-beta.59
7
+ ℹ entry: src/index.ts
8
+ ℹ tsconfig: tsconfig.json
9
+ ℹ Build start
10
+ ℹ Cleaning 4 files
11
+ ℹ dist/index.mjs  8.68 kB │ gzip: 1.99 kB
12
+ ℹ dist/index.mjs.map 17.05 kB │ gzip: 3.73 kB
13
+ ℹ dist/index.d.mts.map  0.33 kB │ gzip: 0.23 kB
14
+ ℹ dist/index.d.mts  0.83 kB │ gzip: 0.37 kB
15
+ ℹ 4 files, total: 26.89 kB
16
+ ✔ Build complete in 5393ms
@@ -0,0 +1,6 @@
1
+
2
+ 
3
+ > @uploadista/flow-documents-pdflib@0.1.0-beta.2 check /Users/denislaboureyras/Documents/uploadista/dev/uploadista-workspace/uploadista-sdk/packages/flow/documents/pdflib
4
+ > biome check --write ./src
5
+
6
+ Checked 3 files in 192ms. No fixes applied.
@@ -0,0 +1,146 @@
1
+
2
+ 
3
+ > @uploadista/flow-documents-pdflib@0.1.0-beta.2 test /Users/denislaboureyras/Documents/uploadista/dev/uploadista-workspace/uploadista-sdk/packages/flow/documents/pdflib
4
+ > vitest run
5
+
6
+ [?25l
7
+  RUN  v4.0.17 /Users/denislaboureyras/Documents/uploadista/dev/uploadista-workspace/uploadista-sdk/packages/flow/documents/pdflib
8
+
9
+ [?2026h
10
+  ❯ tests/document-plugin.test.ts [queued]
11
+
12
+  Test Files 0 passed (1)
13
+  Tests 0 passed (0)
14
+  Start at 16:59:23
15
+  Duration 401ms
16
+ [?2026l[?2026h
17
+  ❯ tests/document-plugin.test.ts [queued]
18
+
19
+  Test Files 0 passed (1)
20
+  Tests 0 passed (0)
21
+  Start at 16:59:23
22
+  Duration 919ms
23
+ [?2026l[?2026h
24
+  ❯ tests/document-plugin.test.ts [queued]
25
+
26
+  Test Files 0 passed (1)
27
+  Tests 0 passed (0)
28
+  Start at 16:59:23
29
+  Duration 1.93s
30
+ [?2026l[?2026h
31
+  ❯ tests/document-plugin.test.ts [queued]
32
+
33
+  Test Files 0 passed (1)
34
+  Tests 0 passed (0)
35
+  Start at 16:59:23
36
+  Duration 2.98s
37
+ [?2026l[?2026h
38
+  ❯ tests/document-plugin.test.ts [queued]
39
+
40
+  Test Files 0 passed (1)
41
+  Tests 0 passed (0)
42
+  Start at 16:59:23
43
+  Duration 3.99s
44
+ [?2026l[?2026h
45
+  ❯ tests/document-plugin.test.ts 0/13
46
+
47
+  Test Files 0 passed (1)
48
+  Tests 0 passed (13)
49
+  Start at 16:59:23
50
+  Duration 4.60s
51
+ [?2026l[?2026h
52
+  ❯ tests/document-plugin.test.ts 0/13
53
+
54
+  Test Files 0 passed (1)
55
+  Tests 0 passed (13)
56
+  Start at 16:59:23
57
+  Duration 5.00s
58
+ [?2026l[?2026h
59
+  ❯ tests/document-plugin.test.ts 1/13
60
+
61
+  Test Files 0 passed (1)
62
+  Tests 1 passed (13)
63
+  Start at 16:59:23
64
+  Duration 5.20s
65
+ [?2026l[?2026h
66
+  ❯ tests/document-plugin.test.ts 2/13
67
+
68
+  Test Files 0 passed (1)
69
+  Tests 2 passed (13)
70
+  Start at 16:59:23
71
+  Duration 5.50s
72
+ [?2026l[?2026h
73
+  ❯ tests/document-plugin.test.ts 3/13
74
+
75
+  Test Files 0 passed (1)
76
+  Tests 3 passed (13)
77
+  Start at 16:59:23
78
+  Duration 5.60s
79
+ [?2026l[?2026h
80
+  ❯ tests/document-plugin.test.ts 4/13
81
+
82
+  Test Files 0 passed (1)
83
+  Tests 4 passed (13)
84
+  Start at 16:59:23
85
+  Duration 5.81s
86
+ [?2026l[?2026h
87
+  ❯ tests/document-plugin.test.ts 4/13
88
+
89
+  Test Files 0 passed (1)
90
+  Tests 4 passed (13)
91
+  Start at 16:59:23
92
+  Duration 5.91s
93
+ [?2026l[?2026h
94
+  ❯ tests/document-plugin.test.ts 7/13
95
+
96
+  Test Files 0 passed (1)
97
+  Tests 7 passed (13)
98
+  Start at 16:59:23
99
+  Duration 6.11s
100
+ [?2026l[?2026h
101
+  ❯ tests/document-plugin.test.ts 8/13
102
+
103
+  Test Files 0 passed (1)
104
+  Tests 8 passed (13)
105
+  Start at 16:59:23
106
+  Duration 6.21s
107
+ [?2026l[?2026h
108
+  ❯ tests/document-plugin.test.ts 9/13
109
+
110
+  Test Files 0 passed (1)
111
+  Tests 9 passed (13)
112
+  Start at 16:59:23
113
+  Duration 6.41s
114
+ [?2026l[?2026h
115
+  ❯ tests/document-plugin.test.ts 10/13
116
+
117
+  Test Files 0 passed (1)
118
+  Tests 10 passed (13)
119
+  Start at 16:59:23
120
+  Duration 6.51s
121
+ [?2026l ✓ tests/document-plugin.test.ts (13 tests) 1933ms
122
+ ✓ pdf-lib Document Plugin (13)
123
+ ✓ getMetadata (3)
124
+ ✓ should extract metadata from PDF with all fields  593ms
125
+ ✓ should extract metadata from PDF without metadata fields 256ms
126
+ ✓ should handle single-page PDF 153ms
127
+ ✓ splitPdf (4)
128
+ ✓ should split PDF into page range 198ms
129
+ ✓ should split PDF into individual pages 85ms
130
+ ✓ should handle splitting single page 26ms
131
+ ✓ should fail with invalid page range 126ms
132
+ ✓ mergePdfs (3)
133
+ ✓ should merge multiple PDFs in correct order 118ms
134
+ ✓ should merge two PDFs 191ms
135
+ ✓ should handle single PDF in merge array 23ms
136
+ ✓ error handling (3)
137
+ ✓ should fail with corrupted PDF data 14ms
138
+ ✓ should fail split with negative page numbers 75ms
139
+ ✓ should fail split with startPage > endPage 21ms
140
+
141
+  Test Files  1 passed (1)
142
+  Tests  13 passed (13)
143
+  Start at  16:59:23
144
+  Duration  6.62s (transform 1.04s, setup 0ms, import 4.19s, tests 1.93s, environment 0ms)
145
+
146
+ [?25h
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["pdfs: Uint8Array[]","newPdf","pdfBytes"],"sources":["../src/document-plugin.ts","../src/utils/format-mappings.ts"],"sourcesContent":["import { UploadistaError } from \"@uploadista/core/errors\";\nimport {\n type DocumentMetadata,\n DocumentPlugin,\n type SplitPdfResult,\n} from \"@uploadista/core/flow\";\nimport { withOperationSpan } from \"@uploadista/observability\";\nimport { Effect, Layer } from \"effect\";\nimport { PDFDocument } from \"pdf-lib\";\n\n/**\n * Helper to parse date from PDF date string format\n */\nfunction parsePdfDate(dateStr: string | undefined): string | null {\n if (!dateStr) return null;\n try {\n // PDF date format: D:YYYYMMDDHHmmSSOHH'mm'\n // Example: D:20230101120000Z\n const match = dateStr.match(\n /D:(\\d{4})(\\d{2})(\\d{2})(\\d{2})?(\\d{2})?(\\d{2})?/,\n );\n if (!match) return null;\n\n const [, year, month, day, hour = \"00\", minute = \"00\", second = \"00\"] =\n match;\n const date = new Date(\n `${year}-${month}-${day}T${hour}:${minute}:${second}Z`,\n );\n return date.toISOString();\n } catch {\n return null;\n }\n}\n\nexport const pdfLibDocumentPlugin = Layer.succeed(\n DocumentPlugin,\n DocumentPlugin.of({\n extractText: (_input) => {\n return Effect.gen(function* () {\n // pdf-lib has very limited text extraction capabilities\n // Return an error indicating that unpdf should be used instead\n return yield* UploadistaError.fromCode(\"DOCUMENT_PROCESSING_FAILED\", {\n cause:\n \"pdf-lib does not support text extraction. Use @uploadista/flow-documents-unpdf instead.\",\n }).toEffect();\n });\n },\n\n getMetadata: (input) => {\n return Effect.gen(function* () {\n const pdfDoc = yield* Effect.tryPromise({\n try: async () =>\n await PDFDocument.load(input, { ignoreEncryption: false }),\n catch: (error) => {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n\n if (errorMessage.toLowerCase().includes(\"encrypt\")) {\n return UploadistaError.fromCode(\"PDF_ENCRYPTED\", {\n cause: errorMessage,\n });\n }\n\n if (\n errorMessage.toLowerCase().includes(\"corrupt\") ||\n errorMessage.toLowerCase().includes(\"invalid\")\n ) {\n return UploadistaError.fromCode(\"PDF_CORRUPTED\", {\n cause: errorMessage,\n });\n }\n\n return UploadistaError.fromCode(\"DOCUMENT_PROCESSING_FAILED\", {\n cause: errorMessage,\n });\n },\n });\n\n const pageCount = pdfDoc.getPageCount();\n const author = pdfDoc.getAuthor() || null;\n const title = pdfDoc.getTitle() || null;\n const subject = pdfDoc.getSubject() || null;\n const creator = pdfDoc.getCreator() || null;\n const creationDateStr = pdfDoc.getCreationDate();\n const modificationDateStr = pdfDoc.getModificationDate();\n\n const creationDate = creationDateStr\n ? parsePdfDate(creationDateStr.toString())\n : null;\n const modifiedDate = modificationDateStr\n ? parsePdfDate(modificationDateStr.toString())\n : null;\n\n const metadata: DocumentMetadata = {\n pageCount,\n format: \"pdf\",\n author,\n title,\n subject,\n creator,\n creationDate,\n modifiedDate,\n fileSize: input.byteLength,\n };\n\n return metadata;\n }).pipe(\n withOperationSpan(\"document\", \"get-metadata\", {\n \"document.input_size\": input.byteLength,\n }),\n );\n },\n\n splitPdf: (input, options) => {\n return Effect.gen(function* () {\n const pdfDoc = yield* Effect.tryPromise({\n try: async () =>\n await PDFDocument.load(input, { ignoreEncryption: false }),\n catch: (error) => {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n\n if (errorMessage.toLowerCase().includes(\"encrypt\")) {\n return UploadistaError.fromCode(\"PDF_ENCRYPTED\", {\n cause: errorMessage,\n });\n }\n\n return UploadistaError.fromCode(\"DOCUMENT_PROCESSING_FAILED\", {\n cause: errorMessage,\n });\n },\n });\n\n const totalPages = pdfDoc.getPageCount();\n\n if (options.mode === \"individual\") {\n // Split into individual pages\n const pdfs: Uint8Array[] = [];\n\n for (let i = 0; i < totalPages; i++) {\n const newPdf = yield* Effect.tryPromise({\n try: async () => await PDFDocument.create(),\n catch: (error) => {\n return UploadistaError.fromCode(\"DOCUMENT_PROCESSING_FAILED\", {\n cause: error instanceof Error ? error.message : String(error),\n });\n },\n });\n\n const [copiedPage] = yield* Effect.tryPromise({\n try: async () => await newPdf.copyPages(pdfDoc, [i]),\n catch: (error) => {\n return UploadistaError.fromCode(\"DOCUMENT_PROCESSING_FAILED\", {\n cause: error instanceof Error ? error.message : String(error),\n });\n },\n });\n\n newPdf.addPage(copiedPage);\n\n const pdfBytes = yield* Effect.tryPromise({\n try: async () => await newPdf.save(),\n catch: (error) => {\n return UploadistaError.fromCode(\"DOCUMENT_PROCESSING_FAILED\", {\n cause: error instanceof Error ? error.message : String(error),\n });\n },\n });\n\n pdfs.push(new Uint8Array(pdfBytes));\n }\n\n const result: SplitPdfResult = {\n mode: \"individual\",\n pdfs,\n };\n\n return result;\n }\n\n // Range mode\n if (!options.startPage || !options.endPage) {\n return yield* UploadistaError.fromCode(\"PAGE_RANGE_INVALID\", {\n cause: \"startPage and endPage are required for range mode\",\n }).toEffect();\n }\n\n // Validate page range (1-indexed)\n if (\n options.startPage < 1 ||\n options.endPage > totalPages ||\n options.startPage > options.endPage\n ) {\n return yield* UploadistaError.fromCode(\"PAGE_RANGE_INVALID\", {\n cause: `Invalid page range: ${options.startPage}-${options.endPage}. Document has ${totalPages} pages.`,\n }).toEffect();\n }\n\n const newPdf = yield* Effect.tryPromise({\n try: async () => await PDFDocument.create(),\n catch: (error) => {\n return UploadistaError.fromCode(\"DOCUMENT_PROCESSING_FAILED\", {\n cause: error instanceof Error ? error.message : String(error),\n });\n },\n });\n\n // Convert from 1-indexed to 0-indexed\n const pageIndices = Array.from(\n { length: options.endPage - options.startPage + 1 },\n (_, i) => (options.startPage ?? 1) - 1 + i,\n );\n\n const copiedPages = yield* Effect.tryPromise({\n try: async () => await newPdf.copyPages(pdfDoc, pageIndices),\n catch: (error) => {\n return UploadistaError.fromCode(\"DOCUMENT_PROCESSING_FAILED\", {\n cause: error instanceof Error ? error.message : String(error),\n });\n },\n });\n\n for (const page of copiedPages) {\n newPdf.addPage(page);\n }\n\n const pdfBytes = yield* Effect.tryPromise({\n try: async () => await newPdf.save(),\n catch: (error) => {\n return UploadistaError.fromCode(\"DOCUMENT_PROCESSING_FAILED\", {\n cause: error instanceof Error ? error.message : String(error),\n });\n },\n });\n\n const result: SplitPdfResult = {\n mode: \"range\",\n pdf: new Uint8Array(pdfBytes),\n };\n\n return result;\n }).pipe(\n withOperationSpan(\"document\", \"split-pdf\", {\n \"document.mode\": options.mode,\n \"document.start_page\": options.startPage,\n \"document.end_page\": options.endPage,\n \"document.input_size\": input.byteLength,\n }),\n );\n },\n\n mergePdfs: (options) => {\n return Effect.gen(function* () {\n if (options.pdfs.length === 0) {\n return yield* UploadistaError.fromCode(\"DOCUMENT_PROCESSING_FAILED\", {\n cause: \"At least one PDF is required for merging\",\n }).toEffect();\n }\n\n if (options.pdfs.length === 1) {\n // Single PDF, just return it\n yield* Effect.logWarning(\n \"Only one PDF provided for merging, returning original\",\n );\n return options.pdfs[0];\n }\n\n const mergedPdf = yield* Effect.tryPromise({\n try: async () => await PDFDocument.create(),\n catch: (error) => {\n return UploadistaError.fromCode(\"DOCUMENT_PROCESSING_FAILED\", {\n cause: error instanceof Error ? error.message : String(error),\n });\n },\n });\n\n for (const pdfBytes of options.pdfs) {\n const pdf = yield* Effect.tryPromise({\n try: async () =>\n await PDFDocument.load(pdfBytes, { ignoreEncryption: false }),\n catch: (error) => {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n\n if (errorMessage.toLowerCase().includes(\"encrypt\")) {\n return UploadistaError.fromCode(\"PDF_ENCRYPTED\", {\n cause: errorMessage,\n });\n }\n\n return UploadistaError.fromCode(\"DOCUMENT_PROCESSING_FAILED\", {\n cause: errorMessage,\n });\n },\n });\n\n const pageCount = pdf.getPageCount();\n const pageIndices = Array.from({ length: pageCount }, (_, i) => i);\n\n const copiedPages = yield* Effect.tryPromise({\n try: async () => await mergedPdf.copyPages(pdf, pageIndices),\n catch: (error) => {\n return UploadistaError.fromCode(\"DOCUMENT_PROCESSING_FAILED\", {\n cause: error instanceof Error ? error.message : String(error),\n });\n },\n });\n\n for (const page of copiedPages) {\n mergedPdf.addPage(page);\n }\n }\n\n const mergedBytes = yield* Effect.tryPromise({\n try: async () => await mergedPdf.save(),\n catch: (error) => {\n return UploadistaError.fromCode(\"DOCUMENT_PROCESSING_FAILED\", {\n cause: error instanceof Error ? error.message : String(error),\n });\n },\n });\n\n return new Uint8Array(mergedBytes);\n }).pipe(\n withOperationSpan(\"document\", \"merge-pdfs\", {\n \"document.input_count\": options.pdfs.length,\n }),\n );\n },\n }),\n);\n\nexport const PdfLibDocumentPluginLive = pdfLibDocumentPlugin;\n","/**\n * PDF MIME type constant\n */\nexport const PDF_MIME_TYPE = \"application/pdf\";\n\n/**\n * PDF file extension\n */\nexport const PDF_EXTENSION = \".pdf\";\n\n/**\n * Get MIME type for PDF format\n */\nexport function getPdfMimeType(): string {\n return PDF_MIME_TYPE;\n}\n\n/**\n * Get file extension for PDF format\n */\nexport function getPdfExtension(): string {\n return PDF_EXTENSION;\n}\n"],"mappings":";;;;;;;;;;AAaA,SAAS,aAAa,SAA4C;AAChE,KAAI,CAAC,QAAS,QAAO;AACrB,KAAI;EAGF,MAAM,QAAQ,QAAQ,MACpB,kDACD;AACD,MAAI,CAAC,MAAO,QAAO;EAEnB,MAAM,GAAG,MAAM,OAAO,KAAK,OAAO,MAAM,SAAS,MAAM,SAAS,QAC9D;AAIF,0BAHa,IAAI,KACf,GAAG,KAAK,GAAG,MAAM,GAAG,IAAI,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,GACrD,EACW,aAAa;SACnB;AACN,SAAO;;;AAIX,MAAa,uBAAuB,MAAM,QACxC,gBACA,eAAe,GAAG;CAChB,cAAc,WAAW;AACvB,SAAO,OAAO,IAAI,aAAa;AAG7B,UAAO,OAAO,gBAAgB,SAAS,8BAA8B,EACnE,OACE,2FACH,CAAC,CAAC,UAAU;IACb;;CAGJ,cAAc,UAAU;AACtB,SAAO,OAAO,IAAI,aAAa;GAC7B,MAAM,SAAS,OAAO,OAAO,WAAW;IACtC,KAAK,YACH,MAAM,YAAY,KAAK,OAAO,EAAE,kBAAkB,OAAO,CAAC;IAC5D,QAAQ,UAAU;KAChB,MAAM,eACJ,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AAExD,SAAI,aAAa,aAAa,CAAC,SAAS,UAAU,CAChD,QAAO,gBAAgB,SAAS,iBAAiB,EAC/C,OAAO,cACR,CAAC;AAGJ,SACE,aAAa,aAAa,CAAC,SAAS,UAAU,IAC9C,aAAa,aAAa,CAAC,SAAS,UAAU,CAE9C,QAAO,gBAAgB,SAAS,iBAAiB,EAC/C,OAAO,cACR,CAAC;AAGJ,YAAO,gBAAgB,SAAS,8BAA8B,EAC5D,OAAO,cACR,CAAC;;IAEL,CAAC;GAEF,MAAM,YAAY,OAAO,cAAc;GACvC,MAAM,SAAS,OAAO,WAAW,IAAI;GACrC,MAAM,QAAQ,OAAO,UAAU,IAAI;GACnC,MAAM,UAAU,OAAO,YAAY,IAAI;GACvC,MAAM,UAAU,OAAO,YAAY,IAAI;GACvC,MAAM,kBAAkB,OAAO,iBAAiB;GAChD,MAAM,sBAAsB,OAAO,qBAAqB;AAqBxD,UAZmC;IACjC;IACA,QAAQ;IACR;IACA;IACA;IACA;IACA,cAdmB,kBACjB,aAAa,gBAAgB,UAAU,CAAC,GACxC;IAaF,cAZmB,sBACjB,aAAa,oBAAoB,UAAU,CAAC,GAC5C;IAWF,UAAU,MAAM;IACjB;IAGD,CAAC,KACD,kBAAkB,YAAY,gBAAgB,EAC5C,uBAAuB,MAAM,YAC9B,CAAC,CACH;;CAGH,WAAW,OAAO,YAAY;AAC5B,SAAO,OAAO,IAAI,aAAa;GAC7B,MAAM,SAAS,OAAO,OAAO,WAAW;IACtC,KAAK,YACH,MAAM,YAAY,KAAK,OAAO,EAAE,kBAAkB,OAAO,CAAC;IAC5D,QAAQ,UAAU;KAChB,MAAM,eACJ,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AAExD,SAAI,aAAa,aAAa,CAAC,SAAS,UAAU,CAChD,QAAO,gBAAgB,SAAS,iBAAiB,EAC/C,OAAO,cACR,CAAC;AAGJ,YAAO,gBAAgB,SAAS,8BAA8B,EAC5D,OAAO,cACR,CAAC;;IAEL,CAAC;GAEF,MAAM,aAAa,OAAO,cAAc;AAExC,OAAI,QAAQ,SAAS,cAAc;IAEjC,MAAMA,OAAqB,EAAE;AAE7B,SAAK,IAAI,IAAI,GAAG,IAAI,YAAY,KAAK;KACnC,MAAMC,WAAS,OAAO,OAAO,WAAW;MACtC,KAAK,YAAY,MAAM,YAAY,QAAQ;MAC3C,QAAQ,UAAU;AAChB,cAAO,gBAAgB,SAAS,8BAA8B,EAC5D,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,EAC9D,CAAC;;MAEL,CAAC;KAEF,MAAM,CAAC,cAAc,OAAO,OAAO,WAAW;MAC5C,KAAK,YAAY,MAAMA,SAAO,UAAU,QAAQ,CAAC,EAAE,CAAC;MACpD,QAAQ,UAAU;AAChB,cAAO,gBAAgB,SAAS,8BAA8B,EAC5D,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,EAC9D,CAAC;;MAEL,CAAC;AAEF,cAAO,QAAQ,WAAW;KAE1B,MAAMC,aAAW,OAAO,OAAO,WAAW;MACxC,KAAK,YAAY,MAAMD,SAAO,MAAM;MACpC,QAAQ,UAAU;AAChB,cAAO,gBAAgB,SAAS,8BAA8B,EAC5D,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,EAC9D,CAAC;;MAEL,CAAC;AAEF,UAAK,KAAK,IAAI,WAAWC,WAAS,CAAC;;AAQrC,WAL+B;KAC7B,MAAM;KACN;KACD;;AAMH,OAAI,CAAC,QAAQ,aAAa,CAAC,QAAQ,QACjC,QAAO,OAAO,gBAAgB,SAAS,sBAAsB,EAC3D,OAAO,qDACR,CAAC,CAAC,UAAU;AAIf,OACE,QAAQ,YAAY,KACpB,QAAQ,UAAU,cAClB,QAAQ,YAAY,QAAQ,QAE5B,QAAO,OAAO,gBAAgB,SAAS,sBAAsB,EAC3D,OAAO,uBAAuB,QAAQ,UAAU,GAAG,QAAQ,QAAQ,iBAAiB,WAAW,UAChG,CAAC,CAAC,UAAU;GAGf,MAAM,SAAS,OAAO,OAAO,WAAW;IACtC,KAAK,YAAY,MAAM,YAAY,QAAQ;IAC3C,QAAQ,UAAU;AAChB,YAAO,gBAAgB,SAAS,8BAA8B,EAC5D,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,EAC9D,CAAC;;IAEL,CAAC;GAGF,MAAM,cAAc,MAAM,KACxB,EAAE,QAAQ,QAAQ,UAAU,QAAQ,YAAY,GAAG,GAClD,GAAG,OAAO,QAAQ,aAAa,KAAK,IAAI,EAC1C;GAED,MAAM,cAAc,OAAO,OAAO,WAAW;IAC3C,KAAK,YAAY,MAAM,OAAO,UAAU,QAAQ,YAAY;IAC5D,QAAQ,UAAU;AAChB,YAAO,gBAAgB,SAAS,8BAA8B,EAC5D,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,EAC9D,CAAC;;IAEL,CAAC;AAEF,QAAK,MAAM,QAAQ,YACjB,QAAO,QAAQ,KAAK;GAGtB,MAAM,WAAW,OAAO,OAAO,WAAW;IACxC,KAAK,YAAY,MAAM,OAAO,MAAM;IACpC,QAAQ,UAAU;AAChB,YAAO,gBAAgB,SAAS,8BAA8B,EAC5D,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,EAC9D,CAAC;;IAEL,CAAC;AAOF,UAL+B;IAC7B,MAAM;IACN,KAAK,IAAI,WAAW,SAAS;IAC9B;IAGD,CAAC,KACD,kBAAkB,YAAY,aAAa;GACzC,iBAAiB,QAAQ;GACzB,uBAAuB,QAAQ;GAC/B,qBAAqB,QAAQ;GAC7B,uBAAuB,MAAM;GAC9B,CAAC,CACH;;CAGH,YAAY,YAAY;AACtB,SAAO,OAAO,IAAI,aAAa;AAC7B,OAAI,QAAQ,KAAK,WAAW,EAC1B,QAAO,OAAO,gBAAgB,SAAS,8BAA8B,EACnE,OAAO,4CACR,CAAC,CAAC,UAAU;AAGf,OAAI,QAAQ,KAAK,WAAW,GAAG;AAE7B,WAAO,OAAO,WACZ,wDACD;AACD,WAAO,QAAQ,KAAK;;GAGtB,MAAM,YAAY,OAAO,OAAO,WAAW;IACzC,KAAK,YAAY,MAAM,YAAY,QAAQ;IAC3C,QAAQ,UAAU;AAChB,YAAO,gBAAgB,SAAS,8BAA8B,EAC5D,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,EAC9D,CAAC;;IAEL,CAAC;AAEF,QAAK,MAAM,YAAY,QAAQ,MAAM;IACnC,MAAM,MAAM,OAAO,OAAO,WAAW;KACnC,KAAK,YACH,MAAM,YAAY,KAAK,UAAU,EAAE,kBAAkB,OAAO,CAAC;KAC/D,QAAQ,UAAU;MAChB,MAAM,eACJ,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AAExD,UAAI,aAAa,aAAa,CAAC,SAAS,UAAU,CAChD,QAAO,gBAAgB,SAAS,iBAAiB,EAC/C,OAAO,cACR,CAAC;AAGJ,aAAO,gBAAgB,SAAS,8BAA8B,EAC5D,OAAO,cACR,CAAC;;KAEL,CAAC;IAEF,MAAM,YAAY,IAAI,cAAc;IACpC,MAAM,cAAc,MAAM,KAAK,EAAE,QAAQ,WAAW,GAAG,GAAG,MAAM,EAAE;IAElE,MAAM,cAAc,OAAO,OAAO,WAAW;KAC3C,KAAK,YAAY,MAAM,UAAU,UAAU,KAAK,YAAY;KAC5D,QAAQ,UAAU;AAChB,aAAO,gBAAgB,SAAS,8BAA8B,EAC5D,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,EAC9D,CAAC;;KAEL,CAAC;AAEF,SAAK,MAAM,QAAQ,YACjB,WAAU,QAAQ,KAAK;;GAI3B,MAAM,cAAc,OAAO,OAAO,WAAW;IAC3C,KAAK,YAAY,MAAM,UAAU,MAAM;IACvC,QAAQ,UAAU;AAChB,YAAO,gBAAgB,SAAS,8BAA8B,EAC5D,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,EAC9D,CAAC;;IAEL,CAAC;AAEF,UAAO,IAAI,WAAW,YAAY;IAClC,CAAC,KACD,kBAAkB,YAAY,cAAc,EAC1C,wBAAwB,QAAQ,KAAK,QACtC,CAAC,CACH;;CAEJ,CAAC,CACH;AAED,MAAa,2BAA2B;;;;;;;AC1UxC,MAAa,gBAAgB;;;;AAK7B,MAAa,gBAAgB;;;;AAK7B,SAAgB,iBAAyB;AACvC,QAAO;;;;;AAMT,SAAgB,kBAA0B;AACxC,QAAO"}
1
+ {"version":3,"file":"index.mjs","names":["newPdf","pdfBytes"],"sources":["../src/document-plugin.ts","../src/utils/format-mappings.ts"],"sourcesContent":["import { UploadistaError } from \"@uploadista/core/errors\";\nimport {\n type DocumentMetadata,\n DocumentPlugin,\n type SplitPdfResult,\n} from \"@uploadista/core/flow\";\nimport { withOperationSpan } from \"@uploadista/observability\";\nimport { Effect, Layer } from \"effect\";\nimport { PDFDocument } from \"pdf-lib\";\n\n/**\n * Helper to parse date from PDF date string format\n */\nfunction parsePdfDate(dateStr: string | undefined): string | null {\n if (!dateStr) return null;\n try {\n // PDF date format: D:YYYYMMDDHHmmSSOHH'mm'\n // Example: D:20230101120000Z\n const match = dateStr.match(\n /D:(\\d{4})(\\d{2})(\\d{2})(\\d{2})?(\\d{2})?(\\d{2})?/,\n );\n if (!match) return null;\n\n const [, year, month, day, hour = \"00\", minute = \"00\", second = \"00\"] =\n match;\n const date = new Date(\n `${year}-${month}-${day}T${hour}:${minute}:${second}Z`,\n );\n return date.toISOString();\n } catch {\n return null;\n }\n}\n\nexport const pdfLibDocumentPlugin = Layer.succeed(\n DocumentPlugin,\n DocumentPlugin.of({\n extractText: (_input) => {\n return Effect.gen(function* () {\n // pdf-lib has very limited text extraction capabilities\n // Return an error indicating that unpdf should be used instead\n return yield* UploadistaError.fromCode(\"DOCUMENT_PROCESSING_FAILED\", {\n cause:\n \"pdf-lib does not support text extraction. Use @uploadista/flow-documents-unpdf instead.\",\n }).toEffect();\n });\n },\n\n getMetadata: (input) => {\n return Effect.gen(function* () {\n const pdfDoc = yield* Effect.tryPromise({\n try: async () =>\n await PDFDocument.load(input, { ignoreEncryption: false }),\n catch: (error) => {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n\n if (errorMessage.toLowerCase().includes(\"encrypt\")) {\n return UploadistaError.fromCode(\"PDF_ENCRYPTED\", {\n cause: errorMessage,\n });\n }\n\n if (\n errorMessage.toLowerCase().includes(\"corrupt\") ||\n errorMessage.toLowerCase().includes(\"invalid\")\n ) {\n return UploadistaError.fromCode(\"PDF_CORRUPTED\", {\n cause: errorMessage,\n });\n }\n\n return UploadistaError.fromCode(\"DOCUMENT_PROCESSING_FAILED\", {\n cause: errorMessage,\n });\n },\n });\n\n const pageCount = pdfDoc.getPageCount();\n const author = pdfDoc.getAuthor() || null;\n const title = pdfDoc.getTitle() || null;\n const subject = pdfDoc.getSubject() || null;\n const creator = pdfDoc.getCreator() || null;\n const creationDateStr = pdfDoc.getCreationDate();\n const modificationDateStr = pdfDoc.getModificationDate();\n\n const creationDate = creationDateStr\n ? parsePdfDate(creationDateStr.toString())\n : null;\n const modifiedDate = modificationDateStr\n ? parsePdfDate(modificationDateStr.toString())\n : null;\n\n const metadata: DocumentMetadata = {\n pageCount,\n format: \"pdf\",\n author,\n title,\n subject,\n creator,\n creationDate,\n modifiedDate,\n fileSize: input.byteLength,\n };\n\n return metadata;\n }).pipe(\n withOperationSpan(\"document\", \"get-metadata\", {\n \"document.input_size\": input.byteLength,\n }),\n );\n },\n\n splitPdf: (input, options) => {\n return Effect.gen(function* () {\n const pdfDoc = yield* Effect.tryPromise({\n try: async () =>\n await PDFDocument.load(input, { ignoreEncryption: false }),\n catch: (error) => {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n\n if (errorMessage.toLowerCase().includes(\"encrypt\")) {\n return UploadistaError.fromCode(\"PDF_ENCRYPTED\", {\n cause: errorMessage,\n });\n }\n\n return UploadistaError.fromCode(\"DOCUMENT_PROCESSING_FAILED\", {\n cause: errorMessage,\n });\n },\n });\n\n const totalPages = pdfDoc.getPageCount();\n\n if (options.mode === \"individual\") {\n // Split into individual pages\n const pdfs: Uint8Array[] = [];\n\n for (let i = 0; i < totalPages; i++) {\n const newPdf = yield* Effect.tryPromise({\n try: async () => await PDFDocument.create(),\n catch: (error) => {\n return UploadistaError.fromCode(\"DOCUMENT_PROCESSING_FAILED\", {\n cause: error instanceof Error ? error.message : String(error),\n });\n },\n });\n\n const [copiedPage] = yield* Effect.tryPromise({\n try: async () => await newPdf.copyPages(pdfDoc, [i]),\n catch: (error) => {\n return UploadistaError.fromCode(\"DOCUMENT_PROCESSING_FAILED\", {\n cause: error instanceof Error ? error.message : String(error),\n });\n },\n });\n\n newPdf.addPage(copiedPage);\n\n const pdfBytes = yield* Effect.tryPromise({\n try: async () => await newPdf.save(),\n catch: (error) => {\n return UploadistaError.fromCode(\"DOCUMENT_PROCESSING_FAILED\", {\n cause: error instanceof Error ? error.message : String(error),\n });\n },\n });\n\n pdfs.push(new Uint8Array(pdfBytes));\n }\n\n const result: SplitPdfResult = {\n mode: \"individual\",\n pdfs,\n };\n\n return result;\n }\n\n // Range mode\n if (!options.startPage || !options.endPage) {\n return yield* UploadistaError.fromCode(\"PAGE_RANGE_INVALID\", {\n cause: \"startPage and endPage are required for range mode\",\n }).toEffect();\n }\n\n // Validate page range (1-indexed)\n if (\n options.startPage < 1 ||\n options.endPage > totalPages ||\n options.startPage > options.endPage\n ) {\n return yield* UploadistaError.fromCode(\"PAGE_RANGE_INVALID\", {\n cause: `Invalid page range: ${options.startPage}-${options.endPage}. Document has ${totalPages} pages.`,\n }).toEffect();\n }\n\n const newPdf = yield* Effect.tryPromise({\n try: async () => await PDFDocument.create(),\n catch: (error) => {\n return UploadistaError.fromCode(\"DOCUMENT_PROCESSING_FAILED\", {\n cause: error instanceof Error ? error.message : String(error),\n });\n },\n });\n\n // Convert from 1-indexed to 0-indexed\n const pageIndices = Array.from(\n { length: options.endPage - options.startPage + 1 },\n (_, i) => (options.startPage ?? 1) - 1 + i,\n );\n\n const copiedPages = yield* Effect.tryPromise({\n try: async () => await newPdf.copyPages(pdfDoc, pageIndices),\n catch: (error) => {\n return UploadistaError.fromCode(\"DOCUMENT_PROCESSING_FAILED\", {\n cause: error instanceof Error ? error.message : String(error),\n });\n },\n });\n\n for (const page of copiedPages) {\n newPdf.addPage(page);\n }\n\n const pdfBytes = yield* Effect.tryPromise({\n try: async () => await newPdf.save(),\n catch: (error) => {\n return UploadistaError.fromCode(\"DOCUMENT_PROCESSING_FAILED\", {\n cause: error instanceof Error ? error.message : String(error),\n });\n },\n });\n\n const result: SplitPdfResult = {\n mode: \"range\",\n pdf: new Uint8Array(pdfBytes),\n };\n\n return result;\n }).pipe(\n withOperationSpan(\"document\", \"split-pdf\", {\n \"document.mode\": options.mode,\n \"document.start_page\": options.startPage,\n \"document.end_page\": options.endPage,\n \"document.input_size\": input.byteLength,\n }),\n );\n },\n\n mergePdfs: (options) => {\n return Effect.gen(function* () {\n if (options.pdfs.length === 0) {\n return yield* UploadistaError.fromCode(\"DOCUMENT_PROCESSING_FAILED\", {\n cause: \"At least one PDF is required for merging\",\n }).toEffect();\n }\n\n if (options.pdfs.length === 1) {\n // Single PDF, just return it\n yield* Effect.logWarning(\n \"Only one PDF provided for merging, returning original\",\n );\n return options.pdfs[0];\n }\n\n const mergedPdf = yield* Effect.tryPromise({\n try: async () => await PDFDocument.create(),\n catch: (error) => {\n return UploadistaError.fromCode(\"DOCUMENT_PROCESSING_FAILED\", {\n cause: error instanceof Error ? error.message : String(error),\n });\n },\n });\n\n for (const pdfBytes of options.pdfs) {\n const pdf = yield* Effect.tryPromise({\n try: async () =>\n await PDFDocument.load(pdfBytes, { ignoreEncryption: false }),\n catch: (error) => {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n\n if (errorMessage.toLowerCase().includes(\"encrypt\")) {\n return UploadistaError.fromCode(\"PDF_ENCRYPTED\", {\n cause: errorMessage,\n });\n }\n\n return UploadistaError.fromCode(\"DOCUMENT_PROCESSING_FAILED\", {\n cause: errorMessage,\n });\n },\n });\n\n const pageCount = pdf.getPageCount();\n const pageIndices = Array.from({ length: pageCount }, (_, i) => i);\n\n const copiedPages = yield* Effect.tryPromise({\n try: async () => await mergedPdf.copyPages(pdf, pageIndices),\n catch: (error) => {\n return UploadistaError.fromCode(\"DOCUMENT_PROCESSING_FAILED\", {\n cause: error instanceof Error ? error.message : String(error),\n });\n },\n });\n\n for (const page of copiedPages) {\n mergedPdf.addPage(page);\n }\n }\n\n const mergedBytes = yield* Effect.tryPromise({\n try: async () => await mergedPdf.save(),\n catch: (error) => {\n return UploadistaError.fromCode(\"DOCUMENT_PROCESSING_FAILED\", {\n cause: error instanceof Error ? error.message : String(error),\n });\n },\n });\n\n return new Uint8Array(mergedBytes);\n }).pipe(\n withOperationSpan(\"document\", \"merge-pdfs\", {\n \"document.input_count\": options.pdfs.length,\n }),\n );\n },\n }),\n);\n\nexport const PdfLibDocumentPluginLive = pdfLibDocumentPlugin;\n","/**\n * PDF MIME type constant\n */\nexport const PDF_MIME_TYPE = \"application/pdf\";\n\n/**\n * PDF file extension\n */\nexport const PDF_EXTENSION = \".pdf\";\n\n/**\n * Get MIME type for PDF format\n */\nexport function getPdfMimeType(): string {\n return PDF_MIME_TYPE;\n}\n\n/**\n * Get file extension for PDF format\n */\nexport function getPdfExtension(): string {\n return PDF_EXTENSION;\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@uploadista/flow-documents-pdflib",
3
3
  "type": "module",
4
- "version": "0.0.20",
4
+ "version": "0.1.0-beta.5",
5
5
  "description": "pdf-lib plugin for Uploadista document processing",
6
6
  "license": "MIT",
7
7
  "author": "Uploadista",
@@ -15,19 +15,19 @@
15
15
  },
16
16
  "dependencies": {
17
17
  "pdf-lib": "^1.17.1",
18
- "@uploadista/core": "0.0.20",
19
- "@uploadista/observability": "0.0.20"
18
+ "@uploadista/core": "0.1.0-beta.5",
19
+ "@uploadista/observability": "0.1.0-beta.5"
20
20
  },
21
21
  "peerDependencies": {
22
22
  "effect": "^3.0.0"
23
23
  },
24
24
  "devDependencies": {
25
25
  "@effect/vitest": "0.27.0",
26
- "@types/node": "24.10.4",
27
- "effect": "3.19.12",
28
- "tsdown": "0.18.0",
29
- "vitest": "4.0.15",
30
- "@uploadista/typescript-config": "0.0.20"
26
+ "@types/node": "24.10.8",
27
+ "effect": "3.19.14",
28
+ "tsdown": "0.19.0",
29
+ "vitest": "4.0.17",
30
+ "@uploadista/typescript-config": "0.1.0-beta.5"
31
31
  },
32
32
  "scripts": {
33
33
  "build": "tsc --noEmit && tsdown",
package/src/index.ts CHANGED
@@ -1,2 +1,5 @@
1
- export { pdfLibDocumentPlugin, PdfLibDocumentPluginLive } from "./document-plugin";
1
+ export {
2
+ PdfLibDocumentPluginLive,
3
+ pdfLibDocumentPlugin,
4
+ } from "./document-plugin";
2
5
  export * from "./utils/format-mappings";