@oxog/vld 1.4.0 → 1.5.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/CHANGELOG.md +333 -333
- package/README.md +1130 -1130
- package/dist/cli/benchmark.d.ts +15 -0
- package/dist/cli/benchmark.d.ts.map +1 -0
- package/dist/cli/benchmark.js +248 -0
- package/dist/cli/benchmark.js.map +1 -0
- package/dist/cli/bin.d.ts +8 -0
- package/dist/cli/bin.d.ts.map +1 -0
- package/dist/cli/bin.js +35 -0
- package/dist/cli/bin.js.map +1 -0
- package/dist/cli/commands/benchmark.d.ts +11 -0
- package/dist/cli/commands/benchmark.d.ts.map +1 -0
- package/dist/cli/commands/benchmark.js +204 -0
- package/dist/cli/commands/benchmark.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +11 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +157 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/generate.d.ts +14 -0
- package/dist/cli/generate.d.ts.map +1 -0
- package/dist/cli/generate.js +233 -0
- package/dist/cli/generate.js.map +1 -0
- package/dist/cli/index.d.ts +59 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +182 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/validate.d.ts +15 -0
- package/dist/cli/validate.d.ts.map +1 -0
- package/dist/cli/validate.js +162 -0
- package/dist/cli/validate.js.map +1 -0
- package/dist/codecs/index.d.ts.map +1 -1
- package/dist/codecs/index.js +29 -10
- package/dist/codecs/index.js.map +1 -1
- package/dist/coercion/boolean.d.ts.map +1 -1
- package/dist/coercion/boolean.js +23 -31
- package/dist/coercion/boolean.js.map +1 -1
- package/dist/coercion/date.js +1 -1
- package/dist/coercion/date.js.map +1 -1
- package/dist/compat/emitter.d.ts +73 -0
- package/dist/compat/emitter.d.ts.map +1 -0
- package/dist/compat/emitter.js +179 -0
- package/dist/compat/emitter.js.map +1 -0
- package/dist/compat/index.d.ts +15 -0
- package/dist/compat/index.d.ts.map +1 -0
- package/dist/compat/index.js +14 -0
- package/dist/compat/index.js.map +1 -0
- package/dist/compat/result.d.ts +128 -0
- package/dist/compat/result.d.ts.map +1 -0
- package/dist/compat/result.js +169 -0
- package/dist/compat/result.js.map +1 -0
- package/dist/errors.d.ts +58 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +97 -9
- package/dist/errors.js.map +1 -1
- package/dist/events.d.ts +140 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +8 -0
- package/dist/events.js.map +1 -0
- package/dist/guards.d.ts +143 -0
- package/dist/guards.d.ts.map +1 -0
- package/dist/guards.js +238 -0
- package/dist/guards.js.map +1 -0
- package/dist/index-new.d.ts.map +1 -0
- package/dist/index.d.ts +13 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -1
- package/dist/index.js.map +1 -1
- package/dist/kernel.d.ts +29 -0
- package/dist/kernel.d.ts.map +1 -0
- package/dist/kernel.js +402 -0
- package/dist/kernel.js.map +1 -0
- package/dist/locales/af.js.map +1 -1
- package/dist/locales/ar.js.map +1 -1
- package/dist/locales/backup-en.js.map +1 -1
- package/dist/locales/bn.js.map +1 -1
- package/dist/locales/da.js.map +1 -1
- package/dist/locales/de.js.map +1 -1
- package/dist/locales/en.js.map +1 -1
- package/dist/locales/es-MX.js.map +1 -1
- package/dist/locales/es.js.map +1 -1
- package/dist/locales/fi.js.map +1 -1
- package/dist/locales/fr.js.map +1 -1
- package/dist/locales/hi.js.map +1 -1
- package/dist/locales/id.js.map +1 -1
- package/dist/locales/it.js.map +1 -1
- package/dist/locales/ja.js.map +1 -1
- package/dist/locales/ko.js.map +1 -1
- package/dist/locales/nl.js.map +1 -1
- package/dist/locales/no.js.map +1 -1
- package/dist/locales/pl.js.map +1 -1
- package/dist/locales/pt-BR.js.map +1 -1
- package/dist/locales/pt.js.map +1 -1
- package/dist/locales/ru.js.map +1 -1
- package/dist/locales/sv.js.map +1 -1
- package/dist/locales/sw.js.map +1 -1
- package/dist/locales/th.js.map +1 -1
- package/dist/locales/tr.js.map +1 -1
- package/dist/locales/types.js.map +1 -1
- package/dist/locales/vi.js.map +1 -1
- package/dist/locales/zh.js.map +1 -1
- package/dist/locales.d.ts +54 -0
- package/dist/locales.d.ts.map +1 -0
- package/dist/locales.js +732 -0
- package/dist/locales.js.map +1 -0
- package/dist/logger.d.ts +94 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +184 -0
- package/dist/logger.js.map +1 -0
- package/dist/pigment.d.ts +124 -0
- package/dist/pigment.d.ts.map +1 -0
- package/dist/pigment.js +177 -0
- package/dist/pigment.js.map +1 -0
- package/dist/plugins/codecs.d.ts +17 -0
- package/dist/plugins/codecs.d.ts.map +1 -0
- package/dist/plugins/codecs.js +29 -0
- package/dist/plugins/codecs.js.map +1 -0
- package/dist/plugins/coercion.d.ts +13 -0
- package/dist/plugins/coercion.d.ts.map +1 -0
- package/dist/plugins/coercion.js +34 -0
- package/dist/plugins/coercion.js.map +1 -0
- package/dist/plugins/core-validators.d.ts +13 -0
- package/dist/plugins/core-validators.d.ts.map +1 -0
- package/dist/plugins/core-validators.js +96 -0
- package/dist/plugins/core-validators.js.map +1 -0
- package/dist/plugins/index.d.ts +8 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +8 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/kernel.d.ts +29 -0
- package/dist/plugins/kernel.d.ts.map +1 -0
- package/dist/plugins/kernel.js +486 -0
- package/dist/plugins/kernel.js.map +1 -0
- package/dist/plugins/types.d.ts +186 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +8 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/style.d.ts +123 -0
- package/dist/style.d.ts.map +1 -0
- package/dist/style.js +369 -0
- package/dist/style.js.map +1 -0
- package/dist/utils/codec-utils.d.ts.map +1 -1
- package/dist/utils/codec-utils.js +6 -0
- package/dist/utils/codec-utils.js.map +1 -1
- package/dist/utils/ip-validation.d.ts.map +1 -1
- package/dist/utils/ip-validation.js +34 -14
- package/dist/utils/ip-validation.js.map +1 -1
- package/dist/validators/base.d.ts +3 -0
- package/dist/validators/base.d.ts.map +1 -1
- package/dist/validators/base.js +8 -0
- package/dist/validators/base.js.map +1 -1
- package/dist/validators/bigint.js.map +1 -1
- package/dist/validators/custom.js.map +1 -1
- package/dist/validators/discriminated-union.js.map +1 -1
- package/dist/validators/file.js.map +1 -1
- package/dist/validators/function.js.map +1 -1
- package/dist/validators/index.js.map +1 -1
- package/dist/validators/json.js.map +1 -1
- package/dist/validators/lazy.js.map +1 -1
- package/dist/validators/nan.js.map +1 -1
- package/dist/validators/null.js.map +1 -1
- package/dist/validators/object-optimized.d.ts +23 -0
- package/dist/validators/object-optimized.d.ts.map +1 -0
- package/dist/validators/object-optimized.js +179 -0
- package/dist/validators/object-optimized.js.map +1 -0
- package/dist/validators/object-ultra.d.ts +34 -0
- package/dist/validators/object-ultra.d.ts.map +1 -0
- package/dist/validators/object-ultra.js +175 -0
- package/dist/validators/object-ultra.js.map +1 -0
- package/dist/validators/object.d.ts.map +1 -1
- package/dist/validators/object.js +1 -1
- package/dist/validators/object.js.map +1 -1
- package/dist/validators/string-bool.js.map +1 -1
- package/dist/validators/string-formats.js.map +1 -1
- package/dist/validators/string-ultra.d.ts +49 -0
- package/dist/validators/string-ultra.d.ts.map +1 -0
- package/dist/validators/string-ultra.js +217 -0
- package/dist/validators/string-ultra.js.map +1 -0
- package/dist/validators/template-literal.d.ts.map +1 -1
- package/dist/validators/template-literal.js +13 -12
- package/dist/validators/template-literal.js.map +1 -1
- package/dist/validators/undefined.js.map +1 -1
- package/dist/validators/union-optimized.d.ts +15 -0
- package/dist/validators/union-optimized.d.ts.map +1 -0
- package/dist/validators/union-optimized.js +92 -0
- package/dist/validators/union-optimized.js.map +1 -0
- package/dist/validators/xor.js.map +1 -1
- package/package.json +95 -79
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"string-bool.js","sourceRoot":"","sources":["../../src/validators/string-bool.ts"],"names":[],"mappings":"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","sourcesContent":["import { VldBase, ParseResult } from './base';\nimport { getMessages } from '../locales';\n\n/**\n * Configuration for string boolean validation\n */\nexport interface StringBoolOptions {\n /** Custom truthy values (default: ['true', '1', 'yes', 'on', 'y', 'enabled']) */\n truthy?: readonly string[];\n /** Custom falsy values (default: ['false', '0', 'no', 'off', 'n', 'disabled']) */\n falsy?: readonly string[];\n /** Whether matching should be case-sensitive (default: false) */\n caseSensitive?: boolean;\n}\n\n/**\n * Default truthy and falsy value sets\n */\nconst DEFAULT_TRUTHY = ['true', '1', 'yes', 'on', 'y', 'enabled'] as const;\nconst DEFAULT_FALSY = ['false', '0', 'no', 'off', 'n', 'disabled'] as const;\n\n/**\n * Immutable string boolean validator for flexible boolean parsing\n * Supports string representations like \"true\", \"yes\", \"on\", \"1\", etc.\n */\nexport class VldStringBool extends VldBase<unknown, boolean> {\n private constructor(\n private readonly options: StringBoolOptions\n ) {\n super();\n }\n\n /**\n * Create a new string boolean validator\n */\n static create(options: StringBoolOptions = {}): VldStringBool {\n return new VldStringBool(options);\n }\n\n /**\n * Normalize a string value based on case sensitivity setting\n */\n private normalizeValue(value: string): string {\n return this.options.caseSensitive ? value : value.toLowerCase();\n }\n\n /**\n * Get the effective truthy values (custom or default)\n */\n private getTruthyValues(): readonly string[] {\n return this.options.truthy ?? DEFAULT_TRUTHY;\n }\n\n /**\n * Get the effective falsy values (custom or default)\n */\n private getFalsyValues(): readonly string[] {\n return this.options.falsy ?? DEFAULT_FALSY;\n }\n\n /**\n * Parse and validate a string boolean value\n */\n parse(value: unknown): boolean {\n // First, ensure we have a string\n if (typeof value !== 'string') {\n // Also accept actual boolean values for convenience\n if (typeof value === 'boolean') {\n return value;\n }\n throw new Error(\n getMessages().stringExpected(typeof value, 'string')\n );\n }\n\n const normalized = this.normalizeValue(value);\n const truthyValues = this.getTruthyValues();\n const falsyValues = this.getFalsyValues();\n\n // Normalize the value sets for comparison\n const normalizedTruthy = this.options.caseSensitive\n ? truthyValues\n : truthyValues.map(v => v.toLowerCase());\n\n const normalizedFalsy = this.options.caseSensitive\n ? falsyValues\n : falsyValues.map(v => v.toLowerCase());\n\n // Check if value is in truthy set\n if (normalizedTruthy.includes(normalized)) {\n return true;\n }\n\n // Check if value is in falsy set\n if (normalizedFalsy.includes(normalized)) {\n return false;\n }\n\n // Value is not recognized\n const allValidValues = [...normalizedTruthy, ...normalizedFalsy];\n throw new Error(\n getMessages().stringBoolExpected(\n this.options.caseSensitive ? allValidValues.join(', ') : allValidValues.join(', '),\n value\n )\n );\n }\n\n /**\n * Safely parse and validate a string boolean value\n */\n safeParse(value: unknown): ParseResult<boolean> {\n try {\n const result = this.parse(value);\n return { success: true, data: result };\n } catch (error) {\n return {\n success: false,\n error: error as Error\n };\n }\n }\n\n /**\n * Create a new validator with custom truthy values\n */\n withTruthy(values: readonly string[]): VldStringBool {\n return new VldStringBool({\n ...this.options,\n truthy: values\n });\n }\n\n /**\n * Create a new validator with custom falsy values\n */\n withFalsy(values: readonly string[]): VldStringBool {\n return new VldStringBool({\n ...this.options,\n falsy: values\n });\n }\n\n /**\n * Create a new validator with case-sensitive matching\n */\n caseSensitive(): VldStringBool {\n return new VldStringBool({\n ...this.options,\n caseSensitive: true\n });\n }\n\n /**\n * Create a new validator with case-insensitive matching (default)\n */\n caseInsensitive(): VldStringBool {\n return new VldStringBool({\n ...this.options,\n caseSensitive: false\n });\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"string-bool.js","sourceRoot":"","sources":["../../src/validators/string-bool.ts"],"names":[],"mappings":"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","sourcesContent":["import { VldBase, ParseResult } from './base';\r\nimport { getMessages } from '../locales';\r\n\r\n/**\r\n * Configuration for string boolean validation\r\n */\r\nexport interface StringBoolOptions {\r\n /** Custom truthy values (default: ['true', '1', 'yes', 'on', 'y', 'enabled']) */\r\n truthy?: readonly string[];\r\n /** Custom falsy values (default: ['false', '0', 'no', 'off', 'n', 'disabled']) */\r\n falsy?: readonly string[];\r\n /** Whether matching should be case-sensitive (default: false) */\r\n caseSensitive?: boolean;\r\n}\r\n\r\n/**\r\n * Default truthy and falsy value sets\r\n */\r\nconst DEFAULT_TRUTHY = ['true', '1', 'yes', 'on', 'y', 'enabled'] as const;\r\nconst DEFAULT_FALSY = ['false', '0', 'no', 'off', 'n', 'disabled'] as const;\r\n\r\n/**\r\n * Immutable string boolean validator for flexible boolean parsing\r\n * Supports string representations like \"true\", \"yes\", \"on\", \"1\", etc.\r\n */\r\nexport class VldStringBool extends VldBase<unknown, boolean> {\r\n private constructor(\r\n private readonly options: StringBoolOptions\r\n ) {\r\n super();\r\n }\r\n\r\n /**\r\n * Create a new string boolean validator\r\n */\r\n static create(options: StringBoolOptions = {}): VldStringBool {\r\n return new VldStringBool(options);\r\n }\r\n\r\n /**\r\n * Normalize a string value based on case sensitivity setting\r\n */\r\n private normalizeValue(value: string): string {\r\n return this.options.caseSensitive ? value : value.toLowerCase();\r\n }\r\n\r\n /**\r\n * Get the effective truthy values (custom or default)\r\n */\r\n private getTruthyValues(): readonly string[] {\r\n return this.options.truthy ?? DEFAULT_TRUTHY;\r\n }\r\n\r\n /**\r\n * Get the effective falsy values (custom or default)\r\n */\r\n private getFalsyValues(): readonly string[] {\r\n return this.options.falsy ?? DEFAULT_FALSY;\r\n }\r\n\r\n /**\r\n * Parse and validate a string boolean value\r\n */\r\n parse(value: unknown): boolean {\r\n // First, ensure we have a string\r\n if (typeof value !== 'string') {\r\n // Also accept actual boolean values for convenience\r\n if (typeof value === 'boolean') {\r\n return value;\r\n }\r\n throw new Error(\r\n getMessages().stringExpected(typeof value, 'string')\r\n );\r\n }\r\n\r\n const normalized = this.normalizeValue(value);\r\n const truthyValues = this.getTruthyValues();\r\n const falsyValues = this.getFalsyValues();\r\n\r\n // Normalize the value sets for comparison\r\n const normalizedTruthy = this.options.caseSensitive\r\n ? truthyValues\r\n : truthyValues.map(v => v.toLowerCase());\r\n\r\n const normalizedFalsy = this.options.caseSensitive\r\n ? falsyValues\r\n : falsyValues.map(v => v.toLowerCase());\r\n\r\n // Check if value is in truthy set\r\n if (normalizedTruthy.includes(normalized)) {\r\n return true;\r\n }\r\n\r\n // Check if value is in falsy set\r\n if (normalizedFalsy.includes(normalized)) {\r\n return false;\r\n }\r\n\r\n // Value is not recognized\r\n const allValidValues = [...normalizedTruthy, ...normalizedFalsy];\r\n throw new Error(\r\n getMessages().stringBoolExpected(\r\n this.options.caseSensitive ? allValidValues.join(', ') : allValidValues.join(', '),\r\n value\r\n )\r\n );\r\n }\r\n\r\n /**\r\n * Safely parse and validate a string boolean value\r\n */\r\n safeParse(value: unknown): ParseResult<boolean> {\r\n try {\r\n const result = this.parse(value);\r\n return { success: true, data: result };\r\n } catch (error) {\r\n return {\r\n success: false,\r\n error: error as Error\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * Create a new validator with custom truthy values\r\n */\r\n withTruthy(values: readonly string[]): VldStringBool {\r\n return new VldStringBool({\r\n ...this.options,\r\n truthy: values\r\n });\r\n }\r\n\r\n /**\r\n * Create a new validator with custom falsy values\r\n */\r\n withFalsy(values: readonly string[]): VldStringBool {\r\n return new VldStringBool({\r\n ...this.options,\r\n falsy: values\r\n });\r\n }\r\n\r\n /**\r\n * Create a new validator with case-sensitive matching\r\n */\r\n caseSensitive(): VldStringBool {\r\n return new VldStringBool({\r\n ...this.options,\r\n caseSensitive: true\r\n });\r\n }\r\n\r\n /**\r\n * Create a new validator with case-insensitive matching (default)\r\n */\r\n caseInsensitive(): VldStringBool {\r\n return new VldStringBool({\r\n ...this.options,\r\n caseSensitive: false\r\n });\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"string-formats.js","sourceRoot":"","sources":["../../src/validators/string-formats.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Top-level string format validators\n * Part of Zod 4 API parity implementation\n * Provides convenient validators for common string formats\n */\n\nimport { VldBase } from './base';\nimport { VldString } from './string';\nimport type { ParseResult } from './base';\n\n/**\n * Pre-compiled regex patterns for performance\n */\nconst REGEXES = {\n email: /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/,\n uuid: /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,\n uuidv4: /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,\n uuidv6: /^[0-9a-f]{8}-[0-9a-f]{4}-6[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,\n uuidv7: /^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,\n hostname: /^(?=.{1,253}$)(?:(?!-)[a-zA-Z0-9-]{1,63}(?<!-)\\.)+[a-zA-Z]{2,63}$/,\n emoji: /^(?:\\p{Emoji_Presentation}|\\p{Emoji}\\uFE0F)(?:\\u200D(?:\\p{Emoji_Presentation}|\\p{Emoji}\\uFE0F))*$/u,\n base64: /^(?:[A-Za-z0-9+\\/]{4})*(?:[A-Za-z0-9+\\/]{2}==|[A-Za-z0-9+\\/]{3}=)?$/,\n base64url: /^[A-Za-z0-9_-]*$/,\n hex: /^[0-9a-fA-F]*$/,\n jwt: /^[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]*$/,\n nanoid: /^[A-Za-z0-9_-]{21}$/,\n cuid: /^c[^\\s-]{8,}$/i,\n cuid2: /^[0-9a-z]+$/,\n ulid: /^[0-9A-HJKMNP-TV-Z]{26}$/,\n ipv4: /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,\n ipv6: /^(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$/,\n mac: /^([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}$/,\n cidrv4: /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\/(?:3[0-2]|[12]?[0-9])$/,\n cidrv6: /^(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}\\/(?:12[0-8]|1[01][0-9]|[1-9]?[0-9])$|^::(?:[0-9a-fA-F]{1,4}:){0,6}[0-9a-fA-F]{1,4}\\/(?:12[0-8]|1[01][0-9]|[1-9]?[0-9])$|^(?:[0-9a-fA-F]{1,4}:){1,7}:\\/(?:12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,\n e164: /^\\+[1-9]\\d{1,14}$/,\n isoDate: /^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$/,\n isoTime: /^(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?$/,\n isoDateTime: /^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?Z?$/,\n md5: /^[a-f0-9]{32}$/i,\n sha1: /^[a-f0-9]{40}$/i,\n sha256: /^[a-f0-9]{64}$/i,\n sha384: /^[a-f0-9]{96}$/i,\n sha512: /^[a-f0-9]{128}$/i,\n} as const;\n\n/**\n * Generic string format validator\n */\nclass VldStringFormat extends VldBase<unknown, string> {\n public constructor(\n public readonly _format: string,\n public readonly _validator: (val: string) => boolean,\n public readonly _errorMessage?: string\n ) {\n super();\n }\n\n static create(\n format: string,\n validator: (val: string) => boolean,\n errorMessage?: string\n ): VldStringFormat {\n return new VldStringFormat(format, validator, errorMessage);\n }\n\n parse(value: unknown): string {\n const result = VldString.create().parse(value);\n\n if (!this._validator(result)) {\n throw new Error(\n this._errorMessage || `Invalid ${this._format} format`\n );\n }\n\n return result;\n }\n\n safeParse(value: unknown): ParseResult<string> {\n const stringResult = VldString.create().safeParse(value);\n if (!stringResult.success) {\n return stringResult;\n }\n\n if (!this._validator(stringResult.data)) {\n return {\n success: false,\n error: new Error(\n this._errorMessage || `Invalid ${this._format} format`\n )\n };\n }\n\n return { success: true, data: stringResult.data };\n }\n}\n\n/**\n * Top-level string format validators\n */\nexport const email = (options?: { pattern?: RegExp }): VldStringFormat =>\n VldStringFormat.create('email', (val) => (options?.pattern ?? REGEXES.email).test(val));\n\nexport const uuid = (options?: { version?: 'v4' | 'v6' | 'v7' }): VldStringFormat => {\n const pattern = options?.version ? REGEXES[`uuid${options.version}`] : REGEXES.uuid;\n return VldStringFormat.create('uuid', (val) => pattern.test(val));\n};\n\nexport const uuidv4 = (): VldStringFormat =>\n VldStringFormat.create('uuid', (val) => REGEXES.uuidv4.test(val));\n\nexport const hostname = (): VldStringFormat =>\n VldStringFormat.create('hostname', (val) => REGEXES.hostname.test(val));\n\nexport const emoji = (): VldStringFormat =>\n VldStringFormat.create('emoji', (val) => REGEXES.emoji.test(val));\n\nexport const base64 = (): VldStringFormat =>\n VldStringFormat.create('base64', (val) => REGEXES.base64.test(val));\n\nexport const base64url = (): VldStringFormat =>\n VldStringFormat.create('base64url', (val) => REGEXES.base64url.test(val));\n\nexport const hex = (): VldStringFormat =>\n VldStringFormat.create('hex', (val) => REGEXES.hex.test(val));\n\nexport const jwt = (): VldStringFormat =>\n VldStringFormat.create('jwt', (val) => REGEXES.jwt.test(val));\n\nexport const nanoid = (): VldStringFormat =>\n VldStringFormat.create('nanoid', (val) => REGEXES.nanoid.test(val));\n\nexport const cuid = (): VldStringFormat =>\n VldStringFormat.create('cuid', (val) => REGEXES.cuid.test(val));\n\nexport const cuid2 = (): VldStringFormat =>\n VldStringFormat.create('cuid2', (val) => REGEXES.cuid2.test(val));\n\nexport const ulid = (): VldStringFormat =>\n VldStringFormat.create('ulid', (val) => REGEXES.ulid.test(val));\n\nexport const ipv4 = (): VldStringFormat =>\n VldStringFormat.create('ipv4', (val) => REGEXES.ipv4.test(val));\n\nexport const ipv6 = (): VldStringFormat =>\n VldStringFormat.create('ipv6', (val) => REGEXES.ipv6.test(val));\n\nexport const mac = (): VldStringFormat =>\n VldStringFormat.create('mac', (val) => REGEXES.mac.test(val));\n\nexport const cidrv4 = (): VldStringFormat =>\n VldStringFormat.create('cidrv4', (val) => REGEXES.cidrv4.test(val));\n\nexport const cidrv6 = (): VldStringFormat =>\n VldStringFormat.create('cidrv6', (val) => REGEXES.cidrv6.test(val));\n\nexport const e164 = (): VldStringFormat =>\n VldStringFormat.create('e164', (val) => REGEXES.e164.test(val));\n\nexport const hash = (algorithm: 'md5' | 'sha1' | 'sha256' | 'sha384' | 'sha512'): VldStringFormat =>\n VldStringFormat.create('hash', (val) => (REGEXES as any)[algorithm]?.test(val) ?? false, `Invalid ${algorithm} hash`);\n\n/**\n * ISO date/time validators\n */\nexport const iso = {\n date: () => VldStringFormat.create('date', (val) => REGEXES.isoDate.test(val)),\n time: () => VldStringFormat.create('time', (val) => REGEXES.isoTime.test(val)),\n dateTime: (_options?: { offset?: boolean }) =>\n VldStringFormat.create('datetime', (val) => REGEXES.isoDateTime.test(val)),\n duration: () => VldStringFormat.create('duration', (val) => /^P/.test(val)),\n};\n\n/**\n * Custom format validator\n */\nexport const stringFormat = (\n name: string,\n validator: ((val: string) => boolean) | RegExp\n): VldStringFormat => {\n const fn = validator instanceof RegExp ? (val: string) => validator.test(val) : validator;\n return VldStringFormat.create(name, fn);\n};\n\n// Export regexes for external use\nexport { REGEXES as regexes };\n"]}
|
|
1
|
+
{"version":3,"file":"string-formats.js","sourceRoot":"","sources":["../../src/validators/string-formats.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Top-level string format validators\r\n * Part of Zod 4 API parity implementation\r\n * Provides convenient validators for common string formats\r\n */\r\n\r\nimport { VldBase } from './base';\r\nimport { VldString } from './string';\r\nimport type { ParseResult } from './base';\r\n\r\n/**\r\n * Pre-compiled regex patterns for performance\r\n */\r\nconst REGEXES = {\r\n email: /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/,\r\n uuid: /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,\r\n uuidv4: /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,\r\n uuidv6: /^[0-9a-f]{8}-[0-9a-f]{4}-6[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,\r\n uuidv7: /^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,\r\n hostname: /^(?=.{1,253}$)(?:(?!-)[a-zA-Z0-9-]{1,63}(?<!-)\\.)+[a-zA-Z]{2,63}$/,\r\n emoji: /^(?:\\p{Emoji_Presentation}|\\p{Emoji}\\uFE0F)(?:\\u200D(?:\\p{Emoji_Presentation}|\\p{Emoji}\\uFE0F))*$/u,\r\n base64: /^(?:[A-Za-z0-9+\\/]{4})*(?:[A-Za-z0-9+\\/]{2}==|[A-Za-z0-9+\\/]{3}=)?$/,\r\n base64url: /^[A-Za-z0-9_-]*$/,\r\n hex: /^[0-9a-fA-F]*$/,\r\n jwt: /^[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]*$/,\r\n nanoid: /^[A-Za-z0-9_-]{21}$/,\r\n cuid: /^c[^\\s-]{8,}$/i,\r\n cuid2: /^[0-9a-z]+$/,\r\n ulid: /^[0-9A-HJKMNP-TV-Z]{26}$/,\r\n ipv4: /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,\r\n ipv6: /^(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$/,\r\n mac: /^([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}$/,\r\n cidrv4: /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\/(?:3[0-2]|[12]?[0-9])$/,\r\n cidrv6: /^(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}\\/(?:12[0-8]|1[01][0-9]|[1-9]?[0-9])$|^::(?:[0-9a-fA-F]{1,4}:){0,6}[0-9a-fA-F]{1,4}\\/(?:12[0-8]|1[01][0-9]|[1-9]?[0-9])$|^(?:[0-9a-fA-F]{1,4}:){1,7}:\\/(?:12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,\r\n e164: /^\\+[1-9]\\d{1,14}$/,\r\n isoDate: /^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])$/,\r\n isoTime: /^(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?$/,\r\n isoDateTime: /^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?Z?$/,\r\n md5: /^[a-f0-9]{32}$/i,\r\n sha1: /^[a-f0-9]{40}$/i,\r\n sha256: /^[a-f0-9]{64}$/i,\r\n sha384: /^[a-f0-9]{96}$/i,\r\n sha512: /^[a-f0-9]{128}$/i,\r\n} as const;\r\n\r\n/**\r\n * Generic string format validator\r\n */\r\nclass VldStringFormat extends VldBase<unknown, string> {\r\n public constructor(\r\n public readonly _format: string,\r\n public readonly _validator: (val: string) => boolean,\r\n public readonly _errorMessage?: string\r\n ) {\r\n super();\r\n }\r\n\r\n static create(\r\n format: string,\r\n validator: (val: string) => boolean,\r\n errorMessage?: string\r\n ): VldStringFormat {\r\n return new VldStringFormat(format, validator, errorMessage);\r\n }\r\n\r\n parse(value: unknown): string {\r\n const result = VldString.create().parse(value);\r\n\r\n if (!this._validator(result)) {\r\n throw new Error(\r\n this._errorMessage || `Invalid ${this._format} format`\r\n );\r\n }\r\n\r\n return result;\r\n }\r\n\r\n safeParse(value: unknown): ParseResult<string> {\r\n const stringResult = VldString.create().safeParse(value);\r\n if (!stringResult.success) {\r\n return stringResult;\r\n }\r\n\r\n if (!this._validator(stringResult.data)) {\r\n return {\r\n success: false,\r\n error: new Error(\r\n this._errorMessage || `Invalid ${this._format} format`\r\n )\r\n };\r\n }\r\n\r\n return { success: true, data: stringResult.data };\r\n }\r\n}\r\n\r\n/**\r\n * Top-level string format validators\r\n */\r\nexport const email = (options?: { pattern?: RegExp }): VldStringFormat =>\r\n VldStringFormat.create('email', (val) => (options?.pattern ?? REGEXES.email).test(val));\r\n\r\nexport const uuid = (options?: { version?: 'v4' | 'v6' | 'v7' }): VldStringFormat => {\r\n const pattern = options?.version ? REGEXES[`uuid${options.version}`] : REGEXES.uuid;\r\n return VldStringFormat.create('uuid', (val) => pattern.test(val));\r\n};\r\n\r\nexport const uuidv4 = (): VldStringFormat =>\r\n VldStringFormat.create('uuid', (val) => REGEXES.uuidv4.test(val));\r\n\r\nexport const hostname = (): VldStringFormat =>\r\n VldStringFormat.create('hostname', (val) => REGEXES.hostname.test(val));\r\n\r\nexport const emoji = (): VldStringFormat =>\r\n VldStringFormat.create('emoji', (val) => REGEXES.emoji.test(val));\r\n\r\nexport const base64 = (): VldStringFormat =>\r\n VldStringFormat.create('base64', (val) => REGEXES.base64.test(val));\r\n\r\nexport const base64url = (): VldStringFormat =>\r\n VldStringFormat.create('base64url', (val) => REGEXES.base64url.test(val));\r\n\r\nexport const hex = (): VldStringFormat =>\r\n VldStringFormat.create('hex', (val) => REGEXES.hex.test(val));\r\n\r\nexport const jwt = (): VldStringFormat =>\r\n VldStringFormat.create('jwt', (val) => REGEXES.jwt.test(val));\r\n\r\nexport const nanoid = (): VldStringFormat =>\r\n VldStringFormat.create('nanoid', (val) => REGEXES.nanoid.test(val));\r\n\r\nexport const cuid = (): VldStringFormat =>\r\n VldStringFormat.create('cuid', (val) => REGEXES.cuid.test(val));\r\n\r\nexport const cuid2 = (): VldStringFormat =>\r\n VldStringFormat.create('cuid2', (val) => REGEXES.cuid2.test(val));\r\n\r\nexport const ulid = (): VldStringFormat =>\r\n VldStringFormat.create('ulid', (val) => REGEXES.ulid.test(val));\r\n\r\nexport const ipv4 = (): VldStringFormat =>\r\n VldStringFormat.create('ipv4', (val) => REGEXES.ipv4.test(val));\r\n\r\nexport const ipv6 = (): VldStringFormat =>\r\n VldStringFormat.create('ipv6', (val) => REGEXES.ipv6.test(val));\r\n\r\nexport const mac = (): VldStringFormat =>\r\n VldStringFormat.create('mac', (val) => REGEXES.mac.test(val));\r\n\r\nexport const cidrv4 = (): VldStringFormat =>\r\n VldStringFormat.create('cidrv4', (val) => REGEXES.cidrv4.test(val));\r\n\r\nexport const cidrv6 = (): VldStringFormat =>\r\n VldStringFormat.create('cidrv6', (val) => REGEXES.cidrv6.test(val));\r\n\r\nexport const e164 = (): VldStringFormat =>\r\n VldStringFormat.create('e164', (val) => REGEXES.e164.test(val));\r\n\r\nexport const hash = (algorithm: 'md5' | 'sha1' | 'sha256' | 'sha384' | 'sha512'): VldStringFormat =>\r\n VldStringFormat.create('hash', (val) => (REGEXES as any)[algorithm]?.test(val) ?? false, `Invalid ${algorithm} hash`);\r\n\r\n/**\r\n * ISO date/time validators\r\n */\r\nexport const iso = {\r\n date: () => VldStringFormat.create('date', (val) => REGEXES.isoDate.test(val)),\r\n time: () => VldStringFormat.create('time', (val) => REGEXES.isoTime.test(val)),\r\n dateTime: (_options?: { offset?: boolean }) =>\r\n VldStringFormat.create('datetime', (val) => REGEXES.isoDateTime.test(val)),\r\n duration: () => VldStringFormat.create('duration', (val) => /^P/.test(val)),\r\n};\r\n\r\n/**\r\n * Custom format validator\r\n */\r\nexport const stringFormat = (\r\n name: string,\r\n validator: ((val: string) => boolean) | RegExp\r\n): VldStringFormat => {\r\n const fn = validator instanceof RegExp ? (val: string) => validator.test(val) : validator;\r\n return VldStringFormat.create(name, fn);\r\n};\r\n\r\n// Export regexes for external use\r\nexport { REGEXES as regexes };\r\n"]}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { VldBase, ParseResult } from './base';
|
|
2
|
+
/**
|
|
3
|
+
* Ultra-optimized string validator with pre-compiled validations
|
|
4
|
+
*/
|
|
5
|
+
export declare class VldStringUltra extends VldBase<unknown, string> {
|
|
6
|
+
private readonly minLength?;
|
|
7
|
+
private readonly maxLength?;
|
|
8
|
+
private readonly exactLength?;
|
|
9
|
+
private readonly pattern?;
|
|
10
|
+
private readonly isEmail?;
|
|
11
|
+
private readonly isUrl?;
|
|
12
|
+
private readonly transform?;
|
|
13
|
+
private readonly customValidations;
|
|
14
|
+
private static readonly EMAIL_REGEX;
|
|
15
|
+
private static readonly URL_REGEX;
|
|
16
|
+
private constructor();
|
|
17
|
+
static create(): VldStringUltra;
|
|
18
|
+
/**
|
|
19
|
+
* Ultra-fast string validation with minimal overhead
|
|
20
|
+
*/
|
|
21
|
+
parse(value: unknown): string;
|
|
22
|
+
safeParse(value: unknown): ParseResult<string>;
|
|
23
|
+
min(length: number): VldStringUltra;
|
|
24
|
+
max(length: number): VldStringUltra;
|
|
25
|
+
length(length: number): VldStringUltra;
|
|
26
|
+
/**
|
|
27
|
+
* Ultra-fast email validation using simplified regex
|
|
28
|
+
*/
|
|
29
|
+
email(): VldStringUltra;
|
|
30
|
+
/**
|
|
31
|
+
* Ultra-fast URL validation
|
|
32
|
+
*/
|
|
33
|
+
url(): VldStringUltra;
|
|
34
|
+
/**
|
|
35
|
+
* Pattern matching with custom regex
|
|
36
|
+
*/
|
|
37
|
+
regex(pattern: RegExp): VldStringUltra;
|
|
38
|
+
/**
|
|
39
|
+
* Transform string after validation
|
|
40
|
+
*/
|
|
41
|
+
trim(): VldStringUltra;
|
|
42
|
+
toLowerCase(): VldStringUltra;
|
|
43
|
+
toUpperCase(): VldStringUltra;
|
|
44
|
+
nonempty(): VldStringUltra;
|
|
45
|
+
startsWith(prefix: string): VldStringUltra;
|
|
46
|
+
endsWith(suffix: string): VldStringUltra;
|
|
47
|
+
includes(substring: string): VldStringUltra;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=string-ultra.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string-ultra.d.ts","sourceRoot":"","sources":["../../src/validators/string-ultra.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAG9C;;GAEG;AACH,qBAAa,cAAe,SAAQ,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAA4B;IACvD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAyC;IAG3E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAgC;IAGnE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAyB;IAE1D,OAAO;IAmBP,MAAM,CAAC,MAAM,IAAI,cAAc;IAI/B;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IAwD7B,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC;IAS9C,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc;IAYnC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc;IAYnC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc;IAYtC;;OAEG;IACH,KAAK,IAAI,cAAc;IAYvB;;OAEG;IACH,GAAG,IAAI,cAAc;IAYrB;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc;IAYtC;;OAEG;IACH,IAAI,IAAI,cAAc;IAetB,WAAW,IAAI,cAAc;IAe7B,WAAW,IAAI,cAAc;IAe7B,QAAQ,IAAI,cAAc;IAI1B,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc;IAK1C,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc;IAKxC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc;CAI5C"}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { VldBase } from './base.js';
|
|
2
|
+
import { getMessages } from '../locales.js';
|
|
3
|
+
/**
|
|
4
|
+
* Ultra-optimized string validator with pre-compiled validations
|
|
5
|
+
*/
|
|
6
|
+
export class VldStringUltra extends VldBase {
|
|
7
|
+
constructor(config = {}) {
|
|
8
|
+
super();
|
|
9
|
+
this.customValidations = [];
|
|
10
|
+
this.minLength = config.minLength;
|
|
11
|
+
this.maxLength = config.maxLength;
|
|
12
|
+
this.exactLength = config.exactLength;
|
|
13
|
+
this.pattern = config.pattern;
|
|
14
|
+
this.isEmail = config.isEmail;
|
|
15
|
+
this.isUrl = config.isUrl;
|
|
16
|
+
this.transform = config.transform;
|
|
17
|
+
}
|
|
18
|
+
static create() {
|
|
19
|
+
return new VldStringUltra();
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Ultra-fast string validation with minimal overhead
|
|
23
|
+
*/
|
|
24
|
+
parse(value) {
|
|
25
|
+
// Ultra-fast type check
|
|
26
|
+
if (typeof value !== 'string') {
|
|
27
|
+
throw new Error(getMessages().invalidString);
|
|
28
|
+
}
|
|
29
|
+
let str = value;
|
|
30
|
+
// Apply transform first if present
|
|
31
|
+
if (this.transform) {
|
|
32
|
+
str = this.transform(str);
|
|
33
|
+
}
|
|
34
|
+
const len = str.length;
|
|
35
|
+
// Fast length checks with bitwise operations for small numbers
|
|
36
|
+
if (this.exactLength !== undefined && len !== this.exactLength) {
|
|
37
|
+
throw new Error(getMessages().stringLength(this.exactLength));
|
|
38
|
+
}
|
|
39
|
+
if (this.minLength !== undefined && len < this.minLength) {
|
|
40
|
+
throw new Error(getMessages().stringMinLength(this.minLength));
|
|
41
|
+
}
|
|
42
|
+
if (this.maxLength !== undefined && len > this.maxLength) {
|
|
43
|
+
throw new Error(getMessages().stringMaxLength(this.maxLength));
|
|
44
|
+
}
|
|
45
|
+
// Ultra-fast email validation (simplified for speed)
|
|
46
|
+
if (this.isEmail && !VldStringUltra.EMAIL_REGEX.test(str)) {
|
|
47
|
+
throw new Error(getMessages().invalidEmail);
|
|
48
|
+
}
|
|
49
|
+
// Ultra-fast URL validation
|
|
50
|
+
if (this.isUrl && !VldStringUltra.URL_REGEX.test(str)) {
|
|
51
|
+
throw new Error(getMessages().invalidUrl);
|
|
52
|
+
}
|
|
53
|
+
// Pattern matching
|
|
54
|
+
if (this.pattern && !this.pattern.test(str)) {
|
|
55
|
+
throw new Error(getMessages().stringPattern);
|
|
56
|
+
}
|
|
57
|
+
// Custom validations (loop unrolling for small arrays)
|
|
58
|
+
const validationsLength = this.customValidations.length;
|
|
59
|
+
if (validationsLength > 0) {
|
|
60
|
+
for (let i = 0; i < validationsLength; i++) {
|
|
61
|
+
if (!this.customValidations[i](str)) {
|
|
62
|
+
throw new Error(getMessages().customValidation);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return str;
|
|
67
|
+
}
|
|
68
|
+
safeParse(value) {
|
|
69
|
+
try {
|
|
70
|
+
return { success: true, data: this.parse(value) };
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
return { success: false, error: error };
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Chainable methods with ultra-fast creation
|
|
77
|
+
min(length) {
|
|
78
|
+
return new VldStringUltra({
|
|
79
|
+
minLength: length,
|
|
80
|
+
maxLength: this.maxLength,
|
|
81
|
+
exactLength: this.exactLength,
|
|
82
|
+
pattern: this.pattern,
|
|
83
|
+
isEmail: this.isEmail,
|
|
84
|
+
isUrl: this.isUrl,
|
|
85
|
+
transform: this.transform
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
max(length) {
|
|
89
|
+
return new VldStringUltra({
|
|
90
|
+
minLength: this.minLength,
|
|
91
|
+
maxLength: length,
|
|
92
|
+
exactLength: this.exactLength,
|
|
93
|
+
pattern: this.pattern,
|
|
94
|
+
isEmail: this.isEmail,
|
|
95
|
+
isUrl: this.isUrl,
|
|
96
|
+
transform: this.transform
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
length(length) {
|
|
100
|
+
return new VldStringUltra({
|
|
101
|
+
minLength: this.minLength,
|
|
102
|
+
maxLength: this.maxLength,
|
|
103
|
+
exactLength: length,
|
|
104
|
+
pattern: this.pattern,
|
|
105
|
+
isEmail: this.isEmail,
|
|
106
|
+
isUrl: this.isUrl,
|
|
107
|
+
transform: this.transform
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Ultra-fast email validation using simplified regex
|
|
112
|
+
*/
|
|
113
|
+
email() {
|
|
114
|
+
return new VldStringUltra({
|
|
115
|
+
minLength: this.minLength,
|
|
116
|
+
maxLength: this.maxLength,
|
|
117
|
+
exactLength: this.exactLength,
|
|
118
|
+
pattern: this.pattern,
|
|
119
|
+
isEmail: true,
|
|
120
|
+
isUrl: this.isUrl,
|
|
121
|
+
transform: this.transform
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Ultra-fast URL validation
|
|
126
|
+
*/
|
|
127
|
+
url() {
|
|
128
|
+
return new VldStringUltra({
|
|
129
|
+
minLength: this.minLength,
|
|
130
|
+
maxLength: this.maxLength,
|
|
131
|
+
exactLength: this.exactLength,
|
|
132
|
+
pattern: this.pattern,
|
|
133
|
+
isEmail: this.isEmail,
|
|
134
|
+
isUrl: true,
|
|
135
|
+
transform: this.transform
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Pattern matching with custom regex
|
|
140
|
+
*/
|
|
141
|
+
regex(pattern) {
|
|
142
|
+
return new VldStringUltra({
|
|
143
|
+
minLength: this.minLength,
|
|
144
|
+
maxLength: this.maxLength,
|
|
145
|
+
exactLength: this.exactLength,
|
|
146
|
+
pattern: pattern,
|
|
147
|
+
isEmail: this.isEmail,
|
|
148
|
+
isUrl: this.isUrl,
|
|
149
|
+
transform: this.transform
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Transform string after validation
|
|
154
|
+
*/
|
|
155
|
+
trim() {
|
|
156
|
+
const currentTransform = this.transform;
|
|
157
|
+
return new VldStringUltra({
|
|
158
|
+
minLength: this.minLength,
|
|
159
|
+
maxLength: this.maxLength,
|
|
160
|
+
exactLength: this.exactLength,
|
|
161
|
+
pattern: this.pattern,
|
|
162
|
+
isEmail: this.isEmail,
|
|
163
|
+
isUrl: this.isUrl,
|
|
164
|
+
transform: currentTransform ?
|
|
165
|
+
(str) => currentTransform(str).trim() :
|
|
166
|
+
(str) => str.trim()
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
toLowerCase() {
|
|
170
|
+
const currentTransform = this.transform;
|
|
171
|
+
return new VldStringUltra({
|
|
172
|
+
minLength: this.minLength,
|
|
173
|
+
maxLength: this.maxLength,
|
|
174
|
+
exactLength: this.exactLength,
|
|
175
|
+
pattern: this.pattern,
|
|
176
|
+
isEmail: this.isEmail,
|
|
177
|
+
isUrl: this.isUrl,
|
|
178
|
+
transform: currentTransform ?
|
|
179
|
+
(str) => currentTransform(str).toLowerCase() :
|
|
180
|
+
(str) => str.toLowerCase()
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
toUpperCase() {
|
|
184
|
+
const currentTransform = this.transform;
|
|
185
|
+
return new VldStringUltra({
|
|
186
|
+
minLength: this.minLength,
|
|
187
|
+
maxLength: this.maxLength,
|
|
188
|
+
exactLength: this.exactLength,
|
|
189
|
+
pattern: this.pattern,
|
|
190
|
+
isEmail: this.isEmail,
|
|
191
|
+
isUrl: this.isUrl,
|
|
192
|
+
transform: currentTransform ?
|
|
193
|
+
(str) => currentTransform(str).toUpperCase() :
|
|
194
|
+
(str) => str.toUpperCase()
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
nonempty() {
|
|
198
|
+
return this.min(1);
|
|
199
|
+
}
|
|
200
|
+
startsWith(prefix) {
|
|
201
|
+
this.customValidations.push((str) => str.startsWith(prefix));
|
|
202
|
+
return this;
|
|
203
|
+
}
|
|
204
|
+
endsWith(suffix) {
|
|
205
|
+
this.customValidations.push((str) => str.endsWith(suffix));
|
|
206
|
+
return this;
|
|
207
|
+
}
|
|
208
|
+
includes(substring) {
|
|
209
|
+
this.customValidations.push((str) => str.includes(substring));
|
|
210
|
+
return this;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
// Pre-compiled ultra-fast email regex (simplified but fast)
|
|
214
|
+
VldStringUltra.EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
215
|
+
// Pre-compiled URL regex
|
|
216
|
+
VldStringUltra.URL_REGEX = /^https?:\/\/[^\s]+$/;
|
|
217
|
+
//# sourceMappingURL=string-ultra.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string-ultra.js","sourceRoot":"","sources":["../../src/validators/string-ultra.ts"],"names":[],"mappings":"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","sourcesContent":["import { VldBase, ParseResult } from './base';\nimport { getMessages } from '../locales';\n\n/**\n * Ultra-optimized string validator with pre-compiled validations\n */\nexport class VldStringUltra extends VldBase<unknown, string> {\n private readonly minLength?: number;\n private readonly maxLength?: number;\n private readonly exactLength?: number;\n private readonly pattern?: RegExp;\n private readonly isEmail?: boolean;\n private readonly isUrl?: boolean;\n private readonly transform?: (value: string) => string;\n private readonly customValidations: Array<(value: string) => boolean> = [];\n \n // Pre-compiled ultra-fast email regex (simplified but fast)\n private static readonly EMAIL_REGEX = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n \n // Pre-compiled URL regex\n private static readonly URL_REGEX = /^https?:\\/\\/[^\\s]+$/;\n \n private constructor(config: {\n minLength?: number;\n maxLength?: number;\n exactLength?: number;\n pattern?: RegExp;\n isEmail?: boolean;\n isUrl?: boolean;\n transform?: (value: string) => string;\n } = {}) {\n super();\n this.minLength = config.minLength;\n this.maxLength = config.maxLength;\n this.exactLength = config.exactLength;\n this.pattern = config.pattern;\n this.isEmail = config.isEmail;\n this.isUrl = config.isUrl;\n this.transform = config.transform;\n }\n \n static create(): VldStringUltra {\n return new VldStringUltra();\n }\n \n /**\n * Ultra-fast string validation with minimal overhead\n */\n parse(value: unknown): string {\n // Ultra-fast type check\n if (typeof value !== 'string') {\n throw new Error(getMessages().invalidString);\n }\n \n let str = value;\n \n // Apply transform first if present\n if (this.transform) {\n str = this.transform(str);\n }\n \n const len = str.length;\n \n // Fast length checks with bitwise operations for small numbers\n if (this.exactLength !== undefined && len !== this.exactLength) {\n throw new Error(getMessages().stringLength(this.exactLength));\n }\n \n if (this.minLength !== undefined && len < this.minLength) {\n throw new Error(getMessages().stringMinLength(this.minLength));\n }\n \n if (this.maxLength !== undefined && len > this.maxLength) {\n throw new Error(getMessages().stringMaxLength(this.maxLength));\n }\n \n // Ultra-fast email validation (simplified for speed)\n if (this.isEmail && !VldStringUltra.EMAIL_REGEX.test(str)) {\n throw new Error(getMessages().invalidEmail);\n }\n \n // Ultra-fast URL validation\n if (this.isUrl && !VldStringUltra.URL_REGEX.test(str)) {\n throw new Error(getMessages().invalidUrl);\n }\n \n // Pattern matching\n if (this.pattern && !this.pattern.test(str)) {\n throw new Error(getMessages().stringPattern);\n }\n \n // Custom validations (loop unrolling for small arrays)\n const validationsLength = this.customValidations.length;\n if (validationsLength > 0) {\n for (let i = 0; i < validationsLength; i++) {\n if (!this.customValidations[i](str)) {\n throw new Error(getMessages().customValidation);\n }\n }\n }\n \n return str;\n }\n \n safeParse(value: unknown): ParseResult<string> {\n try {\n return { success: true, data: this.parse(value) };\n } catch (error) {\n return { success: false, error: error as Error };\n }\n }\n \n // Chainable methods with ultra-fast creation\n min(length: number): VldStringUltra {\n return new VldStringUltra({\n minLength: length,\n maxLength: this.maxLength,\n exactLength: this.exactLength,\n pattern: this.pattern,\n isEmail: this.isEmail,\n isUrl: this.isUrl,\n transform: this.transform\n });\n }\n \n max(length: number): VldStringUltra {\n return new VldStringUltra({\n minLength: this.minLength,\n maxLength: length,\n exactLength: this.exactLength,\n pattern: this.pattern,\n isEmail: this.isEmail,\n isUrl: this.isUrl,\n transform: this.transform\n });\n }\n \n length(length: number): VldStringUltra {\n return new VldStringUltra({\n minLength: this.minLength,\n maxLength: this.maxLength,\n exactLength: length,\n pattern: this.pattern,\n isEmail: this.isEmail,\n isUrl: this.isUrl,\n transform: this.transform\n });\n }\n \n /**\n * Ultra-fast email validation using simplified regex\n */\n email(): VldStringUltra {\n return new VldStringUltra({\n minLength: this.minLength,\n maxLength: this.maxLength,\n exactLength: this.exactLength,\n pattern: this.pattern,\n isEmail: true,\n isUrl: this.isUrl,\n transform: this.transform\n });\n }\n \n /**\n * Ultra-fast URL validation\n */\n url(): VldStringUltra {\n return new VldStringUltra({\n minLength: this.minLength,\n maxLength: this.maxLength,\n exactLength: this.exactLength,\n pattern: this.pattern,\n isEmail: this.isEmail,\n isUrl: true,\n transform: this.transform\n });\n }\n \n /**\n * Pattern matching with custom regex\n */\n regex(pattern: RegExp): VldStringUltra {\n return new VldStringUltra({\n minLength: this.minLength,\n maxLength: this.maxLength,\n exactLength: this.exactLength,\n pattern: pattern,\n isEmail: this.isEmail,\n isUrl: this.isUrl,\n transform: this.transform\n });\n }\n \n /**\n * Transform string after validation\n */\n trim(): VldStringUltra {\n const currentTransform = this.transform;\n return new VldStringUltra({\n minLength: this.minLength,\n maxLength: this.maxLength,\n exactLength: this.exactLength,\n pattern: this.pattern,\n isEmail: this.isEmail,\n isUrl: this.isUrl,\n transform: currentTransform ? \n (str: string) => currentTransform(str).trim() : \n (str: string) => str.trim()\n });\n }\n \n toLowerCase(): VldStringUltra {\n const currentTransform = this.transform;\n return new VldStringUltra({\n minLength: this.minLength,\n maxLength: this.maxLength,\n exactLength: this.exactLength,\n pattern: this.pattern,\n isEmail: this.isEmail,\n isUrl: this.isUrl,\n transform: currentTransform ? \n (str: string) => currentTransform(str).toLowerCase() : \n (str: string) => str.toLowerCase()\n });\n }\n \n toUpperCase(): VldStringUltra {\n const currentTransform = this.transform;\n return new VldStringUltra({\n minLength: this.minLength,\n maxLength: this.maxLength,\n exactLength: this.exactLength,\n pattern: this.pattern,\n isEmail: this.isEmail,\n isUrl: this.isUrl,\n transform: currentTransform ? \n (str: string) => currentTransform(str).toUpperCase() : \n (str: string) => str.toUpperCase()\n });\n }\n \n nonempty(): VldStringUltra {\n return this.min(1);\n }\n \n startsWith(prefix: string): VldStringUltra {\n this.customValidations.push((str: string) => str.startsWith(prefix));\n return this;\n }\n \n endsWith(suffix: string): VldStringUltra {\n this.customValidations.push((str: string) => str.endsWith(suffix));\n return this;\n }\n \n includes(substring: string): VldStringUltra {\n this.customValidations.push((str: string) => str.includes(substring));\n return this;\n }\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-literal.d.ts","sourceRoot":"","sources":["../../src/validators/template-literal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAG9C;;GAEG;AACH,KAAK,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC;AAE9C;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC;IAE5D,OAAO,CAAC,QAAQ,CAAC,OAAO;IAD1B,OAAO;IAMP;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,GAAG,UAAU,EAAE,WAAW,EAAE,GAAG,kBAAkB;IAmB/D;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IAY7B;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC;CAU/C;
|
|
1
|
+
{"version":3,"file":"template-literal.d.ts","sourceRoot":"","sources":["../../src/validators/template-literal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAG9C;;GAEG;AACH,KAAK,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC;AAE9C;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC;IAE5D,OAAO,CAAC,QAAQ,CAAC,OAAO;IAD1B,OAAO;IAMP;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,GAAG,UAAU,EAAE,WAAW,EAAE,GAAG,kBAAkB;IAmB/D;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IAY7B;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC;CAU/C;AA2CD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,UAAU,EAAE,WAAW,EAAE,GAAG,kBAAkB,CAEhF"}
|
|
@@ -61,31 +61,32 @@ export class VldTemplateLiteral extends VldBase {
|
|
|
61
61
|
function getPatternForValidator(validator) {
|
|
62
62
|
// For template literals, we need to identify the validator type
|
|
63
63
|
// and return an appropriate capture group pattern
|
|
64
|
-
const
|
|
64
|
+
const className = validator.constructor.name;
|
|
65
65
|
// Check for specific validator types
|
|
66
|
-
if (
|
|
66
|
+
if (className === 'VldString') {
|
|
67
67
|
return '(.+)';
|
|
68
68
|
}
|
|
69
|
-
if (
|
|
69
|
+
if (className === 'VldNumber' || className === 'VldInt') {
|
|
70
70
|
return '(-?\\d+(?:\\.\\d+)?)';
|
|
71
71
|
}
|
|
72
|
-
if (
|
|
72
|
+
if (className === 'VldBigInt') {
|
|
73
73
|
return '(-?\\d+)';
|
|
74
74
|
}
|
|
75
|
-
if (
|
|
75
|
+
if (className === 'VldBoolean') {
|
|
76
76
|
return '(true|false)';
|
|
77
77
|
}
|
|
78
|
-
if (
|
|
78
|
+
if (className === 'VldNull') {
|
|
79
79
|
return '(null)';
|
|
80
80
|
}
|
|
81
|
-
if (
|
|
81
|
+
if (className === 'VldUndefined' || className === 'VldVoid') {
|
|
82
82
|
return '(undefined)';
|
|
83
83
|
}
|
|
84
|
-
if (
|
|
85
|
-
// Extract literal value
|
|
86
|
-
const
|
|
87
|
-
if (
|
|
88
|
-
|
|
84
|
+
if (className === 'VldLiteral') {
|
|
85
|
+
// Extract literal value - access private literal property via any
|
|
86
|
+
const literalValidator = validator;
|
|
87
|
+
if (literalValidator.literal !== undefined) {
|
|
88
|
+
const valueStr = String(literalValidator.literal);
|
|
89
|
+
return '(' + valueStr.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + ')';
|
|
89
90
|
}
|
|
90
91
|
}
|
|
91
92
|
// Default: match any string
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-literal.js","sourceRoot":"","sources":["../../src/validators/template-literal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAOzC;;;GAGG;AACH,MAAM,OAAO,kBAAmB,SAAQ,OAAwB;IAC9D,YACmB,OAAe;QAEhC,KAAK,EAAE,CAAC;QAFS,YAAO,GAAP,OAAO,CAAQ;IAGlC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,GAAG,UAAyB;QACxC,sCAAsC;QACtC,IAAI,OAAO,GAAG,GAAG,CAAC;QAElB,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7B,kCAAkC;gBAClC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;YACzD,CAAC;iBAAM,CAAC;gBACN,kDAAkD;gBAClD,OAAO,IAAI,sBAAsB,CAAC,IAAI,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QAED,OAAO,IAAI,GAAG,CAAC;QAEf,OAAO,IAAI,kBAAkB,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAc;QAClB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,oBAAoB,CAAC,CAAC;QACtD,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,KAAc;QACtB,IAAI,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAc;aACtB,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAED;;GAEG;AACH,SAAS,sBAAsB,CAAC,SAA4B;IAC1D,gEAAgE;IAChE,kDAAkD;IAElD,MAAM,
|
|
1
|
+
{"version":3,"file":"template-literal.js","sourceRoot":"","sources":["../../src/validators/template-literal.ts"],"names":[],"mappings":"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","sourcesContent":["import { VldBase, ParseResult } from './base';\r\nimport { getMessages } from '../locales';\r\n\r\n/**\r\n * Template literal component types\r\n */\r\ntype TLComponent = VldBase<any, any> | string;\r\n\r\n/**\r\n * Immutable template literal validator\r\n * Validates strings matching a template pattern\r\n */\r\nexport class VldTemplateLiteral extends VldBase<unknown, string> {\r\n private constructor(\r\n private readonly pattern: RegExp\r\n ) {\r\n super();\r\n }\r\n\r\n /**\r\n * Create a template literal validator from components\r\n */\r\n static create(...components: TLComponent[]): VldTemplateLiteral {\r\n // Build regex pattern from components\r\n let pattern = '^';\r\n\r\n for (const comp of components) {\r\n if (typeof comp === 'string') {\r\n // Escape special regex characters\r\n pattern += comp.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n } else {\r\n // Add appropriate pattern based on validator type\r\n pattern += getPatternForValidator(comp);\r\n }\r\n }\r\n\r\n pattern += '$';\r\n\r\n return new VldTemplateLiteral(new RegExp(pattern));\r\n }\r\n\r\n /**\r\n * Parse and validate a template literal string\r\n */\r\n parse(value: unknown): string {\r\n if (typeof value !== 'string') {\r\n throw new Error(getMessages().invalidString);\r\n }\r\n\r\n if (!this.pattern.test(value)) {\r\n throw new Error(getMessages().stringPatternInvalid);\r\n }\r\n\r\n return value;\r\n }\r\n\r\n /**\r\n * Safely parse and validate a template literal string\r\n */\r\n safeParse(value: unknown): ParseResult<string> {\r\n try {\r\n return { success: true, data: this.parse(value) };\r\n } catch (error) {\r\n return {\r\n success: false,\r\n error: error as Error\r\n };\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Get regex pattern for a validator type\r\n */\r\nfunction getPatternForValidator(validator: VldBase<any, any>): string {\r\n // For template literals, we need to identify the validator type\r\n // and return an appropriate capture group pattern\r\n\r\n const className = validator.constructor.name;\r\n\r\n // Check for specific validator types\r\n if (className === 'VldString') {\r\n return '(.+)';\r\n }\r\n if (className === 'VldNumber' || className === 'VldInt') {\r\n return '(-?\\\\d+(?:\\\\.\\\\d+)?)';\r\n }\r\n if (className === 'VldBigInt') {\r\n return '(-?\\\\d+)';\r\n }\r\n if (className === 'VldBoolean') {\r\n return '(true|false)';\r\n }\r\n if (className === 'VldNull') {\r\n return '(null)';\r\n }\r\n if (className === 'VldUndefined' || className === 'VldVoid') {\r\n return '(undefined)';\r\n }\r\n if (className === 'VldLiteral') {\r\n // Extract literal value - access private literal property via any\r\n const literalValidator = validator as any;\r\n if (literalValidator.literal !== undefined) {\r\n const valueStr = String(literalValidator.literal);\r\n return '(' + valueStr.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&') + ')';\r\n }\r\n }\r\n\r\n // Default: match any string\r\n return '(.+)';\r\n}\r\n\r\n/**\r\n * Helper function to create template literal validators\r\n * Usage: v.templateLiteral(v.string(), '-', v.number())\r\n */\r\nexport function templateLiteral(...components: TLComponent[]): VldTemplateLiteral {\r\n return VldTemplateLiteral.create(...components);\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"undefined.js","sourceRoot":"","sources":["../../src/validators/undefined.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAGjC;;GAEG;AACH,MAAM,OAAO,YAAa,SAAQ,OAA2B;IAC3D;QACE,KAAK,EAAE,CAAC;IACV,CAAC;IAED,MAAM,CAAC,MAAM;QACX,OAAO,IAAI,YAAY,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,KAAc;QAClB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,gCAAgC,OAAO,KAAK,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,SAAS,CAAC,KAAc;QACtB,IAAI,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAc,EAAE,CAAC;QACnD,CAAC;IACH,CAAC;CACF","sourcesContent":["/**\n * VldUndefined - Validates that a value is exactly undefined\n * Part of Zod 4 API parity implementation\n */\n\nimport { VldBase } from './base';\nimport type { ParseResult } from './base';\n\n/**\n * Undefined validator - validates that a value is exactly undefined\n */\nexport class VldUndefined extends VldBase<unknown, undefined> {\n private constructor() {\n super();\n }\n\n static create(): VldUndefined {\n return new VldUndefined();\n }\n\n parse(value: unknown): undefined {\n if (value !== undefined) {\n throw new Error(`Expected undefined, received ${typeof value}`);\n }\n return undefined;\n }\n\n safeParse(value: unknown): ParseResult<undefined> {\n try {\n return { success: true, data: this.parse(value) };\n } catch (error) {\n return { success: false, error: error as Error };\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"undefined.js","sourceRoot":"","sources":["../../src/validators/undefined.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAGjC;;GAEG;AACH,MAAM,OAAO,YAAa,SAAQ,OAA2B;IAC3D;QACE,KAAK,EAAE,CAAC;IACV,CAAC;IAED,MAAM,CAAC,MAAM;QACX,OAAO,IAAI,YAAY,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,KAAc;QAClB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,gCAAgC,OAAO,KAAK,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,SAAS,CAAC,KAAc;QACtB,IAAI,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAc,EAAE,CAAC;QACnD,CAAC;IACH,CAAC;CACF","sourcesContent":["/**\r\n * VldUndefined - Validates that a value is exactly undefined\r\n * Part of Zod 4 API parity implementation\r\n */\r\n\r\nimport { VldBase } from './base';\r\nimport type { ParseResult } from './base';\r\n\r\n/**\r\n * Undefined validator - validates that a value is exactly undefined\r\n */\r\nexport class VldUndefined extends VldBase<unknown, undefined> {\r\n private constructor() {\r\n super();\r\n }\r\n\r\n static create(): VldUndefined {\r\n return new VldUndefined();\r\n }\r\n\r\n parse(value: unknown): undefined {\r\n if (value !== undefined) {\r\n throw new Error(`Expected undefined, received ${typeof value}`);\r\n }\r\n return undefined;\r\n }\r\n\r\n safeParse(value: unknown): ParseResult<undefined> {\r\n try {\r\n return { success: true, data: this.parse(value) };\r\n } catch (error) {\r\n return { success: false, error: error as Error };\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { VldBase, ParseResult } from './base';
|
|
2
|
+
/**
|
|
3
|
+
* Optimized union validator with better performance
|
|
4
|
+
*/
|
|
5
|
+
export declare class VldUnionOptimized<T extends readonly VldBase<any, any>[]> extends VldBase<unknown, T[number] extends VldBase<any, infer U> ? U : never> {
|
|
6
|
+
private readonly validators;
|
|
7
|
+
private readonly errorMessage?;
|
|
8
|
+
private readonly typeCheckers;
|
|
9
|
+
private constructor();
|
|
10
|
+
private createTypeChecker;
|
|
11
|
+
static create<T extends readonly VldBase<any, any>[]>(...validators: T): VldUnionOptimized<T>;
|
|
12
|
+
parse(value: unknown): T[number] extends VldBase<any, infer U> ? U : never;
|
|
13
|
+
safeParse(value: unknown): ParseResult<T[number] extends VldBase<any, infer U> ? U : never>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=union-optimized.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"union-optimized.d.ts","sourceRoot":"","sources":["../../src/validators/union-optimized.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAG9C;;GAEG;AACH,qBAAa,iBAAiB,CAAC,CAAC,SAAS,SAAS,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAE,SAAQ,OAAO,CACpF,OAAO,EACP,CAAC,CAAC,MAAM,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CACpD;IACC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAI;IAC/B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAS;IAGvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsD;IAEnF,OAAO;IAYP,OAAO,CAAC,iBAAiB;IAsBzB,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,SAAS,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,UAAU,EAAE,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC;IAI7F,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;IAgC1E,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;CAgC5F"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { VldBase } from './base.js';
|
|
2
|
+
import { getMessages } from '../locales.js';
|
|
3
|
+
/**
|
|
4
|
+
* Optimized union validator with better performance
|
|
5
|
+
*/
|
|
6
|
+
export class VldUnionOptimized extends VldBase {
|
|
7
|
+
constructor(validators, errorMessage) {
|
|
8
|
+
super();
|
|
9
|
+
this.validators = validators;
|
|
10
|
+
this.errorMessage = errorMessage;
|
|
11
|
+
this.typeCheckers = new Map();
|
|
12
|
+
// Pre-compile type checkers for common types
|
|
13
|
+
for (const validator of validators) {
|
|
14
|
+
this.typeCheckers.set(validator, this.createTypeChecker(validator));
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
createTypeChecker(validator) {
|
|
18
|
+
// Quick type checks based on validator type
|
|
19
|
+
const className = validator.constructor.name;
|
|
20
|
+
switch (className) {
|
|
21
|
+
case 'VldString':
|
|
22
|
+
return (v) => typeof v === 'string';
|
|
23
|
+
case 'VldNumber':
|
|
24
|
+
return (v) => typeof v === 'number' && !isNaN(v);
|
|
25
|
+
case 'VldBoolean':
|
|
26
|
+
return (v) => typeof v === 'boolean';
|
|
27
|
+
case 'VldDate':
|
|
28
|
+
return (v) => v instanceof Date || (typeof v === 'string' && !isNaN(Date.parse(v)));
|
|
29
|
+
case 'VldArray':
|
|
30
|
+
return (v) => Array.isArray(v);
|
|
31
|
+
case 'VldObject':
|
|
32
|
+
return (v) => typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
33
|
+
default:
|
|
34
|
+
return () => true; // No quick check available
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
static create(...validators) {
|
|
38
|
+
return new VldUnionOptimized(validators);
|
|
39
|
+
}
|
|
40
|
+
parse(value) {
|
|
41
|
+
// Fast path: try validators that are likely to match based on type
|
|
42
|
+
for (const validator of this.validators) {
|
|
43
|
+
const typeChecker = this.typeCheckers.get(validator);
|
|
44
|
+
// Skip validators that definitely won't match
|
|
45
|
+
if (typeChecker && !typeChecker(value)) {
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
// Use safeParse to avoid try-catch overhead
|
|
49
|
+
const result = validator.safeParse(value);
|
|
50
|
+
if (result.success) {
|
|
51
|
+
return result.data;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Slow path: collect all errors
|
|
55
|
+
const errors = [];
|
|
56
|
+
for (const validator of this.validators) {
|
|
57
|
+
const result = validator.safeParse(value);
|
|
58
|
+
if (!result.success) {
|
|
59
|
+
errors.push(result.error.message);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
throw new Error(this.errorMessage ||
|
|
63
|
+
getMessages().unionNoMatch(errors));
|
|
64
|
+
}
|
|
65
|
+
safeParse(value) {
|
|
66
|
+
// Fast path with type checking
|
|
67
|
+
for (const validator of this.validators) {
|
|
68
|
+
const typeChecker = this.typeCheckers.get(validator);
|
|
69
|
+
if (typeChecker && !typeChecker(value)) {
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
const result = validator.safeParse(value);
|
|
73
|
+
if (result.success) {
|
|
74
|
+
return result;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// All failed
|
|
78
|
+
const errors = [];
|
|
79
|
+
for (const validator of this.validators) {
|
|
80
|
+
const result = validator.safeParse(value);
|
|
81
|
+
if (!result.success) {
|
|
82
|
+
errors.push(result.error.message);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
success: false,
|
|
87
|
+
error: new Error(this.errorMessage ||
|
|
88
|
+
getMessages().unionNoMatch(errors))
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=union-optimized.js.map
|