UNPKG

attrpath

Version:
85 lines 3.09 kB
/** * Copyright © 2020 2021 2022 7thCode.(http://seventh-code.com/) * This software is released under the MIT License. * opensource.org/licenses/mit-license.php */ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AttrPath = exports.ValueHandler = exports.BaseHandler = exports.ParserStream = exports.FormulaParser = exports.AttributeParser = void 0; const parser_1 = require("./parser"); Object.defineProperty(exports, "AttributeParser", { enumerable: true, get: function () { return parser_1.AttributeParser; } }); Object.defineProperty(exports, "FormulaParser", { enumerable: true, get: function () { return parser_1.FormulaParser; } }); const stream_1 = require("./stream"); Object.defineProperty(exports, "ParserStream", { enumerable: true, get: function () { return stream_1.ParserStream; } }); const handler_1 = require("./handler"); Object.defineProperty(exports, "BaseHandler", { enumerable: true, get: function () { return handler_1.BaseHandler; } }); Object.defineProperty(exports, "ValueHandler", { enumerable: true, get: function () { return handler_1.ValueHandler; } }); /** * AttrPath */ class AttrPath { /** * traverse * * @remarks * Traverse an object's attributes to get its value. * * @param target - Object * @param path - ObjectPath e.g. ".x.Y.z[1]" * @param default_value - The value to return if there is no corresponding value in the object path. default is "undefined" * @returns The value at the position of the path. * */ static traverse(target, path, default_value = undefined) { let result = default_value; if (target) { const handler = new handler_1.ValueHandler(target); if (new parser_1.AttributeParser(handler, new stream_1.ParserStream(path)).parse_path()) { if (handler.value) { result = handler.value; } } if (default_value && typeof default_value === 'function') { default_value(result); return null; } } return result; } /* * update * * @remarks * * @param target - Object * @param path - ObjectPath e.g. ".x.Y.z[1]" * @param value - value to update. * @returns - update successful * * */ static update(target, path, value) { let result = false; if (target) { const updater = new handler_1.Updater(target, value); if (new parser_1.AttributeParser(updater, new stream_1.ParserStream(path)).parse_path()) { result = (updater.value); } } return result; } /** * is_valid * * @remarks * Is the path grammatically correct? * * @param path - ObjectPath e.g. ".x.Y.z[1]" * @returns true/false * */ static is_valid(path) { return new parser_1.AttributeParser(null, new stream_1.ParserStream(path)).parse_path(); } } exports.AttrPath = AttrPath; //# sourceMappingURL=index.js.map