130 lines
5.4 KiB
JavaScript
130 lines
5.4 KiB
JavaScript
//@ts-check
|
|
// STILL DANGER DANGER DANGER - Simple and Stupid - Using from a discardable VM better.
|
|
// Helpers to handle db related tool/function calling using web worker
|
|
// by Humans for All
|
|
//
|
|
|
|
import * as mIdb from './idb.mjs'
|
|
|
|
|
|
/**
|
|
* Expects to get a message with cid, tcid, (f)name and args
|
|
* Posts message with cid, tcid, (f)name and data if any
|
|
*/
|
|
|
|
|
|
self.onmessage = async function (ev) {
|
|
try {
|
|
console.info(`DBUG:WWDb:${ev.data.name}:OnMessage started...`)
|
|
/** @type {IDBDatabase} */
|
|
let db = await mIdb.db_open("TCDB", "theDB", "WWDb");
|
|
let dbOS = mIdb.db_trans_store(db, "theDB", 'readwrite');
|
|
let args = ev.data.args;
|
|
switch (ev.data.name) {
|
|
|
|
case 'data_store_list':
|
|
let reqList = dbOS.getAllKeys()
|
|
reqList.onsuccess = (evList) => {
|
|
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': reqList.result, 'msg': `DataStoreList:Ok:NumOfKeys:${reqList.result.length}`}
|
|
});
|
|
}
|
|
reqList.onerror = (evList) => {
|
|
console.info(`ERRR:WWDb:${ev.data.name}:transact failed:${reqList.error}`)
|
|
self.postMessage({
|
|
cid: ev.data.cid,
|
|
tcid: ev.data.tcid,
|
|
name: ev.data.name,
|
|
data: { 'status': 'error', 'msg': `DataStoreList:Err:${reqList.error}`}
|
|
});
|
|
}
|
|
break;
|
|
|
|
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:Key:${args['key']}:DataLen:${reqGet.result.length}`}
|
|
});
|
|
}
|
|
reqGet.onerror = (evGet) => {
|
|
console.info(`ERRR:WWDb:${ev.data.name}:transact failed:${reqGet.error}`)
|
|
self.postMessage({
|
|
cid: ev.data.cid,
|
|
tcid: ev.data.tcid,
|
|
name: ev.data.name,
|
|
data: { 'status': 'error', 'msg': `DataStoreGet:Err:Key:${args['key']}:${reqGet.error}`}
|
|
});
|
|
}
|
|
break;
|
|
|
|
case 'data_store_set':
|
|
let reqSet = dbOS.put(args['value'], args['key']);
|
|
reqSet.onerror = (evSet) => {
|
|
console.info(`ERRR:WWDb:${ev.data.name}:transact failed:${reqSet.error}`)
|
|
self.postMessage({
|
|
cid: ev.data.cid,
|
|
tcid: ev.data.tcid,
|
|
name: ev.data.name,
|
|
data: { 'status': 'error', 'msg': `DataStoreSet:Err:Key:${args['key']}:${reqSet.error}`}
|
|
});
|
|
}
|
|
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:Key:${args['key']}:SetKey:${reqSet.result}`}
|
|
});
|
|
}
|
|
break;
|
|
|
|
case 'data_store_delete':
|
|
let reqDel = dbOS.delete(args['key'])
|
|
reqDel.onsuccess = (evDel) => {
|
|
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': `DataStoreDelete:Ok:Key:${args['key']}:${reqDel.result}`}
|
|
});
|
|
}
|
|
reqDel.onerror = (evDel) => {
|
|
console.info(`ERRR:WWDb:${ev.data.name}:transact failed:${reqDel.error}`)
|
|
self.postMessage({
|
|
cid: ev.data.cid,
|
|
tcid: ev.data.tcid,
|
|
name: ev.data.name,
|
|
data: { 'status': 'error', 'msg': `DataStoreDelete:Err:Key:${args['key']}:${reqDel.error}`}
|
|
});
|
|
}
|
|
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 = `\nTool/Function call "${ev.data.name}" raised an exception:${error.name}:${error.message}\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}`)
|
|
}
|
|
}
|