aboutsummaryrefslogtreecommitdiff
path: root/ext/wasm/api/extern-post-js.js
diff options
context:
space:
mode:
authorstephan <stephan@noemail.net>2022-11-30 18:21:01 +0000
committerstephan <stephan@noemail.net>2022-11-30 18:21:01 +0000
commitec192e0659cd0fac1a29616c81a693f696f6f24a (patch)
tree9db60b1f182e64a296c6005a12c9b4ebf1858aad /ext/wasm/api/extern-post-js.js
parenta42281a312459d266d4a2189c43b80e83d2ab8e7 (diff)
downloadsqlite-ec192e0659cd0fac1a29616c81a693f696f6f24a.tar.gz
sqlite-ec192e0659cd0fac1a29616c81a693f696f6f24a.zip
Rename some JS files from X.js to X.c-pp.js to keep the maintainer, and downstream build customizers, aware that those files contain constructs specific to the c-pp preprocessor and will not run as-is in JS.
FossilOrigin-Name: 2eade7c7b17a186735c72974c11a34798a08364861d0f307e897ba765c0a93c7
Diffstat (limited to 'ext/wasm/api/extern-post-js.js')
-rw-r--r--ext/wasm/api/extern-post-js.js121
1 files changed, 0 insertions, 121 deletions
diff --git a/ext/wasm/api/extern-post-js.js b/ext/wasm/api/extern-post-js.js
deleted file mode 100644
index 225869794..000000000
--- a/ext/wasm/api/extern-post-js.js
+++ /dev/null
@@ -1,121 +0,0 @@
-
-/* ^^^^ ACHTUNG: blank line at the start is necessary because
- Emscripten will not add a newline in some cases and we need
- a blank line for a sed-based kludge for the ES6 build. */
-/* extern-post-js.js must be appended to the resulting sqlite3.js
- file. It gets its name from being used as the value for the
- --extern-post-js=... Emscripten flag. Note that this code, unlike
- most of the associated JS code, runs outside of the
- Emscripten-generated module init scope, in the current
- global scope. */
-//#if target=es6-module
-const toExportForES6 =
-//#endif
-(function(){
- /**
- In order to hide the sqlite3InitModule()'s resulting
- Emscripten module from downstream clients (and simplify our
- documentation by being able to elide those details), we hide that
- function and expose a hand-written sqlite3InitModule() to return
- the sqlite3 object (most of the time).
-
- Unfortunately, we cannot modify the module-loader/exporter-based
- impls which Emscripten installs at some point in the file above
- this.
- */
- const originalInit =
- /* Maintenance reminder: DO NOT use `self.` here. It's correct
- for non-ES6 Module cases but wrong for ES6 modules because those
- resolve this symbol differently. */ sqlite3InitModule;
- if(!originalInit){
- throw new Error("Expecting self.sqlite3InitModule to be defined by the Emscripten build.");
- }
- /**
- We need to add some state which our custom Module.locateFile()
- can see, but an Emscripten limitation currently prevents us from
- attaching it to the sqlite3InitModule function object:
-
- https://github.com/emscripten-core/emscripten/issues/18071
-
- The only(?) current workaround is to temporarily stash this state
- into the global scope and delete it when sqlite3InitModule()
- is called.
- */
- const initModuleState = self.sqlite3InitModuleState = Object.assign(Object.create(null),{
- moduleScript: self?.document?.currentScript,
- isWorker: ('undefined' !== typeof WorkerGlobalScope),
- location: self.location,
- urlParams: new URL(self.location.href).searchParams
- });
- initModuleState.debugModule =
- (new URL(self.location.href).searchParams).has('sqlite3.debugModule')
- ? (...args)=>console.warn('sqlite3.debugModule:',...args)
- : ()=>{};
-
- if(initModuleState.urlParams.has('sqlite3.dir')){
- initModuleState.sqlite3Dir = initModuleState.urlParams.get('sqlite3.dir') +'/';
- }else if(initModuleState.moduleScript){
- const li = initModuleState.moduleScript.src.split('/');
- li.pop();
- initModuleState.sqlite3Dir = li.join('/') + '/';
- }
-
- self.sqlite3InitModule = function ff(...args){
- //console.warn("Using replaced sqlite3InitModule()",self.location);
- return originalInit(...args).then((EmscriptenModule)=>{
- if(self.window!==self &&
- (EmscriptenModule['ENVIRONMENT_IS_PTHREAD']
- || EmscriptenModule['_pthread_self']
- || 'function'===typeof threadAlert
- || self.location.pathname.endsWith('.worker.js')
- )){
- /** Workaround for wasmfs-generated worker, which calls this
- routine from each individual thread and requires that its
- argument be returned. All of the criteria above are fragile,
- based solely on inspection of the offending code, not public
- Emscripten details. */
- return EmscriptenModule;
- }
- const s = EmscriptenModule.sqlite3;
- s.scriptInfo = initModuleState;
- //console.warn("sqlite3.scriptInfo =",s.scriptInfo);
- if(ff.__isUnderTest) s.__isUnderTest = true;
- const f = s.asyncPostInit;
- delete s.asyncPostInit;
- return f();
- }).catch((e)=>{
- console.error("Exception loading sqlite3 module:",e);
- throw e;
- });
- };
- self.sqlite3InitModule.ready = originalInit.ready;
-
- if(self.sqlite3InitModuleState.moduleScript){
- const sim = self.sqlite3InitModuleState;
- let src = sim.moduleScript.src.split('/');
- src.pop();
- sim.scriptDir = src.join('/') + '/';
- }
- initModuleState.debugModule('sqlite3InitModuleState =',initModuleState);
- if(0){
- console.warn("Replaced sqlite3InitModule()");
- console.warn("self.location.href =",self.location.href);
- if('undefined' !== typeof document){
- console.warn("document.currentScript.src =",
- document?.currentScript?.src);
- }
- }
- /* Replace the various module exports performed by the Emscripten
- glue... */
- if (typeof exports === 'object' && typeof module === 'object'){
- module.exports = sqlite3InitModule;
- }else if (typeof exports === 'object'){
- exports["sqlite3InitModule"] = sqlite3InitModule;
- }
- /* AMD modules get injected in a way we cannot override,
- so we can't handle those here. */
- return self.sqlite3InitModule /* required for ESM */;
-})();
-//#if target=es6-module
-export default toExportForES6;
-//#endif