Test fix: add WASM fetch polyfill for Node.js 22+ compatibility
This commit is contained in:
parent
82d3e883d7
commit
e2c326ad54
29
tests/lib/wasmFetchPolyfill.mjs
Normal file
29
tests/lib/wasmFetchPolyfill.mjs
Normal file
@ -0,0 +1,29 @@
|
||||
/**
|
||||
* Polyfill for Node.js 22+ where globalThis.fetch is built-in but rejects
|
||||
* bare filesystem paths. WASM libraries like argon2-browser call fetch() with
|
||||
* an absolute path (e.g. "/path/to/argon2.wasm") expecting a browser-style
|
||||
* fallback, but Node.js 22's fetch throws synchronously for non-URL strings.
|
||||
*
|
||||
* This wrapper intercepts such calls and serves the file via Node's fs module,
|
||||
* returning a synthetic Response so the WASM module loads correctly.
|
||||
*/
|
||||
|
||||
import { readFile } from "fs/promises";
|
||||
|
||||
if (globalThis.fetch) {
|
||||
const originalFetch = globalThis.fetch;
|
||||
globalThis.fetch = async function patchedFetch(url, options) {
|
||||
const urlStr = typeof url === "string" ? url
|
||||
: url instanceof URL ? url.href
|
||||
: String(url);
|
||||
// Intercept bare filesystem paths (absolute POSIX or Windows)
|
||||
if (urlStr.startsWith("/") || /^[A-Za-z]:[/\\]/.test(urlStr)) {
|
||||
const buffer = await readFile(urlStr);
|
||||
return new Response(buffer, {
|
||||
status: 200,
|
||||
headers: { "Content-Type": "application/wasm" },
|
||||
});
|
||||
}
|
||||
return originalFetch(url, options);
|
||||
};
|
||||
}
|
||||
@ -11,6 +11,7 @@
|
||||
* @license Apache-2.0
|
||||
*/
|
||||
|
||||
import "../lib/wasmFetchPolyfill.mjs";
|
||||
import { setLongTestFailure, logTestReport } from "../lib/utils.mjs";
|
||||
|
||||
import TestRegister from "../lib/TestRegister.mjs";
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user