jet-schema
Version:
Simple, typescript-first schema validation tool
96 lines • 2.58 kB
JavaScript
;
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