@archi-code/validation 0.0.0-stage → 3.0.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +28 -0
- package/README.md +345 -2
- package/dist/cjs/canBe/array.d.ts +1 -0
- package/dist/cjs/canBe/array.js +7 -0
- package/dist/cjs/canBe/boolean.d.ts +1 -0
- package/dist/cjs/canBe/boolean.js +7 -0
- package/dist/cjs/canBe/date.d.ts +1 -0
- package/dist/cjs/canBe/date.js +7 -0
- package/dist/cjs/canBe/enum.d.ts +1 -0
- package/dist/cjs/canBe/enum.js +7 -0
- package/dist/cjs/canBe/float.d.ts +1 -0
- package/dist/cjs/canBe/float.js +7 -0
- package/dist/cjs/canBe/index.d.ts +8 -0
- package/dist/cjs/canBe/index.js +20 -0
- package/dist/cjs/canBe/integer.d.ts +1 -0
- package/dist/cjs/canBe/integer.js +7 -0
- package/dist/cjs/canBe/json.d.ts +2 -0
- package/dist/cjs/canBe/json.js +9 -0
- package/dist/cjs/canBe/string.d.ts +1 -0
- package/dist/cjs/canBe/string.js +7 -0
- package/dist/cjs/convert/any-to-string.d.ts +1 -0
- package/dist/cjs/convert/any-to-string.js +64 -0
- package/dist/cjs/convert/array.d.ts +2 -0
- package/dist/cjs/convert/array.js +25 -0
- package/dist/cjs/convert/boolean.d.ts +5 -0
- package/dist/cjs/convert/boolean.js +30 -0
- package/dist/cjs/convert/date.d.ts +11 -0
- package/dist/cjs/convert/date.js +162 -0
- package/dist/cjs/convert/enum.d.ts +2 -0
- package/dist/cjs/convert/enum.js +11 -0
- package/dist/cjs/convert/float.d.ts +6 -0
- package/dist/cjs/convert/float.js +46 -0
- package/dist/cjs/convert/index.d.ts +16 -0
- package/dist/cjs/convert/index.js +24 -0
- package/dist/cjs/convert/integer.d.ts +6 -0
- package/dist/cjs/convert/integer.js +41 -0
- package/dist/cjs/convert/json.d.ts +7 -0
- package/dist/cjs/convert/json.js +81 -0
- package/dist/cjs/convert/result.d.ts +26 -0
- package/dist/cjs/convert/result.js +23 -0
- package/dist/cjs/convert/string.d.ts +2 -0
- package/dist/cjs/convert/string.js +13 -0
- package/dist/cjs/decorator/validate.d.ts +23 -0
- package/dist/cjs/decorator/validate.js +62 -0
- package/dist/cjs/decorator/validations.d.ts +35 -0
- package/dist/cjs/decorator/validations.js +75 -0
- package/dist/cjs/helpers/algorithms.d.ts +1 -0
- package/dist/cjs/helpers/algorithms.js +10 -0
- package/dist/cjs/helpers/analyzePassword.d.ts +9 -0
- package/dist/cjs/helpers/analyzePassword.js +41 -0
- package/dist/cjs/helpers/assertString.d.ts +1 -0
- package/dist/cjs/helpers/assertString.js +9 -0
- package/dist/cjs/helpers/boundedCache.d.ts +9 -0
- package/dist/cjs/helpers/boundedCache.js +33 -0
- package/dist/cjs/helpers/checkHost.d.ts +2 -0
- package/dist/cjs/helpers/checkHost.js +36 -0
- package/dist/cjs/helpers/config.d.ts +10 -0
- package/dist/cjs/helpers/config.js +34 -0
- package/dist/cjs/helpers/errors.d.ts +3 -0
- package/dist/cjs/helpers/errors.js +10 -0
- package/dist/cjs/helpers/escapeRegExp.d.ts +1 -0
- package/dist/cjs/helpers/escapeRegExp.js +6 -0
- package/dist/cjs/helpers/hasOwn.d.ts +1 -0
- package/dist/cjs/helpers/hasOwn.js +6 -0
- package/dist/cjs/helpers/merge.d.ts +1 -0
- package/dist/cjs/helpers/merge.js +15 -0
- package/dist/cjs/helpers/scorePassword.d.ts +9 -0
- package/dist/cjs/helpers/scorePassword.js +37 -0
- package/dist/cjs/index.d.ts +103 -0
- package/dist/cjs/index.js +220 -0
- package/dist/cjs/sanitizer/blacklist.d.ts +1 -0
- package/dist/cjs/sanitizer/blacklist.js +11 -0
- package/dist/cjs/sanitizer/escape.d.ts +1 -0
- package/dist/cjs/sanitizer/escape.js +16 -0
- package/dist/cjs/sanitizer/index.d.ts +10 -0
- package/dist/cjs/sanitizer/index.js +21 -0
- package/dist/cjs/sanitizer/ltrim.d.ts +1 -0
- package/dist/cjs/sanitizer/ltrim.js +13 -0
- package/dist/cjs/sanitizer/normalizeEmail.d.ts +16 -0
- package/dist/cjs/sanitizer/normalizeEmail.js +194 -0
- package/dist/cjs/sanitizer/rtrim.d.ts +1 -0
- package/dist/cjs/sanitizer/rtrim.js +21 -0
- package/dist/cjs/sanitizer/stripLow.d.ts +1 -0
- package/dist/cjs/sanitizer/stripLow.js +10 -0
- package/dist/cjs/sanitizer/trim.d.ts +1 -0
- package/dist/cjs/sanitizer/trim.js +14 -0
- package/dist/cjs/sanitizer/unescape.d.ts +1 -0
- package/dist/cjs/sanitizer/unescape.js +16 -0
- package/dist/cjs/sanitizer/whitelist.d.ts +1 -0
- package/dist/cjs/sanitizer/whitelist.js +11 -0
- package/dist/cjs/validators/alpha.d.ts +105 -0
- package/dist/cjs/validators/alpha.js +202 -0
- package/dist/cjs/validators/contains.d.ts +6 -0
- package/dist/cjs/validators/contains.js +27 -0
- package/dist/cjs/validators/equals.d.ts +4 -0
- package/dist/cjs/validators/equals.js +14 -0
- package/dist/cjs/validators/index.d.ts +242 -0
- package/dist/cjs/validators/index.js +193 -0
- package/dist/cjs/validators/isAbaRouting.d.ts +1 -0
- package/dist/cjs/validators/isAbaRouting.js +24 -0
- package/dist/cjs/validators/isAfter.d.ts +4 -0
- package/dist/cjs/validators/isAfter.js +15 -0
- package/dist/cjs/validators/isAlpha.d.ts +8 -0
- package/dist/cjs/validators/isAlpha.js +35 -0
- package/dist/cjs/validators/isAlphanumeric.d.ts +8 -0
- package/dist/cjs/validators/isAlphanumeric.js +35 -0
- package/dist/cjs/validators/isAscii.d.ts +1 -0
- package/dist/cjs/validators/isAscii.js +13 -0
- package/dist/cjs/validators/isBIC.d.ts +1 -0
- package/dist/cjs/validators/isBIC.js +18 -0
- package/dist/cjs/validators/isBase32.d.ts +4 -0
- package/dist/cjs/validators/isBase32.js +21 -0
- package/dist/cjs/validators/isBase58.d.ts +1 -0
- package/dist/cjs/validators/isBase58.js +13 -0
- package/dist/cjs/validators/isBase64.d.ts +5 -0
- package/dist/cjs/validators/isBase64.js +28 -0
- package/dist/cjs/validators/isBefore.d.ts +4 -0
- package/dist/cjs/validators/isBefore.js +15 -0
- package/dist/cjs/validators/isBoolean.d.ts +4 -0
- package/dist/cjs/validators/isBoolean.js +7 -0
- package/dist/cjs/validators/isBtcAddress.d.ts +1 -0
- package/dist/cjs/validators/isBtcAddress.js +14 -0
- package/dist/cjs/validators/isByteLength.d.ts +5 -0
- package/dist/cjs/validators/isByteLength.js +36 -0
- package/dist/cjs/validators/isCreditCard.d.ts +15 -0
- package/dist/cjs/validators/isCreditCard.js +50 -0
- package/dist/cjs/validators/isCurrency.d.ts +18 -0
- package/dist/cjs/validators/isCurrency.js +114 -0
- package/dist/cjs/validators/isDataURI.d.ts +1 -0
- package/dist/cjs/validators/isDataURI.js +39 -0
- package/dist/cjs/validators/isDate.d.ts +7 -0
- package/dist/cjs/validators/isDate.js +8 -0
- package/dist/cjs/validators/isDecimal.d.ts +6 -0
- package/dist/cjs/validators/isDecimal.js +46 -0
- package/dist/cjs/validators/isDivisibleBy.d.ts +4 -0
- package/dist/cjs/validators/isDivisibleBy.js +15 -0
- package/dist/cjs/validators/isEAN.d.ts +1 -0
- package/dist/cjs/validators/isEAN.js +31 -0
- package/dist/cjs/validators/isEmail.d.ts +14 -0
- package/dist/cjs/validators/isEmail.js +153 -0
- package/dist/cjs/validators/isEmpty.d.ts +4 -0
- package/dist/cjs/validators/isEmpty.js +17 -0
- package/dist/cjs/validators/isEthereumAddress.d.ts +1 -0
- package/dist/cjs/validators/isEthereumAddress.js +13 -0
- package/dist/cjs/validators/isFQDN.d.ts +9 -0
- package/dist/cjs/validators/isFQDN.js +68 -0
- package/dist/cjs/validators/isFloat.d.ts +9 -0
- package/dist/cjs/validators/isFloat.js +30 -0
- package/dist/cjs/validators/isFullWidth.d.ts +2 -0
- package/dist/cjs/validators/isFullWidth.js +14 -0
- package/dist/cjs/validators/isHSL.d.ts +1 -0
- package/dist/cjs/validators/isHSL.js +18 -0
- package/dist/cjs/validators/isHalfWidth.d.ts +2 -0
- package/dist/cjs/validators/isHalfWidth.js +14 -0
- package/dist/cjs/validators/isHash.d.ts +21 -0
- package/dist/cjs/validators/isHash.js +34 -0
- package/dist/cjs/validators/isHexColor.d.ts +4 -0
- package/dist/cjs/validators/isHexColor.js +20 -0
- package/dist/cjs/validators/isHexadecimal.d.ts +1 -0
- package/dist/cjs/validators/isHexadecimal.js +13 -0
- package/dist/cjs/validators/isIBAN.d.ts +6 -0
- package/dist/cjs/validators/isIBAN.js +145 -0
- package/dist/cjs/validators/isIMEI.d.ts +4 -0
- package/dist/cjs/validators/isIMEI.js +45 -0
- package/dist/cjs/validators/isIP.d.ts +5 -0
- package/dist/cjs/validators/isIP.js +38 -0
- package/dist/cjs/validators/isIPRange.d.ts +5 -0
- package/dist/cjs/validators/isIPRange.js +43 -0
- package/dist/cjs/validators/isISBN.d.ts +5 -0
- package/dist/cjs/validators/isISBN.js +51 -0
- package/dist/cjs/validators/isISIN.d.ts +1 -0
- package/dist/cjs/validators/isISIN.js +55 -0
- package/dist/cjs/validators/isISO15924.d.ts +2 -0
- package/dist/cjs/validators/isISO15924.js +287 -0
- package/dist/cjs/validators/isISO31661Alpha2.d.ts +5 -0
- package/dist/cjs/validators/isISO31661Alpha2.js +277 -0
- package/dist/cjs/validators/isISO31661Alpha3.d.ts +4 -0
- package/dist/cjs/validators/isISO31661Alpha3.js +275 -0
- package/dist/cjs/validators/isISO31661Numeric.d.ts +1 -0
- package/dist/cjs/validators/isISO31661Numeric.js +263 -0
- package/dist/cjs/validators/isISO4217.d.ts +2 -0
- package/dist/cjs/validators/isISO4217.js +195 -0
- package/dist/cjs/validators/isISO6346.d.ts +2 -0
- package/dist/cjs/validators/isISO6346.js +43 -0
- package/dist/cjs/validators/isISO6391.d.ts +1 -0
- package/dist/cjs/validators/isISO6391.js +199 -0
- package/dist/cjs/validators/isISO8601.d.ts +5 -0
- package/dist/cjs/validators/isISO8601.js +42 -0
- package/dist/cjs/validators/isISRC.d.ts +1 -0
- package/dist/cjs/validators/isISRC.js +13 -0
- package/dist/cjs/validators/isISSN.d.ts +5 -0
- package/dist/cjs/validators/isISSN.js +27 -0
- package/dist/cjs/validators/isIdentityCard.d.ts +24 -0
- package/dist/cjs/validators/isIdentityCard.js +442 -0
- package/dist/cjs/validators/isIn.d.ts +4 -0
- package/dist/cjs/validators/isIn.js +36 -0
- package/dist/cjs/validators/isInt.d.ts +8 -0
- package/dist/cjs/validators/isInt.js +29 -0
- package/dist/cjs/validators/isJSON.d.ts +5 -0
- package/dist/cjs/validators/isJSON.js +10 -0
- package/dist/cjs/validators/isJWT.d.ts +1 -0
- package/dist/cjs/validators/isJWT.js +23 -0
- package/dist/cjs/validators/isLatLong.d.ts +4 -0
- package/dist/cjs/validators/isLatLong.js +29 -0
- package/dist/cjs/validators/isLength.d.ts +7 -0
- package/dist/cjs/validators/isLength.js +28 -0
- package/dist/cjs/validators/isLicensePlate.d.ts +21 -0
- package/dist/cjs/validators/isLicensePlate.js +43 -0
- package/dist/cjs/validators/isLocale.d.ts +1 -0
- package/dist/cjs/validators/isLocale.js +29 -0
- package/dist/cjs/validators/isLowercase.d.ts +1 -0
- package/dist/cjs/validators/isLowercase.js +12 -0
- package/dist/cjs/validators/isLuhnNumber.d.ts +1 -0
- package/dist/cjs/validators/isLuhnNumber.js +37 -0
- package/dist/cjs/validators/isMACAddress.d.ts +6 -0
- package/dist/cjs/validators/isMACAddress.js +34 -0
- package/dist/cjs/validators/isMD5.d.ts +1 -0
- package/dist/cjs/validators/isMD5.js +13 -0
- package/dist/cjs/validators/isMagnetURI.d.ts +1 -0
- package/dist/cjs/validators/isMagnetURI.js +16 -0
- package/dist/cjs/validators/isMailtoURI.d.ts +4 -0
- package/dist/cjs/validators/isMailtoURI.js +53 -0
- package/dist/cjs/validators/isMimeType.d.ts +1 -0
- package/dist/cjs/validators/isMimeType.js +15 -0
- package/dist/cjs/validators/isMobilePhone.d.ts +171 -0
- package/dist/cjs/validators/isMobilePhone.js +212 -0
- package/dist/cjs/validators/isMongoId.d.ts +1 -0
- package/dist/cjs/validators/isMongoId.js +11 -0
- package/dist/cjs/validators/isMultibyte.d.ts +1 -0
- package/dist/cjs/validators/isMultibyte.js +13 -0
- package/dist/cjs/validators/isNotEmpty.d.ts +1 -0
- package/dist/cjs/validators/isNotEmpty.js +10 -0
- package/dist/cjs/validators/isNumeric.d.ts +5 -0
- package/dist/cjs/validators/isNumeric.js +34 -0
- package/dist/cjs/validators/isOctal.d.ts +1 -0
- package/dist/cjs/validators/isOctal.js +13 -0
- package/dist/cjs/validators/isPassportNumber.d.ts +69 -0
- package/dist/cjs/validators/isPassportNumber.js +84 -0
- package/dist/cjs/validators/isPort.d.ts +1 -0
- package/dist/cjs/validators/isPort.js +7 -0
- package/dist/cjs/validators/isPostalCode.d.ts +79 -0
- package/dist/cjs/validators/isPostalCode.js +108 -0
- package/dist/cjs/validators/isRFC3339.d.ts +1 -0
- package/dist/cjs/validators/isRFC3339.js +28 -0
- package/dist/cjs/validators/isRequired.d.ts +1 -0
- package/dist/cjs/validators/isRequired.js +6 -0
- package/dist/cjs/validators/isRgbColor.d.ts +5 -0
- package/dist/cjs/validators/isRgbColor.js +38 -0
- package/dist/cjs/validators/isSemVer.d.ts +1 -0
- package/dist/cjs/validators/isSemVer.js +15 -0
- package/dist/cjs/validators/isSlug.d.ts +1 -0
- package/dist/cjs/validators/isSlug.js +13 -0
- package/dist/cjs/validators/isStrongPassword.d.ts +8 -0
- package/dist/cjs/validators/isStrongPassword.js +25 -0
- package/dist/cjs/validators/isSurrogatePair.d.ts +1 -0
- package/dist/cjs/validators/isSurrogatePair.js +13 -0
- package/dist/cjs/validators/isTime.d.ts +5 -0
- package/dist/cjs/validators/isTime.js +37 -0
- package/dist/cjs/validators/isULID.d.ts +1 -0
- package/dist/cjs/validators/isULID.js +12 -0
- package/dist/cjs/validators/isURL.d.ts +22 -0
- package/dist/cjs/validators/isURL.js +215 -0
- package/dist/cjs/validators/isUUID.d.ts +5 -0
- package/dist/cjs/validators/isUUID.js +31 -0
- package/dist/cjs/validators/isUppercase.d.ts +1 -0
- package/dist/cjs/validators/isUppercase.js +12 -0
- package/dist/cjs/validators/isVAT.d.ts +75 -0
- package/dist/cjs/validators/isVAT.js +134 -0
- package/dist/cjs/validators/isVariableWidth.d.ts +1 -0
- package/dist/cjs/validators/isVariableWidth.js +14 -0
- package/dist/cjs/validators/isWhitelisted.d.ts +4 -0
- package/dist/cjs/validators/isWhitelisted.js +23 -0
- package/dist/cjs/validators/matches.d.ts +5 -0
- package/dist/cjs/validators/matches.js +29 -0
- package/dist/esm/canBe/array.d.ts +1 -0
- package/dist/esm/canBe/array.js +4 -0
- package/dist/esm/canBe/boolean.d.ts +1 -0
- package/dist/esm/canBe/boolean.js +4 -0
- package/dist/esm/canBe/date.d.ts +1 -0
- package/dist/esm/canBe/date.js +4 -0
- package/dist/esm/canBe/enum.d.ts +1 -0
- package/dist/esm/canBe/enum.js +4 -0
- package/dist/esm/canBe/float.d.ts +1 -0
- package/dist/esm/canBe/float.js +4 -0
- package/dist/esm/canBe/index.d.ts +8 -0
- package/dist/esm/canBe/index.js +8 -0
- package/dist/esm/canBe/integer.d.ts +1 -0
- package/dist/esm/canBe/integer.js +4 -0
- package/dist/esm/canBe/json.d.ts +2 -0
- package/dist/esm/canBe/json.js +5 -0
- package/dist/esm/canBe/string.d.ts +1 -0
- package/dist/esm/canBe/string.js +4 -0
- package/dist/esm/convert/any-to-string.d.ts +1 -0
- package/dist/esm/convert/any-to-string.js +61 -0
- package/dist/esm/convert/array.d.ts +2 -0
- package/dist/esm/convert/array.js +22 -0
- package/dist/esm/convert/boolean.d.ts +5 -0
- package/dist/esm/convert/boolean.js +27 -0
- package/dist/esm/convert/date.d.ts +11 -0
- package/dist/esm/convert/date.js +158 -0
- package/dist/esm/convert/enum.d.ts +2 -0
- package/dist/esm/convert/enum.js +8 -0
- package/dist/esm/convert/float.d.ts +6 -0
- package/dist/esm/convert/float.js +43 -0
- package/dist/esm/convert/index.d.ts +16 -0
- package/dist/esm/convert/index.js +10 -0
- package/dist/esm/convert/integer.d.ts +6 -0
- package/dist/esm/convert/integer.js +38 -0
- package/dist/esm/convert/json.d.ts +7 -0
- package/dist/esm/convert/json.js +77 -0
- package/dist/esm/convert/result.d.ts +26 -0
- package/dist/esm/convert/result.js +18 -0
- package/dist/esm/convert/string.d.ts +2 -0
- package/dist/esm/convert/string.js +10 -0
- package/dist/esm/decorator/validate.d.ts +23 -0
- package/dist/esm/decorator/validate.js +59 -0
- package/dist/esm/decorator/validations.d.ts +35 -0
- package/dist/esm/decorator/validations.js +68 -0
- package/dist/esm/helpers/algorithms.d.ts +1 -0
- package/dist/esm/helpers/algorithms.js +7 -0
- package/dist/esm/helpers/analyzePassword.d.ts +9 -0
- package/dist/esm/helpers/analyzePassword.js +38 -0
- package/dist/esm/helpers/assertString.d.ts +1 -0
- package/dist/esm/helpers/assertString.js +6 -0
- package/dist/esm/helpers/boundedCache.d.ts +9 -0
- package/dist/esm/helpers/boundedCache.js +29 -0
- package/dist/esm/helpers/checkHost.d.ts +2 -0
- package/dist/esm/helpers/checkHost.js +32 -0
- package/dist/esm/helpers/config.d.ts +10 -0
- package/dist/esm/helpers/config.js +29 -0
- package/dist/esm/helpers/errors.d.ts +3 -0
- package/dist/esm/helpers/errors.js +6 -0
- package/dist/esm/helpers/escapeRegExp.d.ts +1 -0
- package/dist/esm/helpers/escapeRegExp.js +3 -0
- package/dist/esm/helpers/hasOwn.d.ts +1 -0
- package/dist/esm/helpers/hasOwn.js +3 -0
- package/dist/esm/helpers/merge.d.ts +1 -0
- package/dist/esm/helpers/merge.js +12 -0
- package/dist/esm/helpers/scorePassword.d.ts +9 -0
- package/dist/esm/helpers/scorePassword.js +34 -0
- package/dist/esm/index.d.ts +103 -0
- package/dist/esm/index.js +98 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/sanitizer/blacklist.d.ts +1 -0
- package/dist/esm/sanitizer/blacklist.js +8 -0
- package/dist/esm/sanitizer/escape.d.ts +1 -0
- package/dist/esm/sanitizer/escape.js +13 -0
- package/dist/esm/sanitizer/index.d.ts +10 -0
- package/dist/esm/sanitizer/index.js +9 -0
- package/dist/esm/sanitizer/ltrim.d.ts +1 -0
- package/dist/esm/sanitizer/ltrim.js +10 -0
- package/dist/esm/sanitizer/normalizeEmail.d.ts +16 -0
- package/dist/esm/sanitizer/normalizeEmail.js +191 -0
- package/dist/esm/sanitizer/rtrim.d.ts +1 -0
- package/dist/esm/sanitizer/rtrim.js +18 -0
- package/dist/esm/sanitizer/stripLow.d.ts +1 -0
- package/dist/esm/sanitizer/stripLow.js +7 -0
- package/dist/esm/sanitizer/trim.d.ts +1 -0
- package/dist/esm/sanitizer/trim.js +11 -0
- package/dist/esm/sanitizer/unescape.d.ts +1 -0
- package/dist/esm/sanitizer/unescape.js +13 -0
- package/dist/esm/sanitizer/whitelist.d.ts +1 -0
- package/dist/esm/sanitizer/whitelist.js +8 -0
- package/dist/esm/validators/alpha.d.ts +105 -0
- package/dist/esm/validators/alpha.js +199 -0
- package/dist/esm/validators/contains.d.ts +6 -0
- package/dist/esm/validators/contains.js +24 -0
- package/dist/esm/validators/equals.d.ts +4 -0
- package/dist/esm/validators/equals.js +11 -0
- package/dist/esm/validators/index.d.ts +242 -0
- package/dist/esm/validators/index.js +190 -0
- package/dist/esm/validators/isAbaRouting.d.ts +1 -0
- package/dist/esm/validators/isAbaRouting.js +21 -0
- package/dist/esm/validators/isAfter.d.ts +4 -0
- package/dist/esm/validators/isAfter.js +12 -0
- package/dist/esm/validators/isAlpha.d.ts +8 -0
- package/dist/esm/validators/isAlpha.js +31 -0
- package/dist/esm/validators/isAlphanumeric.d.ts +8 -0
- package/dist/esm/validators/isAlphanumeric.js +31 -0
- package/dist/esm/validators/isAscii.d.ts +1 -0
- package/dist/esm/validators/isAscii.js +10 -0
- package/dist/esm/validators/isBIC.d.ts +1 -0
- package/dist/esm/validators/isBIC.js +15 -0
- package/dist/esm/validators/isBase32.d.ts +4 -0
- package/dist/esm/validators/isBase32.js +18 -0
- package/dist/esm/validators/isBase58.d.ts +1 -0
- package/dist/esm/validators/isBase58.js +10 -0
- package/dist/esm/validators/isBase64.d.ts +5 -0
- package/dist/esm/validators/isBase64.js +25 -0
- package/dist/esm/validators/isBefore.d.ts +4 -0
- package/dist/esm/validators/isBefore.js +12 -0
- package/dist/esm/validators/isBoolean.d.ts +4 -0
- package/dist/esm/validators/isBoolean.js +4 -0
- package/dist/esm/validators/isBtcAddress.d.ts +1 -0
- package/dist/esm/validators/isBtcAddress.js +11 -0
- package/dist/esm/validators/isByteLength.d.ts +5 -0
- package/dist/esm/validators/isByteLength.js +33 -0
- package/dist/esm/validators/isCreditCard.d.ts +15 -0
- package/dist/esm/validators/isCreditCard.js +47 -0
- package/dist/esm/validators/isCurrency.d.ts +18 -0
- package/dist/esm/validators/isCurrency.js +111 -0
- package/dist/esm/validators/isDataURI.d.ts +1 -0
- package/dist/esm/validators/isDataURI.js +36 -0
- package/dist/esm/validators/isDate.d.ts +7 -0
- package/dist/esm/validators/isDate.js +5 -0
- package/dist/esm/validators/isDecimal.d.ts +6 -0
- package/dist/esm/validators/isDecimal.js +43 -0
- package/dist/esm/validators/isDivisibleBy.d.ts +4 -0
- package/dist/esm/validators/isDivisibleBy.js +12 -0
- package/dist/esm/validators/isEAN.d.ts +1 -0
- package/dist/esm/validators/isEAN.js +28 -0
- package/dist/esm/validators/isEmail.d.ts +14 -0
- package/dist/esm/validators/isEmail.js +150 -0
- package/dist/esm/validators/isEmpty.d.ts +4 -0
- package/dist/esm/validators/isEmpty.js +14 -0
- package/dist/esm/validators/isEthereumAddress.d.ts +1 -0
- package/dist/esm/validators/isEthereumAddress.js +10 -0
- package/dist/esm/validators/isFQDN.d.ts +9 -0
- package/dist/esm/validators/isFQDN.js +65 -0
- package/dist/esm/validators/isFloat.d.ts +9 -0
- package/dist/esm/validators/isFloat.js +26 -0
- package/dist/esm/validators/isFullWidth.d.ts +2 -0
- package/dist/esm/validators/isFullWidth.js +10 -0
- package/dist/esm/validators/isHSL.d.ts +1 -0
- package/dist/esm/validators/isHSL.js +15 -0
- package/dist/esm/validators/isHalfWidth.d.ts +2 -0
- package/dist/esm/validators/isHalfWidth.js +10 -0
- package/dist/esm/validators/isHash.d.ts +21 -0
- package/dist/esm/validators/isHash.js +31 -0
- package/dist/esm/validators/isHexColor.d.ts +4 -0
- package/dist/esm/validators/isHexColor.js +17 -0
- package/dist/esm/validators/isHexadecimal.d.ts +1 -0
- package/dist/esm/validators/isHexadecimal.js +10 -0
- package/dist/esm/validators/isIBAN.d.ts +6 -0
- package/dist/esm/validators/isIBAN.js +141 -0
- package/dist/esm/validators/isIMEI.d.ts +4 -0
- package/dist/esm/validators/isIMEI.js +42 -0
- package/dist/esm/validators/isIP.d.ts +5 -0
- package/dist/esm/validators/isIP.js +35 -0
- package/dist/esm/validators/isIPRange.d.ts +5 -0
- package/dist/esm/validators/isIPRange.js +40 -0
- package/dist/esm/validators/isISBN.d.ts +5 -0
- package/dist/esm/validators/isISBN.js +48 -0
- package/dist/esm/validators/isISIN.d.ts +1 -0
- package/dist/esm/validators/isISIN.js +52 -0
- package/dist/esm/validators/isISO15924.d.ts +2 -0
- package/dist/esm/validators/isISO15924.js +283 -0
- package/dist/esm/validators/isISO31661Alpha2.d.ts +5 -0
- package/dist/esm/validators/isISO31661Alpha2.js +273 -0
- package/dist/esm/validators/isISO31661Alpha3.d.ts +4 -0
- package/dist/esm/validators/isISO31661Alpha3.js +272 -0
- package/dist/esm/validators/isISO31661Numeric.d.ts +1 -0
- package/dist/esm/validators/isISO31661Numeric.js +260 -0
- package/dist/esm/validators/isISO4217.d.ts +2 -0
- package/dist/esm/validators/isISO4217.js +191 -0
- package/dist/esm/validators/isISO6346.d.ts +2 -0
- package/dist/esm/validators/isISO6346.js +39 -0
- package/dist/esm/validators/isISO6391.d.ts +1 -0
- package/dist/esm/validators/isISO6391.js +196 -0
- package/dist/esm/validators/isISO8601.d.ts +5 -0
- package/dist/esm/validators/isISO8601.js +39 -0
- package/dist/esm/validators/isISRC.d.ts +1 -0
- package/dist/esm/validators/isISRC.js +10 -0
- package/dist/esm/validators/isISSN.d.ts +5 -0
- package/dist/esm/validators/isISSN.js +24 -0
- package/dist/esm/validators/isIdentityCard.d.ts +24 -0
- package/dist/esm/validators/isIdentityCard.js +439 -0
- package/dist/esm/validators/isIn.d.ts +4 -0
- package/dist/esm/validators/isIn.js +33 -0
- package/dist/esm/validators/isInt.d.ts +8 -0
- package/dist/esm/validators/isInt.js +26 -0
- package/dist/esm/validators/isJSON.d.ts +5 -0
- package/dist/esm/validators/isJSON.js +7 -0
- package/dist/esm/validators/isJWT.d.ts +1 -0
- package/dist/esm/validators/isJWT.js +20 -0
- package/dist/esm/validators/isLatLong.d.ts +4 -0
- package/dist/esm/validators/isLatLong.js +26 -0
- package/dist/esm/validators/isLength.d.ts +7 -0
- package/dist/esm/validators/isLength.js +25 -0
- package/dist/esm/validators/isLicensePlate.d.ts +21 -0
- package/dist/esm/validators/isLicensePlate.js +40 -0
- package/dist/esm/validators/isLocale.d.ts +1 -0
- package/dist/esm/validators/isLocale.js +26 -0
- package/dist/esm/validators/isLowercase.d.ts +1 -0
- package/dist/esm/validators/isLowercase.js +9 -0
- package/dist/esm/validators/isLuhnNumber.d.ts +1 -0
- package/dist/esm/validators/isLuhnNumber.js +34 -0
- package/dist/esm/validators/isMACAddress.d.ts +6 -0
- package/dist/esm/validators/isMACAddress.js +31 -0
- package/dist/esm/validators/isMD5.d.ts +1 -0
- package/dist/esm/validators/isMD5.js +10 -0
- package/dist/esm/validators/isMagnetURI.d.ts +1 -0
- package/dist/esm/validators/isMagnetURI.js +13 -0
- package/dist/esm/validators/isMailtoURI.d.ts +4 -0
- package/dist/esm/validators/isMailtoURI.js +50 -0
- package/dist/esm/validators/isMimeType.d.ts +1 -0
- package/dist/esm/validators/isMimeType.js +12 -0
- package/dist/esm/validators/isMobilePhone.d.ts +171 -0
- package/dist/esm/validators/isMobilePhone.js +208 -0
- package/dist/esm/validators/isMongoId.d.ts +1 -0
- package/dist/esm/validators/isMongoId.js +8 -0
- package/dist/esm/validators/isMultibyte.d.ts +1 -0
- package/dist/esm/validators/isMultibyte.js +10 -0
- package/dist/esm/validators/isNotEmpty.d.ts +1 -0
- package/dist/esm/validators/isNotEmpty.js +7 -0
- package/dist/esm/validators/isNumeric.d.ts +5 -0
- package/dist/esm/validators/isNumeric.js +31 -0
- package/dist/esm/validators/isOctal.d.ts +1 -0
- package/dist/esm/validators/isOctal.js +10 -0
- package/dist/esm/validators/isPassportNumber.d.ts +69 -0
- package/dist/esm/validators/isPassportNumber.js +80 -0
- package/dist/esm/validators/isPort.d.ts +1 -0
- package/dist/esm/validators/isPort.js +4 -0
- package/dist/esm/validators/isPostalCode.d.ts +79 -0
- package/dist/esm/validators/isPostalCode.js +104 -0
- package/dist/esm/validators/isRFC3339.d.ts +1 -0
- package/dist/esm/validators/isRFC3339.js +25 -0
- package/dist/esm/validators/isRequired.d.ts +1 -0
- package/dist/esm/validators/isRequired.js +3 -0
- package/dist/esm/validators/isRgbColor.d.ts +5 -0
- package/dist/esm/validators/isRgbColor.js +35 -0
- package/dist/esm/validators/isSemVer.d.ts +1 -0
- package/dist/esm/validators/isSemVer.js +12 -0
- package/dist/esm/validators/isSlug.d.ts +1 -0
- package/dist/esm/validators/isSlug.js +10 -0
- package/dist/esm/validators/isStrongPassword.d.ts +8 -0
- package/dist/esm/validators/isStrongPassword.js +22 -0
- package/dist/esm/validators/isSurrogatePair.d.ts +1 -0
- package/dist/esm/validators/isSurrogatePair.js +10 -0
- package/dist/esm/validators/isTime.d.ts +5 -0
- package/dist/esm/validators/isTime.js +34 -0
- package/dist/esm/validators/isULID.d.ts +1 -0
- package/dist/esm/validators/isULID.js +9 -0
- package/dist/esm/validators/isURL.d.ts +22 -0
- package/dist/esm/validators/isURL.js +212 -0
- package/dist/esm/validators/isUUID.d.ts +5 -0
- package/dist/esm/validators/isUUID.js +28 -0
- package/dist/esm/validators/isUppercase.d.ts +1 -0
- package/dist/esm/validators/isUppercase.js +9 -0
- package/dist/esm/validators/isVAT.d.ts +75 -0
- package/dist/esm/validators/isVAT.js +130 -0
- package/dist/esm/validators/isVariableWidth.d.ts +1 -0
- package/dist/esm/validators/isVariableWidth.js +11 -0
- package/dist/esm/validators/isWhitelisted.d.ts +4 -0
- package/dist/esm/validators/isWhitelisted.js +20 -0
- package/dist/esm/validators/matches.d.ts +5 -0
- package/dist/esm/validators/matches.js +26 -0
- package/package.json +110 -4
package/LICENSE
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Jose Guillermo
|
|
4
|
+
|
|
5
|
+
This package contains code derived from validator.js
|
|
6
|
+
(https://github.com/validatorjs/validator.js, forked from version 13.15.26 or earlier),
|
|
7
|
+
distributed under the MIT License:
|
|
8
|
+
|
|
9
|
+
Copyright (c) 2018 Chris O'Hara <cohara87@gmail.com>
|
|
10
|
+
|
|
11
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
12
|
+
a copy of this software and associated documentation files (the
|
|
13
|
+
"Software"), to deal in the Software without restriction, including
|
|
14
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
15
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
16
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
17
|
+
the following conditions:
|
|
18
|
+
|
|
19
|
+
The above copyright notice and this permission notice shall be
|
|
20
|
+
included in all copies or substantial portions of the Software.
|
|
21
|
+
|
|
22
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
23
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
24
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
25
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
26
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
27
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
28
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,346 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @archi-code/validation
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
String validators, type converters and sanitizers for TypeScript, in a single package. The
|
|
4
|
+
validators are a hardened port of [validator.js](https://github.com/validatorjs/validator.js).
|
|
5
|
+
There are no runtime dependencies, and the package ships dual CJS and ESM builds that also run
|
|
6
|
+
in the browser.
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
npm install @archi-code/validation
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## Three tools
|
|
13
|
+
|
|
14
|
+
| Tool | Question it answers | Returns |
|
|
15
|
+
| --------------------------------------------- | --------------------------------------------------- | ---------------------------------- |
|
|
16
|
+
| `isX(value, options?)` (also `validator.isX`) | Is this value a valid X? (email, URL, IBAN, phone…) | `boolean` |
|
|
17
|
+
| `toX(value, options?)` | Convert this value to type X. | `{ ok, value, error }` |
|
|
18
|
+
| `canBeX(value)` | Can this value be converted to type X? | `boolean` (always `toX(value).ok`) |
|
|
19
|
+
|
|
20
|
+
`convert/` is the only place where type rules live. `canBe` and the validators build on it and
|
|
21
|
+
never duplicate it, so `canBeX(v) === toX(v).ok` holds by construction.
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
import {
|
|
25
|
+
isEmail,
|
|
26
|
+
isIBAN,
|
|
27
|
+
isMobilePhone,
|
|
28
|
+
toInteger,
|
|
29
|
+
canBeDate,
|
|
30
|
+
sanitizer,
|
|
31
|
+
} from '@archi-code/validation';
|
|
32
|
+
|
|
33
|
+
isEmail('ana@example.com'); // true
|
|
34
|
+
isIBAN('DE89 3704 0044 0532 0130 00'); // true
|
|
35
|
+
isMobilePhone('+34612345678', { locale: 'es-ES' }); // true
|
|
36
|
+
|
|
37
|
+
const n = toInteger(' 42 ');
|
|
38
|
+
if (n.ok) n.value; // 42 (narrowed to number)
|
|
39
|
+
toInteger('abc'); // { ok: false, value: null, error: 'Value is not an integer' }
|
|
40
|
+
|
|
41
|
+
canBeDate('2024-01-31'); // true
|
|
42
|
+
sanitizer.escape('<a>'); // '<a>'
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Validator signatures
|
|
46
|
+
|
|
47
|
+
Every validator takes the value and, at most, one options object. There are three forms:
|
|
48
|
+
|
|
49
|
+
```ts
|
|
50
|
+
isPort(value); // only the value
|
|
51
|
+
isAlpha(value, options?); // every option is optional
|
|
52
|
+
isVAT(value, options); // the options object has at least one required property
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
- `value` is always `unknown`: the validator reads it and returns `false` when it is not valid.
|
|
56
|
+
- `options` is typed by the `<Validator>Options` interface exported next to the validator
|
|
57
|
+
(`IsVATOptions`, `IsAlphaOptions`, `MatchesOptions`…). A missing optional property takes the
|
|
58
|
+
validator's default.
|
|
59
|
+
- There are no positional parameters or shorthand forms: `isLength(v, 2, 10)`,
|
|
60
|
+
`isIP(v, 4)` or `isAfter(v, '2024-01-01')` are configuration errors. Use
|
|
61
|
+
`isLength(v, { min: 2, max: 10 })`, `isIP(v, { version: 4 })` and
|
|
62
|
+
`isAfter(v, { comparisonDate: '2024-01-01' })`.
|
|
63
|
+
|
|
64
|
+
```ts
|
|
65
|
+
import { isAlpha, isHash, isVAT } from '@archi-code/validation';
|
|
66
|
+
import type { IsAlphaOptions } from '@archi-code/validation';
|
|
67
|
+
|
|
68
|
+
const spanish: IsAlphaOptions = { locale: 'es-ES', ignore: ' ' };
|
|
69
|
+
isAlpha('año nuevo', spanish); // true
|
|
70
|
+
isAlpha('abc'); // true (locale defaults to 'en-US')
|
|
71
|
+
isHash('d41d8cd98f00b204e9800998ecf8427e', { algorithm: 'md5' }); // true
|
|
72
|
+
isVAT('GB999 9999 00', { countryCode: 'GB' }); // true
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Validators with required options
|
|
76
|
+
|
|
77
|
+
| Validator | Options | Required | Optional |
|
|
78
|
+
| ------------------ | ------------------------- | ------------- | -------------------------------------------------------------- |
|
|
79
|
+
| `contains` | `ContainsOptions` | `elem` | `ignoreCase` (default `false`), `minOccurrences` (default `1`) |
|
|
80
|
+
| `equals` | `EqualsOptions` | `comparison` | — |
|
|
81
|
+
| `isDivisibleBy` | `IsDivisibleByOptions` | `num` | — |
|
|
82
|
+
| `isHash` | `IsHashOptions` | `algorithm` | — |
|
|
83
|
+
| `isIn` | `IsInOptions` | `values` | — |
|
|
84
|
+
| `isLicensePlate` | `IsLicensePlateOptions` | `locale` | — |
|
|
85
|
+
| `isPassportNumber` | `IsPassportNumberOptions` | `countryCode` | — |
|
|
86
|
+
| `isPostalCode` | `IsPostalCodeOptions` | `locale` | — |
|
|
87
|
+
| `isVAT` | `IsVATOptions` | `countryCode` | — |
|
|
88
|
+
| `isWhitelisted` | `IsWhitelistedOptions` | `chars` | — |
|
|
89
|
+
| `matches` | `MatchesOptions` | `pattern` | `modifiers` |
|
|
90
|
+
|
|
91
|
+
### Validators with optional options
|
|
92
|
+
|
|
93
|
+
| Validator | Options | Properties |
|
|
94
|
+
| ------------------ | ------------------------- | -------------------------------------------------------------------------------------------------------------------- |
|
|
95
|
+
| `isAfter` | `IsAfterOptions` | `comparisonDate` (default: now) |
|
|
96
|
+
| `isAlpha` | `IsAlphaOptions` | `locale` (default `'en-US'`), `ignore` |
|
|
97
|
+
| `isAlphanumeric` | `IsAlphanumericOptions` | `locale` (default `'en-US'`), `ignore` |
|
|
98
|
+
| `isBase32` | `IsBase32Options` | `crockford` |
|
|
99
|
+
| `isBase64` | `IsBase64Options` | `urlSafe`, `padding` |
|
|
100
|
+
| `isBefore` | `IsBeforeOptions` | `comparisonDate` (default: now) |
|
|
101
|
+
| `isBoolean` | `IsBooleanOptions` | `loose` (default `false`) |
|
|
102
|
+
| `isByteLength` | `IsByteLengthOptions` | `min` (default `0`), `max` |
|
|
103
|
+
| `isCreditCard` | `IsCreditCardOptions` | `provider` |
|
|
104
|
+
| `isCurrency` | `IsCurrencyOptions` | `symbol`, `require_symbol`, `thousands_separator`, `decimal_separator`… (15 options) |
|
|
105
|
+
| `isDate` | `IsDateOptions` | `format` (default `'YYYY/MM/DD'`), `strictMode`, `delimiters`, `twoDigitYearPivot` |
|
|
106
|
+
| `isDecimal` | `IsDecimalOptions` | `force_decimal`, `decimal_digits`, `locale` |
|
|
107
|
+
| `isEmail` | `IsEmailOptions` | `allow_display_name`, `require_tld`, `host_whitelist`, `host_blacklist`… (11 options) |
|
|
108
|
+
| `isEmpty` | `IsEmptyOptions` | `ignore_whitespace` |
|
|
109
|
+
| `isFQDN` | `IsFQDNOptions` | `require_tld`, `allow_underscores`, `allow_trailing_dot`, `allow_numeric_tld`, `allow_wildcard`, `ignore_max_length` |
|
|
110
|
+
| `isFloat` | `IsFloatOptions` | `min`, `max`, `lt`, `gt`, `locale` |
|
|
111
|
+
| `isHexColor` | `IsHexColorOptions` | `require_hashtag` |
|
|
112
|
+
| `isIBAN` | `IsIBANOptions` | `whitelist`, `blacklist` |
|
|
113
|
+
| `isIdentityCard` | `IsIdentityCardOptions` | `locale` (default `'any'`) |
|
|
114
|
+
| `isIMEI` | `IsIMEIOptions` | `allow_hyphens` |
|
|
115
|
+
| `isInt` | `IsIntOptions` | `min`, `max`, `lt`, `gt`, `allow_leading_zeroes` |
|
|
116
|
+
| `isIP` | `IsIPOptions` | `version` (default: 4 or 6) |
|
|
117
|
+
| `isIPRange` | `IsIPRangeOptions` | `version` (default: 4 or 6) |
|
|
118
|
+
| `isISBN` | `IsISBNOptions` | `version` (default: 10 or 13) |
|
|
119
|
+
| `isISO31661Alpha2` | `IsISO31661Alpha2Options` | `userAssignedCodes` |
|
|
120
|
+
| `isISO31661Alpha3` | `IsISO31661Alpha3Options` | `userAssignedCodes` |
|
|
121
|
+
| `isISO8601` | `IsISO8601Options` | `strict`, `strictSeparator` |
|
|
122
|
+
| `isISSN` | `IsISSNOptions` | `case_sensitive`, `require_hyphen` |
|
|
123
|
+
| `isJSON` | `IsJSONOptions` | `allow_primitives`, `allow_any_value` |
|
|
124
|
+
| `isLatLong` | `IsLatLongOptions` | `checkDMS` |
|
|
125
|
+
| `isLength` | `IsLengthOptions` | `min` (default `0`), `max`, `discreteLengths`, `graphemes` |
|
|
126
|
+
| `isMACAddress` | `IsMACAddressOptions` | `no_separators`, `no_colons`, `eui` |
|
|
127
|
+
| `isMailtoURI` | `IsMailtoURIOptions` | the `isEmail` options, applied to every address |
|
|
128
|
+
| `isMobilePhone` | `IsMobilePhoneOptions` | `locale` (one, a list, or `'any'`; default: any), `strictMode` |
|
|
129
|
+
| `isNumeric` | `IsNumericOptions` | `no_symbols`, `locale` |
|
|
130
|
+
| `isRgbColor` | `IsRgbColorOptions` | `includePercentValues`, `allowSpaces` |
|
|
131
|
+
| `isStrongPassword` | `IsStrongPasswordOptions` | `minLength`, `minLowercase`, `minUppercase`, `minNumbers`, `minSymbols` |
|
|
132
|
+
| `isTime` | `IsTimeOptions` | `hourFormat`, `mode` |
|
|
133
|
+
| `isURL` | `IsURLOptions` | `protocols`, `require_tld`, `require_protocol`, `host_whitelist`… (19 options) |
|
|
134
|
+
| `isUUID` | `IsUUIDOptions` | `version` (default `'all'`) |
|
|
135
|
+
|
|
136
|
+
The full list of each validator's options, with their documentation, is in its interface: the
|
|
137
|
+
editor autocompletes them and flags unknown ones.
|
|
138
|
+
|
|
139
|
+
### Validators that only take the value
|
|
140
|
+
|
|
141
|
+
`isAbaRouting`, `isAscii`, `isBase58`, `isBIC`, `isBtcAddress`, `isDataURI`, `isEAN`,
|
|
142
|
+
`isEthereumAddress`, `isFullWidth`, `isHalfWidth`, `isHexadecimal`, `isHSL`, `isISIN`,
|
|
143
|
+
`isISO15924`, `isISO31661Numeric`, `isISO4217`, `isISO6346` (also `isFreightContainerID`),
|
|
144
|
+
`isISO6391`, `isISRC`, `isJWT`, `isLocale`, `isLowercase`, `isLuhnNumber`, `isMagnetURI`, `isMD5`,
|
|
145
|
+
`isMimeType`, `isMongoId`, `isMultibyte`, `isNotEmpty`, `isOctal`, `isPort`, `isRequired`, `isRFC3339`, `isSemVer`, `isSlug`,
|
|
146
|
+
`isSurrogatePair`, `isULID`, `isUppercase`, `isVariableWidth`.
|
|
147
|
+
|
|
148
|
+
## Tree-shaking: prefer named imports
|
|
149
|
+
|
|
150
|
+
Every validator is also exported on its own and is the very same function as its registry
|
|
151
|
+
member (`isEmail === validator.isEmail`). The package declares `"sideEffects": false`, so
|
|
152
|
+
bundlers keep only what you import:
|
|
153
|
+
|
|
154
|
+
```ts
|
|
155
|
+
import { isEmail } from '@archi-code/validation'; // isEmail + its helpers (~16 KB of ESM source)
|
|
156
|
+
import { validator } from '@archi-code/validation'; // every validator and locale table (~176 KB)
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
The sizes are unminified ESM source reachable from the import. Use `validator` when you need
|
|
160
|
+
dynamic access (`validator[name]`), and named imports everywhere else.
|
|
161
|
+
|
|
162
|
+
## Contract
|
|
163
|
+
|
|
164
|
+
- **A validator never throws because of the value.** `null`, objects, Symbols, huge strings and
|
|
165
|
+
unpaired surrogates all return `false`.
|
|
166
|
+
- **Invalid configuration throws `ValidationConfigError`, and only that.** This covers unknown
|
|
167
|
+
locales, country codes, algorithms or providers; a bad `decimal_digits`; a `host_blacklist`
|
|
168
|
+
that is not an array; a pattern that is not a valid RegExp; and similar cases. The error is
|
|
169
|
+
never a raw `TypeError` or `SyntaxError`.
|
|
170
|
+
- **One options object.** Every validator takes the value and, at most, one options object (see
|
|
171
|
+
[Validator signatures](#validator-signatures)). A string or a number in place of the object is
|
|
172
|
+
a configuration error.
|
|
173
|
+
- **`null` options mean "no options"**, exactly like `undefined`.
|
|
174
|
+
- **Converters never throw.** They always return `{ ok: true, value, error: null }` or
|
|
175
|
+
`{ ok: false, value: null, error }`. `error` is one of the fixed `ConvertMessages` and never
|
|
176
|
+
contains the value. A successful numeric result is always a finite number.
|
|
177
|
+
- **Non-string input.** Validators read their input with `toString`: strings are used as-is,
|
|
178
|
+
finite numbers are converted with `String()`, and booleans become `'true'`/`'false'`. For
|
|
179
|
+
example, `validator.isInt(5)` is `true`, and `validator.isAlpha(true)` is `true` because
|
|
180
|
+
`'true'` is alphabetic.
|
|
181
|
+
|
|
182
|
+
## Converters and their options
|
|
183
|
+
|
|
184
|
+
| Function | Default rule | Notable options |
|
|
185
|
+
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- |
|
|
186
|
+
| `toString` | Strings, booleans and finite numbers | — |
|
|
187
|
+
| `toBoolean` | `true`/`false`, `1`/`0`, and trimmed, case-insensitive `'true'`/`'false'`/`'1'`/`'0'` | `mode: 'strict' \| 'loose'` (`'loose'` also accepts `'yes'`/`'no'`) |
|
|
188
|
+
| `toInteger` | Safe integers, as numbers or trimmed `-?\d+` strings (`INTEGER_OVERFLOW` beyond ±2^53) | `syntax: 'validator'` (the isInt rule) |
|
|
189
|
+
| `toFloat` | Finite numbers, or trimmed strings in plain decimal notation (no `0x`/`0b`/`0o`) | `syntax: 'validator'`, `decimalSeparator` |
|
|
190
|
+
| `toDate` | `YYYY/MM/DD` with `/` or `-` as delimiter; the result is that day at 00:00 UTC | `format`, `delimiters`, `strictMode`, `iso: true`, `lax: true` |
|
|
191
|
+
| `toJson` | A non-empty plain JSON object, as JSON text or as an object that survives a JSON round trip (plain objects/arrays with string, boolean, finite number or null leaves — no functions, Dates, class instances…) | — |
|
|
192
|
+
| `toJsonValue` | Any JSON text that parses to an object or array | `allowPrimitives`, `allowAnyValue` |
|
|
193
|
+
| `toArray` | Arrays, or JSON text holding an array | — |
|
|
194
|
+
| `toEnum` | A string, number or boolean whose text form is one of the options | — |
|
|
195
|
+
|
|
196
|
+
> ISO date-times need the ISO rule: `canBeDate('2024-01-31T10:00:00Z')` is `false`, while
|
|
197
|
+
> `toDate('2024-01-31T10:00:00Z', { iso: true })` is `ok`.
|
|
198
|
+
|
|
199
|
+
`anyToString(value)` gives a readable description of any value, for logs and error messages. It
|
|
200
|
+
never throws.
|
|
201
|
+
|
|
202
|
+
## Validations decorator
|
|
203
|
+
|
|
204
|
+
Declare a class's validations with `@Validations` and run them with `runValidations(Class, value)`.
|
|
205
|
+
A built-in validation names its `validator` and gives its parameters as a single `properties`
|
|
206
|
+
object (required when the validator needs something, not allowed when it takes nothing). A custom validation names itself with `custom` and brings its own `fn`.
|
|
207
|
+
|
|
208
|
+
```ts
|
|
209
|
+
import { Validations, runValidations } from '@archi-code/validation';
|
|
210
|
+
|
|
211
|
+
@Validations([{ validator: 'isInt', properties: { min: 0 } }])
|
|
212
|
+
class Quantity {}
|
|
213
|
+
|
|
214
|
+
@Validations([
|
|
215
|
+
{ validator: 'isInt', properties: { min: 5 } }, // replaces the parent's isInt
|
|
216
|
+
{ custom: 'isEven', fn: (v) => Number(v) % 2 === 0, message: 'Must be even' },
|
|
217
|
+
])
|
|
218
|
+
class Pairs extends Quantity {}
|
|
219
|
+
|
|
220
|
+
// Pairs runs isInt { min: 5 }, then isEven — parent first, in declaration order
|
|
221
|
+
runValidations(Pairs, '3');
|
|
222
|
+
// { ok: false, value: '3', errors: [
|
|
223
|
+
// { validator: 'isInt', message: 'Value does not satisfy isInt' },
|
|
224
|
+
// { custom: 'isEven', message: 'Must be even' } ] }
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
`properties` is the validator's options object, passed as is:
|
|
228
|
+
`{ validator: 'isVAT', properties: { countryCode: 'ES' } }` runs `isVAT(value, { countryCode: 'ES' })`.
|
|
229
|
+
|
|
230
|
+
A built-in and a custom with the same name are different validations: neither replaces the other.
|
|
231
|
+
A subclass, or a later `@Validations` on the same class, replaces a matching validation in its
|
|
232
|
+
place. With a value (not `null` nor `undefined`), every validation runs, whether `isRequired` is declared or not. Without a value, only `isRequired` runs when it is declared (and fails); when it is not, the value is optional, no validation runs and the result is ok. A failure does not stop the rest, and `runValidations` returns `{ ok, value, errors }`:
|
|
233
|
+
`ok` is true when `errors` is empty. The declaration is checked when the class is decorated: an unknown validator, a
|
|
234
|
+
custom without its `fn`, a validation with both `validator` and `custom`, or the same validation
|
|
235
|
+
declared twice in one list throws `ValidationConfigError` right there, not on the first `runValidations`.
|
|
236
|
+
|
|
237
|
+
Full guide — when each part runs, inheritance, every check and pitfalls:
|
|
238
|
+
[docs/decorator.md](docs/decorator.md).
|
|
239
|
+
|
|
240
|
+
## Differences from validator.js
|
|
241
|
+
|
|
242
|
+
This package deliberately diverges from validator.js wherever the original accepted unsafe or
|
|
243
|
+
wrong input.
|
|
244
|
+
|
|
245
|
+
**Signatures**
|
|
246
|
+
|
|
247
|
+
validator.js passes some parameters positionally and accepts shorthand forms. Here they are
|
|
248
|
+
all properties of the options object:
|
|
249
|
+
|
|
250
|
+
| validator.js | @archi-code/validation |
|
|
251
|
+
| ------------------------------------------ | --------------------------------------------------------------------------- |
|
|
252
|
+
| `isAlpha(v, locale, { ignore })` | `isAlpha(v, { locale, ignore })` (same for `isAlphanumeric`) |
|
|
253
|
+
| `isMobilePhone(v, locale, { strictMode })` | `isMobilePhone(v, { locale, strictMode })` |
|
|
254
|
+
| `contains(v, elem, options)` | `contains(v, { elem, ignoreCase, minOccurrences })` |
|
|
255
|
+
| `matches(v, pattern, modifiers)` | `matches(v, { pattern, modifiers })` |
|
|
256
|
+
| `equals(v, comparison)` | `equals(v, { comparison })` |
|
|
257
|
+
| `isDivisibleBy(v, num)` | `isDivisibleBy(v, { num })` |
|
|
258
|
+
| `isHash(v, algorithm)` | `isHash(v, { algorithm })` |
|
|
259
|
+
| `isIn(v, values)` | `isIn(v, { values })` |
|
|
260
|
+
| `isWhitelisted(v, chars)` | `isWhitelisted(v, { chars })` |
|
|
261
|
+
| `isPostalCode(v, locale)` | `isPostalCode(v, { locale })` (same for `isLicensePlate`, `isIdentityCard`) |
|
|
262
|
+
| `isVAT(v, countryCode)` | `isVAT(v, { countryCode })` (same for `isPassportNumber`) |
|
|
263
|
+
| `isUUID(v, version)` | `isUUID(v, { version })` (same for `isIPRange`) |
|
|
264
|
+
| `isIP(v, version)` | `isIP(v, { version })` (same for `isISBN`) |
|
|
265
|
+
| `isLength(v, min, max)` | `isLength(v, { min, max })` (same for `isByteLength`) |
|
|
266
|
+
| `isDate(v, format)` | `isDate(v, { format })` |
|
|
267
|
+
| `isAfter(v, date)` | `isAfter(v, { comparisonDate })` (same for `isBefore`) |
|
|
268
|
+
|
|
269
|
+
**Security**
|
|
270
|
+
|
|
271
|
+
- **`isURL`** rejects a backslash in the authority. `http://evil.com\@good.com` is `false`
|
|
272
|
+
because browsers treat `\` as `/`.
|
|
273
|
+
- **`isURL`** never reads a code-executing scheme as a user name: `javascript:foo@example.com`
|
|
274
|
+
(also `vbscript:` and `data:`) is `false` unless `require_valid_protocol: false`. User and
|
|
275
|
+
password must use RFC 3986 userinfo characters, and C0 controls or DEL anywhere in the URL are
|
|
276
|
+
rejected.
|
|
277
|
+
- **`isURL` and `isEmail` host lists** compare hosts case-insensitively and ignore a trailing
|
|
278
|
+
dot. A bracketed IPv6 host is checked against the whitelist by its address.
|
|
279
|
+
- **`isEmail`**: the quoted local part rejects CR, LF, DEL and other control characters (header
|
|
280
|
+
injection), the local part rejects invisible characters (zero-width, bidi, BOM, non-ASCII
|
|
281
|
+
spaces), and a display name requires the closing `>`.
|
|
282
|
+
- **`isFQDN`**, and therefore `isURL` and `isEmail`, rejects invisible characters, bidi
|
|
283
|
+
controls, Unicode separators and unpaired surrogates in host names.
|
|
284
|
+
|
|
285
|
+
**Anchoring and syntax**
|
|
286
|
+
|
|
287
|
+
- `isCreditCard` (Mastercard), `isISO6346`, `isLicensePlate` (`pt-BR`, `fi-FI`),
|
|
288
|
+
`isPassportNumber` (`MZ`, `PH`), `isLatLong` and several `isVAT` rules now reject leading or
|
|
289
|
+
trailing garbage.
|
|
290
|
+
- `isMongoId` rejects a `0x`/`0h` prefix.
|
|
291
|
+
- `isVAT('', { countryCode: 'HN' })` is `false`.
|
|
292
|
+
|
|
293
|
+
**Numbers**
|
|
294
|
+
|
|
295
|
+
- `isFloat` rejects `'.e5'`, `'e5'` and values beyond the number range such as `'1e400'`, and it
|
|
296
|
+
reads the locale's decimal separator correctly.
|
|
297
|
+
- `isInt` compares bounds exactly beyond `Number.MAX_SAFE_INTEGER`, using BigInt on the
|
|
298
|
+
original text.
|
|
299
|
+
|
|
300
|
+
**Dates**
|
|
301
|
+
|
|
302
|
+
- `isISO8601(…, { strict: true })` accepts years 0000–0099.
|
|
303
|
+
- `isAfter` and `isBefore` parse dates deterministically, independent of the machine's time
|
|
304
|
+
zone. They accept ISO dates (including reduced precision such as `'2024'` or `'2024-03'`) and
|
|
305
|
+
the output of `Date#toString()` and `Date#toUTCString()`, but not engine-dependent formats
|
|
306
|
+
such as `'2030/01/01'` or `'Jan 1 2030'`.
|
|
307
|
+
|
|
308
|
+
**Other differences**
|
|
309
|
+
|
|
310
|
+
- `isAlpha` and `isAlphanumeric` take every character of `ignore` literally.
|
|
311
|
+
- `isIdentityCard` defaults to the `'any'` locale.
|
|
312
|
+
- `isJWT` rejects an empty header or payload.
|
|
313
|
+
- Unknown locales inside an `isMobilePhone` array throw instead of being skipped.
|
|
314
|
+
- `isTaxID` is not included.
|
|
315
|
+
- `isNotEmpty` is new: `true` for a string with at least one non-whitespace character or a
|
|
316
|
+
finite number; `false` for `''`, whitespace only (spaces, tabs, line breaks, Unicode spaces),
|
|
317
|
+
`null`, `undefined`, `NaN`, `Infinity`, booleans and any other value.
|
|
318
|
+
- `isRequired` is new: `false` only for `null` and `undefined`.
|
|
319
|
+
|
|
320
|
+
## Package setup
|
|
321
|
+
|
|
322
|
+
This package follows the monorepo package standard (`.claude/rules/packages.md`) with these
|
|
323
|
+
allowed extensions:
|
|
324
|
+
|
|
325
|
+
- **Web build.** `browser` field and `browser` export condition point to the ESM build, and
|
|
326
|
+
`check:dist` also runs `check-web.js` (no bare imports, no Node-only globals, the build runs in a
|
|
327
|
+
realm without Node APIs) plus the `web` checks of `test/dist/dist.check.js`. `exports["."]` adds
|
|
328
|
+
a `node` condition, so Node always takes the `import`/`require` entries with their own types and
|
|
329
|
+
never the `browser` one, and a last `default` to the ESM build for resolvers that match no
|
|
330
|
+
condition.
|
|
331
|
+
- **`sideEffects: false`**, so bundlers can drop unused validators (see Tree-shaking above).
|
|
332
|
+
- **`tsconfig.json`** sets `target` `ES2020` and adds `ES2022.Intl` to `lib` for `Intl.Segmenter`
|
|
333
|
+
(grapheme counting in `isLength`).
|
|
334
|
+
- **`tsconfig.spec.json`** (used by ts-jest) enables `esModuleInterop` for the default imports of
|
|
335
|
+
the ported specs (`assert`, `timezone-mock`) and turns off incremental builds.
|
|
336
|
+
- **`jest.injectGlobals: true`**, because the specs ported from validator.js (`test/validators`,
|
|
337
|
+
`test/sanitizer`, `test/helpers`) use Jest globals and are not edited. New specs import from
|
|
338
|
+
`@jest/globals`.
|
|
339
|
+
- **`benchmark/`** (tinybench, see `benchmark/README.md`): Prettier and ESLint cover it,
|
|
340
|
+
`check:types` type-checks `benchmark/tsconfig.json` and `npm run benchmark` runs it. Its local
|
|
341
|
+
best scores (`benchmark/best-scores.json`) are ignored in `.gitignore`.
|
|
342
|
+
- **`docs/`**: Prettier covers its Markdown.
|
|
343
|
+
|
|
344
|
+
## License
|
|
345
|
+
|
|
346
|
+
MIT
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function canBeArray(v: unknown): boolean;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function canBeBoolean(v: unknown): boolean;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function canBeDate(v: unknown): boolean;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function canBeEnum(v: unknown, options: readonly string[]): boolean;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function canBeFloat(v: unknown): boolean;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { canBeString } from './string';
|
|
2
|
+
export { canBeBoolean } from './boolean';
|
|
3
|
+
export { canBeInteger } from './integer';
|
|
4
|
+
export { canBeFloat } from './float';
|
|
5
|
+
export { canBeDate } from './date';
|
|
6
|
+
export { canBeJson, canBeJsonObject } from './json';
|
|
7
|
+
export { canBeArray } from './array';
|
|
8
|
+
export { canBeEnum } from './enum';
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.canBeEnum = exports.canBeArray = exports.canBeJsonObject = exports.canBeJson = exports.canBeDate = exports.canBeFloat = exports.canBeInteger = exports.canBeBoolean = exports.canBeString = void 0;
|
|
4
|
+
var string_1 = require("./string");
|
|
5
|
+
Object.defineProperty(exports, "canBeString", { enumerable: true, get: function () { return string_1.canBeString; } });
|
|
6
|
+
var boolean_1 = require("./boolean");
|
|
7
|
+
Object.defineProperty(exports, "canBeBoolean", { enumerable: true, get: function () { return boolean_1.canBeBoolean; } });
|
|
8
|
+
var integer_1 = require("./integer");
|
|
9
|
+
Object.defineProperty(exports, "canBeInteger", { enumerable: true, get: function () { return integer_1.canBeInteger; } });
|
|
10
|
+
var float_1 = require("./float");
|
|
11
|
+
Object.defineProperty(exports, "canBeFloat", { enumerable: true, get: function () { return float_1.canBeFloat; } });
|
|
12
|
+
var date_1 = require("./date");
|
|
13
|
+
Object.defineProperty(exports, "canBeDate", { enumerable: true, get: function () { return date_1.canBeDate; } });
|
|
14
|
+
var json_1 = require("./json");
|
|
15
|
+
Object.defineProperty(exports, "canBeJson", { enumerable: true, get: function () { return json_1.canBeJson; } });
|
|
16
|
+
Object.defineProperty(exports, "canBeJsonObject", { enumerable: true, get: function () { return json_1.canBeJsonObject; } });
|
|
17
|
+
var array_1 = require("./array");
|
|
18
|
+
Object.defineProperty(exports, "canBeArray", { enumerable: true, get: function () { return array_1.canBeArray; } });
|
|
19
|
+
var enum_1 = require("./enum");
|
|
20
|
+
Object.defineProperty(exports, "canBeEnum", { enumerable: true, get: function () { return enum_1.canBeEnum; } });
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function canBeInteger(v: unknown): boolean;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.canBeJsonObject = void 0;
|
|
4
|
+
exports.canBeJson = canBeJson;
|
|
5
|
+
const json_1 = require("../convert/json");
|
|
6
|
+
function canBeJson(v) {
|
|
7
|
+
return (0, json_1.toJson)(v).ok;
|
|
8
|
+
}
|
|
9
|
+
exports.canBeJsonObject = canBeJson;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function canBeString(v: unknown): boolean;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function anyToString(value: any): string;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.anyToString = anyToString;
|
|
4
|
+
const string_1 = require("./string");
|
|
5
|
+
function anyToString(value) {
|
|
6
|
+
try {
|
|
7
|
+
return describe(value, new WeakSet());
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
return '[Unrepresentable value]';
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function describe(value, seen) {
|
|
14
|
+
const text = (0, string_1.toString)(value);
|
|
15
|
+
if (text.ok) {
|
|
16
|
+
return text.value;
|
|
17
|
+
}
|
|
18
|
+
else if (value === null) {
|
|
19
|
+
return 'null';
|
|
20
|
+
}
|
|
21
|
+
else if (value === undefined) {
|
|
22
|
+
return 'undefined';
|
|
23
|
+
}
|
|
24
|
+
else if (typeof value === 'number' && isNaN(value)) {
|
|
25
|
+
return 'NaN';
|
|
26
|
+
}
|
|
27
|
+
else if (value instanceof Date) {
|
|
28
|
+
return isNaN(value.getTime()) ? 'Date(Invalid)' : `Date(${value.toISOString()})`;
|
|
29
|
+
}
|
|
30
|
+
else if (value instanceof Map || value instanceof Set) {
|
|
31
|
+
if (seen.has(value))
|
|
32
|
+
return '[Circular]';
|
|
33
|
+
seen.add(value);
|
|
34
|
+
const described = value instanceof Map
|
|
35
|
+
? `Map({${Array.from(value, ([key, val]) => `${describe(key, seen)}: ${describe(val, seen)}`).join(', ')}})`
|
|
36
|
+
: `Set(${Array.from(value, (item) => describe(item, seen)).join(', ')})`;
|
|
37
|
+
seen.delete(value);
|
|
38
|
+
return described;
|
|
39
|
+
}
|
|
40
|
+
else if (value instanceof RegExp) {
|
|
41
|
+
return `RegExp(${value.toString()})`;
|
|
42
|
+
}
|
|
43
|
+
else if (value instanceof Error) {
|
|
44
|
+
return `new ${value.name}(${value.message})`;
|
|
45
|
+
}
|
|
46
|
+
else if (value instanceof Promise) {
|
|
47
|
+
return 'Promise';
|
|
48
|
+
}
|
|
49
|
+
else if (typeof value === 'object') {
|
|
50
|
+
try {
|
|
51
|
+
return JSON.stringify(value) || value.toString();
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return '[Circular or too complex to stringify]';
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
else if (typeof value === 'function') {
|
|
58
|
+
return `Function(${value.name || 'anonymous'})`;
|
|
59
|
+
}
|
|
60
|
+
else if (typeof value === 'symbol') {
|
|
61
|
+
return value.toString();
|
|
62
|
+
}
|
|
63
|
+
return String(value);
|
|
64
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toArray = toArray;
|
|
4
|
+
const result_1 = require("./result");
|
|
5
|
+
function toArray(v) {
|
|
6
|
+
let isArray;
|
|
7
|
+
try {
|
|
8
|
+
isArray = Array.isArray(v);
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
return (0, result_1.failure)(result_1.ConvertMessages.ARRAY);
|
|
12
|
+
}
|
|
13
|
+
if (isArray)
|
|
14
|
+
return (0, result_1.success)(v);
|
|
15
|
+
if (typeof v !== 'string')
|
|
16
|
+
return (0, result_1.failure)(result_1.ConvertMessages.ARRAY);
|
|
17
|
+
let parsed;
|
|
18
|
+
try {
|
|
19
|
+
parsed = JSON.parse(v);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return (0, result_1.failure)(result_1.ConvertMessages.ARRAY);
|
|
23
|
+
}
|
|
24
|
+
return Array.isArray(parsed) ? (0, result_1.success)(parsed) : (0, result_1.failure)(result_1.ConvertMessages.ARRAY);
|
|
25
|
+
}
|