UNPKG

jet-validators

Version:

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

345 lines 18.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.strictTestNullishObjectArray = exports.strictTestNullableObjectArray = exports.strictTestOptionalObjectArray = exports.strictTestObjectArray = exports.strictTestNullishObject = exports.strictTestNullableObject = exports.strictTestOptionalObject = exports.strictTestObject = exports.looseTestNullishObjectArray = exports.looseTestNullableObjectArray = exports.looseTestOptionalObjectArray = exports.looseTestObjectArray = exports.looseTestNullishObject = exports.looseTestNullableObject = exports.looseTestOptionalObject = exports.looseTestObject = exports.testNullishObjectArray = exports.testNullableObjectArray = exports.testOptionalObjectArray = exports.testObjectArray = exports.testNullishObject = exports.testNullableObject = exports.testOptionalObject = exports.testObject = exports.strictParseNullishObjectArray = exports.strictParseNullableObjectArray = exports.strictParseOptionalObjectArray = exports.strictParseObjectArray = exports.strictParseNullishObject = exports.strictParseNullableObject = exports.strictParseOptionalObject = exports.strictParseObject = exports.looseParseNullishObjectArray = exports.looseParseNullableObjectArray = exports.looseParseOptionalObjectArray = exports.looseParseObjectArray = exports.looseParseNullishObject = exports.looseParseNullableObject = exports.looseParseOptionalObject = exports.looseParseObject = exports.parseNullishObjectArray = exports.parseNullableObjectArray = exports.parseOptionalObjectArray = exports.parseObjectArray = exports.parseNullishObject = exports.parseNullableObject = exports.parseOptionalObject = exports.parseObject = void 0; const dist_1 = require("../../dist"); var Safety; (function (Safety) { Safety[Safety["Loose"] = 0] = "Loose"; Safety[Safety["Default"] = 1] = "Default"; Safety[Safety["Strict"] = 2] = "Strict"; })(Safety || (Safety = {})); const ERRORS = { NotObject: 'Parsed item was not an object.', NotOptional: 'Root argument is undefined but not optional.', NotNullable: 'Root argument is null but not nullable.', NotArray: 'Root argument is not an array.', NestedValidation: 'Nested validation failed.', ValidatorFn: 'Validator-function returned false.', ErrorThrown: 'Validator function threw an error.', StrictSafety: 'strict-safety failed, prop not in schema.', SchemaProp: 'Schema property must be a function or nested schema', }; ; const parseObject = (schema, onError) => _parseObject(schema, false, false, false, Safety.Default, onError); exports.parseObject = parseObject; const parseOptionalObject = (schema, onError) => _parseObject(schema, true, false, false, Safety.Default, onError); exports.parseOptionalObject = parseOptionalObject; const parseNullableObject = (schema, onError) => _parseObject(schema, false, true, false, Safety.Default, onError); exports.parseNullableObject = parseNullableObject; const parseNullishObject = (schema, onError) => _parseObject(schema, true, true, false, Safety.Default, onError); exports.parseNullishObject = parseNullishObject; const parseObjectArray = (schema, onError) => _parseObject(schema, false, false, true, Safety.Default, onError); exports.parseObjectArray = parseObjectArray; const parseOptionalObjectArray = (schema, onError) => _parseObject(schema, true, false, true, Safety.Default, onError); exports.parseOptionalObjectArray = parseOptionalObjectArray; const parseNullableObjectArray = (schema, onError) => _parseObject(schema, false, true, true, Safety.Default, onError); exports.parseNullableObjectArray = parseNullableObjectArray; const parseNullishObjectArray = (schema, onError) => _parseObject(schema, true, true, true, Safety.Default, onError); exports.parseNullishObjectArray = parseNullishObjectArray; const looseParseObject = (schema, onError) => _parseObject(schema, false, false, false, Safety.Loose, onError); exports.looseParseObject = looseParseObject; const looseParseOptionalObject = (schema, onError) => _parseObject(schema, true, false, false, Safety.Loose, onError); exports.looseParseOptionalObject = looseParseOptionalObject; const looseParseNullableObject = (schema, onError) => _parseObject(schema, false, true, false, Safety.Loose, onError); exports.looseParseNullableObject = looseParseNullableObject; const looseParseNullishObject = (schema, onError) => _parseObject(schema, true, true, false, Safety.Loose, onError); exports.looseParseNullishObject = looseParseNullishObject; const looseParseObjectArray = (schema, onError) => _parseObject(schema, false, false, true, Safety.Loose, onError); exports.looseParseObjectArray = looseParseObjectArray; const looseParseOptionalObjectArray = (schema, onError) => _parseObject(schema, true, false, true, Safety.Loose, onError); exports.looseParseOptionalObjectArray = looseParseOptionalObjectArray; const looseParseNullableObjectArray = (schema, onError) => _parseObject(schema, false, true, true, Safety.Loose, onError); exports.looseParseNullableObjectArray = looseParseNullableObjectArray; const looseParseNullishObjectArray = (schema, onError) => _parseObject(schema, true, true, true, Safety.Loose, onError); exports.looseParseNullishObjectArray = looseParseNullishObjectArray; const strictParseObject = (schema, onError) => _parseObject(schema, false, false, false, Safety.Strict, onError); exports.strictParseObject = strictParseObject; const strictParseOptionalObject = (schema, onError) => _parseObject(schema, true, false, false, Safety.Strict, onError); exports.strictParseOptionalObject = strictParseOptionalObject; const strictParseNullableObject = (schema, onError) => _parseObject(schema, false, true, false, Safety.Strict, onError); exports.strictParseNullableObject = strictParseNullableObject; const strictParseNullishObject = (schema, onError) => _parseObject(schema, true, true, false, Safety.Strict, onError); exports.strictParseNullishObject = strictParseNullishObject; const strictParseObjectArray = (schema, onError) => _parseObject(schema, false, false, true, Safety.Strict, onError); exports.strictParseObjectArray = strictParseObjectArray; const strictParseOptionalObjectArray = (schema, onError) => _parseObject(schema, true, false, true, Safety.Strict, onError); exports.strictParseOptionalObjectArray = strictParseOptionalObjectArray; const strictParseNullableObjectArray = (schema, onError) => _parseObject(schema, false, true, true, Safety.Strict, onError); exports.strictParseNullableObjectArray = strictParseNullableObjectArray; const strictParseNullishObjectArray = (schema, onError) => _parseObject(schema, true, true, true, Safety.Strict, onError); exports.strictParseNullishObjectArray = strictParseNullishObjectArray; function _parseObject(schema, optional, nullable, isArr, safety, onErrorLower) { return (arg, onError) => { if (!!onErrorLower || !!onError) { return _parseObjectHelperWithErrCb(!!optional, !!nullable, isArr, schema, arg, safety, (errors) => { Object.defineProperty(errors, 'isParseObjectErrorArr', { value: true, writable: false, }); onErrorLower?.(errors); onError?.(errors); }); } return _parseObjectHelperWoErrCb(!!optional, !!nullable, isArr, schema, arg, safety); }; } function _parseObjectHelperWithErrCb(optional, nullable, isArr, schema, arg, safety, onError) { if (arg === undefined) { if (!optional) { onError([{ info: ERRORS.NotOptional }]); return false; } return undefined; } if (arg === null) { if (!nullable) { onError([{ info: ERRORS.NotNullable }]); return false; } return null; } const errArr = []; if (isArr) { if (!Array.isArray(arg)) { onError([{ info: ERRORS.NotArray }]); return false; } for (let i = 0; i < arg.length; i++) { _parseObjectHelperWithErrCb2(schema, arg[i], errArr, safety, i); } if (errArr.length > 0) { onError(errArr); return false; } return arg; } _parseObjectHelperWithErrCb2(schema, arg, errArr, safety); if (errArr.length > 0) { onError(errArr); return false; } return arg; } function _parseObjectHelperWithErrCb2(schemaParentObj, argParentObj, errArr, safety, index) { if (!(0, dist_1.isRecord)(argParentObj)) { errArr.push({ info: ERRORS.NotObject, ...((0, dist_1.isUndef)(index) ? {} : { index }), }); return false; } for (const key in schemaParentObj) { const schemaProp = schemaParentObj[key], val = argParentObj[key]; if ((0, dist_1.isFunction)(schemaProp)) { try { let childErrors, passed = false, info = ERRORS.ValidatorFn; if (schemaProp.isTransFn === true) { passed = schemaProp(val, tval => argParentObj[key] = tval); } else { passed = schemaProp(val, errors => { if (isParseObjectErrArr(errors)) { info = ERRORS.NestedValidation; childErrors = errors; } }); } if (!passed) { errArr.push({ info, prop: key, ...((!!childErrors && childErrors.length > 0) ? { children: childErrors, } : { value: val, }), ...((0, dist_1.isUndef)(index) ? {} : { index }), }); } } catch (err) { let caught; if (err instanceof Error) { caught = err.message; } else if ((0, dist_1.isString)(err)) { caught = err; } else { caught = JSON.stringify(err); } errArr.push({ info: ERRORS.ErrorThrown, prop: key, value: val, caught, ...((0, dist_1.isUndef)(index) ? {} : { index }), }); } } else if ((0, dist_1.isRecord)(schemaProp) && Object.keys(schemaProp).length > 0) { const childErrArr = [], childVal = _parseObjectHelperWithErrCb2(schemaProp, val, childErrArr, safety); if (childVal === false) { errArr.push({ info: ERRORS.NestedValidation, prop: key, children: childErrArr, ...((0, dist_1.isUndef)(index) ? {} : { index }), }); } } else { throw new Error(ERRORS.SchemaProp); } } if (safety !== Safety.Loose) { for (const key in argParentObj) { if (!(key in schemaParentObj)) { if (safety === Safety.Strict) { errArr.push({ info: ERRORS.StrictSafety, prop: key, ...((0, dist_1.isUndef)(index) ? {} : { index }), }); } Reflect.deleteProperty(argParentObj, key); } } } if (errArr.length > 0) { return false; } return argParentObj; } function _parseObjectHelperWoErrCb(optional, nullable, isArr, schema, arg, safety) { if (arg === undefined) { return !optional ? false : undefined; } if (arg === null) { return !nullable ? false : null; } if (isArr) { if (!Array.isArray(arg)) { return false; } for (const item of arg) { const parsedItem = _parseObjectHelperWoErrCb2(schema, item, safety); if (parsedItem === false) { return false; } } return arg; } const resp = _parseObjectHelperWoErrCb2(schema, arg, safety); if (resp === false) { return false; } return arg; } function _parseObjectHelperWoErrCb2(schemaParentObj, argParentObj, safety) { if (!(0, dist_1.isRecord)(argParentObj)) { return false; } for (const key in schemaParentObj) { const schemaProp = schemaParentObj[key], val = argParentObj[key]; if ((0, dist_1.isFunction)(schemaProp)) { try { let passed = false; if (schemaProp.isTransFn === true) { passed = schemaProp(val, tval => argParentObj[key] = tval); } else { passed = schemaProp(val); } if (!passed) { return false; } } catch { return false; } } else if ((0, dist_1.isRecord)(schemaProp) && Object.keys(schemaProp).length > 0) { const childVal = _parseObjectHelperWoErrCb2(schemaProp, val, safety); if (childVal === false) { return false; } } else { throw new Error(ERRORS.SchemaProp); } } if (safety !== Safety.Loose) { for (const key in argParentObj) { if (!(key in schemaParentObj)) { if (safety === Safety.Strict) { return false; } Reflect.deleteProperty(argParentObj, key); } } } return argParentObj; } function isParseObjectErrArr(arg) { return (Array.isArray(arg) && arg.length > 0 && 'isParseObjectErrorArr' in arg && arg.isParseObjectErrorArr === true); } const testObject = (schema, onError) => _testObject(schema, false, false, false, Safety.Default, onError); exports.testObject = testObject; const testOptionalObject = (schema, onError) => _testObject(schema, true, false, false, Safety.Default, onError); exports.testOptionalObject = testOptionalObject; const testNullableObject = (schema, onError) => _testObject(schema, false, true, false, Safety.Default, onError); exports.testNullableObject = testNullableObject; const testNullishObject = (schema, onError) => _testObject(schema, true, true, false, Safety.Default, onError); exports.testNullishObject = testNullishObject; const testObjectArray = (schema, onError) => _testObject(schema, false, false, true, Safety.Default, onError); exports.testObjectArray = testObjectArray; const testOptionalObjectArray = (schema, onError) => _testObject(schema, true, false, true, Safety.Default, onError); exports.testOptionalObjectArray = testOptionalObjectArray; const testNullableObjectArray = (schema, onError) => _testObject(schema, false, true, true, Safety.Default, onError); exports.testNullableObjectArray = testNullableObjectArray; const testNullishObjectArray = (schema, onError) => _testObject(schema, true, true, true, Safety.Default, onError); exports.testNullishObjectArray = testNullishObjectArray; const looseTestObject = (schema, onError) => _testObject(schema, false, false, false, Safety.Loose, onError); exports.looseTestObject = looseTestObject; const looseTestOptionalObject = (schema, onError) => _testObject(schema, true, false, false, Safety.Loose, onError); exports.looseTestOptionalObject = looseTestOptionalObject; const looseTestNullableObject = (schema, onError) => _testObject(schema, false, true, false, Safety.Loose, onError); exports.looseTestNullableObject = looseTestNullableObject; const looseTestNullishObject = (schema, onError) => _testObject(schema, true, true, false, Safety.Loose, onError); exports.looseTestNullishObject = looseTestNullishObject; const looseTestObjectArray = (schema, onError) => _testObject(schema, false, false, true, Safety.Loose, onError); exports.looseTestObjectArray = looseTestObjectArray; const looseTestOptionalObjectArray = (schema, onError) => _testObject(schema, true, false, true, Safety.Loose, onError); exports.looseTestOptionalObjectArray = looseTestOptionalObjectArray; const looseTestNullableObjectArray = (schema, onError) => _testObject(schema, false, true, true, Safety.Loose, onError); exports.looseTestNullableObjectArray = looseTestNullableObjectArray; const looseTestNullishObjectArray = (schema, onError) => _testObject(schema, true, true, true, Safety.Loose, onError); exports.looseTestNullishObjectArray = looseTestNullishObjectArray; const strictTestObject = (schema, onError) => _testObject(schema, false, false, false, Safety.Strict, onError); exports.strictTestObject = strictTestObject; const strictTestOptionalObject = (schema, onError) => _testObject(schema, true, false, false, Safety.Strict, onError); exports.strictTestOptionalObject = strictTestOptionalObject; const strictTestNullableObject = (schema, onError) => _testObject(schema, false, true, false, Safety.Strict, onError); exports.strictTestNullableObject = strictTestNullableObject; const strictTestNullishObject = (schema, onError) => _testObject(schema, true, true, false, Safety.Strict, onError); exports.strictTestNullishObject = strictTestNullishObject; const strictTestObjectArray = (schema, onError) => _testObject(schema, false, false, true, Safety.Strict, onError); exports.strictTestObjectArray = strictTestObjectArray; const strictTestOptionalObjectArray = (schema, onError) => _testObject(schema, true, false, true, Safety.Strict, onError); exports.strictTestOptionalObjectArray = strictTestOptionalObjectArray; const strictTestNullableObjectArray = (schema, onError) => _testObject(schema, false, true, true, Safety.Strict, onError); exports.strictTestNullableObjectArray = strictTestNullableObjectArray; const strictTestNullishObjectArray = (schema, onError) => _testObject(schema, true, true, true, Safety.Strict, onError); exports.strictTestNullishObjectArray = strictTestNullishObjectArray; function _testObject(schema, optional, nullable, isArr, safety, onError) { const parseFn = _parseObject(schema, optional, nullable, isArr, safety, onError); return (arg, onError) => { const res = parseFn(arg, onError); return res !== false; }; } //# sourceMappingURL=parseObject.js.map