@pdfme/manipulator 5.3.8-dev.9 → 5.3.9-dev.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pdfme/manipulator",
3
- "version": "5.3.8-dev.9",
3
+ "version": "5.3.9-dev.1",
4
4
  "sideEffects": false,
5
5
  "author": "hand-dot",
6
6
  "license": "MIT",
@@ -37,7 +37,7 @@
37
37
  "build:cjs": "tsc -p tsconfig.cjs.json",
38
38
  "build:esm": "tsc -p tsconfig.esm.json",
39
39
  "clean": "rimraf dist",
40
- "lint": "eslint --ext .ts src",
40
+ "lint": "eslint --ext .ts src --config eslint.config.mjs",
41
41
  "test": "jest",
42
42
  "test:update-snapshots": "jest --updateSnapshot",
43
43
  "prune": "ts-prune src",
@@ -54,21 +54,28 @@
54
54
  "@types/estree": "^1.0.6"
55
55
  },
56
56
  "jest": {
57
- "preset": "ts-jest",
57
+ "preset": "ts-jest/presets/default-esm",
58
58
  "testEnvironment": "node",
59
+ "testMatch": [
60
+ "**/__tests__/**/*.test.ts"
61
+ ],
59
62
  "setupFilesAfterEnv": [
60
63
  "<rootDir>/jest.setup.js"
61
64
  ],
62
- "testMatch": [
63
- "**/__tests__/**/*.test.ts"
65
+ "extensionsToTreatAsEsm": [
66
+ ".ts"
64
67
  ],
65
68
  "transform": {
66
69
  "^.+\\.tsx?$": [
67
70
  "ts-jest",
68
71
  {
69
- "tsconfig": "./tsconfig.json"
72
+ "tsconfig": "./tsconfig.json",
73
+ "useESM": true
70
74
  }
71
75
  ]
76
+ },
77
+ "moduleNameMapper": {
78
+ "^(\\.{1,2}/(?:src|__tests__)/.*)\\.js$": "$1.ts"
72
79
  }
73
80
  }
74
81
  }
package/src/index.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { PDFDocument, RotationTypes } from '@pdfme/pdf-lib';
2
2
 
3
- export const merge = async (pdfs: ArrayBuffer[]): Promise<ArrayBuffer> => {
3
+ export const merge = async (pdfs: (ArrayBuffer | Uint8Array)[]): Promise<Uint8Array> => {
4
4
  if (!pdfs.length) {
5
5
  throw new Error('[@pdfme/manipulator] At least one PDF is required for merging');
6
6
  }
@@ -15,28 +15,28 @@ export const merge = async (pdfs: ArrayBuffer[]): Promise<ArrayBuffer> => {
15
15
  };
16
16
 
17
17
  export const split = async (
18
- pdf: ArrayBuffer,
19
- ranges: { start?: number; end?: number }[]
20
- ): Promise<ArrayBuffer[]> => {
18
+ pdf: ArrayBuffer | Uint8Array,
19
+ ranges: { start?: number; end?: number }[],
20
+ ): Promise<Uint8Array[]> => {
21
21
  if (!ranges.length) {
22
22
  throw new Error('[@pdfme/manipulator] At least one range is required for splitting');
23
23
  }
24
24
 
25
25
  const originalPdf = await PDFDocument.load(pdf);
26
26
  const numPages = originalPdf.getPages().length;
27
- const result: ArrayBuffer[] = [];
27
+ const result: Uint8Array[] = [];
28
28
 
29
29
  for (const { start = 0, end = numPages - 1 } of ranges) {
30
30
  if (start < 0 || end >= numPages || start > end) {
31
31
  throw new Error(
32
- `[@pdfme/manipulator] Invalid range: start=${start}, end=${end}, total pages=${numPages}`
32
+ `[@pdfme/manipulator] Invalid range: start=${start}, end=${end}, total pages=${numPages}`,
33
33
  );
34
34
  }
35
35
 
36
36
  const newPdf = await PDFDocument.create();
37
37
  const pages = await newPdf.copyPages(
38
38
  originalPdf,
39
- Array.from({ length: end - start + 1 }, (_, i) => i + start)
39
+ Array.from({ length: end - start + 1 }, (_, i) => i + start),
40
40
  );
41
41
  pages.forEach((page) => newPdf.addPage(page));
42
42
  result.push(await newPdf.save());
@@ -44,7 +44,7 @@ export const split = async (
44
44
  return result;
45
45
  };
46
46
 
47
- export const remove = async (pdf: ArrayBuffer, pages: number[]): Promise<ArrayBuffer> => {
47
+ export const remove = async (pdf: ArrayBuffer | Uint8Array, pages: number[]): Promise<Uint8Array> => {
48
48
  if (!pages.length) {
49
49
  throw new Error('[@pdfme/manipulator] At least one page number is required for removal');
50
50
  }
@@ -54,7 +54,7 @@ export const remove = async (pdf: ArrayBuffer, pages: number[]): Promise<ArrayBu
54
54
 
55
55
  if (pages.some((page) => page < 0 || page >= numPages)) {
56
56
  throw new Error(
57
- `[@pdfme/manipulator] Invalid page number: pages must be between 0 and ${numPages - 1}`
57
+ `[@pdfme/manipulator] Invalid page number: pages must be between 0 and ${numPages - 1}`,
58
58
  );
59
59
  }
60
60
 
@@ -63,9 +63,9 @@ export const remove = async (pdf: ArrayBuffer, pages: number[]): Promise<ArrayBu
63
63
  };
64
64
 
65
65
  export const insert = async (
66
- basePdf: ArrayBuffer,
67
- inserts: { pdf: ArrayBuffer; position: number }[]
68
- ): Promise<ArrayBuffer> => {
66
+ basePdf: ArrayBuffer | Uint8Array,
67
+ inserts: { pdf: ArrayBuffer | Uint8Array; position: number }[],
68
+ ): Promise<Uint8Array> => {
69
69
  inserts.sort((a, b) => a.position - b.position);
70
70
 
71
71
  let currentPdf = basePdf;
@@ -88,7 +88,7 @@ export const insert = async (
88
88
  if (actualPos > 0) {
89
89
  const beforePages = await newPdfDoc.copyPages(
90
90
  basePdfDoc,
91
- Array.from({ length: actualPos }, (_, idx) => idx)
91
+ Array.from({ length: actualPos }, (_, idx) => idx),
92
92
  );
93
93
  beforePages.forEach((page) => newPdfDoc.addPage(page));
94
94
  }
@@ -99,7 +99,7 @@ export const insert = async (
99
99
  if (actualPos < numPages) {
100
100
  const afterPages = await newPdfDoc.copyPages(
101
101
  basePdfDoc,
102
- Array.from({ length: numPages - actualPos }, (_, idx) => idx + actualPos)
102
+ Array.from({ length: numPages - actualPos }, (_, idx) => idx + actualPos),
103
103
  );
104
104
  afterPages.forEach((page) => newPdfDoc.addPage(page));
105
105
  }
@@ -109,14 +109,15 @@ export const insert = async (
109
109
  offset += insertDoc.getPageCount();
110
110
  }
111
111
 
112
- return currentPdf;
112
+ const pdfDoc = await PDFDocument.load(currentPdf);
113
+ return pdfDoc.save();
113
114
  };
114
115
 
115
116
  export const rotate = async (
116
- pdf: ArrayBuffer,
117
+ pdf: ArrayBuffer | Uint8Array,
117
118
  degrees: 0 | 90 | 180 | 270 | 360,
118
- pageNumbers?: number[]
119
- ): Promise<ArrayBuffer> => {
119
+ pageNumbers?: number[],
120
+ ): Promise<Uint8Array> => {
120
121
  if (!Number.isInteger(degrees) || degrees % 90 !== 0) {
121
122
  throw new Error('[@pdfme/manipulator] Rotation degrees must be a multiple of 90');
122
123
  }
@@ -137,7 +138,7 @@ export const rotate = async (
137
138
  if (pageNumbers) {
138
139
  if (pageNumbers.some((page) => page < 0 || page >= pages.length)) {
139
140
  throw new Error(
140
- `[@pdfme/manipulator] Invalid page number: pages must be between 0 and ${pages.length - 1}`
141
+ `[@pdfme/manipulator] Invalid page number: pages must be between 0 and ${pages.length - 1}`,
141
142
  );
142
143
  }
143
144
  }
@@ -156,21 +157,21 @@ export const rotate = async (
156
157
  };
157
158
 
158
159
  export const move = async (
159
- pdf: ArrayBuffer,
160
- operation: { from: number; to: number }
161
- ): Promise<ArrayBuffer> => {
160
+ pdf: ArrayBuffer | Uint8Array,
161
+ operation: { from: number; to: number },
162
+ ): Promise<Uint8Array> => {
162
163
  const { from, to } = operation;
163
164
  const pdfDoc = await PDFDocument.load(pdf);
164
165
  const currentPageCount = pdfDoc.getPageCount();
165
166
 
166
167
  if (from < 0 || from >= currentPageCount || to < 0 || to >= currentPageCount) {
167
168
  throw new Error(
168
- `[@pdfme/manipulator] Invalid page number: from=${from}, to=${to}, total pages=${currentPageCount}`
169
+ `[@pdfme/manipulator] Invalid page number: from=${from}, to=${to}, total pages=${currentPageCount}`,
169
170
  );
170
171
  }
171
172
 
172
173
  if (from === to) {
173
- return pdf;
174
+ return pdfDoc.save();
174
175
  }
175
176
 
176
177
  const page = pdfDoc.getPage(from);
@@ -182,17 +183,16 @@ export const move = async (
182
183
  return pdfDoc.save();
183
184
  };
184
185
 
185
-
186
186
  export const organize = async (
187
- pdf: ArrayBuffer,
187
+ pdf: ArrayBuffer | Uint8Array,
188
188
  actions: Array<
189
189
  | { type: 'remove'; data: { position: number } }
190
- | { type: 'insert'; data: { pdf: ArrayBuffer; position: number } }
191
- | { type: 'replace'; data: { pdf: ArrayBuffer; position: number } }
190
+ | { type: 'insert'; data: { pdf: ArrayBuffer | Uint8Array; position: number } }
191
+ | { type: 'replace'; data: { pdf: ArrayBuffer | Uint8Array; position: number } }
192
192
  | { type: 'rotate'; data: { position: number; degrees: 0 | 90 | 180 | 270 | 360 } }
193
193
  | { type: 'move'; data: { from: number; to: number } }
194
- >
195
- ): Promise<ArrayBuffer> => {
194
+ >,
195
+ ): Promise<Uint8Array> => {
196
196
  if (!actions.length) {
197
197
  throw new Error('[@pdfme/manipulator] At least one action is required');
198
198
  }
@@ -200,7 +200,7 @@ export const organize = async (
200
200
  let currentPdf = await PDFDocument.load(pdf);
201
201
 
202
202
  for (const action of actions) {
203
- const currentBuffer = (await currentPdf.save()).buffer;
203
+ const currentBuffer = await currentPdf.save();
204
204
 
205
205
  switch (action.type) {
206
206
  case 'remove':
@@ -219,7 +219,7 @@ export const organize = async (
219
219
 
220
220
  case 'rotate':
221
221
  currentPdf = await PDFDocument.load(
222
- await rotate(currentBuffer, action.data.degrees, [action.data.position])
222
+ await rotate(currentBuffer, action.data.degrees, [action.data.position]),
223
223
  );
224
224
  break;
225
225
 
package/tsconfig.cjs.json CHANGED
@@ -7,4 +7,4 @@
7
7
  "declarationDir": "dist/types",
8
8
  "skipLibCheck": true
9
9
  }
10
- }
10
+ }
package/tsconfig.esm.json CHANGED
@@ -2,9 +2,10 @@
2
2
  "extends": "../../tsconfig.base",
3
3
  "compilerOptions": {
4
4
  "module": "ESNext",
5
+ "moduleResolution": "bundler",
5
6
  "outDir": "./dist/esm",
6
7
  "declaration": true,
7
8
  "declarationDir": "dist/types",
8
9
  "skipLibCheck": true
9
10
  }
10
- }
11
+ }
package/.eslintrc.cjs DELETED
@@ -1,3 +0,0 @@
1
- module.exports = {
2
- extends: ['../../eslint.base.js'],
3
- };