UNPKG

jet-schema

Version:

Simple, typescript-first schema validation tool

96 lines 2.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isDate = void 0; exports.isUndef = isUndef; exports.isNum = isNum; exports.isStr = isStr; exports.isObj = isObj; exports.isNonArrObj = isNonArrObj; exports.processEnum = processEnum; exports.isEnum = isEnum; exports.checkObjEntries = checkObjEntries; exports.isBasicObj = isBasicObj; exports.defaultCloneFn = defaultCloneFn; function isUndef(param) { return param === undefined; } function isNum(param) { return typeof param === 'number'; } function isStr(param) { return typeof param === 'string'; } function isObj(val) { return !!val && typeof val === 'object'; } function isNonArrObj(arg) { return typeof arg === 'object' && !Array.isArray(arg); } function processEnum(arg) { if (!isEnum(arg)) { throw Error('"getEnumKeys" must receive an enum object.'); } let vals = Object.keys(arg).reduce((arr, key) => { if (!arr.includes(key)) { arr.push(arg[key]); } return arr; }, []); if (isNum(arg[vals[0]])) { vals = vals.map(item => arg[item]); } return [ vals[0], arg => vals.some(val => val === arg), ]; } function isEnum(arg) { if (!isObj(arg) || Array.isArray(arg)) { return false; } const param = arg, keys = Object.keys(param), middle = Math.floor(keys.length / 2); if (!isNum(param[keys[middle]])) { return checkObjEntries(arg, (key, val) => { return isStr(key) && isStr(val); }); } if (keys.length % 2 !== 0) { return false; } for (let i = 0; i < middle; i++) { const thisKey = keys[i], thisVal = param[thisKey], thatKey = keys[i + middle], thatVal = param[thatKey]; if (!(thisVal === thatKey && thisKey === String(thatVal))) { return false; } } return true; } function checkObjEntries(val, cb) { if (isObj(val)) { for (const entry of Object.entries(val)) { if (!cb(entry[0], entry[1])) { return false; } } } return true; } function isBasicObj(arg) { return isObj(arg) && !Object.keys(arg).some(key => !isStr(key)); } const isDate = (val) => { return (val instanceof Date) && !isNaN(new Date(val).getTime()); }; exports.isDate = isDate; function defaultCloneFn(arg) { if (arg instanceof Date) { return new Date(arg); } else if (isObj(arg)) { return structuredClone(arg); } else { return arg; } } //# sourceMappingURL=util.js.map