utilitify-core 1.0.0

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 (147) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +338 -0
  3. package/dist/async.cjs +25 -0
  4. package/dist/async.cjs.map +1 -0
  5. package/dist/async.d.cts +104 -0
  6. package/dist/async.d.ts +104 -0
  7. package/dist/async.js +4 -0
  8. package/dist/async.js.map +1 -0
  9. package/dist/chunk-2ICNRTSN.cjs +346 -0
  10. package/dist/chunk-2ICNRTSN.cjs.map +1 -0
  11. package/dist/chunk-3DPF72DY.js +170 -0
  12. package/dist/chunk-3DPF72DY.js.map +1 -0
  13. package/dist/chunk-4CV4JOE5.js +24 -0
  14. package/dist/chunk-4CV4JOE5.js.map +1 -0
  15. package/dist/chunk-4SLYNSLH.cjs +783 -0
  16. package/dist/chunk-4SLYNSLH.cjs.map +1 -0
  17. package/dist/chunk-5WP7DWCG.js +1285 -0
  18. package/dist/chunk-5WP7DWCG.js.map +1 -0
  19. package/dist/chunk-BMQ6YPKV.js +876 -0
  20. package/dist/chunk-BMQ6YPKV.js.map +1 -0
  21. package/dist/chunk-BZCMWUKS.cjs +479 -0
  22. package/dist/chunk-BZCMWUKS.cjs.map +1 -0
  23. package/dist/chunk-C5R744DY.cjs +173 -0
  24. package/dist/chunk-C5R744DY.cjs.map +1 -0
  25. package/dist/chunk-C75J62CV.cjs +913 -0
  26. package/dist/chunk-C75J62CV.cjs.map +1 -0
  27. package/dist/chunk-CZLDE2OZ.cjs +28 -0
  28. package/dist/chunk-CZLDE2OZ.cjs.map +1 -0
  29. package/dist/chunk-DSMB6AF6.cjs +193 -0
  30. package/dist/chunk-DSMB6AF6.cjs.map +1 -0
  31. package/dist/chunk-ETWGPOPY.js +426 -0
  32. package/dist/chunk-ETWGPOPY.js.map +1 -0
  33. package/dist/chunk-FQBPVN63.cjs +403 -0
  34. package/dist/chunk-FQBPVN63.cjs.map +1 -0
  35. package/dist/chunk-G4GYQGTW.cjs +178 -0
  36. package/dist/chunk-G4GYQGTW.cjs.map +1 -0
  37. package/dist/chunk-GFDMZDMI.js +486 -0
  38. package/dist/chunk-GFDMZDMI.js.map +1 -0
  39. package/dist/chunk-HOTOYIPB.js +171 -0
  40. package/dist/chunk-HOTOYIPB.js.map +1 -0
  41. package/dist/chunk-HYADH4ZX.js +176 -0
  42. package/dist/chunk-HYADH4ZX.js.map +1 -0
  43. package/dist/chunk-JBN7C5WE.js +255 -0
  44. package/dist/chunk-JBN7C5WE.js.map +1 -0
  45. package/dist/chunk-JNCTPFTD.cjs +25 -0
  46. package/dist/chunk-JNCTPFTD.cjs.map +1 -0
  47. package/dist/chunk-N3BH3BV7.js +21 -0
  48. package/dist/chunk-N3BH3BV7.js.map +1 -0
  49. package/dist/chunk-NFPGAVRQ.js +749 -0
  50. package/dist/chunk-NFPGAVRQ.js.map +1 -0
  51. package/dist/chunk-OFFRGRBN.cjs +1332 -0
  52. package/dist/chunk-OFFRGRBN.cjs.map +1 -0
  53. package/dist/chunk-OZLKYIZL.cjs +490 -0
  54. package/dist/chunk-OZLKYIZL.cjs.map +1 -0
  55. package/dist/chunk-P3NUK46X.js +145 -0
  56. package/dist/chunk-P3NUK46X.js.map +1 -0
  57. package/dist/chunk-P7P2B7ZI.cjs +429 -0
  58. package/dist/chunk-P7P2B7ZI.cjs.map +1 -0
  59. package/dist/chunk-PB6SKSJN.cjs +150 -0
  60. package/dist/chunk-PB6SKSJN.cjs.map +1 -0
  61. package/dist/chunk-R3IXCJR7.js +378 -0
  62. package/dist/chunk-R3IXCJR7.js.map +1 -0
  63. package/dist/chunk-SD6P3WEJ.js +324 -0
  64. package/dist/chunk-SD6P3WEJ.js.map +1 -0
  65. package/dist/chunk-YSCHP26P.js +451 -0
  66. package/dist/chunk-YSCHP26P.js.map +1 -0
  67. package/dist/chunk-ZLMPRPCY.cjs +274 -0
  68. package/dist/chunk-ZLMPRPCY.cjs.map +1 -0
  69. package/dist/common-CBDYNJeh.d.cts +48 -0
  70. package/dist/common-CBDYNJeh.d.ts +48 -0
  71. package/dist/constants.cjs +42 -0
  72. package/dist/constants.cjs.map +1 -0
  73. package/dist/constants.d.cts +60 -0
  74. package/dist/constants.d.ts +60 -0
  75. package/dist/constants.js +5 -0
  76. package/dist/constants.js.map +1 -0
  77. package/dist/country/index.cjs +154 -0
  78. package/dist/country/index.cjs.map +1 -0
  79. package/dist/country/index.d.cts +1 -0
  80. package/dist/country/index.d.ts +1 -0
  81. package/dist/country/index.js +5 -0
  82. package/dist/country/index.js.map +1 -0
  83. package/dist/date/index.cjs +117 -0
  84. package/dist/date/index.cjs.map +1 -0
  85. package/dist/date/index.d.cts +283 -0
  86. package/dist/date/index.d.ts +283 -0
  87. package/dist/date/index.js +4 -0
  88. package/dist/date/index.js.map +1 -0
  89. package/dist/environment/index.cjs +73 -0
  90. package/dist/environment/index.cjs.map +1 -0
  91. package/dist/environment/index.d.cts +127 -0
  92. package/dist/environment/index.d.ts +127 -0
  93. package/dist/environment/index.js +4 -0
  94. package/dist/environment/index.js.map +1 -0
  95. package/dist/form/index.cjs +81 -0
  96. package/dist/form/index.cjs.map +1 -0
  97. package/dist/form/index.d.cts +227 -0
  98. package/dist/form/index.d.ts +227 -0
  99. package/dist/form/index.js +4 -0
  100. package/dist/form/index.js.map +1 -0
  101. package/dist/i18n.cjs +37 -0
  102. package/dist/i18n.cjs.map +1 -0
  103. package/dist/i18n.d.cts +102 -0
  104. package/dist/i18n.d.ts +102 -0
  105. package/dist/i18n.js +4 -0
  106. package/dist/i18n.js.map +1 -0
  107. package/dist/index-BXBmBHyL.d.ts +718 -0
  108. package/dist/index-BYsUCP3u.d.cts +718 -0
  109. package/dist/index-Cl26FrAZ.d.cts +362 -0
  110. package/dist/index-Cl26FrAZ.d.ts +362 -0
  111. package/dist/index.cjs +1265 -0
  112. package/dist/index.cjs.map +1 -0
  113. package/dist/index.d.cts +205 -0
  114. package/dist/index.d.ts +205 -0
  115. package/dist/index.js +277 -0
  116. package/dist/index.js.map +1 -0
  117. package/dist/schema.cjs +13 -0
  118. package/dist/schema.cjs.map +1 -0
  119. package/dist/schema.d.cts +84 -0
  120. package/dist/schema.d.ts +84 -0
  121. package/dist/schema.js +4 -0
  122. package/dist/schema.js.map +1 -0
  123. package/dist/security/index.cjs +94 -0
  124. package/dist/security/index.cjs.map +1 -0
  125. package/dist/security/index.d.cts +216 -0
  126. package/dist/security/index.d.ts +216 -0
  127. package/dist/security/index.js +5 -0
  128. package/dist/security/index.js.map +1 -0
  129. package/dist/string/index.cjs +153 -0
  130. package/dist/string/index.cjs.map +1 -0
  131. package/dist/string/index.d.cts +471 -0
  132. package/dist/string/index.d.ts +471 -0
  133. package/dist/string/index.js +4 -0
  134. package/dist/string/index.js.map +1 -0
  135. package/dist/transform/index.cjs +105 -0
  136. package/dist/transform/index.cjs.map +1 -0
  137. package/dist/transform/index.d.cts +271 -0
  138. package/dist/transform/index.d.ts +271 -0
  139. package/dist/transform/index.js +4 -0
  140. package/dist/transform/index.js.map +1 -0
  141. package/dist/validators/index.cjs +195 -0
  142. package/dist/validators/index.cjs.map +1 -0
  143. package/dist/validators/index.d.cts +2 -0
  144. package/dist/validators/index.d.ts +2 -0
  145. package/dist/validators/index.js +6 -0
  146. package/dist/validators/index.js.map +1 -0
  147. package/package.json +229 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/async.ts"],"names":[],"mappings":"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","file":"chunk-P3NUK46X.js","sourcesContent":["/**\r\n * Async validation module for Utilitify\r\n * Provides async validators for scenarios requiring external API calls\r\n *\r\n * @packageDocumentation\r\n * @since 1.0.0\r\n */\r\n\r\nimport type { IValidationError } from './types';\r\n\r\n/**\r\n * Async validation result\r\n */\r\nexport interface AsyncValidationResult {\r\n isValid: boolean;\r\n errors: IValidationError[];\r\n /** Time taken for validation in milliseconds */\r\n duration?: number;\r\n}\r\n\r\n/**\r\n * Async validator function type\r\n */\r\nexport type AsyncValidator<T> = (value: T) => Promise<AsyncValidationResult>;\r\n\r\n/**\r\n * Async validation options\r\n */\r\nexport interface AsyncValidationOptions {\r\n /** Timeout in milliseconds (default: 5000) */\r\n timeout?: number;\r\n /** Whether to abort on first error (default: false) */\r\n abortEarly?: boolean;\r\n /** Custom error messages */\r\n messages?: Record<string, string>;\r\n}\r\n\r\n/**\r\n * Default async validation options\r\n */\r\nconst DEFAULT_OPTIONS: AsyncValidationOptions = {\r\n timeout: 5000,\r\n abortEarly: false,\r\n};\r\n\r\n/**\r\n * Run async validation with timeout\r\n *\r\n * @param value - Value to validate\r\n * @param validator - Async validator function\r\n * @param options - Validation options\r\n * @returns Validation result\r\n * @since 1.0.0\r\n *\r\n * @example\r\n * ```typescript\r\n * const result = await validateAsync(email, async (email) => {\r\n * const exists = await checkEmailExists(email);\r\n * return {\r\n * isValid: !exists,\r\n * errors: exists ? [{ field: 'email', code: 'EXISTS', message: 'Email already registered' }] : []\r\n * };\r\n * });\r\n * ```\r\n */\r\nexport async function validateAsync<T>(\r\n value: T,\r\n validator: AsyncValidator<T>,\r\n options: AsyncValidationOptions = {}\r\n): Promise<AsyncValidationResult> {\r\n const opts = { ...DEFAULT_OPTIONS, ...options };\r\n const startTime = Date.now();\r\n\r\n try {\r\n const result = await Promise.race([\r\n validator(value),\r\n new Promise<AsyncValidationResult>((_, reject) =>\r\n setTimeout(() => reject(new Error('Validation timeout')), opts.timeout)\r\n ),\r\n ]);\r\n\r\n return {\r\n ...result,\r\n duration: Date.now() - startTime,\r\n };\r\n } catch (error) {\r\n return {\r\n isValid: false,\r\n errors: [\r\n {\r\n field: 'async',\r\n code: 'VALIDATION_ERROR',\r\n message: error instanceof Error ? error.message : 'Validation failed',\r\n },\r\n ],\r\n duration: Date.now() - startTime,\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Run multiple async validators in parallel\r\n *\r\n * @param validators - Array of validator configs\r\n * @param options - Validation options\r\n * @returns Combined validation result\r\n * @since 1.0.0\r\n *\r\n * @example\r\n * ```typescript\r\n * const result = await validateAllAsync([\r\n * { value: email, validator: emailExistsCheck, field: 'email' },\r\n * { value: username, validator: usernameAvailableCheck, field: 'username' }\r\n * ]);\r\n * ```\r\n */\r\nexport async function validateAllAsync<T>(\r\n validators: Array<{\r\n value: T;\r\n validator: AsyncValidator<T>;\r\n field: string;\r\n }>,\r\n options: AsyncValidationOptions = {}\r\n): Promise<AsyncValidationResult> {\r\n const opts = { ...DEFAULT_OPTIONS, ...options };\r\n const startTime = Date.now();\r\n const allErrors: IValidationError[] = [];\r\n\r\n try {\r\n const results = await Promise.all(\r\n validators.map(async ({ value, validator, field }) => {\r\n try {\r\n const result = await Promise.race([\r\n validator(value),\r\n new Promise<AsyncValidationResult>((_, reject) =>\r\n setTimeout(() => reject(new Error('Validation timeout')), opts.timeout)\r\n ),\r\n ]);\r\n\r\n // Add field prefix to errors\r\n return result.errors.map(err => ({\r\n ...err,\r\n field: err.field === 'async' ? field : `${field}.${err.field}`,\r\n }));\r\n } catch (error) {\r\n return [\r\n {\r\n field,\r\n code: 'VALIDATION_ERROR',\r\n message: error instanceof Error ? error.message : 'Validation failed',\r\n },\r\n ];\r\n }\r\n })\r\n );\r\n\r\n results.forEach(errors => allErrors.push(...errors));\r\n\r\n return {\r\n isValid: allErrors.length === 0,\r\n errors: allErrors,\r\n duration: Date.now() - startTime,\r\n };\r\n } catch (error) {\r\n return {\r\n isValid: false,\r\n errors: [\r\n {\r\n field: 'async',\r\n code: 'VALIDATION_ERROR',\r\n message: error instanceof Error ? error.message : 'Validation failed',\r\n },\r\n ],\r\n duration: Date.now() - startTime,\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Create a debounced async validator\r\n * Useful for real-time validation in forms\r\n *\r\n * @param validator - Async validator function\r\n * @param delay - Debounce delay in milliseconds\r\n * @returns Debounced validator\r\n * @since 1.0.0\r\n *\r\n * @example\r\n * ```typescript\r\n * const debouncedEmailCheck = createDebouncedValidator(\r\n * async (email) => ({ isValid: !(await checkExists(email)), errors: [] }),\r\n * 300\r\n * );\r\n * ```\r\n */\r\nexport function createDebouncedValidator<T>(\r\n validator: AsyncValidator<T>,\r\n delay: number = 300\r\n): (value: T) => Promise<AsyncValidationResult> {\r\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\r\n let pendingResolve: ((result: AsyncValidationResult) => void) | null = null;\r\n\r\n return (value: T): Promise<AsyncValidationResult> => {\r\n return new Promise(resolve => {\r\n // Clear existing timeout\r\n if (timeoutId) {\r\n clearTimeout(timeoutId);\r\n // Resolve previous pending promise as cancelled\r\n if (pendingResolve) {\r\n pendingResolve({\r\n isValid: true,\r\n errors: [],\r\n duration: 0,\r\n });\r\n }\r\n }\r\n\r\n pendingResolve = resolve;\r\n\r\n timeoutId = setTimeout(async () => {\r\n const startTime = Date.now();\r\n try {\r\n const result = await validator(value);\r\n resolve({\r\n ...result,\r\n duration: Date.now() - startTime,\r\n });\r\n } catch (error) {\r\n resolve({\r\n isValid: false,\r\n errors: [\r\n {\r\n field: 'async',\r\n code: 'VALIDATION_ERROR',\r\n message: error instanceof Error ? error.message : 'Validation failed',\r\n },\r\n ],\r\n duration: Date.now() - startTime,\r\n });\r\n }\r\n pendingResolve = null;\r\n timeoutId = null;\r\n }, delay);\r\n });\r\n };\r\n}\r\n\r\n/**\r\n * Compose multiple validators into one\r\n *\r\n * @param validators - Validators to compose\r\n * @returns Composed validator\r\n * @since 1.0.0\r\n */\r\nexport function composeValidators<T>(\r\n ...validators: AsyncValidator<T>[]\r\n): AsyncValidator<T> {\r\n return async (value: T): Promise<AsyncValidationResult> => {\r\n const startTime = Date.now();\r\n const allErrors: IValidationError[] = [];\r\n\r\n for (const validator of validators) {\r\n const result = await validator(value);\r\n allErrors.push(...result.errors);\r\n\r\n if (!result.isValid && allErrors.length > 0) {\r\n // Continue to collect all errors\r\n }\r\n }\r\n\r\n return {\r\n isValid: allErrors.length === 0,\r\n errors: allErrors,\r\n duration: Date.now() - startTime,\r\n };\r\n };\r\n}\r\n"]}
@@ -0,0 +1,429 @@
1
+ 'use strict';
2
+
3
+ var chunkCZLDE2OZ_cjs = require('./chunk-CZLDE2OZ.cjs');
4
+
5
+ // src/utils/constants.ts
6
+ var constants_exports = {};
7
+ chunkCZLDE2OZ_cjs.__export(constants_exports, {
8
+ COMMON_PASSWORD_PATTERNS: () => exports.COMMON_PASSWORD_PATTERNS,
9
+ CORPORATE_EMAIL_DOMAINS: () => exports.CORPORATE_EMAIL_DOMAINS,
10
+ DISPOSABLE_EMAIL_DOMAINS: () => exports.DISPOSABLE_EMAIL_DOMAINS,
11
+ FREE_EMAIL_DOMAINS: () => exports.FREE_EMAIL_DOMAINS,
12
+ RESERVED_USERNAMES: () => exports.RESERVED_USERNAMES
13
+ });
14
+ exports.DISPOSABLE_EMAIL_DOMAINS = void 0; exports.CORPORATE_EMAIL_DOMAINS = void 0; exports.FREE_EMAIL_DOMAINS = void 0; exports.RESERVED_USERNAMES = void 0; exports.COMMON_PASSWORD_PATTERNS = void 0;
15
+ var init_constants = chunkCZLDE2OZ_cjs.__esm({
16
+ "src/utils/constants.ts"() {
17
+ exports.DISPOSABLE_EMAIL_DOMAINS = /* @__PURE__ */ new Set([
18
+ // 10 Minute Mail variants
19
+ "10minutemail.com",
20
+ "10minutemail.net",
21
+ "10minutemail.org",
22
+ "10minutemail.co.uk",
23
+ "10minmail.com",
24
+ "10mail.org",
25
+ // Temp Mail variants
26
+ "tempmail.com",
27
+ "temp-mail.org",
28
+ "temp-mail.io",
29
+ "tempmail.net",
30
+ "tempmail.de",
31
+ "tempail.com",
32
+ "tempmailaddress.com",
33
+ "tempinbox.com",
34
+ "tempr.email",
35
+ "tempemail.co.za",
36
+ "tempemailco.com",
37
+ "tempomail.fr",
38
+ "temporaryemail.net",
39
+ "temporarymail.com",
40
+ // Guerrilla Mail variants
41
+ "guerrillamail.com",
42
+ "guerrillamail.org",
43
+ "guerrillamail.net",
44
+ "guerrillamail.de",
45
+ "guerrillamail.biz",
46
+ "guerrillamail.info",
47
+ "guerrillamailblock.com",
48
+ "grr.la",
49
+ "sharklasers.com",
50
+ "spam4.me",
51
+ "pokemail.net",
52
+ // Mailinator variants
53
+ "mailinator.com",
54
+ "mailinator.net",
55
+ "mailinator.org",
56
+ "mailinator2.com",
57
+ "mailinater.com",
58
+ "mailinator.us",
59
+ // YOPmail variants
60
+ "yopmail.com",
61
+ "yopmail.fr",
62
+ "yopmail.net",
63
+ "yopmail.gq",
64
+ "yopmail.org",
65
+ // Trash Mail variants
66
+ "trashmail.com",
67
+ "trashmail.net",
68
+ "trashmail.org",
69
+ "trashmail.de",
70
+ "trash-mail.at",
71
+ "trash-mail.com",
72
+ "trashmail.ws",
73
+ "trashmail.me",
74
+ // Other popular disposable services
75
+ "throwaway.email",
76
+ "throwawaymail.com",
77
+ "fakeinbox.com",
78
+ "burnermail.io",
79
+ "maildrop.cc",
80
+ "getnada.com",
81
+ "dispostable.com",
82
+ "mailnesia.com",
83
+ "mailcatch.com",
84
+ "mytemp.email",
85
+ "mohmal.com",
86
+ "emailondeck.com",
87
+ "fakemailgenerator.com",
88
+ "mintemail.com",
89
+ "mailforspam.com",
90
+ "spamgourmet.com",
91
+ "inboxalias.com",
92
+ "jetable.org",
93
+ "anonbox.net",
94
+ "anonymbox.com",
95
+ "spambox.us",
96
+ "discard.email",
97
+ "discardmail.com",
98
+ "disposableemailaddresses.com",
99
+ "emailsensei.com",
100
+ "fakemail.net",
101
+ "getairmail.com",
102
+ "gmailnator.com",
103
+ "incognitomail.com",
104
+ "instantemailaddress.com",
105
+ "mailexpire.com",
106
+ "mailnull.com",
107
+ "mailsac.com",
108
+ "mailslurp.com",
109
+ "mailtemp.net",
110
+ "nomail.xl.cx",
111
+ "notsharingmy.info",
112
+ "owlymail.com",
113
+ "pookmail.com",
114
+ "proxymail.eu",
115
+ "receivemail.com",
116
+ "safetymail.info",
117
+ "spamfree24.org",
118
+ "speed.1s.fr",
119
+ "wegwerfemail.de",
120
+ "zoemail.org",
121
+ // Additional popular services
122
+ "mailnesia.com",
123
+ "guerillamail.com",
124
+ "crazymailing.com",
125
+ "dropmail.me",
126
+ "emailfake.com",
127
+ "fakemailgenerator.net",
128
+ "fivemail.de",
129
+ "getonemail.com",
130
+ "harakirimail.com",
131
+ "hmamail.com",
132
+ "imails.info",
133
+ "inboxbear.com",
134
+ "inboxclean.com",
135
+ "inboxed.im",
136
+ "inboxkitten.com",
137
+ "inboxproxy.com",
138
+ "instantemailaddress.com",
139
+ "klzlv.com",
140
+ "koszmail.pl",
141
+ "lroid.com",
142
+ "mailbox52.ga",
143
+ "mailcatch.com",
144
+ "maildrop.cc",
145
+ "maildu.de",
146
+ "mailforspam.com",
147
+ "mailfree.ga",
148
+ "mailimate.com",
149
+ "mailnull.com",
150
+ "mailpoof.com",
151
+ "mailsac.com",
152
+ "mailtemp.net",
153
+ "mailtothis.com",
154
+ "meltmail.com",
155
+ "mintemail.com",
156
+ "mohmal.com",
157
+ "mt2009.com",
158
+ "mt2014.com",
159
+ "mytrashmail.com",
160
+ "nomail.xl.cx",
161
+ "nomorespamemails.com",
162
+ "nospam.ze.tc",
163
+ "nospamfor.us",
164
+ "nospammail.net",
165
+ "nowmymail.com",
166
+ "objectmail.com",
167
+ "obobbo.com",
168
+ "onewaymail.com",
169
+ "otherinbox.com",
170
+ "owlpic.com",
171
+ "pjjkp.com",
172
+ "putthisinyourspamdatabase.com",
173
+ "quickinbox.com",
174
+ "readymail.org",
175
+ "remail.cf",
176
+ "rhyta.com",
177
+ "s0ny.net",
178
+ "sendspamhere.com",
179
+ "shitmail.me",
180
+ "shortmail.me",
181
+ "sofort-mail.de",
182
+ "sogetthis.com",
183
+ "soodonims.com",
184
+ "spam.la",
185
+ "spam.su",
186
+ "spamavert.com",
187
+ "spambob.net",
188
+ "spambog.com",
189
+ "spambox.us",
190
+ "spamcannon.net",
191
+ "spamday.com",
192
+ "spameater.org",
193
+ "spamex.com",
194
+ "spamfree24.com",
195
+ "spamfree24.de",
196
+ "spamfree24.org",
197
+ "spamgoes.in",
198
+ "spamherelots.com",
199
+ "spamhole.com",
200
+ "spamify.com",
201
+ "spaminator.de",
202
+ "spamkill.info",
203
+ "spaml.de",
204
+ "spamobox.com",
205
+ "spamoff.de",
206
+ "spamslicer.com",
207
+ "spamspot.com",
208
+ "spamstack.net",
209
+ "spamthis.co.uk",
210
+ "spamtroll.net",
211
+ "superrito.com",
212
+ "teleworm.us",
213
+ "temp.emeraldwebmail.com",
214
+ "tempinbox.com",
215
+ "tempmail.it",
216
+ "tempmailbox.net",
217
+ "tempmails.com",
218
+ "thankyou2010.com",
219
+ "thisisnotmyrealemail.com",
220
+ "throwawayemailaddress.com",
221
+ "tmail.ws",
222
+ "tmpmail.net",
223
+ "tmpmail.org",
224
+ "tradermail.info",
225
+ "turual.com",
226
+ "twinmail.de",
227
+ "upliftnow.com",
228
+ "venompen.com",
229
+ "veryrealemail.com",
230
+ "viditag.com",
231
+ "viralplays.com",
232
+ "vkcode.ru",
233
+ "whatpaas.com",
234
+ "wh4f.org",
235
+ "xemaps.com",
236
+ "xmaily.com",
237
+ "yogamaven.com",
238
+ "yuurok.com",
239
+ "zehnminutenmail.de",
240
+ "zetmail.com",
241
+ "zippymail.info"
242
+ ]);
243
+ exports.CORPORATE_EMAIL_DOMAINS = /* @__PURE__ */ new Set([
244
+ // Microsoft
245
+ "microsoft.com",
246
+ "outlook.com",
247
+ "hotmail.com",
248
+ "live.com",
249
+ // Google
250
+ "google.com",
251
+ "gmail.com",
252
+ // Apple
253
+ "apple.com",
254
+ "icloud.com",
255
+ // Amazon
256
+ "amazon.com",
257
+ // Facebook/Meta
258
+ "fb.com",
259
+ "meta.com",
260
+ // Other tech giants
261
+ "ibm.com",
262
+ "oracle.com",
263
+ "salesforce.com",
264
+ "adobe.com",
265
+ "cisco.com",
266
+ "intel.com"
267
+ ]);
268
+ exports.FREE_EMAIL_DOMAINS = /* @__PURE__ */ new Set([
269
+ "gmail.com",
270
+ "yahoo.com",
271
+ "yahoo.co.uk",
272
+ "yahoo.fr",
273
+ "yahoo.de",
274
+ "outlook.com",
275
+ "hotmail.com",
276
+ "hotmail.co.uk",
277
+ "hotmail.fr",
278
+ "live.com",
279
+ "icloud.com",
280
+ "me.com",
281
+ "aol.com",
282
+ "protonmail.com",
283
+ "proton.me",
284
+ "zoho.com",
285
+ "mail.com",
286
+ "gmx.com",
287
+ "gmx.de",
288
+ "yandex.com",
289
+ "yandex.ru",
290
+ "mail.ru",
291
+ "tutanota.com",
292
+ "fastmail.com"
293
+ ]);
294
+ exports.RESERVED_USERNAMES = /* @__PURE__ */ new Set([
295
+ // System/Admin
296
+ "admin",
297
+ "administrator",
298
+ "root",
299
+ "system",
300
+ "sysadmin",
301
+ "superuser",
302
+ "superadmin",
303
+ "sudo",
304
+ // Support
305
+ "support",
306
+ "help",
307
+ "helpdesk",
308
+ "contact",
309
+ "feedback",
310
+ "info",
311
+ "information",
312
+ // Common pages
313
+ "about",
314
+ "home",
315
+ "index",
316
+ "login",
317
+ "logout",
318
+ "signin",
319
+ "signout",
320
+ "signup",
321
+ "register",
322
+ "profile",
323
+ "settings",
324
+ "dashboard",
325
+ "account",
326
+ "user",
327
+ "users",
328
+ // API/Technical
329
+ "api",
330
+ "graphql",
331
+ "rest",
332
+ "webhook",
333
+ "webhooks",
334
+ "oauth",
335
+ "auth",
336
+ "authentication",
337
+ // Content
338
+ "blog",
339
+ "news",
340
+ "posts",
341
+ "articles",
342
+ "docs",
343
+ "documentation",
344
+ "wiki",
345
+ // Commerce
346
+ "shop",
347
+ "store",
348
+ "cart",
349
+ "checkout",
350
+ "payment",
351
+ "billing",
352
+ "invoice",
353
+ "order",
354
+ "orders",
355
+ // Company
356
+ "team",
357
+ "company",
358
+ "about-us",
359
+ "careers",
360
+ "jobs",
361
+ "legal",
362
+ "privacy",
363
+ "terms",
364
+ "tos",
365
+ // Social
366
+ "follow",
367
+ "followers",
368
+ "following",
369
+ "friends",
370
+ "messages",
371
+ "notifications",
372
+ // Media
373
+ "images",
374
+ "photos",
375
+ "videos",
376
+ "media",
377
+ "files",
378
+ "uploads",
379
+ "downloads",
380
+ // Special
381
+ "null",
382
+ "undefined",
383
+ "anonymous",
384
+ "guest",
385
+ "test",
386
+ "testing",
387
+ "demo",
388
+ "example",
389
+ "sample",
390
+ // Brand protection
391
+ "official",
392
+ "verified",
393
+ "staff",
394
+ "mod",
395
+ "moderator",
396
+ "developer",
397
+ "dev",
398
+ "bot",
399
+ "service"
400
+ ]);
401
+ exports.COMMON_PASSWORD_PATTERNS = [
402
+ /^123456/,
403
+ /^password/i,
404
+ /^qwerty/i,
405
+ /^abc123/i,
406
+ /^letmein/i,
407
+ /^welcome/i,
408
+ /^admin/i,
409
+ /^login/i,
410
+ /^master/i,
411
+ /^dragon/i,
412
+ /^baseball/i,
413
+ /^iloveyou/i,
414
+ /^trustno1/i,
415
+ /^sunshine/i,
416
+ /^princess/i,
417
+ /^football/i,
418
+ /^shadow/i,
419
+ /^superman/i,
420
+ /^michael/i,
421
+ /^1234567890/
422
+ ];
423
+ }
424
+ });
425
+
426
+ exports.constants_exports = constants_exports;
427
+ exports.init_constants = init_constants;
428
+ //# sourceMappingURL=chunk-P7P2B7ZI.cjs.map
429
+ //# sourceMappingURL=chunk-P7P2B7ZI.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/constants.ts"],"names":["__export","COMMON_PASSWORD_PATTERNS","CORPORATE_EMAIL_DOMAINS","DISPOSABLE_EMAIL_DOMAINS","FREE_EMAIL_DOMAINS","RESERVED_USERNAMES","__esm"],"mappings":"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","file":"chunk-P7P2B7ZI.cjs","sourcesContent":["/**\r\n * List of known disposable email domains\r\n * This is a comprehensive list of common disposable email providers\r\n * @since 1.0.0\r\n */\r\nexport const DISPOSABLE_EMAIL_DOMAINS: Set<string> = new Set([\r\n // 10 Minute Mail variants\r\n '10minutemail.com',\r\n '10minutemail.net',\r\n '10minutemail.org',\r\n '10minutemail.co.uk',\r\n '10minmail.com',\r\n '10mail.org',\r\n\r\n // Temp Mail variants\r\n 'tempmail.com',\r\n 'temp-mail.org',\r\n 'temp-mail.io',\r\n 'tempmail.net',\r\n 'tempmail.de',\r\n 'tempail.com',\r\n 'tempmailaddress.com',\r\n 'tempinbox.com',\r\n 'tempr.email',\r\n 'tempemail.co.za',\r\n 'tempemailco.com',\r\n 'tempomail.fr',\r\n 'temporaryemail.net',\r\n 'temporarymail.com',\r\n\r\n // Guerrilla Mail variants\r\n 'guerrillamail.com',\r\n 'guerrillamail.org',\r\n 'guerrillamail.net',\r\n 'guerrillamail.de',\r\n 'guerrillamail.biz',\r\n 'guerrillamail.info',\r\n 'guerrillamailblock.com',\r\n 'grr.la',\r\n 'sharklasers.com',\r\n 'spam4.me',\r\n 'pokemail.net',\r\n\r\n // Mailinator variants\r\n 'mailinator.com',\r\n 'mailinator.net',\r\n 'mailinator.org',\r\n 'mailinator2.com',\r\n 'mailinater.com',\r\n 'mailinator.us',\r\n\r\n // YOPmail variants\r\n 'yopmail.com',\r\n 'yopmail.fr',\r\n 'yopmail.net',\r\n 'yopmail.gq',\r\n 'yopmail.org',\r\n\r\n // Trash Mail variants\r\n 'trashmail.com',\r\n 'trashmail.net',\r\n 'trashmail.org',\r\n 'trashmail.de',\r\n 'trash-mail.at',\r\n 'trash-mail.com',\r\n 'trashmail.ws',\r\n 'trashmail.me',\r\n\r\n // Other popular disposable services\r\n 'throwaway.email',\r\n 'throwawaymail.com',\r\n 'fakeinbox.com',\r\n 'burnermail.io',\r\n 'maildrop.cc',\r\n 'getnada.com',\r\n 'dispostable.com',\r\n 'mailnesia.com',\r\n 'mailcatch.com',\r\n 'mytemp.email',\r\n 'mohmal.com',\r\n 'emailondeck.com',\r\n 'fakemailgenerator.com',\r\n 'mintemail.com',\r\n 'mailforspam.com',\r\n 'spamgourmet.com',\r\n 'inboxalias.com',\r\n 'jetable.org',\r\n 'anonbox.net',\r\n 'anonymbox.com',\r\n 'spambox.us',\r\n 'discard.email',\r\n 'discardmail.com',\r\n 'disposableemailaddresses.com',\r\n 'emailsensei.com',\r\n 'fakemail.net',\r\n 'getairmail.com',\r\n 'gmailnator.com',\r\n 'incognitomail.com',\r\n 'instantemailaddress.com',\r\n 'mailexpire.com',\r\n 'mailnull.com',\r\n 'mailsac.com',\r\n 'mailslurp.com',\r\n 'mailtemp.net',\r\n 'nomail.xl.cx',\r\n 'notsharingmy.info',\r\n 'owlymail.com',\r\n 'pookmail.com',\r\n 'proxymail.eu',\r\n 'receivemail.com',\r\n 'safetymail.info',\r\n 'spamfree24.org',\r\n 'speed.1s.fr',\r\n 'wegwerfemail.de',\r\n 'zoemail.org',\r\n\r\n // Additional popular services\r\n 'mailnesia.com',\r\n 'guerillamail.com',\r\n 'crazymailing.com',\r\n 'dropmail.me',\r\n 'emailfake.com',\r\n 'fakemailgenerator.net',\r\n 'fivemail.de',\r\n 'getonemail.com',\r\n 'harakirimail.com',\r\n 'hmamail.com',\r\n 'imails.info',\r\n 'inboxbear.com',\r\n 'inboxclean.com',\r\n 'inboxed.im',\r\n 'inboxkitten.com',\r\n 'inboxproxy.com',\r\n 'instantemailaddress.com',\r\n 'klzlv.com',\r\n 'koszmail.pl',\r\n 'lroid.com',\r\n 'mailbox52.ga',\r\n 'mailcatch.com',\r\n 'maildrop.cc',\r\n 'maildu.de',\r\n 'mailforspam.com',\r\n 'mailfree.ga',\r\n 'mailimate.com',\r\n 'mailnull.com',\r\n 'mailpoof.com',\r\n 'mailsac.com',\r\n 'mailtemp.net',\r\n 'mailtothis.com',\r\n 'meltmail.com',\r\n 'mintemail.com',\r\n 'mohmal.com',\r\n 'mt2009.com',\r\n 'mt2014.com',\r\n 'mytrashmail.com',\r\n 'nomail.xl.cx',\r\n 'nomorespamemails.com',\r\n 'nospam.ze.tc',\r\n 'nospamfor.us',\r\n 'nospammail.net',\r\n 'nowmymail.com',\r\n 'objectmail.com',\r\n 'obobbo.com',\r\n 'onewaymail.com',\r\n 'otherinbox.com',\r\n 'owlpic.com',\r\n 'pjjkp.com',\r\n 'putthisinyourspamdatabase.com',\r\n 'quickinbox.com',\r\n 'readymail.org',\r\n 'remail.cf',\r\n 'rhyta.com',\r\n 's0ny.net',\r\n 'sendspamhere.com',\r\n 'shitmail.me',\r\n 'shortmail.me',\r\n 'sofort-mail.de',\r\n 'sogetthis.com',\r\n 'soodonims.com',\r\n 'spam.la',\r\n 'spam.su',\r\n 'spamavert.com',\r\n 'spambob.net',\r\n 'spambog.com',\r\n 'spambox.us',\r\n 'spamcannon.net',\r\n 'spamday.com',\r\n 'spameater.org',\r\n 'spamex.com',\r\n 'spamfree24.com',\r\n 'spamfree24.de',\r\n 'spamfree24.org',\r\n 'spamgoes.in',\r\n 'spamherelots.com',\r\n 'spamhole.com',\r\n 'spamify.com',\r\n 'spaminator.de',\r\n 'spamkill.info',\r\n 'spaml.de',\r\n 'spamobox.com',\r\n 'spamoff.de',\r\n 'spamslicer.com',\r\n 'spamspot.com',\r\n 'spamstack.net',\r\n 'spamthis.co.uk',\r\n 'spamtroll.net',\r\n 'superrito.com',\r\n 'teleworm.us',\r\n 'temp.emeraldwebmail.com',\r\n 'tempinbox.com',\r\n 'tempmail.it',\r\n 'tempmailbox.net',\r\n 'tempmails.com',\r\n 'thankyou2010.com',\r\n 'thisisnotmyrealemail.com',\r\n 'throwawayemailaddress.com',\r\n 'tmail.ws',\r\n 'tmpmail.net',\r\n 'tmpmail.org',\r\n 'tradermail.info',\r\n 'turual.com',\r\n 'twinmail.de',\r\n 'upliftnow.com',\r\n 'venompen.com',\r\n 'veryrealemail.com',\r\n 'viditag.com',\r\n 'viralplays.com',\r\n 'vkcode.ru',\r\n 'whatpaas.com',\r\n 'wh4f.org',\r\n 'xemaps.com',\r\n 'xmaily.com',\r\n 'yogamaven.com',\r\n 'yuurok.com',\r\n 'zehnminutenmail.de',\r\n 'zetmail.com',\r\n 'zippymail.info',\r\n]);\r\n\r\n/**\r\n * Common corporate/business email domains\r\n */\r\nexport const CORPORATE_EMAIL_DOMAINS: Set<string> = new Set([\r\n // Microsoft\r\n 'microsoft.com',\r\n 'outlook.com',\r\n 'hotmail.com',\r\n 'live.com',\r\n // Google\r\n 'google.com',\r\n 'gmail.com',\r\n // Apple\r\n 'apple.com',\r\n 'icloud.com',\r\n // Amazon\r\n 'amazon.com',\r\n // Facebook/Meta\r\n 'fb.com',\r\n 'meta.com',\r\n // Other tech giants\r\n 'ibm.com',\r\n 'oracle.com',\r\n 'salesforce.com',\r\n 'adobe.com',\r\n 'cisco.com',\r\n 'intel.com',\r\n]);\r\n\r\n/**\r\n * Free email provider domains\r\n */\r\nexport const FREE_EMAIL_DOMAINS: Set<string> = new Set([\r\n 'gmail.com',\r\n 'yahoo.com',\r\n 'yahoo.co.uk',\r\n 'yahoo.fr',\r\n 'yahoo.de',\r\n 'outlook.com',\r\n 'hotmail.com',\r\n 'hotmail.co.uk',\r\n 'hotmail.fr',\r\n 'live.com',\r\n 'icloud.com',\r\n 'me.com',\r\n 'aol.com',\r\n 'protonmail.com',\r\n 'proton.me',\r\n 'zoho.com',\r\n 'mail.com',\r\n 'gmx.com',\r\n 'gmx.de',\r\n 'yandex.com',\r\n 'yandex.ru',\r\n 'mail.ru',\r\n 'tutanota.com',\r\n 'fastmail.com',\r\n]);\r\n\r\n/**\r\n * Reserved usernames that should not be allowed\r\n */\r\nexport const RESERVED_USERNAMES: Set<string> = new Set([\r\n // System/Admin\r\n 'admin',\r\n 'administrator',\r\n 'root',\r\n 'system',\r\n 'sysadmin',\r\n 'superuser',\r\n 'superadmin',\r\n 'sudo',\r\n // Support\r\n 'support',\r\n 'help',\r\n 'helpdesk',\r\n 'contact',\r\n 'feedback',\r\n 'info',\r\n 'information',\r\n // Common pages\r\n 'about',\r\n 'home',\r\n 'index',\r\n 'login',\r\n 'logout',\r\n 'signin',\r\n 'signout',\r\n 'signup',\r\n 'register',\r\n 'profile',\r\n 'settings',\r\n 'dashboard',\r\n 'account',\r\n 'user',\r\n 'users',\r\n // API/Technical\r\n 'api',\r\n 'graphql',\r\n 'rest',\r\n 'webhook',\r\n 'webhooks',\r\n 'oauth',\r\n 'auth',\r\n 'authentication',\r\n // Content\r\n 'blog',\r\n 'news',\r\n 'posts',\r\n 'articles',\r\n 'docs',\r\n 'documentation',\r\n 'wiki',\r\n // Commerce\r\n 'shop',\r\n 'store',\r\n 'cart',\r\n 'checkout',\r\n 'payment',\r\n 'billing',\r\n 'invoice',\r\n 'order',\r\n 'orders',\r\n // Company\r\n 'team',\r\n 'company',\r\n 'about-us',\r\n 'careers',\r\n 'jobs',\r\n 'legal',\r\n 'privacy',\r\n 'terms',\r\n 'tos',\r\n // Social\r\n 'follow',\r\n 'followers',\r\n 'following',\r\n 'friends',\r\n 'messages',\r\n 'notifications',\r\n // Media\r\n 'images',\r\n 'photos',\r\n 'videos',\r\n 'media',\r\n 'files',\r\n 'uploads',\r\n 'downloads',\r\n // Special\r\n 'null',\r\n 'undefined',\r\n 'anonymous',\r\n 'guest',\r\n 'test',\r\n 'testing',\r\n 'demo',\r\n 'example',\r\n 'sample',\r\n // Brand protection\r\n 'official',\r\n 'verified',\r\n 'staff',\r\n 'mod',\r\n 'moderator',\r\n 'developer',\r\n 'dev',\r\n 'bot',\r\n 'service',\r\n]);\r\n\r\n/**\r\n * Common password patterns to check against\r\n */\r\nexport const COMMON_PASSWORD_PATTERNS: RegExp[] = [\r\n /^123456/,\r\n /^password/i,\r\n /^qwerty/i,\r\n /^abc123/i,\r\n /^letmein/i,\r\n /^welcome/i,\r\n /^admin/i,\r\n /^login/i,\r\n /^master/i,\r\n /^dragon/i,\r\n /^baseball/i,\r\n /^iloveyou/i,\r\n /^trustno1/i,\r\n /^sunshine/i,\r\n /^princess/i,\r\n /^football/i,\r\n /^shadow/i,\r\n /^superman/i,\r\n /^michael/i,\r\n /^1234567890/,\r\n];\r\n"]}
@@ -0,0 +1,150 @@
1
+ 'use strict';
2
+
3
+ // src/async.ts
4
+ var DEFAULT_OPTIONS = {
5
+ timeout: 5e3,
6
+ abortEarly: false
7
+ };
8
+ async function validateAsync(value, validator, options = {}) {
9
+ const opts = { ...DEFAULT_OPTIONS, ...options };
10
+ const startTime = Date.now();
11
+ try {
12
+ const result = await Promise.race([
13
+ validator(value),
14
+ new Promise(
15
+ (_, reject) => setTimeout(() => reject(new Error("Validation timeout")), opts.timeout)
16
+ )
17
+ ]);
18
+ return {
19
+ ...result,
20
+ duration: Date.now() - startTime
21
+ };
22
+ } catch (error) {
23
+ return {
24
+ isValid: false,
25
+ errors: [
26
+ {
27
+ field: "async",
28
+ code: "VALIDATION_ERROR",
29
+ message: error instanceof Error ? error.message : "Validation failed"
30
+ }
31
+ ],
32
+ duration: Date.now() - startTime
33
+ };
34
+ }
35
+ }
36
+ async function validateAllAsync(validators, options = {}) {
37
+ const opts = { ...DEFAULT_OPTIONS, ...options };
38
+ const startTime = Date.now();
39
+ const allErrors = [];
40
+ try {
41
+ const results = await Promise.all(
42
+ validators.map(async ({ value, validator, field }) => {
43
+ try {
44
+ const result = await Promise.race([
45
+ validator(value),
46
+ new Promise(
47
+ (_, reject) => setTimeout(() => reject(new Error("Validation timeout")), opts.timeout)
48
+ )
49
+ ]);
50
+ return result.errors.map((err) => ({
51
+ ...err,
52
+ field: err.field === "async" ? field : `${field}.${err.field}`
53
+ }));
54
+ } catch (error) {
55
+ return [
56
+ {
57
+ field,
58
+ code: "VALIDATION_ERROR",
59
+ message: error instanceof Error ? error.message : "Validation failed"
60
+ }
61
+ ];
62
+ }
63
+ })
64
+ );
65
+ results.forEach((errors) => allErrors.push(...errors));
66
+ return {
67
+ isValid: allErrors.length === 0,
68
+ errors: allErrors,
69
+ duration: Date.now() - startTime
70
+ };
71
+ } catch (error) {
72
+ return {
73
+ isValid: false,
74
+ errors: [
75
+ {
76
+ field: "async",
77
+ code: "VALIDATION_ERROR",
78
+ message: error instanceof Error ? error.message : "Validation failed"
79
+ }
80
+ ],
81
+ duration: Date.now() - startTime
82
+ };
83
+ }
84
+ }
85
+ function createDebouncedValidator(validator, delay = 300) {
86
+ let timeoutId = null;
87
+ let pendingResolve = null;
88
+ return (value) => {
89
+ return new Promise((resolve) => {
90
+ if (timeoutId) {
91
+ clearTimeout(timeoutId);
92
+ if (pendingResolve) {
93
+ pendingResolve({
94
+ isValid: true,
95
+ errors: [],
96
+ duration: 0
97
+ });
98
+ }
99
+ }
100
+ pendingResolve = resolve;
101
+ timeoutId = setTimeout(async () => {
102
+ const startTime = Date.now();
103
+ try {
104
+ const result = await validator(value);
105
+ resolve({
106
+ ...result,
107
+ duration: Date.now() - startTime
108
+ });
109
+ } catch (error) {
110
+ resolve({
111
+ isValid: false,
112
+ errors: [
113
+ {
114
+ field: "async",
115
+ code: "VALIDATION_ERROR",
116
+ message: error instanceof Error ? error.message : "Validation failed"
117
+ }
118
+ ],
119
+ duration: Date.now() - startTime
120
+ });
121
+ }
122
+ pendingResolve = null;
123
+ timeoutId = null;
124
+ }, delay);
125
+ });
126
+ };
127
+ }
128
+ function composeValidators(...validators) {
129
+ return async (value) => {
130
+ const startTime = Date.now();
131
+ const allErrors = [];
132
+ for (const validator of validators) {
133
+ const result = await validator(value);
134
+ allErrors.push(...result.errors);
135
+ if (!result.isValid && allErrors.length > 0) ;
136
+ }
137
+ return {
138
+ isValid: allErrors.length === 0,
139
+ errors: allErrors,
140
+ duration: Date.now() - startTime
141
+ };
142
+ };
143
+ }
144
+
145
+ exports.composeValidators = composeValidators;
146
+ exports.createDebouncedValidator = createDebouncedValidator;
147
+ exports.validateAllAsync = validateAllAsync;
148
+ exports.validateAsync = validateAsync;
149
+ //# sourceMappingURL=chunk-PB6SKSJN.cjs.map
150
+ //# sourceMappingURL=chunk-PB6SKSJN.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/async.ts"],"names":[],"mappings":"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","file":"chunk-PB6SKSJN.cjs","sourcesContent":["/**\r\n * Async validation module for Utilitify\r\n * Provides async validators for scenarios requiring external API calls\r\n *\r\n * @packageDocumentation\r\n * @since 1.0.0\r\n */\r\n\r\nimport type { IValidationError } from './types';\r\n\r\n/**\r\n * Async validation result\r\n */\r\nexport interface AsyncValidationResult {\r\n isValid: boolean;\r\n errors: IValidationError[];\r\n /** Time taken for validation in milliseconds */\r\n duration?: number;\r\n}\r\n\r\n/**\r\n * Async validator function type\r\n */\r\nexport type AsyncValidator<T> = (value: T) => Promise<AsyncValidationResult>;\r\n\r\n/**\r\n * Async validation options\r\n */\r\nexport interface AsyncValidationOptions {\r\n /** Timeout in milliseconds (default: 5000) */\r\n timeout?: number;\r\n /** Whether to abort on first error (default: false) */\r\n abortEarly?: boolean;\r\n /** Custom error messages */\r\n messages?: Record<string, string>;\r\n}\r\n\r\n/**\r\n * Default async validation options\r\n */\r\nconst DEFAULT_OPTIONS: AsyncValidationOptions = {\r\n timeout: 5000,\r\n abortEarly: false,\r\n};\r\n\r\n/**\r\n * Run async validation with timeout\r\n *\r\n * @param value - Value to validate\r\n * @param validator - Async validator function\r\n * @param options - Validation options\r\n * @returns Validation result\r\n * @since 1.0.0\r\n *\r\n * @example\r\n * ```typescript\r\n * const result = await validateAsync(email, async (email) => {\r\n * const exists = await checkEmailExists(email);\r\n * return {\r\n * isValid: !exists,\r\n * errors: exists ? [{ field: 'email', code: 'EXISTS', message: 'Email already registered' }] : []\r\n * };\r\n * });\r\n * ```\r\n */\r\nexport async function validateAsync<T>(\r\n value: T,\r\n validator: AsyncValidator<T>,\r\n options: AsyncValidationOptions = {}\r\n): Promise<AsyncValidationResult> {\r\n const opts = { ...DEFAULT_OPTIONS, ...options };\r\n const startTime = Date.now();\r\n\r\n try {\r\n const result = await Promise.race([\r\n validator(value),\r\n new Promise<AsyncValidationResult>((_, reject) =>\r\n setTimeout(() => reject(new Error('Validation timeout')), opts.timeout)\r\n ),\r\n ]);\r\n\r\n return {\r\n ...result,\r\n duration: Date.now() - startTime,\r\n };\r\n } catch (error) {\r\n return {\r\n isValid: false,\r\n errors: [\r\n {\r\n field: 'async',\r\n code: 'VALIDATION_ERROR',\r\n message: error instanceof Error ? error.message : 'Validation failed',\r\n },\r\n ],\r\n duration: Date.now() - startTime,\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Run multiple async validators in parallel\r\n *\r\n * @param validators - Array of validator configs\r\n * @param options - Validation options\r\n * @returns Combined validation result\r\n * @since 1.0.0\r\n *\r\n * @example\r\n * ```typescript\r\n * const result = await validateAllAsync([\r\n * { value: email, validator: emailExistsCheck, field: 'email' },\r\n * { value: username, validator: usernameAvailableCheck, field: 'username' }\r\n * ]);\r\n * ```\r\n */\r\nexport async function validateAllAsync<T>(\r\n validators: Array<{\r\n value: T;\r\n validator: AsyncValidator<T>;\r\n field: string;\r\n }>,\r\n options: AsyncValidationOptions = {}\r\n): Promise<AsyncValidationResult> {\r\n const opts = { ...DEFAULT_OPTIONS, ...options };\r\n const startTime = Date.now();\r\n const allErrors: IValidationError[] = [];\r\n\r\n try {\r\n const results = await Promise.all(\r\n validators.map(async ({ value, validator, field }) => {\r\n try {\r\n const result = await Promise.race([\r\n validator(value),\r\n new Promise<AsyncValidationResult>((_, reject) =>\r\n setTimeout(() => reject(new Error('Validation timeout')), opts.timeout)\r\n ),\r\n ]);\r\n\r\n // Add field prefix to errors\r\n return result.errors.map(err => ({\r\n ...err,\r\n field: err.field === 'async' ? field : `${field}.${err.field}`,\r\n }));\r\n } catch (error) {\r\n return [\r\n {\r\n field,\r\n code: 'VALIDATION_ERROR',\r\n message: error instanceof Error ? error.message : 'Validation failed',\r\n },\r\n ];\r\n }\r\n })\r\n );\r\n\r\n results.forEach(errors => allErrors.push(...errors));\r\n\r\n return {\r\n isValid: allErrors.length === 0,\r\n errors: allErrors,\r\n duration: Date.now() - startTime,\r\n };\r\n } catch (error) {\r\n return {\r\n isValid: false,\r\n errors: [\r\n {\r\n field: 'async',\r\n code: 'VALIDATION_ERROR',\r\n message: error instanceof Error ? error.message : 'Validation failed',\r\n },\r\n ],\r\n duration: Date.now() - startTime,\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Create a debounced async validator\r\n * Useful for real-time validation in forms\r\n *\r\n * @param validator - Async validator function\r\n * @param delay - Debounce delay in milliseconds\r\n * @returns Debounced validator\r\n * @since 1.0.0\r\n *\r\n * @example\r\n * ```typescript\r\n * const debouncedEmailCheck = createDebouncedValidator(\r\n * async (email) => ({ isValid: !(await checkExists(email)), errors: [] }),\r\n * 300\r\n * );\r\n * ```\r\n */\r\nexport function createDebouncedValidator<T>(\r\n validator: AsyncValidator<T>,\r\n delay: number = 300\r\n): (value: T) => Promise<AsyncValidationResult> {\r\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\r\n let pendingResolve: ((result: AsyncValidationResult) => void) | null = null;\r\n\r\n return (value: T): Promise<AsyncValidationResult> => {\r\n return new Promise(resolve => {\r\n // Clear existing timeout\r\n if (timeoutId) {\r\n clearTimeout(timeoutId);\r\n // Resolve previous pending promise as cancelled\r\n if (pendingResolve) {\r\n pendingResolve({\r\n isValid: true,\r\n errors: [],\r\n duration: 0,\r\n });\r\n }\r\n }\r\n\r\n pendingResolve = resolve;\r\n\r\n timeoutId = setTimeout(async () => {\r\n const startTime = Date.now();\r\n try {\r\n const result = await validator(value);\r\n resolve({\r\n ...result,\r\n duration: Date.now() - startTime,\r\n });\r\n } catch (error) {\r\n resolve({\r\n isValid: false,\r\n errors: [\r\n {\r\n field: 'async',\r\n code: 'VALIDATION_ERROR',\r\n message: error instanceof Error ? error.message : 'Validation failed',\r\n },\r\n ],\r\n duration: Date.now() - startTime,\r\n });\r\n }\r\n pendingResolve = null;\r\n timeoutId = null;\r\n }, delay);\r\n });\r\n };\r\n}\r\n\r\n/**\r\n * Compose multiple validators into one\r\n *\r\n * @param validators - Validators to compose\r\n * @returns Composed validator\r\n * @since 1.0.0\r\n */\r\nexport function composeValidators<T>(\r\n ...validators: AsyncValidator<T>[]\r\n): AsyncValidator<T> {\r\n return async (value: T): Promise<AsyncValidationResult> => {\r\n const startTime = Date.now();\r\n const allErrors: IValidationError[] = [];\r\n\r\n for (const validator of validators) {\r\n const result = await validator(value);\r\n allErrors.push(...result.errors);\r\n\r\n if (!result.isValid && allErrors.length > 0) {\r\n // Continue to collect all errors\r\n }\r\n }\r\n\r\n return {\r\n isValid: allErrors.length === 0,\r\n errors: allErrors,\r\n duration: Date.now() - startTime,\r\n };\r\n };\r\n}\r\n"]}