dyomedea/src/db/change-handler.ts

47 lines
1.2 KiB
TypeScript
Raw Normal View History

2022-12-06 13:36:50 +00:00
import { getWpt } from '../db/wpt';
import { returnAgain } from '../workers/dispatcher-worker';
2022-12-05 17:49:36 +00:00
2022-12-06 13:36:50 +00:00
declare global {
var watches: Map<string, any>;
2022-12-05 17:49:36 +00:00
}
2022-12-06 13:36:50 +00:00
const methods = {
getWpt,
};
const changeHandler = async (change: any) => {
console.log({ caller: 'ChangeHandler', change });
2022-12-06 20:27:25 +00:00
const { id } = change;
2022-12-06 13:36:50 +00:00
if (!globalThis.watches) {
globalThis.watches = new Map();
}
const params = globalThis.watches.get(id);
if (params) {
const { method, _dispatchId, id, ...otherParams } = params;
const returnValue = await methods[<keyof typeof methods>method](params);
2022-12-06 20:27:25 +00:00
if (returnValue) {
2022-12-06 13:36:50 +00:00
returnAgain(_dispatchId, returnValue);
}
}
};
export default changeHandler;
export const getAndWatch = async (params: any) => {
const { method, _dispatchId, id, ...otherParams } = params;
if (!globalThis.watches) {
globalThis.watches = new Map();
}
globalThis.watches.set(id, params);
const returnValue = await methods[<keyof typeof methods>method](params);
return returnValue;
};
export const cancelWatch = (params: any) => {
if (!globalThis.watches) {
globalThis.watches = new Map();
}
const { id } = params;
globalThis.watches.delete(id);
};