class-validator
Advanced tools
@@ -70,2 +70,14 @@ /// <reference types="validator" /> | ||
| /** | ||
| * Checks if a value is a latitude,longitude. | ||
| */ | ||
| export declare function IsLatLong(validationOptions?: ValidationOptions): (object: Object, propertyName: string) => void; | ||
| /** | ||
| * Checks if a value is a latitude,longitude. | ||
| */ | ||
| export declare function IsLatitude(validationOptions?: ValidationOptions): (object: Object, propertyName: string) => void; | ||
| /** | ||
| * Checks if a value is a latitude,longitude. | ||
| */ | ||
| export declare function IsLongitude(validationOptions?: ValidationOptions): (object: Object, propertyName: string) => void; | ||
| /** | ||
| * Checks if a value is a date. | ||
@@ -224,2 +236,10 @@ */ | ||
| /** | ||
| * Checks if the value is a valid object. | ||
| */ | ||
| export declare function IsObject(validationOptions?: ValidationOptions): (object: Object, propertyName: string) => void; | ||
| /** | ||
| * Checks if the value is a valid object & not empty. | ||
| */ | ||
| export declare function IsNotEmptyObject(validationOptions?: ValidationOptions): (object: Object, propertyName: string) => void; | ||
| /** | ||
| * Checks if the string is lowercase. | ||
@@ -226,0 +246,0 @@ */ |
@@ -252,2 +252,47 @@ "use strict"; | ||
| /** | ||
| * Checks if a value is a latitude,longitude. | ||
| */ | ||
| function IsLatLong(validationOptions) { | ||
| return function (object, propertyName) { | ||
| var args = { | ||
| type: ValidationTypes_1.ValidationTypes.IS_LATLONG, | ||
| target: object.constructor, | ||
| propertyName: propertyName, | ||
| validationOptions: validationOptions | ||
| }; | ||
| container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); | ||
| }; | ||
| } | ||
| exports.IsLatLong = IsLatLong; | ||
| /** | ||
| * Checks if a value is a latitude,longitude. | ||
| */ | ||
| function IsLatitude(validationOptions) { | ||
| return function (object, propertyName) { | ||
| var args = { | ||
| type: ValidationTypes_1.ValidationTypes.IS_LONGITUDE, | ||
| target: object.constructor, | ||
| propertyName: propertyName, | ||
| validationOptions: validationOptions | ||
| }; | ||
| container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); | ||
| }; | ||
| } | ||
| exports.IsLatitude = IsLatitude; | ||
| /** | ||
| * Checks if a value is a latitude,longitude. | ||
| */ | ||
| function IsLongitude(validationOptions) { | ||
| return function (object, propertyName) { | ||
| var args = { | ||
| type: ValidationTypes_1.ValidationTypes.IS_LATITUDE, | ||
| target: object.constructor, | ||
| propertyName: propertyName, | ||
| validationOptions: validationOptions | ||
| }; | ||
| container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); | ||
| }; | ||
| } | ||
| exports.IsLongitude = IsLongitude; | ||
| /** | ||
| * Checks if a value is a date. | ||
@@ -867,2 +912,32 @@ */ | ||
| /** | ||
| * Checks if the value is a valid object. | ||
| */ | ||
| function IsObject(validationOptions) { | ||
| return function (object, propertyName) { | ||
| var args = { | ||
| type: ValidationTypes_1.ValidationTypes.IS_OBJECT, | ||
| target: object.constructor, | ||
| propertyName: propertyName, | ||
| validationOptions: validationOptions | ||
| }; | ||
| container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); | ||
| }; | ||
| } | ||
| exports.IsObject = IsObject; | ||
| /** | ||
| * Checks if the value is a valid object & not empty. | ||
| */ | ||
| function IsNotEmptyObject(validationOptions) { | ||
| return function (object, propertyName) { | ||
| var args = { | ||
| type: ValidationTypes_1.ValidationTypes.IS_NOT_EMPTY_OBJECT, | ||
| target: object.constructor, | ||
| propertyName: propertyName, | ||
| validationOptions: validationOptions | ||
| }; | ||
| container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); | ||
| }; | ||
| } | ||
| exports.IsNotEmptyObject = IsNotEmptyObject; | ||
| /** | ||
| * Checks if the string is lowercase. | ||
@@ -869,0 +944,0 @@ */ |
+1
-1
| { | ||
| "name": "class-validator", | ||
| "private": false, | ||
| "version": "0.10.1", | ||
| "version": "0.10.2", | ||
| "description": "Class-based validation with Typescript / ES6 / ES5 using decorators or validation schemas. Supports both node.js and browser", | ||
@@ -6,0 +6,0 @@ "license": "MIT", |
+15
-5
@@ -473,3 +473,3 @@ # class-validator | ||
| @MinLength(32, { | ||
| message: "EIC code must be at least 32 charatcers", | ||
| message: "EIC code must be at least 32 characters", | ||
| context: { | ||
@@ -840,3 +840,8 @@ errorCode: 1003, | ||
| validator.isJSON(str); // Checks if the string is valid JSON (note: uses JSON.parse). | ||
| validator.isObject(object); // Checks if the object is valid Object (null, functions, arrays will return false) | ||
| validator.isNotEmptyObject(object); // Checks if the object is not empty | ||
| validator.isLowercase(str); // Checks if the string is lowercase. | ||
| validator.isLatLong(str); // Checks if the string is lowercase. | ||
| validator.isLatitude(str); // Checks if the string is lowercase. | ||
| validator.isLongtitude(str); // Checks if the string is lowercase. | ||
| validator.isMobilePhone(str, locale); // Checks if the string is a mobile phone number. | ||
@@ -927,6 +932,11 @@ validator.isISO31661Alpha2(str); // Check if the string is a valid ISO 3166-1 alpha-2 | ||
| | `@IsJSON()` | Checks if the string is valid JSON. | | ||
| | `@IsObject()` | Checks if the object is valid Object (null, functions, arrays will return false). | | ||
| | `@IsNotEmptyObject()` | Checks if the object is not empty. | | ||
| | `@IsLowercase()` | Checks if the string is lowercase. | | ||
| | `@IsMobilePhone(locale: string)` | Checks if the string is a mobile phone number. | | ||
| | `@IsISO31661Alpha2()` | Check if the string is a valid [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) officially assigned country code. | | ||
| | `@IsISO31661Alpha3()` | Check if the string is a valid [ISO 3166-1 alpha-3](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3) officially assigned country code. | | ||
| | `@IsLatLong()` | Checks if the string is a valid latitude-longitude coordinate in the format lat,long | | ||
| | `@IsLatitude()` | Checks if the string or number is a valid latitude coordinate | | ||
| | `@IsLongitude()` | Checks if the string or number is a valid longitude coordinate | | ||
| | `@IsMobilePhone(locale: string)` | Checks if the string is a mobile phone number. | | ||
| | `@IsISO31661Alpha2()` | Checks if the string is a valid [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) officially assigned country code. | | ||
| | `@IsISO31661Alpha3()` | Checks if the string is a valid [ISO 3166-1 alpha-3](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3) officially assigned country code. | | ||
| | `@IsPhoneNumber(region: string)` | Checks if the string is a valid phone number. "region" accepts 2 characters uppercase country code (e.g. DE, US, CH).If users must enter the intl. prefix (e.g. +41), then you may pass "ZZ" or null as region. See [google-libphonenumber, metadata.js:countryCodeToRegionCodeMap on github](https://github.com/ruimarinho/google-libphonenumber/blob/1e46138878cff479aafe2ce62175c6c49cb58720/src/metadata.js#L33) | | ||
@@ -1052,2 +1062,2 @@ | `@IsMongoId()` | Checks if the string is a valid hex-encoded representation of a MongoDB ObjectId. | | ||
| [2]: https://github.com/pleerock/typedi | ||
| [3]: CHANGELOG.md | ||
| [3]: CHANGELOG.md |
+4
-0
| export declare function isPromise<T = any>(p: any): p is Promise<T>; | ||
| /** | ||
| * Convert Map, Set to Array | ||
| */ | ||
| export declare function convertToArray<T>(val: Array<T> | Set<T> | Map<any, T>): Array<T>; |
+10
-0
@@ -8,3 +8,13 @@ "use strict"; | ||
| exports.isPromise = isPromise; | ||
| /** | ||
| * Convert Map, Set to Array | ||
| */ | ||
| function convertToArray(val) { | ||
| if (val instanceof Map) { | ||
| return Array.from(val.values()); | ||
| } | ||
| return Array.isArray(val) ? val : Array.from(val); | ||
| } | ||
| exports.convertToArray = convertToArray; | ||
| //# sourceMappingURL=utils.js.map |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../src/utils.ts"],"names":[],"mappings":";AAAA,wGAAwG;;AAExG,SAAgB,SAAS,CAAU,CAAM;IACrC,OAAO,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC;AAC/E,CAAC;AAFD,8BAEC","file":"utils.js","sourcesContent":["// https://github.com/TylorS/typed-is-promise/blob/abf1514e1b6961adfc75765476b0debb96b2c3ae/src/index.ts\n\nexport function isPromise<T = any>(p: any): p is Promise<T> {\n return p !== null && typeof p === \"object\" && typeof p.then === \"function\";\n}\n"],"sourceRoot":"."} | ||
| {"version":3,"sources":["../../src/utils.ts"],"names":[],"mappings":";AAAA,wGAAwG;;AAExG,SAAgB,SAAS,CAAU,CAAM;IACrC,OAAO,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC;AAC/E,CAAC;AAFD,8BAEC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAI,GAAoC;IAClE,IAAI,GAAG,YAAY,GAAG,EAAE;QACpB,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;KACnC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtD,CAAC;AALD,wCAKC","file":"utils.js","sourcesContent":["// https://github.com/TylorS/typed-is-promise/blob/abf1514e1b6961adfc75765476b0debb96b2c3ae/src/index.ts\n\nexport function isPromise<T = any>(p: any): p is Promise<T> {\n return p !== null && typeof p === \"object\" && typeof p.then === \"function\";\n}\n\n/**\n * Convert Map, Set to Array\n */\nexport function convertToArray<T>(val: Array<T> | Set<T> | Map<any, T>): Array<T> {\n if (val instanceof Map) {\n return Array.from(val.values());\n }\n return Array.isArray(val) ? val : Array.from(val);\n}\n"],"sourceRoot":"."} |
@@ -174,4 +174,5 @@ "use strict"; | ||
| if (metadata.each) { | ||
| if (value instanceof Array) { | ||
| return !value.every(function (subValue) { return _this.validator.validateValueByMetadata(subValue, metadata); }); | ||
| if (value instanceof Array || value instanceof Set || value instanceof Map) { | ||
| var arrayValue = utils_1.convertToArray(value); | ||
| return !arrayValue.every(function (subValue) { return _this.validator.validateValueByMetadata(subValue, metadata); }); | ||
| } | ||
@@ -203,17 +204,46 @@ } | ||
| }; | ||
| var validatedValue = customConstraintMetadata.instance.validate(value, validationArguments); | ||
| if (utils_1.isPromise(validatedValue)) { | ||
| var promise = validatedValue.then(function (isValid) { | ||
| if (!isValid) { | ||
| if (!metadata.each || !(value instanceof Array || value instanceof Set || value instanceof Map)) { | ||
| var validatedValue = customConstraintMetadata.instance.validate(value, validationArguments); | ||
| if (utils_1.isPromise(validatedValue)) { | ||
| var promise = validatedValue.then(function (isValid) { | ||
| if (!isValid) { | ||
| var _a = _this.createValidationError(object, value, metadata, customConstraintMetadata), type = _a[0], message = _a[1]; | ||
| errorMap[type] = message; | ||
| } | ||
| }); | ||
| _this.awaitingPromises.push(promise); | ||
| } | ||
| else { | ||
| if (!validatedValue) { | ||
| var _a = _this.createValidationError(object, value, metadata, customConstraintMetadata), type = _a[0], message = _a[1]; | ||
| errorMap[type] = message; | ||
| } | ||
| } | ||
| return; | ||
| } | ||
| // convert set and map into array | ||
| var arrayValue = utils_1.convertToArray(value); | ||
| // Validation needs to be applied to each array item | ||
| var validatedSubValues = arrayValue.map(function (subValue) { return customConstraintMetadata.instance.validate(subValue, validationArguments); }); | ||
| var validationIsAsync = validatedSubValues | ||
| .some(function (validatedSubValue) { return utils_1.isPromise(validatedSubValue); }); | ||
| if (validationIsAsync) { | ||
| // Wrap plain values (if any) in promises, so that all are async | ||
| var asyncValidatedSubValues = validatedSubValues | ||
| .map(function (validatedSubValue) { return utils_1.isPromise(validatedSubValue) ? validatedSubValue : Promise.resolve(validatedSubValue); }); | ||
| var asyncValidationIsFinishedPromise = Promise.all(asyncValidatedSubValues) | ||
| .then(function (flatValidatedValues) { | ||
| var validationResult = flatValidatedValues.every(function (isValid) { return isValid; }); | ||
| if (!validationResult) { | ||
| var _a = _this.createValidationError(object, value, metadata, customConstraintMetadata), type = _a[0], message = _a[1]; | ||
| errorMap[type] = message; | ||
| } | ||
| }); | ||
| _this.awaitingPromises.push(promise); | ||
| _this.awaitingPromises.push(asyncValidationIsFinishedPromise); | ||
| return; | ||
| } | ||
| else { | ||
| if (!validatedValue) { | ||
| var _a = _this.createValidationError(object, value, metadata, customConstraintMetadata), type = _a[0], message = _a[1]; | ||
| errorMap[type] = message; | ||
| } | ||
| var validationResult = validatedSubValues.every(function (isValid) { return isValid; }); | ||
| if (!validationResult) { | ||
| var _b = _this.createValidationError(object, value, metadata, customConstraintMetadata), type = _b[0], message = _b[1]; | ||
| errorMap[type] = message; | ||
| } | ||
@@ -242,4 +272,6 @@ }); | ||
| var targetSchema = typeof metadata.target === "string" ? metadata.target : undefined; | ||
| if (value instanceof Array) { | ||
| value.forEach(function (subValue, index) { | ||
| if (value instanceof Array || value instanceof Set || value instanceof Map) { | ||
| // Treats Set as an array - as index of Set value is value itself and it is common case to have Object as value | ||
| var arrayLikeValue = value instanceof Set ? Array.from(value) : value; | ||
| arrayLikeValue.forEach(function (subValue, index) { | ||
| var validationError = _this.generateValidationError(value, subValue, index.toString()); | ||
@@ -250,18 +282,2 @@ errors.push(validationError); | ||
| } | ||
| else if (value instanceof Set) { | ||
| var index_1 = 0; | ||
| value.forEach(function (subValue) { | ||
| var validationError = _this.generateValidationError(value, subValue, index_1.toString()); | ||
| errors.push(validationError); | ||
| _this.execute(subValue, targetSchema, validationError.children); | ||
| ++index_1; | ||
| }); | ||
| } | ||
| else if (value instanceof Map) { | ||
| value.forEach(function (subValue, key) { | ||
| var validationError = _this.generateValidationError(value, subValue, key.toString()); | ||
| errors.push(validationError); | ||
| _this.execute(subValue, targetSchema, validationError.children); | ||
| }); | ||
| } | ||
| else if (value instanceof Object) { | ||
@@ -268,0 +284,0 @@ _this.execute(value, targetSchema, errors); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../src/validation/ValidationExecutor.ts"],"names":[],"mappings":"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","file":"ValidationExecutor.js","sourcesContent":["import {Validator} from \"./Validator\";\nimport {ValidationError} from \"./ValidationError\";\nimport {ValidationMetadata} from \"../metadata/ValidationMetadata\";\nimport {MetadataStorage} from \"../metadata/MetadataStorage\";\nimport {getFromContainer} from \"../container\";\nimport {ValidatorOptions} from \"./ValidatorOptions\";\nimport {ValidationTypes} from \"./ValidationTypes\";\nimport {ConstraintMetadata} from \"../metadata/ConstraintMetadata\";\nimport {ValidationArguments} from \"./ValidationArguments\";\nimport {ValidationUtils} from \"./ValidationUtils\";\nimport {isPromise} from \"../utils\";\n\n/**\n * Executes validation over given object.\n */\nexport class ValidationExecutor {\n\n // -------------------------------------------------------------------------\n // Properties\n // -------------------------------------------------------------------------\n\n awaitingPromises: Promise<any>[] = [];\n ignoreAsyncValidations: boolean = false;\n\n // -------------------------------------------------------------------------\n // Private Properties\n // -------------------------------------------------------------------------\n\n private metadataStorage = getFromContainer(MetadataStorage);\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(private validator: Validator,\n private validatorOptions?: ValidatorOptions) {\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n execute(object: Object, targetSchema: string, validationErrors: ValidationError[]) {\n /**\n * If there is no metadata registered it means possibly the dependencies are not flatterned and\n * more than one instance is used.\n *\n * TODO: This needs proper handling, forcing to use the same container or some other proper solution.\n */\n if (!this.metadataStorage.hasValidationMetaData) {\n console.warn(`No metadata found. There is more than once class-validator version installed probably. You need to flatten your dependencies.`);\n }\n\n const groups = this.validatorOptions ? this.validatorOptions.groups : undefined;\n const targetMetadatas = this.metadataStorage.getTargetValidationMetadatas(object.constructor, targetSchema, groups);\n const groupedMetadatas = this.metadataStorage.groupByPropertyName(targetMetadatas);\n\n if (this.validatorOptions && this.validatorOptions.forbidUnknownValues && !targetMetadatas.length) {\n const validationError = new ValidationError();\n\n if (!this.validatorOptions ||\n !this.validatorOptions.validationError ||\n this.validatorOptions.validationError.target === undefined ||\n this.validatorOptions.validationError.target === true)\n validationError.target = object;\n\n validationError.value = undefined;\n validationError.property = undefined;\n validationError.children = [];\n validationError.constraints = { unknownValue: \"an unknown value was passed to the validate function\" };\n\n validationErrors.push(validationError);\n\n return;\n }\n\n if (this.validatorOptions && this.validatorOptions.whitelist)\n this.whitelist(object, groupedMetadatas, validationErrors);\n\n // General validation\n Object.keys(groupedMetadatas).forEach(propertyName => {\n const value = (object as any)[propertyName];\n const definedMetadatas = groupedMetadatas[propertyName].filter(metadata => metadata.type === ValidationTypes.IS_DEFINED);\n const metadatas = groupedMetadatas[propertyName].filter(\n metadata => metadata.type !== ValidationTypes.IS_DEFINED && metadata.type !== ValidationTypes.WHITELIST);\n\n if (value instanceof Promise && metadatas.find(metadata => metadata.type === ValidationTypes.PROMISE_VALIDATION)) {\n this.awaitingPromises.push(value.then((resolvedValue) => {\n this.performValidations(object, resolvedValue, propertyName, definedMetadatas, metadatas, validationErrors);\n }));\n } else {\n this.performValidations(object, value, propertyName, definedMetadatas, metadatas, validationErrors);\n }\n });\n }\n\n whitelist(object: any,\n groupedMetadatas: { [propertyName: string]: ValidationMetadata[] },\n validationErrors: ValidationError[]) {\n let notAllowedProperties: string[] = [];\n\n Object.keys(object).forEach(propertyName => {\n // does this property have no metadata?\n if (!groupedMetadatas[propertyName] || groupedMetadatas[propertyName].length === 0)\n notAllowedProperties.push(propertyName);\n });\n\n if (notAllowedProperties.length > 0) {\n\n if (this.validatorOptions && this.validatorOptions.forbidNonWhitelisted) {\n\n // throw errors\n notAllowedProperties.forEach(property => {\n validationErrors.push({\n target: object, property, value: (object as any)[property], children: undefined,\n constraints: { [ValidationTypes.WHITELIST]: `property ${property} should not exist` }\n });\n });\n\n } else {\n\n // strip non allowed properties\n notAllowedProperties.forEach(property => delete (object as any)[property]);\n\n }\n }\n }\n\n stripEmptyErrors(errors: ValidationError[]) {\n return errors.filter(error => {\n if (error.children) {\n error.children = this.stripEmptyErrors(error.children);\n }\n\n if (Object.keys(error.constraints).length === 0) {\n if (error.children.length === 0) {\n return false;\n } else {\n delete error.constraints;\n }\n }\n\n return true;\n });\n }\n\n // -------------------------------------------------------------------------\n // Private Methods\n // -------------------------------------------------------------------------\n\n private performValidations (object: any,\n value: any, propertyName: string,\n definedMetadatas: ValidationMetadata[],\n metadatas: ValidationMetadata[],\n validationErrors: ValidationError[]) {\n\n const customValidationMetadatas = metadatas.filter(metadata => metadata.type === ValidationTypes.CUSTOM_VALIDATION);\n const nestedValidationMetadatas = metadatas.filter(metadata => metadata.type === ValidationTypes.NESTED_VALIDATION);\n const conditionalValidationMetadatas = metadatas.filter(metadata => metadata.type === ValidationTypes.CONDITIONAL_VALIDATION);\n\n const validationError = this.generateValidationError(object, value, propertyName);\n validationErrors.push(validationError);\n\n const canValidate = this.conditionalValidations(object, value, conditionalValidationMetadatas);\n if (!canValidate) {\n return;\n }\n\n // handle IS_DEFINED validation type the special way - it should work no matter skipUndefinedProperties/skipMissingProperties is set or not\n this.defaultValidations(object, value, definedMetadatas, validationError.constraints);\n\n if (value === undefined && this.validatorOptions && this.validatorOptions.skipUndefinedProperties === true) {\n return;\n }\n\n if (value === null && this.validatorOptions && this.validatorOptions.skipNullProperties === true) {\n return;\n }\n\n if ((value === null || value === undefined) && this.validatorOptions && this.validatorOptions.skipMissingProperties === true) {\n return;\n }\n\n this.defaultValidations(object, value, metadatas, validationError.constraints);\n this.customValidations(object, value, customValidationMetadatas, validationError.constraints);\n this.nestedValidations(value, nestedValidationMetadatas, validationError.children);\n\n this.mapContexts(object, value, metadatas, validationError);\n }\n\n private generateValidationError(object: Object, value: any, propertyName: string) {\n const validationError = new ValidationError();\n\n if (!this.validatorOptions ||\n !this.validatorOptions.validationError ||\n this.validatorOptions.validationError.target === undefined ||\n this.validatorOptions.validationError.target === true)\n validationError.target = object;\n\n if (!this.validatorOptions ||\n !this.validatorOptions.validationError ||\n this.validatorOptions.validationError.value === undefined ||\n this.validatorOptions.validationError.value === true)\n validationError.value = value;\n\n validationError.property = propertyName;\n validationError.children = [];\n validationError.constraints = {};\n\n return validationError;\n }\n\n private conditionalValidations(object: Object,\n value: any,\n metadatas: ValidationMetadata[]) {\n return metadatas\n .map(metadata => metadata.constraints[0](object, value))\n .reduce((resultA, resultB) => resultA && resultB, true);\n }\n\n private defaultValidations(object: Object,\n value: any,\n metadatas: ValidationMetadata[],\n errorMap: { [key: string]: string }) {\n return metadatas\n .filter(metadata => {\n if (metadata.each) {\n if (value instanceof Array) {\n return !value.every((subValue: any) => this.validator.validateValueByMetadata(subValue, metadata));\n }\n\n } else {\n return !this.validator.validateValueByMetadata(value, metadata);\n }\n })\n .forEach(metadata => {\n const [key, message] = this.createValidationError(object, value, metadata);\n errorMap[key] = message;\n });\n }\n\n private customValidations(object: Object,\n value: any,\n metadatas: ValidationMetadata[],\n errorMap: { [key: string]: string }) {\n\n metadatas.forEach(metadata => {\n getFromContainer(MetadataStorage)\n .getTargetValidatorConstraints(metadata.constraintCls)\n .forEach(customConstraintMetadata => {\n if (customConstraintMetadata.async && this.ignoreAsyncValidations)\n return;\n\n const validationArguments: ValidationArguments = {\n targetName: object.constructor ? (object.constructor as any).name : undefined,\n property: metadata.propertyName,\n object: object,\n value: value,\n constraints: metadata.constraints\n };\n const validatedValue = customConstraintMetadata.instance.validate(value, validationArguments);\n if (isPromise(validatedValue)) {\n const promise = validatedValue.then(isValid => {\n if (!isValid) {\n const [type, message] = this.createValidationError(object, value, metadata, customConstraintMetadata);\n errorMap[type] = message;\n }\n });\n this.awaitingPromises.push(promise);\n } else {\n if (!validatedValue) {\n const [type, message] = this.createValidationError(object, value, metadata, customConstraintMetadata);\n errorMap[type] = message;\n }\n }\n });\n });\n }\n\n private nestedPromiseValidations(value: any, metadatas: ValidationMetadata[], errors: ValidationError[]) {\n\n if (!(value instanceof Promise)) {\n return;\n }\n\n this.awaitingPromises.push(\n value.then(resolvedValue => this.nestedValidations(resolvedValue, metadatas, errors))\n );\n }\n\n private nestedValidations(value: any, metadatas: ValidationMetadata[], errors: ValidationError[]) {\n\n if (value === void 0) {\n return;\n }\n\n metadatas.forEach(metadata => {\n if (\n metadata.type !== ValidationTypes.NESTED_VALIDATION &&\n metadata.type !== ValidationTypes.PROMISE_VALIDATION\n ) {\n return;\n }\n\n const targetSchema = typeof metadata.target === \"string\" ? metadata.target as string : undefined;\n\n if (value instanceof Array) {\n value.forEach((subValue: any, index: number) => {\n const validationError = this.generateValidationError(value, subValue, index.toString());\n errors.push(validationError);\n\n this.execute(subValue, targetSchema, validationError.children);\n });\n\n } else if (value instanceof Set) {\n let index = 0;\n value.forEach((subValue: any) => {\n const validationError = this.generateValidationError(value, subValue, index.toString());\n errors.push(validationError);\n\n this.execute(subValue, targetSchema, validationError.children);\n\n ++index;\n });\n\n } else if (value instanceof Map) {\n value.forEach((subValue: any, key: any) => {\n const validationError = this.generateValidationError(value, subValue, key.toString());\n errors.push(validationError);\n\n this.execute(subValue, targetSchema, validationError.children);\n });\n\n } else if (value instanceof Object) {\n this.execute(value, targetSchema, errors);\n\n } else {\n const error = new ValidationError();\n error.value = value;\n error.property = metadata.propertyName;\n error.target = metadata.target;\n const [type, message] = this.createValidationError(metadata.target, value, metadata);\n error.constraints = {\n [type]: message\n };\n errors.push(error);\n }\n });\n }\n\n private mapContexts(object: Object,\n value: any,\n metadatas: ValidationMetadata[],\n error: ValidationError) {\n\n return metadatas\n .forEach(metadata => {\n if (metadata.context) {\n const type = this.getConstraintType(metadata);\n\n if (error.constraints[type]) {\n if (!error.contexts) {\n error.contexts = {};\n }\n\n error.contexts[type] = Object.assign((error.contexts[type] || {}), metadata.context);\n }\n }\n });\n }\n\n private createValidationError(object: Object,\n value: any,\n metadata: ValidationMetadata,\n customValidatorMetadata?: ConstraintMetadata): [string, string] {\n\n const targetName = object.constructor ? (object.constructor as any).name : undefined;\n const type = this.getConstraintType(metadata, customValidatorMetadata);\n const validationArguments: ValidationArguments = {\n targetName: targetName,\n property: metadata.propertyName,\n object: object,\n value: value,\n constraints: metadata.constraints\n };\n\n let message = metadata.message;\n if (!metadata.message &&\n (!this.validatorOptions || (this.validatorOptions && !this.validatorOptions.dismissDefaultMessages))) {\n if (customValidatorMetadata && customValidatorMetadata.instance.defaultMessage instanceof Function) {\n message = customValidatorMetadata.instance.defaultMessage(validationArguments);\n }\n\n if (!message)\n message = ValidationTypes.getMessage(type, metadata.each);\n }\n\n const messageString = ValidationUtils.replaceMessageSpecialTokens(message, validationArguments);\n return [type, messageString];\n }\n\n private getConstraintType(metadata: ValidationMetadata, customValidatorMetadata?: ConstraintMetadata): string {\n const type = customValidatorMetadata && customValidatorMetadata.name ? customValidatorMetadata.name : metadata.type;\n return type;\n }\n\n}\n"],"sourceRoot":".."} | ||
| {"version":3,"sources":["../../src/validation/ValidationExecutor.ts"],"names":[],"mappings":"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","file":"ValidationExecutor.js","sourcesContent":["import {Validator} from \"./Validator\";\nimport {ValidationError} from \"./ValidationError\";\nimport {ValidationMetadata} from \"../metadata/ValidationMetadata\";\nimport {MetadataStorage} from \"../metadata/MetadataStorage\";\nimport {getFromContainer} from \"../container\";\nimport {ValidatorOptions} from \"./ValidatorOptions\";\nimport {ValidationTypes} from \"./ValidationTypes\";\nimport {ConstraintMetadata} from \"../metadata/ConstraintMetadata\";\nimport {ValidationArguments} from \"./ValidationArguments\";\nimport {ValidationUtils} from \"./ValidationUtils\";\nimport {isPromise, convertToArray} from \"../utils\";\n\n/**\n * Executes validation over given object.\n */\nexport class ValidationExecutor {\n\n // -------------------------------------------------------------------------\n // Properties\n // -------------------------------------------------------------------------\n\n awaitingPromises: Promise<any>[] = [];\n ignoreAsyncValidations: boolean = false;\n\n // -------------------------------------------------------------------------\n // Private Properties\n // -------------------------------------------------------------------------\n\n private metadataStorage = getFromContainer(MetadataStorage);\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(private validator: Validator,\n private validatorOptions?: ValidatorOptions) {\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n execute(object: Object, targetSchema: string, validationErrors: ValidationError[]) {\n /**\n * If there is no metadata registered it means possibly the dependencies are not flatterned and\n * more than one instance is used.\n *\n * TODO: This needs proper handling, forcing to use the same container or some other proper solution.\n */\n if (!this.metadataStorage.hasValidationMetaData) {\n console.warn(`No metadata found. There is more than once class-validator version installed probably. You need to flatten your dependencies.`);\n }\n\n const groups = this.validatorOptions ? this.validatorOptions.groups : undefined;\n const targetMetadatas = this.metadataStorage.getTargetValidationMetadatas(object.constructor, targetSchema, groups);\n const groupedMetadatas = this.metadataStorage.groupByPropertyName(targetMetadatas);\n\n if (this.validatorOptions && this.validatorOptions.forbidUnknownValues && !targetMetadatas.length) {\n const validationError = new ValidationError();\n\n if (!this.validatorOptions ||\n !this.validatorOptions.validationError ||\n this.validatorOptions.validationError.target === undefined ||\n this.validatorOptions.validationError.target === true)\n validationError.target = object;\n\n validationError.value = undefined;\n validationError.property = undefined;\n validationError.children = [];\n validationError.constraints = { unknownValue: \"an unknown value was passed to the validate function\" };\n\n validationErrors.push(validationError);\n\n return;\n }\n\n if (this.validatorOptions && this.validatorOptions.whitelist)\n this.whitelist(object, groupedMetadatas, validationErrors);\n\n // General validation\n Object.keys(groupedMetadatas).forEach(propertyName => {\n const value = (object as any)[propertyName];\n const definedMetadatas = groupedMetadatas[propertyName].filter(metadata => metadata.type === ValidationTypes.IS_DEFINED);\n const metadatas = groupedMetadatas[propertyName].filter(\n metadata => metadata.type !== ValidationTypes.IS_DEFINED && metadata.type !== ValidationTypes.WHITELIST);\n\n if (value instanceof Promise && metadatas.find(metadata => metadata.type === ValidationTypes.PROMISE_VALIDATION)) {\n this.awaitingPromises.push(value.then((resolvedValue) => {\n this.performValidations(object, resolvedValue, propertyName, definedMetadatas, metadatas, validationErrors);\n }));\n } else {\n this.performValidations(object, value, propertyName, definedMetadatas, metadatas, validationErrors);\n }\n });\n }\n\n whitelist(object: any,\n groupedMetadatas: { [propertyName: string]: ValidationMetadata[] },\n validationErrors: ValidationError[]) {\n let notAllowedProperties: string[] = [];\n\n Object.keys(object).forEach(propertyName => {\n // does this property have no metadata?\n if (!groupedMetadatas[propertyName] || groupedMetadatas[propertyName].length === 0)\n notAllowedProperties.push(propertyName);\n });\n\n if (notAllowedProperties.length > 0) {\n\n if (this.validatorOptions && this.validatorOptions.forbidNonWhitelisted) {\n\n // throw errors\n notAllowedProperties.forEach(property => {\n validationErrors.push({\n target: object, property, value: (object as any)[property], children: undefined,\n constraints: { [ValidationTypes.WHITELIST]: `property ${property} should not exist` }\n });\n });\n\n } else {\n\n // strip non allowed properties\n notAllowedProperties.forEach(property => delete (object as any)[property]);\n\n }\n }\n }\n\n stripEmptyErrors(errors: ValidationError[]) {\n return errors.filter(error => {\n if (error.children) {\n error.children = this.stripEmptyErrors(error.children);\n }\n\n if (Object.keys(error.constraints).length === 0) {\n if (error.children.length === 0) {\n return false;\n } else {\n delete error.constraints;\n }\n }\n\n return true;\n });\n }\n\n // -------------------------------------------------------------------------\n // Private Methods\n // -------------------------------------------------------------------------\n\n private performValidations (object: any,\n value: any, propertyName: string,\n definedMetadatas: ValidationMetadata[],\n metadatas: ValidationMetadata[],\n validationErrors: ValidationError[]) {\n\n const customValidationMetadatas = metadatas.filter(metadata => metadata.type === ValidationTypes.CUSTOM_VALIDATION);\n const nestedValidationMetadatas = metadatas.filter(metadata => metadata.type === ValidationTypes.NESTED_VALIDATION);\n const conditionalValidationMetadatas = metadatas.filter(metadata => metadata.type === ValidationTypes.CONDITIONAL_VALIDATION);\n\n const validationError = this.generateValidationError(object, value, propertyName);\n validationErrors.push(validationError);\n\n const canValidate = this.conditionalValidations(object, value, conditionalValidationMetadatas);\n if (!canValidate) {\n return;\n }\n\n // handle IS_DEFINED validation type the special way - it should work no matter skipUndefinedProperties/skipMissingProperties is set or not\n this.defaultValidations(object, value, definedMetadatas, validationError.constraints);\n\n if (value === undefined && this.validatorOptions && this.validatorOptions.skipUndefinedProperties === true) {\n return;\n }\n\n if (value === null && this.validatorOptions && this.validatorOptions.skipNullProperties === true) {\n return;\n }\n\n if ((value === null || value === undefined) && this.validatorOptions && this.validatorOptions.skipMissingProperties === true) {\n return;\n }\n\n this.defaultValidations(object, value, metadatas, validationError.constraints);\n this.customValidations(object, value, customValidationMetadatas, validationError.constraints);\n this.nestedValidations(value, nestedValidationMetadatas, validationError.children);\n\n this.mapContexts(object, value, metadatas, validationError);\n }\n\n private generateValidationError(object: Object, value: any, propertyName: string) {\n const validationError = new ValidationError();\n\n if (!this.validatorOptions ||\n !this.validatorOptions.validationError ||\n this.validatorOptions.validationError.target === undefined ||\n this.validatorOptions.validationError.target === true)\n validationError.target = object;\n\n if (!this.validatorOptions ||\n !this.validatorOptions.validationError ||\n this.validatorOptions.validationError.value === undefined ||\n this.validatorOptions.validationError.value === true)\n validationError.value = value;\n\n validationError.property = propertyName;\n validationError.children = [];\n validationError.constraints = {};\n\n return validationError;\n }\n\n private conditionalValidations(object: Object,\n value: any,\n metadatas: ValidationMetadata[]) {\n return metadatas\n .map(metadata => metadata.constraints[0](object, value))\n .reduce((resultA, resultB) => resultA && resultB, true);\n }\n\n private defaultValidations(object: Object,\n value: any,\n metadatas: ValidationMetadata[],\n errorMap: { [key: string]: string }) {\n return metadatas\n .filter(metadata => {\n if (metadata.each) {\n if (value instanceof Array || value instanceof Set || value instanceof Map) {\n const arrayValue = convertToArray(value);\n return !arrayValue.every((subValue: any) => this.validator.validateValueByMetadata(subValue, metadata));\n }\n\n } else {\n return !this.validator.validateValueByMetadata(value, metadata);\n }\n })\n .forEach(metadata => {\n const [key, message] = this.createValidationError(object, value, metadata);\n errorMap[key] = message;\n });\n }\n\n private customValidations(object: Object,\n value: any,\n metadatas: ValidationMetadata[],\n errorMap: { [key: string]: string }) {\n\n metadatas.forEach(metadata => {\n getFromContainer(MetadataStorage)\n .getTargetValidatorConstraints(metadata.constraintCls)\n .forEach(customConstraintMetadata => {\n if (customConstraintMetadata.async && this.ignoreAsyncValidations)\n return;\n\n const validationArguments: ValidationArguments = {\n targetName: object.constructor ? (object.constructor as any).name : undefined,\n property: metadata.propertyName,\n object: object,\n value: value,\n constraints: metadata.constraints\n };\n\n if (!metadata.each || !(value instanceof Array || value instanceof Set || value instanceof Map)) {\n const validatedValue = customConstraintMetadata.instance.validate(value, validationArguments);\n if (isPromise(validatedValue)) {\n const promise = validatedValue.then(isValid => {\n if (!isValid) {\n const [type, message] = this.createValidationError(object, value, metadata, customConstraintMetadata);\n errorMap[type] = message;\n }\n });\n this.awaitingPromises.push(promise);\n } else {\n if (!validatedValue) {\n const [type, message] = this.createValidationError(object, value, metadata, customConstraintMetadata);\n errorMap[type] = message;\n }\n }\n\n return;\n }\n\n // convert set and map into array\n const arrayValue = convertToArray(value);\n // Validation needs to be applied to each array item\n const validatedSubValues = arrayValue.map((subValue: any) => customConstraintMetadata.instance.validate(subValue, validationArguments));\n const validationIsAsync = validatedSubValues\n .some((validatedSubValue: boolean | Promise<boolean>) => isPromise(validatedSubValue));\n\n if (validationIsAsync) {\n // Wrap plain values (if any) in promises, so that all are async\n const asyncValidatedSubValues = validatedSubValues\n .map((validatedSubValue: boolean | Promise<boolean>) => isPromise(validatedSubValue) ? validatedSubValue : Promise.resolve(validatedSubValue));\n const asyncValidationIsFinishedPromise = Promise.all(asyncValidatedSubValues)\n .then((flatValidatedValues: boolean[]) => {\n const validationResult = flatValidatedValues.every((isValid: boolean) => isValid);\n if (!validationResult) {\n const [type, message] = this.createValidationError(object, value, metadata, customConstraintMetadata);\n errorMap[type] = message;\n }\n });\n\n this.awaitingPromises.push(asyncValidationIsFinishedPromise);\n\n return;\n }\n\n const validationResult = validatedSubValues.every((isValid: boolean) => isValid);\n if (!validationResult) {\n const [type, message] = this.createValidationError(object, value, metadata, customConstraintMetadata);\n errorMap[type] = message;\n }\n });\n });\n }\n\n private nestedPromiseValidations(value: any, metadatas: ValidationMetadata[], errors: ValidationError[]) {\n\n if (!(value instanceof Promise)) {\n return;\n }\n\n this.awaitingPromises.push(\n value.then(resolvedValue => this.nestedValidations(resolvedValue, metadatas, errors))\n );\n }\n\n private nestedValidations(value: any, metadatas: ValidationMetadata[], errors: ValidationError[]) {\n\n if (value === void 0) {\n return;\n }\n\n metadatas.forEach(metadata => {\n if (\n metadata.type !== ValidationTypes.NESTED_VALIDATION &&\n metadata.type !== ValidationTypes.PROMISE_VALIDATION\n ) {\n return;\n }\n\n const targetSchema = typeof metadata.target === \"string\" ? metadata.target as string : undefined;\n\n if (value instanceof Array || value instanceof Set || value instanceof Map) {\n // Treats Set as an array - as index of Set value is value itself and it is common case to have Object as value\n const arrayLikeValue = value instanceof Set ? Array.from(value) : value;\n arrayLikeValue.forEach((subValue: any, index: any) => {\n const validationError = this.generateValidationError(value, subValue, index.toString());\n errors.push(validationError);\n\n this.execute(subValue, targetSchema, validationError.children);\n });\n\n } else if (value instanceof Object) {\n this.execute(value, targetSchema, errors);\n\n } else {\n const error = new ValidationError();\n error.value = value;\n error.property = metadata.propertyName;\n error.target = metadata.target;\n const [type, message] = this.createValidationError(metadata.target, value, metadata);\n error.constraints = {\n [type]: message\n };\n errors.push(error);\n }\n });\n }\n\n private mapContexts(object: Object,\n value: any,\n metadatas: ValidationMetadata[],\n error: ValidationError) {\n\n return metadatas\n .forEach(metadata => {\n if (metadata.context) {\n const type = this.getConstraintType(metadata);\n\n if (error.constraints[type]) {\n if (!error.contexts) {\n error.contexts = {};\n }\n\n error.contexts[type] = Object.assign((error.contexts[type] || {}), metadata.context);\n }\n }\n });\n }\n\n private createValidationError(object: Object,\n value: any,\n metadata: ValidationMetadata,\n customValidatorMetadata?: ConstraintMetadata): [string, string] {\n\n const targetName = object.constructor ? (object.constructor as any).name : undefined;\n const type = this.getConstraintType(metadata, customValidatorMetadata);\n const validationArguments: ValidationArguments = {\n targetName: targetName,\n property: metadata.propertyName,\n object: object,\n value: value,\n constraints: metadata.constraints\n };\n\n let message = metadata.message;\n if (!metadata.message &&\n (!this.validatorOptions || (this.validatorOptions && !this.validatorOptions.dismissDefaultMessages))) {\n if (customValidatorMetadata && customValidatorMetadata.instance.defaultMessage instanceof Function) {\n message = customValidatorMetadata.instance.defaultMessage(validationArguments);\n }\n\n if (!message)\n message = ValidationTypes.getMessage(type, metadata.each);\n }\n\n const messageString = ValidationUtils.replaceMessageSpecialTokens(message, validationArguments);\n return [type, messageString];\n }\n\n private getConstraintType(metadata: ValidationMetadata, customValidatorMetadata?: ConstraintMetadata): string {\n const type = customValidatorMetadata && customValidatorMetadata.name ? customValidatorMetadata.name : metadata.type;\n return type;\n }\n\n}\n"],"sourceRoot":".."} |
@@ -21,2 +21,5 @@ import { ValidationArguments } from "./ValidationArguments"; | ||
| static IS_NUMBER: string; | ||
| static IS_LATLONG: string; | ||
| static IS_LATITUDE: string; | ||
| static IS_LONGITUDE: string; | ||
| static IS_STRING: string; | ||
@@ -59,2 +62,4 @@ static IS_DATE_STRING: string; | ||
| static IS_JSON: string; | ||
| static IS_OBJECT: string; | ||
| static IS_NOT_EMPTY_OBJECT: string; | ||
| static IS_LOWERCASE: string; | ||
@@ -61,0 +66,0 @@ static IS_MOBILE_PHONE: string; |
@@ -128,2 +128,6 @@ "use strict"; | ||
| return eachPrefix + "$property must be a json string"; | ||
| case this.IS_OBJECT: | ||
| return eachPrefix + "$property must be an object"; | ||
| case this.IS_NOT_EMPTY_OBJECT: | ||
| return eachPrefix + "$property must be a non-empty object"; | ||
| case this.IS_LOWERCASE: | ||
@@ -139,2 +143,8 @@ return eachPrefix + "$property must be a lowercase string"; | ||
| return eachPrefix + "$property must be a valid ISO31661 Alpha3 code"; | ||
| case this.IS_LATLONG: | ||
| return eachPrefix + "$property must be a latitude,longitude string"; | ||
| case this.IS_LATITUDE: | ||
| return eachPrefix + "$property must be a latitude string or number"; | ||
| case this.IS_LONGITUDE: | ||
| return eachPrefix + "$property must be a longitude string or number"; | ||
| case this.IS_MONGO_ID: | ||
@@ -215,2 +225,5 @@ return eachPrefix + "$property must be a mongodb id"; | ||
| ValidationTypes.IS_NUMBER = "isNumber"; | ||
| ValidationTypes.IS_LATLONG = "isLatLong"; | ||
| ValidationTypes.IS_LATITUDE = "isLatitude"; | ||
| ValidationTypes.IS_LONGITUDE = "isLongitude"; | ||
| ValidationTypes.IS_STRING = "isString"; | ||
@@ -257,2 +270,4 @@ ValidationTypes.IS_DATE_STRING = "isDateString"; | ||
| ValidationTypes.IS_JSON = "isJson"; | ||
| ValidationTypes.IS_OBJECT = "isObject"; | ||
| ValidationTypes.IS_NOT_EMPTY_OBJECT = "isNotEmptyObject"; | ||
| ValidationTypes.IS_LOWERCASE = "isLowercase"; | ||
@@ -259,0 +274,0 @@ ValidationTypes.IS_MOBILE_PHONE = "isMobilePhone"; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../src/validation/ValidationTypes.ts"],"names":[],"mappings":"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","file":"ValidationTypes.js","sourcesContent":["import { ValidationArguments } from \"./ValidationArguments\";\n\n/**\n * Validation types.\n */\nexport class ValidationTypes {\n\n /* system */\n static CUSTOM_VALIDATION = \"customValidation\";\n static NESTED_VALIDATION = \"nestedValidation\";\n static PROMISE_VALIDATION = \"promiseValidation\";\n static CONDITIONAL_VALIDATION = \"conditionalValidation\";\n static WHITELIST = \"whitelistValidation\";\n\n /* common checkers */\n static IS_DEFINED = \"isDefined\";\n static EQUALS = \"equals\";\n static NOT_EQUALS = \"notEquals\";\n static IS_EMPTY = \"isEmpty\";\n static IS_NOT_EMPTY = \"isNotEmpty\";\n static IS_IN = \"isIn\";\n static IS_NOT_IN = \"isNotIn\";\n\n /* type checkers */\n static IS_BOOLEAN = \"isBoolean\";\n static IS_DATE = \"isDate\";\n static IS_NUMBER = \"isNumber\";\n static IS_STRING = \"isString\";\n static IS_DATE_STRING = \"isDateString\";\n static IS_ARRAY = \"isArray\";\n static IS_INT = \"isInt\";\n static IS_ENUM = \"isEnum\";\n\n /* number checkers */\n static IS_DIVISIBLE_BY = \"isDivisibleBy\";\n static IS_POSITIVE = \"isPositive\";\n static IS_NEGATIVE = \"isNegative\";\n static MIN = \"min\";\n static MAX = \"max\";\n\n /* date checkers */\n static MIN_DATE = \"minDate\";\n static MAX_DATE = \"maxDate\";\n\n /* string-as-type checkers */\n static IS_BOOLEAN_STRING = \"isBooleanString\";\n static IS_NUMBER_STRING = \"isNumberString\";\n\n /* string checkers */\n static CONTAINS = \"contains\";\n static NOT_CONTAINS = \"notContains\";\n static IS_ALPHA = \"isAlpha\";\n static IS_ALPHANUMERIC = \"isAlphanumeric\";\n static IS_DECIMAL = \"isDecimal\";\n static IS_ASCII = \"isAscii\";\n static IS_BASE64 = \"isBase64\";\n static IS_BYTE_LENGTH = \"isByteLength\";\n static IS_CREDIT_CARD = \"isCreditCard\";\n static IS_CURRENCY = \"isCurrency\";\n static IS_EMAIL = \"isEmail\";\n static IS_FQDN = \"isFqdn\";\n static IS_FULL_WIDTH = \"isFullWidth\";\n static IS_HALF_WIDTH = \"isHalfWidth\";\n static IS_VARIABLE_WIDTH = \"isVariableWidth\";\n static IS_HEX_COLOR = \"isHexColor\";\n static IS_HEXADECIMAL = \"isHexadecimal\";\n static IS_IP = \"isIp\";\n static IS_PORT = \"isPort\";\n static IS_ISBN = \"isIsbn\";\n static IS_ISIN = \"isIsin\";\n static IS_ISO8601 = \"isIso8601\";\n static IS_JSON = \"isJson\";\n static IS_LOWERCASE = \"isLowercase\";\n static IS_MOBILE_PHONE = \"isMobilePhone\";\n static IS_PHONE_NUMBER = \"isPhoneNumber\";\n static IS_ISO31661_ALPHA_2 = \"isISO31661Alpha2\";\n static IS_ISO31661_ALPHA_3 = \"isISO31661Alpha3\";\n static IS_MONGO_ID = \"isMongoId\";\n static IS_MULTIBYTE = \"isMultibyte\";\n static IS_SURROGATE_PAIR = \"isSurrogatePair\";\n static IS_URL = \"isUrl\";\n static IS_UUID = \"isUuid\";\n static LENGTH = \"length\";\n static IS_UPPERCASE = \"isUppercase\";\n static MIN_LENGTH = \"minLength\";\n static MAX_LENGTH = \"maxLength\";\n static MATCHES = \"matches\";\n static IS_MILITARY_TIME = \"isMilitaryTime\";\n\n /* array checkers */\n static ARRAY_CONTAINS = \"arrayContains\";\n static ARRAY_NOT_CONTAINS = \"arrayNotContains\";\n static ARRAY_NOT_EMPTY = \"arrayNotEmpty\";\n static ARRAY_MIN_SIZE = \"arrayMinSize\";\n static ARRAY_MAX_SIZE = \"arrayMaxSize\";\n static ARRAY_UNIQUE = \"arrayUnique\";\n\n /* object chekers */\n static IS_INSTANCE = \"isInstance\";\n\n /**\n * Checks if validation type is valid.\n */\n static isValid(type: string) {\n return type !== \"isValid\" &&\n type !== \"getMessage\" &&\n Object.keys(this).map(key => (this as any)[key]).indexOf(type) !== -1;\n }\n\n /**\n * Gets default validation error message for the given validation type.\n */\n static getMessage(type: string, isEach: boolean): string | ((args: ValidationArguments) => string) {\n const eachPrefix = isEach ? \"each value in \" : \"\";\n switch (type) {\n\n /* system chceck */\n case this.NESTED_VALIDATION:\n return eachPrefix + \"nested property $property must be either object or array\";\n /* common checkers */\n case this.IS_DEFINED:\n return eachPrefix + \"$property should not be null or undefined\";\n case this.EQUALS:\n return eachPrefix + \"$property must be equal to $constraint1\";\n case this.NOT_EQUALS:\n return eachPrefix + \"$property should not be equal to $constraint1\";\n case this.IS_EMPTY:\n return eachPrefix + \"$property must be empty\";\n case this.IS_NOT_EMPTY:\n return eachPrefix + \"$property should not be empty\";\n case this.IS_IN:\n return eachPrefix + \"$property must be one of the following values: $constraint1\";\n case this.IS_NOT_IN:\n return eachPrefix + \"$property should not be one of the following values: $constraint1\";\n case this.IS_PORT:\n return eachPrefix + \"$property must be a port\";\n\n /* type checkers */\n case this.IS_BOOLEAN:\n return eachPrefix + \"$property must be a boolean value\";\n case this.IS_DATE:\n return eachPrefix + \"$property must be a Date instance\";\n case this.IS_NUMBER:\n return eachPrefix + \"$property must be a number\";\n case this.IS_INT:\n return eachPrefix + \"$property must be an integer number\";\n case this.IS_STRING:\n return eachPrefix + \"$property must be a string\";\n case this.IS_DATE_STRING:\n return eachPrefix + \"$property must be a ISOString\";\n case this.IS_ARRAY:\n return eachPrefix + \"$property must be an array\";\n case this.IS_ENUM:\n return eachPrefix + \"$property must be a valid enum value\";\n\n /* number checkers */\n case this.IS_DIVISIBLE_BY:\n return eachPrefix + \"$property must be divisible by $constraint1\";\n case this.IS_POSITIVE:\n return eachPrefix + \"$property must be a positive number\";\n case this.IS_NEGATIVE:\n return eachPrefix + \"$property must be a negative number\";\n case this.MIN:\n return eachPrefix + \"$property must not be less than $constraint1\";\n case this.MAX:\n return eachPrefix + \"$property must not be greater than $constraint1\";\n\n /* date checkers */\n case this.MIN_DATE:\n return \"minimal allowed date for \" + eachPrefix + \"$property is $constraint1\";\n case this.MAX_DATE:\n return \"maximal allowed date for \" + eachPrefix + \"$property is $constraint1\";\n\n /* string-as-type checkers */\n case this.IS_BOOLEAN_STRING:\n return eachPrefix + \"$property must be a boolean string\";\n case this.IS_NUMBER_STRING:\n return eachPrefix + \"$property must be a number string\";\n\n /* string checkers */\n case this.CONTAINS:\n return eachPrefix + \"$property must contain a $constraint1 string\";\n case this.NOT_CONTAINS:\n return eachPrefix + \"$property should not contain a $constraint1 string\";\n case this.IS_ALPHA:\n return eachPrefix + \"$property must contain only letters (a-zA-Z)\";\n case this.IS_ALPHANUMERIC:\n return eachPrefix + \"$property must contain only letters and numbers\";\n case this.IS_DECIMAL:\n return eachPrefix + \"$property is not a valid decimal number.\";\n case this.IS_ASCII:\n return eachPrefix + \"$property must contain only ASCII characters\";\n case this.IS_BASE64:\n return eachPrefix + \"$property must be base64 encoded\";\n case this.IS_BYTE_LENGTH:\n return eachPrefix + \"$property's byte length must fall into ($constraint1, $constraint2) range\";\n case this.IS_CREDIT_CARD:\n return eachPrefix + \"$property must be a credit card\";\n case this.IS_CURRENCY:\n return eachPrefix + \"$property must be a currency\";\n case this.IS_EMAIL:\n return eachPrefix + \"$property must be an email\";\n case this.IS_FQDN:\n return eachPrefix + \"$property must be a valid domain name\";\n case this.IS_FULL_WIDTH:\n return eachPrefix + \"$property must contain a full-width characters\";\n case this.IS_HALF_WIDTH:\n return eachPrefix + \"$property must contain a half-width characters\";\n case this.IS_VARIABLE_WIDTH:\n return eachPrefix + \"$property must contain a full-width and half-width characters\";\n case this.IS_HEX_COLOR:\n return eachPrefix + \"$property must be a hexadecimal color\";\n case this.IS_HEXADECIMAL:\n return eachPrefix + \"$property must be a hexadecimal number\";\n case this.IS_IP:\n return eachPrefix + \"$property must be an ip address\";\n case this.IS_ISBN:\n return eachPrefix + \"$property must be an ISBN\";\n case this.IS_ISIN:\n return eachPrefix + \"$property must be an ISIN (stock/security identifier)\";\n case this.IS_ISO8601:\n return eachPrefix + \"$property must be a valid ISO 8601 date string\";\n case this.IS_JSON:\n return eachPrefix + \"$property must be a json string\";\n case this.IS_LOWERCASE:\n return eachPrefix + \"$property must be a lowercase string\";\n case this.IS_MOBILE_PHONE:\n return eachPrefix + \"$property must be a phone number\";\n case this.IS_PHONE_NUMBER:\n return eachPrefix + \"$property must be a valid phone number\";\n case this.IS_ISO31661_ALPHA_2:\n return eachPrefix + \"$property must be a valid ISO31661 Alpha2 code\";\n case this.IS_ISO31661_ALPHA_3:\n return eachPrefix + \"$property must be a valid ISO31661 Alpha3 code\";\n case this.IS_MONGO_ID:\n return eachPrefix + \"$property must be a mongodb id\";\n case this.IS_MULTIBYTE:\n return eachPrefix + \"$property must contain one or more multibyte chars\";\n case this.IS_SURROGATE_PAIR:\n return eachPrefix + \"$property must contain any surrogate pairs chars\";\n case this.IS_URL:\n return eachPrefix + \"$property must be an URL address\";\n case this.IS_UUID:\n return eachPrefix + \"$property must be an UUID\";\n case this.IS_UPPERCASE:\n return eachPrefix + \"$property must be uppercase\";\n case this.LENGTH:\n return (args: ValidationArguments) => {\n const isMinLength = args.constraints[0] !== null && args.constraints[0] !== undefined;\n const isMaxLength = args.constraints[1] !== null && args.constraints[1] !== undefined;\n if (isMinLength && (!args.value || args.value.length < args.constraints[0])) {\n return eachPrefix + \"$property must be longer than or equal to $constraint1 characters\";\n } else if (isMaxLength && (args.value.length > args.constraints[1])) {\n return eachPrefix + \"$property must be shorter than or equal to $constraint2 characters\";\n }\n return eachPrefix + \"$property must be longer than or equal to $constraint1 and shorter than or equal to $constraint2 characters\";\n };\n case this.MIN_LENGTH:\n return eachPrefix + \"$property must be longer than or equal to $constraint1 characters\";\n case this.MAX_LENGTH:\n return eachPrefix + \"$property must be shorter than or equal to $constraint1 characters\";\n case this.MATCHES:\n return eachPrefix + \"$property must match $constraint1 regular expression\";\n case this.IS_MILITARY_TIME:\n return eachPrefix + \"$property must be a valid representation of military time in the format HH:MM\";\n \n /* array checkers */\n case this.ARRAY_CONTAINS:\n return eachPrefix + \"$property must contain $constraint1 values\";\n case this.ARRAY_NOT_CONTAINS:\n return eachPrefix + \"$property should not contain $constraint1 values\";\n case this.ARRAY_NOT_EMPTY:\n return eachPrefix + \"$property should not be empty\";\n case this.ARRAY_MIN_SIZE:\n return eachPrefix + \"$property must contain at least $constraint1 elements\";\n case this.ARRAY_MAX_SIZE:\n return eachPrefix + \"$property must contain not more than $constraint1 elements\";\n case this.ARRAY_UNIQUE:\n return eachPrefix + \"All $property's elements must be unique\";\n\n case this.IS_INSTANCE:\n return (args: ValidationArguments) => {\n if (args.constraints[0]) {\n return eachPrefix + `$property must be an instance of ${args.constraints[0].name}`;\n } else {\n return eachPrefix + `${this.IS_INSTANCE} decorator expects and object as value, but got falsy value.`;\n }\n };\n }\n\n return \"\";\n }\n\n}\n"],"sourceRoot":".."} | ||
| {"version":3,"sources":["../../src/validation/ValidationTypes.ts"],"names":[],"mappings":"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","file":"ValidationTypes.js","sourcesContent":["import { ValidationArguments } from \"./ValidationArguments\";\n\n/**\n * Validation types.\n */\nexport class ValidationTypes {\n\n /* system */\n static CUSTOM_VALIDATION = \"customValidation\";\n static NESTED_VALIDATION = \"nestedValidation\";\n static PROMISE_VALIDATION = \"promiseValidation\";\n static CONDITIONAL_VALIDATION = \"conditionalValidation\";\n static WHITELIST = \"whitelistValidation\";\n\n /* common checkers */\n static IS_DEFINED = \"isDefined\";\n static EQUALS = \"equals\";\n static NOT_EQUALS = \"notEquals\";\n static IS_EMPTY = \"isEmpty\";\n static IS_NOT_EMPTY = \"isNotEmpty\";\n static IS_IN = \"isIn\";\n static IS_NOT_IN = \"isNotIn\";\n\n /* type checkers */\n static IS_BOOLEAN = \"isBoolean\";\n static IS_DATE = \"isDate\";\n static IS_NUMBER = \"isNumber\";\n static IS_LATLONG = \"isLatLong\";\n static IS_LATITUDE = \"isLatitude\";\n static IS_LONGITUDE = \"isLongitude\";\n static IS_STRING = \"isString\";\n static IS_DATE_STRING = \"isDateString\";\n static IS_ARRAY = \"isArray\";\n static IS_INT = \"isInt\";\n static IS_ENUM = \"isEnum\";\n\n /* number checkers */\n static IS_DIVISIBLE_BY = \"isDivisibleBy\";\n static IS_POSITIVE = \"isPositive\";\n static IS_NEGATIVE = \"isNegative\";\n static MIN = \"min\";\n static MAX = \"max\";\n\n /* date checkers */\n static MIN_DATE = \"minDate\";\n static MAX_DATE = \"maxDate\";\n\n /* string-as-type checkers */\n static IS_BOOLEAN_STRING = \"isBooleanString\";\n static IS_NUMBER_STRING = \"isNumberString\";\n\n /* string checkers */\n static CONTAINS = \"contains\";\n static NOT_CONTAINS = \"notContains\";\n static IS_ALPHA = \"isAlpha\";\n static IS_ALPHANUMERIC = \"isAlphanumeric\";\n static IS_DECIMAL = \"isDecimal\";\n static IS_ASCII = \"isAscii\";\n static IS_BASE64 = \"isBase64\";\n static IS_BYTE_LENGTH = \"isByteLength\";\n static IS_CREDIT_CARD = \"isCreditCard\";\n static IS_CURRENCY = \"isCurrency\";\n static IS_EMAIL = \"isEmail\";\n static IS_FQDN = \"isFqdn\";\n static IS_FULL_WIDTH = \"isFullWidth\";\n static IS_HALF_WIDTH = \"isHalfWidth\";\n static IS_VARIABLE_WIDTH = \"isVariableWidth\";\n static IS_HEX_COLOR = \"isHexColor\";\n static IS_HEXADECIMAL = \"isHexadecimal\";\n static IS_IP = \"isIp\";\n static IS_PORT = \"isPort\";\n static IS_ISBN = \"isIsbn\";\n static IS_ISIN = \"isIsin\";\n static IS_ISO8601 = \"isIso8601\";\n static IS_JSON = \"isJson\";\n static IS_OBJECT = \"isObject\";\n static IS_NOT_EMPTY_OBJECT = \"isNotEmptyObject\";\n static IS_LOWERCASE = \"isLowercase\";\n static IS_MOBILE_PHONE = \"isMobilePhone\";\n static IS_PHONE_NUMBER = \"isPhoneNumber\";\n static IS_ISO31661_ALPHA_2 = \"isISO31661Alpha2\";\n static IS_ISO31661_ALPHA_3 = \"isISO31661Alpha3\";\n static IS_MONGO_ID = \"isMongoId\";\n static IS_MULTIBYTE = \"isMultibyte\";\n static IS_SURROGATE_PAIR = \"isSurrogatePair\";\n static IS_URL = \"isUrl\";\n static IS_UUID = \"isUuid\";\n static LENGTH = \"length\";\n static IS_UPPERCASE = \"isUppercase\";\n static MIN_LENGTH = \"minLength\";\n static MAX_LENGTH = \"maxLength\";\n static MATCHES = \"matches\";\n static IS_MILITARY_TIME = \"isMilitaryTime\";\n\n /* array checkers */\n static ARRAY_CONTAINS = \"arrayContains\";\n static ARRAY_NOT_CONTAINS = \"arrayNotContains\";\n static ARRAY_NOT_EMPTY = \"arrayNotEmpty\";\n static ARRAY_MIN_SIZE = \"arrayMinSize\";\n static ARRAY_MAX_SIZE = \"arrayMaxSize\";\n static ARRAY_UNIQUE = \"arrayUnique\";\n\n /* object chekers */\n static IS_INSTANCE = \"isInstance\";\n\n /**\n * Checks if validation type is valid.\n */\n static isValid(type: string) {\n return type !== \"isValid\" &&\n type !== \"getMessage\" &&\n Object.keys(this).map(key => (this as any)[key]).indexOf(type) !== -1;\n }\n\n /**\n * Gets default validation error message for the given validation type.\n */\n static getMessage(type: string, isEach: boolean): string | ((args: ValidationArguments) => string) {\n const eachPrefix = isEach ? \"each value in \" : \"\";\n switch (type) {\n\n /* system chceck */\n case this.NESTED_VALIDATION:\n return eachPrefix + \"nested property $property must be either object or array\";\n /* common checkers */\n case this.IS_DEFINED:\n return eachPrefix + \"$property should not be null or undefined\";\n case this.EQUALS:\n return eachPrefix + \"$property must be equal to $constraint1\";\n case this.NOT_EQUALS:\n return eachPrefix + \"$property should not be equal to $constraint1\";\n case this.IS_EMPTY:\n return eachPrefix + \"$property must be empty\";\n case this.IS_NOT_EMPTY:\n return eachPrefix + \"$property should not be empty\";\n case this.IS_IN:\n return eachPrefix + \"$property must be one of the following values: $constraint1\";\n case this.IS_NOT_IN:\n return eachPrefix + \"$property should not be one of the following values: $constraint1\";\n case this.IS_PORT:\n return eachPrefix + \"$property must be a port\";\n\n /* type checkers */\n case this.IS_BOOLEAN:\n return eachPrefix + \"$property must be a boolean value\";\n case this.IS_DATE:\n return eachPrefix + \"$property must be a Date instance\";\n case this.IS_NUMBER:\n return eachPrefix + \"$property must be a number\";\n case this.IS_INT:\n return eachPrefix + \"$property must be an integer number\";\n case this.IS_STRING:\n return eachPrefix + \"$property must be a string\";\n case this.IS_DATE_STRING:\n return eachPrefix + \"$property must be a ISOString\";\n case this.IS_ARRAY:\n return eachPrefix + \"$property must be an array\";\n case this.IS_ENUM:\n return eachPrefix + \"$property must be a valid enum value\";\n\n /* number checkers */\n case this.IS_DIVISIBLE_BY:\n return eachPrefix + \"$property must be divisible by $constraint1\";\n case this.IS_POSITIVE:\n return eachPrefix + \"$property must be a positive number\";\n case this.IS_NEGATIVE:\n return eachPrefix + \"$property must be a negative number\";\n case this.MIN:\n return eachPrefix + \"$property must not be less than $constraint1\";\n case this.MAX:\n return eachPrefix + \"$property must not be greater than $constraint1\";\n\n /* date checkers */\n case this.MIN_DATE:\n return \"minimal allowed date for \" + eachPrefix + \"$property is $constraint1\";\n case this.MAX_DATE:\n return \"maximal allowed date for \" + eachPrefix + \"$property is $constraint1\";\n\n /* string-as-type checkers */\n case this.IS_BOOLEAN_STRING:\n return eachPrefix + \"$property must be a boolean string\";\n case this.IS_NUMBER_STRING:\n return eachPrefix + \"$property must be a number string\";\n\n /* string checkers */\n case this.CONTAINS:\n return eachPrefix + \"$property must contain a $constraint1 string\";\n case this.NOT_CONTAINS:\n return eachPrefix + \"$property should not contain a $constraint1 string\";\n case this.IS_ALPHA:\n return eachPrefix + \"$property must contain only letters (a-zA-Z)\";\n case this.IS_ALPHANUMERIC:\n return eachPrefix + \"$property must contain only letters and numbers\";\n case this.IS_DECIMAL:\n return eachPrefix + \"$property is not a valid decimal number.\";\n case this.IS_ASCII:\n return eachPrefix + \"$property must contain only ASCII characters\";\n case this.IS_BASE64:\n return eachPrefix + \"$property must be base64 encoded\";\n case this.IS_BYTE_LENGTH:\n return eachPrefix + \"$property's byte length must fall into ($constraint1, $constraint2) range\";\n case this.IS_CREDIT_CARD:\n return eachPrefix + \"$property must be a credit card\";\n case this.IS_CURRENCY:\n return eachPrefix + \"$property must be a currency\";\n case this.IS_EMAIL:\n return eachPrefix + \"$property must be an email\";\n case this.IS_FQDN:\n return eachPrefix + \"$property must be a valid domain name\";\n case this.IS_FULL_WIDTH:\n return eachPrefix + \"$property must contain a full-width characters\";\n case this.IS_HALF_WIDTH:\n return eachPrefix + \"$property must contain a half-width characters\";\n case this.IS_VARIABLE_WIDTH:\n return eachPrefix + \"$property must contain a full-width and half-width characters\";\n case this.IS_HEX_COLOR:\n return eachPrefix + \"$property must be a hexadecimal color\";\n case this.IS_HEXADECIMAL:\n return eachPrefix + \"$property must be a hexadecimal number\";\n case this.IS_IP:\n return eachPrefix + \"$property must be an ip address\";\n case this.IS_ISBN:\n return eachPrefix + \"$property must be an ISBN\";\n case this.IS_ISIN:\n return eachPrefix + \"$property must be an ISIN (stock/security identifier)\";\n case this.IS_ISO8601:\n return eachPrefix + \"$property must be a valid ISO 8601 date string\";\n case this.IS_JSON:\n return eachPrefix + \"$property must be a json string\";\n case this.IS_OBJECT:\n return eachPrefix + \"$property must be an object\";\n case this.IS_NOT_EMPTY_OBJECT:\n return eachPrefix + \"$property must be a non-empty object\";\n case this.IS_LOWERCASE:\n return eachPrefix + \"$property must be a lowercase string\";\n case this.IS_MOBILE_PHONE:\n return eachPrefix + \"$property must be a phone number\";\n case this.IS_PHONE_NUMBER:\n return eachPrefix + \"$property must be a valid phone number\";\n case this.IS_ISO31661_ALPHA_2:\n return eachPrefix + \"$property must be a valid ISO31661 Alpha2 code\";\n case this.IS_ISO31661_ALPHA_3:\n return eachPrefix + \"$property must be a valid ISO31661 Alpha3 code\";\n case this.IS_LATLONG:\n return eachPrefix + \"$property must be a latitude,longitude string\";\n case this.IS_LATITUDE:\n return eachPrefix + \"$property must be a latitude string or number\";\n case this.IS_LONGITUDE:\n return eachPrefix + \"$property must be a longitude string or number\";\n case this.IS_MONGO_ID:\n return eachPrefix + \"$property must be a mongodb id\";\n case this.IS_MULTIBYTE:\n return eachPrefix + \"$property must contain one or more multibyte chars\";\n case this.IS_SURROGATE_PAIR:\n return eachPrefix + \"$property must contain any surrogate pairs chars\";\n case this.IS_URL:\n return eachPrefix + \"$property must be an URL address\";\n case this.IS_UUID:\n return eachPrefix + \"$property must be an UUID\";\n case this.IS_UPPERCASE:\n return eachPrefix + \"$property must be uppercase\";\n case this.LENGTH:\n return (args: ValidationArguments) => {\n const isMinLength = args.constraints[0] !== null && args.constraints[0] !== undefined;\n const isMaxLength = args.constraints[1] !== null && args.constraints[1] !== undefined;\n if (isMinLength && (!args.value || args.value.length < args.constraints[0])) {\n return eachPrefix + \"$property must be longer than or equal to $constraint1 characters\";\n } else if (isMaxLength && (args.value.length > args.constraints[1])) {\n return eachPrefix + \"$property must be shorter than or equal to $constraint2 characters\";\n }\n return eachPrefix + \"$property must be longer than or equal to $constraint1 and shorter than or equal to $constraint2 characters\";\n };\n case this.MIN_LENGTH:\n return eachPrefix + \"$property must be longer than or equal to $constraint1 characters\";\n case this.MAX_LENGTH:\n return eachPrefix + \"$property must be shorter than or equal to $constraint1 characters\";\n case this.MATCHES:\n return eachPrefix + \"$property must match $constraint1 regular expression\";\n case this.IS_MILITARY_TIME:\n return eachPrefix + \"$property must be a valid representation of military time in the format HH:MM\";\n \n /* array checkers */\n case this.ARRAY_CONTAINS:\n return eachPrefix + \"$property must contain $constraint1 values\";\n case this.ARRAY_NOT_CONTAINS:\n return eachPrefix + \"$property should not contain $constraint1 values\";\n case this.ARRAY_NOT_EMPTY:\n return eachPrefix + \"$property should not be empty\";\n case this.ARRAY_MIN_SIZE:\n return eachPrefix + \"$property must contain at least $constraint1 elements\";\n case this.ARRAY_MAX_SIZE:\n return eachPrefix + \"$property must contain not more than $constraint1 elements\";\n case this.ARRAY_UNIQUE:\n return eachPrefix + \"All $property's elements must be unique\";\n\n case this.IS_INSTANCE:\n return (args: ValidationArguments) => {\n if (args.constraints[0]) {\n return eachPrefix + `$property must be an instance of ${args.constraints[0].name}`;\n } else {\n return eachPrefix + `${this.IS_INSTANCE} decorator expects and object as value, but got falsy value.`;\n }\n };\n }\n\n return \"\";\n }\n\n}\n"],"sourceRoot":".."} |
@@ -12,2 +12,3 @@ /// <reference types="validator" /> | ||
| private libPhoneNumber; | ||
| private _isEmptyObject; | ||
| /** | ||
@@ -50,87 +51,99 @@ * Performs validation of the given object based on decorators or validation schema. | ||
| */ | ||
| isDefined(value: any): boolean; | ||
| isDefined(value: unknown): boolean; | ||
| /** | ||
| * Checks if value matches ("===") the comparison. | ||
| */ | ||
| equals(value: any, comparison: any): boolean; | ||
| equals(value: unknown, comparison: unknown): boolean; | ||
| /** | ||
| * Checks if value does not match ("!==") the comparison. | ||
| */ | ||
| notEquals(value: any, comparison: any): boolean; | ||
| notEquals(value: unknown, comparison: unknown): boolean; | ||
| /** | ||
| * Checks if given value is empty (=== '', === null, === undefined). | ||
| */ | ||
| isEmpty(value: any): boolean; | ||
| isEmpty(value: unknown): boolean; | ||
| /** | ||
| * Checks if given value is not empty (!== '', !== null, !== undefined). | ||
| */ | ||
| isNotEmpty(value: any): boolean; | ||
| isNotEmpty(value: unknown): boolean; | ||
| /** | ||
| * Checks if given value is in a array of allowed values. | ||
| */ | ||
| isIn(value: any, possibleValues: any[]): boolean; | ||
| isIn(value: unknown, possibleValues: unknown[]): boolean; | ||
| /** | ||
| * Checks if given value not in a array of allowed values. | ||
| */ | ||
| isNotIn(value: any, possibleValues: any[]): boolean; | ||
| isNotIn(value: unknown, possibleValues: unknown[]): boolean; | ||
| /** | ||
| * Checks if a given value is a real boolean. | ||
| */ | ||
| isBoolean(value: any): boolean; | ||
| isBoolean(value: unknown): boolean; | ||
| /** | ||
| * Checks if a given value is a latitude. | ||
| */ | ||
| isLatLong(value: unknown): boolean; | ||
| /** | ||
| * Checks if a given value is a latitude. | ||
| */ | ||
| isLatitude(value: unknown): boolean; | ||
| /** | ||
| * Checks if a given value is a longitude. | ||
| */ | ||
| isLongitude(value: unknown): boolean; | ||
| /** | ||
| * Checks if a given value is a real date. | ||
| */ | ||
| isDate(value: any): boolean; | ||
| isDate(value: unknown): boolean; | ||
| /** | ||
| * Checks if a given value is a real string. | ||
| */ | ||
| isString(value: any): boolean; | ||
| isString(value: unknown): value is string; | ||
| /** | ||
| * Checks if a given value is a ISOString date. | ||
| */ | ||
| isDateString(value: any): boolean; | ||
| isDateString(value: unknown): boolean; | ||
| /** | ||
| * Checks if a given value is an array | ||
| */ | ||
| isArray(value: any): boolean; | ||
| isArray(value: unknown): boolean; | ||
| /** | ||
| * Checks if a given value is an enum | ||
| */ | ||
| isEnum(value: any, entity: any): boolean; | ||
| isEnum(value: unknown, entity: any): boolean; | ||
| /** | ||
| * Checks if a given value is a number. | ||
| */ | ||
| isNumber(value: any, options?: IsNumberOptions): boolean; | ||
| isNumber(value: unknown, options?: IsNumberOptions): boolean; | ||
| /** | ||
| * Checks if value is an integer. | ||
| */ | ||
| isInt(val: number): boolean; | ||
| isInt(val: unknown): boolean; | ||
| /** | ||
| * Checks if value is a number that's divisible by another. | ||
| */ | ||
| isDivisibleBy(value: number, num: number): boolean; | ||
| isDivisibleBy(value: unknown, num: number): boolean; | ||
| /** | ||
| * Checks if the value is a positive number. | ||
| */ | ||
| isPositive(value: number): boolean; | ||
| isPositive(value: unknown): boolean; | ||
| /** | ||
| * Checks if the value is a negative number. | ||
| */ | ||
| isNegative(value: number): boolean; | ||
| isNegative(value: unknown): boolean; | ||
| /** | ||
| * Checks if the first number is greater than or equal to the second. | ||
| */ | ||
| min(num: number, min: number): boolean; | ||
| min(num: unknown, min: number): boolean; | ||
| /** | ||
| * Checks if the first number is less than or equal to the second. | ||
| */ | ||
| max(num: number, max: number): boolean; | ||
| max(num: unknown, max: number): boolean; | ||
| /** | ||
| * Checks if the value is a date that's after the specified date. | ||
| */ | ||
| minDate(date: Date, minDate: Date): boolean; | ||
| minDate(date: unknown, minDate: Date): boolean; | ||
| /** | ||
| * Checks if the value is a date that's before the specified date. | ||
| */ | ||
| maxDate(date: Date, maxDate: Date): boolean; | ||
| maxDate(date: unknown, maxDate: Date): boolean; | ||
| /** | ||
@@ -140,3 +153,3 @@ * Checks if a string is a boolean. | ||
| */ | ||
| isBooleanString(value: string): boolean; | ||
| isBooleanString(value: unknown): boolean; | ||
| /** | ||
@@ -146,3 +159,3 @@ * Checks if the string is numeric. | ||
| */ | ||
| isNumberString(value: string, options?: ValidatorJS.IsNumericOptions): boolean; | ||
| isNumberString(value: unknown, options?: ValidatorJS.IsNumericOptions): boolean; | ||
| /** | ||
@@ -152,3 +165,3 @@ * Checks if the string contains the seed. | ||
| */ | ||
| contains(value: string, seed: string): boolean; | ||
| contains(value: unknown, seed: string): boolean; | ||
| /** | ||
@@ -158,3 +171,3 @@ * Checks if the string does not contain the seed. | ||
| */ | ||
| notContains(value: string, seed: string): boolean; | ||
| notContains(value: unknown, seed: string): boolean; | ||
| /** | ||
@@ -164,3 +177,3 @@ * Checks if the string contains only letters (a-zA-Z). | ||
| */ | ||
| isAlpha(value: string, locale?: ValidatorJS.AlphaLocale): boolean; | ||
| isAlpha(value: unknown, locale?: ValidatorJS.AlphaLocale): boolean; | ||
| /** | ||
@@ -170,3 +183,3 @@ * Checks if the string contains only letters and numbers. | ||
| */ | ||
| isAlphanumeric(value: string, locale?: ValidatorJS.AlphanumericLocale): boolean; | ||
| isAlphanumeric(value: unknown, locale?: ValidatorJS.AlphanumericLocale): boolean; | ||
| /** | ||
@@ -176,3 +189,3 @@ * Checks if the string is a valid decimal. | ||
| */ | ||
| isDecimal(value: string, options?: ValidatorJS.IsDecimalOptions): boolean; | ||
| isDecimal(value: unknown, options?: ValidatorJS.IsDecimalOptions): boolean; | ||
| /** | ||
@@ -182,3 +195,3 @@ * Checks if the string contains ASCII chars only. | ||
| */ | ||
| isAscii(value: string): boolean; | ||
| isAscii(value: unknown): boolean; | ||
| /** | ||
@@ -188,3 +201,3 @@ * Checks if a string is base64 encoded. | ||
| */ | ||
| isBase64(value: string): boolean; | ||
| isBase64(value: unknown): boolean; | ||
| /** | ||
@@ -194,3 +207,3 @@ * Checks if the string's length (in bytes) falls in a range. | ||
| */ | ||
| isByteLength(value: string, min: number, max?: number): boolean; | ||
| isByteLength(value: unknown, min: number, max?: number): boolean; | ||
| /** | ||
@@ -200,3 +213,3 @@ * Checks if the string is a credit card. | ||
| */ | ||
| isCreditCard(value: string): boolean; | ||
| isCreditCard(value: unknown): boolean; | ||
| /** | ||
@@ -206,3 +219,3 @@ * Checks if the string is a valid currency amount. | ||
| */ | ||
| isCurrency(value: string, options?: ValidatorJS.IsCurrencyOptions): boolean; | ||
| isCurrency(value: unknown, options?: ValidatorJS.IsCurrencyOptions): boolean; | ||
| /** | ||
@@ -212,3 +225,3 @@ * Checks if the string is an email. | ||
| */ | ||
| isEmail(value: string, options?: ValidatorJS.IsEmailOptions): boolean; | ||
| isEmail(value: unknown, options?: ValidatorJS.IsEmailOptions): boolean; | ||
| /** | ||
@@ -218,3 +231,3 @@ * Checks if the string is a fully qualified domain name (e.g. domain.com). | ||
| */ | ||
| isFQDN(value: string, options?: ValidatorJS.IsFQDNOptions): boolean; | ||
| isFQDN(value: unknown, options?: ValidatorJS.IsFQDNOptions): boolean; | ||
| /** | ||
@@ -224,3 +237,3 @@ * Checks if the string contains any full-width chars. | ||
| */ | ||
| isFullWidth(value: string): boolean; | ||
| isFullWidth(value: unknown): boolean; | ||
| /** | ||
@@ -230,3 +243,3 @@ * Checks if the string contains any half-width chars. | ||
| */ | ||
| isHalfWidth(value: string): boolean; | ||
| isHalfWidth(value: unknown): boolean; | ||
| /** | ||
@@ -236,3 +249,3 @@ * Checks if the string contains variable-width chars. | ||
| */ | ||
| isVariableWidth(value: string): boolean; | ||
| isVariableWidth(value: unknown): boolean; | ||
| /** | ||
@@ -242,3 +255,3 @@ * Checks if the string is a hexadecimal color. | ||
| */ | ||
| isHexColor(value: string): boolean; | ||
| isHexColor(value: unknown): boolean; | ||
| /** | ||
@@ -248,3 +261,3 @@ * Checks if the string is a hexadecimal number. | ||
| */ | ||
| isHexadecimal(value: string): boolean; | ||
| isHexadecimal(value: unknown): boolean; | ||
| /** | ||
@@ -254,7 +267,7 @@ * Checks if the string is an IP (version 4 or 6). | ||
| */ | ||
| isIP(value: string, version?: number): boolean; | ||
| isIP(value: unknown, version?: number): boolean; | ||
| /** | ||
| * Check if the string is a valid port number. | ||
| */ | ||
| isPort(value: string): boolean; | ||
| isPort(value: unknown): boolean; | ||
| /** | ||
@@ -264,3 +277,3 @@ * Checks if the string is an ISBN (version 10 or 13). | ||
| */ | ||
| isISBN(value: string, version?: number): boolean; | ||
| isISBN(value: unknown, version?: number): boolean; | ||
| /** | ||
@@ -270,3 +283,3 @@ * Checks if the string is an ISIN (stock/security identifier). | ||
| */ | ||
| isISIN(value: string): boolean; | ||
| isISIN(value: unknown): boolean; | ||
| /** | ||
@@ -276,3 +289,3 @@ * Checks if the string is a valid ISO 8601 date. | ||
| */ | ||
| isISO8601(value: string): boolean; | ||
| isISO8601(value: unknown): boolean; | ||
| /** | ||
@@ -282,8 +295,18 @@ * Checks if the string is valid JSON (note: uses JSON.parse). | ||
| */ | ||
| isJSON(value: string): boolean; | ||
| isJSON(value: unknown): boolean; | ||
| /** | ||
| * Checks if the value is valid Object. | ||
| * Returns false if the value is not an object. | ||
| */ | ||
| isObject(value: unknown): value is object; | ||
| /** | ||
| * Checks if the value is valid Object & not empty. | ||
| * Returns false if the value is not an object or an empty valid object. | ||
| */ | ||
| isNotEmptyObject(value: unknown): boolean; | ||
| /** | ||
| * Checks if the string is lowercase. | ||
| * If given value is not a string, then it returns false. | ||
| */ | ||
| isLowercase(value: string): boolean; | ||
| isLowercase(value: unknown): boolean; | ||
| /** | ||
@@ -294,3 +317,3 @@ * Checks if the string is a mobile phone number (locale is one of ['zh-CN', 'zh-TW', 'en-ZA', 'en-AU', 'en-HK', | ||
| */ | ||
| isMobilePhone(value: string, locale: ValidatorJS.MobilePhoneLocale): boolean; | ||
| isMobilePhone(value: unknown, locale: ValidatorJS.MobilePhoneLocale): boolean; | ||
| /** | ||
@@ -303,11 +326,11 @@ * Checks if the string is a valid phone number. | ||
| */ | ||
| isPhoneNumber(value: string, region: string): boolean; | ||
| isPhoneNumber(value: unknown, region: string): boolean; | ||
| /** | ||
| * Check if the string is a valid [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) officially assigned country code. | ||
| */ | ||
| isISO31661Alpha2(value: string): boolean; | ||
| isISO31661Alpha2(value: unknown): boolean; | ||
| /** | ||
| * Check if the string is a valid [ISO 3166-1 alpha-3](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3) officially assigned country code. | ||
| */ | ||
| isISO31661Alpha3(value: string): boolean; | ||
| isISO31661Alpha3(value: unknown): boolean; | ||
| /** | ||
@@ -317,3 +340,3 @@ * Checks if the string is a valid hex-encoded representation of a MongoDB ObjectId. | ||
| */ | ||
| isMongoId(value: string): boolean; | ||
| isMongoId(value: unknown): boolean; | ||
| /** | ||
@@ -323,3 +346,3 @@ * Checks if the string contains one or more multibyte chars. | ||
| */ | ||
| isMultibyte(value: string): boolean; | ||
| isMultibyte(value: unknown): boolean; | ||
| /** | ||
@@ -329,3 +352,3 @@ * Checks if the string contains any surrogate pairs chars. | ||
| */ | ||
| isSurrogatePair(value: string): boolean; | ||
| isSurrogatePair(value: unknown): boolean; | ||
| /** | ||
@@ -335,3 +358,3 @@ * Checks if the string is an url. | ||
| */ | ||
| isURL(value: string, options?: ValidatorJS.IsURLOptions): boolean; | ||
| isURL(value: unknown, options?: ValidatorJS.IsURLOptions): boolean; | ||
| /** | ||
@@ -341,3 +364,3 @@ * Checks if the string is a UUID (version 3, 4 or 5). | ||
| */ | ||
| isUUID(value: string, version?: "3" | "4" | "5"): boolean; | ||
| isUUID(value: unknown, version?: "3" | "4" | "5"): boolean; | ||
| /** | ||
@@ -347,3 +370,3 @@ * Checks if the string is uppercase. | ||
| */ | ||
| isUppercase(value: string): boolean; | ||
| isUppercase(value: unknown): boolean; | ||
| /** | ||
@@ -353,3 +376,3 @@ * Checks if the string's length falls in a range. Note: this function takes into account surrogate pairs. | ||
| */ | ||
| length(value: string, min: number, max?: number): boolean; | ||
| length(value: unknown, min: number, max?: number): boolean; | ||
| /** | ||
@@ -359,3 +382,3 @@ * Checks if the string's length is not less than given number. Note: this function takes into account surrogate pairs. | ||
| */ | ||
| minLength(value: string, min: number): boolean; | ||
| minLength(value: unknown, min: number): boolean; | ||
| /** | ||
@@ -365,3 +388,3 @@ * Checks if the string's length is not more than given number. Note: this function takes into account surrogate pairs. | ||
| */ | ||
| maxLength(value: string, max: number): boolean; | ||
| maxLength(value: unknown, max: number): boolean; | ||
| /** | ||
@@ -371,3 +394,3 @@ * Checks if string matches the pattern. Either matches('foo', /foo/i) or matches('foo', 'foo', 'i'). | ||
| */ | ||
| matches(value: string, pattern: RegExp, modifiers?: string): boolean; | ||
| matches(value: unknown, pattern: RegExp, modifiers?: string): boolean; | ||
| /** | ||
@@ -377,3 +400,3 @@ * Checks if the string represents a time without a given timezone in the format HH:MM (military) | ||
| */ | ||
| isMilitaryTime(value: string): boolean; | ||
| isMilitaryTime(value: unknown): boolean; | ||
| /** | ||
@@ -383,3 +406,3 @@ * Checks if array contains all values from the given array of values. | ||
| */ | ||
| arrayContains(array: any[], values: any[]): boolean; | ||
| arrayContains(array: unknown, values: any[]): boolean; | ||
| /** | ||
@@ -389,3 +412,3 @@ * Checks if array does not contain any of the given values. | ||
| */ | ||
| arrayNotContains(array: any[], values: any[]): boolean; | ||
| arrayNotContains(array: unknown, values: any[]): boolean; | ||
| /** | ||
@@ -395,3 +418,3 @@ * Checks if given array is not empty. | ||
| */ | ||
| arrayNotEmpty(array: any[]): boolean; | ||
| arrayNotEmpty(array: unknown): boolean; | ||
| /** | ||
@@ -401,3 +424,3 @@ * Checks if array's length is as minimal this number. | ||
| */ | ||
| arrayMinSize(array: any[], min: number): boolean; | ||
| arrayMinSize(array: unknown, min: number): boolean; | ||
| /** | ||
@@ -407,3 +430,3 @@ * Checks if array's length is as maximal this number. | ||
| */ | ||
| arrayMaxSize(array: any[], max: number): boolean; | ||
| arrayMaxSize(array: unknown, max: number): boolean; | ||
| /** | ||
@@ -413,7 +436,7 @@ * Checks if all array's values are unique. Comparison for objects is reference-based. | ||
| */ | ||
| arrayUnique(array: any[]): boolean; | ||
| arrayUnique(array: unknown): boolean; | ||
| /** | ||
| * Checks if the value is an instance of the specified object. | ||
| */ | ||
| isInstance(object: any, targetTypeConstructor: new (...args: any[]) => any): boolean; | ||
| isInstance(object: unknown, targetTypeConstructor: new (...args: any[]) => any): boolean; | ||
| } |
+59
-12
@@ -53,2 +53,10 @@ "use strict"; | ||
| }; | ||
| this._isEmptyObject = function (object) { | ||
| for (var key in object) { | ||
| if (object.hasOwnProperty(key)) { | ||
| return false; | ||
| } | ||
| } | ||
| return true; | ||
| }; | ||
| } | ||
@@ -128,2 +136,8 @@ /** | ||
| /* type checkers */ | ||
| case ValidationTypes_1.ValidationTypes.IS_LATLONG: | ||
| return this.isLatLong(value); | ||
| case ValidationTypes_1.ValidationTypes.IS_LATITUDE: | ||
| return this.isLatitude(value); | ||
| case ValidationTypes_1.ValidationTypes.IS_LONGITUDE: | ||
| return this.isLongitude(value); | ||
| case ValidationTypes_1.ValidationTypes.IS_BOOLEAN: | ||
@@ -213,2 +227,6 @@ return this.isBoolean(value); | ||
| return this.isJSON(value); | ||
| case ValidationTypes_1.ValidationTypes.IS_OBJECT: | ||
| return this.isObject(value); | ||
| case ValidationTypes_1.ValidationTypes.IS_NOT_EMPTY_OBJECT: | ||
| return this.isNotEmptyObject(value); | ||
| case ValidationTypes_1.ValidationTypes.IS_LOWERCASE: | ||
@@ -319,2 +337,20 @@ return this.isLowercase(value); | ||
| /** | ||
| * Checks if a given value is a latitude. | ||
| */ | ||
| Validator.prototype.isLatLong = function (value) { | ||
| return typeof value === "string" && this.validatorJs.isLatLong(value); | ||
| }; | ||
| /** | ||
| * Checks if a given value is a latitude. | ||
| */ | ||
| Validator.prototype.isLatitude = function (value) { | ||
| return (typeof value === "number" || this.isString(value)) && this.isLatLong("0," + value); | ||
| }; | ||
| /** | ||
| * Checks if a given value is a longitude. | ||
| */ | ||
| Validator.prototype.isLongitude = function (value) { | ||
| return (typeof value === "number" || this.isString(value)) && this.isLatLong(value + ",0"); | ||
| }; | ||
| /** | ||
| * Checks if a given value is a real date. | ||
@@ -357,2 +393,5 @@ */ | ||
| if (options === void 0) { options = {}; } | ||
| if (typeof value !== "number") { | ||
| return false; | ||
| } | ||
| if (value === Infinity || value === -Infinity) { | ||
@@ -370,3 +409,3 @@ return options.allowInfinity; | ||
| Validator.prototype.isInt = function (val) { | ||
| return Number.isInteger(val); | ||
| return typeof val === "number" && Number.isInteger(val); | ||
| }; | ||
@@ -415,3 +454,3 @@ // ------------------------------------------------------------------------- | ||
| Validator.prototype.minDate = function (date, minDate) { | ||
| return date && date.getTime() >= minDate.getTime(); | ||
| return date instanceof Date && date.getTime() >= minDate.getTime(); | ||
| }; | ||
@@ -422,3 +461,3 @@ /** | ||
| Validator.prototype.maxDate = function (date, maxDate) { | ||
| return date && date.getTime() <= maxDate.getTime(); | ||
| return date instanceof Date && date.getTime() <= maxDate.getTime(); | ||
| }; | ||
@@ -575,3 +614,3 @@ // ------------------------------------------------------------------------- | ||
| Validator.prototype.isPort = function (value) { | ||
| return this.validatorJs.isPort(value); | ||
| return typeof value === "string" && this.validatorJs.isPort(value); | ||
| }; | ||
@@ -607,2 +646,16 @@ /** | ||
| /** | ||
| * Checks if the value is valid Object. | ||
| * Returns false if the value is not an object. | ||
| */ | ||
| Validator.prototype.isObject = function (value) { | ||
| return value != null && (typeof value === "object" || typeof value === "function") && !Array.isArray(value); | ||
| }; | ||
| /** | ||
| * Checks if the value is valid Object & not empty. | ||
| * Returns false if the value is not an object or an empty valid object. | ||
| */ | ||
| Validator.prototype.isNotEmptyObject = function (value) { | ||
| return this.isObject(value) && !this._isEmptyObject(value); | ||
| }; | ||
| /** | ||
| * Checks if the string is lowercase. | ||
@@ -738,3 +791,3 @@ * If given value is not a string, then it returns false. | ||
| return false; | ||
| return !array || values.every(function (value) { return array.indexOf(value) !== -1; }); | ||
| return values.every(function (value) { return array.indexOf(value) !== -1; }); | ||
| }; | ||
@@ -748,3 +801,3 @@ /** | ||
| return false; | ||
| return !array || values.every(function (value) { return array.indexOf(value) === -1; }); | ||
| return values.every(function (value) { return array.indexOf(value) === -1; }); | ||
| }; | ||
@@ -756,4 +809,2 @@ /** | ||
| Validator.prototype.arrayNotEmpty = function (array) { | ||
| if (!(array instanceof Array)) | ||
| return false; | ||
| return array instanceof Array && array.length > 0; | ||
@@ -766,4 +817,2 @@ }; | ||
| Validator.prototype.arrayMinSize = function (array, min) { | ||
| if (!(array instanceof Array)) | ||
| return false; | ||
| return array instanceof Array && array.length >= min; | ||
@@ -776,4 +825,2 @@ }; | ||
| Validator.prototype.arrayMaxSize = function (array, max) { | ||
| if (!(array instanceof Array)) | ||
| return false; | ||
| return array instanceof Array && array.length <= max; | ||
@@ -780,0 +827,0 @@ }; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../src/validation/Validator.ts"],"names":[],"mappings":"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","file":"Validator.js","sourcesContent":["import {ValidationMetadata} from \"../metadata/ValidationMetadata\";\nimport {ValidationTypes} from \"./ValidationTypes\";\nimport {ValidationError} from \"./ValidationError\";\nimport {IsNumberOptions} from \"./ValidationTypeOptions\";\nimport {ValidatorOptions} from \"./ValidatorOptions\";\nimport {ValidationExecutor} from \"./ValidationExecutor\";\nimport {ValidationOptions} from \"../decorator/ValidationOptions\";\nimport * as validator from \"validator\";\n\n/**\n * Validator performs validation of the given object based on its metadata.\n */\nexport class Validator {\n\n // -------------------------------------------------------------------------\n // Private Properties\n // -------------------------------------------------------------------------\n\n private validatorJs = validator;\n private libPhoneNumber = {\n phoneUtil: require(\"google-libphonenumber\").PhoneNumberUtil.getInstance(),\n };\n\n /**\n * Performs validation of the given object based on decorators or validation schema.\n * Common method for `validateOrReject` and `validate` methods.\n */\n private coreValidate(objectOrSchemaName: Object|string, objectOrValidationOptions: Object|ValidationOptions, maybeValidatorOptions?: ValidatorOptions): Promise<ValidationError[]> {\n const object = typeof objectOrSchemaName === \"string\" ? objectOrValidationOptions as Object : objectOrSchemaName as Object;\n const options = typeof objectOrSchemaName === \"string\" ? maybeValidatorOptions : objectOrValidationOptions as ValidationOptions;\n const schema = typeof objectOrSchemaName === \"string\" ? objectOrSchemaName as string : undefined;\n\n const executor = new ValidationExecutor(this, options);\n const validationErrors: ValidationError[] = [];\n executor.execute(object, schema, validationErrors);\n\n return Promise.all(executor.awaitingPromises).then(() => {\n return executor.stripEmptyErrors(validationErrors);\n });\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Performs validation of the given object based on decorators used in given object class.\n */\n validate(object: Object, options?: ValidatorOptions): Promise<ValidationError[]>;\n\n /**\n * Performs validation of the given object based on validation schema.\n */\n validate(schemaName: string, object: Object, options?: ValidatorOptions): Promise<ValidationError[]>;\n\n /**\n * Performs validation of the given object based on decorators or validation schema.\n */\n validate(objectOrSchemaName: Object|string, objectOrValidationOptions: Object|ValidationOptions, maybeValidatorOptions?: ValidatorOptions): Promise<ValidationError[]> {\n return this.coreValidate(objectOrSchemaName, objectOrValidationOptions, maybeValidatorOptions);\n }\n\n /**\n * Performs validation of the given object based on decorators used in given object class and reject on error.\n */\n validateOrReject(object: Object, options?: ValidatorOptions): Promise<void>;\n\n /**\n * Performs validation of the given object based on validation schema and reject on error.\n */\n validateOrReject(schemaName: string, object: Object, options?: ValidatorOptions): Promise<void>;\n\n /**\n * Performs validation of the given object based on decorators or validation schema and reject on error.\n */\n async validateOrReject(objectOrSchemaName: Object|string, objectOrValidationOptions: Object|ValidationOptions, maybeValidatorOptions?: ValidatorOptions): Promise<void> {\n const errors = await this.coreValidate(objectOrSchemaName, objectOrValidationOptions, maybeValidatorOptions);\n if (errors.length)\n return Promise.reject(errors);\n }\n\n /**\n * Performs validation of the given object based on decorators used in given object class.\n * NOTE: This method completely ignores all async validations.\n */\n validateSync(object: Object, options?: ValidatorOptions): ValidationError[];\n\n /**\n * Performs validation of the given object based on validation schema.\n */\n validateSync(schemaName: string, object: Object, options?: ValidatorOptions): ValidationError[];\n\n /**\n * Performs validation of the given object based on decorators or validation schema.\n */\n validateSync(objectOrSchemaName: Object|string, objectOrValidationOptions: Object|ValidationOptions, maybeValidatorOptions?: ValidatorOptions): ValidationError[] {\n const object = typeof objectOrSchemaName === \"string\" ? objectOrValidationOptions as Object : objectOrSchemaName as Object;\n const options = typeof objectOrSchemaName === \"string\" ? maybeValidatorOptions : objectOrValidationOptions as ValidationOptions;\n const schema = typeof objectOrSchemaName === \"string\" ? objectOrSchemaName as string : undefined;\n\n const executor = new ValidationExecutor(this, options);\n executor.ignoreAsyncValidations = true;\n const validationErrors: ValidationError[] = [];\n executor.execute(object, schema, validationErrors);\n return executor.stripEmptyErrors(validationErrors);\n }\n\n /**\n * Performs validation of the given object based on the given ValidationMetadata object.\n */\n validateValueByMetadata(value: any, metadata: ValidationMetadata): boolean {\n switch (metadata.type) {\n /* common checkers */\n case ValidationTypes.IS_DEFINED:\n return this.isDefined(value);\n case ValidationTypes.EQUALS:\n return this.equals(value, metadata.constraints[0]);\n case ValidationTypes.NOT_EQUALS:\n return this.notEquals(value, metadata.constraints[0]);\n case ValidationTypes.IS_EMPTY:\n return this.isEmpty(value);\n case ValidationTypes.IS_NOT_EMPTY:\n return this.isNotEmpty(value);\n case ValidationTypes.IS_IN:\n return this.isIn(value, metadata.constraints[0]);\n case ValidationTypes.IS_NOT_IN:\n return this.isNotIn(value, metadata.constraints[0]);\n\n /* type checkers */\n case ValidationTypes.IS_BOOLEAN:\n return this.isBoolean(value);\n case ValidationTypes.IS_DATE:\n return this.isDate(value);\n case ValidationTypes.IS_STRING:\n return this.isString(value);\n case ValidationTypes.IS_DATE_STRING:\n return this.isDateString(value);\n case ValidationTypes.IS_ARRAY:\n return this.isArray(value);\n case ValidationTypes.IS_NUMBER:\n return this.isNumber(value, metadata.constraints[0]);\n case ValidationTypes.IS_INT:\n return this.isInt(value);\n case ValidationTypes.IS_ENUM:\n return this.isEnum(value, metadata.constraints[0]);\n\n /* number checkers */\n case ValidationTypes.IS_DIVISIBLE_BY:\n return this.isDivisibleBy(value, metadata.constraints[0]);\n case ValidationTypes.IS_POSITIVE:\n return this.isPositive(value);\n case ValidationTypes.IS_NEGATIVE:\n return this.isNegative(value);\n case ValidationTypes.MIN:\n return this.min(value, metadata.constraints[0]);\n case ValidationTypes.MAX:\n return this.max(value, metadata.constraints[0]);\n\n /* date checkers */\n case ValidationTypes.MIN_DATE:\n return this.minDate(value, metadata.constraints[0]);\n case ValidationTypes.MAX_DATE:\n return this.maxDate(value, metadata.constraints[0]);\n\n /* string-as-type checkers */\n case ValidationTypes.IS_BOOLEAN_STRING:\n return this.isBooleanString(value);\n case ValidationTypes.IS_NUMBER_STRING:\n return this.isNumberString(value);\n\n /* string checkers */\n case ValidationTypes.CONTAINS:\n return this.contains(value, metadata.constraints[0]);\n case ValidationTypes.NOT_CONTAINS:\n return this.notContains(value, metadata.constraints[0]);\n case ValidationTypes.IS_ALPHA:\n return this.isAlpha(value, metadata.constraints[0]);\n case ValidationTypes.IS_ALPHANUMERIC:\n return this.isAlphanumeric(value, metadata.constraints[0]);\n case ValidationTypes.IS_DECIMAL:\n return this.isDecimal(value, metadata.constraints[0]);\n case ValidationTypes.IS_ASCII:\n return this.isAscii(value);\n case ValidationTypes.IS_BASE64:\n return this.isBase64(value);\n case ValidationTypes.IS_BYTE_LENGTH:\n return this.isByteLength(value, metadata.constraints[0], metadata.constraints[1]);\n case ValidationTypes.IS_CREDIT_CARD:\n return this.isCreditCard(value);\n case ValidationTypes.IS_CURRENCY:\n return this.isCurrency(value, metadata.constraints[0]);\n case ValidationTypes.IS_EMAIL:\n return this.isEmail(value, metadata.constraints[0]);\n case ValidationTypes.IS_FQDN:\n return this.isFQDN(value, metadata.constraints[0]);\n case ValidationTypes.IS_FULL_WIDTH:\n return this.isFullWidth(value);\n case ValidationTypes.IS_HALF_WIDTH:\n return this.isHalfWidth(value);\n case ValidationTypes.IS_VARIABLE_WIDTH:\n return this.isVariableWidth(value);\n case ValidationTypes.IS_HEX_COLOR:\n return this.isHexColor(value);\n case ValidationTypes.IS_HEXADECIMAL:\n return this.isHexadecimal(value);\n case ValidationTypes.IS_IP:\n return this.isIP(value, metadata.constraints[0]);\n case ValidationTypes.IS_PORT:\n return this.isPort(value);\n case ValidationTypes.IS_ISBN:\n return this.isISBN(value, metadata.constraints[0]);\n case ValidationTypes.IS_ISIN:\n return this.isISIN(value);\n case ValidationTypes.IS_ISO8601:\n return this.isISO8601(value);\n case ValidationTypes.IS_JSON:\n return this.isJSON(value);\n case ValidationTypes.IS_LOWERCASE:\n return this.isLowercase(value);\n case ValidationTypes.IS_MOBILE_PHONE:\n return this.isMobilePhone(value, metadata.constraints[0]);\n case ValidationTypes.IS_PHONE_NUMBER:\n return this.isPhoneNumber(value, metadata.constraints[0]);\n case ValidationTypes.IS_ISO31661_ALPHA_2:\n return this.isISO31661Alpha2(value);\n case ValidationTypes.IS_ISO31661_ALPHA_3:\n return this.isISO31661Alpha3(value);\n case ValidationTypes.IS_MONGO_ID:\n return this.isMongoId(value);\n case ValidationTypes.IS_MULTIBYTE:\n return this.isMultibyte(value);\n case ValidationTypes.IS_SURROGATE_PAIR:\n return this.isSurrogatePair(value);\n case ValidationTypes.IS_URL:\n return this.isURL(value, metadata.constraints[0]);\n case ValidationTypes.IS_UUID:\n return this.isUUID(value, metadata.constraints[0]);\n case ValidationTypes.IS_UPPERCASE:\n return this.isUppercase(value);\n case ValidationTypes.LENGTH:\n return this.length(value, metadata.constraints[0], metadata.constraints[1]);\n case ValidationTypes.MIN_LENGTH:\n return this.minLength(value, metadata.constraints[0]);\n case ValidationTypes.MAX_LENGTH:\n return this.maxLength(value, metadata.constraints[0]);\n case ValidationTypes.MATCHES:\n return this.matches(value, metadata.constraints[0], metadata.constraints[1]);\n case ValidationTypes.IS_MILITARY_TIME:\n return this.isMilitaryTime(value);\n\n /* array checkers */\n case ValidationTypes.ARRAY_CONTAINS:\n return this.arrayContains(value, metadata.constraints[0]);\n case ValidationTypes.ARRAY_NOT_CONTAINS:\n return this.arrayNotContains(value, metadata.constraints[0]);\n case ValidationTypes.ARRAY_NOT_EMPTY:\n return this.arrayNotEmpty(value);\n case ValidationTypes.ARRAY_MIN_SIZE:\n return this.arrayMinSize(value, metadata.constraints[0]);\n case ValidationTypes.ARRAY_MAX_SIZE:\n return this.arrayMaxSize(value, metadata.constraints[0]);\n case ValidationTypes.ARRAY_UNIQUE:\n return this.arrayUnique(value);\n\n case ValidationTypes.IS_INSTANCE:\n return this.isInstance(value, metadata.constraints[0]);\n }\n return true;\n }\n\n // -------------------------------------------------------------------------\n // Validation Methods: common checkers\n // -------------------------------------------------------------------------\n\n /**\n * Checks if value is defined (!== undefined, !== null).\n */\n isDefined(value: any): boolean {\n return value !== undefined && value !== null;\n }\n\n /**\n * Checks if value matches (\"===\") the comparison.\n */\n equals(value: any, comparison: any): boolean {\n return value === comparison;\n }\n\n /**\n * Checks if value does not match (\"!==\") the comparison.\n */\n notEquals(value: any, comparison: any): boolean {\n return value !== comparison;\n }\n\n /**\n * Checks if given value is empty (=== '', === null, === undefined).\n */\n isEmpty(value: any): boolean {\n return value === \"\" || value === null || value === undefined;\n }\n\n /**\n * Checks if given value is not empty (!== '', !== null, !== undefined).\n */\n isNotEmpty(value: any): boolean {\n return value !== \"\" && value !== null && value !== undefined;\n }\n\n /**\n * Checks if given value is in a array of allowed values.\n */\n isIn(value: any, possibleValues: any[]): boolean {\n return !(possibleValues instanceof Array) || possibleValues.some(possibleValue => possibleValue === value);\n }\n\n /**\n * Checks if given value not in a array of allowed values.\n */\n isNotIn(value: any, possibleValues: any[]): boolean {\n return !(possibleValues instanceof Array) || !possibleValues.some(possibleValue => possibleValue === value);\n }\n\n // -------------------------------------------------------------------------\n // Validation Methods: type checkers\n // -------------------------------------------------------------------------\n\n /**\n * Checks if a given value is a real boolean.\n */\n isBoolean(value: any): boolean {\n return value instanceof Boolean || typeof value === \"boolean\";\n }\n\n /**\n * Checks if a given value is a real date.\n */\n isDate(value: any): boolean {\n return value instanceof Date && !isNaN(value.getTime());\n }\n\n /**\n * Checks if a given value is a real string.\n */\n isString(value: any): boolean {\n return value instanceof String || typeof value === \"string\";\n }\n\n /**\n * Checks if a given value is a ISOString date.\n */\n isDateString(value: any): boolean {\n const regex = /^\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|\\+[0-2]\\d(?:\\:[0-5]\\d)?)?$/g;\n return this.isString(value) && regex.test(value);\n }\n\n /**\n * Checks if a given value is an array\n */\n isArray(value: any): boolean {\n return value instanceof Array;\n }\n\n /**\n * Checks if a given value is an enum\n */\n isEnum(value: any, entity: any): boolean {\n const enumValues = Object.keys(entity)\n .map(k => entity[k]);\n return enumValues.indexOf(value) >= 0;\n }\n\n /**\n * Checks if a given value is a number.\n */\n isNumber(value: any, options: IsNumberOptions = {}): boolean {\n if (value === Infinity || value === -Infinity) {\n return options.allowInfinity;\n }\n\n if (Number.isNaN(value)) {\n return options.allowNaN;\n }\n\n return Number.isFinite(value);\n }\n\n /**\n * Checks if value is an integer.\n */\n isInt(val: number): boolean {\n return Number.isInteger(val);\n }\n\n // -------------------------------------------------------------------------\n // Validation Methods: number checkers\n // -------------------------------------------------------------------------\n\n /**\n * Checks if value is a number that's divisible by another.\n */\n isDivisibleBy(value: number, num: number): boolean {\n return typeof value === \"number\" &&\n typeof num === \"number\" &&\n this.validatorJs.isDivisibleBy(String(value), num);\n }\n\n /**\n * Checks if the value is a positive number.\n */\n isPositive(value: number): boolean {\n return typeof value === \"number\" && value > 0;\n }\n\n /**\n * Checks if the value is a negative number.\n */\n isNegative(value: number): boolean {\n return typeof value === \"number\" && value < 0;\n }\n\n /**\n * Checks if the first number is greater than or equal to the second.\n */\n min(num: number, min: number): boolean {\n return typeof num === \"number\" && typeof min === \"number\" && num >= min;\n }\n\n /**\n * Checks if the first number is less than or equal to the second.\n */\n max(num: number, max: number): boolean {\n return typeof num === \"number\" && typeof max === \"number\" && num <= max;\n }\n\n // -------------------------------------------------------------------------\n // Validation Methods: date checkers\n // -------------------------------------------------------------------------\n\n /**\n * Checks if the value is a date that's after the specified date.\n */\n minDate(date: Date, minDate: Date): boolean {\n return date && date.getTime() >= minDate.getTime();\n }\n\n /**\n * Checks if the value is a date that's before the specified date.\n */\n maxDate(date: Date, maxDate: Date): boolean {\n return date && date.getTime() <= maxDate.getTime();\n }\n\n // -------------------------------------------------------------------------\n // Validation Methods: string-as-type checkers\n // -------------------------------------------------------------------------\n\n /**\n * Checks if a string is a boolean.\n * If given value is not a string, then it returns false.\n */\n isBooleanString(value: string): boolean {\n return typeof value === \"string\" && this.validatorJs.isBoolean(value);\n }\n\n /**\n * Checks if the string is numeric.\n * If given value is not a string, then it returns false.\n */\n isNumberString(value: string, options?: ValidatorJS.IsNumericOptions): boolean {\n return typeof value === \"string\" && this.validatorJs.isNumeric(value, options);\n }\n\n // -------------------------------------------------------------------------\n // Validation Methods: string checkers\n // -------------------------------------------------------------------------\n\n /**\n * Checks if the string contains the seed.\n * If given value is not a string, then it returns false.\n */\n contains(value: string, seed: string): boolean {\n return typeof value === \"string\" && this.validatorJs.contains(value, seed);\n }\n\n /**\n * Checks if the string does not contain the seed.\n * If given value is not a string, then it returns false.\n */\n notContains(value: string, seed: string): boolean {\n return typeof value === \"string\" && !this.validatorJs.contains(value, seed);\n }\n\n /**\n * Checks if the string contains only letters (a-zA-Z).\n * If given value is not a string, then it returns false.\n */\n isAlpha(value: string, locale?: ValidatorJS.AlphaLocale): boolean {\n return typeof value === \"string\" && this.validatorJs.isAlpha(value, locale);\n }\n\n /**\n * Checks if the string contains only letters and numbers.\n * If given value is not a string, then it returns false.\n */\n isAlphanumeric(value: string, locale?: ValidatorJS.AlphanumericLocale): boolean {\n return typeof value === \"string\" && this.validatorJs.isAlphanumeric(value, locale);\n }\n\n /**\n * Checks if the string is a valid decimal.\n * If given value is not a string, then it returns false.\n */\n isDecimal(value: string, options?: ValidatorJS.IsDecimalOptions): boolean {\n return typeof value === \"string\" && this.validatorJs.isDecimal(value, options);\n }\n\n\n /**\n * Checks if the string contains ASCII chars only.\n * If given value is not a string, then it returns false.\n */\n isAscii(value: string): boolean {\n return typeof value === \"string\" && this.validatorJs.isAscii(value);\n }\n\n /**\n * Checks if a string is base64 encoded.\n * If given value is not a string, then it returns false.\n */\n isBase64(value: string): boolean {\n return typeof value === \"string\" && this.validatorJs.isBase64(value);\n }\n\n /**\n * Checks if the string's length (in bytes) falls in a range.\n * If given value is not a string, then it returns false.\n */\n isByteLength(value: string, min: number, max?: number): boolean {\n return typeof value === \"string\" && this.validatorJs.isByteLength(value, min, max);\n }\n\n /**\n * Checks if the string is a credit card.\n * If given value is not a string, then it returns false.\n */\n isCreditCard(value: string): boolean {\n return typeof value === \"string\" && this.validatorJs.isCreditCard(value);\n }\n\n /**\n * Checks if the string is a valid currency amount.\n * If given value is not a string, then it returns false.\n */\n isCurrency(value: string, options?: ValidatorJS.IsCurrencyOptions): boolean {\n return typeof value === \"string\" && this.validatorJs.isCurrency(value, options);\n }\n\n /**\n * Checks if the string is an email.\n * If given value is not a string, then it returns false.\n */\n isEmail(value: string, options?: ValidatorJS.IsEmailOptions): boolean {\n return typeof value === \"string\" && this.validatorJs.isEmail(value, options);\n }\n\n /**\n * Checks if the string is a fully qualified domain name (e.g. domain.com).\n * If given value is not a string, then it returns false.\n */\n isFQDN(value: string, options?: ValidatorJS.IsFQDNOptions): boolean {\n return typeof value === \"string\" && this.validatorJs.isFQDN(value, options);\n }\n\n /**\n * Checks if the string contains any full-width chars.\n * If given value is not a string, then it returns false.\n */\n isFullWidth(value: string): boolean {\n return typeof value === \"string\" && this.validatorJs.isFullWidth(value);\n }\n\n /**\n * Checks if the string contains any half-width chars.\n * If given value is not a string, then it returns false.\n */\n isHalfWidth(value: string): boolean {\n return typeof value === \"string\" && this.validatorJs.isHalfWidth(value);\n }\n\n /**\n * Checks if the string contains variable-width chars.\n * If given value is not a string, then it returns false.\n */\n isVariableWidth(value: string): boolean {\n return typeof value === \"string\" && this.validatorJs.isVariableWidth(value);\n }\n\n /**\n * Checks if the string is a hexadecimal color.\n * If given value is not a string, then it returns false.\n */\n isHexColor(value: string): boolean {\n return typeof value === \"string\" && this.validatorJs.isHexColor(value);\n }\n\n /**\n * Checks if the string is a hexadecimal number.\n * If given value is not a string, then it returns false.\n */\n isHexadecimal(value: string): boolean {\n return typeof value === \"string\" && this.validatorJs.isHexadecimal(value);\n }\n\n /**\n * Checks if the string is an IP (version 4 or 6).\n * If given value is not a string, then it returns false.\n */\n isIP(value: string, version?: number): boolean {\n return typeof value === \"string\" && this.validatorJs.isIP(value, version);\n }\n\n /**\n * Check if the string is a valid port number.\n */\n isPort(value: string): boolean {\n return this.validatorJs.isPort(value);\n }\n\n /**\n * Checks if the string is an ISBN (version 10 or 13).\n * If given value is not a string, then it returns false.\n */\n isISBN(value: string, version?: number): boolean {\n return typeof value === \"string\" && this.validatorJs.isISBN(value, version);\n }\n\n /**\n * Checks if the string is an ISIN (stock/security identifier).\n * If given value is not a string, then it returns false.\n */\n isISIN(value: string): boolean {\n return typeof value === \"string\" && this.validatorJs.isISIN(value);\n }\n\n /**\n * Checks if the string is a valid ISO 8601 date.\n * If given value is not a string, then it returns false.\n */\n isISO8601(value: string): boolean {\n return typeof value === \"string\" && this.validatorJs.isISO8601(value);\n }\n\n /**\n * Checks if the string is valid JSON (note: uses JSON.parse).\n * If given value is not a string, then it returns false.\n */\n isJSON(value: string): boolean {\n return typeof value === \"string\" && this.validatorJs.isJSON(value);\n }\n\n /**\n * Checks if the string is lowercase.\n * If given value is not a string, then it returns false.\n */\n isLowercase(value: string): boolean {\n return typeof value === \"string\" && this.validatorJs.isLowercase(value);\n }\n\n /**\n * Checks if the string is a mobile phone number (locale is one of ['zh-CN', 'zh-TW', 'en-ZA', 'en-AU', 'en-HK',\n * 'pt-PT', 'fr-FR', 'el-GR', 'en-GB', 'en-US', 'en-ZM', 'ru-RU', 'nb-NO', 'nn-NO', 'vi-VN', 'en-NZ']).\n * If given value is not a string, then it returns false.\n */\n isMobilePhone(value: string, locale: ValidatorJS.MobilePhoneLocale): boolean {\n return typeof value === \"string\" && this.validatorJs.isMobilePhone(value, locale);\n }\n\n /**\n * Checks if the string is a valid phone number.\n * @param value the potential phone number string to test\n * @param {string} region 2 characters uppercase country code (e.g. DE, US, CH).\n * If users must enter the intl. prefix (e.g. +41), then you may pass \"ZZ\" or null as region.\n * See [google-libphonenumber, metadata.js:countryCodeToRegionCodeMap on github]{@link https://github.com/ruimarinho/google-libphonenumber/blob/1e46138878cff479aafe2ce62175c6c49cb58720/src/metadata.js#L33}\n */\n isPhoneNumber(value: string, region: string): boolean {\n try {\n const phoneNum = this.libPhoneNumber.phoneUtil.parseAndKeepRawInput(value, region);\n return this.libPhoneNumber.phoneUtil.isValidNumber(phoneNum);\n } catch (error) {\n // logging?\n return false;\n }\n }\n\n /**\n * Check if the string is a valid [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) officially assigned country code.\n */\n isISO31661Alpha2(value: string): boolean {\n return typeof value === \"string\" && this.validatorJs.isISO31661Alpha2(value);\n }\n\n /**\n * Check if the string is a valid [ISO 3166-1 alpha-3](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3) officially assigned country code.\n */\n isISO31661Alpha3(value: string): boolean {\n return typeof value === \"string\" && this.validatorJs.isISO31661Alpha3(value);\n }\n\n /**\n * Checks if the string is a valid hex-encoded representation of a MongoDB ObjectId.\n * If given value is not a string, then it returns false.\n */\n isMongoId(value: string): boolean {\n return typeof value === \"string\" && this.validatorJs.isMongoId(value);\n }\n\n /**\n * Checks if the string contains one or more multibyte chars.\n * If given value is not a string, then it returns false.\n */\n isMultibyte(value: string): boolean {\n return typeof value === \"string\" && this.validatorJs.isMultibyte(value);\n }\n\n /**\n * Checks if the string contains any surrogate pairs chars.\n * If given value is not a string, then it returns false.\n */\n isSurrogatePair(value: string): boolean {\n return typeof value === \"string\" && this.validatorJs.isSurrogatePair(value);\n }\n\n /**\n * Checks if the string is an url.\n * If given value is not a string, then it returns false.\n */\n isURL(value: string, options?: ValidatorJS.IsURLOptions): boolean {\n return typeof value === \"string\" && this.validatorJs.isURL(value, options);\n }\n\n /**\n * Checks if the string is a UUID (version 3, 4 or 5).\n * If given value is not a string, then it returns false.\n */\n isUUID(value: string, version?: \"3\"|\"4\"|\"5\"): boolean {\n return typeof value === \"string\" && this.validatorJs.isUUID(value, version);\n }\n\n /**\n * Checks if the string is uppercase.\n * If given value is not a string, then it returns false.\n */\n isUppercase(value: string): boolean {\n return typeof value === \"string\" && this.validatorJs.isUppercase(value);\n }\n\n /**\n * Checks if the string's length falls in a range. Note: this function takes into account surrogate pairs.\n * If given value is not a string, then it returns false.\n */\n length(value: string, min: number, max?: number): boolean {\n return typeof value === \"string\" && this.validatorJs.isLength(value, min, max);\n }\n\n /**\n * Checks if the string's length is not less than given number. Note: this function takes into account surrogate pairs.\n * If given value is not a string, then it returns false.\n */\n minLength(value: string, min: number) {\n return typeof value === \"string\" && this.length(value, min);\n }\n\n /**\n * Checks if the string's length is not more than given number. Note: this function takes into account surrogate pairs.\n * If given value is not a string, then it returns false.\n */\n maxLength(value: string, max: number) {\n return typeof value === \"string\" && this.length(value, 0, max);\n }\n\n /**\n * Checks if string matches the pattern. Either matches('foo', /foo/i) or matches('foo', 'foo', 'i').\n * If given value is not a string, then it returns false.\n */\n matches(value: string, pattern: RegExp, modifiers?: string): boolean {\n return typeof value === \"string\" && this.validatorJs.matches(value, pattern, modifiers);\n }\n\n /**\n * Checks if the string represents a time without a given timezone in the format HH:MM (military)\n * If the given value does not match the pattern HH:MM, then it returns false.\n */\n isMilitaryTime(value: string): boolean {\n return this.matches(value, /^([01]\\d|2[0-3]):?([0-5]\\d)$/);\n }\n\n // -------------------------------------------------------------------------\n // Validation Methods: array checkers\n // -------------------------------------------------------------------------\n\n /**\n * Checks if array contains all values from the given array of values.\n * If null or undefined is given then this function returns false.\n */\n arrayContains(array: any[], values: any[]) {\n if (!(array instanceof Array))\n return false;\n\n return !array || values.every(value => array.indexOf(value) !== -1);\n }\n\n /**\n * Checks if array does not contain any of the given values.\n * If null or undefined is given then this function returns false.\n */\n arrayNotContains(array: any[], values: any[]) {\n if (!(array instanceof Array))\n return false;\n\n return !array || values.every(value => array.indexOf(value) === -1);\n }\n\n /**\n * Checks if given array is not empty.\n * If null or undefined is given then this function returns false.\n */\n arrayNotEmpty(array: any[]) {\n if (!(array instanceof Array))\n return false;\n\n return array instanceof Array && array.length > 0;\n }\n\n /**\n * Checks if array's length is as minimal this number.\n * If null or undefined is given then this function returns false.\n */\n arrayMinSize(array: any[], min: number) {\n if (!(array instanceof Array))\n return false;\n\n return array instanceof Array && array.length >= min;\n }\n\n /**\n * Checks if array's length is as maximal this number.\n * If null or undefined is given then this function returns false.\n */\n arrayMaxSize(array: any[], max: number) {\n if (!(array instanceof Array))\n return false;\n\n return array instanceof Array && array.length <= max;\n }\n\n /**\n * Checks if all array's values are unique. Comparison for objects is reference-based.\n * If null or undefined is given then this function returns false.\n */\n arrayUnique(array: any[]) {\n if (!(array instanceof Array))\n return false;\n\n const uniqueItems = array.filter((a, b, c) => c.indexOf(a) === b);\n return array.length === uniqueItems.length;\n }\n\n /**\n * Checks if the value is an instance of the specified object.\n */\n isInstance(object: any, targetTypeConstructor: new (...args: any[]) => any) {\n return targetTypeConstructor\n && typeof targetTypeConstructor === \"function\"\n && object instanceof targetTypeConstructor;\n }\n\n}\n"],"sourceRoot":".."} | ||
| {"version":3,"sources":["../../src/validation/Validator.ts"],"names":[],"mappings":"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","file":"Validator.js","sourcesContent":["import {ValidationMetadata} from \"../metadata/ValidationMetadata\";\nimport {ValidationTypes} from \"./ValidationTypes\";\nimport {ValidationError} from \"./ValidationError\";\nimport {IsNumberOptions} from \"./ValidationTypeOptions\";\nimport {ValidatorOptions} from \"./ValidatorOptions\";\nimport {ValidationExecutor} from \"./ValidationExecutor\";\nimport {ValidationOptions} from \"../decorator/ValidationOptions\";\nimport * as validator from \"validator\";\n\n/**\n * Validator performs validation of the given object based on its metadata.\n */\nexport class Validator {\n\n // -------------------------------------------------------------------------\n // Private Properties\n // -------------------------------------------------------------------------\n\n private validatorJs = validator;\n private libPhoneNumber = {\n phoneUtil: require(\"google-libphonenumber\").PhoneNumberUtil.getInstance(),\n };\n private _isEmptyObject = function(object: object) {\n for (const key in object) {\n if (object.hasOwnProperty(key)) {\n return false;\n }\n }\n\n return true;\n };\n\n /**\n * Performs validation of the given object based on decorators or validation schema.\n * Common method for `validateOrReject` and `validate` methods.\n */\n private coreValidate(objectOrSchemaName: Object|string, objectOrValidationOptions: Object|ValidationOptions, maybeValidatorOptions?: ValidatorOptions): Promise<ValidationError[]> {\n const object = typeof objectOrSchemaName === \"string\" ? objectOrValidationOptions as Object : objectOrSchemaName as Object;\n const options = typeof objectOrSchemaName === \"string\" ? maybeValidatorOptions : objectOrValidationOptions as ValidationOptions;\n const schema = typeof objectOrSchemaName === \"string\" ? objectOrSchemaName as string : undefined;\n\n const executor = new ValidationExecutor(this, options);\n const validationErrors: ValidationError[] = [];\n executor.execute(object, schema, validationErrors);\n\n return Promise.all(executor.awaitingPromises).then(() => {\n return executor.stripEmptyErrors(validationErrors);\n });\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Performs validation of the given object based on decorators used in given object class.\n */\n validate(object: Object, options?: ValidatorOptions): Promise<ValidationError[]>;\n\n /**\n * Performs validation of the given object based on validation schema.\n */\n validate(schemaName: string, object: Object, options?: ValidatorOptions): Promise<ValidationError[]>;\n\n /**\n * Performs validation of the given object based on decorators or validation schema.\n */\n validate(objectOrSchemaName: Object|string, objectOrValidationOptions: Object|ValidationOptions, maybeValidatorOptions?: ValidatorOptions): Promise<ValidationError[]> {\n return this.coreValidate(objectOrSchemaName, objectOrValidationOptions, maybeValidatorOptions);\n }\n\n /**\n * Performs validation of the given object based on decorators used in given object class and reject on error.\n */\n validateOrReject(object: Object, options?: ValidatorOptions): Promise<void>;\n\n /**\n * Performs validation of the given object based on validation schema and reject on error.\n */\n validateOrReject(schemaName: string, object: Object, options?: ValidatorOptions): Promise<void>;\n\n /**\n * Performs validation of the given object based on decorators or validation schema and reject on error.\n */\n async validateOrReject(objectOrSchemaName: Object|string, objectOrValidationOptions: Object|ValidationOptions, maybeValidatorOptions?: ValidatorOptions): Promise<void> {\n const errors = await this.coreValidate(objectOrSchemaName, objectOrValidationOptions, maybeValidatorOptions);\n if (errors.length)\n return Promise.reject(errors);\n }\n\n /**\n * Performs validation of the given object based on decorators used in given object class.\n * NOTE: This method completely ignores all async validations.\n */\n validateSync(object: Object, options?: ValidatorOptions): ValidationError[];\n\n /**\n * Performs validation of the given object based on validation schema.\n */\n validateSync(schemaName: string, object: Object, options?: ValidatorOptions): ValidationError[];\n\n /**\n * Performs validation of the given object based on decorators or validation schema.\n */\n validateSync(objectOrSchemaName: Object|string, objectOrValidationOptions: Object|ValidationOptions, maybeValidatorOptions?: ValidatorOptions): ValidationError[] {\n const object = typeof objectOrSchemaName === \"string\" ? objectOrValidationOptions as Object : objectOrSchemaName as Object;\n const options = typeof objectOrSchemaName === \"string\" ? maybeValidatorOptions : objectOrValidationOptions as ValidationOptions;\n const schema = typeof objectOrSchemaName === \"string\" ? objectOrSchemaName as string : undefined;\n\n const executor = new ValidationExecutor(this, options);\n executor.ignoreAsyncValidations = true;\n const validationErrors: ValidationError[] = [];\n executor.execute(object, schema, validationErrors);\n return executor.stripEmptyErrors(validationErrors);\n }\n\n /**\n * Performs validation of the given object based on the given ValidationMetadata object.\n */\n validateValueByMetadata(value: any, metadata: ValidationMetadata): boolean {\n switch (metadata.type) {\n /* common checkers */\n case ValidationTypes.IS_DEFINED:\n return this.isDefined(value);\n case ValidationTypes.EQUALS:\n return this.equals(value, metadata.constraints[0]);\n case ValidationTypes.NOT_EQUALS:\n return this.notEquals(value, metadata.constraints[0]);\n case ValidationTypes.IS_EMPTY:\n return this.isEmpty(value);\n case ValidationTypes.IS_NOT_EMPTY:\n return this.isNotEmpty(value);\n case ValidationTypes.IS_IN:\n return this.isIn(value, metadata.constraints[0]);\n case ValidationTypes.IS_NOT_IN:\n return this.isNotIn(value, metadata.constraints[0]);\n\n /* type checkers */\n case ValidationTypes.IS_LATLONG:\n return this.isLatLong(value);\n case ValidationTypes.IS_LATITUDE:\n return this.isLatitude(value);\n case ValidationTypes.IS_LONGITUDE:\n return this.isLongitude(value);\n case ValidationTypes.IS_BOOLEAN:\n return this.isBoolean(value);\n case ValidationTypes.IS_DATE:\n return this.isDate(value);\n case ValidationTypes.IS_STRING:\n return this.isString(value);\n case ValidationTypes.IS_DATE_STRING:\n return this.isDateString(value);\n case ValidationTypes.IS_ARRAY:\n return this.isArray(value);\n case ValidationTypes.IS_NUMBER:\n return this.isNumber(value, metadata.constraints[0]);\n case ValidationTypes.IS_INT:\n return this.isInt(value);\n case ValidationTypes.IS_ENUM:\n return this.isEnum(value, metadata.constraints[0]);\n\n /* number checkers */\n case ValidationTypes.IS_DIVISIBLE_BY:\n return this.isDivisibleBy(value, metadata.constraints[0]);\n case ValidationTypes.IS_POSITIVE:\n return this.isPositive(value);\n case ValidationTypes.IS_NEGATIVE:\n return this.isNegative(value);\n case ValidationTypes.MIN:\n return this.min(value, metadata.constraints[0]);\n case ValidationTypes.MAX:\n return this.max(value, metadata.constraints[0]);\n\n /* date checkers */\n case ValidationTypes.MIN_DATE:\n return this.minDate(value, metadata.constraints[0]);\n case ValidationTypes.MAX_DATE:\n return this.maxDate(value, metadata.constraints[0]);\n\n /* string-as-type checkers */\n case ValidationTypes.IS_BOOLEAN_STRING:\n return this.isBooleanString(value);\n case ValidationTypes.IS_NUMBER_STRING:\n return this.isNumberString(value);\n\n /* string checkers */\n case ValidationTypes.CONTAINS:\n return this.contains(value, metadata.constraints[0]);\n case ValidationTypes.NOT_CONTAINS:\n return this.notContains(value, metadata.constraints[0]);\n case ValidationTypes.IS_ALPHA:\n return this.isAlpha(value, metadata.constraints[0]);\n case ValidationTypes.IS_ALPHANUMERIC:\n return this.isAlphanumeric(value, metadata.constraints[0]);\n case ValidationTypes.IS_DECIMAL:\n return this.isDecimal(value, metadata.constraints[0]);\n case ValidationTypes.IS_ASCII:\n return this.isAscii(value);\n case ValidationTypes.IS_BASE64:\n return this.isBase64(value);\n case ValidationTypes.IS_BYTE_LENGTH:\n return this.isByteLength(value, metadata.constraints[0], metadata.constraints[1]);\n case ValidationTypes.IS_CREDIT_CARD:\n return this.isCreditCard(value);\n case ValidationTypes.IS_CURRENCY:\n return this.isCurrency(value, metadata.constraints[0]);\n case ValidationTypes.IS_EMAIL:\n return this.isEmail(value, metadata.constraints[0]);\n case ValidationTypes.IS_FQDN:\n return this.isFQDN(value, metadata.constraints[0]);\n case ValidationTypes.IS_FULL_WIDTH:\n return this.isFullWidth(value);\n case ValidationTypes.IS_HALF_WIDTH:\n return this.isHalfWidth(value);\n case ValidationTypes.IS_VARIABLE_WIDTH:\n return this.isVariableWidth(value);\n case ValidationTypes.IS_HEX_COLOR:\n return this.isHexColor(value);\n case ValidationTypes.IS_HEXADECIMAL:\n return this.isHexadecimal(value);\n case ValidationTypes.IS_IP:\n return this.isIP(value, metadata.constraints[0]);\n case ValidationTypes.IS_PORT:\n return this.isPort(value);\n case ValidationTypes.IS_ISBN:\n return this.isISBN(value, metadata.constraints[0]);\n case ValidationTypes.IS_ISIN:\n return this.isISIN(value);\n case ValidationTypes.IS_ISO8601:\n return this.isISO8601(value);\n case ValidationTypes.IS_JSON:\n return this.isJSON(value);\n case ValidationTypes.IS_OBJECT:\n return this.isObject(value);\n case ValidationTypes.IS_NOT_EMPTY_OBJECT:\n return this.isNotEmptyObject(value);\n case ValidationTypes.IS_LOWERCASE:\n return this.isLowercase(value);\n case ValidationTypes.IS_MOBILE_PHONE:\n return this.isMobilePhone(value, metadata.constraints[0]);\n case ValidationTypes.IS_PHONE_NUMBER:\n return this.isPhoneNumber(value, metadata.constraints[0]);\n case ValidationTypes.IS_ISO31661_ALPHA_2:\n return this.isISO31661Alpha2(value);\n case ValidationTypes.IS_ISO31661_ALPHA_3:\n return this.isISO31661Alpha3(value);\n case ValidationTypes.IS_MONGO_ID:\n return this.isMongoId(value);\n case ValidationTypes.IS_MULTIBYTE:\n return this.isMultibyte(value);\n case ValidationTypes.IS_SURROGATE_PAIR:\n return this.isSurrogatePair(value);\n case ValidationTypes.IS_URL:\n return this.isURL(value, metadata.constraints[0]);\n case ValidationTypes.IS_UUID:\n return this.isUUID(value, metadata.constraints[0]);\n case ValidationTypes.IS_UPPERCASE:\n return this.isUppercase(value);\n case ValidationTypes.LENGTH:\n return this.length(value, metadata.constraints[0], metadata.constraints[1]);\n case ValidationTypes.MIN_LENGTH:\n return this.minLength(value, metadata.constraints[0]);\n case ValidationTypes.MAX_LENGTH:\n return this.maxLength(value, metadata.constraints[0]);\n case ValidationTypes.MATCHES:\n return this.matches(value, metadata.constraints[0], metadata.constraints[1]);\n case ValidationTypes.IS_MILITARY_TIME:\n return this.isMilitaryTime(value);\n\n /* array checkers */\n case ValidationTypes.ARRAY_CONTAINS:\n return this.arrayContains(value, metadata.constraints[0]);\n case ValidationTypes.ARRAY_NOT_CONTAINS:\n return this.arrayNotContains(value, metadata.constraints[0]);\n case ValidationTypes.ARRAY_NOT_EMPTY:\n return this.arrayNotEmpty(value);\n case ValidationTypes.ARRAY_MIN_SIZE:\n return this.arrayMinSize(value, metadata.constraints[0]);\n case ValidationTypes.ARRAY_MAX_SIZE:\n return this.arrayMaxSize(value, metadata.constraints[0]);\n case ValidationTypes.ARRAY_UNIQUE:\n return this.arrayUnique(value);\n\n case ValidationTypes.IS_INSTANCE:\n return this.isInstance(value, metadata.constraints[0]);\n }\n return true;\n }\n\n // -------------------------------------------------------------------------\n // Validation Methods: common checkers\n // -------------------------------------------------------------------------\n\n /**\n * Checks if value is defined (!== undefined, !== null).\n */\n isDefined(value: unknown): boolean {\n return value !== undefined && value !== null;\n }\n\n /**\n * Checks if value matches (\"===\") the comparison.\n */\n equals(value: unknown, comparison: unknown): boolean {\n return value === comparison;\n }\n\n /**\n * Checks if value does not match (\"!==\") the comparison.\n */\n notEquals(value: unknown, comparison: unknown): boolean {\n return value !== comparison;\n }\n\n /**\n * Checks if given value is empty (=== '', === null, === undefined).\n */\n isEmpty(value: unknown): boolean {\n return value === \"\" || value === null || value === undefined;\n }\n\n /**\n * Checks if given value is not empty (!== '', !== null, !== undefined).\n */\n isNotEmpty(value: unknown): boolean {\n return value !== \"\" && value !== null && value !== undefined;\n }\n\n /**\n * Checks if given value is in a array of allowed values.\n */\n isIn(value: unknown, possibleValues: unknown[]): boolean {\n return !(possibleValues instanceof Array) || possibleValues.some(possibleValue => possibleValue === value);\n }\n\n /**\n * Checks if given value not in a array of allowed values.\n */\n isNotIn(value: unknown, possibleValues: unknown[]): boolean {\n return !(possibleValues instanceof Array) || !possibleValues.some(possibleValue => possibleValue === value);\n }\n\n // -------------------------------------------------------------------------\n // Validation Methods: type checkers\n // -------------------------------------------------------------------------\n\n /**\n * Checks if a given value is a real boolean.\n */\n isBoolean(value: unknown): boolean {\n return value instanceof Boolean || typeof value === \"boolean\";\n }\n\n\n /**\n * Checks if a given value is a latitude.\n */\n isLatLong(value: unknown): boolean {\n return typeof value === \"string\" && this.validatorJs.isLatLong(value);\n }\n\n /**\n * Checks if a given value is a latitude.\n */\n isLatitude(value: unknown): boolean {\n return (typeof value === \"number\" || this.isString(value)) && this.isLatLong(`0,${value}`);\n }\n\n /**\n * Checks if a given value is a longitude.\n */\n isLongitude(value: unknown): boolean {\n return (typeof value === \"number\" || this.isString(value)) && this.isLatLong(`${value},0`);\n }\n\n /**\n * Checks if a given value is a real date.\n */\n isDate(value: unknown): boolean {\n return value instanceof Date && !isNaN(value.getTime());\n }\n\n /**\n * Checks if a given value is a real string.\n */\n isString(value: unknown): value is string {\n return value instanceof String || typeof value === \"string\";\n }\n\n /**\n * Checks if a given value is a ISOString date.\n */\n isDateString(value: unknown): boolean {\n const regex = /^\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|\\+[0-2]\\d(?:\\:[0-5]\\d)?)?$/g;\n return this.isString(value) && regex.test(value);\n }\n\n /**\n * Checks if a given value is an array\n */\n isArray(value: unknown): boolean {\n return value instanceof Array;\n }\n\n /**\n * Checks if a given value is an enum\n */\n isEnum(value: unknown, entity: any): boolean {\n const enumValues = Object.keys(entity)\n .map(k => entity[k]);\n return enumValues.indexOf(value) >= 0;\n }\n\n /**\n * Checks if a given value is a number.\n */\n isNumber(value: unknown, options: IsNumberOptions = {}): boolean {\n if (typeof value !== \"number\") {\n return false;\n }\n\n if (value === Infinity || value === -Infinity) {\n return options.allowInfinity;\n }\n\n if (Number.isNaN(value)) {\n return options.allowNaN;\n }\n\n return Number.isFinite(value);\n }\n\n /**\n * Checks if value is an integer.\n */\n isInt(val: unknown): boolean {\n return typeof val === \"number\" && Number.isInteger(val);\n }\n\n // -------------------------------------------------------------------------\n // Validation Methods: number checkers\n // -------------------------------------------------------------------------\n\n /**\n * Checks if value is a number that's divisible by another.\n */\n isDivisibleBy(value: unknown, num: number): boolean {\n return typeof value === \"number\" &&\n typeof num === \"number\" &&\n this.validatorJs.isDivisibleBy(String(value), num);\n }\n\n /**\n * Checks if the value is a positive number.\n */\n isPositive(value: unknown): boolean {\n return typeof value === \"number\" && value > 0;\n }\n\n /**\n * Checks if the value is a negative number.\n */\n isNegative(value: unknown): boolean {\n return typeof value === \"number\" && value < 0;\n }\n\n /**\n * Checks if the first number is greater than or equal to the second.\n */\n min(num: unknown, min: number): boolean {\n return typeof num === \"number\" && typeof min === \"number\" && num >= min;\n }\n\n /**\n * Checks if the first number is less than or equal to the second.\n */\n max(num: unknown, max: number): boolean {\n return typeof num === \"number\" && typeof max === \"number\" && num <= max;\n }\n\n // -------------------------------------------------------------------------\n // Validation Methods: date checkers\n // -------------------------------------------------------------------------\n\n /**\n * Checks if the value is a date that's after the specified date.\n */\n minDate(date: unknown, minDate: Date): boolean {\n return date instanceof Date && date.getTime() >= minDate.getTime();\n }\n\n /**\n * Checks if the value is a date that's before the specified date.\n */\n maxDate(date: unknown, maxDate: Date): boolean {\n return date instanceof Date && date.getTime() <= maxDate.getTime();\n }\n\n // -------------------------------------------------------------------------\n // Validation Methods: string-as-type checkers\n // -------------------------------------------------------------------------\n\n /**\n * Checks if a string is a boolean.\n * If given value is not a string, then it returns false.\n */\n isBooleanString(value: unknown): boolean {\n return typeof value === \"string\" && this.validatorJs.isBoolean(value);\n }\n\n /**\n * Checks if the string is numeric.\n * If given value is not a string, then it returns false.\n */\n isNumberString(value: unknown, options?: ValidatorJS.IsNumericOptions): boolean {\n return typeof value === \"string\" && this.validatorJs.isNumeric(value, options);\n }\n\n // -------------------------------------------------------------------------\n // Validation Methods: string checkers\n // -------------------------------------------------------------------------\n\n /**\n * Checks if the string contains the seed.\n * If given value is not a string, then it returns false.\n */\n contains(value: unknown, seed: string): boolean {\n return typeof value === \"string\" && this.validatorJs.contains(value, seed);\n }\n\n /**\n * Checks if the string does not contain the seed.\n * If given value is not a string, then it returns false.\n */\n notContains(value: unknown, seed: string): boolean {\n return typeof value === \"string\" && !this.validatorJs.contains(value, seed);\n }\n\n /**\n * Checks if the string contains only letters (a-zA-Z).\n * If given value is not a string, then it returns false.\n */\n isAlpha(value: unknown, locale?: ValidatorJS.AlphaLocale): boolean {\n return typeof value === \"string\" && this.validatorJs.isAlpha(value, locale);\n }\n\n /**\n * Checks if the string contains only letters and numbers.\n * If given value is not a string, then it returns false.\n */\n isAlphanumeric(value: unknown, locale?: ValidatorJS.AlphanumericLocale): boolean {\n return typeof value === \"string\" && this.validatorJs.isAlphanumeric(value, locale);\n }\n\n /**\n * Checks if the string is a valid decimal.\n * If given value is not a string, then it returns false.\n */\n isDecimal(value: unknown, options?: ValidatorJS.IsDecimalOptions): boolean {\n return typeof value === \"string\" && this.validatorJs.isDecimal(value, options);\n }\n\n\n /**\n * Checks if the string contains ASCII chars only.\n * If given value is not a string, then it returns false.\n */\n isAscii(value: unknown): boolean {\n return typeof value === \"string\" && this.validatorJs.isAscii(value);\n }\n\n /**\n * Checks if a string is base64 encoded.\n * If given value is not a string, then it returns false.\n */\n isBase64(value: unknown): boolean {\n return typeof value === \"string\" && this.validatorJs.isBase64(value);\n }\n\n /**\n * Checks if the string's length (in bytes) falls in a range.\n * If given value is not a string, then it returns false.\n */\n isByteLength(value: unknown, min: number, max?: number): boolean {\n return typeof value === \"string\" && this.validatorJs.isByteLength(value, min, max);\n }\n\n /**\n * Checks if the string is a credit card.\n * If given value is not a string, then it returns false.\n */\n isCreditCard(value: unknown): boolean {\n return typeof value === \"string\" && this.validatorJs.isCreditCard(value);\n }\n\n /**\n * Checks if the string is a valid currency amount.\n * If given value is not a string, then it returns false.\n */\n isCurrency(value: unknown, options?: ValidatorJS.IsCurrencyOptions): boolean {\n return typeof value === \"string\" && this.validatorJs.isCurrency(value, options);\n }\n\n /**\n * Checks if the string is an email.\n * If given value is not a string, then it returns false.\n */\n isEmail(value: unknown, options?: ValidatorJS.IsEmailOptions): boolean {\n return typeof value === \"string\" && this.validatorJs.isEmail(value, options);\n }\n\n /**\n * Checks if the string is a fully qualified domain name (e.g. domain.com).\n * If given value is not a string, then it returns false.\n */\n isFQDN(value: unknown, options?: ValidatorJS.IsFQDNOptions): boolean {\n return typeof value === \"string\" && this.validatorJs.isFQDN(value, options);\n }\n\n /**\n * Checks if the string contains any full-width chars.\n * If given value is not a string, then it returns false.\n */\n isFullWidth(value: unknown): boolean {\n return typeof value === \"string\" && this.validatorJs.isFullWidth(value);\n }\n\n /**\n * Checks if the string contains any half-width chars.\n * If given value is not a string, then it returns false.\n */\n isHalfWidth(value: unknown): boolean {\n return typeof value === \"string\" && this.validatorJs.isHalfWidth(value);\n }\n\n /**\n * Checks if the string contains variable-width chars.\n * If given value is not a string, then it returns false.\n */\n isVariableWidth(value: unknown): boolean {\n return typeof value === \"string\" && this.validatorJs.isVariableWidth(value);\n }\n\n /**\n * Checks if the string is a hexadecimal color.\n * If given value is not a string, then it returns false.\n */\n isHexColor(value: unknown): boolean {\n return typeof value === \"string\" && this.validatorJs.isHexColor(value);\n }\n\n /**\n * Checks if the string is a hexadecimal number.\n * If given value is not a string, then it returns false.\n */\n isHexadecimal(value: unknown): boolean {\n return typeof value === \"string\" && this.validatorJs.isHexadecimal(value);\n }\n\n /**\n * Checks if the string is an IP (version 4 or 6).\n * If given value is not a string, then it returns false.\n */\n isIP(value: unknown, version?: number): boolean {\n return typeof value === \"string\" && this.validatorJs.isIP(value, version);\n }\n\n /**\n * Check if the string is a valid port number.\n */\n isPort(value: unknown): boolean {\n return typeof value === \"string\" && this.validatorJs.isPort(value);\n }\n\n /**\n * Checks if the string is an ISBN (version 10 or 13).\n * If given value is not a string, then it returns false.\n */\n isISBN(value: unknown, version?: number): boolean {\n return typeof value === \"string\" && this.validatorJs.isISBN(value, version);\n }\n\n /**\n * Checks if the string is an ISIN (stock/security identifier).\n * If given value is not a string, then it returns false.\n */\n isISIN(value: unknown): boolean {\n return typeof value === \"string\" && this.validatorJs.isISIN(value);\n }\n\n /**\n * Checks if the string is a valid ISO 8601 date.\n * If given value is not a string, then it returns false.\n */\n isISO8601(value: unknown): boolean {\n return typeof value === \"string\" && this.validatorJs.isISO8601(value);\n }\n\n /**\n * Checks if the string is valid JSON (note: uses JSON.parse).\n * If given value is not a string, then it returns false.\n */\n isJSON(value: unknown): boolean {\n return typeof value === \"string\" && this.validatorJs.isJSON(value);\n }\n\n /**\n * Checks if the value is valid Object.\n * Returns false if the value is not an object.\n */\n isObject(value: unknown): value is object {\n return value != null && (typeof value === \"object\" || typeof value === \"function\") && !Array.isArray(value);\n }\n\n /**\n * Checks if the value is valid Object & not empty.\n * Returns false if the value is not an object or an empty valid object.\n */\n isNotEmptyObject(value: unknown): boolean {\n return this.isObject(value) && !this._isEmptyObject(value);\n }\n\n /**\n * Checks if the string is lowercase.\n * If given value is not a string, then it returns false.\n */\n isLowercase(value: unknown): boolean {\n return typeof value === \"string\" && this.validatorJs.isLowercase(value);\n }\n\n /**\n * Checks if the string is a mobile phone number (locale is one of ['zh-CN', 'zh-TW', 'en-ZA', 'en-AU', 'en-HK',\n * 'pt-PT', 'fr-FR', 'el-GR', 'en-GB', 'en-US', 'en-ZM', 'ru-RU', 'nb-NO', 'nn-NO', 'vi-VN', 'en-NZ']).\n * If given value is not a string, then it returns false.\n */\n isMobilePhone(value: unknown, locale: ValidatorJS.MobilePhoneLocale): boolean {\n return typeof value === \"string\" && this.validatorJs.isMobilePhone(value, locale);\n }\n\n /**\n * Checks if the string is a valid phone number.\n * @param value the potential phone number string to test\n * @param {string} region 2 characters uppercase country code (e.g. DE, US, CH).\n * If users must enter the intl. prefix (e.g. +41), then you may pass \"ZZ\" or null as region.\n * See [google-libphonenumber, metadata.js:countryCodeToRegionCodeMap on github]{@link https://github.com/ruimarinho/google-libphonenumber/blob/1e46138878cff479aafe2ce62175c6c49cb58720/src/metadata.js#L33}\n */\n isPhoneNumber(value: unknown, region: string): boolean {\n try {\n const phoneNum = this.libPhoneNumber.phoneUtil.parseAndKeepRawInput(value, region);\n return this.libPhoneNumber.phoneUtil.isValidNumber(phoneNum);\n } catch (error) {\n // logging?\n return false;\n }\n }\n\n /**\n * Check if the string is a valid [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) officially assigned country code.\n */\n isISO31661Alpha2(value: unknown): boolean {\n return typeof value === \"string\" && this.validatorJs.isISO31661Alpha2(value);\n }\n\n /**\n * Check if the string is a valid [ISO 3166-1 alpha-3](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3) officially assigned country code.\n */\n isISO31661Alpha3(value: unknown): boolean {\n return typeof value === \"string\" && this.validatorJs.isISO31661Alpha3(value);\n }\n\n /**\n * Checks if the string is a valid hex-encoded representation of a MongoDB ObjectId.\n * If given value is not a string, then it returns false.\n */\n isMongoId(value: unknown): boolean {\n return typeof value === \"string\" && this.validatorJs.isMongoId(value);\n }\n\n /**\n * Checks if the string contains one or more multibyte chars.\n * If given value is not a string, then it returns false.\n */\n isMultibyte(value: unknown): boolean {\n return typeof value === \"string\" && this.validatorJs.isMultibyte(value);\n }\n\n /**\n * Checks if the string contains any surrogate pairs chars.\n * If given value is not a string, then it returns false.\n */\n isSurrogatePair(value: unknown): boolean {\n return typeof value === \"string\" && this.validatorJs.isSurrogatePair(value);\n }\n\n /**\n * Checks if the string is an url.\n * If given value is not a string, then it returns false.\n */\n isURL(value: unknown, options?: ValidatorJS.IsURLOptions): boolean {\n return typeof value === \"string\" && this.validatorJs.isURL(value, options);\n }\n\n /**\n * Checks if the string is a UUID (version 3, 4 or 5).\n * If given value is not a string, then it returns false.\n */\n isUUID(value: unknown, version?: \"3\"|\"4\"|\"5\"): boolean {\n return typeof value === \"string\" && this.validatorJs.isUUID(value, version);\n }\n\n /**\n * Checks if the string is uppercase.\n * If given value is not a string, then it returns false.\n */\n isUppercase(value: unknown): boolean {\n return typeof value === \"string\" && this.validatorJs.isUppercase(value);\n }\n\n /**\n * Checks if the string's length falls in a range. Note: this function takes into account surrogate pairs.\n * If given value is not a string, then it returns false.\n */\n length(value: unknown, min: number, max?: number): boolean {\n return typeof value === \"string\" && this.validatorJs.isLength(value, min, max);\n }\n\n /**\n * Checks if the string's length is not less than given number. Note: this function takes into account surrogate pairs.\n * If given value is not a string, then it returns false.\n */\n minLength(value: unknown, min: number) {\n return typeof value === \"string\" && this.length(value, min);\n }\n\n /**\n * Checks if the string's length is not more than given number. Note: this function takes into account surrogate pairs.\n * If given value is not a string, then it returns false.\n */\n maxLength(value: unknown, max: number) {\n return typeof value === \"string\" && this.length(value, 0, max);\n }\n\n /**\n * Checks if string matches the pattern. Either matches('foo', /foo/i) or matches('foo', 'foo', 'i').\n * If given value is not a string, then it returns false.\n */\n matches(value: unknown, pattern: RegExp, modifiers?: string): boolean {\n return typeof value === \"string\" && this.validatorJs.matches(value, pattern, modifiers);\n }\n\n /**\n * Checks if the string represents a time without a given timezone in the format HH:MM (military)\n * If the given value does not match the pattern HH:MM, then it returns false.\n */\n isMilitaryTime(value: unknown): boolean {\n return this.matches(value, /^([01]\\d|2[0-3]):?([0-5]\\d)$/);\n }\n\n // -------------------------------------------------------------------------\n // Validation Methods: array checkers\n // -------------------------------------------------------------------------\n\n /**\n * Checks if array contains all values from the given array of values.\n * If null or undefined is given then this function returns false.\n */\n arrayContains(array: unknown, values: any[]) {\n if (!(array instanceof Array))\n return false;\n\n return values.every(value => array.indexOf(value) !== -1);\n }\n\n /**\n * Checks if array does not contain any of the given values.\n * If null or undefined is given then this function returns false.\n */\n arrayNotContains(array: unknown, values: any[]) {\n if (!(array instanceof Array))\n return false;\n\n return values.every(value => array.indexOf(value) === -1);\n }\n\n /**\n * Checks if given array is not empty.\n * If null or undefined is given then this function returns false.\n */\n arrayNotEmpty(array: unknown) {\n return array instanceof Array && array.length > 0;\n }\n\n /**\n * Checks if array's length is as minimal this number.\n * If null or undefined is given then this function returns false.\n */\n arrayMinSize(array: unknown, min: number) {\n return array instanceof Array && array.length >= min;\n }\n\n /**\n * Checks if array's length is as maximal this number.\n * If null or undefined is given then this function returns false.\n */\n arrayMaxSize(array: unknown, max: number) {\n return array instanceof Array && array.length <= max;\n }\n\n /**\n * Checks if all array's values are unique. Comparison for objects is reference-based.\n * If null or undefined is given then this function returns false.\n */\n arrayUnique(array: unknown) {\n if (!(array instanceof Array))\n return false;\n\n const uniqueItems = array.filter((a, b, c) => c.indexOf(a) === b);\n return array.length === uniqueItems.length;\n }\n\n /**\n * Checks if the value is an instance of the specified object.\n */\n isInstance(object: unknown, targetTypeConstructor: new (...args: any[]) => any) {\n return targetTypeConstructor\n && typeof targetTypeConstructor === \"function\"\n && object instanceof targetTypeConstructor;\n }\n\n}\n"],"sourceRoot":".."} |
Sorry, the diff of this file is too big to display
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
493430
4.92%4627
4.87%1060
1.05%