87 lines
3.1 KiB
JavaScript
87 lines
3.1 KiB
JavaScript
//@ts-check
|
|
// STILL DANGER DANGER DANGER - Simple and Stupid - Use from a discardable VM only
|
|
// Helpers to handle db related tool/function calling using web worker
|
|
// by Humans for All
|
|
//
|
|
|
|
/**
|
|
* Expects to get a message with cid, tcid, (f)name and args
|
|
* Posts message with cid, tcid, (f)name and data if any
|
|
*/
|
|
|
|
|
|
/**
|
|
* Allows the db connection to be openned.
|
|
*/
|
|
function db_open() {
|
|
return new Promise((resolve, reject) => {
|
|
const dbConn = indexedDB.open('TCDB', 1);
|
|
dbConn.onupgradeneeded = (ev) => {
|
|
console.debug("DBUG:WWDb:Conn:Upgrade needed...")
|
|
dbConn.result.createObjectStore('theDB');
|
|
dbConn.result.onerror = (ev) => {
|
|
console.debug(`DBUG:WWDb:Db:Op failed [${ev}]...`)
|
|
}
|
|
};
|
|
dbConn.onsuccess = (ev) => {
|
|
console.debug("DBUG:WWDb:Conn:Opened...")
|
|
resolve(dbConn.result);
|
|
}
|
|
dbConn.onerror = (ev) => {
|
|
console.debug(`DBUG:WWDb:Conn:Failed [${ev}]...`)
|
|
reject(ev);
|
|
}
|
|
});
|
|
}
|
|
|
|
|
|
self.onmessage = async function (ev) {
|
|
try {
|
|
console.info(`DBUG:WWDb:${ev.data.name}:OnMessage started...`)
|
|
/** @type {IDBDatabase} */
|
|
let db = await db_open();
|
|
let dbTrans = db.transaction('theDB', 'readwrite');
|
|
let dbOS = dbTrans.objectStore('theDB');
|
|
let args = JSON.parse(ev.data.args);
|
|
switch (ev.data.name) {
|
|
case 'data_store_get':
|
|
let reqGet = dbOS.get(args['key'])
|
|
reqGet.onsuccess = (evGet) => {
|
|
console.info(`DBUG:WWDb:${ev.data.name}:transact success`)
|
|
self.postMessage({
|
|
cid: ev.data.cid,
|
|
tcid: ev.data.tcid,
|
|
name: ev.data.name,
|
|
data: { 'status': 'ok', 'data': reqGet.result, 'msg': `DataStoreGet:Ok:${args['key']}:${reqGet.result}`}
|
|
});
|
|
}
|
|
break;
|
|
case 'data_store_set':
|
|
let reqSet = dbOS.add(args['value'], args['key']);
|
|
reqSet.onsuccess = (evSet) => {
|
|
console.info(`DBUG:WWDb:${ev.data.name}:transact success`)
|
|
self.postMessage({
|
|
cid: ev.data.cid,
|
|
tcid: ev.data.tcid,
|
|
name: ev.data.name,
|
|
data: { 'status': 'ok', 'msg': `DataStoreSet:Ok:${args['key']}:${reqSet.result}`}
|
|
});
|
|
}
|
|
break;
|
|
default:
|
|
console.info(`ERRR:WWDb:${ev.data.name}:OnMessage:Unknown func call...`)
|
|
break;
|
|
}
|
|
console.info(`DBUG:WWDb:${ev.data.name}:OnMessage end`)
|
|
} catch (/** @type {any} */error) {
|
|
let errMsg = `\n\nTool/Function call "${ev.data.name}" raised an exception:${error.name}:${error.message}\n\n`;
|
|
self.postMessage({
|
|
cid: ev.data.cid,
|
|
tcid: ev.data.tcid,
|
|
name: ev.data.name,
|
|
data: {'status': 'error', 'msg': errMsg}
|
|
});
|
|
console.info(`ERRR:WWDb:${ev.data.name}:OnMessage end:${error}`)
|
|
}
|
|
}
|