From 9e0c29496f8254ff09e8ae9ea3959fc42c3e8f96 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 29 Dec 2025 13:14:00 +0200 Subject: [PATCH] refactor(pdfjs): use TypeScript for the custom script --- packages/pdfjs-viewer/scripts/build.ts | 16 +++++++++++- .../src/{custom.mjs => custom.ts} | 12 ++++----- packages/pdfjs-viewer/src/typings.d.ts | 14 ++++++++++ packages/pdfjs-viewer/tsconfig.app.json | 26 +++++++++++++++++++ packages/pdfjs-viewer/tsconfig.json | 9 +++++++ 5 files changed, 70 insertions(+), 7 deletions(-) rename packages/pdfjs-viewer/src/{custom.mjs => custom.ts} (88%) create mode 100644 packages/pdfjs-viewer/src/typings.d.ts create mode 100644 packages/pdfjs-viewer/tsconfig.app.json create mode 100644 packages/pdfjs-viewer/tsconfig.json diff --git a/packages/pdfjs-viewer/scripts/build.ts b/packages/pdfjs-viewer/scripts/build.ts index 3d18617d2..d4b04f322 100644 --- a/packages/pdfjs-viewer/scripts/build.ts +++ b/packages/pdfjs-viewer/scripts/build.ts @@ -1,13 +1,27 @@ +import { join } from "path"; import BuildHelper from "../../../scripts/build-utils"; +import { build as esbuild } from "esbuild"; const build = new BuildHelper("packages/pdfjs-viewer"); async function main() { build.copy("viewer", "web"); - build.copy("src/custom.mjs", "web/custom.mjs"); + await buildScript("web/custom.mjs"); build.copy("src/custom.css", "web/custom.css"); build.copy("/node_modules/pdfjs-dist/build/pdf.mjs", "build/pdf.mjs"); build.copy("/node_modules/pdfjs-dist/build/pdf.worker.mjs", "build/pdf.worker.mjs"); } +async function buildScript(outPath: string) { + await esbuild({ + entryPoints: [join(build.projectDir, "src/custom.ts")], + tsconfig: join(build.projectDir, "tsconfig.app.json"), + bundle: true, + outfile: join(build.outDir, outPath), + format: "esm", + platform: "browser", + minify: true, + }); +} + main(); diff --git a/packages/pdfjs-viewer/src/custom.mjs b/packages/pdfjs-viewer/src/custom.ts similarity index 88% rename from packages/pdfjs-viewer/src/custom.mjs rename to packages/pdfjs-viewer/src/custom.ts index a09e6c9f9..e69143379 100644 --- a/packages/pdfjs-viewer/src/custom.mjs +++ b/packages/pdfjs-viewer/src/custom.ts @@ -4,8 +4,8 @@ async function main() { await new Promise(r => setTimeout(r, 50)); } - const app = PDFViewerApplication; - await app.initializedPromise; + const app = window.PDFViewerApplication; + await app.initializedPromise; app.eventBus.on("documentloaded", () => { const storage = app.pdfDocument.annotationStorage; @@ -17,16 +17,16 @@ async function main() { } timeout = setTimeout(async () => { if (!storage) return; - const data = await app.pdfDocument.saveDocument(storage); + const data = await app.pdfDocument.saveDocument(); window.parent.postMessage({ type: "pdfjs-viewer-document-modified", - data: data + data: data }, "*"); storage.resetModified(); timeout = null; }, 2_000); } - + app.eventBus.on("annotationeditorcommit", debouncedSave); app.eventBus.on("annotationeditorparamschanged", debouncedSave); app.eventBus.on("annotationeditorstateschanged", evt => { @@ -41,4 +41,4 @@ async function main() { }; main(); -console.log("Custom script loaded"); \ No newline at end of file +console.log("Custom script loaded"); diff --git a/packages/pdfjs-viewer/src/typings.d.ts b/packages/pdfjs-viewer/src/typings.d.ts new file mode 100644 index 000000000..040300890 --- /dev/null +++ b/packages/pdfjs-viewer/src/typings.d.ts @@ -0,0 +1,14 @@ +import type { PDFDocumentProxy } from "pdfjs-dist"; + +declare global { + interface Window { + PDFViewerApplication?: { + initializedPromise: Promise; + pdfDocument: PDFDocumentProxy; + eventBus: { + on(event: string, listener: (...args: any[]) => void): void; + dispatch(event: string, data?: any): void; + }; + }; + } +} diff --git a/packages/pdfjs-viewer/tsconfig.app.json b/packages/pdfjs-viewer/tsconfig.app.json new file mode 100644 index 000000000..973162d8c --- /dev/null +++ b/packages/pdfjs-viewer/tsconfig.app.json @@ -0,0 +1,26 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "module": "ESNext", + "moduleResolution": "bundler", + "target": "ES2020", + "outDir": "dist", + "strict": false, + "types": [ + "node", + "express" + ], + "rootDir": "src", + "tsBuildInfoFile": "dist/tsconfig.app.tsbuildinfo" + }, + "include": [ + "src/**/*.ts" + ], + "exclude": [ + "eslint.config.js", + "eslint.config.cjs", + "eslint.config.mjs" + ], + "references": [ + ] +} diff --git a/packages/pdfjs-viewer/tsconfig.json b/packages/pdfjs-viewer/tsconfig.json new file mode 100644 index 000000000..0d9387c7f --- /dev/null +++ b/packages/pdfjs-viewer/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.base.json", + "include": [], + "references": [ + { + "path": "./tsconfig.app.json" + } + ] +}