UNPKG

@valuer/main

Version:

Valuer is an advanced declarative value validator

103 lines (102 loc) 4.29 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; Object.defineProperty(exports, "__esModule", { value: true }); var help_1 = require("@valuer/help"); var is_1 = require("@valuer/is"); var constants_1 = require("../constants"); var errors_1 = require("./errors"); // *** /** @private */ var _isBooleanPair = is_1.is.array(2, is_1.is._boolean); /** @private */ var NOT_A_BOOLEAN_FAILURE = "is not a boolean"; /** @private */ var NOT_A_PAIR_OF_BOOLEANS_FAILURE = "is not a pair of boolean values"; /** @private */ var MODIFIER_TO_DEFAULT_MODIFICATION_MAP = { mode: "assert", checkStrict: true, details: "value", warnOnMultipleNames: false, rangeInclusiveness: [true, true], lengthRangeInclusiveness: [true, true], }; /** @private */ var MODIFIER_STRING_TO_MODIFICATION_LIST_MAP = { mode: ["assert", "check", "describe", "switch"], details: ["none", "message", "value", "validator", "validation", "all"], }; /** @private */ var MODIFIER_TO_MODIFICATION_VALIDATOR_THUNK_MAP = __assign(__assign({}, help_1.help.convertMapFlat(MODIFIER_STRING_TO_MODIFICATION_LIST_MAP, is_1.is.inArray)), { checkStrict: is_1.is._boolean, warnOnMultipleNames: is_1.is._boolean, rangeInclusiveness: _isBooleanPair, lengthRangeInclusiveness: _isBooleanPair }); /** @private */ var MODIFIER_TO_MODIFIER_FAILURE_MAP = __assign(__assign({}, help_1.help.convertMapFlat(MODIFIER_STRING_TO_MODIFICATION_LIST_MAP, function () { return constants_1.UNKNOWN_STRING_FAILURE; })), { checkStrict: NOT_A_BOOLEAN_FAILURE, warnOnMultipleNames: NOT_A_BOOLEAN_FAILURE, rangeInclusiveness: NOT_A_PAIR_OF_BOOLEANS_FAILURE, lengthRangeInclusiveness: NOT_A_PAIR_OF_BOOLEANS_FAILURE }); /** @private */ var CONFIG_HISTORY = [MODIFIER_TO_DEFAULT_MODIFICATION_MAP]; // *** /** @private */ var isModifier = function (modifier) { return modifier in MODIFIER_TO_DEFAULT_MODIFICATION_MAP; }; /** @private */ var isModifierString = function (modifier) { return modifier in MODIFIER_STRING_TO_MODIFICATION_LIST_MAP; }; // *** /** @internal */ exports.Configs = { get current() { return CONFIG_HISTORY[CONFIG_HISTORY.length - 1]; }, // *** validateModifier: function (modifier, modification) { var thunk = MODIFIER_TO_MODIFICATION_VALIDATOR_THUNK_MAP[modifier]; var invalid = function () { return errors_1.Errors.panic("Invalid config", "\"" + modifier + "\" " + MODIFIER_TO_MODIFIER_FAILURE_MAP[modifier], "modification " + help_1.help.getPrintable(modification)); }; if (isModifierString(modifier)) { if (!is_1.is.inArray(MODIFIER_STRING_TO_MODIFICATION_LIST_MAP[modifier])(modification)) return invalid(); } else if (!thunk(modification)) return invalid(); }, validate: function (config) { var _config = Object(config); for (var modifier in _config) if (isModifier(modifier)) exports.Configs.validateModifier(modifier, _config[modifier]); else return errors_1.Errors.unknown.modifier(modifier); return _config; }, create: function (config) { return __assign(__assign({}, MODIFIER_TO_DEFAULT_MODIFICATION_MAP), exports.Configs.validate(config)); }, clearCurrent: function () { if (CONFIG_HISTORY.length > 1) CONFIG_HISTORY.pop(); }, setupCurrent: function (config) { exports.Configs.clearCurrent(); CONFIG_HISTORY.push(exports.Configs.create(config)); return exports.Configs.current; }, /** * @example * const mode = "check"; * const checkStrict = false; * * valuer.config({ mode, checkStrict }); */ changeDefault: function (config) { return Object.assign(MODIFIER_TO_DEFAULT_MODIFICATION_MAP, exports.Configs.validate(config)); }, };