UNPKG

@c11/engine.db

Version:

The engine db

131 lines 9.91 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var isCyclic_1 = __importDefault(require("../fn/isCyclic")); var decomposePath_1 = __importDefault(require("../fn/decomposePath")); var err_1 = __importDefault(require("../fn/err")); var isValidPath_1 = __importDefault(require("../fn/isValidPath")); var clearNode_1 = __importDefault(require("../fn/clearNode")); var triggerListener_1 = __importDefault(require("../fn/triggerListener")); var pathTriggers_1 = __importDefault(require("../fn/pathTriggers")); var expandNodeDeps_1 = __importDefault(require("../fn/expandNodeDeps")); var invalidateCache_1 = __importDefault(require("../fn/invalidateCache")); var updateTriggers_1 = __importDefault(require("../fn/updateTriggers")); // !Importat. // When adding a new node previous listeners should be refreshed // in order to be triggered by updates on the node's // dependencies /** * node * * Adds a dynamic node */ var node = function (db) { return function (path, deps, fn) { var node = { path: path, deps: deps, fn: fn, }; if (fn instanceof Function === false) { (0, err_1.default)(db, "/err/types/node/2", node); return; } if (deps instanceof Array === false) { (0, err_1.default)(db, "/err/types/node/2", node); return; } // @TODO: Add this to warnings /* if (deps.length !== fn.length) { err(db, '/err/types/node/4', node) return } */ var paths = deps.concat(path); var validPaths = paths.filter(isValidPath_1.default); if (validPaths.length !== paths.length) { (0, err_1.default)(db, "/err/types/node/2", node); return; } db.dynamic.deps[path] = deps; if ((0, isCyclic_1.default)(db.dynamic.deps)) { delete db.dynamic.deps[path]; (0, err_1.default)(db, "/err/types/node/3", node); return; } db.dynamic.fns[path] = fn; // @TODO: When adding in dynamic nesting always reorder // based on the nesting depth - deepest last so that // when iterating for computation the deepest nodes // should be already computed when reaching the top // ones. // // @TODO: Add the root to the nesting so that: // db.get('/') also gets all the dynamic nodes in var xs = (0, decomposePath_1.default)(path); //@ts-ignore xs.push("/"); xs.map(function (x) { if (!db.dynamic.nesting[x]) { db.dynamic.nesting[x] = []; } if (db.dynamic.nesting[x].indexOf(path) === -1) { db.dynamic.nesting[x].push(path); } }); // @TODO: Based on this nesting create a new array that // contains also the dependencies of the nested nodes // thus generating the entire list of nodes. // Also order them depth last // nestingShallow // nestingDeep node.deps.forEach(function (x) { if (!db.dynamic.reverseDeps[x]) { db.dynamic.reverseDeps[x] = [node.path]; } else { db.dynamic.reverseDeps[x].push(node.path); } var dep = (0, decomposePath_1.default)(x); dep.forEach(function (y) { if (!db.dynamic.inverseDeps[y]) { db.dynamic.inverseDeps[y] = [node.path]; } else { db.dynamic.inverseDeps[y].push(node.path); } }); }); (0, expandNodeDeps_1.default)(db.dynamic); db.cache.dynamic[node.path] = []; // Search for any cached values on the node.path // as a result of requesting the path before the // node was created var reg = new RegExp("^" + node.path); Object.keys(db.cache.paths).forEach(function (x) { if (x.search(reg) !== -1) { delete db.cache.paths[x]; } }); (0, invalidateCache_1.default)(db, { full: [node.path] }); Object.keys(db.updates.fns).forEach(function (x) { (0, updateTriggers_1.default)(db, x); }); (0, pathTriggers_1.default)(db, path).map(function (x) { (0, triggerListener_1.default)(db, x); }); return function removeNode() { var triggers = (0, pathTriggers_1.default)(db, path); delete db.dynamic.fns[path]; (0, invalidateCache_1.default)(db, { full: [node.path] }); delete db.cache.dynamic[path]; (0, clearNode_1.default)(db.dynamic.nesting, path); triggers.map(function (x) { (0, triggerListener_1.default)(db, x); }); }; }; }; exports.default = node; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDREQUFzQztBQUN0QyxzRUFBZ0Q7QUFDaEQsa0RBQTRCO0FBQzVCLGtFQUE0QztBQUM1Qyw4REFBd0M7QUFDeEMsMEVBQW9EO0FBQ3BELG9FQUE4QztBQUM5Qyx3RUFBa0Q7QUFDbEQsMEVBQW9EO0FBQ3BELHdFQUFrRDtBQUVsRCxhQUFhO0FBQ2IsZ0VBQWdFO0FBQ2hFLG9EQUFvRDtBQUNwRCxlQUFlO0FBRWY7Ozs7R0FJRztBQUNILElBQU0sSUFBSSxHQUFHLFVBQUMsRUFBRSxJQUFLLE9BQUEsVUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7SUFDbEMsSUFBSSxJQUFJLEdBQUc7UUFDVCxJQUFJLEVBQUUsSUFBSTtRQUNWLElBQUksRUFBRSxJQUFJO1FBQ1YsRUFBRSxFQUFFLEVBQUU7S0FDUCxDQUFDO0lBRUYsSUFBSSxFQUFFLFlBQVksUUFBUSxLQUFLLEtBQUssRUFBRTtRQUNwQyxJQUFBLGFBQUcsRUFBQyxFQUFFLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkMsT0FBTztLQUNSO0lBRUQsSUFBSSxJQUFJLFlBQVksS0FBSyxLQUFLLEtBQUssRUFBRTtRQUNuQyxJQUFBLGFBQUcsRUFBQyxFQUFFLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkMsT0FBTztLQUNSO0lBRUQsOEJBQThCO0lBQzlCOzs7OztNQUtFO0lBRUYsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLHFCQUFXLENBQUMsQ0FBQztJQUUzQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLE1BQU0sRUFBRTtRQUN0QyxJQUFBLGFBQUcsRUFBQyxF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