43 lines
1.1 KiB
JavaScript
43 lines
1.1 KiB
JavaScript
|
|
// Custom Node.js loader for WASM imports
|
||
|
|
import Module from "module";
|
||
|
|
|
||
|
|
const originalResolveFilename = Module.prototype._resolveFilename;
|
||
|
|
|
||
|
|
Module.prototype._resolveFilename = function (request, parent, isMain) {
|
||
|
|
if (request === "env" || request === "wasi_snapshot_preview1") {
|
||
|
|
// Return a fake module path that won't be resolved
|
||
|
|
// Instead, we'll handle it in the import hook
|
||
|
|
return request;
|
||
|
|
}
|
||
|
|
return originalResolveFilename.apply(this, arguments);
|
||
|
|
};
|
||
|
|
|
||
|
|
// ES module loader hook
|
||
|
|
export async function resolve(specifier, context, nextResolve) {
|
||
|
|
if (specifier === "env" || specifier === "wasi_snapshot_preview1") {
|
||
|
|
return {
|
||
|
|
url: "node:vm",
|
||
|
|
shortCircuit: true,
|
||
|
|
};
|
||
|
|
}
|
||
|
|
return nextResolve(specifier);
|
||
|
|
}
|
||
|
|
|
||
|
|
export async function getFormat(url, context, nextGetFormat) {
|
||
|
|
return nextGetFormat(url);
|
||
|
|
}
|
||
|
|
|
||
|
|
export async function getSource(url, context, nextGetSource) {
|
||
|
|
return nextGetSource(url);
|
||
|
|
}
|
||
|
|
|
||
|
|
export async function load(url, context, nextLoad) {
|
||
|
|
if (url === "node:vm") {
|
||
|
|
return {
|
||
|
|
format: "module",
|
||
|
|
source: "export default {}; export const wasi_snapshot_preview1 = {};",
|
||
|
|
};
|
||
|
|
}
|
||
|
|
return nextLoad(url);
|
||
|
|
}
|