@valuer/main
Version:
Valuer is an advanced declarative value validator
103 lines (102 loc) • 4.29 kB
JavaScript
;
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));
},
};