@pdfme/manipulator 5.4.0 → 5.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/dist/cjs/__tests__/e2e/insert.e2e.test.js +32 -0
  2. package/dist/cjs/__tests__/e2e/insert.e2e.test.js.map +1 -0
  3. package/dist/cjs/__tests__/e2e/merge.e2e.test.js +20 -0
  4. package/dist/cjs/__tests__/e2e/merge.e2e.test.js.map +1 -0
  5. package/dist/cjs/__tests__/e2e/move.e2e.test.js +18 -0
  6. package/dist/cjs/__tests__/e2e/move.e2e.test.js.map +1 -0
  7. package/dist/cjs/__tests__/e2e/organize-complex.e2e.test.js +96 -0
  8. package/dist/cjs/__tests__/e2e/organize-complex.e2e.test.js.map +1 -0
  9. package/dist/cjs/__tests__/e2e/organize-single.e2e.test.js +68 -0
  10. package/dist/cjs/__tests__/e2e/organize-single.e2e.test.js.map +1 -0
  11. package/dist/cjs/__tests__/e2e/remove.e2e.test.js +28 -0
  12. package/dist/cjs/__tests__/e2e/remove.e2e.test.js.map +1 -0
  13. package/dist/cjs/__tests__/e2e/rotate.e2e.test.js +38 -0
  14. package/dist/cjs/__tests__/e2e/rotate.e2e.test.js.map +1 -0
  15. package/dist/cjs/__tests__/e2e/split.e2e.test.js +27 -0
  16. package/dist/cjs/__tests__/e2e/split.e2e.test.js.map +1 -0
  17. package/dist/cjs/__tests__/insert.test.js +18 -0
  18. package/dist/cjs/__tests__/insert.test.js.map +1 -0
  19. package/dist/cjs/__tests__/merge.test.js +16 -0
  20. package/dist/cjs/__tests__/merge.test.js.map +1 -0
  21. package/dist/cjs/__tests__/move.test.js +16 -0
  22. package/dist/cjs/__tests__/move.test.js.map +1 -0
  23. package/dist/cjs/__tests__/organize.test.js +75 -0
  24. package/dist/cjs/__tests__/organize.test.js.map +1 -0
  25. package/dist/cjs/__tests__/remove.test.js +20 -0
  26. package/dist/cjs/__tests__/remove.test.js.map +1 -0
  27. package/dist/cjs/__tests__/rotate.test.js +17 -0
  28. package/dist/cjs/__tests__/rotate.test.js.map +1 -0
  29. package/dist/cjs/__tests__/split.test.js +21 -0
  30. package/dist/cjs/__tests__/split.test.js.map +1 -0
  31. package/dist/cjs/__tests__/test-helpers.js +44 -0
  32. package/dist/cjs/__tests__/test-helpers.js.map +1 -0
  33. package/dist/esm/__tests__/e2e/insert.e2e.test.js +30 -0
  34. package/dist/esm/__tests__/e2e/insert.e2e.test.js.map +1 -0
  35. package/dist/esm/__tests__/e2e/merge.e2e.test.js +18 -0
  36. package/dist/esm/__tests__/e2e/merge.e2e.test.js.map +1 -0
  37. package/dist/esm/__tests__/e2e/move.e2e.test.js +16 -0
  38. package/dist/esm/__tests__/e2e/move.e2e.test.js.map +1 -0
  39. package/dist/esm/__tests__/e2e/organize-complex.e2e.test.js +94 -0
  40. package/dist/esm/__tests__/e2e/organize-complex.e2e.test.js.map +1 -0
  41. package/dist/esm/__tests__/e2e/organize-single.e2e.test.js +66 -0
  42. package/dist/esm/__tests__/e2e/organize-single.e2e.test.js.map +1 -0
  43. package/dist/esm/__tests__/e2e/remove.e2e.test.js +26 -0
  44. package/dist/esm/__tests__/e2e/remove.e2e.test.js.map +1 -0
  45. package/dist/esm/__tests__/e2e/rotate.e2e.test.js +36 -0
  46. package/dist/esm/__tests__/e2e/rotate.e2e.test.js.map +1 -0
  47. package/dist/esm/__tests__/e2e/split.e2e.test.js +25 -0
  48. package/dist/esm/__tests__/e2e/split.e2e.test.js.map +1 -0
  49. package/dist/esm/__tests__/insert.test.js +16 -0
  50. package/dist/esm/__tests__/insert.test.js.map +1 -0
  51. package/dist/esm/__tests__/merge.test.js +14 -0
  52. package/dist/esm/__tests__/merge.test.js.map +1 -0
  53. package/dist/esm/__tests__/move.test.js +14 -0
  54. package/dist/esm/__tests__/move.test.js.map +1 -0
  55. package/dist/esm/__tests__/organize.test.js +73 -0
  56. package/dist/esm/__tests__/organize.test.js.map +1 -0
  57. package/dist/esm/__tests__/remove.test.js +18 -0
  58. package/dist/esm/__tests__/remove.test.js.map +1 -0
  59. package/dist/esm/__tests__/rotate.test.js +15 -0
  60. package/dist/esm/__tests__/rotate.test.js.map +1 -0
  61. package/dist/esm/__tests__/split.test.js +19 -0
  62. package/dist/esm/__tests__/split.test.js.map +1 -0
  63. package/dist/esm/__tests__/test-helpers.js +32 -0
  64. package/dist/esm/__tests__/test-helpers.js.map +1 -0
  65. package/dist/types/__tests__/e2e/merge.e2e.test.d.ts +1 -0
  66. package/dist/types/__tests__/e2e/move.e2e.test.d.ts +1 -0
  67. package/dist/types/__tests__/e2e/organize-complex.e2e.test.d.ts +1 -0
  68. package/dist/types/__tests__/e2e/organize-single.e2e.test.d.ts +1 -0
  69. package/dist/types/__tests__/e2e/remove.e2e.test.d.ts +1 -0
  70. package/dist/types/__tests__/e2e/rotate.e2e.test.d.ts +1 -0
  71. package/dist/types/__tests__/e2e/split.e2e.test.d.ts +1 -0
  72. package/dist/types/__tests__/insert.test.d.ts +1 -0
  73. package/dist/types/__tests__/merge.test.d.ts +1 -0
  74. package/dist/types/__tests__/move.test.d.ts +1 -0
  75. package/dist/types/__tests__/organize.test.d.ts +1 -0
  76. package/dist/types/__tests__/remove.test.d.ts +1 -0
  77. package/dist/types/__tests__/rotate.test.d.ts +1 -0
  78. package/dist/types/__tests__/split.test.d.ts +1 -0
  79. package/dist/types/__tests__/test-helpers.d.ts +6 -0
  80. package/package.json +1 -1
  81. package/dist/cjs/__tests__/index.test.js +0 -532
  82. package/dist/cjs/__tests__/index.test.js.map +0 -1
  83. package/dist/esm/__tests__/index.test.js +0 -527
  84. package/dist/esm/__tests__/index.test.js.map +0 -1
  85. /package/dist/types/__tests__/{index.test.d.ts → e2e/insert.e2e.test.d.ts} +0 -0
@@ -0,0 +1,44 @@
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
+ exports.loadTestPDF = exports.assetPath = exports.getPDFPageCount = exports.pdfToImages = exports.createTestPDF = void 0;
7
+ exports.toArrayBuffer = toArrayBuffer;
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const pdf_lib_1 = require("@pdfme/pdf-lib");
11
+ const converter_1 = require("@pdfme/converter");
12
+ const createTestPDF = async (pageCount) => {
13
+ const pdfDoc = await pdf_lib_1.PDFDocument.create();
14
+ for (let i = 0; i < pageCount; i++) {
15
+ const page = pdfDoc.addPage([500, 500]);
16
+ page.drawText(`Page ${i + 1}`, {
17
+ x: 50,
18
+ y: 450,
19
+ size: 20,
20
+ });
21
+ }
22
+ return pdfDoc.save();
23
+ };
24
+ exports.createTestPDF = createTestPDF;
25
+ const pdfToImages = async (pdf) => {
26
+ const arrayBuffers = await (0, converter_1.pdf2img)(pdf, { imageType: 'png' });
27
+ return arrayBuffers.map((buf) => Buffer.from(new Uint8Array(buf)));
28
+ };
29
+ exports.pdfToImages = pdfToImages;
30
+ const getPDFPageCount = async (pdf) => {
31
+ const pdfDoc = await pdf_lib_1.PDFDocument.load(pdf);
32
+ return pdfDoc.getPageCount();
33
+ };
34
+ exports.getPDFPageCount = getPDFPageCount;
35
+ const assetPath = (fileName) => path_1.default.join(__dirname, 'assets/pdfs', fileName);
36
+ exports.assetPath = assetPath;
37
+ function toArrayBuffer(buf) {
38
+ return new Uint8Array(buf);
39
+ }
40
+ const loadTestPDF = (fileName) => {
41
+ return toArrayBuffer(fs_1.default.readFileSync((0, exports.assetPath)(fileName)));
42
+ };
43
+ exports.loadTestPDF = loadTestPDF;
44
+ //# sourceMappingURL=test-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-helpers.js","sourceRoot":"","sources":["../../../__tests__/test-helpers.ts"],"names":[],"mappings":";;;;;;AA8BA,sCAEC;AAhCD,4CAAoB;AACpB,gDAAwB;AACxB,4CAA6C;AAC7C,gDAA2C;AAEpC,MAAM,aAAa,GAAG,KAAK,EAAE,SAAiB,EAAuB,EAAE;IAC5E,MAAM,MAAM,GAAG,MAAM,qBAAW,CAAC,MAAM,EAAE,CAAC;IAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,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;IACL,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC,CAAC;AAXW,QAAA,aAAa,iBAWxB;AAEK,MAAM,WAAW,GAAG,KAAK,EAAE,GAA6B,EAAqB,EAAE;IACpF,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,GAA6B,EAAmB,EAAE;IACtF,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;AAEK,MAAM,SAAS,GAAG,CAAC,QAAgB,EAAE,EAAE,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;AAAhF,QAAA,SAAS,aAAuE;AAE7F,SAAgB,aAAa,CAAC,GAAW;IACvC,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAEM,MAAM,WAAW,GAAG,CAAC,QAAgB,EAAc,EAAE;IAC1D,OAAO,aAAa,CAAC,YAAE,CAAC,YAAY,CAAC,IAAA,iBAAS,EAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC,CAAC;AAFW,QAAA,WAAW,eAEtB"}
@@ -0,0 +1,30 @@
1
+ import { insert } from '../../src/index';
2
+ import { pdfToImages, loadTestPDF } from '../test-helpers';
3
+ import 'jest-image-snapshot';
4
+ describe('E2E: insert', () => {
5
+ const fiveP = loadTestPDF('5p.pdf');
6
+ const aPdf = loadTestPDF('a.pdf');
7
+ test('insert: insert a.pdf at position 0 in 5p.pdf', async () => {
8
+ const inserted = await insert(fiveP, [{ pdf: aPdf, position: 0 }]);
9
+ const images = await pdfToImages(inserted);
10
+ for (let i = 0; i < images.length; i++) {
11
+ expect(images[i]).toMatchImageSnapshot({
12
+ customSnapshotIdentifier: `insert-5p-a-at-0-result-page${i + 1}`,
13
+ });
14
+ }
15
+ });
16
+ test('insert: insert a.pdf at position 0 and 2 in 5p.pdf', async () => {
17
+ // Note: the second insert is done in the same buffer, so the offset changes after the first insert
18
+ const inserted = await insert(fiveP, [
19
+ { pdf: aPdf, position: 0 },
20
+ { pdf: aPdf, position: 2 }, // The PDF is 6 pages after the first insert
21
+ ]);
22
+ const images = await pdfToImages(inserted);
23
+ for (let i = 0; i < images.length; i++) {
24
+ expect(images[i]).toMatchImageSnapshot({
25
+ customSnapshotIdentifier: `insert-5p-a-at-0-and-2-result-page${i + 1}`,
26
+ });
27
+ }
28
+ });
29
+ });
30
+ //# sourceMappingURL=insert.e2e.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insert.e2e.test.js","sourceRoot":"","sources":["../../../../__tests__/e2e/insert.e2e.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,qBAAqB,CAAC;AAE7B,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAElC,IAAI,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAEnE,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC;gBACrC,wBAAwB,EAAE,+BAA+B,CAAC,GAAG,CAAC,EAAE;aACjE,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QACpE,mGAAmG;QACnG,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE;YACnC,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE;YAC1B,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,4CAA4C;SACzE,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC;gBACrC,wBAAwB,EAAE,qCAAqC,CAAC,GAAG,CAAC,EAAE;aACvE,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { merge } from '../../src/index';
2
+ import { pdfToImages, loadTestPDF } from '../test-helpers';
3
+ import 'jest-image-snapshot';
4
+ describe('E2E: merge', () => {
5
+ const aPdf = loadTestPDF('a.pdf');
6
+ const bPdf = loadTestPDF('b.pdf');
7
+ const cPdf = loadTestPDF('c.pdf');
8
+ test('merge: merge a.pdf, b.pdf, c.pdf in order', async () => {
9
+ const mergedBuffer = await merge([aPdf, bPdf, cPdf]);
10
+ const images = await pdfToImages(mergedBuffer);
11
+ for (let i = 0; i < images.length; i++) {
12
+ expect(images[i]).toMatchImageSnapshot({
13
+ customSnapshotIdentifier: `merge-abc-page${i + 1}`,
14
+ });
15
+ }
16
+ });
17
+ });
18
+ //# sourceMappingURL=merge.e2e.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.e2e.test.js","sourceRoot":"","sources":["../../../../__tests__/e2e/merge.e2e.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,qBAAqB,CAAC;AAE7B,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAElC,IAAI,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAErD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC,CAAC;QAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC;gBACrC,wBAAwB,EAAE,iBAAiB,CAAC,GAAG,CAAC,EAAE;aACnD,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { move } from '../../src/index';
2
+ import { pdfToImages, loadTestPDF } from '../test-helpers';
3
+ import 'jest-image-snapshot';
4
+ describe('E2E: move', () => {
5
+ const fiveP = loadTestPDF('5p.pdf');
6
+ test('move: move the 1st page (index:0) of 5p.pdf to the 3rd position (index:2)', async () => {
7
+ const moved = await move(fiveP, { from: 0, to: 2 });
8
+ const images = await pdfToImages(moved);
9
+ for (let i = 0; i < images.length; i++) {
10
+ expect(images[i]).toMatchImageSnapshot({
11
+ customSnapshotIdentifier: `move-5p-page0-to-2-result-page${i + 1}`,
12
+ });
13
+ }
14
+ });
15
+ });
16
+ //# sourceMappingURL=move.e2e.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"move.e2e.test.js","sourceRoot":"","sources":["../../../../__tests__/e2e/move.e2e.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,qBAAqB,CAAC;AAE7B,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAEpC,IAAI,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;QAC3F,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QAEpD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;QACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC;gBACrC,wBAAwB,EAAE,iCAAiC,CAAC,GAAG,CAAC,EAAE;aACnE,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,94 @@
1
+ import { organize } from '../../src/index';
2
+ import { pdfToImages, loadTestPDF } from '../test-helpers';
3
+ import 'jest-image-snapshot';
4
+ describe('E2E: organize (complex operations)', () => {
5
+ const fiveP = loadTestPDF('5p.pdf');
6
+ const aPdf = loadTestPDF('a.pdf');
7
+ const bPdf = loadTestPDF('b.pdf');
8
+ test('organize: Remove -> Insert -> Move (check index changes)', async () => {
9
+ // Remove the 2nd page (index:1) => 4 pages
10
+ // Insert a.pdf at the 2nd page (index:1) => 5 pages
11
+ // Move the newly inserted page (index:1) to the 1st page (index:0) => 5 pages
12
+ const result = await organize(fiveP, [
13
+ { type: 'remove', data: { position: 1 } },
14
+ { type: 'insert', data: { pdf: aPdf, position: 1 } },
15
+ { type: 'move', data: { from: 1, to: 0 } },
16
+ ]);
17
+ const images = await pdfToImages(result);
18
+ for (let i = 0; i < images.length; i++) {
19
+ expect(images[i]).toMatchImageSnapshot({
20
+ customSnapshotIdentifier: `organize-composite-1-result-page${i + 1}`,
21
+ });
22
+ }
23
+ });
24
+ test('organize: Replace -> Rotate -> Remove', async () => {
25
+ // Replace the 3rd page with a.pdf => 5 pages
26
+ // Rotate the 3rd page by 180 => 5 pages
27
+ // Remove the 1st page => 4 pages
28
+ const result = await organize(fiveP, [
29
+ { type: 'replace', data: { pdf: aPdf, position: 2 } },
30
+ { type: 'rotate', data: { position: 2, degrees: 180 } },
31
+ { type: 'remove', data: { position: 0 } },
32
+ ]);
33
+ const images = await pdfToImages(result);
34
+ for (let i = 0; i < images.length; i++) {
35
+ expect(images[i]).toMatchImageSnapshot({
36
+ customSnapshotIdentifier: `organize-composite-2-result-page${i + 1}`,
37
+ });
38
+ }
39
+ });
40
+ test('organize: Insert -> Insert -> Move -> Move', async () => {
41
+ // Insert a.pdf at the end (index:5) => 6 pages
42
+ // Insert b.pdf at the start (index:0) => 7 pages
43
+ // Move the 3rd page (index:2) to the 6th page (index:5) => 7 pages
44
+ // Move the 4th page (index:3) to the 2nd page (index:1) => 7 pages
45
+ const result = await organize(fiveP, [
46
+ { type: 'insert', data: { pdf: aPdf, position: 5 } },
47
+ { type: 'insert', data: { pdf: bPdf, position: 0 } },
48
+ { type: 'move', data: { from: 2, to: 5 } },
49
+ { type: 'move', data: { from: 3, to: 1 } },
50
+ ]);
51
+ const images = await pdfToImages(result);
52
+ for (let i = 0; i < images.length; i++) {
53
+ expect(images[i]).toMatchImageSnapshot({
54
+ customSnapshotIdentifier: `organize-composite-3-result-page${i + 1}`,
55
+ });
56
+ }
57
+ });
58
+ test('organize: Rotate -> Rotate -> Remove', async () => {
59
+ // Rotate the 2nd and 4th pages by 90 => 5 pages
60
+ // Rotate the 3rd page by 270 => 5 pages
61
+ // Remove the 1st page => 4 pages
62
+ const result = await organize(fiveP, [
63
+ { type: 'rotate', data: { position: 1, degrees: 90 } },
64
+ { type: 'rotate', data: { position: 3, degrees: 90 } },
65
+ { type: 'rotate', data: { position: 2, degrees: 270 } },
66
+ { type: 'remove', data: { position: 0 } },
67
+ ]);
68
+ const images = await pdfToImages(result);
69
+ for (let i = 0; i < images.length; i++) {
70
+ expect(images[i]).toMatchImageSnapshot({
71
+ customSnapshotIdentifier: `organize-composite-4-result-page${i + 1}`,
72
+ });
73
+ }
74
+ });
75
+ test('organize: Remove -> Insert -> Remove -> Insert (multiple times)', async () => {
76
+ // Remove the 5th page (index:4) => 4 pages
77
+ // Insert a.pdf at the 2nd page (index:1) => 5 pages
78
+ // Remove the 1st page (index:0) => 4 pages
79
+ // Insert b.pdf at the end (index:4) => 5 pages
80
+ const result = await organize(fiveP, [
81
+ { type: 'remove', data: { position: 4 } },
82
+ { type: 'insert', data: { pdf: aPdf, position: 1 } },
83
+ { type: 'remove', data: { position: 0 } },
84
+ { type: 'insert', data: { pdf: bPdf, position: 4 } },
85
+ ]);
86
+ const images = await pdfToImages(result);
87
+ for (let i = 0; i < images.length; i++) {
88
+ expect(images[i]).toMatchImageSnapshot({
89
+ customSnapshotIdentifier: `organize-composite-5-result-page${i + 1}`,
90
+ });
91
+ }
92
+ });
93
+ });
94
+ //# sourceMappingURL=organize-complex.e2e.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"organize-complex.e2e.test.js","sourceRoot":"","sources":["../../../../__tests__/e2e/organize-complex.e2e.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import { organize } from '../../src/index';
2
+ import { pdfToImages, loadTestPDF } from '../test-helpers';
3
+ import 'jest-image-snapshot';
4
+ describe('E2E: organize (single operations)', () => {
5
+ const fiveP = loadTestPDF('5p.pdf');
6
+ const aPdf = loadTestPDF('a.pdf');
7
+ const bPdf = loadTestPDF('b.pdf');
8
+ test('organize: single remove (remove the 2nd page)', async () => {
9
+ const result = await organize(fiveP, [{ type: 'remove', data: { position: 1 } }]);
10
+ const images = await pdfToImages(result);
11
+ for (let i = 0; i < images.length; i++) {
12
+ expect(images[i]).toMatchImageSnapshot({
13
+ customSnapshotIdentifier: `organize-remove-only-result-page${i + 1}`,
14
+ });
15
+ }
16
+ });
17
+ test('organize: single insert (insert a.pdf at page 1)', async () => {
18
+ const result = await organize(fiveP, [{ type: 'insert', data: { pdf: aPdf, position: 0 } }]);
19
+ const images = await pdfToImages(result);
20
+ for (let i = 0; i < images.length; i++) {
21
+ expect(images[i]).toMatchImageSnapshot({
22
+ customSnapshotIdentifier: `organize-insert-only-result-page${i + 1}`,
23
+ });
24
+ }
25
+ });
26
+ test('organize: single replace (replace 2nd page with a.pdf)', async () => {
27
+ const result = await organize(fiveP, [{ type: 'replace', data: { pdf: aPdf, position: 1 } }]);
28
+ const images = await pdfToImages(result);
29
+ for (let i = 0; i < images.length; i++) {
30
+ expect(images[i]).toMatchImageSnapshot({
31
+ customSnapshotIdentifier: `organize-replace-only-result-page${i + 1}`,
32
+ });
33
+ }
34
+ });
35
+ test('organize: single rotate (rotate pages 1 and 3 by 90 degrees)', async () => {
36
+ const result = await organize(fiveP, [
37
+ { type: 'rotate', data: { position: 0, degrees: 90 } },
38
+ { type: 'rotate', data: { position: 2, degrees: 90 } },
39
+ ]);
40
+ const images = await pdfToImages(result);
41
+ for (let i = 0; i < images.length; i++) {
42
+ expect(images[i]).toMatchImageSnapshot({
43
+ customSnapshotIdentifier: `organize-rotate-only-result-page${i + 1}`,
44
+ });
45
+ }
46
+ });
47
+ test('organize: multiple operations (remove -> remove -> insert -> replace -> rotate -> rotate)', async () => {
48
+ const insertPdf = aPdf;
49
+ const replacePdf = bPdf;
50
+ const result = await organize(fiveP, [
51
+ { type: 'remove', data: { position: 1 } },
52
+ { type: 'remove', data: { position: 3 } }, // 5 -> 3 pages
53
+ { type: 'insert', data: { pdf: insertPdf, position: 1 } }, // 3 -> 4 pages
54
+ { type: 'replace', data: { position: 2, pdf: replacePdf } }, // still 4 pages
55
+ { type: 'rotate', data: { position: 0, degrees: 90 } },
56
+ { type: 'rotate', data: { position: 3, degrees: 90 } },
57
+ ]);
58
+ const images = await pdfToImages(result);
59
+ for (let i = 0; i < images.length; i++) {
60
+ expect(images[i]).toMatchImageSnapshot({
61
+ customSnapshotIdentifier: `organize-multiple-ops-result-page${i + 1}`,
62
+ });
63
+ }
64
+ });
65
+ });
66
+ //# sourceMappingURL=organize-single.e2e.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"organize-single.e2e.test.js","sourceRoot":"","sources":["../../../../__tests__/e2e/organize-single.e2e.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,qBAAqB,CAAC;AAE7B,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;IACjD,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAElC,IAAI,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAElF,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;QACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC;gBACrC,wBAAwB,EAAE,mCAAmC,CAAC,GAAG,CAAC,EAAE;aACrE,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAE7F,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;QACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC;gBACrC,wBAAwB,EAAE,mCAAmC,CAAC,GAAG,CAAC,EAAE;aACrE,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAE9F,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;QACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC;gBACrC,wBAAwB,EAAE,oCAAoC,CAAC,GAAG,CAAC,EAAE;aACtE,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE;YACnC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE;YACtD,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE;SACvD,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;QACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC;gBACrC,wBAAwB,EAAE,mCAAmC,CAAC,GAAG,CAAC,EAAE;aACrE,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,2FAA2F,EAAE,KAAK,IAAI,EAAE;QAC3G,MAAM,SAAS,GAAG,IAAI,CAAC;QACvB,MAAM,UAAU,GAAG,IAAI,CAAC;QACxB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE;YACnC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE;YACzC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,eAAe;YAC1D,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,eAAe;YAC1E,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,gBAAgB;YAC7E,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE;YACtD,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE;SACvD,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;QACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC;gBACrC,wBAAwB,EAAE,oCAAoC,CAAC,GAAG,CAAC,EAAE;aACtE,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { remove } from '../../src/index';
2
+ import { pdfToImages, loadTestPDF } from '../test-helpers';
3
+ import 'jest-image-snapshot';
4
+ describe('E2E: remove', () => {
5
+ const fiveP = loadTestPDF('5p.pdf');
6
+ test('remove: remove the 1st page of 5p.pdf', async () => {
7
+ const removed = await remove(fiveP, [0]);
8
+ const images = await pdfToImages(removed);
9
+ for (let i = 0; i < images.length; i++) {
10
+ expect(images[i]).toMatchImageSnapshot({
11
+ customSnapshotIdentifier: `remove-5p-page1-result-page${i + 1}`,
12
+ });
13
+ }
14
+ });
15
+ test('remove: remove the 1st and 3rd pages of 5p.pdf', async () => {
16
+ // Note: This assumes removing all at once, not one by one with index shifting
17
+ const removed = await remove(fiveP, [0, 2]);
18
+ const images = await pdfToImages(removed);
19
+ for (let i = 0; i < images.length; i++) {
20
+ expect(images[i]).toMatchImageSnapshot({
21
+ customSnapshotIdentifier: `remove-5p-pages1-3-result-page${i + 1}`,
22
+ });
23
+ }
24
+ });
25
+ });
26
+ //# sourceMappingURL=remove.e2e.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove.e2e.test.js","sourceRoot":"","sources":["../../../../__tests__/e2e/remove.e2e.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,qBAAqB,CAAC;AAE7B,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAEpC,IAAI,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;QAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC;gBACrC,wBAAwB,EAAE,8BAA8B,CAAC,GAAG,CAAC,EAAE;aAChE,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAChE,8EAA8E;QAC9E,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAE5C,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;QAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC;gBACrC,wBAAwB,EAAE,iCAAiC,CAAC,GAAG,CAAC,EAAE;aACnE,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { rotate } from '../../src/index';
2
+ import { pdfToImages, loadTestPDF } from '../test-helpers';
3
+ import 'jest-image-snapshot';
4
+ describe('E2E: rotate', () => {
5
+ const fiveP = loadTestPDF('5p.pdf');
6
+ test('rotate: rotate all pages of 5p.pdf by 90 degrees', async () => {
7
+ const rotated = await rotate(fiveP, 90);
8
+ const images = await pdfToImages(rotated);
9
+ for (let i = 0; i < images.length; i++) {
10
+ expect(images[i]).toMatchImageSnapshot({
11
+ customSnapshotIdentifier: `rotate-5p-90deg-all-result-page${i + 1}`,
12
+ });
13
+ }
14
+ });
15
+ test('rotate: rotate only the 2nd page of 5p.pdf by 180 degrees', async () => {
16
+ // pageNumbers=[1] -> only the 2nd page is rotated by 180 degrees
17
+ const rotated = await rotate(fiveP, 180, [1]);
18
+ const images = await pdfToImages(rotated);
19
+ for (let i = 0; i < images.length; i++) {
20
+ expect(images[i]).toMatchImageSnapshot({
21
+ customSnapshotIdentifier: `rotate-5p-180deg-page1-result-page${i + 1}`,
22
+ });
23
+ }
24
+ });
25
+ test('rotate: rotate pages 2 and 4 of 5p.pdf by 270 degrees', async () => {
26
+ // Rotate the 2nd and 4th pages by 270 degrees
27
+ const rotated = await rotate(fiveP, 270, [1, 3]);
28
+ const images = await pdfToImages(rotated);
29
+ for (let i = 0; i < images.length; i++) {
30
+ expect(images[i]).toMatchImageSnapshot({
31
+ customSnapshotIdentifier: `rotate-5p-270deg-pages1-3-result-page${i + 1}`,
32
+ });
33
+ }
34
+ });
35
+ });
36
+ //# sourceMappingURL=rotate.e2e.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rotate.e2e.test.js","sourceRoot":"","sources":["../../../../__tests__/e2e/rotate.e2e.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,qBAAqB,CAAC;AAE7B,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAEpC,IAAI,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAExC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;QAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC;gBACrC,wBAAwB,EAAE,kCAAkC,CAAC,GAAG,CAAC,EAAE;aACpE,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QAC3E,iEAAiE;QACjE,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAE9C,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;QAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC;gBACrC,wBAAwB,EAAE,qCAAqC,CAAC,GAAG,CAAC,EAAE;aACvE,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACvE,8CAA8C;QAC9C,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAEjD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;QAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC;gBACrC,wBAAwB,EAAE,wCAAwC,CAAC,GAAG,CAAC,EAAE;aAC1E,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { split } from '../../src/index';
2
+ import { pdfToImages, loadTestPDF } from '../test-helpers';
3
+ import 'jest-image-snapshot';
4
+ describe('E2E: split', () => {
5
+ const fiveP = loadTestPDF('5p.pdf');
6
+ test('split: split 5p.pdf into pages 1-2 and 3-5', async () => {
7
+ const [split12, split35] = await split(fiveP, [
8
+ { start: 0, end: 1 }, // pages 1-2
9
+ { start: 2, end: 4 }, // pages 3-5
10
+ ]);
11
+ const images12 = await pdfToImages(split12);
12
+ const images35 = await pdfToImages(split35);
13
+ for (let i = 0; i < images12.length; i++) {
14
+ expect(images12[i]).toMatchImageSnapshot({
15
+ customSnapshotIdentifier: `split-5p-1-2-page${i + 1}`,
16
+ });
17
+ }
18
+ for (let i = 0; i < images35.length; i++) {
19
+ expect(images35[i]).toMatchImageSnapshot({
20
+ customSnapshotIdentifier: `split-5p-3-5-page${i + 1}`,
21
+ });
22
+ }
23
+ });
24
+ });
25
+ //# sourceMappingURL=split.e2e.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split.e2e.test.js","sourceRoot":"","sources":["../../../../__tests__/e2e/split.e2e.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,qBAAqB,CAAC;AAE7B,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAEpC,IAAI,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE;YAC5C,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,YAAY;YAClC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,YAAY;SACnC,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;QAE5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC;gBACvC,wBAAwB,EAAE,oBAAoB,CAAC,GAAG,CAAC,EAAE;aACtD,CAAC,CAAC;QACL,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC;gBACvC,wBAAwB,EAAE,oBAAoB,CAAC,GAAG,CAAC,EAAE;aACtD,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { insert } from '../src/index';
2
+ import { createTestPDF, getPDFPageCount } from './test-helpers';
3
+ describe('insert', () => {
4
+ test('inserts PDF at specified position', async () => {
5
+ const basePdf = await createTestPDF(3);
6
+ const insertPdf = await createTestPDF(2);
7
+ const result = await insert(basePdf, [{ pdf: insertPdf, position: 1 }]);
8
+ expect(await getPDFPageCount(result)).toBe(5);
9
+ });
10
+ test('throws error for invalid position', async () => {
11
+ const basePdf = await createTestPDF(3);
12
+ const insertPdf = await createTestPDF(2);
13
+ await expect(insert(basePdf, [{ pdf: insertPdf, position: 4 }])).rejects.toThrow('[@pdfme/manipulator] Invalid position');
14
+ });
15
+ });
16
+ //# sourceMappingURL=insert.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insert.test.js","sourceRoot":"","sources":["../../../__tests__/insert.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEhE,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,IAAI,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACxE,MAAM,CAAC,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAC9E,uCAAuC,CACxC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { merge } from '../src/index';
2
+ import { createTestPDF, getPDFPageCount } from './test-helpers';
3
+ describe('merge', () => {
4
+ test('merges multiple PDFs', async () => {
5
+ const pdf1 = await createTestPDF(2);
6
+ const pdf2 = await createTestPDF(3);
7
+ const merged = await merge([pdf1, pdf2]);
8
+ expect(await getPDFPageCount(merged)).toBe(5);
9
+ });
10
+ test('throws error when no PDFs provided', async () => {
11
+ await expect(merge([])).rejects.toThrow('[@pdfme/manipulator] At least one PDF is required');
12
+ });
13
+ });
14
+ //# sourceMappingURL=merge.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.test.js","sourceRoot":"","sources":["../../../__tests__/merge.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEhE,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IACrB,IAAI,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QACtC,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,mDAAmD,CAAC,CAAC;IAC/F,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { move } from '../src/index';
2
+ import { createTestPDF, getPDFPageCount } from './test-helpers';
3
+ describe('move', () => {
4
+ test('moves page from one position to another', async () => {
5
+ const pdf = await createTestPDF(3);
6
+ const result = await move(pdf, { from: 0, to: 2 });
7
+ expect(await getPDFPageCount(result)).toBe(3);
8
+ });
9
+ test('throws error for invalid page numbers', async () => {
10
+ const pdf = await createTestPDF(3);
11
+ await expect(move(pdf, { from: 3, to: 0 })).rejects.toThrow('[@pdfme/manipulator] Invalid page number: from=3, to=0, total pages=3');
12
+ });
13
+ });
14
+ //# sourceMappingURL=move.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"move.test.js","sourceRoot":"","sources":["../../../__tests__/move.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEhE,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;IACpB,IAAI,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QACnD,MAAM,CAAC,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CACzD,uEAAuE,CACxE,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,73 @@
1
+ import { organize } from '../src/index';
2
+ import { createTestPDF, getPDFPageCount } from './test-helpers';
3
+ describe('organize', () => {
4
+ test('performs single remove operation', async () => {
5
+ const pdf = await createTestPDF(5);
6
+ const result = await organize(pdf, [
7
+ { type: 'remove', data: { position: 1 } },
8
+ { type: 'remove', data: { position: 3 } },
9
+ ]);
10
+ expect(await getPDFPageCount(result)).toBe(3);
11
+ });
12
+ test('performs single insert operation', async () => {
13
+ const pdf = await createTestPDF(3);
14
+ const insertPdf = await createTestPDF(2);
15
+ const result = await organize(pdf, [{ type: 'insert', data: { pdf: insertPdf, position: 1 } }]);
16
+ expect(await getPDFPageCount(result)).toBe(5);
17
+ });
18
+ test('performs single replace operation', async () => {
19
+ const pdf = await createTestPDF(3);
20
+ const replacePdf = await createTestPDF(1);
21
+ const result = await organize(pdf, [
22
+ { type: 'replace', data: { position: 1, pdf: replacePdf } },
23
+ ]);
24
+ expect(await getPDFPageCount(result)).toBe(3);
25
+ });
26
+ test('performs single rotate operation', async () => {
27
+ const pdf = await createTestPDF(3);
28
+ const result = await organize(pdf, [
29
+ { type: 'rotate', data: { position: 0, degrees: 90 } },
30
+ { type: 'rotate', data: { position: 2, degrees: 90 } },
31
+ ]);
32
+ expect(await getPDFPageCount(result)).toBe(3);
33
+ });
34
+ test('performs multiple operations in sequence', async () => {
35
+ const pdf = await createTestPDF(5);
36
+ const insertPdf = await createTestPDF(2);
37
+ const replacePdf = await createTestPDF(1);
38
+ const result = await organize(pdf, [
39
+ { type: 'remove', data: { position: 1 } },
40
+ { type: 'remove', data: { position: 3 } }, // 5 -> 3 pages
41
+ { type: 'insert', data: { pdf: insertPdf, position: 1 } }, // 3 -> 5 pages
42
+ { type: 'replace', data: { position: 2, pdf: replacePdf } }, // Still 5 pages
43
+ { type: 'rotate', data: { position: 0, degrees: 90 } },
44
+ { type: 'rotate', data: { position: 3, degrees: 90 } }, // Still 5 pages
45
+ ]);
46
+ expect(await getPDFPageCount(result)).toBe(5);
47
+ });
48
+ test('throws error for invalid page numbers', async () => {
49
+ const pdf = await createTestPDF(3);
50
+ await expect(organize(pdf, [{ type: 'remove', data: { position: 3 } }])).rejects.toThrow('[@pdfme/manipulator] Invalid page number');
51
+ });
52
+ test('throws error for invalid position', async () => {
53
+ const pdf = await createTestPDF(3);
54
+ const insertPdf = await createTestPDF(1);
55
+ await expect(organize(pdf, [{ type: 'insert', data: { pdf: insertPdf, position: 4 } }])).rejects.toThrow('[@pdfme/manipulator] Invalid position');
56
+ });
57
+ test('throws error for invalid rotation degrees', async () => {
58
+ const pdf = await createTestPDF(3);
59
+ await expect(
60
+ // @ts-expect-error
61
+ organize(pdf, [{ type: 'rotate', data: { pages: [0], degrees: 45 } }])).rejects.toThrow('[@pdfme/manipulator] Rotation degrees must be a multiple of 90');
62
+ });
63
+ test('throws error for empty actions array', async () => {
64
+ const pdf = await createTestPDF(3);
65
+ await expect(organize(pdf, [])).rejects.toThrow('[@pdfme/manipulator] At least one action is required');
66
+ });
67
+ test('throws error for unknown action type', async () => {
68
+ const pdf = await createTestPDF(3);
69
+ // @ts-expect-error
70
+ await expect(organize(pdf, [{ type: 'invalid', data: { pages: [] } }])).rejects.toThrow('[@pdfme/manipulator] Unknown action type: invalid');
71
+ });
72
+ });
73
+ //# sourceMappingURL=organize.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"organize.test.js","sourceRoot":"","sources":["../../../__tests__/organize.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { remove } from '../src/index';
2
+ import { createTestPDF, getPDFPageCount } from './test-helpers';
3
+ describe('remove', () => {
4
+ test('removes specified pages from PDF', async () => {
5
+ const pdf = await createTestPDF(5);
6
+ const result = await remove(pdf, [1, 3]);
7
+ expect(await getPDFPageCount(result)).toBe(3);
8
+ });
9
+ test('throws error when no pages provided', async () => {
10
+ const pdf = await createTestPDF(3);
11
+ await expect(remove(pdf, [])).rejects.toThrow('[@pdfme/manipulator] At least one page number is required');
12
+ });
13
+ test('throws error for invalid page numbers', async () => {
14
+ const pdf = await createTestPDF(3);
15
+ await expect(remove(pdf, [3])).rejects.toThrow('[@pdfme/manipulator] Invalid page number');
16
+ });
17
+ });
18
+ //# sourceMappingURL=remove.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove.test.js","sourceRoot":"","sources":["../../../__tests__/remove.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEhE,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,IAAI,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAClD,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAC3C,2DAA2D,CAC5D,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAAC;IAC7F,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { rotate } from '../src/index';
2
+ import { createTestPDF, getPDFPageCount } from './test-helpers';
3
+ describe('rotate', () => {
4
+ test('rotates PDF pages by specified degrees', async () => {
5
+ const pdf = await createTestPDF(2);
6
+ const result = await rotate(pdf, 90);
7
+ expect(await getPDFPageCount(result)).toBe(2);
8
+ });
9
+ test('throws error for non-90-degree rotation', async () => {
10
+ const pdf = await createTestPDF(2);
11
+ // @ts-expect-error
12
+ await expect(rotate(pdf, 45)).rejects.toThrow('[@pdfme/manipulator] Rotation degrees must be a multiple of 90');
13
+ });
14
+ });
15
+ //# sourceMappingURL=rotate.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rotate.test.js","sourceRoot":"","sources":["../../../__tests__/rotate.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEhE,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,IAAI,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,CAAC,CAAC,CAAC;QACnC,mBAAmB;QACnB,MAAM,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAC3C,gEAAgE,CACjE,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}