@pdfme/manipulator 5.3.6

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/.eslintrc.cjs ADDED
@@ -0,0 +1,3 @@
1
+ module.exports = {
2
+ extends: ['../../eslint.base.js'],
3
+ };
package/README.md ADDED
@@ -0,0 +1,5 @@
1
+ ## @pdfme/manipulator
2
+
3
+ This library provides utility functions for merging, splitting, and manipulating PDF files.
4
+
5
+ For the complete documentation of pdfme, please refer to [this link](https://pdfme.com/docs/manipulator).
@@ -0,0 +1,511 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const fs_1 = __importDefault(require("fs"));
7
+ const path_1 = __importDefault(require("path"));
8
+ const index_1 = require("../src/index");
9
+ const utils_1 = require("./utils");
10
+ require("jest-image-snapshot");
11
+ describe('merge', () => {
12
+ test('merges multiple PDFs', async () => {
13
+ const pdf1 = await (0, utils_1.createTestPDF)(2);
14
+ const pdf2 = await (0, utils_1.createTestPDF)(3);
15
+ const merged = await (0, index_1.merge)([pdf1, pdf2]);
16
+ expect(await (0, utils_1.getPDFPageCount)(merged)).toBe(5);
17
+ });
18
+ test('throws error when no PDFs provided', async () => {
19
+ await expect((0, index_1.merge)([])).rejects.toThrow('[@pdfme/manipulator] At least one PDF is required');
20
+ });
21
+ });
22
+ describe('split', () => {
23
+ test('splits PDF into ranges', async () => {
24
+ const pdf = await (0, utils_1.createTestPDF)(5);
25
+ const splits = await (0, index_1.split)(pdf, [
26
+ { start: 0, end: 1 },
27
+ { start: 2, end: 4 },
28
+ ]);
29
+ expect(splits.length).toBe(2);
30
+ expect(await (0, utils_1.getPDFPageCount)(splits[0])).toBe(2);
31
+ expect(await (0, utils_1.getPDFPageCount)(splits[1])).toBe(3);
32
+ });
33
+ test('throws error for invalid ranges', async () => {
34
+ const pdf = await (0, utils_1.createTestPDF)(3);
35
+ await expect((0, index_1.split)(pdf, [{ start: 1, end: 0 }])).rejects.toThrow('[@pdfme/manipulator] Invalid range');
36
+ });
37
+ });
38
+ describe('remove', () => {
39
+ test('removes specified pages from PDF', async () => {
40
+ const pdf = await (0, utils_1.createTestPDF)(5);
41
+ const result = await (0, index_1.remove)(pdf, [1, 3]);
42
+ expect(await (0, utils_1.getPDFPageCount)(result)).toBe(3);
43
+ });
44
+ test('throws error when no pages provided', async () => {
45
+ const pdf = await (0, utils_1.createTestPDF)(3);
46
+ await expect((0, index_1.remove)(pdf, [])).rejects.toThrow('[@pdfme/manipulator] At least one page number is required');
47
+ });
48
+ test('throws error for invalid page numbers', async () => {
49
+ const pdf = await (0, utils_1.createTestPDF)(3);
50
+ await expect((0, index_1.remove)(pdf, [3])).rejects.toThrow('[@pdfme/manipulator] Invalid page number');
51
+ });
52
+ });
53
+ describe('insert', () => {
54
+ test('inserts PDF at specified position', async () => {
55
+ const basePdf = await (0, utils_1.createTestPDF)(3);
56
+ const insertPdf = await (0, utils_1.createTestPDF)(2);
57
+ const result = await (0, index_1.insert)(basePdf, [{ pdf: insertPdf, position: 1 }]);
58
+ expect(await (0, utils_1.getPDFPageCount)(result)).toBe(5);
59
+ });
60
+ test('throws error for invalid position', async () => {
61
+ const basePdf = await (0, utils_1.createTestPDF)(3);
62
+ const insertPdf = await (0, utils_1.createTestPDF)(2);
63
+ await expect((0, index_1.insert)(basePdf, [{ pdf: insertPdf, position: 4 }])).rejects.toThrow('[@pdfme/manipulator] Invalid position');
64
+ });
65
+ });
66
+ describe('rotate', () => {
67
+ test('rotates PDF pages by specified degrees', async () => {
68
+ const pdf = await (0, utils_1.createTestPDF)(2);
69
+ const result = await (0, index_1.rotate)(pdf, 90);
70
+ expect(await (0, utils_1.getPDFPageCount)(result)).toBe(2);
71
+ });
72
+ test('throws error for non-90-degree rotation', async () => {
73
+ const pdf = await (0, utils_1.createTestPDF)(2);
74
+ // @ts-expect-error
75
+ await expect((0, index_1.rotate)(pdf, 45)).rejects.toThrow('[@pdfme/manipulator] Rotation degrees must be a multiple of 90');
76
+ });
77
+ });
78
+ describe('move', () => {
79
+ test('moves page from one position to another', async () => {
80
+ const pdf = await (0, utils_1.createTestPDF)(3);
81
+ const result = await (0, index_1.move)(pdf, { from: 0, to: 2 });
82
+ expect(await (0, utils_1.getPDFPageCount)(result)).toBe(3);
83
+ });
84
+ test('throws error for invalid page numbers', async () => {
85
+ const pdf = await (0, utils_1.createTestPDF)(3);
86
+ await expect((0, index_1.move)(pdf, { from: 3, to: 0 })).rejects.toThrow('[@pdfme/manipulator] Invalid page number: from=3, to=0, total pages=3');
87
+ });
88
+ });
89
+ describe('organize', () => {
90
+ test('performs single remove operation', async () => {
91
+ const pdf = await (0, utils_1.createTestPDF)(5);
92
+ const result = await (0, index_1.organize)(pdf, [
93
+ { type: 'remove', data: { position: 1 } },
94
+ { type: 'remove', data: { position: 3 } },
95
+ ]);
96
+ expect(await (0, utils_1.getPDFPageCount)(result)).toBe(3);
97
+ });
98
+ test('performs single insert operation', async () => {
99
+ const pdf = await (0, utils_1.createTestPDF)(3);
100
+ const insertPdf = await (0, utils_1.createTestPDF)(2);
101
+ const result = await (0, index_1.organize)(pdf, [{ type: 'insert', data: { pdf: insertPdf, position: 1 } }]);
102
+ expect(await (0, utils_1.getPDFPageCount)(result)).toBe(5);
103
+ });
104
+ test('performs single replace operation', async () => {
105
+ const pdf = await (0, utils_1.createTestPDF)(3);
106
+ const replacePdf = await (0, utils_1.createTestPDF)(1);
107
+ const result = await (0, index_1.organize)(pdf, [
108
+ { type: 'replace', data: { position: 1, pdf: replacePdf } },
109
+ ]);
110
+ expect(await (0, utils_1.getPDFPageCount)(result)).toBe(3);
111
+ });
112
+ test('performs single rotate operation', async () => {
113
+ const pdf = await (0, utils_1.createTestPDF)(3);
114
+ const result = await (0, index_1.organize)(pdf, [
115
+ { type: 'rotate', data: { position: 0, degrees: 90 } },
116
+ { type: 'rotate', data: { position: 2, degrees: 90 } },
117
+ ]);
118
+ expect(await (0, utils_1.getPDFPageCount)(result)).toBe(3);
119
+ });
120
+ test('performs multiple operations in sequence', async () => {
121
+ const pdf = await (0, utils_1.createTestPDF)(5);
122
+ const insertPdf = await (0, utils_1.createTestPDF)(2);
123
+ const replacePdf = await (0, utils_1.createTestPDF)(1);
124
+ const result = await (0, index_1.organize)(pdf, [
125
+ { type: 'remove', data: { position: 1 } },
126
+ { type: 'remove', data: { position: 3 } },
127
+ { type: 'insert', data: { pdf: insertPdf, position: 1 } },
128
+ { type: 'replace', data: { position: 2, pdf: replacePdf } },
129
+ { type: 'rotate', data: { position: 0, degrees: 90 } },
130
+ { type: 'rotate', data: { position: 3, degrees: 90 } }, // Still 5 pages
131
+ ]);
132
+ expect(await (0, utils_1.getPDFPageCount)(result)).toBe(5);
133
+ });
134
+ test('throws error for invalid page numbers', async () => {
135
+ const pdf = await (0, utils_1.createTestPDF)(3);
136
+ await expect((0, index_1.organize)(pdf, [{ type: 'remove', data: { position: 3 } }])).rejects.toThrow('[@pdfme/manipulator] Invalid page number');
137
+ });
138
+ test('throws error for invalid position', async () => {
139
+ const pdf = await (0, utils_1.createTestPDF)(3);
140
+ const insertPdf = await (0, utils_1.createTestPDF)(1);
141
+ await expect((0, index_1.organize)(pdf, [{ type: 'insert', data: { pdf: insertPdf, position: 4 } }])).rejects.toThrow('[@pdfme/manipulator] Invalid position');
142
+ });
143
+ test('throws error for invalid rotation degrees', async () => {
144
+ const pdf = await (0, utils_1.createTestPDF)(3);
145
+ await expect(
146
+ // @ts-expect-error
147
+ (0, index_1.organize)(pdf, [{ type: 'rotate', data: { pages: [0], degrees: 45 } }])).rejects.toThrow('[@pdfme/manipulator] Rotation degrees must be a multiple of 90');
148
+ });
149
+ test('throws error for empty actions array', async () => {
150
+ const pdf = await (0, utils_1.createTestPDF)(3);
151
+ await expect((0, index_1.organize)(pdf, [])).rejects.toThrow('[@pdfme/manipulator] At least one action is required');
152
+ });
153
+ test('throws error for unknown action type', async () => {
154
+ const pdf = await (0, utils_1.createTestPDF)(3);
155
+ // @ts-expect-error
156
+ await expect((0, index_1.organize)(pdf, [{ type: 'invalid', data: { pages: [] } }])).rejects.toThrow('[@pdfme/manipulator] Unknown action type: invalid');
157
+ });
158
+ });
159
+ describe('organize', () => {
160
+ test('performs single remove operation', async () => {
161
+ const pdf = await (0, utils_1.createTestPDF)(5);
162
+ const result = await (0, index_1.organize)(pdf, [
163
+ { type: 'remove', data: { position: 1 } },
164
+ { type: 'remove', data: { position: 3 } },
165
+ ]);
166
+ expect(await (0, utils_1.getPDFPageCount)(result)).toBe(3);
167
+ });
168
+ test('performs single insert operation', async () => {
169
+ const pdf = await (0, utils_1.createTestPDF)(3);
170
+ const insertPdf = await (0, utils_1.createTestPDF)(2);
171
+ const result = await (0, index_1.organize)(pdf, [{ type: 'insert', data: { pdf: insertPdf, position: 1 } }]);
172
+ expect(await (0, utils_1.getPDFPageCount)(result)).toBe(5);
173
+ });
174
+ test('performs single replace operation', async () => {
175
+ const pdf = await (0, utils_1.createTestPDF)(3);
176
+ const replacePdf = await (0, utils_1.createTestPDF)(1);
177
+ const result = await (0, index_1.organize)(pdf, [
178
+ { type: 'replace', data: { position: 1, pdf: replacePdf } },
179
+ ]);
180
+ expect(await (0, utils_1.getPDFPageCount)(result)).toBe(3);
181
+ });
182
+ test('performs single rotate operation', async () => {
183
+ const pdf = await (0, utils_1.createTestPDF)(3);
184
+ const result = await (0, index_1.organize)(pdf, [
185
+ { type: 'rotate', data: { position: 0, degrees: 90 } },
186
+ { type: 'rotate', data: { position: 2, degrees: 90 } },
187
+ ]);
188
+ expect(await (0, utils_1.getPDFPageCount)(result)).toBe(3);
189
+ });
190
+ test('performs multiple operations in sequence', async () => {
191
+ const pdf = await (0, utils_1.createTestPDF)(5);
192
+ const insertPdf = await (0, utils_1.createTestPDF)(2);
193
+ const replacePdf = await (0, utils_1.createTestPDF)(1);
194
+ const result = await (0, index_1.organize)(pdf, [
195
+ { type: 'remove', data: { position: 1 } },
196
+ { type: 'remove', data: { position: 3 } },
197
+ { type: 'insert', data: { pdf: insertPdf, position: 1 } },
198
+ { type: 'replace', data: { position: 2, pdf: replacePdf } },
199
+ { type: 'rotate', data: { position: 0, degrees: 90 } },
200
+ { type: 'rotate', data: { position: 3, degrees: 90 } }, // Still 5 pages
201
+ ]);
202
+ expect(await (0, utils_1.getPDFPageCount)(result)).toBe(5);
203
+ });
204
+ test('throws error for invalid page numbers', async () => {
205
+ const pdf = await (0, utils_1.createTestPDF)(3);
206
+ await expect((0, index_1.organize)(pdf, [{ type: 'remove', data: { position: 3 } }])).rejects.toThrow('[@pdfme/manipulator] Invalid page number');
207
+ });
208
+ test('throws error for invalid position', async () => {
209
+ const pdf = await (0, utils_1.createTestPDF)(3);
210
+ const insertPdf = await (0, utils_1.createTestPDF)(1);
211
+ await expect((0, index_1.organize)(pdf, [{ type: 'insert', data: { pdf: insertPdf, position: 4 } }])).rejects.toThrow('[@pdfme/manipulator] Invalid position');
212
+ });
213
+ test('throws error for invalid rotation degrees', async () => {
214
+ const pdf = await (0, utils_1.createTestPDF)(3);
215
+ await expect(
216
+ // @ts-expect-error
217
+ (0, index_1.organize)(pdf, [{ type: 'rotate', data: { pages: [0], degrees: 45 } }])).rejects.toThrow('[@pdfme/manipulator] Rotation degrees must be a multiple of 90');
218
+ });
219
+ test('throws error for empty actions array', async () => {
220
+ const pdf = await (0, utils_1.createTestPDF)(3);
221
+ await expect((0, index_1.organize)(pdf, [])).rejects.toThrow('[@pdfme/manipulator] At least one action is required');
222
+ });
223
+ test('throws error for unknown action type', async () => {
224
+ const pdf = await (0, utils_1.createTestPDF)(3);
225
+ // @ts-expect-error
226
+ await expect((0, index_1.organize)(pdf, [{ type: 'invalid', data: { pages: [] } }])).rejects.toThrow('[@pdfme/manipulator] Unknown action type: invalid');
227
+ });
228
+ });
229
+ describe('PDF manipulator E2E Tests with real PDF files', () => {
230
+ const assetPath = (fileName) => path_1.default.join(__dirname, 'assets/pdfs', fileName);
231
+ function toArrayBuffer(buf) {
232
+ return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
233
+ }
234
+ const fiveP = toArrayBuffer(fs_1.default.readFileSync(assetPath('5p.pdf')));
235
+ const aPdf = toArrayBuffer(fs_1.default.readFileSync(assetPath('a.pdf')));
236
+ const bPdf = toArrayBuffer(fs_1.default.readFileSync(assetPath('b.pdf')));
237
+ const cPdf = toArrayBuffer(fs_1.default.readFileSync(assetPath('c.pdf')));
238
+ //
239
+ // merge
240
+ //
241
+ test('merge: merge a.pdf, b.pdf, c.pdf in order', async () => {
242
+ const mergedBuffer = await (0, index_1.merge)([aPdf, bPdf, cPdf]);
243
+ const images = await (0, utils_1.pdfToImages)(mergedBuffer);
244
+ for (let i = 0; i < images.length; i++) {
245
+ expect(images[i]).toMatchImageSnapshot({
246
+ customSnapshotIdentifier: `merge-abc-page${i + 1}`,
247
+ });
248
+ }
249
+ });
250
+ //
251
+ // split
252
+ //
253
+ test('split: split 5p.pdf into pages 1-2 and 3-5', async () => {
254
+ const [split12, split35] = await (0, index_1.split)(fiveP, [
255
+ { start: 0, end: 1 },
256
+ { start: 2, end: 4 }, // pages 3-5
257
+ ]);
258
+ const images12 = await (0, utils_1.pdfToImages)(split12);
259
+ const images35 = await (0, utils_1.pdfToImages)(split35);
260
+ for (let i = 0; i < images12.length; i++) {
261
+ expect(images12[i]).toMatchImageSnapshot({
262
+ customSnapshotIdentifier: `split-5p-1-2-page${i + 1}`,
263
+ });
264
+ }
265
+ for (let i = 0; i < images35.length; i++) {
266
+ expect(images35[i]).toMatchImageSnapshot({
267
+ customSnapshotIdentifier: `split-5p-3-5-page${i + 1}`,
268
+ });
269
+ }
270
+ });
271
+ //
272
+ // remove
273
+ //
274
+ test('remove: remove the 1st page of 5p.pdf', async () => {
275
+ const removed = await (0, index_1.remove)(fiveP, [0]);
276
+ const images = await (0, utils_1.pdfToImages)(removed);
277
+ for (let i = 0; i < images.length; i++) {
278
+ expect(images[i]).toMatchImageSnapshot({
279
+ customSnapshotIdentifier: `remove-5p-page1-result-page${i + 1}`,
280
+ });
281
+ }
282
+ });
283
+ test('remove: remove the 1st and 3rd pages of 5p.pdf', async () => {
284
+ // Note: This assumes removing all at once, not one by one with index shifting
285
+ const removed = await (0, index_1.remove)(fiveP, [0, 2]);
286
+ const images = await (0, utils_1.pdfToImages)(removed);
287
+ for (let i = 0; i < images.length; i++) {
288
+ expect(images[i]).toMatchImageSnapshot({
289
+ customSnapshotIdentifier: `remove-5p-pages1-3-result-page${i + 1}`,
290
+ });
291
+ }
292
+ });
293
+ //
294
+ // insert
295
+ //
296
+ test('insert: insert a.pdf at position 0 in 5p.pdf', async () => {
297
+ const inserted = await (0, index_1.insert)(fiveP, [{ pdf: aPdf, position: 0 }]);
298
+ const images = await (0, utils_1.pdfToImages)(inserted);
299
+ for (let i = 0; i < images.length; i++) {
300
+ expect(images[i]).toMatchImageSnapshot({
301
+ customSnapshotIdentifier: `insert-5p-a-at-0-result-page${i + 1}`,
302
+ });
303
+ }
304
+ });
305
+ test('insert: insert a.pdf at position 0 and 2 in 5p.pdf', async () => {
306
+ // Note: the second insert is done in the same buffer, so the offset changes after the first insert
307
+ const inserted = await (0, index_1.insert)(fiveP, [
308
+ { pdf: aPdf, position: 0 },
309
+ { pdf: aPdf, position: 2 }, // The PDF is 6 pages after the first insert
310
+ ]);
311
+ const images = await (0, utils_1.pdfToImages)(inserted);
312
+ for (let i = 0; i < images.length; i++) {
313
+ expect(images[i]).toMatchImageSnapshot({
314
+ customSnapshotIdentifier: `insert-5p-a-at-0-and-2-result-page${i + 1}`,
315
+ });
316
+ }
317
+ });
318
+ //
319
+ // rotate
320
+ //
321
+ test('rotate: rotate all pages of 5p.pdf by 90 degrees', async () => {
322
+ const rotated = await (0, index_1.rotate)(fiveP, 90);
323
+ const images = await (0, utils_1.pdfToImages)(rotated);
324
+ for (let i = 0; i < images.length; i++) {
325
+ expect(images[i]).toMatchImageSnapshot({
326
+ customSnapshotIdentifier: `rotate-5p-90deg-all-result-page${i + 1}`,
327
+ });
328
+ }
329
+ });
330
+ test('rotate: rotate only the 2nd page of 5p.pdf by 180 degrees', async () => {
331
+ // pageNumbers=[1] -> only the 2nd page is rotated by 180 degrees
332
+ const rotated = await (0, index_1.rotate)(fiveP, 180, [1]);
333
+ const images = await (0, utils_1.pdfToImages)(rotated);
334
+ for (let i = 0; i < images.length; i++) {
335
+ expect(images[i]).toMatchImageSnapshot({
336
+ customSnapshotIdentifier: `rotate-5p-180deg-page1-result-page${i + 1}`,
337
+ });
338
+ }
339
+ });
340
+ test('rotate: rotate pages 2 and 4 of 5p.pdf by 270 degrees', async () => {
341
+ // Rotate the 2nd and 4th pages by 270 degrees
342
+ const rotated = await (0, index_1.rotate)(fiveP, 270, [1, 3]);
343
+ const images = await (0, utils_1.pdfToImages)(rotated);
344
+ for (let i = 0; i < images.length; i++) {
345
+ expect(images[i]).toMatchImageSnapshot({
346
+ customSnapshotIdentifier: `rotate-5p-270deg-pages1-3-result-page${i + 1}`,
347
+ });
348
+ }
349
+ });
350
+ //
351
+ // move
352
+ //
353
+ test('move: move the 1st page (index:0) of 5p.pdf to the 3rd position (index:2)', async () => {
354
+ const moved = await (0, index_1.move)(fiveP, { from: 0, to: 2 });
355
+ const images = await (0, utils_1.pdfToImages)(moved);
356
+ for (let i = 0; i < images.length; i++) {
357
+ expect(images[i]).toMatchImageSnapshot({
358
+ customSnapshotIdentifier: `move-5p-page0-to-2-result-page${i + 1}`,
359
+ });
360
+ }
361
+ });
362
+ //
363
+ // organize (single operation)
364
+ //
365
+ test('organize: single remove (remove the 2nd page)', async () => {
366
+ const result = await (0, index_1.organize)(fiveP, [{ type: 'remove', data: { position: 1 } }]);
367
+ const images = await (0, utils_1.pdfToImages)(result);
368
+ for (let i = 0; i < images.length; i++) {
369
+ expect(images[i]).toMatchImageSnapshot({
370
+ customSnapshotIdentifier: `organize-remove-only-result-page${i + 1}`,
371
+ });
372
+ }
373
+ });
374
+ test('organize: single insert (insert a.pdf at page 1)', async () => {
375
+ const result = await (0, index_1.organize)(fiveP, [{ type: 'insert', data: { pdf: aPdf, position: 0 } }]);
376
+ const images = await (0, utils_1.pdfToImages)(result);
377
+ for (let i = 0; i < images.length; i++) {
378
+ expect(images[i]).toMatchImageSnapshot({
379
+ customSnapshotIdentifier: `organize-insert-only-result-page${i + 1}`,
380
+ });
381
+ }
382
+ });
383
+ test('organize: single replace (replace 2nd page with a.pdf)', async () => {
384
+ const result = await (0, index_1.organize)(fiveP, [{ type: 'replace', data: { pdf: aPdf, position: 1 } }]);
385
+ const images = await (0, utils_1.pdfToImages)(result);
386
+ for (let i = 0; i < images.length; i++) {
387
+ expect(images[i]).toMatchImageSnapshot({
388
+ customSnapshotIdentifier: `organize-replace-only-result-page${i + 1}`,
389
+ });
390
+ }
391
+ });
392
+ test('organize: single rotate (rotate pages 1 and 3 by 90 degrees)', async () => {
393
+ const result = await (0, index_1.organize)(fiveP, [
394
+ { type: 'rotate', data: { position: 0, degrees: 90 } },
395
+ { type: 'rotate', data: { position: 2, degrees: 90 } },
396
+ ]);
397
+ const images = await (0, utils_1.pdfToImages)(result);
398
+ for (let i = 0; i < images.length; i++) {
399
+ expect(images[i]).toMatchImageSnapshot({
400
+ customSnapshotIdentifier: `organize-rotate-only-result-page${i + 1}`,
401
+ });
402
+ }
403
+ });
404
+ test('organize: multiple operations (remove -> remove -> insert -> replace -> rotate -> rotate)', async () => {
405
+ const insertPdf = aPdf;
406
+ const replacePdf = bPdf;
407
+ const result = await (0, index_1.organize)(fiveP, [
408
+ { type: 'remove', data: { position: 1 } },
409
+ { type: 'remove', data: { position: 3 } },
410
+ { type: 'insert', data: { pdf: insertPdf, position: 1 } },
411
+ { type: 'replace', data: { position: 2, pdf: replacePdf } },
412
+ { type: 'rotate', data: { position: 0, degrees: 90 } },
413
+ { type: 'rotate', data: { position: 3, degrees: 90 } },
414
+ ]);
415
+ const images = await (0, utils_1.pdfToImages)(result);
416
+ for (let i = 0; i < images.length; i++) {
417
+ expect(images[i]).toMatchImageSnapshot({
418
+ customSnapshotIdentifier: `organize-multiple-ops-result-page${i + 1}`,
419
+ });
420
+ }
421
+ });
422
+ //
423
+ // organize - complex examples
424
+ //
425
+ test('organize: Remove -> Insert -> Move (check index changes)', async () => {
426
+ // Remove the 2nd page (index:1) => 4 pages
427
+ // Insert a.pdf at the 2nd page (index:1) => 5 pages
428
+ // Move the newly inserted page (index:1) to the 1st page (index:0) => 5 pages
429
+ const result = await (0, index_1.organize)(fiveP, [
430
+ { type: 'remove', data: { position: 1 } },
431
+ { type: 'insert', data: { pdf: aPdf, position: 1 } },
432
+ { type: 'move', data: { from: 1, to: 0 } },
433
+ ]);
434
+ const images = await (0, utils_1.pdfToImages)(result);
435
+ for (let i = 0; i < images.length; i++) {
436
+ expect(images[i]).toMatchImageSnapshot({
437
+ customSnapshotIdentifier: `organize-composite-1-result-page${i + 1}`,
438
+ });
439
+ }
440
+ });
441
+ test('organize: Replace -> Rotate -> Remove', async () => {
442
+ // Replace the 3rd page with a.pdf => 5 pages
443
+ // Rotate the 3rd page by 180 => 5 pages
444
+ // Remove the 1st page => 4 pages
445
+ const result = await (0, index_1.organize)(fiveP, [
446
+ { type: 'replace', data: { pdf: aPdf, position: 2 } },
447
+ { type: 'rotate', data: { position: 2, degrees: 180 } },
448
+ { type: 'remove', data: { position: 0 } },
449
+ ]);
450
+ const images = await (0, utils_1.pdfToImages)(result);
451
+ for (let i = 0; i < images.length; i++) {
452
+ expect(images[i]).toMatchImageSnapshot({
453
+ customSnapshotIdentifier: `organize-composite-2-result-page${i + 1}`,
454
+ });
455
+ }
456
+ });
457
+ test('organize: Insert -> Insert -> Move -> Move', async () => {
458
+ // Insert a.pdf at the end (index:5) => 6 pages
459
+ // Insert b.pdf at the start (index:0) => 7 pages
460
+ // Move the 3rd page (index:2) to the 6th page (index:5) => 7 pages
461
+ // Move the 4th page (index:3) to the 2nd page (index:1) => 7 pages
462
+ const result = await (0, index_1.organize)(fiveP, [
463
+ { type: 'insert', data: { pdf: aPdf, position: 5 } },
464
+ { type: 'insert', data: { pdf: bPdf, position: 0 } },
465
+ { type: 'move', data: { from: 2, to: 5 } },
466
+ { type: 'move', data: { from: 3, to: 1 } },
467
+ ]);
468
+ const images = await (0, utils_1.pdfToImages)(result);
469
+ for (let i = 0; i < images.length; i++) {
470
+ expect(images[i]).toMatchImageSnapshot({
471
+ customSnapshotIdentifier: `organize-composite-3-result-page${i + 1}`,
472
+ });
473
+ }
474
+ });
475
+ test('organize: Rotate -> Rotate -> Remove', async () => {
476
+ // Rotate the 2nd and 4th pages by 90 => 5 pages
477
+ // Rotate the 3rd page by 270 => 5 pages
478
+ // Remove the 1st page => 4 pages
479
+ const result = await (0, index_1.organize)(fiveP, [
480
+ { type: 'rotate', data: { position: 1, degrees: 90 } },
481
+ { type: 'rotate', data: { position: 3, degrees: 90 } },
482
+ { type: 'rotate', data: { position: 2, degrees: 270 } },
483
+ { type: 'remove', data: { position: 0 } },
484
+ ]);
485
+ const images = await (0, utils_1.pdfToImages)(result);
486
+ for (let i = 0; i < images.length; i++) {
487
+ expect(images[i]).toMatchImageSnapshot({
488
+ customSnapshotIdentifier: `organize-composite-4-result-page${i + 1}`,
489
+ });
490
+ }
491
+ });
492
+ test('organize: Remove -> Insert -> Remove -> Insert (multiple times)', async () => {
493
+ // Remove the 5th page (index:4) => 4 pages
494
+ // Insert a.pdf at the 2nd page (index:1) => 5 pages
495
+ // Remove the 1st page (index:0) => 4 pages
496
+ // Insert b.pdf at the end (index:4) => 5 pages
497
+ const result = await (0, index_1.organize)(fiveP, [
498
+ { type: 'remove', data: { position: 4 } },
499
+ { type: 'insert', data: { pdf: aPdf, position: 1 } },
500
+ { type: 'remove', data: { position: 0 } },
501
+ { type: 'insert', data: { pdf: bPdf, position: 4 } },
502
+ ]);
503
+ const images = await (0, utils_1.pdfToImages)(result);
504
+ for (let i = 0; i < images.length; i++) {
505
+ expect(images[i]).toMatchImageSnapshot({
506
+ customSnapshotIdentifier: `organize-composite-5-result-page${i + 1}`,
507
+ });
508
+ }
509
+ });
510
+ });
511
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../__tests__/index.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getPDFPageCount = exports.pdfToImages = exports.createTestPDF = void 0;
4
+ const pdf_lib_1 = require("@pdfme/pdf-lib");
5
+ const converter_1 = require("@pdfme/converter");
6
+ const createTestPDF = async (pageCount) => {
7
+ const pdfDoc = await pdf_lib_1.PDFDocument.create();
8
+ for (let i = 0; i < pageCount; i++) {
9
+ const page = pdfDoc.addPage([500, 500]);
10
+ page.drawText(`Page ${i + 1}`, {
11
+ x: 50,
12
+ y: 450,
13
+ size: 20,
14
+ });
15
+ }
16
+ return pdfDoc.save();
17
+ };
18
+ exports.createTestPDF = createTestPDF;
19
+ const pdfToImages = async (pdf) => {
20
+ const arrayBuffers = await (0, converter_1.pdf2img)(pdf, { imageType: 'png' });
21
+ return arrayBuffers.map((buf) => Buffer.from(new Uint8Array(buf)));
22
+ };
23
+ exports.pdfToImages = pdfToImages;
24
+ const getPDFPageCount = async (pdf) => {
25
+ const pdfDoc = await pdf_lib_1.PDFDocument.load(pdf);
26
+ return pdfDoc.getPageCount();
27
+ };
28
+ exports.getPDFPageCount = getPDFPageCount;
29
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../__tests__/utils.ts"],"names":[],"mappings":";;;AAAA,4CAA6C;AAC7C,gDAA2C;AAEpC,MAAM,aAAa,GAAG,KAAK,EAAE,SAAiB,EAAwB,EAAE;IAC7E,MAAM,MAAM,GAAG,MAAM,qBAAW,CAAC,MAAM,EAAE,CAAC;IAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;QAClC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE;YAC7B,CAAC,EAAE,EAAE;YACL,CAAC,EAAE,GAAG;YACN,IAAI,EAAE,EAAE;SACT,CAAC,CAAC;KACJ;IACD,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC,CAAC;AAXW,QAAA,aAAa,iBAWxB;AAEK,MAAM,WAAW,GAAG,KAAK,EAAE,GAAgB,EAAqB,EAAE;IACvE,MAAM,YAAY,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9D,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACrE,CAAC,CAAC;AAHW,QAAA,WAAW,eAGtB;AAEK,MAAM,eAAe,GAAG,KAAK,EAAE,GAAgB,EAAmB,EAAE;IACzE,MAAM,MAAM,GAAG,MAAM,qBAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,OAAO,MAAM,CAAC,YAAY,EAAE,CAAC;AAC/B,CAAC,CAAC;AAHW,QAAA,eAAe,mBAG1B"}