{"version":3,"file":"fireflysemantics-validatorts.mjs","sources":["../../../projects/fs-validatorts/src/lib/utilities/url/urlFragment.ts","../../../projects/fs-validatorts/src/lib/types/Result.ts","../../../projects/fs-validatorts/src/lib/types/TypesEnum.ts","../../../projects/fs-validatorts/src/lib/validators/isString.ts","../../../projects/fs-validatorts/src/lib/validators/hasLowerCaseCharacters.ts","../../../projects/fs-validatorts/src/lib/validators/hasUpperCaseCharacters.ts","../../../projects/fs-validatorts/src/lib/validators/hasSpecialCharacters.ts","../../../projects/fs-validatorts/src/lib/validators/hasNumericCharacters.ts","../../../projects/fs-validatorts/src/lib/validators/isBoolean.ts","../../../projects/fs-validatorts/src/lib/validators/isDate.ts","../../../projects/fs-validatorts/src/lib/validators/isSameInstant.ts","../../../projects/fs-validatorts/src/lib/validators/isDefined.ts","../../../projects/fs-validatorts/src/lib/validators/isArray.ts","../../../projects/fs-validatorts/src/lib/validators/isObject.ts","../../../projects/fs-validatorts/src/lib/validators/isInObjectValues.ts","../../../projects/fs-validatorts/src/lib/validators/isInObjectKeys.ts","../../../projects/fs-validatorts/src/lib/validators/isInArray.ts","../../../projects/fs-validatorts/src/lib/validators/contains.ts","../../../projects/fs-validatorts/src/lib/validators/isNotSuperString.ts","../../../projects/fs-validatorts/src/lib/validators/isSuperString.ts","../../../projects/fs-validatorts/src/lib/validators/isSubString.ts","../../../projects/fs-validatorts/src/lib/validators/isNumber.ts","../../../projects/fs-validatorts/src/lib/validators/isNotEmpty.ts","../../../projects/fs-validatorts/src/lib/validators/isNotSubString.ts","../../../projects/fs-validatorts/src/lib/validators/isNotEqualTo.ts","../../../projects/fs-validatorts/src/lib/validators/isNegative.ts","../../../projects/fs-validatorts/src/lib/validators/isLessThanFinite.ts","../../../projects/fs-validatorts/src/lib/validators/matches.ts","../../../projects/fs-validatorts/src/lib/validators/isMatch.ts","../../../projects/fs-validatorts/src/lib/validators/isMilitaryTime.ts","../../../projects/fs-validatorts/src/lib/validators/isInstanceOf.ts","../../../projects/fs-validatorts/src/lib/validators/isInRange.ts","../../../projects/fs-validatorts/src/lib/validators/isArraySizeGreaterThan.ts","../../../projects/fs-validatorts/src/lib/validators/isArraySizeLessThan.ts","../../../projects/fs-validatorts/src/lib/validators/isArrayUnique.ts","../../../projects/fs-validatorts/src/lib/validators/alpha.ts","../../../projects/fs-validatorts/src/lib/validators/isEqualTo.ts","../../../projects/fs-validatorts/src/lib/sanitizers/escape.ts","../../../projects/fs-validatorts/src/lib/validators/isAfter.ts","../../../projects/fs-validatorts/src/lib/validators/isAlpha.ts","../../../projects/fs-validatorts/src/lib/validators/isAlphaNumeric.ts","../../../projects/fs-validatorts/src/lib/validators/isArrayContainerOf.ts","../../../projects/fs-validatorts/src/lib/validators/isArrayEmpty.ts","../../../projects/fs-validatorts/src/lib/validators/isAscii.ts","../../../projects/fs-validatorts/src/lib/validators/isBase32.ts","../../../projects/fs-validatorts/src/lib/utilities/merge.ts","../../../projects/fs-validatorts/src/lib/validators/isBase64.ts","../../../projects/fs-validatorts/src/lib/validators/isBefore.ts","../../../projects/fs-validatorts/src/lib/validators/isBIC.ts","../../../projects/fs-validatorts/src/lib/validators/isBooleanString.ts","../../../projects/fs-validatorts/src/lib/validators/isBtcAddress.ts","../../../projects/fs-validatorts/src/lib/validators/isNonNegativeFinite.ts","../../../projects/fs-validatorts/src/lib/validators/isByteLength.ts","../../../projects/fs-validatorts/src/lib/validators/isCreditCard.ts","../../../projects/fs-validatorts/src/lib/validators/isCurrency.ts","../../../projects/fs-validatorts/src/lib/validators/isDataURI.ts","../../../projects/fs-validatorts/src/lib/utilities/includes.ts","../../../projects/fs-validatorts/src/lib/validators/isDecimal.ts","../../../projects/fs-validatorts/src/lib/validators/isDivisibleBy.ts","../../../projects/fs-validatorts/src/lib/validators/isEAN.ts","../../../projects/fs-validatorts/src/lib/validators/isFQDN.ts","../../../projects/fs-validatorts/src/lib/validators/isIP.ts","../../../projects/fs-validatorts/src/lib/validators/isEmail.ts","../../../projects/fs-validatorts/src/lib/validators/isEmpty.ts","../../../projects/fs-validatorts/src/lib/validators/isEthereumAddress.ts","../../../projects/fs-validatorts/src/lib/validators/isFloat.ts","../../../projects/fs-validatorts/src/lib/validators/isFullWidth.ts","../../../projects/fs-validatorts/src/lib/validators/isHalfWidth.ts","../../../projects/fs-validatorts/src/lib/validators/isHash.ts","../../../projects/fs-validatorts/src/lib/validators/isHexadecimal.ts","../../../projects/fs-validatorts/src/lib/validators/isHexColor.ts","../../../projects/fs-validatorts/src/lib/validators/isHSL.ts","../../../projects/fs-validatorts/src/lib/validators/isIBAN.ts","../../../projects/fs-validatorts/src/lib/validators/isIntString.ts","../../../projects/fs-validatorts/src/lib/validators/isInt.ts","../../../projects/fs-validatorts/src/lib/validators/isISBN.ts","../../../projects/fs-validatorts/src/lib/validators/isISIN.ts","../../../projects/fs-validatorts/src/lib/validators/isISO8601.ts","../../../projects/fs-validatorts/src/lib/validators/isISO31661Alpha2.ts","../../../projects/fs-validatorts/src/lib/validators/isISO31661Alpha3.ts","../../../projects/fs-validatorts/src/lib/validators/isISRC.ts","../../../projects/fs-validatorts/src/lib/validators/isISSN.ts","../../../projects/fs-validatorts/src/lib/validators/isJSON.ts","../../../projects/fs-validatorts/src/lib/validators/isJWT.ts","../../../projects/fs-validatorts/src/lib/validators/isLatLong.ts","../../../projects/fs-validatorts/src/lib/validators/isLength.ts","../../../projects/fs-validatorts/src/lib/validators/isLocale.ts","../../../projects/fs-validatorts/src/lib/validators/isLowercase.ts","../../../projects/fs-validatorts/src/lib/validators/isMACAddress.ts","../../../projects/fs-validatorts/src/lib/validators/isMagnetURI.ts","../../../projects/fs-validatorts/src/lib/validators/isMD5.ts","../../../projects/fs-validatorts/src/lib/validators/isMimeType.ts","../../../projects/fs-validatorts/src/lib/validators/isMobilePhone.ts","../../../projects/fs-validatorts/src/lib/validators/isMongoId.ts","../../../projects/fs-validatorts/src/lib/validators/isMultibyte.ts","../../../projects/fs-validatorts/src/lib/validators/isNumeric.ts","../../../projects/fs-validatorts/src/lib/validators/isOctal.ts","../../../projects/fs-validatorts/src/lib/validators/isPassportNumber.ts","../../../projects/fs-validatorts/src/lib/validators/isPort.ts","../../../projects/fs-validatorts/src/lib/validators/isPostalCode.ts","../../../projects/fs-validatorts/src/lib/validators/isRFC3339.ts","../../../projects/fs-validatorts/src/lib/validators/isRgbColor.ts","../../../projects/fs-validatorts/src/lib/utilities/multilineRegex.ts","../../../projects/fs-validatorts/src/lib/validators/isSemVer.ts","../../../projects/fs-validatorts/src/lib/validators/isSlug.ts","../../../projects/fs-validatorts/src/lib/validators/isSurrogatePair.ts","../../../projects/fs-validatorts/src/lib/validators/isUppercase.ts","../../../projects/fs-validatorts/src/lib/validators/isURL.ts","../../../projects/fs-validatorts/src/lib/validators/isURLFragmentContained.ts","../../../projects/fs-validatorts/src/lib/validators/isURLPathContained.ts","../../../projects/fs-validatorts/src/lib/validators/isURLPathEqual.ts","../../../projects/fs-validatorts/src/lib/validators/isURLFragmentEqual.ts","../../../projects/fs-validatorts/src/lib/validators/isUUID.ts","../../../projects/fs-validatorts/src/lib/validators/isVariableWidth.ts","../../../projects/fs-validatorts/src/lib/validators/isWhitelisted.ts","../../../projects/fs-validatorts/src/lib/sanitizers/blacklist.ts","../../../projects/fs-validatorts/src/lib/sanitizers/ltrim.ts","../../../projects/fs-validatorts/src/lib/sanitizers/rtrim.ts","../../../projects/fs-validatorts/src/lib/sanitizers/stripLow.ts","../../../projects/fs-validatorts/src/lib/sanitizers/toBoolean.ts","../../../projects/fs-validatorts/src/lib/sanitizers/toDate.ts","../../../projects/fs-validatorts/src/lib/sanitizers/toFloat.ts","../../../projects/fs-validatorts/src/lib/sanitizers/toInt.ts","../../../projects/fs-validatorts/src/lib/sanitizers/trim.ts","../../../projects/fs-validatorts/src/lib/sanitizers/unescape.ts","../../../projects/fs-validatorts/src/lib/sanitizers/whitelist.ts","../../../projects/fs-validatorts/src/lib/validators/isPositiveFinite.ts","../../../projects/fs-validatorts/src/lib/validators/isPositiveFiniteInteger.ts","../../../projects/fs-validatorts/src/lib/validators/isFiniteNumber.ts","../../../projects/fs-validatorts/src/lib/validators/isFiniteInteger.ts","../../../projects/fs-validatorts/src/lib/validators/isGreaterThanFinite.ts","../../../projects/fs-validatorts/src/public-api.ts","../../../projects/fs-validatorts/src/fireflysemantics-validatorts.ts"],"sourcesContent":["/**\n * Extract the url fragment from the URL.\n *\n * @param url The URL to extract the fragment from\n */\n export function urlFragment(url: string): string {\n    const hash = new URL(url).hash;\n    if (hash) {\n      return new URL(url).hash.substring(1);\n    }\n    return hash;\n}","import { MessageFunctionType } from \"./MessageFunctionType\";\n\n/**\n * The result of the calls.\n */\nexport class Result<E> {\n    public message?:string\n    constructor(\n        public value: E | undefined,\n        public error?: MessageFunctionType,\n        public parameters?: string[]\n    ) { \n        if (error) {\n            this.message = this.error!(parameters)\n        }\n    }\n}","export enum Types {\n    NUMBER = 'number',\n    BOOLEAN = 'boolean'\n  }\n  \n  ","import { Result } from \"../types\";\n\n/**\n * Checks if argument is a real string.\n *    \n * ### Example\n * ```\n * expect(isString('foo').value).toBeTruthy()\n * ```\n * @param value The value being checked.\n * \n */\n export function isString(value: any): Result<boolean | undefined> {\n    return new Result(value instanceof String || typeof value === \"string\");\n}","import { MessageFunctionType, Result } from '../types';\nimport { isString } from './isString';\n\nexport interface HasLowerCaseCharactersErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const HAS_LOWERCASE_CHARACTERS_ERRORS: HasLowerCaseCharactersErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\n/**\n * Check if at least min lowercase \n * characters appear \n * anywhere in the string`target`\n *   \n * ### Example\n * ```\n * expect(hasNumericCharacters('a2', 2).value).toBeFalsy()\n * expect(hasNumericCharacters('a2a2', 2).value).toBeTruthy()\n * ```\n * @param target The target\n */\nexport function hasLowerCaseCharacters(target:string, min:number):Result<boolean|undefined>  {\n  const regex: RegExp = new RegExp(`([a-z].*){${min},}`);\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      HAS_LOWERCASE_CHARACTERS_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  //===========================================\n  // Strip the non lowercase characters \n  //===========================================\n  const result = target.replace(/[^a-z]+/g, \"\").length >= min\n  return new Result(result);\n}","import { MessageFunctionType, Result } from '../types';\nimport { isString } from './isString';\n\nexport interface HasUpperCaseCharactersErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const HAS_UPPERCASE_CHARACTERS_ERRORS: HasUpperCaseCharactersErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\n/**\n * Check if at least min uppercase\n * characters appear\n * anywhere in the string`target`\n *   \n * ### Example\n * ```\n * expect(hasNumericCharacters('a2', 2).value).toBeFalsy()\n * expect(hasNumericCharacters('A2B2', 2).value).toBeTruthy()\n * ```\n * @param target The target\n */\nexport function hasUpperCaseCharacters(target:string, min:number):Result<boolean|undefined>  {\n  const regex: RegExp = new RegExp(`([A-Z].*){${min},}`);\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      HAS_UPPERCASE_CHARACTERS_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  return new Result((regex.test(target)));\n}","import { MessageFunctionType, Result } from '../types';\nimport { isString } from './isString';\n\nexport interface HasSpecialCharactersErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const HAS_SPECIAL_CHARACTERS_ERRORS: HasSpecialCharactersErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\n/**\n * Check if at least min special\n * characters appear anywhere in \n * the string`target`\n *   \n * ### Example\n * ```\n * expect(hasNumericCharacters('a2', 2).value).toBeFalsy()\n * expect(hasNumericCharacters('#a2a2@', 2).value).toBeTruthy()\n * ```\n * @param target The target\n */\nexport function hasSpecialCharacters(target:string, min:number):Result<boolean|undefined>  {\n//  const regex: RegExp = new RegExp(`([a-z].*){${min},}`);\n\nconst regex = RegExp(`([#*.!@$%^&(){}[\\\\]:;<>,.?/~_+\\\\-=|\\\\\\\\].*){${min},}`);\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      HAS_SPECIAL_CHARACTERS_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  return new Result((regex.test(target)));\n}","import { MessageFunctionType, Result } from '../types';\nimport { isString } from './isString';\n\nexport interface HasNumericCharactersErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const HAS_NUMERIC_CHARACTERS_ERRORS: HasNumericCharactersErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\n\n/**\n * Check if at least min digit characters \n * appear anywhere in the string`target`\n *   \n * ### Example\n * ```\n * expect(hasNumericCharacters('a2', 2).value).toBeFalsy()\n * expect(hasNumericCharacters('a2a2', 2).value).toBeTruthy()\n * ```\n * @param target The target\n */\nexport function hasNumericCharacters(target:string, min:number):Result<boolean|undefined>  {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      HAS_NUMERIC_CHARACTERS_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  //===========================================\n  // Strip the non numeric characters \n  //===========================================\n  const stripped = target.replace(/\\D+/g, \"\")\n  return stripped.length >= min ? new Result(true) : new Result(false) \n}","import { Result } from '../types';\n\n/**\n * Checks if the argument is a real boolean.\n * @param value The value being checked.\n */\n export function isBoolean(value: any): Result<boolean|undefined> {\n    return new Result(value instanceof Boolean || typeof value === \"boolean\");\n}","import { Result } from \"../types\";\n\n/**\n * Tests if argument is date.\n * \n * ### Example\n * ```\n * expect(isDate(new Date(0)).value).toBeTruthy()\n * ```\n * @param value The date being checked.\n * \n */\n export function isDate(value: any): Result<boolean> {\n    return new Result(value instanceof Date && !isNaN(value.getTime()));\n}","import { isDate } from './isDate';\nimport { MessageFunctionType, Result } from '../types';\n\nexport interface IsSameInstantErrors {\n  VALUE_ARGUMENT_NOT_A_DATE: MessageFunctionType;\n  TARGET_ARGUMENT_NOT_A_DATE: MessageFunctionType;\n}\n\nexport const IS_SAME_INSTANT_ERRORS: IsSameInstantErrors =\n{\n  VALUE_ARGUMENT_NOT_A_DATE: (arr?: string[]) => {\n    return `The value argument ${arr![0]} is not a date.`;\n  },\n  TARGET_ARGUMENT_NOT_A_DATE: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a date.`;\n  }\n};\n\n/**\n * Checks if the value is a date occurs at the exact same time\n * as the target date.\n *    \n * ### Example\n * ```\n * expect(isSameInstant(new Date(0), new Date(0)).value).toBeTruthy()\n * ```\n * \n * @param value The value being checked.\n * @param target The target value to perform the check against.\n */\n export function isSameInstant(value: Date, target: Date): Result<boolean | undefined > {\n    if (!isDate(value).value) {\n        return new Result(\n          undefined, \n          IS_SAME_INSTANT_ERRORS.VALUE_ARGUMENT_NOT_A_DATE, \n          [ value ? value.toString() : '' ])\n      }\n      if (!isDate(target).value) {\n        return new Result(\n          undefined, \n          IS_SAME_INSTANT_ERRORS.TARGET_ARGUMENT_NOT_A_DATE, \n          [target ? target.toString() : ''])\n      }\n    return new Result(value && value.getTime() === target.getTime());\n  }","import { Result } from \"../types\";\n\n/**\n *    \n * ### Example\n * ```\n * expect(isDefined('hello').value).toBeTruthy()\n * ```\n * @param value The value being checked.\n *\n * See https://stackoverflow.com/questions/51003292/exporting-utility-functions-in-typescript/51004236#51004236\n * for an implementation reference.\n */\n export function isDefined(value: any): Result<boolean | undefined> {\n    return new Result(value != null); //This checks for undefined automatically.\n}","import { Result } from \"../types\";\n\n/**\n * Tests whether the target is an array\n * @param target The value being checked.\n * \n * ### Example\n * ```\n * expect(isArray([1,2,3]).value).toBeTruthy()\n * ```\n */\n export function isArray(target: any): Result<boolean | undefined> {\n    return new Result(target instanceof Array);\n}","import { Result } from '../types';\nimport { isDefined } from './isDefined';\nimport { isArray } from './isArray';\n\n/**\n * Check if `target` is a valid port number\n * ### Example\n * ```\n * expect(isObject({}).value).toBeTruthy()\n * ```\n * @param target The port number\n *    \n */\nexport function isObject(target:any):Result<boolean|undefined>  {\n  if (isDefined(target).value && !isArray(target).value) {\n    return new Result(typeof target === 'object');\n  }\n  return new Result(false);\n}","import { MessageFunctionType, Result } from '../types';\nimport { isObject } from './isObject';\n\nexport interface IsInObjectValuesErrors {\n  OBJECT_ARGUMENT_NOT_AN_OBJECT: MessageFunctionType;\n}\n\nexport const IS_IN_OBJECT_VALUES_ERRORS: IsInObjectValuesErrors =\n{\n  OBJECT_ARGUMENT_NOT_AN_OBJECT: (arr?: string[]) => {\n    return `The object argument ${arr![0]} is not an object.`;\n  }\n};\n\n/**\n * Tests whether the `target` string is in the array of allowed values\n *\n * ### Example\n * ```\n * expect(isInObjectValues('foo', {f:'foo'}).value).toBeTruthy()\n * ```\n * @param target The target string\n * @param options The options\n */\nexport function isInObjectValues(target: any, object:any):Result<boolean|undefined> {\n  if (!isObject(object).value) {\n    return new Result(\n      undefined, \n      IS_IN_OBJECT_VALUES_ERRORS.OBJECT_ARGUMENT_NOT_AN_OBJECT,\n      [object])\n  }\n  const values:any[] = Object.values(object)\n  return new Result(values.indexOf(target) >= 0);\n}","import { MessageFunctionType, Result } from '../types';\nimport { isObject } from './isObject';\n\nexport interface IsInObjectKeysErrors {\n  OBJECT_ARGUMENT_NOT_AN_OBJECT: MessageFunctionType;\n}\n\nexport const IS_IN_OBJECT_KEYS_ERRORS: IsInObjectKeysErrors =\n{\n  OBJECT_ARGUMENT_NOT_AN_OBJECT: (arr?: string[]) => {\n    return `The object argument ${arr![0]} is not an object.`;\n  }\n};\n\n/**\n * Tests whether the `target` string is in the array of allowed values\n * \n * ### Example\n * ```\n * expect(isInObjectKeys('foo', {foo:'f'}).value).toBeTruthy()\n * ```\n * @param target The target string\n * @param options The options\n */\nexport function isInObjectKeys(target: any, object: any): Result<boolean | undefined> {\n  if (!isObject(object).value) {\n    return new Result(\n      undefined,\n      IS_IN_OBJECT_KEYS_ERRORS.OBJECT_ARGUMENT_NOT_AN_OBJECT,\n      [object])\n  }\n  const keys: any[] = Object.keys(object)\n  return new Result(keys.indexOf(target) >= 0);\n}","import { MessageFunctionType, Result } from '../types';\nimport { isArray } from './isArray';\n\nexport interface IsInArrayErrors {\n    TARGET_ARGUMENT_NOT_AN_ARRAY: MessageFunctionType;\n}\n\nexport const IS_IN_ARRAY_ERRORS: IsInArrayErrors =\n{\n    TARGET_ARGUMENT_NOT_AN_ARRAY: (arr?: string[]) => {\n        return `The target argument ${arr![0]} is not a array.`;\n    }\n};\n\n/**\n * Tests whether the `target` string is in the array of allowed values\n *    \n * ### Example\n * ```\n * expect(().value).toBeTruthy()\n * ```\n * @param value The value that may be in the array\n * @param array The array\n */\nexport function isInArray(value: any, array: any[]): Result<boolean | undefined> {\n    if (!isArray(array).value) {\n        return new Result(\n            undefined,\n            IS_IN_ARRAY_ERRORS.TARGET_ARGUMENT_NOT_AN_ARRAY,\n            [array ? array.toString() : ''])\n    }\n    return new Result( array.indexOf(value) >= 0 );\n}","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface ContainsErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n  CONTAINED_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const CONTAINS_ERRORS: ContainsErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  },\n  CONTAINED_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The contained argument ${arr![0]} is not a string.`;\n  }\n};\n\n/**\n * Test whether the `target` string \n * contains the `contained` string.\n * \n * ### Example\n * ```\n * expect(contains('foobar', 'foo').value).toBeTruthy()\n * ```\n * @param target The string that should contain the element\n * @param contained The possibly contained string \n */\nexport function contains(target: string, contained: string):Result<boolean | undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      CONTAINS_ERRORS.TARGET_ARGUMENT_NOT_A_STRING, \n      [target])\n  }\n  if (!isString(contained).value) {\n    return new Result(\n      undefined, \n      CONTAINS_ERRORS.CONTAINED_ARGUMENT_NOT_A_STRING, \n      [contained])\n  }\n  return new Result(target.indexOf(contained) >= 0);\n}\n","import { contains } from \"./contains\";\nimport { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsNotSuperStringErrors {\n    TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n    VALUE_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_NOT_SUPER_STRING_ERRORS: IsNotSuperStringErrors =\n{\n    TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n        return `The target argument ${arr![0]} is not a string.`;\n    },\n    VALUE_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n        return `The value argument ${arr![0]} is not a string.`;\n    }\n};\n\n/**\n * Checks if the string value does not contain the target.\n * \n * ### Example\n * ```\n * expect(isNotSuperString(\"foo\", \"fooboo\").value).toBeTruthy()\n * ```\n * \n * @param superString The value being checked.\n * @param subString The target value to perform the check against.\n */\nexport function isNotSuperString(superString: string, subString: string): Result<boolean | undefined> {\n    if (!isString(superString).value) {\n        return new Result(\n            undefined,\n            IS_NOT_SUPER_STRING_ERRORS.VALUE_ARGUMENT_NOT_A_STRING,\n            [superString])\n    }\n    if (!isString(subString).value) {\n        return new Result(\n            undefined,\n            IS_NOT_SUPER_STRING_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n            [subString])\n    }\n    return new Result(!contains(superString, subString).value);\n}","import { contains } from \"./contains\";\nimport { MessageFunctionType, Result } from '../types';\nimport { isString } from './isString';\n\nexport interface IsSuperStringErrors {\n    TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n    VALUE_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_SUPER_STRING_ERRORS: IsSuperStringErrors =\n{\n    TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n        return `The target argument ${arr![0]} is not a string.`;\n    },\n    VALUE_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n        return `The value argument ${arr![0]} is not a string.`;\n    }\n};\n\n/**\n * Checks if the string value does not contain the target.\n *    \n * ### Example\n * ```\n * expect(isSuperString(\"fooboo\", \"foo\").value).toBeTruthy();\n * ```\n * @param superString The value being checked.\n * @param subString The target value to perform the check against.\n */\nexport function isSuperString(superString: string, subString: string): Result<boolean | undefined> {\n    if (!isString(superString).value) {\n        return new Result(\n            undefined,\n            IS_SUPER_STRING_ERRORS.VALUE_ARGUMENT_NOT_A_STRING,\n            [superString])\n    }\n    if (!isString(subString).value) {\n        return new Result(\n            undefined,\n            IS_SUPER_STRING_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n            [subString])\n    }\n    return new Result(contains(superString, subString).value);\n}","import { contains } from \"./contains\";\nimport { MessageFunctionType, Result } from '../types';\nimport { isString } from './isString';\n\nexport interface IsSubStringErrors {\n    TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n    CONTAINED_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_SUBSTRING_ERRORS: IsSubStringErrors =\n{\n    TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n        return `The target argument ${arr![0]} is not a string.`;\n    },\n    CONTAINED_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n        return `The contained argument ${arr![0]} is not a string.`;\n    }\n};\n\n/**\n * Checks if the value is a substring of the target.   \n * ### Example\n * ```\n * expect(isSubString('foo', 'fooboo').value).toBeTruthy()\n * ```\n * @param contained The value that may be contained.\n * @param target The target value to perform the check against.\n */\nexport function isSubString(contained: string, target: string): Result<boolean | undefined> {\n    if (!isString(contained).value) {\n        return new Result(\n            undefined,\n            IS_SUBSTRING_ERRORS.CONTAINED_ARGUMENT_NOT_A_STRING,\n            [contained])\n    }\n    if (!isString(target).value) {\n        return new Result(\n            undefined,\n            IS_SUBSTRING_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n            [target])\n    }\n    return new Result(contains(target, contained).value);\n}","import { Result } from \"../types\";\n\n/**\n * IsNumberOptions.\n */\nexport interface IsNumberOptions {\n    allowNaN?: boolean;\n    allowInfinity?: boolean;\n}\n\n/**\n * Default options for IsNumber\n */\nexport const IS_NUMBER_OPTIONS_DEFAULTS: IsNumberOptions = {\n    allowNaN: false,\n    allowInfinity: false\n}\n\n/**\n * Check if a given value is a number.\n *    \n * ### Example\n * ```\n * expect(isNumber(33.33).value).toBeTruthy()\n * ```\n * \n * Default `IsNumberOptions` allow \n * `-Infinity, Infinity` but disallow `NaN`.\n * \n * @param target The value being checked.\n * @param options The optional configuration {@link IsNumberOptions}.\n */\nexport function isNumber(target: any,\n    options: IsNumberOptions = IS_NUMBER_OPTIONS_DEFAULTS): Result<boolean | undefined> {\n    if (target === Infinity || target === -Infinity) {\n        return new Result(!!options.allowInfinity);\n    }\n\n    if (Number.isNaN(target)) {\n        return new Result(!!options.allowNaN);\n    }\n    return new Result(isFinite(target));\n}","import { Result } from \"../types\";\n\n/**\n * Tests if given value is not empty (!== '', !== null, !== undefined).\n *   \n * ### Example\n * ```\n * expect(isNotEmpty('1').value).toBeTruthy()\n * ``` \n * @param value The value being checked.\n */\n export function isNotEmpty(value: any): Result<boolean | undefined> {\n    return new Result(value !== \"\" && value !== null && value !== undefined);\n}","import { contains } from \"./contains\";\nimport { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsNotSubStringErrors {\n    TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n    CONTAINED_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_NOT_SUBSTRING_ERRORS: IsNotSubStringErrors =\n{\n    TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n        return `The target argument ${arr![0]} is not a string.`;\n    },\n    CONTAINED_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n        return `The contained argument ${arr![0]} is not a string.`;\n    }\n};\n\n/**\n * Checks if the value is not a substring of the target.\n * If given value is not a string, then it returns false.\n *\n * ### Example\n * ```\n * expect(isNotSubString(\"3\", \"2\").value).toBeTruthy()\n * ```\n * @param contained The value that may be contained.\n * @param target The target value to perform the check against.\n */\nexport function isNotSubString(contained: string, target: string): Result<boolean | undefined> {\n    if (!isString(contained).value) {\n        return new Result(\n            undefined,\n            IS_NOT_SUBSTRING_ERRORS.CONTAINED_ARGUMENT_NOT_A_STRING,\n            [contained])\n    }\n    if (!isString(target).value) {\n        return new Result(\n            undefined,\n            IS_NOT_SUBSTRING_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n            [target])\n    }\n    return new Result(!contains(target, contained).value);\n}","import { Result } from \"../types\";\n\n/**\n * Tets if value does not match (\"!==\") the comparison.\n *    \n * ### Example\n * ```\n * expect(isNotEqualTo('1', '2').value).toBeTruthy()\n * ```\n * @param value The value being checked.\n * @param target The target value to perform the check against.\n * \n */\nexport function isNotEqualTo(value: any, target: any): Result<boolean | undefined> {\n    return new Result(value !== target);\n}","import { MessageFunctionType, Result } from '../types';\nimport { isNumber } from './isNumber';\n\nexport interface IsNegativeErrors {\n  TARGET_ARGUMENT_NOT_A_NUMBER: MessageFunctionType;\n}\n\nexport const IS_NEGATIVE_ERRORS: IsNegativeErrors =\n{\n  TARGET_ARGUMENT_NOT_A_NUMBER: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\n/**\n * Tests if the value is a negative number.\n *    \n * ### Example\n * ```\n * expect(isNegative(-1).value).toBeTruthy()\n * ```\n * @param target The value being checked.\n */\nexport function isNegative(target: number): Result<boolean | undefined> {\n    if (!isNumber(target).value) {\n        return new Result(\n          undefined,\n          IS_NEGATIVE_ERRORS.TARGET_ARGUMENT_NOT_A_NUMBER,\n          [target ? target.toString() : ''])\n      }    \n    return new Result(target < 0);\n}","import { MessageFunctionType, Result } from '../types';\nimport { isNumber } from './isNumber';\n\nexport interface IsLessThanFiniteErrors {\n  TARGET_ARGUMENT_NOT_A_NUMBER: MessageFunctionType;\n  VALUE_ARGUMENT_NOT_A_NUMBER:MessageFunctionType;\n}\n\nexport const IS_LESS_THAN_FINITE_ERRORS: IsLessThanFiniteErrors =\n{\n  TARGET_ARGUMENT_NOT_A_NUMBER: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a number.`;\n  },\n  VALUE_ARGUMENT_NOT_A_NUMBER: (arr?: string[]) => {\n    return `The value argument ${arr![0]} is not a number.`;\n  }\n};\n\n/**\n * Checks that both `greater` and `than` are finite whether greater > than is true.\n *    \n * ### Example\n * ```\n * expect(isLessThanFinite(1,2).value).toBeTruthy()\n * ```\n * @param less The value being checked.\n * @param than The target value to perform the check against.\n */\nexport function isLessThanFinite(less: number, than: number): Result<boolean | undefined> {\n    if (!isNumber(less).value) {\n        return new Result(\n          undefined, \n          IS_LESS_THAN_FINITE_ERRORS.VALUE_ARGUMENT_NOT_A_NUMBER,\n          [less ? less.toString(): ''])\n      }\n      if (!isNumber(than).value) {\n        return new Result(\n          undefined, \n          IS_LESS_THAN_FINITE_ERRORS.TARGET_ARGUMENT_NOT_A_NUMBER,\n          [than ? than.toString(): ''])\n      }\n       \n    return new Result(typeof less === \"number\" && \n    isFinite(less) && \n    typeof than === \"number\" && \n    isFinite(than) && less < than);\n}","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsMatchesErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_MATCHES_ERRORS: IsMatchesErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\n/**\n * Check whether the target matches the pattern\n *    \n * ### Example\n * ```\n * expect(matches('abc', 'abc').value).toBeTruthy()\n * ```\n * @param target The target\n * @param pattern The RegExp\n * @param modifiers The optional modifier\n */\nexport function matches(target:string, pattern:RegExp, modifiers?:string):Result<boolean|undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_MATCHES_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  if (Object.prototype.toString.call(pattern) !== '[object RegExp]') {\n    pattern = new RegExp(pattern, modifiers);\n  }\n  return new Result(pattern.test(target));\n}","import { matches } from './matches'\n\nimport { isString } from '../validators/isString';\nimport { MessageFunctionType, Result } from '../types';\n\nexport interface IsMatchErrors {\n    TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_MATCH_ERRORS: IsMatchErrors =\n{\n    TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n        return `The target argument ${arr![0]} is not a string.`;\n    }\n};\n\n/**\n * Checks if string matches the pattern. \n * Either matches('foo', /foo/i) or matches('foo', 'foo', 'i').\n * If given value is not a string, then it returns false.\n *    \n * ### Example\n * ```\n * expect(isMatch('xyz', /xyz/).value).toBeTruthy()\n * ```\n * \n * @param target The value being checked.\n * @param pattern The match pattern\n * @param modifiers The modifiers\n */\nexport function isMatch(\n    target: string,\n    pattern: RegExp,\n    modifiers?: string\n): Result<boolean | undefined> {\n\n    if (!isString(target).value) {\n        return new Result(\n            undefined,\n            IS_MATCH_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n            [target])\n    }\n    return matches(target, pattern, modifiers)\n}","import { Result } from \"../types\";\nimport { isMatch } from \"./isMatch\";\n\n/**\n * Checks if the string represents a time without\n * a given timezone in the format HH:MM (military)\n * If the given value does not match the pattern HH:MM, then it returns false.\n * \n * ### Example\n * ```\n * expect(isMilitaryTime('application/json').value).toBeTruthy()\n * ```\n * \n * @param value The value being checked.\n * @returns True if the string represents a time without a given timezone in the format HH:MM (military), false otherwise.\n */\nexport function isMilitaryTime(value: string): Result<boolean | undefined> {\n    return isMatch(value, /^([01]\\d|2[0-3]):?([0-5]\\d)$/);\n}","import { Result } from \"../types\";\n\n/**\n * Tests if the value is an instance of the specified object.\n *    \n * ### Example\n * ```\n * expect(isInstanceOf(new Date(0), Date).value).toBeTruthy()\n * ```\n * \n * @param value The value array being checked.\n * @param target The target type constructor\n */\n export function isInstanceOf(\n    value: any,\n    target: new (...args: any[]) => any\n  ):Result<boolean | undefined> {\n    return new Result((\n      target &&\n      typeof target === \"function\" &&\n      value instanceof target\n    ));\n  }","import { MessageFunctionType, Result } from '../types';\nimport { isNumber } from './isNumber';\n\nexport interface IsInRangeErrors {\n    VALUE_ARGUMENT_NOT_A_NUMBER: MessageFunctionType;\n    MIN_ARGUMENT_NOT_A_NUMBER: MessageFunctionType;\n    MAX_ARGUMENT_NOT_A_NUMBER: MessageFunctionType;\n}\n\nexport const IS_IN_RANGE_ERRORS: IsInRangeErrors =\n{\n    VALUE_ARGUMENT_NOT_A_NUMBER: (arr?: string[]) => {\n        return `The value argument ${arr![0]} is not a number.`;\n    },\n    MIN_ARGUMENT_NOT_A_NUMBER: (arr?: string[]) => {\n        return `The min argument ${arr![0]} is not a number.`;\n    },\n    MAX_ARGUMENT_NOT_A_NUMBER: (arr?: string[]) => {\n        return `The max argument ${arr![0]} is not a number.`;\n    }\n};\n\n/**\n * Tests if the string's length falls in a range. Note: this function takes into account surrogate pairs.\n * If given value is not a string, then it returns false.\n *    \n * ### Example\n * ```\n * expect(isInRange(2,1,3).value).toBeTruthy()\n * ```\n * \n * \n * @param value The value being checked.\n * @param min The min value to perform the check against.\n * @param max The max value to perform the check against, infinity if not defined.\n */\nexport function isInRange(value: number, min: number, max?: number): Result<boolean | undefined> {\n    if (!isNumber(value).value) {\n        return new Result(\n          undefined, \n          IS_IN_RANGE_ERRORS.VALUE_ARGUMENT_NOT_A_NUMBER,\n          [value ? value.toString(): ''])\n      }\n      if (!isNumber(min).value) {\n        return new Result(\n          undefined, \n          IS_IN_RANGE_ERRORS.MIN_ARGUMENT_NOT_A_NUMBER,\n          [min ? min.toString(): ''])\n      }\n      if (max) {\n        if (!isNumber(max).value) {\n            return new Result(\n              undefined, \n              IS_IN_RANGE_ERRORS.MAX_ARGUMENT_NOT_A_NUMBER,\n              [max ? max.toString(): ''])\n          }    \n      }\n      if (!max ) {\n          max = Infinity\n      }     \n      return new Result(value >= min && value <= max)\n}","import { MessageFunctionType, Result } from \"../types\";\nimport { isArray } from \"./isArray\";\n\nexport interface IsArraySizeGreaterThanErrors {\n    TARGET_ARGUMENT_NOT_AN_ARRAY: MessageFunctionType;\n}\n\nexport const IS_ARRAY_SIZE_GREATER_THAN_ERRORS: IsArraySizeGreaterThanErrors =\n{\n    TARGET_ARGUMENT_NOT_AN_ARRAY: (arr?: string[]) => {\n        return `The target argument ${arr![0]} is not an array.`;\n    }\n};\n\n\n/**\n * Tests if the `array`'s length is greater \n * than the `constraint` number.\n * \n * ### Example\n * ```\n * expect(isArraySizeGreaterThan([1,2], 1).value).toBeTruthy()\n * ```\n * @param array The array being checked.\n * @param constraint The size constraint\n */\nexport function isArraySizeGreaterThan(array: any[], constraint: number):Result<boolean|undefined> {\n    if (!isArray(array).value) {\n        return new Result(\n            undefined,\n            IS_ARRAY_SIZE_GREATER_THAN_ERRORS.TARGET_ARGUMENT_NOT_AN_ARRAY,\n            [constraint.toString()])\n    }\n    return new Result( array.length > constraint || false);\n  }","import { MessageFunctionType, Result } from \"../types\";\nimport { isArray } from \"./isArray\";\n\nexport interface IsArraySizeLessThanErrors {\n    TARGET_ARGUMENT_NOT_AN_ARRAY: MessageFunctionType;\n}\n\nexport const IS_ARRAY_SIZE_LESS_THAN_ERRORS: IsArraySizeLessThanErrors =\n{\n    TARGET_ARGUMENT_NOT_AN_ARRAY: (arr?: string[]) => {\n        return `The target argument ${arr![0]} is not an array.`;\n    }\n};\n\n/**\n * Checks if array's length is less than the `constraint`.\n * \n * ### Example\n * ```\n * expect(isArraySizeLessThan([1,2], 3).value).toBeTruthy()\n * ```\n * \n * @param array The value array being checked.\n * @param constraint The minimum size of the array\n */\nexport function isArraySizeLessThan(array: any[], constraint: number):Result<boolean|undefined> {\n    if (!isArray(array).value) {\n        return new Result(\n            undefined,\n            IS_ARRAY_SIZE_LESS_THAN_ERRORS.TARGET_ARGUMENT_NOT_AN_ARRAY,\n            [constraint.toString()])\n    }\n    return new Result( array.length < constraint || false);\n  }","import { MessageFunctionType, Result } from \"../types\";\nimport { isArray } from \"./isArray\";\n\nexport interface IsArrayUniqueErrors {\n    TARGET_ARGUMENT_NOT_AN_ARRAY: MessageFunctionType;\n}\n\nexport const IS_ARRAY_UNIQUE_ERRORS: IsArrayUniqueErrors =\n{\n    TARGET_ARGUMENT_NOT_AN_ARRAY: (arr?: string[]) => {\n        return `The target argument ${arr![0]} is not an array.`;\n    }\n};\n\n/**\n * Tests whether all `array`'s values are unique. \n * \n * ### Example\n * ```\n * expect(isArrayUnique([1,2])).toBeTruthy()\n * ```\n * \n * @param array The array.\n */\n export function isArrayUnique(array: any[]):Result<boolean | undefined> {\n    if (!isArray(array).value) {\n        return new Result(\n            undefined,\n            IS_ARRAY_UNIQUE_ERRORS.TARGET_ARGUMENT_NOT_AN_ARRAY,\n            [array.toString()])\n    }\n  \n    const uniqueItems = array.filter((a, b, c) => c.indexOf(a) === b);\n    return new Result(array.length === uniqueItems.length);\n  }","import { StringKeyRegEx, StringKeyString } from \"../types\";\n\nexport const alpha:StringKeyRegEx = {\n  'en-US': /^[A-Z]+$/i,\n  'bg-BG': /^[А-Я]+$/i,\n  'cs-CZ': /^[A-ZÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ]+$/i,\n  'da-DK': /^[A-ZÆØÅ]+$/i,\n  'de-DE': /^[A-ZÄÖÜß]+$/i,\n  'el-GR': /^[Α-ώ]+$/i,\n  'es-ES': /^[A-ZÁÉÍÑÓÚÜ]+$/i,\n  'fr-FR': /^[A-ZÀÂÆÇÉÈÊËÏÎÔŒÙÛÜŸ]+$/i,\n  'it-IT': /^[A-ZÀÉÈÌÎÓÒÙ]+$/i,\n  'nb-NO': /^[A-ZÆØÅ]+$/i,\n  'nl-NL': /^[A-ZÁÉËÏÓÖÜÚ]+$/i,\n  'nn-NO': /^[A-ZÆØÅ]+$/i,\n  'hu-HU': /^[A-ZÁÉÍÓÖŐÚÜŰ]+$/i,\n  'pl-PL': /^[A-ZĄĆĘŚŁŃÓŻŹ]+$/i,\n  'pt-PT': /^[A-ZÃÁÀÂÄÇÉÊËÍÏÕÓÔÖÚÜ]+$/i,\n  'ru-RU': /^[А-ЯЁ]+$/i,\n  'sl-SI': /^[A-ZČĆĐŠŽ]+$/i,\n  'sk-SK': /^[A-ZÁČĎÉÍŇÓŠŤÚÝŽĹŔĽÄÔ]+$/i,\n  'sr-RS@latin': /^[A-ZČĆŽŠĐ]+$/i,\n  'sr-RS': /^[А-ЯЂЈЉЊЋЏ]+$/i,\n  'sv-SE': /^[A-ZÅÄÖ]+$/i,\n  'tr-TR': /^[A-ZÇĞİıÖŞÜ]+$/i,\n  'uk-UA': /^[А-ЩЬЮЯЄIЇҐі]+$/i,\n  'ku-IQ': /^[ئابپتجچحخدرڕزژسشعغفڤقکگلڵمنوۆھەیێيطؤثآإأكضصةظذ]+$/i,\n  ar: /^[ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰ]+$/,\n  he: /^[א-ת]+$/,\n  'fa-IR': /^['آابپتثجچهخدذرزژسشصضطظعغفقکگلمنوهی']+$/i,\n};\n\nexport const alphanumeric:StringKeyRegEx = {\n  'en-US': /^[0-9A-Z]+$/i,\n  'az-AZ': /^[0-9A-VXYZÇƏĞİıÖŞÜ]+$/i,\n  'bg-BG': /^[0-9А-Я]+$/i,\n  'cs-CZ': /^[0-9A-ZÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ]+$/i,\n  'da-DK': /^[0-9A-ZÆØÅ]+$/i,\n  'de-DE': /^[0-9A-ZÄÖÜß]+$/i,\n  'el-GR': /^[0-9Α-ω]+$/i,\n  'es-ES': /^[0-9A-ZÁÉÍÑÓÚÜ]+$/i,\n  'fr-FR': /^[0-9A-ZÀÂÆÇÉÈÊËÏÎÔŒÙÛÜŸ]+$/i,\n  'it-IT': /^[0-9A-ZÀÉÈÌÎÓÒÙ]+$/i,\n  'hu-HU': /^[0-9A-ZÁÉÍÓÖŐÚÜŰ]+$/i,\n  'nb-NO': /^[0-9A-ZÆØÅ]+$/i,\n  'nl-NL': /^[0-9A-ZÁÉËÏÓÖÜÚ]+$/i,\n  'nn-NO': /^[0-9A-ZÆØÅ]+$/i,\n  'pl-PL': /^[0-9A-ZĄĆĘŚŁŃÓŻŹ]+$/i,\n  'pt-PT': /^[0-9A-ZÃÁÀÂÄÇÉÊËÍÏÕÓÔÖÚÜ]+$/i,\n  'ru-RU': /^[0-9А-ЯЁ]+$/i,\n  'sl-SI': /^[0-9A-ZČĆĐŠŽ]+$/i,\n  'sk-SK': /^[0-9A-ZÁČĎÉÍŇÓŠŤÚÝŽĹŔĽÄÔ]+$/i,\n  'sr-RS@latin': /^[0-9A-ZČĆŽŠĐ]+$/i,\n  'sr-RS': /^[0-9А-ЯЂЈЉЊЋЏ]+$/i,\n  'sv-SE': /^[0-9A-ZÅÄÖ]+$/i,\n  'th-TH': /^[ก-๙\\s]+$/i,\n  'tr-TR': /^[0-9A-ZÇĞİıÖŞÜ]+$/i,\n  'uk-UA': /^[0-9А-ЩЬЮЯЄIЇҐі]+$/i,\n  'ku-IQ': /^[٠١٢٣٤٥٦٧٨٩0-9ئابپتجچحخدرڕزژسشعغفڤقکگلڵمنوۆھەیێيطؤثآإأكضصةظذ]+$/i,\n  'vi-VN': /^[0-9A-ZÀÁẠẢÃÂẦẤẬẨẪĂẰẮẶẲẴĐÈÉẸẺẼÊỀẾỆỂỄÌÍỊỈĨÒÓỌỎÕÔỒỐỘỔỖƠỜỚỢỞỠÙÚỤỦŨƯỪỨỰỬỮỲÝỴỶỸ]+$/i,\n  ar: /^[٠١٢٣٤٥٦٧٨٩0-9ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰ]+$/,\n  he: /^[0-9א-ת]+$/,\n  fa: /^['0-9آاءأؤئبپتثجچحخدذرزژسشصضطظعغفقکگلمنوهةی۱۲۳۴۵۶۷۸۹۰']+$/i,\n  'hi-IN': /^[\\u0900-\\u0963]+[\\u0966-\\u097F]*$/i\n};\n\nexport const decimal:StringKeyString = {\n  'en-US': '.',\n  'ar': '٫',\n};\n\n\nexport const englishLocales = ['AU', 'GB', 'HK', 'IN', 'NZ', 'ZA', 'ZM'];\n\nfor (let locale, i = 0; i < englishLocales.length; i++) {\n  locale = `en-${englishLocales[i]}`;\n  alpha[locale] = alpha['en-US'];\n  alphanumeric[locale] = alphanumeric['en-US'];\n  decimal[locale] = decimal['en-US'];\n}\n\n// Source: http://www.localeplanet.com/java/\nexport const arabicLocales = [\n  'AE', 'BH', 'DZ', 'EG', 'IQ', 'JO', 'KW', 'LB', 'LY',\n  'MA', 'QM', 'QA', 'SA', 'SD', 'SY', 'TN', 'YE',\n];\n\nfor (let locale, i = 0; i < arabicLocales.length; i++) {\n  locale = `ar-${arabicLocales[i]}`;\n  alpha[locale] = alpha['ar'];\n  alphanumeric[locale] = alphanumeric['ar'];\n  decimal[locale] = decimal['ar'];\n}\n\n// Source: https://en.wikipedia.org/wiki/Decimal_mark\nexport const dotDecimal = ['ar-EG', 'ar-LB', 'ar-LY'];\nexport const commaDecimal = [\n  'bg-BG', 'cs-CZ', 'da-DK', 'de-DE', 'el-GR', 'en-ZM', 'es-ES', 'fr-FR', 'it-IT', 'ku-IQ', 'hu-HU', 'nb-NO',\n  'nn-NO', 'nl-NL', 'pl-PL', 'pt-PT', 'ru-RU', 'sl-SI', 'sr-RS@latin',\n  'sr-RS', 'sv-SE', 'tr-TR', 'uk-UA',\n];\n\nfor (let i = 0; i < dotDecimal.length; i++) {\n  decimal[dotDecimal[i]] = decimal['en-US'];\n}\n\nfor (let i = 0; i < commaDecimal.length; i++) {\n  decimal[commaDecimal[i]] = ',';\n}\n\nalpha['pt-BR'] = alpha['pt-PT'];\nalphanumeric['pt-BR'] = alphanumeric['pt-PT'];\ndecimal['pt-BR'] = decimal['pt-PT'];\n\n// see #862\nalpha['pl-Pl'] = alpha['pl-PL'];\nalphanumeric['pl-Pl'] = alphanumeric['pl-PL'];\ndecimal['pl-Pl'] = decimal['pl-PL'];","import { Result } from '../types';\n/**\n * Compares the `compare` and `to` arguments with the strict (`===`) equality\n * \n * @param compare The first comparison argument\n * @param to The second comparison argument \n *    \n * ### Example\n * ```\n * expect(isEqualTo('abc', 'abc').value).toBeTruthy()\n * ```\n */\nexport function isEqualTo(compare: any, to: any):Result<boolean | undefined> {\n  return new Result(compare === to)\n}","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface EscapeErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const ESCAPE_ERRORS: EscapeErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\n/**\n * Replaces <, >, &, ', \" and / with HTML entities. \n * @param target The string to perform the `escape` operation on.\n */\nexport function escape(target:string):Result<string|undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined,\n      ESCAPE_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  return new Result(\n    target.replace(/&/g, '&amp;')\n    .replace(/\"/g, '&quot;')\n    .replace(/'/g, '&#x27;')\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;')\n    .replace(/\\//g, '&#x2F;')\n    .replace(/\\\\/g, '&#x5C;')\n    .replace(/`/g, '&#96;'))\n}","import { isDate } from './isDate';\nimport { MessageFunctionType, Result } from '../types';\n\nexport interface IsAfterErrors {\n  AFTER_ARGUMENT_NOT_A_DATE: MessageFunctionType;\n  BEFORE_ARGUMENT_NOT_A_DATE: MessageFunctionType;\n}\n\nexport const IS_AFTER_ERRORS: IsAfterErrors =\n{\n  AFTER_ARGUMENT_NOT_A_DATE: (arr?: string[]) => {\n    return `The after argument ${arr![0]} is not a date.`;\n  },\n  BEFORE_ARGUMENT_NOT_A_DATE: (arr?: string[]) => {\n    return `The before argument ${arr![0]} is not a date.`;\n  }\n};\n\n/**\n * Tests whether the `after` date comes after the `before` date\n * \n * ### Example\n * ```\n * expect(isAfter(new Date(1), new Date(0)).value).toBeTruthy()\n * ```\n * @param after The target date\n * @param before The argument to perform the comparison with \n */\nexport function isAfter(after: Date, before: Date):Result<boolean | undefined> {\n  if (!isDate(after).value) {\n    return new Result(\n      undefined, \n      IS_AFTER_ERRORS.AFTER_ARGUMENT_NOT_A_DATE, \n      [ after ? after.toString() : '' ])\n  }\n  if (!isDate(before).value) {\n    return new Result(\n      undefined, \n      IS_AFTER_ERRORS.AFTER_ARGUMENT_NOT_A_DATE, \n      [before ? before.toString() : ''])\n  }\n  return new Result(!!(after.getTime() > before.getTime()));\n}","import { alpha } from './alpha';\nimport { isString } from '../validators/isString';\nimport { MessageFunctionType, Result } from '../types';\n\nexport interface IsAlphaErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n  LOCALE_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n  INVALID_LOCALE: MessageFunctionType;\n}\n\nexport const IS_ALPHA_ERRORS: IsAlphaErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  },\n  LOCALE_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The locale argument ${arr![0]} is not a string.`;\n  },\n  INVALID_LOCALE: (arr?: string[]) => {\n    return `The locale argument ${arr![0]} is invalid.`;\n  }\n};\n\n/**\n * Tests whether if the string contains only letters\n * valid for the locale.  For the US his would be (a-zA-Z).\n * \n * ### Example\n * ```\n * expect(isAlpha('hello').value).toBeTruthy()\n * ```\n * \n * @param target The target string\n * @param locale The locale argument, defaults to 'en-US'\n */\nexport function isAlpha(target: string, locale: string = 'en-US'):Result<boolean | undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_ALPHA_ERRORS.TARGET_ARGUMENT_NOT_A_STRING, \n      [target])\n  }\n  if (!isString(locale).value) {\n    return new Result(\n      undefined, \n      IS_ALPHA_ERRORS.LOCALE_ARGUMENT_NOT_A_STRING, \n      [locale])\n  }\n  if (!(locale in alpha)) {\n    return new Result(\n      undefined, \n      IS_ALPHA_ERRORS.INVALID_LOCALE, \n      [locale])\n  }\n  return new Result(alpha[locale].test(target));\n}\n\n/**\n * The alpha locales\n */\nexport const isAlphaLocales = Object.keys(alpha);","import { alphanumeric } from './alpha';\nimport { isString } from '../validators/isString';\nimport { MessageFunctionType, Result } from '../types';\n\nexport interface IsAlphaNumericErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n  LOCALE_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n  INVALID_LOCALE: MessageFunctionType;\n  INVALID_IGNORE_OPTION: MessageFunctionType;\n}\n\nexport const IS_ALPHA_NUMERIC_ERRORS: IsAlphaNumericErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  },\n  LOCALE_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The locale argument ${arr![0]} is not a string.`;\n  },\n  INVALID_LOCALE: (arr?: string[]) => {\n    return `The locale argument ${arr![0]} is invalid.`;\n  },\n  INVALID_IGNORE_OPTION: (arr?: string[]) => {\n    return `Ignore should be instance of a String or RegExp.`;\n  }\n};\n\n/**\n * Tests whether `target` is in alphanumeric\n * \n * ### Example\n * ```\n * expect(isAlphaNumeric('abc123').value).toBeTruthy()\n * ```\n * \n * @param _target The target string\n * @param locale The locale (Defaults to 'en-US') \n */\nexport function isAlphaNumeric(_target: string, locale: string = 'en-US', options:any = {}):Result<boolean|undefined> {\n  if (!isString(_target).value) {\n    return new Result(\n      undefined, \n      IS_ALPHA_NUMERIC_ERRORS.TARGET_ARGUMENT_NOT_A_STRING, \n      [_target])\n  }\n  if (!isString(locale).value) {\n    return new Result(\n      undefined, \n      IS_ALPHA_NUMERIC_ERRORS.LOCALE_ARGUMENT_NOT_A_STRING, \n      [locale])\n  }\n\n  let target = _target\n\n  const { ignore } = options;\n\n  if (ignore) {\n    if (ignore instanceof RegExp) {\n      target = target.replace(ignore, '');\n    } else if (typeof ignore === 'string') {\n      target = target.replace(new RegExp(`[${ignore.replace(/[-[\\]{}()*+?.,\\\\^$|#\\\\s]/g, '\\\\$&')}]`, 'g'), ''); // escape regex for ignore\n    } else {\n      return new Result(\n        undefined, \n        IS_ALPHA_NUMERIC_ERRORS.INVALID_IGNORE_OPTION, \n        [])\n    }\n  }\n  if (locale in alphanumeric) {\n    return new Result(alphanumeric[locale].test(target));\n  }\n  return new Result(\n    undefined, \n    IS_ALPHA_NUMERIC_ERRORS.INVALID_LOCALE, \n    [locale])\n}\n\n/**\n * The alpha numeric locales\n */\nexport const isAlphaNumericLocales = Object.keys(alphanumeric);","import { MessageFunctionType, Result } from \"../types\";\nimport { isArray } from \"./isArray\";\n\nexport interface IsArrayContainerOfErrors {\n    CONTAINER_ARGUMENT_NOT_AN_ARRAY: MessageFunctionType;\n    VALUES_ARGUMENT_NOT_AN_ARRAY: MessageFunctionType;\n}\n\nexport const IS_ARRAY_CONTAINER_OF_ERRORS: IsArrayContainerOfErrors =\n{\n    CONTAINER_ARGUMENT_NOT_AN_ARRAY: (arr?: string[]) => {\n        return `The container argument ${arr![0]} is not an array.`;\n    },\n    VALUES_ARGUMENT_NOT_AN_ARRAY: (arr?: string[]) => {\n        return `The values argument ${arr![0]} is not an array.`;\n    }\n};\n\n/**\n * Tests if `container` array contains values array.\n * \n * The values check should be primitive javascript types (String, number, boolean, null, undefined, etc.).\n * and not Object instances.\n * \n * ### Example\n * ```\n * expect(isArrayContainerOf([2,3,4],[2,3]).value).toBeTruthy()\n * ```\n * \n * @param container The container.\n * @param values The array of values that may be contained.\n * @returns True if array contains all values from the given target array, false otherwise.\n * @example\n * ```\n * expect(isArrayContainerOf([2,3,4,2], [2,3,4])).value).toBeTruthy()\n * ```\n */\nexport function isArrayContainerOf(container: any[], values: any[]): Result<boolean | undefined> {\n    if (!isArray(container).value) {\n        return new Result(\n            undefined,\n            IS_ARRAY_CONTAINER_OF_ERRORS.CONTAINER_ARGUMENT_NOT_AN_ARRAY,\n            [container.toString()])\n    }\n    if (!isArray(values).value) {\n        return new Result(\n            undefined,\n            IS_ARRAY_CONTAINER_OF_ERRORS.VALUES_ARGUMENT_NOT_AN_ARRAY,\n            [values.toString()])\n    }\n    return new Result(!container || values.every(v => container.indexOf(v) !== -1));\n}","import { MessageFunctionType, Result } from \"../types\";\nimport { isArray } from \"./isArray\";\n\nexport interface IsArrayEmptyErrors {\n    TARGET_ARGUMENT_NOT_AN_ARRAY: MessageFunctionType;\n}\n\nexport const IS_ARRAY_EMPTY_ERRORS: IsArrayEmptyErrors =\n{\n    TARGET_ARGUMENT_NOT_AN_ARRAY: (arr?: string[]) => {\n        return `The target argument ${arr![0]} is not an array.`;\n    }\n};\n\n/**\n * Tests if an array is empty.\n * \n * ### Example  \n * ```\n * expect(isArrayEmpty([]).value).toBeTruthy()\n * ```\n * \n * @param target The array being checked\n */\nexport function isArrayEmpty(target: any[]): Result<boolean | undefined> {\n    if (!isArray(target).value) {\n        return new Result(\n            undefined,\n            IS_ARRAY_EMPTY_ERRORS.TARGET_ARGUMENT_NOT_AN_ARRAY,\n            [target.toString()])\n    }\n    return new Result(!target.length);\n}","import { isString } from '../validators/isString';\n\nimport { MessageFunctionType, Result } from '../types';\n\nexport interface IsAsciiErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_ASCII_ERRORS: IsAsciiErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\n\n/* eslint-disable no-control-regex */\nconst ascii = /^[\\x00-\\x7F]+$/;\n/* eslint-enable no-control-regex */\n\n/**\n * Checks whether the `target` conforms to the ascii standard\n * \n * ###\n * ```\n * expect(isAscii('foobar')).toBeTruthy()\n * ```\n * @param target The target\n */\nexport function isAscii(target: string):Result<boolean | undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_ASCII_ERRORS.TARGET_ARGUMENT_NOT_A_STRING, \n      [target])\n  }\n return new Result(ascii.test(target));\n}","import { isString } from '../validators/isString';\n\nimport { MessageFunctionType, Result } from '../types';\n\nexport interface IsBase32Errors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_BASE32_ERRORS: IsBase32Errors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\nconst base32 = /^[A-Z2-7]+=*$/;\n\n/**\n * Checks whether the `target` is base32 encoded\n * \n * ### Example\n * ```\n * expect(isBase32('ZG======')).toBeTruthy()\n * ```\n * \n * @param target The target\n */\nexport function isBase32(target: string) {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_BASE32_ERRORS.TARGET_ARGUMENT_NOT_A_STRING, \n      [target])\n  }\n  const len = target.length;\n  if (len > 0 && len % 8 === 0 && base32.test(target)) {\n    return new Result(true);\n  }\n  return new Result(false);\n}\n","export function merge(obj:any = {}, defaults:any) {\n  for (const key in defaults) {\n    if (typeof obj[key] === 'undefined') {\n      obj[key] = defaults[key];\n    }\n  }\n  return obj;\n}\n","import { isString } from '../validators/isString';\n\nimport { MessageFunctionType, Result } from '../types';\nimport { merge } from '../utilities/merge';\n\nexport interface IsBase64Errors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_BASE64_ERRORS: IsBase64Errors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\nconst notBase64 = /[^A-Z0-9+\\/=]/i;\nconst urlSafeBase64 = /^[A-Z0-9_\\-]*$/i;\n\nconst defaultBase64Options = {\n  urlSafe: false,\n};\n\n/**\n * Checks whether the `target` is base64 encoded\n * \n * ### Example\n * ```\n * expect(isBase32('ZG======')).toBeTruthy()\n * ```\n * \n * @param target The target string\n */\nexport function isBase64(target: string, options?:any):Result<boolean|undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_BASE64_ERRORS.TARGET_ARGUMENT_NOT_A_STRING, \n      [target])\n  }\n  options = merge(options, defaultBase64Options);\n\n  const len = target.length;\n\n  if (options.urlSafe) {\n    return new Result(urlSafeBase64.test(target));\n  }\n\n  if (len % 4 !== 0 || notBase64.test(target)) {\n    return new Result(false);\n  }\n  const firstPaddingChar = target.indexOf('=');\n  return new Result(firstPaddingChar === -1 ||\n    firstPaddingChar === len - 1 ||\n    (firstPaddingChar === len - 2 && target[len - 1] === '='));\n}\n","import { isDate } from './isDate';\nimport { MessageFunctionType, Result } from '../types';\n\nexport interface IsBeforeErrors {\n  AFTER_ARGUMENT_NOT_A_DATE: MessageFunctionType;\n  BEFORE_ARGUMENT_NOT_A_DATE: MessageFunctionType;\n}\n\nexport const IS_BEFORE_ERRORS: IsBeforeErrors =\n{\n  AFTER_ARGUMENT_NOT_A_DATE: (arr?: string[]) => {\n    return `The after argument ${arr![0]} is not a date.`;\n  },\n  BEFORE_ARGUMENT_NOT_A_DATE: (arr?: string[]) => {\n    return `The before argument ${arr![0]} is not a date.`;\n  }\n};\n\n/**\n * Checks whether the `before` date comes before the `after` date\n * \n * @param before The before date\n * @param after The after date  \n * @return true if the `before` date comes before the `after` date, false otherwise\n * @example \n * ```\n * expect(isBefore(new Date(1), new Date(2)).value).toBeTruthy()\n * ```\n */\nexport function isBefore(before: Date, after: Date):Result<boolean|undefined> {\n  if (!isDate(after).value) {\n    return new Result(\n      undefined, \n      IS_BEFORE_ERRORS.AFTER_ARGUMENT_NOT_A_DATE, \n      [ after ? after.toString() : '' ])\n  }\n  if (!isDate(before).value) {\n    return new Result(\n      undefined, \n      IS_BEFORE_ERRORS.BEFORE_ARGUMENT_NOT_A_DATE, \n      [before ? before.toString() : ''])\n  }\n  return new Result(!!(after && before && before.getTime() < after.getTime()));\n}\n","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsBicErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_BIC_ERRORS: IsBicErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\nconst isBICReg = /^[A-z]{4}[A-z]{2}\\w{2}(\\w{3})?$/;\n\n\n/**\n * Tests whether the `target` is BIC encoded\n * \n * ### Example\n * ```\n * expect(isBIC(SBICKEN1).value).toBeTruthy()\n * ```\n * @param target The target string\n */\nexport function isBIC(target: string):Result<boolean|undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_BIC_ERRORS.TARGET_ARGUMENT_NOT_A_STRING, \n      [target])\n  }\n  return new Result( isBICReg.test(target));\n}","import { MessageFunctionType, Result } from '../types';\nimport { isString } from './isString';\n\nexport interface IsBooleanStringErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_BOOLEAN_STRING_ERRORS: IsBooleanStringErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\n/**\n * Checks whether the `target` is a boolean string value\n * meaning it contains of of `['true', 'false', '1', '0']` \n * \n * ### Example\n * ```\n * expect(isBooleanString('true').value).toBeTruthy()\n * ```\n * @param target The target\n */\nexport function isBooleanString(target: string):Result<boolean|undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_BOOLEAN_STRING_ERRORS.TARGET_ARGUMENT_NOT_A_STRING, \n      [target])\n  }  return new Result((['true', 'false', '1', '0'].indexOf(target) >= 0));\n}\n","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsBtcErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_BTC_ERRORS: IsBtcErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\n\n// supports Bech32 addresses\nconst bech32 = /^(bc1)[a-z0-9]{25,39}$/;\nconst base58 = /^(1|3)[A-HJ-NP-Za-km-z1-9]{25,39}$/;\n/**\n * Checks whether the `target` is a btc address \n *   \n * ### Example\n * ```\n * expect(isBtcAddress('1MUz4VMYui5qY1mxUiG8BQ1Luv6tqkvaiL').value).toBeTruthy()\n * ``` \n * @param target The target\n */\nexport function isBtcAddress(target: string): Result<boolean | undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined,\n      IS_BTC_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  if (target.startsWith('bc1')) {\n    return new Result(bech32.test(target));\n  }\n  return new Result(base58.test(target));\n}\n","import { Result, Types } from \"../types\";\n\n/**\n * Tests if the value is >= 0 and finite.\n *    \n * ### Example\n * ```\n * expect(isNonNegativeFinite(0).value).toBeTruthy()\n * ```\n * @param value The value being checked.\n */\nexport function isNonNegativeFinite(value: number):Result<boolean|undefined>  {\n    return new Result(typeof(value)  === Types.NUMBER && isFinite(value) && value >= 0);\n}","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\nimport { isNonNegativeFinite } from './isNonNegativeFinite';\n\nexport interface IsByteLengthErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n  MIN_NOT_NON_NEGATIVE_FINITE: MessageFunctionType;\n  MIN_NOT_LESS_THAN_OR_EQUAL_TO_MAX: MessageFunctionType;\n}\n\nexport const IS_BYTE_LENGTH_ERRORS: IsByteLengthErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  },\n  MIN_NOT_NON_NEGATIVE_FINITE: (arr?: string[]) => {\n    return `The min option ${arr![0]} is not non negative finite.`;\n  },\n  MIN_NOT_LESS_THAN_OR_EQUAL_TO_MAX: (arr?: string[]) => {\n    return `The min argument ${arr![0]} is not less than or equal to the max option ${arr![0]}.`;\n  }\n};\n\n/**\n * IsByteLength Options.\n */\n export interface IsByteLengthOptions {\n  min?:number\n  max?: number\n}\n\nconst default_byte_length_options:IsByteLengthOptions = {\n  min: 0,\n  max: Infinity\n};\n\n/* eslint-disable prefer-rest-params */\n\n/**\n * Checks whether the `target` string's length (in UTF-8 bytes) \n * falls in the defined range.\n * \n * If the `max` option is undefined, it is set to `Infinity`.\n *  \n * ### Example\n * ```\n * expect(isByteLength('abc', {min: 2, max: 3}).value).toBeTruthy()\n * ```\n * \n * @param target The target string\n * @param options The option parameters containing the min and max length of the string\n */\nexport function isByteLength(target: string, options: IsByteLengthOptions = default_byte_length_options):Result<boolean|undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_BYTE_LENGTH_ERRORS.TARGET_ARGUMENT_NOT_A_STRING, \n      [target])\n  }\n  options = { ...default_byte_length_options, ...options }\n\n  let min = options.min;\n  let max = options.max;\n\n  if (!isNonNegativeFinite(min!).value) {\n    return new Result(\n      undefined, \n      IS_BYTE_LENGTH_ERRORS.MIN_NOT_NON_NEGATIVE_FINITE, \n      [min!.toString()])\n  }\n\n  if (!isNonNegativeFinite(max!).value) {\n    max = Infinity\n  }\n\n  if (!(min! <= max!) ) {\n    return new Result(\n      undefined, \n      IS_BYTE_LENGTH_ERRORS.MIN_NOT_LESS_THAN_OR_EQUAL_TO_MAX, \n      [min!.toString(), max!.toString()])\n  }\n  const len = encodeURI(target).split(/%..|./).length - 1;\n  return new Result(len >= min! && len <= max!);\n}","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsCreditCardErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_CREDIT_CARD_ERRORS: IsCreditCardErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\n/* eslint-disable max-len */\nconst creditCard = /^(?:4[0-9]{12}(?:[0-9]{3,6})?|5[1-5][0-9]{14}|(222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}|6(?:011|5[0-9][0-9])[0-9]{12,15}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\\d{3})\\d{11}|6[27][0-9]{14}|^(81[0-9]{14,17}))$/;\n/* eslint-enable max-len */\n/**\n * Tests whether the `target` string is a credit card number\n *   \n * ### Example\n * ```\n * expect(isCreditCard('4716-2210-5188-5662').value).toBeTruthy()\n * ``` \n * @param target The target string\n */\nexport function isCreditCard(target: string):Result<boolean|undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_CREDIT_CARD_ERRORS.TARGET_ARGUMENT_NOT_A_STRING, \n      [target])\n  }\n  const sanitized = target.replace(/[- ]+/g, '');\n  if (!creditCard.test(sanitized)) {\n    return new Result(false);\n  }\n  let sum = 0;\n  let digit;\n  let tmpNum;\n  let shouldDouble;\n  for (let i = sanitized.length - 1; i >= 0; i--) {\n    digit = sanitized.substring(i, (i + 1));\n    tmpNum = parseInt(digit, 10);\n    if (shouldDouble) {\n      tmpNum *= 2;\n      if (tmpNum >= 10) {\n        sum += ((tmpNum % 10) + 1);\n      } else {\n        sum += tmpNum;\n      }\n    } else {\n      sum += tmpNum;\n    }\n    shouldDouble = !shouldDouble;\n  }\n  return new Result(!!((sum % 10) === 0 ? sanitized : false));\n}","import { merge } from '../utilities/merge';\nimport { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsCurrencyErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_CURRENCY_ERRORS: IsCurrencyErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\nfunction currencyRegex(options:any) {\n  let decimal_digits = `\\\\d{${options.digits_after_decimal[0]}}`;\n  options.digits_after_decimal.forEach((digit:number, index:number) => { if (index !== 0) decimal_digits = `${decimal_digits}|\\\\d{${digit}}`; });\n\n  const symbol =\n    `(${options.symbol.replace(/\\W/, (m:any)=> `\\\\${m}`)})${(options.require_symbol ? '' : '?')}`,\n    negative = '-?',\n    whole_dollar_amount_without_sep = '[1-9]\\\\d*',\n    whole_dollar_amount_with_sep = `[1-9]\\\\d{0,2}(\\\\${options.thousands_separator}\\\\d{3})*`,\n    valid_whole_dollar_amounts = [\n      '0', whole_dollar_amount_without_sep, whole_dollar_amount_with_sep],\n    whole_dollar_amount = `(${valid_whole_dollar_amounts.join('|')})?`,\n    decimal_amount = `(\\\\${options.decimal_separator}(${decimal_digits}))${options.require_decimal ? '' : '?'}`;\n  let pattern = whole_dollar_amount + (options.allow_decimal || options.require_decimal ? decimal_amount : '');\n\n  // default is negative sign before symbol, but there are two other options (besides parens)\n  if (options.allow_negatives && !options.parens_for_negatives) {\n    if (options.negative_sign_after_digits) {\n      pattern += negative;\n    } else if (options.negative_sign_before_digits) {\n      pattern = negative + pattern;\n    }\n  }\n\n  // South African Rand, for example, uses R 123 (space) and R-123 (no space)\n  if (options.allow_negative_sign_placeholder) {\n    pattern = `( (?!\\\\-))?${pattern}`;\n  } else if (options.allow_space_after_symbol) {\n    pattern = ` ?${pattern}`;\n  } else if (options.allow_space_after_digits) {\n    pattern += '( (?!$))?';\n  }\n\n  if (options.symbol_after_digits) {\n    pattern += symbol;\n  } else {\n    pattern = symbol + pattern;\n  }\n\n  if (options.allow_negatives) {\n    if (options.parens_for_negatives) {\n      pattern = `(\\\\(${pattern}\\\\)|${pattern})`;\n    } else if (!(options.negative_sign_before_digits || options.negative_sign_after_digits)) {\n      pattern = negative + pattern;\n    }\n  }\n\n  // ensure there's a dollar and/or decimal amount, and that\n  // it doesn't start with a space or a negative sign followed by a space\n  return new RegExp(`^(?!-? )(?=.*\\\\d)${pattern}$`);\n}\n\n\nconst default_currency_options = {\n  symbol: '$',\n  require_symbol: false,\n  allow_space_after_symbol: false,\n  symbol_after_digits: false,\n  allow_negatives: true,\n  parens_for_negatives: false,\n  negative_sign_before_digits: false,\n  negative_sign_after_digits: false,\n  allow_negative_sign_placeholder: false,\n  thousands_separator: ',',\n  decimal_separator: '.',\n  allow_decimal: true,\n  require_decimal: false,\n  digits_after_decimal: [2],\n  allow_space_after_digits: false,\n};\n\nexport interface IsCurrencyOptions {\n  symbol: string,\n  require_symbol: boolean,\n  allow_space_after_symbol: boolean,\n  symbol_after_digits: boolean,\n  allow_negatives: true,\n  parens_for_negatives: boolean,\n  negative_sign_before_digits: boolean,\n  negative_sign_after_digits: boolean,\n  allow_negative_sign_placeholder: boolean,\n  thousands_separator: string,\n  decimal_separator: string,\n  allow_decimal: true,\n  require_decimal: boolean,\n  digits_after_decimal: Array<number>,\n  allow_space_after_digits: boolean,\n}\n\n/**\n * Tests whether the `target` string is a currency\n *    \n * ### Example\n * ```\n * expect(isCurrency('1.39').value).toBeTruthy()\n * ```\n * @param target The target string\n * @param options The options\n */\nexport function isCurrency(target: string, options:any = default_currency_options):Result<boolean|undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_CURRENCY_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  options = merge(options, default_currency_options);\n  return new Result(currencyRegex(options).test(target));\n}","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsDataURIErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_DATA_URI_ERRORS: IsDataURIErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\nconst validMediaType = /^[a-z]+\\/[a-z0-9\\-\\+]+$/i;\n\nconst validAttribute = /^[a-z\\-]+=[a-z0-9\\-]+$/i;\n\nconst validData = /^[a-z0-9!\\$&'\\(\\)\\*\\+,;=\\-\\._~:@\\/\\?%\\s]*$/i;\n\n/**\n * Tests whether the `target` string is a data URI\n *    \n * ### Example\n * ```\n * expect(isDataURI('data:,A%20brief%20note').value).toBeTruthy()\n * ```\n * \n * @param target The target string\n * @param options The options\n * @return true if the `target` is a data URI, false otherwise\n */\nexport function isDataURI(target: string):Result<boolean|undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_DATA_URI_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  let data = target.split(',');\n  if (data.length < 2) {\n    return new Result(false);\n  }\n  const attributes = data && data.shift()!.trim().split(';');\n  const schemeAndMediaType = attributes.shift();\n  if (schemeAndMediaType!.substr(0, 5) !== 'data:') {\n    return new Result(false);\n  }\n  const mediaType = schemeAndMediaType!.substr(5);\n  if (mediaType !== '' && !validMediaType.test(mediaType)) {\n    return new Result(false);\n  }\n  for (let i = 0; i < attributes.length; i++) {\n    if (i === attributes.length - 1 && attributes[i].toLowerCase() === 'base64') {\n      // ok\n    } else if (!validAttribute.test(attributes[i])) {\n      return new Result(false);\n    }\n  }\n  for (let i = 0; i < data.length; i++) {\n    if (!validData.test(data[i])) {\n      return new Result(false);\n    }\n  }\n  return new Result(true);\n}","export const includes = (arr:any[], val:any) => arr.some(arrVal => val === arrVal);","import { merge } from '../utilities/merge';\nimport { includes } from '../utilities/includes';\nimport { decimal } from './alpha';\n\nimport { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsDecimalErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n  INVALID_LOCALE: MessageFunctionType;\n}\n\nexport const IS_DECIMAL_ERRORS: IsDecimalErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  },\n  INVALID_LOCALE: (arr?: string[]) => {\n    return `The locale ${arr![0]} is invalid.`;\n  }\n};\n\n\nfunction decimalRegExp(options:any) {\n  const regExp = new RegExp(`^[-+]?([0-9]+)?(\\\\${decimal[options.locale]}[0-9]{${options.decimal_digits}})${options.force_decimal ? '' : '?'}$`);\n  return regExp;\n}\n\n/**\n * The default options\n */\nconst default_decimal_options = {\n  force_decimal: false,\n  decimal_digits: '1,',\n  locale: 'en-US',\n};\n\nconst blacklist = ['', '-', '+'];\n\n/**\n * Checks whether the `target` string is a decimal\n *    \n * ### Example\n * ```\n * expect(isDecimal('-.25').value).toBeTruthy()\n * ```\n * \n * @param target The target string\n * @param options The options\n */\nexport function isDecimal(target: string, options:any):Result<boolean|undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_DECIMAL_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  options = merge(options, default_decimal_options);\n  if (options.locale in decimal) {\n    return new Result(!includes(blacklist, target.replace(/ /g, '')) && decimalRegExp(options).test(target));\n  }\n  return new Result(\n    undefined, \n    IS_DECIMAL_ERRORS.INVALID_LOCALE,\n    [options.locale])\n}","import { MessageFunctionType, Result } from '../types';\nimport { isNumber } from './isNumber';\n\nexport interface IsDivisibleByErrors {\n  TARGET_ARGUMENT_NOT_A_NUMBER: MessageFunctionType;\n  DIVISOR_ARGUMENT_NOT_A_NUMBER:MessageFunctionType;\n}\n\nexport const IS_DIVISIBLE_BY_ERRORS: IsDivisibleByErrors =\n{\n  TARGET_ARGUMENT_NOT_A_NUMBER: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a number.`;\n  },\n  DIVISOR_ARGUMENT_NOT_A_NUMBER: (arr?: string[]) => {\n    return `The divisor argument ${arr![0]} is not a number.`;\n  }\n};\n\n/**\n * Tests whether the `target` is divisible by the arg\n *    \n * ### Example\n * ```\n * expect(isDivisibleBy(2,2).value).toBeTruthy()\n * ```\n\n * @param target The target string\n * @param divisor The divisor\n */\nexport function isDivisibleBy(target: number, divisor: number):Result<boolean | undefined> {\n  if (!isNumber(target).value) {\n    return new Result(\n      undefined, \n      IS_DIVISIBLE_BY_ERRORS.TARGET_ARGUMENT_NOT_A_NUMBER,\n      [target ? target.toString(): ''])\n  }\n  if (!isNumber(divisor).value) {\n    return new Result(\n      undefined, \n      IS_DIVISIBLE_BY_ERRORS.DIVISOR_ARGUMENT_NOT_A_NUMBER,\n      [target ? target.toString(): ''])\n  }\n  return new Result( (target % divisor) === 0);\n}","/**\n * The most commonly used EAN standard is\n * the thirteen-digit EAN-13, while the\n * less commonly used 8-digit EAN-8 barcode was\n * introduced for use on small packages.\n * Also EAN/UCC-14 is used for Grouping of individual\n * trade items above unit level(Intermediate, Carton or Pallet).\n * For more info about EAN-14 checkout: https://www.gtin.info/itf-14-barcodes/\n * EAN consists of:\n * GS1 prefix, manufacturer code, product code and check digit\n * Reference: https://en.wikipedia.org/wiki/International_Article_Number\n * Reference: https://www.gtin.info/\n */\n\n import { MessageFunctionType, Result } from '../types';\n import { isString } from '../validators/isString';\n \n export interface IsEANErrors {\n   TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n }\n \n export const IS_EAN_ERRORS: IsEANErrors =\n {\n   TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n     return `The target argument ${arr![0]} is not a string.`;\n   }\n };\n \n/**\n * Define EAN Lenghts; 8 for EAN-8; 13 for EAN-13; 14 for EAN-14\n * and Regular Expression for valid EANs (EAN-8, EAN-13, EAN-14),\n * with exact numberic matching of 8 or 13 or 14 digits [0-9]\n */\n const LENGTH_EAN_8 = 8;\n const LENGTH_EAN_14 = 14;\n const validEanRegex = /^(\\d{8}|\\d{13}|\\d{14})$/;\n\n/**\n * Get position weight given:\n * EAN length and digit index/position\n * \n * @param length The EAN length\n * @param index The index/position\n * @return The the position weight\n */\nfunction getPositionWeightThroughLengthAndIndex(length:number, index:number) {\n  if (length === LENGTH_EAN_8 || length === LENGTH_EAN_14) {\n    return (index % 2 === 0) ? 3 : 1;\n  }\n  return (index % 2 === 0) ? 1 : 3;\n}\n\n/**\n * Calculate EAN Check Digit\n * Reference: https://en.wikipedia.org/wiki/International_Article_Number#Calculation_of_checksum_digit\n *\n * @param ean The ean\n * @return The check digit\n */\n function calculateCheckDigit(ean:string) {\n  const checksum = ean\n    .slice(0, -1)\n    .split('')\n    .map((char, index) => Number(char) * getPositionWeightThroughLengthAndIndex(ean.length, index))\n    .reduce((acc, partialSum) => acc + partialSum, 0);\n\n  const remainder = 10 - (checksum % 10);\n\n  return remainder < 10 ? remainder : 0;\n}\n\n/**\n * Test if string is valid EAN:\n * Matches EAN-8/EAN-13 regex\n * Has valid check digit.\n * \n *    \n * ### Example\n * ```\n * expect(isEAN('9421023610112').value).toBeTruthy()\n * ```\n * \n * @param target The target\n */\n export function isEAN(target: string):Result<boolean | undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_EAN_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  const actualCheckDigit = Number(target.slice(-1));\n\n  return new Result(validEanRegex.test(target) && actualCheckDigit === calculateCheckDigit(target));\n}","import { merge } from '../utilities/merge';\nimport { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsFQDNErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_FQDN_ERRORS: IsFQDNErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\n/**\n *  IsFQDN Options\n */\nexport interface IsFQDNOptions {\n  require_tld?: boolean;\n  allow_underscores?: boolean;\n  allow_trailing_dot?: boolean;\n  allow_numeric_tld?: boolean;\n  allow_wildcard?: boolean;\n}\n\nconst default_fqdn_options: IsFQDNOptions = {\n  require_tld: true,\n  allow_underscores: false,\n  allow_trailing_dot: false,\n  allow_numeric_tld: false,\n  allow_wildcard: false,\n};\n\n/**\n * Tests whether the `target` string is a FQDN\n * \n * @param target The target string\n * @param options The options\n *    \n * ### Example\n * ```\n * expect(isFQDN('domain.com').value).toBeTruthy()\n * ```\n */\nexport function isFQDN(target: string, options: IsFQDNOptions): Result<boolean | undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined,\n      IS_FQDN_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  options = merge(options, default_fqdn_options);\n\n  /* Remove the optional trailing dot before checking validity */\n  if (options.allow_trailing_dot && target[target.length - 1] === '.') {\n    target = target.substring(0, target.length - 1);\n  }\n\n  /* Remove the optional wildcard before checking validity */\n  if (options.allow_wildcard === true && target.indexOf('*.') === 0) {\n    target = target.substring(2);\n  }\n\n  const parts: any[] = target.split('.');\n  const tld = parts[parts.length - 1];\n\n  if (options.require_tld) {\n    // disallow fqdns without tld\n    if (parts.length < 2) {\n      return new Result(false);\n    }\n\n    if (!/^([a-z\\u00A1-\\u00A8\\u00AA-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]{2,}|xn[a-z0-9-]{2,})$/i.test(tld)) {\n      return new Result(false);\n    }\n\n    // disallow spaces\n    if (/\\s/.test(tld)) {\n      return new Result(false);\n    }\n  }\n  // reject numeric TLDs\n  if (!options.allow_numeric_tld && /^\\d+$/.test(tld)) {\n    return new Result(false);\n  }\n\n  return new Result(parts.every((part) => {\n    if (part.length > 63) {\n      return false;\n    }\n\n    if (!/^[a-z_\\u00a1-\\uffff0-9-]+$/i.test(part)) {\n      return false;\n    }\n\n    // disallow full-width chars\n    if (/[\\uff01-\\uff5e]/.test(part)) {\n      return false;\n    }\n\n    // disallow parts starting or ending with hyphen\n    if (/^-|-$/.test(part)) {\n      return false;\n    }\n\n    if (!options.allow_underscores && /_/.test(part)) {\n      return false;\n    }\n    return true;\n  }));\n}","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsIPErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_IP_ERRORS: IsIPErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\n/**\n11.3.  Examples\n   The following addresses\n             fe80::1234 (on the 1st link of the node)\n             ff02::5678 (on the 5th link of the node)\n             ff08::9abc (on the 10th organization of the node)\n   would be represented as follows:\n             fe80::1234%1\n             ff02::5678%5\n             ff08::9abc%10\n   (Here we assume a natural translation from a zone index to the\n   <zone_id> part, where the Nth zone of any scope is translated into\n   \"N\".)\n   If we use interface names as <zone_id>, those addresses could also be\n   represented as follows:\n            fe80::1234%ne0\n            ff02::5678%pvc1.3\n            ff08::9abc%interface10\n   where the interface \"ne0\" belongs to the 1st link, \"pvc1.3\" belongs\n   to the 5th link, and \"interface10\" belongs to the 10th organization.\n * * */\n   const IPv4SegmentFormat = '(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])';\n   const IPv4AddressFormat = `(${IPv4SegmentFormat}[.]){3}${IPv4SegmentFormat}`;\n   const IPv4AddressRegExp = new RegExp(`^${IPv4AddressFormat}$`);\n   \n   const IPv6SegmentFormat = '(?:[0-9a-fA-F]{1,4})';\n   const IPv6AddressRegExp = new RegExp('^(' +\n     `(?:${IPv6SegmentFormat}:){7}(?:${IPv6SegmentFormat}|:)|` +\n     `(?:${IPv6SegmentFormat}:){6}(?:${IPv4AddressFormat}|:${IPv6SegmentFormat}|:)|` +\n     `(?:${IPv6SegmentFormat}:){5}(?::${IPv4AddressFormat}|(:${IPv6SegmentFormat}){1,2}|:)|` +\n     `(?:${IPv6SegmentFormat}:){4}(?:(:${IPv6SegmentFormat}){0,1}:${IPv4AddressFormat}|(:${IPv6SegmentFormat}){1,3}|:)|` +\n     `(?:${IPv6SegmentFormat}:){3}(?:(:${IPv6SegmentFormat}){0,2}:${IPv4AddressFormat}|(:${IPv6SegmentFormat}){1,4}|:)|` +\n     `(?:${IPv6SegmentFormat}:){2}(?:(:${IPv6SegmentFormat}){0,3}:${IPv4AddressFormat}|(:${IPv6SegmentFormat}){1,5}|:)|` +\n     `(?:${IPv6SegmentFormat}:){1}(?:(:${IPv6SegmentFormat}){0,4}:${IPv4AddressFormat}|(:${IPv6SegmentFormat}){1,6}|:)|` +\n     `(?::((?::${IPv6SegmentFormat}){0,5}:${IPv4AddressFormat}|(?::${IPv6SegmentFormat}){1,7}|:))` +\n     ')(%[0-9a-zA-Z-.:]{1,})?$');\n\n/**\n * Tests whether the `target` string is an int\n *    \n * ### Example\n * ```\n * expect(isIP('127.0.0.1').value).toBeTruthy()\n * ```\n * \n * @param target The target string\n * @param version The version\n */\n\n export function isIP(target:string, version:string=''):Result<boolean | undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_IP_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  version = String(version);\n  if (!version) {\n    const result =  isIP(target, '4').value ?  isIP(target, '4') : isIP(target, '6')\n    return result\n  }\n  if (version === '4') {\n    if (!IPv4AddressRegExp.test(target)) {\n      return new Result(false);\n    }\n    const parts:any[] = target.split('.').sort((a:any, b:any) => a - b);\n    return new Result(parts[3] <= 255);\n  }\n  if (version === '6') {\n    return new Result(!!IPv6AddressRegExp.test(target));\n  }\n  return new Result(false);\n}","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsEMailErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_EMAIL_ERRORS: IsEMailErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\nimport { merge } from '../utilities/merge';\nimport { isByteLength } from './isByteLength';\nimport { isFQDN } from './isFQDN';\nimport { isIP } from './isIP';\n\n/**\n * IsEmail Options.\n */\nexport interface IsEmailOptions {\n  require_display_name?:boolean\n  allow_display_name?: boolean\n  allow_utf8_local_part?: boolean\n  require_tld?: boolean\n  blacklisted_chars: string,\n  ignore_max_length: boolean,\n  host_blacklist: any[],\n  domain_specific_validation:boolean\n  allow_ip_domain:boolean\n}\n\nconst default_email_options:IsEmailOptions = {\n  allow_display_name: false,\n  require_display_name: false,\n  allow_utf8_local_part: true,\n  require_tld: true,\n  blacklisted_chars: '',\n  ignore_max_length: false,\n  host_blacklist: [],\n  domain_specific_validation:false,\n  allow_ip_domain:false\n};\n\n/* eslint-disable max-len */\n/* eslint-disable no-control-regex */\nconst splitNameAddress = /^([^\\x00-\\x1F\\x7F-\\x9F\\cX]+)</i;\nconst emailUserPart = /^[a-z\\d!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]+$/i;\nconst gmailUserPart = /^[a-z\\d]+$/;\nconst quotedEmailUser = /^([\\s\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f\\x21\\x23-\\x5b\\x5d-\\x7e]|(\\\\[\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]))*$/i;\nconst emailUserUtf8Part = /^[a-z\\d!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]+$/i;\nconst quotedEmailUserUtf8 = /^([\\s\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f\\x21\\x23-\\x5b\\x5d-\\x7e\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]|(\\\\[\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))*$/i;\nconst defaultMaxEmailLength = 254;\n/* eslint-enable max-len */\n/* eslint-enable no-control-regex */\n\n/**\n * Validate display name according to the RFC2822: https://tools.ietf.org/html/rfc2822#appendix-A.1.2\n * @param display_name\n */\nfunction validateDisplayName(display_name:string) {\n  const display_name_without_quotes = display_name.replace(/^\"(.+)\"$/, '$1');\n  // display name with only spaces is not valid\n  if (!display_name_without_quotes.trim()) {\n    return false;\n  }\n\n  // check whether display name contains illegal character\n  const contains_illegal = /[\\.\";<>]/.test(display_name_without_quotes);\n  if (contains_illegal) {\n    // if contains illegal characters,\n    // must to be enclosed in double-quotes, otherwise it's not a valid display name\n    if (display_name_without_quotes === display_name) {\n      return false;\n    }\n\n    // the quotes in display name must start with character symbol \\\n    const all_start_with_back_slash =\n      display_name_without_quotes.split('\"').length === display_name_without_quotes.split('\\\\\"').length;\n    if (!all_start_with_back_slash) {\n      return false;\n    }\n  }\n  return true;\n}\n\n\n/**\n * Tests whether the `target` string is a valid email address\n *    \n * ### Example\n * ```\n * expect(isEmail('foo@bar.com').value).toBeTruthy()\n * ```\n * \n * @param target The target\n * @param options The options\n */\nexport function isEmail(target: string, options:IsEmailOptions = default_email_options):Result<boolean|undefined> {\n\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_EMAIL_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  options = merge(options, default_email_options);\n\n  if (options.require_display_name || options.allow_display_name) {\n    const display_email = target.match(splitNameAddress);\n    if (display_email) {\n      let display_name = display_email[1];\n\n      // Remove display name and angle brackets to get email address\n      // Can be done in the regex but will introduce a ReDOS (See  #1597 for more info)\n      target = target.replace(display_name, '').replace(/(^<|>$)/g, '');\n\n      // sometimes need to trim the last space to get the display name\n      // because there may be a space between display name and email address\n      // eg. myname <address@gmail.com>\n      // the display name is `myname` instead of `myname `, so need to trim the last space\n      if (display_name.endsWith(' ')) {\n        display_name = display_name.substr(0, display_name.length - 1);\n      }\n\n      if (!validateDisplayName(display_name)) {\n        return new Result(false);\n      }\n    } else if (options.require_display_name) {\n      return new Result(false);\n    }\n  }\n  if (!options.ignore_max_length && target.length > defaultMaxEmailLength) {\n    return new Result(false);\n  }\n\n  const parts = target.split('@');\n  const domain = parts.pop();\n  const lower_domain = domain!.toLowerCase();\n\n  if (options.host_blacklist.includes(lower_domain)) {\n    return new Result(false);\n  }\n\n  let user = parts.join('@');\n\n  if (options.domain_specific_validation && (lower_domain === 'gmail.com' || lower_domain === 'googlemail.com')) {\n    /*\n      Previously we removed dots for gmail addresses before validating.\n      This was removed because it allows `multiple..dots@gmail.com`\n      to be reported as valid, but it is not.\n      Gmail only normalizes single dots, removing them from here is pointless,\n      should be done in normalizeEmail\n    */\n    user = user.toLowerCase();\n\n    // Removing sub-address from username before gmail validation\n    const username = user.split('+')[0];\n\n    // Dots are not included in gmail length restriction\n    if (!isByteLength(username.replace(/\\./g, ''), { min: 6, max: 30 }).value) {\n      return new Result(false);\n    }\n\n    const user_parts = username.split('.');\n    for (let i = 0; i < user_parts.length; i++) {\n      if (!gmailUserPart.test(user_parts[i])) {\n        return new Result(false);\n      }\n    }\n  }\n\n  if (options.ignore_max_length === false && (\n    !isByteLength(user, { max: 64 }).value ||\n    !isByteLength(domain!, { max: 254 }).value)\n  ) {\n    return new Result(false);\n  }\n\n  if (!isFQDN(domain!, { require_tld: options.require_tld }).value) {\n\n    if (!options.allow_ip_domain) {\n      return new Result(false);\n    }\n\n    if (!isIP(domain!).value) {\n      if (!domain!.startsWith('[') || !domain!.endsWith(']')) {\n        return new Result(false);\n      }\n\n      let noBracketdomain = domain!.substr(1, domain!.length - 2);\n\n      if (noBracketdomain.length === 0 || !isIP(noBracketdomain).value) {\n        return new Result(false);\n      }\n    }\n  }\n\n  if (user[0] === '\"') {\n    user = user.slice(1, user.length - 1);\n\n    return new Result(options.allow_utf8_local_part ?\n      quotedEmailUserUtf8.test(user) :\n      quotedEmailUser.test(user));\n  }\n\n  const pattern = options.allow_utf8_local_part ?\n    emailUserUtf8Part : emailUserPart;\n\n  const user_parts = user.split('.');\n  for (let i = 0; i < user_parts.length; i++) {\n    if (!pattern.test(user_parts[i])) {\n      return new Result(false);\n    }\n  }\n  if (options.blacklisted_chars) {\n    if (user.search(new RegExp(`[${options.blacklisted_chars}]+`, 'g')) !== -1) {\n      return new Result(false);\n\n    } \n  }\n  return new Result(true);\n}","import { merge } from '../utilities/merge';\nimport { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsEmptyErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_EMPTY_ERRORS: IsEmptyErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\nconst default_is_empty_options = {\n  ignore_whitespace: false,\n};\n\n/**\n * Tests whether the `target` string is empty\n *    \n * ### Example\n * ```\n * expect(isEmpty('').value).toBeTruthy()\n * ```\n * \n * Note that `ignore_whitespace` is false by default.\n * \n * @param target The target string\n * @param options The options\n */\nexport function isEmpty(target: string, options:any):Result<boolean | undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_EMPTY_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  options = merge(options, default_is_empty_options);\n\n  return new Result((options.ignore_whitespace ? target.trim().length : target.length) === 0);\n}\n","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsEthereumAddressErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_ETHEREUM_ADDRESS_ERRORS: IsEthereumAddressErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\nconst eth = /^(0x)[0-9a-f]{40}$/i;\n\n/**\n * Tests whether the `target` is an ethereum address\n * \n *    \n * ### Example\n * ```\n * expect(isEthereumAddress('0x0000000000000000000000000000000000000001').value).toBeTruthy()\n * ```\n * \n * @param target The target string\n * \n */\nexport function isEthereumAddress(target: string):Result<boolean | undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_ETHEREUM_ADDRESS_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  return new Result(eth.test(target));\n}","import { decimal } from './alpha';\n\nimport { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsFloatErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_FLOAT_ERRORS: IsFloatErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\n/**\n * Tests whether the `target` string is a float\n * \n * @param target The target string\n * @param options The options\n * ### Example\n * ```\n * expect(isFloat('123.123').value).toBeTruthy()\n * ```\n */\nexport function isFloat(target: string, options?:any):Result<boolean|undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_FLOAT_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  options = options || {};\n  const float = new RegExp(`^(?:[-+])?(?:[0-9]+)?(?:\\\\${options.locale ? decimal[options.locale] : '.'}[0-9]*)?(?:[eE][\\\\+\\\\-]?(?:[0-9]+))?$`);\n  if (target === '' || target === '.' || target === '-' || target === '+') {\n    return new Result(false);\n  }\n  const value = parseFloat(target.replace(',', '.'));\n  return new Result(float.test(target) &&\n    (!options.hasOwnProperty('min') || value >= options.min) &&\n    (!options.hasOwnProperty('max') || value <= options.max) &&\n    (!options.hasOwnProperty('lt') || value < options.lt) &&\n    (!options.hasOwnProperty('gt') || value > options.gt));\n}\nexport const floatLocales = Object.keys(decimal);\n","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsFullWidthErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_FULL_WIDTH_ERRORS: IsFullWidthErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\nexport const fullWidth = /[^\\u0020-\\u007E\\uFF61-\\uFF9F\\uFFA0-\\uFFDC\\uFFE8-\\uFFEE0-9a-zA-Z]/;\n\n/**\n * Tests whether the `target` is full width\n *    \n * ### Example\n * ```\n * expect(isFullWidth('３ー０　ａ＠ｃｏｍ').value).toBeTruthy()\n * ```\n * \n * @param target The target string\n */\nexport function isFullWidth(target: string):Result<boolean|undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_FULL_WIDTH_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  return new Result(fullWidth.test(target));\n}\n","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsHalfWidthErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_HALF_WIDTH_ERRORS: IsHalfWidthErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\nexport const halfWidth = /[\\u0020-\\u007E\\uFF61-\\uFF9F\\uFFA0-\\uFFDC\\uFFE8-\\uFFEE0-9a-zA-Z]/;\n\n/**\n * Tests whether the `target` is half width\n *    \n * ### Example\n * ```\n * expect(isHalfWidth('l-btn_02--active').value).toBeTruthy()\n * ```\n * \n * @param target The target string\n */\nexport function isHalfWidth(target: string):Result<boolean|undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_HALF_WIDTH_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  return new Result(halfWidth.test(target));\n}","import { StringKeyNumber } from '../types';\nimport { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsHashErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_HASH_ERRORS: IsHashErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\nconst lengths:StringKeyNumber = {\n  md5: 32,\n  md4: 32,\n  sha1: 40,\n  sha256: 64,\n  sha384: 96,\n  sha512: 128,\n  ripemd128: 32,\n  ripemd160: 40,\n  tiger128: 32,\n  tiger160: 40,\n  tiger192: 48,\n  crc32: 8,\n  crc32b: 8,\n};\n\n/**\n * Tests whether the `target` string is hashed using the `arg` algorithm\n * \n * ### Example\n * ```\n * expect(isHash('d94f3f016ae679c3008de268209132f2', 'md5').value).toBeTruthy()\n * ```\n * \n * @param target The target string\n * @param arg The arg\n */\nexport function isHash(target: string, arg:string):Result<boolean | undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_HASH_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  const hash = new RegExp(`^[a-fA-F0-9]{${lengths[arg]}}$`);\n  return new Result(hash.test(target));\n}\n","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsHexadecimalErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_HEXADECIMAL_ERRORS: IsHexadecimalErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\nconst hexadecimal = /^(0x|0h)?[0-9A-F]+$/i;\n\n/**\n * Tests whether the `target` is hexadecimal\n *    \n * ### Example\n * ```\n * expect(isHexadecimal('deadBEEF').value).toBeTruthy()\n * ```\n * @param target The target string\n */\nexport function isHexadecimal(target: string):Result<boolean|undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_HEXADECIMAL_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  return new Result(hexadecimal.test(target));\n}\n","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsHexColorErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_HEXCOLOR_ERRORS: IsHexColorErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\nconst hexcolor = /^#?([0-9A-F]{3}|[0-9A-F]{4}|[0-9A-F]{6}|[0-9A-F]{8})$/i;\n\n/**\n * Checks whether the `target` is hexcolor\n *    \n * ### Example\n * ```\n * expect(isHexColor('0xff0044').value).toBeTruthy()\n * ```\n * @param target The target\n */\nexport function isHexColor(target:string):Result<boolean|undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_HEXCOLOR_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  return new Result(hexcolor.test(target));\n}\n","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsHSLErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_HSL_ERRORS: IsHSLErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\n\nconst hslcomma = /^(hsl)a?\\(\\s*((\\+|\\-)?([0-9]+(\\.[0-9]+)?(e(\\+|\\-)?[0-9]+)?|\\.[0-9]+(e(\\+|\\-)?[0-9]+)?))(deg|grad|rad|turn|\\s*)(\\s*,\\s*(\\+|\\-)?([0-9]+(\\.[0-9]+)?(e(\\+|\\-)?[0-9]+)?|\\.[0-9]+(e(\\+|\\-)?[0-9]+)?)%){2}\\s*(,\\s*((\\+|\\-)?([0-9]+(\\.[0-9]+)?(e(\\+|\\-)?[0-9]+)?|\\.[0-9]+(e(\\+|\\-)?[0-9]+)?)%?)\\s*)?\\)$/i;\nconst hslspace = /^(hsl)a?\\(\\s*((\\+|\\-)?([0-9]+(\\.[0-9]+)?(e(\\+|\\-)?[0-9]+)?|\\.[0-9]+(e(\\+|\\-)?[0-9]+)?))(deg|grad|rad|turn|\\s)(\\s*(\\+|\\-)?([0-9]+(\\.[0-9]+)?(e(\\+|\\-)?[0-9]+)?|\\.[0-9]+(e(\\+|\\-)?[0-9]+)?)%){2}\\s*(\\/\\s*((\\+|\\-)?([0-9]+(\\.[0-9]+)?(e(\\+|\\-)?[0-9]+)?|\\.[0-9]+(e(\\+|\\-)?[0-9]+)?)%?)\\s*)?\\)$/i;\n\n/**\n * Tests whether the `target` is HSL color\n *    \n * ### Example\n * ```\n * expect(isHSL('hsL(0, 0%, 0%)').value).toBeTruthy()\n * ```\n * @param target The target string\n */\nexport function isHSL(target: string):Result<boolean|undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_HSL_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  return new Result(hslcomma.test(target) || hslspace.test(target));\n}\n","import { StringKeyRegEx } from '../types';\nimport { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsIBANErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_IBAN_ERRORS: IsIBANErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\n/**\n * List of country codes with\n * corresponding IBAN regular expression\n * Reference: https://en.wikipedia.org/wiki/International_Bank_Account_Number\n */\n const ibanRegexThroughCountryCode:StringKeyRegEx = {\n  AD: /^(AD[0-9]{2})\\d{8}[A-Z0-9]{12}$/,\n  AE: /^(AE[0-9]{2})\\d{3}\\d{16}$/,\n  AL: /^(AL[0-9]{2})\\d{8}[A-Z0-9]{16}$/,\n  AT: /^(AT[0-9]{2})\\d{16}$/,\n  AZ: /^(AZ[0-9]{2})[A-Z0-9]{4}\\d{20}$/,\n  BA: /^(BA[0-9]{2})\\d{16}$/,\n  BE: /^(BE[0-9]{2})\\d{12}$/,\n  BG: /^(BG[0-9]{2})[A-Z]{4}\\d{6}[A-Z0-9]{8}$/,\n  BH: /^(BH[0-9]{2})[A-Z]{4}[A-Z0-9]{14}$/,\n  BR: /^(BR[0-9]{2})\\d{23}[A-Z]{1}[A-Z0-9]{1}$/,\n  BY: /^(BY[0-9]{2})[A-Z0-9]{4}\\d{20}$/,\n  CH: /^(CH[0-9]{2})\\d{5}[A-Z0-9]{12}$/,\n  CR: /^(CR[0-9]{2})\\d{18}$/,\n  CY: /^(CY[0-9]{2})\\d{8}[A-Z0-9]{16}$/,\n  CZ: /^(CZ[0-9]{2})\\d{20}$/,\n  DE: /^(DE[0-9]{2})\\d{18}$/,\n  DK: /^(DK[0-9]{2})\\d{14}$/,\n  DO: /^(DO[0-9]{2})[A-Z]{4}\\d{20}$/,\n  EE: /^(EE[0-9]{2})\\d{16}$/,\n  EG: /^(EG[0-9]{2})\\d{25}$/,\n  ES: /^(ES[0-9]{2})\\d{20}$/,\n  FI: /^(FI[0-9]{2})\\d{14}$/,\n  FO: /^(FO[0-9]{2})\\d{14}$/,\n  FR: /^(FR[0-9]{2})\\d{10}[A-Z0-9]{11}\\d{2}$/,\n  GB: /^(GB[0-9]{2})[A-Z]{4}\\d{14}$/,\n  GE: /^(GE[0-9]{2})[A-Z0-9]{2}\\d{16}$/,\n  GI: /^(GI[0-9]{2})[A-Z]{4}[A-Z0-9]{15}$/,\n  GL: /^(GL[0-9]{2})\\d{14}$/,\n  GR: /^(GR[0-9]{2})\\d{7}[A-Z0-9]{16}$/,\n  GT: /^(GT[0-9]{2})[A-Z0-9]{4}[A-Z0-9]{20}$/,\n  HR: /^(HR[0-9]{2})\\d{17}$/,\n  HU: /^(HU[0-9]{2})\\d{24}$/,\n  IE: /^(IE[0-9]{2})[A-Z0-9]{4}\\d{14}$/,\n  IL: /^(IL[0-9]{2})\\d{19}$/,\n  IQ: /^(IQ[0-9]{2})[A-Z]{4}\\d{15}$/,\n  IR: /^(IR[0-9]{2})0\\d{2}0\\d{18}$/,\n  IS: /^(IS[0-9]{2})\\d{22}$/,\n  IT: /^(IT[0-9]{2})[A-Z]{1}\\d{10}[A-Z0-9]{12}$/,\n  JO: /^(JO[0-9]{2})[A-Z]{4}\\d{22}$/,\n  KW: /^(KW[0-9]{2})[A-Z]{4}[A-Z0-9]{22}$/,\n  KZ: /^(KZ[0-9]{2})\\d{3}[A-Z0-9]{13}$/,\n  LB: /^(LB[0-9]{2})\\d{4}[A-Z0-9]{20}$/,\n  LC: /^(LC[0-9]{2})[A-Z]{4}[A-Z0-9]{24}$/,\n  LI: /^(LI[0-9]{2})\\d{5}[A-Z0-9]{12}$/,\n  LT: /^(LT[0-9]{2})\\d{16}$/,\n  LU: /^(LU[0-9]{2})\\d{3}[A-Z0-9]{13}$/,\n  LV: /^(LV[0-9]{2})[A-Z]{4}[A-Z0-9]{13}$/,\n  MC: /^(MC[0-9]{2})\\d{10}[A-Z0-9]{11}\\d{2}$/,\n  MD: /^(MD[0-9]{2})[A-Z0-9]{20}$/,\n  ME: /^(ME[0-9]{2})\\d{18}$/,\n  MK: /^(MK[0-9]{2})\\d{3}[A-Z0-9]{10}\\d{2}$/,\n  MR: /^(MR[0-9]{2})\\d{23}$/,\n  MT: /^(MT[0-9]{2})[A-Z]{4}\\d{5}[A-Z0-9]{18}$/,\n  MU: /^(MU[0-9]{2})[A-Z]{4}\\d{19}[A-Z]{3}$/,\n  MZ: /^(MZ[0-9]{2})\\d{21}$/,\n  NL: /^(NL[0-9]{2})[A-Z]{4}\\d{10}$/,\n  NO: /^(NO[0-9]{2})\\d{11}$/,\n  PK: /^(PK[0-9]{2})[A-Z0-9]{4}\\d{16}$/,\n  PL: /^(PL[0-9]{2})\\d{24}$/,\n  PS: /^(PS[0-9]{2})[A-Z0-9]{4}\\d{21}$/,\n  PT: /^(PT[0-9]{2})\\d{21}$/,\n  QA: /^(QA[0-9]{2})[A-Z]{4}[A-Z0-9]{21}$/,\n  RO: /^(RO[0-9]{2})[A-Z]{4}[A-Z0-9]{16}$/,\n  RS: /^(RS[0-9]{2})\\d{18}$/,\n  SA: /^(SA[0-9]{2})\\d{2}[A-Z0-9]{18}$/,\n  SC: /^(SC[0-9]{2})[A-Z]{4}\\d{20}[A-Z]{3}$/,\n  SE: /^(SE[0-9]{2})\\d{20}$/,\n  SI: /^(SI[0-9]{2})\\d{15}$/,\n  SK: /^(SK[0-9]{2})\\d{20}$/,\n  SM: /^(SM[0-9]{2})[A-Z]{1}\\d{10}[A-Z0-9]{12}$/,\n  SV: /^(SV[0-9]{2})[A-Z0-9]{4}\\d{20}$/,\n  TL: /^(TL[0-9]{2})\\d{19}$/,\n  TN: /^(TN[0-9]{2})\\d{20}$/,\n  TR: /^(TR[0-9]{2})\\d{5}[A-Z0-9]{17}$/,\n  UA: /^(UA[0-9]{2})\\d{6}[A-Z0-9]{19}$/,\n  VA: /^(VA[0-9]{2})\\d{18}$/,\n  VG: /^(VG[0-9]{2})[A-Z0-9]{4}\\d{16}$/,\n  XK: /^(XK[0-9]{2})\\d{16}$/\n};\n\n/**\n * Test whether string has correct universal IBAN format\n * The IBAN consists of up to 34 alphanumeric characters, as follows:\n * Country Code using ISO 3166-1 alpha-2, two letters\n * check digits, two digits and\n * Basic Bank Account Number (BBAN), up to 30 alphanumeric characters.\n * NOTE: Permitted IBAN characters are: digits [0-9] and the 26 latin alphabetic [A-Z]\n *    \n * ### Example\n * ```\n * expect(hasValidIbanFormat('SC52BAHL01031234567890123456USD').value).toBeTruthy()\n * ```\n * @param str - string under validation\n */\nfunction hasValidIbanFormat(str:string) {\n  // Strip white spaces and hyphens, keep only digits and A-Z latin alphabetic\n  const strippedStr = str.replace(/[\\s\\-]+/gi, '').toUpperCase();                                  \n  const isoCountryCode = strippedStr.slice(0, 2).toUpperCase();\n\n  return (isoCountryCode in ibanRegexThroughCountryCode) &&\n    ibanRegexThroughCountryCode[isoCountryCode].test(strippedStr);\n}\n\n/**\n   * Check whether string has valid IBAN Checksum\n   * by performing basic mod-97 operation and\n   * the remainder should equal 1\n   * -- Start by rearranging the IBAN by moving the four initial characters to the end of the string\n   * -- Replace each letter in the string with two digits, A -> 10, B = 11, Z = 35\n   * -- Interpret the string as a decimal integer and\n   * -- compute the remainder on division by 97 (mod 97)\n   * Reference: https://en.wikipedia.org/wiki/International_Bank_Account_Number\n   *\n   * @param target The target string\n   * @return true if the string has a valid IBAN checksum, false otherwise\n   */\nfunction hasValidIbanChecksum(target:string):boolean {\n  const strippedStr = target.replace(/[^A-Z0-9]+/gi, '').toUpperCase(); // Keep only digits and A-Z latin alphabetic\n  const rearranged = strippedStr.slice(4) + strippedStr.slice(0, 4);\n  const alphaCapsReplacedWithDigits = rearranged.replace(/[A-Z]/g, (char:string) => (char.charCodeAt(0) - 55).toString());\n\n    const remainder = alphaCapsReplacedWithDigits.match(/\\d{1,7}/g)!\n    .reduce((acc, value) => (Number(acc + value) % 97).toString(), '');\n\n  return parseInt(remainder) === 1;\n}\n/**\n * Checks whether the IBAN number has a valid format and checksum.\n * \n * @param target The target string\n * @return true if the target has a valid format and checksum, false otherwise\n */\nexport function isIBAN(target: string):Result<boolean|undefined> {\n  if (!isString(target)) {\n    return new Result(\n      undefined, \n      IS_IBAN_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n\n  return new Result(hasValidIbanFormat(target) && hasValidIbanChecksum(target));\n}\n","import { MessageFunctionType, Result } from '../types';\nimport { isString } from './isString';\n\nexport interface IsIntStringErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_INT_STRING_ERRORS: IsIntStringErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\nconst int = /^(?:[-+]?(?:0|[1-9][0-9]*))$/;\nconst intLeadingZeroes = /^[-+]?[0-9]+$/;\n\n/**\n * Tests whether the `target` string is an int\n *    \n * ### Example\n * ```\n * expect(isIntString('13').value).toBeTruthy()\n * ```\n * \n * @param target The target string\n * @param options The options\n */\nexport function isIntString(target: string, options:any):Result<boolean|undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_INT_STRING_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  options = options || {};\n\n  // Get the regex to use for testing, based on whether\n  // leading zeroes are allowed or not.\n  let regex = (\n    options.hasOwnProperty('allow_leading_zeroes') && !options.allow_leading_zeroes ?\n      int : intLeadingZeroes\n  );\n\n  // Check min/max/lt/gt\n  let minCheckPassed = (!options.hasOwnProperty('min') || target >= options.min);\n  let maxCheckPassed = (!options.hasOwnProperty('max') || target <= options.max);\n  let ltCheckPassed = (!options.hasOwnProperty('lt') || target < options.lt);\n  let gtCheckPassed = (!options.hasOwnProperty('gt') || target > options.gt);\n\n  return new Result(regex.test(target) && minCheckPassed && maxCheckPassed && ltCheckPassed && gtCheckPassed);\n}\n","import { Result } from '../types';\n\n/**\n * Checks if value is an integer.\n * @param value The value being checked.\n * @return True if the value is an integer, false otherwise.\n */\n export function isInt(val: any): Result<boolean | undefined> {\n    return new Result(Number.isInteger(val));\n}","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsISBNErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_ISBN_ERRORS: IsISBNErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\nconst isbn10Maybe = /^(?:[0-9]{9}X|[0-9]{10})$/;\nconst isbn13Maybe = /^(?:[0-9]{13})$/;\nconst factor = [1, 3];\n\n/**\n * Test whether the target string is an ISBN number.\n *    \n * ### Example\n * ```\n * expect(isISBN('3836221195').value).toBeTruthy()\n * ```\n * \n * @param target The string\n * @param version The ISBN version\n */\nexport function isISBN(target: string, version: string = ''):Result<boolean|undefined>  {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_ISBN_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n    version = String(version);\n  if (!version) {\n    return isISBN(target, '10') || isISBN(target, '13');\n  }\n  const sanitized = target.replace(/[\\s-]+/g, '');\n  let checksum = 0;\n  let i;\n  if (version === '10') {\n    if (!isbn10Maybe.test(sanitized)) {\n      return new Result(false);\n    }\n    for (i = 0; i < 9; i++) {\n      checksum += (i + 1) * parseInt(sanitized.charAt(i));\n    }\n    if (sanitized.charAt(9) === 'X') {\n      checksum += 10 * 10;\n    } else {\n      checksum += 10 * parseInt(sanitized.charAt(9));\n    }\n    if (checksum % 11 === 0) {\n      return new Result(!!sanitized);\n    }\n  } else if (version === '13') {\n    if (!isbn13Maybe.test(sanitized)) {\n      return new Result(false);\n    }\n    for (i = 0; i < 12; i++) {\n      checksum += factor[i % 2] * parseInt(sanitized.charAt(i));\n    }\n    if (parseInt(sanitized.charAt(12)) - ((10 - (checksum % 10)) % 10) === 0) {\n      return new Result(!!sanitized);\n    }\n  }\n  return new Result(false);\n}","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsISINErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_ISIN_ERRORS: IsISINErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\nconst isin = /^[A-Z]{2}[0-9A-Z]{9}[0-9]$/;\n\n\n/**\n * Test whether the target string is an ISBN number.\n *    \n * ### Example\n * ```\n * expect(isISIN('AU0000XVGZA3').value).toBeTruthy()\n * ```\n * @param target The string\n */\nexport function isISIN(target:string):Result<boolean|undefined>  {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_ISIN_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  if (!isin.test(target)) {\n    return new Result(false);\n  }\n\n  const checksumStr = target.replace(/[A-Z]/g, character => {\n    const intValue = (parseInt(character, 36))\n    return intValue ? intValue.toString() : ''\n  });\n\n  let sum = 0;\n  let digit;\n  let tmpNum;\n  let shouldDouble = true;\n  for (let i = checksumStr.length - 2; i >= 0; i--) {\n    digit = checksumStr.substring(i, (i + 1));\n    tmpNum = parseInt(digit, 10);\n    if (shouldDouble) {\n      tmpNum *= 2;\n      if (tmpNum >= 10) {\n        sum += tmpNum + 1;\n      } else {\n        sum += tmpNum;\n      }\n    } else {\n      sum += tmpNum;\n    }\n    shouldDouble = !shouldDouble;\n  }\n  return new Result(parseInt(target.substr(target.length - 1), 10) === (10000 - sum) % 10);\n}\n","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsISO8601Errors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_ISO8601_ERRORS: IsISO8601Errors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\n/* eslint-disable max-len */\n// from http://goo.gl/0ejHHW\nconst iso8601 = /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-3])((:?)[0-5]\\d)?|24:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/;\n// same as above, except with a strict 'T' separator between date and time\nconst iso8601StrictSeparator = /^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T]((([01]\\d|2[0-3])((:?)[0-5]\\d)?|24:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$/;\n/* eslint-enable max-len */\nconst isValidDate = (str:string) => {\n  // str must have passed the ISO8601 check\n  // this check is meant to catch invalid dates\n  // like 2009-02-31\n  // first check for ordinal dates\n  const ordinalMatch = str.match(/^(\\d{4})-?(\\d{3})([ T]{1}\\.*|$)/);\n  if (ordinalMatch) {\n    const oYear = Number(ordinalMatch[1]);\n    const oDay = Number(ordinalMatch[2]);\n    // if is leap year\n    if ((oYear % 4 === 0 && oYear % 100 !== 0) || oYear % 400 === 0) return oDay <= 366;\n    return oDay <= 365;\n  }\n  const match = str.match(/(\\d{4})-?(\\d{0,2})-?(\\d*)/)!.map(Number);\n  const year = match[1];\n  const month = match[2];\n  const day = match[3];\n  const monthString = month ? `0${month}`.slice(-2) : month;\n  const dayString = day ? `0${day}`.slice(-2) : day;\n\n  // create a date object and compare\n  const d = new Date(`${year}-${monthString || '01'}-${dayString || '01'}`);\n  if (month && day) {\n    return d.getUTCFullYear() === year\n      && (d.getUTCMonth() + 1) === month\n      && d.getUTCDate() === day;\n  }\n  return true;\n};\n/**\n * Checks whether the `target` string is a valid ISO8601 date\n *    \n * ### Example\n * ```\n * expect(isISO8601('2009-05-19').value).toBeTruthy()\n * ```\n * \n * @param target The target string\n * @param options The options\n */\nexport function isISO8601(target:string, options:any = {}):Result<boolean|undefined>  {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_ISO8601_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  const check = options.strictSeparator ? iso8601StrictSeparator.test(target) : iso8601.test(target);\n  if (check && options.strict) {\n    return new Result(isValidDate(target));\n  }\n  return new Result(check);\n}","import { includes } from '../utilities/includes';\nimport { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsISO31661Alpha2Errors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_ISO31661ALPHA2_ERRORS: IsISO31661Alpha2Errors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\n// from https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2\nconst validISO31661Alpha2CountriesCodes = [\n  'AD', 'AE', 'AF', 'AG', 'AI', 'AL', 'AM', 'AO', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AW', 'AX', 'AZ',\n  'BA', 'BB', 'BD', 'BE', 'BF', 'BG', 'BH', 'BI', 'BJ', 'BL', 'BM', 'BN', 'BO', 'BQ', 'BR', 'BS', 'BT', 'BV', 'BW', 'BY', 'BZ',\n  'CA', 'CC', 'CD', 'CF', 'CG', 'CH', 'CI', 'CK', 'CL', 'CM', 'CN', 'CO', 'CR', 'CU', 'CV', 'CW', 'CX', 'CY', 'CZ',\n  'DE', 'DJ', 'DK', 'DM', 'DO', 'DZ',\n  'EC', 'EE', 'EG', 'EH', 'ER', 'ES', 'ET',\n  'FI', 'FJ', 'FK', 'FM', 'FO', 'FR',\n  'GA', 'GB', 'GD', 'GE', 'GF', 'GG', 'GH', 'GI', 'GL', 'GM', 'GN', 'GP', 'GQ', 'GR', 'GS', 'GT', 'GU', 'GW', 'GY',\n  'HK', 'HM', 'HN', 'HR', 'HT', 'HU',\n  'ID', 'IE', 'IL', 'IM', 'IN', 'IO', 'IQ', 'IR', 'IS', 'IT',\n  'JE', 'JM', 'JO', 'JP',\n  'KE', 'KG', 'KH', 'KI', 'KM', 'KN', 'KP', 'KR', 'KW', 'KY', 'KZ',\n  'LA', 'LB', 'LC', 'LI', 'LK', 'LR', 'LS', 'LT', 'LU', 'LV', 'LY',\n  'MA', 'MC', 'MD', 'ME', 'MF', 'MG', 'MH', 'MK', 'ML', 'MM', 'MN', 'MO', 'MP', 'MQ', 'MR', 'MS', 'MT', 'MU', 'MV', 'MW', 'MX', 'MY', 'MZ',\n  'NA', 'NC', 'NE', 'NF', 'NG', 'NI', 'NL', 'NO', 'NP', 'NR', 'NU', 'NZ',\n  'OM',\n  'PA', 'PE', 'PF', 'PG', 'PH', 'PK', 'PL', 'PM', 'PN', 'PR', 'PS', 'PT', 'PW', 'PY',\n  'QA',\n  'RE', 'RO', 'RS', 'RU', 'RW',\n  'SA', 'SB', 'SC', 'SD', 'SE', 'SG', 'SH', 'SI', 'SJ', 'SK', 'SL', 'SM', 'SN', 'SO', 'SR', 'SS', 'ST', 'SV', 'SX', 'SY', 'SZ',\n  'TC', 'TD', 'TF', 'TG', 'TH', 'TJ', 'TK', 'TL', 'TM', 'TN', 'TO', 'TR', 'TT', 'TV', 'TW', 'TZ',\n  'UA', 'UG', 'UM', 'US', 'UY', 'UZ',\n  'VA', 'VC', 'VE', 'VG', 'VI', 'VN', 'VU',\n  'WF', 'WS',\n  'YE', 'YT',\n  'ZA', 'ZM', 'ZW',\n];\n\n/**\n * Check whether the `target` string is a valid \n * ISO 3166-1 alpha-2 officially assigned country code\n *    \n * ### Example\n * ```\n * expect(isISO31661Alpha2('FR').value).toBeTruthy()\n * ```\n * @param target The target string\n */\nexport function isISO31661Alpha2(target:string):Result<boolean|undefined>  {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_ISO31661ALPHA2_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  return new Result(includes(validISO31661Alpha2CountriesCodes, target.toUpperCase()));\n}\n","import { includes } from '../utilities/includes';\nimport { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsISO31661Alpha3Errors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_ISO31661ALPHA_ERRORS: IsISO31661Alpha3Errors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\n// from https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3\nconst validISO31661Alpha3CountriesCodes = [\n  'AFG', 'ALA', 'ALB', 'DZA', 'ASM', 'AND', 'AGO', 'AIA', 'ATA', 'ATG', 'ARG', 'ARM', 'ABW', 'AUS', 'AUT', 'AZE',\n  'BHS', 'BHR', 'BGD', 'BRB', 'BLR', 'BEL', 'BLZ', 'BEN', 'BMU', 'BTN', 'BOL', 'BES', 'BIH', 'BWA', 'BVT', 'BRA',\n  'IOT', 'BRN', 'BGR', 'BFA', 'BDI', 'KHM', 'CMR', 'CAN', 'CPV', 'CYM', 'CAF', 'TCD', 'CHL', 'CHN', 'CXR', 'CCK',\n  'COL', 'COM', 'COG', 'COD', 'COK', 'CRI', 'CIV', 'HRV', 'CUB', 'CUW', 'CYP', 'CZE', 'DNK', 'DJI', 'DMA', 'DOM',\n  'ECU', 'EGY', 'SLV', 'GNQ', 'ERI', 'EST', 'ETH', 'FLK', 'FRO', 'FJI', 'FIN', 'FRA', 'GUF', 'PYF', 'ATF', 'GAB',\n  'GMB', 'GEO', 'DEU', 'GHA', 'GIB', 'GRC', 'GRL', 'GRD', 'GLP', 'GUM', 'GTM', 'GGY', 'GIN', 'GNB', 'GUY', 'HTI',\n  'HMD', 'VAT', 'HND', 'HKG', 'HUN', 'ISL', 'IND', 'IDN', 'IRN', 'IRQ', 'IRL', 'IMN', 'ISR', 'ITA', 'JAM', 'JPN',\n  'JEY', 'JOR', 'KAZ', 'KEN', 'KIR', 'PRK', 'KOR', 'KWT', 'KGZ', 'LAO', 'LVA', 'LBN', 'LSO', 'LBR', 'LBY', 'LIE',\n  'LTU', 'LUX', 'MAC', 'MKD', 'MDG', 'MWI', 'MYS', 'MDV', 'MLI', 'MLT', 'MHL', 'MTQ', 'MRT', 'MUS', 'MYT', 'MEX',\n  'FSM', 'MDA', 'MCO', 'MNG', 'MNE', 'MSR', 'MAR', 'MOZ', 'MMR', 'NAM', 'NRU', 'NPL', 'NLD', 'NCL', 'NZL', 'NIC',\n  'NER', 'NGA', 'NIU', 'NFK', 'MNP', 'NOR', 'OMN', 'PAK', 'PLW', 'PSE', 'PAN', 'PNG', 'PRY', 'PER', 'PHL', 'PCN',\n  'POL', 'PRT', 'PRI', 'QAT', 'REU', 'ROU', 'RUS', 'RWA', 'BLM', 'SHN', 'KNA', 'LCA', 'MAF', 'SPM', 'VCT', 'WSM',\n  'SMR', 'STP', 'SAU', 'SEN', 'SRB', 'SYC', 'SLE', 'SGP', 'SXM', 'SVK', 'SVN', 'SLB', 'SOM', 'ZAF', 'SGS', 'SSD',\n  'ESP', 'LKA', 'SDN', 'SUR', 'SJM', 'SWZ', 'SWE', 'CHE', 'SYR', 'TWN', 'TJK', 'TZA', 'THA', 'TLS', 'TGO', 'TKL',\n  'TON', 'TTO', 'TUN', 'TUR', 'TKM', 'TCA', 'TUV', 'UGA', 'UKR', 'ARE', 'GBR', 'USA', 'UMI', 'URY', 'UZB', 'VUT',\n  'VEN', 'VNM', 'VGB', 'VIR', 'WLF', 'ESH', 'YEM', 'ZMB', 'ZWE',\n];\n\n/**\n * Check whether the `target` string is a valid \n * ISO 3166-1 alpha-3 officially assigned country code\n * \n * ### Example\n * ```\n * expect(isISO31661Alpha3('ABW').value).toBeTruthy()\n * ```\n * @param target The target string\n */\nexport function isISO31661Alpha3(target:string):Result<boolean|undefined>  {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_ISO31661ALPHA_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  return new Result(includes(validISO31661Alpha3CountriesCodes, target.toUpperCase()));\n}\n","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsISRCErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_ISRC_ERRORS: IsISRCErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\n// see http://isrc.ifpi.org/en/isrc-standard/code-syntax\nconst isrc = /^[A-Z]{2}[0-9A-Z]{3}\\d{2}\\d{5}$/;\n\n\n/**\n * Checks whether the `target` string is a valid ISRC\n *\n * ### Example\n * ```\n * expect(isISRC('USAT29900609').value).toBeTruthy()\n * ```\n * @param target The target string\n */\nexport function isISRC(target:string):Result<boolean|undefined>  {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_ISRC_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  return new Result(isrc.test(target));\n}","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsISSNErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_ISSN_ERRORS: IsISSNErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\nconst issn = '^\\\\d{4}-?\\\\d{3}[\\\\dX]$';\n\n/**\n * Tests whether the `target` string is a valid ISSN\n *\n * ### Example\n * ```\n * expect(isISSN('0378-5955').value).toBeTruthy()\n * ```\n * @param target The target\n * @param options The options\n */\nexport function isISSN(target: string, options: any = {}): Result<boolean | undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined,\n      IS_ISSN_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  let testIssn: any = issn;\n  testIssn = options.require_hyphen ? testIssn.replace('?', '') : testIssn;\n  testIssn = options.case_sensitive ? new RegExp(testIssn) : new RegExp(testIssn, 'i');\n  if (!testIssn.test(target)) {\n    return new Result(false);\n  }\n  const digits = target.replace('-', '').toUpperCase();\n  let checksum = 0;\n  for (let i = 0; i < digits.length; i++) {\n    const digit = digits[i];\n    checksum += (digit === 'X' ? 10 : +digit) * (8 - i);\n  }\n  return new Result(checksum % 11 === 0);\n}\n","import { MessageFunctionType, Result } from '../types';\nimport { merge } from '../utilities/merge';\nimport { isString } from '../validators/isString';\n\nexport interface IsJSONErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_JSON_ERRORS: IsJSONErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\nconst default_json_options = {\n  allow_primitives: false,\n};\n\n/**\n * Tests whether the `target` string is valid JSON\n *    \n * ### Example\n * ```\n * expect(isJSON('{ \"key\": \"value\" }').value).toBeTruthy()\n * ```\n * @param target The target string\n */\nexport function isJSON(target: string, options: any): Result<boolean | undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined,\n      IS_JSON_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  try {\n    options = merge(options, default_json_options);\n    let primitives: any[] = [];\n    if (options.allow_primitives) {\n      primitives = [null, false, true];\n    }\n    const obj = JSON.parse(target);\n    return new Result(primitives.includes(obj) || (!!obj && typeof obj === 'object'));\n  } catch (e) { /* ignore */ }\n  return new Result(false);\n}","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\nimport { isBase64 } from './isBase64';\n\nexport interface IsJWTErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_JWT_ERRORS: IsJWTErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\n/**\n * Tests whether the `target` string is a valid JWT\n *    \n * ### Example\n * ```\n * expect(isJWT('eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dnZWRJbkFzIjoiYWRtaW4iLCJpYXQiOjE0MjI3Nzk2Mzh9.gzSraSYS8EXBxLN_oWnFSRgCzcmJmMjLiuyu5CSpyHI').value).toBeTruthy()\n * ```\n * @param target The target string\n */\nexport function isJWT(target:string):Result<boolean|undefined>  {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_JWT_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n\n  const dotSplit = target.split('.');\n  const len = dotSplit.length;\n\n  if (len > 3 || len < 2) {\n    return new Result(false);\n  }\n  return new Result(dotSplit.reduce((acc:any, currElem:any) => acc && isBase64(currElem, { urlSafe: true }).value, true));\n}","import { MessageFunctionType, Result } from '../types';\nimport { merge } from '../utilities/merge';\nimport { isString } from '../validators/isString';\n\nexport interface IsLatLongErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_LATLONG_ERRORS: IsLatLongErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\n\nconst lat = /^\\(?[+-]?(90(\\.0+)?|[1-8]?\\d(\\.\\d+)?)$/;\nconst long = /^\\s?[+-]?(180(\\.0+)?|1[0-7]\\d(\\.\\d+)?|\\d{1,2}(\\.\\d+)?)\\)?$/;\n\nconst latDMS = /^(([1-8]?\\d)\\D+([1-5]?\\d|60)\\D+([1-5]?\\d|60)(\\.\\d+)?|90\\D+0\\D+0)\\D+[NSns]?$/i;\nconst longDMS = /^\\s*([1-7]?\\d{1,2}\\D+([1-5]?\\d|60)\\D+([1-5]?\\d|60)(\\.\\d+)?|180\\D+0\\D+0)\\D+[EWew]?$/i;\n\nexport interface IsLatLongOptions {\n  checkDMS:boolean\n}\nconst defaultLatLongOptions = {\n  checkDMS: false,\n};\n\n/**\n * Tests whether the `target` string is a valid LatLong\n *    \n * ### Example\n * ```\n * expect(isLatLong('(-17.738223, 85.605469)').value).toBeTruthy()\n * ```\n * @param target The target string\n */\nexport function isLatLong(target: string, options:IsLatLongOptions = defaultLatLongOptions): Result<boolean | undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined,\n      IS_LATLONG_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  options = merge(options, defaultLatLongOptions);\n\n  if (!target.includes(',')) return new Result(false);\n  const pair = target.split(',');\n  if ((pair[0].startsWith('(') && !pair[1].endsWith(')'))\n    || (pair[1].endsWith(')') && !pair[0].startsWith('('))) return new Result(false);\n\n  if (options.checkDMS) {\n    return new Result(latDMS.test(pair[0]) && longDMS.test(pair[1]));\n  }\n  return new Result(lat.test(pair[0]) && long.test(pair[1]));\n}","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsLengthErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_LENGTH_ERRORS: IsLengthErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\n/* eslint-disable prefer-rest-params */\n\n/**\n * Tests whether the `target` string length is valid\n *    \n * ### Example\n * ```\n * expect(isLength('abcd', 2).value).toBeTruthy()\n * ```\n * @param target The target\n * @param min The minimum length\n * @param max The maximum length - Infinity if not defined\n */\nexport function isLength(target:string, min: number = 0, max: number = Infinity):Result<boolean|undefined>  {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_LENGTH_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  const surrogatePairs = target.match(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g) || [];\n  const len = target.length - surrogatePairs.length;\n  return new Result(len >= min && (typeof max === 'undefined' || len <= max));\n}","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsLocaleErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_LOCALE_ERRORS: IsLocaleErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\nconst localeReg = /^[A-z]{2,4}([_-]([A-z]{4}|[\\d]{3}))?([_-]([A-z]{2}|[\\d]{3}))?$/;\n\n/**\n * Checks whether the `target` string is a valid locale\n *    \n * ### Example\n * ```\n * expect(isLocale('en').value).toBeTruthy()\n * ```\n * @param target The target string\n */\nexport function isLocale(target:string):Result<boolean|undefined>  {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_LOCALE_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  if (target === 'en_US_POSIX' || target === 'ca_ES_VALENCIA') {\n    return new Result(true);\n  }\n  return new Result(localeReg.test(target));\n}\n","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsLowercaseErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_LOWERCASE_ERRORS: IsLowercaseErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\n/**\n * Checks whether the `target` string is lowercase\n *    \n * ### Example\n * ```\n * expect(isLowercase('abc').value).toBeTruthy()\n * ```\n * @param target The target string\n */\nexport function isLowercase(target:string):Result<boolean|undefined>  {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_LOWERCASE_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  return new Result(target === target.toLowerCase());\n}\n","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsMacAddressErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_MAC_ADDRESS_ERRORS: IsMacAddressErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\nconst macAddress = /^(?:[0-9a-fA-F]{2}([-:\\s]))([0-9a-fA-F]{2}\\1){4}([0-9a-fA-F]{2})$/;\nconst macAddressNoSeparators = /^([0-9a-fA-F]){12}$/;\nconst macAddressWithDots = /^([0-9a-fA-F]{4}\\.){2}([0-9a-fA-F]{4})$/;\n\n/**\n * Checks whether the `target` string is a valid MAC Address\n *    \n * ### Example\n * ```\n * expect(isMACAddress('ab:ab:ab:ab:ab:ab').value).toBeTruthy()\n * ```\n * @param target The target string\n * @param options The options\n */\nexport function isMACAddress(target:string, options:any):Result<boolean|undefined>  {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_MAC_ADDRESS_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  /**\n   * @deprecated `no_colons` TODO: remove it in the next major\n  */\n   if (options && (options.no_colons || options.no_separators)) {\n    return new Result(macAddressNoSeparators.test(target));\n  }\n\n  return new Result(macAddress.test(target)\n    || macAddressWithDots.test(target));\n}\n","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsMagnetURIErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_MAGNET_URI_ERRORS: IsMagnetURIErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\nconst magnetURI = /^magnet:\\?xt(?:\\.1)?=urn:(?:aich|bitprint|btih|ed2k|ed2khash|kzhash|md5|sha1|tree:tiger):[a-z0-9]{32}(?:[a-z0-9]{8})?($|&)/i;\n\n/**\n * Checks whether the `target` string is a valid Magnet URI\n * ### Example\n * ```\n * expect(isMagnetURI('magnet:?xt.1=urn:sha1:ABCDEFGHIJKLMNOPQRSTUVWXYZ123456&xt.2=urn:sha1:ABCDEFGHIJKLMNOPQRSTUVWXYZ123456').value).toBeTruthy()\n * ```\n * \n * @param target The target\n */\nexport function isMagnetURI(target:string):Result<boolean|undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_MAGNET_URI_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  return new Result(magnetURI.test(target.trim()));\n}\n","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsMD5Errors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_MD5_ERRORS: IsMD5Errors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\nconst md5 = /^[a-f0-9]{32}$/;\n\n/**\n * Checks whether the `target` string is a valid MD5 checksum\n *    \n * ### Example\n * ```\n * expect(isMD5('d94f3f016ae679c3008de268209132f2').value).toBeTruthy()\n * ```\n * @param target The target string\n */\nexport function isMD5(target:string):Result<boolean|undefined>  {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_MD5_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  return new Result(md5.test(target));\n}","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsMimeTypeErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_MIME_TYPE_ERRORS: IsMimeTypeErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\n/*\n  Checks if the provided string matches to a correct Media type format (MIME type)\n  This function only checks is the string format follows the\n  etablished rules by the according RFC specifications.\n  This function supports 'charset' in textual media types\n  (https://tools.ietf.org/html/rfc6657).\n  This function does not check against all the media types listed\n  by the IANA (https://www.iana.org/assignments/media-types/media-types.xhtml)\n  because of lightness purposes : it would require to include\n  all these MIME types in this librairy, which would weigh it\n  significantly. This kind of effort maybe is not worth for the use that\n  this function has in this entire librairy.\n  More informations in the RFC specifications :\n  - https://tools.ietf.org/html/rfc2045\n  - https://tools.ietf.org/html/rfc2046\n  - https://tools.ietf.org/html/rfc7231#section-3.1.1.1\n  - https://tools.ietf.org/html/rfc7231#section-3.1.1.5\n*/\n\n// Match simple MIME types\n// NB :\n//   Subtype length must not exceed 100 characters.\n//   This rule does not comply to the RFC specs (what is the max length ?).\nconst mimeTypeSimple = /^(application|audio|font|image|message|model|multipart|text|video)\\/[a-zA-Z0-9\\.\\-\\+]{1,100}$/i; // eslint-disable-line max-len\n\n// Handle \"charset\" in \"text/*\"\nconst mimeTypeText = /^text\\/[a-zA-Z0-9\\.\\-\\+]{1,100};\\s?charset=(\"[a-zA-Z0-9\\.\\-\\+\\s]{0,70}\"|[a-zA-Z0-9\\.\\-\\+]{0,70})(\\s?\\([a-zA-Z0-9\\.\\-\\+\\s]{1,20}\\))?$/i; // eslint-disable-line max-len\n\n// Handle \"boundary\" in \"multipart/*\"\nconst mimeTypeMultipart = /^multipart\\/[a-zA-Z0-9\\.\\-\\+]{1,100}(;\\s?(boundary|charset)=(\"[a-zA-Z0-9\\.\\-\\+\\s]{0,70}\"|[a-zA-Z0-9\\.\\-\\+]{0,70})(\\s?\\([a-zA-Z0-9\\.\\-\\+\\s]{1,20}\\))?){0,2}$/i; // eslint-disable-line max-len\n\n\n/**\n * Checks whether the `target` string is a valid Mime Type\n *    \n * ### Example\n * ```\n * expect(isMimeType('application/json').value).toBeTruthy()\n * ```\n * @param target The target string\n */\nexport function isMimeType(target:string):Result<boolean|undefined>  {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_MIME_TYPE_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  return new Result(mimeTypeSimple.test(target) || mimeTypeText.test(target) || mimeTypeMultipart.test(target));\n}","import { StringKeyRegEx } from '../types';\nimport { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsMobilePhoneErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n  LOCALE_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n  INVALID_LOCALE:MessageFunctionType;\n}\n\nexport const IS_MOBILE_PHONE_ERRORS: IsMobilePhoneErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  },\n  LOCALE_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The locale argument ${arr![0]} is not a string.`;\n  },\n  INVALID_LOCALE: (arr?: string[]) => {\n    return `The locale argument ${arr![0]} is invalid.`;\n  }\n};\n\n/* eslint-disable max-len */\nconst phones:StringKeyRegEx = {\n  'am-AM': /^(\\+?374|0)((10|[9|7][0-9])\\d{6}$|[2-4]\\d{7}$)/,\n  'ar-AE': /^((\\+?971)|0)?5[024568]\\d{7}$/,\n  'ar-BH': /^(\\+?973)?(3|6)\\d{7}$/,\n  'ar-DZ': /^(\\+?213|0)(5|6|7)\\d{8}$/,\n  'ar-LB': /^(\\+?961)?((3|81)\\d{6}|7\\d{7})$/,\n  'ar-EG': /^((\\+?20)|0)?1[0125]\\d{8}$/,\n  'ar-IQ': /^(\\+?964|0)?7[0-9]\\d{8}$/,\n  'ar-JO': /^(\\+?962|0)?7[789]\\d{7}$/,\n  'ar-KW': /^(\\+?965)[569]\\d{7}$/,\n  'ar-LY': /^((\\+?218)|0)?(9[1-6]\\d{7}|[1-8]\\d{7,9})$/,\n  'ar-MA': /^(?:(?:\\+|00)212|0)[5-7]\\d{8}$/,\n  'ar-OM': /^((\\+|00)968)?(9[1-9])\\d{6}$/,\n  'ar-SA': /^(!?(\\+?966)|0)?5\\d{8}$/,\n  'ar-SY': /^(!?(\\+?963)|0)?9\\d{8}$/,\n  'ar-TN': /^(\\+?216)?[2459]\\d{7}$/,\n  'az-AZ': /^(\\+994|0)(5[015]|7[07]|99)\\d{7}$/,\n  'bs-BA': /^((((\\+|00)3876)|06))((([0-3]|[5-6])\\d{6})|(4\\d{7}))$/,\n  'be-BY': /^(\\+?375)?(24|25|29|33|44)\\d{7}$/,\n  'bg-BG': /^(\\+?359|0)?8[789]\\d{7}$/,\n  'bn-BD': /^(\\+?880|0)1[13456789][0-9]{8}$/,\n  'ca-AD': /^(\\+376)?[346]\\d{5}$/,\n  'cs-CZ': /^(\\+?420)? ?[1-9][0-9]{2} ?[0-9]{3} ?[0-9]{3}$/,\n  'da-DK': /^(\\+?45)?\\s?\\d{2}\\s?\\d{2}\\s?\\d{2}\\s?\\d{2}$/,\n  'de-DE': /^((\\+49|0)[1|3])([0|5][0-45-9]\\d|6([23]|0\\d?)|7([0-57-9]|6\\d))\\d{7,9}$/,\n  'de-AT': /^(\\+43|0)\\d{1,4}\\d{3,12}$/,\n  'de-CH': /^(\\+41|0)([1-9])\\d{1,9}$/,\n  'de-LU': /^(\\+352)?((6\\d1)\\d{6})$/,\n  'el-GR': /^(\\+?30|0)?(69\\d{8})$/,\n  'en-AU': /^(\\+?61|0)4\\d{8}$/,\n  'en-GB': /^(\\+?44|0)7\\d{9}$/,\n  'en-GG': /^(\\+?44|0)1481\\d{6}$/,\n  'en-GH': /^(\\+233|0)(20|50|24|54|27|57|26|56|23|28|55|59)\\d{7}$/,\n  'en-HK': /^(\\+?852[-\\s]?)?[456789]\\d{3}[-\\s]?\\d{4}$/,\n  'en-MO': /^(\\+?853[-\\s]?)?[6]\\d{3}[-\\s]?\\d{4}$/,\n  'en-IE': /^(\\+?353|0)8[356789]\\d{7}$/,\n  'en-IN': /^(\\+?91|0)?[6789]\\d{9}$/,\n  'en-KE': /^(\\+?254|0)(7|1)\\d{8}$/,\n  'en-MT': /^(\\+?356|0)?(99|79|77|21|27|22|25)[0-9]{6}$/,\n  'en-MU': /^(\\+?230|0)?\\d{8}$/,\n  'en-NG': /^(\\+?234|0)?[789]\\d{9}$/,\n  'en-NZ': /^(\\+?64|0)[28]\\d{7,9}$/,\n  'en-PK': /^((\\+92)|(0092))-{0,1}\\d{3}-{0,1}\\d{7}$|^\\d{11}$|^\\d{4}-\\d{7}$/,\n  'en-PH': /^(09|\\+639)\\d{9}$/,\n  'en-RW': /^(\\+?250|0)?[7]\\d{8}$/,\n  'en-SG': /^(\\+65)?[3689]\\d{7}$/,\n  'en-SL': /^(\\+?232|0)\\d{8}$/,\n  'en-TZ': /^(\\+?255|0)?[67]\\d{8}$/,\n  'en-UG': /^(\\+?256|0)?[7]\\d{8}$/,\n  'en-US': /^((\\+1|1)?( |-)?)?(\\([2-9][0-9]{2}\\)|[2-9][0-9]{2})( |-)?([2-9][0-9]{2}( |-)?[0-9]{4})$/,\n  'en-ZA': /^(\\+?27|0)\\d{9}$/,\n  'en-ZM': /^(\\+?26)?09[567]\\d{7}$/,\n  'en-ZW': /^(\\+263)[0-9]{9}$/,\n  'es-AR': /^\\+?549(11|[2368]\\d)\\d{8}$/,\n  'es-BO': /^(\\+?591)?(6|7)\\d{7}$/,\n  'es-CO': /^(\\+?57)?3(0(0|1|2|4|5)|1\\d|2[0-4]|5(0|1))\\d{7}$/,\n  'es-CL': /^(\\+?56|0)[2-9]\\d{1}\\d{7}$/,\n  'es-CR': /^(\\+506)?[2-8]\\d{7}$/,\n  'es-DO': /^(\\+?1)?8[024]9\\d{7}$/,\n  'es-HN': /^(\\+?504)?[9|8]\\d{7}$/,\n  'es-EC': /^(\\+?593|0)([2-7]|9[2-9])\\d{7}$/,\n  'es-ES': /^(\\+?34)?[6|7]\\d{8}$/,\n  'es-PE': /^(\\+?51)?9\\d{8}$/,\n  'es-MX': /^(\\+?52)?(1|01)?\\d{10,11}$/,\n  'es-PA': /^(\\+?507)\\d{7,8}$/,\n  'es-PY': /^(\\+?595|0)9[9876]\\d{7}$/,\n  'es-UY': /^(\\+598|0)9[1-9][\\d]{6}$/,\n  'es-VE': /^(\\+?58)?(2|4)\\d{9}$/,\n  'et-EE': /^(\\+?372)?\\s?(5|8[1-4])\\s?([0-9]\\s?){6,7}$/,\n  'fa-IR': /^(\\+?98[\\-\\s]?|0)9[0-39]\\d[\\-\\s]?\\d{3}[\\-\\s]?\\d{4}$/,\n  'fi-FI': /^(\\+?358|0)\\s?(4(0|1|2|4|5|6)?|50)\\s?(\\d\\s?){4,8}\\d$/,\n  'fj-FJ': /^(\\+?679)?\\s?\\d{3}\\s?\\d{4}$/,\n  'fo-FO': /^(\\+?298)?\\s?\\d{2}\\s?\\d{2}\\s?\\d{2}$/,\n  'fr-FR': /^(\\+?33|0)[67]\\d{8}$/,\n  'fr-GF': /^(\\+?594|0|00594)[67]\\d{8}$/,\n  'fr-GP': /^(\\+?590|0|00590)[67]\\d{8}$/,\n  'fr-MQ': /^(\\+?596|0|00596)[67]\\d{8}$/,\n  'fr-RE': /^(\\+?262|0|00262)[67]\\d{8}$/,\n  'he-IL': /^(\\+972|0)([23489]|5[012345689]|77)[1-9]\\d{6}$/,\n  'hu-HU': /^(\\+?36)(20|30|70)\\d{7}$/,\n  'id-ID': /^(\\+?62|0)8(1[123456789]|2[1238]|3[1238]|5[12356789]|7[78]|9[56789]|8[123456789])([\\s?|\\d]{5,11})$/,\n  'it-IT': /^(\\+?39)?\\s?3\\d{2} ?\\d{6,7}$/,\n  'it-SM': /^((\\+378)|(0549)|(\\+390549)|(\\+3780549))?6\\d{5,9}$/,\n  'ja-JP': /^(\\+81[ \\-]?(\\(0\\))?|0)[6789]0[ \\-]?\\d{4}[ \\-]?\\d{4}$/,\n  'ka-GE': /^(\\+?995)?(5|79)\\d{7}$/,\n  'kk-KZ': /^(\\+?7|8)?7\\d{9}$/,\n  'kl-GL': /^(\\+?299)?\\s?\\d{2}\\s?\\d{2}\\s?\\d{2}$/,\n  'ko-KR': /^((\\+?82)[ \\-]?)?0?1([0|1|6|7|8|9]{1})[ \\-]?\\d{3,4}[ \\-]?\\d{4}$/,\n  'lt-LT': /^(\\+370|8)\\d{8}$/,\n  'lv-LV': /^(\\+?371)2\\d{7}$/,\n  'ms-MY': /^(\\+?6?01){1}(([0145]{1}(\\-|\\s)?\\d{7,8})|([236789]{1}(\\s|\\-)?\\d{7}))$/,\n  'mz-MZ': /^(\\+?258)?8[234567]\\d{7}$/,\n  'nb-NO': /^(\\+?47)?[49]\\d{7}$/,\n  'ne-NP': /^(\\+?977)?9[78]\\d{8}$/,\n  'nl-BE': /^(\\+?32|0)4\\d{8}$/,\n  'nl-NL': /^(((\\+|00)?31\\(0\\))|((\\+|00)?31)|0)6{1}\\d{8}$/,\n  'nn-NO': /^(\\+?47)?[49]\\d{7}$/,\n  'pl-PL': /^(\\+?48)? ?[5-8]\\d ?\\d{3} ?\\d{2} ?\\d{2}$/,\n  'pt-BR': /^((\\+?55\\ ?[1-9]{2}\\ ?)|(\\+?55\\ ?\\([1-9]{2}\\)\\ ?)|(0[1-9]{2}\\ ?)|(\\([1-9]{2}\\)\\ ?)|([1-9]{2}\\ ?))((\\d{4}\\-?\\d{4})|(9[2-9]{1}\\d{3}\\-?\\d{4}))$/,\n  'pt-PT': /^(\\+?351)?9[1236]\\d{7}$/,\n  'pt-AO': /^(\\+244)\\d{9}$/,\n  'ro-RO': /^(\\+?4?0)\\s?7\\d{2}(\\/|\\s|\\.|\\-)?\\d{3}(\\s|\\.|\\-)?\\d{3}$/,\n  'ru-RU': /^(\\+?7|8)?9\\d{9}$/,\n  'si-LK': /^(?:0|94|\\+94)?(7(0|1|2|5|6|7|8)( |-)?\\d)\\d{6}$/,\n  'sl-SI': /^(\\+386\\s?|0)(\\d{1}\\s?\\d{3}\\s?\\d{2}\\s?\\d{2}|\\d{2}\\s?\\d{3}\\s?\\d{3})$/,\n  'sk-SK': /^(\\+?421)? ?[1-9][0-9]{2} ?[0-9]{3} ?[0-9]{3}$/,\n  'sq-AL': /^(\\+355|0)6[789]\\d{6}$/,\n  'sr-RS': /^(\\+3816|06)[- \\d]{5,9}$/,\n  'sv-SE': /^(\\+?46|0)[\\s\\-]?7[\\s\\-]?[02369]([\\s\\-]?\\d){7}$/,\n  'th-TH': /^(\\+66|66|0)\\d{9}$/,\n  'tr-TR': /^(\\+?90|0)?5\\d{9}$/,\n  'uk-UA': /^(\\+?38|8)?0\\d{9}$/,\n  'uz-UZ': /^(\\+?998)?(6[125-79]|7[1-69]|88|9\\d)\\d{7}$/,\n  'vi-VN': /^((\\+?84)|0)((3([2-9]))|(5([25689]))|(7([0|6-9]))|(8([1-9]))|(9([0-9])))([0-9]{7})$/,\n  'zh-CN': /^((\\+|00)86)?1([3456789][0-9]|4[579]|6[2567]|7[01235678]|9[012356789])[0-9]{8}$/,\n  'zh-TW': /^(\\+?886\\-?|0)?9\\d{8}$/,\n};\n/* eslint-enable max-len */\n\n// aliases\nphones['en-CA'] = phones['en-US'];\nphones['fr-CA'] = phones['en-CA'];\nphones['fr-BE'] = phones['nl-BE'];\nphones['zh-HK'] = phones['en-HK'];\nphones['zh-MO'] = phones['en-MO'];\nphones['ga-IE'] = phones['en-IE'];\nphones['fr-CH'] = phones['de-CH'];\nphones['it-CH'] = phones['fr-CH'];\n\n/**\n * Optional configuration \n * If `strictMode` is set to true, \n * the mobile phone number must be supplied \n * with the country code and therefore must start with +. \n * The supported localelist is exported via isMobilePhoneLocales.\n */\nexport interface IsMobilePhoneOptions {\n  strictMode:boolean\n}\n\n/**\n * Tests whether the `target` string is a valid Mobile Phone Number\n *    \n * ### Example\n * ```\n * expect(isMobilePhone('223-456-7890', 'en-US').value).toBeTruthy()\n * ```\n * \n * @param target The target string\n * @param locale The locale\n * @param options The options\n */\nexport function isMobilePhone(target:string, locale:string, options?:IsMobilePhoneOptions):Result<boolean|undefined>  {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_MOBILE_PHONE_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  if (!isString(locale).value) {\n    return new Result(\n      undefined, \n      IS_MOBILE_PHONE_ERRORS.LOCALE_ARGUMENT_NOT_A_STRING,\n      [locale])\n  }\n\n  if (options && options.strictMode && !target.startsWith('+')) {\n    return new Result(false);\n  }\n  if (Array.isArray(locale)) {\n    return new Result(locale.some((key) => {\n      // https://github.com/gotwarlost/istanbul/blob/master/ignoring-code-for-coverage.md#ignoring-code-for-coverage-purposes\n      // istanbul ignore else\n      if (phones.hasOwnProperty(key)) {\n        const phone = phones[key];\n        if (phone.test(target)) {\n          return true;\n        }\n      }\n      return false;\n    }));\n  } else if (locale in phones) {\n    return new Result(phones[locale].test(target));\n    // alias falsey locale as 'any'\n  } else if (!locale || locale === 'any') {\n    for (const key in phones) {\n      // istanbul ignore else\n      if (phones.hasOwnProperty(key)) {\n        const phone = phones[key];\n        if (phone.test(target)) {\n          return new Result(true);\n        }\n      }\n    }\n    return new Result(false);\n  }\n  return new Result(\n    undefined, \n    IS_MOBILE_PHONE_ERRORS.INVALID_LOCALE,\n    [locale])\n}\n\n/**\n * The supported locale list.\n */\nexport const isMobilePhoneLocales = Object.keys(phones);\n","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsMongoIDErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_MONGO_ID_ERRORS: IsMongoIDErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\nimport { isHexadecimal } from './isHexadecimal';\n\n/**\n * Tests whether the `target` string is a valid MongoID\n *    \n * ### Example\n * ```\n * expect(isMongoId('507f1f77bcf86cd799439011').value).toBeTruthy()\n * ```\n * @param target The target string\n */\nexport function isMongoId(target:string):Result<boolean|undefined>  {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_MONGO_ID_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  return new Result(isHexadecimal(target).value && target.length === 24);\n}","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsMultibyteErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_MULTIBYTE_ERRORS: IsMultibyteErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\n/* eslint-disable no-control-regex */\nconst multibyte = /[^\\x00-\\x7F]/;\n/* eslint-enable no-control-regex */\n\n/**\n * Tests whether the `target` string contains one or more multibyte characters\n *    \n * ### Example\n * ```\n * expect(isMultibyte('ｶﾀｶﾅ').value).toBeTruthy()\n * ```\n * @param target The target string\n */\nexport function isMultibyte(target:string):Result<boolean|undefined>  {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_MULTIBYTE_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  return new Result(multibyte.test(target));\n}\n","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\nimport { decimal } from './alpha';\n\nexport interface IsNumericErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_NUMERIC_ERRORS: IsNumericErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\nconst numericNoSymbols = /^[0-9]+$/;\n\n/**\n * Checks whether the `target` string contains only numbers\n *    \n * ### Example\n * ```\n * expect(isNumeric('123').value).toBeTruthy()\n * ```\n * @param target The target\n * @param options The options\n */\nexport function isNumeric(target:string, options?:any):Result<boolean|undefined>  {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_NUMERIC_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n\n  if (options && options.no_symbols) {\n    return new Result(numericNoSymbols.test(target));\n  }\n  return new Result((new RegExp(`^[+-]?([0-9]*[${(options || {}).locale ? decimal[options.locale] : '.'}])?[0-9]+$`)).test(target));\n}\n","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsOctalErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_OCTAL_ERRORS: IsOctalErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\nconst octal = /^(0o)?[0-7]+$/i;\n\n/**\n * Checks whether the `target` string is a valid Octal number\n * \n * ### Example\n * ```\n * expectisOctal(('076543210').value).toBeTruthy()\n * ```\n * @param target The target string\n */\nexport function isOctal(target:string):Result<boolean|undefined>  {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_OCTAL_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  return new Result(octal.test(target));\n}\n","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsPassportNumberErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n  INVALID_COUNTRY_CODE: MessageFunctionType;\n}\n\nexport const IS_PASSPORT_NUMBER_ERRORS: IsPassportNumberErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  },\n  INVALID_COUNTRY_CODE: (arr?: string[]) => {\n    return `The country code argument ${arr![0]} is invalid.`;\n  }  \n};\n\nimport { StringKeyRegEx } from \"../types\";\n\n/**\n * Reference:\n * https://en.wikipedia.org/ -- Wikipedia\n * https://docs.microsoft.com/en-us/microsoft-365/compliance/eu-passport-number -- EU Passport Number\n * https://countrycode.org/ -- Country Codes\n */\nconst passportRegexByCountryCode:StringKeyRegEx = {\n  AM: /^[A-Z]{2}\\d{7}$/, // ARMENIA\n  AR: /^[A-Z]{3}\\d{6}$/, // ARGENTINA\n  AT: /^[A-Z]\\d{7}$/, // AUSTRIA\n  AU: /^[A-Z]\\d{7}$/, // AUSTRALIA\n  BE: /^[A-Z]{2}\\d{6}$/, // BELGIUM\n  BG: /^\\d{9}$/, // BULGARIA\n  CA: /^[A-Z]{2}\\d{6}$/, // CANADA\n  CH: /^[A-Z]\\d{7}$/, // SWITZERLAND\n  CN: /^[GE]\\d{8}$/, // CHINA [G=Ordinary, E=Electronic] followed by 8-digits\n  CY: /^[A-Z](\\d{6}|\\d{8})$/, // CYPRUS\n  CZ: /^\\d{8}$/, // CZECH REPUBLIC\n  DE: /^[CFGHJKLMNPRTVWXYZ0-9]{9}$/, // GERMANY\n  DK: /^\\d{9}$/, // DENMARK\n  EE: /^([A-Z]\\d{7}|[A-Z]{2}\\d{7})$/, // ESTONIA (K followed by 7-digits), e-passports have 2 UPPERCASE followed by 7 digits\n  ES: /^[A-Z0-9]{2}([A-Z0-9]?)\\d{6}$/, // SPAIN\n  FI: /^[A-Z]{2}\\d{7}$/, // FINLAND\n  FR: /^\\d{2}[A-Z]{2}\\d{5}$/, // FRANCE\n  GB: /^\\d{9}$/, // UNITED KINGDOM\n  GR: /^[A-Z]{2}\\d{7}$/, // GREECE\n  HR: /^\\d{9}$/, // CROATIA\n  HU: /^[A-Z]{2}(\\d{6}|\\d{7})$/, // HUNGARY\n  IE: /^[A-Z0-9]{2}\\d{7}$/, // IRELAND\n  IS: /^(A)\\d{7}$/, // ICELAND\n  IT: /^[A-Z0-9]{2}\\d{7}$/, // ITALY\n  JP: /^[A-Z]{2}\\d{7}$/, // JAPAN\n  KR: /^[MS]\\d{8}$/, // SOUTH KOREA, REPUBLIC OF KOREA, [S=PS Passports, M=PM Passports]\n  LT: /^[A-Z0-9]{8}$/, // LITHUANIA\n  LU: /^[A-Z0-9]{8}$/, // LUXEMBURG\n  LV: /^[A-Z0-9]{2}\\d{7}$/, // LATVIA\n  MT: /^\\d{7}$/, // MALTA\n  NL: /^[A-Z]{2}[A-Z0-9]{6}\\d$/, // NETHERLANDS\n  PO: /^[A-Z]{2}\\d{7}$/, // POLAND\n  PT: /^[A-Z]\\d{6}$/, // PORTUGAL\n  RO: /^\\d{8,9}$/, // ROMANIA\n  SE: /^\\d{8}$/, // SWEDEN\n  SL: /^(P)[A-Z]\\d{7}$/, // SLOVANIA\n  SK: /^[0-9A-Z]\\d{7}$/, // SLOVAKIA\n  TR: /^[A-Z]\\d{8}$/, // TURKEY\n  UA: /^[A-Z]{2}\\d{6}$/, // UKRAINE\n  US: /^\\d{9}$/, // UNITED STATES\n};\n\n/**\n * Check if `target` is a valid passport number\n * relative to provided `arg` ISO Country Code.\n * \n * ### Example\n * ```\n * expect(isPassportNumber('AF0549358', 'AM').value).toBeTruthy()\n * ```\n * @param target The passport number\n * @param countryCode The country code\n */\nexport function isPassportNumber(target:string, countryCode:string):Result<boolean|undefined>  {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_PASSPORT_NUMBER_ERRORS.TARGET_ARGUMENT_NOT_A_STRING, \n      [target])\n  }\n  if (!isString(countryCode).value) {\n    return new Result(\n      undefined, \n      IS_PASSPORT_NUMBER_ERRORS.INVALID_COUNTRY_CODE, \n      [countryCode])\n  }\n  /** Remove All Whitespaces, Convert to UPPERCASE */\n  const normalizedStr = target.replace(/\\s/g, '').toUpperCase();\n\n  return new Result((countryCode.toUpperCase() in passportRegexByCountryCode) &&\n    passportRegexByCountryCode[countryCode].test(normalizedStr));\n}","import { isIntString } from './isIntString';\nimport { MessageFunctionType, Result } from '../types';\nimport { isString } from './isString';\n\nexport interface IsPortErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_PORT_ERRORS: IsPortErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\n/**\n * Check if `target` is a valid port number\n *    \n * ### Example\n * ```\n * expect(().value).toBeTruthy()\n * ```\n *\n * @param target The port number\n * \n * ### Example \n *\n * expect(isPort('4200').value).toBeTruthy() \n *\n */\nexport function isPort(target:string):Result<boolean|undefined>  {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_PORT_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  return isIntString(target, { min: 0, max: 65535 });\n}","import { StringKeyRegEx } from '../types';\nimport { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsPostalCodeErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n  INVALID_LOCALE: MessageFunctionType;\n}\n\nexport const IS_POSTAL_CODE_ERRORS: IsPostalCodeErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  },\n  INVALID_LOCALE: (arr?: string[]) => {\n    return `The locale argument ${arr![0]} is invalid.`;\n  }\n};\n\n// common patterns\nconst threeDigit = /^\\d{3}$/;\nconst fourDigit = /^\\d{4}$/;\nconst fiveDigit = /^\\d{5}$/;\nconst sixDigit = /^\\d{6}$/;\n\nconst patterns:StringKeyRegEx = {\n  AD: /^AD\\d{3}$/,\n  AT: fourDigit,\n  AU: fourDigit,\n  BE: fourDigit,\n  BG: fourDigit,\n  BR: /^\\d{5}-\\d{3}$/,\n  CA: /^[ABCEGHJKLMNPRSTVXY]\\d[ABCEGHJ-NPRSTV-Z][\\s\\-]?\\d[ABCEGHJ-NPRSTV-Z]\\d$/i,\n  CH: fourDigit,\n  CZ: /^\\d{3}\\s?\\d{2}$/,\n  DE: fiveDigit,\n  DK: fourDigit,\n  DZ: fiveDigit,\n  EE: fiveDigit,\n  ES: fiveDigit,\n  FI: fiveDigit,\n  FR: /^\\d{2}\\s?\\d{3}$/,\n  GB: /^(gir\\s?0aa|[a-z]{1,2}\\d[\\da-z]?\\s?(\\d[a-z]{2})?)$/i,\n  GR: /^\\d{3}\\s?\\d{2}$/,\n  HR: /^([1-5]\\d{4}$)/,\n  HU: fourDigit,\n  ID: fiveDigit,\n  IE: /^(?!.*(?:o))[A-z]\\d[\\dw]\\s\\w{4}$/i,\n  IL: fiveDigit,\n  IN: /^((?!10|29|35|54|55|65|66|86|87|88|89)[1-9][0-9]{5})$/,\n  IS: threeDigit,\n  IT: fiveDigit,\n  JP: /^\\d{3}\\-\\d{4}$/,\n  KE: fiveDigit,\n  LI: /^(948[5-9]|949[0-7])$/,\n  LT: /^LT\\-\\d{5}$/,\n  LU: fourDigit,\n  LV: /^LV\\-\\d{4}$/,\n  MX: fiveDigit,\n  MT: /^[A-Za-z]{3}\\s{0,1}\\d{4}$/,\n  NL: /^\\d{4}\\s?[a-z]{2}$/i,\n  NO: fourDigit,\n  NZ: fourDigit,\n  PL: /^\\d{2}\\-\\d{3}$/,\n  PR: /^00[679]\\d{2}([ -]\\d{4})?$/,\n  PT: /^\\d{4}\\-\\d{3}?$/,\n  RO: sixDigit,\n  RU: sixDigit,\n  SA: fiveDigit,\n  SE: /^[1-9]\\d{2}\\s?\\d{2}$/,\n  SI: fourDigit,\n  SK: /^\\d{3}\\s?\\d{2}$/,\n  TN: fourDigit,\n  TW: /^\\d{3}(\\d{2})?$/,\n  UA: fiveDigit,\n  US: /^\\d{5}(-\\d{4})?$/,\n  ZA: fourDigit,\n  ZM: fiveDigit,\n};\n\nexport const postalCodeLocales = Object.keys(patterns);\n\n/**\n * Checks whether the `target` string is a valid postal code\n *    \n * ### Example\n * ```\n * expect(isPostalCode().value).toBeTruthy()\n * ```\n * @param target The target string\n * @param locale The locale\n */\nexport function isPostalCode(target:string, locale:string):Result<boolean|undefined>  {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_POSTAL_CODE_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  if (locale in patterns) {\n    return new Result(patterns[locale].test(target));\n  } else if (locale === 'any') {\n    for (const key in patterns) {\n      // https://github.com/gotwarlost/istanbul/blob/master/ignoring-code-for-coverage.md#ignoring-code-for-coverage-purposes\n      // istanbul ignore else\n      if (patterns.hasOwnProperty(key)) {\n        const pattern = patterns[key];\n        if (pattern.test(target)) {\n          return new Result(true);\n        }\n      }\n    }\n    return new Result(false);\n  }\n  return new Result(\n    undefined, \n    IS_POSTAL_CODE_ERRORS.INVALID_LOCALE,\n    [locale])\n}","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsRFC3339Errors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_RFC3339_ERRORS: IsRFC3339Errors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\n/* Based on https://tools.ietf.org/html/rfc3339#section-5.6 */\n\nconst dateFullYear = /[0-9]{4}/;\nconst dateMonth = /(0[1-9]|1[0-2])/;\nconst dateMDay = /([12]\\d|0[1-9]|3[01])/;\n\nconst timeHour = /([01][0-9]|2[0-3])/;\nconst timeMinute = /[0-5][0-9]/;\nconst timeSecond = /([0-5][0-9]|60)/;\n\nconst timeSecFrac = /(\\.[0-9]+)?/;\nconst timeNumOffset = new RegExp(`[-+]${timeHour.source}:${timeMinute.source}`);\nconst timeOffset = new RegExp(`([zZ]|${timeNumOffset.source})`);\n\nconst partialTime = new RegExp(`${timeHour.source}:${timeMinute.source}:${timeSecond.source}${timeSecFrac.source}`);\n\nconst fullDate = new RegExp(`${dateFullYear.source}-${dateMonth.source}-${dateMDay.source}`);\nconst fullTime = new RegExp(`${partialTime.source}${timeOffset.source}`);\n\nconst rfc3339 = new RegExp(`^${fullDate.source}[ tT]${fullTime.source}$`);\n\n/**\n * Check if `target` is a valid RFC3339 timestamp\n *\n * ### Example\n * ```\n * expect(isRFC3339('2009-05-19 14:39:22-06:00').value).toBeTruthy()\n * ```\n * @param target The time stamp\n * \n * @example\n```\nconst isRFC3339:boolean = isRFC3339('2002-10-02T15:00:00Z')\n```\n */\nexport function isRFC3339(target:string):Result<boolean|undefined>  {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_RFC3339_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  return new Result(rfc3339.test(target));\n}\n","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsRgbColorErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_RGB_COLOR_ERRORS: IsRgbColorErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\nconst rgbColor = /^rgb\\((([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]),){2}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\)$/;\nconst rgbaColor = /^rgba\\((([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]),){3}(0?\\.\\d|1(\\.0)?|0(\\.0)?)\\)$/;\nconst rgbColorPercent = /^rgb\\((([0-9]%|[1-9][0-9]%|100%),){2}([0-9]%|[1-9][0-9]%|100%)\\)/;\nconst rgbaColorPercent = /^rgba\\((([0-9]%|[1-9][0-9]%|100%),){3}(0?\\.\\d|1(\\.0)?|0(\\.0)?)\\)/;\n\n/**\n * Check if `target` is a valid RGB color\n *\n * ### Example\n * ```\n * expect(isRgbColor('rgb(0,0,0)').value).toBeTruthy()\n * ```\n * @param target The RGB color\n * \n */\nexport function isRgbColor(target:string, includePercentValues:string = `true`):Result<boolean|undefined>  {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_RGB_COLOR_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n\n  if (!includePercentValues) {\n    return new Result(rgbColor.test(target) || rgbaColor.test(target));\n  }\n\n  return new Result(rgbColor.test(target) ||\n    rgbaColor.test(target) ||\n    rgbColorPercent.test(target) ||\n    rgbaColorPercent.test(target));\n}","/**\n * Build RegExp object from an array\n * of multiple/multi-line regexp parts\n *\n * @param parts The string array\n * @param flags\n * @return RegExp object\n */\nexport function multilineRegexp(parts:string[], flags:string = ''):RegExp {\n  const regexpAsStringLiteral = parts.join('');\n\n  return new RegExp(regexpAsStringLiteral, flags);\n}","import { multilineRegexp } from '../utilities/multilineRegex';\nimport { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsSemverErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_SEMVER_ERRORS: IsSemverErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\n/**\n * Regular Expression to match\n * semantic versioning (SemVer)\n * built from multi-line, multi-parts regexp\n * Reference: https://semver.org/\n */\nconst semanticVersioningRegex = multilineRegexp([\n  '^(0|[1-9]\\\\d*)\\\\.(0|[1-9]\\\\d*)\\\\.(0|[1-9]\\\\d*)',\n  '(?:-((?:0|[1-9]\\\\d*|\\\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\\\.(?:0|[1-9]\\\\d*|\\\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))',\n  '?(?:\\\\+([0-9a-zA-Z-]+(?:\\\\.[0-9a-zA-Z-]+)*))?$',\n]);\n\n/**\n * Check if `target` is a valid semver version\n *\n   \n * ### Example\n * ```\n * expect(isSemVer('1.2.3').value).toBeTruthy()\n * ```\n * @param target The target\n */\nexport function isSemVer(target: string): Result<boolean | undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined,\n      IS_SEMVER_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  return new Result(semanticVersioningRegex.test(target))\n}\n","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsSlugErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_SLUG_ERRORS: IsSlugErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\n\nlet charsetRegex = /^[^\\s-_](?!.*?[-_]{2,})[a-z0-9-\\\\][^\\s]*[^-_\\s]$/;\n/**\n * Check if `target` is a valid slug\n *   \n * ### Example\n * ```\n * expect(isSlug('foo').value).toBeTruthy()\n * ```\n * @param target The target\n */\nexport function isSlug(target:string):Result<boolean|undefined>  {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_SLUG_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  return new Result((charsetRegex.test(target)));\n}","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsSurrogatePairErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_SURROGATE_PAIR_ERRORS: IsSurrogatePairErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\nconst surrogatePair = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/;\n\n/**\n * Test whether the string contains any surrogate pairs chars.\n *   \n * ### Example\n * ```\n * expect(isSurrogatePair('ABC千𥧄1-2-3').value).toBeTruthy()\n * ```\n * @param target The target\n */\nexport function isSurrogatePair(target:string):Result<boolean|undefined>  {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_SURROGATE_PAIR_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  return new Result(surrogatePair.test(target));\n}\n","import { StringKeyNumber } from '../types';\nimport { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsUppercaseErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_UPPERCASE_ERRORS: IsUppercaseErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\n\n/**\n * Check if `target` is uppercase   \n * ### Example\n * ```\n * expect(isUppercase('ABC').value).toBeTruthy()\n * ```\n * @param target The target\n */\nexport function isUppercase(target:string):Result<boolean|undefined>  {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_UPPERCASE_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  return new Result(target === target.toUpperCase());\n}\n","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsURLErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_URL_ERRORS: IsURLErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\nimport { isFQDN } from './isFQDN';\nimport { isIP } from './isIP';\nimport { merge } from '../utilities/merge';\n\n/*\noptions for isURL method\n\nrequire_protocol - if set as true isURL will return false if protocol is not present in the URL\nrequire_valid_protocol - isURL will check if the URL's protocol is present in the protocols option\nprotocols - valid protocols can be modified with this option\nrequire_host - if set as false isURL will not check if host is present in the URL\nallow_protocol_relative_urls - if set as true protocol relative URLs will be allowed\n\n*/\n\n/**\n * IsURL Options.\n */\nexport interface IsURLOptions {\n  protocols?: string[]\n  require_tld?: boolean\n  require_protocol?: boolean\n  require_host?: boolean\n  require_port?: boolean\n  require_valid_protocol?: boolean\n  allow_underscores?: boolean\n  host_whitelist?: false | string[]\n  host_blacklist?: false | string[]\n  allow_trailing_dot?: boolean\n  allow_query_components?: boolean,\n  allow_protocol_relative_urls?: boolean\n  allow_fragments?: boolean\n  validate_length?: boolean\n}\n\n\nconst default_url_options:IsURLOptions = {\n  protocols: ['http', 'https', 'ftp'],\n  require_tld: true,\n  require_protocol: false,\n  require_host: true,\n  require_port: false,\n  require_valid_protocol: true,\n  allow_underscores: false,\n  allow_trailing_dot: false,\n  allow_protocol_relative_urls: false,\n  allow_fragments: true,\n  allow_query_components: true,\n  validate_length: true,\n};\n\nconst wrapped_ipv6 = /^\\[([^\\]]+)\\](?::([0-9]+))?$/;\n\nfunction isRegExp(obj:any) {\n  return Object.prototype.toString.call(obj) === '[object RegExp]';\n}\n\nfunction checkHost(host:any, matches:any) {\n  for (let i = 0; i < matches.length; i++) {\n    let match = matches[i];\n    if (host === match || (isRegExp(match) && match.test(host))) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Checks whether the `target` string is valid URL\n * \n * ### Example\n * ```\n * expect((isURL('foobar.com').value).toBeTruthy()\n * ```\n * @param url The target string\n * @param options The options\n */\nexport function isURL(url:string, options:any):Result<boolean|undefined>  {\n  if (!isString(url).value) {\n    return new Result(\n      undefined, \n      IS_URL_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [url])\n  }\n\n  if (!url || /[\\s<>]/.test(url)) {\n    return new Result(false);\n  }\n  if (url.indexOf('mailto:') === 0) {\n    return new Result(false);\n  }\n  options = merge(options, default_url_options);\n  \n  if (options.validate_length && url.length >= 2083) {\n    return new Result(false);\n  }\n  \n  if (!options.allow_fragments && url.includes('#')) {\n    return new Result(false);\n  }\n  \n  if (!options.allow_query_components && (url.includes('?') || url.includes('&'))) {\n    return new Result(false);\n  }\n  \n  let protocol, auth, host, hostname, port, port_str, split, ipv6;\n  \n  split = url.split('#');\n  url = split.shift()!;\n  \n  split = url.split('?');\n  url = split.shift()!;\n  \n  split = url.split('://');\n  if (split.length > 1) {\n    protocol = split.shift()!.toLowerCase();\n    if (options.require_valid_protocol && options.protocols.indexOf(protocol) === -1) {\n      return new Result(false);\n    }\n  } else if (options.require_protocol) {\n    return new Result(false);\n  } else if (url.substr(0, 2) === '//') {\n    if (!options.allow_protocol_relative_urls) {\n      return new Result(false);\n    }\n    split[0] = url.substr(2);\n  }\n  url = split.join('://');\n  \n  if (url === '') {\n    return new Result(false);\n  }\n  \n  split = url.split('/');\n  url = split.shift()!;\n  \n  if (url === '' && !options.require_host) {\n    return new Result(true);\n  }\n  \n  split = url.split('@');\n  if (split.length > 1) {\n    if (options.disallow_auth) {\n      return new Result(false);\n    }\n    if (split[0] === '' || split[0].substr(0, 1) === ':') {\n      return new Result(false);\n    }\n    auth = split.shift()!;\n    if (auth.indexOf(':') >= 0 && auth.split(':').length > 2) {\n      return new Result(false);\n    }\n  }\n  hostname = split.join('@');\n  \n  port_str = null;\n  ipv6 = null;\n  const ipv6_match = hostname.match(wrapped_ipv6);\n  if (ipv6_match) {\n    host = '';\n    ipv6 = ipv6_match[1];\n    port_str = ipv6_match[2] || null;\n  } else {\n    split = hostname.split(':');\n    host = split.shift();\n    if (split.length) {\n      port_str = split.join(':');\n    }\n  }\n  \n  if (port_str !== null) {\n    port = parseInt(port_str, 10);\n    if (!/^[0-9]+$/.test(port_str) || port <= 0 || port > 65535) {\n      return new Result(false);\n    }\n  } else if (options.require_port) {\n    return new Result(false);\n  }\n  \n  if (options.host_whitelist) {\n    return new Result(checkHost(host, options.host_whitelist));\n  }\n  if (!isIP(host!) && !isFQDN(host!, options) && (!ipv6 || !isIP(ipv6, '6'))) {\n    return new Result(false);\n  }\n  \n  host = host || ipv6;\n  \n  if (options.host_blacklist && checkHost(host, options.host_blacklist)) {\n    return new Result(false);\n  }\n  \n  return new Result(true);\n}\n\n\n\n\n\n\n\n\n\n\n","import { MessageFunctionType, Result } from '../types';\nimport { isString } from './isString';\n\nexport interface IsURLFragmentContainedErrors {\n  URL_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n  FRAGMENT_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_URL_FRAGMENT_CONTAINED_ERRORS: IsURLFragmentContainedErrors = {\n  URL_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The URL argument ${arr![0]} is not a string.`;\n  },\n  FRAGMENT_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The fragment argument ${arr![0]} is not a string.`;\n  },\n};\n\n/**\n * Checks whether the `url` path\n * contains the `fragment` argument.\n * \n * Note that if the URL fragment does not\n * exist, then Javascript considers\n * the fragment to be an empty string or\n * ''.\n * \n * So if the fragment argument is also an \n * empty string, the validation result will\n * be true as an empty string contains and empty\n * string.\n * \n * Also Note that the validation of the url\n * argument should be performed before passing\n * the `url` argument to this validation.\n *\n * ### Example\n * ```\n * expect(isURLPathsEqual(urlA, \"/aa/bb/\").value).toBeTruthy();\n * ```\n * @param url The url string\n * @param path The path string\n */\n export function isURLFragmentContained(\n  url: string,\n  fragment: string\n): Result<boolean | undefined> {\n  if (!isString(url).value) {\n    return new Result(\n      undefined,\n      IS_URL_FRAGMENT_CONTAINED_ERRORS.URL_ARGUMENT_NOT_A_STRING,\n      [url]\n    );\n  }\n  if (!isString(fragment).value) {\n    return new Result(\n      undefined,\n      IS_URL_FRAGMENT_CONTAINED_ERRORS.FRAGMENT_ARGUMENT_NOT_A_STRING,\n      [fragment]\n    );\n  }\n\n  const hash = new URL(url).hash;\n  if (hash) {\n    return new Result(new URL(url).hash.substring(1).includes(fragment));\n  }\n  return new Result(''.includes(fragment));\n}","import { MessageFunctionType, Result } from '../types';\nimport { isString } from './isString';\n\nexport interface IsURLPathContainedErrors {\n  URL_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n  PATH_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_URL_PATH_CONTAINED_ERRORS: IsURLPathContainedErrors = {\n  URL_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The URL argument ${arr![0]} is not a string.`;\n  },\n  PATH_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The paths argument ${arr![0]} is not a string.`;\n  },\n};\n\n/**\n * Checks whether the `url` path\n * contains the `path` argument.\n * \n * Note that the validation of the url\n * argument should be performed before passing\n * the `url` argument to this validation.\n *\n * ### Example\n * ```\n * expect(isURLPathsEqual(urlA, \"/aa/bb/\").value).toBeTruthy();\n * ```\n * @param url The url string\n * @param path The path string\n */\n export function isURLPathContained(\n  url: string,\n  path: string\n): Result<boolean | undefined> {\n  if (!isString(url).value) {\n    return new Result(\n      undefined,\n      IS_URL_PATH_CONTAINED_ERRORS.URL_ARGUMENT_NOT_A_STRING,\n      [url]\n    );\n  }\n  if (!isString(path).value) {\n    return new Result(\n      undefined,\n      IS_URL_PATH_CONTAINED_ERRORS.PATH_ARGUMENT_NOT_A_STRING,\n      [path]\n    );\n  }\n  return new Result(new URL(url).pathname.includes(path));\n}","import { MessageFunctionType, Result } from '../types';\nimport { isString } from './isString';\n\nexport interface IsURLPathEqualErrors {\n  URL_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n  PATH_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_URL_PATH_EQUAL_ERRORS: IsURLPathEqualErrors = {\n  URL_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The URL argument ${arr![0]} is not a string.`;\n  },\n  PATH_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The paths argument ${arr![0]} is not a string.`;\n  },\n};\n\n/**\n * Checks whether the `url` path\n * is equal to the `path` argument.\n * \n * Note that the validation of the url\n * argument should be performed before passing\n * the `url` argument to this validation.\n *\n * ### Example\n * ```\n * expect(isURLPathEqual(urlA, \"/aa/bb/\").value).toBeTruthy();\n * ```\n * @param url The url string\n * @param path The path string\n */\nexport function isURLPathEqual(\n  url: string,\n  path: string\n): Result<boolean | undefined> {\n  if (!isString(url).value) {\n    return new Result(\n      undefined,\n      IS_URL_PATH_EQUAL_ERRORS.URL_ARGUMENT_NOT_A_STRING,\n      [url]\n    );\n  }\n  if (!isString(path).value) {\n    return new Result(\n      undefined,\n      IS_URL_PATH_EQUAL_ERRORS.PATH_ARGUMENT_NOT_A_STRING,\n      [path]\n    );\n  }\n  return new Result(path === new URL(url).pathname);\n}","import { MessageFunctionType, Result } from '../types';\nimport { isString } from './isString';\n\nexport interface IsURLFragmentEqualErrors {\n  URL_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n  FRAGMENT_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_URL_FRAGMENT_EQUAL_ERRORS: IsURLFragmentEqualErrors = {\n  URL_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The URL argument ${arr![0]} is not a string.`;\n  },\n  FRAGMENT_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The fragment argument ${arr![0]} is not a string.`;\n  },\n};\n\n/**\n * Checks whether the `url` fragment\n * is equal to the `fragment` argument.\n * \n * Note that the validation of the url\n * argument should be performed before passing\n * the `url` argument to this validation.\n *\n * ### Example\n * ```\n * expect(isURLFragmentEqual(urlA, \"/aa/bb/\").value).toBeTruthy();\n * ```\n * @param url The url string\n * @param fragment The fragment string\n */\nexport function isURLFragmentEqual(\n  url: string,\n  fragment: string\n): Result<boolean | undefined> {\n  if (!isString(url).value) {\n    return new Result(\n      undefined,\n      IS_URL_FRAGMENT_EQUAL_ERRORS.URL_ARGUMENT_NOT_A_STRING,\n      [url]\n    );\n  }\n  if (!isString(fragment).value) {\n    return new Result(\n      undefined,\n      IS_URL_FRAGMENT_EQUAL_ERRORS.FRAGMENT_ARGUMENT_NOT_A_STRING,\n      [fragment]\n    );\n  }\n  const hash = new URL(url).hash;\n  if (hash) {\n    return new Result(fragment === new URL(url).hash.substring(1));\n  }\n  return new Result(fragment === '');\n}","import { StringKeyRegEx } from '../types';\nimport { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsUUIDErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_UUID_ERRORS: IsUUIDErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\nconst uuid:StringKeyRegEx = {\n  3: /^[0-9A-F]{8}-[0-9A-F]{4}-3[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{12}$/i,\n  4: /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,\n  5: /^[0-9A-F]{8}-[0-9A-F]{4}-5[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,\n  all: /^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i,\n};\n\n/**\n * Checks whether the `target` is a valid UUID\n *    \n * ### Example\n * ```\n * expect(isUUID('A987FBC9-4BED-3078-CF07-9141BA07C9F3').value).toBeTruthy()\n * ```\n * @param target The target string\n * @param version The version\n */\nexport function isUUID(target:string, version?:string):Result<boolean|undefined>  {\n  version = version ? version : 'all'\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_UUID_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  const pattern = uuid[version];\n  return new Result(pattern && pattern.test(target));\n}","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsVariableWidthErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_VARIABLE_WIDTH_ERRORS: IsVariableWidthErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\nimport { fullWidth } from './isFullWidth';\nimport { halfWidth } from './isHalfWidth';\n\n/**\n * Test whether the string contains \n * a mixture of full and half-width chars.\n * \n * ### Example\n * ```\n * expect(('Ｆｶﾀｶﾅﾞﾬ').value).toBeTruthy()\n * ```\n * \n * @param target The target string\n */\nexport function isVariableWidth(target:string):Result<boolean|undefined>  {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_VARIABLE_WIDTH_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  return new Result(fullWidth.test(target) && halfWidth.test(target));\n}\n","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface IsWhitelistedErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n  WHITELIST_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const IS_WHITELISTED_ERRORS: IsWhitelistedErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  },\n  WHITELIST_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The whitelist argument ${arr![0]} is not a string.`;\n  }\n};\n//checks characters if they appear in the whitelist.\n\n/**\n * Checks whether the `target` characters \n * appear appear in the `whitelist`\n *    \n * ### Example\n * ```\n * expect(isWhitelisted('baz-foo', 'abcdefghijklmnopqrstuvwxyz-').value).toBeTruthy()\n * ```\n * @param target The target string\n * @param whitelist The white list\n */\nexport function isWhitelisted(target:string, whitelist:string):Result<boolean|undefined>  {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      IS_WHITELISTED_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  if (!isString(whitelist).value) {\n    return new Result(\n      undefined, \n      IS_WHITELISTED_ERRORS.WHITELIST_ARGUMENT_NOT_A_STRING,\n      [whitelist])\n  }\n  for (let i = target.length - 1; i >= 0; i--) {\n    if (whitelist.indexOf(target[i]) === -1) {\n      return new Result(false);\n    }\n  }\n  return new Result(true);\n}\n","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface BlacklistErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n  CHARS_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const BLACKLIST_ERRORS: BlacklistErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  },\n  CHARS_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The chars argument ${arr![0]} is not a string.`;\n  }\n};\n\n/**\n * Remove characters that appear\n * in the blacklist. \n * \n * Since the characters are used in a RegExp, some special \n * characters must be escaped.\n * \n * For example slashes `blacklist(input, '\\\\[\\\\]')`.\n * \n * @param target \n * @param chars\n */\nexport function blacklist(target: string, chars: string): Result<string|undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      BLACKLIST_ERRORS.TARGET_ARGUMENT_NOT_A_STRING, \n      [target])\n  }\n  if (!isString(chars).value) {\n    return new Result(\n      undefined, \n      BLACKLIST_ERRORS.CHARS_ARGUMENT_NOT_A_STRING, \n      [chars])\n  }\n  return new Result(target.replace(new RegExp(`[${chars}]+`, 'g'), ''));\n}","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface LTrimErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n  CHARS_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const LTRIM_ERRORS: LTrimErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  },\n  CHARS_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The chars argument ${arr![0]} is not a string.`;\n  }\n};\n\n/**\n * Trim characters from the left-side of the input.\n * \n * @param target The target\n * @param chars The characters to trim\n */\nexport function ltrim(target:string, chars:string):Result<string|undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      LTRIM_ERRORS.TARGET_ARGUMENT_NOT_A_STRING, \n      [target])\n  }\n  if (!isString(chars).value) {\n    return new Result(\n      undefined, \n      LTRIM_ERRORS.CHARS_ARGUMENT_NOT_A_STRING, \n      [chars])\n  }\n  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#Escaping\n  const pattern = chars ? new RegExp(`^[${chars.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')}]+`, 'g') : /^\\s+/g;\n  return new Result(target.replace(pattern, ''));\n}\n","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface RTrimErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n  CHARS_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const RTRIM_ERRORS: RTrimErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  },\n  CHARS_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The chars argument ${arr![0]} is not a string.`;\n  }\n};\n\n\n/**\n * \n * @param target The target\n * @param chars The charachters\n */\nexport function rtrim(target:string, chars:string):Result<string|undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      RTRIM_ERRORS.TARGET_ARGUMENT_NOT_A_STRING, \n      [target])\n  }\n  if (!isString(chars).value) {\n    return new Result(\n      undefined, \n      RTRIM_ERRORS.CHARS_ARGUMENT_NOT_A_STRING, \n      [chars])\n  }  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#Escaping\n  const pattern = chars ? new RegExp(`[${chars.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')}]+$`, 'g') : /\\s+$/g;\n  return new Result(target.replace(pattern, ''));\n}","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface StripLowErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const STRIP_LOW_ERRORS: StripLowErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\n\nimport { blacklist } from './blacklist';\n\n/**\n * Remove characters with a numerical \n * value < 32 and 127, mostly control characters. \n * \n * If keep_new_lines is true, \n * newline characters are preserved (\\n and \\r, hex 0xA and 0xD). \n * Unicode-safe in JavaScript.\n * \n * @param target The target\n * @param keep_new_lines \n */\nexport function stripLow(target:string, keep_new_lines:boolean) {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      STRIP_LOW_ERRORS.TARGET_ARGUMENT_NOT_A_STRING, \n      [target])\n  }\n  const chars = keep_new_lines ? '\\\\x00-\\\\x09\\\\x0B\\\\x0C\\\\x0E-\\\\x1F\\\\x7F' : '\\\\x00-\\\\x1F\\\\x7F';\n  return new Result(blacklist(target, chars));\n}\n","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface ToBooleanErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const TO_BOOLEAN_ERRORS: ToBooleanErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\n/**\n * Convert the input string to a boolean. \n * Everything except for '0', \n * 'false' and '' returns true. \n * In strict mode only '1' and 'true' return true.\n * \n * @param target \n * @param strict \n */\nexport function toBoolean(target:string, strict:boolean):Result<boolean | undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined,\n      TO_BOOLEAN_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  if (strict) {\n    return new Result(target === '1' || /^true$/i.test(target));\n  }\n  return new Result( target !== '0' && !/^false$/i.test(target) && target !== '');\n}","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface ToDateErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n  TARGET_ARGUMENT_COULD_NOT_BE_PARSED: MessageFunctionType;\n}\n\nexport const TO_DATE_ERRORS: ToDateErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  },\n  TARGET_ARGUMENT_COULD_NOT_BE_PARSED: (arr?: string[]) => {\n    return `The target date representation argument ${arr![0]} could not be parsed.`;\n  }\n};\n\n/**\n * Convert the input string to a date, \n * or null if the input is not a date.\n * \n * @param target The target\n */\nexport function toDate(target: string):Result<Date | undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined,\n      TO_DATE_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  const millis: number = Date.parse(target);\n  if (isNaN(millis)) {\n    return new Result(\n      undefined,\n      TO_DATE_ERRORS.TARGET_ARGUMENT_COULD_NOT_BE_PARSED,\n      [target])\n  }\n  return new Result(new Date(target));\n}","import { MessageFunctionType, Result } from '../types';\nimport { isFloat } from '../validators/isFloat';\n\nexport interface ToFloatErrors {\n  TARGET_IS_NOT_A_FLOAT: MessageFunctionType;\n}\n\nexport const TO_FLOAT_ERRORS: ToFloatErrors =\n{\n  TARGET_IS_NOT_A_FLOAT: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a float.`;\n  }\n};\n\n/**\n * Convert the input string to a float, \n * or NaN if the input is not a float.\n * \n * @param target The target\n */\nexport function toFloat(target:string):Result<number | undefined> {\n  if (!isFloat(target).value) {\n    return new Result(\n      undefined,\n      TO_FLOAT_ERRORS.TARGET_IS_NOT_A_FLOAT,\n      [target])\n  }\n  return new Result(parseFloat(target));\n}\n","import { MessageFunctionType, Result } from '../types';\nimport { isIntString } from '../validators/isIntString';\n\nexport interface ToIntErrors {\n  TARGET_IS_NOT_A_INT: MessageFunctionType;\n}\n\nexport const TO_INT_ERRORS: ToIntErrors =\n{\n  TARGET_IS_NOT_A_INT: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not an int.`;\n  }\n};\n\n/**\n * Convert the input string to an integer, \n * or NaN if the input is not an integer.\n * \n * @param target \n * @param radix \n */\nexport function toInt(target:string, radix:number):Result<number|undefined> {\n  if (!isIntString(target, radix).value) {\n    return new Result(\n      undefined,\n      TO_INT_ERRORS.TARGET_IS_NOT_A_INT,\n      [target])\n  }\n  return new Result(parseInt(target, radix || 10));\n}\n","import { rtrim } from './rtrim';\nimport { ltrim }  from './ltrim';\n\nimport { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface TrimErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n  CHARS_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const TRIM_ERRORS: TrimErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  },\n  CHARS_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\n/**\n * Trim characters (whitespace by default) \n * from both sides of the input.\n * \n * @param target The target\n * @param chars The characters\n */\nexport function trim(target:string, chars:string):Result<string|undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined, \n      TRIM_ERRORS.TARGET_ARGUMENT_NOT_A_STRING, \n      [target])\n  }\n  if (!isString(chars).value) {\n    return new Result(\n      undefined, \n      TRIM_ERRORS.CHARS_ARGUMENT_NOT_A_STRING,\n      [chars])\n  }\n  return rtrim(ltrim(target, chars).value!, chars);\n}","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface UnescapeErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const UNESCAPE_ERRORS: UnescapeErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\n/**\n * Replaces HTML encoded entities with <, >, &, ', \" and /.\n * \n * @param target The target\n */\nexport function unescape(target:string):Result<string | undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined,\n      UNESCAPE_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n\n  return new Result((target.replace(/&amp;/g, '&')\n    .replace(/&quot;/g, '\"')\n    .replace(/&#x27;/g, \"'\")\n    .replace(/&lt;/g, '<')\n    .replace(/&gt;/g, '>')\n    .replace(/&#x2F;/g, '/')\n    .replace(/&#x5C;/g, '\\\\')\n    .replace(/&#96;/g, '`')));\n}","import { MessageFunctionType, Result } from '../types';\nimport { isString } from '../validators/isString';\n\nexport interface WhiteErrors {\n  TARGET_ARGUMENT_NOT_A_STRING: MessageFunctionType;\n}\n\nexport const WHITELIST_ERRORS: WhiteErrors =\n{\n  TARGET_ARGUMENT_NOT_A_STRING: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a string.`;\n  }\n};\n\n/**\n * Remove characters that do not appear \n * in the whitelist. The characters are \n * used in a RegExp and so you will need \n * to escape some chars, e.g. `whitelist(input, '\\\\[\\\\]')`.\n * \n * @param target The target\n * @param chars The chars\n */\nexport function whitelist(target:string, chars:string):Result<string | undefined> {\n  if (!isString(target).value) {\n    return new Result(\n      undefined,\n      WHITELIST_ERRORS.TARGET_ARGUMENT_NOT_A_STRING,\n      [target])\n  }\n  return new Result(target.replace(new RegExp(`[^${chars}]+`, 'g'), ''));\n}","import { Types } from \"../types\";\nimport { MessageFunctionType, Result } from '../types';\nimport { isNumber } from \"./isNumber\";\n\nexport interface IsPositiveFiniteErrors {\n  TARGET_ARGUMENT_NOT_A_NUMBER: MessageFunctionType;\n}\n\nexport const IS_POSITIVE_FINITE_ERRORS: IsPositiveFiniteErrors =\n{\n  TARGET_ARGUMENT_NOT_A_NUMBER: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a number.`;\n  }\n};\n\n/**\n * Checks if the value is > 0 and finite.\n *    \n * ### Example\n * ```\n * expect(isPositiveFinite(4.4).value).toBeTruthy()\n * ```\n * @param target The value being checked.\n */\nexport function isPositiveFinite(target: number): Result<boolean | undefined> {\n  if (!isNumber(target).value) {\n    return new Result(\n      undefined,\n      IS_POSITIVE_FINITE_ERRORS.TARGET_ARGUMENT_NOT_A_NUMBER,\n      [target ? target.toString() : ''])\n  }\n  return new Result(typeof (target) === Types.NUMBER && isFinite(target) && target > 0);\n}","import { Types } from \"../types\";\nimport { MessageFunctionType, Result } from '../types';\nimport { isNumber } from \"./isNumber\";\n\nexport interface IsPositiveFiniteIntegerErrors {\n  TARGET_ARGUMENT_NOT_A_NUMBER: MessageFunctionType;\n}\n\nexport const IS_POSITIVE_FINITE_INTEGER_ERRORS: IsPositiveFiniteIntegerErrors =\n{\n  TARGET_ARGUMENT_NOT_A_NUMBER: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a number.`;\n  }\n};\n\n/**\n * Checks if the value is > 0 and finite.\n *    \n * ### Example\n * ```\n * expect(isPositiveFiniteInteger(10).value).toBeTruthy()\n * ```\n * @param target The value being checked.\n */\nexport function isPositiveFiniteInteger(target: number): Result<boolean | undefined> {\n  if (!isNumber(target).value) {\n    return new Result(\n      undefined,\n      IS_POSITIVE_FINITE_INTEGER_ERRORS.TARGET_ARGUMENT_NOT_A_NUMBER,\n      [target ? target.toString() : ''])\n  }\n  return new Result(typeof (target) === Types.NUMBER && isFinite(target) && target > 0 && Math.round(target) === target);\n}","import { Result, Types } from \"../types\";\n\n/**\n * Tests if the value is a number and is finite.\n * @param value The value being checked.\n * \n * ### Example\n * ```\n * expect(isFiniteNumber(4.4).value).toBeTruthy()\n * ```\n */\nexport function isFiniteNumber(value: number): Result<boolean | undefined> {\n    return new Result(typeof(value)  === Types.NUMBER && isFinite(value));\n}","import { Result, Types } from \"../types\";\n\n/**\n * Tests if the value is a finite integer number.\n * @param value The value being checked.\n * \n *    \n * ### Example\n * ```\n * expect(isFiniteInteger(1).value).toBeTruthy()\n * ```\n */\nexport function isFiniteInteger(value: number): Result<boolean | undefined> {\n    return new Result(typeof(value)  === Types.NUMBER && isFinite(value) && Math.round(value) === value);\n}","import { MessageFunctionType, Result } from '../types';\nimport { isNumber } from './isNumber';\n\nexport interface IsGreaterThanFiniteErrors {\n  TARGET_ARGUMENT_NOT_A_NUMBER: MessageFunctionType;\n  VALUE_ARGUMENT_NOT_A_NUMBER:MessageFunctionType;\n}\n\nexport const IS_GREATER_THAN_FINITE_ERRORS: IsGreaterThanFiniteErrors =\n{\n  TARGET_ARGUMENT_NOT_A_NUMBER: (arr?: string[]) => {\n    return `The target argument ${arr![0]} is not a number.`;\n  },\n  VALUE_ARGUMENT_NOT_A_NUMBER: (arr?: string[]) => {\n    return `The value argument ${arr![0]} is not a number.`;\n  }\n};\n\n/**\n * Tests that both `greater` and `than` are finite whether greater > than is true.\n *    \n * ### Example\n * ```\n * expect(isGreaterThanFinite(11,10).value).toBeTruthy()\n * ```\n * \n * @param greater The value being checked.\n * @param than The target value to perform the check against.\n */\nexport function isGreaterThanFinite(greater: number, than: number): Result<boolean | undefined> {\n    if (!isNumber(greater).value) {\n        return new Result(\n          undefined, \n          IS_GREATER_THAN_FINITE_ERRORS.VALUE_ARGUMENT_NOT_A_NUMBER,\n          [greater ? greater.toString(): ''])\n      }\n      if (!isNumber(than).value) {\n        return new Result(\n          undefined, \n          IS_GREATER_THAN_FINITE_ERRORS.TARGET_ARGUMENT_NOT_A_NUMBER,\n          [than ? than.toString(): ''])\n      }\n       \n    return new Result(typeof greater === \"number\" && \n    isFinite(greater) && \n    typeof than === \"number\" && \n    isFinite(than) && greater > than);\n}","/*\n * Public API Surface of fs-validatorts\n */\nexport * from './lib/utilities/url/urlFragment'\n\n/*\n * Public API Surface of validatorjs\n */\nexport * from './lib/validators/hasLowerCaseCharacters'\nexport * from './lib/validators/hasUpperCaseCharacters'\nexport * from './lib/validators/hasSpecialCharacters'\nexport * from './lib/validators/hasNumericCharacters'\nexport * from './lib/validators/isBoolean'\nexport * from './lib/validators/isSameInstant'\nexport * from './lib/validators/isInObjectValues'\nexport * from './lib/validators/isInObjectKeys'\nexport * from './lib/validators/isInArray'\nexport * from './lib/validators/isNotSuperString'\nexport * from './lib/validators/isSuperString'\nexport * from './lib/validators/isSubString'\nexport * from './lib/validators/isNumber'\nexport * from './lib/validators/isNotEmpty'\nexport * from './lib/validators/isNotSubString'\nexport * from './lib/validators/isNotEqualTo'\nexport * from './lib/validators/isNegative'\nexport * from './lib/validators/isLessThanFinite'\nexport * from './lib/validators/isMatch'\nexport * from './lib/validators/isMilitaryTime'\nexport * from './lib/validators/isInstanceOf'\nexport * from './lib/validators/isDefined'\nexport * from './lib/validators/isInRange'\nexport * from './lib/validators/isArraySizeGreaterThan'\nexport * from './lib/validators/isArraySizeLessThan'\nexport * from './lib/validators/isArrayUnique'\nexport * from './lib/validators/isDate'\nexport * from './lib/validators/alpha'\nexport * from './lib/validators/contains'\nexport * from './lib/validators/isEqualTo'\nexport * from './lib/sanitizers/escape'\nexport * from './lib/validators/isAfter'\nexport * from './lib/validators/isAlpha'\nexport * from './lib/validators/isAlphaNumeric'\nexport * from './lib/validators/isArray'\nexport * from './lib/validators/isArrayContainerOf'\nexport * from './lib/validators/isArrayEmpty'\nexport * from './lib/validators/isAscii'\nexport * from './lib/validators/isBase32'\nexport * from './lib/validators/isBase64'\nexport * from './lib/validators/isBefore'\nexport * from './lib/validators/isBIC'\nexport * from './lib/validators/isBooleanString'\nexport * from './lib/validators/isBtcAddress'\nexport * from './lib/validators/isByteLength'\nexport * from './lib/validators/isCreditCard'\nexport * from './lib/validators/isCurrency'\nexport * from './lib/validators/isDataURI'\nexport * from './lib/validators/isDecimal'\nexport * from './lib/validators/isDivisibleBy'\nexport * from './lib/validators/isEAN'\nexport * from './lib/validators/isEmail'\nexport * from './lib/validators/isEmpty'\nexport * from './lib/validators/isEthereumAddress'\nexport * from './lib/validators/isFloat'\nexport * from './lib/validators/isFQDN'\nexport * from './lib/validators/isFullWidth'\nexport * from './lib/validators/isHalfWidth'\nexport * from './lib/validators/isHash'\nexport * from './lib/validators/isHexadecimal'\nexport * from './lib/validators/isHexColor'\nexport * from './lib/validators/isHSL'\nexport * from './lib/validators/isIBAN'\n//export * from './lib/validators/isIdentityCard'\nexport * from './lib/validators/isIntString'\nexport * from './lib/validators/isInt'\nexport * from './lib/validators/isIP'\nexport * from './lib/validators/isISBN'\nexport * from './lib/validators/isISIN'\nexport * from './lib/validators/isISO8601'\nexport * from './lib/validators/isISO31661Alpha2'\nexport * from './lib/validators/isISO31661Alpha3'\nexport * from './lib/validators/isISRC'\nexport * from './lib/validators/isISSN'\nexport * from './lib/validators/isJSON'\nexport * from './lib/validators/isJWT'\nexport * from './lib/validators/isLatLong'\nexport * from './lib/validators/isLength'\nexport * from './lib/validators/isLocale'\nexport * from './lib/validators/isLowercase'\nexport * from './lib/validators/isLowercase'\nexport * from './lib/validators/isMACAddress'\nexport * from './lib/validators/isMagnetURI'\nexport * from './lib/validators/isMD5'\nexport * from './lib/validators/isMimeType'\nexport * from './lib/validators/isMobilePhone'\nexport * from './lib/validators/isMongoId'\nexport * from './lib/validators/isMultibyte'\nexport * from './lib/validators/isNumeric'\nexport * from './lib/validators/isOctal'\nexport * from './lib/validators/isPassportNumber'\nexport * from './lib/validators/isPort'\nexport * from './lib/validators/isPostalCode'\nexport * from './lib/validators/isRFC3339'\nexport * from './lib/validators/isRgbColor'\nexport * from './lib/validators/isSemVer'\nexport * from './lib/validators/isSlug'\nexport * from './lib/validators/isString'\nexport * from './lib/validators/isSurrogatePair'\nexport * from './lib/validators/isUppercase'\n\nexport * from './lib/validators/isURL'\nexport * from './lib/validators/isURLFragmentContained'\nexport * from './lib/validators/isURLPathContained'\nexport * from './lib/validators/isURLPathEqual'\nexport * from './lib/validators/isURLFragmentEqual'\n\nexport * from './lib/validators/isUUID'\nexport * from './lib/validators/isVariableWidth'\nexport * from './lib/validators/isWhitelisted'\nexport * from './lib/validators/matches'\n\n//========================================\n// Sanitizers\n//========================================\nexport * from './lib/sanitizers/blacklist'\nexport * from './lib/sanitizers/ltrim'\nexport * from './lib/sanitizers/rtrim'\nexport * from './lib/sanitizers/stripLow'\nexport * from './lib/sanitizers/toBoolean'\nexport * from './lib/sanitizers/toDate'\nexport * from './lib/sanitizers/toFloat'\nexport * from './lib/sanitizers/toInt'\nexport * from './lib/sanitizers/trim'\nexport * from './lib/sanitizers/unescape'\nexport * from './lib/sanitizers/whitelist'\n\nexport * from \"./lib/validators/isPositiveFinite\"\nexport * from \"./lib/validators/isPositiveFiniteInteger\"\nexport * from \"./lib/validators/isNonNegativeFinite\"\nexport * from \"./lib/validators/isNonNegativeFinite\"\nexport * from \"./lib/validators/isFiniteNumber\"\nexport * from \"./lib/validators/isFiniteInteger\"\nexport * from \"./lib/validators/isGreaterThanFinite\"\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["blacklist"],"mappings":"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K,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;AAC9G,IAAA,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;AAC9G,IAAA,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;AAC9G,IAAA,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;AAC9G,IAAA,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;AAC9G,IAAA,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;AAC9G,IAAA,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;AAC9G,IAAA,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;AAC9G,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"}