UNPKG

@c11/engine.db

Version:

The engine db

125 lines 9.04 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var getValue_1 = __importDefault(require("./getValue")); var setValue_1 = __importDefault(require("./setValue")); var decomposePath_1 = __importDefault(require("./decomposePath")); var setCache_1 = __importDefault(require("./setCache")); var err_1 = __importDefault(require("./err")); var isWildcardPath_1 = require("./isWildcardPath"); var getWildcardValue_1 = require("./getWildcardValue"); var getNode = function (db, path, patch) { if (patch === void 0) { patch = []; } var result; // @TODO: If there is a schema and the dynamic node // then return an empty value for that type: // object -> {} // array -> [] // string, number -> null // // @TODO: Add a flag that enables or disables cache as needed // // @TODO: Add a flag that clones or gives a reference to the cache // as needed if (db.cache.paths.hasOwnProperty(path)) { return db.cache.paths[path]; } var defaultValue = null; var decomposed = (0, decomposePath_1.default)(path); var decomposedBkp = decomposed.slice(); //@ts-ignore decomposed.unshift(path); var dynamicParent; var dynamicChildren; var isDynamic = false; do { dynamicParent = decomposed.shift(); if (db.dynamic.fns[dynamicParent]) { isDynamic = true; dynamicChildren = path.substr(dynamicParent.length); } } while (decomposed.length != 0 && isDynamic === false); var dynamicChildrenBkp = dynamicChildren; if (isDynamic) { var nodes = db.dynamic.deps[dynamicParent]; var args = nodes.map(function (x) { return getNode(db, x, patch); }); // @TODO: decide how to handle case that uses only // existing values vs nodes that handle non existing // values try { result = db.dynamic.fns[dynamicParent].apply(null, args); if (result === undefined) { result = defaultValue; // @TODO: log this as an error, an edge case // that the developer didn't forsee when writing // his function } } catch (e) { if (e instanceof Error) { result = defaultValue; e.message += "\n path: ".concat(path); e.message += "\n node: ".concat(dynamicParent); (0, err_1.default)(db, "/err/types/node/5", { error: e.message, errObj: e, }); } } if (dynamicChildren) { dynamicChildren = dynamicChildren.split("/"); dynamicChildren.shift(); do { var child = dynamicChildren.shift(); if (result) { result = result[child]; } else { result = void 0; break; } } while (dynamicChildren.length !== 0); } } else { var val = void 0; if ((0, isWildcardPath_1.isWildcardPath)(path)) { val = (0, getWildcardValue_1.getWildcardValue)(db.static, path, patch); } else { val = (0, getValue_1.default)(db.static, path); } if (val === undefined && db.dynamic.nesting[path]) { val = {}; } // If root was found if (val !== undefined) { if (val !== null && val.toString && val.toString() === "[object Object]") { var nodes = db.dynamic.nesting[path]; if (nodes) { val = nodes.reduce(function (acc, x) { var node = getNode(db, x, patch); var root = x; if (path !== "/") { root = root.replace(path, ""); } (0, setValue_1.default)(acc, root, node); return acc; }, val); } } else { // val remains the same and does't need cloning } } result = val; } (0, setCache_1.default)(db, path, result, isDynamic ? dynamicParent : false); return result; }; exports.default = getNode; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0Tm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mbi9nZXROb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0Esd0RBQWtDO0FBQ2xDLHdEQUFrQztBQUNsQyxrRUFBNEM7QUFDNUMsd0RBQWtDO0FBQ2xDLDhDQUF3QjtBQUN4QixtREFBa0Q7QUFDbEQsdURBQXNEO0FBRXRELElBQU0sT0FBTyxHQUFHLFVBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFVO0lBQVYsc0JBQUEsRUFBQSxVQUFVO0lBQ25DLElBQUksTUFBTSxDQUFDO0lBQ1gsbURBQW1EO0lBQ25ELDRDQUE0QztJQUM1QyxlQUFlO0lBQ2YsY0FBYztJQUNkLHlCQUF5QjtJQUN6QixFQUFFO0lBRUYsNkRBQTZEO0lBQzdELEVBQUU7SUFDRixrRUFBa0U7SUFDbEUsWUFBWTtJQUVaLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3ZDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDN0I7SUFFRCxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUM7SUFFeEIsSUFBSSxVQUFVLEdBQUcsSUFBQSx1QkFBYSxFQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JDLElBQUksYUFBYSxHQUFHLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN2QyxZQUFZO0lBQ1osVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUV6QixJQUFJLGFBQWEsQ0FBQztJQUNsQixJQUFJLGVBQWUsQ0FBQztJQUNwQixJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDdEIsR0FBRztRQUNELGFBQWEsR0FBRyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFbkMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRTtZ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