#!/usr/bin/env node /** * Legt das WebAssembly des QR-Lesers neben die statischen Dateien (#014). * * Der Scanner benutzt `barcode-detector` als Polyfill der BarcodeDetector-API. * Dessen Unterbau `zxing-wasm` laedt sein `.wasm` von sich aus **aus einem CDN** * — das verbietet hier zweierlei: die Content-Security-Policy erlaubt * `connect-src 'self'`, und eine selbst gehostete Anwendung soll ohne Internet * laufen. Deshalb wird die Datei aus `node_modules` unter `public/zxing/` * bereitgelegt und von dort geladen. * * Kopiert statt eingecheckt: 1,1 MB Binaerdatei gehoeren nicht ins Repository, * und die Fassung muss zur installierten Paketversion passen. Laeuft vor jedem * `pnpm build` und `pnpm dev`. */ import { copyFile, mkdir } from "node:fs/promises"; import { createRequire } from "node:module"; import { dirname, join } from "node:path"; const require = createRequire(import.meta.url); let wasm; try { /* * Aufgeloest **von barcode-detector aus**, nicht von hier: pnpm legt jedes * Paket unter `.pnpm/@` ab und verlinkt nur die direkten * Abhaengigkeiten nach `node_modules`. `zxing-wasm` ist keine davon — es * haengt an `barcode-detector`, und nur von dort ist es auffindbar. Ein fest * geschriebener Pfad ginge beim naechsten Versionssprung kaputt. */ const vonBarcodeDetector = createRequire(require.resolve("barcode-detector")); // Die Datei steht selbst in der Exportkarte – kein Raten am Verzeichnis. wasm = vonBarcodeDetector.resolve("zxing-wasm/reader/zxing_reader.wasm"); } catch (fehler) { console.error( "Das WebAssembly des QR-Lesers ist nicht auffindbar. Es kommt über barcode-detector — " + "erst `pnpm install` laufen lassen.", ); console.error(fehler instanceof Error ? fehler.message : fehler); process.exit(1); } const ziel = join(process.cwd(), "public", "zxing", "zxing_reader.wasm"); await mkdir(dirname(ziel), { recursive: true }); await copyFile(wasm, ziel); console.log(`QR-Leser bereitgelegt: ${ziel}`);