From a77b5601be9d17c3f241229feef06e7083262ea1 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Thu, 19 Feb 2026 21:09:13 +0200 Subject: [PATCH] feat(pdfjs): add script to update viewer --- .../pdfjs-viewer/scripts/update-viewer.ts | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 packages/pdfjs-viewer/scripts/update-viewer.ts diff --git a/packages/pdfjs-viewer/scripts/update-viewer.ts b/packages/pdfjs-viewer/scripts/update-viewer.ts new file mode 100644 index 0000000000..b38af11ba5 --- /dev/null +++ b/packages/pdfjs-viewer/scripts/update-viewer.ts @@ -0,0 +1,52 @@ +import { join } from "path"; +import packageJson from "../package.json" with { type: "json" }; +import * as yauzl from "yauzl"; +import { createWriteStream } from "fs"; +const version = packageJson.devDependencies["pdfjs-dist"]; +const url = `https://github.com/mozilla/pdf.js/releases/download/v${version}/pdfjs-${version}-dist.zip`; + +const FILES_TO_COPY = [ + "web/images/", + "web/locale/", + "web/viewer.css", + "web/viewer.html", + "web/viewer.mjs" +]; + +async function main() { + console.log(`Downloading pdfjs-dist v${version} from ${url}...`); + const response = await fetch(url); + if (!response.ok) { + throw new Error(`Failed to download pdfjs-dist from ${url}: ${response.status} ${response.statusText}`); + } + + const buffer = await response.arrayBuffer(); + yauzl.fromBuffer(Buffer.from(buffer), { lazyEntries: true }, (err, zip) => { + zip.readEntry(); + zip.on("entry", (entry: yauzl.Entry) => { + if (entry.fileName.endsWith("/") || !FILES_TO_COPY.some(prefix => entry.fileName.startsWith(prefix))) { + // Directory entry or not in the list of files to copy, skip + console.log("Skipping", entry.fileName); + zip.readEntry(); + return; + } + + const relativePath = entry.fileName.substring("web/".length); + zip.openReadStream(entry, (err, readStream) => { + if (err) { + console.error(`Failed to read ${entry.fileName} from zip:`, err); + return; + } + const outPath = join(__dirname, "../viewer", relativePath); + const outStream = createWriteStream(outPath); + readStream.pipe(outStream); + outStream.on("finish", () => { + console.log(`Extracted ${relativePath} to ${outPath}`); + }); + }); + zip.readEntry(); + }); + }); +}; + +main();