UNPKG

homebridge-config-ui-x

Version:

A web based management, configuration and control platform for Homebridge

1,278 lines • 51.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var ValidationTypes_1 = require("../validation/ValidationTypes"); var ValidationMetadata_1 = require("../metadata/ValidationMetadata"); var ConstraintMetadata_1 = require("../metadata/ConstraintMetadata"); var container_1 = require("../container"); var MetadataStorage_1 = require("../metadata/MetadataStorage"); // ------------------------------------------------------------------------- // System // ------------------------------------------------------------------------- /** * 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_1.ConstraintMetadata(target, name, isAsync); container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addConstraintMetadata(metadata); }; } exports.ValidatorConstraint = ValidatorConstraint; function Validate(constraintClass, constraintsOrValidationOptions, maybeValidationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.CUSTOM_VALIDATION, target: object.constructor, propertyName: propertyName, constraintCls: constraintClass, constraints: constraintsOrValidationOptions instanceof Array ? constraintsOrValidationOptions : undefined, validationOptions: !(constraintsOrValidationOptions instanceof Array) ? constraintsOrValidationOptions : maybeValidationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.Validate = Validate; /** * Objects / object arrays marked with this decorator will also be validated. */ function ValidateNested(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.NESTED_VALIDATION, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.ValidateNested = ValidateNested; /** * Objects / object arrays marked with this decorator will also be validated. */ function ValidatePromise(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.PROMISE_VALIDATION, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.ValidatePromise = ValidatePromise; /** * 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_1.ValidationTypes.WHITELIST, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.Allow = Allow; /** * Objects / object arrays marked with this decorator will also be validated. */ function ValidateIf(condition, validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.CONDITIONAL_VALIDATION, target: object.constructor, propertyName: propertyName, constraints: [condition], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.ValidateIf = ValidateIf; // ------------------------------------------------------------------------- // Common checkers // ------------------------------------------------------------------------- /** * Checks if given value is defined (!== undefined, !== null). */ function IsDefined(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_DEFINED, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsDefined = IsDefined; /** * Checks if the value match ("===") the comparison. */ function Equals(comparison, validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.EQUALS, target: object.constructor, propertyName: propertyName, constraints: [comparison], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.Equals = Equals; /** * Checks if the value does not match ("!==") the comparison. */ function NotEquals(comparison, validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.NOT_EQUALS, target: object.constructor, propertyName: propertyName, constraints: [comparison], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.NotEquals = NotEquals; /** * Checks if given value is empty (=== '', === null, === undefined). */ function IsEmpty(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_EMPTY, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsEmpty = IsEmpty; /** * Checks if given value is not empty (!== '', !== null, !== undefined). */ function IsNotEmpty(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_NOT_EMPTY, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsNotEmpty = IsNotEmpty; /** * Checks if value is in a array of allowed values. */ function IsIn(values, validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_IN, target: object.constructor, propertyName: propertyName, constraints: [values], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsIn = IsIn; /** * Checks if value is not in a array of disallowed values. */ function IsNotIn(values, validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_NOT_IN, target: object.constructor, propertyName: propertyName, constraints: [values], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsNotIn = IsNotIn; /** * Checks if value is missing and if so, ignores all validators. */ function IsOptional(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.CONDITIONAL_VALIDATION, target: object.constructor, propertyName: propertyName, constraints: [function (object, value) { return object[propertyName] !== null && object[propertyName] !== undefined; }], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsOptional = IsOptional; // ------------------------------------------------------------------------- // Type checkers // ------------------------------------------------------------------------- /** * Checks if a value is a boolean. */ function IsBoolean(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_BOOLEAN, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsBoolean = IsBoolean; /** * Checks if a value is a latitude,longitude. */ function IsLatLong(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_LATLONG, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsLatLong = IsLatLong; /** * Checks if a value is a latitude,longitude. */ function IsLatitude(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_LONGITUDE, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsLatitude = IsLatitude; /** * Checks if a value is a latitude,longitude. */ function IsLongitude(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_LATITUDE, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsLongitude = IsLongitude; /** * Checks if a value is a date. */ function IsDate(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_DATE, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsDate = IsDate; /** * Checks if a value is a number. */ function IsNumber(options, validationOptions) { if (options === void 0) { options = {}; } return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_NUMBER, target: object.constructor, propertyName: propertyName, constraints: [options], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsNumber = IsNumber; /** * Checks if the value is an integer number. */ function IsInt(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_INT, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsInt = IsInt; /** * Checks if a value is a string. */ function IsString(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_STRING, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsString = IsString; function IsDateString(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_DATE_STRING, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsDateString = IsDateString; /** * Checks if a value is an array. */ function IsArray(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_ARRAY, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsArray = IsArray; /** * Checks if a value is a number enum. */ function IsEnum(entity, validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_ENUM, target: object.constructor, propertyName: propertyName, constraints: [entity], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsEnum = IsEnum; // ------------------------------------------------------------------------- // Number checkers // ------------------------------------------------------------------------- /** * Checks if the value is a number that's divisible by another. */ function IsDivisibleBy(num, validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_DIVISIBLE_BY, target: object.constructor, propertyName: propertyName, constraints: [num], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsDivisibleBy = IsDivisibleBy; /** * Checks if the value is a positive number. */ function IsPositive(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_POSITIVE, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsPositive = IsPositive; /** * Checks if the value is a negative number. */ function IsNegative(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_NEGATIVE, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsNegative = IsNegative; /** * Checks if the given number is greater than or equal to given number. */ function Min(min, validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.MIN, target: object.constructor, propertyName: propertyName, constraints: [min], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.Min = Min; /** * Checks if the given number is less than or equal to given number. */ function Max(max, validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.MAX, target: object.constructor, propertyName: propertyName, constraints: [max], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.Max = Max; // ------------------------------------------------------------------------- // Date checkers // ------------------------------------------------------------------------- /** * Checks if the value is a date that's after the specified date. */ function MinDate(date, validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.MIN_DATE, target: object.constructor, propertyName: propertyName, constraints: [date], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.MinDate = MinDate; /** * Checks if the value is a date that's before the specified date. */ function MaxDate(date, validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.MAX_DATE, target: object.constructor, propertyName: propertyName, constraints: [date], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.MaxDate = MaxDate; // ------------------------------------------------------------------------- // String-as-types checkers // ------------------------------------------------------------------------- /** * Checks if a string is a boolean. */ function IsBooleanString(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_BOOLEAN_STRING, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsBooleanString = IsBooleanString; /** * Checks if the string is a number. */ function IsNumberString(validationOptions, NumberOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_NUMBER_STRING, target: object.constructor, propertyName: propertyName, constraints: [NumberOptions], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsNumberString = IsNumberString; // ------------------------------------------------------------------------- // String checkers // ------------------------------------------------------------------------- /** * Checks if the string contains the seed. */ function Contains(seed, validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.CONTAINS, target: object.constructor, propertyName: propertyName, constraints: [seed], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.Contains = Contains; /** * Checks if the string does not contain the seed. */ function NotContains(seed, validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.NOT_CONTAINS, target: object.constructor, propertyName: propertyName, constraints: [seed], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.NotContains = NotContains; /** * Checks if the string contains only letters (a-zA-Z). */ function IsAlpha(locale, validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_ALPHA, target: object.constructor, propertyName: propertyName, constraints: [locale], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsAlpha = IsAlpha; /** * Checks if the string contains only letters and numbers. */ function IsAlphanumeric(locale, validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_ALPHANUMERIC, target: object.constructor, propertyName: propertyName, constraints: [locale], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsAlphanumeric = IsAlphanumeric; /** * Checks if the given number is a valid decimal. */ function IsDecimal(options, validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_DECIMAL, target: object.constructor, propertyName: propertyName, constraints: [options], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsDecimal = IsDecimal; /** * Checks if the string contains ASCII chars only. */ function IsAscii(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_ASCII, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsAscii = IsAscii; /** * Checks if a string is base64 encoded. */ function IsBase64(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_BASE64, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsBase64 = IsBase64; /** * Checks if the string's length (in bytes) falls in a range. */ function IsByteLength(min, max, validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_BYTE_LENGTH, target: object.constructor, propertyName: propertyName, constraints: [min, max], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsByteLength = IsByteLength; /** * Checks if the string is a credit card. */ function IsCreditCard(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_CREDIT_CARD, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsCreditCard = IsCreditCard; /** * Checks if the string is a valid currency amount. */ function IsCurrency(options, validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_CURRENCY, target: object.constructor, propertyName: propertyName, constraints: [options], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsCurrency = IsCurrency; /** * Checks if the string is an email. */ function IsEmail(options, validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_EMAIL, target: object.constructor, propertyName: propertyName, constraints: [options], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsEmail = IsEmail; /** * Checks if the string is a fully qualified domain name (e.g. domain.com). */ function IsFQDN(options, validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_FQDN, target: object.constructor, propertyName: propertyName, constraints: [options], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsFQDN = IsFQDN; /** * Checks if the string contains any full-width chars. */ function IsFullWidth(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_FULL_WIDTH, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsFullWidth = IsFullWidth; /** * Checks if the string contains any half-width chars. */ function IsHalfWidth(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_HALF_WIDTH, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsHalfWidth = IsHalfWidth; /** * Checks if the string contains a mixture of full and half-width chars. */ function IsVariableWidth(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_VARIABLE_WIDTH, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsVariableWidth = IsVariableWidth; /** * Checks if the string is a hexadecimal color. */ function IsHexColor(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_HEX_COLOR, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsHexColor = IsHexColor; /** * Checks if the string is a hexadecimal number. */ function IsHexadecimal(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_HEXADECIMAL, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsHexadecimal = IsHexadecimal; /** * Checks if the string is an IP (version 4 or 6). */ function IsIP(version, validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_IP, target: object.constructor, propertyName: propertyName, constraints: [version], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsIP = IsIP; /** * Check if the string is a valid port number. */ function IsPort(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_PORT, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsPort = IsPort; /** * Checks if the string is an ISBN (version 10 or 13). */ function IsISBN(version, validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_ISBN, target: object.constructor, propertyName: propertyName, constraints: [version], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsISBN = IsISBN; /** * Checks if the string is an ISIN (stock/security identifier). */ function IsISIN(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_ISIN, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsISIN = IsISIN; /** * Checks if the string is a valid ISO 8601 date. */ function IsISO8601(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_ISO8601, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsISO8601 = IsISO8601; /** * Checks if the string is valid JSON (note: uses JSON.parse). */ function IsJSON(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_JSON, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsJSON = IsJSON; /** * Checks if the value is a valid object. */ function IsObject(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_OBJECT, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsObject = IsObject; /** * Checks if the value is a valid object & not empty. */ function IsNotEmptyObject(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_NOT_EMPTY_OBJECT, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsNotEmptyObject = IsNotEmptyObject; /** * Checks if the string is lowercase. */ function IsLowercase(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_LOWERCASE, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsLowercase = IsLowercase; /** * Checks if the string is a mobile phone number (locale is one of ['zh-CN', 'zh-TW', 'en-ZA', 'en-AU', 'en-HK', * 'pt-PT', 'fr-FR', 'el-GR', 'en-GB', 'en-US', 'en-ZM', 'ru-RU', 'nb-NO', 'nn-NO', 'vi-VN', 'en-NZ']). */ function IsMobilePhone(locale, validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_MOBILE_PHONE, target: object.constructor, propertyName: propertyName, constraints: [locale], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsMobilePhone = IsMobilePhone; /** * Checks if the string is a valid phone number. * @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(region, validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_PHONE_NUMBER, target: object.constructor, propertyName: propertyName, constraints: [region], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsPhoneNumber = IsPhoneNumber; /** * Check if the string is a valid ISO 3166-1 alpha-2. * See heck if [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) officially assigned country code. */ function IsISO31661Alpha2(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_ISO31661_ALPHA_2, target: object.constructor, propertyName: propertyName, constraints: [], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsISO31661Alpha2 = IsISO31661Alpha2; /** * Check if the string is a valid ISO 3166-1 alpha-3. * See heck if [ISO 3166-1 alpha-3](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3) officially assigned country code. */ function IsISO31661Alpha3(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_ISO31661_ALPHA_3, target: object.constructor, propertyName: propertyName, constraints: [], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsISO31661Alpha3 = IsISO31661Alpha3; /** * Checks if the string is a valid hex-encoded representation of a MongoDB ObjectId. */ function IsMongoId(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_MONGO_ID, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsMongoId = IsMongoId; /** * Checks if the string contains one or more multibyte chars. */ function IsMultibyte(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_MULTIBYTE, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsMultibyte = IsMultibyte; /** * Checks if the string contains any surrogate pairs chars. */ function IsSurrogatePair(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_SURROGATE_PAIR, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsSurrogatePair = IsSurrogatePair; /** * Checks if the string is an url. */ function IsUrl(options, validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_URL, target: object.constructor, propertyName: propertyName, constraints: [options], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsUrl = IsUrl; /** * Checks if the string is a UUID (version 3, 4 or 5). */ function IsUUID(version, validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_UUID, target: object.constructor, propertyName: propertyName, constraints: [version], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsUUID = IsUUID; /** * Checks if the string is uppercase. */ function IsUppercase(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_UPPERCASE, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsUppercase = IsUppercase; /** * Checks if the string's length falls in a range. Note: this function takes into account surrogate pairs. */ function Length(min, max, validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.LENGTH, target: object.constructor, propertyName: propertyName, constraints: [min, max], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.Length = Length; /** * Checks if the string's length is not less than given number. Note: this function takes into account surrogate pairs. */ function MinLength(min, validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.MIN_LENGTH, target: object.constructor, propertyName: propertyName, constraints: [min], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.MinLength = MinLength; /** * Checks if the string's length is not more than given number. Note: this function takes into account surrogate pairs. */ function MaxLength(max, validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.MAX_LENGTH, target: object.constructor, propertyName: propertyName, constraints: [max], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.MaxLength = MaxLength; function Matches(pattern, modifiersOrAnnotationOptions, validationOptions) { var modifiers; if (modifiersOrAnnotationOptions && modifiersOrAnnotationOptions instanceof Object && !validationOptions) { validationOptions = modifiersOrAnnotationOptions; } else { modifiers = modifiersOrAnnotationOptions; } return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.MATCHES, target: object.constructor, propertyName: propertyName, constraints: [pattern, modifiers], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.Matches = Matches; /** * Checks if the string correctly represents a time in the format HH:MM */ function IsMilitaryTime(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.IS_MILITARY_TIME, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.IsMilitaryTime = IsMilitaryTime; // ------------------------------------------------------------------------- // Array checkers // ------------------------------------------------------------------------- /** * Checks if array contains all values from the given array of values. */ function ArrayContains(values, validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.ARRAY_CONTAINS, target: object.constructor, propertyName: propertyName, constraints: [values], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.ArrayContains = ArrayContains; /** * Checks if array does not contain any of the given values. */ function ArrayNotContains(values, validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.ARRAY_NOT_CONTAINS, target: object.constructor, propertyName: propertyName, constraints: [values], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.ArrayNotContains = ArrayNotContains; /** * Checks if given array is not empty. */ function ArrayNotEmpty(validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.ARRAY_NOT_EMPTY, target: object.constructor, propertyName: propertyName, validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.ArrayNotEmpty = ArrayNotEmpty; /** * Checks if array's length is as minimal this number. */ function ArrayMinSize(min, validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.ARRAY_MIN_SIZE, target: object.constructor, propertyName: propertyName, constraints: [min], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new ValidationMetadata_1.ValidationMetadata(args)); }; } exports.ArrayMinSize = ArrayMinSize; /** * Checks if array's length is as maximal this number. */ function ArrayMaxSize(max, validationOptions) { return function (object, propertyName) { var args = { type: ValidationTypes_1.ValidationTypes.ARRAY_MAX_SIZE, target: object.constructor, propertyName: propertyName, constraints: [max], validationOptions: validationOptions }; container_1.getFromContainer(MetadataStorage_1.MetadataStorage).addValidationMetadata(new Valid