@oxog/vld 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/CHANGELOG.md +97 -103
  2. package/README.md +78 -13
  3. package/dist/coercion/bigint.d.ts +27 -0
  4. package/dist/coercion/bigint.d.ts.map +1 -0
  5. package/dist/coercion/bigint.js +108 -0
  6. package/dist/coercion/bigint.js.map +1 -0
  7. package/dist/coercion/boolean.d.ts +20 -0
  8. package/dist/coercion/boolean.d.ts.map +1 -0
  9. package/dist/coercion/boolean.js +63 -0
  10. package/dist/coercion/boolean.js.map +1 -0
  11. package/dist/coercion/date.d.ts +20 -0
  12. package/dist/coercion/date.d.ts.map +1 -0
  13. package/dist/coercion/date.js +52 -0
  14. package/dist/coercion/date.js.map +1 -0
  15. package/dist/coercion/number.d.ts +35 -0
  16. package/dist/coercion/number.d.ts.map +1 -0
  17. package/dist/coercion/number.js +144 -0
  18. package/dist/coercion/number.js.map +1 -0
  19. package/dist/coercion/string.d.ts +38 -0
  20. package/dist/coercion/string.d.ts.map +1 -0
  21. package/dist/coercion/string.js +168 -0
  22. package/dist/coercion/string.js.map +1 -0
  23. package/dist/index-new.d.ts.map +1 -0
  24. package/dist/index.d.ts +64 -257
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +86 -1164
  27. package/dist/index.js.map +1 -1
  28. package/dist/utils/deep-merge.d.ts +18 -0
  29. package/dist/utils/deep-merge.d.ts.map +1 -0
  30. package/dist/utils/deep-merge.js +68 -0
  31. package/dist/utils/deep-merge.js.map +1 -0
  32. package/dist/validators/any.d.ts +19 -0
  33. package/dist/validators/any.d.ts.map +1 -0
  34. package/dist/validators/any.js +25 -0
  35. package/dist/validators/any.js.map +1 -0
  36. package/dist/validators/array.d.ts +48 -0
  37. package/dist/validators/array.d.ts.map +1 -0
  38. package/dist/validators/array.js +135 -0
  39. package/dist/validators/array.js.map +1 -0
  40. package/dist/validators/base.d.ts +155 -0
  41. package/dist/validators/base.d.ts.map +1 -0
  42. package/dist/validators/base.js +245 -0
  43. package/dist/validators/base.js.map +1 -0
  44. package/dist/validators/bigint.d.ts +60 -0
  45. package/dist/validators/bigint.d.ts.map +1 -0
  46. package/dist/validators/bigint.js +104 -0
  47. package/dist/validators/bigint.js.map +1 -0
  48. package/dist/validators/boolean.d.ts +32 -0
  49. package/dist/validators/boolean.d.ts.map +1 -0
  50. package/dist/validators/boolean.js +86 -0
  51. package/dist/validators/boolean.js.map +1 -0
  52. package/dist/validators/date.d.ts +68 -0
  53. package/dist/validators/date.d.ts.map +1 -0
  54. package/dist/validators/date.js +148 -0
  55. package/dist/validators/date.js.map +1 -0
  56. package/dist/validators/enum.d.ts +25 -0
  57. package/dist/validators/enum.d.ts.map +1 -0
  58. package/dist/validators/enum.js +45 -0
  59. package/dist/validators/enum.js.map +1 -0
  60. package/dist/validators/index.d.ts +27 -0
  61. package/dist/validators/index.d.ts.map +1 -0
  62. package/dist/validators/index.js +30 -0
  63. package/dist/validators/index.js.map +1 -0
  64. package/dist/validators/intersection.d.ts +25 -0
  65. package/dist/validators/intersection.d.ts.map +1 -0
  66. package/dist/validators/intersection.js +57 -0
  67. package/dist/validators/intersection.js.map +1 -0
  68. package/dist/validators/literal.d.ts +25 -0
  69. package/dist/validators/literal.d.ts.map +1 -0
  70. package/dist/validators/literal.js +45 -0
  71. package/dist/validators/literal.js.map +1 -0
  72. package/dist/validators/map.d.ts +26 -0
  73. package/dist/validators/map.d.ts.map +1 -0
  74. package/dist/validators/map.js +54 -0
  75. package/dist/validators/map.js.map +1 -0
  76. package/dist/validators/never.d.ts +19 -0
  77. package/dist/validators/never.d.ts.map +1 -0
  78. package/dist/validators/never.js +29 -0
  79. package/dist/validators/never.js.map +1 -0
  80. package/dist/validators/number.d.ts +92 -0
  81. package/dist/validators/number.d.ts.map +1 -0
  82. package/dist/validators/number.js +173 -0
  83. package/dist/validators/number.js.map +1 -0
  84. package/dist/validators/object-optimized.d.ts +23 -0
  85. package/dist/validators/object-optimized.d.ts.map +1 -0
  86. package/dist/validators/object-optimized.js +179 -0
  87. package/dist/validators/object-optimized.js.map +1 -0
  88. package/dist/validators/object-ultra.d.ts +34 -0
  89. package/dist/validators/object-ultra.d.ts.map +1 -0
  90. package/dist/validators/object-ultra.js +175 -0
  91. package/dist/validators/object-ultra.js.map +1 -0
  92. package/dist/validators/object.d.ts +73 -0
  93. package/dist/validators/object.d.ts.map +1 -0
  94. package/dist/validators/object.js +285 -0
  95. package/dist/validators/object.js.map +1 -0
  96. package/dist/validators/record.d.ts +25 -0
  97. package/dist/validators/record.d.ts.map +1 -0
  98. package/dist/validators/record.js +52 -0
  99. package/dist/validators/record.js.map +1 -0
  100. package/dist/validators/set.d.ts +25 -0
  101. package/dist/validators/set.d.ts.map +1 -0
  102. package/dist/validators/set.js +51 -0
  103. package/dist/validators/set.js.map +1 -0
  104. package/dist/validators/string-ultra.d.ts +49 -0
  105. package/dist/validators/string-ultra.d.ts.map +1 -0
  106. package/dist/validators/string-ultra.js +217 -0
  107. package/dist/validators/string-ultra.js.map +1 -0
  108. package/dist/validators/string.d.ts +109 -0
  109. package/dist/validators/string.d.ts.map +1 -0
  110. package/dist/validators/string.js +242 -0
  111. package/dist/validators/string.js.map +1 -0
  112. package/dist/validators/symbol.d.ts +24 -0
  113. package/dist/validators/symbol.d.ts.map +1 -0
  114. package/dist/validators/symbol.js +42 -0
  115. package/dist/validators/symbol.js.map +1 -0
  116. package/dist/validators/tuple.d.ts +31 -0
  117. package/dist/validators/tuple.d.ts.map +1 -0
  118. package/dist/validators/tuple.js +55 -0
  119. package/dist/validators/tuple.js.map +1 -0
  120. package/dist/validators/union-optimized.d.ts +15 -0
  121. package/dist/validators/union-optimized.d.ts.map +1 -0
  122. package/dist/validators/union-optimized.js +92 -0
  123. package/dist/validators/union-optimized.js.map +1 -0
  124. package/dist/validators/union.d.ts +33 -0
  125. package/dist/validators/union.d.ts.map +1 -0
  126. package/dist/validators/union.js +121 -0
  127. package/dist/validators/union.js.map +1 -0
  128. package/dist/validators/unknown.d.ts +19 -0
  129. package/dist/validators/unknown.d.ts.map +1 -0
  130. package/dist/validators/unknown.js +25 -0
  131. package/dist/validators/unknown.js.map +1 -0
  132. package/dist/validators/void.d.ts +19 -0
  133. package/dist/validators/void.d.ts.map +1 -0
  134. package/dist/validators/void.js +35 -0
  135. package/dist/validators/void.js.map +1 -0
  136. package/package.json +12 -6
@@ -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}"]}
@@ -0,0 +1,109 @@
1
+ import { VldBase, ParseResult } from './base';
2
+ /**
3
+ * Type for string validation check functions
4
+ */
5
+ type StringCheck = (value: string) => boolean;
6
+ /**
7
+ * Type for string transformation functions
8
+ */
9
+ type StringTransform = (value: string) => string;
10
+ /**
11
+ * Configuration for string validator
12
+ */
13
+ interface StringValidatorConfig {
14
+ readonly checks: ReadonlyArray<StringCheck>;
15
+ readonly transforms: ReadonlyArray<StringTransform>;
16
+ readonly errorMessage?: string;
17
+ }
18
+ /**
19
+ * Immutable string validator with chainable methods
20
+ */
21
+ export declare class VldString extends VldBase<string, string> {
22
+ protected readonly config: StringValidatorConfig;
23
+ /**
24
+ * Protected constructor to allow extension while maintaining immutability
25
+ */
26
+ protected constructor(config?: Partial<StringValidatorConfig>);
27
+ /**
28
+ * Create a new string validator
29
+ */
30
+ static create(): VldString;
31
+ /**
32
+ * Parse and validate a string value - ultra-optimized
33
+ */
34
+ parse(value: unknown): string;
35
+ /**
36
+ * Safely parse and validate a string value
37
+ */
38
+ safeParse(value: unknown): ParseResult<string>;
39
+ /**
40
+ * Create a new validator with minimum length constraint
41
+ */
42
+ min(length: number, message?: string): VldString;
43
+ /**
44
+ * Create a new validator with maximum length constraint
45
+ */
46
+ max(length: number, message?: string): VldString;
47
+ /**
48
+ * Create a new validator with exact length constraint
49
+ */
50
+ length(length: number, message?: string): VldString;
51
+ /**
52
+ * Create a new validator that checks for valid email format
53
+ */
54
+ email(message?: string): VldString;
55
+ /**
56
+ * Create a new validator that checks for valid URL format
57
+ */
58
+ url(message?: string): VldString;
59
+ /**
60
+ * Create a new validator that checks for valid UUID format
61
+ */
62
+ uuid(message?: string): VldString;
63
+ /**
64
+ * Create a new validator with regex pattern matching
65
+ */
66
+ regex(pattern: RegExp, message?: string): VldString;
67
+ /**
68
+ * Create a new validator that trims whitespace
69
+ */
70
+ trim(): VldString;
71
+ /**
72
+ * Create a new validator that converts to lowercase
73
+ */
74
+ toLowerCase(): VldString;
75
+ /**
76
+ * Create a new validator that converts to uppercase
77
+ */
78
+ toUpperCase(): VldString;
79
+ /**
80
+ * Create a new validator that checks if string starts with a substring
81
+ */
82
+ startsWith(str: string, message?: string): VldString;
83
+ /**
84
+ * Create a new validator that checks if string ends with a substring
85
+ */
86
+ endsWith(str: string, message?: string): VldString;
87
+ /**
88
+ * Create a new validator that checks if string includes a substring
89
+ */
90
+ includes(str: string, message?: string): VldString;
91
+ /**
92
+ * Create a new validator that checks for valid IP address (v4 or v6)
93
+ */
94
+ ip(message?: string): VldString;
95
+ /**
96
+ * Create a new validator that checks for valid IPv4 address
97
+ */
98
+ ipv4(message?: string): VldString;
99
+ /**
100
+ * Create a new validator that checks for valid IPv6 address
101
+ */
102
+ ipv6(message?: string): VldString;
103
+ /**
104
+ * Create a new validator that ensures string is not empty
105
+ */
106
+ nonempty(message?: string): VldString;
107
+ }
108
+ export {};
109
+ //# sourceMappingURL=string.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string.d.ts","sourceRoot":"","sources":["../../src/validators/string.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAmB9C;;GAEG;AACH,KAAK,WAAW,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;AAE9C;;GAEG;AACH,KAAK,eAAe,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;AAEjD;;GAEG;AACH,UAAU,qBAAqB;IAC7B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IAC5C,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IACpD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;GAEG;AACH,qBAAa,SAAU,SAAQ,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;IACpD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IAEjD;;OAEG;IACH,SAAS,aAAa,MAAM,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC;IAS7D;;OAEG;IACH,MAAM,CAAC,MAAM,IAAI,SAAS;IAI1B;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IAwB7B;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC;IAQ9C;;OAEG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAQhD;;OAEG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAQhD;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAQnD;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAQlC;;OAEG;IACH,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAQhC;;OAEG;IACH,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAQjC;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAQnD;;OAEG;IACH,IAAI,IAAI,SAAS;IAQjB;;OAEG;IACH,WAAW,IAAI,SAAS;IAQxB;;OAEG;IACH,WAAW,IAAI,SAAS;IAQxB;;OAEG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAQpD;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAQlD;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAQlD;;OAEG;IACH,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAQ/B;;OAEG;IACH,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAQjC;;OAEG;IACH,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAQjC;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;CAOtC"}
@@ -0,0 +1,242 @@
1
+ import { VldBase } from './base.js';
2
+ import { getMessages } from '../locales.js';
3
+ /**
4
+ * Ultra-fast email validation using simplified regex for maximum performance
5
+ */
6
+ const FAST_EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
7
+ /**
8
+ * Pre-compiled regex patterns for common validations
9
+ */
10
+ const REGEX_PATTERNS = {
11
+ email: FAST_EMAIL_REGEX, // Use simplified fast regex
12
+ uuid: /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,
13
+ url: /^https?:\/\/[^\s]+$/, // Simplified for speed
14
+ 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]?)$/,
15
+ ipv6: /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,
16
+ };
17
+ /**
18
+ * Immutable string validator with chainable methods
19
+ */
20
+ export class VldString extends VldBase {
21
+ /**
22
+ * Protected constructor to allow extension while maintaining immutability
23
+ */
24
+ constructor(config) {
25
+ super();
26
+ this.config = {
27
+ checks: config?.checks || [],
28
+ transforms: config?.transforms || [],
29
+ errorMessage: config?.errorMessage
30
+ };
31
+ }
32
+ /**
33
+ * Create a new string validator
34
+ */
35
+ static create() {
36
+ return new VldString();
37
+ }
38
+ /**
39
+ * Parse and validate a string value - ultra-optimized
40
+ */
41
+ parse(value) {
42
+ if (typeof value !== 'string') {
43
+ throw new Error(this.config.errorMessage || getMessages().invalidString);
44
+ }
45
+ let result = value;
46
+ // Apply transformations with optimized loop
47
+ const transformsLength = this.config.transforms.length;
48
+ for (let i = 0; i < transformsLength; i++) {
49
+ result = this.config.transforms[i](result);
50
+ }
51
+ // Apply checks with optimized loop and early termination
52
+ const checksLength = this.config.checks.length;
53
+ for (let i = 0; i < checksLength; i++) {
54
+ if (!this.config.checks[i](result)) {
55
+ throw new Error(this.config.errorMessage || getMessages().invalidString);
56
+ }
57
+ }
58
+ return result;
59
+ }
60
+ /**
61
+ * Safely parse and validate a string value
62
+ */
63
+ safeParse(value) {
64
+ try {
65
+ return { success: true, data: this.parse(value) };
66
+ }
67
+ catch (error) {
68
+ return { success: false, error: error };
69
+ }
70
+ }
71
+ /**
72
+ * Create a new validator with minimum length constraint
73
+ */
74
+ min(length, message) {
75
+ return new VldString({
76
+ checks: [...this.config.checks, (v) => v.length >= length],
77
+ transforms: this.config.transforms,
78
+ errorMessage: message || getMessages().stringMin(length)
79
+ });
80
+ }
81
+ /**
82
+ * Create a new validator with maximum length constraint
83
+ */
84
+ max(length, message) {
85
+ return new VldString({
86
+ checks: [...this.config.checks, (v) => v.length <= length],
87
+ transforms: this.config.transforms,
88
+ errorMessage: message || getMessages().stringMax(length)
89
+ });
90
+ }
91
+ /**
92
+ * Create a new validator with exact length constraint
93
+ */
94
+ length(length, message) {
95
+ return new VldString({
96
+ checks: [...this.config.checks, (v) => v.length === length],
97
+ transforms: this.config.transforms,
98
+ errorMessage: message || getMessages().stringLength(length)
99
+ });
100
+ }
101
+ /**
102
+ * Create a new validator that checks for valid email format
103
+ */
104
+ email(message) {
105
+ return new VldString({
106
+ checks: [...this.config.checks, (v) => REGEX_PATTERNS.email.test(v)],
107
+ transforms: this.config.transforms,
108
+ errorMessage: message || getMessages().stringEmail
109
+ });
110
+ }
111
+ /**
112
+ * Create a new validator that checks for valid URL format
113
+ */
114
+ url(message) {
115
+ return new VldString({
116
+ checks: [...this.config.checks, (v) => REGEX_PATTERNS.url.test(v)],
117
+ transforms: this.config.transforms,
118
+ errorMessage: message || getMessages().stringUrl
119
+ });
120
+ }
121
+ /**
122
+ * Create a new validator that checks for valid UUID format
123
+ */
124
+ uuid(message) {
125
+ return new VldString({
126
+ checks: [...this.config.checks, (v) => REGEX_PATTERNS.uuid.test(v)],
127
+ transforms: this.config.transforms,
128
+ errorMessage: message || getMessages().stringUuid
129
+ });
130
+ }
131
+ /**
132
+ * Create a new validator with regex pattern matching
133
+ */
134
+ regex(pattern, message) {
135
+ return new VldString({
136
+ checks: [...this.config.checks, (v) => pattern.test(v)],
137
+ transforms: this.config.transforms,
138
+ errorMessage: message || getMessages().stringRegex
139
+ });
140
+ }
141
+ /**
142
+ * Create a new validator that trims whitespace
143
+ */
144
+ trim() {
145
+ return new VldString({
146
+ checks: this.config.checks,
147
+ transforms: [...this.config.transforms, (v) => v.trim()],
148
+ errorMessage: this.config.errorMessage
149
+ });
150
+ }
151
+ /**
152
+ * Create a new validator that converts to lowercase
153
+ */
154
+ toLowerCase() {
155
+ return new VldString({
156
+ checks: this.config.checks,
157
+ transforms: [...this.config.transforms, (v) => v.toLowerCase()],
158
+ errorMessage: this.config.errorMessage
159
+ });
160
+ }
161
+ /**
162
+ * Create a new validator that converts to uppercase
163
+ */
164
+ toUpperCase() {
165
+ return new VldString({
166
+ checks: this.config.checks,
167
+ transforms: [...this.config.transforms, (v) => v.toUpperCase()],
168
+ errorMessage: this.config.errorMessage
169
+ });
170
+ }
171
+ /**
172
+ * Create a new validator that checks if string starts with a substring
173
+ */
174
+ startsWith(str, message) {
175
+ return new VldString({
176
+ checks: [...this.config.checks, (v) => v.startsWith(str)],
177
+ transforms: this.config.transforms,
178
+ errorMessage: message || getMessages().stringStartsWith(str)
179
+ });
180
+ }
181
+ /**
182
+ * Create a new validator that checks if string ends with a substring
183
+ */
184
+ endsWith(str, message) {
185
+ return new VldString({
186
+ checks: [...this.config.checks, (v) => v.endsWith(str)],
187
+ transforms: this.config.transforms,
188
+ errorMessage: message || getMessages().stringEndsWith(str)
189
+ });
190
+ }
191
+ /**
192
+ * Create a new validator that checks if string includes a substring
193
+ */
194
+ includes(str, message) {
195
+ return new VldString({
196
+ checks: [...this.config.checks, (v) => v.includes(str)],
197
+ transforms: this.config.transforms,
198
+ errorMessage: message || getMessages().stringIncludes(str)
199
+ });
200
+ }
201
+ /**
202
+ * Create a new validator that checks for valid IP address (v4 or v6)
203
+ */
204
+ ip(message) {
205
+ return new VldString({
206
+ checks: [...this.config.checks, (v) => REGEX_PATTERNS.ipv4.test(v) || REGEX_PATTERNS.ipv6.test(v)],
207
+ transforms: this.config.transforms,
208
+ errorMessage: message || getMessages().stringIp
209
+ });
210
+ }
211
+ /**
212
+ * Create a new validator that checks for valid IPv4 address
213
+ */
214
+ ipv4(message) {
215
+ return new VldString({
216
+ checks: [...this.config.checks, (v) => REGEX_PATTERNS.ipv4.test(v)],
217
+ transforms: this.config.transforms,
218
+ errorMessage: message || getMessages().stringIpv4
219
+ });
220
+ }
221
+ /**
222
+ * Create a new validator that checks for valid IPv6 address
223
+ */
224
+ ipv6(message) {
225
+ return new VldString({
226
+ checks: [...this.config.checks, (v) => REGEX_PATTERNS.ipv6.test(v)],
227
+ transforms: this.config.transforms,
228
+ errorMessage: message || getMessages().stringIpv6
229
+ });
230
+ }
231
+ /**
232
+ * Create a new validator that ensures string is not empty
233
+ */
234
+ nonempty(message) {
235
+ return new VldString({
236
+ checks: [...this.config.checks, (v) => v.length > 0],
237
+ transforms: this.config.transforms,
238
+ errorMessage: message || getMessages().stringEmpty
239
+ });
240
+ }
241
+ }
242
+ //# sourceMappingURL=string.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string.js","sourceRoot":"","sources":["../../src/validators/string.ts"],"names":[],"mappings":"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","sourcesContent":["import { VldBase, ParseResult } from './base';\nimport { getMessages } from '../locales';\n\n/**\n * Ultra-fast email validation using simplified regex for maximum performance\n */\nconst FAST_EMAIL_REGEX = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\n/**\n * Pre-compiled regex patterns for common validations\n */\nconst REGEX_PATTERNS = {\n email: FAST_EMAIL_REGEX, // Use simplified fast regex\n uuid: /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,\n url: /^https?:\\/\\/[^\\s]+$/, // Simplified for speed\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}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,\n};\n\n/**\n * Type for string validation check functions\n */\ntype StringCheck = (value: string) => boolean;\n\n/**\n * Type for string transformation functions\n */\ntype StringTransform = (value: string) => string;\n\n/**\n * Configuration for string validator\n */\ninterface StringValidatorConfig {\n readonly checks: ReadonlyArray<StringCheck>;\n readonly transforms: ReadonlyArray<StringTransform>;\n readonly errorMessage?: string;\n}\n\n/**\n * Immutable string validator with chainable methods\n */\nexport class VldString extends VldBase<string, string> {\n protected readonly config: StringValidatorConfig;\n \n /**\n * Protected constructor to allow extension while maintaining immutability\n */\n protected constructor(config?: Partial<StringValidatorConfig>) {\n super();\n this.config = {\n checks: config?.checks || [],\n transforms: config?.transforms || [],\n errorMessage: config?.errorMessage\n };\n }\n \n /**\n * Create a new string validator\n */\n static create(): VldString {\n return new VldString();\n }\n \n /**\n * Parse and validate a string value - ultra-optimized\n */\n parse(value: unknown): string {\n if (typeof value !== 'string') {\n throw new Error(this.config.errorMessage || getMessages().invalidString);\n }\n \n let result = value;\n \n // Apply transformations with optimized loop\n const transformsLength = this.config.transforms.length;\n for (let i = 0; i < transformsLength; i++) {\n result = this.config.transforms[i](result);\n }\n \n // Apply checks with optimized loop and early termination\n const checksLength = this.config.checks.length;\n for (let i = 0; i < checksLength; i++) {\n if (!this.config.checks[i](result)) {\n throw new Error(this.config.errorMessage || getMessages().invalidString);\n }\n }\n \n return result;\n }\n \n /**\n * Safely parse and validate a string value\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 /**\n * Create a new validator with minimum length constraint\n */\n min(length: number, message?: string): VldString {\n return new VldString({\n checks: [...this.config.checks, (v: string) => v.length >= length],\n transforms: this.config.transforms,\n errorMessage: message || getMessages().stringMin(length)\n });\n }\n \n /**\n * Create a new validator with maximum length constraint\n */\n max(length: number, message?: string): VldString {\n return new VldString({\n checks: [...this.config.checks, (v: string) => v.length <= length],\n transforms: this.config.transforms,\n errorMessage: message || getMessages().stringMax(length)\n });\n }\n \n /**\n * Create a new validator with exact length constraint\n */\n length(length: number, message?: string): VldString {\n return new VldString({\n checks: [...this.config.checks, (v: string) => v.length === length],\n transforms: this.config.transforms,\n errorMessage: message || getMessages().stringLength(length)\n });\n }\n \n /**\n * Create a new validator that checks for valid email format\n */\n email(message?: string): VldString {\n return new VldString({\n checks: [...this.config.checks, (v: string) => REGEX_PATTERNS.email.test(v)],\n transforms: this.config.transforms,\n errorMessage: message || getMessages().stringEmail\n });\n }\n \n /**\n * Create a new validator that checks for valid URL format\n */\n url(message?: string): VldString {\n return new VldString({\n checks: [...this.config.checks, (v: string) => REGEX_PATTERNS.url.test(v)],\n transforms: this.config.transforms,\n errorMessage: message || getMessages().stringUrl\n });\n }\n \n /**\n * Create a new validator that checks for valid UUID format\n */\n uuid(message?: string): VldString {\n return new VldString({\n checks: [...this.config.checks, (v: string) => REGEX_PATTERNS.uuid.test(v)],\n transforms: this.config.transforms,\n errorMessage: message || getMessages().stringUuid\n });\n }\n \n /**\n * Create a new validator with regex pattern matching\n */\n regex(pattern: RegExp, message?: string): VldString {\n return new VldString({\n checks: [...this.config.checks, (v: string) => pattern.test(v)],\n transforms: this.config.transforms,\n errorMessage: message || getMessages().stringRegex\n });\n }\n \n /**\n * Create a new validator that trims whitespace\n */\n trim(): VldString {\n return new VldString({\n checks: this.config.checks,\n transforms: [...this.config.transforms, (v: string) => v.trim()],\n errorMessage: this.config.errorMessage\n });\n }\n \n /**\n * Create a new validator that converts to lowercase\n */\n toLowerCase(): VldString {\n return new VldString({\n checks: this.config.checks,\n transforms: [...this.config.transforms, (v: string) => v.toLowerCase()],\n errorMessage: this.config.errorMessage\n });\n }\n \n /**\n * Create a new validator that converts to uppercase\n */\n toUpperCase(): VldString {\n return new VldString({\n checks: this.config.checks,\n transforms: [...this.config.transforms, (v: string) => v.toUpperCase()],\n errorMessage: this.config.errorMessage\n });\n }\n \n /**\n * Create a new validator that checks if string starts with a substring\n */\n startsWith(str: string, message?: string): VldString {\n return new VldString({\n checks: [...this.config.checks, (v: string) => v.startsWith(str)],\n transforms: this.config.transforms,\n errorMessage: message || getMessages().stringStartsWith(str)\n });\n }\n \n /**\n * Create a new validator that checks if string ends with a substring\n */\n endsWith(str: string, message?: string): VldString {\n return new VldString({\n checks: [...this.config.checks, (v: string) => v.endsWith(str)],\n transforms: this.config.transforms,\n errorMessage: message || getMessages().stringEndsWith(str)\n });\n }\n \n /**\n * Create a new validator that checks if string includes a substring\n */\n includes(str: string, message?: string): VldString {\n return new VldString({\n checks: [...this.config.checks, (v: string) => v.includes(str)],\n transforms: this.config.transforms,\n errorMessage: message || getMessages().stringIncludes(str)\n });\n }\n \n /**\n * Create a new validator that checks for valid IP address (v4 or v6)\n */\n ip(message?: string): VldString {\n return new VldString({\n checks: [...this.config.checks, (v: string) => REGEX_PATTERNS.ipv4.test(v) || REGEX_PATTERNS.ipv6.test(v)],\n transforms: this.config.transforms,\n errorMessage: message || getMessages().stringIp\n });\n }\n \n /**\n * Create a new validator that checks for valid IPv4 address\n */\n ipv4(message?: string): VldString {\n return new VldString({\n checks: [...this.config.checks, (v: string) => REGEX_PATTERNS.ipv4.test(v)],\n transforms: this.config.transforms,\n errorMessage: message || getMessages().stringIpv4\n });\n }\n \n /**\n * Create a new validator that checks for valid IPv6 address\n */\n ipv6(message?: string): VldString {\n return new VldString({\n checks: [...this.config.checks, (v: string) => REGEX_PATTERNS.ipv6.test(v)],\n transforms: this.config.transforms,\n errorMessage: message || getMessages().stringIpv6\n });\n }\n \n /**\n * Create a new validator that ensures string is not empty\n */\n nonempty(message?: string): VldString {\n return new VldString({\n checks: [...this.config.checks, (v: string) => v.length > 0],\n transforms: this.config.transforms,\n errorMessage: message || getMessages().stringEmpty\n });\n }\n}"]}
@@ -0,0 +1,24 @@
1
+ import { VldBase, ParseResult } from './base';
2
+ /**
3
+ * Immutable symbol validator
4
+ */
5
+ export declare class VldSymbol extends VldBase<symbol, symbol> {
6
+ private readonly errorMessage?;
7
+ /**
8
+ * Private constructor to enforce immutability
9
+ */
10
+ private constructor();
11
+ /**
12
+ * Create a new symbol validator
13
+ */
14
+ static create(): VldSymbol;
15
+ /**
16
+ * Parse and validate a symbol value
17
+ */
18
+ parse(value: unknown): symbol;
19
+ /**
20
+ * Safely parse and validate a symbol value
21
+ */
22
+ safeParse(value: unknown): ParseResult<symbol>;
23
+ }
24
+ //# sourceMappingURL=symbol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbol.d.ts","sourceRoot":"","sources":["../../src/validators/symbol.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAG9C;;GAEG;AACH,qBAAa,SAAU,SAAQ,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;IACpD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAS;IAEvC;;OAEG;IACH,OAAO;IAKP;;OAEG;IACH,MAAM,CAAC,MAAM,IAAI,SAAS;IAI1B;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IAO7B;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC;CAS/C"}