aboutsummaryrefslogtreecommitdiff
path: root/ext/wasm/api
diff options
context:
space:
mode:
authorstephan <stephan@noemail.net>2022-09-30 11:01:44 +0000
committerstephan <stephan@noemail.net>2022-09-30 11:01:44 +0000
commitf6c686c9f4dc33c66e103d0af437aaf5ae2c20b6 (patch)
tree3b34e6d2ccb202bcb4f7db83893e0fc5e5885879 /ext/wasm/api
parent53d4e01d063ebee14ff06706b58faba0d07df136 (diff)
downloadsqlite-f6c686c9f4dc33c66e103d0af437aaf5ae2c20b6.tar.gz
sqlite-f6c686c9f4dc33c66e103d0af437aaf5ae2c20b6.zip
Add oo1.JsStorageDb() as a convenience wrapper for oo1.DB(...,'kvvfs'). Minor doc cleanups.
FossilOrigin-Name: 8a7998709f859a562cf6829485cb9921f8823af0efabe003741348ab1169fb89
Diffstat (limited to 'ext/wasm/api')
-rw-r--r--ext/wasm/api/pre-js.js19
-rw-r--r--ext/wasm/api/sqlite3-api-oo1.js21
-rw-r--r--ext/wasm/api/sqlite3-api-opfs.js3
3 files changed, 32 insertions, 11 deletions
diff --git a/ext/wasm/api/pre-js.js b/ext/wasm/api/pre-js.js
index f373fecec..502ecf348 100644
--- a/ext/wasm/api/pre-js.js
+++ b/ext/wasm/api/pre-js.js
@@ -12,15 +12,15 @@ const xInstantiateWasm = 1
? 'emscripten-bug-17951'
: 'instantiateWasm';
Module[xInstantiateWasm] = function callee(imports,onSuccess){
- imports.foo = function(){};
+ imports.env.foo = function(){};
console.warn("instantiateWasm() uri =",callee.uri, self.location.href);
const wfetch = ()=>fetch(callee.uri, {credentials: 'same-origin'});
const loadWasm = WebAssembly.instantiateStreaming
- ? function loadWasmStreaming(){
+ ? async ()=>{
return WebAssembly.instantiateStreaming(wfetch(), imports)
.then((arg)=>onSuccess(arg.instance, arg.module));
}
- : function loadWasmOldSchool(){ // Safari < v15
+ : async ()=>{ // Safari < v15
return wfetch()
.then(response => response.arrayBuffer())
.then(bytes => WebAssembly.instantiate(bytes, imports))
@@ -30,11 +30,12 @@ Module[xInstantiateWasm] = function callee(imports,onSuccess){
return {};
};
/*
- It is literally impossible to get the name of a Worker's own script,
- so impossible to derive X.wasm from script name X.js. Thus we need,
- at build-time, to redifine Module['instantiateWasm'].uri by
- appending it to a build-specific copy of this file with the name of
- the wasm file. This is apparently why Emscripten hard-codes the name of
- the wasm file into their glue scripts.
+ It is literally impossible to reliably get the name of _this_ script
+ at runtime, so impossible to derive X.wasm from script name
+ X.js. Thus we need, at build-time, to redefine
+ Module[xInstantiateWasm].uri by appending it to a build-specific
+ copy of this file with the name of the wasm file. This is apparently
+ why Emscripten hard-codes the name of the wasm file into their glue
+ scripts.
*/
Module[xInstantiateWasm].uri = 'sqlite3.wasm';
diff --git a/ext/wasm/api/sqlite3-api-oo1.js b/ext/wasm/api/sqlite3-api-oo1.js
index 4f7ffe1cd..1daf6eb00 100644
--- a/ext/wasm/api/sqlite3-api-oo1.js
+++ b/ext/wasm/api/sqlite3-api-oo1.js
@@ -1638,7 +1638,7 @@ self.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
Object.defineProperty(Stmt.prototype, 'pointer', prop);
Object.defineProperty(DB.prototype, 'pointer', prop);
}
-
+
/** The OO API's public namespace. */
sqlite3.oo1 = {
version: {
@@ -1650,5 +1650,24 @@ self.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
dbCtorHelper
}/*oo1 object*/;
+ if(util.isMainWindow()){
+ /**
+ Functionally equivalent to DB(storageName,'c','kvvfs') except
+ that it throws if the given storage name is not one of 'local'
+ or 'session'.
+ */
+ 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"
+ });
+ };
+ sqlite3.oo1.JsStorageDb.prototype = Object.create(DB.prototype);
+ }
+
});
diff --git a/ext/wasm/api/sqlite3-api-opfs.js b/ext/wasm/api/sqlite3-api-opfs.js
index 104a5cc1a..9588fc8a2 100644
--- a/ext/wasm/api/sqlite3-api-opfs.js
+++ b/ext/wasm/api/sqlite3-api-opfs.js
@@ -74,6 +74,7 @@ self.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
*/
const installOpfsVfs = function callee(asyncProxyUri = callee.defaultProxyUri){
if(!self.SharedArrayBuffer ||
+ !self.Atomics ||
!self.FileSystemHandle ||
!self.FileSystemDirectoryHandle ||
!self.FileSystemFileHandle ||
@@ -109,7 +110,7 @@ const installOpfsVfs = function callee(asyncProxyUri = callee.defaultProxyUri){
const log = (...args)=>logImpl(2, ...args);
const warn = (...args)=>logImpl(1, ...args);
const error = (...args)=>logImpl(0, ...args);
- warn("The OPFS VFS feature is very much experimental and under construction.");
+ //warn("The OPFS VFS feature is very much experimental and under construction.");
const toss = function(...args){throw new Error(args.join(' '))};
const capi = sqlite3.capi;
const wasm = capi.wasm;