UNPKG

@schukai/monster

Version:

Monster is a simple library for creating fast, robust and lightweight websites.

93 lines (83 loc) 2.47 kB
/** * Copyright © Volker Schukai and all contributing authors, {{copyRightYear}}. All rights reserved. * Node module: @schukai/monster * * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3). * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html * * For those who do not wish to adhere to the AGPLv3, a commercial license is available. * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms. * For more information about purchasing a commercial license, please contact Volker Schukai. * * SPDX-License-Identifier: AGPL-3.0 */ import { internalSymbol } from "../constants.mjs"; import { extend } from "../data/extend.mjs"; import { Pathfinder } from "../data/pathfinder.mjs"; import { Base } from "./base.mjs"; import { validateObject } from "./validate.mjs"; import { isObject } from "./is.mjs"; export { BaseWithOptions }; /** * This is the base class with options from which some monster classes are derived. * * This class is actually only used as a base class. * * Classes that require the possibility of options can be derived directly from this class. * Derived classes almost always override the `default` getter with their own values. * * This class is deprecated since 3.15.0. Use `BaseWithDefaults` instead. * * @license AGPLv3 * @since 1.13.0 * @copyright Volker Schukai * @deprecated since 3.15.0 */ class BaseWithOptions extends Base { /** * * @param {object} options */ constructor(options) { super(); if (!isObject(options)) { options = {}; } this[internalSymbol] = extend({}, this.defaults, validateObject(options)); } /** * This getter provides the options. Derived classes overwrite * this getter with their own values. It is a good karma to always include * the values from the parent class. * * ```javascript * get defaults() { * return Object.assign({}, super.defaults, { * mykey: true * }); * } * * ``` * * @return {object} */ get defaults() { return {}; } /** * nested options can be specified by path `a.b.c` * * @param {string} path * @param {*} defaultValue * @return {*} * @since 1.10.0 */ getOption(path, defaultValue) { let value; try { value = new Pathfinder(this[internalSymbol]).getVia(path); } catch (e) {} if (value === undefined) return defaultValue; return value; } }