UNPKG

im-angular-validators

Version:

This library will help you with lots of already written mostly used validators for Angular 2+ applications.

1 lines 58.3 kB
{"version":3,"file":"angular-validators.mjs","sources":["../../../projects/angular-validators/src/lib/enums/country.enum.ts","../../../projects/angular-validators/src/lib/constants/country-configurations.constant.ts","../../../projects/angular-validators/src/lib/validators/email.validator.ts","../../../projects/angular-validators/src/lib/validators/phone-number.validator.ts","../../../projects/angular-validators/src/lib/validators/required.validator.ts","../../../projects/angular-validators/src/lib/enums/credit-card-type.enum.ts","../../../projects/angular-validators/src/lib/helpers/credit-card-validator-helpers/credit-card-length-validator.helper.ts","../../../projects/angular-validators/src/lib/validators/credit-card.validator.ts","../../../projects/angular-validators/src/lib/helpers/is-number.helper.ts","../../../projects/angular-validators/src/lib/enums/comparator-operator.enum.ts","../../../projects/angular-validators/src/lib/validators/number-comparator.validator.ts","../../../projects/angular-validators/src/lib/constants/general.constant.ts","../../../projects/angular-validators/src/lib/validators/date-comparator.validator.ts","../../../projects/angular-validators/src/lib/validators/time-comparator.validator.ts","../../../projects/angular-validators/src/lib/validators/number-in-range.validator.ts","../../../projects/angular-validators/src/lib/validators/date-in-range.validator.ts","../../../projects/angular-validators/src/lib/validators/post-code.validator.ts","../../../projects/angular-validators/src/lib/enums/password-operator.enum.ts","../../../projects/angular-validators/src/lib/validators/password.validator.ts","../../../projects/angular-validators/src/lib/validators/number-decimal-places.validator.ts","../../../projects/angular-validators/src/lib/enums/url-protocol.enum.ts","../../../projects/angular-validators/src/lib/validators/url.validator.ts","../../../projects/angular-validators/src/lib/validators/json.validator.ts","../../../projects/angular-validators/src/lib/validators/uuid.validator.ts","../../../projects/angular-validators/src/public-api.ts","../../../projects/angular-validators/src/angular-validators.ts"],"sourcesContent":["/**\r\n * Here are all European countries with the USA\r\n * Countries are taken from:\r\n * https://en.wikipedia.org/wiki/List_of_European_countries_by_area\r\n */\r\nexport enum IMCountryEnum {\r\n Albania = 1,\r\n Andorra,\r\n Armenia,\r\n Austria,\r\n Azerbaijan,\r\n Belarus,\r\n Belgium,\r\n BosniaAndHerzegovina,\r\n Bulgaria,\r\n Croatia,\r\n Cyprus,\r\n CzechRepublic,\r\n Denmark,\r\n Estonia,\r\n Finland,\r\n France,\r\n Georgia,\r\n Germany,\r\n Greece,\r\n Hungary,\r\n Iceland,\r\n Ireland,\r\n Italy,\r\n Kazakhstan,\r\n Kosovo,\r\n Latvia,\r\n Liechtenstein,\r\n Lithuania,\r\n Luxembourg,\r\n Malta,\r\n Moldova,\r\n Monaco,\r\n Montenegro,\r\n Netherlands,\r\n NorthMacedonia,\r\n Norway,\r\n Poland,\r\n Portugal,\r\n Romania,\r\n Russia,\r\n SanMarino,\r\n Serbia,\r\n Slovakia,\r\n Slovenia,\r\n Spain,\r\n Sweden,\r\n Switzerland,\r\n Turkey,\r\n Ukraine,\r\n UnitedKingdom,\r\n VaticanCity,\r\n USA\r\n}\r\n","import {IMCountryConfigInterface} from '../interfaces/country-config.interface';\r\nimport {IMCountryEnum} from '../enums/country.enum';\r\n\r\n// List of European countries by area: https://en.wikipedia.org/wiki/List_of_European_countries_by_area\r\n// List of codes by area: https://en.wikipedia.org/wiki/List_of_postal_codes\r\n\r\nexport const IMCountryConfigurations: IMCountryConfigInterface[] = [\r\n {\r\n countryName: 'Albania',\r\n country: IMCountryEnum.Albania,\r\n iso: 'AL',\r\n capital: 'Tirana',\r\n phoneNumber: {\r\n callingCode: 355,\r\n afterCodeNumbersLength: 9,\r\n example: 355123456789\r\n },\r\n postCodePattern: `^[0-9]{${4}}$`,\r\n postCodeExample: 1000\r\n },\r\n {\r\n countryName: 'Andorra',\r\n country: IMCountryEnum.Andorra,\r\n iso: 'AD',\r\n capital: 'Andorra la Vella',\r\n phoneNumber: {\r\n callingCode: 376,\r\n afterCodeNumbersLength: 9,\r\n example: 376123456789\r\n },\r\n postCodePattern: `^(?:AD)[0-9]{${3}}$`,\r\n postCodeExample: 'AD123'\r\n },\r\n {\r\n countryName: 'Germany',\r\n country: IMCountryEnum.Germany,\r\n iso: 'DE',\r\n capital: 'Berlin',\r\n phoneNumber: {\r\n callingCode: 49,\r\n afterCodeNumbersLength: 9,\r\n example: 49152901820\r\n },\r\n postCodePattern: `^[0-9]{${5}}$`,\r\n postCodeExample: 45678\r\n },\r\n {\r\n countryName: 'Ukraine',\r\n country: IMCountryEnum.Ukraine,\r\n iso: 'UA',\r\n capital: 'Kyiv',\r\n phoneNumber: {\r\n callingCode: 380,\r\n afterCodeNumbersLength: 9,\r\n example: 380971617271\r\n },\r\n postCodePattern: `^[0-9]{${5}}$`,\r\n postCodeExample: 81616\r\n },\r\n {\r\n countryName: 'Russia',\r\n country: IMCountryEnum.Russia,\r\n iso: 'RU',\r\n capital: 'Moskva',\r\n phoneNumber: {\r\n callingCode: 7,\r\n afterCodeNumbersLength: 10,\r\n example: 79585122113\r\n },\r\n postCodePattern: `^[0-9]{${6}}$`,\r\n postCodeExample: 123345\r\n },\r\n {\r\n countryName: 'France',\r\n country: IMCountryEnum.France,\r\n iso: 'FR',\r\n capital: 'Paris',\r\n phoneNumber: {\r\n callingCode: 33,\r\n afterCodeNumbersLength: 9,\r\n example: 33564576787\r\n },\r\n postCodePattern: `^[0-9]{${5}}$`,\r\n postCodeExample: 77300\r\n },\r\n {\r\n countryName: 'United States of America',\r\n country: IMCountryEnum.USA,\r\n iso: 'US',\r\n capital: 'Washington',\r\n phoneNumber: {\r\n callingCode: 1,\r\n afterCodeNumbersLength: 10,\r\n example: 17148408242\r\n },\r\n postCodePattern: `^[0-9]{${5}}$`,\r\n postCodeExample: 99999\r\n }\r\n];\r\n","import {AbstractControl, ValidationErrors, ValidatorFn} from '@angular/forms';\r\n\r\nexport const IMEmailValidator = (scale: number = 3, fixed: boolean = false): ValidatorFn => {\r\n const scaling = fixed ? `${scale}` : `1,${scale}`;\r\n const regexp: RegExp = new RegExp(`^[a-z0-9A-Z._%+-]+@[a-z0-9A-Z-]+\\.[a-zA-Z]{${scaling}}$`);\r\n\r\n return (control: AbstractControl): ValidationErrors => {\r\n if (control.value && !regexp.test(control.value)) {\r\n return {isEmailInvalid: true};\r\n }\r\n };\r\n};\r\n","import {AbstractControl, ValidatorFn} from '@angular/forms';\r\nimport {IMCountryConfigurations} from '../constants/country-configurations.constant';\r\nimport {IMCountryConfigInterface} from '../interfaces/country-config.interface';\r\nimport {IMPhoneNumberErrorInterface} from '../interfaces/phone-number-error.interface';\r\nimport {IMCountryEnum} from '../enums/country.enum';\r\n\r\nexport const IMPhoneNumberValidator = (country: IMCountryEnum): ValidatorFn => {\r\n const config: IMCountryConfigInterface = IMCountryConfigurations.find(item => item.country === country);\r\n const regexp: RegExp = new RegExp(`^(?:${config.phoneNumber.callingCode})[0-9]{${config.phoneNumber.afterCodeNumbersLength}}$`);\r\n\r\n return (control: AbstractControl): {phoneNumberError: IMPhoneNumberErrorInterface} => {\r\n if (control.value && !regexp.test(control.value)) {\r\n return {\r\n phoneNumberError: {\r\n isInvalid: true,\r\n countryName: config.countryName\r\n }\r\n };\r\n }\r\n };\r\n};\r\n","import {AbstractControl, ValidationErrors, ValidatorFn} from '@angular/forms';\r\nimport {IMRequiredErrorInterface} from '../interfaces/required-error.interface';\r\n\r\nexport class IMRequiredValidatorConfigModel {\r\n public isTrimValueRequired?: boolean;\r\n public isZeroAllowed?: boolean;\r\n public isCheckboxShouldBeChecked?: boolean;\r\n}\r\n\r\nexport const IMRequiredValidator = (config: IMRequiredValidatorConfigModel = new IMRequiredValidatorConfigModel()): ValidatorFn => {\r\n return (control: AbstractControl): ValidationErrors => {\r\n if (control.value || control.value === 0 || control.value === false) {\r\n switch (typeof control.value) {\r\n case 'string':\r\n return config.isTrimValueRequired ? control.value.trim() ? null : {fieldRequiredError: true} : null;\r\n case 'number':\r\n return control.value === 0 && !config.isZeroAllowed ? {fieldRequiredError: true} : null;\r\n case 'boolean':\r\n return control.value === false && config.isCheckboxShouldBeChecked ? {fieldRequiredError: true} : null;\r\n default: return null;\r\n }\r\n } else {\r\n return {fieldRequiredError: true} as IMRequiredErrorInterface;\r\n }\r\n };\r\n};\r\n","export enum IMCreditCardTypeValidatorEnum {\r\n Visa,\r\n VisaElectron,\r\n AmericanExpress,\r\n ChinaUnionPay,\r\n MasterCard,\r\n Maestro,\r\n DinersClubCarteBlanche,\r\n DinersClubInternational,\r\n DinersClubUnitedStatesAndCanada,\r\n Discover,\r\n JCB,\r\n UATP,\r\n Dankort,\r\n InterPayment\r\n}\r\n","import {IMCreditCardTypeValidatorEnum} from '../../enums/credit-card-type.enum';\r\n\r\nexport interface CreditCardLengthFromToInterface {\r\n from: number;\r\n to: number;\r\n}\r\n\r\nexport const CreditCardValidatorResolver = {\r\n NumberLength: {\r\n [IMCreditCardTypeValidatorEnum.Visa]: {from: 13, to: 19},\r\n [IMCreditCardTypeValidatorEnum.VisaElectron]: 16,\r\n [IMCreditCardTypeValidatorEnum.AmericanExpress]: 15,\r\n [IMCreditCardTypeValidatorEnum.ChinaUnionPay]: {from: 16, to: 19},\r\n [IMCreditCardTypeValidatorEnum.MasterCard]: 16,\r\n [IMCreditCardTypeValidatorEnum.Maestro]: {from: 12, to: 19},\r\n [IMCreditCardTypeValidatorEnum.DinersClubCarteBlanche]: 14,\r\n [IMCreditCardTypeValidatorEnum.DinersClubInternational]: 14,\r\n [IMCreditCardTypeValidatorEnum.DinersClubUnitedStatesAndCanada]: 16,\r\n [IMCreditCardTypeValidatorEnum.Discover]: 16,\r\n [IMCreditCardTypeValidatorEnum.JCB]: 16,\r\n [IMCreditCardTypeValidatorEnum.UATP]: 15,\r\n [IMCreditCardTypeValidatorEnum.Dankort]: 16,\r\n [IMCreditCardTypeValidatorEnum.InterPayment]: {from: 16, to: 19}\r\n },\r\n IINRange: {\r\n [IMCreditCardTypeValidatorEnum.Visa]: [4],\r\n [IMCreditCardTypeValidatorEnum.VisaElectron]: [4026, 417500, 4508, 4844, 4913, 4917],\r\n [IMCreditCardTypeValidatorEnum.AmericanExpress]: [34, 37],\r\n [IMCreditCardTypeValidatorEnum.ChinaUnionPay]: [62],\r\n [IMCreditCardTypeValidatorEnum.MasterCard]: [{from: 2221, to: 2720}, {from: 51, to: 55}],\r\n [IMCreditCardTypeValidatorEnum.Maestro]: [5018, 5020, 5038, 5893, 6304, 6759, 6761, 6762, 6763],\r\n [IMCreditCardTypeValidatorEnum.DinersClubCarteBlanche]: [],\r\n [IMCreditCardTypeValidatorEnum.DinersClubInternational]: [36],\r\n [IMCreditCardTypeValidatorEnum.DinersClubUnitedStatesAndCanada]: [54],\r\n [IMCreditCardTypeValidatorEnum.Discover]: [6011, {from: 622126, to: 622925}, 644, 645, 646, 647, 648, 649, 65],\r\n [IMCreditCardTypeValidatorEnum.JCB]: [{from: 3528, to: 3589}],\r\n [IMCreditCardTypeValidatorEnum.UATP]: [1],\r\n [IMCreditCardTypeValidatorEnum.Dankort]: [5019, 4571],\r\n [IMCreditCardTypeValidatorEnum.InterPayment]: [636]\r\n }\r\n};\r\n","import {AbstractControl, ValidationErrors, ValidatorFn} from '@angular/forms';\r\nimport {IMCreditCardTypeValidatorEnum} from '../enums/credit-card-type.enum';\r\nimport {\r\n CreditCardLengthFromToInterface,\r\n CreditCardValidatorResolver\r\n} from '../helpers/credit-card-validator-helpers/credit-card-length-validator.helper';\r\nimport {IMCreditCardErrorInterface} from '../interfaces/credit-card-error.interface';\r\n\r\nexport class IMCreditCardValidatorConfigModel {\r\n creditCardType: IMCreditCardTypeValidatorEnum = IMCreditCardTypeValidatorEnum.MasterCard;\r\n}\r\n\r\nexport const IMCreditCardValidator = (config: IMCreditCardValidatorConfigModel = new IMCreditCardValidatorConfigModel()): ValidatorFn => {\r\n return (control: AbstractControl): ValidationErrors => {\r\n const creditCardNumber = control.value?.replace(/\\s/g, '');\r\n\r\n if (creditCardNumber?.length) {\r\n const creditCardNumberLength = creditCardNumber.length;\r\n const requiredCreditCardLength: number | CreditCardLengthFromToInterface =\r\n CreditCardValidatorResolver.NumberLength[config.creditCardType];\r\n\r\n const isNumberInINNRange = (): boolean => CreditCardValidatorResolver.IINRange[config.creditCardType].some(\r\n (IINRange: number | CreditCardLengthFromToInterface) => {\r\n for (let i = (IINRange as CreditCardLengthFromToInterface).from; i <= (IINRange as CreditCardLengthFromToInterface).to; i++) {\r\n if (new RegExp('^' + i, 'i').test(creditCardNumber)) {\r\n return true;\r\n }\r\n }\r\n return new RegExp('^' + IINRange, 'i').test(creditCardNumber);\r\n }\r\n );\r\n\r\n const isNumberFitToLength = (): boolean => creditCardNumberLength < requiredCreditCardLength\r\n || creditCardNumberLength > requiredCreditCardLength\r\n || (creditCardNumberLength < (requiredCreditCardLength as CreditCardLengthFromToInterface).from\r\n || creditCardNumberLength > (requiredCreditCardLength as CreditCardLengthFromToInterface).to);\r\n\r\n const isLuhnCheckPassed = (): boolean => {\r\n const arr = (creditCardNumber + '').split('').reverse().map(x => Number(x));\r\n const lastDigit = arr.splice(0, 1)[0];\r\n let sum = arr.reduce((acc, val, i) => (i % 2 !== 0 ? acc + val : acc + ((val * 2) % 9) || 9), 0);\r\n sum += lastDigit;\r\n return sum % 10 === 0;\r\n };\r\n\r\n if (!isNumberInINNRange()) {\r\n return {creditCardTypeValidationError: true} as IMCreditCardErrorInterface;\r\n } else {\r\n if (isNumberFitToLength()) {\r\n return {creditCardNumberLengthValidatorError: true} as IMCreditCardErrorInterface;\r\n } else if (!isLuhnCheckPassed()) {\r\n return {creditCardDoesNotExist: true} as IMCreditCardErrorInterface;\r\n }\r\n }\r\n }\r\n };\r\n};\r\n","export const isNumber = (value: number): boolean => {\r\n return typeof value === 'number';\r\n};\r\n","export enum IMComparatorOperatorEnum {\r\n equal = 1,\r\n greater = 2,\r\n greaterEqual = 3,\r\n less = 4,\r\n lessEqual = 5\r\n}\r\n","import {AbstractControl, ValidationErrors, ValidatorFn} from '@angular/forms';\r\nimport {isNumber} from '../helpers/is-number.helper';\r\nimport {IMComparatorOperatorEnum} from '../enums/comparator-operator.enum';\r\nimport {IMNumberComparatorValidatorConfigInterface} from '../interfaces/number-comparator-configuration.interface';\r\nimport {IMNumberComparatorErrorInterface} from '../interfaces/number-comparator-error.interface';\r\n\r\nexport const IMNumberComparatorValidator = (config: IMNumberComparatorValidatorConfigInterface): ValidatorFn => {\r\n return (control: AbstractControl): ValidationErrors => {\r\n if (config.comparingControlKey) {\r\n const comparingValue = control?.parent?.get(config.comparingControlKey)?.value;\r\n return getNumberComparatorValidationError(control.value, comparingValue, config.comparingOperator);\r\n } else {\r\n return getNumberComparatorValidationError(control.value, config.comparingValue, config.comparingOperator);\r\n }\r\n };\r\n};\r\n\r\nconst getNumberComparatorValidationError =\r\n (control_value: number, comparing_control_value: number, operator: IMComparatorOperatorEnum): ValidationErrors => {\r\n if (isNumber(control_value) && isNumber(comparing_control_value) &&\r\n operatorCheckResolver[operator](control_value, comparing_control_value)) {\r\n return {\r\n numberComparatorError: {\r\n isInvalid: true,\r\n operator,\r\n comparingValue: comparing_control_value\r\n } as IMNumberComparatorErrorInterface\r\n };\r\n }\r\n};\r\n\r\nconst operatorCheckResolver = {\r\n [IMComparatorOperatorEnum.equal]: (value: number, comparing_value: number) => value !== comparing_value,\r\n [IMComparatorOperatorEnum.greater]: (value: number, comparing_value: number) => value <= comparing_value,\r\n [IMComparatorOperatorEnum.greaterEqual]: (value: number, comparing_value: number) => value < comparing_value,\r\n [IMComparatorOperatorEnum.less]: (value: number, comparing_value: number) => value >= comparing_value,\r\n [IMComparatorOperatorEnum.lessEqual]: (value: number, comparing_value: number) => value > comparing_value\r\n};\r\n","export const IMWorkingDateFormat = 'DD.MM.YYYY';\r\n","import {AbstractControl, ValidationErrors, ValidatorFn} from '@angular/forms';\r\nimport {IMComparatorOperatorEnum} from '../enums/comparator-operator.enum';\r\nimport {IMDateComparatorValidatorConfigInterface} from '../interfaces/date-comparator-configuration.interface';\r\nimport {IMDateComparatorErrorInterface} from '../interfaces/date-comparator-error.interface';\r\nimport {Moment} from 'moment';\r\nimport {IMWorkingDateFormat} from '../constants/general.constant';\r\n\r\nexport const IMDateComparatorValidator = (config: IMDateComparatorValidatorConfigInterface): ValidatorFn => {\r\n return (control: AbstractControl): ValidationErrors => {\r\n if (config.comparingControlKey) {\r\n const comparingValue = control?.parent?.get(config.comparingControlKey)?.value;\r\n return getDateComparatorValidationError(control.value, comparingValue, config.comparingOperator);\r\n } else {\r\n return getDateComparatorValidationError(control.value, config.comparingValue, config.comparingOperator);\r\n }\r\n };\r\n};\r\n\r\nconst getDateComparatorValidationError =\r\n (control_value: Moment, comparing_control_value: Moment, operator: IMComparatorOperatorEnum): ValidationErrors => {\r\n if (control_value && comparing_control_value) {\r\n if (operatorCheckResolver[operator](control_value, comparing_control_value)) {\r\n return {\r\n dateComparatorError: {\r\n isInvalid: true,\r\n operator,\r\n comparingValue: comparing_control_value.format(IMWorkingDateFormat)\r\n } as IMDateComparatorErrorInterface\r\n };\r\n }\r\n }\r\n };\r\n\r\nconst operatorCheckResolver = {\r\n [IMComparatorOperatorEnum.equal]: (value: Moment, comparing_value: Moment) => {\r\n return !value.isSame(comparing_value);\r\n },\r\n [IMComparatorOperatorEnum.greater]: (value: Moment, comparing_value: Moment) => {\r\n return !value.isAfter(comparing_value);\r\n },\r\n [IMComparatorOperatorEnum.greaterEqual]: (value: Moment, comparing_value: Moment) => {\r\n return !value.isSame(comparing_value) && !value.isAfter(comparing_value);\r\n },\r\n [IMComparatorOperatorEnum.less]: (value: Moment, comparing_value: Moment) => {\r\n return !value.isBefore(comparing_value);\r\n },\r\n [IMComparatorOperatorEnum.lessEqual]: (value: Moment, comparing_value: Moment) => {\r\n return !value.isSame(comparing_value) && !value.isBefore(comparing_value);\r\n }\r\n};\r\n","import {AbstractControl, ValidationErrors, ValidatorFn} from '@angular/forms';\r\nimport {IMComparatorOperatorEnum} from '../enums/comparator-operator.enum';\r\nimport {IMTimeComparatorValidatorConfigInterface} from '../interfaces/time-comparator-configuration.interface';\r\nimport {Moment} from 'moment';\r\nimport * as moment from 'moment';\r\nimport {IMTimeComparatorErrorInterface} from '../interfaces/time-comparator-error.interface';\r\n\r\nexport const IMTimeComparatorValidator = (config: IMTimeComparatorValidatorConfigInterface): ValidatorFn => {\r\n return (control: AbstractControl): ValidationErrors => {\r\n if (config.comparingControlKey) {\r\n const comparingValue = control?.parent?.get(config.comparingControlKey)?.value;\r\n return getTimeComparatorValidationError(control.value, comparingValue, config.comparingOperator);\r\n } else {\r\n return getTimeComparatorValidationError(control.value, config.comparingValue, config.comparingOperator);\r\n }\r\n };\r\n};\r\n\r\nconst getTimeComparatorValidationError =\r\n (control_value: string, comparing_control_value: string, operator: IMComparatorOperatorEnum): ValidationErrors => {\r\n if (control_value && comparing_control_value) {\r\n const timeFormatControlValue = moment(control_value, 'HH:mm');\r\n const timeFormatComparingControlValue = moment(comparing_control_value, 'HH:mm');\r\n\r\n if (operatorCheckResolver[operator](timeFormatControlValue, timeFormatComparingControlValue)) {\r\n return {\r\n timeComparatorError: {\r\n isInvalid: true,\r\n operator,\r\n comparingValue: comparing_control_value\r\n } as IMTimeComparatorErrorInterface\r\n };\r\n }\r\n }\r\n };\r\n\r\nconst operatorCheckResolver = {\r\n [IMComparatorOperatorEnum.equal]: (value: Moment, comparing_value: Moment) => {\r\n return !value.isSame(comparing_value);\r\n },\r\n [IMComparatorOperatorEnum.greater]: (value: Moment, comparing_value: Moment) => {\r\n return !value.isAfter(comparing_value);\r\n },\r\n [IMComparatorOperatorEnum.greaterEqual]: (value: Moment, comparing_value: Moment) => {\r\n return !value.isSame(comparing_value) && !value.isAfter(comparing_value);\r\n },\r\n [IMComparatorOperatorEnum.less]: (value: Moment, comparing_value: Moment) => {\r\n return !value.isBefore(comparing_value);\r\n },\r\n [IMComparatorOperatorEnum.lessEqual]: (value: Moment, comparing_value: Moment) => {\r\n return !value.isSame(comparing_value) && !value.isBefore(comparing_value);\r\n }\r\n};\r\n","import {AbstractControl, ValidatorFn} from '@angular/forms';\r\nimport {isNumber} from '../helpers/is-number.helper';\r\nimport {IMNumberInRangeErrorInterface} from '../interfaces/number-in-range-error.interface';\r\n\r\nexport const IMNumberInRangeValidator = (from: number, to: number): ValidatorFn => {\r\n return (control: AbstractControl): {numberInRange: IMNumberInRangeErrorInterface} => {\r\n const error: IMNumberInRangeErrorInterface = {isInvalid: true, from, to};\r\n\r\n if (isNumber(from) && isNumber(to) && isNumber(control.value)) {\r\n if (from > control.value || to < control.value) {\r\n return {numberInRange: error};\r\n }\r\n }\r\n };\r\n};\r\n","import {AbstractControl, ValidatorFn} from '@angular/forms';\r\nimport {Moment} from 'moment';\r\nimport {IMDateInRangeErrorInterface} from '../interfaces/date-in-range-error.interface';\r\nimport {IMWorkingDateFormat} from '../constants/general.constant';\r\n\r\nexport const IMDateInRangeValidator = (from: Moment, to: Moment): ValidatorFn => {\r\n return (control: AbstractControl): {dateInRange: IMDateInRangeErrorInterface} => {\r\n const error: IMDateInRangeErrorInterface = {\r\n isInvalid: true,\r\n from: from?.format(IMWorkingDateFormat),\r\n to: to?.format(IMWorkingDateFormat)\r\n };\r\n\r\n if (from && to && control.value) {\r\n if (from.isAfter(control.value) || to.isBefore(control.value)) {\r\n return {dateInRange: error};\r\n }\r\n }\r\n };\r\n};\r\n","import {AbstractControl, ValidatorFn} from '@angular/forms';\r\nimport {IMCountryConfigurations} from '../constants/country-configurations.constant';\r\nimport {IMCountryConfigInterface} from '../interfaces/country-config.interface';\r\nimport {IMPostCodeErrorInterface} from '../interfaces/post-code-error.interface';\r\nimport {IMCountryEnum} from '../enums/country.enum';\r\n\r\nexport const IMPostCodeValidator = (country: IMCountryEnum): ValidatorFn => {\r\n const config: IMCountryConfigInterface = IMCountryConfigurations.find(item => item.country === country);\r\n const regexp: RegExp = new RegExp(config.postCodePattern);\r\n\r\n return (control: AbstractControl): {postCodeError: IMPostCodeErrorInterface} => {\r\n if (control.value && !regexp.test(control.value)) {\r\n return {\r\n postCodeError: {\r\n isInvalid: true,\r\n countryName: config.countryName\r\n }\r\n };\r\n }\r\n };\r\n};\r\n","export enum IMPasswordOperatorEnum {\r\n minLength,\r\n minNumberQuantity,\r\n minCapitalLettersQuantity,\r\n minSmallLettersQuantity,\r\n minSpecialCharactersQuantity\r\n}\r\n","import {AbstractControl, ValidationErrors, ValidatorFn} from '@angular/forms';\r\nimport {IMPasswordOperatorEnum} from '../enums/password-operator.enum';\r\nimport {IMPasswordErrorInterface} from '../interfaces/password-error.interface';\r\n\r\nexport class IMPasswordValidatorConfigModel {\r\n public minLength: number;\r\n public minNumberQuantity?: number;\r\n public minCapitalLettersQuantity?: number;\r\n public minSmallLettersQuantity?: number;\r\n public minSpecialCharactersQuantity?: number;\r\n}\r\n\r\nexport const IMPasswordValidator = (config: IMPasswordValidatorConfigModel = new IMPasswordValidatorConfigModel()): ValidatorFn => {\r\n return (control: AbstractControl): ValidationErrors => {\r\n if (control.value) {\r\n const operator = passwordValidatorErrorResolver(control.value, config);\r\n\r\n if (!!operator) {\r\n return {\r\n passwordValidatorError: {\r\n isInvalid: true,\r\n operator: IMPasswordOperatorEnum[operator],\r\n comparingValue: config[operator]\r\n } as IMPasswordErrorInterface\r\n };\r\n }\r\n }\r\n };\r\n};\r\n\r\nconst passwordValidatorErrorResolver = (control_value: string, configs: IMPasswordValidatorConfigModel): string => {\r\n return Object.keys(configs).find(key => configs[key] && operatorCheckResolver[IMPasswordOperatorEnum[key]](control_value, configs[key]));\r\n};\r\n\r\nconst operatorCheckResolver = {\r\n [IMPasswordOperatorEnum.minLength]: (value: string, required_password_length: number) =>\r\n value.length < required_password_length,\r\n [IMPasswordOperatorEnum.minNumberQuantity]: (value: string, required_numbers_quantity: number) =>\r\n (value.match(/[0-9]/g)?.length || 0) < required_numbers_quantity,\r\n [IMPasswordOperatorEnum.minCapitalLettersQuantity]: (value: string, required_cap_letters_quantity) =>\r\n (value.match(/[A-Z]/g)?.length || 0) < required_cap_letters_quantity,\r\n [IMPasswordOperatorEnum.minSmallLettersQuantity]: (value: string, required_small_letters_quantity) =>\r\n (value.match(/[a-z]/g)?.length || 0) < required_small_letters_quantity,\r\n [IMPasswordOperatorEnum.minSpecialCharactersQuantity]: (value: string, required_special_char_quantity) =>\r\n (value.match(/[!@#$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>\\/?]/g)?.length || 0) < required_special_char_quantity\r\n};\r\n","import {AbstractControl, ValidatorFn} from '@angular/forms';\r\nimport {IMNumberDecimalPlacesErrorInterface} from '../interfaces/number-decimal-places-error.interface';\r\n\r\nexport const IMNumberDecimalPlacesValidator = (scale: number = 0, fixed: boolean = false): ValidatorFn => {\r\n return (control: AbstractControl): {areDecimalPlacesInvalid: IMNumberDecimalPlacesErrorInterface} => {\r\n const scaling = fixed ? `${scale}` : `0,${scale}`;\r\n const regexp: RegExp = new RegExp(`^-?([0-9]*[.]?)?[0-9]{${scaling}}$`);\r\n\r\n if (control.value && !regexp.test(control.value)) {\r\n return {\r\n areDecimalPlacesInvalid: {\r\n isInvalid: true,\r\n scale,\r\n fixed\r\n } as IMNumberDecimalPlacesErrorInterface\r\n };\r\n }\r\n };\r\n};\r\n","export enum IMUrlProtocolTypeEnum {\r\n Any,\r\n NoProtocol,\r\n Http,\r\n Https,\r\n Ftp\r\n}\r\n","import {AbstractControl, ValidationErrors, ValidatorFn} from '@angular/forms';\r\nimport {IMUrlProtocolTypeEnum} from '../enums/url-protocol.enum';\r\nimport {IMUrlErrorInterface} from '../interfaces/url-error.interface';\r\n\r\nexport class IMUrlValidatorConfigModel {\r\n public protocolType: IMUrlProtocolTypeEnum = IMUrlProtocolTypeEnum.Any;\r\n}\r\n\r\nexport const IMUrlValidator = (config: IMUrlValidatorConfigModel = new IMUrlValidatorConfigModel()): ValidatorFn => {\r\n return (control: AbstractControl): ValidationErrors => {\r\n if (control.value && !urlCheckResolver[config.protocolType](control.value)) {\r\n return {\r\n urlValidationError: {\r\n isInvalid: true,\r\n protocolType: config.protocolType\r\n } as IMUrlErrorInterface\r\n };\r\n }\r\n };\r\n};\r\n\r\nconst urlCheckResolver = {\r\n [IMUrlProtocolTypeEnum.Any]: (value: string) =>\r\n new RegExp(`^(?:(?:http(s)?:\\\\/\\\\/)|(?:ftp(s)?:\\\\/\\\\/))?[\\\\w.-]+(?:\\\\.[\\\\w.-]+)+[\\\\w\\\\-._~:/?#[\\\\]@!$&'()*+,;=]+$`).test(value),\r\n [IMUrlProtocolTypeEnum.NoProtocol]: (value: string) => new RegExp(`^www.`).test(value),\r\n [IMUrlProtocolTypeEnum.Http]: (value: string) => new RegExp(`^http://`).test(value),\r\n [IMUrlProtocolTypeEnum.Https]: (value: string) => new RegExp(`^https://`).test(value),\r\n [IMUrlProtocolTypeEnum.Ftp]: (value: string) => new RegExp(`^ftp://`).test(value)\r\n};\r\n","import {AbstractControl, ValidationErrors, ValidatorFn} from '@angular/forms';\r\n\r\nexport const IMJSONValidator = (): ValidatorFn => {\r\n return (control: AbstractControl): ValidationErrors => {\r\n if (control.value && !isJSON(control.value)) {\r\n return {isJSONInvalid: true};\r\n }\r\n };\r\n};\r\n\r\nconst isJSON = (str: string): boolean => {\r\n try {\r\n JSON.parse(str);\r\n return true;\r\n } catch (e) {\r\n return false;\r\n }\r\n};\r\n","import {AbstractControl, ValidationErrors} from '@angular/forms';\r\n\r\nexport const IMUUIdValidator = () => {\r\n return (control: AbstractControl): ValidationErrors => {\r\n if (control.value || control.value === 0) {\r\n if (typeof control.value === 'string') {\r\n return new RegExp(/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i)\r\n .test(control.value) ? null : {isUUIdInvalid: true};\r\n } else {\r\n return {isUUIdInvalid: true};\r\n }\r\n }\r\n };\r\n};\r\n","// General exports\r\nexport {IMCountryConfigurations} from './lib/constants/country-configurations.constant';\r\nexport {IMCountryEnum} from './lib/enums/country.enum';\r\nexport {IMCountryConfigInterface} from './lib/interfaces/country-config.interface';\r\nexport {IMCountryPhoneNumberConfigInterface} from './lib/interfaces/country-config.interface';\r\n\r\n// Email validator exports\r\nexport {IMEmailValidator} from './lib/validators/email.validator';\r\n\r\n// Phone number validator exports\r\nexport {IMPhoneNumberValidator} from './lib/validators/phone-number.validator';\r\nexport {IMPhoneNumberErrorInterface} from './lib/interfaces/phone-number-error.interface';\r\n\r\n// Required validator exports\r\nexport {IMRequiredValidator} from './lib/validators/required.validator';\r\nexport {IMRequiredErrorInterface} from './lib/interfaces/required-error.interface';\r\n\r\n// Credit card validator exports\r\nexport {IMCreditCardValidator} from './lib/validators/credit-card.validator';\r\nexport {IMCreditCardTypeValidatorEnum} from './lib/enums/credit-card-type.enum';\r\nexport {IMCreditCardErrorInterface} from './lib/interfaces/credit-card-error.interface';\r\nexport {CreditCardValidatorResolver} from './lib/helpers/credit-card-validator-helpers/credit-card-length-validator.helper';\r\n\r\n// Number-comparator validator exports\r\nexport {IMNumberComparatorValidator} from './lib/validators/number-comparator.validator';\r\nexport {IMComparatorOperatorEnum} from './lib/enums/comparator-operator.enum';\r\nexport {IMNumberComparatorValidatorConfigInterface} from './lib/interfaces/number-comparator-configuration.interface';\r\nexport {IMNumberComparatorErrorInterface} from './lib/interfaces/number-comparator-error.interface';\r\n\r\n// Date-comparator validator exports\r\nexport {IMDateComparatorValidator} from './lib/validators/date-comparator.validator';\r\nexport {IMDateComparatorValidatorConfigInterface} from './lib/interfaces/date-comparator-configuration.interface';\r\nexport {IMDateComparatorErrorInterface} from './lib/interfaces/date-comparator-error.interface';\r\n\r\n// Time-comparator validator exports\r\nexport {IMTimeComparatorValidator} from './lib/validators/time-comparator.validator';\r\nexport {IMTimeComparatorValidatorConfigInterface} from './lib/interfaces/time-comparator-configuration.interface';\r\nexport {IMTimeComparatorErrorInterface} from './lib/interfaces/time-comparator-error.interface';\r\n\r\n// Number-in-range validator exports\r\nexport {IMNumberInRangeValidator} from './lib/validators/number-in-range.validator';\r\nexport {IMNumberInRangeErrorInterface} from './lib/interfaces/number-in-range-error.interface';\r\n\r\n// Date-in-range validator exports\r\nexport {IMDateInRangeValidator} from './lib/validators/date-in-range.validator';\r\nexport {IMDateInRangeErrorInterface} from './lib/interfaces/date-in-range-error.interface';\r\n\r\n// Phone number validator exports\r\nexport {IMPostCodeValidator} from './lib/validators/post-code.validator';\r\nexport {IMPostCodeErrorInterface} from './lib/interfaces/post-code-error.interface';\r\n\r\n// Password validator exports\r\nexport {IMPasswordValidator} from './lib/validators/password.validator';\r\nexport {IMPasswordValidatorConfigModel} from './lib/validators/password.validator';\r\nexport {IMPasswordErrorInterface} from './lib/interfaces/password-error.interface';\r\nexport {IMPasswordOperatorEnum} from './lib/enums/password-operator.enum';\r\n\r\n// Decimal places validator exports\r\nexport {IMNumberDecimalPlacesValidator} from './lib/validators/number-decimal-places.validator';\r\nexport {IMNumberDecimalPlacesErrorInterface} from './lib/interfaces/number-decimal-places-error.interface';\r\n\r\n// Url validator exports\r\nexport {IMUrlValidator} from './lib/validators/url.validator';\r\nexport {IMUrlValidatorConfigModel} from './lib/validators/url.validator';\r\nexport {IMUrlErrorInterface} from './lib/interfaces/url-error.interface';\r\nexport {IMUrlProtocolTypeEnum} from './lib/enums/url-protocol.enum';\r\n\r\n// JSON validator exports\r\nexport {IMJSONValidator} from './lib/validators/json.validator';\r\n\r\n// UUId validator exports\r\nexport {IMUUIdValidator} from './lib/validators/uuid.validator';\r\nexport {IMUUIdErrorInterface} from './lib/interfaces/uuid-error.interface';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["operatorCheckResolver"],"mappings":"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