@c11/engine.db
Version:
The engine db
125 lines • 9.04 kB
JavaScript
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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
;