UNPKG

@httpc/kit

Version:

httpc toolbox for building function-based API with minimal code and end-to-end type safety

107 lines (106 loc) 4.24 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; Object.defineProperty(exports, "__esModule", { value: true }); exports.NativeTypeValidator = void 0; const tsyringe_1 = require("tsyringe"); const di_1 = require("../di"); const DEFAULT_OPTIONS = {}; let NativeTypeValidator = class NativeTypeValidator { constructor(options = DEFAULT_OPTIONS) { this.options = options; } canValidate(object, schema, options) { return (schema === String || schema === Number || schema === Boolean || schema === Object || schema === Date || schema === Array); } validate(object, schema, options) { const { disableParsing } = this.options; if (schema === String) { if (typeof object !== "string") { return this.validationFailed(String); } } else if (schema === Number) { if (typeof object !== "number") { if (!disableParsing && typeof object === "string" && object !== "" && !isNaN(object)) { object = Number(object); } else { return this.validationFailed(Number); } } } else if (schema === Boolean) { if (typeof object !== "boolean") { let lowercase; if (!disableParsing && typeof object === "string" && (lowercase = object.toLowerCase()) && (lowercase === "true" || lowercase === "false")) { object = lowercase === "true"; } else { return this.validationFailed(Boolean); } } } else if (schema === Date) { if (typeof object !== "object" || !(object instanceof Date)) { let parsed; if (!disableParsing && typeof object === "string" && (parsed = new Date(object)) && !isNaN(parsed.getTime()) // is a valid date ) { object = parsed; } else { return this.validationFailed(Date); } } } else if (schema === Array) { if (!Array.isArray(object)) { return this.validationFailed(Array); } } else if (schema === Object) { if (typeof object !== "object" || object === null || object instanceof Date || Array.isArray(object)) { return this.validationFailed(Object); } } else { throw new Error("Invalid schema: " + schema); } return { success: true, object }; } validationFailed(schema) { return { success: false, errors: ["Not valid " + schema.name] }; } }; NativeTypeValidator = __decorate([ (0, tsyringe_1.singleton)(), (0, di_1.alias)((0, di_1.KEY)("IValidator")), __param(0, (0, di_1.options)(undefined)), __metadata("design:paramtypes", [Object]) ], NativeTypeValidator); exports.NativeTypeValidator = NativeTypeValidator;