UNPKG

@valuer/main

Version:

Valuer is an advanced declarative value validator

89 lines (88 loc) 3.49 kB
"use strict"; var __spreadArrays = (this && this.__spreadArrays) || function () { for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j]; return r; }; Object.defineProperty(exports, "__esModule", { value: true }); var is_1 = require("@valuer/is"); var help_1 = require("@valuer/help"); var configs_1 = require("./configs"); // *** /** @private */ var ERROR_MESSAGE_PARTS_HEAD_LENGTH = 2; /** @private */ var SEPARATOR_NAME_TO_SEPARATOR_MAP = { head: ": ", tail: ", ", }; /** @private */ var DETAILS_MODIFICATION_TO_DETALIZATION_LEVEL_MAP = { "all": 0, "none": 1, "message": 2, "value": 3, "validator": 4, "validation": 5, }; /** @private */ var ERROR_KIND_MAP = { "Invalid validator": true, "Invalid config": true, "Invalid descriptor": true, "Unknown validation": true, "Validation failed": true, "Unexpected error": true, }; // *** /** @private */ var reduceDetails = function (kind, text) { var info = []; for (var _i = 2; _i < arguments.length; _i++) { info[_i - 2] = arguments[_i]; } if (!(kind in ERROR_KIND_MAP)) return exports.Errors.panic("Unexpected error", "invalid error kind", help_1.help.getPrintable(kind)); else if (kind === "Validation failed") { var detalization = DETAILS_MODIFICATION_TO_DETALIZATION_LEVEL_MAP[configs_1.Configs.current.details]; if (detalization == null) return configs_1.Configs.validateModifier("details", configs_1.Configs.current.details); if (detalization < ERROR_MESSAGE_PARTS_HEAD_LENGTH) text = null; if (detalization >= ERROR_MESSAGE_PARTS_HEAD_LENGTH - 1) info.length = Math.max(0, detalization - ERROR_MESSAGE_PARTS_HEAD_LENGTH); } return __spreadArrays([kind, text], info); }; // *** /** @internal */ exports.Errors = { composeMessage: function (kind, text) { var info = []; for (var _i = 2; _i < arguments.length; _i++) { info[_i - 2] = arguments[_i]; } var _a = reduceDetails.apply(void 0, __spreadArrays([kind, text], info)), _kind = _a[0], _b = _a[1], _text = _b === void 0 ? null : _b, _info = _a.slice(2); var separators = SEPARATOR_NAME_TO_SEPARATOR_MAP; var head = [_kind, _text].filter(is_1.is._nonVoid).join(separators.head); var tail = _info.filter(is_1.is._nonVoid).join(separators.tail); var glue = tail && separators.head; return head + glue + tail; }, panic: function (kind, text) { var info = []; for (var _i = 2; _i < arguments.length; _i++) { info[_i - 2] = arguments[_i]; } var message = exports.Errors.composeMessage.apply(exports.Errors, __spreadArrays([kind, text], info)); if (kind === "Validation failed") configs_1.Configs.clearCurrent(); throw new Error(message); }, unknown: { validation: function (validation, index) { return exports.Errors.panic("Unknown validation", "(index " + index + ") " + help_1.help.getPrintable(validation)); }, modifier: function (modifier) { return exports.Errors.panic("Invalid config", "modifier \"" + modifier + "\" is unknown"); }, }, };