UNPKG

computed-types

Version:

Runtime validation types for TypeScript.

138 lines (103 loc) 13.6 kB
"use strict"; exports.__esModule = true; exports.default = exports.UnknownValidator = void 0; var _Validator = _interopRequireDefault(require("./Validator")); var _errors = require("./schema/errors"); var _object = require("./object"); var _string = require("./string"); var _number = require("./number"); var _boolean = require("./boolean"); var _compiler = _interopRequireDefault(require("./schema/compiler")); var _array = require("./array"); var _validations = require("./schema/validations"); var _DateType = require("./DateType"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const BOOL_MAP = { true: true, false: false, t: true, f: false, yes: true, no: false, y: true, n: false, 1: true, 0: false }; class UnknownValidator extends _Validator.default { schema(schema, error) { return this.transform((0, _compiler.default)(schema, { error }), _Validator.default); } object(error) { return this.transform((0, _validations.type)('object', error), _object.ObjectValidator); } array(error) { return this.transform((0, _validations.array)(null, error), _array.ArrayValidator); } string(error) { return this.transform(input => { if (typeof input === 'string') { return input; } if (input == null || typeof input === 'object' && // eslint-disable-next-line @typescript-eslint/ban-types input.toString === Object.prototype.toString) { throw (0, _errors.toError)(error || `Expect value to be string`, input); } return String(input); }, _string.StringValidator); } number(error) { return this.transform(input => { if (typeof input === 'number') { return input; } const value = Number(input); if (isNaN(value) && input !== 'NaN') { throw (0, _errors.toError)(error || `Unknown number value`, input); } return value; }, _number.NumberValidator); } boolean(error) { return this.transform(input => { if (typeof input === 'boolean') { return input; } const key = String(input).trim().toLowerCase(); const value = BOOL_MAP[key]; if (value == null) { throw (0, _errors.toError)(error || `Unknown boolean value`, input); } return value; }, _boolean.BooleanValidator); } date(error) { return this.transform(input => { if (input instanceof Date) { return input; } if (typeof input === 'number' || typeof input === 'string') { const value = new Date(input); if (!isNaN(value.getTime())) { return value; } } throw (0, _errors.toError)(error || `Unknown date value`, input); }, _DateType.DateValidator); } enum(value, error) { return this.transform((0, _validations.enumValue)(value, error), _Validator.default); } record(key, // eslint-disable-line @typescript-eslint/no-explicit-any value, // eslint-disable-line @typescript-eslint/no-explicit-any error) { return this.transform((0, _validations.recordValue)(key, value, error), _Validator.default); } } exports.UnknownValidator = UnknownValidator; const unknown = new UnknownValidator(input => input).proxy(); var _default = unknown; exports.default = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91bmtub3duLnRzIl0sIm5hbWVzIjpbIkJPT0xfTUFQIiwidHJ1ZSIsImZhbHNlIiwidCIsImYiLCJ5ZXMiLCJubyIsInkiLCJuIiwiVW5rbm93blZhbGlkYXRvciIsIlZhbGlkYXRvciIsInNjaGVtYSIsImVycm9yIiwidHJhbnNmb3JtIiwib2JqZWN0IiwiT2JqZWN0VmFsaWRhdG9yIiwiYXJyYXkiLCJBcnJheVZhbGlkYXRvciIsInN0cmluZyIsImlucHV0IiwidG9TdHJpbmciLCJPYmplY3QiLCJwcm90b3R5cGUiLCJTdHJpbmciLCJTdHJpbmdWYWxpZGF0b3IiLCJudW1iZXIiLCJ2YWx1ZSIsIk51bWJlciIsImlzTmFOIiwiTnVtYmVyVmFsaWRhdG9yIiwiYm9vbGVhbiIsImtleSIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsIkJvb2xlYW5WYWxpZGF0b3IiLCJkYXRlIiwiRGF0ZSIsImdldFRpbWUiLCJEYXRlVmFsaWRhdG9yIiwiZW51bSIsInJlY29yZCIsInVua25vd24iLCJwcm94eSJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFFQTs7OztBQUVBLE1BQU1BLFFBQVEsR0FBRztBQUNmQyxFQUFBQSxJQUFJLEVBQUUsSUFEUztBQUVmQyxFQUFBQSxLQUFLLEVBQUUsS0FGUTtBQUdmQyxFQUFBQSxDQUFDLEVBQUUsSUFIWTtBQUlmQyxFQUFBQSxDQUFDLEVBQUUsS0FKWTtBQUtmQyxFQUFBQSxHQUFHLEVBQUUsSUFMVTtBQU1mQyxFQUFBQSxFQUFFLEVBQUUsS0FOVztBQU9mQyxFQUFBQSxDQUFDLEVBQUUsSUFQWTtBQVFmQyxFQUFBQSxDQUFDLEVBQUUsS0FSWTtBQVNmLEtBQUcsSUFUWTtBQVVmLEtBQUc7QUFWWSxDQUFqQjs7QUFhTyxNQUFNQyxnQkFBTixTQUVHQyxrQkFGSCxDQUV1QztBQUNyQ0MsRUFBQUEsTUFBTSxDQUNYQSxNQURXLEVBRVhD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QVA7QUFDRDtBQUNGOztBQUVELFlBQU0scUJBQVFkLEtBQUssSUFBSyxvQkFBbEIsRUFBdUNPLEtBQXZDLENBQU47QUFDRCxLQWRNLEVBY0ptQix1QkFkSSxDQUFQO0FBZUQ7O0FBRU1DLEVBQUFBLElBQUksQ0FDVGIsS0FEUyxFQUVUZCxLQUZTLEVBRytDO0FBQ3hELFdBQU8sS0FBS0MsU0FBTCxDQUFlLDRCQUFVYSxLQUFWLEVBQWlCZCxLQUFqQixDQUFmLEVBQXdDRixrQkFBeEMsQ0FBUDtBQUNEOztBQUVNOEIsRUFBQUEsTUFBTSxDQUNYVCxHQURXLEVBQ2tCO0FBQzdCTCxFQUFBQSxLQUZXLEVBRW9CO0FBQy9CZCxFQUFBQSxLQUhXLEVBSStDO0FBQzFELFdBQU8sS0FBS0MsU0FBTCxDQUFlLDhCQUFZa0IsR0FBWixFQUFpQkwsS0FBakIsRUFBd0JkLEtBQXhCLENBQWYsRUFBK0NGLGtCQUEvQyxDQUFQO0FBQ0Q7O0FBbkgyQzs7O0FBc0g5QyxNQUFNK0IsT0FBTyxHQUFHLElBQUloQyxnQkFBSixDQUNiVSxLQUFELElBQTZCQSxLQURmLEVBRWR1QixLQUZjLEVBQWhCO2VBSWVELE8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVmFsaWRhdG9yLCB7IFZhbGlkYXRvclByb3h5IH0gZnJvbSAnLi9WYWxpZGF0b3InO1xuaW1wb3J0IEZ1bmN0aW9uVHlwZSwgeyBGdW5jdGlvblBhcmFtZXRlcnMgfSBmcm9tICcuL3NjaGVtYS9GdW5jdGlvblR5cGUnO1xuaW1wb3J0IHsgRXJyb3JMaWtlLCB0b0Vycm9yIH0gZnJvbSAnLi9zY2hlbWEvZXJyb3JzJztcbmltcG9ydCB7IE9iamVjdFZhbGlkYXRvciB9IGZyb20gJy4vb2JqZWN0JztcbmltcG9ydCB7IFN0cmluZ1ZhbGlkYXRvciB9IGZyb20gJy4vc3RyaW5nJztcbmltcG9ydCB7IE51bWJlclZhbGlkYXRvciB9IGZyb20gJy4vbnVtYmVyJztcbmltcG9ydCB7IEJvb2xlYW5WYWxpZGF0b3IgfSBmcm9tICcuL2Jvb2xlYW4nO1xuaW1wb3J0IHsgU2NoZW1hUmVzb2x2ZVR5cGUgfSBmcm9tICcuL3NjaGVtYS9pbyc7XG5pbXBvcnQgY29tcGlsZXIgZnJvbSAnLi9zY2hlbWEvY29tcGlsZXInO1xuaW1wb3J0IHsgQXJyYXlWYWxpZGF0b3IgfSBmcm9tICcuL2FycmF5JztcbmltcG9ydCB7IGFycmF5LCBlbnVtVmFsdWUsIHJlY29yZFZhbHVlLCB0eXBlIH0gZnJvbSAnLi9zY2hlbWEvdmFsaWRhdGlvbnMnO1xuaW1wb3J0IHsgRW51bSwgT2JqZWN0UHJvcGVydHkgfSBmcm9tICcuL3NjaGVtYS91dGlscyc7XG5pbXBvcnQgeyBEYXRlVmFsaWRhdG9yIH0gZnJvbSAnLi9EYXRlVHlwZSc7XG5cbmNvbnN0IEJPT0xfTUFQID0ge1xuICB0cnVlOiB0cnVlLFxuICBmYWxzZTogZmFsc2UsXG4gIHQ6IHRydWUsXG4gIGY6IGZhbHNlLFxuICB5ZXM6IHRydWUsXG4gIG5vOiBmYWxzZSxcbiAgeTogdHJ1ZSxcbiAgbjogZmFsc2UsXG4gIDE6IHRydWUsXG4gIDA6IGZhbHNlLFxufTtcblxuZXhwb3J0IGNsYXNzIFVua25vd25WYWxpZGF0b3I8XG4gIFAgZXh0ZW5kcyBGdW5jdGlvblBhcmFtZXRlcnMgPSBbdW5rbm93bl0sXG4+IGV4dGVuZHMgVmFsaWRhdG9yPEZ1bmN0aW9uVHlwZTx1bmtub3duLCBQPj4ge1xuICBwdWJsaWMgc2NoZW1hPFM+KFxuICAgIHNjaGVtYTogUyxcbiAgICBlcnJvcj86IEVycm9yTGlrZTxbdW5rbm93bl0+LFxuICApOiBWYWxpZGF0b3JQcm94eTxWYWxpZGF0b3I8RnVuY3Rpb25UeXBlPFNjaGVtYVJlc29sdmVUeXBlPFM+LCBQPj4+IHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0oXG4gICAgICBjb21waWxlcjx1bmtub3duPihzY2hlbWEsIHsgZXJyb3IgfSkgYXMgRnVuY3Rpb25UeXBlPFxuICAgICAgICBTY2hlbWFSZXNvbHZlVHlwZTxTPixcbiAgICAgICAgW3Vua25vd25dXG4gICAgICA+LFxuICAgICAgVmFsaWRhdG9yLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgb2JqZWN0KFxuICAgIGVycm9yPzogRXJyb3JMaWtlPFt1bmtub3duXT4sXG4gICk6IFZhbGlkYXRvclByb3h5PE9iamVjdFZhbGlkYXRvcjxQPj4ge1xuICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybSh0eXBlKCdvYmplY3QnLCBlcnJvciksIE9iamVjdFZhbGlkYXRvcik7XG4gIH1cblxuICBwdWJsaWMgYXJyYXkoXG4gICAgZXJyb3I/OiBFcnJvckxpa2U8W3Vua25vd25dPixcbiAgKTogVmFsaWRhdG9yUHJveHk8QXJyYXlWYWxpZGF0b3I8dW5rbm93bltdLCBQPj4ge1xuICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybShhcnJheShudWxsLCBlcnJvciksIEFycmF5VmFsaWRhdG9yKTtcbiAgfVxuXG4gIHB1YmxpYyBzdHJpbmcoXG4gICAgZXJyb3I/OiBFcnJvckxpa2U8W3Vua25vd25dPixcbiAgKTogVmFsaWRhdG9yUHJveHk8U3RyaW5nVmFsaWRhdG9yPFA+PiB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtKChpbnB1dCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGlucHV0ID09IG51bGwgfHxcbiAgICAgICAgKHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlc1xuICAgICAgICAgIChpbnB1dCBhcyB1bmtub3duIGFzIG9iamVjdCkudG9TdHJpbmcgPT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcpXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgdG9FcnJvcihlcnJvciB8fCBgRXhwZWN0IHZhbHVlIHRvIGJlIHN0cmluZ2AsIGlucHV0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dCk7XG4gICAgfSwgU3RyaW5nVmFsaWRhdG9yKTtcbiAgfVxuXG4gIHB1YmxpYyBudW1iZXIoXG4gICAgZXJyb3I/OiBFcnJvckxpa2U8W3Vua25vd25dPixcbiAgKTogVmFsaWRhdG9yUHJveHk8TnVtYmVyVmFsaWRhdG9yPFA+PiB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtKChpbnB1dCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgfVxuXG4gICAgICBjb25zdCB2YWx1ZSA9IE51bWJlcihpbnB1dCk7XG5cbiAgICAgIGlmIChpc05hTih2YWx1ZSkgJiYgKGlucHV0IGFzIHVua25vd24pICE9PSAnTmFOJykge1xuICAgICAgICB0aHJvdyB0b0Vycm9yKGVycm9yIHx8IGBVbmtub3duIG51bWJlciB2YWx1ZWAsIGlucHV0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sIE51bWJlclZhbGlkYXRvcik7XG4gIH1cblxuICBwdWJsaWMgYm9vbGVhbihcbiAgICBlcnJvcj86IEVycm9yTGlrZTxbdW5rbm93bl0+LFxuICApOiBWYWxpZGF0b3JQcm94eTxCb29sZWFuVmFsaWRhdG9yPFA+PiB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtKChpbnB1dCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgIH1cblxuICAgICAgY29uc3Qga2V5ID0gU3RyaW5nKGlucHV0KS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gQk9PTF9NQVBba2V5IGFzIGtleW9mIHR5cGVvZiBCT09MX01BUF07XG5cbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IHRvRXJyb3IoZXJyb3IgfHwgYFVua25vd24gYm9vbGVhbiB2YWx1ZWAsIGlucHV0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sIEJvb2xlYW5WYWxpZGF0b3IpO1xuICB9XG5cbiAgcHVibGljIGRhdGUoZXJyb3I/OiBFcnJvckxpa2U8W3Vua25vd25dPik6IFZhbGlkYXRvclByb3h5PERhdGVWYWxpZGF0b3I8UD4+IHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0oKGlucHV0KSA9PiB7XG4gICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicgfHwgdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IG5ldyBEYXRlKGlucHV0KTtcblxuICAgICAgICBpZiAoIWlzTmFOKHZhbHVlLmdldFRpbWUoKSkpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhyb3cgdG9FcnJvcihlcnJvciB8fCBgVW5rbm93biBkYXRlIHZhbHVlYCwgaW5wdXQpO1xuICAgIH0sIERhdGVWYWxpZGF0b3IpO1xuICB9XG5cbiAgcHVibGljIGVudW08RSBleHRlbmRzIEVudW08RT4+KFxuICAgIHZhbHVlOiBFLFxuICAgIGVycm9yPzogRXJyb3JMaWtlPFt1bmtub3duXT4sXG4gICk6IFZhbGlkYXRvclByb3h5PFZhbGlkYXRvcjxGdW5jdGlvblR5cGU8RVtrZXlvZiBFXSwgUD4+PiB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtKGVudW1WYWx1ZSh2YWx1ZSwgZXJyb3IpLCBWYWxpZGF0b3IpO1xuICB9XG5cbiAgcHVibGljIHJlY29yZDxLIGV4dGVuZHMgT2JqZWN0UHJvcGVydHksIFY+KFxuICAgIGtleTogRnVuY3Rpb25UeXBlPEssIFthbnldPiwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgdmFsdWU6IEZ1bmN0aW9uVHlwZTxWLCBbYW55XT4sIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGVycm9yPzogRXJyb3JMaWtlPFt1bmtub3duXT4sXG4gICk6IFZhbGlkYXRvclByb3h5PFZhbGlkYXRvcjxGdW5jdGlvblR5cGU8UmVjb3JkPEssIFY+LCBQPj4+IHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0ocmVjb3JkVmFsdWUoa2V5LCB2YWx1ZSwgZXJyb3IpLCBWYWxpZGF0b3IpO1xuICB9XG59XG5cbmNvbnN0IHVua25vd24gPSBuZXcgVW5rbm93blZhbGlkYXRvcihcbiAgKGlucHV0OiB1bmtub3duKTogdW5rbm93biA9PiBpbnB1dCxcbikucHJveHkoKTtcblxuZXhwb3J0IGRlZmF1bHQgdW5rbm93bjtcbiJdfQ==