mirror of
https://github.com/sqlite/sqlite.git
synced 2025-10-21 11:13:54 +03:00
84 lines
3.5 KiB
JavaScript
84 lines
3.5 KiB
JavaScript
/*
|
|
2022-07-22
|
|
|
|
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 file is the tail end of the sqlite3-api.js constellation,
|
|
intended to be appended after all other sqlite3-api-*.js files so
|
|
that it can finalize any setup and clean up any global symbols
|
|
temporarily used for setting up the API's various subsystems.
|
|
|
|
In Emscripten builds it's run in the context of what amounts to a
|
|
Module.postRun handler, though it's no longer actually a postRun
|
|
handler because Emscripten 4.0 changed postRun semantics in an
|
|
incompatible way.
|
|
|
|
In terms of amalgamation code placement, this file is appended
|
|
immediately after the final sqlite3-api-*.js piece. Those files
|
|
cooperate to prepare sqlite3ApiBootstrap() and this file calls it.
|
|
It is run within a context which gives it access to Emscripten's
|
|
Module object, after sqlite3.wasm is loaded but before
|
|
sqlite3ApiBootstrap() has been called.
|
|
|
|
Because this code resides (after building) inside the function
|
|
installed by post-js-header.js, it has access to the
|
|
*/
|
|
'use strict';
|
|
if( 'undefined' === typeof EmscriptenModule/*from post-js-header.js*/ ){
|
|
console.warn("This is not running in the context of Module.runSQLite3PostLoadInit()");
|
|
throw new Error("sqlite3-api-cleanup.js expects to be running in the "+
|
|
"context of its Emscripten module loader.");
|
|
}
|
|
try{
|
|
/* Config options for sqlite3ApiBootstrap(). */
|
|
const bootstrapConfig = Object.assign(
|
|
Object.create(null),
|
|
globalThis.sqlite3ApiBootstrap.defaultConfig, // default options
|
|
globalThis.sqlite3ApiConfig || {}, // optional client-provided options
|
|
/** The WASM-environment-dependent configuration for sqlite3ApiBootstrap() */
|
|
{
|
|
memory: ('undefined'!==typeof wasmMemory)
|
|
? wasmMemory
|
|
: EmscriptenModule['wasmMemory'],
|
|
exports: ('undefined'!==typeof wasmExports)
|
|
? wasmExports /* emscripten >=3.1.44 */
|
|
: (Object.prototype.hasOwnProperty.call(EmscriptenModule,'wasmExports')
|
|
? EmscriptenModule['wasmExports']
|
|
: EmscriptenModule['asm']/* emscripten <=3.1.43 */)
|
|
}
|
|
);
|
|
|
|
/** Figure out if this is a 32- or 64-bit WASM build. */
|
|
bootstrapConfig.wasmPtrIR =
|
|
'number'===(typeof bootstrapConfig.exports.sqlite3_libversion())
|
|
? 'i32' :'i64';
|
|
const sIMS = sqlite3InitScriptInfo;
|
|
sIMS.debugModule("Bootstrapping lib config", sIMS);
|
|
|
|
/**
|
|
For purposes of the Emscripten build, call sqlite3ApiBootstrap().
|
|
Ideally clients should be able to inject their own config here,
|
|
but that's not practical in this particular build constellation
|
|
because of the order everything happens in. Clients may either
|
|
define globalThis.sqlite3ApiConfig or modify
|
|
globalThis.sqlite3ApiBootstrap.defaultConfig to tweak the default
|
|
configuration used by a no-args call to sqlite3ApiBootstrap(),
|
|
but must have first loaded their WASM module in order to be able
|
|
to provide the necessary configuration state.
|
|
*/
|
|
const p = globalThis.sqlite3ApiBootstrap(bootstrapConfig);
|
|
delete globalThis.sqlite3ApiBootstrap;
|
|
return p /* the eventual result of globalThis.sqlite3InitModule() */;
|
|
}catch(e){
|
|
console.error("sqlite3ApiBootstrap() error:",e);
|
|
throw e;
|
|
}
|
|
throw new Error("Maintenance required: this line should never be reached");
|