ea7a4e4fb3
FossilOrigin-Name: 371d6f7497016ca9bf82c8524b4d701ddf1e614b3fb4e69ff63935da0d51ed05
45 lines
2.0 KiB
JavaScript
45 lines
2.0 KiB
JavaScript
/*
|
|
2022-05-23
|
|
|
|
The author disclaims copyright to this source code. In place of a
|
|
legal notice, here is a blessing:
|
|
|
|
* May you do good and not evil.
|
|
* May you find forgiveness for yourself and forgive others.
|
|
* May you share freely, never taking more than you give.
|
|
|
|
***********************************************************************
|
|
|
|
This is a JS Worker file for the main sqlite3 api. It loads
|
|
sqlite3.js, initializes the module, and postMessage()'s a message
|
|
after the module is initialized:
|
|
|
|
{type: 'sqlite3-api', data: 'ready'}
|
|
|
|
This seemingly superfluous level of indirection is necessary when
|
|
loading sqlite3.js via a Worker. Loading sqlite3.js from the main
|
|
window thread elides the Worker-specific API. Instantiating a worker
|
|
with new Worker("sqlite.js") will not (cannot) call
|
|
initSqlite3Module() to initialize the module due to a
|
|
timing/order-of-operations conflict (and that symbol is not exported
|
|
in a way that a Worker loading it that way can see it). Thus JS
|
|
code wanting to load the sqlite3 Worker-specific API needs to pass
|
|
_this_ file (or equivalent) to the Worker constructor and then
|
|
listen for an event in the form shown above in order to know when
|
|
the module has completed initialization. sqlite3.js will fire a
|
|
similar event, with data:'loaded' as the final step in its loading
|
|
process. Whether or not we _really_ need both 'loaded' and 'ready'
|
|
events is unclear, but they are currently separate events primarily
|
|
for the sake of clarity in the timing of when it's okay to use the
|
|
loaded module. At the time the 'loaded' event is fired, it's
|
|
possible (but unknown and unknowable) that the emscripten-generated
|
|
module-setup infrastructure still has work to do. Thus it is
|
|
hypothesized that client code is better off waiting for the 'ready'
|
|
even before using the API.
|
|
*/
|
|
"use strict";
|
|
importScripts('sqlite3.js');
|
|
initSqlite3Module().then(function(){
|
|
setTimeout(()=>self.postMessage({type:'sqlite3-api',data:'ready'}), 0);
|
|
});
|