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.
- package/LICENSE +21 -0
- package/README.md +338 -0
- package/dist/async.cjs +25 -0
- package/dist/async.cjs.map +1 -0
- package/dist/async.d.cts +104 -0
- package/dist/async.d.ts +104 -0
- package/dist/async.js +4 -0
- package/dist/async.js.map +1 -0
- package/dist/chunk-2ICNRTSN.cjs +346 -0
- package/dist/chunk-2ICNRTSN.cjs.map +1 -0
- package/dist/chunk-3DPF72DY.js +170 -0
- package/dist/chunk-3DPF72DY.js.map +1 -0
- package/dist/chunk-4CV4JOE5.js +24 -0
- package/dist/chunk-4CV4JOE5.js.map +1 -0
- package/dist/chunk-4SLYNSLH.cjs +783 -0
- package/dist/chunk-4SLYNSLH.cjs.map +1 -0
- package/dist/chunk-5WP7DWCG.js +1285 -0
- package/dist/chunk-5WP7DWCG.js.map +1 -0
- package/dist/chunk-BMQ6YPKV.js +876 -0
- package/dist/chunk-BMQ6YPKV.js.map +1 -0
- package/dist/chunk-BZCMWUKS.cjs +479 -0
- package/dist/chunk-BZCMWUKS.cjs.map +1 -0
- package/dist/chunk-C5R744DY.cjs +173 -0
- package/dist/chunk-C5R744DY.cjs.map +1 -0
- package/dist/chunk-C75J62CV.cjs +913 -0
- package/dist/chunk-C75J62CV.cjs.map +1 -0
- package/dist/chunk-CZLDE2OZ.cjs +28 -0
- package/dist/chunk-CZLDE2OZ.cjs.map +1 -0
- package/dist/chunk-DSMB6AF6.cjs +193 -0
- package/dist/chunk-DSMB6AF6.cjs.map +1 -0
- package/dist/chunk-ETWGPOPY.js +426 -0
- package/dist/chunk-ETWGPOPY.js.map +1 -0
- package/dist/chunk-FQBPVN63.cjs +403 -0
- package/dist/chunk-FQBPVN63.cjs.map +1 -0
- package/dist/chunk-G4GYQGTW.cjs +178 -0
- package/dist/chunk-G4GYQGTW.cjs.map +1 -0
- package/dist/chunk-GFDMZDMI.js +486 -0
- package/dist/chunk-GFDMZDMI.js.map +1 -0
- package/dist/chunk-HOTOYIPB.js +171 -0
- package/dist/chunk-HOTOYIPB.js.map +1 -0
- package/dist/chunk-HYADH4ZX.js +176 -0
- package/dist/chunk-HYADH4ZX.js.map +1 -0
- package/dist/chunk-JBN7C5WE.js +255 -0
- package/dist/chunk-JBN7C5WE.js.map +1 -0
- package/dist/chunk-JNCTPFTD.cjs +25 -0
- package/dist/chunk-JNCTPFTD.cjs.map +1 -0
- package/dist/chunk-N3BH3BV7.js +21 -0
- package/dist/chunk-N3BH3BV7.js.map +1 -0
- package/dist/chunk-NFPGAVRQ.js +749 -0
- package/dist/chunk-NFPGAVRQ.js.map +1 -0
- package/dist/chunk-OFFRGRBN.cjs +1332 -0
- package/dist/chunk-OFFRGRBN.cjs.map +1 -0
- package/dist/chunk-OZLKYIZL.cjs +490 -0
- package/dist/chunk-OZLKYIZL.cjs.map +1 -0
- package/dist/chunk-P3NUK46X.js +145 -0
- package/dist/chunk-P3NUK46X.js.map +1 -0
- package/dist/chunk-P7P2B7ZI.cjs +429 -0
- package/dist/chunk-P7P2B7ZI.cjs.map +1 -0
- package/dist/chunk-PB6SKSJN.cjs +150 -0
- package/dist/chunk-PB6SKSJN.cjs.map +1 -0
- package/dist/chunk-R3IXCJR7.js +378 -0
- package/dist/chunk-R3IXCJR7.js.map +1 -0
- package/dist/chunk-SD6P3WEJ.js +324 -0
- package/dist/chunk-SD6P3WEJ.js.map +1 -0
- package/dist/chunk-YSCHP26P.js +451 -0
- package/dist/chunk-YSCHP26P.js.map +1 -0
- package/dist/chunk-ZLMPRPCY.cjs +274 -0
- package/dist/chunk-ZLMPRPCY.cjs.map +1 -0
- package/dist/common-CBDYNJeh.d.cts +48 -0
- package/dist/common-CBDYNJeh.d.ts +48 -0
- package/dist/constants.cjs +42 -0
- package/dist/constants.cjs.map +1 -0
- package/dist/constants.d.cts +60 -0
- package/dist/constants.d.ts +60 -0
- package/dist/constants.js +5 -0
- package/dist/constants.js.map +1 -0
- package/dist/country/index.cjs +154 -0
- package/dist/country/index.cjs.map +1 -0
- package/dist/country/index.d.cts +1 -0
- package/dist/country/index.d.ts +1 -0
- package/dist/country/index.js +5 -0
- package/dist/country/index.js.map +1 -0
- package/dist/date/index.cjs +117 -0
- package/dist/date/index.cjs.map +1 -0
- package/dist/date/index.d.cts +283 -0
- package/dist/date/index.d.ts +283 -0
- package/dist/date/index.js +4 -0
- package/dist/date/index.js.map +1 -0
- package/dist/environment/index.cjs +73 -0
- package/dist/environment/index.cjs.map +1 -0
- package/dist/environment/index.d.cts +127 -0
- package/dist/environment/index.d.ts +127 -0
- package/dist/environment/index.js +4 -0
- package/dist/environment/index.js.map +1 -0
- package/dist/form/index.cjs +81 -0
- package/dist/form/index.cjs.map +1 -0
- package/dist/form/index.d.cts +227 -0
- package/dist/form/index.d.ts +227 -0
- package/dist/form/index.js +4 -0
- package/dist/form/index.js.map +1 -0
- package/dist/i18n.cjs +37 -0
- package/dist/i18n.cjs.map +1 -0
- package/dist/i18n.d.cts +102 -0
- package/dist/i18n.d.ts +102 -0
- package/dist/i18n.js +4 -0
- package/dist/i18n.js.map +1 -0
- package/dist/index-BXBmBHyL.d.ts +718 -0
- package/dist/index-BYsUCP3u.d.cts +718 -0
- package/dist/index-Cl26FrAZ.d.cts +362 -0
- package/dist/index-Cl26FrAZ.d.ts +362 -0
- package/dist/index.cjs +1265 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +205 -0
- package/dist/index.d.ts +205 -0
- package/dist/index.js +277 -0
- package/dist/index.js.map +1 -0
- package/dist/schema.cjs +13 -0
- package/dist/schema.cjs.map +1 -0
- package/dist/schema.d.cts +84 -0
- package/dist/schema.d.ts +84 -0
- package/dist/schema.js +4 -0
- package/dist/schema.js.map +1 -0
- package/dist/security/index.cjs +94 -0
- package/dist/security/index.cjs.map +1 -0
- package/dist/security/index.d.cts +216 -0
- package/dist/security/index.d.ts +216 -0
- package/dist/security/index.js +5 -0
- package/dist/security/index.js.map +1 -0
- package/dist/string/index.cjs +153 -0
- package/dist/string/index.cjs.map +1 -0
- package/dist/string/index.d.cts +471 -0
- package/dist/string/index.d.ts +471 -0
- package/dist/string/index.js +4 -0
- package/dist/string/index.js.map +1 -0
- package/dist/transform/index.cjs +105 -0
- package/dist/transform/index.cjs.map +1 -0
- package/dist/transform/index.d.cts +271 -0
- package/dist/transform/index.d.ts +271 -0
- package/dist/transform/index.js +4 -0
- package/dist/transform/index.js.map +1 -0
- package/dist/validators/index.cjs +195 -0
- package/dist/validators/index.cjs.map +1 -0
- package/dist/validators/index.d.cts +2 -0
- package/dist/validators/index.d.ts +2 -0
- package/dist/validators/index.js +6 -0
- package/dist/validators/index.js.map +1 -0
- 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"]}
|