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