UNPKG

attrpath

Version:
173 lines 4.13 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.Updater = exports.ValueHandler = exports.BaseHandler = void 0; const base_1 = require("./base"); const parser_1 = require("./parser"); /** * BaseHandler * * @remarks * */ class BaseHandler { } exports.BaseHandler = BaseHandler; /** * ValueHandler * * actually traverse the object. * * @remarks * */ class ValueHandler extends BaseHandler { /** * * @remarks */ constructor(root_value) { super(); this.current_value = null; this.current_value = root_value; } /** * value * * Data */ get value() { return this.current_value; } /** * Symbol Handler * * @remarks * Executed when Parser recognizes Token. * * @param type - Symbol Type * @param word * @param term * @returns void * */ token(type, word, term) { switch (type) { case parser_1.TokenType.operator: // console.log("operator " + word); break; case parser_1.TokenType.number: // console.log("number " + word); break; case parser_1.TokenType.index: this.current_value = ValueHandler.sibling(this.current_value, word); break; case parser_1.TokenType.name: this.current_value = ValueHandler.child(this.current_value, word); break; } } /** * Sibling * * @remarks * Extract array elements from index * * @param array - Array * @param index - Index * @returns Array member * */ static sibling(array, index) { let result = undefined; if (Array.isArray(array)) { result = array[Number(index)]; } return result; } /** * child * * @remarks * Returns an object member. * * @param obj - Object * @param attr - Attribute Name * @returns Object member * */ static child(obj, attr) { let result = undefined; if ((0, base_1.isContainer)(obj)) { if (attr in obj) { result = obj[attr]; } } return result; } } exports.ValueHandler = ValueHandler; /** * Updater * * It actually traverses and updates objects. * * @remarks * */ class Updater extends ValueHandler { /** * * @remarks */ constructor(root_value, new_value) { super(root_value); this.new_value = new_value; } /** * Symbol Handler * * @remarks * Executed when Parser recognizes Token. * * @param type - Symbol Type * @param word * @param term * @returns void * */ token(type, word, term) { if (this.current_value) { switch (type) { case parser_1.TokenType.index: { if (term) { if (this.current_value.length > word) { this.current_value[word] = this.new_value; } } else { this.current_value = Updater.sibling(this.current_value, word); } } break; case parser_1.TokenType.name: { if (term) { this.current_value[word] = this.new_value; } else { this.current_value = Updater.child(this.current_value, word); } } break; } } } } exports.Updater = Updater; //# sourceMappingURL=handler.js.map