aboutsummaryrefslogtreecommitdiff
path: root/ext/wasm/api/pre-js.js
diff options
context:
space:
mode:
Diffstat (limited to 'ext/wasm/api/pre-js.js')
-rw-r--r--ext/wasm/api/pre-js.js41
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';