pdfuse-core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs ADDED
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ isPdfFile: () => isPdfFile,
24
+ loadPdfDocument: () => loadPdfDocument,
25
+ mergeSelectedPages: () => mergeSelectedPages
26
+ });
27
+ module.exports = __toCommonJS(index_exports);
28
+
29
+ // src/loadPdf.ts
30
+ var import_pdf_lib = require("pdf-lib");
31
+ var PDF_MIME = "application/pdf";
32
+ function isPdfFile(file) {
33
+ return file.type === PDF_MIME || file.name.toLowerCase().endsWith(".pdf");
34
+ }
35
+ async function loadPdfDocument(file) {
36
+ if (!isPdfFile(file)) {
37
+ throw new Error(`"${file.name}" is not a PDF file.`);
38
+ }
39
+ const bytes = await readFileAsArrayBuffer(file);
40
+ const pdfDoc = await import_pdf_lib.PDFDocument.load(bytes, { ignoreEncryption: true });
41
+ const totalPages = pdfDoc.getPageCount();
42
+ if (totalPages === 0) {
43
+ throw new Error(`"${file.name}" has no pages.`);
44
+ }
45
+ return { pdfDoc, totalPages };
46
+ }
47
+ function readFileAsArrayBuffer(file) {
48
+ return new Promise((resolve, reject) => {
49
+ const reader = new FileReader();
50
+ reader.onload = () => resolve(reader.result);
51
+ reader.onerror = () => reject(new Error(`Could not read "${file.name}".`));
52
+ reader.readAsArrayBuffer(file);
53
+ });
54
+ }
55
+
56
+ // src/mergePdfs.ts
57
+ var import_pdf_lib2 = require("pdf-lib");
58
+ async function mergeSelectedPages(pdfs, selectedOrder) {
59
+ const merged = await import_pdf_lib2.PDFDocument.create();
60
+ for (const { pdfIndex, pageIndex } of selectedOrder) {
61
+ const src = pdfs[pdfIndex];
62
+ if (!src || pageIndex >= src.totalPages) continue;
63
+ const [copiedPage] = await merged.copyPages(src.pdfDoc, [pageIndex]);
64
+ merged.addPage(copiedPage);
65
+ }
66
+ return merged.save();
67
+ }
68
+ // Annotate the CommonJS export names for ESM import in node:
69
+ 0 && (module.exports = {
70
+ isPdfFile,
71
+ loadPdfDocument,
72
+ mergeSelectedPages
73
+ });
@@ -0,0 +1,39 @@
1
+ import { PDFDocument } from 'pdf-lib';
2
+
3
+ declare function isPdfFile(file: File): boolean;
4
+ /**
5
+ * Load a PDF file and return pdf-lib document with page count.
6
+ * @throws Error for non-PDF, corrupted or unreadable files
7
+ */
8
+ declare function loadPdfDocument(file: File): Promise<{
9
+ pdfDoc: PDFDocument;
10
+ totalPages: number;
11
+ }>;
12
+
13
+ type LoadedPDF = {
14
+ id: string;
15
+ pdfDoc: PDFDocument;
16
+ totalPages: number;
17
+ };
18
+ type PageSelection = {
19
+ pdf: LoadedPDF;
20
+ pages: number[];
21
+ };
22
+ interface UploadedPDF {
23
+ id: string;
24
+ file: File;
25
+ pdfDoc: PDFDocument;
26
+ totalPages: number;
27
+ }
28
+ /** Selection key: pdfIndex in uploaded list, pageIndex 0-based */
29
+ interface PageSelectionKey {
30
+ pdfIndex: number;
31
+ pageIndex: number;
32
+ }
33
+
34
+ /**
35
+ * Merge selected pages from multiple PDFs into a single new PDF, preserving order.
36
+ */
37
+ declare function mergeSelectedPages(pdfs: UploadedPDF[], selectedOrder: PageSelectionKey[]): Promise<Uint8Array>;
38
+
39
+ export { type LoadedPDF, type PageSelection, type PageSelectionKey, type UploadedPDF, isPdfFile, loadPdfDocument, mergeSelectedPages };
@@ -0,0 +1,39 @@
1
+ import { PDFDocument } from 'pdf-lib';
2
+
3
+ declare function isPdfFile(file: File): boolean;
4
+ /**
5
+ * Load a PDF file and return pdf-lib document with page count.
6
+ * @throws Error for non-PDF, corrupted or unreadable files
7
+ */
8
+ declare function loadPdfDocument(file: File): Promise<{
9
+ pdfDoc: PDFDocument;
10
+ totalPages: number;
11
+ }>;
12
+
13
+ type LoadedPDF = {
14
+ id: string;
15
+ pdfDoc: PDFDocument;
16
+ totalPages: number;
17
+ };
18
+ type PageSelection = {
19
+ pdf: LoadedPDF;
20
+ pages: number[];
21
+ };
22
+ interface UploadedPDF {
23
+ id: string;
24
+ file: File;
25
+ pdfDoc: PDFDocument;
26
+ totalPages: number;
27
+ }
28
+ /** Selection key: pdfIndex in uploaded list, pageIndex 0-based */
29
+ interface PageSelectionKey {
30
+ pdfIndex: number;
31
+ pageIndex: number;
32
+ }
33
+
34
+ /**
35
+ * Merge selected pages from multiple PDFs into a single new PDF, preserving order.
36
+ */
37
+ declare function mergeSelectedPages(pdfs: UploadedPDF[], selectedOrder: PageSelectionKey[]): Promise<Uint8Array>;
38
+
39
+ export { type LoadedPDF, type PageSelection, type PageSelectionKey, type UploadedPDF, isPdfFile, loadPdfDocument, mergeSelectedPages };
package/dist/index.js ADDED
@@ -0,0 +1,44 @@
1
+ // src/loadPdf.ts
2
+ import { PDFDocument } from "pdf-lib";
3
+ var PDF_MIME = "application/pdf";
4
+ function isPdfFile(file) {
5
+ return file.type === PDF_MIME || file.name.toLowerCase().endsWith(".pdf");
6
+ }
7
+ async function loadPdfDocument(file) {
8
+ if (!isPdfFile(file)) {
9
+ throw new Error(`"${file.name}" is not a PDF file.`);
10
+ }
11
+ const bytes = await readFileAsArrayBuffer(file);
12
+ const pdfDoc = await PDFDocument.load(bytes, { ignoreEncryption: true });
13
+ const totalPages = pdfDoc.getPageCount();
14
+ if (totalPages === 0) {
15
+ throw new Error(`"${file.name}" has no pages.`);
16
+ }
17
+ return { pdfDoc, totalPages };
18
+ }
19
+ function readFileAsArrayBuffer(file) {
20
+ return new Promise((resolve, reject) => {
21
+ const reader = new FileReader();
22
+ reader.onload = () => resolve(reader.result);
23
+ reader.onerror = () => reject(new Error(`Could not read "${file.name}".`));
24
+ reader.readAsArrayBuffer(file);
25
+ });
26
+ }
27
+
28
+ // src/mergePdfs.ts
29
+ import { PDFDocument as PDFDocument2 } from "pdf-lib";
30
+ async function mergeSelectedPages(pdfs, selectedOrder) {
31
+ const merged = await PDFDocument2.create();
32
+ for (const { pdfIndex, pageIndex } of selectedOrder) {
33
+ const src = pdfs[pdfIndex];
34
+ if (!src || pageIndex >= src.totalPages) continue;
35
+ const [copiedPage] = await merged.copyPages(src.pdfDoc, [pageIndex]);
36
+ merged.addPage(copiedPage);
37
+ }
38
+ return merged.save();
39
+ }
40
+ export {
41
+ isPdfFile,
42
+ loadPdfDocument,
43
+ mergeSelectedPages
44
+ };
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "pdfuse-core",
3
+ "version": "0.1.0",
4
+ "description": "Headless PDF manipulation toolkit (merge, extract, compose)",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "sideEffects": false,
8
+ "main": "./dist/index.cjs",
9
+ "module": "./dist/index.js",
10
+ "types": "./dist/index.d.ts",
11
+ "exports": {
12
+ ".": {
13
+ "import": {
14
+ "types": "./dist/index.d.ts",
15
+ "default": "./dist/index.js"
16
+ },
17
+ "require": {
18
+ "types": "./dist/index.d.cts",
19
+ "default": "./dist/index.cjs"
20
+ }
21
+ }
22
+ },
23
+ "files": [
24
+ "dist"
25
+ ],
26
+ "engines": {
27
+ "node": ">=18"
28
+ },
29
+ "scripts": {
30
+ "build": "tsup src/index.ts --format esm,cjs --dts",
31
+ "dev": "tsup src/index.ts --watch --format esm,cjs --dts",
32
+ "prepublishOnly": "npm run build"
33
+ },
34
+ "dependencies": {
35
+ "pdf-lib": "^1.17.1"
36
+ },
37
+ "devDependencies": {
38
+ "tsup": "^8.0.0",
39
+ "typescript": "^5.0.0"
40
+ }
41
+ }