// Build-time guard for issue #708. The pdf.js wasm image decoders are copied // into build/client/pdfjs-wasm/ by vite-plugin-static-copy. If a future // pdfjs-dist bump moves or renames the wasm, the glob could silently copy // nothing — and CCITT/JBIG2/JPEG2000 scans would render blank in production // again with no test catching it (the bug is invisible to unit tests). Fail // the build loudly instead. Runs after `npm run build` (incl. the Docker // build stage) via the `postbuild` npm script. import { existsSync, statSync } from 'node:fs'; import { join } from 'node:path'; const dir = join(process.cwd(), 'build', 'client', 'pdfjs-wasm'); // jbig2.wasm decodes JBIG2 + CCITTFax; openjpeg.wasm decodes JPEG2000. const required = ['jbig2.wasm', 'openjpeg.wasm']; const missing = required.filter((f) => { const p = join(dir, f); return !existsSync(p) || statSync(p).size === 0; }); if (missing.length > 0) { console.error( `\n[assert-pdfjs-wasm] MISSING from build output: ${missing.join(', ')}\n` + `Expected non-empty files in ${dir}.\n` + `The pdf.js wasm decoders did not ship — scanned PDFs would render blank.\n` + `Check the vite-plugin-static-copy target in vite.config.ts and that\n` + `node_modules/pdfjs-dist/wasm/ still contains these files. See issue #708.\n` ); process.exit(1); }