UNPKG

jet-validators

Version:

A list common typescript validator-functions and some useful utilities to go with them.

211 lines 8.84 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isNullishEnumValArray = exports.isNullableEnumValArray = exports.isOptionalEnumValArray = exports.isEnumValArray = exports.isNullishEnumVal = exports.isNullableEnumVal = exports.isOptionalEnumVal = exports.isEnumVal = exports.isNullishEnum = exports.isNullableEnum = exports.isOptionalEnum = exports.isEnum = exports.isNullishKeyOfArray = exports.isNullableKeyOfArray = exports.isOptionalKeyOfArray = exports.isKeyOfArray = exports.isNullishKeyOf = exports.isNullableKeyOf = exports.isOptionalKeyOf = exports.isKeyOf = exports.isNullishInRangeArray = exports.isNullableInRangeArray = exports.isOptionalInRangeArray = exports.isInRangeArray = exports.isNullishInRange = exports.isNullableInRange = exports.isOptionalInRange = exports.isInRange = exports.isNullishInArray = exports.isNullableInArray = exports.isOptionalInArray = exports.isInArray = void 0; exports._isInArray = _isInArray; const basic_1 = require("./basic"); const common_1 = require("./common"); const isInArray = (arg) => _isInArray(arg, false, false); exports.isInArray = isInArray; const isOptionalInArray = (arg) => _isInArray(arg, true, false); exports.isOptionalInArray = isOptionalInArray; const isNullableInArray = (arg) => _isInArray(arg, false, true); exports.isNullableInArray = isNullableInArray; const isNullishInArray = (arg) => _isInArray(arg, true, true); exports.isNullishInArray = isNullishInArray; function _isInArray(arr, optional, nullable) { return (arg) => { if ((0, basic_1.isUndef)(arg)) { return !!optional; } if ((0, basic_1.isNull)(arg)) { return !!nullable; } for (const item of arr) { if (arg === item) { return true; } } return false; }; } exports.isInRange = _isInRange(false, false, false); exports.isOptionalInRange = _isInRange(true, false, false); exports.isNullableInRange = _isInRange(false, true, false); exports.isNullishInRange = _isInRange(true, true, false); exports.isInRangeArray = _isInRange(false, false, true); exports.isOptionalInRangeArray = _isInRange(true, false, true); exports.isNullableInRangeArray = _isInRange(false, true, true); exports.isNullishInRangeArray = _isInRange(true, true, true); function _isInRange(optional, nullable, isArr) { return (min, max) => { const rangeFn = _initRangeFn(min, max); return (arg) => { if (arg === undefined) { return optional; } if (arg === null) { return nullable; } if (isArr) { return Array.isArray(arg) && !arg.some(item => !_isInRangeHelper(item, rangeFn)); } return _isInRangeHelper(arg, rangeFn); }; }; } function _isInRangeHelper(arg, rangeFn) { if ((0, basic_1.isString)(arg)) { if ((0, basic_1.isValidNumber)(arg)) { arg = Number(arg); } else { return false; } } if (!(0, basic_1.isNumber)(arg)) { return false; } return rangeFn(arg); } function _initRangeFn(min, max) { if (Array.isArray(min) && min.length === 1 && Array.isArray(max) && max.length === 1) { return ((arg) => arg >= min[0] && arg <= max[0]); } else if (Array.isArray(min) && min.length === 1 && Array.isArray(max) && max.length === 0) { return ((arg) => arg >= min[0]); } else if (!Array.isArray(min) && Array.isArray(max) && max.length === 0) { return ((arg) => arg > min); } else if (Array.isArray(min) && min.length === 1 && !Array.isArray(max)) { return ((arg) => arg >= min[0] && arg < max); } else if (Array.isArray(min) && min.length === 0 && Array.isArray(max) && max.length === 1) { return ((arg) => arg <= max[0]); } else if (Array.isArray(min) && min.length === 0 && !Array.isArray(max)) { return ((arg) => arg < max); } else if (!Array.isArray(min) && Array.isArray(max) && max.length === 1) { return ((arg) => arg > min && arg <= max[0]); } else if (!Array.isArray(min) && !Array.isArray(max)) { return ((arg) => arg > min && arg < max); } throw new Error('min and max must be number, [number], or []'); } const isKeyOf = (arg) => _isKeyOf(arg, false, false, false); exports.isKeyOf = isKeyOf; const isOptionalKeyOf = (arg) => _isKeyOf(arg, true, false, false); exports.isOptionalKeyOf = isOptionalKeyOf; const isNullableKeyOf = (arg) => _isKeyOf(arg, false, true, false); exports.isNullableKeyOf = isNullableKeyOf; const isNullishKeyOf = (arg) => _isKeyOf(arg, true, true, false); exports.isNullishKeyOf = isNullishKeyOf; const isKeyOfArray = (arg) => _isKeyOf(arg, false, false, true); exports.isKeyOfArray = isKeyOfArray; const isOptionalKeyOfArray = (arg) => _isKeyOf(arg, true, false, true); exports.isOptionalKeyOfArray = isOptionalKeyOfArray; const isNullableKeyOfArray = (arg) => _isKeyOf(arg, false, true, true); exports.isNullableKeyOfArray = isNullableKeyOfArray; const isNullishKeyOfArray = (arg) => _isKeyOf(arg, true, true, true); exports.isNullishKeyOfArray = isNullishKeyOfArray; function _isKeyOf(obj, optional, nullable, isArr) { if (!(0, basic_1.isObject)(obj)) { throw new Error('Item to check from must be a Record<string, unknown>.'); } const isInKeys = (0, exports.isInArray)(Object.keys(obj)); return (arg) => { if (arg === undefined) { return optional; } if (arg === null) { return nullable; } if (isArr) { return Array.isArray(arg) && !arg.some(item => !isInKeys(item)); } return isInKeys(arg); }; } exports.isEnum = _isEnum; exports.isOptionalEnum = (0, common_1.orOptional)(_isEnum); exports.isNullableEnum = (0, common_1.orNullable)(_isEnum); exports.isNullishEnum = (0, common_1.orNullable)(exports.isOptionalEnum); function _isEnum(arg) { if (!(0, basic_1.isRecord)(arg)) { return false; } const keys = Object.keys(arg), middle = Math.floor(keys.length / 2); if (!(0, basic_1.isNumber)(arg[keys[middle]])) { const entries = Object.entries(arg); for (const entry of entries) { if (!((0, basic_1.isString)(entry[0]) && (0, basic_1.isString)(entry[1]))) { return false; } } return true; } if (keys.length % 2 !== 0) { return false; } for (let i = 0; i < middle; i++) { const thisKey = keys[i], thisVal = arg[thisKey], thatKey = keys[i + middle], thatVal = arg[thatKey]; if (!(thisVal === thatKey && thisKey === String(thatVal))) { return false; } } return true; } const isEnumVal = (arg) => _isEnumVal(arg, false, false, false); exports.isEnumVal = isEnumVal; const isOptionalEnumVal = (arg) => _isEnumVal(arg, true, false, false); exports.isOptionalEnumVal = isOptionalEnumVal; const isNullableEnumVal = (arg) => _isEnumVal(arg, false, true, false); exports.isNullableEnumVal = isNullableEnumVal; const isNullishEnumVal = (arg) => _isEnumVal(arg, true, true, false); exports.isNullishEnumVal = isNullishEnumVal; const isEnumValArray = (arg) => _isEnumVal(arg, false, false, true); exports.isEnumValArray = isEnumValArray; const isOptionalEnumValArray = (arg) => _isEnumVal(arg, true, false, true); exports.isOptionalEnumValArray = isOptionalEnumValArray; const isNullableEnumValArray = (arg) => _isEnumVal(arg, false, true, true); exports.isNullableEnumValArray = isNullableEnumValArray; const isNullishEnumValArray = (arg) => _isEnumVal(arg, true, true, true); exports.isNullishEnumValArray = isNullishEnumValArray; function _isEnumVal(enumArg, optional, nullable, isArray) { if (!(0, exports.isEnum)(enumArg)) { throw Error('Item to check from must be an enum.'); } let enumVals = Object.keys(enumArg).reduce((arr, key) => { if (!arr.includes(key)) { arr.push(enumArg[key]); } return arr; }, []); if ((0, basic_1.isNumber)(enumArg[enumVals[0]])) { enumVals = enumVals.map(item => enumArg[item]); } const test = (arg) => enumVals.some(val => arg === val); return (arg) => { if ((0, basic_1.isUndef)(arg)) { return !!optional; } if ((0, basic_1.isNull)(arg)) { return !!nullable; } if (isArray) { if (!Array.isArray(arg)) { return false; } for (const item of arg) { if (!test(item)) { return false; } } return true; } return test(arg); }; } //# sourceMappingURL=complex-validators.js.map