attrpath
Version:
Attribute Path Traverser.
85 lines • 3.09 kB
JavaScript
/**
* Copyright © 2020 2021 2022 7thCode.(http://seventh-code.com/)
* This software is released under the MIT License.
* opensource.org/licenses/mit-license.php
*/
;
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