/*jslint beta, bitwise, browser, devel, nomen*/ import { assertOrThrow, csvFromListofList, dbCloseAsync, dbExecAsync, dbFileSaveAsync, dbFileLoadAsync, dbOpenAsync, dbTableImportAsync, debugInline, noop, sqlmathWebworkerInit } from "./sqlmath.mjs"; let BLOB_SAVE; let CRISPX = -0.5; let CRISPY = 0.5; let { CodeMirror } = window; let DBTABLE_DICT = new Map(); let DB_CHART; let DB_DICT = new Map(); let DB_INIT = Promise.resolve(); let DB_MAIN; let DB_QUERY; let DEBOUNCE_DICT = Object.create(null); let UI_ANIMATE_DATENOW; let UI_ANIMATE_DURATION = 250; let UI_ANIMATE_DURATION_INV = 1 / UI_ANIMATE_DURATION; let UI_ANIMATE_LIST = []; let UI_CONTEXTMENU = document.getElementById("contextmenu1"); let UI_CONTEXTMENU_BATON; let UI_CRUD = document.getElementById("crudPanel1"); let UI_EDITOR; let UI_FILE_OPEN = document.createElement("input"); let UI_FILE_SAVE = document.createElement("a"); let UI_LOADING = document.getElementById("loadingPanel1"); let UI_LOADING_COUNTER = 0; let UI_PAGE_SIZE = 256; let UI_ROW_HEIGHT = 16; let UI_VIEW_SIZE = 20; noop(debugInline); async function dbFileAttachAsync({ db, dbData }) { // this function will attach database to let dbAttached; let dbName = dbNameNext("attach{{ii}}", new Set(DB_DICT.keys())); dbAttached = await dbOpenAsync({ dbData, filename: `file:${dbName}?mode=memory&cache=shared` }); dbAttached.dbName = dbName; await dbExecAsync({ db, sql: `ATTACH DATABASE '${dbAttached.filename}' AS ${dbName}` }); DB_DICT.set(dbName, dbAttached); // normalize order DB_DICT = Array.from(DB_DICT.values()); DB_DICT = new Map([ DB_DICT.slice(0, 3), DB_DICT.slice(3).sort(function (aa, bb) { aa = aa.dbName; bb = bb.dbName; return ( aa < bb ? -1 : 1 ); }) ].flat().map(function (db) { return [ db.dbName, db ]; })); } function dbNameNext(template, bag) { // this function will get next incremental name in from given