我智商爆棚
 
 
 
 
 

3582 lines
150 KiB

(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('tslib'), require('validator'), require('google-libphonenumber')) :
typeof define === 'function' && define.amd ? define(['exports', 'tslib', 'validator', 'google-libphonenumber'], factory) :
(global = global || self, factory(global.ClassValidator = {}, global.tslib_1, global.validator, global.googleLibphonenumber));
}(this, (function (exports, tslib_1, validator, googleLibphonenumber) { 'use strict';
validator = validator && Object.prototype.hasOwnProperty.call(validator, 'default') ? validator['default'] : validator;
/**
* This metadata contains validation rules.
*/
var ValidationMetadata = /** @class */ (function () {
// -------------------------------------------------------------------------
// Constructor
// -------------------------------------------------------------------------
function ValidationMetadata(args) {
/**
* Validation groups used for this validation.
*/
this.groups = [];
/**
* Indicates if validation must be performed always, no matter of validation groups used.
*/
this.always = false;
/**
* Specifies if validated value is an array and each of its item must be validated.
*/
this.each = false;
/*
* A transient set of data passed through to the validation result for response mapping
*/
this.context = undefined;
this.type = args.type;
this.target = args.target;
this.propertyName = args.propertyName;
this.constraints = args.constraints;
this.constraintCls = args.constraintCls;
this.validationTypeOptions = args.validationTypeOptions;
if (args.validationOptions) {
this.message = args.validationOptions.message;
this.groups = args.validationOptions.groups;
this.always = args.validationOptions.always;
this.each = args.validationOptions.each;
this.context = args.validationOptions.context;
}
}
return ValidationMetadata;
}());
/**
* Used to transform validation schemas to validation metadatas.
*/
var ValidationSchemaToMetadataTransformer = /** @class */ (function () {
function ValidationSchemaToMetadataTransformer() {
}
ValidationSchemaToMetadataTransformer.prototype.transform = function (schema) {
var metadatas = [];
Object.keys(schema.properties).forEach(function (property) {
schema.properties[property].forEach(function (validation) {
var validationOptions = {
message: validation.message,
groups: validation.groups,
always: validation.always,
each: validation.each
};
var args = {
type: validation.type,
target: schema.name,
propertyName: property,
constraints: validation.constraints,
validationTypeOptions: validation.options,
validationOptions: validationOptions
};
metadatas.push(new ValidationMetadata(args));
});
});
return metadatas;
};
return ValidationSchemaToMetadataTransformer;
}());
/**
* Gets metadata storage.
* Metadata storage follows the best practices and stores metadata in a global variable.
*/
function getMetadataStorage() {
if (typeof window !== "undefined") {
window.global = window;
}
if (!global.classValidatorMetadataStorage)
global.classValidatorMetadataStorage = new MetadataStorage();
return global.classValidatorMetadataStorage;
}
/**
* Storage all metadatas.
*/
var MetadataStorage = /** @class */ (function () {
function MetadataStorage() {
// -------------------------------------------------------------------------
// Private properties
// -------------------------------------------------------------------------
this.validationMetadatas = [];
this.constraintMetadatas = [];
}
Object.defineProperty(MetadataStorage.prototype, "hasValidationMetaData", {
get: function () {
return !!this.validationMetadatas.length;
},
enumerable: true,
configurable: true
});
// -------------------------------------------------------------------------
// Public Methods
// -------------------------------------------------------------------------
/**
* Adds a new validation metadata.
*/
MetadataStorage.prototype.addValidationSchema = function (schema) {
var _this = this;
var validationMetadatas = new ValidationSchemaToMetadataTransformer().transform(schema);
validationMetadatas.forEach(function (validationMetadata) { return _this.addValidationMetadata(validationMetadata); });
};
/**
* Adds a new validation metadata.
*/
MetadataStorage.prototype.addValidationMetadata = function (metadata) {
this.validationMetadatas.push(metadata);
};
/**
* Adds a new constraint metadata.
*/
MetadataStorage.prototype.addConstraintMetadata = function (metadata) {
this.constraintMetadatas.push(metadata);
};
/**
* Groups metadata by their property names.
*/
MetadataStorage.prototype.groupByPropertyName = function (metadata) {
var grouped = {};
metadata.forEach(function (metadata) {
if (!grouped[metadata.propertyName])
grouped[metadata.propertyName] = [];
grouped[metadata.propertyName].push(metadata);
});
return grouped;
};
/**
* Gets all validation metadatas for the given object with the given groups.
*/
MetadataStorage.prototype.getTargetValidationMetadatas = function (targetConstructor, targetSchema, groups) {
// get directly related to a target metadatas
var originalMetadatas = this.validationMetadatas.filter(function (metadata) {
if (metadata.target !== targetConstructor && metadata.target !== targetSchema)
return false;
if (metadata.always)
return true;
if (groups && groups.length > 0)
return metadata.groups && !!metadata.groups.find(function (group) { return groups.indexOf(group) !== -1; });
return true;
});
// get metadatas for inherited classes
var inheritedMetadatas = this.validationMetadatas.filter(function (metadata) {
// if target is a string it's means we validate agains a schema, and there is no inheritance support for schemas
if (typeof metadata.target === "string")
return false;
if (metadata.target === targetConstructor)
return false;
if (metadata.target instanceof Function &&
!(targetConstructor.prototype instanceof metadata.target))
return false;
if (metadata.always)
return true;
if (groups && groups.length > 0)
return metadata.groups && !!metadata.groups.find(function (group) { return groups.indexOf(group) !== -1; });
return true;
});
// filter out duplicate metadatas, prefer original metadatas instead of inherited metadatas
var uniqueInheritedMetadatas = inheritedMetadatas.filter(function (inheritedMetadata) {
return !originalMetadatas.find(function (originalMetadata) {
return originalMetadata.propertyName === inheritedMetadata.propertyName &&
originalMetadata.type === inheritedMetadata.type;
});
});
return originalMetadatas.concat(uniqueInheritedMetadatas);
};
/**
* Gets all validator constraints for the given object.
*/
MetadataStorage.prototype.getTargetValidatorConstraints = function (target) {
return this.constraintMetadatas.filter(function (metadata) { return metadata.target === target; });
};
return MetadataStorage;
}());
/**
* Validation error description.
*/
var ValidationError = /** @class */ (function () {
function ValidationError() {
}
/**
*
* @param shouldDecorate decorate the message with ANSI formatter escape codes for better readability
* @param hasParent true when the error is a child of an another one
* @param parentPath path as string to the parent of this property
*/
ValidationError.prototype.toString = function (shouldDecorate, hasParent, parentPath) {
var _this = this;
if (shouldDecorate === void 0) { shouldDecorate = false; }
if (hasParent === void 0) { hasParent = false; }
if (parentPath === void 0) { parentPath = ""; }
var boldStart = shouldDecorate ? "\u001B[1m" : "";
var boldEnd = shouldDecorate ? "\u001B[22m" : "";
var propConstraintFailed = function (propertyName) { return " - property " + boldStart + parentPath + propertyName + boldEnd + " has failed the following constraints: " + boldStart + Object.keys(_this.constraints).join(", ") + boldEnd + " \n"; };
if (!hasParent) {
return "An instance of " + boldStart + (this.target ? this.target.constructor.name : "an object") + boldEnd + " has failed the validation:\n" +
(this.constraints ? propConstraintFailed(this.property) : "") +
this.children
.map(function (childError) { return childError.toString(shouldDecorate, true, _this.property); })
.join("");
}
else {
// we format numbers as array indexes for better readability.
var formattedProperty_1 = Number.isInteger(+this.property) ? "[" + this.property + "]" : "" + (parentPath ? "." : "") + this.property;
if (this.constraints) {
return propConstraintFailed(formattedProperty_1);
}
else {
return this.children
.map(function (childError) { return childError.toString(shouldDecorate, true, "" + parentPath + formattedProperty_1); })
.join("");
}
}
};
return ValidationError;
}());
/**
* Validation types.
*/
var ValidationTypes = /** @class */ (function () {
function ValidationTypes() {
}
/**
* Checks if validation type is valid.
*/
ValidationTypes.isValid = function (type) {
var _this = this;
return type !== "isValid" &&
type !== "getMessage" &&
Object.keys(this).map(function (key) { return _this[key]; }).indexOf(type) !== -1;
};
/* system */
ValidationTypes.CUSTOM_VALIDATION = "customValidation"; // done
ValidationTypes.NESTED_VALIDATION = "nestedValidation"; // done
ValidationTypes.PROMISE_VALIDATION = "promiseValidation"; // done
ValidationTypes.CONDITIONAL_VALIDATION = "conditionalValidation"; // done
ValidationTypes.WHITELIST = "whitelistValidation"; // done
ValidationTypes.IS_DEFINED = "isDefined"; // done
return ValidationTypes;
}());
var ValidationUtils = /** @class */ (function () {
function ValidationUtils() {
}
ValidationUtils.replaceMessageSpecialTokens = function (message, validationArguments) {
var messageString;
if (message instanceof Function) {
messageString = message(validationArguments);
}
else if (typeof message === "string") {
messageString = message;
}
if (messageString && validationArguments.constraints instanceof Array) {
validationArguments.constraints.forEach(function (constraint, index) {
messageString = messageString.replace(new RegExp("\\$constraint" + (index + 1), "g"), constraint);
});
}
if (messageString && validationArguments.value !== undefined && validationArguments.value !== null && typeof validationArguments.value === "string")
messageString = messageString.replace(/\$value/g, validationArguments.value);
if (messageString)
messageString = messageString.replace(/\$property/g, validationArguments.property);
if (messageString)
messageString = messageString.replace(/\$target/g, validationArguments.targetName);
return messageString;
};
return ValidationUtils;
}());
// https://github.com/TylorS/typed-is-promise/blob/abf1514e1b6961adfc75765476b0debb96b2c3ae/src/index.ts
function isPromise(p) {
return p !== null && typeof p === "object" && typeof p.then === "function";
}
/**
* 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);
}
/**
* Executes validation over given object.
*/
var ValidationExecutor = /** @class */ (function () {
// -------------------------------------------------------------------------
// Constructor
// -------------------------------------------------------------------------
function ValidationExecutor(validator, validatorOptions) {
this.validator = validator;
this.validatorOptions = validatorOptions;
// -------------------------------------------------------------------------
// Properties
// -------------------------------------------------------------------------
this.awaitingPromises = [];
this.ignoreAsyncValidations = false;
// -------------------------------------------------------------------------
// Private Properties
// -------------------------------------------------------------------------
this.metadataStorage = getMetadataStorage();
}
// -------------------------------------------------------------------------
// Public Methods
// -------------------------------------------------------------------------
ValidationExecutor.prototype.execute = function (object, targetSchema, validationErrors) {
var _this = this;
/**
* If there is no metadata registered it means possibly the dependencies are not flatterned and
* more than one instance is used.
*
* TODO: This needs proper handling, forcing to use the same container or some other proper solution.
*/
if (!this.metadataStorage.hasValidationMetaData) {
console.warn("No metadata found. There is more than once class-validator version installed probably. You need to flatten your dependencies.");
}
var groups = this.validatorOptions ? this.validatorOptions.groups : undefined;
var targetMetadatas = this.metadataStorage.getTargetValidationMetadatas(object.constructor, targetSchema, groups);
var groupedMetadatas = this.metadataStorage.groupByPropertyName(targetMetadatas);
if (this.validatorOptions && this.validatorOptions.forbidUnknownValues && !targetMetadatas.length) {
var validationError = new ValidationError();
if (!this.validatorOptions ||
!this.validatorOptions.validationError ||
this.validatorOptions.validationError.target === undefined ||
this.validatorOptions.validationError.target === true)
validationError.target = object;
validationError.value = undefined;
validationError.property = undefined;
validationError.children = [];
validationError.constraints = { unknownValue: "an unknown value was passed to the validate function" };
validationErrors.push(validationError);
return;
}
if (this.validatorOptions && this.validatorOptions.whitelist)
this.whitelist(object, groupedMetadatas, validationErrors);
// General validation
Object.keys(groupedMetadatas).forEach(function (propertyName) {
var value = object[propertyName];
var definedMetadatas = groupedMetadatas[propertyName].filter(function (metadata) { return metadata.type === ValidationTypes.IS_DEFINED; });
var metadatas = groupedMetadatas[propertyName].filter(function (metadata) { return metadata.type !== ValidationTypes.IS_DEFINED && metadata.type !== ValidationTypes.WHITELIST; });
if (value instanceof Promise && metadatas.find(function (metadata) { return metadata.type === ValidationTypes.PROMISE_VALIDATION; })) {
_this.awaitingPromises.push(value.then(function (resolvedValue) {
_this.performValidations(object, resolvedValue, propertyName, definedMetadatas, metadatas, validationErrors);
}));
}
else {
_this.performValidations(object, value, propertyName, definedMetadatas, metadatas, validationErrors);
}
});
};
ValidationExecutor.prototype.whitelist = function (object, groupedMetadatas, validationErrors) {
var _this = this;
var notAllowedProperties = [];
Object.keys(object).forEach(function (propertyName) {
// does this property have no metadata?
if (!groupedMetadatas[propertyName] || groupedMetadatas[propertyName].length === 0)
notAllowedProperties.push(propertyName);
});
if (notAllowedProperties.length > 0) {
if (this.validatorOptions && this.validatorOptions.forbidNonWhitelisted) {
// throw errors
notAllowedProperties.forEach(function (property) {
var _a;
var validationError = _this.generateValidationError(object, object[property], property);
validationError.constraints = (_a = {}, _a[ValidationTypes.WHITELIST] = "property " + property + " should not exist", _a);
validationError.children = undefined;
validationErrors.push(validationError);
});
}
else {
// strip non allowed properties
notAllowedProperties.forEach(function (property) { return delete object[property]; });
}
}
};
ValidationExecutor.prototype.stripEmptyErrors = function (errors) {
var _this = this;
return errors.filter(function (error) {
if (error.children) {
error.children = _this.stripEmptyErrors(error.children);
}
if (Object.keys(error.constraints).length === 0) {
if (error.children.length === 0) {
return false;
}
else {
delete error.constraints;
}
}
return true;
});
};
// -------------------------------------------------------------------------
// Private Methods
// -------------------------------------------------------------------------
ValidationExecutor.prototype.performValidations = function (object, value, propertyName, definedMetadatas, metadatas, validationErrors) {
var customValidationMetadatas = metadatas.filter(function (metadata) { return metadata.type === ValidationTypes.CUSTOM_VALIDATION; });
var nestedValidationMetadatas = metadatas.filter(function (metadata) { return metadata.type === ValidationTypes.NESTED_VALIDATION; });
var conditionalValidationMetadatas = metadatas.filter(function (metadata) { return metadata.type === ValidationTypes.CONDITIONAL_VALIDATION; });
var validationError = this.generateValidationError(object, value, propertyName);
validationErrors.push(validationError);
var canValidate = this.conditionalValidations(object, value, conditionalValidationMetadatas);
if (!canValidate) {
return;
}
// handle IS_DEFINED validation type the special way - it should work no matter skipUndefinedProperties/skipMissingProperties is set or not
this.customValidations(object, value, definedMetadatas, validationError);
this.mapContexts(object, value, definedMetadatas, validationError);
if (value === undefined && this.validatorOptions && this.validatorOptions.skipUndefinedProperties === true) {
return;
}
if (value === null && this.validatorOptions && this.validatorOptions.skipNullProperties === true) {
return;
}
if ((value === null || value === undefined) && this.validatorOptions && this.validatorOptions.skipMissingProperties === true) {
return;
}
this.customValidations(object, value, customValidationMetadatas, validationError);
this.nestedValidations(value, nestedValidationMetadatas, validationError.children);
this.mapContexts(object, value, metadatas, validationError);
this.mapContexts(object, value, customValidationMetadatas, validationError);
};
ValidationExecutor.prototype.generateValidationError = function (object, value, propertyName) {
var validationError = new ValidationError();
if (!this.validatorOptions ||
!this.validatorOptions.validationError ||
this.validatorOptions.validationError.target === undefined ||
this.validatorOptions.validationError.target === true)
validationError.target = object;
if (!this.validatorOptions ||
!this.validatorOptions.validationError ||
this.validatorOptions.validationError.value === undefined ||
this.validatorOptions.validationError.value === true)
validationError.value = value;
validationError.property = propertyName;
validationError.children = [];
validationError.constraints = {};
return validationError;
};
ValidationExecutor.prototype.conditionalValidations = function (object, value, metadatas) {
return metadatas
.map(function (metadata) { return metadata.constraints[0](object, value); })
.reduce(function (resultA, resultB) { return resultA && resultB; }, true);
};
ValidationExecutor.prototype.customValidations = function (object, value, metadatas, error) {
var _this = this;
metadatas.forEach(function (metadata) {
_this.metadataStorage
.getTargetValidatorConstraints(metadata.constraintCls)
.forEach(function (customConstraintMetadata) {
if (customConstraintMetadata.async && _this.ignoreAsyncValidations)
return;
var validationArguments = {
targetName: object.constructor ? object.constructor.name : undefined,
property: metadata.propertyName,
object: object,
value: value,
constraints: metadata.constraints
};
if (!metadata.each || !(value instanceof Array || value instanceof Set || value instanceof Map)) {
var validatedValue = customConstraintMetadata.instance.validate(value, validationArguments);
if (isPromise(validatedValue)) {
var promise = validatedValue.then(function (isValid) {
if (!isValid) {
var _a = _this.createValidationError(object, value, metadata, customConstraintMetadata), type = _a[0], message = _a[1];
error.constraints[type] = message;
if (metadata.context) {
if (!error.contexts) {
error.contexts = {};
}
error.contexts[type] = Object.assign((error.contexts[type] || {}), metadata.context);
}
}
});
_this.awaitingPromises.push(promise);
}
else {
if (!validatedValue) {
var _a = _this.createValidationError(object, value, metadata, customConstraintMetadata), type = _a[0], message = _a[1];
error.constraints[type] = message;
}
}
return;
}
// convert set and map into array
var arrayValue = 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 isPromise(validatedSubValue); });
if (validationIsAsync) {
// Wrap plain values (if any) in promises, so that all are async
var asyncValidatedSubValues = validatedSubValues
.map(function (validatedSubValue) { return 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];
error.constraints[type] = message;
if (metadata.context) {
if (!error.contexts) {
error.contexts = {};
}
error.contexts[type] = Object.assign((error.contexts[type] || {}), metadata.context);
}
}
});
_this.awaitingPromises.push(asyncValidationIsFinishedPromise);
return;
}
var validationResult = validatedSubValues.every(function (isValid) { return isValid; });
if (!validationResult) {
var _b = _this.createValidationError(object, value, metadata, customConstraintMetadata), type = _b[0], message = _b[1];
error.constraints[type] = message;
}
});
});
};
ValidationExecutor.prototype.nestedValidations = function (value, metadatas, errors) {
var _this = this;
if (value === void 0) {
return;
}
metadatas.forEach(function (metadata) {
var _a;
if (metadata.type !== ValidationTypes.NESTED_VALIDATION &&
metadata.type !== ValidationTypes.PROMISE_VALIDATION) {
return;
}
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) {
_this.performValidations(value, subValue, index.toString(), [], metadatas, errors);
});
}
else if (value instanceof Object) {
var targetSchema = typeof metadata.target === "string" ? metadata.target : metadata.target.name;
_this.execute(value, targetSchema, errors);
}
else {
var error = new ValidationError();
error.value = value;
error.property = metadata.propertyName;
error.target = metadata.target;
var _b = _this.createValidationError(metadata.target, value, metadata), type = _b[0], message = _b[1];
error.constraints = (_a = {},
_a[type] = message,
_a);
errors.push(error);
}
});
};
ValidationExecutor.prototype.mapContexts = function (object, value, metadatas, error) {
var _this = this;
return metadatas
.forEach(function (metadata) {
if (metadata.context) {
var customConstraint = void 0;
if (metadata.type === ValidationTypes.CUSTOM_VALIDATION) {
var customConstraints = _this.metadataStorage.getTargetValidatorConstraints(metadata.constraintCls);
customConstraint = customConstraints[0];
}
var type = _this.getConstraintType(metadata, customConstraint);
if (error.constraints[type]) {
if (!error.contexts) {
error.contexts = {};
}
error.contexts[type] = Object.assign((error.contexts[type] || {}), metadata.context);
}
}
});
};
ValidationExecutor.prototype.createValidationError = function (object, value, metadata, customValidatorMetadata) {
var targetName = object.constructor ? object.constructor.name : undefined;
var type = this.getConstraintType(metadata, customValidatorMetadata);
var validationArguments = {
targetName: targetName,
property: metadata.propertyName,
object: object,
value: value,
constraints: metadata.constraints
};
var message = metadata.message || "";
if (!metadata.message &&
(!this.validatorOptions || (this.validatorOptions && !this.validatorOptions.dismissDefaultMessages))) {
if (customValidatorMetadata && customValidatorMetadata.instance.defaultMessage instanceof Function) {
message = customValidatorMetadata.instance.defaultMessage(validationArguments);
}
}
var messageString = ValidationUtils.replaceMessageSpecialTokens(message, validationArguments);
return [type, messageString];
};
ValidationExecutor.prototype.getConstraintType = function (metadata, customValidatorMetadata) {
var type = customValidatorMetadata && customValidatorMetadata.name ? customValidatorMetadata.name : metadata.type;
return type;
};
return ValidationExecutor;
}());
/**
* Validator performs validation of the given object based on its metadata.
*/
var Validator = /** @class */ (function () {
function Validator() {
}
// -------------------------------------------------------------------------
// Private Properties
// -------------------------------------------------------------------------
/**
* Performs validation of the given object based on decorators or validation schema.
* Common method for `validateOrReject` and `validate` methods.
*/
Validator.prototype.coreValidate = function (objectOrSchemaName, objectOrValidationOptions, maybeValidatorOptions) {
var object = typeof objectOrSchemaName === "string" ? objectOrValidationOptions : objectOrSchemaName;
var options = typeof objectOrSchemaName === "string" ? maybeValidatorOptions : objectOrValidationOptions;
var schema = typeof objectOrSchemaName === "string" ? objectOrSchemaName : undefined;
var executor = new ValidationExecutor(this, options);
var validationErrors = [];
executor.execute(object, schema, validationErrors);
return Promise.all(executor.awaitingPromises).then(function () {
return executor.stripEmptyErrors(validationErrors);
});
};
/**
* Performs validation of the given object based on decorators or validation schema.
*/
Validator.prototype.validate = function (objectOrSchemaName, objectOrValidationOptions, maybeValidatorOptions) {
return this.coreValidate(objectOrSchemaName, objectOrValidationOptions, maybeValidatorOptions);
};
/**
* Performs validation of the given object based on decorators or validation schema and reject on error.
*/
Validator.prototype.validateOrReject = function (objectOrSchemaName, objectOrValidationOptions, maybeValidatorOptions) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var errors;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.coreValidate(objectOrSchemaName, objectOrValidationOptions, maybeValidatorOptions)];
case 1:
errors = _a.sent();
if (errors.length)
return [2 /*return*/, Promise.reject(errors)];
return [2 /*return*/];
}
});
});
};
/**
* Performs validation of the given object based on decorators or validation schema.
*/
Validator.prototype.validateSync = function (objectOrSchemaName, objectOrValidationOptions, maybeValidatorOptions) {
var object = typeof objectOrSchemaName === "string" ? objectOrValidationOptions : objectOrSchemaName;
var options = typeof objectOrSchemaName === "string" ? maybeValidatorOptions : objectOrValidationOptions;
var schema = typeof objectOrSchemaName === "string" ? objectOrSchemaName : undefined;
var executor = new ValidationExecutor(this, options);
executor.ignoreAsyncValidations = true;
var validationErrors = [];
executor.execute(object, schema, validationErrors);
return executor.stripEmptyErrors(validationErrors);
};
return Validator;
}());
/**
* Container to be used by this library for inversion control. If container was not implicitly set then by default
* container simply creates a new instance of the given class.
*/
var defaultContainer = new (/** @class */ (function () {
function class_1() {
this.instances = [];
}
class_1.prototype.get = function (someClass) {
var instance = this.instances.find(function (instance) { return instance.type === someClass; });
if (!instance) {
instance = { type: someClass, object: new someClass() };
this.instances.push(instance);
}
return instance.object;
};
return class_1;
}()))();
var userContainer;
var userContainerOptions;
/**
* Sets container to be used by this library.
*/
function useContainer(iocContainer, options) {
userContainer = iocContainer;
userContainerOptions = options;
}
/**
* Gets the IOC container used by this library.
*/
function getFromContainer(someClass) {
if (userContainer) {
try {
var instance = userContainer.get(someClass);
if (instance)
return instance;
if (!userContainerOptions || !userContainerOptions.fallback)
return instance;
}
catch (error) {
if (!userContainerOptions || !userContainerOptions.fallbackOnErrors)
throw error;
}
}
return defaultContainer.get(someClass);
}
/**
* If object has both allowed and not allowed properties a validation error will be thrown.
*/
function Allow(validationOptions) {
return function (object, propertyName) {
var args = {
type: ValidationTypes.WHITELIST,
target: object.constructor,
propertyName: propertyName,
validationOptions: validationOptions
};
getMetadataStorage().addValidationMetadata(new ValidationMetadata(args));
};
}
/**
* This metadata interface contains information for custom validators.
*/
var ConstraintMetadata = /** @class */ (function () {
// -------------------------------------------------------------------------
// Constructor
// -------------------------------------------------------------------------
function ConstraintMetadata(target, name, async) {
if (async === void 0) { async = false; }
this.target = target;
this.name = name;
this.async = async;
}
Object.defineProperty(ConstraintMetadata.prototype, "instance", {
// -------------------------------------------------------------------------
// Accessors
// -------------------------------------------------------------------------
/**
* Instance of the target custom validation class which performs validation.
*/
get: function () {
return getFromContainer(this.target);
},
enumerable: true,
configurable: true
});
return ConstraintMetadata;
}());
/**
* Registers a custom validation decorator.
*/
function registerDecorator(options) {
var constraintCls;
if (options.validator instanceof Function) {
constraintCls = options.validator;
var constraintClasses = getFromContainer(MetadataStorage).getTargetValidatorConstraints(options.validator);
if (constraintClasses.length > 1) {
throw "More than one implementation of ValidatorConstraintInterface found for validator on: " + options.target + ":" + options.propertyName;
}
}
else {
var validator_1 = options.validator;
constraintCls = /** @class */ (function () {
function CustomConstraint() {
}
CustomConstraint.prototype.validate = function (value, validationArguments) {
return validator_1.validate(value, validationArguments);
};
CustomConstraint.prototype.defaultMessage = function (validationArguments) {
if (validator_1.defaultMessage) {
return validator_1.defaultMessage(validationArguments);
}
return "";
};
return CustomConstraint;
}());
getMetadataStorage().addConstraintMetadata(new ConstraintMetadata(constraintCls, options.name, options.async));
}
var validationMetadataArgs = {
type: options.name && ValidationTypes.isValid(options.name) ? options.name : ValidationTypes.CUSTOM_VALIDATION,
target: options.target,
propertyName: options.propertyName,
validationOptions: options.options,
constraintCls: constraintCls,
constraints: options.constraints
};
getMetadataStorage().addValidationMetadata(new ValidationMetadata(validationMetadataArgs));
}
function buildMessage(impl, validationOptions) {
return function (validationArguments) {
var eachPrefix = validationOptions && validationOptions.each
? "each value in "
: "";
return impl(eachPrefix, validationArguments);
};
}
function ValidateBy(options, validationOptions) {
return function (object, propertyName) {
registerDecorator({
name: options.name,
target: object.constructor,
propertyName: propertyName,
options: validationOptions,
constraints: options.constraints,
validator: options.validator
});
};
}
// isDefined is (yet) a special case
var IS_DEFINED = ValidationTypes.IS_DEFINED;
/**
* Checks if value is defined (!== undefined, !== null).
*/
function isDefined(value) {
return value !== undefined && value !== null;
}
/**
* Checks if value is defined (!== undefined, !== null).
*/
function IsDefined(validationOptions) {
return ValidateBy({
name: IS_DEFINED,
validator: {
validate: function (value) { return isDefined(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property should not be null or undefined"; }, validationOptions)
}
}, validationOptions);
}
/**
* Checks if value is missing and if so, ignores all validators.
*/
function IsOptional(validationOptions) {
return function (object, propertyName) {
var args = {
type: ValidationTypes.CONDITIONAL_VALIDATION,
target: object.constructor,
propertyName: propertyName,
constraints: [function (object, value) {
return object[propertyName] !== null && object[propertyName] !== undefined;
}],
validationOptions: validationOptions
};
getMetadataStorage().addValidationMetadata(new ValidationMetadata(args));
};
}
/**
* Registers custom validator class.
*/
function ValidatorConstraint(options) {
return function (target) {
var isAsync = options && options.async ? true : false;
var name = options && options.name ? options.name : "";
if (!name) {
name = target.name;
if (!name) // generate name if it was not given
name = name.replace(/\.?([A-Z]+)/g, function (x, y) { return "_" + y.toLowerCase(); }).replace(/^_/, "");
}
var metadata = new ConstraintMetadata(target, name, isAsync);
getMetadataStorage().addConstraintMetadata(metadata);
};
}
function Validate(constraintClass, constraintsOrValidationOptions, maybeValidationOptions) {
return function (object, propertyName) {
var args = {
type: ValidationTypes.CUSTOM_VALIDATION,
target: object.constructor,
propertyName: propertyName,
constraintCls: constraintClass,
constraints: constraintsOrValidationOptions instanceof Array ? constraintsOrValidationOptions : undefined,
validationOptions: !(constraintsOrValidationOptions instanceof Array) ? constraintsOrValidationOptions : maybeValidationOptions
};
getMetadataStorage().addValidationMetadata(new ValidationMetadata(args));
};
}
/**
* Objects / object arrays marked with this decorator will also be validated.
*/
function ValidateIf(condition, validationOptions) {
return function (object, propertyName) {
var args = {
type: ValidationTypes.CONDITIONAL_VALIDATION,
target: object.constructor,
propertyName: propertyName,
constraints: [condition],
validationOptions: validationOptions
};
getMetadataStorage().addValidationMetadata(new ValidationMetadata(args));
};
}
/**
* Objects / object arrays marked with this decorator will also be validated.
*/
function ValidateNested(validationOptions) {
var opts = tslib_1.__assign({}, validationOptions);
var eachPrefix = opts.each ? "each value in " : "";
opts.message = opts.message || eachPrefix + "nested property $property must be either object or array";
return function (object, propertyName) {
var args = {
type: ValidationTypes.NESTED_VALIDATION,
target: object.constructor,
propertyName: propertyName,
validationOptions: opts,
};
getMetadataStorage().addValidationMetadata(new ValidationMetadata(args));
};
}
/**
* Resolve promise before validation
*/
function ValidatePromise(validationOptions) {
return function (object, propertyName) {
var args = {
type: ValidationTypes.PROMISE_VALIDATION,
target: object.constructor,
propertyName: propertyName,
validationOptions: validationOptions,
};
getMetadataStorage().addValidationMetadata(new ValidationMetadata(args));
};
}
var IS_LATLONG = "isLatLong";
/**
* Checks if a value is string in format a "latitude,longitude".
*/
function isLatLong(value) {
return typeof value === "string" && validator.isLatLong(value);
}
/**
* Checks if a value is string in format a "latitude,longitude".
*/
function IsLatLong(validationOptions) {
return ValidateBy({
name: IS_LATLONG,
validator: {
validate: function (value, args) { return isLatLong(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a latitude,longitude string"; }, validationOptions)
}
}, validationOptions);
}
var IS_LATITUDE = "isLatitude";
/**
* Checks if a given value is a latitude.
*/
function isLatitude(value) {
return (typeof value === "number" || typeof value === "string") && isLatLong(value + ",0");
}
/**
* Checks if a given value is a latitude.
*/
function IsLatitude(validationOptions) {
return ValidateBy({
name: IS_LATITUDE,
validator: {
validate: function (value, args) { return isLatitude(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a latitude string or number"; }, validationOptions)
}
}, validationOptions);
}
var IS_LONGITUDE = "isLongitude";
/**
* Checks if a given value is a longitude.
*/
function isLongitude(value) {
return (typeof value === "number" || typeof value === "string") && isLatLong("0," + value);
}
/**
* Checks if a given value is a longitude.
*/
function IsLongitude(validationOptions) {
return ValidateBy({
name: IS_LONGITUDE,
validator: {
validate: function (value, args) { return isLongitude(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a longitude string or number"; }, validationOptions)
}
}, validationOptions);
}
var EQUALS = "equals";
/**
* Checks if value matches ("===") the comparison.
*/
function equals(value, comparison) {
return value === comparison;
}
/**
* Checks if value matches ("===") the comparison.
*/
function Equals(comparison, validationOptions) {
return ValidateBy({
name: EQUALS,
constraints: [comparison],
validator: {
validate: function (value, args) { return equals(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be equal to $constraint1"; }, validationOptions)
}
}, validationOptions);
}
var NOT_EQUALS = "notEquals";
/**
* Checks if value does not match ("!==") the comparison.
*/
function notEquals(value, comparison) {
return value !== comparison;
}
/**
* Checks if value does not match ("!==") the comparison.
*/
function NotEquals(comparison, validationOptions) {
return ValidateBy({
name: NOT_EQUALS,
constraints: [comparison],
validator: {
validate: function (value, args) { return notEquals(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property should not be equal to $constraint1"; }, validationOptions)
}
}, validationOptions);
}
var IS_EMPTY = "isEmpty";
/**
* Checks if given value is empty (=== '', === null, === undefined).
*/
function isEmpty(value) {
return value === "" || value === null || value === undefined;
}
/**
* Checks if given value is empty (=== '', === null, === undefined).
*/
function IsEmpty(validationOptions) {
return ValidateBy({
name: IS_EMPTY,
validator: {
validate: function (value, args) { return isEmpty(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be empty"; }, validationOptions)
}
}, validationOptions);
}
var IS_NOT_EMPTY = "isNotEmpty";
/**
* Checks if given value is not empty (!== '', !== null, !== undefined).
*/
function isNotEmpty(value) {
return value !== "" && value !== null && value !== undefined;
}
/**
* Checks if given value is not empty (!== '', !== null, !== undefined).
*/
function IsNotEmpty(validationOptions) {
return ValidateBy({
name: IS_NOT_EMPTY,
validator: {
validate: function (value, args) { return isNotEmpty(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property should not be empty"; }, validationOptions)
}
}, validationOptions);
}
var IS_IN = "isIn";
/**
* Checks if given value is in a array of allowed values.
*/
function isIn(value, possibleValues) {
return !(possibleValues instanceof Array) || possibleValues.some(function (possibleValue) { return possibleValue === value; });
}
/**
* Checks if given value is in a array of allowed values.
*/
function IsIn(values, validationOptions) {
return ValidateBy({
name: IS_IN,
constraints: [values],
validator: {
validate: function (value, args) { return isIn(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be one of the following values: $constraint1"; }, validationOptions)
}
}, validationOptions);
}
var IS_NOT_IN = "isNotIn";
/**
* Checks if given value not in a array of allowed values.
*/
function isNotIn(value, possibleValues) {
return !(possibleValues instanceof Array) || !possibleValues.some(function (possibleValue) { return possibleValue === value; });
}
/**
* Checks if given value not in a array of allowed values.
*/
function IsNotIn(values, validationOptions) {
return ValidateBy({
name: IS_NOT_IN,
constraints: [values],
validator: {
validate: function (value, args) { return isNotIn(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property should not be one of the following values: $constraint1"; }, validationOptions)
}
}, validationOptions);
}
var IS_DIVISIBLE_BY = "isDivisibleBy";
/**
* Checks if value is a number that's divisible by another.
*/
function isDivisibleBy(value, num) {
return typeof value === "number" &&
typeof num === "number" &&
validator.isDivisibleBy(String(value), num);
}
/**
* Checks if value is a number that's divisible by another.
*/
function IsDivisibleBy(num, validationOptions) {
return ValidateBy({
name: IS_DIVISIBLE_BY,
constraints: [num],
validator: {
validate: function (value, args) { return isDivisibleBy(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be divisible by $constraint1"; }, validationOptions)
}
}, validationOptions);
}
var IS_POSITIVE = "isPositive";
/**
* Checks if the value is a positive number greater than zero.
*/
function isPositive(value) {
return typeof value === "number" && value > 0;
}
/**
* Checks if the value is a positive number greater than zero.
*/
function IsPositive(validationOptions) {
return ValidateBy({
name: IS_POSITIVE,
validator: {
validate: function (value, args) { return isPositive(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a positive number"; }, validationOptions)
}
}, validationOptions);
}
var IS_NEGATIVE = "isNegative";
/**
* Checks if the value is a negative number smaller than zero.
*/
function isNegative(value) {
return typeof value === "number" && value < 0;
}
/**
* Checks if the value is a negative number smaller than zero.
*/
function IsNegative(validationOptions) {
return ValidateBy({
name: IS_NEGATIVE,
validator: {
validate: function (value, args) { return isNegative(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a negative number"; }, validationOptions)
}
}, validationOptions);
}
var MAX = "max";
/**
* Checks if the first number is less than or equal to the second.
*/
function max(num, max) {
return typeof num === "number" && typeof max === "number" && num <= max;
}
/**
* Checks if the first number is less than or equal to the second.
*/
function Max(maxValue, validationOptions) {
return ValidateBy({
name: MAX,
constraints: [maxValue],
validator: {
validate: function (value, args) { return max(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must not be greater than $constraint1"; }, validationOptions)
}
}, validationOptions);
}
var MIN = "min";
/**
* Checks if the first number is greater than or equal to the second.
*/
function min(num, min) {
return typeof num === "number" && typeof min === "number" && num >= min;
}
/**
* Checks if the first number is greater than or equal to the second.
*/
function Min(minValue, validationOptions) {
return ValidateBy({
name: MIN,
constraints: [minValue],
validator: {
validate: function (value, args) { return min(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must not be less than $constraint1"; }, validationOptions)
}
}, validationOptions);
}
var MIN_DATE = "minDate";
/**
* Checks if the value is a date that's after the specified date.
*/
function minDate(date, minDate) {
return date instanceof Date && date.getTime() >= minDate.getTime();
}
/**
* Checks if the value is a date that's after the specified date.
*/
function MinDate(date, validationOptions) {
return ValidateBy({
name: MIN_DATE,
constraints: [date],
validator: {
validate: function (value, args) { return minDate(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix) { return "minimal allowed date for " + eachPrefix + "$property is $constraint1"; }, validationOptions)
}
}, validationOptions);
}
var MAX_DATE = "maxDate";
/**
* Checks if the value is a date that's before the specified date.
*/
function maxDate(date, maxDate) {
return date instanceof Date && date.getTime() <= maxDate.getTime();
}
/**
* Checks if the value is a date that's after the specified date.
*/
function MaxDate(date, validationOptions) {
return ValidateBy({
name: MAX_DATE,
constraints: [date],
validator: {
validate: function (value, args) { return maxDate(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix) { return "maximal allowed date for " + eachPrefix + "$property is $constraint1"; }, validationOptions)
}
}, validationOptions);
}
var CONTAINS = "contains";
/**
* Checks if the string contains the seed.
* If given value is not a string, then it returns false.
*/
function contains(value, seed) {
return typeof value === "string" && validator.contains(value, seed);
}
/**
* Checks if the string contains the seed.
* If given value is not a string, then it returns false.
*/
function Contains(seed, validationOptions) {
return ValidateBy({
name: CONTAINS,
constraints: [seed],
validator: {
validate: function (value, args) { return contains(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must contain a $constraint1 string"; }, validationOptions)
}
}, validationOptions);
}
var NOT_CONTAINS = "notContains";
/**
* Checks if the string does not contain the seed.
* If given value is not a string, then it returns false.
*/
function notContains(value, seed) {
return typeof value === "string" && !validator.contains(value, seed);
}
/**
* Checks if the string does not contain the seed.
* If given value is not a string, then it returns false.
*/
function NotContains(seed, validationOptions) {
return ValidateBy({
name: NOT_CONTAINS,
constraints: [seed],
validator: {
validate: function (value, args) { return notContains(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property should not contain a $constraint1 string"; }, validationOptions)
}
}, validationOptions);
}
var IS_ALPHA = "isAlpha";
/**
* Checks if the string contains only letters (a-zA-Z).
* If given value is not a string, then it returns false.
*/
function isAlpha(value, locale) {
return typeof value === "string" && validator.isAlpha(value, locale);
}
/**
* Checks if the string contains only letters (a-zA-Z).
* If given value is not a string, then it returns false.
*/
function IsAlpha(locale, validationOptions) {
return ValidateBy({
name: IS_ALPHA,
constraints: [locale],
validator: {
validate: function (value, args) { return isAlpha(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must contain only letters (a-zA-Z)"; }, validationOptions)
}
}, validationOptions);
}
var IS_ALPHANUMERIC = "isAlphanumeric";
/**
* Checks if the string contains only letters and numbers.
* If given value is not a string, then it returns false.
*/
function isAlphanumeric(value, locale) {
return typeof value === "string" && validator.isAlphanumeric(value, locale);
}
/**
* Checks if the string contains only letters and numbers.
* If given value is not a string, then it returns false.
*/
function IsAlphanumeric(locale, validationOptions) {
return ValidateBy({
name: IS_ALPHANUMERIC,
constraints: [locale],
validator: {
validate: function (value, args) { return isAlphanumeric(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must contain only letters and numbers"; }, validationOptions)
}
}, validationOptions);
}
var IS_DECIMAL = "isDecimal";
/**
* Checks if the string is a valid decimal.
* If given value is not a string, then it returns false.
*/
function isDecimal(value, options) {
return typeof value === "string" && validator.isDecimal(value, options);
}
/**
* Checks if the string contains only letters and numbers.
* If given value is not a string, then it returns false.
*/
function IsDecimal(options, validationOptions) {
return ValidateBy({
name: IS_DECIMAL,
constraints: [options],
validator: {
validate: function (value, args) { return isDecimal(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property is not a valid decimal number."; }, validationOptions)
}
}, validationOptions);
}
var IS_ASCII = "isAscii";
/**
* Checks if the string contains ASCII chars only.
* If given value is not a string, then it returns false.
*/
function isAscii(value) {
return typeof value === "string" && validator.isAscii(value);
}
/**
* Checks if the string contains ASCII chars only.
* If given value is not a string, then it returns false.
*/
function IsAscii(validationOptions) {
return ValidateBy({
name: IS_ASCII,
validator: {
validate: function (value, args) { return isAscii(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must contain only ASCII characters"; }, validationOptions)
}
}, validationOptions);
}
var IS_BASE64 = "isBase64";
/**
* Checks if a string is base64 encoded.
* If given value is not a string, then it returns false.
*/
function isBase64(value) {
return typeof value === "string" && validator.isBase64(value);
}
/**
* Checks if a string is base64 encoded.
* If given value is not a string, then it returns false.
*/
function IsBase64(validationOptions) {
return ValidateBy({
name: IS_BASE64,
validator: {
validate: function (value, args) { return isBase64(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be base64 encoded"; }, validationOptions)
}
}, validationOptions);
}
var IS_BYTE_LENGTH = "isByteLength";
/**
* Checks if the string's length (in bytes) falls in a range.
* If given value is not a string, then it returns false.
*/
function isByteLength(value, min, max) {
return typeof value === "string" && validator.isByteLength(value, { min: min, max: max });
}
/**
* Checks if the string's length (in bytes) falls in a range.
* If given value is not a string, then it returns false.
*/
function IsByteLength(min, max, validationOptions) {
return ValidateBy({
name: IS_BYTE_LENGTH,
constraints: [min, max],
validator: {
validate: function (value, args) { return isByteLength(value, args.constraints[0], args.constraints[1]); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property's byte length must fall into ($constraint1, $constraint2) range"; }, validationOptions)
}
}, validationOptions);
}
var IS_CREDIT_CARD = "isCreditCard";
/**
* Checks if the string is a credit card.
* If given value is not a string, then it returns false.
*/
function isCreditCard(value) {
return typeof value === "string" && validator.isCreditCard(value);
}
/**
* Checks if the string is a credit card.
* If given value is not a string, then it returns false.
*/
function IsCreditCard(validationOptions) {
return ValidateBy({
name: IS_CREDIT_CARD,
validator: {
validate: function (value, args) { return isCreditCard(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a credit card"; }, validationOptions)
}
}, validationOptions);
}
var IS_CURRENCY = "isCurrency";
/**
* Checks if the string is a valid currency amount.
* If given value is not a string, then it returns false.
*/
function isCurrency(value, options) {
return typeof value === "string" && validator.isCurrency(value, options);
}
/**
* Checks if the string is a valid currency amount.
* If given value is not a string, then it returns false.
*/
function IsCurrency(options, validationOptions) {
return ValidateBy({
name: IS_CURRENCY,
constraints: [options],
validator: {
validate: function (value, args) { return isCurrency(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a currency"; }, validationOptions)
}
}, validationOptions);
}
var IS_EMAIL = "isEmail";
/**
* Checks if the string is an email.
* If given value is not a string, then it returns false.
*/
function isEmail(value, options) {
return typeof value === "string" && validator.isEmail(value, options);
}
/**
* Checks if the string is an email.
* If given value is not a string, then it returns false.
*/
function IsEmail(options, validationOptions) {
return ValidateBy({
name: IS_EMAIL,
constraints: [options],
validator: {
validate: function (value, args) { return isEmail(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be an email"; }, validationOptions)
}
}, validationOptions);
}
var IS_FQDN = "isFqdn";
/**
* Checks if the string is a fully qualified domain name (e.g. domain.com).
* If given value is not a string, then it returns false.
*/
function isFQDN(value, options) {
return typeof value === "string" && validator.isFQDN(value, options);
}
/**
* Checks if the string is a fully qualified domain name (e.g. domain.com).
* If given value is not a string, then it returns false.
*/
function IsFQDN(options, validationOptions) {
return ValidateBy({
name: IS_FQDN,
constraints: [options],
validator: {
validate: function (value, args) { return isFQDN(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a valid domain name"; }, validationOptions)
}
}, validationOptions);
}
var IS_FULL_WIDTH = "isFullWidth";
/**
* Checks if the string contains any full-width chars.
* If given value is not a string, then it returns false.
*/
function isFullWidth(value) {
return typeof value === "string" && validator.isFullWidth(value);
}
/**
* Checks if the string contains any full-width chars.
* If given value is not a string, then it returns false.
*/
function IsFullWidth(validationOptions) {
return ValidateBy({
name: IS_FULL_WIDTH,
validator: {
validate: function (value, args) { return isFullWidth(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must contain a full-width characters"; }, validationOptions)
}
}, validationOptions);
}
var IS_HALF_WIDTH = "isHalfWidth";
/**
* Checks if the string contains any half-width chars.
* If given value is not a string, then it returns false.
*/
function isHalfWidth(value) {
return typeof value === "string" && validator.isHalfWidth(value);
}
/**
* Checks if the string contains any full-width chars.
* If given value is not a string, then it returns false.
*/
function IsHalfWidth(validationOptions) {
return ValidateBy({
name: IS_HALF_WIDTH,
validator: {
validate: function (value, args) { return isHalfWidth(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must contain a half-width characters"; }, validationOptions)
}
}, validationOptions);
}
var IS_VARIABLE_WIDTH = "isVariableWidth";
/**
* Checks if the string contains variable-width chars.
* If given value is not a string, then it returns false.
*/
function isVariableWidth(value) {
return typeof value === "string" && validator.isVariableWidth(value);
}
/**
* Checks if the string contains variable-width chars.
* If given value is not a string, then it returns false.
*/
function IsVariableWidth(validationOptions) {
return ValidateBy({
name: IS_VARIABLE_WIDTH,
validator: {
validate: function (value, args) { return isVariableWidth(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must contain a full-width and half-width characters"; }, validationOptions)
}
}, validationOptions);
}
var IS_HEX_COLOR = "isHexColor";
/**
* Checks if the string is a hexadecimal color.
* If given value is not a string, then it returns false.
*/
function isHexColor(value) {
return typeof value === "string" && validator.isHexColor(value);
}
/**
* Checks if the string is a hexadecimal color.
* If given value is not a string, then it returns false.
*/
function IsHexColor(validationOptions) {
return ValidateBy({
name: IS_HEX_COLOR,
validator: {
validate: function (value, args) { return isHexColor(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a hexadecimal color"; }, validationOptions)
}
}, validationOptions);
}
var IS_HEXADECIMAL = "isHexadecimal";
/**
* Checks if the string is a hexadecimal number.
* If given value is not a string, then it returns false.
*/
function isHexadecimal(value) {
return typeof value === "string" && validator.isHexadecimal(value);
}
/**
* Checks if the string is a hexadecimal number.
* If given value is not a string, then it returns false.
*/
function IsHexadecimal(validationOptions) {
return ValidateBy({
name: IS_HEXADECIMAL,
validator: {
validate: function (value, args) { return isHexadecimal(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a hexadecimal number"; }, validationOptions)
}
}, validationOptions);
}
function isValidationOptions(val) {
if (!val) {
return false;
}
return "each" in val
|| "message" in val
|| "groups" in val
|| "always" in val
|| "context" in val;
}
var IS_MAC_ADDRESS = "isMacAddress";
/**
* Check if the string is a MAC address.
* If given value is not a string, then it returns false.
*/
function isMACAddress(value, options) {
return typeof value === "string" && validator.isMACAddress(value, options);
}
function IsMACAddress(optionsOrValidationOptionsArg, validationOptionsArg) {
var options = !isValidationOptions(optionsOrValidationOptionsArg) ? optionsOrValidationOptionsArg : undefined;
var validationOptions = isValidationOptions(optionsOrValidationOptionsArg) ? optionsOrValidationOptionsArg : validationOptionsArg;
return ValidateBy({
name: IS_MAC_ADDRESS,
constraints: [options],
validator: {
validate: function (value, args) { return isMACAddress(value, options); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a MAC Address"; }, validationOptions)
}
}, validationOptions);
}
var IS_IP = "isIp";
/**
* Checks if the string is an IP (version 4 or 6).
* If given value is not a string, then it returns false.
*/
function isIP(value, version) {
var versionStr = version ? "" + version : undefined;
return typeof value === "string" && validator.isIP(value, versionStr);
}
/**
* Checks if the string is an IP (version 4 or 6).
* If given value is not a string, then it returns false.
*/
function IsIP(version, validationOptions) {
return ValidateBy({
name: IS_IP,
constraints: [version],
validator: {
validate: function (value, args) { return isIP(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be an ip address"; }, validationOptions)
}
}, validationOptions);
}
var IS_PORT = "isPort";
/**
* Check if the string is a valid port number.
*/
function isPort(value) {
return typeof value === "string" && validator.isPort(value);
}
/**
* Check if the string is a valid port number.
*/
function IsPort(validationOptions) {
return ValidateBy({
name: IS_PORT,
validator: {
validate: function (value, args) { return isPort(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a port"; }, validationOptions)
}
}, validationOptions);
}
var IS_ISBN = "isIsbn";
/**
* Checks if the string is an ISBN (version 10 or 13).
* If given value is not a string, then it returns false.
*/
function isISBN(value, version) {
var versionStr = version ? "" + version : undefined;
return typeof value === "string" && validator.isISBN(value, versionStr);
}
/**
* Checks if the string is an ISBN (version 10 or 13).
* If given value is not a string, then it returns false.
*/
function IsISBN(version, validationOptions) {
return ValidateBy({
name: IS_ISBN,
constraints: [version],
validator: {
validate: function (value, args) { return isISBN(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be an ISBN"; }, validationOptions)
}
}, validationOptions);
}
var IS_ISIN = "isIsin";
/**
* Checks if the string is an ISIN (stock/security identifier).
* If given value is not a string, then it returns false.
*/
function isISIN(value) {
return typeof value === "string" && validator.isISIN(value);
}
/**
* Checks if the string is an ISIN (stock/security identifier).
* If given value is not a string, then it returns false.
*/
function IsISIN(validationOptions) {
return ValidateBy({
name: IS_ISIN,
validator: {
validate: function (value, args) { return isISIN(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be an ISIN (stock/security identifier)"; }, validationOptions)
}
}, validationOptions);
}
var IS_ISO8601 = "isIso8601";
/**
* Checks if the string is a valid ISO 8601 date.
* If given value is not a string, then it returns false.
* Use the option strict = true for additional checks for a valid date, e.g. invalidates dates like 2019-02-29.
*/
function isISO8601(value, options) {
return typeof value === "string" && validator.isISO8601(value, options);
}
/**
* Checks if the string is a valid ISO 8601 date.
* If given value is not a string, then it returns false.
* Use the option strict = true for additional checks for a valid date, e.g. invalidates dates like 2019-02-29.
*/
function IsISO8601(options, validationOptions) {
return ValidateBy({
name: IS_ISO8601,
constraints: [options],
validator: {
validate: function (value, args) { return isISO8601(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a valid ISO 8601 date string"; }, validationOptions)
}
}, validationOptions);
}
var IS_JSON = "isJson";
/**
* Checks if the string is valid JSON (note: uses JSON.parse).
* If given value is not a string, then it returns false.
*/
function isJSON(value) {
return typeof value === "string" && validator.isJSON(value);
}
/**
* Checks if the string is valid JSON (note: uses JSON.parse).
* If given value is not a string, then it returns false.
*/
function IsJSON(validationOptions) {
return ValidateBy({
name: IS_JSON,
validator: {
validate: function (value, args) { return isJSON(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a json string"; }, validationOptions)
}
}, validationOptions);
}
var IS_JWT = "isJwt";
/**
* Checks if the string is valid JWT token.
* If given value is not a string, then it returns false.
*/
function isJWT(value) {
return typeof value === "string" && validator.isJWT(value);
}
/**
* Checks if the string is valid JWT token.
* If given value is not a string, then it returns false.
*/
function IsJWT(validationOptions) {
return ValidateBy({
name: IS_JWT,
validator: {
validate: function (value, args) { return isJWT(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a jwt string"; }, validationOptions)
}
}, validationOptions);
}
var IS_LOWERCASE = "isLowercase";
/**
* Checks if the string is lowercase.
* If given value is not a string, then it returns false.
*/
function isLowercase(value) {
return typeof value === "string" && validator.isLowercase(value);
}
/**
* Checks if the string is lowercase.
* If given value is not a string, then it returns false.
*/
function IsLowercase(validationOptions) {
return ValidateBy({
name: IS_LOWERCASE,
validator: {
validate: function (value, args) { return isLowercase(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a lowercase string"; }, validationOptions)
}
}, validationOptions);
}
var IS_MOBILE_PHONE = "isMobilePhone";
/**
* Checks if the string is a mobile phone number (locale is either an array of locales (e.g ['sk-SK', 'sr-RS'])
* OR one of ['am-Am', 'ar-AE', 'ar-BH', 'ar-DZ', 'ar-EG', 'ar-IQ', ar-JO', 'ar-KW', 'ar-SA', 'ar-SY', 'ar-TN', 'be-BY',
* 'bg-BG', 'bn-BD', 'cs-CZ', 'da-DK', 'de-DE', 'de-AT', 'el-GR', 'en-AU', 'en-CA', 'en-GB', 'en-GG', 'en-GH', 'en-HK',
* 'en-MO', 'en-IE', 'en-IN', 'en-KE', 'en-MT', 'en-MU', 'en-NG', 'en-NZ', 'en-PK', 'en-RW', 'en-SG', 'en-SL', 'en-UG',
* 'en-US', 'en-TZ', 'en-ZA', 'en-ZM', 'es-CL', 'es-CR', 'es-EC', 'es-ES', 'es-MX', 'es-PA', 'es-PY', 'es-UY', 'et-EE',
* 'fa-IR', 'fi-FI', 'fj-FJ', 'fo-FO', 'fr-BE', 'fr-FR', 'fr-GF', 'fr-GP', 'fr-MQ', 'fr-RE', 'he-IL', 'hu-HU', 'id-ID',
* 'it-IT', 'ja-JP', 'kk-KZ', 'kl-GL', 'ko-KR', 'lt-LT', 'ms-MY', 'nb-NO', 'ne-NP', 'nl-BE', 'nl-NL', 'nn-NO', 'pl-PL',
* 'pt-BR', 'pt-PT', 'ro-RO', 'ru-RU', 'sl-SI', 'sk-SK', 'sr-RS', 'sv-SE', 'th-TH', 'tr-TR', 'uk-UA', 'vi-VN', 'zh-CN',
* 'zh-HK', 'zh-MO', 'zh-TW']
* If given value is not a string, then it returns false.
*/
function isMobilePhone(value, locale, options) {
return typeof value === "string" && validator.isMobilePhone(value, locale, options);
}
/**
* Checks if the string is a mobile phone number (locale is either an array of locales (e.g ['sk-SK', 'sr-RS'])
* OR one of ['am-Am', 'ar-AE', 'ar-BH', 'ar-DZ', 'ar-EG', 'ar-IQ', ar-JO', 'ar-KW', 'ar-SA', 'ar-SY', 'ar-TN', 'be-BY',
* 'bg-BG', 'bn-BD', 'cs-CZ', 'da-DK', 'de-DE', 'de-AT', 'el-GR', 'en-AU', 'en-CA', 'en-GB', 'en-GG', 'en-GH', 'en-HK',
* 'en-MO', 'en-IE', 'en-IN', 'en-KE', 'en-MT', 'en-MU', 'en-NG', 'en-NZ', 'en-PK', 'en-RW', 'en-SG', 'en-SL', 'en-UG',
* 'en-US', 'en-TZ', 'en-ZA', 'en-ZM', 'es-CL', 'es-CR', 'es-EC', 'es-ES', 'es-MX', 'es-PA', 'es-PY', 'es-UY', 'et-EE',
* 'fa-IR', 'fi-FI', 'fj-FJ', 'fo-FO', 'fr-BE', 'fr-FR', 'fr-GF', 'fr-GP', 'fr-MQ', 'fr-RE', 'he-IL', 'hu-HU', 'id-ID',
* 'it-IT', 'ja-JP', 'kk-KZ', 'kl-GL', 'ko-KR', 'lt-LT', 'ms-MY', 'nb-NO', 'ne-NP', 'nl-BE', 'nl-NL', 'nn-NO', 'pl-PL',
* 'pt-BR', 'pt-PT', 'ro-RO', 'ru-RU', 'sl-SI', 'sk-SK', 'sr-RS', 'sv-SE', 'th-TH', 'tr-TR', 'uk-UA', 'vi-VN', 'zh-CN',
* 'zh-HK', 'zh-MO', 'zh-TW']
* If given value is not a string, then it returns false.
*/
function IsMobilePhone(locale, options, validationOptions) {
return ValidateBy({
name: IS_MOBILE_PHONE,
constraints: [locale, options],
validator: {
validate: function (value, args) { return isMobilePhone(value, args.constraints[0], args.constraints[1]); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a phone number"; }, validationOptions)
}
}, validationOptions);
}
var IS_ISO31661_ALPHA_2 = "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.
*/
function isISO31661Alpha2(value) {
return typeof value === "string" && validator.isISO31661Alpha2(value);
}
/**
* 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.
*/
function IsISO31661Alpha2(validationOptions) {
return ValidateBy({
name: IS_ISO31661_ALPHA_2,
validator: {
validate: function (value, args) { return isISO31661Alpha2(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a valid ISO31661 Alpha2 code"; }, validationOptions)
}
}, validationOptions);
}
var IS_ISO31661_ALPHA_3 = "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.
*/
function isISO31661Alpha3(value) {
return typeof value === "string" && validator.isISO31661Alpha3(value);
}
/**
* 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.
*/
function IsISO31661Alpha3(validationOptions) {
return ValidateBy({
name: IS_ISO31661_ALPHA_3,
validator: {
validate: function (value, args) { return isISO31661Alpha3(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a valid ISO31661 Alpha3 code"; }, validationOptions)
}
}, validationOptions);
}
var IS_MONGO_ID = "isMongoId";
/**
* Checks if the string is a valid hex-encoded representation of a MongoDB ObjectId.
* If given value is not a string, then it returns false.
*/
function isMongoId(value) {
return typeof value === "string" && validator.isMongoId(value);
}
/**
* Checks if the string is a valid hex-encoded representation of a MongoDB ObjectId.
* If given value is not a string, then it returns false.
*/
function IsMongoId(validationOptions) {
return ValidateBy({
name: IS_MONGO_ID,
validator: {
validate: function (value, args) { return isMongoId(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a mongodb id"; }, validationOptions)
}
}, validationOptions);
}
var IS_MULTIBYTE = "isMultibyte";
/**
* Checks if the string contains one or more multibyte chars.
* If given value is not a string, then it returns false.
*/
function isMultibyte(value) {
return typeof value === "string" && validator.isMultibyte(value);
}
/**
* Checks if the string contains one or more multibyte chars.
* If given value is not a string, then it returns false.
*/
function IsMultibyte(validationOptions) {
return ValidateBy({
name: IS_MULTIBYTE,
validator: {
validate: function (value, args) { return isMultibyte(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must contain one or more multibyte chars"; }, validationOptions)
}
}, validationOptions);
}
var IS_SURROGATE_PAIR = "isSurrogatePair";
/**
* Checks if the string contains any surrogate pairs chars.
* If given value is not a string, then it returns false.
*/
function isSurrogatePair(value) {
return typeof value === "string" && validator.isSurrogatePair(value);
}
/**
* Checks if the string contains any surrogate pairs chars.
* If given value is not a string, then it returns false.
*/
function IsSurrogatePair(validationOptions) {
return ValidateBy({
name: IS_SURROGATE_PAIR,
validator: {
validate: function (value, args) { return isSurrogatePair(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must contain any surrogate pairs chars"; }, validationOptions)
}
}, validationOptions);
}
var IS_URL = "isUrl";
/**
* Checks if the string is an url.
* If given value is not a string, then it returns false.
*/
function isURL(value, options) {
return typeof value === "string" && validator.isURL(value, options);
}
/**
* Checks if the string is an url.
* If given value is not a string, then it returns false.
*/
function IsUrl(options, validationOptions) {
return ValidateBy({
name: IS_URL,
constraints: [options],
validator: {
validate: function (value, args) { return isURL(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be an URL address"; }, validationOptions)
}
}, validationOptions);
}
var IS_UUID = "isUuid";
/**
* Checks if the string is a UUID (version 3, 4 or 5).
* If given value is not a string, then it returns false.
*/
function isUUID(value, version) {
return typeof value === "string" && validator.isUUID(value, version);
}
/**
* Checks if the string is a UUID (version 3, 4 or 5).
* If given value is not a string, then it returns false.
*/
function IsUUID(version, validationOptions) {
return ValidateBy({
name: IS_UUID,
constraints: [version],
validator: {
validate: function (value, args) { return isUUID(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be an UUID"; }, validationOptions)
}
}, validationOptions);
}
var IS_FIREBASE_PUSH_ID = "IsFirebasePushId";
/**
* Checks if the string is a Firebase Push Id
* If given value is not a Firebase Push Id, it returns false
*/
function isFirebasePushId(value) {
var webSafeRegex = /^[a-zA-Z0-9_-]*$/;
return typeof value === "string" && value.length === 20 && webSafeRegex.test(value);
}
/**
* Checks if the string is a Firebase Push Id
* If given value is not a Firebase Push Id, it returns false
*/
function IsFirebasePushId(validationOptions) {
return ValidateBy({
name: IS_FIREBASE_PUSH_ID,
validator: {
validate: function (value, args) { return isFirebasePushId(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a Firebase Push Id"; }, validationOptions)
}
}, validationOptions);
}
var IS_UPPERCASE = "isUppercase";
/**
* Checks if the string is uppercase.
* If given value is not a string, then it returns false.
*/
function isUppercase(value) {
return typeof value === "string" && validator.isUppercase(value);
}
/**
* Checks if the string is uppercase.
* If given value is not a string, then it returns false.
*/
function IsUppercase(validationOptions) {
return ValidateBy({
name: IS_UPPERCASE,
validator: {
validate: function (value, args) { return isUppercase(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be uppercase"; }, validationOptions)
}
}, validationOptions);
}
var LENGTH = "length";
/**
* Checks if the string's length falls in a range. Note: this function takes into account surrogate pairs.
* If given value is not a string, then it returns false.
*/
function length(value, min, max) {
return typeof value === "string" && validator.isLength(value, { min: min, max: max });
}
/**
* Checks if the string's length falls in a range. Note: this function takes into account surrogate pairs.
* If given value is not a string, then it returns false.
*/
function Length(min, max, validationOptions) {
return ValidateBy({
name: LENGTH,
constraints: [min, max],
validator: {
validate: function (value, args) { return length(value, args.constraints[0], args.constraints[1]); },
defaultMessage: buildMessage(function (eachPrefix, args) {
var isMinLength = args.constraints[0] !== null && args.constraints[0] !== undefined;
var isMaxLength = args.constraints[1] !== null && args.constraints[1] !== undefined;
if (isMinLength && (!args.value || args.value.length < args.constraints[0])) {
return eachPrefix + "$property must be longer than or equal to $constraint1 characters";
}
else if (isMaxLength && (args.value.length > args.constraints[1])) {
return eachPrefix + "$property must be shorter than or equal to $constraint2 characters";
}
return eachPrefix + "$property must be longer than or equal to $constraint1 and shorter than or equal to $constraint2 characters";
}, validationOptions)
}
}, validationOptions);
}
var MAX_LENGTH = "maxLength";
/**
* Checks if the string's length is not more than given number. Note: this function takes into account surrogate pairs.
* If given value is not a string, then it returns false.
*/
function maxLength(value, max) {
return typeof value === "string" && validator.isLength(value, { min: 0, max: max });
}
/**
* Checks if the string's length is not more than given number. Note: this function takes into account surrogate pairs.
* If given value is not a string, then it returns false.
*/
function MaxLength(max, validationOptions) {
return ValidateBy({
name: MAX_LENGTH,
constraints: [max],
validator: {
validate: function (value, args) { return maxLength(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be shorter than or equal to $constraint1 characters"; }, validationOptions)
}
}, validationOptions);
}
var MIN_LENGTH = "minLength";
/**
* Checks if the string's length is not less than given number. Note: this function takes into account surrogate pairs.
* If given value is not a string, then it returns false.
*/
function minLength(value, min) {
return typeof value === "string" && validator.isLength(value, { min: min });
}
/**
* Checks if the string's length is not less than given number. Note: this function takes into account surrogate pairs.
* If given value is not a string, then it returns false.
*/
function MinLength(min, validationOptions) {
return ValidateBy({
name: MIN_LENGTH,
constraints: [min],
validator: {
validate: function (value, args) { return minLength(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be longer than or equal to $constraint1 characters"; }, validationOptions)
}
}, validationOptions);
}
var MATCHES = "matches";
function matches(value, pattern, modifiers) {
return typeof value === "string" && validator.matches(value, pattern, modifiers);
}
function Matches(pattern, modifiersOrAnnotationOptions, validationOptions) {
var modifiers;
if (modifiersOrAnnotationOptions && modifiersOrAnnotationOptions instanceof Object && !validationOptions) {
validationOptions = modifiersOrAnnotationOptions;
}
else {
modifiers = modifiersOrAnnotationOptions;
}
return ValidateBy({
name: MATCHES,
constraints: [pattern, modifiers],
validator: {
validate: function (value, args) { return matches(value, args.constraints[0], args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix, args) { return eachPrefix + "$property must match $constraint1 regular expression"; }, validationOptions)
}
}, validationOptions);
}
var IS_PHONE_NUMBER = "isPhoneNumber";
/**
* Checks if the string is a valid phone number.
* @param value the potential phone number string to test
* @param {string} region 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]{@link https://github.com/ruimarinho/google-libphonenumber/blob/1e46138878cff479aafe2ce62175c6c49cb58720/src/metadata.js#L33}
*/
function isPhoneNumber(value, region) {
var phoneUtil = googleLibphonenumber.PhoneNumberUtil.getInstance();
try {
var phoneNum = phoneUtil.parseAndKeepRawInput(value, region);
var result = phoneUtil.isValidNumber(phoneNum);
return result;
}
catch (error) {
// logging?
return false;
}
}
/**
* Checks if the string is a valid phone number.
* @param region 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]{@link https://github.com/ruimarinho/google-libphonenumber/blob/1e46138878cff479aafe2ce62175c6c49cb58720/src/metadata.js#L33}
*/
function IsPhoneNumber(region, validationOptions) {
return ValidateBy({
name: IS_PHONE_NUMBER,
constraints: [region],
validator: {
validate: function (value, args) { return isPhoneNumber(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a valid phone number"; }, validationOptions),
}
}, validationOptions);
}
var IS_MILITARY_TIME = "isMilitaryTime";
/**
* Checks if the string represents a time without a given timezone in the format HH:MM (military)
* If the given value does not match the pattern HH:MM, then it returns false.
*/
function isMilitaryTime(value) {
var militaryTimeRegex = /^([01]\d|2[0-3]):?([0-5]\d)$/;
return typeof value === "string" && validator.matches(value, militaryTimeRegex);
}
/**
* Checks if the string represents a time without a given timezone in the format HH:MM (military)
* If the given value does not match the pattern HH:MM, then it returns false.
*/
function IsMilitaryTime(validationOptions) {
return ValidateBy({
name: IS_MILITARY_TIME,
validator: {
validate: function (value, args) { return isMilitaryTime(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a valid representation of military time in the format HH:MM"; }, validationOptions)
}
}, validationOptions);
}
var IS_HASH = "isHash";
/**
* Check if the string is a hash of type algorithm.
* Algorithm is one of ['md4', 'md5', 'sha1', 'sha256', 'sha384', 'sha512', 'ripemd128', 'ripemd160', 'tiger128',
* 'tiger160', 'tiger192', 'crc32', 'crc32b']
*/
function isHash(value, algorithm) {
return typeof value === "string" && validator.isHash(value, algorithm);
}
/**
* Check if the string is a hash of type algorithm.
* Algorithm is one of ['md4', 'md5', 'sha1', 'sha256', 'sha384', 'sha512', 'ripemd128', 'ripemd160', 'tiger128',
* 'tiger160', 'tiger192', 'crc32', 'crc32b']
*/
function IsHash(algorithm, validationOptions) {
return ValidateBy({
name: IS_HASH,
constraints: [algorithm],
validator: {
validate: function (value, args) { return isHash(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a hash of type $constraint1"; }, validationOptions)
}
}, validationOptions);
}
var IS_ISSN = "isISSN";
/**
* Checks if the string is a ISSN.
* If given value is not a string, then it returns false.
*/
function isISSN(value, options) {
return typeof value === "string" && validator.isISSN(value, options);
}
/**
* Checks if the string is a ISSN.
* If given value is not a string, then it returns false.
*/
function IsISSN(options, validationOptions) {
return ValidateBy({
name: IS_ISSN,
constraints: [options],
validator: {
validate: function (value, args) { return isISSN(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a ISSN"; }, validationOptions)
}
}, validationOptions);
}
var IS_DATE_STRING = "isDateString";
/**
* Checks if a given value is a ISOString date.
*/
function isDateString(value) {
var 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;
return typeof value === "string" && regex.test(value);
}
/**
* Checks if a given value is a ISOString date.
*/
function IsDateString(validationOptions) {
return ValidateBy({
name: IS_DATE_STRING,
validator: {
validate: function (value, args) { return isDateString(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a ISOString"; }, validationOptions)
}
}, validationOptions);
}
var IS_BOOLEAN_STRING = "isBooleanString";
/**
* Checks if a string is a boolean.
* If given value is not a string, then it returns false.
*/
function isBooleanString(value) {
return typeof value === "string" && validator.isBoolean(value);
}
/**
* Checks if a string is a boolean.
* If given value is not a string, then it returns false.
*/
function IsBooleanString(validationOptions) {
return ValidateBy({
name: IS_BOOLEAN_STRING,
validator: {
validate: function (value, args) { return isBooleanString(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a boolean string"; }, validationOptions)
}
}, validationOptions);
}
var IS_NUMBER_STRING = "isNumberString";
/**
* Checks if the string is numeric.
* If given value is not a string, then it returns false.
*/
function isNumberString(value, options) {
return typeof value === "string" && validator.isNumeric(value, options);
}
/**
* Checks if the string is numeric.
* If given value is not a string, then it returns false.
*/
function IsNumberString(options, validationOptions) {
return ValidateBy({
name: IS_NUMBER_STRING,
constraints: [options],
validator: {
validate: function (value, args) { return isNumberString(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a number string"; }, validationOptions)
}
}, validationOptions);
}
var IS_BASE32 = "isBase32";
/**
* Checks if a string is base32 encoded.
* If given value is not a string, then it returns false.
*/
function isBase32(value) {
return typeof value === "string" && validator.isBase32(value);
}
/**
* Check if a string is base32 encoded.
* If given value is not a string, then it returns false.
*/
function IsBase32(validationOptions) {
return ValidateBy({
name: IS_BASE32,
validator: {
validate: function (value, args) { return isBase32(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be base32 encoded"; }, validationOptions)
}
}, validationOptions);
}
var IS_BIC = "isBIC";
/**
* Check if a string is a BIC (Bank Identification Code) or SWIFT code.
* If given value is not a string, then it returns false.
*/
function isBIC(value) {
return typeof value === "string" && validator.isBIC(value);
}
/**
* Check if a string is a BIC (Bank Identification Code) or SWIFT code.
* If given value is not a string, then it returns false.
*/
function IsBIC(validationOptions) {
return ValidateBy({
name: IS_BIC,
validator: {
validate: function (value, args) { return isBIC(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a BIC or SWIFT code"; }, validationOptions)
}
}, validationOptions);
}
var IS_BTC_ADDRESS = "isBtcAddress";
/**
* Check if the string is a valid BTC address.
* If given value is not a string, then it returns false.
*/
function isBtcAddress(value) {
return typeof value === "string" && validator.isBtcAddress(value);
}
/**
* Check if the string is a valid BTC address.
* If given value is not a string, then it returns false.
*/
function IsBtcAddress(validationOptions) {
return ValidateBy({
name: IS_BTC_ADDRESS,
validator: {
validate: function (value, args) { return isBtcAddress(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a BTC address"; }, validationOptions)
}
}, validationOptions);
}
var IS_DATA_URI = "isDataURI";
/**
* Check if the string is a data uri format.
* If given value is not a string, then it returns false.
*/
function isDataURI(value) {
return typeof value === "string" && validator.isDataURI(value);
}
/**
* Check if the string is a data uri format.
* If given value is not a string, then it returns false.
*/
function IsDataURI(validationOptions) {
return ValidateBy({
name: IS_DATA_URI,
validator: {
validate: function (value, args) { return isDataURI(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a data uri format"; }, validationOptions)
}
}, validationOptions);
}
var IS_EAN = "isEAN";
/**
* Check if the string is an EAN (European Article Number).
* If given value is not a string, then it returns false.
*/
function isEAN(value) {
return typeof value === "string" && validator.isEAN(value);
}
/**
* Check if the string is an EAN (European Article Number).
* If given value is not a string, then it returns false.
*/
function IsEAN(validationOptions) {
return ValidateBy({
name: IS_EAN,
validator: {
validate: function (value, args) { return isEAN(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be an EAN (European Article Number)"; }, validationOptions)
}
}, validationOptions);
}
var IS_ETHEREUM_ADDRESS = "isEthereumAddress";
/**
* Check if the string is an Ethereum address using basic regex. Does not validate address checksums.
* If given value is not a string, then it returns false.
*/
function isEthereumAddress(value) {
return typeof value === "string" && validator.isEthereumAddress(value);
}
/**
* Check if the string is an Ethereum address using basic regex. Does not validate address checksums.
* If given value is not a string, then it returns false.
*/
function IsEthereumAddress(validationOptions) {
return ValidateBy({
name: IS_ETHEREUM_ADDRESS,
validator: {
validate: function (value, args) { return isEthereumAddress(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be an Ethereum address"; }, validationOptions)
}
}, validationOptions);
}
var IS_HSL = "isHSL";
/**
* Check if the string is an HSL (hue, saturation, lightness, optional alpha) color based on CSS Colors Level 4 specification.
* Comma-separated format supported. Space-separated format supported with the exception of a few edge cases (ex: hsl(200grad+.1%62%/1)).
* If given value is not a string, then it returns false.
*/
function isHSL(value) {
return typeof value === "string" && validator.isHSL(value);
}
/**
* Check if the string is an HSL (hue, saturation, lightness, optional alpha) color based on CSS Colors Level 4 specification.
* Comma-separated format supported. Space-separated format supported with the exception of a few edge cases (ex: hsl(200grad+.1%62%/1)).
* If given value is not a string, then it returns false.
*/
function IsHSL(validationOptions) {
return ValidateBy({
name: IS_HSL,
validator: {
validate: function (value, args) { return isHSL(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a HSL color"; }, validationOptions)
}
}, validationOptions);
}
var IS_IBAN = "isIBAN";
/**
* Check if a string is a IBAN (International Bank Account Number).
* If given value is not a string, then it returns false.
*/
function isIBAN(value) {
return typeof value === "string" && validator.isIBAN(value);
}
/**
* Check if a string is a IBAN (International Bank Account Number).
* If given value is not a string, then it returns false.
*/
function IsIBAN(validationOptions) {
return ValidateBy({
name: IS_IBAN,
validator: {
validate: function (value, args) { return isIBAN(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be an IBAN"; }, validationOptions)
}
}, validationOptions);
}
var IS_IDENTITY_CARD = "isIdentityCard";
/**
* Check if the string is a valid identity card code.
* locale is one of ['ES', 'zh-TW', 'he-IL', 'ar-TN'] OR 'any'. If 'any' is used, function will check if any of the locals match.
* Defaults to 'any'.
* If given value is not a string, then it returns false.
*/
function isIdentityCard(value, locale) {
return typeof value === "string" && validator.isIdentityCard(value, locale);
}
/**
* Check if the string is a valid identity card code.
* locale is one of ['ES', 'zh-TW', 'he-IL', 'ar-TN'] OR 'any'. If 'any' is used, function will check if any of the locals match.
* Defaults to 'any'.
* If given value is not a string, then it returns false.
*/
function IsIdentityCard(locale, validationOptions) {
return ValidateBy({
name: IS_IDENTITY_CARD,
constraints: [locale],
validator: {
validate: function (value, args) { return isIdentityCard(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a identity card number"; }, validationOptions)
}
}, validationOptions);
}
var IS_ISRC = "isISRC";
/**
* Check if the string is a ISRC.
* If given value is not a string, then it returns false.
*/
function isISRC(value) {
return typeof value === "string" && validator.isISRC(value);
}
/**
* Check if the string is a ISRC.
* If given value is not a string, then it returns false.
*/
function IsISRC(validationOptions) {
return ValidateBy({
name: IS_ISRC,
validator: {
validate: function (value, args) { return isISRC(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be an ISRC"; }, validationOptions)
}
}, validationOptions);
}
var IS_LOCALE = "isLocale";
/**
* Check if the string is a locale.
* If given value is not a string, then it returns false.
*/
function isLocale(value) {
return typeof value === "string" && validator.isLocale(value);
}
/**
* Check if the string is a locale.
* If given value is not a string, then it returns false.
*/
function IsLocale(validationOptions) {
return ValidateBy({
name: IS_LOCALE,
validator: {
validate: function (value, args) { return isLocale(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be locale"; }, validationOptions)
}
}, validationOptions);
}
var IS_MAGNET_URI = "isMagnetURI";
/**
* Check if the string is a magnet uri format.
* If given value is not a string, then it returns false.
*/
function isMagnetURI(value) {
return typeof value === "string" && validator.isMagnetURI(value);
}
/**
* Check if the string is a magnet uri format.
* If given value is not a string, then it returns false.
*/
function IsMagnetURI(validationOptions) {
return ValidateBy({
name: IS_MAGNET_URI,
validator: {
validate: function (value, args) { return isMagnetURI(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be magnet uri format"; }, validationOptions)
}
}, validationOptions);
}
var IS_MIME_TYPE = "isMimeType";
/**
* Check if the string matches to a valid MIME type format
* If given value is not a string, then it returns false.
*/
function isMimeType(value) {
return typeof value === "string" && validator.isMimeType(value);
}
/**
* Check if the string matches to a valid MIME type format
* If given value is not a string, then it returns false.
*/
function IsMimeType(validationOptions) {
return ValidateBy({
name: IS_MIME_TYPE,
validator: {
validate: function (value, args) { return isMimeType(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be MIME type format"; }, validationOptions)
}
}, validationOptions);
}
var IS_OCTAL = "isOctal";
/**
* Check if the string is a valid octal number.
* If given value is not a string, then it returns false.
*/
function isOctal(value) {
return typeof value === "string" && validator.isOctal(value);
}
/**
* Check if the string is a valid octal number.
* If given value is not a string, then it returns false.
*/
function IsOctal(validationOptions) {
return ValidateBy({
name: IS_OCTAL,
validator: {
validate: function (value, args) { return isOctal(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be valid octal number"; }, validationOptions)
}
}, validationOptions);
}
var IS_PASSPORT_NUMBER = "isPassportNumber";
/**
* Check if the string is a valid passport number relative to a specific country code.
* If given value is not a string, then it returns false.
*/
function isPassportNumber(value, countryCode) {
return typeof value === "string" && validator.isPassportNumber(value, countryCode);
}
/**
* Check if the string is a valid passport number relative to a specific country code.
* If given value is not a string, then it returns false.
*/
function IsPassportNumber(countryCode, validationOptions) {
return ValidateBy({
name: IS_PASSPORT_NUMBER,
constraints: [countryCode],
validator: {
validate: function (value, args) { return isPassportNumber(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be valid passport number"; }, validationOptions)
}
}, validationOptions);
}
var IS_POSTAL_CODE = "isPostalCode";
/**
* Check if the string is a postal code,
* (locale is one of [ 'AD', 'AT', 'AU', 'BE', 'BG', 'BR', 'CA', 'CH', 'CZ', 'DE', 'DK', 'DZ', 'EE', 'ES', 'FI', 'FR', 'GB', 'GR', 'HR', 'HU', 'ID', 'IE' 'IL', 'IN', 'IR', 'IS', 'IT', 'JP', 'KE', 'LI', 'LT', 'LU', 'LV', 'MT', 'MX', 'NL', 'NO', 'NZ', 'PL', 'PR', 'PT', 'RO', 'RU', 'SA', 'SE', 'SI', 'TN', 'TW', 'UA', 'US', 'ZA', 'ZM' ] OR 'any'. If 'any' is used, function will check if any of the locals match. Locale list is validator.isPostalCodeLocales.).
* If given value is not a string, then it returns false.
*/
function isPostalCode(value, locale) {
return typeof value === "string" && validator.isPostalCode(value, locale);
}
/**
* Check if the string is a postal code,
* (locale is one of [ 'AD', 'AT', 'AU', 'BE', 'BG', 'BR', 'CA', 'CH', 'CZ', 'DE', 'DK', 'DZ', 'EE', 'ES', 'FI', 'FR', 'GB', 'GR', 'HR', 'HU', 'ID', 'IE' 'IL', 'IN', 'IR', 'IS', 'IT', 'JP', 'KE', 'LI', 'LT', 'LU', 'LV', 'MT', 'MX', 'NL', 'NO', 'NZ', 'PL', 'PR', 'PT', 'RO', 'RU', 'SA', 'SE', 'SI', 'TN', 'TW', 'UA', 'US', 'ZA', 'ZM' ] OR 'any'. If 'any' is used, function will check if any of the locals match. Locale list is validator.isPostalCodeLocales.).
* If given value is not a string, then it returns false.
*/
function IsPostalCode(locale, validationOptions) {
return ValidateBy({
name: IS_POSTAL_CODE,
constraints: [locale],
validator: {
validate: function (value, args) { return isPostalCode(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a postal code"; }, validationOptions)
}
}, validationOptions);
}
var IS_RFC_3339 = "isRFC3339";
/**
* Check if the string is a valid RFC 3339 date.
* If given value is not a string, then it returns false.
*/
function isRFC3339(value) {
return typeof value === "string" && validator.isRFC3339(value);
}
/**
* Check if the string is a valid RFC 3339 date.
* If given value is not a string, then it returns false.
*/
function IsRFC3339(validationOptions) {
return ValidateBy({
name: IS_RFC_3339,
validator: {
validate: function (value, args) { return isRFC3339(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be RFC 3339 date"; }, validationOptions)
}
}, validationOptions);
}
var IS_RGB_COLOR = "isRgbColor";
/**
* Check if the string is a rgb or rgba color.
* `includePercentValues` defaults to true. If you don't want to allow to set rgb or rgba values with percents, like rgb(5%,5%,5%), or rgba(90%,90%,90%,.3), then set it to false.
* If given value is not a string, then it returns false.
*/
function isRgbColor(value, includePercentValues) {
return typeof value === "string" && validator.isRgbColor(value, includePercentValues);
}
/**
* Check if the string is a rgb or rgba color.
* `includePercentValues` defaults to true. If you don't want to allow to set rgb or rgba values with percents, like rgb(5%,5%,5%), or rgba(90%,90%,90%,.3), then set it to false.
* If given value is not a string, then it returns false.
*/
function IsRgbColor(includePercentValues, validationOptions) {
return ValidateBy({
name: IS_RGB_COLOR,
constraints: [includePercentValues],
validator: {
validate: function (value, args) { return isRgbColor(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be RGB color"; }, validationOptions)
}
}, validationOptions);
}
var IS_SEM_VER = "isSemVer";
/**
* Check if the string is a Semantic Versioning Specification (SemVer).
* If given value is not a string, then it returns false.
*/
function isSemVer(value) {
return typeof value === "string" && validator.isSemVer(value);
}
/**
* Check if the string is a Semantic Versioning Specification (SemVer).
* If given value is not a string, then it returns false.
*/
function IsSemVer(validationOptions) {
return ValidateBy({
name: IS_SEM_VER,
validator: {
validate: function (value, args) { return isSemVer(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a Semantic Versioning Specification"; }, validationOptions)
}
}, validationOptions);
}
var IS_BOOLEAN = "isBoolean";
/**
* Checks if a given value is a number.
*/
function isBoolean(value) {
return value instanceof Boolean || typeof value === "boolean";
}
/**
* Checks if a value is a number.
*/
function IsBoolean(validationOptions) {
return ValidateBy({
name: IS_BOOLEAN,
validator: {
validate: function (value, args) { return isBoolean(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a boolean value"; }, validationOptions)
}
}, validationOptions);
}
var IS_DATE = "isDate";
/**
* Checks if a given value is a number.
*/
function isDate(value) {
return value instanceof Date && !isNaN(value.getTime());
}
/**
* Checks if a value is a number.
*/
function IsDate(validationOptions) {
return ValidateBy({
name: IS_DATE,
validator: {
validate: function (value, args) { return isDate(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a Date instance"; }, validationOptions)
}
}, validationOptions);
}
var IS_NUMBER = "isNumber";
/**
* Checks if a given value is a number.
*/
function isNumber(value, options) {
if (options === void 0) { options = {}; }
if (typeof value !== "number") {
return false;
}
if (value === Infinity || value === -Infinity) {
return options.allowInfinity;
}
if (Number.isNaN(value)) {
return options.allowNaN;
}
if (options.maxDecimalPlaces !== undefined) {
var decimalPlaces = 0;
if ((value % 1) !== 0) {
decimalPlaces = value.toString().split(".")[1].length;
}
if (decimalPlaces > options.maxDecimalPlaces) {
return false;
}
}
return Number.isFinite(value);
}
/**
* Checks if a value is a number.
*/
function IsNumber(options, validationOptions) {
if (options === void 0) { options = {}; }
return ValidateBy({
name: IS_NUMBER,
constraints: [options],
validator: {
validate: function (value, args) { return isNumber(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a number conforming to the specified constraints"; }, validationOptions)
}
}, validationOptions);
}
var IS_ENUM = "isEnum";
/**
* Checks if a given value is an enum
*/
function isEnum(value, entity) {
var enumValues = Object.keys(entity)
.map(function (k) { return entity[k]; });
return enumValues.indexOf(value) >= 0;
}
/**
* Checks if a given value is an enum
*/
function IsEnum(entity, validationOptions) {
return ValidateBy({
name: IS_ENUM,
constraints: [entity],
validator: {
validate: function (value, args) { return isEnum(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a valid enum value"; }, validationOptions)
}
}, validationOptions);
}
var IS_INT = "isInt";
/**
* Checks if value is an integer.
*/
function isInt(val) {
return typeof val === "number" && Number.isInteger(val);
}
/**
* Checks if value is an integer.
*/
function IsInt(validationOptions) {
return ValidateBy({
name: IS_INT,
validator: {
validate: function (value, args) { return isInt(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be an integer number"; }, validationOptions)
}
}, validationOptions);
}
var IS_STRING = "isString";
/**
* Checks if a given value is a real string.
*/
function isString(value) {
return value instanceof String || typeof value === "string";
}
/**
* Checks if a given value is a real string.
*/
function IsString(validationOptions) {
return ValidateBy({
name: IS_STRING,
validator: {
validate: function (value, args) { return isString(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a string"; }, validationOptions)
}
}, validationOptions);
}
var IS_ARRAY = "isArray";
/**
* Checks if a given value is an array
*/
function isArray(value) {
return value instanceof Array;
}
/**
* Checks if a given value is an array
*/
function IsArray(validationOptions) {
return ValidateBy({
name: IS_ARRAY,
validator: {
validate: function (value, args) { return isArray(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be an array"; }, validationOptions)
}
}, validationOptions);
}
var IS_OBJECT = "isObject";
/**
* Checks if the value is valid Object.
* Returns false if the value is not an object.
*/
function isObject(value) {
return value != null && (typeof value === "object" || typeof value === "function") && !Array.isArray(value);
}
/**
* Checks if the value is valid Object.
* Returns false if the value is not an object.
*/
function IsObject(validationOptions) {
return ValidateBy({
name: IS_OBJECT,
validator: {
validate: function (value, args) { return isObject(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be an object"; }, validationOptions)
}
}, validationOptions);
}
var ARRAY_CONTAINS = "arrayContains";
/**
* Checks if array contains all values from the given array of values.
* If null or undefined is given then this function returns false.
*/
function arrayContains(array, values) {
if (!(array instanceof Array))
return false;
return values.every(function (value) { return array.indexOf(value) !== -1; });
}
/**
* Checks if array contains all values from the given array of values.
* If null or undefined is given then this function returns false.
*/
function ArrayContains(values, validationOptions) {
return ValidateBy({
name: ARRAY_CONTAINS,
constraints: [values],
validator: {
validate: function (value, args) { return arrayContains(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must contain $constraint1 values"; }, validationOptions)
}
}, validationOptions);
}
var ARRAY_NOT_CONTAINS = "arrayNotContains";
/**
* Checks if array does not contain any of the given values.
* If null or undefined is given then this function returns false.
*/
function arrayNotContains(array, values) {
if (!(array instanceof Array))
return false;
return values.every(function (value) { return array.indexOf(value) === -1; });
}
/**
* Checks if array does not contain any of the given values.
* If null or undefined is given then this function returns false.
*/
function ArrayNotContains(values, validationOptions) {
return ValidateBy({
name: ARRAY_NOT_CONTAINS,
constraints: [values],
validator: {
validate: function (value, args) { return arrayNotContains(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property should not contain $constraint1 values"; }, validationOptions)
}
}, validationOptions);
}
var ARRAY_NOT_EMPTY = "arrayNotEmpty";
/**
* Checks if given array is not empty.
* If null or undefined is given then this function returns false.
*/
function arrayNotEmpty(array) {
return array instanceof Array && array.length > 0;
}
/**
* Checks if given array is not empty.
* If null or undefined is given then this function returns false.
*/
function ArrayNotEmpty(validationOptions) {
return ValidateBy({
name: ARRAY_NOT_EMPTY,
validator: {
validate: function (value, args) { return arrayNotEmpty(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property should not be empty"; }, validationOptions)
}
}, validationOptions);
}
var ARRAY_MIN_SIZE = "arrayMinSize";
/**
* Checks if array's length is as minimal this number.
* If null or undefined is given then this function returns false.
*/
function arrayMinSize(array, min) {
return array instanceof Array && array.length >= min;
}
/**
* Checks if array's length is as minimal this number.
* If null or undefined is given then this function returns false.
*/
function ArrayMinSize(min, validationOptions) {
return ValidateBy({
name: ARRAY_MIN_SIZE,
constraints: [min],
validator: {
validate: function (value, args) { return arrayMinSize(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must contain at least $constraint1 elements"; }, validationOptions)
}
}, validationOptions);
}
var ARRAY_MAX_SIZE = "arrayMaxSize";
/**
* Checks if array's length is as maximal this number.
* If null or undefined is given then this function returns false.
*/
function arrayMaxSize(array, max) {
return array instanceof Array && array.length <= max;
}
/**
* Checks if array's length is as maximal this number.
* If null or undefined is given then this function returns false.
*/
function ArrayMaxSize(max, validationOptions) {
return ValidateBy({
name: ARRAY_MAX_SIZE,
constraints: [max],
validator: {
validate: function (value, args) { return arrayMaxSize(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must contain not more than $constraint1 elements"; }, validationOptions)
}
}, validationOptions);
}
var ARRAY_UNIQUE = "arrayUnique";
/**
* Checks if all array's values are unique. Comparison for objects is reference-based.
* If null or undefined is given then this function returns false.
*/
function arrayUnique(array) {
if (!(array instanceof Array))
return false;
var uniqueItems = array.filter(function (a, b, c) { return c.indexOf(a) === b; });
return array.length === uniqueItems.length;
}
/**
* Checks if all array's values are unique. Comparison for objects is reference-based.
* If null or undefined is given then this function returns false.
*/
function ArrayUnique(validationOptions) {
return ValidateBy({
name: ARRAY_UNIQUE,
validator: {
validate: function (value, args) { return arrayUnique(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "All $property's elements must be unique"; }, validationOptions)
}
}, validationOptions);
}
var IS_NOT_EMPTY_OBJECT = "isNotEmptyObject";
/**
* Checks if the value is valid Object & not empty.
* Returns false if the value is not an object or an empty valid object.
*/
function isNotEmptyObject(value) {
if (!isObject(value)) {
return false;
}
for (var key in value) {
if (value.hasOwnProperty(key)) {
return true;
}
}
return false;
}
/**
* Checks if the value is valid Object & not empty.
* Returns false if the value is not an object or an empty valid object.
*/
function IsNotEmptyObject(validationOptions) {
return ValidateBy({
name: IS_NOT_EMPTY_OBJECT,
validator: {
validate: function (value, args) { return isNotEmptyObject(value); },
defaultMessage: buildMessage(function (eachPrefix) { return eachPrefix + "$property must be a non-empty object"; }, validationOptions)
}
}, validationOptions);
}
var IS_INSTANCE = "isInstance";
/**
* Checks if the value is an instance of the specified object.
*/
function isInstance(object, targetTypeConstructor) {
return targetTypeConstructor
&& typeof targetTypeConstructor === "function"
&& object instanceof targetTypeConstructor;
}
/**
* Checks if the value is an instance of the specified object.
*/
function IsInstance(targetType, validationOptions) {
return ValidateBy({
name: IS_INSTANCE,
constraints: [targetType],
validator: {
validate: function (value, args) { return isInstance(value, args.constraints[0]); },
defaultMessage: buildMessage(function (eachPrefix, args) {
if (args.constraints[0]) {
return eachPrefix + ("$property must be an instance of " + args.constraints[0].name);
}
else {
return eachPrefix + (IS_INSTANCE + " decorator expects and object as value, but got falsy value.");
}
}, validationOptions)
}
}, validationOptions);
}
/**
* Validates given object by object's decorators or given validation schema.
*/
function validate(schemaNameOrObject, objectOrValidationOptions, maybeValidatorOptions) {
if (typeof schemaNameOrObject === "string") {
return getFromContainer(Validator).validate(schemaNameOrObject, objectOrValidationOptions, maybeValidatorOptions);
}
else {
return getFromContainer(Validator).validate(schemaNameOrObject, objectOrValidationOptions);
}
}
/**
* Validates given object by object's decorators or given validation schema and reject on error.
*/
function validateOrReject(schemaNameOrObject, objectOrValidationOptions, maybeValidatorOptions) {
if (typeof schemaNameOrObject === "string") {
return getFromContainer(Validator).validateOrReject(schemaNameOrObject, objectOrValidationOptions, maybeValidatorOptions);
}
else {
return getFromContainer(Validator).validateOrReject(schemaNameOrObject, objectOrValidationOptions);
}
}
/**
* Validates given object by object's decorators or given validation schema.
* Note that this method completely ignores async validations.
* If you want to properly perform validation you need to call validate method instead.
*/
function validateSync(schemaNameOrObject, objectOrValidationOptions, maybeValidatorOptions) {
if (typeof schemaNameOrObject === "string") {
return getFromContainer(Validator).validateSync(schemaNameOrObject, objectOrValidationOptions, maybeValidatorOptions);
}
else {
return getFromContainer(Validator).validateSync(schemaNameOrObject, objectOrValidationOptions);
}
}
/**
* Registers a new validation schema.
*/
function registerSchema(schema) {
getMetadataStorage().addValidationSchema(schema);
}
exports.ARRAY_CONTAINS = ARRAY_CONTAINS;
exports.ARRAY_MAX_SIZE = ARRAY_MAX_SIZE;
exports.ARRAY_MIN_SIZE = ARRAY_MIN_SIZE;
exports.ARRAY_NOT_CONTAINS = ARRAY_NOT_CONTAINS;
exports.ARRAY_NOT_EMPTY = ARRAY_NOT_EMPTY;
exports.ARRAY_UNIQUE = ARRAY_UNIQUE;
exports.Allow = Allow;
exports.ArrayContains = ArrayContains;
exports.ArrayMaxSize = ArrayMaxSize;
exports.ArrayMinSize = ArrayMinSize;
exports.ArrayNotContains = ArrayNotContains;
exports.ArrayNotEmpty = ArrayNotEmpty;
exports.ArrayUnique = ArrayUnique;
exports.CONTAINS = CONTAINS;
exports.Contains = Contains;
exports.EQUALS = EQUALS;
exports.Equals = Equals;
exports.IS_ALPHA = IS_ALPHA;
exports.IS_ALPHANUMERIC = IS_ALPHANUMERIC;
exports.IS_ARRAY = IS_ARRAY;
exports.IS_ASCII = IS_ASCII;
exports.IS_BASE32 = IS_BASE32;
exports.IS_BASE64 = IS_BASE64;
exports.IS_BIC = IS_BIC;
exports.IS_BOOLEAN = IS_BOOLEAN;
exports.IS_BOOLEAN_STRING = IS_BOOLEAN_STRING;
exports.IS_BTC_ADDRESS = IS_BTC_ADDRESS;
exports.IS_BYTE_LENGTH = IS_BYTE_LENGTH;
exports.IS_CREDIT_CARD = IS_CREDIT_CARD;
exports.IS_CURRENCY = IS_CURRENCY;
exports.IS_DATA_URI = IS_DATA_URI;
exports.IS_DATE = IS_DATE;
exports.IS_DATE_STRING = IS_DATE_STRING;
exports.IS_DECIMAL = IS_DECIMAL;
exports.IS_DEFINED = IS_DEFINED;
exports.IS_DIVISIBLE_BY = IS_DIVISIBLE_BY;
exports.IS_EAN = IS_EAN;
exports.IS_EMAIL = IS_EMAIL;
exports.IS_EMPTY = IS_EMPTY;
exports.IS_ENUM = IS_ENUM;
exports.IS_ETHEREUM_ADDRESS = IS_ETHEREUM_ADDRESS;
exports.IS_FIREBASE_PUSH_ID = IS_FIREBASE_PUSH_ID;
exports.IS_FQDN = IS_FQDN;
exports.IS_FULL_WIDTH = IS_FULL_WIDTH;
exports.IS_HALF_WIDTH = IS_HALF_WIDTH;
exports.IS_HASH = IS_HASH;
exports.IS_HEXADECIMAL = IS_HEXADECIMAL;
exports.IS_HEX_COLOR = IS_HEX_COLOR;
exports.IS_HSL = IS_HSL;
exports.IS_IBAN = IS_IBAN;
exports.IS_IDENTITY_CARD = IS_IDENTITY_CARD;
exports.IS_IN = IS_IN;
exports.IS_INSTANCE = IS_INSTANCE;
exports.IS_INT = IS_INT;
exports.IS_IP = IS_IP;
exports.IS_ISBN = IS_ISBN;
exports.IS_ISIN = IS_ISIN;
exports.IS_ISO31661_ALPHA_2 = IS_ISO31661_ALPHA_2;
exports.IS_ISO31661_ALPHA_3 = IS_ISO31661_ALPHA_3;
exports.IS_ISO8601 = IS_ISO8601;
exports.IS_ISRC = IS_ISRC;
exports.IS_ISSN = IS_ISSN;
exports.IS_JSON = IS_JSON;
exports.IS_JWT = IS_JWT;
exports.IS_LATITUDE = IS_LATITUDE;
exports.IS_LATLONG = IS_LATLONG;
exports.IS_LOCALE = IS_LOCALE;
exports.IS_LONGITUDE = IS_LONGITUDE;
exports.IS_LOWERCASE = IS_LOWERCASE;
exports.IS_MAC_ADDRESS = IS_MAC_ADDRESS;
exports.IS_MAGNET_URI = IS_MAGNET_URI;
exports.IS_MILITARY_TIME = IS_MILITARY_TIME;
exports.IS_MIME_TYPE = IS_MIME_TYPE;
exports.IS_MOBILE_PHONE = IS_MOBILE_PHONE;
exports.IS_MONGO_ID = IS_MONGO_ID;
exports.IS_MULTIBYTE = IS_MULTIBYTE;
exports.IS_NEGATIVE = IS_NEGATIVE;
exports.IS_NOT_EMPTY = IS_NOT_EMPTY;
exports.IS_NOT_EMPTY_OBJECT = IS_NOT_EMPTY_OBJECT;
exports.IS_NOT_IN = IS_NOT_IN;
exports.IS_NUMBER = IS_NUMBER;
exports.IS_NUMBER_STRING = IS_NUMBER_STRING;
exports.IS_OBJECT = IS_OBJECT;
exports.IS_OCTAL = IS_OCTAL;
exports.IS_PASSPORT_NUMBER = IS_PASSPORT_NUMBER;
exports.IS_PHONE_NUMBER = IS_PHONE_NUMBER;
exports.IS_PORT = IS_PORT;
exports.IS_POSITIVE = IS_POSITIVE;
exports.IS_POSTAL_CODE = IS_POSTAL_CODE;
exports.IS_RFC_3339 = IS_RFC_3339;
exports.IS_RGB_COLOR = IS_RGB_COLOR;
exports.IS_SEM_VER = IS_SEM_VER;
exports.IS_STRING = IS_STRING;
exports.IS_SURROGATE_PAIR = IS_SURROGATE_PAIR;
exports.IS_UPPERCASE = IS_UPPERCASE;
exports.IS_URL = IS_URL;
exports.IS_UUID = IS_UUID;
exports.IS_VARIABLE_WIDTH = IS_VARIABLE_WIDTH;
exports.IsAlpha = IsAlpha;
exports.IsAlphanumeric = IsAlphanumeric;
exports.IsArray = IsArray;
exports.IsAscii = IsAscii;
exports.IsBIC = IsBIC;
exports.IsBase32 = IsBase32;
exports.IsBase64 = IsBase64;
exports.IsBoolean = IsBoolean;
exports.IsBooleanString = IsBooleanString;
exports.IsBtcAddress = IsBtcAddress;
exports.IsByteLength = IsByteLength;
exports.IsCreditCard = IsCreditCard;
exports.IsCurrency = IsCurrency;
exports.IsDataURI = IsDataURI;
exports.IsDate = IsDate;
exports.IsDateString = IsDateString;
exports.IsDecimal = IsDecimal;
exports.IsDefined = IsDefined;
exports.IsDivisibleBy = IsDivisibleBy;
exports.IsEAN = IsEAN;
exports.IsEmail = IsEmail;
exports.IsEmpty = IsEmpty;
exports.IsEnum = IsEnum;
exports.IsEthereumAddress = IsEthereumAddress;
exports.IsFQDN = IsFQDN;
exports.IsFirebasePushId = IsFirebasePushId;
exports.IsFullWidth = IsFullWidth;
exports.IsHSL = IsHSL;
exports.IsHalfWidth = IsHalfWidth;
exports.IsHash = IsHash;
exports.IsHexColor = IsHexColor;
exports.IsHexadecimal = IsHexadecimal;
exports.IsIBAN = IsIBAN;
exports.IsIP = IsIP;
exports.IsISBN = IsISBN;
exports.IsISIN = IsISIN;
exports.IsISO31661Alpha2 = IsISO31661Alpha2;
exports.IsISO31661Alpha3 = IsISO31661Alpha3;
exports.IsISO8601 = IsISO8601;
exports.IsISRC = IsISRC;
exports.IsISSN = IsISSN;
exports.IsIdentityCard = IsIdentityCard;
exports.IsIn = IsIn;
exports.IsInstance = IsInstance;
exports.IsInt = IsInt;
exports.IsJSON = IsJSON;
exports.IsJWT = IsJWT;
exports.IsLatLong = IsLatLong;
exports.IsLatitude = IsLatitude;
exports.IsLocale = IsLocale;
exports.IsLongitude = IsLongitude;
exports.IsLowercase = IsLowercase;
exports.IsMACAddress = IsMACAddress;
exports.IsMagnetURI = IsMagnetURI;
exports.IsMilitaryTime = IsMilitaryTime;
exports.IsMimeType = IsMimeType;
exports.IsMobilePhone = IsMobilePhone;
exports.IsMongoId = IsMongoId;
exports.IsMultibyte = IsMultibyte;
exports.IsNegative = IsNegative;
exports.IsNotEmpty = IsNotEmpty;
exports.IsNotEmptyObject = IsNotEmptyObject;
exports.IsNotIn = IsNotIn;
exports.IsNumber = IsNumber;
exports.IsNumberString = IsNumberString;
exports.IsObject = IsObject;
exports.IsOctal = IsOctal;
exports.IsOptional = IsOptional;
exports.IsPassportNumber = IsPassportNumber;
exports.IsPhoneNumber = IsPhoneNumber;
exports.IsPort = IsPort;
exports.IsPositive = IsPositive;
exports.IsPostalCode = IsPostalCode;
exports.IsRFC3339 = IsRFC3339;
exports.IsRgbColor = IsRgbColor;
exports.IsSemVer = IsSemVer;
exports.IsString = IsString;
exports.IsSurrogatePair = IsSurrogatePair;
exports.IsUUID = IsUUID;
exports.IsUppercase = IsUppercase;
exports.IsUrl = IsUrl;
exports.IsVariableWidth = IsVariableWidth;
exports.LENGTH = LENGTH;
exports.Length = Length;
exports.MATCHES = MATCHES;
exports.MAX = MAX;
exports.MAX_DATE = MAX_DATE;
exports.MAX_LENGTH = MAX_LENGTH;
exports.MIN = MIN;
exports.MIN_DATE = MIN_DATE;
exports.MIN_LENGTH = MIN_LENGTH;
exports.Matches = Matches;
exports.Max = Max;
exports.MaxDate = MaxDate;
exports.MaxLength = MaxLength;
exports.MetadataStorage = MetadataStorage;
exports.Min = Min;
exports.MinDate = MinDate;
exports.MinLength = MinLength;
exports.NOT_CONTAINS = NOT_CONTAINS;
exports.NOT_EQUALS = NOT_EQUALS;
exports.NotContains = NotContains;
exports.NotEquals = NotEquals;
exports.Validate = Validate;
exports.ValidateBy = ValidateBy;
exports.ValidateIf = ValidateIf;
exports.ValidateNested = ValidateNested;
exports.ValidatePromise = ValidatePromise;
exports.ValidationError = ValidationError;
exports.ValidationTypes = ValidationTypes;
exports.Validator = Validator;
exports.ValidatorConstraint = ValidatorConstraint;
exports.arrayContains = arrayContains;
exports.arrayMaxSize = arrayMaxSize;
exports.arrayMinSize = arrayMinSize;
exports.arrayNotContains = arrayNotContains;
exports.arrayNotEmpty = arrayNotEmpty;
exports.arrayUnique = arrayUnique;
exports.buildMessage = buildMessage;
exports.contains = contains;
exports.equals = equals;
exports.getFromContainer = getFromContainer;
exports.getMetadataStorage = getMetadataStorage;
exports.isAlpha = isAlpha;
exports.isAlphanumeric = isAlphanumeric;
exports.isArray = isArray;
exports.isAscii = isAscii;
exports.isBIC = isBIC;
exports.isBase32 = isBase32;
exports.isBase64 = isBase64;
exports.isBoolean = isBoolean;
exports.isBooleanString = isBooleanString;
exports.isBtcAddress = isBtcAddress;
exports.isByteLength = isByteLength;
exports.isCreditCard = isCreditCard;
exports.isCurrency = isCurrency;
exports.isDataURI = isDataURI;
exports.isDate = isDate;
exports.isDateString = isDateString;
exports.isDecimal = isDecimal;
exports.isDefined = isDefined;
exports.isDivisibleBy = isDivisibleBy;
exports.isEAN = isEAN;
exports.isEmail = isEmail;
exports.isEmpty = isEmpty;
exports.isEnum = isEnum;
exports.isEthereumAddress = isEthereumAddress;
exports.isFQDN = isFQDN;
exports.isFirebasePushId = isFirebasePushId;
exports.isFullWidth = isFullWidth;
exports.isHSL = isHSL;
exports.isHalfWidth = isHalfWidth;
exports.isHash = isHash;
exports.isHexColor = isHexColor;
exports.isHexadecimal = isHexadecimal;
exports.isIBAN = isIBAN;
exports.isIP = isIP;
exports.isISBN = isISBN;
exports.isISIN = isISIN;
exports.isISO31661Alpha2 = isISO31661Alpha2;
exports.isISO31661Alpha3 = isISO31661Alpha3;
exports.isISO8601 = isISO8601;
exports.isISRC = isISRC;
exports.isISSN = isISSN;
exports.isIdentityCard = isIdentityCard;
exports.isIn = isIn;
exports.isInstance = isInstance;
exports.isInt = isInt;
exports.isJSON = isJSON;
exports.isJWT = isJWT;
exports.isLatLong = isLatLong;
exports.isLatitude = isLatitude;
exports.isLocale = isLocale;
exports.isLongitude = isLongitude;
exports.isLowercase = isLowercase;
exports.isMACAddress = isMACAddress;
exports.isMagnetURI = isMagnetURI;
exports.isMilitaryTime = isMilitaryTime;
exports.isMimeType = isMimeType;
exports.isMobilePhone = isMobilePhone;
exports.isMongoId = isMongoId;
exports.isMultibyte = isMultibyte;
exports.isNegative = isNegative;
exports.isNotEmpty = isNotEmpty;
exports.isNotEmptyObject = isNotEmptyObject;
exports.isNotIn = isNotIn;
exports.isNumber = isNumber;
exports.isNumberString = isNumberString;
exports.isObject = isObject;
exports.isOctal = isOctal;
exports.isPassportNumber = isPassportNumber;
exports.isPhoneNumber = isPhoneNumber;
exports.isPort = isPort;
exports.isPositive = isPositive;
exports.isPostalCode = isPostalCode;
exports.isRFC3339 = isRFC3339;
exports.isRgbColor = isRgbColor;
exports.isSemVer = isSemVer;
exports.isString = isString;
exports.isSurrogatePair = isSurrogatePair;
exports.isURL = isURL;
exports.isUUID = isUUID;
exports.isUppercase = isUppercase;
exports.isValidationOptions = isValidationOptions;
exports.isVariableWidth = isVariableWidth;
exports.length = length;
exports.matches = matches;
exports.max = max;
exports.maxDate = maxDate;
exports.maxLength = maxLength;
exports.min = min;
exports.minDate = minDate;
exports.minLength = minLength;
exports.notContains = notContains;
exports.notEquals = notEquals;
exports.registerDecorator = registerDecorator;
exports.registerSchema = registerSchema;
exports.useContainer = useContainer;
exports.validate = validate;
exports.validateOrReject = validateOrReject;
exports.validateSync = validateSync;
Object.defineProperty(exports, '__esModule', { value: true });
})));
//# sourceMappingURL=index.umd.js.map