@c11/engine.db
Version:
The engine db
131 lines • 9.91 kB
JavaScript
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDREQUFzQztBQUN0QyxzRUFBZ0Q7QUFDaEQsa0RBQTRCO0FBQzVCLGtFQUE0QztBQUM1Qyw4REFBd0M7QUFDeEMsMEVBQW9EO0FBQ3BELG9FQUE4QztBQUM5Qyx3RUFBa0Q7QUFDbEQsMEVBQW9EO0FBQ3BELHdFQUFrRDtBQUVsRCxhQUFhO0FBQ2IsZ0VBQWdFO0FBQ2hFLG9EQUFvRDtBQUNwRCxlQUFlO0FBRWY7Ozs7R0FJRztBQUNILElBQU0sSUFBSSxHQUFHLFVBQUMsRUFBRSxJQUFLLE9BQUEsVUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7SUFDbEMsSUFBSSxJQUFJLEdBQUc7UUFDVCxJQUFJLEVBQUUsSUFBSTtRQUNWLElBQUksRUFBRSxJQUFJO1FBQ1YsRUFBRSxFQUFFLEVBQUU7S0FDUCxDQUFDO0lBRUYsSUFBSSxFQUFFLFlBQVksUUFBUSxLQUFLLEtBQUssRUFBRTtRQUNwQyxJQUFBLGFBQUcsRUFBQyxFQUFFLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkMsT0FBTztLQUNSO0lBRUQsSUFBSSxJQUFJLFlBQVksS0FBSyxLQUFLLEtBQUssRUFBRTtRQUNuQyxJQUFBLGFBQUcsRUFBQyxFQUFFLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkMsT0FBTztLQUNSO0lBRUQsOEJBQThCO0lBQzlCOzs7OztNQUtFO0lBRUYsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLHFCQUFXLENBQUMsQ0FBQztJQUUzQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLE1BQU0sRUFBRTtRQUN0QyxJQUFBLGFBQUcsRUFBQyxFQUFFLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkMsT0FBTztLQUNSO0lBRUQsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBRTdCLElBQUksSUFBQSxrQkFBUSxFQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDN0IsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixJQUFBLGFBQUcsRUFBQyxFQUFFLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkMsT0FBTztLQUNSO0lBRUQsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBRTFCLHVEQUF1RDtJQUN2RCxvREFBb0Q7SUFDcEQsbURBQW1EO0lBQ25ELG1EQUFtRDtJQUNuRCxRQUFRO0lBQ1IsRUFBRTtJQUNGLDhDQUE4QztJQUM5QyxpREFBaUQ7SUFDakQsSUFBSSxFQUFFLEdBQUcsSUFBQSx1QkFBYSxFQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLFlBQVk7SUFDWixFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2IsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFDLENBQUM7UUFDUCxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDMUIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQzVCO1FBRUQsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDOUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2xDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCx1REFBdUQ7SUFDdkQscURBQXFEO0lBQ3JELDRDQUE0QztJQUM1Qyw2QkFBNkI7SUFDN0IsaUJBQWlCO0lBQ2pCLGNBQWM7SUFFZCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzlCLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3pDO2FBQU07WUFDTCxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzNDO1FBRUQsSUFBSSxHQUFHLEdBQUcsSUFBQSx1QkFBYSxFQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTNCLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBQyxDQUFDO1lBQ1osSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUM5QixFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN6QztpQkFBTTtnQkFDTCxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzNDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUEsd0JBQWMsRUFBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFM0IsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUVqQyxnREFBZ0Q7SUFDaEQsZ0RBQWdEO0lBQ2hELG1CQUFtQjtJQUNuQixJQUFJLEdBQUcsR0FBRyxJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUN4QixPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzFCO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFBLHlCQUFlLEVBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUUzQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUMsQ0FBQztRQUNwQyxJQUFBLHdCQUFjLEVBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBQSxzQkFBWSxFQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBQyxDQUFDO1FBQzNCLElBQUEseUJBQWUsRUFBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekIsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLFNBQVMsVUFBVTtRQUN4QixJQUFJLFFBQVEsR0FBRyxJQUFBLHNCQUFZLEVBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFNUIsSUFBQSx5QkFBZSxFQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDM0MsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU5QixJQUFBLG1CQUFTLEVBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFcEMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFDLENBQUM7WUFDYixJQUFBLHlCQUFlLEVBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxFQTlIb0IsQ0E4SHBCLENBQUM7QUFFRixrQkFBZSxJQUFJLENBQUMifQ==
;