UNPKG

@c11/engine.db

Version:

The engine db

130 lines 10.1 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var isFunction_1 = __importDefault(require("lodash/isFunction")); var triggerListener_1 = require("../fn/triggerListener"); var updateTriggers_1 = __importDefault(require("../fn/updateTriggers")); var err_1 = __importDefault(require("../fn/err")); var isWildcardPath_1 = require("../fn/isWildcardPath"); var engine_types_1 = require("@c11/engine.types"); var triggerWildcardFn_1 = require("../fn/triggerWildcardFn"); var pathTriggers_1 = __importDefault(require("../fn/pathTriggers")); var listenerId = 0; /** * on * * Adds a listener * * - when a listener is first added a check is made * on the path and if it exists then the listener * is executed (async!) */ var on = function (db) { return function (path, fn, refinee) { var _a; if (refinee === void 0) { refinee = { type: engine_types_1.AccessMethods.value, args: [] }; } var obj = { path: path, fn: fn, }; if (!(0, isFunction_1.default)(fn)) { (0, err_1.default)(db, "/err/types/on/1", obj); return; } /* if (fn.length !== 1) { err(db, '/err/types/on/1', obj) return } */ listenerId += 1; if (!db.updates.fns[path]) { db.updates.fns[path] = {}; db.updates.fns[path][listenerId] = { fn: fn, refinee: refinee, }; db.updates.cache[path] = {}; (0, updateTriggers_1.default)(db, path); } else { db.updates.fns[path][listenerId] = { fn: fn, refinee: refinee, }; } if (!db.updates.refinees[path]) { db.updates.refinees[path] = (_a = {}, _a[engine_types_1.AccessMethods.value] = [], _a[engine_types_1.AccessMethods.includes] = [], _a[engine_types_1.AccessMethods.length] = [], _a[engine_types_1.AccessMethods.isObserved] = [], _a); } db.updates.refinees[path][refinee.type].push(listenerId); if ((0, isWildcardPath_1.isWildcardPath)(path)) { (0, triggerWildcardFn_1.triggerWildcardFn)(db, path, listenerId); } else { (0, triggerListener_1.triggerListenerFn)(db, path, listenerId); } var triggerIsObserved = function () { var impactedPaths = (0, pathTriggers_1.default)(db, path); impactedPaths.forEach(function (impactedPath) { if (!db.updates.refinees[impactedPath] || !db.updates.refinees[impactedPath][engine_types_1.AccessMethods.isObserved]) { return; } var idx = db.updates.refinees[impactedPath][engine_types_1.AccessMethods.isObserved].length; while (idx--) { var id_1 = db.updates.refinees[impactedPath][engine_types_1.AccessMethods.isObserved][idx]; (0, triggerListener_1.triggerListenerFn)(db, impactedPath, id_1, (0, isWildcardPath_1.isWildcardPath)(impactedPath) ? [{ op: "test", path: path }] : []); } }); }; // special case of isObserved if (refinee.type !== engine_types_1.AccessMethods.isObserved) { triggerIsObserved(); } var id = listenerId; return function unsubscribe() { if (db.updates.fns[path]) { delete db.updates.fns[path][id]; } // Remove everything related to this path as no // more listeners exist if (Object.keys(db.updates.fns[path]).length === 0) { db.updates.fns[path] = null; delete db.updates.fns[path]; db.updates.cache[path] = null; delete db.updates.cache[path]; var triggers = db.updates.triggers; var key = void 0; var keys = Object.keys(triggers); var l = keys.length; var i = void 0; var arr = void 0; while (l--) { key = keys[l]; arr = triggers[key]; i = arr.indexOf(path); if (i !== -1) { arr.splice(i, 1); } if (arr.length === 0) { triggers[key] = null; delete triggers[key]; } } } // special case of isObserved if (refinee.type !== engine_types_1.AccessMethods.isObserved) { triggerIsObserved(); } }; }; }; exports.default = on; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL29uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsaUVBQTJDO0FBRTNDLHlEQUEyRTtBQUUzRSx3RUFBa0Q7QUFFbEQsa0RBQTRCO0FBQzVCLHVEQUFzRDtBQUN0RCxrREFBa0Q7QUFDbEQsNkRBQTREO0FBQzVELG9FQUE4QztBQUU5QyxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFFbkI7Ozs7Ozs7O0dBUUc7QUFDSCxJQUFNLEVBQUUsR0FDTixVQUFDLEVBQUU7SUFDSCxPQUFBLFVBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxPQUFpRDs7UUFBakQsd0JBQUEsRUFBQSxZQUFZLElBQUksRUFBRSw0QkFBYSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFO1FBQzFELElBQUksR0FBRyxHQUFHO1lBQ1IsSUFBSSxFQUFFLElBQUk7WUFDVixFQUFFLEVBQUUsRUFBRTtTQUNQLENBQUM7UUFFRixJQUFJLENBQUMsSUFBQSxvQkFBVSxFQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ25CLElBQUEsYUFBRyxFQUFDLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNoQyxPQUFPO1NBQ1I7UUFFRDs7Ozs7UUFLQTtRQUVBLFVBQVUsSUFBSSxDQUFDLENBQUM7UUFDaEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3pCLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUMxQixFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRztnQkFDakMsRUFBRSxJQUFBO2dCQUNGLE9BQU8sU0FBQTthQUNSLENBQUM7WUFDRixFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJ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