import sqlite3InitModule from './jswasm/speedtest1-wasmfs.mjs'; const wMsg = (type,...args)=>{ postMessage({type, args}); }; wMsg('log',"speedtest1-wasmfs starting..."); /** If this environment contains OPFS, this function initializes it and returns the name of the dir on which OPFS is mounted, else it returns an empty string. */ const wasmfsDir = function f(wasmUtil,dirName="/opfs"){ if(undefined !== f._) return f._; if( !globalThis.FileSystemHandle || !globalThis.FileSystemDirectoryHandle || !globalThis.FileSystemFileHandle){ return f._ = ""; } try{ if(0===wasmUtil.xCallWrapped( 'sqlite3__wasm_init_wasmfs', 'i32', ['string'], dirName )){ return f._ = dirName; }else{ return f._ = ""; } }catch(e){ // sqlite3_wasm_init_wasmfs() is not available return f._ = ""; } }; wasmfsDir._ = undefined; const log = (...args)=>wMsg('log',...args); const logErr = (...args)=>wMsg('logErr',...args); const runTests = function(sqlite3){ console.log("Module inited.",sqlite3); const wasm = sqlite3.wasm; const __unlink = wasm.xWrap("sqlite3__wasm_vfs_unlink", "int", ["*","string"]); const unlink = (fn)=>__unlink(0,fn); const pDir = wasmfsDir(wasm); if(pDir) log("Persistent storage:",pDir); else{ logErr("Expecting persistent storage in this build."); return; } const scope = wasm.scopedAllocPush(); const dbFile = pDir+"/speedtest1.db"; const urlParams = new URL(globalThis.location.href).searchParams; const argv = ["speedtest1"]; if(urlParams.has('flags')){ argv.push(...(urlParams.get('flags').split(','))); let i = argv.indexOf('--vfs'); if(i>=0) argv.splice(i,2); }else{ argv.push( "--singlethread", "--nomutex", //"--nosync", "--nomemstat", "--size", "10" ); } if(argv.indexOf('--memdb')>=0){ logErr("WARNING: --memdb flag trumps db filename."); } argv.push("--big-transactions"/*important for tests 410 and 510!*/, dbFile); //log("argv =",argv); // These log messages are not emitted to the UI until after main() returns. Fixing that // requires moving the main() call and related cleanup into a timeout handler. if(pDir) unlink(dbFile); log("Starting native app:\n ",argv.join(' ')); log("This will take a while and the browser might warn about the runaway JS.", "Give it time..."); setTimeout(function(){ if(pDir) unlink(dbFile); wasm.xCall('wasm_main', argv.length, wasm.scopedAllocMainArgv(argv)); wasm.scopedAllocPop(scope); if(pDir) unlink(dbFile); log("Done running native main()"); }, 25); }/*runTests()*/; sqlite3InitModule({ print: log, printErr: logErr }).then(runTests);