@archi-code/validation 0.0.0-stage → 3.0.0-alpha.1

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.
Files changed (548) hide show
  1. package/LICENSE +28 -0
  2. package/README.md +345 -2
  3. package/dist/cjs/canBe/array.d.ts +1 -0
  4. package/dist/cjs/canBe/array.js +7 -0
  5. package/dist/cjs/canBe/boolean.d.ts +1 -0
  6. package/dist/cjs/canBe/boolean.js +7 -0
  7. package/dist/cjs/canBe/date.d.ts +1 -0
  8. package/dist/cjs/canBe/date.js +7 -0
  9. package/dist/cjs/canBe/enum.d.ts +1 -0
  10. package/dist/cjs/canBe/enum.js +7 -0
  11. package/dist/cjs/canBe/float.d.ts +1 -0
  12. package/dist/cjs/canBe/float.js +7 -0
  13. package/dist/cjs/canBe/index.d.ts +8 -0
  14. package/dist/cjs/canBe/index.js +20 -0
  15. package/dist/cjs/canBe/integer.d.ts +1 -0
  16. package/dist/cjs/canBe/integer.js +7 -0
  17. package/dist/cjs/canBe/json.d.ts +2 -0
  18. package/dist/cjs/canBe/json.js +9 -0
  19. package/dist/cjs/canBe/string.d.ts +1 -0
  20. package/dist/cjs/canBe/string.js +7 -0
  21. package/dist/cjs/convert/any-to-string.d.ts +1 -0
  22. package/dist/cjs/convert/any-to-string.js +64 -0
  23. package/dist/cjs/convert/array.d.ts +2 -0
  24. package/dist/cjs/convert/array.js +25 -0
  25. package/dist/cjs/convert/boolean.d.ts +5 -0
  26. package/dist/cjs/convert/boolean.js +30 -0
  27. package/dist/cjs/convert/date.d.ts +11 -0
  28. package/dist/cjs/convert/date.js +162 -0
  29. package/dist/cjs/convert/enum.d.ts +2 -0
  30. package/dist/cjs/convert/enum.js +11 -0
  31. package/dist/cjs/convert/float.d.ts +6 -0
  32. package/dist/cjs/convert/float.js +46 -0
  33. package/dist/cjs/convert/index.d.ts +16 -0
  34. package/dist/cjs/convert/index.js +24 -0
  35. package/dist/cjs/convert/integer.d.ts +6 -0
  36. package/dist/cjs/convert/integer.js +41 -0
  37. package/dist/cjs/convert/json.d.ts +7 -0
  38. package/dist/cjs/convert/json.js +81 -0
  39. package/dist/cjs/convert/result.d.ts +26 -0
  40. package/dist/cjs/convert/result.js +23 -0
  41. package/dist/cjs/convert/string.d.ts +2 -0
  42. package/dist/cjs/convert/string.js +13 -0
  43. package/dist/cjs/decorator/validate.d.ts +23 -0
  44. package/dist/cjs/decorator/validate.js +62 -0
  45. package/dist/cjs/decorator/validations.d.ts +35 -0
  46. package/dist/cjs/decorator/validations.js +75 -0
  47. package/dist/cjs/helpers/algorithms.d.ts +1 -0
  48. package/dist/cjs/helpers/algorithms.js +10 -0
  49. package/dist/cjs/helpers/analyzePassword.d.ts +9 -0
  50. package/dist/cjs/helpers/analyzePassword.js +41 -0
  51. package/dist/cjs/helpers/assertString.d.ts +1 -0
  52. package/dist/cjs/helpers/assertString.js +9 -0
  53. package/dist/cjs/helpers/boundedCache.d.ts +9 -0
  54. package/dist/cjs/helpers/boundedCache.js +33 -0
  55. package/dist/cjs/helpers/checkHost.d.ts +2 -0
  56. package/dist/cjs/helpers/checkHost.js +36 -0
  57. package/dist/cjs/helpers/config.d.ts +10 -0
  58. package/dist/cjs/helpers/config.js +34 -0
  59. package/dist/cjs/helpers/errors.d.ts +3 -0
  60. package/dist/cjs/helpers/errors.js +10 -0
  61. package/dist/cjs/helpers/escapeRegExp.d.ts +1 -0
  62. package/dist/cjs/helpers/escapeRegExp.js +6 -0
  63. package/dist/cjs/helpers/hasOwn.d.ts +1 -0
  64. package/dist/cjs/helpers/hasOwn.js +6 -0
  65. package/dist/cjs/helpers/merge.d.ts +1 -0
  66. package/dist/cjs/helpers/merge.js +15 -0
  67. package/dist/cjs/helpers/scorePassword.d.ts +9 -0
  68. package/dist/cjs/helpers/scorePassword.js +37 -0
  69. package/dist/cjs/index.d.ts +103 -0
  70. package/dist/cjs/index.js +220 -0
  71. package/dist/cjs/sanitizer/blacklist.d.ts +1 -0
  72. package/dist/cjs/sanitizer/blacklist.js +11 -0
  73. package/dist/cjs/sanitizer/escape.d.ts +1 -0
  74. package/dist/cjs/sanitizer/escape.js +16 -0
  75. package/dist/cjs/sanitizer/index.d.ts +10 -0
  76. package/dist/cjs/sanitizer/index.js +21 -0
  77. package/dist/cjs/sanitizer/ltrim.d.ts +1 -0
  78. package/dist/cjs/sanitizer/ltrim.js +13 -0
  79. package/dist/cjs/sanitizer/normalizeEmail.d.ts +16 -0
  80. package/dist/cjs/sanitizer/normalizeEmail.js +194 -0
  81. package/dist/cjs/sanitizer/rtrim.d.ts +1 -0
  82. package/dist/cjs/sanitizer/rtrim.js +21 -0
  83. package/dist/cjs/sanitizer/stripLow.d.ts +1 -0
  84. package/dist/cjs/sanitizer/stripLow.js +10 -0
  85. package/dist/cjs/sanitizer/trim.d.ts +1 -0
  86. package/dist/cjs/sanitizer/trim.js +14 -0
  87. package/dist/cjs/sanitizer/unescape.d.ts +1 -0
  88. package/dist/cjs/sanitizer/unescape.js +16 -0
  89. package/dist/cjs/sanitizer/whitelist.d.ts +1 -0
  90. package/dist/cjs/sanitizer/whitelist.js +11 -0
  91. package/dist/cjs/validators/alpha.d.ts +105 -0
  92. package/dist/cjs/validators/alpha.js +202 -0
  93. package/dist/cjs/validators/contains.d.ts +6 -0
  94. package/dist/cjs/validators/contains.js +27 -0
  95. package/dist/cjs/validators/equals.d.ts +4 -0
  96. package/dist/cjs/validators/equals.js +14 -0
  97. package/dist/cjs/validators/index.d.ts +242 -0
  98. package/dist/cjs/validators/index.js +193 -0
  99. package/dist/cjs/validators/isAbaRouting.d.ts +1 -0
  100. package/dist/cjs/validators/isAbaRouting.js +24 -0
  101. package/dist/cjs/validators/isAfter.d.ts +4 -0
  102. package/dist/cjs/validators/isAfter.js +15 -0
  103. package/dist/cjs/validators/isAlpha.d.ts +8 -0
  104. package/dist/cjs/validators/isAlpha.js +35 -0
  105. package/dist/cjs/validators/isAlphanumeric.d.ts +8 -0
  106. package/dist/cjs/validators/isAlphanumeric.js +35 -0
  107. package/dist/cjs/validators/isAscii.d.ts +1 -0
  108. package/dist/cjs/validators/isAscii.js +13 -0
  109. package/dist/cjs/validators/isBIC.d.ts +1 -0
  110. package/dist/cjs/validators/isBIC.js +18 -0
  111. package/dist/cjs/validators/isBase32.d.ts +4 -0
  112. package/dist/cjs/validators/isBase32.js +21 -0
  113. package/dist/cjs/validators/isBase58.d.ts +1 -0
  114. package/dist/cjs/validators/isBase58.js +13 -0
  115. package/dist/cjs/validators/isBase64.d.ts +5 -0
  116. package/dist/cjs/validators/isBase64.js +28 -0
  117. package/dist/cjs/validators/isBefore.d.ts +4 -0
  118. package/dist/cjs/validators/isBefore.js +15 -0
  119. package/dist/cjs/validators/isBoolean.d.ts +4 -0
  120. package/dist/cjs/validators/isBoolean.js +7 -0
  121. package/dist/cjs/validators/isBtcAddress.d.ts +1 -0
  122. package/dist/cjs/validators/isBtcAddress.js +14 -0
  123. package/dist/cjs/validators/isByteLength.d.ts +5 -0
  124. package/dist/cjs/validators/isByteLength.js +36 -0
  125. package/dist/cjs/validators/isCreditCard.d.ts +15 -0
  126. package/dist/cjs/validators/isCreditCard.js +50 -0
  127. package/dist/cjs/validators/isCurrency.d.ts +18 -0
  128. package/dist/cjs/validators/isCurrency.js +114 -0
  129. package/dist/cjs/validators/isDataURI.d.ts +1 -0
  130. package/dist/cjs/validators/isDataURI.js +39 -0
  131. package/dist/cjs/validators/isDate.d.ts +7 -0
  132. package/dist/cjs/validators/isDate.js +8 -0
  133. package/dist/cjs/validators/isDecimal.d.ts +6 -0
  134. package/dist/cjs/validators/isDecimal.js +46 -0
  135. package/dist/cjs/validators/isDivisibleBy.d.ts +4 -0
  136. package/dist/cjs/validators/isDivisibleBy.js +15 -0
  137. package/dist/cjs/validators/isEAN.d.ts +1 -0
  138. package/dist/cjs/validators/isEAN.js +31 -0
  139. package/dist/cjs/validators/isEmail.d.ts +14 -0
  140. package/dist/cjs/validators/isEmail.js +153 -0
  141. package/dist/cjs/validators/isEmpty.d.ts +4 -0
  142. package/dist/cjs/validators/isEmpty.js +17 -0
  143. package/dist/cjs/validators/isEthereumAddress.d.ts +1 -0
  144. package/dist/cjs/validators/isEthereumAddress.js +13 -0
  145. package/dist/cjs/validators/isFQDN.d.ts +9 -0
  146. package/dist/cjs/validators/isFQDN.js +68 -0
  147. package/dist/cjs/validators/isFloat.d.ts +9 -0
  148. package/dist/cjs/validators/isFloat.js +30 -0
  149. package/dist/cjs/validators/isFullWidth.d.ts +2 -0
  150. package/dist/cjs/validators/isFullWidth.js +14 -0
  151. package/dist/cjs/validators/isHSL.d.ts +1 -0
  152. package/dist/cjs/validators/isHSL.js +18 -0
  153. package/dist/cjs/validators/isHalfWidth.d.ts +2 -0
  154. package/dist/cjs/validators/isHalfWidth.js +14 -0
  155. package/dist/cjs/validators/isHash.d.ts +21 -0
  156. package/dist/cjs/validators/isHash.js +34 -0
  157. package/dist/cjs/validators/isHexColor.d.ts +4 -0
  158. package/dist/cjs/validators/isHexColor.js +20 -0
  159. package/dist/cjs/validators/isHexadecimal.d.ts +1 -0
  160. package/dist/cjs/validators/isHexadecimal.js +13 -0
  161. package/dist/cjs/validators/isIBAN.d.ts +6 -0
  162. package/dist/cjs/validators/isIBAN.js +145 -0
  163. package/dist/cjs/validators/isIMEI.d.ts +4 -0
  164. package/dist/cjs/validators/isIMEI.js +45 -0
  165. package/dist/cjs/validators/isIP.d.ts +5 -0
  166. package/dist/cjs/validators/isIP.js +38 -0
  167. package/dist/cjs/validators/isIPRange.d.ts +5 -0
  168. package/dist/cjs/validators/isIPRange.js +43 -0
  169. package/dist/cjs/validators/isISBN.d.ts +5 -0
  170. package/dist/cjs/validators/isISBN.js +51 -0
  171. package/dist/cjs/validators/isISIN.d.ts +1 -0
  172. package/dist/cjs/validators/isISIN.js +55 -0
  173. package/dist/cjs/validators/isISO15924.d.ts +2 -0
  174. package/dist/cjs/validators/isISO15924.js +287 -0
  175. package/dist/cjs/validators/isISO31661Alpha2.d.ts +5 -0
  176. package/dist/cjs/validators/isISO31661Alpha2.js +277 -0
  177. package/dist/cjs/validators/isISO31661Alpha3.d.ts +4 -0
  178. package/dist/cjs/validators/isISO31661Alpha3.js +275 -0
  179. package/dist/cjs/validators/isISO31661Numeric.d.ts +1 -0
  180. package/dist/cjs/validators/isISO31661Numeric.js +263 -0
  181. package/dist/cjs/validators/isISO4217.d.ts +2 -0
  182. package/dist/cjs/validators/isISO4217.js +195 -0
  183. package/dist/cjs/validators/isISO6346.d.ts +2 -0
  184. package/dist/cjs/validators/isISO6346.js +43 -0
  185. package/dist/cjs/validators/isISO6391.d.ts +1 -0
  186. package/dist/cjs/validators/isISO6391.js +199 -0
  187. package/dist/cjs/validators/isISO8601.d.ts +5 -0
  188. package/dist/cjs/validators/isISO8601.js +42 -0
  189. package/dist/cjs/validators/isISRC.d.ts +1 -0
  190. package/dist/cjs/validators/isISRC.js +13 -0
  191. package/dist/cjs/validators/isISSN.d.ts +5 -0
  192. package/dist/cjs/validators/isISSN.js +27 -0
  193. package/dist/cjs/validators/isIdentityCard.d.ts +24 -0
  194. package/dist/cjs/validators/isIdentityCard.js +442 -0
  195. package/dist/cjs/validators/isIn.d.ts +4 -0
  196. package/dist/cjs/validators/isIn.js +36 -0
  197. package/dist/cjs/validators/isInt.d.ts +8 -0
  198. package/dist/cjs/validators/isInt.js +29 -0
  199. package/dist/cjs/validators/isJSON.d.ts +5 -0
  200. package/dist/cjs/validators/isJSON.js +10 -0
  201. package/dist/cjs/validators/isJWT.d.ts +1 -0
  202. package/dist/cjs/validators/isJWT.js +23 -0
  203. package/dist/cjs/validators/isLatLong.d.ts +4 -0
  204. package/dist/cjs/validators/isLatLong.js +29 -0
  205. package/dist/cjs/validators/isLength.d.ts +7 -0
  206. package/dist/cjs/validators/isLength.js +28 -0
  207. package/dist/cjs/validators/isLicensePlate.d.ts +21 -0
  208. package/dist/cjs/validators/isLicensePlate.js +43 -0
  209. package/dist/cjs/validators/isLocale.d.ts +1 -0
  210. package/dist/cjs/validators/isLocale.js +29 -0
  211. package/dist/cjs/validators/isLowercase.d.ts +1 -0
  212. package/dist/cjs/validators/isLowercase.js +12 -0
  213. package/dist/cjs/validators/isLuhnNumber.d.ts +1 -0
  214. package/dist/cjs/validators/isLuhnNumber.js +37 -0
  215. package/dist/cjs/validators/isMACAddress.d.ts +6 -0
  216. package/dist/cjs/validators/isMACAddress.js +34 -0
  217. package/dist/cjs/validators/isMD5.d.ts +1 -0
  218. package/dist/cjs/validators/isMD5.js +13 -0
  219. package/dist/cjs/validators/isMagnetURI.d.ts +1 -0
  220. package/dist/cjs/validators/isMagnetURI.js +16 -0
  221. package/dist/cjs/validators/isMailtoURI.d.ts +4 -0
  222. package/dist/cjs/validators/isMailtoURI.js +53 -0
  223. package/dist/cjs/validators/isMimeType.d.ts +1 -0
  224. package/dist/cjs/validators/isMimeType.js +15 -0
  225. package/dist/cjs/validators/isMobilePhone.d.ts +171 -0
  226. package/dist/cjs/validators/isMobilePhone.js +212 -0
  227. package/dist/cjs/validators/isMongoId.d.ts +1 -0
  228. package/dist/cjs/validators/isMongoId.js +11 -0
  229. package/dist/cjs/validators/isMultibyte.d.ts +1 -0
  230. package/dist/cjs/validators/isMultibyte.js +13 -0
  231. package/dist/cjs/validators/isNotEmpty.d.ts +1 -0
  232. package/dist/cjs/validators/isNotEmpty.js +10 -0
  233. package/dist/cjs/validators/isNumeric.d.ts +5 -0
  234. package/dist/cjs/validators/isNumeric.js +34 -0
  235. package/dist/cjs/validators/isOctal.d.ts +1 -0
  236. package/dist/cjs/validators/isOctal.js +13 -0
  237. package/dist/cjs/validators/isPassportNumber.d.ts +69 -0
  238. package/dist/cjs/validators/isPassportNumber.js +84 -0
  239. package/dist/cjs/validators/isPort.d.ts +1 -0
  240. package/dist/cjs/validators/isPort.js +7 -0
  241. package/dist/cjs/validators/isPostalCode.d.ts +79 -0
  242. package/dist/cjs/validators/isPostalCode.js +108 -0
  243. package/dist/cjs/validators/isRFC3339.d.ts +1 -0
  244. package/dist/cjs/validators/isRFC3339.js +28 -0
  245. package/dist/cjs/validators/isRequired.d.ts +1 -0
  246. package/dist/cjs/validators/isRequired.js +6 -0
  247. package/dist/cjs/validators/isRgbColor.d.ts +5 -0
  248. package/dist/cjs/validators/isRgbColor.js +38 -0
  249. package/dist/cjs/validators/isSemVer.d.ts +1 -0
  250. package/dist/cjs/validators/isSemVer.js +15 -0
  251. package/dist/cjs/validators/isSlug.d.ts +1 -0
  252. package/dist/cjs/validators/isSlug.js +13 -0
  253. package/dist/cjs/validators/isStrongPassword.d.ts +8 -0
  254. package/dist/cjs/validators/isStrongPassword.js +25 -0
  255. package/dist/cjs/validators/isSurrogatePair.d.ts +1 -0
  256. package/dist/cjs/validators/isSurrogatePair.js +13 -0
  257. package/dist/cjs/validators/isTime.d.ts +5 -0
  258. package/dist/cjs/validators/isTime.js +37 -0
  259. package/dist/cjs/validators/isULID.d.ts +1 -0
  260. package/dist/cjs/validators/isULID.js +12 -0
  261. package/dist/cjs/validators/isURL.d.ts +22 -0
  262. package/dist/cjs/validators/isURL.js +215 -0
  263. package/dist/cjs/validators/isUUID.d.ts +5 -0
  264. package/dist/cjs/validators/isUUID.js +31 -0
  265. package/dist/cjs/validators/isUppercase.d.ts +1 -0
  266. package/dist/cjs/validators/isUppercase.js +12 -0
  267. package/dist/cjs/validators/isVAT.d.ts +75 -0
  268. package/dist/cjs/validators/isVAT.js +134 -0
  269. package/dist/cjs/validators/isVariableWidth.d.ts +1 -0
  270. package/dist/cjs/validators/isVariableWidth.js +14 -0
  271. package/dist/cjs/validators/isWhitelisted.d.ts +4 -0
  272. package/dist/cjs/validators/isWhitelisted.js +23 -0
  273. package/dist/cjs/validators/matches.d.ts +5 -0
  274. package/dist/cjs/validators/matches.js +29 -0
  275. package/dist/esm/canBe/array.d.ts +1 -0
  276. package/dist/esm/canBe/array.js +4 -0
  277. package/dist/esm/canBe/boolean.d.ts +1 -0
  278. package/dist/esm/canBe/boolean.js +4 -0
  279. package/dist/esm/canBe/date.d.ts +1 -0
  280. package/dist/esm/canBe/date.js +4 -0
  281. package/dist/esm/canBe/enum.d.ts +1 -0
  282. package/dist/esm/canBe/enum.js +4 -0
  283. package/dist/esm/canBe/float.d.ts +1 -0
  284. package/dist/esm/canBe/float.js +4 -0
  285. package/dist/esm/canBe/index.d.ts +8 -0
  286. package/dist/esm/canBe/index.js +8 -0
  287. package/dist/esm/canBe/integer.d.ts +1 -0
  288. package/dist/esm/canBe/integer.js +4 -0
  289. package/dist/esm/canBe/json.d.ts +2 -0
  290. package/dist/esm/canBe/json.js +5 -0
  291. package/dist/esm/canBe/string.d.ts +1 -0
  292. package/dist/esm/canBe/string.js +4 -0
  293. package/dist/esm/convert/any-to-string.d.ts +1 -0
  294. package/dist/esm/convert/any-to-string.js +61 -0
  295. package/dist/esm/convert/array.d.ts +2 -0
  296. package/dist/esm/convert/array.js +22 -0
  297. package/dist/esm/convert/boolean.d.ts +5 -0
  298. package/dist/esm/convert/boolean.js +27 -0
  299. package/dist/esm/convert/date.d.ts +11 -0
  300. package/dist/esm/convert/date.js +158 -0
  301. package/dist/esm/convert/enum.d.ts +2 -0
  302. package/dist/esm/convert/enum.js +8 -0
  303. package/dist/esm/convert/float.d.ts +6 -0
  304. package/dist/esm/convert/float.js +43 -0
  305. package/dist/esm/convert/index.d.ts +16 -0
  306. package/dist/esm/convert/index.js +10 -0
  307. package/dist/esm/convert/integer.d.ts +6 -0
  308. package/dist/esm/convert/integer.js +38 -0
  309. package/dist/esm/convert/json.d.ts +7 -0
  310. package/dist/esm/convert/json.js +77 -0
  311. package/dist/esm/convert/result.d.ts +26 -0
  312. package/dist/esm/convert/result.js +18 -0
  313. package/dist/esm/convert/string.d.ts +2 -0
  314. package/dist/esm/convert/string.js +10 -0
  315. package/dist/esm/decorator/validate.d.ts +23 -0
  316. package/dist/esm/decorator/validate.js +59 -0
  317. package/dist/esm/decorator/validations.d.ts +35 -0
  318. package/dist/esm/decorator/validations.js +68 -0
  319. package/dist/esm/helpers/algorithms.d.ts +1 -0
  320. package/dist/esm/helpers/algorithms.js +7 -0
  321. package/dist/esm/helpers/analyzePassword.d.ts +9 -0
  322. package/dist/esm/helpers/analyzePassword.js +38 -0
  323. package/dist/esm/helpers/assertString.d.ts +1 -0
  324. package/dist/esm/helpers/assertString.js +6 -0
  325. package/dist/esm/helpers/boundedCache.d.ts +9 -0
  326. package/dist/esm/helpers/boundedCache.js +29 -0
  327. package/dist/esm/helpers/checkHost.d.ts +2 -0
  328. package/dist/esm/helpers/checkHost.js +32 -0
  329. package/dist/esm/helpers/config.d.ts +10 -0
  330. package/dist/esm/helpers/config.js +29 -0
  331. package/dist/esm/helpers/errors.d.ts +3 -0
  332. package/dist/esm/helpers/errors.js +6 -0
  333. package/dist/esm/helpers/escapeRegExp.d.ts +1 -0
  334. package/dist/esm/helpers/escapeRegExp.js +3 -0
  335. package/dist/esm/helpers/hasOwn.d.ts +1 -0
  336. package/dist/esm/helpers/hasOwn.js +3 -0
  337. package/dist/esm/helpers/merge.d.ts +1 -0
  338. package/dist/esm/helpers/merge.js +12 -0
  339. package/dist/esm/helpers/scorePassword.d.ts +9 -0
  340. package/dist/esm/helpers/scorePassword.js +34 -0
  341. package/dist/esm/index.d.ts +103 -0
  342. package/dist/esm/index.js +98 -0
  343. package/dist/esm/package.json +3 -0
  344. package/dist/esm/sanitizer/blacklist.d.ts +1 -0
  345. package/dist/esm/sanitizer/blacklist.js +8 -0
  346. package/dist/esm/sanitizer/escape.d.ts +1 -0
  347. package/dist/esm/sanitizer/escape.js +13 -0
  348. package/dist/esm/sanitizer/index.d.ts +10 -0
  349. package/dist/esm/sanitizer/index.js +9 -0
  350. package/dist/esm/sanitizer/ltrim.d.ts +1 -0
  351. package/dist/esm/sanitizer/ltrim.js +10 -0
  352. package/dist/esm/sanitizer/normalizeEmail.d.ts +16 -0
  353. package/dist/esm/sanitizer/normalizeEmail.js +191 -0
  354. package/dist/esm/sanitizer/rtrim.d.ts +1 -0
  355. package/dist/esm/sanitizer/rtrim.js +18 -0
  356. package/dist/esm/sanitizer/stripLow.d.ts +1 -0
  357. package/dist/esm/sanitizer/stripLow.js +7 -0
  358. package/dist/esm/sanitizer/trim.d.ts +1 -0
  359. package/dist/esm/sanitizer/trim.js +11 -0
  360. package/dist/esm/sanitizer/unescape.d.ts +1 -0
  361. package/dist/esm/sanitizer/unescape.js +13 -0
  362. package/dist/esm/sanitizer/whitelist.d.ts +1 -0
  363. package/dist/esm/sanitizer/whitelist.js +8 -0
  364. package/dist/esm/validators/alpha.d.ts +105 -0
  365. package/dist/esm/validators/alpha.js +199 -0
  366. package/dist/esm/validators/contains.d.ts +6 -0
  367. package/dist/esm/validators/contains.js +24 -0
  368. package/dist/esm/validators/equals.d.ts +4 -0
  369. package/dist/esm/validators/equals.js +11 -0
  370. package/dist/esm/validators/index.d.ts +242 -0
  371. package/dist/esm/validators/index.js +190 -0
  372. package/dist/esm/validators/isAbaRouting.d.ts +1 -0
  373. package/dist/esm/validators/isAbaRouting.js +21 -0
  374. package/dist/esm/validators/isAfter.d.ts +4 -0
  375. package/dist/esm/validators/isAfter.js +12 -0
  376. package/dist/esm/validators/isAlpha.d.ts +8 -0
  377. package/dist/esm/validators/isAlpha.js +31 -0
  378. package/dist/esm/validators/isAlphanumeric.d.ts +8 -0
  379. package/dist/esm/validators/isAlphanumeric.js +31 -0
  380. package/dist/esm/validators/isAscii.d.ts +1 -0
  381. package/dist/esm/validators/isAscii.js +10 -0
  382. package/dist/esm/validators/isBIC.d.ts +1 -0
  383. package/dist/esm/validators/isBIC.js +15 -0
  384. package/dist/esm/validators/isBase32.d.ts +4 -0
  385. package/dist/esm/validators/isBase32.js +18 -0
  386. package/dist/esm/validators/isBase58.d.ts +1 -0
  387. package/dist/esm/validators/isBase58.js +10 -0
  388. package/dist/esm/validators/isBase64.d.ts +5 -0
  389. package/dist/esm/validators/isBase64.js +25 -0
  390. package/dist/esm/validators/isBefore.d.ts +4 -0
  391. package/dist/esm/validators/isBefore.js +12 -0
  392. package/dist/esm/validators/isBoolean.d.ts +4 -0
  393. package/dist/esm/validators/isBoolean.js +4 -0
  394. package/dist/esm/validators/isBtcAddress.d.ts +1 -0
  395. package/dist/esm/validators/isBtcAddress.js +11 -0
  396. package/dist/esm/validators/isByteLength.d.ts +5 -0
  397. package/dist/esm/validators/isByteLength.js +33 -0
  398. package/dist/esm/validators/isCreditCard.d.ts +15 -0
  399. package/dist/esm/validators/isCreditCard.js +47 -0
  400. package/dist/esm/validators/isCurrency.d.ts +18 -0
  401. package/dist/esm/validators/isCurrency.js +111 -0
  402. package/dist/esm/validators/isDataURI.d.ts +1 -0
  403. package/dist/esm/validators/isDataURI.js +36 -0
  404. package/dist/esm/validators/isDate.d.ts +7 -0
  405. package/dist/esm/validators/isDate.js +5 -0
  406. package/dist/esm/validators/isDecimal.d.ts +6 -0
  407. package/dist/esm/validators/isDecimal.js +43 -0
  408. package/dist/esm/validators/isDivisibleBy.d.ts +4 -0
  409. package/dist/esm/validators/isDivisibleBy.js +12 -0
  410. package/dist/esm/validators/isEAN.d.ts +1 -0
  411. package/dist/esm/validators/isEAN.js +28 -0
  412. package/dist/esm/validators/isEmail.d.ts +14 -0
  413. package/dist/esm/validators/isEmail.js +150 -0
  414. package/dist/esm/validators/isEmpty.d.ts +4 -0
  415. package/dist/esm/validators/isEmpty.js +14 -0
  416. package/dist/esm/validators/isEthereumAddress.d.ts +1 -0
  417. package/dist/esm/validators/isEthereumAddress.js +10 -0
  418. package/dist/esm/validators/isFQDN.d.ts +9 -0
  419. package/dist/esm/validators/isFQDN.js +65 -0
  420. package/dist/esm/validators/isFloat.d.ts +9 -0
  421. package/dist/esm/validators/isFloat.js +26 -0
  422. package/dist/esm/validators/isFullWidth.d.ts +2 -0
  423. package/dist/esm/validators/isFullWidth.js +10 -0
  424. package/dist/esm/validators/isHSL.d.ts +1 -0
  425. package/dist/esm/validators/isHSL.js +15 -0
  426. package/dist/esm/validators/isHalfWidth.d.ts +2 -0
  427. package/dist/esm/validators/isHalfWidth.js +10 -0
  428. package/dist/esm/validators/isHash.d.ts +21 -0
  429. package/dist/esm/validators/isHash.js +31 -0
  430. package/dist/esm/validators/isHexColor.d.ts +4 -0
  431. package/dist/esm/validators/isHexColor.js +17 -0
  432. package/dist/esm/validators/isHexadecimal.d.ts +1 -0
  433. package/dist/esm/validators/isHexadecimal.js +10 -0
  434. package/dist/esm/validators/isIBAN.d.ts +6 -0
  435. package/dist/esm/validators/isIBAN.js +141 -0
  436. package/dist/esm/validators/isIMEI.d.ts +4 -0
  437. package/dist/esm/validators/isIMEI.js +42 -0
  438. package/dist/esm/validators/isIP.d.ts +5 -0
  439. package/dist/esm/validators/isIP.js +35 -0
  440. package/dist/esm/validators/isIPRange.d.ts +5 -0
  441. package/dist/esm/validators/isIPRange.js +40 -0
  442. package/dist/esm/validators/isISBN.d.ts +5 -0
  443. package/dist/esm/validators/isISBN.js +48 -0
  444. package/dist/esm/validators/isISIN.d.ts +1 -0
  445. package/dist/esm/validators/isISIN.js +52 -0
  446. package/dist/esm/validators/isISO15924.d.ts +2 -0
  447. package/dist/esm/validators/isISO15924.js +283 -0
  448. package/dist/esm/validators/isISO31661Alpha2.d.ts +5 -0
  449. package/dist/esm/validators/isISO31661Alpha2.js +273 -0
  450. package/dist/esm/validators/isISO31661Alpha3.d.ts +4 -0
  451. package/dist/esm/validators/isISO31661Alpha3.js +272 -0
  452. package/dist/esm/validators/isISO31661Numeric.d.ts +1 -0
  453. package/dist/esm/validators/isISO31661Numeric.js +260 -0
  454. package/dist/esm/validators/isISO4217.d.ts +2 -0
  455. package/dist/esm/validators/isISO4217.js +191 -0
  456. package/dist/esm/validators/isISO6346.d.ts +2 -0
  457. package/dist/esm/validators/isISO6346.js +39 -0
  458. package/dist/esm/validators/isISO6391.d.ts +1 -0
  459. package/dist/esm/validators/isISO6391.js +196 -0
  460. package/dist/esm/validators/isISO8601.d.ts +5 -0
  461. package/dist/esm/validators/isISO8601.js +39 -0
  462. package/dist/esm/validators/isISRC.d.ts +1 -0
  463. package/dist/esm/validators/isISRC.js +10 -0
  464. package/dist/esm/validators/isISSN.d.ts +5 -0
  465. package/dist/esm/validators/isISSN.js +24 -0
  466. package/dist/esm/validators/isIdentityCard.d.ts +24 -0
  467. package/dist/esm/validators/isIdentityCard.js +439 -0
  468. package/dist/esm/validators/isIn.d.ts +4 -0
  469. package/dist/esm/validators/isIn.js +33 -0
  470. package/dist/esm/validators/isInt.d.ts +8 -0
  471. package/dist/esm/validators/isInt.js +26 -0
  472. package/dist/esm/validators/isJSON.d.ts +5 -0
  473. package/dist/esm/validators/isJSON.js +7 -0
  474. package/dist/esm/validators/isJWT.d.ts +1 -0
  475. package/dist/esm/validators/isJWT.js +20 -0
  476. package/dist/esm/validators/isLatLong.d.ts +4 -0
  477. package/dist/esm/validators/isLatLong.js +26 -0
  478. package/dist/esm/validators/isLength.d.ts +7 -0
  479. package/dist/esm/validators/isLength.js +25 -0
  480. package/dist/esm/validators/isLicensePlate.d.ts +21 -0
  481. package/dist/esm/validators/isLicensePlate.js +40 -0
  482. package/dist/esm/validators/isLocale.d.ts +1 -0
  483. package/dist/esm/validators/isLocale.js +26 -0
  484. package/dist/esm/validators/isLowercase.d.ts +1 -0
  485. package/dist/esm/validators/isLowercase.js +9 -0
  486. package/dist/esm/validators/isLuhnNumber.d.ts +1 -0
  487. package/dist/esm/validators/isLuhnNumber.js +34 -0
  488. package/dist/esm/validators/isMACAddress.d.ts +6 -0
  489. package/dist/esm/validators/isMACAddress.js +31 -0
  490. package/dist/esm/validators/isMD5.d.ts +1 -0
  491. package/dist/esm/validators/isMD5.js +10 -0
  492. package/dist/esm/validators/isMagnetURI.d.ts +1 -0
  493. package/dist/esm/validators/isMagnetURI.js +13 -0
  494. package/dist/esm/validators/isMailtoURI.d.ts +4 -0
  495. package/dist/esm/validators/isMailtoURI.js +50 -0
  496. package/dist/esm/validators/isMimeType.d.ts +1 -0
  497. package/dist/esm/validators/isMimeType.js +12 -0
  498. package/dist/esm/validators/isMobilePhone.d.ts +171 -0
  499. package/dist/esm/validators/isMobilePhone.js +208 -0
  500. package/dist/esm/validators/isMongoId.d.ts +1 -0
  501. package/dist/esm/validators/isMongoId.js +8 -0
  502. package/dist/esm/validators/isMultibyte.d.ts +1 -0
  503. package/dist/esm/validators/isMultibyte.js +10 -0
  504. package/dist/esm/validators/isNotEmpty.d.ts +1 -0
  505. package/dist/esm/validators/isNotEmpty.js +7 -0
  506. package/dist/esm/validators/isNumeric.d.ts +5 -0
  507. package/dist/esm/validators/isNumeric.js +31 -0
  508. package/dist/esm/validators/isOctal.d.ts +1 -0
  509. package/dist/esm/validators/isOctal.js +10 -0
  510. package/dist/esm/validators/isPassportNumber.d.ts +69 -0
  511. package/dist/esm/validators/isPassportNumber.js +80 -0
  512. package/dist/esm/validators/isPort.d.ts +1 -0
  513. package/dist/esm/validators/isPort.js +4 -0
  514. package/dist/esm/validators/isPostalCode.d.ts +79 -0
  515. package/dist/esm/validators/isPostalCode.js +104 -0
  516. package/dist/esm/validators/isRFC3339.d.ts +1 -0
  517. package/dist/esm/validators/isRFC3339.js +25 -0
  518. package/dist/esm/validators/isRequired.d.ts +1 -0
  519. package/dist/esm/validators/isRequired.js +3 -0
  520. package/dist/esm/validators/isRgbColor.d.ts +5 -0
  521. package/dist/esm/validators/isRgbColor.js +35 -0
  522. package/dist/esm/validators/isSemVer.d.ts +1 -0
  523. package/dist/esm/validators/isSemVer.js +12 -0
  524. package/dist/esm/validators/isSlug.d.ts +1 -0
  525. package/dist/esm/validators/isSlug.js +10 -0
  526. package/dist/esm/validators/isStrongPassword.d.ts +8 -0
  527. package/dist/esm/validators/isStrongPassword.js +22 -0
  528. package/dist/esm/validators/isSurrogatePair.d.ts +1 -0
  529. package/dist/esm/validators/isSurrogatePair.js +10 -0
  530. package/dist/esm/validators/isTime.d.ts +5 -0
  531. package/dist/esm/validators/isTime.js +34 -0
  532. package/dist/esm/validators/isULID.d.ts +1 -0
  533. package/dist/esm/validators/isULID.js +9 -0
  534. package/dist/esm/validators/isURL.d.ts +22 -0
  535. package/dist/esm/validators/isURL.js +212 -0
  536. package/dist/esm/validators/isUUID.d.ts +5 -0
  537. package/dist/esm/validators/isUUID.js +28 -0
  538. package/dist/esm/validators/isUppercase.d.ts +1 -0
  539. package/dist/esm/validators/isUppercase.js +9 -0
  540. package/dist/esm/validators/isVAT.d.ts +75 -0
  541. package/dist/esm/validators/isVAT.js +130 -0
  542. package/dist/esm/validators/isVariableWidth.d.ts +1 -0
  543. package/dist/esm/validators/isVariableWidth.js +11 -0
  544. package/dist/esm/validators/isWhitelisted.d.ts +4 -0
  545. package/dist/esm/validators/isWhitelisted.js +20 -0
  546. package/dist/esm/validators/matches.d.ts +5 -0
  547. package/dist/esm/validators/matches.js +26 -0
  548. package/package.json +110 -4
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toBoolean = toBoolean;
4
+ const result_1 = require("./result");
5
+ const TRUE_VALUES = { default: ['true', '1'], strict: ['true', '1'], loose: ['true', '1', 'yes'] };
6
+ const FALSE_VALUES = {
7
+ default: ['false', '0'],
8
+ strict: ['false', '0'],
9
+ loose: ['false', '0', 'no'],
10
+ };
11
+ function toBoolean(v, options) {
12
+ if (typeof v === 'boolean')
13
+ return (0, result_1.success)(v);
14
+ if (typeof v === 'number') {
15
+ if (v === 1)
16
+ return (0, result_1.success)(true);
17
+ if (v === 0)
18
+ return (0, result_1.success)(false);
19
+ return (0, result_1.failure)(result_1.ConvertMessages.BOOLEAN);
20
+ }
21
+ if (typeof v === 'string') {
22
+ const mode = options?.mode === 'strict' || options?.mode === 'loose' ? options.mode : 'default';
23
+ const s = mode === 'strict' ? v : mode === 'loose' ? v.toLowerCase() : v.trim().toLowerCase();
24
+ if (TRUE_VALUES[mode].includes(s))
25
+ return (0, result_1.success)(true);
26
+ if (FALSE_VALUES[mode].includes(s))
27
+ return (0, result_1.success)(false);
28
+ }
29
+ return (0, result_1.failure)(result_1.ConvertMessages.BOOLEAN);
30
+ }
@@ -0,0 +1,11 @@
1
+ import type { Converted } from './result';
2
+ export declare function isCalendarDate(year: number, month: number, day: number): boolean;
3
+ export interface DateConvertOptions {
4
+ format?: string;
5
+ delimiters?: string[];
6
+ strictMode?: boolean;
7
+ twoDigitYearPivot?: number;
8
+ iso?: boolean;
9
+ lax?: boolean;
10
+ }
11
+ export declare function toDate(v: unknown, options?: DateConvertOptions): Converted<Date>;
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isCalendarDate = isCalendarDate;
4
+ exports.toDate = toDate;
5
+ const result_1 = require("./result");
6
+ const DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
7
+ function isLeapYear(year) {
8
+ return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
9
+ }
10
+ function isCalendarDate(year, month, day) {
11
+ if (month < 1 || month > 12 || day < 1)
12
+ return false;
13
+ return day <= (month === 2 && isLeapYear(year) ? 29 : DAYS_IN_MONTH[month - 1]);
14
+ }
15
+ function validTime(hour, minute, second) {
16
+ return Number(hour ?? 0) <= 23 && Number(minute ?? 0) <= 59 && Number(second ?? 0) <= 59;
17
+ }
18
+ function validZone(zone) {
19
+ return (zone === undefined ||
20
+ zone === 'Z' ||
21
+ (Number(zone.slice(1, 3)) <= 23 && Number(zone.slice(4, 6)) <= 59));
22
+ }
23
+ function validInstant(d) {
24
+ return isNaN(d.getTime()) ? (0, result_1.failure)(result_1.ConvertMessages.DATE) : (0, result_1.success)(d);
25
+ }
26
+ function pinZonelessTimeToUtc(isoText, time, zone) {
27
+ return time !== undefined && zone === undefined ? `${isoText}Z` : isoText;
28
+ }
29
+ const DATE_FORMAT = /^(\d{4})-(\d{2})-(\d{2})(?:[T ](\d{2}):(\d{2}):(\d{2})(\.\d+)?(Z|[+-]\d{2}:\d{2})?)?$/;
30
+ function toDate(v, options) {
31
+ try {
32
+ if (options?.lax)
33
+ return toDateLax(v);
34
+ if (options?.iso)
35
+ return toDateIso(v);
36
+ return toDateByFormat(v, options);
37
+ }
38
+ catch {
39
+ return (0, result_1.failure)(result_1.ConvertMessages.DATE);
40
+ }
41
+ }
42
+ function toDateIso(v) {
43
+ if (v instanceof Date)
44
+ return validInstant(v);
45
+ if (typeof v !== 'string')
46
+ return (0, result_1.failure)(result_1.ConvertMessages.DATE);
47
+ const m = DATE_FORMAT.exec(v);
48
+ if (m === null)
49
+ return (0, result_1.failure)(result_1.ConvertMessages.DATE);
50
+ if (!isCalendarDate(Number(m[1]), Number(m[2]), Number(m[3])))
51
+ return (0, result_1.failure)(result_1.ConvertMessages.DATE);
52
+ const hasTime = m[4] !== undefined;
53
+ if (hasTime && (!validTime(m[4], m[5], m[6]) || !validZone(m[8])))
54
+ return (0, result_1.failure)(result_1.ConvertMessages.DATE);
55
+ return validInstant(new Date(pinZonelessTimeToUtc(v.replace(' ', 'T'), m[4], m[8])));
56
+ }
57
+ const ISO_DATE_TIME = /^(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?(?:T(\d{2}):(\d{2})(?::(\d{2})(?:\.\d{1,9})?)?(Z|[+-]\d{2}:\d{2})?)?$/;
58
+ const DATE_TO_STRING = /^(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat) (?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \d{2} -?\d{4,6} \d{2}:\d{2}:\d{2} GMT[+-](?:[01]\d|2[0-3])[0-5]\d(?: \(.+\))?$/;
59
+ const DATE_TO_UTC_STRING = /^(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat), \d{2} (?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) -?\d{4,6} \d{2}:\d{2}:\d{2} GMT$/;
60
+ function toDateLax(v) {
61
+ if (v instanceof Date)
62
+ return validInstant(v);
63
+ if (typeof v !== 'string')
64
+ return (0, result_1.failure)(result_1.ConvertMessages.DATE);
65
+ const m = ISO_DATE_TIME.exec(v);
66
+ if (m !== null) {
67
+ const month = m[2] === undefined ? 1 : Number(m[2]);
68
+ const day = m[3] === undefined ? 1 : Number(m[3]);
69
+ if (!isCalendarDate(Number(m[1]), month, day))
70
+ return (0, result_1.failure)(result_1.ConvertMessages.DATE);
71
+ if (!validTime(m[4], m[5], m[6]) || !validZone(m[7]))
72
+ return (0, result_1.failure)(result_1.ConvertMessages.DATE);
73
+ return validInstant(new Date(pinZonelessTimeToUtc(v, m[4], m[7])));
74
+ }
75
+ if (DATE_TO_STRING.test(v) || DATE_TO_UTC_STRING.test(v))
76
+ return validInstant(new Date(v));
77
+ return (0, result_1.failure)(result_1.ConvertMessages.DATE);
78
+ }
79
+ const default_date_options = {
80
+ format: 'YYYY/MM/DD',
81
+ delimiters: ['/', '-'],
82
+ strictMode: false,
83
+ };
84
+ const validFormatRegex = /(^(y{4}|y{2})[./-](m{1,2})[./-](d{1,2})$)|(^(m{1,2})[./-](d{1,2})[./-]((y{4}|y{2})$))|(^(d{1,2})[./-](m{1,2})[./-]((y{4}|y{2})$))/i;
85
+ function isValidFormat(format) {
86
+ return validFormatRegex.test(format);
87
+ }
88
+ function zip(date, format) {
89
+ const zippedArr = [], len = Math.max(date.length, format.length);
90
+ for (let i = 0; i < len; i++) {
91
+ zippedArr.push([date[i], format[i]]);
92
+ }
93
+ return zippedArr;
94
+ }
95
+ function withDefaults(options) {
96
+ const merged = { ...options };
97
+ for (const key of Object.keys(default_date_options)) {
98
+ if (merged[key] === undefined)
99
+ merged[key] = default_date_options[key];
100
+ }
101
+ return merged;
102
+ }
103
+ function currentTwoDigitYear() {
104
+ return new Date().getFullYear() % 100;
105
+ }
106
+ function toDateByFormat(input, options) {
107
+ const mergedOptions = withDefaults(options);
108
+ if (typeof input === 'string' && isValidFormat(mergedOptions.format)) {
109
+ if (mergedOptions.strictMode && input.length !== mergedOptions.format.length) {
110
+ return (0, result_1.failure)(result_1.ConvertMessages.DATE);
111
+ }
112
+ if (!Array.isArray(mergedOptions.delimiters))
113
+ return (0, result_1.failure)(result_1.ConvertMessages.DATE);
114
+ const formatDelimiter = mergedOptions.delimiters.find((delimiter) => mergedOptions.format.indexOf(delimiter) !== -1);
115
+ if (formatDelimiter === undefined)
116
+ return (0, result_1.failure)(result_1.ConvertMessages.DATE);
117
+ const dateDelimiter = mergedOptions.strictMode
118
+ ? formatDelimiter
119
+ : mergedOptions.delimiters.find((delimiter) => input.indexOf(delimiter) !== -1);
120
+ const dateAndFormat = zip(input.split(dateDelimiter), mergedOptions.format.toLowerCase().split(formatDelimiter));
121
+ const dateObj = {};
122
+ for (const [dateWord, formatWord] of dateAndFormat) {
123
+ if (!dateWord || !formatWord || dateWord.length !== formatWord.length) {
124
+ return (0, result_1.failure)(result_1.ConvertMessages.DATE);
125
+ }
126
+ dateObj[formatWord.charAt(0)] = dateWord;
127
+ }
128
+ let fullYear = dateObj.y;
129
+ if (fullYear.startsWith('-')) {
130
+ return (0, result_1.failure)(result_1.ConvertMessages.DATE);
131
+ }
132
+ if (dateObj.y.length === 2) {
133
+ const parsedYear = parseInt(dateObj.y, 10);
134
+ if (isNaN(parsedYear)) {
135
+ return (0, result_1.failure)(result_1.ConvertMessages.DATE);
136
+ }
137
+ const pivot = mergedOptions.twoDigitYearPivot ?? currentTwoDigitYear();
138
+ if (parsedYear < pivot) {
139
+ fullYear = `20${dateObj.y}`;
140
+ }
141
+ else {
142
+ fullYear = `19${dateObj.y}`;
143
+ }
144
+ }
145
+ let month = dateObj.m;
146
+ if (dateObj.m.length === 1) {
147
+ month = `0${dateObj.m}`;
148
+ }
149
+ let day = dateObj.d;
150
+ if (dateObj.d.length === 1) {
151
+ day = `0${dateObj.d}`;
152
+ }
153
+ const date = new Date(`${fullYear}-${month}-${day}T00:00:00.000Z`);
154
+ return date.getUTCDate() === +dateObj.d ? (0, result_1.success)(date) : (0, result_1.failure)(result_1.ConvertMessages.DATE);
155
+ }
156
+ if (!mergedOptions.strictMode) {
157
+ return Object.prototype.toString.call(input) === '[object Date]' && isFinite(input)
158
+ ? (0, result_1.success)(input)
159
+ : (0, result_1.failure)(result_1.ConvertMessages.DATE);
160
+ }
161
+ return (0, result_1.failure)(result_1.ConvertMessages.DATE);
162
+ }
@@ -0,0 +1,2 @@
1
+ import type { Converted } from './result';
2
+ export declare function toEnum<T extends string>(v: unknown, options: readonly T[]): Converted<T>;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toEnum = toEnum;
4
+ const result_1 = require("./result");
5
+ function toEnum(v, options) {
6
+ if (typeof v !== 'string' && typeof v !== 'number' && typeof v !== 'boolean')
7
+ return (0, result_1.failure)(result_1.ConvertMessages.ENUM);
8
+ const key = String(v);
9
+ const index = options.indexOf(key);
10
+ return index === -1 ? (0, result_1.failure)(result_1.ConvertMessages.ENUM) : (0, result_1.success)(options[index]);
11
+ }
@@ -0,0 +1,6 @@
1
+ import type { Converted } from './result';
2
+ export interface FloatConvertOptions {
3
+ syntax?: 'default' | 'validator';
4
+ decimalSeparator?: string;
5
+ }
6
+ export declare function toFloat(v: unknown, options?: FloatConvertOptions): Converted<number>;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toFloat = toFloat;
4
+ const string_1 = require("./string");
5
+ const result_1 = require("./result");
6
+ const PLAIN_DECIMAL_FORMAT = /^[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?$/;
7
+ const validatorFloatRegex = new Map();
8
+ const MAX_CACHED_SEPARATORS = 64;
9
+ function getValidatorFloatRegex(separator) {
10
+ let re = validatorFloatRegex.get(separator);
11
+ if (re === undefined) {
12
+ const escapedSeparator = separator.replace(/[.*+?^${}()|[\]\\-]/g, '\\$&');
13
+ re = new RegExp(`^(?:[-+])?(?:[0-9]+)?(?:${escapedSeparator}[0-9]*)?(?:[eE][\\+\\-]?(?:[0-9]+))?$`);
14
+ if (validatorFloatRegex.size < MAX_CACHED_SEPARATORS)
15
+ validatorFloatRegex.set(separator, re);
16
+ }
17
+ return re;
18
+ }
19
+ const VALIDATOR_REJECTED = ['', '.', ',', '-', '+'];
20
+ function toFloat(v, options) {
21
+ if (options?.syntax === 'validator')
22
+ return toFloatValidatorSyntax(v, options.decimalSeparator ?? '.');
23
+ if (typeof v === 'number')
24
+ return Number.isFinite(v) ? (0, result_1.success)(v) : (0, result_1.failure)(result_1.ConvertMessages.FLOAT);
25
+ if (typeof v === 'string') {
26
+ const s = v.trim();
27
+ if (!PLAIN_DECIMAL_FORMAT.test(s))
28
+ return (0, result_1.failure)(result_1.ConvertMessages.FLOAT);
29
+ const n = Number(s);
30
+ return Number.isFinite(n) ? (0, result_1.success)(n) : (0, result_1.failure)(result_1.ConvertMessages.FLOAT);
31
+ }
32
+ return (0, result_1.failure)(result_1.ConvertMessages.FLOAT);
33
+ }
34
+ function toFloatValidatorSyntax(v, separator) {
35
+ if (typeof v === 'number')
36
+ return isFinite(v) ? (0, result_1.success)(v) : (0, result_1.failure)(result_1.ConvertMessages.FLOAT);
37
+ const str = (0, string_1.toString)(v);
38
+ if (!str.ok)
39
+ return (0, result_1.failure)(result_1.ConvertMessages.FLOAT);
40
+ const s = str.value;
41
+ if (VALIDATOR_REJECTED.includes(s) || !getValidatorFloatRegex(separator).test(s)) {
42
+ return (0, result_1.failure)(result_1.ConvertMessages.FLOAT);
43
+ }
44
+ const n = parseFloat(separator === '' ? s : s.replace(separator, '.'));
45
+ return Number.isFinite(n) ? (0, result_1.success)(n) : (0, result_1.failure)(result_1.ConvertMessages.FLOAT);
46
+ }
@@ -0,0 +1,16 @@
1
+ export type { Converted, ConvertMessage, Success, Failure } from './result';
2
+ export { ConvertMessages } from './result';
3
+ export { toString } from './string';
4
+ export { anyToString } from './any-to-string';
5
+ export { toBoolean } from './boolean';
6
+ export type { BooleanConvertOptions } from './boolean';
7
+ export { toInteger } from './integer';
8
+ export type { IntegerConvertOptions } from './integer';
9
+ export { toFloat } from './float';
10
+ export type { FloatConvertOptions } from './float';
11
+ export { toDate } from './date';
12
+ export type { DateConvertOptions } from './date';
13
+ export { toJson, toJsonValue } from './json';
14
+ export type { JsonValueConvertOptions } from './json';
15
+ export { toArray } from './array';
16
+ export { toEnum } from './enum';
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toEnum = exports.toArray = exports.toJsonValue = exports.toJson = exports.toDate = exports.toFloat = exports.toInteger = exports.toBoolean = exports.anyToString = exports.toString = exports.ConvertMessages = void 0;
4
+ var result_1 = require("./result");
5
+ Object.defineProperty(exports, "ConvertMessages", { enumerable: true, get: function () { return result_1.ConvertMessages; } });
6
+ var string_1 = require("./string");
7
+ Object.defineProperty(exports, "toString", { enumerable: true, get: function () { return string_1.toString; } });
8
+ var any_to_string_1 = require("./any-to-string");
9
+ Object.defineProperty(exports, "anyToString", { enumerable: true, get: function () { return any_to_string_1.anyToString; } });
10
+ var boolean_1 = require("./boolean");
11
+ Object.defineProperty(exports, "toBoolean", { enumerable: true, get: function () { return boolean_1.toBoolean; } });
12
+ var integer_1 = require("./integer");
13
+ Object.defineProperty(exports, "toInteger", { enumerable: true, get: function () { return integer_1.toInteger; } });
14
+ var float_1 = require("./float");
15
+ Object.defineProperty(exports, "toFloat", { enumerable: true, get: function () { return float_1.toFloat; } });
16
+ var date_1 = require("./date");
17
+ Object.defineProperty(exports, "toDate", { enumerable: true, get: function () { return date_1.toDate; } });
18
+ var json_1 = require("./json");
19
+ Object.defineProperty(exports, "toJson", { enumerable: true, get: function () { return json_1.toJson; } });
20
+ Object.defineProperty(exports, "toJsonValue", { enumerable: true, get: function () { return json_1.toJsonValue; } });
21
+ var array_1 = require("./array");
22
+ Object.defineProperty(exports, "toArray", { enumerable: true, get: function () { return array_1.toArray; } });
23
+ var enum_1 = require("./enum");
24
+ Object.defineProperty(exports, "toEnum", { enumerable: true, get: function () { return enum_1.toEnum; } });
@@ -0,0 +1,6 @@
1
+ import type { Converted } from './result';
2
+ export interface IntegerConvertOptions {
3
+ syntax?: 'default' | 'validator';
4
+ allowLeadingZeroes?: boolean;
5
+ }
6
+ export declare function toInteger(v: unknown, options?: IntegerConvertOptions): Converted<number>;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toInteger = toInteger;
4
+ const string_1 = require("./string");
5
+ const result_1 = require("./result");
6
+ const INTEGER_FORMAT = /^-?\d+$/;
7
+ const VALIDATOR_INT = /^(?:[-+]?(?:0|[1-9][0-9]*))$/;
8
+ const VALIDATOR_INT_LEADING_ZEROES = /^[-+]?[0-9]+$/;
9
+ function toInteger(v, options) {
10
+ if (options?.syntax === 'validator')
11
+ return toIntegerValidatorSyntax(v, options);
12
+ if (typeof v === 'number') {
13
+ if (!Number.isInteger(v))
14
+ return (0, result_1.failure)(result_1.ConvertMessages.INTEGER);
15
+ if (!Number.isSafeInteger(v))
16
+ return (0, result_1.failure)(result_1.ConvertMessages.INTEGER_OVERFLOW);
17
+ return (0, result_1.success)(v);
18
+ }
19
+ if (typeof v === 'string') {
20
+ const s = v.trim();
21
+ if (!INTEGER_FORMAT.test(s))
22
+ return (0, result_1.failure)(result_1.ConvertMessages.INTEGER);
23
+ const n = Number(s);
24
+ if (!Number.isSafeInteger(n))
25
+ return (0, result_1.failure)(result_1.ConvertMessages.INTEGER_OVERFLOW);
26
+ return (0, result_1.success)(n);
27
+ }
28
+ return (0, result_1.failure)(result_1.ConvertMessages.INTEGER);
29
+ }
30
+ function toIntegerValidatorSyntax(v, options) {
31
+ if (typeof v === 'number')
32
+ return Number.isInteger(v) ? (0, result_1.success)(v) : (0, result_1.failure)(result_1.ConvertMessages.INTEGER);
33
+ const str = (0, string_1.toString)(v);
34
+ if (!str.ok)
35
+ return (0, result_1.failure)(result_1.ConvertMessages.INTEGER);
36
+ const regex = options.allowLeadingZeroes === false ? VALIDATOR_INT : VALIDATOR_INT_LEADING_ZEROES;
37
+ if (!regex.test(str.value))
38
+ return (0, result_1.failure)(result_1.ConvertMessages.INTEGER);
39
+ const n = Number(str.value);
40
+ return Number.isFinite(n) ? (0, result_1.success)(n) : (0, result_1.failure)(result_1.ConvertMessages.INTEGER_OVERFLOW);
41
+ }
@@ -0,0 +1,7 @@
1
+ import type { Converted } from './result';
2
+ export declare function toJson(v: unknown): Converted<Record<string, unknown>>;
3
+ export interface JsonValueConvertOptions {
4
+ allowPrimitives?: boolean;
5
+ allowAnyValue?: boolean;
6
+ }
7
+ export declare function toJsonValue(v: unknown, options?: JsonValueConvertOptions): Converted<unknown>;
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toJson = toJson;
4
+ exports.toJsonValue = toJsonValue;
5
+ const string_1 = require("./string");
6
+ const result_1 = require("./result");
7
+ function isNonEmptyPlainRecord(v) {
8
+ return (v !== null && typeof v === 'object' && !Array.isArray(v) && Object.keys(v).length > 0);
9
+ }
10
+ function isPlainObject(v) {
11
+ const proto = Object.getPrototypeOf(v);
12
+ return proto === Object.prototype || proto === null;
13
+ }
14
+ function isJsonSafe(root) {
15
+ const ancestors = new Set();
16
+ const stack = [{ node: root, exit: false }];
17
+ while (stack.length > 0) {
18
+ const { node, exit } = stack.pop();
19
+ if (exit) {
20
+ ancestors.delete(node);
21
+ continue;
22
+ }
23
+ if (ancestors.has(node))
24
+ return false;
25
+ if (!Array.isArray(node) && !isPlainObject(node))
26
+ return false;
27
+ ancestors.add(node);
28
+ stack.push({ node, exit: true });
29
+ for (const child of Object.values(node)) {
30
+ if (child === null || typeof child === 'string' || typeof child === 'boolean')
31
+ continue;
32
+ if (typeof child === 'number') {
33
+ if (!Number.isFinite(child))
34
+ return false;
35
+ continue;
36
+ }
37
+ if (typeof child !== 'object')
38
+ return false;
39
+ stack.push({ node: child, exit: false });
40
+ }
41
+ }
42
+ return true;
43
+ }
44
+ function toJson(v) {
45
+ if (typeof v === 'string') {
46
+ let parsed;
47
+ try {
48
+ parsed = JSON.parse(v);
49
+ }
50
+ catch {
51
+ return (0, result_1.failure)(result_1.ConvertMessages.JSON);
52
+ }
53
+ return isNonEmptyPlainRecord(parsed) ? (0, result_1.success)(parsed) : (0, result_1.failure)(result_1.ConvertMessages.JSON);
54
+ }
55
+ try {
56
+ return isNonEmptyPlainRecord(v) && isJsonSafe(v) ? (0, result_1.success)(v) : (0, result_1.failure)(result_1.ConvertMessages.JSON);
57
+ }
58
+ catch {
59
+ return (0, result_1.failure)(result_1.ConvertMessages.JSON);
60
+ }
61
+ }
62
+ function toJsonValue(v, options) {
63
+ const str = (0, string_1.toString)(v);
64
+ if (!str.ok)
65
+ return (0, result_1.failure)(result_1.ConvertMessages.JSON_VALUE);
66
+ let parsed;
67
+ try {
68
+ parsed = JSON.parse(str.value);
69
+ }
70
+ catch {
71
+ return (0, result_1.failure)(result_1.ConvertMessages.JSON_VALUE);
72
+ }
73
+ if (options?.allowAnyValue)
74
+ return (0, result_1.success)(parsed);
75
+ if (options?.allowPrimitives && (parsed === null || parsed === true || parsed === false)) {
76
+ return (0, result_1.success)(parsed);
77
+ }
78
+ return parsed !== null && typeof parsed === 'object'
79
+ ? (0, result_1.success)(parsed)
80
+ : (0, result_1.failure)(result_1.ConvertMessages.JSON_VALUE);
81
+ }
@@ -0,0 +1,26 @@
1
+ export declare const ConvertMessages: Readonly<{
2
+ readonly STRING: "Value cannot be converted to string";
3
+ readonly BOOLEAN: "Value cannot be converted to boolean";
4
+ readonly INTEGER: "Value is not an integer";
5
+ readonly INTEGER_OVERFLOW: "Integer exceeds the safe integer limits (-9007199254740991 to 9007199254740991)";
6
+ readonly FLOAT: "Value is not a finite decimal number";
7
+ readonly DATE: "Value is not a valid date";
8
+ readonly JSON: "Value is not a non-empty JSON object";
9
+ readonly JSON_VALUE: "Value is not an accepted JSON value";
10
+ readonly ARRAY: "Value is not an array";
11
+ readonly ENUM: "Value is not one of the enum options";
12
+ }>;
13
+ export type ConvertMessage = (typeof ConvertMessages)[keyof typeof ConvertMessages];
14
+ export type Converted<T> = Success<T> | Failure;
15
+ export interface Success<T> {
16
+ readonly ok: true;
17
+ readonly value: T;
18
+ readonly error: null;
19
+ }
20
+ export interface Failure {
21
+ readonly ok: false;
22
+ readonly value: null;
23
+ readonly error: ConvertMessage;
24
+ }
25
+ export declare function failure(error: ConvertMessage): Failure;
26
+ export declare function success<T>(value: T): Success<T>;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConvertMessages = void 0;
4
+ exports.failure = failure;
5
+ exports.success = success;
6
+ exports.ConvertMessages = Object.freeze({
7
+ STRING: 'Value cannot be converted to string',
8
+ BOOLEAN: 'Value cannot be converted to boolean',
9
+ INTEGER: 'Value is not an integer',
10
+ INTEGER_OVERFLOW: 'Integer exceeds the safe integer limits (-9007199254740991 to 9007199254740991)',
11
+ FLOAT: 'Value is not a finite decimal number',
12
+ DATE: 'Value is not a valid date',
13
+ JSON: 'Value is not a non-empty JSON object',
14
+ JSON_VALUE: 'Value is not an accepted JSON value',
15
+ ARRAY: 'Value is not an array',
16
+ ENUM: 'Value is not one of the enum options',
17
+ });
18
+ function failure(error) {
19
+ return { ok: false, value: null, error };
20
+ }
21
+ function success(value) {
22
+ return { ok: true, value, error: null };
23
+ }
@@ -0,0 +1,2 @@
1
+ import type { Converted } from './result';
2
+ export declare function toString(v: unknown): Converted<string>;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toString = toString;
4
+ const result_1 = require("./result");
5
+ function toString(v) {
6
+ if (typeof v === 'string')
7
+ return (0, result_1.success)(v);
8
+ if (typeof v === 'boolean')
9
+ return (0, result_1.success)(v ? 'true' : 'false');
10
+ if (typeof v === 'number' && Number.isFinite(v))
11
+ return (0, result_1.success)(String(v));
12
+ return (0, result_1.failure)(result_1.ConvertMessages.STRING);
13
+ }
@@ -0,0 +1,23 @@
1
+ import type { ValidatedClass } from './validations';
2
+ export type ValidationError = {
3
+ validator: string;
4
+ message: string;
5
+ } | {
6
+ custom: string;
7
+ message: string;
8
+ };
9
+ export interface ValidationSuccess<T> {
10
+ readonly ok: true;
11
+ readonly value: T;
12
+ readonly errors: readonly [];
13
+ }
14
+ export interface ValidationFailure<T> {
15
+ readonly ok: false;
16
+ readonly value: T;
17
+ readonly errors: readonly ValidationError[];
18
+ }
19
+ export type ValidationResult<T> = ValidationSuccess<T> | ValidationFailure<T>;
20
+ export interface Validatable<T> {
21
+ validate(): ValidationResult<T>;
22
+ }
23
+ export declare function runValidations<T>(target: ValidatedClass, value: T): ValidationResult<T>;
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runValidations = runValidations;
4
+ const validators_1 = require("../validators");
5
+ const isRequired_1 = require("../validators/isRequired");
6
+ const errors_1 = require("../helpers/errors");
7
+ const validations_1 = require("./validations");
8
+ const IS_REQUIRED = (0, validations_1.keyOf)({ validator: 'isRequired' });
9
+ function validationsOf(target) {
10
+ const rootFirstChain = [];
11
+ for (let current = target; current !== Function.prototype && current !== null; current = Object.getPrototypeOf(current)) {
12
+ rootFirstChain.unshift(current);
13
+ }
14
+ const byKey = new Map();
15
+ for (const cls of rootFirstChain) {
16
+ for (const validation of validations_1.ownValidations.get(cls) ?? []) {
17
+ byKey.set((0, validations_1.keyOf)(validation), validation);
18
+ }
19
+ }
20
+ return [...byKey.values()];
21
+ }
22
+ function errorOf(validation, value) {
23
+ if ((0, validations_1.isCustom)(validation)) {
24
+ if (validation.fn(value))
25
+ return null;
26
+ return {
27
+ custom: validation.custom,
28
+ message: validation.message ?? `Value does not satisfy ${validation.custom}`,
29
+ };
30
+ }
31
+ const name = validation.validator;
32
+ if (!(0, validations_1.isValidatorName)(name)) {
33
+ throw new errors_1.ValidationConfigError(`Unknown validator "${name}"`);
34
+ }
35
+ const run = validators_1.validator[name];
36
+ if (run(value, validation.properties))
37
+ return null;
38
+ return { validator: name, message: validation.message ?? `Value does not satisfy ${name}` };
39
+ }
40
+ function runValidations(target, value) {
41
+ if (typeof target !== 'function')
42
+ throw new errors_1.ValidationConfigError('runValidations expects a class, not an instance or a value');
43
+ const declared = validationsOf(target);
44
+ const isRequired = declared.filter((validation) => (0, validations_1.keyOf)(validation) === IS_REQUIRED);
45
+ const isOptional = isRequired.length === 0;
46
+ let toRun;
47
+ if ((0, isRequired_1.isRequired)(value))
48
+ toRun = declared;
49
+ else if (isOptional)
50
+ toRun = [];
51
+ else
52
+ toRun = isRequired;
53
+ const errors = [];
54
+ for (const validation of toRun) {
55
+ const error = errorOf(validation, value);
56
+ if (error !== null)
57
+ errors.push(error);
58
+ }
59
+ return Object.freeze(errors.length === 0
60
+ ? { ok: true, value, errors: Object.freeze([]) }
61
+ : { ok: false, value, errors: Object.freeze(errors.map((error) => Object.freeze(error))) });
62
+ }
@@ -0,0 +1,35 @@
1
+ import type { ValidatorRegistry } from '../validators';
2
+ export type ValidatorName = {
3
+ [K in keyof ValidatorRegistry]: ValidatorRegistry[K] extends (...args: any[]) => boolean ? K : never;
4
+ }[keyof ValidatorRegistry];
5
+ type Params<K extends ValidatorName> = ValidatorRegistry[K] extends (value: any, ...rest: infer R) => boolean ? R : never;
6
+ export type ValidationProperties<K extends ValidatorName> = Params<K> extends [] ? never : NonNullable<Params<K>[0]>;
7
+ type PropertiesField<P> = [P] extends [never] ? {
8
+ properties?: undefined;
9
+ } : Record<never, never> extends P ? {
10
+ properties?: P;
11
+ } : {
12
+ properties: P;
13
+ };
14
+ export type BuiltInValidation = {
15
+ [K in ValidatorName]: {
16
+ validator: K;
17
+ message?: string;
18
+ custom?: undefined;
19
+ fn?: undefined;
20
+ } & PropertiesField<ValidationProperties<K>>;
21
+ }[ValidatorName];
22
+ export interface CustomValidation {
23
+ custom: string;
24
+ fn: (value: unknown) => boolean;
25
+ message?: string;
26
+ validator?: undefined;
27
+ }
28
+ export type Validation = BuiltInValidation | CustomValidation;
29
+ export type ValidatedClass = abstract new (...args: any[]) => unknown;
30
+ export declare const ownValidations: WeakMap<ValidatedClass, Validation[]>;
31
+ export declare function isCustom(validation: Validation): validation is CustomValidation;
32
+ export declare function isValidatorName(name: unknown): name is ValidatorName;
33
+ export declare function keyOf(validation: Validation): string;
34
+ export declare function Validations(validations: Validation[]): (target: ValidatedClass) => void;
35
+ export {};