From 04c8ce70056aad803b49d255caafd77ff0aa44cd Mon Sep 17 00:00:00 2001 From: wagesj45 Date: Thu, 18 Sep 2025 19:38:10 -0500 Subject: [PATCH] Switch search runtime to vendored sqlite3 WASM --- README.md | 6 +- index.html | 4 +- script.js | 109 +- vendor/sqlite3/README.txt | 46 + vendor/sqlite3/sqlite3.js | 12904 ++++++++++++++++++++++++++++++++++ vendor/sqlite3/sqlite3.wasm | Bin 0 -> 931482 bytes 6 files changed, 13059 insertions(+), 10 deletions(-) create mode 100644 vendor/sqlite3/README.txt create mode 100644 vendor/sqlite3/sqlite3.js create mode 100644 vendor/sqlite3/sqlite3.wasm diff --git a/README.md b/README.md index 4da988b..6aa6b1a 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,7 @@ # mp3-com-meta-browser -A self contained static website for browsing the collection of salvaged mp3.com files. \ No newline at end of file +A self contained static website for browsing the collection of salvaged mp3.com files. + +## Runtime Notes + +- Uses the official `sqlite3` WASM build (vendored under `vendor/sqlite3/`) so that FTS5 is available client-side. diff --git a/index.html b/index.html index 8ff117d..49317a6 100644 --- a/index.html +++ b/index.html @@ -365,8 +365,8 @@ - - + + diff --git a/script.js b/script.js index 13cce9c..cf796aa 100644 --- a/script.js +++ b/script.js @@ -2,13 +2,13 @@ Application bootstrap for the static, client-side metadata browser. - Downloads a zipped SQLite DB (db.zip) with progress and unzips it in-memory - Caches the uncompressed DB bytes in IndexedDB for reuse on next load - - Loads sql.js (WASM) and opens the database from the cached bytes + - Loads the official sqlite3 WASM build (oo1 API) and opens the database from the cached bytes - Swaps interchangeable UX elements (views) in a viewport, with fade transitions Assumptions: - A ZIP archive is hosted at `/db.zip` containing a single `.sqlite` file. - We use `fflate` (UMD) from a CDN to unzip after download (keeps implementation minimal). - - We use `sql.js` from a CDN; the WASM is located via `locateFile` (see initSql()). + - We ship the sqlite3 WASM runtime locally to guarantee FTS5 support. - We store raw DB bytes in IndexedDB (localStorage is too small for large DBs). */ @@ -297,15 +297,109 @@ return dbBytes; } - // --- SQL.js init --- + // --- SQLite WASM init --- async function initSql() { - if (typeof initSqlJs !== 'function') throw new Error('sql.js not loaded'); + if (typeof sqlite3InitModule !== 'function') throw new Error('sqlite3.js not loaded'); loader.setStep('Initializing SQLite…'); loader.setDetail('Loading WASM'); - const SQL = await initSqlJs({ - locateFile: (file) => `https://cdnjs.cloudflare.com/ajax/libs/sql.js/1.10.2/${file}`, + const sqlite3 = await sqlite3InitModule({ + locateFile: (file) => `./vendor/sqlite3/${file}`, }); - return SQL; + return createSqlCompat(sqlite3); + } + + function createSqlCompat(sqlite3) { + const { capi, wasm } = sqlite3; + const SQLITE_DESERIALIZE_FREEONCLOSE = 0x01; + const SQLITE_DESERIALIZE_READONLY = 0x04; + + function loadDatabaseBytes(dbHandle, bytes) { + if (!bytes || !bytes.byteLength) return; + const byteLength = bytes.byteLength; + const pData = wasm.alloc(byteLength); + try { + wasm.heap8u().set(bytes, pData); + const [pSchema] = wasm.allocCString('main', true); + try { + const rc = capi.sqlite3_deserialize( + dbHandle.pointer, + pSchema, + pData, + byteLength, + byteLength, + SQLITE_DESERIALIZE_FREEONCLOSE | SQLITE_DESERIALIZE_READONLY + ); + if (rc !== capi.SQLITE_OK) { + throw new sqlite3.SQLite3Error(`sqlite3_deserialize failed with rc=${rc}`); + } + } finally { + wasm.dealloc(pSchema); + } + } catch (err) { + wasm.dealloc(pData); + throw err; + } + } + + class Statement { + constructor(stmt) { + this._stmt = stmt; + this._columnNames = null; + } + bind(values) { + this._stmt.bind(values); + return true; + } + step() { + return !!this._stmt.step(); + } + getAsObject() { + if (!this._columnNames) this._columnNames = this._stmt.getColumnNames([]); + const row = Object.create(null); + const count = this._columnNames.length; + for (let i = 0; i < count; i += 1) { + row[this._columnNames[i]] = this._stmt.get(i); + } + return row; + } + free() { + this._stmt.finalize(); + } + } + + class Database { + constructor(bytes) { + this._db = new sqlite3.oo1.DB(); + if (bytes) loadDatabaseBytes(this._db, bytes); + } + prepare(sql) { + return new Statement(this._db.prepare(sql)); + } + exec(sql) { + return this._db.exec(sql); + } + close() { + this._db.close(); + } + get pointer() { + return this._db.pointer; + } + } + + function ensureFts5Available(dbHandle) { + let stmt; + try { + stmt = dbHandle.prepare('CREATE VIRTUAL TABLE temp.__fts5_check USING fts5(content TEXT)'); + stmt.step(); + } catch (err) { + throw new Error('SQLite build missing FTS5 support; search requires an fts5-enabled wasm'); + } finally { + try { if (stmt) stmt.free(); } catch (_) {} + try { dbHandle.exec('DROP TABLE IF EXISTS temp.__fts5_check'); } catch (_) {} + } + } + + return { Database, ensureFts5Available }; } // --- Templates & Views --- @@ -2380,6 +2474,7 @@ const SQL = await initSql(); loader.setDetail('Opening database'); const db = new SQL.Database(dbBytes); + SQL.ensureFts5Available(db); activeDb = db; window.__db = db; diff --git a/vendor/sqlite3/README.txt b/vendor/sqlite3/README.txt new file mode 100644 index 0000000..6656a20 --- /dev/null +++ b/vendor/sqlite3/README.txt @@ -0,0 +1,46 @@ +This is the README for the sqlite3 WASM/JS distribution. + +Main project page: https://sqlite.org + +Documentation: https://sqlite.org/wasm + +This archive contains the following deliverables for the WASM/JS +build: + +- jswasm/sqlite3.js is the canonical "vanilla JS" version. + +- jswasm/sqlite3.mjs is the same but in ES6 module form + +- jswasm/*-bundler-friendly.js and .mjs are variants which are + intended to be compatible with "bundler" tools commonly seen in + node.js-based projects. Projects using such tools should use those + variants, where available, instead of files without the + "-bundler-friendly" suffix. Some files do not have separate + variants. + +- jswasm/sqlite3.wasm is the binary WASM file imported by all of the + above-listed JS files. + +- The jswasm directory additionally contains a number of supplemental + JS files which cannot be bundled directly with the main JS files + but are necessary for certain usages. + +- The top-level directory contains various demonstration and test + applications for sqlite3.js and sqlite3.mjs. + sqlite3-bundler-friendly.mjs requires client-side build tools to make + use of and is not demonstrated here. + +Browsers will not serve WASM files from file:// URLs, so the test and +demonstration apps require a web server and that server must include +the following headers in its response when serving the files: + + Cross-Origin-Opener-Policy: same-origin + Cross-Origin-Embedder-Policy: require-corp + +The core library will function without those headers but certain +features, most notably OPFS storage, will not be available. + +One simple way to get the demo apps up and running on Unix-style +systems is to install althttpd (https://sqlite.org/althttpd) and run: + + althttpd --enable-sab --page index.html diff --git a/vendor/sqlite3/sqlite3.js b/vendor/sqlite3/sqlite3.js new file mode 100644 index 0000000..b91824c --- /dev/null +++ b/vendor/sqlite3/sqlite3.js @@ -0,0 +1,12904 @@ +/* +** LICENSE for the sqlite3 WebAssembly/JavaScript APIs. +** +** This bundle (typically released as sqlite3.js or sqlite3.mjs) +** is an amalgamation of JavaScript source code from two projects: +** +** 1) https://emscripten.org: the Emscripten "glue code" is covered by +** the terms of the MIT license and University of Illinois/NCSA +** Open Source License, as described at: +** +** https://emscripten.org/docs/introducing_emscripten/emscripten_license.html +** +** 2) https://sqlite.org: all code and documentation labeled as being +** from this source are released under the same terms as the sqlite3 +** C library: +** +** 2022-10-16 +** +** 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 code was built from sqlite3 version... +** +** +** Using the Emscripten SDK version 3.1.30. +*/ + +var sqlite3InitModule = (() => { + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + + return ( +function(config) { + var sqlite3InitModule = config || {}; + + + + + + + + + + + + + + + + +var Module = typeof sqlite3InitModule != 'undefined' ? sqlite3InitModule : {}; + + +var readyPromiseResolve, readyPromiseReject; +Module['ready'] = new Promise(function(resolve, reject) { + readyPromiseResolve = resolve; + readyPromiseReject = reject; +}); + + + + + + +const sqlite3InitModuleState = globalThis.sqlite3InitModuleState + || Object.assign(Object.create(null),{ + debugModule: ()=>{} + }); +delete globalThis.sqlite3InitModuleState; +sqlite3InitModuleState.debugModule('globalThis.location =',globalThis.location); + + +Module['locateFile'] = function(path, prefix) { + 'use strict'; + let theFile; + const up = this.urlParams; + if(up.has(path)){ + theFile = up.get(path); + }else if(this.sqlite3Dir){ + theFile = this.sqlite3Dir + path; + }else if(this.scriptDir){ + theFile = this.scriptDir + path; + }else{ + theFile = prefix + path; + } + sqlite3InitModuleState.debugModule( + "locateFile(",arguments[0], ',', arguments[1],")", + 'sqlite3InitModuleState.scriptDir =',this.scriptDir, + 'up.entries() =',Array.from(up.entries()), + "result =", theFile + ); + return theFile; +}.bind(sqlite3InitModuleState); + + +const xNameOfInstantiateWasm = false + ? 'instantiateWasm' + : 'emscripten-bug-17951'; +Module[xNameOfInstantiateWasm] = function callee(imports,onSuccess){ + imports.env.foo = function(){}; + const uri = Module.locateFile( + callee.uri, ( + ('undefined'===typeof scriptDirectory) + ? "" : scriptDirectory) + ); + sqlite3InitModuleState.debugModule( + "instantiateWasm() uri =", uri + ); + const wfetch = ()=>fetch(uri, {credentials: 'same-origin'}); + const loadWasm = WebAssembly.instantiateStreaming + ? async ()=>{ + return WebAssembly.instantiateStreaming(wfetch(), imports) + .then((arg)=>onSuccess(arg.instance, arg.module)); + } + : async ()=>{ + return wfetch() + .then(response => response.arrayBuffer()) + .then(bytes => WebAssembly.instantiate(bytes, imports)) + .then((arg)=>onSuccess(arg.instance, arg.module)); + }; + loadWasm(); + return {}; +}; + +Module[xNameOfInstantiateWasm].uri = 'sqlite3.wasm'; + + + + + + + + +var moduleOverrides = Object.assign({}, Module); + +var arguments_ = []; +var thisProgram = './this.program'; +var quit_ = (status, toThrow) => { + throw toThrow; +}; + + + + + +var ENVIRONMENT_IS_WEB = typeof window == 'object'; +var ENVIRONMENT_IS_WORKER = typeof importScripts == 'function'; + + +var ENVIRONMENT_IS_NODE = typeof process == 'object' && typeof process.versions == 'object' && typeof process.versions.node == 'string'; +var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; + + +var scriptDirectory = ''; +function locateFile(path) { + if (Module['locateFile']) { + return Module['locateFile'](path, scriptDirectory); + } + return scriptDirectory + path; +} + + +var read_, + readAsync, + readBinary, + setWindowTitle; + + + + +if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + if (ENVIRONMENT_IS_WORKER) { + scriptDirectory = self.location.href; + } else if (typeof document != 'undefined' && document.currentScript) { + scriptDirectory = document.currentScript.src; + } + + + if (_scriptDir) { + scriptDirectory = _scriptDir; + } + + + + + + + if (scriptDirectory.indexOf('blob:') !== 0) { + scriptDirectory = scriptDirectory.substr(0, scriptDirectory.replace(/[?#].*/, "").lastIndexOf('/')+1); + } else { + scriptDirectory = ''; + } + + + + { + + + + read_ = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.send(null); + return xhr.responseText; + } + + if (ENVIRONMENT_IS_WORKER) { + readBinary = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.responseType = 'arraybuffer'; + xhr.send(null); + return new Uint8Array((xhr.response)); + }; + } + + readAsync = (url, onload, onerror) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.responseType = 'arraybuffer'; + xhr.onload = () => { + if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { + onload(xhr.response); + return; + } + onerror(); + }; + xhr.onerror = onerror; + xhr.send(null); + } + + + } + + setWindowTitle = (title) => document.title = title; +} else +{ +} + +var out = Module['print'] || console.log.bind(console); +var err = Module['printErr'] || console.warn.bind(console); + + +Object.assign(Module, moduleOverrides); + + +moduleOverrides = null; + + + + + + +if (Module['arguments']) arguments_ = Module['arguments']; + +if (Module['thisProgram']) thisProgram = Module['thisProgram']; + +if (Module['quit']) quit_ = Module['quit']; + + + + + + +var STACK_ALIGN = 16; +var POINTER_SIZE = 4; + +function getNativeTypeSize(type) { + switch (type) { + case 'i1': case 'i8': case 'u8': return 1; + case 'i16': case 'u16': return 2; + case 'i32': case 'u32': return 4; + case 'i64': case 'u64': return 8; + case 'float': return 4; + case 'double': return 8; + default: { + if (type[type.length - 1] === '*') { + return POINTER_SIZE; + } + if (type[0] === 'i') { + const bits = Number(type.substr(1)); + assert(bits % 8 === 0, 'getNativeTypeSize invalid bits ' + bits + ', type ' + type); + return bits / 8; + } + return 0; + } + } +} + + + + + + + + + + + + + + + + + + + +var wasmBinary; +if (Module['wasmBinary']) wasmBinary = Module['wasmBinary']; +var noExitRuntime = Module['noExitRuntime'] || true; + +if (typeof WebAssembly != 'object') { + abort('no native wasm support detected'); +} + + + +var wasmMemory; + + + + + + + +var ABORT = false; + + + + +var EXITSTATUS; + + +function assert(condition, text) { + if (!condition) { + + + + abort(text); + } +} + + + + + + + +var UTF8Decoder = typeof TextDecoder != 'undefined' ? new TextDecoder('utf8') : undefined; + + +function UTF8ArrayToString(heapOrArray, idx, maxBytesToRead) { + var endIdx = idx + maxBytesToRead; + var endPtr = idx; + + + + + + while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr; + + if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) { + return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr)); + } + var str = ''; + + + while (idx < endPtr) { + + + + + var u0 = heapOrArray[idx++]; + if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; } + var u1 = heapOrArray[idx++] & 63; + if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; } + var u2 = heapOrArray[idx++] & 63; + if ((u0 & 0xF0) == 0xE0) { + u0 = ((u0 & 15) << 12) | (u1 << 6) | u2; + } else { + u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63); + } + + if (u0 < 0x10000) { + str += String.fromCharCode(u0); + } else { + var ch = u0 - 0x10000; + str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); + } + } + return str; +} + + +function UTF8ToString(ptr, maxBytesToRead) { + return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ''; +} + + +function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) { + + + if (!(maxBytesToWrite > 0)) + return 0; + + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; + for (var i = 0; i < str.length; ++i) { + + + + + + + + var u = str.charCodeAt(i); + if (u >= 0xD800 && u <= 0xDFFF) { + var u1 = str.charCodeAt(++i); + u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF); + } + if (u <= 0x7F) { + if (outIdx >= endIdx) break; + heap[outIdx++] = u; + } else if (u <= 0x7FF) { + if (outIdx + 1 >= endIdx) break; + heap[outIdx++] = 0xC0 | (u >> 6); + heap[outIdx++] = 0x80 | (u & 63); + } else if (u <= 0xFFFF) { + if (outIdx + 2 >= endIdx) break; + heap[outIdx++] = 0xE0 | (u >> 12); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } else { + if (outIdx + 3 >= endIdx) break; + heap[outIdx++] = 0xF0 | (u >> 18); + heap[outIdx++] = 0x80 | ((u >> 12) & 63); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } + } + + heap[outIdx] = 0; + return outIdx - startIdx; +} + + +function stringToUTF8(str, outPtr, maxBytesToWrite) { + return stringToUTF8Array(str, HEAPU8,outPtr, maxBytesToWrite); +} + + +function lengthBytesUTF8(str) { + var len = 0; + for (var i = 0; i < str.length; ++i) { + + + + + var c = str.charCodeAt(i); + if (c <= 0x7F) { + len++; + } else if (c <= 0x7FF) { + len += 2; + } else if (c >= 0xD800 && c <= 0xDFFF) { + len += 4; ++i; + } else { + len += 3; + } + } + return len; +} + + + + +var HEAP, + + HEAP8, + + HEAPU8, + + HEAP16, + + HEAPU16, + + HEAP32, + + HEAPU32, + + HEAPF32, + + HEAP64, + + HEAPU64, + + HEAPF64; + +function updateMemoryViews() { + var b = wasmMemory.buffer; + Module['HEAP8'] = HEAP8 = new Int8Array(b); + Module['HEAP16'] = HEAP16 = new Int16Array(b); + Module['HEAP32'] = HEAP32 = new Int32Array(b); + Module['HEAPU8'] = HEAPU8 = new Uint8Array(b); + Module['HEAPU16'] = HEAPU16 = new Uint16Array(b); + Module['HEAPU32'] = HEAPU32 = new Uint32Array(b); + Module['HEAPF32'] = HEAPF32 = new Float32Array(b); + Module['HEAPF64'] = HEAPF64 = new Float64Array(b); + Module['HEAP64'] = HEAP64 = new BigInt64Array(b); + Module['HEAPU64'] = HEAPU64 = new BigUint64Array(b); +} + +var STACK_SIZE = 524288; + +var INITIAL_MEMORY = Module['INITIAL_MEMORY'] || 16777216; + + + + + + + + if (Module['wasmMemory']) { + wasmMemory = Module['wasmMemory']; + } else + { + wasmMemory = new WebAssembly.Memory({ + 'initial': INITIAL_MEMORY / 65536, + + + + + + 'maximum': 2147483648 / 65536 + }); + } + +updateMemoryViews(); + + + +INITIAL_MEMORY = wasmMemory.buffer.byteLength; + + + + + + + +var wasmTable; + + + + + + + + + + +var __ATPRERUN__ = []; +var __ATINIT__ = []; +var __ATEXIT__ = []; +var __ATPOSTRUN__ = []; + +var runtimeInitialized = false; + +function keepRuntimeAlive() { + return noExitRuntime; +} + +function preRun() { + + if (Module['preRun']) { + if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; + while (Module['preRun'].length) { + addOnPreRun(Module['preRun'].shift()); + } + } + + callRuntimeCallbacks(__ATPRERUN__); +} + +function initRuntime() { + runtimeInitialized = true; + + +if (!Module["noFSInit"] && !FS.init.initialized) + FS.init(); +FS.ignorePermissions = false; + +TTY.init(); + callRuntimeCallbacks(__ATINIT__); +} + +function postRun() { + + if (Module['postRun']) { + if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; + while (Module['postRun'].length) { + addOnPostRun(Module['postRun'].shift()); + } + } + + callRuntimeCallbacks(__ATPOSTRUN__); +} + +function addOnPreRun(cb) { + __ATPRERUN__.unshift(cb); +} + +function addOnInit(cb) { + __ATINIT__.unshift(cb); +} + +function addOnExit(cb) { +} + +function addOnPostRun(cb) { + __ATPOSTRUN__.unshift(cb); +} + + + + + + + + + + + + + + + + + + + + +var runDependencies = 0; +var runDependencyWatcher = null; +var dependenciesFulfilled = null; + +function getUniqueRunDependency(id) { + return id; +} + +function addRunDependency(id) { + runDependencies++; + + if (Module['monitorRunDependencies']) { + Module['monitorRunDependencies'](runDependencies); + } + +} + +function removeRunDependency(id) { + runDependencies--; + + if (Module['monitorRunDependencies']) { + Module['monitorRunDependencies'](runDependencies); + } + + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); + } + } +} + + +function abort(what) { + if (Module['onAbort']) { + Module['onAbort'](what); + } + + what = 'Aborted(' + what + ')'; + + + err(what); + + ABORT = true; + EXITSTATUS = 1; + + what += '. Build with -sASSERTIONS for more info.'; + + + + + + + + + + + + + + + + var e = new WebAssembly.RuntimeError(what); + + readyPromiseReject(e); + + + + throw e; +} + + + + + + + + + + + +var dataURIPrefix = 'data:application/octet-stream;base64,'; + + +function isDataURI(filename) { + + return filename.startsWith(dataURIPrefix); +} + + +function isFileURI(filename) { + return filename.startsWith('file://'); +} + + +var wasmBinaryFile; + wasmBinaryFile = 'sqlite3.wasm'; + if (!isDataURI(wasmBinaryFile)) { + wasmBinaryFile = locateFile(wasmBinaryFile); + } + +function getBinary(file) { + try { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary); + } + if (readBinary) { + return readBinary(file); + } + throw "both async and sync fetching of the wasm failed"; + } + catch (err) { + abort(err); + } +} + +function getBinaryPromise() { + + + + + + if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER)) { + if (typeof fetch == 'function' + ) { + return fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function(response) { + if (!response['ok']) { + throw "failed to load wasm binary file at '" + wasmBinaryFile + "'"; + } + return response['arrayBuffer'](); + }).catch(function () { + return getBinary(wasmBinaryFile); + }); + } + } + + + return Promise.resolve().then(function() { return getBinary(wasmBinaryFile); }); +} + + + +function createWasm() { + + var info = { + 'env': asmLibraryArg, + 'wasi_snapshot_preview1': asmLibraryArg, + }; + + + + + function receiveInstance(instance, module) { + var exports = instance.exports; + + Module['asm'] = exports; + + wasmTable = Module['asm']['__indirect_function_table']; + + addOnInit(Module['asm']['__wasm_call_ctors']); + + removeRunDependency('wasm-instantiate'); + + } + + addRunDependency('wasm-instantiate'); + + + function receiveInstantiationResult(result) { + + + + + receiveInstance(result['instance']); + } + + function instantiateArrayBuffer(receiver) { + return getBinaryPromise().then(function(binary) { + return WebAssembly.instantiate(binary, info); + }).then(function (instance) { + return instance; + }).then(receiver, function(reason) { + err('failed to asynchronously prepare wasm: ' + reason); + + abort(reason); + }); + } + + function instantiateAsync() { + if (!wasmBinary && + typeof WebAssembly.instantiateStreaming == 'function' && + !isDataURI(wasmBinaryFile) && + typeof fetch == 'function') { + return fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function(response) { + + + + + + var result = WebAssembly.instantiateStreaming(response, info); + + return result.then( + receiveInstantiationResult, + function(reason) { + + + err('wasm streaming compile failed: ' + reason); + err('falling back to ArrayBuffer instantiation'); + return instantiateArrayBuffer(receiveInstantiationResult); + }); + }); + } else { + return instantiateArrayBuffer(receiveInstantiationResult); + } + } + + + + + + if (Module['instantiateWasm']) { + try { + var exports = Module['instantiateWasm'](info, receiveInstance); + return exports; + } catch(e) { + err('Module.instantiateWasm callback failed with error: ' + e); + + readyPromiseReject(e); + } + } + + + instantiateAsync().catch(readyPromiseReject); + return {}; +} + + +var tempDouble; +var tempI64; + + + +var ASM_CONSTS = { + +}; + + + + + + + function ExitStatus(status) { + this.name = 'ExitStatus'; + this.message = 'Program terminated with exit(' + status + ')'; + this.status = status; + } + + function callRuntimeCallbacks(callbacks) { + while (callbacks.length > 0) { + + callbacks.shift()(Module); + } + } + + + + function getValue(ptr, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': return HEAP8[((ptr)>>0)]; + case 'i8': return HEAP8[((ptr)>>0)]; + case 'i16': return HEAP16[((ptr)>>1)]; + case 'i32': return HEAP32[((ptr)>>2)]; + case 'i64': return HEAP64[((ptr)>>3)]; + case 'float': return HEAPF32[((ptr)>>2)]; + case 'double': return HEAPF64[((ptr)>>3)]; + case '*': return HEAPU32[((ptr)>>2)]; + default: abort('invalid type for getValue: ' + type); + } + return null; + } + + + + function setValue(ptr, value, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': HEAP8[((ptr)>>0)] = value; break; + case 'i8': HEAP8[((ptr)>>0)] = value; break; + case 'i16': HEAP16[((ptr)>>1)] = value; break; + case 'i32': HEAP32[((ptr)>>2)] = value; break; + case 'i64': (tempI64 = [value>>>0,(tempDouble=value,(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math.min((+(Math.floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[((ptr)>>2)] = tempI64[0],HEAP32[(((ptr)+(4))>>2)] = tempI64[1]); break; + case 'float': HEAPF32[((ptr)>>2)] = value; break; + case 'double': HEAPF64[((ptr)>>3)] = value; break; + case '*': HEAPU32[((ptr)>>2)] = value; break; + default: abort('invalid type for setValue: ' + type); + } + } + + var PATH = {isAbs:(path) => path.charAt(0) === '/',splitPath:(filename) => { + var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; + return splitPathRe.exec(filename).slice(1); + },normalizeArray:(parts, allowAboveRoot) => { + + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } + + if (allowAboveRoot) { + for (; up; up--) { + parts.unshift('..'); + } + } + return parts; + },normalize:(path) => { + var isAbsolute = PATH.isAbs(path), + trailingSlash = path.substr(-1) === '/'; + + path = PATH.normalizeArray(path.split('/').filter((p) => !!p), !isAbsolute).join('/'); + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + return (isAbsolute ? '/' : '') + path; + },dirname:(path) => { + var result = PATH.splitPath(path), + root = result[0], + dir = result[1]; + if (!root && !dir) { + + return '.'; + } + if (dir) { + + dir = dir.substr(0, dir.length - 1); + } + return root + dir; + },basename:(path) => { + + if (path === '/') return '/'; + path = PATH.normalize(path); + path = path.replace(/\/$/, ""); + var lastSlash = path.lastIndexOf('/'); + if (lastSlash === -1) return path; + return path.substr(lastSlash+1); + },join:function() { + var paths = Array.prototype.slice.call(arguments); + return PATH.normalize(paths.join('/')); + },join2:(l, r) => { + return PATH.normalize(l + '/' + r); + }}; + + function getRandomDevice() { + if (typeof crypto == 'object' && typeof crypto['getRandomValues'] == 'function') { + + var randomBuffer = new Uint8Array(1); + return () => { crypto.getRandomValues(randomBuffer); return randomBuffer[0]; }; + } else + + return () => abort("randomDevice"); + } + + + + var PATH_FS = {resolve:function() { + var resolvedPath = '', + resolvedAbsolute = false; + for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? arguments[i] : FS.cwd(); + + if (typeof path != 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + return ''; + } + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = PATH.isAbs(path); + } + + + resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter((p) => !!p), !resolvedAbsolute).join('/'); + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; + },relative:(from, to) => { + from = PATH_FS.resolve(from).substr(1); + to = PATH_FS.resolve(to).substr(1); + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + return outputParts.join('/'); + }}; + + + + function intArrayFromString(stringy, dontAddNull, length) { + var len = length > 0 ? length : lengthBytesUTF8(stringy)+1; + var u8array = new Array(len); + var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length); + if (dontAddNull) u8array.length = numBytesWritten; + return u8array; + } + var TTY = {ttys:[],init:function () { + + + + + + + + + },shutdown:function() { + + + + + + + + + + },register:function(dev, ops) { + TTY.ttys[dev] = { input: [], output: [], ops: ops }; + FS.registerDevice(dev, TTY.stream_ops); + },stream_ops:{open:function(stream) { + var tty = TTY.ttys[stream.node.rdev]; + if (!tty) { + throw new FS.ErrnoError(43); + } + stream.tty = tty; + stream.seekable = false; + },close:function(stream) { + + stream.tty.ops.fsync(stream.tty); + },fsync:function(stream) { + stream.tty.ops.fsync(stream.tty); + },read:function(stream, buffer, offset, length, pos ) { + if (!stream.tty || !stream.tty.ops.get_char) { + throw new FS.ErrnoError(60); + } + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = stream.tty.ops.get_char(stream.tty); + } catch (e) { + throw new FS.ErrnoError(29); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset+i] = result; + } + if (bytesRead) { + stream.node.timestamp = Date.now(); + } + return bytesRead; + },write:function(stream, buffer, offset, length, pos) { + if (!stream.tty || !stream.tty.ops.put_char) { + throw new FS.ErrnoError(60); + } + try { + for (var i = 0; i < length; i++) { + stream.tty.ops.put_char(stream.tty, buffer[offset+i]); + } + } catch (e) { + throw new FS.ErrnoError(29); + } + if (length) { + stream.node.timestamp = Date.now(); + } + return i; + }},default_tty_ops:{get_char:function(tty) { + if (!tty.input.length) { + var result = null; + if (typeof window != 'undefined' && + typeof window.prompt == 'function') { + + result = window.prompt('Input: '); + if (result !== null) { + result += '\n'; + } + } else if (typeof readline == 'function') { + + result = readline(); + if (result !== null) { + result += '\n'; + } + } + if (!result) { + return null; + } + tty.input = intArrayFromString(result, true); + } + return tty.input.shift(); + },put_char:function(tty, val) { + if (val === null || val === 10) { + out(UTF8ArrayToString(tty.output, 0)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); + } + },fsync:function(tty) { + if (tty.output && tty.output.length > 0) { + out(UTF8ArrayToString(tty.output, 0)); + tty.output = []; + } + }},default_tty1_ops:{put_char:function(tty, val) { + if (val === null || val === 10) { + err(UTF8ArrayToString(tty.output, 0)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); + } + },fsync:function(tty) { + if (tty.output && tty.output.length > 0) { + err(UTF8ArrayToString(tty.output, 0)); + tty.output = []; + } + }}}; + + + function zeroMemory(address, size) { + HEAPU8.fill(0, address, address + size); + return address; + } + + function alignMemory(size, alignment) { + return Math.ceil(size / alignment) * alignment; + } + function mmapAlloc(size) { + size = alignMemory(size, 65536); + var ptr = _emscripten_builtin_memalign(65536, size); + if (!ptr) return 0; + return zeroMemory(ptr, size); + } + var MEMFS = {ops_table:null,mount:function(mount) { + return MEMFS.createNode(null, '/', 16384 | 511 , 0); + },createNode:function(parent, name, mode, dev) { + if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { + + throw new FS.ErrnoError(63); + } + if (!MEMFS.ops_table) { + MEMFS.ops_table = { + dir: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + lookup: MEMFS.node_ops.lookup, + mknod: MEMFS.node_ops.mknod, + rename: MEMFS.node_ops.rename, + unlink: MEMFS.node_ops.unlink, + rmdir: MEMFS.node_ops.rmdir, + readdir: MEMFS.node_ops.readdir, + symlink: MEMFS.node_ops.symlink + }, + stream: { + llseek: MEMFS.stream_ops.llseek + } + }, + file: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: { + llseek: MEMFS.stream_ops.llseek, + read: MEMFS.stream_ops.read, + write: MEMFS.stream_ops.write, + allocate: MEMFS.stream_ops.allocate, + mmap: MEMFS.stream_ops.mmap, + msync: MEMFS.stream_ops.msync + } + }, + link: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + readlink: MEMFS.node_ops.readlink + }, + stream: {} + }, + chrdev: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: FS.chrdev_stream_ops + } + }; + } + var node = FS.createNode(parent, name, mode, dev); + if (FS.isDir(node.mode)) { + node.node_ops = MEMFS.ops_table.dir.node; + node.stream_ops = MEMFS.ops_table.dir.stream; + node.contents = {}; + } else if (FS.isFile(node.mode)) { + node.node_ops = MEMFS.ops_table.file.node; + node.stream_ops = MEMFS.ops_table.file.stream; + node.usedBytes = 0; + + + + node.contents = null; + } else if (FS.isLink(node.mode)) { + node.node_ops = MEMFS.ops_table.link.node; + node.stream_ops = MEMFS.ops_table.link.stream; + } else if (FS.isChrdev(node.mode)) { + node.node_ops = MEMFS.ops_table.chrdev.node; + node.stream_ops = MEMFS.ops_table.chrdev.stream; + } + node.timestamp = Date.now(); + + if (parent) { + parent.contents[name] = node; + parent.timestamp = node.timestamp; + } + return node; + },getFileDataAsTypedArray:function(node) { + if (!node.contents) return new Uint8Array(0); + if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes); + return new Uint8Array(node.contents); + },expandFileStorage:function(node, newCapacity) { + var prevCapacity = node.contents ? node.contents.length : 0; + if (prevCapacity >= newCapacity) return; + + + + var CAPACITY_DOUBLING_MAX = 1024 * 1024; + newCapacity = Math.max(newCapacity, (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2.0 : 1.125)) >>> 0); + if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); + var oldContents = node.contents; + node.contents = new Uint8Array(newCapacity); + if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); + },resizeFileStorage:function(node, newSize) { + if (node.usedBytes == newSize) return; + if (newSize == 0) { + node.contents = null; + node.usedBytes = 0; + } else { + var oldContents = node.contents; + node.contents = new Uint8Array(newSize); + if (oldContents) { + node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))); + } + node.usedBytes = newSize; + } + },node_ops:{getattr:function(node) { + var attr = {}; + + attr.dev = FS.isChrdev(node.mode) ? node.id : 1; + attr.ino = node.id; + attr.mode = node.mode; + attr.nlink = 1; + attr.uid = 0; + attr.gid = 0; + attr.rdev = node.rdev; + if (FS.isDir(node.mode)) { + attr.size = 4096; + } else if (FS.isFile(node.mode)) { + attr.size = node.usedBytes; + } else if (FS.isLink(node.mode)) { + attr.size = node.link.length; + } else { + attr.size = 0; + } + attr.atime = new Date(node.timestamp); + attr.mtime = new Date(node.timestamp); + attr.ctime = new Date(node.timestamp); + + + attr.blksize = 4096; + attr.blocks = Math.ceil(attr.size / attr.blksize); + return attr; + },setattr:function(node, attr) { + if (attr.mode !== undefined) { + node.mode = attr.mode; + } + if (attr.timestamp !== undefined) { + node.timestamp = attr.timestamp; + } + if (attr.size !== undefined) { + MEMFS.resizeFileStorage(node, attr.size); + } + },lookup:function(parent, name) { + throw FS.genericErrors[44]; + },mknod:function(parent, name, mode, dev) { + return MEMFS.createNode(parent, name, mode, dev); + },rename:function(old_node, new_dir, new_name) { + + if (FS.isDir(old_node.mode)) { + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) { + } + if (new_node) { + for (var i in new_node.contents) { + throw new FS.ErrnoError(55); + } + } + } + + delete old_node.parent.contents[old_node.name]; + old_node.parent.timestamp = Date.now() + old_node.name = new_name; + new_dir.contents[new_name] = old_node; + new_dir.timestamp = old_node.parent.timestamp; + old_node.parent = new_dir; + },unlink:function(parent, name) { + delete parent.contents[name]; + parent.timestamp = Date.now(); + },rmdir:function(parent, name) { + var node = FS.lookupNode(parent, name); + for (var i in node.contents) { + throw new FS.ErrnoError(55); + } + delete parent.contents[name]; + parent.timestamp = Date.now(); + },readdir:function(node) { + var entries = ['.', '..']; + for (var key in node.contents) { + if (!node.contents.hasOwnProperty(key)) { + continue; + } + entries.push(key); + } + return entries; + },symlink:function(parent, newname, oldpath) { + var node = MEMFS.createNode(parent, newname, 511 | 40960, 0); + node.link = oldpath; + return node; + },readlink:function(node) { + if (!FS.isLink(node.mode)) { + throw new FS.ErrnoError(28); + } + return node.link; + }},stream_ops:{read:function(stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= stream.node.usedBytes) return 0; + var size = Math.min(stream.node.usedBytes - position, length); + if (size > 8 && contents.subarray) { + buffer.set(contents.subarray(position, position + size), offset); + } else { + for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i]; + } + return size; + },write:function(stream, buffer, offset, length, position, canOwn) { + + + + + if (buffer.buffer === HEAP8.buffer) { + canOwn = false; + } + + if (!length) return 0; + var node = stream.node; + node.timestamp = Date.now(); + + if (buffer.subarray && (!node.contents || node.contents.subarray)) { + if (canOwn) { + node.contents = buffer.subarray(offset, offset + length); + node.usedBytes = length; + return length; + } else if (node.usedBytes === 0 && position === 0) { + node.contents = buffer.slice(offset, offset + length); + node.usedBytes = length; + return length; + } else if (position + length <= node.usedBytes) { + node.contents.set(buffer.subarray(offset, offset + length), position); + return length; + } + } + + + MEMFS.expandFileStorage(node, position+length); + if (node.contents.subarray && buffer.subarray) { + + node.contents.set(buffer.subarray(offset, offset + length), position); + } else { + for (var i = 0; i < length; i++) { + node.contents[position + i] = buffer[offset + i]; + } + } + node.usedBytes = Math.max(node.usedBytes, position + length); + return length; + },llseek:function(stream, offset, whence) { + var position = offset; + if (whence === 1) { + position += stream.position; + } else if (whence === 2) { + if (FS.isFile(stream.node.mode)) { + position += stream.node.usedBytes; + } + } + if (position < 0) { + throw new FS.ErrnoError(28); + } + return position; + },allocate:function(stream, offset, length) { + MEMFS.expandFileStorage(stream.node, offset + length); + stream.node.usedBytes = Math.max(stream.node.usedBytes, offset + length); + },mmap:function(stream, length, position, prot, flags) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + var ptr; + var allocated; + var contents = stream.node.contents; + + if (!(flags & 2) && contents.buffer === HEAP8.buffer) { + + + allocated = false; + ptr = contents.byteOffset; + } else { + + if (position > 0 || position + length < contents.length) { + if (contents.subarray) { + contents = contents.subarray(position, position + length); + } else { + contents = Array.prototype.slice.call(contents, position, position + length); + } + } + allocated = true; + ptr = mmapAlloc(length); + if (!ptr) { + throw new FS.ErrnoError(48); + } + HEAP8.set(contents, ptr); + } + return { ptr: ptr, allocated: allocated }; + },msync:function(stream, buffer, offset, length, mmapFlags) { + MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false); + + return 0; + }}}; + + + function asyncLoad(url, onload, onerror, noRunDep) { + var dep = !noRunDep ? getUniqueRunDependency('al ' + url) : ''; + readAsync(url, (arrayBuffer) => { + assert(arrayBuffer, 'Loading data file "' + url + '" failed (no arrayBuffer).'); + onload(new Uint8Array(arrayBuffer)); + if (dep) removeRunDependency(dep); + }, (event) => { + if (onerror) { + onerror(); + } else { + throw 'Loading data file "' + url + '" failed.'; + } + }); + if (dep) addRunDependency(dep); + } + + var FS = {root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:(path, opts = {}) => { + path = PATH_FS.resolve(path); + + if (!path) return { path: '', node: null }; + + var defaults = { + follow_mount: true, + recurse_count: 0 + }; + opts = Object.assign(defaults, opts) + + if (opts.recurse_count > 8) { + throw new FS.ErrnoError(32); + } + + + var parts = path.split('/').filter((p) => !!p); + + + var current = FS.root; + var current_path = '/'; + + for (var i = 0; i < parts.length; i++) { + var islast = (i === parts.length-1); + if (islast && opts.parent) { + + break; + } + + current = FS.lookupNode(current, parts[i]); + current_path = PATH.join2(current_path, parts[i]); + + + if (FS.isMountpoint(current)) { + if (!islast || (islast && opts.follow_mount)) { + current = current.mounted.root; + } + } + + + + if (!islast || opts.follow) { + var count = 0; + while (FS.isLink(current.mode)) { + var link = FS.readlink(current_path); + current_path = PATH_FS.resolve(PATH.dirname(current_path), link); + + var lookup = FS.lookupPath(current_path, { recurse_count: opts.recurse_count + 1 }); + current = lookup.node; + + if (count++ > 40) { + throw new FS.ErrnoError(32); + } + } + } + } + + return { path: current_path, node: current }; + },getPath:(node) => { + var path; + while (true) { + if (FS.isRoot(node)) { + var mount = node.mount.mountpoint; + if (!path) return mount; + return mount[mount.length-1] !== '/' ? mount + '/' + path : mount + path; + } + path = path ? node.name + '/' + path : node.name; + node = node.parent; + } + },hashName:(parentid, name) => { + var hash = 0; + + for (var i = 0; i < name.length; i++) { + hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0; + } + return ((parentid + hash) >>> 0) % FS.nameTable.length; + },hashAddNode:(node) => { + var hash = FS.hashName(node.parent.id, node.name); + node.name_next = FS.nameTable[hash]; + FS.nameTable[hash] = node; + },hashRemoveNode:(node) => { + var hash = FS.hashName(node.parent.id, node.name); + if (FS.nameTable[hash] === node) { + FS.nameTable[hash] = node.name_next; + } else { + var current = FS.nameTable[hash]; + while (current) { + if (current.name_next === node) { + current.name_next = node.name_next; + break; + } + current = current.name_next; + } + } + },lookupNode:(parent, name) => { + var errCode = FS.mayLookup(parent); + if (errCode) { + throw new FS.ErrnoError(errCode, parent); + } + var hash = FS.hashName(parent.id, name); + for (var node = FS.nameTable[hash]; node; node = node.name_next) { + var nodeName = node.name; + if (node.parent.id === parent.id && nodeName === name) { + return node; + } + } + + return FS.lookup(parent, name); + },createNode:(parent, name, mode, rdev) => { + var node = new FS.FSNode(parent, name, mode, rdev); + + FS.hashAddNode(node); + + return node; + },destroyNode:(node) => { + FS.hashRemoveNode(node); + },isRoot:(node) => { + return node === node.parent; + },isMountpoint:(node) => { + return !!node.mounted; + },isFile:(mode) => { + return (mode & 61440) === 32768; + },isDir:(mode) => { + return (mode & 61440) === 16384; + },isLink:(mode) => { + return (mode & 61440) === 40960; + },isChrdev:(mode) => { + return (mode & 61440) === 8192; + },isBlkdev:(mode) => { + return (mode & 61440) === 24576; + },isFIFO:(mode) => { + return (mode & 61440) === 4096; + },isSocket:(mode) => { + return (mode & 49152) === 49152; + },flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:(str) => { + var flags = FS.flagModes[str]; + if (typeof flags == 'undefined') { + throw new Error('Unknown file open mode: ' + str); + } + return flags; + },flagsToPermissionString:(flag) => { + var perms = ['r', 'w', 'rw'][flag & 3]; + if ((flag & 512)) { + perms += 'w'; + } + return perms; + },nodePermissions:(node, perms) => { + if (FS.ignorePermissions) { + return 0; + } + + if (perms.includes('r') && !(node.mode & 292)) { + return 2; + } else if (perms.includes('w') && !(node.mode & 146)) { + return 2; + } else if (perms.includes('x') && !(node.mode & 73)) { + return 2; + } + return 0; + },mayLookup:(dir) => { + var errCode = FS.nodePermissions(dir, 'x'); + if (errCode) return errCode; + if (!dir.node_ops.lookup) return 2; + return 0; + },mayCreate:(dir, name) => { + try { + var node = FS.lookupNode(dir, name); + return 20; + } catch (e) { + } + return FS.nodePermissions(dir, 'wx'); + },mayDelete:(dir, name, isdir) => { + var node; + try { + node = FS.lookupNode(dir, name); + } catch (e) { + return e.errno; + } + var errCode = FS.nodePermissions(dir, 'wx'); + if (errCode) { + return errCode; + } + if (isdir) { + if (!FS.isDir(node.mode)) { + return 54; + } + if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) { + return 10; + } + } else { + if (FS.isDir(node.mode)) { + return 31; + } + } + return 0; + },mayOpen:(node, flags) => { + if (!node) { + return 44; + } + if (FS.isLink(node.mode)) { + return 32; + } else if (FS.isDir(node.mode)) { + if (FS.flagsToPermissionString(flags) !== 'r' || + (flags & 512)) { + return 31; + } + } + return FS.nodePermissions(node, FS.flagsToPermissionString(flags)); + },MAX_OPEN_FDS:4096,nextfd:(fd_start = 0, fd_end = FS.MAX_OPEN_FDS) => { + for (var fd = fd_start; fd <= fd_end; fd++) { + if (!FS.streams[fd]) { + return fd; + } + } + throw new FS.ErrnoError(33); + },getStream:(fd) => FS.streams[fd],createStream:(stream, fd_start, fd_end) => { + if (!FS.FSStream) { + FS.FSStream = function() { + this.shared = { }; + }; + FS.FSStream.prototype = {}; + Object.defineProperties(FS.FSStream.prototype, { + object: { + + get: function() { return this.node; }, + + set: function(val) { this.node = val; } + }, + isRead: { + + get: function() { return (this.flags & 2097155) !== 1; } + }, + isWrite: { + + get: function() { return (this.flags & 2097155) !== 0; } + }, + isAppend: { + + get: function() { return (this.flags & 1024); } + }, + flags: { + + get: function() { return this.shared.flags; }, + + set: function(val) { this.shared.flags = val; }, + }, + position : { + + get: function() { return this.shared.position; }, + + set: function(val) { this.shared.position = val; }, + }, + }); + } + + stream = Object.assign(new FS.FSStream(), stream); + var fd = FS.nextfd(fd_start, fd_end); + stream.fd = fd; + FS.streams[fd] = stream; + return stream; + },closeStream:(fd) => { + FS.streams[fd] = null; + },chrdev_stream_ops:{open:(stream) => { + var device = FS.getDevice(stream.node.rdev); + + stream.stream_ops = device.stream_ops; + + if (stream.stream_ops.open) { + stream.stream_ops.open(stream); + } + },llseek:() => { + throw new FS.ErrnoError(70); + }},major:(dev) => ((dev) >> 8),minor:(dev) => ((dev) & 0xff),makedev:(ma, mi) => ((ma) << 8 | (mi)),registerDevice:(dev, ops) => { + FS.devices[dev] = { stream_ops: ops }; + },getDevice:(dev) => FS.devices[dev],getMounts:(mount) => { + var mounts = []; + var check = [mount]; + + while (check.length) { + var m = check.pop(); + + mounts.push(m); + + check.push.apply(check, m.mounts); + } + + return mounts; + },syncfs:(populate, callback) => { + if (typeof populate == 'function') { + callback = populate; + populate = false; + } + + FS.syncFSRequests++; + + if (FS.syncFSRequests > 1) { + err('warning: ' + FS.syncFSRequests + ' FS.syncfs operations in flight at once, probably just doing extra work'); + } + + var mounts = FS.getMounts(FS.root.mount); + var completed = 0; + + function doCallback(errCode) { + FS.syncFSRequests--; + return callback(errCode); + } + + function done(errCode) { + if (errCode) { + if (!done.errored) { + done.errored = true; + return doCallback(errCode); + } + return; + } + if (++completed >= mounts.length) { + doCallback(null); + } + }; + + + mounts.forEach((mount) => { + if (!mount.type.syncfs) { + return done(null); + } + mount.type.syncfs(mount, populate, done); + }); + },mount:(type, opts, mountpoint) => { + var root = mountpoint === '/'; + var pseudo = !mountpoint; + var node; + + if (root && FS.root) { + throw new FS.ErrnoError(10); + } else if (!root && !pseudo) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + mountpoint = lookup.path; + node = lookup.node; + + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + + if (!FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + } + + var mount = { + type: type, + opts: opts, + mountpoint: mountpoint, + mounts: [] + }; + + + var mountRoot = type.mount(mount); + mountRoot.mount = mount; + mount.root = mountRoot; + + if (root) { + FS.root = mountRoot; + } else if (node) { + + node.mounted = mount; + + + if (node.mount) { + node.mount.mounts.push(mount); + } + } + + return mountRoot; + },unmount:(mountpoint) => { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + if (!FS.isMountpoint(lookup.node)) { + throw new FS.ErrnoError(28); + } + + + var node = lookup.node; + var mount = node.mounted; + var mounts = FS.getMounts(mount); + + Object.keys(FS.nameTable).forEach((hash) => { + var current = FS.nameTable[hash]; + + while (current) { + var next = current.name_next; + + if (mounts.includes(current.mount)) { + FS.destroyNode(current); + } + + current = next; + } + }); + + + node.mounted = null; + + + var idx = node.mount.mounts.indexOf(mount); + node.mount.mounts.splice(idx, 1); + },lookup:(parent, name) => { + return parent.node_ops.lookup(parent, name); + },mknod:(path, mode, dev) => { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + if (!name || name === '.' || name === '..') { + throw new FS.ErrnoError(28); + } + var errCode = FS.mayCreate(parent, name); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.mknod) { + throw new FS.ErrnoError(63); + } + return parent.node_ops.mknod(parent, name, mode, dev); + },create:(path, mode) => { + mode = mode !== undefined ? mode : 438 ; + mode &= 4095; + mode |= 32768; + return FS.mknod(path, mode, 0); + },mkdir:(path, mode) => { + mode = mode !== undefined ? mode : 511 ; + mode &= 511 | 512; + mode |= 16384; + return FS.mknod(path, mode, 0); + },mkdirTree:(path, mode) => { + var dirs = path.split('/'); + var d = ''; + for (var i = 0; i < dirs.length; ++i) { + if (!dirs[i]) continue; + d += '/' + dirs[i]; + try { + FS.mkdir(d, mode); + } catch(e) { + if (e.errno != 20) throw e; + } + } + },mkdev:(path, mode, dev) => { + if (typeof dev == 'undefined') { + dev = mode; + mode = 438 ; + } + mode |= 8192; + return FS.mknod(path, mode, dev); + },symlink:(oldpath, newpath) => { + if (!PATH_FS.resolve(oldpath)) { + throw new FS.ErrnoError(44); + } + var lookup = FS.lookupPath(newpath, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var newname = PATH.basename(newpath); + var errCode = FS.mayCreate(parent, newname); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.symlink) { + throw new FS.ErrnoError(63); + } + return parent.node_ops.symlink(parent, newname, oldpath); + },rename:(old_path, new_path) => { + var old_dirname = PATH.dirname(old_path); + var new_dirname = PATH.dirname(new_path); + var old_name = PATH.basename(old_path); + var new_name = PATH.basename(new_path); + + var lookup, old_dir, new_dir; + + + lookup = FS.lookupPath(old_path, { parent: true }); + old_dir = lookup.node; + lookup = FS.lookupPath(new_path, { parent: true }); + new_dir = lookup.node; + + if (!old_dir || !new_dir) throw new FS.ErrnoError(44); + + if (old_dir.mount !== new_dir.mount) { + throw new FS.ErrnoError(75); + } + + var old_node = FS.lookupNode(old_dir, old_name); + + var relative = PATH_FS.relative(old_path, new_dirname); + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(28); + } + + relative = PATH_FS.relative(new_path, old_dirname); + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(55); + } + + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) { + + } + + if (old_node === new_node) { + return; + } + + var isdir = FS.isDir(old_node.mode); + var errCode = FS.mayDelete(old_dir, old_name, isdir); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + + + errCode = new_node ? + FS.mayDelete(new_dir, new_name, isdir) : + FS.mayCreate(new_dir, new_name); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!old_dir.node_ops.rename) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) { + throw new FS.ErrnoError(10); + } + + if (new_dir !== old_dir) { + errCode = FS.nodePermissions(old_dir, 'w'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + + FS.hashRemoveNode(old_node); + + try { + old_dir.node_ops.rename(old_node, new_dir, new_name); + } catch (e) { + throw e; + } finally { + + + FS.hashAddNode(old_node); + } + },rmdir:(path) => { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, true); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.rmdir) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + parent.node_ops.rmdir(parent, name); + FS.destroyNode(node); + },readdir:(path) => { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + if (!node.node_ops.readdir) { + throw new FS.ErrnoError(54); + } + return node.node_ops.readdir(node); + },unlink:(path) => { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, false); + if (errCode) { + + + + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.unlink) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + parent.node_ops.unlink(parent, name); + FS.destroyNode(node); + },readlink:(path) => { + var lookup = FS.lookupPath(path); + var link = lookup.node; + if (!link) { + throw new FS.ErrnoError(44); + } + if (!link.node_ops.readlink) { + throw new FS.ErrnoError(28); + } + return PATH_FS.resolve(FS.getPath(link.parent), link.node_ops.readlink(link)); + },stat:(path, dontFollow) => { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + var node = lookup.node; + if (!node) { + throw new FS.ErrnoError(44); + } + if (!node.node_ops.getattr) { + throw new FS.ErrnoError(63); + } + return node.node_ops.getattr(node); + },lstat:(path) => { + return FS.stat(path, true); + },chmod:(path, mode, dontFollow) => { + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + if (!node.node_ops.setattr) { + throw new FS.ErrnoError(63); + } + node.node_ops.setattr(node, { + mode: (mode & 4095) | (node.mode & ~4095), + timestamp: Date.now() + }); + },lchmod:(path, mode) => { + FS.chmod(path, mode, true); + },fchmod:(fd, mode) => { + var stream = FS.getStream(fd); + if (!stream) { + throw new FS.ErrnoError(8); + } + FS.chmod(stream.node, mode); + },chown:(path, uid, gid, dontFollow) => { + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + if (!node.node_ops.setattr) { + throw new FS.ErrnoError(63); + } + node.node_ops.setattr(node, { + timestamp: Date.now() + + }); + },lchown:(path, uid, gid) => { + FS.chown(path, uid, gid, true); + },fchown:(fd, uid, gid) => { + var stream = FS.getStream(fd); + if (!stream) { + throw new FS.ErrnoError(8); + } + FS.chown(stream.node, uid, gid); + },truncate:(path, len) => { + if (len < 0) { + throw new FS.ErrnoError(28); + } + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: true }); + node = lookup.node; + } else { + node = path; + } + if (!node.node_ops.setattr) { + throw new FS.ErrnoError(63); + } + if (FS.isDir(node.mode)) { + throw new FS.ErrnoError(31); + } + if (!FS.isFile(node.mode)) { + throw new FS.ErrnoError(28); + } + var errCode = FS.nodePermissions(node, 'w'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + node.node_ops.setattr(node, { + size: len, + timestamp: Date.now() + }); + },ftruncate:(fd, len) => { + var stream = FS.getStream(fd); + if (!stream) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(28); + } + FS.truncate(stream.node, len); + },utime:(path, atime, mtime) => { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + node.node_ops.setattr(node, { + timestamp: Math.max(atime, mtime) + }); + },open:(path, flags, mode) => { + if (path === "") { + throw new FS.ErrnoError(44); + } + flags = typeof flags == 'string' ? FS.modeStringToFlags(flags) : flags; + mode = typeof mode == 'undefined' ? 438 : mode; + if ((flags & 64)) { + mode = (mode & 4095) | 32768; + } else { + mode = 0; + } + var node; + if (typeof path == 'object') { + node = path; + } else { + path = PATH.normalize(path); + try { + var lookup = FS.lookupPath(path, { + follow: !(flags & 131072) + }); + node = lookup.node; + } catch (e) { + + } + } + + var created = false; + if ((flags & 64)) { + if (node) { + + if ((flags & 128)) { + throw new FS.ErrnoError(20); + } + } else { + + node = FS.mknod(path, mode, 0); + created = true; + } + } + if (!node) { + throw new FS.ErrnoError(44); + } + + if (FS.isChrdev(node.mode)) { + flags &= ~512; + } + + if ((flags & 65536) && !FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + + + + if (!created) { + var errCode = FS.mayOpen(node, flags); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + + if ((flags & 512) && !created) { + FS.truncate(node, 0); + } + + flags &= ~(128 | 512 | 131072); + + + var stream = FS.createStream({ + node: node, + path: FS.getPath(node), + flags: flags, + seekable: true, + position: 0, + stream_ops: node.stream_ops, + + ungotten: [], + error: false + }); + + if (stream.stream_ops.open) { + stream.stream_ops.open(stream); + } + if (Module['logReadFiles'] && !(flags & 1)) { + if (!FS.readFiles) FS.readFiles = {}; + if (!(path in FS.readFiles)) { + FS.readFiles[path] = 1; + } + } + return stream; + },close:(stream) => { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (stream.getdents) stream.getdents = null; + try { + if (stream.stream_ops.close) { + stream.stream_ops.close(stream); + } + } catch (e) { + throw e; + } finally { + FS.closeStream(stream.fd); + } + stream.fd = null; + },isClosed:(stream) => { + return stream.fd === null; + },llseek:(stream, offset, whence) => { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (!stream.seekable || !stream.stream_ops.llseek) { + throw new FS.ErrnoError(70); + } + if (whence != 0 && whence != 1 && whence != 2) { + throw new FS.ErrnoError(28); + } + stream.position = stream.stream_ops.llseek(stream, offset, whence); + stream.ungotten = []; + return stream.position; + },read:(stream, buffer, offset, length, position) => { + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(8); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + if (!stream.stream_ops.read) { + throw new FS.ErrnoError(28); + } + var seeking = typeof position != 'undefined'; + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position); + if (!seeking) stream.position += bytesRead; + return bytesRead; + },write:(stream, buffer, offset, length, position, canOwn) => { + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(8); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + if (!stream.stream_ops.write) { + throw new FS.ErrnoError(28); + } + if (stream.seekable && stream.flags & 1024) { + + FS.llseek(stream, 0, 2); + } + var seeking = typeof position != 'undefined'; + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn); + if (!seeking) stream.position += bytesWritten; + return bytesWritten; + },allocate:(stream, offset, length) => { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (offset < 0 || length <= 0) { + throw new FS.ErrnoError(28); + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(8); + } + if (!FS.isFile(stream.node.mode) && !FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + if (!stream.stream_ops.allocate) { + throw new FS.ErrnoError(138); + } + stream.stream_ops.allocate(stream, offset, length); + },mmap:(stream, length, position, prot, flags) => { + + + + + + + if ((prot & 2) !== 0 + && (flags & 2) === 0 + && (stream.flags & 2097155) !== 2) { + throw new FS.ErrnoError(2); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(2); + } + if (!stream.stream_ops.mmap) { + throw new FS.ErrnoError(43); + } + return stream.stream_ops.mmap(stream, length, position, prot, flags); + },msync:(stream, buffer, offset, length, mmapFlags) => { + if (!stream.stream_ops.msync) { + return 0; + } + return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags); + },munmap:(stream) => 0,ioctl:(stream, cmd, arg) => { + if (!stream.stream_ops.ioctl) { + throw new FS.ErrnoError(59); + } + return stream.stream_ops.ioctl(stream, cmd, arg); + },readFile:(path, opts = {}) => { + opts.flags = opts.flags || 0; + opts.encoding = opts.encoding || 'binary'; + if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') { + throw new Error('Invalid encoding type "' + opts.encoding + '"'); + } + var ret; + var stream = FS.open(path, opts.flags); + var stat = FS.stat(path); + var length = stat.size; + var buf = new Uint8Array(length); + FS.read(stream, buf, 0, length, 0); + if (opts.encoding === 'utf8') { + ret = UTF8ArrayToString(buf, 0); + } else if (opts.encoding === 'binary') { + ret = buf; + } + FS.close(stream); + return ret; + },writeFile:(path, data, opts = {}) => { + opts.flags = opts.flags || 577; + var stream = FS.open(path, opts.flags, opts.mode); + if (typeof data == 'string') { + var buf = new Uint8Array(lengthBytesUTF8(data)+1); + var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length); + FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn); + } else if (ArrayBuffer.isView(data)) { + FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn); + } else { + throw new Error('Unsupported data type'); + } + FS.close(stream); + },cwd:() => FS.currentPath,chdir:(path) => { + var lookup = FS.lookupPath(path, { follow: true }); + if (lookup.node === null) { + throw new FS.ErrnoError(44); + } + if (!FS.isDir(lookup.node.mode)) { + throw new FS.ErrnoError(54); + } + var errCode = FS.nodePermissions(lookup.node, 'x'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + FS.currentPath = lookup.path; + },createDefaultDirectories:() => { + FS.mkdir('/tmp'); + FS.mkdir('/home'); + FS.mkdir('/home/web_user'); + },createDefaultDevices:() => { + + FS.mkdir('/dev'); + + FS.registerDevice(FS.makedev(1, 3), { + read: () => 0, + write: (stream, buffer, offset, length, pos) => length, + }); + FS.mkdev('/dev/null', FS.makedev(1, 3)); + + + + TTY.register(FS.makedev(5, 0), TTY.default_tty_ops); + TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops); + FS.mkdev('/dev/tty', FS.makedev(5, 0)); + FS.mkdev('/dev/tty1', FS.makedev(6, 0)); + + var random_device = getRandomDevice(); + FS.createDevice('/dev', 'random', random_device); + FS.createDevice('/dev', 'urandom', random_device); + + + FS.mkdir('/dev/shm'); + FS.mkdir('/dev/shm/tmp'); + },createSpecialDirectories:() => { + + + FS.mkdir('/proc'); + var proc_self = FS.mkdir('/proc/self'); + FS.mkdir('/proc/self/fd'); + FS.mount({ + mount: () => { + var node = FS.createNode(proc_self, 'fd', 16384 | 511 , 73); + node.node_ops = { + lookup: (parent, name) => { + var fd = +name; + var stream = FS.getStream(fd); + if (!stream) throw new FS.ErrnoError(8); + var ret = { + parent: null, + mount: { mountpoint: 'fake' }, + node_ops: { readlink: () => stream.path }, + }; + ret.parent = ret; + return ret; + } + }; + return node; + } + }, {}, '/proc/self/fd'); + },createStandardStreams:() => { + + + + + + + + + if (Module['stdin']) { + FS.createDevice('/dev', 'stdin', Module['stdin']); + } else { + FS.symlink('/dev/tty', '/dev/stdin'); + } + if (Module['stdout']) { + FS.createDevice('/dev', 'stdout', null, Module['stdout']); + } else { + FS.symlink('/dev/tty', '/dev/stdout'); + } + if (Module['stderr']) { + FS.createDevice('/dev', 'stderr', null, Module['stderr']); + } else { + FS.symlink('/dev/tty1', '/dev/stderr'); + } + + + var stdin = FS.open('/dev/stdin', 0); + var stdout = FS.open('/dev/stdout', 1); + var stderr = FS.open('/dev/stderr', 1); + },ensureErrnoError:() => { + if (FS.ErrnoError) return; + FS.ErrnoError = function ErrnoError(errno, node) { + this.node = node; + this.setErrno = function(errno) { + this.errno = errno; + }; + this.setErrno(errno); + this.message = 'FS error'; + + }; + FS.ErrnoError.prototype = new Error(); + FS.ErrnoError.prototype.constructor = FS.ErrnoError; + + [44].forEach((code) => { + FS.genericErrors[code] = new FS.ErrnoError(code); + FS.genericErrors[code].stack = ''; + }); + },staticInit:() => { + FS.ensureErrnoError(); + + FS.nameTable = new Array(4096); + + FS.mount(MEMFS, {}, '/'); + + FS.createDefaultDirectories(); + FS.createDefaultDevices(); + FS.createSpecialDirectories(); + + FS.filesystems = { + 'MEMFS': MEMFS, + }; + },init:(input, output, error) => { + FS.init.initialized = true; + + FS.ensureErrnoError(); + + + Module['stdin'] = input || Module['stdin']; + Module['stdout'] = output || Module['stdout']; + Module['stderr'] = error || Module['stderr']; + + FS.createStandardStreams(); + },quit:() => { + FS.init.initialized = false; + + + for (var i = 0; i < FS.streams.length; i++) { + var stream = FS.streams[i]; + if (!stream) { + continue; + } + FS.close(stream); + } + },getMode:(canRead, canWrite) => { + var mode = 0; + if (canRead) mode |= 292 | 73; + if (canWrite) mode |= 146; + return mode; + },findObject:(path, dontResolveLastLink) => { + var ret = FS.analyzePath(path, dontResolveLastLink); + if (!ret.exists) { + return null; + } + return ret.object; + },analyzePath:(path, dontResolveLastLink) => { + + try { + var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + path = lookup.path; + } catch (e) { + } + var ret = { + isRoot: false, exists: false, error: 0, name: null, path: null, object: null, + parentExists: false, parentPath: null, parentObject: null + }; + try { + var lookup = FS.lookupPath(path, { parent: true }); + ret.parentExists = true; + ret.parentPath = lookup.path; + ret.parentObject = lookup.node; + ret.name = PATH.basename(path); + lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + ret.exists = true; + ret.path = lookup.path; + ret.object = lookup.node; + ret.name = lookup.node.name; + ret.isRoot = lookup.path === '/'; + } catch (e) { + ret.error = e.errno; + }; + return ret; + },createPath:(parent, path, canRead, canWrite) => { + parent = typeof parent == 'string' ? parent : FS.getPath(parent); + var parts = path.split('/').reverse(); + while (parts.length) { + var part = parts.pop(); + if (!part) continue; + var current = PATH.join2(parent, part); + try { + FS.mkdir(current); + } catch (e) { + + } + parent = current; + } + return current; + },createFile:(parent, name, properties, canRead, canWrite) => { + var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + var mode = FS.getMode(canRead, canWrite); + return FS.create(path, mode); + },createDataFile:(parent, name, data, canRead, canWrite, canOwn) => { + var path = name; + if (parent) { + parent = typeof parent == 'string' ? parent : FS.getPath(parent); + path = name ? PATH.join2(parent, name) : parent; + } + var mode = FS.getMode(canRead, canWrite); + var node = FS.create(path, mode); + if (data) { + if (typeof data == 'string') { + var arr = new Array(data.length); + for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i); + data = arr; + } + + FS.chmod(node, mode | 146); + var stream = FS.open(node, 577); + FS.write(stream, data, 0, data.length, 0, canOwn); + FS.close(stream); + FS.chmod(node, mode); + } + return node; + },createDevice:(parent, name, input, output) => { + var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + var mode = FS.getMode(!!input, !!output); + if (!FS.createDevice.major) FS.createDevice.major = 64; + var dev = FS.makedev(FS.createDevice.major++, 0); + + + FS.registerDevice(dev, { + open: (stream) => { + stream.seekable = false; + }, + close: (stream) => { + + if (output && output.buffer && output.buffer.length) { + output(10); + } + }, + read: (stream, buffer, offset, length, pos ) => { + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = input(); + } catch (e) { + throw new FS.ErrnoError(29); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset+i] = result; + } + if (bytesRead) { + stream.node.timestamp = Date.now(); + } + return bytesRead; + }, + write: (stream, buffer, offset, length, pos) => { + for (var i = 0; i < length; i++) { + try { + output(buffer[offset+i]); + } catch (e) { + throw new FS.ErrnoError(29); + } + } + if (length) { + stream.node.timestamp = Date.now(); + } + return i; + } + }); + return FS.mkdev(path, mode, dev); + },forceLoadFile:(obj) => { + if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true; + if (typeof XMLHttpRequest != 'undefined') { + throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread."); + } else if (read_) { + + try { + + + obj.contents = intArrayFromString(read_(obj.url), true); + obj.usedBytes = obj.contents.length; + } catch (e) { + throw new FS.ErrnoError(29); + } + } else { + throw new Error('Cannot load without read() or XMLHttpRequest.'); + } + },createLazyFile:(parent, name, url, canRead, canWrite) => { + + + function LazyUint8Array() { + this.lengthKnown = false; + this.chunks = []; + } + LazyUint8Array.prototype.get = function LazyUint8Array_get(idx) { + if (idx > this.length-1 || idx < 0) { + return undefined; + } + var chunkOffset = idx % this.chunkSize; + var chunkNum = (idx / this.chunkSize)|0; + return this.getter(chunkNum)[chunkOffset]; + }; + LazyUint8Array.prototype.setDataGetter = function LazyUint8Array_setDataGetter(getter) { + this.getter = getter; + }; + LazyUint8Array.prototype.cacheLength = function LazyUint8Array_cacheLength() { + + var xhr = new XMLHttpRequest(); + xhr.open('HEAD', url, false); + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + var datalength = Number(xhr.getResponseHeader("Content-length")); + var header; + var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes"; + var usesGzip = (header = xhr.getResponseHeader("Content-Encoding")) && header === "gzip"; + + var chunkSize = 1024*1024; + + if (!hasByteServing) chunkSize = datalength; + + + var doXHR = (from, to) => { + if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!"); + if (to > datalength-1) throw new Error("only " + datalength + " bytes available! programmer error!"); + + + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); + + + xhr.responseType = 'arraybuffer'; + if (xhr.overrideMimeType) { + xhr.overrideMimeType('text/plain; charset=x-user-defined'); + } + + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + if (xhr.response !== undefined) { + return new Uint8Array((xhr.response || [])); + } + return intArrayFromString(xhr.responseText || '', true); + }; + var lazyArray = this; + lazyArray.setDataGetter((chunkNum) => { + var start = chunkNum * chunkSize; + var end = (chunkNum+1) * chunkSize - 1; + end = Math.min(end, datalength-1); + if (typeof lazyArray.chunks[chunkNum] == 'undefined') { + lazyArray.chunks[chunkNum] = doXHR(start, end); + } + if (typeof lazyArray.chunks[chunkNum] == 'undefined') throw new Error('doXHR failed!'); + return lazyArray.chunks[chunkNum]; + }); + + if (usesGzip || !datalength) { + + chunkSize = datalength = 1; + datalength = this.getter(0).length; + chunkSize = datalength; + out("LazyFiles on gzip forces download of the whole file when length is accessed"); + } + + this._length = datalength; + this._chunkSize = chunkSize; + this.lengthKnown = true; + }; + if (typeof XMLHttpRequest != 'undefined') { + if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc'; + var lazyArray = new LazyUint8Array(); + Object.defineProperties(lazyArray, { + length: { + get: function() { + if (!this.lengthKnown) { + this.cacheLength(); + } + return this._length; + } + }, + chunkSize: { + get: function() { + if (!this.lengthKnown) { + this.cacheLength(); + } + return this._chunkSize; + } + } + }); + + var properties = { isDevice: false, contents: lazyArray }; + } else { + var properties = { isDevice: false, url: url }; + } + + var node = FS.createFile(parent, name, properties, canRead, canWrite); + + + + if (properties.contents) { + node.contents = properties.contents; + } else if (properties.url) { + node.contents = null; + node.url = properties.url; + } + + Object.defineProperties(node, { + usedBytes: { + get: function() { return this.contents.length; } + } + }); + + var stream_ops = {}; + var keys = Object.keys(node.stream_ops); + keys.forEach((key) => { + var fn = node.stream_ops[key]; + stream_ops[key] = function forceLoadLazyFile() { + FS.forceLoadFile(node); + return fn.apply(null, arguments); + }; + }); + function writeChunks(stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= contents.length) + return 0; + var size = Math.min(contents.length - position, length); + if (contents.slice) { + for (var i = 0; i < size; i++) { + buffer[offset + i] = contents[position + i]; + } + } else { + for (var i = 0; i < size; i++) { + buffer[offset + i] = contents.get(position + i); + } + } + return size; + } + + stream_ops.read = (stream, buffer, offset, length, position) => { + FS.forceLoadFile(node); + return writeChunks(stream, buffer, offset, length, position) + }; + + stream_ops.mmap = (stream, length, position, prot, flags) => { + FS.forceLoadFile(node); + var ptr = mmapAlloc(length); + if (!ptr) { + throw new FS.ErrnoError(48); + } + writeChunks(stream, HEAP8, ptr, length, position); + return { ptr: ptr, allocated: true }; + }; + node.stream_ops = stream_ops; + return node; + },createPreloadedFile:(parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) => { + + + var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent; + var dep = getUniqueRunDependency('cp ' + fullname); + function processData(byteArray) { + function finish(byteArray) { + if (preFinish) preFinish(); + if (!dontCreateFile) { + FS.createDataFile(parent, name, byteArray, canRead, canWrite, canOwn); + } + if (onload) onload(); + removeRunDependency(dep); + } + if (Browser.handledByPreloadPlugin(byteArray, fullname, finish, () => { + if (onerror) onerror(); + removeRunDependency(dep); + })) { + return; + } + finish(byteArray); + } + addRunDependency(dep); + if (typeof url == 'string') { + asyncLoad(url, (byteArray) => processData(byteArray), onerror); + } else { + processData(url); + } + },indexedDB:() => { + return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; + },DB_NAME:() => { + return 'EM_FS_' + window.location.pathname; + },DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:(paths, onload, onerror) => { + onload = onload || (() => {}); + onerror = onerror || (() => {}); + var indexedDB = FS.indexedDB(); + try { + var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION); + } catch (e) { + return onerror(e); + } + openRequest.onupgradeneeded = () => { + out('creating db'); + var db = openRequest.result; + db.createObjectStore(FS.DB_STORE_NAME); + }; + openRequest.onsuccess = () => { + var db = openRequest.result; + var transaction = db.transaction([FS.DB_STORE_NAME], 'readwrite'); + var files = transaction.objectStore(FS.DB_STORE_NAME); + var ok = 0, fail = 0, total = paths.length; + function finish() { + if (fail == 0) onload(); else onerror(); + } + paths.forEach((path) => { + var putRequest = files.put(FS.analyzePath(path).object.contents, path); + putRequest.onsuccess = () => { ok++; if (ok + fail == total) finish() }; + putRequest.onerror = () => { fail++; if (ok + fail == total) finish() }; + }); + transaction.onerror = onerror; + }; + openRequest.onerror = onerror; + },loadFilesFromDB:(paths, onload, onerror) => { + onload = onload || (() => {}); + onerror = onerror || (() => {}); + var indexedDB = FS.indexedDB(); + try { + var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION); + } catch (e) { + return onerror(e); + } + openRequest.onupgradeneeded = onerror; + openRequest.onsuccess = () => { + var db = openRequest.result; + try { + var transaction = db.transaction([FS.DB_STORE_NAME], 'readonly'); + } catch(e) { + onerror(e); + return; + } + var files = transaction.objectStore(FS.DB_STORE_NAME); + var ok = 0, fail = 0, total = paths.length; + function finish() { + if (fail == 0) onload(); else onerror(); + } + paths.forEach((path) => { + var getRequest = files.get(path); + getRequest.onsuccess = () => { + if (FS.analyzePath(path).exists) { + FS.unlink(path); + } + FS.createDataFile(PATH.dirname(path), PATH.basename(path), getRequest.result, true, true, true); + ok++; + if (ok + fail == total) finish(); + }; + getRequest.onerror = () => { fail++; if (ok + fail == total) finish() }; + }); + transaction.onerror = onerror; + }; + openRequest.onerror = onerror; + }}; + var SYSCALLS = {DEFAULT_POLLMASK:5,calculateAt:function(dirfd, path, allowEmpty) { + if (PATH.isAbs(path)) { + return path; + } + + var dir; + if (dirfd === -100) { + dir = FS.cwd(); + } else { + var dirstream = SYSCALLS.getStreamFromFD(dirfd); + dir = dirstream.path; + } + if (path.length == 0) { + if (!allowEmpty) { + throw new FS.ErrnoError(44);; + } + return dir; + } + return PATH.join2(dir, path); + },doStat:function(func, path, buf) { + try { + var stat = func(path); + } catch (e) { + if (e && e.node && PATH.normalize(path) !== PATH.normalize(FS.getPath(e.node))) { + + return -54; + } + throw e; + } + HEAP32[((buf)>>2)] = stat.dev; + HEAP32[(((buf)+(8))>>2)] = stat.ino; + HEAP32[(((buf)+(12))>>2)] = stat.mode; + HEAPU32[(((buf)+(16))>>2)] = stat.nlink; + HEAP32[(((buf)+(20))>>2)] = stat.uid; + HEAP32[(((buf)+(24))>>2)] = stat.gid; + HEAP32[(((buf)+(28))>>2)] = stat.rdev; + (tempI64 = [stat.size>>>0,(tempDouble=stat.size,(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math.min((+(Math.floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[(((buf)+(40))>>2)] = tempI64[0],HEAP32[(((buf)+(44))>>2)] = tempI64[1]); + HEAP32[(((buf)+(48))>>2)] = 4096; + HEAP32[(((buf)+(52))>>2)] = stat.blocks; + var atime = stat.atime.getTime(); + var mtime = stat.mtime.getTime(); + var ctime = stat.ctime.getTime(); + (tempI64 = [Math.floor(atime / 1000)>>>0,(tempDouble=Math.floor(atime / 1000),(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math.min((+(Math.floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[(((buf)+(56))>>2)] = tempI64[0],HEAP32[(((buf)+(60))>>2)] = tempI64[1]); + HEAPU32[(((buf)+(64))>>2)] = (atime % 1000) * 1000; + (tempI64 = [Math.floor(mtime / 1000)>>>0,(tempDouble=Math.floor(mtime / 1000),(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math.min((+(Math.floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[(((buf)+(72))>>2)] = tempI64[0],HEAP32[(((buf)+(76))>>2)] = tempI64[1]); + HEAPU32[(((buf)+(80))>>2)] = (mtime % 1000) * 1000; + (tempI64 = [Math.floor(ctime / 1000)>>>0,(tempDouble=Math.floor(ctime / 1000),(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math.min((+(Math.floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[(((buf)+(88))>>2)] = tempI64[0],HEAP32[(((buf)+(92))>>2)] = tempI64[1]); + HEAPU32[(((buf)+(96))>>2)] = (ctime % 1000) * 1000; + (tempI64 = [stat.ino>>>0,(tempDouble=stat.ino,(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math.min((+(Math.floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[(((buf)+(104))>>2)] = tempI64[0],HEAP32[(((buf)+(108))>>2)] = tempI64[1]); + return 0; + },doMsync:function(addr, stream, len, flags, offset) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + if (flags & 2) { + + return 0; + } + var buffer = HEAPU8.slice(addr, addr + len); + FS.msync(stream, buffer, offset, len, flags); + },varargs:undefined,get:function() { + SYSCALLS.varargs += 4; + var ret = HEAP32[(((SYSCALLS.varargs)-(4))>>2)]; + return ret; + },getStr:function(ptr) { + var ret = UTF8ToString(ptr); + return ret; + },getStreamFromFD:function(fd) { + var stream = FS.getStream(fd); + if (!stream) throw new FS.ErrnoError(8); + return stream; + }}; + function ___syscall_chmod(path, mode) { + try { + + path = SYSCALLS.getStr(path); + FS.chmod(path, mode); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e instanceof FS.ErrnoError)) throw e; + return -e.errno; + } + } + + function ___syscall_faccessat(dirfd, path, amode, flags) { + try { + + path = SYSCALLS.getStr(path); + path = SYSCALLS.calculateAt(dirfd, path); + if (amode & ~7) { + + return -28; + } + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + if (!node) { + return -44; + } + var perms = ''; + if (amode & 4) perms += 'r'; + if (amode & 2) perms += 'w'; + if (amode & 1) perms += 'x'; + if (perms && FS.nodePermissions(node, perms)) { + return -2; + } + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e instanceof FS.ErrnoError)) throw e; + return -e.errno; + } + } + + function ___syscall_fchmod(fd, mode) { + try { + + FS.fchmod(fd, mode); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e instanceof FS.ErrnoError)) throw e; + return -e.errno; + } + } + + function ___syscall_fchown32(fd, owner, group) { + try { + + FS.fchown(fd, owner, group); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e instanceof FS.ErrnoError)) throw e; + return -e.errno; + } + } + + function setErrNo(value) { + HEAP32[((___errno_location())>>2)] = value; + return value; + } + + function ___syscall_fcntl64(fd, cmd, varargs) { + SYSCALLS.varargs = varargs; + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + switch (cmd) { + case 0: { + var arg = SYSCALLS.get(); + if (arg < 0) { + return -28; + } + var newStream; + newStream = FS.createStream(stream, arg); + return newStream.fd; + } + case 1: + case 2: + return 0; + case 3: + return stream.flags; + case 4: { + var arg = SYSCALLS.get(); + stream.flags |= arg; + return 0; + } + case 5: + { + + var arg = SYSCALLS.get(); + var offset = 0; + + HEAP16[(((arg)+(offset))>>1)] = 2; + return 0; + } + case 6: + case 7: + + + + + return 0; + case 16: + case 8: + return -28; + case 9: + + setErrNo(28); + return -1; + default: { + return -28; + } + } + } catch (e) { + if (typeof FS == 'undefined' || !(e instanceof FS.ErrnoError)) throw e; + return -e.errno; + } + } + + function ___syscall_fstat64(fd, buf) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + return SYSCALLS.doStat(FS.stat, stream.path, buf); + } catch (e) { + if (typeof FS == 'undefined' || !(e instanceof FS.ErrnoError)) throw e; + return -e.errno; + } + } + + var MAX_INT53 = 9007199254740992; + + var MIN_INT53 = -9007199254740992; + function bigintToI53Checked(num) { + return (num < MIN_INT53 || num > MAX_INT53) ? NaN : Number(num); + } + + + + + function ___syscall_ftruncate64(fd, length) { + try { + + length = bigintToI53Checked(length); if (isNaN(length)) return -61; + FS.ftruncate(fd, length); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e instanceof FS.ErrnoError)) throw e; + return -e.errno; + } + } + + function ___syscall_getcwd(buf, size) { + try { + + if (size === 0) return -28; + var cwd = FS.cwd(); + var cwdLengthInBytes = lengthBytesUTF8(cwd) + 1; + if (size < cwdLengthInBytes) return -68; + stringToUTF8(cwd, buf, size); + return cwdLengthInBytes; + } catch (e) { + if (typeof FS == 'undefined' || !(e instanceof FS.ErrnoError)) throw e; + return -e.errno; + } + } + + function ___syscall_ioctl(fd, op, varargs) { + SYSCALLS.varargs = varargs; + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + switch (op) { + case 21509: + case 21505: { + if (!stream.tty) return -59; + return 0; + } + case 21510: + case 21511: + case 21512: + case 21506: + case 21507: + case 21508: { + if (!stream.tty) return -59; + return 0; + } + case 21519: { + if (!stream.tty) return -59; + var argp = SYSCALLS.get(); + HEAP32[((argp)>>2)] = 0; + return 0; + } + case 21520: { + if (!stream.tty) return -59; + return -28; + } + case 21531: { + var argp = SYSCALLS.get(); + return FS.ioctl(stream, op, argp); + } + case 21523: { + + + if (!stream.tty) return -59; + return 0; + } + case 21524: { + + + + if (!stream.tty) return -59; + return 0; + } + default: return -28; + } + } catch (e) { + if (typeof FS == 'undefined' || !(e instanceof FS.ErrnoError)) throw e; + return -e.errno; + } + } + + function ___syscall_lstat64(path, buf) { + try { + + path = SYSCALLS.getStr(path); + return SYSCALLS.doStat(FS.lstat, path, buf); + } catch (e) { + if (typeof FS == 'undefined' || !(e instanceof FS.ErrnoError)) throw e; + return -e.errno; + } + } + + function ___syscall_mkdirat(dirfd, path, mode) { + try { + + path = SYSCALLS.getStr(path); + path = SYSCALLS.calculateAt(dirfd, path); + + + path = PATH.normalize(path); + if (path[path.length-1] === '/') path = path.substr(0, path.length-1); + FS.mkdir(path, mode, 0); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e instanceof FS.ErrnoError)) throw e; + return -e.errno; + } + } + + function ___syscall_newfstatat(dirfd, path, buf, flags) { + try { + + path = SYSCALLS.getStr(path); + var nofollow = flags & 256; + var allowEmpty = flags & 4096; + flags = flags & (~6400); + path = SYSCALLS.calculateAt(dirfd, path, allowEmpty); + return SYSCALLS.doStat(nofollow ? FS.lstat : FS.stat, path, buf); + } catch (e) { + if (typeof FS == 'undefined' || !(e instanceof FS.ErrnoError)) throw e; + return -e.errno; + } + } + + function ___syscall_openat(dirfd, path, flags, varargs) { + SYSCALLS.varargs = varargs; + try { + + path = SYSCALLS.getStr(path); + path = SYSCALLS.calculateAt(dirfd, path); + var mode = varargs ? SYSCALLS.get() : 0; + return FS.open(path, flags, mode).fd; + } catch (e) { + if (typeof FS == 'undefined' || !(e instanceof FS.ErrnoError)) throw e; + return -e.errno; + } + } + + function ___syscall_readlinkat(dirfd, path, buf, bufsize) { + try { + + path = SYSCALLS.getStr(path); + path = SYSCALLS.calculateAt(dirfd, path); + if (bufsize <= 0) return -28; + var ret = FS.readlink(path); + + var len = Math.min(bufsize, lengthBytesUTF8(ret)); + var endChar = HEAP8[buf+len]; + stringToUTF8(ret, buf, bufsize+1); + + + HEAP8[buf+len] = endChar; + return len; + } catch (e) { + if (typeof FS == 'undefined' || !(e instanceof FS.ErrnoError)) throw e; + return -e.errno; + } + } + + function ___syscall_rmdir(path) { + try { + + path = SYSCALLS.getStr(path); + FS.rmdir(path); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e instanceof FS.ErrnoError)) throw e; + return -e.errno; + } + } + + function ___syscall_stat64(path, buf) { + try { + + path = SYSCALLS.getStr(path); + return SYSCALLS.doStat(FS.stat, path, buf); + } catch (e) { + if (typeof FS == 'undefined' || !(e instanceof FS.ErrnoError)) throw e; + return -e.errno; + } + } + + function ___syscall_unlinkat(dirfd, path, flags) { + try { + + path = SYSCALLS.getStr(path); + path = SYSCALLS.calculateAt(dirfd, path); + if (flags === 0) { + FS.unlink(path); + } else if (flags === 512) { + FS.rmdir(path); + } else { + abort('Invalid flags passed to unlinkat'); + } + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e instanceof FS.ErrnoError)) throw e; + return -e.errno; + } + } + + function readI53FromI64(ptr) { + return HEAPU32[ptr>>2] + HEAP32[ptr+4>>2] * 4294967296; + } + + function ___syscall_utimensat(dirfd, path, times, flags) { + try { + + path = SYSCALLS.getStr(path); + path = SYSCALLS.calculateAt(dirfd, path, true); + if (!times) { + var atime = Date.now(); + var mtime = atime; + } else { + var seconds = readI53FromI64(times); + var nanoseconds = HEAP32[(((times)+(8))>>2)]; + atime = (seconds*1000) + (nanoseconds/(1000*1000)); + times += 16; + seconds = readI53FromI64(times); + nanoseconds = HEAP32[(((times)+(8))>>2)]; + mtime = (seconds*1000) + (nanoseconds/(1000*1000)); + } + FS.utime(path, atime, mtime); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e instanceof FS.ErrnoError)) throw e; + return -e.errno; + } + } + + var nowIsMonotonic = true;; + function __emscripten_get_now_is_monotonic() { + return nowIsMonotonic; + } + + + function __isLeapYear(year) { + return year%4 === 0 && (year%100 !== 0 || year%400 === 0); + } + + var __MONTH_DAYS_LEAP_CUMULATIVE = [0,31,60,91,121,152,182,213,244,274,305,335]; + + var __MONTH_DAYS_REGULAR_CUMULATIVE = [0,31,59,90,120,151,181,212,243,273,304,334]; + function __yday_from_date(date) { + var isLeapYear = __isLeapYear(date.getFullYear()); + var monthDaysCumulative = (isLeapYear ? __MONTH_DAYS_LEAP_CUMULATIVE : __MONTH_DAYS_REGULAR_CUMULATIVE); + var yday = monthDaysCumulative[date.getMonth()] + date.getDate() - 1; + + return yday; + } + function __localtime_js(time, tmPtr) { + var date = new Date(readI53FromI64(time)*1000); + HEAP32[((tmPtr)>>2)] = date.getSeconds(); + HEAP32[(((tmPtr)+(4))>>2)] = date.getMinutes(); + HEAP32[(((tmPtr)+(8))>>2)] = date.getHours(); + HEAP32[(((tmPtr)+(12))>>2)] = date.getDate(); + HEAP32[(((tmPtr)+(16))>>2)] = date.getMonth(); + HEAP32[(((tmPtr)+(20))>>2)] = date.getFullYear()-1900; + HEAP32[(((tmPtr)+(24))>>2)] = date.getDay(); + + var yday = __yday_from_date(date)|0; + HEAP32[(((tmPtr)+(28))>>2)] = yday; + HEAP32[(((tmPtr)+(36))>>2)] = -(date.getTimezoneOffset() * 60); + + + var start = new Date(date.getFullYear(), 0, 1); + var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset(); + var winterOffset = start.getTimezoneOffset(); + var dst = (summerOffset != winterOffset && date.getTimezoneOffset() == Math.min(winterOffset, summerOffset))|0; + HEAP32[(((tmPtr)+(32))>>2)] = dst; + } + + + + function __mmap_js(len, prot, flags, fd, off, allocated, addr) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + var res = FS.mmap(stream, len, off, prot, flags); + var ptr = res.ptr; + HEAP32[((allocated)>>2)] = res.allocated; + HEAPU32[((addr)>>2)] = ptr; + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e instanceof FS.ErrnoError)) throw e; + return -e.errno; + } + } + + + + function __munmap_js(addr, len, prot, flags, fd, offset) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + if (prot & 2) { + SYSCALLS.doMsync(addr, stream, len, flags, offset); + } + FS.munmap(stream); + + } catch (e) { + if (typeof FS == 'undefined' || !(e instanceof FS.ErrnoError)) throw e; + return -e.errno; + } + } + + function allocateUTF8(str) { + var size = lengthBytesUTF8(str) + 1; + var ret = _malloc(size); + if (ret) stringToUTF8Array(str, HEAP8, ret, size); + return ret; + } + function __tzset_js(timezone, daylight, tzname) { + + var currentYear = new Date().getFullYear(); + var winter = new Date(currentYear, 0, 1); + var summer = new Date(currentYear, 6, 1); + var winterOffset = winter.getTimezoneOffset(); + var summerOffset = summer.getTimezoneOffset(); + + + + + var stdTimezoneOffset = Math.max(winterOffset, summerOffset); + + + + + + + HEAPU32[((timezone)>>2)] = stdTimezoneOffset * 60; + + HEAP32[((daylight)>>2)] = Number(winterOffset != summerOffset); + + function extractZone(date) { + var match = date.toTimeString().match(/\(([A-Za-z ]+)\)$/); + return match ? match[1] : "GMT"; + }; + var winterName = extractZone(winter); + var summerName = extractZone(summer); + var winterNamePtr = allocateUTF8(winterName); + var summerNamePtr = allocateUTF8(summerName); + if (summerOffset < winterOffset) { + + HEAPU32[((tzname)>>2)] = winterNamePtr; + HEAPU32[(((tzname)+(4))>>2)] = summerNamePtr; + } else { + HEAPU32[((tzname)>>2)] = summerNamePtr; + HEAPU32[(((tzname)+(4))>>2)] = winterNamePtr; + } + } + + function _emscripten_date_now() { + return Date.now(); + } + + var _emscripten_get_now;_emscripten_get_now = () => performance.now(); + ; + + function getHeapMax() { + + + + + return 2147483648; + } + + function emscripten_realloc_buffer(size) { + var b = wasmMemory.buffer; + try { + + wasmMemory.grow((size - b.byteLength + 65535) >>> 16); + updateMemoryViews(); + return 1 ; + } catch(e) { + } + + + } + function _emscripten_resize_heap(requestedSize) { + var oldSize = HEAPU8.length; + requestedSize = requestedSize >>> 0; + + + + + + + + + + + + + + + + + + + + + + + var maxHeapSize = getHeapMax(); + if (requestedSize > maxHeapSize) { + return false; + } + + let alignUp = (x, multiple) => x + (multiple - x % multiple) % multiple; + + + + + for (var cutDown = 1; cutDown <= 4; cutDown *= 2) { + var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown); + + overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296 ); + + var newSize = Math.min(maxHeapSize, alignUp(Math.max(requestedSize, overGrownHeapSize), 65536)); + + var replacement = emscripten_realloc_buffer(newSize); + if (replacement) { + + return true; + } + } + return false; + } + + var ENV = {}; + + function getExecutableName() { + return thisProgram || './this.program'; + } + function getEnvStrings() { + if (!getEnvStrings.strings) { + + + var lang = ((typeof navigator == 'object' && navigator.languages && navigator.languages[0]) || 'C').replace('-', '_') + '.UTF-8'; + var env = { + 'USER': 'web_user', + 'LOGNAME': 'web_user', + 'PATH': '/', + 'PWD': '/', + 'HOME': '/home/web_user', + 'LANG': lang, + '_': getExecutableName() + }; + + for (var x in ENV) { + + + + if (ENV[x] === undefined) delete env[x]; + else env[x] = ENV[x]; + } + var strings = []; + for (var x in env) { + strings.push(x + '=' + env[x]); + } + getEnvStrings.strings = strings; + } + return getEnvStrings.strings; + } + + + function writeAsciiToMemory(str, buffer, dontAddNull) { + for (var i = 0; i < str.length; ++i) { + HEAP8[((buffer++)>>0)] = str.charCodeAt(i); + } + + if (!dontAddNull) HEAP8[((buffer)>>0)] = 0; + } + + function _environ_get(__environ, environ_buf) { + var bufSize = 0; + getEnvStrings().forEach(function(string, i) { + var ptr = environ_buf + bufSize; + HEAPU32[(((__environ)+(i*4))>>2)] = ptr; + writeAsciiToMemory(string, ptr); + bufSize += string.length + 1; + }); + return 0; + } + + + function _environ_sizes_get(penviron_count, penviron_buf_size) { + var strings = getEnvStrings(); + HEAPU32[((penviron_count)>>2)] = strings.length; + var bufSize = 0; + strings.forEach(function(string) { + bufSize += string.length + 1; + }); + HEAPU32[((penviron_buf_size)>>2)] = bufSize; + return 0; + } + + function _fd_close(fd) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + FS.close(stream); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e instanceof FS.ErrnoError)) throw e; + return e.errno; + } + } + + function _fd_fdstat_get(fd, pbuf) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + + + var type = stream.tty ? 2 : + FS.isDir(stream.mode) ? 3 : + FS.isLink(stream.mode) ? 7 : + 4; + HEAP8[((pbuf)>>0)] = type; + + + + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e instanceof FS.ErrnoError)) throw e; + return e.errno; + } + } + + + function doReadv(stream, iov, iovcnt, offset) { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAPU32[((iov)>>2)]; + var len = HEAPU32[(((iov)+(4))>>2)]; + iov += 8; + var curr = FS.read(stream, HEAP8,ptr, len, offset); + if (curr < 0) return -1; + ret += curr; + if (curr < len) break; + if (typeof offset !== 'undefined') { + offset += curr; + } + } + return ret; + } + + function _fd_read(fd, iov, iovcnt, pnum) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + var num = doReadv(stream, iov, iovcnt); + HEAPU32[((pnum)>>2)] = num; + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e instanceof FS.ErrnoError)) throw e; + return e.errno; + } + } + + + + + + function _fd_seek(fd, offset, whence, newOffset) { + try { + + offset = bigintToI53Checked(offset); if (isNaN(offset)) return 61; + var stream = SYSCALLS.getStreamFromFD(fd); + FS.llseek(stream, offset, whence); + (tempI64 = [stream.position>>>0,(tempDouble=stream.position,(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math.min((+(Math.floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[((newOffset)>>2)] = tempI64[0],HEAP32[(((newOffset)+(4))>>2)] = tempI64[1]); + if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e instanceof FS.ErrnoError)) throw e; + return e.errno; + } + } + + function _fd_sync(fd) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + if (stream.stream_ops && stream.stream_ops.fsync) { + return stream.stream_ops.fsync(stream); + } + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e instanceof FS.ErrnoError)) throw e; + return e.errno; + } + } + + + function doWritev(stream, iov, iovcnt, offset) { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAPU32[((iov)>>2)]; + var len = HEAPU32[(((iov)+(4))>>2)]; + iov += 8; + var curr = FS.write(stream, HEAP8,ptr, len, offset); + if (curr < 0) return -1; + ret += curr; + if (typeof offset !== 'undefined') { + offset += curr; + } + } + return ret; + } + + function _fd_write(fd, iov, iovcnt, pnum) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + var num = doWritev(stream, iov, iovcnt); + HEAPU32[((pnum)>>2)] = num; + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e instanceof FS.ErrnoError)) throw e; + return e.errno; + } + } + + var FSNode = function(parent, name, mode, rdev) { + if (!parent) { + parent = this; + } + this.parent = parent; + this.mount = parent.mount; + this.mounted = null; + this.id = FS.nextInode++; + this.name = name; + this.mode = mode; + this.node_ops = {}; + this.stream_ops = {}; + this.rdev = rdev; + }; + var readMode = 292 | 73; + var writeMode = 146; + Object.defineProperties(FSNode.prototype, { + read: { + get: function() { + return (this.mode & readMode) === readMode; + }, + set: function(val) { + val ? this.mode |= readMode : this.mode &= ~readMode; + } + }, + write: { + get: function() { + return (this.mode & writeMode) === writeMode; + }, + set: function(val) { + val ? this.mode |= writeMode : this.mode &= ~writeMode; + } + }, + isFolder: { + get: function() { + return FS.isDir(this.mode); + } + }, + isDevice: { + get: function() { + return FS.isChrdev(this.mode); + } + } + }); + FS.FSNode = FSNode; + FS.staticInit();; +var ASSERTIONS = false; + +var asmLibraryArg = { + "__syscall_chmod": ___syscall_chmod, + "__syscall_faccessat": ___syscall_faccessat, + "__syscall_fchmod": ___syscall_fchmod, + "__syscall_fchown32": ___syscall_fchown32, + "__syscall_fcntl64": ___syscall_fcntl64, + "__syscall_fstat64": ___syscall_fstat64, + "__syscall_ftruncate64": ___syscall_ftruncate64, + "__syscall_getcwd": ___syscall_getcwd, + "__syscall_ioctl": ___syscall_ioctl, + "__syscall_lstat64": ___syscall_lstat64, + "__syscall_mkdirat": ___syscall_mkdirat, + "__syscall_newfstatat": ___syscall_newfstatat, + "__syscall_openat": ___syscall_openat, + "__syscall_readlinkat": ___syscall_readlinkat, + "__syscall_rmdir": ___syscall_rmdir, + "__syscall_stat64": ___syscall_stat64, + "__syscall_unlinkat": ___syscall_unlinkat, + "__syscall_utimensat": ___syscall_utimensat, + "_emscripten_get_now_is_monotonic": __emscripten_get_now_is_monotonic, + "_localtime_js": __localtime_js, + "_mmap_js": __mmap_js, + "_munmap_js": __munmap_js, + "_tzset_js": __tzset_js, + "emscripten_date_now": _emscripten_date_now, + "emscripten_get_now": _emscripten_get_now, + "emscripten_resize_heap": _emscripten_resize_heap, + "environ_get": _environ_get, + "environ_sizes_get": _environ_sizes_get, + "fd_close": _fd_close, + "fd_fdstat_get": _fd_fdstat_get, + "fd_read": _fd_read, + "fd_seek": _fd_seek, + "fd_sync": _fd_sync, + "fd_write": _fd_write, + "memory": wasmMemory +}; +var asm = createWasm(); + +var ___wasm_call_ctors = Module["___wasm_call_ctors"] = function() { + return (___wasm_call_ctors = Module["___wasm_call_ctors"] = Module["asm"]["__wasm_call_ctors"]).apply(null, arguments); +}; + + +var _sqlite3_status64 = Module["_sqlite3_status64"] = function() { + return (_sqlite3_status64 = Module["_sqlite3_status64"] = Module["asm"]["sqlite3_status64"]).apply(null, arguments); +}; + + +var _sqlite3_status = Module["_sqlite3_status"] = function() { + return (_sqlite3_status = Module["_sqlite3_status"] = Module["asm"]["sqlite3_status"]).apply(null, arguments); +}; + + +var _sqlite3_db_status = Module["_sqlite3_db_status"] = function() { + return (_sqlite3_db_status = Module["_sqlite3_db_status"] = Module["asm"]["sqlite3_db_status"]).apply(null, arguments); +}; + + +var _sqlite3_msize = Module["_sqlite3_msize"] = function() { + return (_sqlite3_msize = Module["_sqlite3_msize"] = Module["asm"]["sqlite3_msize"]).apply(null, arguments); +}; + + +var _sqlite3_vfs_find = Module["_sqlite3_vfs_find"] = function() { + return (_sqlite3_vfs_find = Module["_sqlite3_vfs_find"] = Module["asm"]["sqlite3_vfs_find"]).apply(null, arguments); +}; + + +var _sqlite3_initialize = Module["_sqlite3_initialize"] = function() { + return (_sqlite3_initialize = Module["_sqlite3_initialize"] = Module["asm"]["sqlite3_initialize"]).apply(null, arguments); +}; + + +var _sqlite3_malloc = Module["_sqlite3_malloc"] = function() { + return (_sqlite3_malloc = Module["_sqlite3_malloc"] = Module["asm"]["sqlite3_malloc"]).apply(null, arguments); +}; + + +var _sqlite3_free = Module["_sqlite3_free"] = function() { + return (_sqlite3_free = Module["_sqlite3_free"] = Module["asm"]["sqlite3_free"]).apply(null, arguments); +}; + + +var _sqlite3_vfs_register = Module["_sqlite3_vfs_register"] = function() { + return (_sqlite3_vfs_register = Module["_sqlite3_vfs_register"] = Module["asm"]["sqlite3_vfs_register"]).apply(null, arguments); +}; + + +var _sqlite3_vfs_unregister = Module["_sqlite3_vfs_unregister"] = function() { + return (_sqlite3_vfs_unregister = Module["_sqlite3_vfs_unregister"] = Module["asm"]["sqlite3_vfs_unregister"]).apply(null, arguments); +}; + + +var _sqlite3_malloc64 = Module["_sqlite3_malloc64"] = function() { + return (_sqlite3_malloc64 = Module["_sqlite3_malloc64"] = Module["asm"]["sqlite3_malloc64"]).apply(null, arguments); +}; + + +var _sqlite3_realloc = Module["_sqlite3_realloc"] = function() { + return (_sqlite3_realloc = Module["_sqlite3_realloc"] = Module["asm"]["sqlite3_realloc"]).apply(null, arguments); +}; + + +var _sqlite3_realloc64 = Module["_sqlite3_realloc64"] = function() { + return (_sqlite3_realloc64 = Module["_sqlite3_realloc64"] = Module["asm"]["sqlite3_realloc64"]).apply(null, arguments); +}; + + +var _sqlite3_value_text = Module["_sqlite3_value_text"] = function() { + return (_sqlite3_value_text = Module["_sqlite3_value_text"] = Module["asm"]["sqlite3_value_text"]).apply(null, arguments); +}; + + +var _sqlite3_randomness = Module["_sqlite3_randomness"] = function() { + return (_sqlite3_randomness = Module["_sqlite3_randomness"] = Module["asm"]["sqlite3_randomness"]).apply(null, arguments); +}; + + +var _sqlite3_stricmp = Module["_sqlite3_stricmp"] = function() { + return (_sqlite3_stricmp = Module["_sqlite3_stricmp"] = Module["asm"]["sqlite3_stricmp"]).apply(null, arguments); +}; + + +var _sqlite3_strnicmp = Module["_sqlite3_strnicmp"] = function() { + return (_sqlite3_strnicmp = Module["_sqlite3_strnicmp"] = Module["asm"]["sqlite3_strnicmp"]).apply(null, arguments); +}; + + +var _sqlite3_uri_parameter = Module["_sqlite3_uri_parameter"] = function() { + return (_sqlite3_uri_parameter = Module["_sqlite3_uri_parameter"] = Module["asm"]["sqlite3_uri_parameter"]).apply(null, arguments); +}; + + +var ___errno_location = Module["___errno_location"] = function() { + return (___errno_location = Module["___errno_location"] = Module["asm"]["__errno_location"]).apply(null, arguments); +}; + + +var _sqlite3_uri_boolean = Module["_sqlite3_uri_boolean"] = function() { + return (_sqlite3_uri_boolean = Module["_sqlite3_uri_boolean"] = Module["asm"]["sqlite3_uri_boolean"]).apply(null, arguments); +}; + + +var _sqlite3_serialize = Module["_sqlite3_serialize"] = function() { + return (_sqlite3_serialize = Module["_sqlite3_serialize"] = Module["asm"]["sqlite3_serialize"]).apply(null, arguments); +}; + + +var _sqlite3_prepare_v2 = Module["_sqlite3_prepare_v2"] = function() { + return (_sqlite3_prepare_v2 = Module["_sqlite3_prepare_v2"] = Module["asm"]["sqlite3_prepare_v2"]).apply(null, arguments); +}; + + +var _sqlite3_step = Module["_sqlite3_step"] = function() { + return (_sqlite3_step = Module["_sqlite3_step"] = Module["asm"]["sqlite3_step"]).apply(null, arguments); +}; + + +var _sqlite3_column_int64 = Module["_sqlite3_column_int64"] = function() { + return (_sqlite3_column_int64 = Module["_sqlite3_column_int64"] = Module["asm"]["sqlite3_column_int64"]).apply(null, arguments); +}; + + +var _sqlite3_column_int = Module["_sqlite3_column_int"] = function() { + return (_sqlite3_column_int = Module["_sqlite3_column_int"] = Module["asm"]["sqlite3_column_int"]).apply(null, arguments); +}; + + +var _sqlite3_finalize = Module["_sqlite3_finalize"] = function() { + return (_sqlite3_finalize = Module["_sqlite3_finalize"] = Module["asm"]["sqlite3_finalize"]).apply(null, arguments); +}; + + +var _sqlite3_file_control = Module["_sqlite3_file_control"] = function() { + return (_sqlite3_file_control = Module["_sqlite3_file_control"] = Module["asm"]["sqlite3_file_control"]).apply(null, arguments); +}; + + +var _sqlite3_reset = Module["_sqlite3_reset"] = function() { + return (_sqlite3_reset = Module["_sqlite3_reset"] = Module["asm"]["sqlite3_reset"]).apply(null, arguments); +}; + + +var _sqlite3_deserialize = Module["_sqlite3_deserialize"] = function() { + return (_sqlite3_deserialize = Module["_sqlite3_deserialize"] = Module["asm"]["sqlite3_deserialize"]).apply(null, arguments); +}; + + +var _sqlite3_clear_bindings = Module["_sqlite3_clear_bindings"] = function() { + return (_sqlite3_clear_bindings = Module["_sqlite3_clear_bindings"] = Module["asm"]["sqlite3_clear_bindings"]).apply(null, arguments); +}; + + +var _sqlite3_value_blob = Module["_sqlite3_value_blob"] = function() { + return (_sqlite3_value_blob = Module["_sqlite3_value_blob"] = Module["asm"]["sqlite3_value_blob"]).apply(null, arguments); +}; + + +var _sqlite3_value_bytes = Module["_sqlite3_value_bytes"] = function() { + return (_sqlite3_value_bytes = Module["_sqlite3_value_bytes"] = Module["asm"]["sqlite3_value_bytes"]).apply(null, arguments); +}; + + +var _sqlite3_value_double = Module["_sqlite3_value_double"] = function() { + return (_sqlite3_value_double = Module["_sqlite3_value_double"] = Module["asm"]["sqlite3_value_double"]).apply(null, arguments); +}; + + +var _sqlite3_value_int = Module["_sqlite3_value_int"] = function() { + return (_sqlite3_value_int = Module["_sqlite3_value_int"] = Module["asm"]["sqlite3_value_int"]).apply(null, arguments); +}; + + +var _sqlite3_value_int64 = Module["_sqlite3_value_int64"] = function() { + return (_sqlite3_value_int64 = Module["_sqlite3_value_int64"] = Module["asm"]["sqlite3_value_int64"]).apply(null, arguments); +}; + + +var _sqlite3_value_subtype = Module["_sqlite3_value_subtype"] = function() { + return (_sqlite3_value_subtype = Module["_sqlite3_value_subtype"] = Module["asm"]["sqlite3_value_subtype"]).apply(null, arguments); +}; + + +var _sqlite3_value_pointer = Module["_sqlite3_value_pointer"] = function() { + return (_sqlite3_value_pointer = Module["_sqlite3_value_pointer"] = Module["asm"]["sqlite3_value_pointer"]).apply(null, arguments); +}; + + +var _sqlite3_value_type = Module["_sqlite3_value_type"] = function() { + return (_sqlite3_value_type = Module["_sqlite3_value_type"] = Module["asm"]["sqlite3_value_type"]).apply(null, arguments); +}; + + +var _sqlite3_value_nochange = Module["_sqlite3_value_nochange"] = function() { + return (_sqlite3_value_nochange = Module["_sqlite3_value_nochange"] = Module["asm"]["sqlite3_value_nochange"]).apply(null, arguments); +}; + + +var _sqlite3_value_frombind = Module["_sqlite3_value_frombind"] = function() { + return (_sqlite3_value_frombind = Module["_sqlite3_value_frombind"] = Module["asm"]["sqlite3_value_frombind"]).apply(null, arguments); +}; + + +var _sqlite3_value_dup = Module["_sqlite3_value_dup"] = function() { + return (_sqlite3_value_dup = Module["_sqlite3_value_dup"] = Module["asm"]["sqlite3_value_dup"]).apply(null, arguments); +}; + + +var _sqlite3_value_free = Module["_sqlite3_value_free"] = function() { + return (_sqlite3_value_free = Module["_sqlite3_value_free"] = Module["asm"]["sqlite3_value_free"]).apply(null, arguments); +}; + + +var _sqlite3_result_blob = Module["_sqlite3_result_blob"] = function() { + return (_sqlite3_result_blob = Module["_sqlite3_result_blob"] = Module["asm"]["sqlite3_result_blob"]).apply(null, arguments); +}; + + +var _sqlite3_result_error_toobig = Module["_sqlite3_result_error_toobig"] = function() { + return (_sqlite3_result_error_toobig = Module["_sqlite3_result_error_toobig"] = Module["asm"]["sqlite3_result_error_toobig"]).apply(null, arguments); +}; + + +var _sqlite3_result_error_nomem = Module["_sqlite3_result_error_nomem"] = function() { + return (_sqlite3_result_error_nomem = Module["_sqlite3_result_error_nomem"] = Module["asm"]["sqlite3_result_error_nomem"]).apply(null, arguments); +}; + + +var _sqlite3_result_double = Module["_sqlite3_result_double"] = function() { + return (_sqlite3_result_double = Module["_sqlite3_result_double"] = Module["asm"]["sqlite3_result_double"]).apply(null, arguments); +}; + + +var _sqlite3_result_error = Module["_sqlite3_result_error"] = function() { + return (_sqlite3_result_error = Module["_sqlite3_result_error"] = Module["asm"]["sqlite3_result_error"]).apply(null, arguments); +}; + + +var _sqlite3_result_int = Module["_sqlite3_result_int"] = function() { + return (_sqlite3_result_int = Module["_sqlite3_result_int"] = Module["asm"]["sqlite3_result_int"]).apply(null, arguments); +}; + + +var _sqlite3_result_int64 = Module["_sqlite3_result_int64"] = function() { + return (_sqlite3_result_int64 = Module["_sqlite3_result_int64"] = Module["asm"]["sqlite3_result_int64"]).apply(null, arguments); +}; + + +var _sqlite3_result_null = Module["_sqlite3_result_null"] = function() { + return (_sqlite3_result_null = Module["_sqlite3_result_null"] = Module["asm"]["sqlite3_result_null"]).apply(null, arguments); +}; + + +var _sqlite3_result_pointer = Module["_sqlite3_result_pointer"] = function() { + return (_sqlite3_result_pointer = Module["_sqlite3_result_pointer"] = Module["asm"]["sqlite3_result_pointer"]).apply(null, arguments); +}; + + +var _sqlite3_result_subtype = Module["_sqlite3_result_subtype"] = function() { + return (_sqlite3_result_subtype = Module["_sqlite3_result_subtype"] = Module["asm"]["sqlite3_result_subtype"]).apply(null, arguments); +}; + + +var _sqlite3_result_text = Module["_sqlite3_result_text"] = function() { + return (_sqlite3_result_text = Module["_sqlite3_result_text"] = Module["asm"]["sqlite3_result_text"]).apply(null, arguments); +}; + + +var _sqlite3_result_zeroblob = Module["_sqlite3_result_zeroblob"] = function() { + return (_sqlite3_result_zeroblob = Module["_sqlite3_result_zeroblob"] = Module["asm"]["sqlite3_result_zeroblob"]).apply(null, arguments); +}; + + +var _sqlite3_result_zeroblob64 = Module["_sqlite3_result_zeroblob64"] = function() { + return (_sqlite3_result_zeroblob64 = Module["_sqlite3_result_zeroblob64"] = Module["asm"]["sqlite3_result_zeroblob64"]).apply(null, arguments); +}; + + +var _sqlite3_result_error_code = Module["_sqlite3_result_error_code"] = function() { + return (_sqlite3_result_error_code = Module["_sqlite3_result_error_code"] = Module["asm"]["sqlite3_result_error_code"]).apply(null, arguments); +}; + + +var _sqlite3_user_data = Module["_sqlite3_user_data"] = function() { + return (_sqlite3_user_data = Module["_sqlite3_user_data"] = Module["asm"]["sqlite3_user_data"]).apply(null, arguments); +}; + + +var _sqlite3_context_db_handle = Module["_sqlite3_context_db_handle"] = function() { + return (_sqlite3_context_db_handle = Module["_sqlite3_context_db_handle"] = Module["asm"]["sqlite3_context_db_handle"]).apply(null, arguments); +}; + + +var _sqlite3_vtab_nochange = Module["_sqlite3_vtab_nochange"] = function() { + return (_sqlite3_vtab_nochange = Module["_sqlite3_vtab_nochange"] = Module["asm"]["sqlite3_vtab_nochange"]).apply(null, arguments); +}; + + +var _sqlite3_vtab_in_first = Module["_sqlite3_vtab_in_first"] = function() { + return (_sqlite3_vtab_in_first = Module["_sqlite3_vtab_in_first"] = Module["asm"]["sqlite3_vtab_in_first"]).apply(null, arguments); +}; + + +var _sqlite3_vtab_in_next = Module["_sqlite3_vtab_in_next"] = function() { + return (_sqlite3_vtab_in_next = Module["_sqlite3_vtab_in_next"] = Module["asm"]["sqlite3_vtab_in_next"]).apply(null, arguments); +}; + + +var _sqlite3_aggregate_context = Module["_sqlite3_aggregate_context"] = function() { + return (_sqlite3_aggregate_context = Module["_sqlite3_aggregate_context"] = Module["asm"]["sqlite3_aggregate_context"]).apply(null, arguments); +}; + + +var _sqlite3_get_auxdata = Module["_sqlite3_get_auxdata"] = function() { + return (_sqlite3_get_auxdata = Module["_sqlite3_get_auxdata"] = Module["asm"]["sqlite3_get_auxdata"]).apply(null, arguments); +}; + + +var _sqlite3_set_auxdata = Module["_sqlite3_set_auxdata"] = function() { + return (_sqlite3_set_auxdata = Module["_sqlite3_set_auxdata"] = Module["asm"]["sqlite3_set_auxdata"]).apply(null, arguments); +}; + + +var _sqlite3_column_count = Module["_sqlite3_column_count"] = function() { + return (_sqlite3_column_count = Module["_sqlite3_column_count"] = Module["asm"]["sqlite3_column_count"]).apply(null, arguments); +}; + + +var _sqlite3_data_count = Module["_sqlite3_data_count"] = function() { + return (_sqlite3_data_count = Module["_sqlite3_data_count"] = Module["asm"]["sqlite3_data_count"]).apply(null, arguments); +}; + + +var _sqlite3_column_blob = Module["_sqlite3_column_blob"] = function() { + return (_sqlite3_column_blob = Module["_sqlite3_column_blob"] = Module["asm"]["sqlite3_column_blob"]).apply(null, arguments); +}; + + +var _sqlite3_column_bytes = Module["_sqlite3_column_bytes"] = function() { + return (_sqlite3_column_bytes = Module["_sqlite3_column_bytes"] = Module["asm"]["sqlite3_column_bytes"]).apply(null, arguments); +}; + + +var _sqlite3_column_double = Module["_sqlite3_column_double"] = function() { + return (_sqlite3_column_double = Module["_sqlite3_column_double"] = Module["asm"]["sqlite3_column_double"]).apply(null, arguments); +}; + + +var _sqlite3_column_text = Module["_sqlite3_column_text"] = function() { + return (_sqlite3_column_text = Module["_sqlite3_column_text"] = Module["asm"]["sqlite3_column_text"]).apply(null, arguments); +}; + + +var _sqlite3_column_value = Module["_sqlite3_column_value"] = function() { + return (_sqlite3_column_value = Module["_sqlite3_column_value"] = Module["asm"]["sqlite3_column_value"]).apply(null, arguments); +}; + + +var _sqlite3_column_type = Module["_sqlite3_column_type"] = function() { + return (_sqlite3_column_type = Module["_sqlite3_column_type"] = Module["asm"]["sqlite3_column_type"]).apply(null, arguments); +}; + + +var _sqlite3_column_name = Module["_sqlite3_column_name"] = function() { + return (_sqlite3_column_name = Module["_sqlite3_column_name"] = Module["asm"]["sqlite3_column_name"]).apply(null, arguments); +}; + + +var _sqlite3_bind_blob = Module["_sqlite3_bind_blob"] = function() { + return (_sqlite3_bind_blob = Module["_sqlite3_bind_blob"] = Module["asm"]["sqlite3_bind_blob"]).apply(null, arguments); +}; + + +var _sqlite3_bind_double = Module["_sqlite3_bind_double"] = function() { + return (_sqlite3_bind_double = Module["_sqlite3_bind_double"] = Module["asm"]["sqlite3_bind_double"]).apply(null, arguments); +}; + + +var _sqlite3_bind_int = Module["_sqlite3_bind_int"] = function() { + return (_sqlite3_bind_int = Module["_sqlite3_bind_int"] = Module["asm"]["sqlite3_bind_int"]).apply(null, arguments); +}; + + +var _sqlite3_bind_int64 = Module["_sqlite3_bind_int64"] = function() { + return (_sqlite3_bind_int64 = Module["_sqlite3_bind_int64"] = Module["asm"]["sqlite3_bind_int64"]).apply(null, arguments); +}; + + +var _sqlite3_bind_null = Module["_sqlite3_bind_null"] = function() { + return (_sqlite3_bind_null = Module["_sqlite3_bind_null"] = Module["asm"]["sqlite3_bind_null"]).apply(null, arguments); +}; + + +var _sqlite3_bind_pointer = Module["_sqlite3_bind_pointer"] = function() { + return (_sqlite3_bind_pointer = Module["_sqlite3_bind_pointer"] = Module["asm"]["sqlite3_bind_pointer"]).apply(null, arguments); +}; + + +var _sqlite3_bind_text = Module["_sqlite3_bind_text"] = function() { + return (_sqlite3_bind_text = Module["_sqlite3_bind_text"] = Module["asm"]["sqlite3_bind_text"]).apply(null, arguments); +}; + + +var _sqlite3_bind_parameter_count = Module["_sqlite3_bind_parameter_count"] = function() { + return (_sqlite3_bind_parameter_count = Module["_sqlite3_bind_parameter_count"] = Module["asm"]["sqlite3_bind_parameter_count"]).apply(null, arguments); +}; + + +var _sqlite3_bind_parameter_index = Module["_sqlite3_bind_parameter_index"] = function() { + return (_sqlite3_bind_parameter_index = Module["_sqlite3_bind_parameter_index"] = Module["asm"]["sqlite3_bind_parameter_index"]).apply(null, arguments); +}; + + +var _sqlite3_db_handle = Module["_sqlite3_db_handle"] = function() { + return (_sqlite3_db_handle = Module["_sqlite3_db_handle"] = Module["asm"]["sqlite3_db_handle"]).apply(null, arguments); +}; + + +var _sqlite3_stmt_readonly = Module["_sqlite3_stmt_readonly"] = function() { + return (_sqlite3_stmt_readonly = Module["_sqlite3_stmt_readonly"] = Module["asm"]["sqlite3_stmt_readonly"]).apply(null, arguments); +}; + + +var _sqlite3_stmt_isexplain = Module["_sqlite3_stmt_isexplain"] = function() { + return (_sqlite3_stmt_isexplain = Module["_sqlite3_stmt_isexplain"] = Module["asm"]["sqlite3_stmt_isexplain"]).apply(null, arguments); +}; + + +var _sqlite3_stmt_status = Module["_sqlite3_stmt_status"] = function() { + return (_sqlite3_stmt_status = Module["_sqlite3_stmt_status"] = Module["asm"]["sqlite3_stmt_status"]).apply(null, arguments); +}; + + +var _sqlite3_sql = Module["_sqlite3_sql"] = function() { + return (_sqlite3_sql = Module["_sqlite3_sql"] = Module["asm"]["sqlite3_sql"]).apply(null, arguments); +}; + + +var _sqlite3_expanded_sql = Module["_sqlite3_expanded_sql"] = function() { + return (_sqlite3_expanded_sql = Module["_sqlite3_expanded_sql"] = Module["asm"]["sqlite3_expanded_sql"]).apply(null, arguments); +}; + + +var _sqlite3_preupdate_old = Module["_sqlite3_preupdate_old"] = function() { + return (_sqlite3_preupdate_old = Module["_sqlite3_preupdate_old"] = Module["asm"]["sqlite3_preupdate_old"]).apply(null, arguments); +}; + + +var _sqlite3_preupdate_count = Module["_sqlite3_preupdate_count"] = function() { + return (_sqlite3_preupdate_count = Module["_sqlite3_preupdate_count"] = Module["asm"]["sqlite3_preupdate_count"]).apply(null, arguments); +}; + + +var _sqlite3_preupdate_depth = Module["_sqlite3_preupdate_depth"] = function() { + return (_sqlite3_preupdate_depth = Module["_sqlite3_preupdate_depth"] = Module["asm"]["sqlite3_preupdate_depth"]).apply(null, arguments); +}; + + +var _sqlite3_preupdate_blobwrite = Module["_sqlite3_preupdate_blobwrite"] = function() { + return (_sqlite3_preupdate_blobwrite = Module["_sqlite3_preupdate_blobwrite"] = Module["asm"]["sqlite3_preupdate_blobwrite"]).apply(null, arguments); +}; + + +var _sqlite3_preupdate_new = Module["_sqlite3_preupdate_new"] = function() { + return (_sqlite3_preupdate_new = Module["_sqlite3_preupdate_new"] = Module["asm"]["sqlite3_preupdate_new"]).apply(null, arguments); +}; + + +var _sqlite3_value_numeric_type = Module["_sqlite3_value_numeric_type"] = function() { + return (_sqlite3_value_numeric_type = Module["_sqlite3_value_numeric_type"] = Module["asm"]["sqlite3_value_numeric_type"]).apply(null, arguments); +}; + + +var _sqlite3_errmsg = Module["_sqlite3_errmsg"] = function() { + return (_sqlite3_errmsg = Module["_sqlite3_errmsg"] = Module["asm"]["sqlite3_errmsg"]).apply(null, arguments); +}; + + +var _sqlite3_set_authorizer = Module["_sqlite3_set_authorizer"] = function() { + return (_sqlite3_set_authorizer = Module["_sqlite3_set_authorizer"] = Module["asm"]["sqlite3_set_authorizer"]).apply(null, arguments); +}; + + +var _sqlite3_strglob = Module["_sqlite3_strglob"] = function() { + return (_sqlite3_strglob = Module["_sqlite3_strglob"] = Module["asm"]["sqlite3_strglob"]).apply(null, arguments); +}; + + +var _sqlite3_strlike = Module["_sqlite3_strlike"] = function() { + return (_sqlite3_strlike = Module["_sqlite3_strlike"] = Module["asm"]["sqlite3_strlike"]).apply(null, arguments); +}; + + +var _sqlite3_exec = Module["_sqlite3_exec"] = function() { + return (_sqlite3_exec = Module["_sqlite3_exec"] = Module["asm"]["sqlite3_exec"]).apply(null, arguments); +}; + + +var _sqlite3_auto_extension = Module["_sqlite3_auto_extension"] = function() { + return (_sqlite3_auto_extension = Module["_sqlite3_auto_extension"] = Module["asm"]["sqlite3_auto_extension"]).apply(null, arguments); +}; + + +var _sqlite3_cancel_auto_extension = Module["_sqlite3_cancel_auto_extension"] = function() { + return (_sqlite3_cancel_auto_extension = Module["_sqlite3_cancel_auto_extension"] = Module["asm"]["sqlite3_cancel_auto_extension"]).apply(null, arguments); +}; + + +var _sqlite3_reset_auto_extension = Module["_sqlite3_reset_auto_extension"] = function() { + return (_sqlite3_reset_auto_extension = Module["_sqlite3_reset_auto_extension"] = Module["asm"]["sqlite3_reset_auto_extension"]).apply(null, arguments); +}; + + +var _sqlite3_prepare_v3 = Module["_sqlite3_prepare_v3"] = function() { + return (_sqlite3_prepare_v3 = Module["_sqlite3_prepare_v3"] = Module["asm"]["sqlite3_prepare_v3"]).apply(null, arguments); +}; + + +var _sqlite3_create_module = Module["_sqlite3_create_module"] = function() { + return (_sqlite3_create_module = Module["_sqlite3_create_module"] = Module["asm"]["sqlite3_create_module"]).apply(null, arguments); +}; + + +var _sqlite3_create_module_v2 = Module["_sqlite3_create_module_v2"] = function() { + return (_sqlite3_create_module_v2 = Module["_sqlite3_create_module_v2"] = Module["asm"]["sqlite3_create_module_v2"]).apply(null, arguments); +}; + + +var _sqlite3_drop_modules = Module["_sqlite3_drop_modules"] = function() { + return (_sqlite3_drop_modules = Module["_sqlite3_drop_modules"] = Module["asm"]["sqlite3_drop_modules"]).apply(null, arguments); +}; + + +var _sqlite3_declare_vtab = Module["_sqlite3_declare_vtab"] = function() { + return (_sqlite3_declare_vtab = Module["_sqlite3_declare_vtab"] = Module["asm"]["sqlite3_declare_vtab"]).apply(null, arguments); +}; + + +var _sqlite3_vtab_on_conflict = Module["_sqlite3_vtab_on_conflict"] = function() { + return (_sqlite3_vtab_on_conflict = Module["_sqlite3_vtab_on_conflict"] = Module["asm"]["sqlite3_vtab_on_conflict"]).apply(null, arguments); +}; + + +var _sqlite3_vtab_collation = Module["_sqlite3_vtab_collation"] = function() { + return (_sqlite3_vtab_collation = Module["_sqlite3_vtab_collation"] = Module["asm"]["sqlite3_vtab_collation"]).apply(null, arguments); +}; + + +var _sqlite3_vtab_in = Module["_sqlite3_vtab_in"] = function() { + return (_sqlite3_vtab_in = Module["_sqlite3_vtab_in"] = Module["asm"]["sqlite3_vtab_in"]).apply(null, arguments); +}; + + +var _sqlite3_vtab_rhs_value = Module["_sqlite3_vtab_rhs_value"] = function() { + return (_sqlite3_vtab_rhs_value = Module["_sqlite3_vtab_rhs_value"] = Module["asm"]["sqlite3_vtab_rhs_value"]).apply(null, arguments); +}; + + +var _sqlite3_vtab_distinct = Module["_sqlite3_vtab_distinct"] = function() { + return (_sqlite3_vtab_distinct = Module["_sqlite3_vtab_distinct"] = Module["asm"]["sqlite3_vtab_distinct"]).apply(null, arguments); +}; + + +var _sqlite3_keyword_name = Module["_sqlite3_keyword_name"] = function() { + return (_sqlite3_keyword_name = Module["_sqlite3_keyword_name"] = Module["asm"]["sqlite3_keyword_name"]).apply(null, arguments); +}; + + +var _sqlite3_keyword_count = Module["_sqlite3_keyword_count"] = function() { + return (_sqlite3_keyword_count = Module["_sqlite3_keyword_count"] = Module["asm"]["sqlite3_keyword_count"]).apply(null, arguments); +}; + + +var _sqlite3_keyword_check = Module["_sqlite3_keyword_check"] = function() { + return (_sqlite3_keyword_check = Module["_sqlite3_keyword_check"] = Module["asm"]["sqlite3_keyword_check"]).apply(null, arguments); +}; + + +var _sqlite3_complete = Module["_sqlite3_complete"] = function() { + return (_sqlite3_complete = Module["_sqlite3_complete"] = Module["asm"]["sqlite3_complete"]).apply(null, arguments); +}; + + +var _sqlite3_libversion = Module["_sqlite3_libversion"] = function() { + return (_sqlite3_libversion = Module["_sqlite3_libversion"] = Module["asm"]["sqlite3_libversion"]).apply(null, arguments); +}; + + +var _sqlite3_libversion_number = Module["_sqlite3_libversion_number"] = function() { + return (_sqlite3_libversion_number = Module["_sqlite3_libversion_number"] = Module["asm"]["sqlite3_libversion_number"]).apply(null, arguments); +}; + + +var _sqlite3_shutdown = Module["_sqlite3_shutdown"] = function() { + return (_sqlite3_shutdown = Module["_sqlite3_shutdown"] = Module["asm"]["sqlite3_shutdown"]).apply(null, arguments); +}; + + +var _sqlite3_last_insert_rowid = Module["_sqlite3_last_insert_rowid"] = function() { + return (_sqlite3_last_insert_rowid = Module["_sqlite3_last_insert_rowid"] = Module["asm"]["sqlite3_last_insert_rowid"]).apply(null, arguments); +}; + + +var _sqlite3_set_last_insert_rowid = Module["_sqlite3_set_last_insert_rowid"] = function() { + return (_sqlite3_set_last_insert_rowid = Module["_sqlite3_set_last_insert_rowid"] = Module["asm"]["sqlite3_set_last_insert_rowid"]).apply(null, arguments); +}; + + +var _sqlite3_changes64 = Module["_sqlite3_changes64"] = function() { + return (_sqlite3_changes64 = Module["_sqlite3_changes64"] = Module["asm"]["sqlite3_changes64"]).apply(null, arguments); +}; + + +var _sqlite3_changes = Module["_sqlite3_changes"] = function() { + return (_sqlite3_changes = Module["_sqlite3_changes"] = Module["asm"]["sqlite3_changes"]).apply(null, arguments); +}; + + +var _sqlite3_total_changes64 = Module["_sqlite3_total_changes64"] = function() { + return (_sqlite3_total_changes64 = Module["_sqlite3_total_changes64"] = Module["asm"]["sqlite3_total_changes64"]).apply(null, arguments); +}; + + +var _sqlite3_total_changes = Module["_sqlite3_total_changes"] = function() { + return (_sqlite3_total_changes = Module["_sqlite3_total_changes"] = Module["asm"]["sqlite3_total_changes"]).apply(null, arguments); +}; + + +var _sqlite3_txn_state = Module["_sqlite3_txn_state"] = function() { + return (_sqlite3_txn_state = Module["_sqlite3_txn_state"] = Module["asm"]["sqlite3_txn_state"]).apply(null, arguments); +}; + + +var _sqlite3_close_v2 = Module["_sqlite3_close_v2"] = function() { + return (_sqlite3_close_v2 = Module["_sqlite3_close_v2"] = Module["asm"]["sqlite3_close_v2"]).apply(null, arguments); +}; + + +var _sqlite3_busy_handler = Module["_sqlite3_busy_handler"] = function() { + return (_sqlite3_busy_handler = Module["_sqlite3_busy_handler"] = Module["asm"]["sqlite3_busy_handler"]).apply(null, arguments); +}; + + +var _sqlite3_progress_handler = Module["_sqlite3_progress_handler"] = function() { + return (_sqlite3_progress_handler = Module["_sqlite3_progress_handler"] = Module["asm"]["sqlite3_progress_handler"]).apply(null, arguments); +}; + + +var _sqlite3_busy_timeout = Module["_sqlite3_busy_timeout"] = function() { + return (_sqlite3_busy_timeout = Module["_sqlite3_busy_timeout"] = Module["asm"]["sqlite3_busy_timeout"]).apply(null, arguments); +}; + + +var _sqlite3_create_function = Module["_sqlite3_create_function"] = function() { + return (_sqlite3_create_function = Module["_sqlite3_create_function"] = Module["asm"]["sqlite3_create_function"]).apply(null, arguments); +}; + + +var _sqlite3_create_function_v2 = Module["_sqlite3_create_function_v2"] = function() { + return (_sqlite3_create_function_v2 = Module["_sqlite3_create_function_v2"] = Module["asm"]["sqlite3_create_function_v2"]).apply(null, arguments); +}; + + +var _sqlite3_create_window_function = Module["_sqlite3_create_window_function"] = function() { + return (_sqlite3_create_window_function = Module["_sqlite3_create_window_function"] = Module["asm"]["sqlite3_create_window_function"]).apply(null, arguments); +}; + + +var _sqlite3_overload_function = Module["_sqlite3_overload_function"] = function() { + return (_sqlite3_overload_function = Module["_sqlite3_overload_function"] = Module["asm"]["sqlite3_overload_function"]).apply(null, arguments); +}; + + +var _sqlite3_trace_v2 = Module["_sqlite3_trace_v2"] = function() { + return (_sqlite3_trace_v2 = Module["_sqlite3_trace_v2"] = Module["asm"]["sqlite3_trace_v2"]).apply(null, arguments); +}; + + +var _sqlite3_commit_hook = Module["_sqlite3_commit_hook"] = function() { + return (_sqlite3_commit_hook = Module["_sqlite3_commit_hook"] = Module["asm"]["sqlite3_commit_hook"]).apply(null, arguments); +}; + + +var _sqlite3_update_hook = Module["_sqlite3_update_hook"] = function() { + return (_sqlite3_update_hook = Module["_sqlite3_update_hook"] = Module["asm"]["sqlite3_update_hook"]).apply(null, arguments); +}; + + +var _sqlite3_rollback_hook = Module["_sqlite3_rollback_hook"] = function() { + return (_sqlite3_rollback_hook = Module["_sqlite3_rollback_hook"] = Module["asm"]["sqlite3_rollback_hook"]).apply(null, arguments); +}; + + +var _sqlite3_preupdate_hook = Module["_sqlite3_preupdate_hook"] = function() { + return (_sqlite3_preupdate_hook = Module["_sqlite3_preupdate_hook"] = Module["asm"]["sqlite3_preupdate_hook"]).apply(null, arguments); +}; + + +var _sqlite3_error_offset = Module["_sqlite3_error_offset"] = function() { + return (_sqlite3_error_offset = Module["_sqlite3_error_offset"] = Module["asm"]["sqlite3_error_offset"]).apply(null, arguments); +}; + + +var _sqlite3_errcode = Module["_sqlite3_errcode"] = function() { + return (_sqlite3_errcode = Module["_sqlite3_errcode"] = Module["asm"]["sqlite3_errcode"]).apply(null, arguments); +}; + + +var _sqlite3_extended_errcode = Module["_sqlite3_extended_errcode"] = function() { + return (_sqlite3_extended_errcode = Module["_sqlite3_extended_errcode"] = Module["asm"]["sqlite3_extended_errcode"]).apply(null, arguments); +}; + + +var _sqlite3_errstr = Module["_sqlite3_errstr"] = function() { + return (_sqlite3_errstr = Module["_sqlite3_errstr"] = Module["asm"]["sqlite3_errstr"]).apply(null, arguments); +}; + + +var _sqlite3_limit = Module["_sqlite3_limit"] = function() { + return (_sqlite3_limit = Module["_sqlite3_limit"] = Module["asm"]["sqlite3_limit"]).apply(null, arguments); +}; + + +var _sqlite3_open = Module["_sqlite3_open"] = function() { + return (_sqlite3_open = Module["_sqlite3_open"] = Module["asm"]["sqlite3_open"]).apply(null, arguments); +}; + + +var _sqlite3_open_v2 = Module["_sqlite3_open_v2"] = function() { + return (_sqlite3_open_v2 = Module["_sqlite3_open_v2"] = Module["asm"]["sqlite3_open_v2"]).apply(null, arguments); +}; + + +var _sqlite3_create_collation = Module["_sqlite3_create_collation"] = function() { + return (_sqlite3_create_collation = Module["_sqlite3_create_collation"] = Module["asm"]["sqlite3_create_collation"]).apply(null, arguments); +}; + + +var _sqlite3_create_collation_v2 = Module["_sqlite3_create_collation_v2"] = function() { + return (_sqlite3_create_collation_v2 = Module["_sqlite3_create_collation_v2"] = Module["asm"]["sqlite3_create_collation_v2"]).apply(null, arguments); +}; + + +var _sqlite3_collation_needed = Module["_sqlite3_collation_needed"] = function() { + return (_sqlite3_collation_needed = Module["_sqlite3_collation_needed"] = Module["asm"]["sqlite3_collation_needed"]).apply(null, arguments); +}; + + +var _sqlite3_get_autocommit = Module["_sqlite3_get_autocommit"] = function() { + return (_sqlite3_get_autocommit = Module["_sqlite3_get_autocommit"] = Module["asm"]["sqlite3_get_autocommit"]).apply(null, arguments); +}; + + +var _sqlite3_table_column_metadata = Module["_sqlite3_table_column_metadata"] = function() { + return (_sqlite3_table_column_metadata = Module["_sqlite3_table_column_metadata"] = Module["asm"]["sqlite3_table_column_metadata"]).apply(null, arguments); +}; + + +var _sqlite3_extended_result_codes = Module["_sqlite3_extended_result_codes"] = function() { + return (_sqlite3_extended_result_codes = Module["_sqlite3_extended_result_codes"] = Module["asm"]["sqlite3_extended_result_codes"]).apply(null, arguments); +}; + + +var _sqlite3_uri_key = Module["_sqlite3_uri_key"] = function() { + return (_sqlite3_uri_key = Module["_sqlite3_uri_key"] = Module["asm"]["sqlite3_uri_key"]).apply(null, arguments); +}; + + +var _sqlite3_uri_int64 = Module["_sqlite3_uri_int64"] = function() { + return (_sqlite3_uri_int64 = Module["_sqlite3_uri_int64"] = Module["asm"]["sqlite3_uri_int64"]).apply(null, arguments); +}; + + +var _sqlite3_db_name = Module["_sqlite3_db_name"] = function() { + return (_sqlite3_db_name = Module["_sqlite3_db_name"] = Module["asm"]["sqlite3_db_name"]).apply(null, arguments); +}; + + +var _sqlite3_db_filename = Module["_sqlite3_db_filename"] = function() { + return (_sqlite3_db_filename = Module["_sqlite3_db_filename"] = Module["asm"]["sqlite3_db_filename"]).apply(null, arguments); +}; + + +var _sqlite3_compileoption_used = Module["_sqlite3_compileoption_used"] = function() { + return (_sqlite3_compileoption_used = Module["_sqlite3_compileoption_used"] = Module["asm"]["sqlite3_compileoption_used"]).apply(null, arguments); +}; + + +var _sqlite3_compileoption_get = Module["_sqlite3_compileoption_get"] = function() { + return (_sqlite3_compileoption_get = Module["_sqlite3_compileoption_get"] = Module["asm"]["sqlite3_compileoption_get"]).apply(null, arguments); +}; + + +var _sqlite3session_diff = Module["_sqlite3session_diff"] = function() { + return (_sqlite3session_diff = Module["_sqlite3session_diff"] = Module["asm"]["sqlite3session_diff"]).apply(null, arguments); +}; + + +var _sqlite3session_attach = Module["_sqlite3session_attach"] = function() { + return (_sqlite3session_attach = Module["_sqlite3session_attach"] = Module["asm"]["sqlite3session_attach"]).apply(null, arguments); +}; + + +var _sqlite3session_create = Module["_sqlite3session_create"] = function() { + return (_sqlite3session_create = Module["_sqlite3session_create"] = Module["asm"]["sqlite3session_create"]).apply(null, arguments); +}; + + +var _sqlite3session_delete = Module["_sqlite3session_delete"] = function() { + return (_sqlite3session_delete = Module["_sqlite3session_delete"] = Module["asm"]["sqlite3session_delete"]).apply(null, arguments); +}; + + +var _sqlite3session_table_filter = Module["_sqlite3session_table_filter"] = function() { + return (_sqlite3session_table_filter = Module["_sqlite3session_table_filter"] = Module["asm"]["sqlite3session_table_filter"]).apply(null, arguments); +}; + + +var _sqlite3session_changeset = Module["_sqlite3session_changeset"] = function() { + return (_sqlite3session_changeset = Module["_sqlite3session_changeset"] = Module["asm"]["sqlite3session_changeset"]).apply(null, arguments); +}; + + +var _sqlite3session_changeset_strm = Module["_sqlite3session_changeset_strm"] = function() { + return (_sqlite3session_changeset_strm = Module["_sqlite3session_changeset_strm"] = Module["asm"]["sqlite3session_changeset_strm"]).apply(null, arguments); +}; + + +var _sqlite3session_patchset_strm = Module["_sqlite3session_patchset_strm"] = function() { + return (_sqlite3session_patchset_strm = Module["_sqlite3session_patchset_strm"] = Module["asm"]["sqlite3session_patchset_strm"]).apply(null, arguments); +}; + + +var _sqlite3session_patchset = Module["_sqlite3session_patchset"] = function() { + return (_sqlite3session_patchset = Module["_sqlite3session_patchset"] = Module["asm"]["sqlite3session_patchset"]).apply(null, arguments); +}; + + +var _sqlite3session_enable = Module["_sqlite3session_enable"] = function() { + return (_sqlite3session_enable = Module["_sqlite3session_enable"] = Module["asm"]["sqlite3session_enable"]).apply(null, arguments); +}; + + +var _sqlite3session_indirect = Module["_sqlite3session_indirect"] = function() { + return (_sqlite3session_indirect = Module["_sqlite3session_indirect"] = Module["asm"]["sqlite3session_indirect"]).apply(null, arguments); +}; + + +var _sqlite3session_isempty = Module["_sqlite3session_isempty"] = function() { + return (_sqlite3session_isempty = Module["_sqlite3session_isempty"] = Module["asm"]["sqlite3session_isempty"]).apply(null, arguments); +}; + + +var _sqlite3session_memory_used = Module["_sqlite3session_memory_used"] = function() { + return (_sqlite3session_memory_used = Module["_sqlite3session_memory_used"] = Module["asm"]["sqlite3session_memory_used"]).apply(null, arguments); +}; + + +var _sqlite3session_object_config = Module["_sqlite3session_object_config"] = function() { + return (_sqlite3session_object_config = Module["_sqlite3session_object_config"] = Module["asm"]["sqlite3session_object_config"]).apply(null, arguments); +}; + + +var _sqlite3session_changeset_size = Module["_sqlite3session_changeset_size"] = function() { + return (_sqlite3session_changeset_size = Module["_sqlite3session_changeset_size"] = Module["asm"]["sqlite3session_changeset_size"]).apply(null, arguments); +}; + + +var _sqlite3changeset_start = Module["_sqlite3changeset_start"] = function() { + return (_sqlite3changeset_start = Module["_sqlite3changeset_start"] = Module["asm"]["sqlite3changeset_start"]).apply(null, arguments); +}; + + +var _sqlite3changeset_start_v2 = Module["_sqlite3changeset_start_v2"] = function() { + return (_sqlite3changeset_start_v2 = Module["_sqlite3changeset_start_v2"] = Module["asm"]["sqlite3changeset_start_v2"]).apply(null, arguments); +}; + + +var _sqlite3changeset_start_strm = Module["_sqlite3changeset_start_strm"] = function() { + return (_sqlite3changeset_start_strm = Module["_sqlite3changeset_start_strm"] = Module["asm"]["sqlite3changeset_start_strm"]).apply(null, arguments); +}; + + +var _sqlite3changeset_start_v2_strm = Module["_sqlite3changeset_start_v2_strm"] = function() { + return (_sqlite3changeset_start_v2_strm = Module["_sqlite3changeset_start_v2_strm"] = Module["asm"]["sqlite3changeset_start_v2_strm"]).apply(null, arguments); +}; + + +var _sqlite3changeset_next = Module["_sqlite3changeset_next"] = function() { + return (_sqlite3changeset_next = Module["_sqlite3changeset_next"] = Module["asm"]["sqlite3changeset_next"]).apply(null, arguments); +}; + + +var _sqlite3changeset_op = Module["_sqlite3changeset_op"] = function() { + return (_sqlite3changeset_op = Module["_sqlite3changeset_op"] = Module["asm"]["sqlite3changeset_op"]).apply(null, arguments); +}; + + +var _sqlite3changeset_pk = Module["_sqlite3changeset_pk"] = function() { + return (_sqlite3changeset_pk = Module["_sqlite3changeset_pk"] = Module["asm"]["sqlite3changeset_pk"]).apply(null, arguments); +}; + + +var _sqlite3changeset_old = Module["_sqlite3changeset_old"] = function() { + return (_sqlite3changeset_old = Module["_sqlite3changeset_old"] = Module["asm"]["sqlite3changeset_old"]).apply(null, arguments); +}; + + +var _sqlite3changeset_new = Module["_sqlite3changeset_new"] = function() { + return (_sqlite3changeset_new = Module["_sqlite3changeset_new"] = Module["asm"]["sqlite3changeset_new"]).apply(null, arguments); +}; + + +var _sqlite3changeset_conflict = Module["_sqlite3changeset_conflict"] = function() { + return (_sqlite3changeset_conflict = Module["_sqlite3changeset_conflict"] = Module["asm"]["sqlite3changeset_conflict"]).apply(null, arguments); +}; + + +var _sqlite3changeset_fk_conflicts = Module["_sqlite3changeset_fk_conflicts"] = function() { + return (_sqlite3changeset_fk_conflicts = Module["_sqlite3changeset_fk_conflicts"] = Module["asm"]["sqlite3changeset_fk_conflicts"]).apply(null, arguments); +}; + + +var _sqlite3changeset_finalize = Module["_sqlite3changeset_finalize"] = function() { + return (_sqlite3changeset_finalize = Module["_sqlite3changeset_finalize"] = Module["asm"]["sqlite3changeset_finalize"]).apply(null, arguments); +}; + + +var _sqlite3changeset_invert = Module["_sqlite3changeset_invert"] = function() { + return (_sqlite3changeset_invert = Module["_sqlite3changeset_invert"] = Module["asm"]["sqlite3changeset_invert"]).apply(null, arguments); +}; + + +var _sqlite3changeset_invert_strm = Module["_sqlite3changeset_invert_strm"] = function() { + return (_sqlite3changeset_invert_strm = Module["_sqlite3changeset_invert_strm"] = Module["asm"]["sqlite3changeset_invert_strm"]).apply(null, arguments); +}; + + +var _sqlite3changeset_apply_v2 = Module["_sqlite3changeset_apply_v2"] = function() { + return (_sqlite3changeset_apply_v2 = Module["_sqlite3changeset_apply_v2"] = Module["asm"]["sqlite3changeset_apply_v2"]).apply(null, arguments); +}; + + +var _sqlite3changeset_apply = Module["_sqlite3changeset_apply"] = function() { + return (_sqlite3changeset_apply = Module["_sqlite3changeset_apply"] = Module["asm"]["sqlite3changeset_apply"]).apply(null, arguments); +}; + + +var _sqlite3changeset_apply_v2_strm = Module["_sqlite3changeset_apply_v2_strm"] = function() { + return (_sqlite3changeset_apply_v2_strm = Module["_sqlite3changeset_apply_v2_strm"] = Module["asm"]["sqlite3changeset_apply_v2_strm"]).apply(null, arguments); +}; + + +var _sqlite3changeset_apply_strm = Module["_sqlite3changeset_apply_strm"] = function() { + return (_sqlite3changeset_apply_strm = Module["_sqlite3changeset_apply_strm"] = Module["asm"]["sqlite3changeset_apply_strm"]).apply(null, arguments); +}; + + +var _sqlite3changegroup_new = Module["_sqlite3changegroup_new"] = function() { + return (_sqlite3changegroup_new = Module["_sqlite3changegroup_new"] = Module["asm"]["sqlite3changegroup_new"]).apply(null, arguments); +}; + + +var _sqlite3changegroup_add = Module["_sqlite3changegroup_add"] = function() { + return (_sqlite3changegroup_add = Module["_sqlite3changegroup_add"] = Module["asm"]["sqlite3changegroup_add"]).apply(null, arguments); +}; + + +var _sqlite3changegroup_output = Module["_sqlite3changegroup_output"] = function() { + return (_sqlite3changegroup_output = Module["_sqlite3changegroup_output"] = Module["asm"]["sqlite3changegroup_output"]).apply(null, arguments); +}; + + +var _sqlite3changegroup_add_strm = Module["_sqlite3changegroup_add_strm"] = function() { + return (_sqlite3changegroup_add_strm = Module["_sqlite3changegroup_add_strm"] = Module["asm"]["sqlite3changegroup_add_strm"]).apply(null, arguments); +}; + + +var _sqlite3changegroup_output_strm = Module["_sqlite3changegroup_output_strm"] = function() { + return (_sqlite3changegroup_output_strm = Module["_sqlite3changegroup_output_strm"] = Module["asm"]["sqlite3changegroup_output_strm"]).apply(null, arguments); +}; + + +var _sqlite3changegroup_delete = Module["_sqlite3changegroup_delete"] = function() { + return (_sqlite3changegroup_delete = Module["_sqlite3changegroup_delete"] = Module["asm"]["sqlite3changegroup_delete"]).apply(null, arguments); +}; + + +var _sqlite3changeset_concat = Module["_sqlite3changeset_concat"] = function() { + return (_sqlite3changeset_concat = Module["_sqlite3changeset_concat"] = Module["asm"]["sqlite3changeset_concat"]).apply(null, arguments); +}; + + +var _sqlite3changeset_concat_strm = Module["_sqlite3changeset_concat_strm"] = function() { + return (_sqlite3changeset_concat_strm = Module["_sqlite3changeset_concat_strm"] = Module["asm"]["sqlite3changeset_concat_strm"]).apply(null, arguments); +}; + + +var _sqlite3session_config = Module["_sqlite3session_config"] = function() { + return (_sqlite3session_config = Module["_sqlite3session_config"] = Module["asm"]["sqlite3session_config"]).apply(null, arguments); +}; + + +var _sqlite3_sourceid = Module["_sqlite3_sourceid"] = function() { + return (_sqlite3_sourceid = Module["_sqlite3_sourceid"] = Module["asm"]["sqlite3_sourceid"]).apply(null, arguments); +}; + + +var _sqlite3_wasm_pstack_ptr = Module["_sqlite3_wasm_pstack_ptr"] = function() { + return (_sqlite3_wasm_pstack_ptr = Module["_sqlite3_wasm_pstack_ptr"] = Module["asm"]["sqlite3_wasm_pstack_ptr"]).apply(null, arguments); +}; + + +var _sqlite3_wasm_pstack_restore = Module["_sqlite3_wasm_pstack_restore"] = function() { + return (_sqlite3_wasm_pstack_restore = Module["_sqlite3_wasm_pstack_restore"] = Module["asm"]["sqlite3_wasm_pstack_restore"]).apply(null, arguments); +}; + + +var _sqlite3_wasm_pstack_alloc = Module["_sqlite3_wasm_pstack_alloc"] = function() { + return (_sqlite3_wasm_pstack_alloc = Module["_sqlite3_wasm_pstack_alloc"] = Module["asm"]["sqlite3_wasm_pstack_alloc"]).apply(null, arguments); +}; + + +var _sqlite3_wasm_pstack_remaining = Module["_sqlite3_wasm_pstack_remaining"] = function() { + return (_sqlite3_wasm_pstack_remaining = Module["_sqlite3_wasm_pstack_remaining"] = Module["asm"]["sqlite3_wasm_pstack_remaining"]).apply(null, arguments); +}; + + +var _sqlite3_wasm_pstack_quota = Module["_sqlite3_wasm_pstack_quota"] = function() { + return (_sqlite3_wasm_pstack_quota = Module["_sqlite3_wasm_pstack_quota"] = Module["asm"]["sqlite3_wasm_pstack_quota"]).apply(null, arguments); +}; + + +var _sqlite3_wasm_db_error = Module["_sqlite3_wasm_db_error"] = function() { + return (_sqlite3_wasm_db_error = Module["_sqlite3_wasm_db_error"] = Module["asm"]["sqlite3_wasm_db_error"]).apply(null, arguments); +}; + + +var _sqlite3_wasm_test_struct = Module["_sqlite3_wasm_test_struct"] = function() { + return (_sqlite3_wasm_test_struct = Module["_sqlite3_wasm_test_struct"] = Module["asm"]["sqlite3_wasm_test_struct"]).apply(null, arguments); +}; + + +var _sqlite3_wasm_enum_json = Module["_sqlite3_wasm_enum_json"] = function() { + return (_sqlite3_wasm_enum_json = Module["_sqlite3_wasm_enum_json"] = Module["asm"]["sqlite3_wasm_enum_json"]).apply(null, arguments); +}; + + +var _sqlite3_wasm_vfs_unlink = Module["_sqlite3_wasm_vfs_unlink"] = function() { + return (_sqlite3_wasm_vfs_unlink = Module["_sqlite3_wasm_vfs_unlink"] = Module["asm"]["sqlite3_wasm_vfs_unlink"]).apply(null, arguments); +}; + + +var _sqlite3_wasm_db_vfs = Module["_sqlite3_wasm_db_vfs"] = function() { + return (_sqlite3_wasm_db_vfs = Module["_sqlite3_wasm_db_vfs"] = Module["asm"]["sqlite3_wasm_db_vfs"]).apply(null, arguments); +}; + + +var _sqlite3_wasm_db_reset = Module["_sqlite3_wasm_db_reset"] = function() { + return (_sqlite3_wasm_db_reset = Module["_sqlite3_wasm_db_reset"] = Module["asm"]["sqlite3_wasm_db_reset"]).apply(null, arguments); +}; + + +var _sqlite3_wasm_db_export_chunked = Module["_sqlite3_wasm_db_export_chunked"] = function() { + return (_sqlite3_wasm_db_export_chunked = Module["_sqlite3_wasm_db_export_chunked"] = Module["asm"]["sqlite3_wasm_db_export_chunked"]).apply(null, arguments); +}; + + +var _sqlite3_wasm_db_serialize = Module["_sqlite3_wasm_db_serialize"] = function() { + return (_sqlite3_wasm_db_serialize = Module["_sqlite3_wasm_db_serialize"] = Module["asm"]["sqlite3_wasm_db_serialize"]).apply(null, arguments); +}; + + +var _sqlite3_wasm_vfs_create_file = Module["_sqlite3_wasm_vfs_create_file"] = function() { + return (_sqlite3_wasm_vfs_create_file = Module["_sqlite3_wasm_vfs_create_file"] = Module["asm"]["sqlite3_wasm_vfs_create_file"]).apply(null, arguments); +}; + + +var _sqlite3_wasm_posix_create_file = Module["_sqlite3_wasm_posix_create_file"] = function() { + return (_sqlite3_wasm_posix_create_file = Module["_sqlite3_wasm_posix_create_file"] = Module["asm"]["sqlite3_wasm_posix_create_file"]).apply(null, arguments); +}; + + +var _sqlite3_wasm_kvvfsMakeKeyOnPstack = Module["_sqlite3_wasm_kvvfsMakeKeyOnPstack"] = function() { + return (_sqlite3_wasm_kvvfsMakeKeyOnPstack = Module["_sqlite3_wasm_kvvfsMakeKeyOnPstack"] = Module["asm"]["sqlite3_wasm_kvvfsMakeKeyOnPstack"]).apply(null, arguments); +}; + + +var _sqlite3_wasm_kvvfs_methods = Module["_sqlite3_wasm_kvvfs_methods"] = function() { + return (_sqlite3_wasm_kvvfs_methods = Module["_sqlite3_wasm_kvvfs_methods"] = Module["asm"]["sqlite3_wasm_kvvfs_methods"]).apply(null, arguments); +}; + + +var _sqlite3_wasm_vtab_config = Module["_sqlite3_wasm_vtab_config"] = function() { + return (_sqlite3_wasm_vtab_config = Module["_sqlite3_wasm_vtab_config"] = Module["asm"]["sqlite3_wasm_vtab_config"]).apply(null, arguments); +}; + + +var _sqlite3_wasm_db_config_ip = Module["_sqlite3_wasm_db_config_ip"] = function() { + return (_sqlite3_wasm_db_config_ip = Module["_sqlite3_wasm_db_config_ip"] = Module["asm"]["sqlite3_wasm_db_config_ip"]).apply(null, arguments); +}; + + +var _sqlite3_wasm_db_config_pii = Module["_sqlite3_wasm_db_config_pii"] = function() { + return (_sqlite3_wasm_db_config_pii = Module["_sqlite3_wasm_db_config_pii"] = Module["asm"]["sqlite3_wasm_db_config_pii"]).apply(null, arguments); +}; + + +var _sqlite3_wasm_db_config_s = Module["_sqlite3_wasm_db_config_s"] = function() { + return (_sqlite3_wasm_db_config_s = Module["_sqlite3_wasm_db_config_s"] = Module["asm"]["sqlite3_wasm_db_config_s"]).apply(null, arguments); +}; + + +var _sqlite3_wasm_config_i = Module["_sqlite3_wasm_config_i"] = function() { + return (_sqlite3_wasm_config_i = Module["_sqlite3_wasm_config_i"] = Module["asm"]["sqlite3_wasm_config_i"]).apply(null, arguments); +}; + + +var _sqlite3_wasm_config_ii = Module["_sqlite3_wasm_config_ii"] = function() { + return (_sqlite3_wasm_config_ii = Module["_sqlite3_wasm_config_ii"] = Module["asm"]["sqlite3_wasm_config_ii"]).apply(null, arguments); +}; + + +var _sqlite3_wasm_config_j = Module["_sqlite3_wasm_config_j"] = function() { + return (_sqlite3_wasm_config_j = Module["_sqlite3_wasm_config_j"] = Module["asm"]["sqlite3_wasm_config_j"]).apply(null, arguments); +}; + + +var _sqlite3_wasm_init_wasmfs = Module["_sqlite3_wasm_init_wasmfs"] = function() { + return (_sqlite3_wasm_init_wasmfs = Module["_sqlite3_wasm_init_wasmfs"] = Module["asm"]["sqlite3_wasm_init_wasmfs"]).apply(null, arguments); +}; + + +var _sqlite3_wasm_test_intptr = Module["_sqlite3_wasm_test_intptr"] = function() { + return (_sqlite3_wasm_test_intptr = Module["_sqlite3_wasm_test_intptr"] = Module["asm"]["sqlite3_wasm_test_intptr"]).apply(null, arguments); +}; + + +var _sqlite3_wasm_test_voidptr = Module["_sqlite3_wasm_test_voidptr"] = function() { + return (_sqlite3_wasm_test_voidptr = Module["_sqlite3_wasm_test_voidptr"] = Module["asm"]["sqlite3_wasm_test_voidptr"]).apply(null, arguments); +}; + + +var _sqlite3_wasm_test_int64_max = Module["_sqlite3_wasm_test_int64_max"] = function() { + return (_sqlite3_wasm_test_int64_max = Module["_sqlite3_wasm_test_int64_max"] = Module["asm"]["sqlite3_wasm_test_int64_max"]).apply(null, arguments); +}; + + +var _sqlite3_wasm_test_int64_min = Module["_sqlite3_wasm_test_int64_min"] = function() { + return (_sqlite3_wasm_test_int64_min = Module["_sqlite3_wasm_test_int64_min"] = Module["asm"]["sqlite3_wasm_test_int64_min"]).apply(null, arguments); +}; + + +var _sqlite3_wasm_test_int64_times2 = Module["_sqlite3_wasm_test_int64_times2"] = function() { + return (_sqlite3_wasm_test_int64_times2 = Module["_sqlite3_wasm_test_int64_times2"] = Module["asm"]["sqlite3_wasm_test_int64_times2"]).apply(null, arguments); +}; + + +var _sqlite3_wasm_test_int64_minmax = Module["_sqlite3_wasm_test_int64_minmax"] = function() { + return (_sqlite3_wasm_test_int64_minmax = Module["_sqlite3_wasm_test_int64_minmax"] = Module["asm"]["sqlite3_wasm_test_int64_minmax"]).apply(null, arguments); +}; + + +var _sqlite3_wasm_test_int64ptr = Module["_sqlite3_wasm_test_int64ptr"] = function() { + return (_sqlite3_wasm_test_int64ptr = Module["_sqlite3_wasm_test_int64ptr"] = Module["asm"]["sqlite3_wasm_test_int64ptr"]).apply(null, arguments); +}; + + +var _sqlite3_wasm_test_stack_overflow = Module["_sqlite3_wasm_test_stack_overflow"] = function() { + return (_sqlite3_wasm_test_stack_overflow = Module["_sqlite3_wasm_test_stack_overflow"] = Module["asm"]["sqlite3_wasm_test_stack_overflow"]).apply(null, arguments); +}; + + +var _sqlite3_wasm_test_str_hello = Module["_sqlite3_wasm_test_str_hello"] = function() { + return (_sqlite3_wasm_test_str_hello = Module["_sqlite3_wasm_test_str_hello"] = Module["asm"]["sqlite3_wasm_test_str_hello"]).apply(null, arguments); +}; + + +var _sqlite3_wasm_SQLTester_strglob = Module["_sqlite3_wasm_SQLTester_strglob"] = function() { + return (_sqlite3_wasm_SQLTester_strglob = Module["_sqlite3_wasm_SQLTester_strglob"] = Module["asm"]["sqlite3_wasm_SQLTester_strglob"]).apply(null, arguments); +}; + + +var _malloc = Module["_malloc"] = function() { + return (_malloc = Module["_malloc"] = Module["asm"]["malloc"]).apply(null, arguments); +}; + + +var _free = Module["_free"] = function() { + return (_free = Module["_free"] = Module["asm"]["free"]).apply(null, arguments); +}; + + +var _realloc = Module["_realloc"] = function() { + return (_realloc = Module["_realloc"] = Module["asm"]["realloc"]).apply(null, arguments); +}; + + +var _emscripten_builtin_memalign = Module["_emscripten_builtin_memalign"] = function() { + return (_emscripten_builtin_memalign = Module["_emscripten_builtin_memalign"] = Module["asm"]["emscripten_builtin_memalign"]).apply(null, arguments); +}; + + +var stackSave = Module["stackSave"] = function() { + return (stackSave = Module["stackSave"] = Module["asm"]["stackSave"]).apply(null, arguments); +}; + + +var stackRestore = Module["stackRestore"] = function() { + return (stackRestore = Module["stackRestore"] = Module["asm"]["stackRestore"]).apply(null, arguments); +}; + + +var stackAlloc = Module["stackAlloc"] = function() { + return (stackAlloc = Module["stackAlloc"] = Module["asm"]["stackAlloc"]).apply(null, arguments); +}; + + + + + + + +Module["wasmMemory"] = wasmMemory; + + +var calledRun; + +dependenciesFulfilled = function runCaller() { + + if (!calledRun) run(); + if (!calledRun) dependenciesFulfilled = runCaller; +}; + + +function run(args) { + args = args || arguments_; + + if (runDependencies > 0) { + return; + } + + preRun(); + + + if (runDependencies > 0) { + return; + } + + function doRun() { + + + if (calledRun) return; + calledRun = true; + Module['calledRun'] = true; + + if (ABORT) return; + + initRuntime(); + + readyPromiseResolve(Module); + if (Module['onRuntimeInitialized']) Module['onRuntimeInitialized'](); + + postRun(); + } + + if (Module['setStatus']) { + Module['setStatus']('Running...'); + setTimeout(function() { + setTimeout(function() { + Module['setStatus'](''); + }, 1); + doRun(); + }, 1); + } else + { + doRun(); + } +} + +if (Module['preInit']) { + if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; + while (Module['preInit'].length > 0) { + Module['preInit'].pop()(); + } +} + +run(); + + + + + +if(!Module.postRun) Module.postRun = []; +Module.postRun.push(function(Module){ + 'use strict'; + + + + + + + + + + + +'use strict'; +globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( + apiConfig = (globalThis.sqlite3ApiConfig || sqlite3ApiBootstrap.defaultConfig) +){ + if(sqlite3ApiBootstrap.sqlite3){ + console.warn("sqlite3ApiBootstrap() called multiple times.", + "Config and external initializers are ignored on calls after the first."); + return sqlite3ApiBootstrap.sqlite3; + } + const config = Object.assign(Object.create(null),{ + exports: undefined, + memory: undefined, + bigIntEnabled: (()=>{ + if('undefined'!==typeof Module){ + + return !!Module.HEAPU64; + } + return !!globalThis.BigInt64Array; + })(), + debug: console.debug.bind(console), + warn: console.warn.bind(console), + error: console.error.bind(console), + log: console.log.bind(console), + wasmfsOpfsDir: '/opfs', + + useStdAlloc: false + }, apiConfig || {}); + + Object.assign(config, { + allocExportName: config.useStdAlloc ? 'malloc' : 'sqlite3_malloc', + deallocExportName: config.useStdAlloc ? 'free' : 'sqlite3_free', + reallocExportName: config.useStdAlloc ? 'realloc' : 'sqlite3_realloc' + }, config); + + [ + + + 'exports', 'memory', 'wasmfsOpfsDir' + ].forEach((k)=>{ + if('function' === typeof config[k]){ + config[k] = config[k](); + } + }); + + const capi = Object.create(null); + + const wasm = Object.create(null); + + + const __rcStr = (rc)=>{ + return (capi.sqlite3_js_rc_str && capi.sqlite3_js_rc_str(rc)) + || ("Unknown result code #"+rc); + }; + + + const __isInt = (n)=>'number'===typeof n && n===(n | 0); + + + class SQLite3Error extends Error { + + constructor(...args){ + let rc; + if(args.length){ + if(__isInt(args[0])){ + rc = args[0]; + if(1===args.length){ + super(__rcStr(args[0])); + }else{ + const rcStr = __rcStr(rc); + if('object'===typeof args[1]){ + super(rcStr,args[1]); + }else{ + args[0] = rcStr+':'; + super(args.join(' ')); + } + } + }else{ + if(2===args.length && 'object'===typeof args[1]){ + super(...args); + }else{ + super(args.join(' ')); + } + } + } + this.resultCode = rc || capi.SQLITE_ERROR; + this.name = 'SQLite3Error'; + } + }; + + + SQLite3Error.toss = (...args)=>{ + throw new SQLite3Error(...args); + }; + const toss3 = SQLite3Error.toss; + + if(config.wasmfsOpfsDir && !/^\/[^/]+$/.test(config.wasmfsOpfsDir)){ + toss3("config.wasmfsOpfsDir must be falsy or in the form '/dir-name'."); + } + + + const isInt32 = (n)=>{ + return ('bigint'!==typeof n ) + && !!(n===(n|0) && n<=2147483647 && n>=-2147483648); + }; + + const bigIntFits64 = function f(b){ + if(!f._max){ + f._max = BigInt("0x7fffffffffffffff"); + f._min = ~f._max; + } + return b >= f._min && b <= f._max; + }; + + + const bigIntFits32 = (b)=>(b >= (-0x7fffffffn - 1n) && b <= 0x7fffffffn); + + + const bigIntFitsDouble = function f(b){ + if(!f._min){ + f._min = Number.MIN_SAFE_INTEGER; + f._max = Number.MAX_SAFE_INTEGER; + } + return b >= f._min && b <= f._max; + }; + + + const isTypedArray = (v)=>{ + return (v && v.constructor && isInt32(v.constructor.BYTES_PER_ELEMENT)) ? v : false; + }; + + + + const __SAB = ('undefined'===typeof SharedArrayBuffer) + ? function(){} : SharedArrayBuffer; + + const isSharedTypedArray = (aTypedArray)=>(aTypedArray.buffer instanceof __SAB); + + + const typedArrayPart = (aTypedArray, begin, end)=>{ + return isSharedTypedArray(aTypedArray) + ? aTypedArray.slice(begin, end) + : aTypedArray.subarray(begin, end); + }; + + + const isBindableTypedArray = (v)=>{ + return v && (v instanceof Uint8Array + || v instanceof Int8Array + || v instanceof ArrayBuffer); + }; + + + const isSQLableTypedArray = (v)=>{ + return v && (v instanceof Uint8Array + || v instanceof Int8Array + || v instanceof ArrayBuffer); + }; + + + const affirmBindableTypedArray = (v)=>{ + return isBindableTypedArray(v) + || toss3("Value is not of a supported TypedArray type."); + }; + + const utf8Decoder = new TextDecoder('utf-8'); + + + const typedArrayToString = function(typedArray, begin, end){ + return utf8Decoder.decode(typedArrayPart(typedArray, begin,end)); + }; + + + const flexibleString = function(v){ + if(isSQLableTypedArray(v)){ + return typedArrayToString( + (v instanceof ArrayBuffer) ? new Uint8Array(v) : v + ); + } + else if(Array.isArray(v)) return v.join(""); + else if(wasm.isPtr(v)) v = wasm.cstrToJs(v); + return v; + }; + + + class WasmAllocError extends Error { + + constructor(...args){ + if(2===args.length && 'object'===typeof args[1]){ + super(...args); + }else if(args.length){ + super(args.join(' ')); + }else{ + super("Allocation failed."); + } + this.resultCode = capi.SQLITE_NOMEM; + this.name = 'WasmAllocError'; + } + }; + + WasmAllocError.toss = (...args)=>{ + throw new WasmAllocError(...args); + }; + + Object.assign(capi, { + + sqlite3_bind_blob: undefined, + + + sqlite3_bind_text: undefined, + + + sqlite3_create_function_v2: ( + pDb, funcName, nArg, eTextRep, pApp, + xFunc, xStep, xFinal, xDestroy + )=>{}, + + sqlite3_create_function: ( + pDb, funcName, nArg, eTextRep, pApp, + xFunc, xStep, xFinal + )=>{}, + + sqlite3_create_window_function: ( + pDb, funcName, nArg, eTextRep, pApp, + xStep, xFinal, xValue, xInverse, xDestroy + )=>{}, + + sqlite3_prepare_v3: (dbPtr, sql, sqlByteLen, prepFlags, + stmtPtrPtr, strPtrPtr)=>{}, + + + sqlite3_prepare_v2: (dbPtr, sql, sqlByteLen, + stmtPtrPtr,strPtrPtr)=>{}, + + + sqlite3_exec: (pDb, sql, callback, pVoid, pErrMsg)=>{}, + + + sqlite3_randomness: (n, outPtr)=>{}, + }); + + + const util = { + affirmBindableTypedArray, flexibleString, + bigIntFits32, bigIntFits64, bigIntFitsDouble, + isBindableTypedArray, + isInt32, isSQLableTypedArray, isTypedArray, + typedArrayToString, + isUIThread: ()=>(globalThis.window===globalThis && !!globalThis.document), + + isSharedTypedArray, + toss: function(...args){throw new Error(args.join(' '))}, + toss3, + typedArrayPart, + + affirmDbHeader: function(bytes){ + if(bytes instanceof ArrayBuffer) bytes = new Uint8Array(bytes); + const header = "SQLite format 3"; + if( header.length > bytes.byteLength ){ + toss3("Input does not contain an SQLite3 database header."); + } + for(let i = 0; i < header.length; ++i){ + if( header.charCodeAt(i) !== bytes[i] ){ + toss3("Input does not contain an SQLite3 database header."); + } + } + }, + + affirmIsDb: function(bytes){ + if(bytes instanceof ArrayBuffer) bytes = new Uint8Array(bytes); + const n = bytes.byteLength; + if(n<512 || n%512!==0) { + toss3("Byte array size",n,"is invalid for an SQLite3 db."); + } + util.affirmDbHeader(bytes); + } + }; + + Object.assign(wasm, { + + ptrSizeof: config.wasmPtrSizeof || 4, + + ptrIR: config.wasmPtrIR || "i32", + + bigIntEnabled: !!config.bigIntEnabled, + + exports: config.exports + || toss3("Missing API config.exports (WASM module exports)."), + + + memory: config.memory || config.exports['memory'] + || toss3("API config object requires a WebAssembly.Memory object", + "in either config.exports.memory (exported)", + "or config.memory (imported)."), + + + alloc: undefined, + + + realloc: undefined, + + + dealloc: undefined + + + }); + + + wasm.allocFromTypedArray = function(srcTypedArray){ + if(srcTypedArray instanceof ArrayBuffer){ + srcTypedArray = new Uint8Array(srcTypedArray); + } + affirmBindableTypedArray(srcTypedArray); + const pRet = wasm.alloc(srcTypedArray.byteLength || 1); + wasm.heapForSize(srcTypedArray.constructor).set( + srcTypedArray.byteLength ? srcTypedArray : [0], pRet + ); + return pRet; + }; + + { + + const keyAlloc = config.allocExportName, + keyDealloc = config.deallocExportName, + keyRealloc = config.reallocExportName; + for(const key of [keyAlloc, keyDealloc, keyRealloc]){ + const f = wasm.exports[key]; + if(!(f instanceof Function)) toss3("Missing required exports[",key,"] function."); + } + + wasm.alloc = function f(n){ + return f.impl(n) || WasmAllocError.toss("Failed to allocate",n," bytes."); + }; + wasm.alloc.impl = wasm.exports[keyAlloc]; + wasm.realloc = function f(m,n){ + const m2 = f.impl(m,n); + return n ? (m2 || WasmAllocError.toss("Failed to reallocate",n," bytes.")) : 0; + }; + wasm.realloc.impl = wasm.exports[keyRealloc]; + wasm.dealloc = wasm.exports[keyDealloc]; + } + + + wasm.compileOptionUsed = function f(optName){ + if(!arguments.length){ + if(f._result) return f._result; + else if(!f._opt){ + f._rx = /^([^=]+)=(.+)/; + f._rxInt = /^-?\d+$/; + f._opt = function(opt, rv){ + const m = f._rx.exec(opt); + rv[0] = (m ? m[1] : opt); + rv[1] = m ? (f._rxInt.test(m[2]) ? +m[2] : m[2]) : true; + }; + } + const rc = {}, ov = [0,0]; + let i = 0, k; + while((k = capi.sqlite3_compileoption_get(i++))){ + f._opt(k,ov); + rc[ov[0]] = ov[1]; + } + return f._result = rc; + }else if(Array.isArray(optName)){ + const rc = {}; + optName.forEach((v)=>{ + rc[v] = capi.sqlite3_compileoption_used(v); + }); + return rc; + }else if('object' === typeof optName){ + Object.keys(optName).forEach((k)=> { + optName[k] = capi.sqlite3_compileoption_used(k); + }); + return optName; + } + return ( + 'string'===typeof optName + ) ? !!capi.sqlite3_compileoption_used(optName) : false; + }; + + + wasm.pstack = Object.assign(Object.create(null),{ + + restore: wasm.exports.sqlite3_wasm_pstack_restore, + + alloc: function(n){ + if('string'===typeof n && !(n = wasm.sizeofIR(n))){ + WasmAllocError.toss("Invalid value for pstack.alloc(",arguments[0],")"); + } + return wasm.exports.sqlite3_wasm_pstack_alloc(n) + || WasmAllocError.toss("Could not allocate",n, + "bytes from the pstack."); + }, + + allocChunks: function(n,sz){ + if('string'===typeof sz && !(sz = wasm.sizeofIR(sz))){ + WasmAllocError.toss("Invalid size value for allocChunks(",arguments[1],")"); + } + const mem = wasm.pstack.alloc(n * sz); + const rc = []; + let i = 0, offset = 0; + for(; i < n; ++i, offset += sz) rc.push(mem + offset); + return rc; + }, + + allocPtr: (n=1,safePtrSize=true)=>{ + return 1===n + ? wasm.pstack.alloc(safePtrSize ? 8 : wasm.ptrSizeof) + : wasm.pstack.allocChunks(n, safePtrSize ? 8 : wasm.ptrSizeof); + }, + + + call: function(f){ + const stackPos = wasm.pstack.pointer; + try{ return f(sqlite3) } finally{ + wasm.pstack.restore(stackPos); + } + } + + }); + Object.defineProperties(wasm.pstack, { + + pointer: { + configurable: false, iterable: true, writeable: false, + get: wasm.exports.sqlite3_wasm_pstack_ptr + + + + }, + + quota: { + configurable: false, iterable: true, writeable: false, + get: wasm.exports.sqlite3_wasm_pstack_quota + }, + + remaining: { + configurable: false, iterable: true, writeable: false, + get: wasm.exports.sqlite3_wasm_pstack_remaining + } + }); + + capi.sqlite3_randomness = (...args)=>{ + if(1===args.length && util.isTypedArray(args[0]) + && 1===args[0].BYTES_PER_ELEMENT){ + const ta = args[0]; + if(0===ta.byteLength){ + wasm.exports.sqlite3_randomness(0,0); + return ta; + } + const stack = wasm.pstack.pointer; + try { + let n = ta.byteLength, offset = 0; + const r = wasm.exports.sqlite3_randomness; + const heap = wasm.heap8u(); + const nAlloc = n < 512 ? n : 512; + const ptr = wasm.pstack.alloc(nAlloc); + do{ + const j = (n>nAlloc ? nAlloc : n); + r(j, ptr); + ta.set(typedArrayPart(heap, ptr, ptr+j), offset); + n -= j; + offset += j; + } while(n > 0); + }catch(e){ + console.error("Highly unexpected (and ignored!) "+ + "exception in sqlite3_randomness():",e); + }finally{ + wasm.pstack.restore(stack); + } + return ta; + } + wasm.exports.sqlite3_randomness(...args); + }; + + + let __wasmfsOpfsDir = undefined; + + capi.sqlite3_wasmfs_opfs_dir = function(){ + if(undefined !== __wasmfsOpfsDir) return __wasmfsOpfsDir; + + const pdir = config.wasmfsOpfsDir; + if(!pdir + || !globalThis.FileSystemHandle + || !globalThis.FileSystemDirectoryHandle + || !globalThis.FileSystemFileHandle){ + return __wasmfsOpfsDir = ""; + } + try{ + if(pdir && 0===wasm.xCallWrapped( + 'sqlite3_wasm_init_wasmfs', 'i32', ['string'], pdir + )){ + return __wasmfsOpfsDir = pdir; + }else{ + return __wasmfsOpfsDir = ""; + } + }catch(e){ + + return __wasmfsOpfsDir = ""; + } + }; + + + capi.sqlite3_wasmfs_filename_is_persistent = function(name){ + const p = capi.sqlite3_wasmfs_opfs_dir(); + return (p && name) ? name.startsWith(p+'/') : false; + }; + + + capi.sqlite3_js_db_uses_vfs = function(pDb,vfsName,dbName=0){ + try{ + const pK = capi.sqlite3_vfs_find(vfsName); + if(!pK) return false; + else if(!pDb){ + return pK===capi.sqlite3_vfs_find(0) ? pK : false; + }else{ + return pK===capi.sqlite3_js_db_vfs(pDb,dbName) ? pK : false; + } + }catch(e){ + + return false; + } + }; + + + capi.sqlite3_js_vfs_list = function(){ + const rc = []; + let pVfs = capi.sqlite3_vfs_find(0); + while(pVfs){ + const oVfs = new capi.sqlite3_vfs(pVfs); + rc.push(wasm.cstrToJs(oVfs.$zName)); + pVfs = oVfs.$pNext; + oVfs.dispose(); + } + return rc; + }; + + + capi.sqlite3_js_db_export = function(pDb, schema=0){ + pDb = wasm.xWrap.testConvertArg('sqlite3*', pDb); + if(!pDb) toss3('Invalid sqlite3* argument.'); + if(!wasm.bigIntEnabled) toss3('BigInt64 support is not enabled.'); + const scope = wasm.scopedAllocPush(); + let pOut; + try{ + const pSize = wasm.scopedAlloc(8 + wasm.ptrSizeof); + const ppOut = pSize + 8; + + const zSchema = schema + ? (wasm.isPtr(schema) ? schema : wasm.scopedAllocCString(''+schema)) + : 0; + let rc = wasm.exports.sqlite3_wasm_db_serialize( + pDb, zSchema, ppOut, pSize, 0 + ); + if(rc){ + toss3("Database serialization failed with code", + sqlite3.capi.sqlite3_js_rc_str(rc)); + } + pOut = wasm.peekPtr(ppOut); + const nOut = wasm.peek(pSize, 'i64'); + rc = nOut + ? wasm.heap8u().slice(pOut, pOut + Number(nOut)) + : new Uint8Array(); + return rc; + }finally{ + if(pOut) wasm.exports.sqlite3_free(pOut); + wasm.scopedAllocPop(scope); + } + }; + + + capi.sqlite3_js_db_vfs = + (dbPointer, dbName=0)=>wasm.sqlite3_wasm_db_vfs(dbPointer, dbName); + + + capi.sqlite3_js_aggregate_context = (pCtx, n)=>{ + return capi.sqlite3_aggregate_context(pCtx, n) + || (n ? WasmAllocError.toss("Cannot allocate",n, + "bytes for sqlite3_aggregate_context()") + : 0); + }; + + + capi.sqlite3_js_posix_create_file = function(filename, data, dataLen){ + let pData; + if(data && wasm.isPtr(data)){ + pData = data; + }else if(data instanceof ArrayBuffer || data instanceof Uint8Array){ + pData = wasm.allocFromTypedArray(data); + if(arguments.length<3 || !util.isInt32(dataLen) || dataLen<0){ + dataLen = data.byteLength; + } + }else{ + SQLite3Error.toss("Invalid 2nd argument for sqlite3_js_posix_create_file()."); + } + try{ + if(!util.isInt32(dataLen) || dataLen<0){ + SQLite3Error.toss("Invalid 3rd argument for sqlite3_js_posix_create_file()."); + } + const rc = wasm.sqlite3_wasm_posix_create_file(filename, pData, dataLen); + if(rc) SQLite3Error.toss("Creation of file failed with sqlite3 result code", + capi.sqlite3_js_rc_str(rc)); + }finally{ + wasm.dealloc(pData); + } + }; + + + capi.sqlite3_js_vfs_create_file = function(vfs, filename, data, dataLen){ + config.warn("sqlite3_js_vfs_create_file() is deprecated and", + "should be avoided because it can lead to C-level crashes.", + "See its documentation for alternative options."); + let pData; + if(data){ + if(wasm.isPtr(data)){ + pData = data; + }else if(data instanceof ArrayBuffer){ + data = new Uint8Array(data); + } + if(data instanceof Uint8Array){ + pData = wasm.allocFromTypedArray(data); + if(arguments.length<4 || !util.isInt32(dataLen) || dataLen<0){ + dataLen = data.byteLength; + } + }else{ + SQLite3Error.toss("Invalid 3rd argument type for sqlite3_js_vfs_create_file()."); + } + }else{ + pData = 0; + } + if(!util.isInt32(dataLen) || dataLen<0){ + wasm.dealloc(pData); + SQLite3Error.toss("Invalid 4th argument for sqlite3_js_vfs_create_file()."); + } + try{ + const rc = wasm.sqlite3_wasm_vfs_create_file(vfs, filename, pData, dataLen); + if(rc) SQLite3Error.toss("Creation of file failed with sqlite3 result code", + capi.sqlite3_js_rc_str(rc)); + }finally{ + wasm.dealloc(pData); + } + }; + + + capi.sqlite3_js_sql_to_string = (sql)=>{ + if('string' === typeof sql){ + return sql; + } + const x = flexibleString(v); + return x===v ? undefined : x; + } + + if( util.isUIThread() ){ + + + + const __kvvfsInfo = function(which){ + const rc = Object.create(null); + rc.prefix = 'kvvfs-'+which; + rc.stores = []; + if('session'===which || ""===which) rc.stores.push(globalThis.sessionStorage); + if('local'===which || ""===which) rc.stores.push(globalThis.localStorage); + return rc; + }; + + + capi.sqlite3_js_kvvfs_clear = function(which=""){ + let rc = 0; + const kvinfo = __kvvfsInfo(which); + kvinfo.stores.forEach((s)=>{ + const toRm = [] ; + let i; + for( i = 0; i < s.length; ++i ){ + const k = s.key(i); + if(k.startsWith(kvinfo.prefix)) toRm.push(k); + } + toRm.forEach((kk)=>s.removeItem(kk)); + rc += toRm.length; + }); + return rc; + }; + + + capi.sqlite3_js_kvvfs_size = function(which=""){ + let sz = 0; + const kvinfo = __kvvfsInfo(which); + kvinfo.stores.forEach((s)=>{ + let i; + for(i = 0; i < s.length; ++i){ + const k = s.key(i); + if(k.startsWith(kvinfo.prefix)){ + sz += k.length; + sz += s.getItem(k).length; + } + } + }); + return sz * 2 ; + }; + + } + + + capi.sqlite3_db_config = function(pDb, op, ...args){ + if(!this.s){ + this.s = wasm.xWrap('sqlite3_wasm_db_config_s','int', + ['sqlite3*', 'int', 'string:static'] + ); + this.pii = wasm.xWrap('sqlite3_wasm_db_config_pii', 'int', + ['sqlite3*', 'int', '*','int', 'int']); + this.ip = wasm.xWrap('sqlite3_wasm_db_config_ip','int', + ['sqlite3*', 'int', 'int','*']); + } + switch(op){ + case capi.SQLITE_DBCONFIG_ENABLE_FKEY: + case capi.SQLITE_DBCONFIG_ENABLE_TRIGGER: + case capi.SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER: + case capi.SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION: + case capi.SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE: + case capi.SQLITE_DBCONFIG_ENABLE_QPSG: + case capi.SQLITE_DBCONFIG_TRIGGER_EQP: + case capi.SQLITE_DBCONFIG_RESET_DATABASE: + case capi.SQLITE_DBCONFIG_DEFENSIVE: + case capi.SQLITE_DBCONFIG_WRITABLE_SCHEMA: + case capi.SQLITE_DBCONFIG_LEGACY_ALTER_TABLE: + case capi.SQLITE_DBCONFIG_DQS_DML: + case capi.SQLITE_DBCONFIG_DQS_DDL: + case capi.SQLITE_DBCONFIG_ENABLE_VIEW: + case capi.SQLITE_DBCONFIG_LEGACY_FILE_FORMAT: + case capi.SQLITE_DBCONFIG_TRUSTED_SCHEMA: + case capi.SQLITE_DBCONFIG_STMT_SCANSTATUS: + case capi.SQLITE_DBCONFIG_REVERSE_SCANORDER: + return this.ip(pDb, op, args[0], args[1] || 0); + case capi.SQLITE_DBCONFIG_LOOKASIDE: + return this.pii(pDb, op, args[0], args[1], args[2]); + case capi.SQLITE_DBCONFIG_MAINDBNAME: + return this.s(pDb, op, args[0]); + default: + return capi.SQLITE_MISUSE; + } + }.bind(Object.create(null)); + + + capi.sqlite3_value_to_js = function(pVal,throwIfCannotConvert=true){ + let arg; + const valType = capi.sqlite3_value_type(pVal); + switch(valType){ + case capi.SQLITE_INTEGER: + if(wasm.bigIntEnabled){ + arg = capi.sqlite3_value_int64(pVal); + if(util.bigIntFitsDouble(arg)) arg = Number(arg); + } + else arg = capi.sqlite3_value_double(pVal); + break; + case capi.SQLITE_FLOAT: + arg = capi.sqlite3_value_double(pVal); + break; + case capi.SQLITE_TEXT: + arg = capi.sqlite3_value_text(pVal); + break; + case capi.SQLITE_BLOB:{ + const n = capi.sqlite3_value_bytes(pVal); + const pBlob = capi.sqlite3_value_blob(pVal); + if(n && !pBlob) sqlite3.WasmAllocError.toss( + "Cannot allocate memory for blob argument of",n,"byte(s)" + ); + arg = n ? wasm.heap8u().slice(pBlob, pBlob + Number(n)) : null; + break; + } + case capi.SQLITE_NULL: + arg = null; break; + default: + if(throwIfCannotConvert){ + toss3(capi.SQLITE_MISMATCH, + "Unhandled sqlite3_value_type():",valType); + } + arg = undefined; + } + return arg; + }; + + + capi.sqlite3_values_to_js = function(argc,pArgv,throwIfCannotConvert=true){ + let i; + const tgt = []; + for(i = 0; i < argc; ++i){ + + tgt.push(capi.sqlite3_value_to_js( + wasm.peekPtr(pArgv + (wasm.ptrSizeof * i)), + throwIfCannotConvert + )); + } + return tgt; + }; + + + capi.sqlite3_result_error_js = function(pCtx,e){ + if(e instanceof WasmAllocError){ + capi.sqlite3_result_error_nomem(pCtx); + }else{ + ; + capi.sqlite3_result_error(pCtx, ''+e, -1); + } + }; + + + capi.sqlite3_result_js = function(pCtx,val){ + if(val instanceof Error){ + capi.sqlite3_result_error_js(pCtx, val); + return; + } + try{ + switch(typeof val) { + case 'undefined': + + break; + case 'boolean': + capi.sqlite3_result_int(pCtx, val ? 1 : 0); + break; + case 'bigint': + if(util.bigIntFits32(val)){ + capi.sqlite3_result_int(pCtx, Number(val)); + }else if(util.bigIntFitsDouble(val)){ + capi.sqlite3_result_double(pCtx, Number(val)); + }else if(wasm.bigIntEnabled){ + if(util.bigIntFits64(val)) capi.sqlite3_result_int64(pCtx, val); + else toss3("BigInt value",val.toString(),"is too BigInt for int64."); + }else{ + toss3("BigInt value",val.toString(),"is too BigInt."); + } + break; + case 'number': { + let f; + if(util.isInt32(val)){ + f = capi.sqlite3_result_int; + }else if(wasm.bigIntEnabled + && Number.isInteger(val) + && util.bigIntFits64(BigInt(val))){ + f = capi.sqlite3_result_int64; + }else{ + f = capi.sqlite3_result_double; + } + f(pCtx, val); + break; + } + case 'string': { + const [p, n] = wasm.allocCString(val,true); + capi.sqlite3_result_text(pCtx, p, n, capi.SQLITE_WASM_DEALLOC); + break; + } + case 'object': + if(null===val) { + capi.sqlite3_result_null(pCtx); + break; + }else if(util.isBindableTypedArray(val)){ + const pBlob = wasm.allocFromTypedArray(val); + capi.sqlite3_result_blob( + pCtx, pBlob, val.byteLength, + capi.SQLITE_WASM_DEALLOC + ); + break; + } + + default: + toss3("Don't not how to handle this UDF result value:",(typeof val), val); + } + }catch(e){ + capi.sqlite3_result_error_js(pCtx, e); + } + }; + + + capi.sqlite3_column_js = function(pStmt, iCol, throwIfCannotConvert=true){ + const v = capi.sqlite3_column_value(pStmt, iCol); + return (0===v) ? undefined : capi.sqlite3_value_to_js(v, throwIfCannotConvert); + }; + + + const __newOldValue = function(pObj, iCol, impl){ + impl = capi[impl]; + if(!this.ptr) this.ptr = wasm.allocPtr(); + else wasm.pokePtr(this.ptr, 0); + const rc = impl(pObj, iCol, this.ptr); + if(rc) return SQLite3Error.toss(rc,arguments[2]+"() failed with code "+rc); + const pv = wasm.peekPtr(this.ptr); + return pv ? capi.sqlite3_value_to_js( pv, true ) : undefined; + }.bind(Object.create(null)); + + + capi.sqlite3_preupdate_new_js = + (pDb, iCol)=>__newOldValue(pDb, iCol, 'sqlite3_preupdate_new'); + + + capi.sqlite3_preupdate_old_js = + (pDb, iCol)=>__newOldValue(pDb, iCol, 'sqlite3_preupdate_old'); + + + capi.sqlite3changeset_new_js = + (pChangesetIter, iCol) => __newOldValue(pChangesetIter, iCol, + 'sqlite3changeset_new'); + + + capi.sqlite3changeset_old_js = + (pChangesetIter, iCol)=>__newOldValue(pChangesetIter, iCol, + 'sqlite3changeset_old'); + + + const sqlite3 = { + WasmAllocError: WasmAllocError, + SQLite3Error: SQLite3Error, + capi, + util, + wasm, + config, + + version: Object.create(null), + + + client: undefined, + + + asyncPostInit: async function ff(){ + if(ff.isReady instanceof Promise) return ff.isReady; + let lia = sqlite3ApiBootstrap.initializersAsync; + delete sqlite3ApiBootstrap.initializersAsync; + const postInit = async ()=>{ + if(!sqlite3.__isUnderTest){ + + delete sqlite3.util; + + delete sqlite3.StructBinder; + } + return sqlite3; + }; + const catcher = (e)=>{ + config.error("an async sqlite3 initializer failed:",e); + throw e; + }; + if(!lia || !lia.length){ + return ff.isReady = postInit().catch(catcher); + } + lia = lia.map((f)=>{ + return (f instanceof Function) ? async x=>f(sqlite3) : f; + }); + lia.push(postInit); + let p = Promise.resolve(sqlite3); + while(lia.length) p = p.then(lia.shift()); + return ff.isReady = p.catch(catcher); + }, + + scriptInfo: undefined + }; + try{ + sqlite3ApiBootstrap.initializers.forEach((f)=>{ + f(sqlite3); + }); + }catch(e){ + + console.error("sqlite3 bootstrap initializer threw:",e); + throw e; + } + delete sqlite3ApiBootstrap.initializers; + sqlite3ApiBootstrap.sqlite3 = sqlite3; + return sqlite3; +}; + +globalThis.sqlite3ApiBootstrap.initializers = []; + +globalThis.sqlite3ApiBootstrap.initializersAsync = []; + +globalThis.sqlite3ApiBootstrap.defaultConfig = Object.create(null); + +globalThis.sqlite3ApiBootstrap.sqlite3 = undefined; + + + + +globalThis.WhWasmUtilInstaller = function(target){ + 'use strict'; + if(undefined===target.bigIntEnabled){ + target.bigIntEnabled = !!globalThis['BigInt64Array']; + } + + + const toss = (...args)=>{throw new Error(args.join(' '))}; + + if(!target.exports){ + Object.defineProperty(target, 'exports', { + enumerable: true, configurable: true, + get: ()=>(target.instance && target.instance.exports) + }); + } + + + + + + const ptrIR = target.pointerIR || 'i32'; + const ptrSizeof = target.ptrSizeof = + ('i32'===ptrIR ? 4 + : ('i64'===ptrIR + ? 8 : toss("Unhandled ptrSizeof:",ptrIR))); + + const cache = Object.create(null); + + cache.heapSize = 0; + + cache.memory = null; + + cache.freeFuncIndexes = []; + + cache.scopedAlloc = []; + + cache.utf8Decoder = new TextDecoder(); + cache.utf8Encoder = new TextEncoder('utf-8'); + + + target.sizeofIR = (n)=>{ + switch(n){ + case 'i8': return 1; + case 'i16': return 2; + case 'i32': case 'f32': case 'float': return 4; + case 'i64': case 'f64': case 'double': return 8; + case '*': return ptrSizeof; + default: + return (''+n).endsWith('*') ? ptrSizeof : undefined; + } + }; + + + const heapWrappers = function(){ + if(!cache.memory){ + cache.memory = (target.memory instanceof WebAssembly.Memory) + ? target.memory : target.exports.memory; + }else if(cache.heapSize === cache.memory.buffer.byteLength){ + return cache; + } + + const b = cache.memory.buffer; + cache.HEAP8 = new Int8Array(b); cache.HEAP8U = new Uint8Array(b); + cache.HEAP16 = new Int16Array(b); cache.HEAP16U = new Uint16Array(b); + cache.HEAP32 = new Int32Array(b); cache.HEAP32U = new Uint32Array(b); + if(target.bigIntEnabled){ + cache.HEAP64 = new BigInt64Array(b); cache.HEAP64U = new BigUint64Array(b); + } + cache.HEAP32F = new Float32Array(b); cache.HEAP64F = new Float64Array(b); + cache.heapSize = b.byteLength; + return cache; + }; + + + target.heap8 = ()=>heapWrappers().HEAP8; + + + target.heap8u = ()=>heapWrappers().HEAP8U; + + + target.heap16 = ()=>heapWrappers().HEAP16; + + + target.heap16u = ()=>heapWrappers().HEAP16U; + + + target.heap32 = ()=>heapWrappers().HEAP32; + + + target.heap32u = ()=>heapWrappers().HEAP32U; + + + target.heapForSize = function(n,unsigned = true){ + let ctor; + const c = (cache.memory && cache.heapSize === cache.memory.buffer.byteLength) + ? cache : heapWrappers(); + switch(n){ + case Int8Array: return c.HEAP8; case Uint8Array: return c.HEAP8U; + case Int16Array: return c.HEAP16; case Uint16Array: return c.HEAP16U; + case Int32Array: return c.HEAP32; case Uint32Array: return c.HEAP32U; + case 8: return unsigned ? c.HEAP8U : c.HEAP8; + case 16: return unsigned ? c.HEAP16U : c.HEAP16; + case 32: return unsigned ? c.HEAP32U : c.HEAP32; + case 64: + if(c.HEAP64) return unsigned ? c.HEAP64U : c.HEAP64; + break; + default: + if(target.bigIntEnabled){ + if(n===globalThis['BigUint64Array']) return c.HEAP64U; + else if(n===globalThis['BigInt64Array']) return c.HEAP64; + break; + } + } + toss("Invalid heapForSize() size: expecting 8, 16, 32,", + "or (if BigInt is enabled) 64."); + }; + + + target.functionTable = function(){ + return target.exports.__indirect_function_table; + + }; + + + target.functionEntry = function(fptr){ + const ft = target.functionTable(); + return fptr < ft.length ? ft.get(fptr) : undefined; + }; + + + target.jsFuncToWasm = function f(func, sig){ + + if(!f._){ + f._ = { + + sigTypes: Object.assign(Object.create(null),{ + i: 'i32', p: 'i32', P: 'i32', s: 'i32', + j: 'i64', f: 'f32', d: 'f64' + }), + + typeCodes: Object.assign(Object.create(null),{ + f64: 0x7c, f32: 0x7d, i64: 0x7e, i32: 0x7f + }), + + uleb128Encode: function(tgt, method, n){ + if(n<128) tgt[method](n); + else tgt[method]( (n % 128) | 128, n>>7); + }, + + rxJSig: /^(\w)\((\w*)\)$/, + + sigParams: function(sig){ + const m = f._.rxJSig.exec(sig); + return m ? m[2] : sig.substr(1); + }, + + letterType: (x)=>f._.sigTypes[x] || toss("Invalid signature letter:",x), + + + + pushSigType: (dest, letter)=>dest.push(f._.typeCodes[f._.letterType(letter)]) + }; + } + if('string'===typeof func){ + const x = sig; + sig = func; + func = x; + } + const sigParams = f._.sigParams(sig); + const wasmCode = [0x01, 0x60]; + f._.uleb128Encode(wasmCode, 'push', sigParams.length); + for(const x of sigParams) f._.pushSigType(wasmCode, x); + if('v'===sig[0]) wasmCode.push(0); + else{ + wasmCode.push(1); + f._.pushSigType(wasmCode, sig[0]); + } + f._.uleb128Encode(wasmCode, 'unshift', wasmCode.length); + wasmCode.unshift( + 0x00, 0x61, 0x73, 0x6d, + 0x01, 0x00, 0x00, 0x00, + 0x01 + ); + wasmCode.push( + 0x02, 0x07, + + 0x01, 0x01, 0x65, 0x01, 0x66, 0x00, 0x00, + 0x07, 0x05, + + 0x01, 0x01, 0x66, 0x00, 0x00 + ); + return (new WebAssembly.Instance( + new WebAssembly.Module(new Uint8Array(wasmCode)), { + e: { f: func } + })).exports['f']; + }; + + + const __installFunction = function f(func, sig, scoped){ + if(scoped && !cache.scopedAlloc.length){ + toss("No scopedAllocPush() scope is active."); + } + if('string'===typeof func){ + const x = sig; + sig = func; + func = x; + } + if('string'!==typeof sig || !(func instanceof Function)){ + toss("Invalid arguments: expecting (function,signature) "+ + "or (signature,function)."); + } + const ft = target.functionTable(); + const oldLen = ft.length; + let ptr; + while(cache.freeFuncIndexes.length){ + ptr = cache.freeFuncIndexes.pop(); + if(ft.get(ptr)){ + ptr = null; + continue; + }else{ + break; + } + } + if(!ptr){ + ptr = oldLen; + ft.grow(1); + } + try{ + + ft.set(ptr, func); + if(scoped){ + cache.scopedAlloc[cache.scopedAlloc.length-1].push(ptr); + } + return ptr; + }catch(e){ + if(!(e instanceof TypeError)){ + if(ptr===oldLen) cache.freeFuncIndexes.push(oldLen); + throw e; + } + } + + try { + const fptr = target.jsFuncToWasm(func, sig); + ft.set(ptr, fptr); + if(scoped){ + cache.scopedAlloc[cache.scopedAlloc.length-1].push(ptr); + } + }catch(e){ + if(ptr===oldLen) cache.freeFuncIndexes.push(oldLen); + throw e; + } + return ptr; + }; + + + target.installFunction = (func, sig)=>__installFunction(func, sig, false); + + + target.scopedInstallFunction = (func, sig)=>__installFunction(func, sig, true); + + + target.uninstallFunction = function(ptr){ + if(!ptr && 0!==ptr) return undefined; + const fi = cache.freeFuncIndexes; + const ft = target.functionTable(); + fi.push(ptr); + const rc = ft.get(ptr); + ft.set(ptr, null); + return rc; + }; + + + target.peek = function f(ptr, type='i8'){ + if(type.endsWith('*')) type = ptrIR; + const c = (cache.memory && cache.heapSize === cache.memory.buffer.byteLength) + ? cache : heapWrappers(); + const list = Array.isArray(ptr) ? [] : undefined; + let rc; + do{ + if(list) ptr = arguments[0].shift(); + switch(type){ + case 'i1': + case 'i8': rc = c.HEAP8[ptr>>0]; break; + case 'i16': rc = c.HEAP16[ptr>>1]; break; + case 'i32': rc = c.HEAP32[ptr>>2]; break; + case 'float': case 'f32': rc = c.HEAP32F[ptr>>2]; break; + case 'double': case 'f64': rc = Number(c.HEAP64F[ptr>>3]); break; + case 'i64': + if(target.bigIntEnabled){ + rc = BigInt(c.HEAP64[ptr>>3]); + break; + } + + default: + toss('Invalid type for peek():',type); + } + if(list) list.push(rc); + }while(list && arguments[0].length); + return list || rc; + }; + + + target.poke = function(ptr, value, type='i8'){ + if (type.endsWith('*')) type = ptrIR; + const c = (cache.memory && cache.heapSize === cache.memory.buffer.byteLength) + ? cache : heapWrappers(); + for(const p of (Array.isArray(ptr) ? ptr : [ptr])){ + switch (type) { + case 'i1': + case 'i8': c.HEAP8[p>>0] = value; continue; + case 'i16': c.HEAP16[p>>1] = value; continue; + case 'i32': c.HEAP32[p>>2] = value; continue; + case 'float': case 'f32': c.HEAP32F[p>>2] = value; continue; + case 'double': case 'f64': c.HEAP64F[p>>3] = value; continue; + case 'i64': + if(c.HEAP64){ + c.HEAP64[p>>3] = BigInt(value); + continue; + } + + default: + toss('Invalid type for poke(): ' + type); + } + } + return this; + }; + + + target.peekPtr = (...ptr)=>target.peek( (1===ptr.length ? ptr[0] : ptr), ptrIR ); + + + target.pokePtr = (ptr, value=0)=>target.poke(ptr, value, ptrIR); + + + target.peek8 = (...ptr)=>target.peek( (1===ptr.length ? ptr[0] : ptr), 'i8' ); + + target.poke8 = (ptr, value)=>target.poke(ptr, value, 'i8'); + + target.peek16 = (...ptr)=>target.peek( (1===ptr.length ? ptr[0] : ptr), 'i16' ); + + target.poke16 = (ptr, value)=>target.poke(ptr, value, 'i16'); + + target.peek32 = (...ptr)=>target.peek( (1===ptr.length ? ptr[0] : ptr), 'i32' ); + + target.poke32 = (ptr, value)=>target.poke(ptr, value, 'i32'); + + target.peek64 = (...ptr)=>target.peek( (1===ptr.length ? ptr[0] : ptr), 'i64' ); + + target.poke64 = (ptr, value)=>target.poke(ptr, value, 'i64'); + + target.peek32f = (...ptr)=>target.peek( (1===ptr.length ? ptr[0] : ptr), 'f32' ); + + target.poke32f = (ptr, value)=>target.poke(ptr, value, 'f32'); + + target.peek64f = (...ptr)=>target.peek( (1===ptr.length ? ptr[0] : ptr), 'f64' ); + + target.poke64f = (ptr, value)=>target.poke(ptr, value, 'f64'); + + + target.getMemValue = target.peek; + + target.getPtrValue = target.peekPtr; + + target.setMemValue = target.poke; + + target.setPtrValue = target.pokePtr; + + + target.isPtr32 = (ptr)=>('number'===typeof ptr && (ptr===(ptr|0)) && ptr>=0); + + + target.isPtr = target.isPtr32; + + + target.cstrlen = function(ptr){ + if(!ptr || !target.isPtr(ptr)) return null; + const h = heapWrappers().HEAP8U; + let pos = ptr; + for( ; h[pos] !== 0; ++pos ){} + return pos - ptr; + }; + + + const __SAB = ('undefined'===typeof SharedArrayBuffer) + ? function(){} : SharedArrayBuffer; + const __utf8Decode = function(arrayBuffer, begin, end){ + return cache.utf8Decoder.decode( + (arrayBuffer.buffer instanceof __SAB) + ? arrayBuffer.slice(begin, end) + : arrayBuffer.subarray(begin, end) + ); + }; + + + target.cstrToJs = function(ptr){ + const n = target.cstrlen(ptr); + return n ? __utf8Decode(heapWrappers().HEAP8U, ptr, ptr+n) : (null===n ? n : ""); + }; + + + target.jstrlen = function(str){ + + if('string'!==typeof str) return null; + const n = str.length; + let len = 0; + for(let i = 0; i < n; ++i){ + let u = str.charCodeAt(i); + if(u>=0xd800 && u<=0xdfff){ + u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF); + } + if(u<=0x7f) ++len; + else if(u<=0x7ff) len += 2; + else if(u<=0xffff) len += 3; + else len += 4; + } + return len; + }; + + + target.jstrcpy = function(jstr, tgt, offset = 0, maxBytes = -1, addNul = true){ + + if(!tgt || (!(tgt instanceof Int8Array) && !(tgt instanceof Uint8Array))){ + toss("jstrcpy() target must be an Int8Array or Uint8Array."); + } + if(maxBytes<0) maxBytes = tgt.length - offset; + if(!(maxBytes>0) || !(offset>=0)) return 0; + let i = 0, max = jstr.length; + const begin = offset, end = offset + maxBytes - (addNul ? 1 : 0); + for(; i < max && offset < end; ++i){ + let u = jstr.charCodeAt(i); + if(u>=0xd800 && u<=0xdfff){ + u = 0x10000 + ((u & 0x3FF) << 10) | (jstr.charCodeAt(++i) & 0x3FF); + } + if(u<=0x7f){ + if(offset >= end) break; + tgt[offset++] = u; + }else if(u<=0x7ff){ + if(offset + 1 >= end) break; + tgt[offset++] = 0xC0 | (u >> 6); + tgt[offset++] = 0x80 | (u & 0x3f); + }else if(u<=0xffff){ + if(offset + 2 >= end) break; + tgt[offset++] = 0xe0 | (u >> 12); + tgt[offset++] = 0x80 | ((u >> 6) & 0x3f); + tgt[offset++] = 0x80 | (u & 0x3f); + }else{ + if(offset + 3 >= end) break; + tgt[offset++] = 0xf0 | (u >> 18); + tgt[offset++] = 0x80 | ((u >> 12) & 0x3f); + tgt[offset++] = 0x80 | ((u >> 6) & 0x3f); + tgt[offset++] = 0x80 | (u & 0x3f); + } + } + if(addNul) tgt[offset++] = 0; + return offset - begin; + }; + + + target.cstrncpy = function(tgtPtr, srcPtr, n){ + if(!tgtPtr || !srcPtr) toss("cstrncpy() does not accept NULL strings."); + if(n<0) n = target.cstrlen(strPtr)+1; + else if(!(n>0)) return 0; + const heap = target.heap8u(); + let i = 0, ch; + for(; i < n && (ch = heap[srcPtr+i]); ++i){ + heap[tgtPtr+i] = ch; + } + if(i{ + return cache.utf8Encoder.encode(addNul ? (str+"\0") : str); + + + + + + + + + + + + + + + + + + + + + + + + + + }; + + const __affirmAlloc = (obj,funcName)=>{ + if(!(obj.alloc instanceof Function) || + !(obj.dealloc instanceof Function)){ + toss("Object is missing alloc() and/or dealloc() function(s)", + "required by",funcName+"()."); + } + }; + + const __allocCStr = function(jstr, returnWithLength, allocator, funcName){ + __affirmAlloc(target, funcName); + if('string'!==typeof jstr) return null; + if(0){ + const n = target.jstrlen(jstr), + ptr = allocator(n+1); + target.jstrcpy(jstr, target.heap8u(), ptr, n+1, true); + return returnWithLength ? [ptr, n] : ptr; + }else{ + const u = cache.utf8Encoder.encode(jstr), + ptr = allocator(u.length+1), + heap = heapWrappers().HEAP8U; + heap.set(u, ptr); + heap[ptr + u.length] = 0; + return returnWithLength ? [ptr, u.length] : ptr; + } + }; + + + target.allocCString = + (jstr, returnWithLength=false)=>__allocCStr(jstr, returnWithLength, + target.alloc, 'allocCString()'); + + + target.scopedAllocPush = function(){ + __affirmAlloc(target, 'scopedAllocPush'); + const a = []; + cache.scopedAlloc.push(a); + return a; + }; + + + target.scopedAllocPop = function(state){ + __affirmAlloc(target, 'scopedAllocPop'); + const n = arguments.length + ? cache.scopedAlloc.indexOf(state) + : cache.scopedAlloc.length-1; + if(n<0) toss("Invalid state object for scopedAllocPop()."); + if(0===arguments.length) state = cache.scopedAlloc[n]; + cache.scopedAlloc.splice(n,1); + for(let p; (p = state.pop()); ){ + if(target.functionEntry(p)){ + + target.uninstallFunction(p); + } + else target.dealloc(p); + } + }; + + + target.scopedAlloc = function(n){ + if(!cache.scopedAlloc.length){ + toss("No scopedAllocPush() scope is active."); + } + const p = target.alloc(n); + cache.scopedAlloc[cache.scopedAlloc.length-1].push(p); + return p; + }; + + Object.defineProperty(target.scopedAlloc, 'level', { + configurable: false, enumerable: false, + get: ()=>cache.scopedAlloc.length, + set: ()=>toss("The 'active' property is read-only.") + }); + + + target.scopedAllocCString = + (jstr, returnWithLength=false)=>__allocCStr(jstr, returnWithLength, + target.scopedAlloc, 'scopedAllocCString()'); + + + const __allocMainArgv = function(isScoped, list){ + const pList = target[ + isScoped ? 'scopedAlloc' : 'alloc' + ]((list.length + 1) * target.ptrSizeof); + let i = 0; + list.forEach((e)=>{ + target.pokePtr(pList + (target.ptrSizeof * i++), + target[ + isScoped ? 'scopedAllocCString' : 'allocCString' + ](""+e)); + }); + target.pokePtr(pList + (target.ptrSizeof * i), 0); + return pList; + }; + + + target.scopedAllocMainArgv = (list)=>__allocMainArgv(true, list); + + + target.allocMainArgv = (list)=>__allocMainArgv(false, list); + + + target.cArgvToJs = (argc, pArgv)=>{ + const list = []; + for(let i = 0; i < argc; ++i){ + const arg = target.peekPtr(pArgv + (target.ptrSizeof * i)); + list.push( arg ? target.cstrToJs(arg) : null ); + } + return list; + }; + + + target.scopedAllocCall = function(func){ + target.scopedAllocPush(); + try{ return func() } finally{ target.scopedAllocPop() } + }; + + + const __allocPtr = function(howMany, safePtrSize, method){ + __affirmAlloc(target, method); + const pIr = safePtrSize ? 'i64' : ptrIR; + let m = target[method](howMany * (safePtrSize ? 8 : ptrSizeof)); + target.poke(m, 0, pIr) + if(1===howMany){ + return m; + } + const a = [m]; + for(let i = 1; i < howMany; ++i){ + m += (safePtrSize ? 8 : ptrSizeof); + a[i] = m; + target.poke(m, 0, pIr); + } + return a; + }; + + + target.allocPtr = + (howMany=1, safePtrSize=true)=>__allocPtr(howMany, safePtrSize, 'alloc'); + + + target.scopedAllocPtr = + (howMany=1, safePtrSize=true)=>__allocPtr(howMany, safePtrSize, 'scopedAlloc'); + + + target.xGet = function(name){ + return target.exports[name] || toss("Cannot find exported symbol:",name); + }; + + const __argcMismatch = + (f,n)=>toss(f+"() requires",n,"argument(s)."); + + + target.xCall = function(fname, ...args){ + const f = target.xGet(fname); + if(!(f instanceof Function)) toss("Exported symbol",fname,"is not a function."); + if(f.length!==args.length) __argcMismatch(fname,f.length) + ; + return (2===arguments.length && Array.isArray(arguments[1])) + ? f.apply(null, arguments[1]) + : f.apply(null, args); + }; + + + cache.xWrap = Object.create(null); + cache.xWrap.convert = Object.create(null); + + cache.xWrap.convert.arg = new Map; + + cache.xWrap.convert.result = new Map; + const xArg = cache.xWrap.convert.arg, xResult = cache.xWrap.convert.result; + + if(target.bigIntEnabled){ + xArg.set('i64', (i)=>BigInt(i)); + } + const __xArgPtr = 'i32' === ptrIR + ? ((i)=>(i | 0)) : ((i)=>(BigInt(i) | BigInt(0))); + xArg.set('i32', __xArgPtr ) + .set('i16', (i)=>((i | 0) & 0xFFFF)) + .set('i8', (i)=>((i | 0) & 0xFF)) + .set('f32', (i)=>Number(i).valueOf()) + .set('float', xArg.get('f32')) + .set('f64', xArg.get('f32')) + .set('double', xArg.get('f64')) + .set('int', xArg.get('i32')) + .set('null', (i)=>i) + .set(null, xArg.get('null')) + .set('**', __xArgPtr) + .set('*', __xArgPtr); + xResult.set('*', __xArgPtr) + .set('pointer', __xArgPtr) + .set('number', (v)=>Number(v)) + .set('void', (v)=>undefined) + .set('null', (v)=>v) + .set(null, xResult.get('null')); + + { + const copyToResult = ['i8', 'i16', 'i32', 'int', + 'f32', 'float', 'f64', 'double']; + if(target.bigIntEnabled) copyToResult.push('i64'); + const adaptPtr = xArg.get(ptrIR); + for(const t of copyToResult){ + xArg.set(t+'*', adaptPtr); + xResult.set(t+'*', adaptPtr); + xResult.set(t, (xArg.get(t) || toss("Missing arg converter:",t))); + } + } + + + const __xArgString = function(v){ + if('string'===typeof v) return target.scopedAllocCString(v); + return v ? __xArgPtr(v) : null; + }; + xArg.set('string', __xArgString) + .set('utf8', __xArgString) + .set('pointer', __xArgString); + + + xResult.set('string', (i)=>target.cstrToJs(i)) + .set('utf8', xResult.get('string')) + .set('string:dealloc', (i)=>{ + try { return i ? target.cstrToJs(i) : null } + finally{ target.dealloc(i) } + }) + .set('utf8:dealloc', xResult.get('string:dealloc')) + .set('json', (i)=>JSON.parse(target.cstrToJs(i))) + .set('json:dealloc', (i)=>{ + try{ return i ? JSON.parse(target.cstrToJs(i)) : null } + finally{ target.dealloc(i) } + }); + + + const AbstractArgAdapter = class { + constructor(opt){ + this.name = opt.name || 'unnamed adapter'; + } + + convertArg(v,argv,argIndex){ + toss("AbstractArgAdapter must be subclassed."); + } + }; + + + xArg.FuncPtrAdapter = class FuncPtrAdapter extends AbstractArgAdapter { + constructor(opt) { + super(opt); + if(xArg.FuncPtrAdapter.warnOnUse){ + console.warn('xArg.FuncPtrAdapter is an internal-only API', + 'and is not intended to be invoked from', + 'client-level code. Invoked with:',opt); + } + this.name = opt.name || "unnamed"; + this.signature = opt.signature; + if(opt.contextKey instanceof Function){ + this.contextKey = opt.contextKey; + if(!opt.bindScope) opt.bindScope = 'context'; + } + this.bindScope = opt.bindScope + || toss("FuncPtrAdapter options requires a bindScope (explicit or implied)."); + if(FuncPtrAdapter.bindScopes.indexOf(opt.bindScope)<0){ + toss("Invalid options.bindScope ("+opt.bindMod+") for FuncPtrAdapter. "+ + "Expecting one of: ("+FuncPtrAdapter.bindScopes.join(', ')+')'); + } + this.isTransient = 'transient'===this.bindScope; + this.isContext = 'context'===this.bindScope; + this.isPermanent = 'permanent'===this.bindScope; + this.singleton = ('singleton'===this.bindScope) ? [] : undefined; + + this.callProxy = (opt.callProxy instanceof Function) + ? opt.callProxy : undefined; + } + + + + + contextKey(argv,argIndex){ + return this; + } + + + contextMap(key){ + const cm = (this.__cmap || (this.__cmap = new Map)); + let rc = cm.get(key); + if(undefined===rc) cm.set(key, (rc = [])); + return rc; + } + + + convertArg(v,argv,argIndex){ + + let pair = this.singleton; + if(!pair && this.isContext){ + pair = this.contextMap(this.contextKey(argv,argIndex)); + + } + if(pair && pair[0]===v) return pair[1]; + if(v instanceof Function){ + + + if(this.callProxy) v = this.callProxy(v); + const fp = __installFunction(v, this.signature, this.isTransient); + if(FuncPtrAdapter.debugFuncInstall){ + FuncPtrAdapter.debugOut("FuncPtrAdapter installed", this, + this.contextKey(argv,argIndex), '@'+fp, v); + } + if(pair){ + + if(pair[1]){ + if(FuncPtrAdapter.debugFuncInstall){ + FuncPtrAdapter.debugOut("FuncPtrAdapter uninstalling", this, + this.contextKey(argv,argIndex), '@'+pair[1], v); + } + try{ + + cache.scopedAlloc[cache.scopedAlloc.length-1].push(pair[1]); + } + catch(e){} + } + pair[0] = v; + pair[1] = fp; + } + return fp; + }else if(target.isPtr(v) || null===v || undefined===v){ + + if(pair && pair[1] && pair[1]!==v){ + + if(FuncPtrAdapter.debugFuncInstall){ + FuncPtrAdapter.debugOut("FuncPtrAdapter uninstalling", this, + this.contextKey(argv,argIndex), '@'+pair[1], v); + } + try{ cache.scopedAlloc[cache.scopedAlloc.length-1].push(pair[1]) } + catch(e){} + pair[0] = pair[1] = (v | 0); + } + return v || 0; + }else{ + throw new TypeError("Invalid FuncPtrAdapter argument type. "+ + "Expecting a function pointer or a "+ + (this.name ? this.name+' ' : '')+ + "function matching signature "+ + this.signature+"."); + } + } + }; + + + xArg.FuncPtrAdapter.warnOnUse = false; + + + xArg.FuncPtrAdapter.debugFuncInstall = false; + + + xArg.FuncPtrAdapter.debugOut = console.debug.bind(console); + + xArg.FuncPtrAdapter.bindScopes = [ + 'transient', 'context', 'singleton', 'permanent' + ]; + + const __xArgAdapterCheck = + (t)=>xArg.get(t) || toss("Argument adapter not found:",t); + + const __xResultAdapterCheck = + (t)=>xResult.get(t) || toss("Result adapter not found:",t); + + cache.xWrap.convertArg = (t,...args)=>__xArgAdapterCheck(t)(...args); + cache.xWrap.convertArgNoCheck = (t,...args)=>xArg.get(t)(...args); + + cache.xWrap.convertResult = + (t,v)=>(null===t ? v : (t ? __xResultAdapterCheck(t)(v) : undefined)); + cache.xWrap.convertResultNoCheck = + (t,v)=>(null===t ? v : (t ? xResult.get(t)(v) : undefined)); + + + target.xWrap = function(fArg, resultType, ...argTypes){ + if(3===arguments.length && Array.isArray(arguments[2])){ + argTypes = arguments[2]; + } + if(target.isPtr(fArg)){ + fArg = target.functionEntry(fArg) + || toss("Function pointer not found in WASM function table."); + } + const fIsFunc = (fArg instanceof Function); + const xf = fIsFunc ? fArg : target.xGet(fArg); + if(fIsFunc) fArg = xf.name || 'unnamed function'; + if(argTypes.length!==xf.length) __argcMismatch(fArg, xf.length); + if((null===resultType) && 0===xf.length){ + + return xf; + } + ; + if(undefined!==resultType && null!==resultType) __xResultAdapterCheck(resultType); + for(const t of argTypes){ + if(t instanceof AbstractArgAdapter) xArg.set(t, (...args)=>t.convertArg(...args)); + else __xArgAdapterCheck(t); + } + const cxw = cache.xWrap; + if(0===xf.length){ + + return (...args)=>(args.length + ? __argcMismatch(fArg, xf.length) + : cxw.convertResult(resultType, xf.call(null))); + } + return function(...args){ + if(args.length!==xf.length) __argcMismatch(fArg, xf.length); + const scope = target.scopedAllocPush(); + try{ + + for(const i in args) args[i] = cxw.convertArgNoCheck( + argTypes[i], args[i], args, i + ); + return cxw.convertResultNoCheck(resultType, xf.apply(null,args)); + }finally{ + target.scopedAllocPop(scope); + } + }; + }; + + + const __xAdapter = function(func, argc, typeName, adapter, modeName, xcvPart){ + if('string'===typeof typeName){ + if(1===argc) return xcvPart.get(typeName); + else if(2===argc){ + if(!adapter){ + delete xcvPart.get(typeName); + return func; + }else if(!(adapter instanceof Function)){ + toss(modeName,"requires a function argument."); + } + xcvPart.set(typeName, adapter); + return func; + } + } + toss("Invalid arguments to",modeName); + }; + + + target.xWrap.resultAdapter = function f(typeName, adapter){ + return __xAdapter(f, arguments.length, typeName, adapter, + 'resultAdapter()', xResult); + }; + + + target.xWrap.argAdapter = function f(typeName, adapter){ + return __xAdapter(f, arguments.length, typeName, adapter, + 'argAdapter()', xArg); + }; + + target.xWrap.FuncPtrAdapter = xArg.FuncPtrAdapter; + + + target.xCallWrapped = function(fArg, resultType, argTypes, ...args){ + if(Array.isArray(arguments[3])) args = arguments[3]; + return target.xWrap(fArg, resultType, argTypes||[]).apply(null, args||[]); + }; + + + target.xWrap.testConvertArg = cache.xWrap.convertArg; + + + target.xWrap.testConvertResult = cache.xWrap.convertResult; + + return target; +}; + + +globalThis.WhWasmUtilInstaller.yawl = function(config){ + const wfetch = ()=>fetch(config.uri, {credentials: 'same-origin'}); + const wui = this; + const finalThen = function(arg){ + + if(config.wasmUtilTarget){ + const toss = (...args)=>{throw new Error(args.join(' '))}; + const tgt = config.wasmUtilTarget; + tgt.module = arg.module; + tgt.instance = arg.instance; + + if(!tgt.instance.exports.memory){ + + tgt.memory = (config.imports && config.imports.env + && config.imports.env.memory) + || toss("Missing 'memory' object!"); + } + if(!tgt.alloc && arg.instance.exports.malloc){ + const exports = arg.instance.exports; + tgt.alloc = function(n){ + return exports.malloc(n) || toss("Allocation of",n,"bytes failed."); + }; + tgt.dealloc = function(m){exports.free(m)}; + } + wui(tgt); + } + if(config.onload) config.onload(arg,config); + return arg ; + }; + const loadWasm = WebAssembly.instantiateStreaming + ? function loadWasmStreaming(){ + return WebAssembly.instantiateStreaming(wfetch(), config.imports||{}) + .then(finalThen); + } + : function loadWasmOldSchool(){ + return wfetch() + .then(response => response.arrayBuffer()) + .then(bytes => WebAssembly.instantiate(bytes, config.imports||{})) + .then(finalThen); + }; + return loadWasm; +}.bind(globalThis.WhWasmUtilInstaller); + + + +'use strict'; +globalThis.Jaccwabyt = function StructBinderFactory(config){ + + + + const toss = (...args)=>{throw new Error(args.join(' '))}; + + + if(!(config.heap instanceof WebAssembly.Memory) + && !(config.heap instanceof Function)){ + toss("config.heap must be WebAssembly.Memory instance or a function."); + } + ['alloc','dealloc'].forEach(function(k){ + (config[k] instanceof Function) || + toss("Config option '"+k+"' must be a function."); + }); + const SBF = StructBinderFactory; + const heap = (config.heap instanceof Function) + ? config.heap : (()=>new Uint8Array(config.heap.buffer)), + alloc = config.alloc, + dealloc = config.dealloc, + log = config.log || console.log.bind(console), + memberPrefix = (config.memberPrefix || ""), + memberSuffix = (config.memberSuffix || ""), + bigIntEnabled = (undefined===config.bigIntEnabled + ? !!globalThis['BigInt64Array'] : !!config.bigIntEnabled), + BigInt = globalThis['BigInt'], + BigInt64Array = globalThis['BigInt64Array'], + + ptrSizeof = config.ptrSizeof || 4, + ptrIR = config.ptrIR || 'i32' + ; + + if(!SBF.debugFlags){ + SBF.__makeDebugFlags = function(deriveFrom=null){ + + if(deriveFrom && deriveFrom.__flags) deriveFrom = deriveFrom.__flags; + const f = function f(flags){ + if(0===arguments.length){ + return f.__flags; + } + if(flags<0){ + delete f.__flags.getter; delete f.__flags.setter; + delete f.__flags.alloc; delete f.__flags.dealloc; + }else{ + f.__flags.getter = 0!==(0x01 & flags); + f.__flags.setter = 0!==(0x02 & flags); + f.__flags.alloc = 0!==(0x04 & flags); + f.__flags.dealloc = 0!==(0x08 & flags); + } + return f._flags; + }; + Object.defineProperty(f,'__flags', { + iterable: false, writable: false, + value: Object.create(deriveFrom) + }); + if(!deriveFrom) f(0); + return f; + }; + SBF.debugFlags = SBF.__makeDebugFlags(); + } + + const isLittleEndian = (function() { + const buffer = new ArrayBuffer(2); + new DataView(buffer).setInt16(0, 256, true ); + + return new Int16Array(buffer)[0] === 256; + })(); + + + + const isFuncSig = (s)=>'('===s[1]; + + const isPtrSig = (s)=>'p'===s || 'P'===s; + const isAutoPtrSig = (s)=>'P'===s ; + const sigLetter = (s)=>isFuncSig(s) ? 'p' : s[0]; + + const sigIR = function(s){ + switch(sigLetter(s)){ + case 'c': case 'C': return 'i8'; + case 'i': return 'i32'; + case 'p': case 'P': case 's': return ptrIR; + case 'j': return 'i64'; + case 'f': return 'float'; + case 'd': return 'double'; + } + toss("Unhandled signature IR:",s); + }; + + const affirmBigIntArray = BigInt64Array + ? ()=>true : ()=>toss('BigInt64Array is not available.'); + + const sigDVGetter = function(s){ + switch(sigLetter(s)) { + case 'p': case 'P': case 's': { + switch(ptrSizeof){ + case 4: return 'getInt32'; + case 8: return affirmBigIntArray() && 'getBigInt64'; + } + break; + } + case 'i': return 'getInt32'; + case 'c': return 'getInt8'; + case 'C': return 'getUint8'; + case 'j': return affirmBigIntArray() && 'getBigInt64'; + case 'f': return 'getFloat32'; + case 'd': return 'getFloat64'; + } + toss("Unhandled DataView getter for signature:",s); + }; + + const sigDVSetter = function(s){ + switch(sigLetter(s)){ + case 'p': case 'P': case 's': { + switch(ptrSizeof){ + case 4: return 'setInt32'; + case 8: return affirmBigIntArray() && 'setBigInt64'; + } + break; + } + case 'i': return 'setInt32'; + case 'c': return 'setInt8'; + case 'C': return 'setUint8'; + case 'j': return affirmBigIntArray() && 'setBigInt64'; + case 'f': return 'setFloat32'; + case 'd': return 'setFloat64'; + } + toss("Unhandled DataView setter for signature:",s); + }; + + const sigDVSetWrapper = function(s){ + switch(sigLetter(s)) { + case 'i': case 'f': case 'c': case 'C': case 'd': return Number; + case 'j': return affirmBigIntArray() && BigInt; + case 'p': case 'P': case 's': + switch(ptrSizeof){ + case 4: return Number; + case 8: return affirmBigIntArray() && BigInt; + } + break; + } + toss("Unhandled DataView set wrapper for signature:",s); + }; + + + const sPropName = (s,k)=>s+'::'+k; + + const __propThrowOnSet = function(structName,propName){ + return ()=>toss(sPropName(structName,propName),"is read-only."); + }; + + + const __instancePointerMap = new WeakMap(); + + + const xPtrPropName = '(pointer-is-external)'; + + + const __freeStruct = function(ctor, obj, m){ + if(!m) m = __instancePointerMap.get(obj); + if(m) { + __instancePointerMap.delete(obj); + if(Array.isArray(obj.ondispose)){ + let x; + while((x = obj.ondispose.shift())){ + try{ + if(x instanceof Function) x.call(obj); + else if(x instanceof StructType) x.dispose(); + else if('number' === typeof x) dealloc(x); + + + }catch(e){ + console.warn("ondispose() for",ctor.structName,'@', + m,'threw. NOT propagating it.',e); + } + } + }else if(obj.ondispose instanceof Function){ + try{obj.ondispose()} + catch(e){ + + console.warn("ondispose() for",ctor.structName,'@', + m,'threw. NOT propagating it.',e); + } + } + delete obj.ondispose; + if(ctor.debugFlags.__flags.dealloc){ + log("debug.dealloc:",(obj[xPtrPropName]?"EXTERNAL":""), + ctor.structName,"instance:", + ctor.structInfo.sizeof,"bytes @"+m); + } + if(!obj[xPtrPropName]) dealloc(m); + } + }; + + + const rop = (v)=>{return {configurable: false, writable: false, + iterable: false, value: v}}; + + + const __allocStruct = function(ctor, obj, m){ + let fill = !m; + if(m) Object.defineProperty(obj, xPtrPropName, rop(m)); + else{ + m = alloc(ctor.structInfo.sizeof); + if(!m) toss("Allocation of",ctor.structName,"structure failed."); + } + try { + if(ctor.debugFlags.__flags.alloc){ + log("debug.alloc:",(fill?"":"EXTERNAL"), + ctor.structName,"instance:", + ctor.structInfo.sizeof,"bytes @"+m); + } + if(fill) heap().fill(0, m, m + ctor.structInfo.sizeof); + __instancePointerMap.set(obj, m); + }catch(e){ + __freeStruct(ctor, obj, m); + throw e; + } + }; + + const __memoryDump = function(){ + const p = this.pointer; + return p + ? new Uint8Array(heap().slice(p, p+this.structInfo.sizeof)) + : null; + }; + + const __memberKey = (k)=>memberPrefix + k + memberSuffix; + const __memberKeyProp = rop(__memberKey); + + + const __lookupMember = function(structInfo, memberName, tossIfNotFound=true){ + let m = structInfo.members[memberName]; + if(!m && (memberPrefix || memberSuffix)){ + + for(const v of Object.values(structInfo.members)){ + if(v.key===memberName){ m = v; break; } + } + if(!m && tossIfNotFound){ + toss(sPropName(structInfo.name,memberName),'is not a mapped struct member.'); + } + } + return m; + }; + + + const __memberSignature = function f(obj,memberName,emscriptenFormat=false){ + if(!f._) f._ = (x)=>x.replace(/[^vipPsjrdcC]/g,"").replace(/[pPscC]/g,'i'); + const m = __lookupMember(obj.structInfo, memberName, true); + return emscriptenFormat ? f._(m.signature) : m.signature; + }; + + const __ptrPropDescriptor = { + configurable: false, enumerable: false, + get: function(){return __instancePointerMap.get(this)}, + set: ()=>toss("Cannot assign the 'pointer' property of a struct.") + + + + }; + + + const __structMemberKeys = rop(function(){ + const a = []; + for(const k of Object.keys(this.structInfo.members)){ + a.push(this.memberKey(k)); + } + return a; + }); + + const __utf8Decoder = new TextDecoder('utf-8'); + const __utf8Encoder = new TextEncoder(); + + const __SAB = ('undefined'===typeof SharedArrayBuffer) + ? function(){} : SharedArrayBuffer; + const __utf8Decode = function(arrayBuffer, begin, end){ + return __utf8Decoder.decode( + (arrayBuffer.buffer instanceof __SAB) + ? arrayBuffer.slice(begin, end) + : arrayBuffer.subarray(begin, end) + ); + }; + + const __memberIsString = function(obj,memberName, tossIfNotFound=false){ + const m = __lookupMember(obj.structInfo, memberName, tossIfNotFound); + return (m && 1===m.signature.length && 's'===m.signature[0]) ? m : false; + }; + + + const __affirmCStringSignature = function(member){ + if('s'===member.signature) return; + toss("Invalid member type signature for C-string value:", + JSON.stringify(member)); + }; + + + const __memberToJsString = function f(obj,memberName){ + const m = __lookupMember(obj.structInfo, memberName, true); + __affirmCStringSignature(m); + const addr = obj[m.key]; + + if(!addr) return null; + let pos = addr; + const mem = heap(); + for( ; mem[pos]!==0; ++pos ) { + + }; + + return (addr===pos) ? "" : __utf8Decode(mem, addr, pos); + }; + + + const __addOnDispose = function(obj, ...v){ + if(obj.ondispose){ + if(!Array.isArray(obj.ondispose)){ + obj.ondispose = [obj.ondispose]; + } + }else{ + obj.ondispose = []; + } + obj.ondispose.push(...v); + }; + + + const __allocCString = function(str){ + const u = __utf8Encoder.encode(str); + const mem = alloc(u.length+1); + if(!mem) toss("Allocation error while duplicating string:",str); + const h = heap(); + + + h.set(u, mem); + h[mem + u.length] = 0; + + return mem; + }; + + + const __setMemberCString = function(obj, memberName, str){ + const m = __lookupMember(obj.structInfo, memberName, true); + __affirmCStringSignature(m); + + const mem = __allocCString(str); + obj[m.key] = mem; + __addOnDispose(obj, mem); + return obj; + }; + + + const StructType = function ctor(structName, structInfo){ + if(arguments[2]!==rop){ + toss("Do not call the StructType constructor", + "from client-level code."); + } + Object.defineProperties(this,{ + + structName: rop(structName), + structInfo: rop(structInfo) + }); + }; + + + StructType.prototype = Object.create(null, { + dispose: rop(function(){__freeStruct(this.constructor, this)}), + lookupMember: rop(function(memberName, tossIfNotFound=true){ + return __lookupMember(this.structInfo, memberName, tossIfNotFound); + }), + memberToJsString: rop(function(memberName){ + return __memberToJsString(this, memberName); + }), + memberIsString: rop(function(memberName, tossIfNotFound=true){ + return __memberIsString(this, memberName, tossIfNotFound); + }), + memberKey: __memberKeyProp, + memberKeys: __structMemberKeys, + memberSignature: rop(function(memberName, emscriptenFormat=false){ + return __memberSignature(this, memberName, emscriptenFormat); + }), + memoryDump: rop(__memoryDump), + pointer: __ptrPropDescriptor, + setMemberCString: rop(function(memberName, str){ + return __setMemberCString(this, memberName, str); + }) + }); + + Object.assign(StructType.prototype,{ + addOnDispose: function(...v){ + __addOnDispose(this,...v); + return this; + } + }); + + + Object.defineProperties(StructType, { + allocCString: rop(__allocCString), + isA: rop((v)=>v instanceof StructType), + hasExternalPointer: rop((v)=>(v instanceof StructType) && !!v[xPtrPropName]), + memberKey: __memberKeyProp + }); + + const isNumericValue = (v)=>Number.isFinite(v) || (v instanceof (BigInt || Number)); + + + const makeMemberWrapper = function f(ctor,name, descr){ + if(!f._){ + + f._ = {getters: {}, setters: {}, sw:{}}; + const a = ['i','c','C','p','P','s','f','d','v()']; + if(bigIntEnabled) a.push('j'); + a.forEach(function(v){ + + f._.getters[v] = sigDVGetter(v) ; + f._.setters[v] = sigDVSetter(v) ; + f._.sw[v] = sigDVSetWrapper(v) ; + }); + const rxSig1 = /^[ipPsjfdcC]$/, + rxSig2 = /^[vipPsjfdcC]\([ipPsjfdcC]*\)$/; + f.sigCheck = function(obj, name, key,sig){ + if(Object.prototype.hasOwnProperty.call(obj, key)){ + toss(obj.structName,'already has a property named',key+'.'); + } + rxSig1.test(sig) || rxSig2.test(sig) + || toss("Malformed signature for", + sPropName(obj.structName,name)+":",sig); + }; + } + const key = ctor.memberKey(name); + f.sigCheck(ctor.prototype, name, key, descr.signature); + descr.key = key; + descr.name = name; + const sigGlyph = sigLetter(descr.signature); + const xPropName = sPropName(ctor.prototype.structName,key); + const dbg = ctor.prototype.debugFlags.__flags; + + const prop = Object.create(null); + prop.configurable = false; + prop.enumerable = false; + prop.get = function(){ + if(dbg.getter){ + log("debug.getter:",f._.getters[sigGlyph],"for", sigIR(sigGlyph), + xPropName,'@', this.pointer,'+',descr.offset,'sz',descr.sizeof); + } + let rc = ( + new DataView(heap().buffer, this.pointer + descr.offset, descr.sizeof) + )[f._.getters[sigGlyph]](0, isLittleEndian); + if(dbg.getter) log("debug.getter:",xPropName,"result =",rc); + return rc; + }; + if(descr.readOnly){ + prop.set = __propThrowOnSet(ctor.prototype.structName,key); + }else{ + prop.set = function(v){ + if(dbg.setter){ + log("debug.setter:",f._.setters[sigGlyph],"for", sigIR(sigGlyph), + xPropName,'@', this.pointer,'+',descr.offset,'sz',descr.sizeof, v); + } + if(!this.pointer){ + toss("Cannot set struct property on disposed instance."); + } + if(null===v) v = 0; + else while(!isNumericValue(v)){ + if(isAutoPtrSig(descr.signature) && (v instanceof StructType)){ + + v = v.pointer || 0; + if(dbg.setter) log("debug.setter:",xPropName,"resolved to",v); + break; + } + toss("Invalid value for pointer-type",xPropName+'.'); + } + ( + new DataView(heap().buffer, this.pointer + descr.offset, descr.sizeof) + )[f._.setters[sigGlyph]](0, f._.sw[sigGlyph](v), isLittleEndian); + }; + } + Object.defineProperty(ctor.prototype, key, prop); + }; + + + const StructBinder = function StructBinder(structName, structInfo){ + if(1===arguments.length){ + structInfo = structName; + structName = structInfo.name; + }else if(!structInfo.name){ + structInfo.name = structName; + } + if(!structName) toss("Struct name is required."); + let lastMember = false; + Object.keys(structInfo.members).forEach((k)=>{ + + const m = structInfo.members[k]; + if(!m.sizeof) toss(structName,"member",k,"is missing sizeof."); + else if(m.sizeof===1){ + (m.signature === 'c' || m.signature === 'C') || + toss("Unexpected sizeof==1 member", + sPropName(structInfo.name,k), + "with signature",m.signature); + }else{ + + + if(0!==(m.sizeof%4)){ + console.warn("Invalid struct member description =",m,"from",structInfo); + toss(structName,"member",k,"sizeof is not aligned. sizeof="+m.sizeof); + } + if(0!==(m.offset%4)){ + console.warn("Invalid struct member description =",m,"from",structInfo); + toss(structName,"member",k,"offset is not aligned. offset="+m.offset); + } + } + if(!lastMember || lastMember.offset < m.offset) lastMember = m; + }); + if(!lastMember) toss("No member property descriptions found."); + else if(structInfo.sizeof < lastMember.offset+lastMember.sizeof){ + toss("Invalid struct config:",structName, + "max member offset ("+lastMember.offset+") ", + "extends past end of struct (sizeof="+structInfo.sizeof+")."); + } + const debugFlags = rop(SBF.__makeDebugFlags(StructBinder.debugFlags)); + + const StructCtor = function StructCtor(externalMemory){ + if(!(this instanceof StructCtor)){ + toss("The",structName,"constructor may only be called via 'new'."); + }else if(arguments.length){ + if(externalMemory!==(externalMemory|0) || externalMemory<=0){ + toss("Invalid pointer value for",structName,"constructor."); + } + __allocStruct(StructCtor, this, externalMemory); + }else{ + __allocStruct(StructCtor, this); + } + }; + Object.defineProperties(StructCtor,{ + debugFlags: debugFlags, + isA: rop((v)=>v instanceof StructCtor), + memberKey: __memberKeyProp, + memberKeys: __structMemberKeys, + methodInfoForKey: rop(function(mKey){ + }), + structInfo: rop(structInfo), + structName: rop(structName) + }); + StructCtor.prototype = new StructType(structName, structInfo, rop); + Object.defineProperties(StructCtor.prototype,{ + debugFlags: debugFlags, + constructor: rop(StructCtor) + + }); + Object.keys(structInfo.members).forEach( + (name)=>makeMemberWrapper(StructCtor, name, structInfo.members[name]) + ); + return StructCtor; + }; + StructBinder.StructType = StructType; + StructBinder.config = config; + StructBinder.allocCString = __allocCString; + if(!StructBinder.debugFlags){ + StructBinder.debugFlags = SBF.__makeDebugFlags(SBF.debugFlags); + } + return StructBinder; +}; + + + +globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ + 'use strict'; + const toss = (...args)=>{throw new Error(args.join(' '))}; + const toss3 = sqlite3.SQLite3Error.toss; + const capi = sqlite3.capi, wasm = sqlite3.wasm, util = sqlite3.util; + globalThis.WhWasmUtilInstaller(wasm); + delete globalThis.WhWasmUtilInstaller; + + if(0){ + + + const dealloc = wasm.exports[sqlite3.config.deallocExportName]; + const nFunc = wasm.functionTable().length; + let i; + for(i = 0; i < nFunc; ++i){ + const e = wasm.functionEntry(i); + if(dealloc === e){ + capi.SQLITE_WASM_DEALLOC = i; + break; + } + } + if(dealloc !== wasm.functionEntry(capi.SQLITE_WASM_DEALLOC)){ + toss("Internal error: cannot find function pointer for SQLITE_WASM_DEALLOC."); + } + } + + + wasm.bindingSignatures = [ + + ["sqlite3_aggregate_context","void*", "sqlite3_context*", "int"], + + + ["sqlite3_bind_double","int", "sqlite3_stmt*", "int", "f64"], + ["sqlite3_bind_int","int", "sqlite3_stmt*", "int", "int"], + ["sqlite3_bind_null",undefined, "sqlite3_stmt*", "int"], + ["sqlite3_bind_parameter_count", "int", "sqlite3_stmt*"], + ["sqlite3_bind_parameter_index","int", "sqlite3_stmt*", "string"], + ["sqlite3_bind_pointer", "int", + "sqlite3_stmt*", "int", "*", "string:static", "*"], + ["sqlite3_busy_handler","int", [ + "sqlite3*", + new wasm.xWrap.FuncPtrAdapter({ + signature: 'i(pi)', + contextKey: (argv,argIndex)=>argv[0] + }), + "*" + ]], + ["sqlite3_busy_timeout","int", "sqlite3*", "int"], + + + ["sqlite3_changes", "int", "sqlite3*"], + ["sqlite3_clear_bindings","int", "sqlite3_stmt*"], + ["sqlite3_collation_needed", "int", "sqlite3*", "*", "*"], + ["sqlite3_column_blob","*", "sqlite3_stmt*", "int"], + ["sqlite3_column_bytes","int", "sqlite3_stmt*", "int"], + ["sqlite3_column_count", "int", "sqlite3_stmt*"], + ["sqlite3_column_double","f64", "sqlite3_stmt*", "int"], + ["sqlite3_column_int","int", "sqlite3_stmt*", "int"], + ["sqlite3_column_name","string", "sqlite3_stmt*", "int"], + ["sqlite3_column_text","string", "sqlite3_stmt*", "int"], + ["sqlite3_column_type","int", "sqlite3_stmt*", "int"], + ["sqlite3_column_value","sqlite3_value*", "sqlite3_stmt*", "int"], + ["sqlite3_commit_hook", "void*", [ + "sqlite3*", + new wasm.xWrap.FuncPtrAdapter({ + name: 'sqlite3_commit_hook', + signature: 'i(p)', + contextKey: (argv)=>argv[0] + }), + '*' + ]], + ["sqlite3_compileoption_get", "string", "int"], + ["sqlite3_compileoption_used", "int", "string"], + ["sqlite3_complete", "int", "string:flexible"], + ["sqlite3_context_db_handle", "sqlite3*", "sqlite3_context*"], + + + + ["sqlite3_data_count", "int", "sqlite3_stmt*"], + ["sqlite3_db_filename", "string", "sqlite3*", "string"], + ["sqlite3_db_handle", "sqlite3*", "sqlite3_stmt*"], + ["sqlite3_db_name", "string", "sqlite3*", "int"], + ["sqlite3_db_status", "int", "sqlite3*", "int", "*", "*", "int"], + ["sqlite3_errcode", "int", "sqlite3*"], + ["sqlite3_errmsg", "string", "sqlite3*"], + ["sqlite3_error_offset", "int", "sqlite3*"], + ["sqlite3_errstr", "string", "int"], + ["sqlite3_exec", "int", [ + "sqlite3*", "string:flexible", + new wasm.xWrap.FuncPtrAdapter({ + signature: 'i(pipp)', + bindScope: 'transient', + callProxy: (callback)=>{ + let aNames; + return (pVoid, nCols, pColVals, pColNames)=>{ + try { + const aVals = wasm.cArgvToJs(nCols, pColVals); + if(!aNames) aNames = wasm.cArgvToJs(nCols, pColNames); + return callback(aVals, aNames) | 0; + }catch(e){ + + return e.resultCode || capi.SQLITE_ERROR; + } + } + } + }), + "*", "**" + ]], + ["sqlite3_expanded_sql", "string", "sqlite3_stmt*"], + ["sqlite3_extended_errcode", "int", "sqlite3*"], + ["sqlite3_extended_result_codes", "int", "sqlite3*", "int"], + ["sqlite3_file_control", "int", "sqlite3*", "string", "int", "*"], + ["sqlite3_finalize", "int", "sqlite3_stmt*"], + ["sqlite3_free", undefined,"*"], + ["sqlite3_get_autocommit", "int", "sqlite3*"], + ["sqlite3_get_auxdata", "*", "sqlite3_context*", "int"], + ["sqlite3_initialize", undefined], + + ["sqlite3_keyword_count", "int"], + ["sqlite3_keyword_name", "int", ["int", "**", "*"]], + ["sqlite3_keyword_check", "int", ["string", "int"]], + ["sqlite3_libversion", "string"], + ["sqlite3_libversion_number", "int"], + ["sqlite3_limit", "int", ["sqlite3*", "int", "int"]], + ["sqlite3_malloc", "*","int"], + ["sqlite3_open", "int", "string", "*"], + ["sqlite3_open_v2", "int", "string", "*", "int", "string"], + + + ["sqlite3_progress_handler", undefined, [ + "sqlite3*", "int", new wasm.xWrap.FuncPtrAdapter({ + name: 'xProgressHandler', + signature: 'i(p)', + bindScope: 'context', + contextKey: (argv,argIndex)=>argv[0] + }), "*" + ]], + ["sqlite3_realloc", "*","*","int"], + ["sqlite3_reset", "int", "sqlite3_stmt*"], + + ["sqlite3_result_blob", undefined, "sqlite3_context*", "*", "int", "*"], + ["sqlite3_result_double", undefined, "sqlite3_context*", "f64"], + ["sqlite3_result_error", undefined, "sqlite3_context*", "string", "int"], + ["sqlite3_result_error_code", undefined, "sqlite3_context*", "int"], + ["sqlite3_result_error_nomem", undefined, "sqlite3_context*"], + ["sqlite3_result_error_toobig", undefined, "sqlite3_context*"], + ["sqlite3_result_int", undefined, "sqlite3_context*", "int"], + ["sqlite3_result_null", undefined, "sqlite3_context*"], + ["sqlite3_result_pointer", undefined, + "sqlite3_context*", "*", "string:static", "*"], + ["sqlite3_result_subtype", undefined, "sqlite3_value*", "int"], + ["sqlite3_result_text", undefined, "sqlite3_context*", "string", "int", "*"], + ["sqlite3_result_zeroblob", undefined, "sqlite3_context*", "int"], + ["sqlite3_rollback_hook", "void*", [ + "sqlite3*", + new wasm.xWrap.FuncPtrAdapter({ + name: 'sqlite3_rollback_hook', + signature: 'v(p)', + contextKey: (argv)=>argv[0] + }), + '*' + ]], + ["sqlite3_set_authorizer", "int", [ + "sqlite3*", + new wasm.xWrap.FuncPtrAdapter({ + name: "sqlite3_set_authorizer::xAuth", + signature: "i(pi"+"ssss)", + contextKey: (argv, argIndex)=>argv[0], + callProxy: (callback)=>{ + return (pV, iCode, s0, s1, s2, s3)=>{ + try{ + s0 = s0 && wasm.cstrToJs(s0); s1 = s1 && wasm.cstrToJs(s1); + s2 = s2 && wasm.cstrToJs(s2); s3 = s3 && wasm.cstrToJs(s3); + return callback(pV, iCode, s0, s1, s2, s3) || 0; + }catch(e){ + return e.resultCode || capi.SQLITE_ERROR; + } + } + } + }), + "*" + ]], + ["sqlite3_set_auxdata", undefined, [ + "sqlite3_context*", "int", "*", + new wasm.xWrap.FuncPtrAdapter({ + name: 'xDestroyAuxData', + signature: 'v(*)', + contextKey: (argv, argIndex)=>argv[0] + }) + ]], + ["sqlite3_shutdown", undefined], + ["sqlite3_sourceid", "string"], + ["sqlite3_sql", "string", "sqlite3_stmt*"], + ["sqlite3_status", "int", "int", "*", "*", "int"], + ["sqlite3_step", "int", "sqlite3_stmt*"], + ["sqlite3_stmt_isexplain", "int", ["sqlite3_stmt*"]], + ["sqlite3_stmt_readonly", "int", ["sqlite3_stmt*"]], + ["sqlite3_stmt_status", "int", "sqlite3_stmt*", "int", "int"], + ["sqlite3_strglob", "int", "string","string"], + ["sqlite3_stricmp", "int", "string", "string"], + ["sqlite3_strlike", "int", "string", "string","int"], + ["sqlite3_strnicmp", "int", "string", "string", "int"], + ["sqlite3_table_column_metadata", "int", + "sqlite3*", "string", "string", "string", + "**", "**", "*", "*", "*"], + ["sqlite3_total_changes", "int", "sqlite3*"], + ["sqlite3_trace_v2", "int", [ + "sqlite3*", "int", + new wasm.xWrap.FuncPtrAdapter({ + name: 'sqlite3_trace_v2::callback', + signature: 'i(ippp)', + contextKey: (argv,argIndex)=>argv[0] + }), + "*" + ]], + ["sqlite3_txn_state", "int", ["sqlite3*","string"]], + + ["sqlite3_uri_boolean", "int", "sqlite3_filename", "string", "int"], + ["sqlite3_uri_key", "string", "sqlite3_filename", "int"], + ["sqlite3_uri_parameter", "string", "sqlite3_filename", "string"], + ["sqlite3_user_data","void*", "sqlite3_context*"], + ["sqlite3_value_blob", "*", "sqlite3_value*"], + ["sqlite3_value_bytes","int", "sqlite3_value*"], + ["sqlite3_value_double","f64", "sqlite3_value*"], + ["sqlite3_value_dup", "sqlite3_value*", "sqlite3_value*"], + ["sqlite3_value_free", undefined, "sqlite3_value*"], + ["sqlite3_value_frombind", "int", "sqlite3_value*"], + ["sqlite3_value_int","int", "sqlite3_value*"], + ["sqlite3_value_nochange", "int", "sqlite3_value*"], + ["sqlite3_value_numeric_type", "int", "sqlite3_value*"], + ["sqlite3_value_pointer", "*", "sqlite3_value*", "string:static"], + ["sqlite3_value_subtype", "int", "sqlite3_value*"], + ["sqlite3_value_text", "string", "sqlite3_value*"], + ["sqlite3_value_type", "int", "sqlite3_value*"], + ["sqlite3_vfs_find", "*", "string"], + ["sqlite3_vfs_register", "int", "sqlite3_vfs*", "int"], + ["sqlite3_vfs_unregister", "int", "sqlite3_vfs*"] + ]; + + if(false && wasm.compileOptionUsed('SQLITE_ENABLE_NORMALIZE')){ + + wasm.bindingSignatures.push(["sqlite3_normalized_sql", "string", "sqlite3_stmt*"]); + } + + if(wasm.exports.sqlite3_activate_see instanceof Function){ + wasm.bindingSignatures.push( + ["sqlite3_key", "int", "sqlite3*", "string", "int"], + ["sqlite3_key_v2","int","sqlite3*","string","*","int"], + ["sqlite3_rekey", "int", "sqlite3*", "string", "int"], + ["sqlite3_rekey_v2", "int", "sqlite3*", "string", "*", "int"], + ["sqlite3_activate_see", undefined, "string"] + ); + } + + wasm.bindingSignatures.int64 = [ + ["sqlite3_bind_int64","int", ["sqlite3_stmt*", "int", "i64"]], + ["sqlite3_changes64","i64", ["sqlite3*"]], + ["sqlite3_column_int64","i64", ["sqlite3_stmt*", "int"]], + ["sqlite3_create_module", "int", + ["sqlite3*","string","sqlite3_module*","*"]], + ["sqlite3_create_module_v2", "int", + ["sqlite3*","string","sqlite3_module*","*","*"]], + ["sqlite3_declare_vtab", "int", ["sqlite3*", "string:flexible"]], + ["sqlite3_deserialize", "int", "sqlite3*", "string", "*", "i64", "i64", "int"] + , + ["sqlite3_drop_modules", "int", ["sqlite3*", "**"]], + ["sqlite3_last_insert_rowid", "i64", ["sqlite3*"]], + ["sqlite3_malloc64", "*","i64"], + ["sqlite3_msize", "i64", "*"], + ["sqlite3_overload_function", "int", ["sqlite3*","string","int"]], + ["sqlite3_preupdate_blobwrite", "int", "sqlite3*"], + ["sqlite3_preupdate_count", "int", "sqlite3*"], + ["sqlite3_preupdate_depth", "int", "sqlite3*"], + ["sqlite3_preupdate_hook", "*", [ + "sqlite3*", + new wasm.xWrap.FuncPtrAdapter({ + name: 'sqlite3_preupdate_hook', + signature: "v(ppippjj)", + contextKey: (argv)=>argv[0], + callProxy: (callback)=>{ + return (p,db,op,zDb,zTbl,iKey1,iKey2)=>{ + callback(p, db, op, wasm.cstrToJs(zDb), wasm.cstrToJs(zTbl), + iKey1, iKey2); + }; + } + }), + "*" + ]], + ["sqlite3_preupdate_new", "int", ["sqlite3*", "int", "**"]], + ["sqlite3_preupdate_old", "int", ["sqlite3*", "int", "**"]], + ["sqlite3_realloc64", "*","*", "i64"], + ["sqlite3_result_int64", undefined, "*", "i64"], + ["sqlite3_result_zeroblob64", "int", "*", "i64"], + ["sqlite3_serialize","*", "sqlite3*", "string", "*", "int"], + ["sqlite3_set_last_insert_rowid", undefined, ["sqlite3*", "i64"]], + ["sqlite3_status64", "int", "int", "*", "*", "int"], + ["sqlite3_total_changes64", "i64", ["sqlite3*"]], + ["sqlite3_update_hook", "*", [ + "sqlite3*", + new wasm.xWrap.FuncPtrAdapter({ + name: 'sqlite3_update_hook', + signature: "v(iippj)", + contextKey: (argv)=>argv[0], + callProxy: (callback)=>{ + return (p,op,z0,z1,rowid)=>{ + callback(p, op, wasm.cstrToJs(z0), wasm.cstrToJs(z1), rowid); + }; + } + }), + "*" + ]], + ["sqlite3_uri_int64", "i64", ["sqlite3_filename", "string", "i64"]], + ["sqlite3_value_int64","i64", "sqlite3_value*"], + ["sqlite3_vtab_collation","string","sqlite3_index_info*","int"], + ["sqlite3_vtab_distinct","int", "sqlite3_index_info*"], + ["sqlite3_vtab_in","int", "sqlite3_index_info*", "int", "int"], + ["sqlite3_vtab_in_first", "int", "sqlite3_value*", "**"], + ["sqlite3_vtab_in_next", "int", "sqlite3_value*", "**"], + + ["sqlite3_vtab_nochange","int", "sqlite3_context*"], + ["sqlite3_vtab_on_conflict","int", "sqlite3*"], + ["sqlite3_vtab_rhs_value","int", "sqlite3_index_info*", "int", "**"] + ]; + + + if(wasm.bigIntEnabled && !!wasm.exports.sqlite3changegroup_add){ + + + const __ipsProxy = { + signature: 'i(ps)', + callProxy:(callback)=>{ + return (p,s)=>{ + try{return callback(p, wasm.cstrToJs(s)) | 0} + catch(e){return e.resultCode || capi.SQLITE_ERROR} + } + } + }; + + wasm.bindingSignatures.int64.push(...[ + ['sqlite3changegroup_add', 'int', ['sqlite3_changegroup*', 'int', 'void*']], + ['sqlite3changegroup_add_strm', 'int', [ + 'sqlite3_changegroup*', + new wasm.xWrap.FuncPtrAdapter({ + name: 'xInput', signature: 'i(ppp)', bindScope: 'transient' + }), + 'void*' + ]], + ['sqlite3changegroup_delete', undefined, ['sqlite3_changegroup*']], + ['sqlite3changegroup_new', 'int', ['**']], + ['sqlite3changegroup_output', 'int', ['sqlite3_changegroup*', 'int*', '**']], + ['sqlite3changegroup_output_strm', 'int', [ + 'sqlite3_changegroup*', + new wasm.xWrap.FuncPtrAdapter({ + name: 'xOutput', signature: 'i(ppi)', bindScope: 'transient' + }), + 'void*' + ]], + ['sqlite3changeset_apply', 'int', [ + 'sqlite3*', 'int', 'void*', + new wasm.xWrap.FuncPtrAdapter({ + name: 'xFilter', bindScope: 'transient', ...__ipsProxy + }), + new wasm.xWrap.FuncPtrAdapter({ + name: 'xConflict', signature: 'i(pip)', bindScope: 'transient' + }), + 'void*' + ]], + ['sqlite3changeset_apply_strm', 'int', [ + 'sqlite3*', + new wasm.xWrap.FuncPtrAdapter({ + name: 'xInput', signature: 'i(ppp)', bindScope: 'transient' + }), + 'void*', + new wasm.xWrap.FuncPtrAdapter({ + name: 'xFilter', bindScope: 'transient', ...__ipsProxy + }), + new wasm.xWrap.FuncPtrAdapter({ + name: 'xConflict', signature: 'i(pip)', bindScope: 'transient' + }), + 'void*' + ]], + ['sqlite3changeset_apply_v2', 'int', [ + 'sqlite3*', 'int', 'void*', + new wasm.xWrap.FuncPtrAdapter({ + name: 'xFilter', bindScope: 'transient', ...__ipsProxy + }), + new wasm.xWrap.FuncPtrAdapter({ + name: 'xConflict', signature: 'i(pip)', bindScope: 'transient' + }), + 'void*', '**', 'int*', 'int' + + ]], + ['sqlite3changeset_apply_v2_strm', 'int', [ + 'sqlite3*', + new wasm.xWrap.FuncPtrAdapter({ + name: 'xInput', signature: 'i(ppp)', bindScope: 'transient' + }), + 'void*', + new wasm.xWrap.FuncPtrAdapter({ + name: 'xFilter', bindScope: 'transient', ...__ipsProxy + }), + new wasm.xWrap.FuncPtrAdapter({ + name: 'xConflict', signature: 'i(pip)', bindScope: 'transient' + }), + 'void*', '**', 'int*', 'int' + ]], + ['sqlite3changeset_concat', 'int', ['int','void*', 'int', 'void*', 'int*', '**']], + ['sqlite3changeset_concat_strm', 'int', [ + new wasm.xWrap.FuncPtrAdapter({ + name: 'xInputA', signature: 'i(ppp)', bindScope: 'transient' + }), + 'void*', + new wasm.xWrap.FuncPtrAdapter({ + name: 'xInputB', signature: 'i(ppp)', bindScope: 'transient' + }), + 'void*', + new wasm.xWrap.FuncPtrAdapter({ + name: 'xOutput', signature: 'i(ppi)', bindScope: 'transient' + }), + 'void*' + ]], + ['sqlite3changeset_conflict', 'int', ['sqlite3_changeset_iter*', 'int', '**']], + ['sqlite3changeset_finalize', 'int', ['sqlite3_changeset_iter*']], + ['sqlite3changeset_fk_conflicts', 'int', ['sqlite3_changeset_iter*', 'int*']], + ['sqlite3changeset_invert', 'int', ['int', 'void*', 'int*', '**']], + ['sqlite3changeset_invert_strm', 'int', [ + new wasm.xWrap.FuncPtrAdapter({ + name: 'xInput', signature: 'i(ppp)', bindScope: 'transient' + }), + 'void*', + new wasm.xWrap.FuncPtrAdapter({ + name: 'xOutput', signature: 'i(ppi)', bindScope: 'transient' + }), + 'void*' + ]], + ['sqlite3changeset_new', 'int', ['sqlite3_changeset_iter*', 'int', '**']], + ['sqlite3changeset_next', 'int', ['sqlite3_changeset_iter*']], + ['sqlite3changeset_old', 'int', ['sqlite3_changeset_iter*', 'int', '**']], + ['sqlite3changeset_op', 'int', [ + 'sqlite3_changeset_iter*', '**', 'int*', 'int*','int*' + ]], + ['sqlite3changeset_pk', 'int', ['sqlite3_changeset_iter*', '**', 'int*']], + ['sqlite3changeset_start', 'int', ['**', 'int', '*']], + ['sqlite3changeset_start_strm', 'int', [ + '**', + new wasm.xWrap.FuncPtrAdapter({ + name: 'xInput', signature: 'i(ppp)', bindScope: 'transient' + }), + 'void*' + ]], + ['sqlite3changeset_start_v2', 'int', ['**', 'int', '*', 'int']], + ['sqlite3changeset_start_v2_strm', 'int', [ + '**', + new wasm.xWrap.FuncPtrAdapter({ + name: 'xInput', signature: 'i(ppp)', bindScope: 'transient' + }), + 'void*', 'int' + ]], + ['sqlite3session_attach', 'int', ['sqlite3_session*', 'string']], + ['sqlite3session_changeset', 'int', ['sqlite3_session*', 'int*', '**']], + ['sqlite3session_changeset_size', 'i64', ['sqlite3_session*']], + ['sqlite3session_changeset_strm', 'int', [ + 'sqlite3_session*', + new wasm.xWrap.FuncPtrAdapter({ + name: 'xOutput', signature: 'i(ppp)', bindScope: 'transient' + }), + 'void*' + ]], + ['sqlite3session_config', 'int', ['int', 'void*']], + ['sqlite3session_create', 'int', ['sqlite3*', 'string', '**']], + + ['sqlite3session_diff', 'int', ['sqlite3_session*', 'string', 'string', '**']], + ['sqlite3session_enable', 'int', ['sqlite3_session*', 'int']], + ['sqlite3session_indirect', 'int', ['sqlite3_session*', 'int']], + ['sqlite3session_isempty', 'int', ['sqlite3_session*']], + ['sqlite3session_memory_used', 'i64', ['sqlite3_session*']], + ['sqlite3session_object_config', 'int', ['sqlite3_session*', 'int', 'void*']], + ['sqlite3session_patchset', 'int', ['sqlite3_session*', '*', '**']], + ['sqlite3session_patchset_strm', 'int', [ + 'sqlite3_session*', + new wasm.xWrap.FuncPtrAdapter({ + name: 'xOutput', signature: 'i(ppp)', bindScope: 'transient' + }), + 'void*' + ]], + ['sqlite3session_table_filter', undefined, [ + 'sqlite3_session*', + new wasm.xWrap.FuncPtrAdapter({ + name: 'xFilter', ...__ipsProxy, + contextKey: (argv,argIndex)=>argv[0] + }), + '*' + ]] + ]); + } + + + wasm.bindingSignatures.wasm = [ + ["sqlite3_wasm_db_reset", "int", "sqlite3*"], + ["sqlite3_wasm_db_vfs", "sqlite3_vfs*", "sqlite3*","string"], + ["sqlite3_wasm_vfs_create_file", "int", + "sqlite3_vfs*","string","*", "int"], + ["sqlite3_wasm_posix_create_file", "int", "string","*", "int"], + ["sqlite3_wasm_vfs_unlink", "int", "sqlite3_vfs*","string"] + ]; + + + sqlite3.StructBinder = globalThis.Jaccwabyt({ + heap: 0 ? wasm.memory : wasm.heap8u, + alloc: wasm.alloc, + dealloc: wasm.dealloc, + bigIntEnabled: wasm.bigIntEnabled, + memberPrefix: '$' + }); + delete globalThis.Jaccwabyt; + + { + + + const __xString = wasm.xWrap.argAdapter('string'); + wasm.xWrap.argAdapter( + 'string:flexible', (v)=>__xString(util.flexibleString(v)) + ); + + + wasm.xWrap.argAdapter( + 'string:static', + function(v){ + if(wasm.isPtr(v)) return v; + v = ''+v; + let rc = this[v]; + return rc || (this[v] = wasm.allocCString(v)); + }.bind(Object.create(null)) + ); + + + const __xArgPtr = wasm.xWrap.argAdapter('*'); + const nilType = function(){}; + wasm.xWrap.argAdapter('sqlite3_filename', __xArgPtr) + ('sqlite3_context*', __xArgPtr) + ('sqlite3_value*', __xArgPtr) + ('void*', __xArgPtr) + ('sqlite3_changegroup*', __xArgPtr) + ('sqlite3_changeset_iter*', __xArgPtr) + + ('sqlite3_session*', __xArgPtr) + ('sqlite3_stmt*', (v)=> + __xArgPtr((v instanceof (sqlite3?.oo1?.Stmt || nilType)) + ? v.pointer : v)) + ('sqlite3*', (v)=> + __xArgPtr((v instanceof (sqlite3?.oo1?.DB || nilType)) + ? v.pointer : v)) + ('sqlite3_index_info*', (v)=> + __xArgPtr((v instanceof (capi.sqlite3_index_info || nilType)) + ? v.pointer : v)) + ('sqlite3_module*', (v)=> + __xArgPtr((v instanceof (capi.sqlite3_module || nilType)) + ? v.pointer : v)) + + ('sqlite3_vfs*', (v)=>{ + if('string'===typeof v){ + + return capi.sqlite3_vfs_find(v) + || sqlite3.SQLite3Error.toss( + capi.SQLITE_NOTFOUND, + "Unknown sqlite3_vfs name:", v + ); + } + return __xArgPtr((v instanceof (capi.sqlite3_vfs || nilType)) + ? v.pointer : v); + }); + + const __xRcPtr = wasm.xWrap.resultAdapter('*'); + wasm.xWrap.resultAdapter('sqlite3*', __xRcPtr) + ('sqlite3_context*', __xRcPtr) + ('sqlite3_stmt*', __xRcPtr) + ('sqlite3_value*', __xRcPtr) + ('sqlite3_vfs*', __xRcPtr) + ('void*', __xRcPtr); + + + if(0 === wasm.exports.sqlite3_step.length){ + + wasm.xWrap.doArgcCheck = false; + sqlite3.config.warn( + "Disabling sqlite3.wasm.xWrap.doArgcCheck due to environmental quirks." + ); + } + for(const e of wasm.bindingSignatures){ + capi[e[0]] = wasm.xWrap.apply(null, e); + } + for(const e of wasm.bindingSignatures.wasm){ + wasm[e[0]] = wasm.xWrap.apply(null, e); + } + + + const fI64Disabled = function(fname){ + return ()=>toss(fname+"() is unavailable due to lack", + "of BigInt support in this build."); + }; + for(const e of wasm.bindingSignatures.int64){ + capi[e[0]] = wasm.bigIntEnabled + ? wasm.xWrap.apply(null, e) + : fI64Disabled(e[0]); + } + + + delete wasm.bindingSignatures; + + if(wasm.exports.sqlite3_wasm_db_error){ + const __db_err = wasm.xWrap( + 'sqlite3_wasm_db_error', 'int', 'sqlite3*', 'int', 'string' + ); + + util.sqlite3_wasm_db_error = function(pDb, resultCode, message){ + if(resultCode instanceof sqlite3.WasmAllocError){ + resultCode = capi.SQLITE_NOMEM; + message = 0 ; + }else if(resultCode instanceof Error){ + message = message || ''+resultCode; + resultCode = (resultCode.resultCode || capi.SQLITE_ERROR); + } + return pDb ? __db_err(pDb, resultCode, message) : resultCode; + }; + }else{ + util.sqlite3_wasm_db_error = function(pDb,errCode,msg){ + console.warn("sqlite3_wasm_db_error() is not exported.",arguments); + return errCode; + }; + } + } + + { + const cJson = wasm.xCall('sqlite3_wasm_enum_json'); + if(!cJson){ + toss("Maintenance required: increase sqlite3_wasm_enum_json()'s", + "static buffer size!"); + } + + wasm.ctype = JSON.parse(wasm.cstrToJs(cJson)); + + const defineGroups = ['access', 'authorizer', + 'blobFinalizers', 'changeset', + 'config', 'dataTypes', + 'dbConfig', 'dbStatus', + 'encodings', 'fcntl', 'flock', 'ioCap', + 'limits', 'openFlags', + 'prepareFlags', 'resultCodes', + 'sqlite3Status', + 'stmtStatus', 'syncFlags', + 'trace', 'txnState', 'udfFlags', + 'version' ]; + if(wasm.bigIntEnabled){ + defineGroups.push('serialize', 'session', 'vtab'); + } + for(const t of defineGroups){ + for(const e of Object.entries(wasm.ctype[t])){ + + + capi[e[0]] = e[1]; + } + } + if(!wasm.functionEntry(capi.SQLITE_WASM_DEALLOC)){ + toss("Internal error: cannot resolve exported function", + "entry SQLITE_WASM_DEALLOC (=="+capi.SQLITE_WASM_DEALLOC+")."); + } + const __rcMap = Object.create(null); + for(const t of ['resultCodes']){ + for(const e of Object.entries(wasm.ctype[t])){ + __rcMap[e[1]] = e[0]; + } + } + + capi.sqlite3_js_rc_str = (rc)=>__rcMap[rc]; + + const notThese = Object.assign(Object.create(null),{ + + WasmTestStruct: true, + + sqlite3_kvvfs_methods: !util.isUIThread(), + + sqlite3_index_info: !wasm.bigIntEnabled, + sqlite3_index_constraint: !wasm.bigIntEnabled, + sqlite3_index_orderby: !wasm.bigIntEnabled, + sqlite3_index_constraint_usage: !wasm.bigIntEnabled + }); + for(const s of wasm.ctype.structs){ + if(!notThese[s.name]){ + capi[s.name] = sqlite3.StructBinder(s); + } + } + if(capi.sqlite3_index_info){ + + for(const k of ['sqlite3_index_constraint', + 'sqlite3_index_orderby', + 'sqlite3_index_constraint_usage']){ + capi.sqlite3_index_info[k] = capi[k]; + delete capi[k]; + } + capi.sqlite3_vtab_config = wasm.xWrap( + 'sqlite3_wasm_vtab_config','int',[ + 'sqlite3*', 'int', 'int'] + ); + } + } + + + const __dbArgcMismatch = (pDb,f,n)=>{ + return util.sqlite3_wasm_db_error(pDb, capi.SQLITE_MISUSE, + f+"() requires "+n+" argument"+ + (1===n?"":'s')+"."); + }; + + + const __errEncoding = (pDb)=>{ + return util.sqlite3_wasm_db_error( + pDb, capi.SQLITE_FORMAT, "SQLITE_UTF8 is the only supported encoding." + ); + }; + + + const __argPDb = (pDb)=>wasm.xWrap.argAdapter('sqlite3*')(pDb); + const __argStr = (str)=>wasm.isPtr(str) ? wasm.cstrToJs(str) : str; + const __dbCleanupMap = function( + pDb, mode + ){ + pDb = __argPDb(pDb); + let m = this.dbMap.get(pDb); + if(!mode){ + this.dbMap.delete(pDb); + return m; + }else if(!m && mode>0){ + this.dbMap.set(pDb, (m = Object.create(null))); + } + return m; + }.bind(Object.assign(Object.create(null),{ + dbMap: new Map + })); + + __dbCleanupMap.addCollation = function(pDb, name){ + const m = __dbCleanupMap(pDb, 1); + if(!m.collation) m.collation = new Set; + m.collation.add(__argStr(name).toLowerCase()); + }; + + __dbCleanupMap._addUDF = function(pDb, name, arity, map){ + + name = __argStr(name).toLowerCase(); + let u = map.get(name); + if(!u) map.set(name, (u = new Set)); + u.add((arity<0) ? -1 : arity); + }; + + __dbCleanupMap.addFunction = function(pDb, name, arity){ + const m = __dbCleanupMap(pDb, 1); + if(!m.udf) m.udf = new Map; + this._addUDF(pDb, name, arity, m.udf); + }; + + __dbCleanupMap.addWindowFunc = function(pDb, name, arity){ + const m = __dbCleanupMap(pDb, 1); + if(!m.wudf) m.wudf = new Map; + this._addUDF(pDb, name, arity, m.wudf); + }; + + + __dbCleanupMap.cleanup = function(pDb){ + pDb = __argPDb(pDb); + + + const closeArgs = [pDb]; + for(const name of [ + 'sqlite3_busy_handler', + 'sqlite3_commit_hook', + 'sqlite3_preupdate_hook', + 'sqlite3_progress_handler', + 'sqlite3_rollback_hook', + 'sqlite3_set_authorizer', + 'sqlite3_trace_v2', + 'sqlite3_update_hook' + ]) { + const x = wasm.exports[name]; + closeArgs.length = x.length + ; + try{ capi[name](...closeArgs) } + catch(e){ + console.warn("close-time call of",name+"(",closeArgs,") threw:",e); + } + } + const m = __dbCleanupMap(pDb, 0); + if(!m) return; + if(m.collation){ + for(const name of m.collation){ + try{ + capi.sqlite3_create_collation_v2( + pDb, name, capi.SQLITE_UTF8, 0, 0, 0 + ); + }catch(e){ + + } + } + delete m.collation; + } + let i; + for(i = 0; i < 2; ++i){ + const fmap = i ? m.wudf : m.udf; + if(!fmap) continue; + const func = i + ? capi.sqlite3_create_window_function + : capi.sqlite3_create_function_v2; + for(const e of fmap){ + const name = e[0], arities = e[1]; + const fargs = [pDb, name, 0, capi.SQLITE_UTF8, 0, 0, 0, 0, 0]; + if(i) fargs.push(0); + for(const arity of arities){ + try{ fargs[2] = arity; func.apply(null, fargs); } + catch(e){} + } + arities.clear(); + } + fmap.clear(); + } + delete m.udf; + delete m.wudf; + }; + + { + const __sqlite3CloseV2 = wasm.xWrap("sqlite3_close_v2", "int", "sqlite3*"); + capi.sqlite3_close_v2 = function(pDb){ + if(1!==arguments.length) return __dbArgcMismatch(pDb, 'sqlite3_close_v2', 1); + if(pDb){ + try{__dbCleanupMap.cleanup(pDb)} catch(e){} + } + return __sqlite3CloseV2(pDb); + }; + } + + if(capi.sqlite3session_table_filter){ + const __sqlite3SessionDelete = wasm.xWrap( + 'sqlite3session_delete', undefined, ['sqlite3_session*'] + ); + capi.sqlite3session_delete = function(pSession){ + if(1!==arguments.length){ + return __dbArgcMismatch(pDb, 'sqlite3session_delete', 1); + + } + else if(pSession){ + + capi.sqlite3session_table_filter(pSession, 0, 0); + } + __sqlite3SessionDelete(pSession); + }; + } + + { + + const contextKey = (argv,argIndex)=>{ + return 'argv['+argIndex+']:'+argv[0]+ + ':'+wasm.cstrToJs(argv[1]).toLowerCase() + }; + const __sqlite3CreateCollationV2 = wasm.xWrap( + 'sqlite3_create_collation_v2', 'int', [ + 'sqlite3*', 'string', 'int', '*', + new wasm.xWrap.FuncPtrAdapter({ + + name: 'xCompare', signature: 'i(pipip)', contextKey + }), + new wasm.xWrap.FuncPtrAdapter({ + + name: 'xDestroy', signature: 'v(p)', contextKey + }) + ] + ); + + + capi.sqlite3_create_collation_v2 = function(pDb,zName,eTextRep,pArg,xCompare,xDestroy){ + if(6!==arguments.length) return __dbArgcMismatch(pDb, 'sqlite3_create_collation_v2', 6); + else if( 0 === (eTextRep & 0xf) ){ + eTextRep |= capi.SQLITE_UTF8; + }else if( capi.SQLITE_UTF8 !== (eTextRep & 0xf) ){ + return __errEncoding(pDb); + } + try{ + const rc = __sqlite3CreateCollationV2(pDb, zName, eTextRep, pArg, xCompare, xDestroy); + if(0===rc && xCompare instanceof Function){ + __dbCleanupMap.addCollation(pDb, zName); + } + return rc; + }catch(e){ + return util.sqlite3_wasm_db_error(pDb, e); + } + }; + + capi.sqlite3_create_collation = (pDb,zName,eTextRep,pArg,xCompare)=>{ + return (5===arguments.length) + ? capi.sqlite3_create_collation_v2(pDb,zName,eTextRep,pArg,xCompare,0) + : __dbArgcMismatch(pDb, 'sqlite3_create_collation', 5); + }; + + } + + { + + const contextKey = function(argv,argIndex){ + return ( + argv[0] + +':'+(argv[2] < 0 ? -1 : argv[2]) + +':'+argIndex + +':'+wasm.cstrToJs(argv[1]).toLowerCase() + ) + }; + + + const __cfProxy = Object.assign(Object.create(null), { + xInverseAndStep: { + signature:'v(pip)', contextKey, + callProxy: (callback)=>{ + return (pCtx, argc, pArgv)=>{ + try{ callback(pCtx, ...capi.sqlite3_values_to_js(argc, pArgv)) } + catch(e){ capi.sqlite3_result_error_js(pCtx, e) } + }; + } + }, + xFinalAndValue: { + signature:'v(p)', contextKey, + callProxy: (callback)=>{ + return (pCtx)=>{ + try{ capi.sqlite3_result_js(pCtx, callback(pCtx)) } + catch(e){ capi.sqlite3_result_error_js(pCtx, e) } + }; + } + }, + xFunc: { + signature:'v(pip)', contextKey, + callProxy: (callback)=>{ + return (pCtx, argc, pArgv)=>{ + try{ + capi.sqlite3_result_js( + pCtx, + callback(pCtx, ...capi.sqlite3_values_to_js(argc, pArgv)) + ); + }catch(e){ + + capi.sqlite3_result_error_js(pCtx, e); + } + }; + } + }, + xDestroy: { + signature:'v(p)', contextKey, + + callProxy: (callback)=>{ + return (pVoid)=>{ + try{ callback(pVoid) } + catch(e){ console.error("UDF xDestroy method threw:",e) } + }; + } + } + }); + + const __sqlite3CreateFunction = wasm.xWrap( + "sqlite3_create_function_v2", "int", [ + "sqlite3*", "string", "int", + "int", "*", + new wasm.xWrap.FuncPtrAdapter({name: 'xFunc', ...__cfProxy.xFunc}), + new wasm.xWrap.FuncPtrAdapter({name: 'xStep', ...__cfProxy.xInverseAndStep}), + new wasm.xWrap.FuncPtrAdapter({name: 'xFinal', ...__cfProxy.xFinalAndValue}), + new wasm.xWrap.FuncPtrAdapter({name: 'xDestroy', ...__cfProxy.xDestroy}) + ] + ); + + const __sqlite3CreateWindowFunction = wasm.xWrap( + "sqlite3_create_window_function", "int", [ + "sqlite3*", "string", "int", + "int", "*", + new wasm.xWrap.FuncPtrAdapter({name: 'xStep', ...__cfProxy.xInverseAndStep}), + new wasm.xWrap.FuncPtrAdapter({name: 'xFinal', ...__cfProxy.xFinalAndValue}), + new wasm.xWrap.FuncPtrAdapter({name: 'xValue', ...__cfProxy.xFinalAndValue}), + new wasm.xWrap.FuncPtrAdapter({name: 'xInverse', ...__cfProxy.xInverseAndStep}), + new wasm.xWrap.FuncPtrAdapter({name: 'xDestroy', ...__cfProxy.xDestroy}) + ] + ); + + + capi.sqlite3_create_function_v2 = function f( + pDb, funcName, nArg, eTextRep, pApp, + xFunc, + xStep, + xFinal, + xDestroy + ){ + if( f.length!==arguments.length ){ + return __dbArgcMismatch(pDb,"sqlite3_create_function_v2",f.length); + }else if( 0 === (eTextRep & 0xf) ){ + eTextRep |= capi.SQLITE_UTF8; + }else if( capi.SQLITE_UTF8 !== (eTextRep & 0xf) ){ + return __errEncoding(pDb); + } + try{ + const rc = __sqlite3CreateFunction(pDb, funcName, nArg, eTextRep, + pApp, xFunc, xStep, xFinal, xDestroy); + if(0===rc && (xFunc instanceof Function + || xStep instanceof Function + || xFinal instanceof Function + || xDestroy instanceof Function)){ + __dbCleanupMap.addFunction(pDb, funcName, nArg); + } + return rc; + }catch(e){ + console.error("sqlite3_create_function_v2() setup threw:",e); + return util.sqlite3_wasm_db_error(pDb, e, "Creation of UDF threw: "+e); + } + }; + + + capi.sqlite3_create_function = function f( + pDb, funcName, nArg, eTextRep, pApp, + xFunc, xStep, xFinal + ){ + return (f.length===arguments.length) + ? capi.sqlite3_create_function_v2(pDb, funcName, nArg, eTextRep, + pApp, xFunc, xStep, xFinal, 0) + : __dbArgcMismatch(pDb,"sqlite3_create_function",f.length); + }; + + + capi.sqlite3_create_window_function = function f( + pDb, funcName, nArg, eTextRep, pApp, + xStep, + xFinal, + xValue, + xInverse, + xDestroy + ){ + if( f.length!==arguments.length ){ + return __dbArgcMismatch(pDb,"sqlite3_create_window_function",f.length); + }else if( 0 === (eTextRep & 0xf) ){ + eTextRep |= capi.SQLITE_UTF8; + }else if( capi.SQLITE_UTF8 !== (eTextRep & 0xf) ){ + return __errEncoding(pDb); + } + try{ + const rc = __sqlite3CreateWindowFunction(pDb, funcName, nArg, eTextRep, + pApp, xStep, xFinal, xValue, + xInverse, xDestroy); + if(0===rc && (xStep instanceof Function + || xFinal instanceof Function + || xValue instanceof Function + || xInverse instanceof Function + || xDestroy instanceof Function)){ + __dbCleanupMap.addWindowFunc(pDb, funcName, nArg); + } + return rc; + }catch(e){ + console.error("sqlite3_create_window_function() setup threw:",e); + return util.sqlite3_wasm_db_error(pDb, e, "Creation of UDF threw: "+e); + } + }; + + capi.sqlite3_create_function_v2.udfSetResult = + capi.sqlite3_create_function.udfSetResult = + capi.sqlite3_create_window_function.udfSetResult = capi.sqlite3_result_js; + + + capi.sqlite3_create_function_v2.udfConvertArgs = + capi.sqlite3_create_function.udfConvertArgs = + capi.sqlite3_create_window_function.udfConvertArgs = capi.sqlite3_values_to_js; + + + capi.sqlite3_create_function_v2.udfSetError = + capi.sqlite3_create_function.udfSetError = + capi.sqlite3_create_window_function.udfSetError = capi.sqlite3_result_error_js; + + }; + + { + + + const __flexiString = (v,n)=>{ + if('string'===typeof v){ + n = -1; + }else if(util.isSQLableTypedArray(v)){ + n = v.byteLength; + v = util.typedArrayToString( + (v instanceof ArrayBuffer) ? new Uint8Array(v) : v + ); + }else if(Array.isArray(v)){ + v = v.join(""); + n = -1; + } + return [v, n]; + }; + + + const __prepare = { + + basic: wasm.xWrap('sqlite3_prepare_v3', + "int", ["sqlite3*", "string", + "int", + "int", "**", + "**"]), + + full: wasm.xWrap('sqlite3_prepare_v3', + "int", ["sqlite3*", "*", "int", "int", + "**", "**"]) + }; + + + capi.sqlite3_prepare_v3 = function f(pDb, sql, sqlLen, prepFlags, ppStmt, pzTail){ + if(f.length!==arguments.length){ + return __dbArgcMismatch(pDb,"sqlite3_prepare_v3",f.length); + } + const [xSql, xSqlLen] = __flexiString(sql, sqlLen); + switch(typeof xSql){ + case 'string': return __prepare.basic(pDb, xSql, xSqlLen, prepFlags, ppStmt, null); + case 'number': return __prepare.full(pDb, xSql, xSqlLen, prepFlags, ppStmt, pzTail); + default: + return util.sqlite3_wasm_db_error( + pDb, capi.SQLITE_MISUSE, + "Invalid SQL argument type for sqlite3_prepare_v2/v3()." + ); + } + }; + + + capi.sqlite3_prepare_v2 = function f(pDb, sql, sqlLen, ppStmt, pzTail){ + return (f.length===arguments.length) + ? capi.sqlite3_prepare_v3(pDb, sql, sqlLen, 0, ppStmt, pzTail) + : __dbArgcMismatch(pDb,"sqlite3_prepare_v2",f.length); + }; + + } + + { + const __bindText = wasm.xWrap("sqlite3_bind_text", "int", [ + "sqlite3_stmt*", "int", "string", "int", "*" + ]); + const __bindBlob = wasm.xWrap("sqlite3_bind_blob", "int", [ + "sqlite3_stmt*", "int", "*", "int", "*" + ]); + + + capi.sqlite3_bind_text = function f(pStmt, iCol, text, nText, xDestroy){ + if(f.length!==arguments.length){ + return __dbArgcMismatch(capi.sqlite3_db_handle(pStmt), + "sqlite3_bind_text", f.length); + }else if(wasm.isPtr(text) || null===text){ + return __bindText(pStmt, iCol, text, nText, xDestroy); + }else if(text instanceof ArrayBuffer){ + text = new Uint8Array(text); + }else if(Array.isArray(pMem)){ + text = pMem.join(''); + } + let p, n; + try{ + if(util.isSQLableTypedArray(text)){ + p = wasm.allocFromTypedArray(text); + n = text.byteLength; + }else if('string'===typeof text){ + [p, n] = wasm.allocCString(text); + }else{ + return util.sqlite3_wasm_db_error( + capi.sqlite3_db_handle(pStmt), capi.SQLITE_MISUSE, + "Invalid 3rd argument type for sqlite3_bind_text()." + ); + } + return __bindText(pStmt, iCol, p, n, capi.SQLITE_WASM_DEALLOC); + }catch(e){ + wasm.dealloc(p); + return util.sqlite3_wasm_db_error( + capi.sqlite3_db_handle(pStmt), e + ); + } + }; + + + capi.sqlite3_bind_blob = function f(pStmt, iCol, pMem, nMem, xDestroy){ + if(f.length!==arguments.length){ + return __dbArgcMismatch(capi.sqlite3_db_handle(pStmt), + "sqlite3_bind_blob", f.length); + }else if(wasm.isPtr(pMem) || null===pMem){ + return __bindBlob(pStmt, iCol, pMem, nMem, xDestroy); + }else if(pMem instanceof ArrayBuffer){ + pMem = new Uint8Array(pMem); + }else if(Array.isArray(pMem)){ + pMem = pMem.join(''); + } + let p, n; + try{ + if(util.isBindableTypedArray(pMem)){ + p = wasm.allocFromTypedArray(pMem); + n = nMem>=0 ? nMem : pMem.byteLength; + }else if('string'===typeof pMem){ + [p, n] = wasm.allocCString(pMem); + }else{ + return util.sqlite3_wasm_db_error( + capi.sqlite3_db_handle(pStmt), capi.SQLITE_MISUSE, + "Invalid 3rd argument type for sqlite3_bind_blob()." + ); + } + return __bindBlob(pStmt, iCol, p, n, capi.SQLITE_WASM_DEALLOC); + }catch(e){ + wasm.dealloc(p); + return util.sqlite3_wasm_db_error( + capi.sqlite3_db_handle(pStmt), e + ); + } + }; + + } + + { + + capi.sqlite3_config = function(op, ...args){ + if(arguments.length<2) return capi.SQLITE_MISUSE; + switch(op){ + case capi.SQLITE_CONFIG_COVERING_INDEX_SCAN: + case capi.SQLITE_CONFIG_MEMSTATUS: + case capi.SQLITE_CONFIG_SMALL_MALLOC: + case capi.SQLITE_CONFIG_SORTERREF_SIZE: + case capi.SQLITE_CONFIG_STMTJRNL_SPILL: + case capi.SQLITE_CONFIG_URI: + return wasm.exports.sqlite3_wasm_config_i(op, args[0]); + case capi.SQLITE_CONFIG_LOOKASIDE: + return wasm.exports.sqlite3_wasm_config_ii(op, args[0], args[1]); + case capi.SQLITE_CONFIG_MEMDB_MAXSIZE: + return wasm.exports.sqlite3_wasm_config_j(op, args[0]); + case capi.SQLITE_CONFIG_GETMALLOC: + case capi.SQLITE_CONFIG_GETMUTEX: + case capi.SQLITE_CONFIG_GETPCACHE2: + case capi.SQLITE_CONFIG_GETPCACHE: + case capi.SQLITE_CONFIG_HEAP: + case capi.SQLITE_CONFIG_LOG: + case capi.SQLITE_CONFIG_MALLOC: + case capi.SQLITE_CONFIG_MMAP_SIZE: + case capi.SQLITE_CONFIG_MULTITHREAD: + case capi.SQLITE_CONFIG_MUTEX: + case capi.SQLITE_CONFIG_PAGECACHE: + case capi.SQLITE_CONFIG_PCACHE2: + case capi.SQLITE_CONFIG_PCACHE: + case capi.SQLITE_CONFIG_PCACHE_HDRSZ: + case capi.SQLITE_CONFIG_PMASZ: + case capi.SQLITE_CONFIG_SERIALIZED: + case capi.SQLITE_CONFIG_SINGLETHREAD: + case capi.SQLITE_CONFIG_SQLLOG: + case capi.SQLITE_CONFIG_WIN32_HEAPSIZE: + default: + return capi.SQLITE_NOTFOUND; + } + }; + } + + { + const __autoExtFptr = new Set; + + capi.sqlite3_auto_extension = function(fPtr){ + if( fPtr instanceof Function ){ + fPtr = wasm.installFunction('i(ppp)', fPtr); + }else if( 1!==arguments.length || !wasm.isPtr(fPtr) ){ + return capi.SQLITE_MISUSE; + } + const rc = wasm.exports.sqlite3_auto_extension(fPtr); + if( fPtr!==arguments[0] ){ + if(0===rc) __autoExtFptr.add(fPtr); + else wasm.uninstallFunction(fPtr); + } + return rc; + }; + + capi.sqlite3_cancel_auto_extension = function(fPtr){ + ; + if(!fPtr || 1!==arguments.length || !wasm.isPtr(fPtr)) return 0; + return wasm.exports.sqlite3_cancel_auto_extension(fPtr); + + }; + + capi.sqlite3_reset_auto_extension = function(){ + wasm.exports.sqlite3_reset_auto_extension(); + for(const fp of __autoExtFptr) wasm.uninstallFunction(fp); + __autoExtFptr.clear(); + }; + } + + const pKvvfs = capi.sqlite3_vfs_find("kvvfs"); + if( pKvvfs ){ + if(util.isUIThread()){ + const kvvfsMethods = new capi.sqlite3_kvvfs_methods( + wasm.exports.sqlite3_wasm_kvvfs_methods() + ); + delete capi.sqlite3_kvvfs_methods; + + const kvvfsMakeKey = wasm.exports.sqlite3_wasm_kvvfsMakeKeyOnPstack, + pstack = wasm.pstack; + + const kvvfsStorage = (zClass)=> + ((115===wasm.peek(zClass)) + ? sessionStorage : localStorage); + + + const kvvfsImpls = { + xRead: (zClass, zKey, zBuf, nBuf)=>{ + const stack = pstack.pointer, + astack = wasm.scopedAllocPush(); + try { + const zXKey = kvvfsMakeKey(zClass,zKey); + if(!zXKey) return -3; + const jKey = wasm.cstrToJs(zXKey); + const jV = kvvfsStorage(zClass).getItem(jKey); + if(!jV) return -1; + const nV = jV.length ; + if(nBuf<=0) return nV; + else if(1===nBuf){ + wasm.poke(zBuf, 0); + return nV; + } + const zV = wasm.scopedAllocCString(jV); + if(nBuf > nV + 1) nBuf = nV + 1; + wasm.heap8u().copyWithin(zBuf, zV, zV + nBuf - 1); + wasm.poke(zBuf + nBuf - 1, 0); + return nBuf - 1; + }catch(e){ + console.error("kvstorageRead()",e); + return -2; + }finally{ + pstack.restore(stack); + wasm.scopedAllocPop(astack); + } + }, + xWrite: (zClass, zKey, zData)=>{ + const stack = pstack.pointer; + try { + const zXKey = kvvfsMakeKey(zClass,zKey); + if(!zXKey) return 1; + const jKey = wasm.cstrToJs(zXKey); + kvvfsStorage(zClass).setItem(jKey, wasm.cstrToJs(zData)); + return 0; + }catch(e){ + console.error("kvstorageWrite()",e); + return capi.SQLITE_IOERR; + }finally{ + pstack.restore(stack); + } + }, + xDelete: (zClass, zKey)=>{ + const stack = pstack.pointer; + try { + const zXKey = kvvfsMakeKey(zClass,zKey); + if(!zXKey) return 1; + kvvfsStorage(zClass).removeItem(wasm.cstrToJs(zXKey)); + return 0; + }catch(e){ + console.error("kvstorageDelete()",e); + return capi.SQLITE_IOERR; + }finally{ + pstack.restore(stack); + } + } + }; + for(const k of Object.keys(kvvfsImpls)){ + kvvfsMethods[kvvfsMethods.memberKey(k)] = + wasm.installFunction( + kvvfsMethods.memberSignature(k), + kvvfsImpls[k] + ); + } + }else{ + + capi.sqlite3_vfs_unregister(pKvvfs); + } + } + + wasm.xWrap.FuncPtrAdapter.warnOnUse = true; +}); + + +globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ + sqlite3.version = {"libVersion": "3.45.0", "libVersionNumber": 3045000, "sourceId": "2024-01-15 17:01:13 1066602b2b1976fe58b5150777cced894af17c803e068f5918390d6915b46e1d","downloadVersion": 3450000}; +}); + + + +globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ + const toss = (...args)=>{throw new Error(args.join(' '))}; + const toss3 = (...args)=>{throw new sqlite3.SQLite3Error(...args)}; + + const capi = sqlite3.capi, wasm = sqlite3.wasm, util = sqlite3.util; + + + + const __ptrMap = new WeakMap(); + + const __stmtMap = new WeakMap(); + + + const getOwnOption = (opts, p, dflt)=>{ + const d = Object.getOwnPropertyDescriptor(opts,p); + return d ? d.value : dflt; + }; + + + const checkSqlite3Rc = function(dbPtr, sqliteResultCode){ + if(sqliteResultCode){ + if(dbPtr instanceof DB) dbPtr = dbPtr.pointer; + toss3( + sqliteResultCode, + "sqlite3 result code",sqliteResultCode+":", + (dbPtr + ? capi.sqlite3_errmsg(dbPtr) + : capi.sqlite3_errstr(sqliteResultCode)) + ); + } + return arguments[0]; + }; + + + const __dbTraceToConsole = + wasm.installFunction('i(ippp)', function(t,c,p,x){ + if(capi.SQLITE_TRACE_STMT===t){ + + console.log("SQL TRACE #"+(++this.counter)+' via sqlite3@'+c+':', + wasm.cstrToJs(x)); + } + }.bind({counter: 0})); + + + const __vfsPostOpenSql = Object.create(null); + + + const dbCtorHelper = function ctor(...args){ + if(!ctor._name2vfs){ + + ctor._name2vfs = Object.create(null); + const isWorkerThread = ('function'===typeof importScripts) + ? (n)=>toss3("The VFS for",n,"is only available in the main window thread.") + : false; + ctor._name2vfs[':localStorage:'] = { + vfs: 'kvvfs', filename: isWorkerThread || (()=>'local') + }; + ctor._name2vfs[':sessionStorage:'] = { + vfs: 'kvvfs', filename: isWorkerThread || (()=>'session') + }; + } + const opt = ctor.normalizeArgs(...args); + let fn = opt.filename, vfsName = opt.vfs, flagsStr = opt.flags; + if(('string'!==typeof fn && 'number'!==typeof fn) + || 'string'!==typeof flagsStr + || (vfsName && ('string'!==typeof vfsName && 'number'!==typeof vfsName))){ + sqlite3.config.error("Invalid DB ctor args",opt,arguments); + toss3("Invalid arguments for DB constructor."); + } + let fnJs = ('number'===typeof fn) ? wasm.cstrToJs(fn) : fn; + const vfsCheck = ctor._name2vfs[fnJs]; + if(vfsCheck){ + vfsName = vfsCheck.vfs; + fn = fnJs = vfsCheck.filename(fnJs); + } + let pDb, oflags = 0; + if( flagsStr.indexOf('c')>=0 ){ + oflags |= capi.SQLITE_OPEN_CREATE | capi.SQLITE_OPEN_READWRITE; + } + if( flagsStr.indexOf('w')>=0 ) oflags |= capi.SQLITE_OPEN_READWRITE; + if( 0===oflags ) oflags |= capi.SQLITE_OPEN_READONLY; + oflags |= capi.SQLITE_OPEN_EXRESCODE; + const stack = wasm.pstack.pointer; + try { + const pPtr = wasm.pstack.allocPtr() ; + let rc = capi.sqlite3_open_v2(fn, pPtr, oflags, vfsName || 0); + pDb = wasm.peekPtr(pPtr); + checkSqlite3Rc(pDb, rc); + capi.sqlite3_extended_result_codes(pDb, 1); + if(flagsStr.indexOf('t')>=0){ + capi.sqlite3_trace_v2(pDb, capi.SQLITE_TRACE_STMT, + __dbTraceToConsole, pDb); + } + }catch( e ){ + if( pDb ) capi.sqlite3_close_v2(pDb); + throw e; + }finally{ + wasm.pstack.restore(stack); + } + this.filename = fnJs; + __ptrMap.set(this, pDb); + __stmtMap.set(this, Object.create(null)); + try{ + + const pVfs = capi.sqlite3_js_db_vfs(pDb); + if(!pVfs) toss3("Internal error: cannot get VFS for new db handle."); + const postInitSql = __vfsPostOpenSql[pVfs]; + if(postInitSql instanceof Function){ + postInitSql(this, sqlite3); + }else if(postInitSql){ + checkSqlite3Rc( + pDb, capi.sqlite3_exec(pDb, postInitSql, 0, 0, 0) + ); + } + }catch(e){ + this.close(); + throw e; + } + }; + + + dbCtorHelper.setVfsPostOpenSql = function(pVfs, sql){ + __vfsPostOpenSql[pVfs] = sql; + }; + + + dbCtorHelper.normalizeArgs = function(filename=':memory:',flags = 'c',vfs = null){ + const arg = {}; + if(1===arguments.length && arguments[0] && 'object'===typeof arguments[0]){ + Object.assign(arg, arguments[0]); + if(undefined===arg.flags) arg.flags = 'c'; + if(undefined===arg.vfs) arg.vfs = null; + if(undefined===arg.filename) arg.filename = ':memory:'; + }else{ + arg.filename = filename; + arg.flags = flags; + arg.vfs = vfs; + } + return arg; + }; + + const DB = function(...args){ + dbCtorHelper.apply(this, args); + }; + DB.dbCtorHelper = dbCtorHelper; + + + const BindTypes = { + null: 1, + number: 2, + string: 3, + boolean: 4, + blob: 5 + }; + BindTypes['undefined'] == BindTypes.null; + if(wasm.bigIntEnabled){ + BindTypes.bigint = BindTypes.number; + } + + + const Stmt = function(){ + if(BindTypes!==arguments[2]){ + toss3(capi.SQLITE_MISUSE, "Do not call the Stmt constructor directly. Use DB.prepare()."); + } + this.db = arguments[0]; + __ptrMap.set(this, arguments[1]); + this.parameterCount = capi.sqlite3_bind_parameter_count(this.pointer); + }; + + + const affirmDbOpen = function(db){ + if(!db.pointer) toss3("DB has been closed."); + return db; + }; + + + const affirmColIndex = function(stmt,ndx){ + if((ndx !== (ndx|0)) || ndx<0 || ndx>=stmt.columnCount){ + toss3("Column index",ndx,"is out of range."); + } + return stmt; + }; + + + const parseExecArgs = function(db, args){ + const out = Object.create(null); + out.opt = Object.create(null); + switch(args.length){ + case 1: + if('string'===typeof args[0] || util.isSQLableTypedArray(args[0])){ + out.sql = args[0]; + }else if(Array.isArray(args[0])){ + out.sql = args[0]; + }else if(args[0] && 'object'===typeof args[0]){ + out.opt = args[0]; + out.sql = out.opt.sql; + } + break; + case 2: + out.sql = args[0]; + out.opt = args[1]; + break; + default: toss3("Invalid argument count for exec()."); + }; + out.sql = util.flexibleString(out.sql); + if('string'!==typeof out.sql){ + toss3("Missing SQL argument or unsupported SQL value type."); + } + const opt = out.opt; + switch(opt.returnValue){ + case 'resultRows': + if(!opt.resultRows) opt.resultRows = []; + out.returnVal = ()=>opt.resultRows; + break; + case 'saveSql': + if(!opt.saveSql) opt.saveSql = []; + out.returnVal = ()=>opt.saveSql; + break; + case undefined: + case 'this': + out.returnVal = ()=>db; + break; + default: + toss3("Invalid returnValue value:",opt.returnValue); + } + if(!opt.callback && !opt.returnValue && undefined!==opt.rowMode){ + if(!opt.resultRows) opt.resultRows = []; + out.returnVal = ()=>opt.resultRows; + } + if(opt.callback || opt.resultRows){ + switch((undefined===opt.rowMode) + ? 'array' : opt.rowMode) { + case 'object': out.cbArg = (stmt)=>stmt.get(Object.create(null)); break; + case 'array': out.cbArg = (stmt)=>stmt.get([]); break; + case 'stmt': + if(Array.isArray(opt.resultRows)){ + toss3("exec(): invalid rowMode for a resultRows array: must", + "be one of 'array', 'object',", + "a result column number, or column name reference."); + } + out.cbArg = (stmt)=>stmt; + break; + default: + if(util.isInt32(opt.rowMode)){ + out.cbArg = (stmt)=>stmt.get(opt.rowMode); + break; + }else if('string'===typeof opt.rowMode + && opt.rowMode.length>1 + && '$'===opt.rowMode[0]){ + + const $colName = opt.rowMode.substr(1); + out.cbArg = (stmt)=>{ + const rc = stmt.get(Object.create(null))[$colName]; + return (undefined===rc) + ? toss3(capi.SQLITE_NOTFOUND, + "exec(): unknown result column:",$colName) + : rc; + }; + break; + } + toss3("Invalid rowMode:",opt.rowMode); + } + } + return out; + }; + + + const __selectFirstRow = (db, sql, bind, ...getArgs)=>{ + const stmt = db.prepare(sql); + try { + const rc = stmt.bind(bind).step() ? stmt.get(...getArgs) : undefined; + stmt.reset(); + return rc; + }finally{ + stmt.finalize(); + } + }; + + + const __selectAll = + (db, sql, bind, rowMode)=>db.exec({ + sql, bind, rowMode, returnValue: 'resultRows' + }); + + + DB.checkRc = (db,resultCode)=>checkSqlite3Rc(db,resultCode); + + DB.prototype = { + + isOpen: function(){ + return !!this.pointer; + }, + + affirmOpen: function(){ + return affirmDbOpen(this); + }, + + close: function(){ + if(this.pointer){ + if(this.onclose && (this.onclose.before instanceof Function)){ + try{this.onclose.before(this)} + catch(e){} + } + const pDb = this.pointer; + Object.keys(__stmtMap.get(this)).forEach((k,s)=>{ + if(s && s.pointer){ + try{s.finalize()} + catch(e){} + } + }); + __ptrMap.delete(this); + __stmtMap.delete(this); + capi.sqlite3_close_v2(pDb); + if(this.onclose && (this.onclose.after instanceof Function)){ + try{this.onclose.after(this)} + catch(e){} + } + delete this.filename; + } + }, + + changes: function(total=false,sixtyFour=false){ + const p = affirmDbOpen(this).pointer; + if(total){ + return sixtyFour + ? capi.sqlite3_total_changes64(p) + : capi.sqlite3_total_changes(p); + }else{ + return sixtyFour + ? capi.sqlite3_changes64(p) + : capi.sqlite3_changes(p); + } + }, + + dbFilename: function(dbName='main'){ + return capi.sqlite3_db_filename(affirmDbOpen(this).pointer, dbName); + }, + + dbName: function(dbNumber=0){ + return capi.sqlite3_db_name(affirmDbOpen(this).pointer, dbNumber); + }, + + dbVfsName: function(dbName=0){ + let rc; + const pVfs = capi.sqlite3_js_db_vfs( + affirmDbOpen(this).pointer, dbName + ); + if(pVfs){ + const v = new capi.sqlite3_vfs(pVfs); + try{ rc = wasm.cstrToJs(v.$zName) } + finally { v.dispose() } + } + return rc; + }, + + prepare: function(sql){ + affirmDbOpen(this); + const stack = wasm.pstack.pointer; + let ppStmt, pStmt; + try{ + ppStmt = wasm.pstack.alloc(8); + DB.checkRc(this, capi.sqlite3_prepare_v2(this.pointer, sql, -1, ppStmt, null)); + pStmt = wasm.peekPtr(ppStmt); + } + finally { + wasm.pstack.restore(stack); + } + if(!pStmt) toss3("Cannot prepare empty SQL."); + const stmt = new Stmt(this, pStmt, BindTypes); + __stmtMap.get(this)[pStmt] = stmt; + return stmt; + }, + + exec: function(){ + affirmDbOpen(this); + const arg = parseExecArgs(this, arguments); + if(!arg.sql){ + return toss3("exec() requires an SQL string."); + } + const opt = arg.opt; + const callback = opt.callback; + const resultRows = + Array.isArray(opt.resultRows) ? opt.resultRows : undefined; + let stmt; + let bind = opt.bind; + let evalFirstResult = !!( + arg.cbArg || opt.columnNames || resultRows + ) ; + const stack = wasm.scopedAllocPush(); + const saveSql = Array.isArray(opt.saveSql) ? opt.saveSql : undefined; + try{ + const isTA = util.isSQLableTypedArray(arg.sql) + ; + + let sqlByteLen = isTA ? arg.sql.byteLength : wasm.jstrlen(arg.sql); + const ppStmt = wasm.scopedAlloc( + + (2 * wasm.ptrSizeof) + (sqlByteLen + 1) + ); + const pzTail = ppStmt + wasm.ptrSizeof ; + let pSql = pzTail + wasm.ptrSizeof; + const pSqlEnd = pSql + sqlByteLen; + if(isTA) wasm.heap8().set(arg.sql, pSql); + else wasm.jstrcpy(arg.sql, wasm.heap8(), pSql, sqlByteLen, false); + wasm.poke(pSql + sqlByteLen, 0); + while(pSql && wasm.peek(pSql, 'i8') + ){ + wasm.pokePtr([ppStmt, pzTail], 0); + DB.checkRc(this, capi.sqlite3_prepare_v3( + this.pointer, pSql, sqlByteLen, 0, ppStmt, pzTail + )); + const pStmt = wasm.peekPtr(ppStmt); + pSql = wasm.peekPtr(pzTail); + sqlByteLen = pSqlEnd - pSql; + if(!pStmt) continue; + if(saveSql) saveSql.push(capi.sqlite3_sql(pStmt).trim()); + stmt = new Stmt(this, pStmt, BindTypes); + if(bind && stmt.parameterCount){ + stmt.bind(bind); + bind = null; + } + if(evalFirstResult && stmt.columnCount){ + + let gotColNames = Array.isArray( + opt.columnNames + ) ? 0 : 1; + evalFirstResult = false; + if(arg.cbArg || resultRows){ + for(; stmt.step(); stmt._lockedByExec = false){ + if(0===gotColNames++) stmt.getColumnNames(opt.columnNames); + stmt._lockedByExec = true; + const row = arg.cbArg(stmt); + if(resultRows) resultRows.push(row); + if(callback && false === callback.call(opt, row, stmt)){ + break; + } + } + stmt._lockedByExec = false; + } + if(0===gotColNames){ + + stmt.getColumnNames(opt.columnNames); + } + }else{ + stmt.step(); + } + stmt.reset( + ).finalize(); + stmt = null; + } + }finally{ + wasm.scopedAllocPop(stack); + if(stmt){ + delete stmt._lockedByExec; + stmt.finalize(); + } + } + return arg.returnVal(); + }, + + + createFunction: function f(name, xFunc, opt){ + const isFunc = (f)=>(f instanceof Function); + switch(arguments.length){ + case 1: + opt = name; + name = opt.name; + xFunc = opt.xFunc || 0; + break; + case 2: + if(!isFunc(xFunc)){ + opt = xFunc; + xFunc = opt.xFunc || 0; + } + break; + case 3: + break; + default: break; + } + if(!opt) opt = {}; + if('string' !== typeof name){ + toss3("Invalid arguments: missing function name."); + } + let xStep = opt.xStep || 0; + let xFinal = opt.xFinal || 0; + const xValue = opt.xValue || 0; + const xInverse = opt.xInverse || 0; + let isWindow = undefined; + if(isFunc(xFunc)){ + isWindow = false; + if(isFunc(xStep) || isFunc(xFinal)){ + toss3("Ambiguous arguments: scalar or aggregate?"); + } + xStep = xFinal = null; + }else if(isFunc(xStep)){ + if(!isFunc(xFinal)){ + toss3("Missing xFinal() callback for aggregate or window UDF."); + } + xFunc = null; + }else if(isFunc(xFinal)){ + toss3("Missing xStep() callback for aggregate or window UDF."); + }else{ + toss3("Missing function-type properties."); + } + if(false === isWindow){ + if(isFunc(xValue) || isFunc(xInverse)){ + toss3("xValue and xInverse are not permitted for non-window UDFs."); + } + }else if(isFunc(xValue)){ + if(!isFunc(xInverse)){ + toss3("xInverse must be provided if xValue is."); + } + isWindow = true; + }else if(isFunc(xInverse)){ + toss3("xValue must be provided if xInverse is."); + } + const pApp = opt.pApp; + if(undefined!==pApp && + null!==pApp && + (('number'!==typeof pApp) || !util.isInt32(pApp))){ + toss3("Invalid value for pApp property. Must be a legal WASM pointer value."); + } + const xDestroy = opt.xDestroy || 0; + if(xDestroy && !isFunc(xDestroy)){ + toss3("xDestroy property must be a function."); + } + let fFlags = 0 ; + if(getOwnOption(opt, 'deterministic')) fFlags |= capi.SQLITE_DETERMINISTIC; + if(getOwnOption(opt, 'directOnly')) fFlags |= capi.SQLITE_DIRECTONLY; + if(getOwnOption(opt, 'innocuous')) fFlags |= capi.SQLITE_INNOCUOUS; + name = name.toLowerCase(); + const xArity = xFunc || xStep; + const arity = getOwnOption(opt, 'arity'); + const arityArg = ('number'===typeof arity + ? arity + : (xArity.length ? xArity.length-1 : 0)); + let rc; + if( isWindow ){ + rc = capi.sqlite3_create_window_function( + this.pointer, name, arityArg, + capi.SQLITE_UTF8 | fFlags, pApp || 0, + xStep, xFinal, xValue, xInverse, xDestroy); + }else{ + rc = capi.sqlite3_create_function_v2( + this.pointer, name, arityArg, + capi.SQLITE_UTF8 | fFlags, pApp || 0, + xFunc, xStep, xFinal, xDestroy); + } + DB.checkRc(this, rc); + return this; + }, + + selectValue: function(sql,bind,asType){ + return __selectFirstRow(this, sql, bind, 0, asType); + }, + + + selectValues: function(sql,bind,asType){ + const stmt = this.prepare(sql), rc = []; + try { + stmt.bind(bind); + while(stmt.step()) rc.push(stmt.get(0,asType)); + stmt.reset(); + }finally{ + stmt.finalize(); + } + return rc; + }, + + + selectArray: function(sql,bind){ + return __selectFirstRow(this, sql, bind, []); + }, + + + selectObject: function(sql,bind){ + return __selectFirstRow(this, sql, bind, {}); + }, + + + selectArrays: function(sql,bind){ + return __selectAll(this, sql, bind, 'array'); + }, + + + selectObjects: function(sql,bind){ + return __selectAll(this, sql, bind, 'object'); + }, + + + openStatementCount: function(){ + return this.pointer ? Object.keys(__stmtMap.get(this)).length : 0; + }, + + + transaction: function(callback){ + let opener = 'BEGIN'; + if(arguments.length>1){ + if(/[^a-zA-Z]/.test(arguments[0])){ + toss3(capi.SQLITE_MISUSE, "Invalid argument for BEGIN qualifier."); + } + opener += ' '+arguments[0]; + callback = arguments[1]; + } + affirmDbOpen(this).exec(opener); + try { + const rc = callback(this); + this.exec("COMMIT"); + return rc; + }catch(e){ + this.exec("ROLLBACK"); + throw e; + } + }, + + + savepoint: function(callback){ + affirmDbOpen(this).exec("SAVEPOINT oo1"); + try { + const rc = callback(this); + this.exec("RELEASE oo1"); + return rc; + }catch(e){ + this.exec("ROLLBACK to SAVEPOINT oo1; RELEASE SAVEPOINT oo1"); + throw e; + } + }, + + + checkRc: function(resultCode){ + return checkSqlite3Rc(this, resultCode); + } + }; + + + + const affirmStmtOpen = function(stmt){ + if(!stmt.pointer) toss3("Stmt has been closed."); + return stmt; + }; + + + const isSupportedBindType = function(v){ + let t = BindTypes[(null===v||undefined===v) ? 'null' : typeof v]; + switch(t){ + case BindTypes.boolean: + case BindTypes.null: + case BindTypes.number: + case BindTypes.string: + return t; + case BindTypes.bigint: + if(wasm.bigIntEnabled) return t; + + default: + return util.isBindableTypedArray(v) ? BindTypes.blob : undefined; + } + }; + + + const affirmSupportedBindType = function(v){ + + return isSupportedBindType(v) || toss3("Unsupported bind() argument type:",typeof v); + }; + + + const affirmParamIndex = function(stmt,key){ + const n = ('number'===typeof key) + ? key : capi.sqlite3_bind_parameter_index(stmt.pointer, key); + if(0===n || !util.isInt32(n)){ + toss3("Invalid bind() parameter name: "+key); + } + else if(n<1 || n>stmt.parameterCount) toss3("Bind index",key,"is out of range."); + return n; + }; + + + const affirmNotLockedByExec = function(stmt,currentOpName){ + if(stmt._lockedByExec){ + toss3("Operation is illegal when statement is locked:",currentOpName); + } + return stmt; + }; + + + const bindOne = function f(stmt,ndx,bindType,val){ + affirmNotLockedByExec(affirmStmtOpen(stmt), 'bind()'); + if(!f._){ + f._tooBigInt = (v)=>toss3( + "BigInt value is too big to store without precision loss:", v + ); + f._ = { + string: function(stmt, ndx, val, asBlob){ + const [pStr, n] = wasm.allocCString(val, true); + const f = asBlob ? capi.sqlite3_bind_blob : capi.sqlite3_bind_text; + return f(stmt.pointer, ndx, pStr, n, capi.SQLITE_WASM_DEALLOC); + } + }; + } + affirmSupportedBindType(val); + ndx = affirmParamIndex(stmt,ndx); + let rc = 0; + switch((null===val || undefined===val) ? BindTypes.null : bindType){ + case BindTypes.null: + rc = capi.sqlite3_bind_null(stmt.pointer, ndx); + break; + case BindTypes.string: + rc = f._.string(stmt, ndx, val, false); + break; + case BindTypes.number: { + let m; + if(util.isInt32(val)) m = capi.sqlite3_bind_int; + else if('bigint'===typeof val){ + if(!util.bigIntFits64(val)){ + f._tooBigInt(val); + }else if(wasm.bigIntEnabled){ + m = capi.sqlite3_bind_int64; + }else if(util.bigIntFitsDouble(val)){ + val = Number(val); + m = capi.sqlite3_bind_double; + }else{ + f._tooBigInt(val); + } + }else{ + val = Number(val); + if(wasm.bigIntEnabled && Number.isInteger(val)){ + m = capi.sqlite3_bind_int64; + }else{ + m = capi.sqlite3_bind_double; + } + } + rc = m(stmt.pointer, ndx, val); + break; + } + case BindTypes.boolean: + rc = capi.sqlite3_bind_int(stmt.pointer, ndx, val ? 1 : 0); + break; + case BindTypes.blob: { + if('string'===typeof val){ + rc = f._.string(stmt, ndx, val, true); + break; + }else if(val instanceof ArrayBuffer){ + val = new Uint8Array(val); + }else if(!util.isBindableTypedArray(val)){ + toss3("Binding a value as a blob requires", + "that it be a string, Uint8Array, Int8Array, or ArrayBuffer."); + } + const pBlob = wasm.alloc(val.byteLength || 1); + wasm.heap8().set(val.byteLength ? val : [0], pBlob) + rc = capi.sqlite3_bind_blob(stmt.pointer, ndx, pBlob, val.byteLength, + capi.SQLITE_WASM_DEALLOC); + break; + } + default: + sqlite3.config.warn("Unsupported bind() argument type:",val); + toss3("Unsupported bind() argument type: "+(typeof val)); + } + if(rc) DB.checkRc(stmt.db.pointer, rc); + stmt._mayGet = false; + return stmt; + }; + + Stmt.prototype = { + + finalize: function(){ + if(this.pointer){ + affirmNotLockedByExec(this,'finalize()'); + const rc = capi.sqlite3_finalize(this.pointer); + delete __stmtMap.get(this.db)[this.pointer]; + __ptrMap.delete(this); + delete this._mayGet; + delete this.parameterCount; + delete this._lockedByExec; + delete this.db; + return rc; + } + }, + + clearBindings: function(){ + affirmNotLockedByExec(affirmStmtOpen(this), 'clearBindings()') + capi.sqlite3_clear_bindings(this.pointer); + this._mayGet = false; + return this; + }, + + reset: function(alsoClearBinds){ + affirmNotLockedByExec(this,'reset()'); + if(alsoClearBinds) this.clearBindings(); + const rc = capi.sqlite3_reset(affirmStmtOpen(this).pointer); + this._mayGet = false; + checkSqlite3Rc(this.db, rc); + return this; + }, + + bind: function(){ + affirmStmtOpen(this); + let ndx, arg; + switch(arguments.length){ + case 1: ndx = 1; arg = arguments[0]; break; + case 2: ndx = arguments[0]; arg = arguments[1]; break; + default: toss3("Invalid bind() arguments."); + } + if(undefined===arg){ + + return this; + }else if(!this.parameterCount){ + toss3("This statement has no bindable parameters."); + } + this._mayGet = false; + if(null===arg){ + + return bindOne(this, ndx, BindTypes.null, arg); + } + else if(Array.isArray(arg)){ + + if(1!==arguments.length){ + toss3("When binding an array, an index argument is not permitted."); + } + arg.forEach((v,i)=>bindOne(this, i+1, affirmSupportedBindType(v), v)); + return this; + }else if(arg instanceof ArrayBuffer){ + arg = new Uint8Array(arg); + } + if('object'===typeof arg + && !util.isBindableTypedArray(arg)){ + + if(1!==arguments.length){ + toss3("When binding an object, an index argument is not permitted."); + } + Object.keys(arg) + .forEach(k=>bindOne(this, k, + affirmSupportedBindType(arg[k]), + arg[k])); + return this; + }else{ + return bindOne(this, ndx, affirmSupportedBindType(arg), arg); + } + toss3("Should not reach this point."); + }, + + bindAsBlob: function(ndx,arg){ + affirmStmtOpen(this); + if(1===arguments.length){ + arg = ndx; + ndx = 1; + } + const t = affirmSupportedBindType(arg); + if(BindTypes.string !== t && BindTypes.blob !== t + && BindTypes.null !== t){ + toss3("Invalid value type for bindAsBlob()"); + } + return bindOne(this, ndx, BindTypes.blob, arg); + }, + + step: function(){ + affirmNotLockedByExec(this, 'step()'); + const rc = capi.sqlite3_step(affirmStmtOpen(this).pointer); + switch(rc){ + case capi.SQLITE_DONE: return this._mayGet = false; + case capi.SQLITE_ROW: return this._mayGet = true; + default: + this._mayGet = false; + sqlite3.config.warn("sqlite3_step() rc=",rc, + capi.sqlite3_js_rc_str(rc), + "SQL =", capi.sqlite3_sql(this.pointer)); + DB.checkRc(this.db.pointer, rc); + } + }, + + stepReset: function(){ + this.step(); + return this.reset(); + }, + + stepFinalize: function(){ + try{ + const rc = this.step(); + this.reset(); + return rc; + }finally{ + try{this.finalize()} + catch(e){} + } + }, + + get: function(ndx,asType){ + if(!affirmStmtOpen(this)._mayGet){ + toss3("Stmt.step() has not (recently) returned true."); + } + if(Array.isArray(ndx)){ + let i = 0; + const n = this.columnCount; + while(i=Number.MIN_SAFE_INTEGER && rc<=Number.MAX_SAFE_INTEGER){ + + return Number(rc).valueOf(); + } + return rc; + }else{ + const rc = capi.sqlite3_column_double(this.pointer, ndx); + if(rc>Number.MAX_SAFE_INTEGER || rctoss3("The pointer property is read-only.") + } + Object.defineProperty(Stmt.prototype, 'pointer', prop); + Object.defineProperty(DB.prototype, 'pointer', prop); + } + + Object.defineProperty(Stmt.prototype, 'columnCount', { + enumerable: false, + get: function(){return capi.sqlite3_column_count(this.pointer)}, + set: ()=>toss3("The columnCount property is read-only.") + }); + + + sqlite3.oo1 = { + DB, + Stmt + }; + + if(util.isUIThread()){ + + sqlite3.oo1.JsStorageDb = function(storageName='session'){ + if('session'!==storageName && 'local'!==storageName){ + toss3("JsStorageDb db name must be one of 'session' or 'local'."); + } + dbCtorHelper.call(this, { + filename: storageName, + flags: 'c', + vfs: "kvvfs" + }); + }; + const jdb = sqlite3.oo1.JsStorageDb; + jdb.prototype = Object.create(DB.prototype); + + jdb.clearStorage = capi.sqlite3_js_kvvfs_clear; + + jdb.prototype.clearStorage = function(){ + return jdb.clearStorage(affirmDbOpen(this).filename); + }; + + jdb.storageSize = capi.sqlite3_js_kvvfs_size; + + jdb.prototype.storageSize = function(){ + return jdb.storageSize(affirmDbOpen(this).filename); + }; + } + +}); + + + + + +globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ +sqlite3.initWorker1API = function(){ + 'use strict'; + const toss = (...args)=>{throw new Error(args.join(' '))}; + if(!(globalThis.WorkerGlobalScope instanceof Function)){ + toss("initWorker1API() must be run from a Worker thread."); + } + const sqlite3 = this.sqlite3 || toss("Missing this.sqlite3 object."); + const DB = sqlite3.oo1.DB; + + + const getDbId = function(db){ + let id = wState.idMap.get(db); + if(id) return id; + id = 'db#'+(++wState.idSeq)+'@'+db.pointer; + + wState.idMap.set(db, id); + return id; + }; + + + const wState = { + + dbList: [], + + idSeq: 0, + + idMap: new WeakMap, + + xfer: [], + open: function(opt){ + const db = new DB(opt); + this.dbs[getDbId(db)] = db; + if(this.dbList.indexOf(db)<0) this.dbList.push(db); + return db; + }, + close: function(db,alsoUnlink){ + if(db){ + delete this.dbs[getDbId(db)]; + const filename = db.filename; + const pVfs = sqlite3.wasm.sqlite3_wasm_db_vfs(db.pointer, 0); + db.close(); + const ddNdx = this.dbList.indexOf(db); + if(ddNdx>=0) this.dbList.splice(ddNdx, 1); + if(alsoUnlink && filename && pVfs){ + sqlite3.wasm.sqlite3_wasm_vfs_unlink(pVfs, filename); + } + } + }, + + post: function(msg,xferList){ + if(xferList && xferList.length){ + globalThis.postMessage( msg, Array.from(xferList) ); + xferList.length = 0; + }else{ + globalThis.postMessage(msg); + } + }, + + dbs: Object.create(null), + + getDb: function(id,require=true){ + return this.dbs[id] + || (require ? toss("Unknown (or closed) DB ID:",id) : undefined); + } + }; + + + const affirmDbOpen = function(db = wState.dbList[0]){ + return (db && db.pointer) ? db : toss("DB is not opened."); + }; + + + const getMsgDb = function(msgData,affirmExists=true){ + const db = wState.getDb(msgData.dbId,false) || wState.dbList[0]; + return affirmExists ? affirmDbOpen(db) : db; + }; + + const getDefaultDbId = function(){ + return wState.dbList[0] && getDbId(wState.dbList[0]); + }; + + const guessVfs = function(filename){ + const m = /^file:.+(vfs=(\w+))/.exec(filename); + return sqlite3.capi.sqlite3_vfs_find(m ? m[2] : 0); + }; + + const isSpecialDbFilename = (n)=>{ + return ""===n || ':'===n[0]; + }; + + + const wMsgHandler = { + open: function(ev){ + const oargs = Object.create(null), args = (ev.args || Object.create(null)); + if(args.simulateError){ + toss("Throwing because of simulateError flag."); + } + const rc = Object.create(null); + let byteArray, pVfs; + oargs.vfs = args.vfs; + if(isSpecialDbFilename(args.filename)){ + oargs.filename = args.filename || ""; + }else{ + oargs.filename = args.filename; + byteArray = args.byteArray; + if(byteArray) pVfs = guessVfs(args.filename); + } + if(pVfs){ + + let pMem; + try{ + pMem = sqlite3.wasm.allocFromTypedArray(byteArray); + const rc = sqlite3.wasm.sqlite3_wasm_vfs_create_file( + pVfs, oargs.filename, pMem, byteArray.byteLength + ); + if(rc) sqlite3.SQLite3Error.toss(rc); + }catch(e){ + throw new sqlite3.SQLite3Error( + e.name+' creating '+args.filename+": "+e.message, { + cause: e + } + ); + }finally{ + if(pMem) sqlite3.wasm.dealloc(pMem); + } + } + const db = wState.open(oargs); + rc.filename = db.filename; + rc.persistent = !!sqlite3.capi.sqlite3_js_db_uses_vfs(db.pointer, "opfs"); + rc.dbId = getDbId(db); + rc.vfs = db.dbVfsName(); + return rc; + }, + + close: function(ev){ + const db = getMsgDb(ev,false); + const response = { + filename: db && db.filename + }; + if(db){ + const doUnlink = ((ev.args && 'object'===typeof ev.args) + ? !!ev.args.unlink : false); + wState.close(db, doUnlink); + } + return response; + }, + + exec: function(ev){ + const rc = ( + 'string'===typeof ev.args + ) ? {sql: ev.args} : (ev.args || Object.create(null)); + if('stmt'===rc.rowMode){ + toss("Invalid rowMode for 'exec': stmt mode", + "does not work in the Worker API."); + }else if(!rc.sql){ + toss("'exec' requires input SQL."); + } + const db = getMsgDb(ev); + if(rc.callback || Array.isArray(rc.resultRows)){ + + db._blobXfer = wState.xfer; + } + const theCallback = rc.callback; + let rowNumber = 0; + const hadColNames = !!rc.columnNames; + if('string' === typeof theCallback){ + if(!hadColNames) rc.columnNames = []; + + rc.callback = function(row,stmt){ + wState.post({ + type: theCallback, + columnNames: rc.columnNames, + rowNumber: ++rowNumber, + row: row + }, wState.xfer); + } + } + try { + const changeCount = !!rc.countChanges + ? db.changes(true,(64===rc.countChanges)) + : undefined; + db.exec(rc); + if(undefined !== changeCount){ + rc.changeCount = db.changes(true,64===rc.countChanges) - changeCount; + } + if(rc.callback instanceof Function){ + rc.callback = theCallback; + + wState.post({ + type: theCallback, + columnNames: rc.columnNames, + rowNumber: null , + row: undefined + }); + } + }finally{ + delete db._blobXfer; + if(rc.callback) rc.callback = theCallback; + } + return rc; + }, + + 'config-get': function(){ + const rc = Object.create(null), src = sqlite3.config; + [ + 'bigIntEnabled' + ].forEach(function(k){ + if(Object.getOwnPropertyDescriptor(src, k)) rc[k] = src[k]; + }); + rc.version = sqlite3.version; + rc.vfsList = sqlite3.capi.sqlite3_js_vfs_list(); + rc.opfsEnabled = !!sqlite3.opfs; + return rc; + }, + + + export: function(ev){ + const db = getMsgDb(ev); + const response = { + byteArray: sqlite3.capi.sqlite3_js_db_export(db.pointer), + filename: db.filename, + mimetype: 'application/x-sqlite3' + }; + wState.xfer.push(response.byteArray.buffer); + return response; + }, + + toss: function(ev){ + toss("Testing worker exception"); + }, + + 'opfs-tree': async function(ev){ + if(!sqlite3.opfs) toss("OPFS support is unavailable."); + const response = await sqlite3.opfs.treeList(); + return response; + } + }; + + globalThis.onmessage = async function(ev){ + ev = ev.data; + let result, dbId = ev.dbId, evType = ev.type; + const arrivalTime = performance.now(); + try { + if(wMsgHandler.hasOwnProperty(evType) && + wMsgHandler[evType] instanceof Function){ + result = await wMsgHandler[evType](ev); + }else{ + toss("Unknown db worker message type:",ev.type); + } + }catch(err){ + evType = 'error'; + result = { + operation: ev.type, + message: err.message, + errorClass: err.name, + input: ev + }; + if(err.stack){ + result.stack = ('string'===typeof err.stack) + ? err.stack.split(/\n\s*/) : err.stack; + } + if(0) sqlite3.config.warn("Worker is propagating an exception to main thread.", + "Reporting it _here_ for the stack trace:",err,result); + } + if(!dbId){ + dbId = result.dbId + || getDefaultDbId(); + } + + + wState.post({ + type: evType, + dbId: dbId, + messageId: ev.messageId, + workerReceivedTime: arrivalTime, + workerRespondTime: performance.now(), + departureTime: ev.departureTime, + + + + + + + result: result + }, wState.xfer); + }; + globalThis.postMessage({type:'sqlite3-api',result:'worker1-ready'}); +}.bind({sqlite3}); +}); + + + + + +'use strict'; +globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ + const wasm = sqlite3.wasm, capi = sqlite3.capi, toss = sqlite3.util.toss3; + const vfs = Object.create(null), vtab = Object.create(null); + + const StructBinder = sqlite3.StructBinder + ; + sqlite3.vfs = vfs; + sqlite3.vtab = vtab; + + const sii = capi.sqlite3_index_info; + + sii.prototype.nthConstraint = function(n, asPtr=false){ + if(n<0 || n>=this.$nConstraint) return false; + const ptr = this.$aConstraint + ( + sii.sqlite3_index_constraint.structInfo.sizeof * n + ); + return asPtr ? ptr : new sii.sqlite3_index_constraint(ptr); + }; + + + sii.prototype.nthConstraintUsage = function(n, asPtr=false){ + if(n<0 || n>=this.$nConstraint) return false; + const ptr = this.$aConstraintUsage + ( + sii.sqlite3_index_constraint_usage.structInfo.sizeof * n + ); + return asPtr ? ptr : new sii.sqlite3_index_constraint_usage(ptr); + }; + + + sii.prototype.nthOrderBy = function(n, asPtr=false){ + if(n<0 || n>=this.$nOrderBy) return false; + const ptr = this.$aOrderBy + ( + sii.sqlite3_index_orderby.structInfo.sizeof * n + ); + return asPtr ? ptr : new sii.sqlite3_index_orderby(ptr); + }; + + + const installMethod = function callee( + tgt, name, func, applyArgcCheck = callee.installMethodArgcCheck + ){ + if(!(tgt instanceof StructBinder.StructType)){ + toss("Usage error: target object is-not-a StructType."); + }else if(!(func instanceof Function) && !wasm.isPtr(func)){ + toss("Usage errror: expecting a Function or WASM pointer to one."); + } + if(1===arguments.length){ + return (n,f)=>callee(tgt, n, f, applyArgcCheck); + } + if(!callee.argcProxy){ + callee.argcProxy = function(tgt, funcName, func,sig){ + return function(...args){ + if(func.length!==arguments.length){ + toss("Argument mismatch for", + tgt.structInfo.name+"::"+funcName + +": Native signature is:",sig); + } + return func.apply(this, args); + } + }; + + callee.removeFuncList = function(){ + if(this.ondispose.__removeFuncList){ + this.ondispose.__removeFuncList.forEach( + (v,ndx)=>{ + if('number'===typeof v){ + try{wasm.uninstallFunction(v)} + catch(e){} + } + + } + ); + delete this.ondispose.__removeFuncList; + } + }; + } + const sigN = tgt.memberSignature(name); + if(sigN.length<2){ + toss("Member",name,"does not have a function pointer signature:",sigN); + } + const memKey = tgt.memberKey(name); + const fProxy = (applyArgcCheck && !wasm.isPtr(func)) + + ? callee.argcProxy(tgt, memKey, func, sigN) + : func; + if(wasm.isPtr(fProxy)){ + if(fProxy && !wasm.functionEntry(fProxy)){ + toss("Pointer",fProxy,"is not a WASM function table entry."); + } + tgt[memKey] = fProxy; + }else{ + const pFunc = wasm.installFunction(fProxy, tgt.memberSignature(name, true)); + tgt[memKey] = pFunc; + if(!tgt.ondispose || !tgt.ondispose.__removeFuncList){ + tgt.addOnDispose('ondispose.__removeFuncList handler', + callee.removeFuncList); + tgt.ondispose.__removeFuncList = []; + } + tgt.ondispose.__removeFuncList.push(memKey, pFunc); + } + return (n,f)=>callee(tgt, n, f, applyArgcCheck); + }; + installMethod.installMethodArgcCheck = false; + + + const installMethods = function( + structInstance, methods, applyArgcCheck = installMethod.installMethodArgcCheck + ){ + const seen = new Map ; + for(const k of Object.keys(methods)){ + const m = methods[k]; + const prior = seen.get(m); + if(prior){ + const mkey = structInstance.memberKey(k); + structInstance[mkey] = structInstance[structInstance.memberKey(prior)]; + }else{ + installMethod(structInstance, k, m, applyArgcCheck); + seen.set(m, k); + } + } + return structInstance; + }; + + + StructBinder.StructType.prototype.installMethod = function callee( + name, func, applyArgcCheck = installMethod.installMethodArgcCheck + ){ + return (arguments.length < 3 && name && 'object'===typeof name) + ? installMethods(this, ...arguments) + : installMethod(this, ...arguments); + }; + + + StructBinder.StructType.prototype.installMethods = function( + methods, applyArgcCheck = installMethod.installMethodArgcCheck + ){ + return installMethods(this, methods, applyArgcCheck); + }; + + + capi.sqlite3_vfs.prototype.registerVfs = function(asDefault=false){ + if(!(this instanceof sqlite3.capi.sqlite3_vfs)){ + toss("Expecting a sqlite3_vfs-type argument."); + } + const rc = capi.sqlite3_vfs_register(this, asDefault ? 1 : 0); + if(rc){ + toss("sqlite3_vfs_register(",this,") failed with rc",rc); + } + if(this.pointer !== capi.sqlite3_vfs_find(this.$zName)){ + toss("BUG: sqlite3_vfs_find(vfs.$zName) failed for just-installed VFS", + this); + } + return this; + }; + + + vfs.installVfs = function(opt){ + let count = 0; + const propList = ['io','vfs']; + for(const key of propList){ + const o = opt[key]; + if(o){ + ++count; + installMethods(o.struct, o.methods, !!o.applyArgcCheck); + if('vfs'===key){ + if(!o.struct.$zName && 'string'===typeof o.name){ + o.struct.addOnDispose( + o.struct.$zName = wasm.allocCString(o.name) + ); + } + o.struct.registerVfs(!!o.asDefault); + } + } + } + if(!count) toss("Misuse: installVfs() options object requires at least", + "one of:", propList); + return this; + }; + + + const __xWrapFactory = function(methodName,StructType){ + return function(ptr,removeMapping=false){ + if(0===arguments.length) ptr = new StructType; + if(ptr instanceof StructType){ + + this.set(ptr.pointer, ptr); + return ptr; + }else if(!wasm.isPtr(ptr)){ + sqlite3.SQLite3Error.toss("Invalid argument to",methodName+"()"); + } + let rc = this.get(ptr); + if(removeMapping) this.delete(ptr); + return rc; + }.bind(new Map); + }; + + + const StructPtrMapper = function(name, StructType){ + const __xWrap = __xWrapFactory(name,StructType); + + return Object.assign(Object.create(null),{ + + StructType, + + create: (ppOut)=>{ + const rc = __xWrap(); + wasm.pokePtr(ppOut, rc.pointer); + return rc; + }, + + get: (pCObj)=>__xWrap(pCObj), + + unget: (pCObj)=>__xWrap(pCObj,true), + + dispose: (pCObj)=>{ + const o = __xWrap(pCObj,true); + if(o) o.dispose(); + } + }); + }; + + + vtab.xVtab = StructPtrMapper('xVtab', capi.sqlite3_vtab); + + + vtab.xCursor = StructPtrMapper('xCursor', capi.sqlite3_vtab_cursor); + + + vtab.xIndexInfo = (pIdxInfo)=>new capi.sqlite3_index_info(pIdxInfo); + + + + + + vtab.xError = function f(methodName, err, defaultRc){ + if(f.errorReporter instanceof Function){ + try{f.errorReporter("sqlite3_module::"+methodName+"(): "+err.message);} + catch(e){} + } + let rc; + if(err instanceof sqlite3.WasmAllocError) rc = capi.SQLITE_NOMEM; + else if(arguments.length>2) rc = defaultRc; + else if(err instanceof sqlite3.SQLite3Error) rc = err.resultCode; + return rc || capi.SQLITE_ERROR; + }; + vtab.xError.errorReporter = 1 ? console.error.bind(console) : false; + + + + + + vtab.xRowid = (ppRowid64, value)=>wasm.poke(ppRowid64, value, 'i64'); + + + vtab.setupModule = function(opt){ + let createdMod = false; + const mod = (this instanceof capi.sqlite3_module) + ? this : (opt.struct || (createdMod = new capi.sqlite3_module())); + try{ + const methods = opt.methods || toss("Missing 'methods' object."); + for(const e of Object.entries({ + + + xConnect: 'xCreate', xDisconnect: 'xDestroy' + })){ + + const k = e[0], v = e[1]; + if(true === methods[k]) methods[k] = methods[v]; + else if(true === methods[v]) methods[v] = methods[k]; + } + if(opt.catchExceptions){ + const fwrap = function(methodName, func){ + if(['xConnect','xCreate'].indexOf(methodName) >= 0){ + return function(pDb, pAux, argc, argv, ppVtab, pzErr){ + try{return func(...arguments) || 0} + catch(e){ + if(!(e instanceof sqlite3.WasmAllocError)){ + wasm.dealloc(wasm.peekPtr(pzErr)); + wasm.pokePtr(pzErr, wasm.allocCString(e.message)); + } + return vtab.xError(methodName, e); + } + }; + }else{ + return function(...args){ + try{return func(...args) || 0} + catch(e){ + return vtab.xError(methodName, e); + } + }; + } + }; + const mnames = [ + 'xCreate', 'xConnect', 'xBestIndex', 'xDisconnect', + 'xDestroy', 'xOpen', 'xClose', 'xFilter', 'xNext', + 'xEof', 'xColumn', 'xRowid', 'xUpdate', + 'xBegin', 'xSync', 'xCommit', 'xRollback', + 'xFindFunction', 'xRename', 'xSavepoint', 'xRelease', + 'xRollbackTo', 'xShadowName' + ]; + const remethods = Object.create(null); + for(const k of mnames){ + const m = methods[k]; + if(!(m instanceof Function)) continue; + else if('xConnect'===k && methods.xCreate===m){ + remethods[k] = methods.xCreate; + }else if('xCreate'===k && methods.xConnect===m){ + remethods[k] = methods.xConnect; + }else{ + remethods[k] = fwrap(k, m); + } + } + installMethods(mod, remethods, false); + }else{ + + + installMethods( + mod, methods, !!opt.applyArgcCheck + ); + } + if(0===mod.$iVersion){ + let v; + if('number'===typeof opt.iVersion) v = opt.iVersion; + else if(mod.$xShadowName) v = 3; + else if(mod.$xSavePoint || mod.$xRelease || mod.$xRollbackTo) v = 2; + else v = 1; + mod.$iVersion = v; + } + }catch(e){ + if(createdMod) createdMod.dispose(); + throw e; + } + return mod; + }; + + + capi.sqlite3_module.prototype.setupModule = function(opt){ + return vtab.setupModule.call(this, opt); + }; +}); + + + +'use strict'; +globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ + +const installOpfsVfs = function callee(options){ + if(!globalThis.SharedArrayBuffer + || !globalThis.Atomics){ + return Promise.reject( + new Error("Cannot install OPFS: Missing SharedArrayBuffer and/or Atomics. "+ + "The server must emit the COOP/COEP response headers to enable those. "+ + "See https://sqlite.org/wasm/doc/trunk/persistence.md#coop-coep") + ); + }else if('undefined'===typeof WorkerGlobalScope){ + return Promise.reject( + new Error("The OPFS sqlite3_vfs cannot run in the main thread "+ + "because it requires Atomics.wait().") + ); + }else if(!globalThis.FileSystemHandle || + !globalThis.FileSystemDirectoryHandle || + !globalThis.FileSystemFileHandle || + !globalThis.FileSystemFileHandle.prototype.createSyncAccessHandle || + !navigator?.storage?.getDirectory){ + return Promise.reject( + new Error("Missing required OPFS APIs.") + ); + } + if(!options || 'object'!==typeof options){ + options = Object.create(null); + } + const urlParams = new URL(globalThis.location.href).searchParams; + if(urlParams.has('opfs-disable')){ + + return Promise.resolve(sqlite3); + } + if(undefined===options.verbose){ + options.verbose = urlParams.has('opfs-verbose') + ? (+urlParams.get('opfs-verbose') || 2) : 1; + } + if(undefined===options.sanityChecks){ + options.sanityChecks = urlParams.has('opfs-sanity-check'); + } + if(undefined===options.proxyUri){ + options.proxyUri = callee.defaultProxyUri; + } + + + + if('function' === typeof options.proxyUri){ + options.proxyUri = options.proxyUri(); + } + const thePromise = new Promise(function(promiseResolve_, promiseReject_){ + const loggers = [ + sqlite3.config.error, + sqlite3.config.warn, + sqlite3.config.log + ]; + const logImpl = (level,...args)=>{ + if(options.verbose>level) loggers[level]("OPFS syncer:",...args); + }; + const log = (...args)=>logImpl(2, ...args); + const warn = (...args)=>logImpl(1, ...args); + const error = (...args)=>logImpl(0, ...args); + const toss = sqlite3.util.toss; + const capi = sqlite3.capi; + const util = sqlite3.util; + const wasm = sqlite3.wasm; + const sqlite3_vfs = capi.sqlite3_vfs; + const sqlite3_file = capi.sqlite3_file; + const sqlite3_io_methods = capi.sqlite3_io_methods; + + const opfsUtil = Object.create(null); + + + const thisThreadHasOPFS = ()=>{ + return globalThis.FileSystemHandle && + globalThis.FileSystemDirectoryHandle && + globalThis.FileSystemFileHandle && + globalThis.FileSystemFileHandle.prototype.createSyncAccessHandle && + navigator?.storage?.getDirectory; + }; + + + opfsUtil.metrics = { + dump: function(){ + let k, n = 0, t = 0, w = 0; + for(k in state.opIds){ + const m = metrics[k]; + n += m.count; + t += m.time; + w += m.wait; + m.avgTime = (m.count && m.time) ? (m.time / m.count) : 0; + m.avgWait = (m.count && m.wait) ? (m.wait / m.count) : 0; + } + sqlite3.config.log(globalThis.location.href, + "metrics for",globalThis.location.href,":",metrics, + "\nTotal of",n,"op(s) for",t, + "ms (incl. "+w+" ms of waiting on the async side)"); + sqlite3.config.log("Serialization metrics:",metrics.s11n); + W.postMessage({type:'opfs-async-metrics'}); + }, + reset: function(){ + let k; + const r = (m)=>(m.count = m.time = m.wait = 0); + for(k in state.opIds){ + r(metrics[k] = Object.create(null)); + } + let s = metrics.s11n = Object.create(null); + s = s.serialize = Object.create(null); + s.count = s.time = 0; + s = metrics.s11n.deserialize = Object.create(null); + s.count = s.time = 0; + } + }; + const opfsIoMethods = new sqlite3_io_methods(); + const opfsVfs = new sqlite3_vfs() + .addOnDispose( ()=>opfsIoMethods.dispose()); + let promiseWasRejected = undefined; + const promiseReject = (err)=>{ + promiseWasRejected = true; + opfsVfs.dispose(); + return promiseReject_(err); + }; + const promiseResolve = ()=>{ + promiseWasRejected = false; + return promiseResolve_(sqlite3); + }; + const W = + new Worker(options.proxyUri); + setTimeout(()=>{ + + if(undefined===promiseWasRejected){ + promiseReject( + new Error("Timeout while waiting for OPFS async proxy worker.") + ); + } + }, 4000); + W._originalOnError = W.onerror ; + W.onerror = function(err){ + + + error("Error initializing OPFS asyncer:",err); + promiseReject(new Error("Loading OPFS async Worker failed for unknown reasons.")); + }; + const pDVfs = capi.sqlite3_vfs_find(null); + const dVfs = pDVfs + ? new sqlite3_vfs(pDVfs) + : null ; + opfsIoMethods.$iVersion = 1; + opfsVfs.$iVersion = 2; + opfsVfs.$szOsFile = capi.sqlite3_file.structInfo.sizeof; + opfsVfs.$mxPathname = 1024; + opfsVfs.$zName = wasm.allocCString("opfs"); + + opfsVfs.$xDlOpen = opfsVfs.$xDlError = opfsVfs.$xDlSym = opfsVfs.$xDlClose = null; + opfsVfs.addOnDispose( + '$zName', opfsVfs.$zName, + 'cleanup default VFS wrapper', ()=>(dVfs ? dVfs.dispose() : null) + ); + + + const state = Object.create(null); + state.verbose = options.verbose; + state.littleEndian = (()=>{ + const buffer = new ArrayBuffer(2); + new DataView(buffer).setInt16(0, 256, true ); + + return new Int16Array(buffer)[0] === 256; + })(); + + state.asyncIdleWaitTime = 150; + + + state.asyncS11nExceptions = 1; + + state.fileBufferSize = 1024 * 64; + state.sabS11nOffset = state.fileBufferSize; + + state.sabS11nSize = opfsVfs.$mxPathname * 2; + + state.sabIO = new SharedArrayBuffer( + state.fileBufferSize + + state.sabS11nSize + ); + state.opIds = Object.create(null); + const metrics = Object.create(null); + { + + let i = 0; + + state.opIds.whichOp = i++; + + state.opIds.rc = i++; + + state.opIds.xAccess = i++; + state.opIds.xClose = i++; + state.opIds.xDelete = i++; + state.opIds.xDeleteNoWait = i++; + state.opIds.xFileSize = i++; + state.opIds.xLock = i++; + state.opIds.xOpen = i++; + state.opIds.xRead = i++; + state.opIds.xSleep = i++; + state.opIds.xSync = i++; + state.opIds.xTruncate = i++; + state.opIds.xUnlock = i++; + state.opIds.xWrite = i++; + state.opIds.mkdir = i++; + state.opIds['opfs-async-metrics'] = i++; + state.opIds['opfs-async-shutdown'] = i++; + + state.opIds.retry = i++; + state.sabOP = new SharedArrayBuffer( + i * 4); + opfsUtil.metrics.reset(); + } + + state.sq3Codes = Object.create(null); + [ + 'SQLITE_ACCESS_EXISTS', + 'SQLITE_ACCESS_READWRITE', + 'SQLITE_BUSY', + 'SQLITE_ERROR', + 'SQLITE_IOERR', + 'SQLITE_IOERR_ACCESS', + 'SQLITE_IOERR_CLOSE', + 'SQLITE_IOERR_DELETE', + 'SQLITE_IOERR_FSYNC', + 'SQLITE_IOERR_LOCK', + 'SQLITE_IOERR_READ', + 'SQLITE_IOERR_SHORT_READ', + 'SQLITE_IOERR_TRUNCATE', + 'SQLITE_IOERR_UNLOCK', + 'SQLITE_IOERR_WRITE', + 'SQLITE_LOCK_EXCLUSIVE', + 'SQLITE_LOCK_NONE', + 'SQLITE_LOCK_PENDING', + 'SQLITE_LOCK_RESERVED', + 'SQLITE_LOCK_SHARED', + 'SQLITE_LOCKED', + 'SQLITE_MISUSE', + 'SQLITE_NOTFOUND', + 'SQLITE_OPEN_CREATE', + 'SQLITE_OPEN_DELETEONCLOSE', + 'SQLITE_OPEN_MAIN_DB', + 'SQLITE_OPEN_READONLY' + ].forEach((k)=>{ + if(undefined === (state.sq3Codes[k] = capi[k])){ + toss("Maintenance required: not found:",k); + } + }); + state.opfsFlags = Object.assign(Object.create(null),{ + + OPFS_UNLOCK_ASAP: 0x01, + + defaultUnlockAsap: false + }); + + + const opRun = (op,...args)=>{ + const opNdx = state.opIds[op] || toss("Invalid op ID:",op); + state.s11n.serialize(...args); + Atomics.store(state.sabOPView, state.opIds.rc, -1); + Atomics.store(state.sabOPView, state.opIds.whichOp, opNdx); + Atomics.notify(state.sabOPView, state.opIds.whichOp) + ; + const t = performance.now(); + Atomics.wait(state.sabOPView, state.opIds.rc, -1) + ; + const rc = Atomics.load(state.sabOPView, state.opIds.rc); + metrics[op].wait += performance.now() - t; + if(rc && state.asyncS11nExceptions){ + const err = state.s11n.deserialize(); + if(err) error(op+"() async error:",...err); + } + return rc; + }; + + + opfsUtil.debug = { + asyncShutdown: ()=>{ + warn("Shutting down OPFS async listener. The OPFS VFS will no longer work."); + opRun('opfs-async-shutdown'); + }, + asyncRestart: ()=>{ + warn("Attempting to restart OPFS VFS async listener. Might work, might not."); + W.postMessage({type: 'opfs-async-restart'}); + } + }; + + const initS11n = ()=>{ + + if(state.s11n) return state.s11n; + const textDecoder = new TextDecoder(), + textEncoder = new TextEncoder('utf-8'), + viewU8 = new Uint8Array(state.sabIO, state.sabS11nOffset, state.sabS11nSize), + viewDV = new DataView(state.sabIO, state.sabS11nOffset, state.sabS11nSize); + state.s11n = Object.create(null); + + const TypeIds = Object.create(null); + TypeIds.number = { id: 1, size: 8, getter: 'getFloat64', setter: 'setFloat64' }; + TypeIds.bigint = { id: 2, size: 8, getter: 'getBigInt64', setter: 'setBigInt64' }; + TypeIds.boolean = { id: 3, size: 4, getter: 'getInt32', setter: 'setInt32' }; + TypeIds.string = { id: 4 }; + + const getTypeId = (v)=>( + TypeIds[typeof v] + || toss("Maintenance required: this value type cannot be serialized.",v) + ); + const getTypeIdById = (tid)=>{ + switch(tid){ + case TypeIds.number.id: return TypeIds.number; + case TypeIds.bigint.id: return TypeIds.bigint; + case TypeIds.boolean.id: return TypeIds.boolean; + case TypeIds.string.id: return TypeIds.string; + default: toss("Invalid type ID:",tid); + } + }; + + + state.s11n.deserialize = function(clear=false){ + ++metrics.s11n.deserialize.count; + const t = performance.now(); + const argc = viewU8[0]; + const rc = argc ? [] : null; + if(argc){ + const typeIds = []; + let offset = 1, i, n, v; + for(i = 0; i < argc; ++i, ++offset){ + typeIds.push(getTypeIdById(viewU8[offset])); + } + for(i = 0; i < argc; ++i){ + const t = typeIds[i]; + if(t.getter){ + v = viewDV[t.getter](offset, state.littleEndian); + offset += t.size; + }else{ + n = viewDV.getInt32(offset, state.littleEndian); + offset += 4; + v = textDecoder.decode(viewU8.slice(offset, offset+n)); + offset += n; + } + rc.push(v); + } + } + if(clear) viewU8[0] = 0; + + metrics.s11n.deserialize.time += performance.now() - t; + return rc; + }; + + + state.s11n.serialize = function(...args){ + const t = performance.now(); + ++metrics.s11n.serialize.count; + if(args.length){ + + const typeIds = []; + let i = 0, offset = 1; + viewU8[0] = args.length & 0xff ; + for(; i < args.length; ++i, ++offset){ + + typeIds.push(getTypeId(args[i])); + viewU8[offset] = typeIds[i].id; + } + for(i = 0; i < args.length; ++i) { + + const t = typeIds[i]; + if(t.setter){ + viewDV[t.setter](offset, args[i], state.littleEndian); + offset += t.size; + }else{ + const s = textEncoder.encode(args[i]); + viewDV.setInt32(offset, s.byteLength, state.littleEndian); + offset += 4; + viewU8.set(s, offset); + offset += s.byteLength; + } + } + + }else{ + viewU8[0] = 0; + } + metrics.s11n.serialize.time += performance.now() - t; + }; + return state.s11n; + }; + + + const randomFilename = function f(len=16){ + if(!f._chars){ + f._chars = "abcdefghijklmnopqrstuvwxyz"+ + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"+ + "012346789"; + f._n = f._chars.length; + } + const a = []; + let i = 0; + for( ; i < len; ++i){ + const ndx = Math.random() * (f._n * 64) % f._n | 0; + a[i] = f._chars[ndx]; + } + return a.join(""); + + }; + + + const __openFiles = Object.create(null); + + const opTimer = Object.create(null); + opTimer.op = undefined; + opTimer.start = undefined; + const mTimeStart = (op)=>{ + opTimer.start = performance.now(); + opTimer.op = op; + ++metrics[op].count; + }; + const mTimeEnd = ()=>( + metrics[opTimer.op].time += performance.now() - opTimer.start + ); + + + const ioSyncWrappers = { + xCheckReservedLock: function(pFile,pOut){ + + const f = __openFiles[pFile]; + wasm.poke(pOut, f.lockType ? 1 : 0, 'i32'); + return 0; + }, + xClose: function(pFile){ + mTimeStart('xClose'); + let rc = 0; + const f = __openFiles[pFile]; + if(f){ + delete __openFiles[pFile]; + rc = opRun('xClose', pFile); + if(f.sq3File) f.sq3File.dispose(); + } + mTimeEnd(); + return rc; + }, + xDeviceCharacteristics: function(pFile){ + + return capi.SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN; + }, + xFileControl: function(pFile, opId, pArg){ + + return capi.SQLITE_NOTFOUND; + }, + xFileSize: function(pFile,pSz64){ + mTimeStart('xFileSize'); + let rc = opRun('xFileSize', pFile); + if(0==rc){ + try { + const sz = state.s11n.deserialize()[0]; + wasm.poke(pSz64, sz, 'i64'); + }catch(e){ + error("Unexpected error reading xFileSize() result:",e); + rc = state.sq3Codes.SQLITE_IOERR; + } + } + mTimeEnd(); + return rc; + }, + xLock: function(pFile,lockType){ + mTimeStart('xLock'); + const f = __openFiles[pFile]; + let rc = 0; + + if( !f.lockType ) { + rc = opRun('xLock', pFile, lockType); + if( 0===rc ) f.lockType = lockType; + }else{ + f.lockType = lockType; + } + mTimeEnd(); + return rc; + }, + xRead: function(pFile,pDest,n,offset64){ + mTimeStart('xRead'); + const f = __openFiles[pFile]; + let rc; + try { + rc = opRun('xRead',pFile, n, Number(offset64)); + if(0===rc || capi.SQLITE_IOERR_SHORT_READ===rc){ + + wasm.heap8u().set(f.sabView.subarray(0, n), pDest); + } + }catch(e){ + error("xRead(",arguments,") failed:",e,f); + rc = capi.SQLITE_IOERR_READ; + } + mTimeEnd(); + return rc; + }, + xSync: function(pFile,flags){ + mTimeStart('xSync'); + ++metrics.xSync.count; + const rc = opRun('xSync', pFile, flags); + mTimeEnd(); + return rc; + }, + xTruncate: function(pFile,sz64){ + mTimeStart('xTruncate'); + const rc = opRun('xTruncate', pFile, Number(sz64)); + mTimeEnd(); + return rc; + }, + xUnlock: function(pFile,lockType){ + mTimeStart('xUnlock'); + const f = __openFiles[pFile]; + let rc = 0; + if( capi.SQLITE_LOCK_NONE === lockType + && f.lockType ){ + rc = opRun('xUnlock', pFile, lockType); + } + if( 0===rc ) f.lockType = lockType; + mTimeEnd(); + return rc; + }, + xWrite: function(pFile,pSrc,n,offset64){ + mTimeStart('xWrite'); + const f = __openFiles[pFile]; + let rc; + try { + f.sabView.set(wasm.heap8u().subarray(pSrc, pSrc+n)); + rc = opRun('xWrite', pFile, n, Number(offset64)); + }catch(e){ + error("xWrite(",arguments,") failed:",e,f); + rc = capi.SQLITE_IOERR_WRITE; + } + mTimeEnd(); + return rc; + } + }; + + + const vfsSyncWrappers = { + xAccess: function(pVfs,zName,flags,pOut){ + mTimeStart('xAccess'); + const rc = opRun('xAccess', wasm.cstrToJs(zName)); + wasm.poke( pOut, (rc ? 0 : 1), 'i32' ); + mTimeEnd(); + return 0; + }, + xCurrentTime: function(pVfs,pOut){ + + wasm.poke(pOut, 2440587.5 + (new Date().getTime()/86400000), + 'double'); + return 0; + }, + xCurrentTimeInt64: function(pVfs,pOut){ + wasm.poke(pOut, (2440587.5 * 86400000) + new Date().getTime(), + 'i64'); + return 0; + }, + xDelete: function(pVfs, zName, doSyncDir){ + mTimeStart('xDelete'); + const rc = opRun('xDelete', wasm.cstrToJs(zName), doSyncDir, false); + mTimeEnd(); + return rc; + }, + xFullPathname: function(pVfs,zName,nOut,pOut){ + + const i = wasm.cstrncpy(pOut, zName, nOut); + return i!!v) : p; + }; + + + opfsUtil.getDirForFilename = async function f(absFilename, createDirs = false){ + const path = opfsUtil.getResolvedPath(absFilename, true); + const filename = path.pop(); + let dh = opfsUtil.rootDirectory; + for(const dirName of path){ + if(dirName){ + dh = await dh.getDirectoryHandle(dirName, {create: !!createDirs}); + } + } + return [dh, filename]; + }; + + + opfsUtil.mkdir = async function(absDirName){ + try { + await opfsUtil.getDirForFilename(absDirName+"/filepart", true); + return true; + }catch(e){ + + return false; + } + }; + + opfsUtil.entryExists = async function(fsEntryName){ + try { + const [dh, fn] = await opfsUtil.getDirForFilename(fsEntryName); + await dh.getFileHandle(fn); + return true; + }catch(e){ + return false; + } + }; + + + opfsUtil.randomFilename = randomFilename; + + + opfsUtil.registerVfs = (asDefault=false)=>{ + return wasm.exports.sqlite3_vfs_register( + opfsVfs.pointer, asDefault ? 1 : 0 + ); + }; + + + opfsUtil.treeList = async function(){ + const doDir = async function callee(dirHandle,tgt){ + tgt.name = dirHandle.name; + tgt.dirs = []; + tgt.files = []; + for await (const handle of dirHandle.values()){ + if('directory' === handle.kind){ + const subDir = Object.create(null); + tgt.dirs.push(subDir); + await callee(handle, subDir); + }else{ + tgt.files.push(handle.name); + } + } + }; + const root = Object.create(null); + await doDir(opfsUtil.rootDirectory, root); + return root; + }; + + + opfsUtil.rmfr = async function(){ + const dir = opfsUtil.rootDirectory, opt = {recurse: true}; + for await (const handle of dir.values()){ + dir.removeEntry(handle.name, opt); + } + }; + + + opfsUtil.unlink = async function(fsEntryName, recursive = false, + throwOnError = false){ + try { + const [hDir, filenamePart] = + await opfsUtil.getDirForFilename(fsEntryName, false); + await hDir.removeEntry(filenamePart, {recursive}); + return true; + }catch(e){ + if(throwOnError){ + throw new Error("unlink(",arguments[0],") failed: "+e.message,{ + cause: e + }); + } + return false; + } + }; + + + opfsUtil.traverse = async function(opt){ + const defaultOpt = { + recursive: true, + directory: opfsUtil.rootDirectory + }; + if('function'===typeof opt){ + opt = {callback:opt}; + } + opt = Object.assign(defaultOpt, opt||{}); + const doDir = async function callee(dirHandle, depth){ + for await (const handle of dirHandle.values()){ + if(false === opt.callback(handle, dirHandle, depth)) return false; + else if(opt.recursive && 'directory' === handle.kind){ + if(false === await callee(handle, depth + 1)) break; + } + } + }; + doDir(opt.directory, 0); + }; + + + const importDbChunked = async function(filename, callback){ + const [hDir, fnamePart] = await opfsUtil.getDirForFilename(filename, true); + const hFile = await hDir.getFileHandle(fnamePart, {create:true}); + let sah = await hFile.createSyncAccessHandle(); + let nWrote = 0, chunk, checkedHeader = false, err = false; + try{ + sah.truncate(0); + while( undefined !== (chunk = await callback()) ){ + if(chunk instanceof ArrayBuffer) chunk = new Uint8Array(chunk); + if( 0===nWrote && chunk.byteLength>=15 ){ + util.affirmDbHeader(chunk); + checkedHeader = true; + } + sah.write(chunk, {at: nWrote}); + nWrote += chunk.byteLength; + } + if( nWrote < 512 || 0!==nWrote % 512 ){ + toss("Input size",nWrote,"is not correct for an SQLite database."); + } + if( !checkedHeader ){ + const header = new Uint8Array(20); + sah.read( header, {at: 0} ); + util.affirmDbHeader( header ); + } + sah.write(new Uint8Array([1,1]), {at: 18}); + return nWrote; + }catch(e){ + await sah.close(); + sah = undefined; + await hDir.removeEntry( fnamePart ).catch(()=>{}); + throw e; + }finally { + if( sah ) await sah.close(); + } + }; + + + opfsUtil.importDb = async function(filename, bytes){ + if( bytes instanceof Function ){ + return importDbChunked(filename, bytes); + } + if(bytes instanceof ArrayBuffer) bytes = new Uint8Array(bytes); + util.affirmIsDb(bytes); + const n = bytes.byteLength; + const [hDir, fnamePart] = await opfsUtil.getDirForFilename(filename, true); + let sah, err, nWrote = 0; + try { + const hFile = await hDir.getFileHandle(fnamePart, {create:true}); + sah = await hFile.createSyncAccessHandle(); + sah.truncate(0); + nWrote = sah.write(bytes, {at: 0}); + if(nWrote != n){ + toss("Expected to write "+n+" bytes but wrote "+nWrote+"."); + } + sah.write(new Uint8Array([1,1]), {at: 18}) ; + return nWrote; + }catch(e){ + if( sah ){ await sah.close(); sah = undefined; } + await hDir.removeEntry( fnamePart ).catch(()=>{}); + throw e; + }finally{ + if( sah ) await sah.close(); + } + }; + + if(sqlite3.oo1){ + const OpfsDb = function(...args){ + const opt = sqlite3.oo1.DB.dbCtorHelper.normalizeArgs(...args); + opt.vfs = opfsVfs.$zName; + sqlite3.oo1.DB.dbCtorHelper.call(this, opt); + }; + OpfsDb.prototype = Object.create(sqlite3.oo1.DB.prototype); + sqlite3.oo1.OpfsDb = OpfsDb; + OpfsDb.importDb = opfsUtil.importDb; + sqlite3.oo1.DB.dbCtorHelper.setVfsPostOpenSql( + opfsVfs.pointer, + function(oo1Db, sqlite3){ + + sqlite3.capi.sqlite3_busy_timeout(oo1Db, 10000); + sqlite3.capi.sqlite3_exec(oo1Db, [ + + "pragma journal_mode=DELETE;", + + "pragma cache_size=-16384;" + ], 0, 0, 0); + } + ); + } + + const sanityCheck = function(){ + const scope = wasm.scopedAllocPush(); + const sq3File = new sqlite3_file(); + try{ + const fid = sq3File.pointer; + const openFlags = capi.SQLITE_OPEN_CREATE + | capi.SQLITE_OPEN_READWRITE + + | capi.SQLITE_OPEN_MAIN_DB; + const pOut = wasm.scopedAlloc(8); + const dbFile = "/sanity/check/file"+randomFilename(8); + const zDbFile = wasm.scopedAllocCString(dbFile); + let rc; + state.s11n.serialize("This is ä string."); + rc = state.s11n.deserialize(); + log("deserialize() says:",rc); + if("This is ä string."!==rc[0]) toss("String d13n error."); + vfsSyncWrappers.xAccess(opfsVfs.pointer, zDbFile, 0, pOut); + rc = wasm.peek(pOut,'i32'); + log("xAccess(",dbFile,") exists ?=",rc); + rc = vfsSyncWrappers.xOpen(opfsVfs.pointer, zDbFile, + fid, openFlags, pOut); + log("open rc =",rc,"state.sabOPView[xOpen] =", + state.sabOPView[state.opIds.xOpen]); + if(0!==rc){ + error("open failed with code",rc); + return; + } + vfsSyncWrappers.xAccess(opfsVfs.pointer, zDbFile, 0, pOut); + rc = wasm.peek(pOut,'i32'); + if(!rc) toss("xAccess() failed to detect file."); + rc = ioSyncWrappers.xSync(sq3File.pointer, 0); + if(rc) toss('sync failed w/ rc',rc); + rc = ioSyncWrappers.xTruncate(sq3File.pointer, 1024); + if(rc) toss('truncate failed w/ rc',rc); + wasm.poke(pOut,0,'i64'); + rc = ioSyncWrappers.xFileSize(sq3File.pointer, pOut); + if(rc) toss('xFileSize failed w/ rc',rc); + log("xFileSize says:",wasm.peek(pOut, 'i64')); + rc = ioSyncWrappers.xWrite(sq3File.pointer, zDbFile, 10, 1); + if(rc) toss("xWrite() failed!"); + const readBuf = wasm.scopedAlloc(16); + rc = ioSyncWrappers.xRead(sq3File.pointer, readBuf, 6, 2); + wasm.poke(readBuf+6,0); + let jRead = wasm.cstrToJs(readBuf); + log("xRead() got:",jRead); + if("sanity"!==jRead) toss("Unexpected xRead() value."); + if(vfsSyncWrappers.xSleep){ + log("xSleep()ing before close()ing..."); + vfsSyncWrappers.xSleep(opfsVfs.pointer,2000); + log("waking up from xSleep()"); + } + rc = ioSyncWrappers.xClose(fid); + log("xClose rc =",rc,"sabOPView =",state.sabOPView); + log("Deleting file:",dbFile); + vfsSyncWrappers.xDelete(opfsVfs.pointer, zDbFile, 0x1234); + vfsSyncWrappers.xAccess(opfsVfs.pointer, zDbFile, 0, pOut); + rc = wasm.peek(pOut,'i32'); + if(rc) toss("Expecting 0 from xAccess(",dbFile,") after xDelete()."); + warn("End of OPFS sanity checks."); + }finally{ + sq3File.dispose(); + wasm.scopedAllocPop(scope); + } + }; + + W.onmessage = function({data}){ + + switch(data.type){ + case 'opfs-unavailable': + + promiseReject(new Error(data.payload.join(' '))); + break; + case 'opfs-async-loaded': + + W.postMessage({type: 'opfs-async-init',args: state}); + break; + case 'opfs-async-inited': { + + if(true===promiseWasRejected){ + break ; + } + try { + sqlite3.vfs.installVfs({ + io: {struct: opfsIoMethods, methods: ioSyncWrappers}, + vfs: {struct: opfsVfs, methods: vfsSyncWrappers} + }); + state.sabOPView = new Int32Array(state.sabOP); + state.sabFileBufView = new Uint8Array(state.sabIO, 0, state.fileBufferSize); + state.sabS11nView = new Uint8Array(state.sabIO, state.sabS11nOffset, state.sabS11nSize); + initS11n(); + if(options.sanityChecks){ + warn("Running sanity checks because of opfs-sanity-check URL arg..."); + sanityCheck(); + } + if(thisThreadHasOPFS()){ + navigator.storage.getDirectory().then((d)=>{ + W.onerror = W._originalOnError; + delete W._originalOnError; + sqlite3.opfs = opfsUtil; + opfsUtil.rootDirectory = d; + log("End of OPFS sqlite3_vfs setup.", opfsVfs); + promiseResolve(); + }).catch(promiseReject); + }else{ + promiseResolve(); + } + }catch(e){ + error(e); + promiseReject(e); + } + break; + } + default: { + const errMsg = ( + "Unexpected message from the OPFS async worker: " + + JSON.stringify(data) + ); + error(errMsg); + promiseReject(new Error(errMsg)); + break; + } + } + }; + }); + return thePromise; +}; +installOpfsVfs.defaultProxyUri = + "sqlite3-opfs-async-proxy.js"; +globalThis.sqlite3ApiBootstrap.initializersAsync.push(async (sqlite3)=>{ + try{ + let proxyJs = installOpfsVfs.defaultProxyUri; + if(sqlite3.scriptInfo.sqlite3Dir){ + installOpfsVfs.defaultProxyUri = + sqlite3.scriptInfo.sqlite3Dir + proxyJs; + + } + return installOpfsVfs().catch((e)=>{ + sqlite3.config.warn("Ignoring inability to install OPFS sqlite3_vfs:",e.message); + }); + }catch(e){ + sqlite3.config.error("installOpfsVfs() exception:",e); + return Promise.reject(e); + } +}); +}); + + + +globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ + 'use strict'; + const toss = sqlite3.util.toss; + const toss3 = sqlite3.util.toss3; + const initPromises = Object.create(null); + const capi = sqlite3.capi; + const util = sqlite3.util; + const wasm = sqlite3.wasm; + + const SECTOR_SIZE = 4096; + const HEADER_MAX_PATH_SIZE = 512; + const HEADER_FLAGS_SIZE = 4; + const HEADER_DIGEST_SIZE = 8; + const HEADER_CORPUS_SIZE = HEADER_MAX_PATH_SIZE + HEADER_FLAGS_SIZE; + const HEADER_OFFSET_FLAGS = HEADER_MAX_PATH_SIZE; + const HEADER_OFFSET_DIGEST = HEADER_CORPUS_SIZE; + const HEADER_OFFSET_DATA = SECTOR_SIZE; + + const PERSISTENT_FILE_TYPES = + capi.SQLITE_OPEN_MAIN_DB | + capi.SQLITE_OPEN_MAIN_JOURNAL | + capi.SQLITE_OPEN_SUPER_JOURNAL | + capi.SQLITE_OPEN_WAL ; + + + const OPAQUE_DIR_NAME = ".opaque"; + + + const getRandomName = ()=>Math.random().toString(36).slice(2); + + const textDecoder = new TextDecoder(); + const textEncoder = new TextEncoder(); + + const optionDefaults = Object.assign(Object.create(null),{ + name: 'opfs-sahpool', + directory: undefined , + initialCapacity: 6, + clearOnInit: false, + + verbosity: 2 + }); + + + const loggers = [ + sqlite3.config.error, + sqlite3.config.warn, + sqlite3.config.log + ]; + const log = sqlite3.config.log; + const warn = sqlite3.config.warn; + const error = sqlite3.config.error; + + + const __mapVfsToPool = new Map(); + const getPoolForVfs = (pVfs)=>__mapVfsToPool.get(pVfs); + const setPoolForVfs = (pVfs,pool)=>{ + if(pool) __mapVfsToPool.set(pVfs, pool); + else __mapVfsToPool.delete(pVfs); + }; + + const __mapSqlite3File = new Map(); + const getPoolForPFile = (pFile)=>__mapSqlite3File.get(pFile); + const setPoolForPFile = (pFile,pool)=>{ + if(pool) __mapSqlite3File.set(pFile, pool); + else __mapSqlite3File.delete(pFile); + }; + + + const ioMethods = { + xCheckReservedLock: function(pFile,pOut){ + const pool = getPoolForPFile(pFile); + pool.log('xCheckReservedLock'); + pool.storeErr(); + wasm.poke32(pOut, 1); + return 0; + }, + xClose: function(pFile){ + const pool = getPoolForPFile(pFile); + pool.storeErr(); + const file = pool.getOFileForS3File(pFile); + if(file) { + try{ + pool.log(`xClose ${file.path}`); + pool.mapS3FileToOFile(pFile, false); + file.sah.flush(); + if(file.flags & capi.SQLITE_OPEN_DELETEONCLOSE){ + pool.deletePath(file.path); + } + }catch(e){ + return pool.storeErr(e, capi.SQLITE_IOERR); + } + } + return 0; + }, + xDeviceCharacteristics: function(pFile){ + return capi.SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN; + }, + xFileControl: function(pFile, opId, pArg){ + return capi.SQLITE_NOTFOUND; + }, + xFileSize: function(pFile,pSz64){ + const pool = getPoolForPFile(pFile); + pool.log(`xFileSize`); + const file = pool.getOFileForS3File(pFile); + const size = file.sah.getSize() - HEADER_OFFSET_DATA; + + wasm.poke64(pSz64, BigInt(size)); + return 0; + }, + xLock: function(pFile,lockType){ + const pool = getPoolForPFile(pFile); + pool.log(`xLock ${lockType}`); + pool.storeErr(); + const file = pool.getOFileForS3File(pFile); + file.lockType = lockType; + return 0; + }, + xRead: function(pFile,pDest,n,offset64){ + const pool = getPoolForPFile(pFile); + pool.storeErr(); + const file = pool.getOFileForS3File(pFile); + pool.log(`xRead ${file.path} ${n} @ ${offset64}`); + try { + const nRead = file.sah.read( + wasm.heap8u().subarray(pDest, pDest+n), + {at: HEADER_OFFSET_DATA + Number(offset64)} + ); + if(nRead < n){ + wasm.heap8u().fill(0, pDest + nRead, pDest + n); + return capi.SQLITE_IOERR_SHORT_READ; + } + return 0; + }catch(e){ + return pool.storeErr(e, capi.SQLITE_IOERR); + } + }, + xSectorSize: function(pFile){ + return SECTOR_SIZE; + }, + xSync: function(pFile,flags){ + const pool = getPoolForPFile(pFile); + pool.log(`xSync ${flags}`); + pool.storeErr(); + const file = pool.getOFileForS3File(pFile); + + try{ + file.sah.flush(); + return 0; + }catch(e){ + return pool.storeErr(e, capi.SQLITE_IOERR); + } + }, + xTruncate: function(pFile,sz64){ + const pool = getPoolForPFile(pFile); + pool.log(`xTruncate ${sz64}`); + pool.storeErr(); + const file = pool.getOFileForS3File(pFile); + + try{ + file.sah.truncate(HEADER_OFFSET_DATA + Number(sz64)); + return 0; + }catch(e){ + return pool.storeErr(e, capi.SQLITE_IOERR); + } + }, + xUnlock: function(pFile,lockType){ + const pool = getPoolForPFile(pFile); + pool.log('xUnlock'); + const file = pool.getOFileForS3File(pFile); + file.lockType = lockType; + return 0; + }, + xWrite: function(pFile,pSrc,n,offset64){ + const pool = getPoolForPFile(pFile); + pool.storeErr(); + const file = pool.getOFileForS3File(pFile); + pool.log(`xWrite ${file.path} ${n} ${offset64}`); + try{ + const nBytes = file.sah.write( + wasm.heap8u().subarray(pSrc, pSrc+n), + { at: HEADER_OFFSET_DATA + Number(offset64) } + ); + return n===nBytes ? 0 : toss("Unknown write() failure."); + }catch(e){ + return pool.storeErr(e, capi.SQLITE_IOERR); + } + } + }; + + const opfsIoMethods = new capi.sqlite3_io_methods(); + opfsIoMethods.$iVersion = 1; + sqlite3.vfs.installVfs({ + io: {struct: opfsIoMethods, methods: ioMethods} + }); + + + const vfsMethods = { + xAccess: function(pVfs,zName,flags,pOut){ + + const pool = getPoolForVfs(pVfs); + pool.storeErr(); + try{ + const name = pool.getPath(zName); + wasm.poke32(pOut, pool.hasFilename(name) ? 1 : 0); + }catch(e){ + + wasm.poke32(pOut, 0); + } + return 0; + }, + xCurrentTime: function(pVfs,pOut){ + wasm.poke(pOut, 2440587.5 + (new Date().getTime()/86400000), + 'double'); + return 0; + }, + xCurrentTimeInt64: function(pVfs,pOut){ + wasm.poke(pOut, (2440587.5 * 86400000) + new Date().getTime(), + 'i64'); + return 0; + }, + xDelete: function(pVfs, zName, doSyncDir){ + const pool = getPoolForVfs(pVfs); + pool.log(`xDelete ${wasm.cstrToJs(zName)}`); + pool.storeErr(); + try{ + pool.deletePath(pool.getPath(zName)); + return 0; + }catch(e){ + pool.storeErr(e); + return capi.SQLITE_IOERR_DELETE; + } + }, + xFullPathname: function(pVfs,zName,nOut,pOut){ + + + const i = wasm.cstrncpy(pOut, zName, nOut); + return i nOut) wasm.poke8(pOut + nOut - 1, 0); + }catch(e){ + return capi.SQLITE_NOMEM; + }finally{ + wasm.scopedAllocPop(scope); + } + } + return e ? (e.sqlite3Rc || capi.SQLITE_IOERR) : 0; + }, + + xOpen: function f(pVfs, zName, pFile, flags, pOutFlags){ + const pool = getPoolForVfs(pVfs); + try{ + pool.log(`xOpen ${wasm.cstrToJs(zName)} ${flags}`); + + const path = (zName && wasm.peek8(zName)) + ? pool.getPath(zName) + : getRandomName(); + let sah = pool.getSAHForPath(path); + if(!sah && (flags & capi.SQLITE_OPEN_CREATE)) { + + if(pool.getFileCount() < pool.getCapacity()) { + + sah = pool.nextAvailableSAH(); + pool.setAssociatedPath(sah, path, flags); + }else{ + + toss('SAH pool is full. Cannot create file',path); + } + } + if(!sah){ + toss('file not found:',path); + } + + + const file = {path, flags, sah}; + pool.mapS3FileToOFile(pFile, file); + file.lockType = capi.SQLITE_LOCK_NONE; + const sq3File = new capi.sqlite3_file(pFile); + sq3File.$pMethods = opfsIoMethods.pointer; + sq3File.dispose(); + wasm.poke32(pOutFlags, flags); + return 0; + }catch(e){ + pool.storeErr(e); + return capi.SQLITE_CANTOPEN; + } + } + }; + + + const createOpfsVfs = function(vfsName){ + if( sqlite3.capi.sqlite3_vfs_find(vfsName)){ + toss3("VFS name is already registered:", vfsName); + } + const opfsVfs = new capi.sqlite3_vfs(); + + const pDVfs = capi.sqlite3_vfs_find(null); + const dVfs = pDVfs + ? new capi.sqlite3_vfs(pDVfs) + : null ; + opfsVfs.$iVersion = 2; + opfsVfs.$szOsFile = capi.sqlite3_file.structInfo.sizeof; + opfsVfs.$mxPathname = HEADER_MAX_PATH_SIZE; + opfsVfs.addOnDispose( + opfsVfs.$zName = wasm.allocCString(vfsName), + ()=>setPoolForVfs(opfsVfs.pointer, 0) + ); + + if(dVfs){ + + opfsVfs.$xRandomness = dVfs.$xRandomness; + opfsVfs.$xSleep = dVfs.$xSleep; + dVfs.dispose(); + } + if(!opfsVfs.$xRandomness && !vfsMethods.xRandomness){ + + vfsMethods.xRandomness = function(pVfs, nOut, pOut){ + const heap = wasm.heap8u(); + let i = 0; + for(; i < nOut; ++i) heap[pOut + i] = (Math.random()*255000) & 0xFF; + return i; + }; + } + if(!opfsVfs.$xSleep && !vfsMethods.xSleep){ + vfsMethods.xSleep = (pVfs,ms)=>0; + } + sqlite3.vfs.installVfs({ + vfs: {struct: opfsVfs, methods: vfsMethods} + }); + return opfsVfs; + }; + + + class OpfsSAHPool { + + vfsDir; + + #dhVfsRoot; + + #dhOpaque; + + #dhVfsParent; + + #mapSAHToName = new Map(); + + #mapFilenameToSAH = new Map(); + + #availableSAH = new Set(); + + #mapS3FileToOFile_ = new Map(); + + + + + + #apBody = new Uint8Array(HEADER_CORPUS_SIZE); + + #dvBody; + + + #cVfs; + + + #verbosity; + + constructor(options = Object.create(null)){ + this.#verbosity = options.verbosity ?? optionDefaults.verbosity; + this.vfsName = options.name || optionDefaults.name; + this.#cVfs = createOpfsVfs(this.vfsName); + setPoolForVfs(this.#cVfs.pointer, this); + this.vfsDir = options.directory || ("."+this.vfsName); + this.#dvBody = + new DataView(this.#apBody.buffer, this.#apBody.byteOffset); + this.isReady = this + .reset(!!(options.clearOnInit ?? optionDefaults.clearOnInit)) + .then(()=>{ + if(this.$error) throw this.$error; + return this.getCapacity() + ? Promise.resolve(undefined) + : this.addCapacity(options.initialCapacity + || optionDefaults.initialCapacity); + }); + } + + #logImpl(level,...args){ + if(this.#verbosity>level) loggers[level](this.vfsName+":",...args); + }; + log(...args){this.#logImpl(2, ...args)}; + warn(...args){this.#logImpl(1, ...args)}; + error(...args){this.#logImpl(0, ...args)}; + + getVfs(){return this.#cVfs} + + + getCapacity(){return this.#mapSAHToName.size} + + + getFileCount(){return this.#mapFilenameToSAH.size} + + + getFileNames(){ + const rc = []; + const iter = this.#mapFilenameToSAH.keys(); + for(const n of iter) rc.push(n); + return rc; + } + + + + + + + + + + + + + + async addCapacity(n){ + for(let i = 0; i < n; ++i){ + const name = getRandomName(); + const h = await this.#dhOpaque.getFileHandle(name, {create:true}); + const ah = await h.createSyncAccessHandle(); + this.#mapSAHToName.set(ah,name); + this.setAssociatedPath(ah, '', 0); + + } + return this.getCapacity(); + } + + + async reduceCapacity(n){ + let nRm = 0; + for(const ah of Array.from(this.#availableSAH)){ + if(nRm === n || this.getFileCount() === this.getCapacity()){ + break; + } + const name = this.#mapSAHToName.get(ah); + + ah.close(); + await this.#dhOpaque.removeEntry(name); + this.#mapSAHToName.delete(ah); + this.#availableSAH.delete(ah); + ++nRm; + } + return nRm; + } + + + releaseAccessHandles(){ + for(const ah of this.#mapSAHToName.keys()) ah.close(); + this.#mapSAHToName.clear(); + this.#mapFilenameToSAH.clear(); + this.#availableSAH.clear(); + } + + + async acquireAccessHandles(clearFiles){ + const files = []; + for await (const [name,h] of this.#dhOpaque){ + if('file'===h.kind){ + files.push([name,h]); + } + } + return Promise.all(files.map(async([name,h])=>{ + try{ + const ah = await h.createSyncAccessHandle() + this.#mapSAHToName.set(ah, name); + if(clearFiles){ + ah.truncate(HEADER_OFFSET_DATA); + this.setAssociatedPath(ah, '', 0); + }else{ + const path = this.getAssociatedPath(ah); + if(path){ + this.#mapFilenameToSAH.set(path, ah); + }else{ + this.#availableSAH.add(ah); + } + } + }catch(e){ + this.storeErr(e); + this.releaseAccessHandles(); + throw e; + } + })); + } + + + getAssociatedPath(sah){ + sah.read(this.#apBody, {at: 0}); + + + const flags = this.#dvBody.getUint32(HEADER_OFFSET_FLAGS); + if(this.#apBody[0] && + ((flags & capi.SQLITE_OPEN_DELETEONCLOSE) || + (flags & PERSISTENT_FILE_TYPES)===0)){ + warn(`Removing file with unexpected flags ${flags.toString(16)}`, + this.#apBody); + this.setAssociatedPath(sah, '', 0); + return ''; + } + + const fileDigest = new Uint32Array(HEADER_DIGEST_SIZE / 4); + sah.read(fileDigest, {at: HEADER_OFFSET_DIGEST}); + const compDigest = this.computeDigest(this.#apBody); + if(fileDigest.every((v,i) => v===compDigest[i])){ + + const pathBytes = this.#apBody.findIndex((v)=>0===v); + if(0===pathBytes){ + + + sah.truncate(HEADER_OFFSET_DATA); + } + return pathBytes + ? textDecoder.decode(this.#apBody.subarray(0,pathBytes)) + : ''; + }else{ + + warn('Disassociating file with bad digest.'); + this.setAssociatedPath(sah, '', 0); + return ''; + } + } + + + setAssociatedPath(sah, path, flags){ + const enc = textEncoder.encodeInto(path, this.#apBody); + if(HEADER_MAX_PATH_SIZE <= enc.written + 1){ + toss("Path too long:",path); + } + this.#apBody.fill(0, enc.written, HEADER_MAX_PATH_SIZE); + this.#dvBody.setUint32(HEADER_OFFSET_FLAGS, flags); + + const digest = this.computeDigest(this.#apBody); + sah.write(this.#apBody, {at: 0}); + sah.write(digest, {at: HEADER_OFFSET_DIGEST}); + sah.flush(); + + if(path){ + this.#mapFilenameToSAH.set(path, sah); + this.#availableSAH.delete(sah); + }else{ + + sah.truncate(HEADER_OFFSET_DATA); + this.#availableSAH.add(sah); + } + } + + + computeDigest(byteArray){ + let h1 = 0xdeadbeef; + let h2 = 0x41c6ce57; + for(const v of byteArray){ + h1 = 31 * h1 + (v * 307); + h2 = 31 * h2 + (v * 307); + } + return new Uint32Array([h1>>>0, h2>>>0]); + } + + + async reset(clearFiles){ + await this.isReady; + let h = await navigator.storage.getDirectory(); + let prev, prevName; + for(const d of this.vfsDir.split('/')){ + if(d){ + prev = h; + h = await h.getDirectoryHandle(d,{create:true}); + } + } + this.#dhVfsRoot = h; + this.#dhVfsParent = prev; + this.#dhOpaque = await this.#dhVfsRoot.getDirectoryHandle( + OPAQUE_DIR_NAME,{create:true} + ); + this.releaseAccessHandles(); + return this.acquireAccessHandles(clearFiles); + } + + + getPath(arg) { + if(wasm.isPtr(arg)) arg = wasm.cstrToJs(arg); + return ((arg instanceof URL) + ? arg + : new URL(arg, 'file://localhost/')).pathname; + } + + + deletePath(path) { + const sah = this.#mapFilenameToSAH.get(path); + if(sah) { + + this.#mapFilenameToSAH.delete(path); + this.setAssociatedPath(sah, '', 0); + } + return !!sah; + } + + + storeErr(e,code){ + if(e){ + e.sqlite3Rc = code || capi.SQLITE_IOERR; + this.error(e); + } + this.$error = e; + return code; + } + + popErr(){ + const rc = this.$error; + this.$error = undefined; + return rc; + } + + + nextAvailableSAH(){ + const [rc] = this.#availableSAH.keys(); + return rc; + } + + + getOFileForS3File(pFile){ + return this.#mapS3FileToOFile_.get(pFile); + } + + mapS3FileToOFile(pFile,file){ + if(file){ + this.#mapS3FileToOFile_.set(pFile, file); + setPoolForPFile(pFile, this); + }else{ + this.#mapS3FileToOFile_.delete(pFile); + setPoolForPFile(pFile, false); + } + } + + + hasFilename(name){ + return this.#mapFilenameToSAH.has(name) + } + + + getSAHForPath(path){ + return this.#mapFilenameToSAH.get(path); + } + + + async removeVfs(){ + if(!this.#cVfs.pointer || !this.#dhOpaque) return false; + capi.sqlite3_vfs_unregister(this.#cVfs.pointer); + this.#cVfs.dispose(); + try{ + this.releaseAccessHandles(); + await this.#dhVfsRoot.removeEntry(OPAQUE_DIR_NAME, {recursive: true}); + this.#dhOpaque = undefined; + await this.#dhVfsParent.removeEntry( + this.#dhVfsRoot.name, {recursive: true} + ); + this.#dhVfsRoot = this.#dhVfsParent = undefined; + }catch(e){ + sqlite3.config.error(this.vfsName,"removeVfs() failed:",e); + + } + return true; + } + + + + exportFile(name){ + const sah = this.#mapFilenameToSAH.get(name) || toss("File not found:",name); + const n = sah.getSize() - HEADER_OFFSET_DATA; + const b = new Uint8Array(n>0 ? n : 0); + if(n>0){ + const nRead = sah.read(b, {at: HEADER_OFFSET_DATA}); + if(nRead != n){ + toss("Expected to read "+n+" bytes but read "+nRead+"."); + } + } + return b; + } + + + async importDbChunked(name, callback){ + const sah = this.#mapFilenameToSAH.get(name) + || this.nextAvailableSAH() + || toss("No available handles to import to."); + sah.truncate(0); + let nWrote = 0, chunk, checkedHeader = false, err = false; + try{ + while( undefined !== (chunk = await callback()) ){ + if(chunk instanceof ArrayBuffer) chunk = new Uint8Array(chunk); + if( 0===nWrote && chunk.byteLength>=15 ){ + util.affirmDbHeader(chunk); + checkedHeader = true; + } + sah.write(chunk, {at: HEADER_OFFSET_DATA + nWrote}); + nWrote += chunk.byteLength; + } + if( nWrote < 512 || 0!==nWrote % 512 ){ + toss("Input size",nWrote,"is not correct for an SQLite database."); + } + if( !checkedHeader ){ + const header = new Uint8Array(20); + sah.read( header, {at: 0} ); + util.affirmDbHeader( header ); + } + sah.write(new Uint8Array([1,1]), { + at: HEADER_OFFSET_DATA + 18 + }); + }catch(e){ + this.setAssociatedPath(sah, '', 0); + throw e; + } + this.setAssociatedPath(sah, name, capi.SQLITE_OPEN_MAIN_DB); + return nWrote; + } + + + importDb(name, bytes){ + if( bytes instanceof ArrayBuffer ) bytes = new Uint8Array(bytes); + else if( bytes instanceof Function ) return this.importDbChunked(name, bytes); + const sah = this.#mapFilenameToSAH.get(name) + || this.nextAvailableSAH() + || toss("No available handles to import to."); + const n = bytes.byteLength; + if(n<512 || n%512!=0){ + toss("Byte array size is invalid for an SQLite db."); + } + const header = "SQLite format 3"; + for(let i = 0; i < header.length; ++i){ + if( header.charCodeAt(i) !== bytes[i] ){ + toss("Input does not contain an SQLite database header."); + } + } + const nWrote = sah.write(bytes, {at: HEADER_OFFSET_DATA}); + if(nWrote != n){ + this.setAssociatedPath(sah, '', 0); + toss("Expected to write "+n+" bytes but wrote "+nWrote+"."); + }else{ + sah.write(new Uint8Array([1,1]), {at: HEADER_OFFSET_DATA+18} + ); + this.setAssociatedPath(sah, name, capi.SQLITE_OPEN_MAIN_DB); + } + return nWrote; + } + + }; + + + + class OpfsSAHPoolUtil { + + #p; + + constructor(sahPool){ + this.#p = sahPool; + this.vfsName = sahPool.vfsName; + } + + async addCapacity(n){ return this.#p.addCapacity(n) } + + async reduceCapacity(n){ return this.#p.reduceCapacity(n) } + + getCapacity(){ return this.#p.getCapacity(this.#p) } + + getFileCount(){ return this.#p.getFileCount() } + getFileNames(){ return this.#p.getFileNames() } + + async reserveMinimumCapacity(min){ + const c = this.#p.getCapacity(); + return (c < min) ? this.#p.addCapacity(min - c) : c; + } + + exportFile(name){ return this.#p.exportFile(name) } + + importDb(name, bytes){ return this.#p.importDb(name,bytes) } + + async wipeFiles(){ return this.#p.reset(true) } + + unlink(filename){ return this.#p.deletePath(filename) } + + async removeVfs(){ return this.#p.removeVfs() } + + }; + + + const apiVersionCheck = async ()=>{ + const dh = await navigator.storage.getDirectory(); + const fn = '.opfs-sahpool-sync-check-'+getRandomName(); + const fh = await dh.getFileHandle(fn, { create: true }); + const ah = await fh.createSyncAccessHandle(); + const close = ah.close(); + await close; + await dh.removeEntry(fn); + if(close?.then){ + toss("The local OPFS API is too old for opfs-sahpool:", + "it has an async FileSystemSyncAccessHandle.close() method."); + } + return true; + }; + + + let instanceCounter = 0; + + + sqlite3.installOpfsSAHPoolVfs = async function(options=Object.create(null)){ + const vfsName = options.name || optionDefaults.name; + if(0 && 2===++instanceCounter){ + throw new Error("Just testing rejection."); + } + if(initPromises[vfsName]){ + + return initPromises[vfsName]; + } + if(!globalThis.FileSystemHandle || + !globalThis.FileSystemDirectoryHandle || + !globalThis.FileSystemFileHandle || + !globalThis.FileSystemFileHandle.prototype.createSyncAccessHandle || + !navigator?.storage?.getDirectory){ + return (initPromises[vfsName] = Promise.reject(new Error("Missing required OPFS APIs."))); + } + + + return initPromises[vfsName] = apiVersionCheck().then(async function(){ + if(options.$testThrowInInit){ + throw options.$testThrowInInit; + } + const thePool = new OpfsSAHPool(options); + return thePool.isReady.then(async()=>{ + + const poolUtil = new OpfsSAHPoolUtil(thePool); + if(sqlite3.oo1){ + const oo1 = sqlite3.oo1; + const theVfs = thePool.getVfs(); + const OpfsSAHPoolDb = function(...args){ + const opt = oo1.DB.dbCtorHelper.normalizeArgs(...args); + opt.vfs = theVfs.$zName; + oo1.DB.dbCtorHelper.call(this, opt); + }; + OpfsSAHPoolDb.prototype = Object.create(oo1.DB.prototype); + + poolUtil.OpfsSAHPoolDb = OpfsSAHPoolDb; + oo1.DB.dbCtorHelper.setVfsPostOpenSql( + theVfs.pointer, + function(oo1Db, sqlite3){ + sqlite3.capi.sqlite3_exec(oo1Db, [ + + "pragma journal_mode=DELETE;", + "pragma cache_size=-16384;" + ], 0, 0, 0); + } + ); + } + thePool.log("VFS initialized."); + return poolUtil; + }).catch(async (e)=>{ + await thePool.removeVfs().catch(()=>{}); + return e; + }); + }).catch((err)=>{ + + return initPromises[vfsName] = Promise.reject(err); + }); + }; +}); + + + +'use strict'; +if('undefined' !== typeof Module){ + + const SABC = Object.assign( + Object.create(null), { + exports: ('undefined'===typeof wasmExports) + ? Module['asm'] + : wasmExports , + memory: Module.wasmMemory + }, + globalThis.sqlite3ApiConfig || {} + ); + + + + globalThis.sqlite3ApiConfig = SABC; + let sqlite3; + try{ + sqlite3 = globalThis.sqlite3ApiBootstrap(); + }catch(e){ + console.error("sqlite3ApiBootstrap() error:",e); + throw e; + }finally{ + delete globalThis.sqlite3ApiBootstrap; + delete globalThis.sqlite3ApiConfig; + } + + Module.sqlite3 = sqlite3 ; +}else{ + console.warn("This is not running in an Emscripten module context, so", + "globalThis.sqlite3ApiBootstrap() is _not_ being called due to lack", + "of config info for the WASM environment.", + "It must be called manually."); +} + + + + +}); + + + + return sqlite3InitModule.ready +} +); +})(); +if (typeof exports === 'object' && typeof module === 'object') + module.exports = sqlite3InitModule; +else if (typeof define === 'function' && define['amd']) + define([], function() { return sqlite3InitModule; }); +else if (typeof exports === 'object') + exports["sqlite3InitModule"] = sqlite3InitModule; + + + +(function(){ + + const originalInit = sqlite3InitModule; + if(!originalInit){ + throw new Error("Expecting globalThis.sqlite3InitModule to be defined by the Emscripten build."); + } + + const initModuleState = globalThis.sqlite3InitModuleState = Object.assign(Object.create(null),{ + moduleScript: globalThis?.document?.currentScript, + isWorker: ('undefined' !== typeof WorkerGlobalScope), + location: globalThis.location, + urlParams: globalThis?.location?.href + ? new URL(globalThis.location.href).searchParams + : new URLSearchParams() + }); + initModuleState.debugModule = + initModuleState.urlParams.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('/') + '/'; + } + + globalThis.sqlite3InitModule = function ff(...args){ + + return originalInit(...args).then((EmscriptenModule)=>{ + + const s = EmscriptenModule.sqlite3; + s.scriptInfo = initModuleState; + + 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; + }); + }; + globalThis.sqlite3InitModule.ready = originalInit.ready; + + if(globalThis.sqlite3InitModuleState.moduleScript){ + const sim = globalThis.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("globalThis.location.href =",globalThis.location.href); + if('undefined' !== typeof document){ + console.warn("document.currentScript.src =", + document?.currentScript?.src); + } + } + + + + + if (typeof exports === 'object' && typeof module === 'object'){ + module.exports = sqlite3InitModule; + }else if (typeof exports === 'object'){ + exports["sqlite3InitModule"] = sqlite3InitModule; + } + + return globalThis.sqlite3InitModule ; +})(); diff --git a/vendor/sqlite3/sqlite3.wasm b/vendor/sqlite3/sqlite3.wasm new file mode 100644 index 0000000000000000000000000000000000000000..2a9f2c54e1bd1429581e4639ecb3fc729fc58857 GIT binary patch literal 931482 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%0DJd9vaP@MS9}gBO};I0b(bv*W6c=246Wz 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�#!T+P-b?heLN=y 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ú(cNH|~jbVT~+q2Zyje(1As`_bGRU|L`q5 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 sBp8j}2(9l5YUDGtvM2sf4a&GU