UNPKG

resolve-local-event-broker

Version:

The reSolve framework's event broker for applications on a local machine.

113 lines (94 loc) 2.78 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _constants = require("../constants"); const interopProperty = async (pool, method, payload) => { const { database: { runQuery, runRawQuery, escapeId, escapeStr, encodeJsonPath, decodeJsonPath }, parseSubscription } = pool; const subscribersTableNameAsId = escapeId(_constants.SUBSCRIBERS_TABLE_NAME); const { eventSubscriber, key, value } = payload; switch (method) { case 'listProperties': { const result = await runQuery(` SELECT "properties" FROM ${subscribersTableNameAsId} WHERE "eventSubscriber" = ${escapeStr(eventSubscriber)} `); if (result == null || result.length !== 1) { throw new Error('Invalid subscriber'); } let { properties } = parseSubscription(result[0]); if (properties == null) { properties = {}; } properties = Object.keys(properties).reduce((acc, key) => { acc[decodeJsonPath(key)] = properties[key]; return acc; }, {}); return properties; } case 'getProperty': { const result = await runQuery(` SELECT "properties" FROM ${subscribersTableNameAsId} WHERE "eventSubscriber" = ${escapeStr(eventSubscriber)} `); if (result == null || result.length !== 1) { throw new Error('Invalid subscriber'); } let { properties } = parseSubscription(result[0]); if (properties == null) { properties = {}; } return properties[encodeJsonPath(key)]; } case 'setProperty': { await runRawQuery(` UPDATE ${subscribersTableNameAsId} SET "properties" = json_set(COALESCE("properties", json('{}')), ${escapeStr(`$."${encodeJsonPath(key)}"`)}, json(${escapeStr(JSON.stringify(value))})) WHERE "eventSubscriber" = ${escapeStr(eventSubscriber)}; COMMIT; BEGIN IMMEDIATE; `); return null; } case 'deleteProperty': { await runRawQuery(` UPDATE ${subscribersTableNameAsId} SET "properties" = json_remove(COALESCE("properties", json('{}')), ${escapeStr(`$."${encodeJsonPath(key)}"`)}) WHERE "eventSubscriber" = ${escapeStr(eventSubscriber)}; COMMIT; BEGIN IMMEDIATE; `); return null; } default: { throw new Error(`Wrong interop property ${method} with payload ${JSON.stringify(payload)}`); } } }; var _default = interopProperty; exports.default = _default; //# sourceMappingURL=interop-property.js.map