From c1025c0092c80b94f08b11aba55e26f7e60b0597 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 20 Jan 2026 19:12:23 +0100 Subject: [PATCH 1/6] chore: update SQLite Wasm binaries from master (e8220056842ea6f71822cbe227fc1ce973f4ad0d) (#17) Co-authored-by: jurerotar <28565137+jurerotar@users.noreply.github.com> --- src/bin/sqlite3-bundler-friendly.mjs | 87 ++------------------------- src/bin/sqlite3-node.mjs | 49 ++------------- src/bin/sqlite3.mjs | 20 +++++- src/bin/sqlite3.wasm | Bin 859804 -> 859804 bytes 4 files changed, 27 insertions(+), 129 deletions(-) diff --git a/src/bin/sqlite3-bundler-friendly.mjs b/src/bin/sqlite3-bundler-friendly.mjs index aecc550..f5e38e6 100644 --- a/src/bin/sqlite3-bundler-friendly.mjs +++ b/src/bin/sqlite3-bundler-friendly.mjs @@ -29,7 +29,7 @@ ** ** SQLITE_VERSION "3.52.0" ** SQLITE_VERSION_NUMBER 3052000 -** SQLITE_SOURCE_ID "2026-01-20 10:57:44 346ad366a8ebed1e7936c59f8a40e9c8e7e31d0153bc4f654a47b2ddc39b18ca" +** SQLITE_SOURCE_ID "2026-01-20 18:01:56 982a91abc0c97e7e785d3ba69a4d0516a899f4d6cd462027ebdf7115e577e8c3" ** ** Emscripten SDK: 4.0.23 */ @@ -94,85 +94,6 @@ var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIR ./c-pp-lite -o ./bld/pre-js.bundler.js -Dtarget:es6-module -Dtarget:es6-bundler-friendly -DModule.instantiateWasm api/pre-js.c-pp.js */ -(function(Module){ - const sIMS = - globalThis.sqlite3InitModuleState/*from extern-post-js.c-pp.js*/ - || Object.assign(Object.create(null),{ - /* In WASMFS builds this file gets loaded once per thread, - but sqlite3InitModuleState is not getting set for the - worker threads? That those workers seem to function fine - despite that is curious. */ - debugModule: function(){ - console.warn("globalThis.sqlite3InitModuleState is missing",arguments); - } - }); - delete globalThis.sqlite3InitModuleState; - sIMS.debugModule('pre-js.js sqlite3InitModuleState =',sIMS); - - /** - This custom locateFile() tries to figure out where to load `path` - from. The intent is to provide a way for foo/bar/X.js loaded from a - Worker constructor or importScripts() to be able to resolve - foo/bar/X.wasm (in the latter case, with some help): - - 1) If URL param named the same as `path` is set, it is returned. - - 2) If sqlite3InitModuleState.sqlite3Dir is set, then (thatName + path) - is returned (it's assumed to end with '/'). - - 3) If this code is running in the main UI thread AND it was loaded - from a SCRIPT tag, the directory part of that URL is used - as the prefix. (This form of resolution unfortunately does not - function for scripts loaded via importScripts().) - - 4) If none of the above apply, (prefix+path) is returned. - - None of the above apply in ES6 builds, which uses a much simpler - approach. - */ - Module['locateFile'] = function(path, prefix) { - return new URL(path, import.meta.url).href; - }.bind(sIMS); - - /** - Override Module.instantiateWasm(). - - A custom Module.instantiateWasm() does not work in WASMFS builds: - - https://github.com/emscripten-core/emscripten/issues/17951 - - In such builds we must disable this. - - It's disabled in the (unsupported/untested) node builds because - node does not do fetch(). - */ - Module['instantiateWasm'] = function callee(imports,onSuccess){ - const sims = this; - const uri = Module.locateFile( - sims.wasmFilename, ( - ('undefined'===typeof scriptDirectory/*var defined by Emscripten glue*/) - ? "" : scriptDirectory) - ); - sims.debugModule("instantiateWasm() uri =", uri, "sIMS =",this); - const wfetch = ()=>fetch(uri, {credentials: 'same-origin'}); - const finalThen = (arg)=>{ - arg.imports = imports; - sims.instantiateWasm = arg /* used by sqlite3-api-prologue.c-pp.js */; - onSuccess(arg.instance, arg.module); - }; - const loadWasm = WebAssembly.instantiateStreaming - ? async ()=> - WebAssembly - .instantiateStreaming(wfetch(), imports) - .then(finalThen) - : async ()=>// Safari < v15 - wfetch() - .then(response => response.arrayBuffer()) - .then(bytes => WebAssembly.instantiate(bytes, imports)) - .then(finalThen) - return loadWasm(); - }.bind(sIMS); -})(Module); /* END FILE: api/pre-js.js. */ // end include: ./bld/pre-js.bundler.js @@ -4824,7 +4745,7 @@ Module.runSQLite3PostLoadInit = async function( ** ** SQLITE_VERSION "3.52.0" ** SQLITE_VERSION_NUMBER 3052000 -** SQLITE_SOURCE_ID "2026-01-20 10:57:44 346ad366a8ebed1e7936c59f8a40e9c8e7e31d0153bc4f654a47b2ddc39b18ca" +** SQLITE_SOURCE_ID "2026-01-20 18:01:56 982a91abc0c97e7e785d3ba69a4d0516a899f4d6cd462027ebdf7115e577e8c3" ** ** Emscripten SDK: 4.0.23 */ @@ -6999,7 +6920,7 @@ globalThis.sqlite3ApiBootstrap.defaultConfig = Object.create(null); */ globalThis.sqlite3ApiBootstrap.sqlite3 = undefined; globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ - sqlite3.version = {"libVersion": "3.52.0", "libVersionNumber": 3052000, "sourceId": "2026-01-20 10:57:44 346ad366a8ebed1e7936c59f8a40e9c8e7e31d0153bc4f654a47b2ddc39b18ca","downloadVersion": 3520000,"scm":{ "sha3-256": "346ad366a8ebed1e7936c59f8a40e9c8e7e31d0153bc4f654a47b2ddc39b18ca","branch": "trunk","tags": "","datetime": "2026-01-20T10:57:44.925Z"}}; + sqlite3.version = {"libVersion": "3.52.0", "libVersionNumber": 3052000, "sourceId": "2026-01-20 18:01:56 982a91abc0c97e7e785d3ba69a4d0516a899f4d6cd462027ebdf7115e577e8c3","downloadVersion": 3520000,"scm":{ "sha3-256": "982a91abc0c97e7e785d3ba69a4d0516a899f4d6cd462027ebdf7115e577e8c3","branch": "trunk","tags": "","datetime": "2026-01-20T18:01:56.243Z"}}; }); /** 2022-07-08 @@ -21047,6 +20968,8 @@ const toExportForESM = const sIM = globalThis.sqlite3InitModule = function ff(...args){ //console.warn("Using replaced sqlite3InitModule()",globalThis.location); + sIMS.emscriptenLocateFile = args[0]?.locateFile /* see pre-js.c-pp.js [tag:locateFile] */; + sIMS.emscriptenInstantiateWasm = args[0]?.instantiateWasm /* see pre-js.c-pp.js [tag:locateFile] */; return originalInit(...args).then((EmscriptenModule)=>{ sIMS.debugModule("sqlite3InitModule() sIMS =",sIMS); sIMS.debugModule("sqlite3InitModule() EmscriptenModule =",EmscriptenModule); diff --git a/src/bin/sqlite3-node.mjs b/src/bin/sqlite3-node.mjs index 407f45a..67548ca 100644 --- a/src/bin/sqlite3-node.mjs +++ b/src/bin/sqlite3-node.mjs @@ -29,7 +29,7 @@ ** ** SQLITE_VERSION "3.52.0" ** SQLITE_VERSION_NUMBER 3052000 -** SQLITE_SOURCE_ID "2026-01-20 10:57:44 346ad366a8ebed1e7936c59f8a40e9c8e7e31d0153bc4f654a47b2ddc39b18ca" +** SQLITE_SOURCE_ID "2026-01-20 18:01:56 982a91abc0c97e7e785d3ba69a4d0516a899f4d6cd462027ebdf7115e577e8c3" ** ** Emscripten SDK: 4.0.23 */ @@ -108,47 +108,6 @@ if (ENVIRONMENT_IS_NODE) { load. It may not work properly. Only builds targeting browser environments are supported and tested. */ -(function(Module){ - const sIMS = - globalThis.sqlite3InitModuleState/*from extern-post-js.c-pp.js*/ - || Object.assign(Object.create(null),{ - /* In WASMFS builds this file gets loaded once per thread, - but sqlite3InitModuleState is not getting set for the - worker threads? That those workers seem to function fine - despite that is curious. */ - debugModule: function(){ - console.warn("globalThis.sqlite3InitModuleState is missing",arguments); - } - }); - delete globalThis.sqlite3InitModuleState; - sIMS.debugModule('pre-js.js sqlite3InitModuleState =',sIMS); - - /** - This custom locateFile() tries to figure out where to load `path` - from. The intent is to provide a way for foo/bar/X.js loaded from a - Worker constructor or importScripts() to be able to resolve - foo/bar/X.wasm (in the latter case, with some help): - - 1) If URL param named the same as `path` is set, it is returned. - - 2) If sqlite3InitModuleState.sqlite3Dir is set, then (thatName + path) - is returned (it's assumed to end with '/'). - - 3) If this code is running in the main UI thread AND it was loaded - from a SCRIPT tag, the directory part of that URL is used - as the prefix. (This form of resolution unfortunately does not - function for scripts loaded via importScripts().) - - 4) If none of the above apply, (prefix+path) is returned. - - None of the above apply in ES6 builds, which uses a much simpler - approach. - */ - Module['locateFile'] = function(path, prefix) { - return new URL(path, import.meta.url).href; - }.bind(sIMS); - -})(Module); /* END FILE: api/pre-js.js. */ // end include: ./bld/pre-js.node.js @@ -4842,7 +4801,7 @@ Module.runSQLite3PostLoadInit = async function( ** ** SQLITE_VERSION "3.52.0" ** SQLITE_VERSION_NUMBER 3052000 -** SQLITE_SOURCE_ID "2026-01-20 10:57:44 346ad366a8ebed1e7936c59f8a40e9c8e7e31d0153bc4f654a47b2ddc39b18ca" +** SQLITE_SOURCE_ID "2026-01-20 18:01:56 982a91abc0c97e7e785d3ba69a4d0516a899f4d6cd462027ebdf7115e577e8c3" ** ** Emscripten SDK: 4.0.23 */ @@ -7017,7 +6976,7 @@ globalThis.sqlite3ApiBootstrap.defaultConfig = Object.create(null); */ globalThis.sqlite3ApiBootstrap.sqlite3 = undefined; globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ - sqlite3.version = {"libVersion": "3.52.0", "libVersionNumber": 3052000, "sourceId": "2026-01-20 10:57:44 346ad366a8ebed1e7936c59f8a40e9c8e7e31d0153bc4f654a47b2ddc39b18ca","downloadVersion": 3520000,"scm":{ "sha3-256": "346ad366a8ebed1e7936c59f8a40e9c8e7e31d0153bc4f654a47b2ddc39b18ca","branch": "trunk","tags": "","datetime": "2026-01-20T10:57:44.925Z"}}; + sqlite3.version = {"libVersion": "3.52.0", "libVersionNumber": 3052000, "sourceId": "2026-01-20 18:01:56 982a91abc0c97e7e785d3ba69a4d0516a899f4d6cd462027ebdf7115e577e8c3","downloadVersion": 3520000,"scm":{ "sha3-256": "982a91abc0c97e7e785d3ba69a4d0516a899f4d6cd462027ebdf7115e577e8c3","branch": "trunk","tags": "","datetime": "2026-01-20T18:01:56.243Z"}}; }); /** 2022-07-08 @@ -18157,6 +18116,8 @@ const toExportForESM = const sIM = globalThis.sqlite3InitModule = function ff(...args){ //console.warn("Using replaced sqlite3InitModule()",globalThis.location); + sIMS.emscriptenLocateFile = args[0]?.locateFile /* see pre-js.c-pp.js [tag:locateFile] */; + sIMS.emscriptenInstantiateWasm = args[0]?.instantiateWasm /* see pre-js.c-pp.js [tag:locateFile] */; return originalInit(...args).then((EmscriptenModule)=>{ sIMS.debugModule("sqlite3InitModule() sIMS =",sIMS); sIMS.debugModule("sqlite3InitModule() EmscriptenModule =",EmscriptenModule); diff --git a/src/bin/sqlite3.mjs b/src/bin/sqlite3.mjs index 3a1dc11..0a37fb6 100644 --- a/src/bin/sqlite3.mjs +++ b/src/bin/sqlite3.mjs @@ -29,7 +29,7 @@ ** ** SQLITE_VERSION "3.52.0" ** SQLITE_VERSION_NUMBER 3052000 -** SQLITE_SOURCE_ID "2026-01-20 10:57:44 346ad366a8ebed1e7936c59f8a40e9c8e7e31d0153bc4f654a47b2ddc39b18ca" +** SQLITE_SOURCE_ID "2026-01-20 18:01:56 982a91abc0c97e7e785d3ba69a4d0516a899f4d6cd462027ebdf7115e577e8c3" ** ** Emscripten SDK: 4.0.23 */ @@ -131,6 +131,14 @@ var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIR approach. */ Module['locateFile'] = function(path, prefix) { + if( this.emscriptenLocateFile instanceof Function ){ + /* [tag:locateFile] Client-overridden impl. We do not support + this but offer it as a back-door which will go away the + moment either Emscripten changes that interface or we manage + to get non-Emscripten builds working. + https://sqlite.org/forum/forumpost/1eec339854c935bd */ + return this.emscriptenLocateFile(path, prefix); + } return new URL(path, import.meta.url).href; }.bind(sIMS); @@ -147,6 +155,10 @@ var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIR node does not do fetch(). */ Module['instantiateWasm'] = function callee(imports,onSuccess){ + if( this.emscriptenInstantiateWasm instanceof Function ){ + /* See [tag:locateFile]. Same story here */ + return this.emscriptenInstantiateWasm(imports, onSuccess); + } const sims = this; const uri = Module.locateFile( sims.wasmFilename, ( @@ -4824,7 +4836,7 @@ Module.runSQLite3PostLoadInit = async function( ** ** SQLITE_VERSION "3.52.0" ** SQLITE_VERSION_NUMBER 3052000 -** SQLITE_SOURCE_ID "2026-01-20 10:57:44 346ad366a8ebed1e7936c59f8a40e9c8e7e31d0153bc4f654a47b2ddc39b18ca" +** SQLITE_SOURCE_ID "2026-01-20 18:01:56 982a91abc0c97e7e785d3ba69a4d0516a899f4d6cd462027ebdf7115e577e8c3" ** ** Emscripten SDK: 4.0.23 */ @@ -6999,7 +7011,7 @@ globalThis.sqlite3ApiBootstrap.defaultConfig = Object.create(null); */ globalThis.sqlite3ApiBootstrap.sqlite3 = undefined; globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ - sqlite3.version = {"libVersion": "3.52.0", "libVersionNumber": 3052000, "sourceId": "2026-01-20 10:57:44 346ad366a8ebed1e7936c59f8a40e9c8e7e31d0153bc4f654a47b2ddc39b18ca","downloadVersion": 3520000,"scm":{ "sha3-256": "346ad366a8ebed1e7936c59f8a40e9c8e7e31d0153bc4f654a47b2ddc39b18ca","branch": "trunk","tags": "","datetime": "2026-01-20T10:57:44.925Z"}}; + sqlite3.version = {"libVersion": "3.52.0", "libVersionNumber": 3052000, "sourceId": "2026-01-20 18:01:56 982a91abc0c97e7e785d3ba69a4d0516a899f4d6cd462027ebdf7115e577e8c3","downloadVersion": 3520000,"scm":{ "sha3-256": "982a91abc0c97e7e785d3ba69a4d0516a899f4d6cd462027ebdf7115e577e8c3","branch": "trunk","tags": "","datetime": "2026-01-20T18:01:56.243Z"}}; }); /** 2022-07-08 @@ -21047,6 +21059,8 @@ const toExportForESM = const sIM = globalThis.sqlite3InitModule = function ff(...args){ //console.warn("Using replaced sqlite3InitModule()",globalThis.location); + sIMS.emscriptenLocateFile = args[0]?.locateFile /* see pre-js.c-pp.js [tag:locateFile] */; + sIMS.emscriptenInstantiateWasm = args[0]?.instantiateWasm /* see pre-js.c-pp.js [tag:locateFile] */; return originalInit(...args).then((EmscriptenModule)=>{ sIMS.debugModule("sqlite3InitModule() sIMS =",sIMS); sIMS.debugModule("sqlite3InitModule() EmscriptenModule =",EmscriptenModule); diff --git a/src/bin/sqlite3.wasm b/src/bin/sqlite3.wasm index 84c0df8fafef57caafe52395fcb0cf671c00d3fb..9e36963cf86a4d58f8b3daabf6f21d175d989cb6 100644 GIT binary patch delta 6329 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 delta 6329 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 D$ysyb From 5127e5da9b71a0547d45c363fc7bab9329162963 Mon Sep 17 00:00:00 2001 From: Jure Rotar Date: Tue, 20 Jan 2026 19:45:16 +0100 Subject: [PATCH 2/6] chore: bumped version --- package-lock.json | 12 ++---------- package.json | 2 +- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index e5a785e..f700f51 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@sqlite.org/sqlite-wasm", - "version": "3.51.2-build2", + "version": "3.51.2-build3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@sqlite.org/sqlite-wasm", - "version": "3.51.2-build2", + "version": "3.51.2-build3", "license": "Apache-2.0", "devDependencies": { "@types/node": "^25.0.9", @@ -1388,7 +1388,6 @@ "integrity": "sha512-CE9nlzslHX6Qz//MVrjpulTC9IgtXTbJ+q7Rx1HD+IeSOWv4NHIRNHPA6dB4x01d9paEqt+TvoqZfmgq40DxEQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vitest/browser": "4.0.17", "@vitest/mocker": "4.0.17", @@ -2079,7 +2078,6 @@ "integrity": "sha512-rfbiwB6OKxZFIFQ7SRnCPB2WL9WhyXsFoTfecYgeCeFSOBxvkWLaXsdv5ehzJrfqwXQmDephAKWLRQoFoJwrew==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/node": ">=20.0.0", "@types/whatwg-mimetype": "^3.0.2", @@ -3206,7 +3204,6 @@ "integrity": "sha512-yEPsovQfpxYfgWNhCfECjG5AQaO+K3dp6XERmOepyPDVqcJm+bjyCVO3pmU+nAPe0N5dDvekfGezt/EIiRe1TA==", "dev": true, "license": "MIT", - "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -3241,7 +3238,6 @@ "integrity": "sha512-MFqyfRLAExPVZdTQFwkAQELzA8idyXzROVOytg6nEJ/GEypXBUmMGrVaID8cTuzRS1U5L8yTOdOJtMXgFUJAeA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@publint/pack": "^0.1.2", "package-manager-detector": "^1.6.0", @@ -3313,7 +3309,6 @@ "integrity": "sha512-YYgpv7MiTp9LdLj1fzGzCtij8Yi2OKEc3HQtfbIxW4yuSgpQz9518I69U72T5ErPA/ATOXqlcisiLrWy+5V9YA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@oxc-project/types": "=0.108.0", "@rolldown/pluginutils": "1.0.0-beta.60" @@ -3746,7 +3741,6 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -3841,7 +3835,6 @@ "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", @@ -3917,7 +3910,6 @@ "integrity": "sha512-FQMeF0DJdWY0iOnbv466n/0BudNdKj1l5jYgl5JVTwjSsZSlqyXFt/9+1sEyhR6CLowbZpV7O1sCHrzBhucKKg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vitest/expect": "4.0.17", "@vitest/mocker": "4.0.17", diff --git a/package.json b/package.json index ec8eaee..f8a3bb6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@sqlite.org/sqlite-wasm", - "version": "3.51.2-build2", + "version": "3.51.2-build3", "description": "SQLite Wasm conveniently wrapped as an ES Module.", "type": "module", "repository": { From 58c08a687f1b8f47b6c15de051c61dedf8b11ad1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 20 Jan 2026 21:52:49 +0100 Subject: [PATCH 3/6] chore: update SQLite Wasm binaries from master (ca0b14a4906fc0e247818078f4526b90a5caa03c) (#18) Co-authored-by: jurerotar <28565137+jurerotar@users.noreply.github.com> --- src/bin/sqlite3-bundler-friendly.mjs | 6 +++--- src/bin/sqlite3-node.mjs | 12 +++++++----- src/bin/sqlite3.mjs | 6 +++--- src/bin/sqlite3.wasm | Bin 859804 -> 859804 bytes 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/bin/sqlite3-bundler-friendly.mjs b/src/bin/sqlite3-bundler-friendly.mjs index f5e38e6..d70b37b 100644 --- a/src/bin/sqlite3-bundler-friendly.mjs +++ b/src/bin/sqlite3-bundler-friendly.mjs @@ -29,7 +29,7 @@ ** ** SQLITE_VERSION "3.52.0" ** SQLITE_VERSION_NUMBER 3052000 -** SQLITE_SOURCE_ID "2026-01-20 18:01:56 982a91abc0c97e7e785d3ba69a4d0516a899f4d6cd462027ebdf7115e577e8c3" +** SQLITE_SOURCE_ID "2026-01-20 18:30:48 2b3b36da9d60c265dceec5964ea51c752d81f41459fb6849c8faea658b253552" ** ** Emscripten SDK: 4.0.23 */ @@ -4745,7 +4745,7 @@ Module.runSQLite3PostLoadInit = async function( ** ** SQLITE_VERSION "3.52.0" ** SQLITE_VERSION_NUMBER 3052000 -** SQLITE_SOURCE_ID "2026-01-20 18:01:56 982a91abc0c97e7e785d3ba69a4d0516a899f4d6cd462027ebdf7115e577e8c3" +** SQLITE_SOURCE_ID "2026-01-20 18:30:48 2b3b36da9d60c265dceec5964ea51c752d81f41459fb6849c8faea658b253552" ** ** Emscripten SDK: 4.0.23 */ @@ -6920,7 +6920,7 @@ globalThis.sqlite3ApiBootstrap.defaultConfig = Object.create(null); */ globalThis.sqlite3ApiBootstrap.sqlite3 = undefined; globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ - sqlite3.version = {"libVersion": "3.52.0", "libVersionNumber": 3052000, "sourceId": "2026-01-20 18:01:56 982a91abc0c97e7e785d3ba69a4d0516a899f4d6cd462027ebdf7115e577e8c3","downloadVersion": 3520000,"scm":{ "sha3-256": "982a91abc0c97e7e785d3ba69a4d0516a899f4d6cd462027ebdf7115e577e8c3","branch": "trunk","tags": "","datetime": "2026-01-20T18:01:56.243Z"}}; + sqlite3.version = {"libVersion": "3.52.0", "libVersionNumber": 3052000, "sourceId": "2026-01-20 18:30:48 2b3b36da9d60c265dceec5964ea51c752d81f41459fb6849c8faea658b253552","downloadVersion": 3520000,"scm":{ "sha3-256": "2b3b36da9d60c265dceec5964ea51c752d81f41459fb6849c8faea658b253552","branch": "trunk","tags": "","datetime": "2026-01-20T18:30:48.704Z"}}; }); /** 2022-07-08 diff --git a/src/bin/sqlite3-node.mjs b/src/bin/sqlite3-node.mjs index 67548ca..5981029 100644 --- a/src/bin/sqlite3-node.mjs +++ b/src/bin/sqlite3-node.mjs @@ -29,7 +29,7 @@ ** ** SQLITE_VERSION "3.52.0" ** SQLITE_VERSION_NUMBER 3052000 -** SQLITE_SOURCE_ID "2026-01-20 18:01:56 982a91abc0c97e7e785d3ba69a4d0516a899f4d6cd462027ebdf7115e577e8c3" +** SQLITE_SOURCE_ID "2026-01-20 18:30:48 2b3b36da9d60c265dceec5964ea51c752d81f41459fb6849c8faea658b253552" ** ** Emscripten SDK: 4.0.23 */ @@ -105,8 +105,10 @@ if (ENVIRONMENT_IS_NODE) { This SQLite JS build configuration is entirely unsupported! It has not been tested beyond the ability to compile it. It may not - load. It may not work properly. Only builds targeting browser - environments are supported and tested. + load. It may not work properly. Only builds _directly_ targeting + browser environments ("vanilla" JS and ESM modules) are supported + and tested. Builds which _indirectly_ target browsers (namely + bundler-friendly builds) are not supported deliverables. */ /* END FILE: api/pre-js.js. */ // end include: ./bld/pre-js.node.js @@ -4801,7 +4803,7 @@ Module.runSQLite3PostLoadInit = async function( ** ** SQLITE_VERSION "3.52.0" ** SQLITE_VERSION_NUMBER 3052000 -** SQLITE_SOURCE_ID "2026-01-20 18:01:56 982a91abc0c97e7e785d3ba69a4d0516a899f4d6cd462027ebdf7115e577e8c3" +** SQLITE_SOURCE_ID "2026-01-20 18:30:48 2b3b36da9d60c265dceec5964ea51c752d81f41459fb6849c8faea658b253552" ** ** Emscripten SDK: 4.0.23 */ @@ -6976,7 +6978,7 @@ globalThis.sqlite3ApiBootstrap.defaultConfig = Object.create(null); */ globalThis.sqlite3ApiBootstrap.sqlite3 = undefined; globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ - sqlite3.version = {"libVersion": "3.52.0", "libVersionNumber": 3052000, "sourceId": "2026-01-20 18:01:56 982a91abc0c97e7e785d3ba69a4d0516a899f4d6cd462027ebdf7115e577e8c3","downloadVersion": 3520000,"scm":{ "sha3-256": "982a91abc0c97e7e785d3ba69a4d0516a899f4d6cd462027ebdf7115e577e8c3","branch": "trunk","tags": "","datetime": "2026-01-20T18:01:56.243Z"}}; + sqlite3.version = {"libVersion": "3.52.0", "libVersionNumber": 3052000, "sourceId": "2026-01-20 18:30:48 2b3b36da9d60c265dceec5964ea51c752d81f41459fb6849c8faea658b253552","downloadVersion": 3520000,"scm":{ "sha3-256": "2b3b36da9d60c265dceec5964ea51c752d81f41459fb6849c8faea658b253552","branch": "trunk","tags": "","datetime": "2026-01-20T18:30:48.704Z"}}; }); /** 2022-07-08 diff --git a/src/bin/sqlite3.mjs b/src/bin/sqlite3.mjs index 0a37fb6..d73d496 100644 --- a/src/bin/sqlite3.mjs +++ b/src/bin/sqlite3.mjs @@ -29,7 +29,7 @@ ** ** SQLITE_VERSION "3.52.0" ** SQLITE_VERSION_NUMBER 3052000 -** SQLITE_SOURCE_ID "2026-01-20 18:01:56 982a91abc0c97e7e785d3ba69a4d0516a899f4d6cd462027ebdf7115e577e8c3" +** SQLITE_SOURCE_ID "2026-01-20 18:30:48 2b3b36da9d60c265dceec5964ea51c752d81f41459fb6849c8faea658b253552" ** ** Emscripten SDK: 4.0.23 */ @@ -4836,7 +4836,7 @@ Module.runSQLite3PostLoadInit = async function( ** ** SQLITE_VERSION "3.52.0" ** SQLITE_VERSION_NUMBER 3052000 -** SQLITE_SOURCE_ID "2026-01-20 18:01:56 982a91abc0c97e7e785d3ba69a4d0516a899f4d6cd462027ebdf7115e577e8c3" +** SQLITE_SOURCE_ID "2026-01-20 18:30:48 2b3b36da9d60c265dceec5964ea51c752d81f41459fb6849c8faea658b253552" ** ** Emscripten SDK: 4.0.23 */ @@ -7011,7 +7011,7 @@ globalThis.sqlite3ApiBootstrap.defaultConfig = Object.create(null); */ globalThis.sqlite3ApiBootstrap.sqlite3 = undefined; globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ - sqlite3.version = {"libVersion": "3.52.0", "libVersionNumber": 3052000, "sourceId": "2026-01-20 18:01:56 982a91abc0c97e7e785d3ba69a4d0516a899f4d6cd462027ebdf7115e577e8c3","downloadVersion": 3520000,"scm":{ "sha3-256": "982a91abc0c97e7e785d3ba69a4d0516a899f4d6cd462027ebdf7115e577e8c3","branch": "trunk","tags": "","datetime": "2026-01-20T18:01:56.243Z"}}; + sqlite3.version = {"libVersion": "3.52.0", "libVersionNumber": 3052000, "sourceId": "2026-01-20 18:30:48 2b3b36da9d60c265dceec5964ea51c752d81f41459fb6849c8faea658b253552","downloadVersion": 3520000,"scm":{ "sha3-256": "2b3b36da9d60c265dceec5964ea51c752d81f41459fb6849c8faea658b253552","branch": "trunk","tags": "","datetime": "2026-01-20T18:30:48.704Z"}}; }); /** 2022-07-08 diff --git a/src/bin/sqlite3.wasm b/src/bin/sqlite3.wasm index 9e36963cf86a4d58f8b3daabf6f21d175d989cb6..d9c2cb9a75a91d8f2dbcbe8d13e6a332cc24f195 100644 GIT binary patch delta 281 zcmbQU*JRFKlMOozm=5e|-eu6f%YbqFE(0cq1x#!9Z2xnC$w7p1{&d@?OwLSOcW-Zc z$}}MYDA6ur#|*?QK+FonY(UJuUBr$f+ZLp&v6|yfAJeiu?eSckK+FZi+}q>1c=C0o zYnt;+jZ7;kHnmbPGB7gJH89jQGEgwIurfBVGOhBjdlN6OzJL_}JO+jjiy0VR7BVpK&tYIVH1c=B~3 z(@Kg>trUz5jLdWm40VkR6bvn_3=FMI%@iyxj1nyk6O)n+k}b_sfzZM<#W*R^%rem= z#lY0iEYZT!GR-8#EIGx*45;5cH7O;{+|bZ8)zsWP)gpQN88e>g+xMCC$Q)vPv;Fo@ zo_Zn1uiK+}c-0sg-*0c?<<%FE%9_W(@L@3n!^=Vj2L3q=44Oc`&k_a(`+3t(%kqXX TrcGCp Date: Tue, 20 Jan 2026 21:56:09 +0100 Subject: [PATCH 4/6] test: added test for bundler compatibility --- src/__tests__/bundler-compatibility.test.js | 54 +++++++++++++++++++++ src/__tests__/vite-repro/index.html | 6 +++ src/__tests__/vite-repro/main.js | 3 ++ vitest.config.ts | 5 +- 4 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 src/__tests__/bundler-compatibility.test.js create mode 100644 src/__tests__/vite-repro/index.html create mode 100644 src/__tests__/vite-repro/main.js diff --git a/src/__tests__/bundler-compatibility.test.js b/src/__tests__/bundler-compatibility.test.js new file mode 100644 index 0000000..70be794 --- /dev/null +++ b/src/__tests__/bundler-compatibility.test.js @@ -0,0 +1,54 @@ +import { describe, test, expect } from 'vitest'; +import { execSync } from 'node:child_process'; +import path from 'node:path'; +import fs from 'node:fs'; + +describe('Vite bundler compatibility', () => { + test('should rename sqlite3.wasm with a hash and update the import URL', () => { + const testDir = path.resolve(__dirname, 'vite-repro'); + const distDir = path.resolve(testDir, 'dist'); + + // Clean up previous build + if (fs.existsSync(distDir)) { + fs.rmSync(distDir, { recursive: true, force: true }); + } + + // Run vite build + // We use npx to ensure we use the project's vite + execSync('npx vite build', { cwd: testDir, stdio: 'inherit' }); + + // 1. Check if hashed WASM file exists in dist/assets + const assetsDir = path.resolve(distDir, 'assets'); + const files = fs.readdirSync(assetsDir); + const wasmFile = files.find( + (f) => f.startsWith('sqlite3-') && f.endsWith('.wasm'), + ); + + expect(wasmFile).toBeDefined(); + console.log('Found hashed WASM file:', wasmFile); + + // 2. Check if the JS bundle contains the hashed WASM filename + const assetsDirJs = path.resolve(distDir, 'assets'); + const jsFiles = fs + .readdirSync(assetsDirJs) + .filter((f) => f.endsWith('.js')); + const mainBundle = jsFiles.find((f) => f.startsWith('index-')); + expect(mainBundle).toBeDefined(); + + const bundleContent = fs.readFileSync( + path.resolve(assetsDirJs, mainBundle), + 'utf8', + ); + + // It should contain something like: new URL("/assets/sqlite3-hash.wasm", import.meta.url) + // Vite might use different quotes or spacing, but it should definitely have the hashed filename. + expect(bundleContent).toContain(wasmFile); + + // Specifically check that it's part of a new URL call or at least correctly referenced + // In our previous check it was: new URL("/assets/sqlite3-Bguoklsa.wasm",import.meta.url) + const urlPattern = new RegExp( + `new URL\\(".*${wasmFile}",\\s*import\\.meta\\.url\\)`, + ); + expect(bundleContent).toMatch(urlPattern); + }); +}); diff --git a/src/__tests__/vite-repro/index.html b/src/__tests__/vite-repro/index.html new file mode 100644 index 0000000..906966c --- /dev/null +++ b/src/__tests__/vite-repro/index.html @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/__tests__/vite-repro/main.js b/src/__tests__/vite-repro/main.js new file mode 100644 index 0000000..1a0fd14 --- /dev/null +++ b/src/__tests__/vite-repro/main.js @@ -0,0 +1,3 @@ +import sqlite3InitModule from '../../../src/index.js'; + +await sqlite3InitModule(); diff --git a/vitest.config.ts b/vitest.config.ts index a9c413a..b6d6f87 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -26,7 +26,10 @@ const vitestConfig: ViteUserConfig = defineConfig({ test: { name: 'node', environment: 'node', - include: ['src/__tests__/sqlite3-node.test.js'], + include: [ + 'src/__tests__/sqlite3-node.test.js', + 'src/__tests__/bundler-compatibility.test.js', + ], }, }, { From 02d08498850896897b3b7fea1cf58ab2d6ed5288 Mon Sep 17 00:00:00 2001 From: Jure Rotar Date: Tue, 20 Jan 2026 22:00:21 +0100 Subject: [PATCH 5/6] chore: removed test comments --- src/__tests__/bundler-compatibility.test.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/__tests__/bundler-compatibility.test.js b/src/__tests__/bundler-compatibility.test.js index 70be794..060bf17 100644 --- a/src/__tests__/bundler-compatibility.test.js +++ b/src/__tests__/bundler-compatibility.test.js @@ -14,7 +14,6 @@ describe('Vite bundler compatibility', () => { } // Run vite build - // We use npx to ensure we use the project's vite execSync('npx vite build', { cwd: testDir, stdio: 'inherit' }); // 1. Check if hashed WASM file exists in dist/assets @@ -25,7 +24,6 @@ describe('Vite bundler compatibility', () => { ); expect(wasmFile).toBeDefined(); - console.log('Found hashed WASM file:', wasmFile); // 2. Check if the JS bundle contains the hashed WASM filename const assetsDirJs = path.resolve(distDir, 'assets'); @@ -41,11 +39,9 @@ describe('Vite bundler compatibility', () => { ); // It should contain something like: new URL("/assets/sqlite3-hash.wasm", import.meta.url) - // Vite might use different quotes or spacing, but it should definitely have the hashed filename. expect(bundleContent).toContain(wasmFile); // Specifically check that it's part of a new URL call or at least correctly referenced - // In our previous check it was: new URL("/assets/sqlite3-Bguoklsa.wasm",import.meta.url) const urlPattern = new RegExp( `new URL\\(".*${wasmFile}",\\s*import\\.meta\\.url\\)`, ); From 3f1b19f24f9954a34e55cb3645c4e002661de8f9 Mon Sep 17 00:00:00 2001 From: Jure Rotar Date: Wed, 21 Jan 2026 09:25:39 +0100 Subject: [PATCH 6/6] chore: expanded test suite to test blobs and sahpool pause & unpause functionality --- src/__tests__/bundler-compatibility.test.js | 5 +- src/__tests__/sqlite3-node.test.js | 24 ++++++ src/__tests__/sqlite3-oo1.browser.test.js | 24 ++++++ .../workers/sqlite3-sahpool.worker.js | 82 +++++++++++++++++-- 4 files changed, 127 insertions(+), 8 deletions(-) diff --git a/src/__tests__/bundler-compatibility.test.js b/src/__tests__/bundler-compatibility.test.js index 060bf17..ac951d9 100644 --- a/src/__tests__/bundler-compatibility.test.js +++ b/src/__tests__/bundler-compatibility.test.js @@ -14,7 +14,10 @@ describe('Vite bundler compatibility', () => { } // Run vite build - execSync('npx vite build', { cwd: testDir, stdio: 'inherit' }); + execSync('npx vite build --logLevel error', { + cwd: testDir, + stdio: 'inherit', + }); // 1. Check if hashed WASM file exists in dist/assets const assetsDir = path.resolve(distDir, 'assets'); diff --git a/src/__tests__/sqlite3-node.test.js b/src/__tests__/sqlite3-node.test.js index 43fcefe..88f50d3 100644 --- a/src/__tests__/sqlite3-node.test.js +++ b/src/__tests__/sqlite3-node.test.js @@ -135,6 +135,30 @@ test('Node.js build sanity check', async () => { expect( typeof db.selectValue('SELECT sqlite_offset(id) FROM off_test'), ).toBe('number'); + + // 13. Blobs + const blobData = new Uint8Array([0x00, 0xff, 0xaa, 0x55]); + db.exec({ + sql: 'CREATE TABLE blobs (data BLOB)', + }); + db.exec({ + sql: 'INSERT INTO blobs (data) VALUES (?)', + bind: [blobData], + }); + const retrievedBlob = db.selectValue('SELECT data FROM blobs'); + expect(retrievedBlob).toBeInstanceOf(Uint8Array); + expect(retrievedBlob).toEqual(blobData); + + // 14. Error handling + expect(() => { + db.exec('INVALID SQL'); + }).toThrow(); + + db.exec('CREATE TABLE unique_test (id INTEGER PRIMARY KEY)'); + db.exec('INSERT INTO unique_test VALUES (1)'); + expect(() => { + db.exec('INSERT INTO unique_test VALUES (1)'); + }).toThrow(/UNIQUE constraint failed/); } finally { // 11. Close the database db.close(); diff --git a/src/__tests__/sqlite3-oo1.browser.test.js b/src/__tests__/sqlite3-oo1.browser.test.js index 1dc77c7..c636bb3 100644 --- a/src/__tests__/sqlite3-oo1.browser.test.js +++ b/src/__tests__/sqlite3-oo1.browser.test.js @@ -135,6 +135,30 @@ test('Bundler-friendly OO1 API sanity check (browser)', async () => { expect( typeof db.selectValue('SELECT sqlite_offset(id) FROM off_test'), ).toBe('number'); + + // 13. Blobs + const blobData = new Uint8Array([0x00, 0xff, 0xaa, 0x55]); + db.exec({ + sql: 'CREATE TABLE blobs (data BLOB)', + }); + db.exec({ + sql: 'INSERT INTO blobs (data) VALUES (?)', + bind: [blobData], + }); + const retrievedBlob = db.selectValue('SELECT data FROM blobs'); + expect(retrievedBlob).toBeInstanceOf(Uint8Array); + expect(retrievedBlob).toEqual(blobData); + + // 14. Error handling + expect(() => { + db.exec('INVALID SQL'); + }).toThrow(); + + db.exec('CREATE TABLE unique_test (id INTEGER PRIMARY KEY)'); + db.exec('INSERT INTO unique_test VALUES (1)'); + expect(() => { + db.exec('INSERT INTO unique_test VALUES (1)'); + }).toThrow(/UNIQUE constraint failed/); } finally { db.close(); expect(db.isOpen()).toBe(false); diff --git a/src/__tests__/workers/sqlite3-sahpool.worker.js b/src/__tests__/workers/sqlite3-sahpool.worker.js index 8b13e6c..251f919 100644 --- a/src/__tests__/workers/sqlite3-sahpool.worker.js +++ b/src/__tests__/workers/sqlite3-sahpool.worker.js @@ -1,10 +1,10 @@ import sqlite3InitModule from '../../bin/sqlite3-bundler-friendly.mjs'; -self.onmessage = async (e) => { +self.onmessage = async () => { try { const sqlite3 = await sqlite3InitModule(); const opfsSahPool = await sqlite3.installOpfsSAHPoolVfs(); - const db = new opfsSahPool.OpfsSAHPoolDb('/test-sahpool-worker.sqlite3'); + let db = new opfsSahPool.OpfsSAHPoolDb('/test-sahpool-worker.sqlite3'); try { // 1. Basic CRUD @@ -29,6 +29,15 @@ self.onmessage = async (e) => { throw new Error('CRUD check failed'); } + db.close(); + + // Reopen to check persistence + db = new opfsSahPool.OpfsSAHPoolDb('/test-sahpool-worker.sqlite3'); + const count = db.selectValue('SELECT count(*) FROM test'); + if (count !== 2) { + throw new Error('Persistence check failed'); + } + // 2. Joins db.exec( 'CREATE TABLE orders (id INTEGER PRIMARY KEY, user_id INTEGER, product TEXT)', @@ -42,13 +51,17 @@ self.onmessage = async (e) => { rowMode: 'object', callback: (row) => joinedRows.push(row), }); - if (joinedRows.length !== 2) throw new Error('Join check failed'); + if (joinedRows.length !== 2) { + throw new Error('Join check failed'); + } // 3. CTE const cteCount = db.selectValue( 'WITH RECURSIVE cnt(x) AS (SELECT 1 UNION ALL SELECT x+1 FROM cnt LIMIT 5) SELECT count(*) FROM cnt', ); - if (cteCount !== 5) throw new Error('CTE check failed'); + if (cteCount !== 5) { + throw new Error('CTE check failed'); + } // 4. FTS5 db.exec('CREATE VIRTUAL TABLE docs USING fts5(content)'); @@ -56,16 +69,71 @@ self.onmessage = async (e) => { const ftsResult = db.selectValue( "SELECT content FROM docs WHERE docs MATCH 'sqlite'", ); - if (ftsResult !== 'sqlite is great') throw new Error('FTS5 check failed'); + if (ftsResult !== 'sqlite is great') { + throw new Error('FTS5 check failed'); + } // 5. Math Functions const cosResult = db.selectValue('SELECT cos(0)'); - if (cosResult !== 1) throw new Error('Math functions check failed'); + if (cosResult !== 1) { + throw new Error('Math functions check failed'); + } // 6. Percentile db.exec('CREATE TABLE p(x); INSERT INTO p VALUES (1),(2),(3),(4),(5);'); const perc = db.selectValue('SELECT percentile(x, 50) FROM p'); - if (perc !== 3) throw new Error('Percentile check failed'); + if (perc !== 3) { + throw new Error('Percentile check failed'); + } + + // 7. pauseVfs and unpauseVfs + // Ensure it's not paused initially + if (opfsSahPool.isPaused()) { + throw new Error('VFS should not be paused initially'); + } + + db.close(); // Must close DB before pausing if it's the only one using it, + // or at least ensures no open file handles. + // Actually, pauseVfs throws if there are open file handles. + + opfsSahPool.pauseVfs(); + if (!opfsSahPool.isPaused()) { + throw new Error('VFS should be paused after pauseVfs()'); + } + + // Attempting to open a DB with a paused VFS should fail + try { + new opfsSahPool.OpfsSAHPoolDb('/test-sahpool-worker.sqlite3'); + throw new Error('Opening DB should have failed while VFS is paused'); + } catch (e) { + // Expected error + } + + await opfsSahPool.unpauseVfs(); + if (opfsSahPool.isPaused()) { + throw new Error('VFS should not be paused after unpauseVfs()'); + } + + // Test that pauseVfs() throws if there are open file handles + db = new opfsSahPool.OpfsSAHPoolDb('/test-sahpool-worker.sqlite3'); + try { + opfsSahPool.pauseVfs(); + throw new Error('pauseVfs should have failed with open DB handles'); + } catch (e) { + if (!e.message.includes('Cannot pause VFS')) { + throw new Error( + 'pauseVfs failed with unexpected error: ' + e.message, + ); + } + } + db.close(); + + // Now it should work again + db = new opfsSahPool.OpfsSAHPoolDb('/test-sahpool-worker.sqlite3'); + const count2 = db.selectValue('SELECT count(*) FROM test'); + if (count2 !== 2) { + throw new Error('Persistence check after unpause failed'); + } self.postMessage({ type: 'success' }); } finally {