/** * Patch @6over3/zeroperl-ts@1.0.10 after install. * * Problem: WASM loader treats only `window` + `document` as browser. Module workers have * neither, so it dynamic-imports `node:fs/promises` and fails under Vite. * Custom `fetch` from @uswriting/exiftool is ignored on that branch. * * Fix: use the fetch path when a custom fetch is provided (`Ee() || e`). * * Upstream: https://github.com/6over3/zeroperl-ts * * Re-verify when bumping @6over3/zeroperl-ts: search dist for the ORIGINAL snippets below. */ import fs from 'node:fs'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; const patches = [ { relativePath: 'esm/index.js', original: 'if(Ee())a=await(await(e??fetch)(q)).arrayBuffer();', patched: 'if(Ee()||e)a=await(await(e??fetch)(q)).arrayBuffer();' }, { relativePath: 'cjs/index.cjs', original: 'if(pe())a=await(await(e??fetch)(w)).arrayBuffer();', patched: 'if(pe()||e)a=await(await(e??fetch)(w)).arrayBuffer();' } ]; const packageRoot = path.resolve( path.dirname(fileURLToPath(import.meta.url)), '../node_modules/@6over3/zeroperl-ts/dist' ); const patchFile = ({ relativePath, original, patched }) => { const filePath = path.join(packageRoot, relativePath); if (!fs.existsSync(filePath)) { throw new Error(`patch-zeroperl-worker-fetch: missing ${filePath} (is @6over3/zeroperl-ts installed?)`); } const content = fs.readFileSync(filePath, 'utf8'); if (content.includes(patched)) { return; } if (!content.includes(original)) { throw new Error( `patch-zeroperl-worker-fetch: ${relativePath} does not match @6over3/zeroperl-ts@1.0.10; update or remove this script` ); } fs.writeFileSync(filePath, content.replaceAll(original, patched)); }; for (const entry of patches) { patchFile(entry); }