diff options
Diffstat (limited to 'ext/wasm/api/pre-js.js')
-rw-r--r-- | ext/wasm/api/pre-js.js | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/ext/wasm/api/pre-js.js b/ext/wasm/api/pre-js.js new file mode 100644 index 000000000..502ecf348 --- /dev/null +++ b/ext/wasm/api/pre-js.js @@ -0,0 +1,41 @@ +Module['locateFile'] = function(path, prefix) { + return prefix + path; +}; + +/** + Bug warning: this xInstantiateWasm bit must remain disabled + until this bug is resolved or wasmfs won't work: + + https://github.com/emscripten-core/emscripten/issues/17951 +*/ +const xInstantiateWasm = 1 + ? 'emscripten-bug-17951' + : 'instantiateWasm'; +Module[xInstantiateWasm] = function callee(imports,onSuccess){ + imports.env.foo = function(){}; + console.warn("instantiateWasm() uri =",callee.uri, self.location.href); + const wfetch = ()=>fetch(callee.uri, {credentials: 'same-origin'}); + const loadWasm = WebAssembly.instantiateStreaming + ? async ()=>{ + return WebAssembly.instantiateStreaming(wfetch(), imports) + .then((arg)=>onSuccess(arg.instance, arg.module)); + } + : async ()=>{ // Safari < v15 + return wfetch() + .then(response => response.arrayBuffer()) + .then(bytes => WebAssembly.instantiate(bytes, imports)) + .then((arg)=>onSuccess(arg.instance, arg.module)); + }; + loadWasm(); + return {}; +}; +/* + It is literally impossible to reliably get the name of _this_ script + at runtime, so impossible to derive X.wasm from script name + X.js. Thus we need, at build-time, to redefine + Module[xInstantiateWasm].uri by appending it to a build-specific + copy of this file with the name of the wasm file. This is apparently + why Emscripten hard-codes the name of the wasm file into their glue + scripts. +*/ +Module[xInstantiateWasm].uri = 'sqlite3.wasm'; |