@jdsalasc/solvejs-validators 1.0.2 → 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.
package/README.md CHANGED
@@ -11,9 +11,19 @@ npm i @jdsalasc/solvejs-validators
11
11
  ## Example
12
12
 
13
13
  ```ts
14
- import { isCellphoneNumber, isAddressDirection, isValidName } from "@jdsalasc/solvejs-validators";
14
+ import { isCellphoneNumber, validateCellphoneNumber, validateName } from "@jdsalasc/solvejs-validators";
15
15
 
16
16
  isCellphoneNumber("+573001112233");
17
- isAddressDirection("NORTH");
18
- isValidName("Maria Fernanda");
17
+ validateCellphoneNumber("+573001112233", { country: "CO" });
18
+ validateName("Maria Fernanda");
19
+ ```
20
+
21
+ Structured validators return:
22
+
23
+ ```ts
24
+ type ValidationResult = {
25
+ ok: boolean;
26
+ code: string;
27
+ message: string;
28
+ };
19
29
  ```
@@ -1,129 +1,293 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateCellphoneNumber = validateCellphoneNumber;
3
4
  exports.isCellphoneNumber = isCellphoneNumber;
5
+ exports.validateAddressDirection = validateAddressDirection;
4
6
  exports.isAddressDirection = isAddressDirection;
7
+ exports.validateName = validateName;
5
8
  exports.isValidName = isValidName;
9
+ exports.validateEmail = validateEmail;
6
10
  exports.isEmail = isEmail;
11
+ exports.validateHttpUrl = validateHttpUrl;
7
12
  exports.isHttpUrl = isHttpUrl;
13
+ exports.validatePostalCode = validatePostalCode;
8
14
  exports.isPostalCode = isPostalCode;
15
+ exports.validateStrongPassword = validateStrongPassword;
9
16
  exports.isStrongPassword = isStrongPassword;
10
- const ADDRESS_DIRECTIONS = new Set([
11
- "N",
12
- "S",
13
- "E",
14
- "W",
15
- "NE",
16
- "NW",
17
- "SE",
18
- "SW",
19
- "NORTH",
20
- "SOUTH",
21
- "EAST",
22
- "WEST",
23
- "NORTHEAST",
24
- "NORTHWEST",
25
- "SOUTHEAST",
26
- "SOUTHWEST"
27
- ]);
17
+ const ADDRESS_DIRECTIONS = {
18
+ en: new Set([
19
+ "N",
20
+ "S",
21
+ "E",
22
+ "W",
23
+ "NE",
24
+ "NW",
25
+ "SE",
26
+ "SW",
27
+ "NORTH",
28
+ "SOUTH",
29
+ "EAST",
30
+ "WEST",
31
+ "NORTHEAST",
32
+ "NORTHWEST",
33
+ "SOUTHEAST",
34
+ "SOUTHWEST"
35
+ ]),
36
+ es: new Set([
37
+ "N",
38
+ "S",
39
+ "E",
40
+ "O",
41
+ "NE",
42
+ "NO",
43
+ "SE",
44
+ "SO",
45
+ "NORTE",
46
+ "SUR",
47
+ "ESTE",
48
+ "OESTE",
49
+ "NORESTE",
50
+ "NOROESTE",
51
+ "SURESTE",
52
+ "SUROESTE"
53
+ ])
54
+ };
55
+ const COUNTRY_RULES = {
56
+ US: { minDigits: 10, maxDigits: 11 },
57
+ CO: { minDigits: 10, maxDigits: 12 },
58
+ MX: { minDigits: 10, maxDigits: 13 },
59
+ ES: { minDigits: 9, maxDigits: 11 }
60
+ };
61
+ function ok(message = "Validation passed.") {
62
+ return { ok: true, code: "VALID", message };
63
+ }
64
+ function fail(code, message) {
65
+ return { ok: false, code, message };
66
+ }
28
67
  /**
29
- * Checks whether a string is a valid international or local cellphone number.
68
+ * Validates cellphone numbers using regional presets.
30
69
  *
31
70
  * @param value - Input phone string.
32
71
  * @param options - Validation options.
33
72
  * @param options.allowInternational - Allows a leading `+`.
34
- * @param options.minDigits - Minimum number of digits.
35
- * @param options.maxDigits - Maximum number of digits.
36
- * @returns `true` when the input matches configured constraints.
73
+ * @param options.country - Country preset used for length constraints.
74
+ * @param options.minDigits - Override minimum digits.
75
+ * @param options.maxDigits - Override maximum digits.
76
+ * @returns Structured validation result.
37
77
  */
38
- function isCellphoneNumber(value, options = {}) {
78
+ function validateCellphoneNumber(value, options = {}) {
39
79
  const allowInternational = options.allowInternational ?? true;
40
- const minDigits = options.minDigits ?? 7;
41
- const maxDigits = options.maxDigits ?? 15;
42
- const normalized = value.trim().replace(/[\s().-]/g, "");
80
+ const country = options.country ?? "ANY";
81
+ if (!["ANY", "US", "CO", "MX", "ES"].includes(country)) {
82
+ return fail("UNSUPPORTED_COUNTRY", `Unsupported country preset: ${country}.`);
83
+ }
84
+ const normalized = value.trim();
85
+ if (normalized.length === 0) {
86
+ return fail("EMPTY", "Phone number cannot be empty.");
87
+ }
88
+ const compact = normalized.replace(/[\s().-]/g, "");
43
89
  const pattern = allowInternational ? /^\+?\d+$/ : /^\d+$/;
44
- if (!pattern.test(normalized)) {
45
- return false;
90
+ if (!pattern.test(compact)) {
91
+ return fail("INVALID_FORMAT", "Phone number contains invalid characters.");
92
+ }
93
+ const digits = compact.startsWith("+") ? compact.slice(1) : compact;
94
+ const preset = country === "ANY" ? { minDigits: 7, maxDigits: 15 } : COUNTRY_RULES[country];
95
+ const minDigits = options.minDigits ?? preset.minDigits;
96
+ const maxDigits = options.maxDigits ?? preset.maxDigits;
97
+ if (digits.length < minDigits) {
98
+ return fail("TOO_SHORT", `Phone number must have at least ${minDigits} digits.`);
99
+ }
100
+ if (digits.length > maxDigits) {
101
+ return fail("TOO_LONG", `Phone number must have at most ${maxDigits} digits.`);
102
+ }
103
+ return ok("Valid cellphone number.");
104
+ }
105
+ /**
106
+ * Boolean wrapper for `validateCellphoneNumber`.
107
+ *
108
+ * @param value - Input phone string.
109
+ * @param options - Validation options.
110
+ * @returns `true` when the value is valid.
111
+ */
112
+ function isCellphoneNumber(value, options = {}) {
113
+ return validateCellphoneNumber(value, options).ok;
114
+ }
115
+ /**
116
+ * Validates address direction using localized dictionaries.
117
+ *
118
+ * @param value - Direction text.
119
+ * @param options - Validation options.
120
+ * @param options.locale - Locale dictionary (`en`, `es`).
121
+ * @returns Structured validation result.
122
+ */
123
+ function validateAddressDirection(value, options = {}) {
124
+ const locale = options.locale ?? "en";
125
+ if (!ADDRESS_DIRECTIONS[locale]) {
126
+ return fail("UNSUPPORTED_LOCALE", `Unsupported direction locale: ${locale}.`);
46
127
  }
47
- const digits = normalized.startsWith("+") ? normalized.slice(1) : normalized;
48
- return digits.length >= minDigits && digits.length <= maxDigits;
128
+ const normalized = value.trim().toUpperCase();
129
+ if (!normalized) {
130
+ return fail("EMPTY", "Direction cannot be empty.");
131
+ }
132
+ return ADDRESS_DIRECTIONS[locale].has(normalized)
133
+ ? ok("Valid address direction.")
134
+ : fail("INVALID_FORMAT", "Direction does not match locale dictionary.");
49
135
  }
50
136
  /**
51
- * Validates common cardinal and intercardinal address directions.
137
+ * Boolean wrapper for `validateAddressDirection`.
52
138
  *
53
139
  * @param value - Direction text.
54
- * @returns `true` when the input matches known direction tokens.
140
+ * @param options - Validation options.
141
+ * @returns `true` when the value is valid.
55
142
  */
56
- function isAddressDirection(value) {
57
- return ADDRESS_DIRECTIONS.has(value.trim().toUpperCase());
143
+ function isAddressDirection(value, options = {}) {
144
+ return validateAddressDirection(value, options).ok;
58
145
  }
59
146
  /**
60
- * Validates names using practical rules for most user forms.
147
+ * Validates person names with practical production constraints.
61
148
  *
62
149
  * @param value - Name string.
63
150
  * @param options - Validation options.
64
151
  * @param options.minLength - Minimum total length.
65
152
  * @param options.maxLength - Maximum total length.
66
- * @returns `true` when the name is considered valid.
153
+ * @returns Structured validation result.
67
154
  */
68
- function isValidName(value, options = {}) {
155
+ function validateName(value, options = {}) {
69
156
  const minLength = options.minLength ?? 2;
70
157
  const maxLength = options.maxLength ?? 80;
71
158
  const normalized = value.trim();
72
- if (normalized.length < minLength || normalized.length > maxLength) {
73
- return false;
159
+ if (!normalized) {
160
+ return fail("EMPTY", "Name cannot be empty.");
161
+ }
162
+ if (normalized.length < minLength) {
163
+ return fail("TOO_SHORT", `Name must have at least ${minLength} characters.`);
164
+ }
165
+ if (normalized.length > maxLength) {
166
+ return fail("TOO_LONG", `Name must have at most ${maxLength} characters.`);
167
+ }
168
+ if (!/^[A-Za-zÀ-ÖØ-öø-ÿ' -]+$/.test(normalized)) {
169
+ return fail("INVALID_CHARACTERS", "Name contains unsupported characters.");
170
+ }
171
+ return ok("Valid name.");
172
+ }
173
+ /**
174
+ * Boolean wrapper for `validateName`.
175
+ *
176
+ * @param value - Name string.
177
+ * @param options - Validation options.
178
+ * @returns `true` when the value is valid.
179
+ */
180
+ function isValidName(value, options = {}) {
181
+ return validateName(value, options).ok;
182
+ }
183
+ /**
184
+ * Validates an email shape.
185
+ *
186
+ * @param value - Email string.
187
+ * @returns Structured validation result.
188
+ */
189
+ function validateEmail(value) {
190
+ const normalized = value.trim();
191
+ if (!normalized) {
192
+ return fail("EMPTY", "Email cannot be empty.");
74
193
  }
75
- return /^[A-Za-zÀ-ÖØ-öø-ÿ' -]+$/.test(normalized);
194
+ return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(normalized)
195
+ ? ok("Valid email.")
196
+ : fail("INVALID_FORMAT", "Email does not match expected format.");
76
197
  }
77
198
  /**
78
- * Validates an email using practical constraints for application forms.
199
+ * Boolean wrapper for `validateEmail`.
79
200
  *
80
201
  * @param value - Email string.
81
- * @returns `true` when email shape is valid.
202
+ * @returns `true` when the value is valid.
82
203
  */
83
204
  function isEmail(value) {
84
- return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value.trim());
205
+ return validateEmail(value).ok;
85
206
  }
86
207
  /**
87
208
  * Validates an HTTP(S) URL.
88
209
  *
89
210
  * @param value - URL string.
90
- * @returns `true` when URL is valid and protocol is HTTP or HTTPS.
211
+ * @returns Structured validation result.
91
212
  */
92
- function isHttpUrl(value) {
213
+ function validateHttpUrl(value) {
214
+ const normalized = value.trim();
215
+ if (!normalized) {
216
+ return fail("EMPTY", "URL cannot be empty.");
217
+ }
93
218
  try {
94
- const parsed = new URL(value.trim());
95
- return parsed.protocol === "http:" || parsed.protocol === "https:";
219
+ const parsed = new URL(normalized);
220
+ if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
221
+ return fail("INVALID_FORMAT", "Only HTTP and HTTPS URLs are supported.");
222
+ }
223
+ return ok("Valid URL.");
96
224
  }
97
225
  catch {
98
- return false;
226
+ return fail("INVALID_FORMAT", "URL does not match expected format.");
99
227
  }
100
228
  }
229
+ /**
230
+ * Boolean wrapper for `validateHttpUrl`.
231
+ *
232
+ * @param value - URL string.
233
+ * @returns `true` when the value is valid.
234
+ */
235
+ function isHttpUrl(value) {
236
+ return validateHttpUrl(value).ok;
237
+ }
101
238
  /**
102
239
  * Validates US-style postal codes (`12345` or `12345-6789`).
103
240
  *
104
241
  * @param value - Postal code string.
105
- * @returns `true` when value matches supported postal formats.
242
+ * @returns Structured validation result.
243
+ */
244
+ function validatePostalCode(value) {
245
+ const normalized = value.trim();
246
+ if (!normalized) {
247
+ return fail("EMPTY", "Postal code cannot be empty.");
248
+ }
249
+ return /^\d{5}(?:-\d{4})?$/.test(normalized)
250
+ ? ok("Valid postal code.")
251
+ : fail("INVALID_FORMAT", "Postal code does not match supported formats.");
252
+ }
253
+ /**
254
+ * Boolean wrapper for `validatePostalCode`.
255
+ *
256
+ * @param value - Postal code string.
257
+ * @returns `true` when the value is valid.
106
258
  */
107
259
  function isPostalCode(value) {
108
- return /^\d{5}(?:-\d{4})?$/.test(value.trim());
260
+ return validatePostalCode(value).ok;
109
261
  }
110
262
  /**
111
- * Validates password strength with common security requirements.
263
+ * Validates password strength using default security checks.
112
264
  *
113
265
  * @param value - Password candidate.
114
266
  * @param options - Validation options.
115
267
  * @param options.minLength - Minimum required length.
116
- * @returns `true` when password meets complexity requirements.
268
+ * @returns Structured validation result.
117
269
  */
118
- function isStrongPassword(value, options = {}) {
270
+ function validateStrongPassword(value, options = {}) {
119
271
  const minLength = options.minLength ?? 8;
272
+ if (!value) {
273
+ return fail("EMPTY", "Password cannot be empty.");
274
+ }
120
275
  if (value.length < minLength) {
121
- return false;
276
+ return fail("TOO_SHORT", `Password must have at least ${minLength} characters.`);
122
277
  }
123
- const hasUpper = /[A-Z]/.test(value);
124
- const hasLower = /[a-z]/.test(value);
125
- const hasDigit = /\d/.test(value);
126
- const hasSymbol = /[^A-Za-z0-9]/.test(value);
127
- return hasUpper && hasLower && hasDigit && hasSymbol;
278
+ if (!/[A-Z]/.test(value) || !/[a-z]/.test(value) || !/\d/.test(value) || !/[^A-Za-z0-9]/.test(value)) {
279
+ return fail("INVALID_FORMAT", "Password must include upper, lower, digit, and symbol characters.");
280
+ }
281
+ return ok("Strong password.");
282
+ }
283
+ /**
284
+ * Boolean wrapper for `validateStrongPassword`.
285
+ *
286
+ * @param value - Password candidate.
287
+ * @param options - Validation options.
288
+ * @returns `true` when the value is valid.
289
+ */
290
+ function isStrongPassword(value, options = {}) {
291
+ return validateStrongPassword(value, options).ok;
128
292
  }
129
293
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,66 +1,145 @@
1
+ export type ValidationResultCode = "VALID" | "EMPTY" | "INVALID_FORMAT" | "TOO_SHORT" | "TOO_LONG" | "INVALID_CHARACTERS" | "UNSUPPORTED_LOCALE" | "UNSUPPORTED_COUNTRY";
2
+ export type ValidationResult = {
3
+ ok: boolean;
4
+ code: ValidationResultCode;
5
+ message: string;
6
+ };
7
+ export type SupportedCountry = "ANY" | "US" | "CO" | "MX" | "ES";
8
+ export type DirectionLocale = "en" | "es";
1
9
  /**
2
- * Checks whether a string is a valid international or local cellphone number.
10
+ * Validates cellphone numbers using regional presets.
3
11
  *
4
12
  * @param value - Input phone string.
5
13
  * @param options - Validation options.
6
14
  * @param options.allowInternational - Allows a leading `+`.
7
- * @param options.minDigits - Minimum number of digits.
8
- * @param options.maxDigits - Maximum number of digits.
9
- * @returns `true` when the input matches configured constraints.
15
+ * @param options.country - Country preset used for length constraints.
16
+ * @param options.minDigits - Override minimum digits.
17
+ * @param options.maxDigits - Override maximum digits.
18
+ * @returns Structured validation result.
19
+ */
20
+ export declare function validateCellphoneNumber(value: string, options?: {
21
+ allowInternational?: boolean;
22
+ country?: SupportedCountry;
23
+ minDigits?: number;
24
+ maxDigits?: number;
25
+ }): ValidationResult;
26
+ /**
27
+ * Boolean wrapper for `validateCellphoneNumber`.
28
+ *
29
+ * @param value - Input phone string.
30
+ * @param options - Validation options.
31
+ * @returns `true` when the value is valid.
10
32
  */
11
33
  export declare function isCellphoneNumber(value: string, options?: {
12
34
  allowInternational?: boolean;
35
+ country?: SupportedCountry;
13
36
  minDigits?: number;
14
37
  maxDigits?: number;
15
38
  }): boolean;
16
39
  /**
17
- * Validates common cardinal and intercardinal address directions.
40
+ * Validates address direction using localized dictionaries.
41
+ *
42
+ * @param value - Direction text.
43
+ * @param options - Validation options.
44
+ * @param options.locale - Locale dictionary (`en`, `es`).
45
+ * @returns Structured validation result.
46
+ */
47
+ export declare function validateAddressDirection(value: string, options?: {
48
+ locale?: DirectionLocale;
49
+ }): ValidationResult;
50
+ /**
51
+ * Boolean wrapper for `validateAddressDirection`.
18
52
  *
19
53
  * @param value - Direction text.
20
- * @returns `true` when the input matches known direction tokens.
54
+ * @param options - Validation options.
55
+ * @returns `true` when the value is valid.
21
56
  */
22
- export declare function isAddressDirection(value: string): boolean;
57
+ export declare function isAddressDirection(value: string, options?: {
58
+ locale?: DirectionLocale;
59
+ }): boolean;
23
60
  /**
24
- * Validates names using practical rules for most user forms.
61
+ * Validates person names with practical production constraints.
25
62
  *
26
63
  * @param value - Name string.
27
64
  * @param options - Validation options.
28
65
  * @param options.minLength - Minimum total length.
29
66
  * @param options.maxLength - Maximum total length.
30
- * @returns `true` when the name is considered valid.
67
+ * @returns Structured validation result.
68
+ */
69
+ export declare function validateName(value: string, options?: {
70
+ minLength?: number;
71
+ maxLength?: number;
72
+ }): ValidationResult;
73
+ /**
74
+ * Boolean wrapper for `validateName`.
75
+ *
76
+ * @param value - Name string.
77
+ * @param options - Validation options.
78
+ * @returns `true` when the value is valid.
31
79
  */
32
80
  export declare function isValidName(value: string, options?: {
33
81
  minLength?: number;
34
82
  maxLength?: number;
35
83
  }): boolean;
36
84
  /**
37
- * Validates an email using practical constraints for application forms.
85
+ * Validates an email shape.
86
+ *
87
+ * @param value - Email string.
88
+ * @returns Structured validation result.
89
+ */
90
+ export declare function validateEmail(value: string): ValidationResult;
91
+ /**
92
+ * Boolean wrapper for `validateEmail`.
38
93
  *
39
94
  * @param value - Email string.
40
- * @returns `true` when email shape is valid.
95
+ * @returns `true` when the value is valid.
41
96
  */
42
97
  export declare function isEmail(value: string): boolean;
43
98
  /**
44
99
  * Validates an HTTP(S) URL.
45
100
  *
46
101
  * @param value - URL string.
47
- * @returns `true` when URL is valid and protocol is HTTP or HTTPS.
102
+ * @returns Structured validation result.
103
+ */
104
+ export declare function validateHttpUrl(value: string): ValidationResult;
105
+ /**
106
+ * Boolean wrapper for `validateHttpUrl`.
107
+ *
108
+ * @param value - URL string.
109
+ * @returns `true` when the value is valid.
48
110
  */
49
111
  export declare function isHttpUrl(value: string): boolean;
50
112
  /**
51
113
  * Validates US-style postal codes (`12345` or `12345-6789`).
52
114
  *
53
115
  * @param value - Postal code string.
54
- * @returns `true` when value matches supported postal formats.
116
+ * @returns Structured validation result.
117
+ */
118
+ export declare function validatePostalCode(value: string): ValidationResult;
119
+ /**
120
+ * Boolean wrapper for `validatePostalCode`.
121
+ *
122
+ * @param value - Postal code string.
123
+ * @returns `true` when the value is valid.
55
124
  */
56
125
  export declare function isPostalCode(value: string): boolean;
57
126
  /**
58
- * Validates password strength with common security requirements.
127
+ * Validates password strength using default security checks.
59
128
  *
60
129
  * @param value - Password candidate.
61
130
  * @param options - Validation options.
62
131
  * @param options.minLength - Minimum required length.
63
- * @returns `true` when password meets complexity requirements.
132
+ * @returns Structured validation result.
133
+ */
134
+ export declare function validateStrongPassword(value: string, options?: {
135
+ minLength?: number;
136
+ }): ValidationResult;
137
+ /**
138
+ * Boolean wrapper for `validateStrongPassword`.
139
+ *
140
+ * @param value - Password candidate.
141
+ * @param options - Validation options.
142
+ * @returns `true` when the value is valid.
64
143
  */
65
144
  export declare function isStrongPassword(value: string, options?: {
66
145
  minLength?: number;
package/dist/esm/index.js CHANGED
@@ -1,120 +1,277 @@
1
- const ADDRESS_DIRECTIONS = new Set([
2
- "N",
3
- "S",
4
- "E",
5
- "W",
6
- "NE",
7
- "NW",
8
- "SE",
9
- "SW",
10
- "NORTH",
11
- "SOUTH",
12
- "EAST",
13
- "WEST",
14
- "NORTHEAST",
15
- "NORTHWEST",
16
- "SOUTHEAST",
17
- "SOUTHWEST"
18
- ]);
1
+ const ADDRESS_DIRECTIONS = {
2
+ en: new Set([
3
+ "N",
4
+ "S",
5
+ "E",
6
+ "W",
7
+ "NE",
8
+ "NW",
9
+ "SE",
10
+ "SW",
11
+ "NORTH",
12
+ "SOUTH",
13
+ "EAST",
14
+ "WEST",
15
+ "NORTHEAST",
16
+ "NORTHWEST",
17
+ "SOUTHEAST",
18
+ "SOUTHWEST"
19
+ ]),
20
+ es: new Set([
21
+ "N",
22
+ "S",
23
+ "E",
24
+ "O",
25
+ "NE",
26
+ "NO",
27
+ "SE",
28
+ "SO",
29
+ "NORTE",
30
+ "SUR",
31
+ "ESTE",
32
+ "OESTE",
33
+ "NORESTE",
34
+ "NOROESTE",
35
+ "SURESTE",
36
+ "SUROESTE"
37
+ ])
38
+ };
39
+ const COUNTRY_RULES = {
40
+ US: { minDigits: 10, maxDigits: 11 },
41
+ CO: { minDigits: 10, maxDigits: 12 },
42
+ MX: { minDigits: 10, maxDigits: 13 },
43
+ ES: { minDigits: 9, maxDigits: 11 }
44
+ };
45
+ function ok(message = "Validation passed.") {
46
+ return { ok: true, code: "VALID", message };
47
+ }
48
+ function fail(code, message) {
49
+ return { ok: false, code, message };
50
+ }
19
51
  /**
20
- * Checks whether a string is a valid international or local cellphone number.
52
+ * Validates cellphone numbers using regional presets.
21
53
  *
22
54
  * @param value - Input phone string.
23
55
  * @param options - Validation options.
24
56
  * @param options.allowInternational - Allows a leading `+`.
25
- * @param options.minDigits - Minimum number of digits.
26
- * @param options.maxDigits - Maximum number of digits.
27
- * @returns `true` when the input matches configured constraints.
57
+ * @param options.country - Country preset used for length constraints.
58
+ * @param options.minDigits - Override minimum digits.
59
+ * @param options.maxDigits - Override maximum digits.
60
+ * @returns Structured validation result.
28
61
  */
29
- export function isCellphoneNumber(value, options = {}) {
62
+ export function validateCellphoneNumber(value, options = {}) {
30
63
  const allowInternational = options.allowInternational ?? true;
31
- const minDigits = options.minDigits ?? 7;
32
- const maxDigits = options.maxDigits ?? 15;
33
- const normalized = value.trim().replace(/[\s().-]/g, "");
64
+ const country = options.country ?? "ANY";
65
+ if (!["ANY", "US", "CO", "MX", "ES"].includes(country)) {
66
+ return fail("UNSUPPORTED_COUNTRY", `Unsupported country preset: ${country}.`);
67
+ }
68
+ const normalized = value.trim();
69
+ if (normalized.length === 0) {
70
+ return fail("EMPTY", "Phone number cannot be empty.");
71
+ }
72
+ const compact = normalized.replace(/[\s().-]/g, "");
34
73
  const pattern = allowInternational ? /^\+?\d+$/ : /^\d+$/;
35
- if (!pattern.test(normalized)) {
36
- return false;
74
+ if (!pattern.test(compact)) {
75
+ return fail("INVALID_FORMAT", "Phone number contains invalid characters.");
76
+ }
77
+ const digits = compact.startsWith("+") ? compact.slice(1) : compact;
78
+ const preset = country === "ANY" ? { minDigits: 7, maxDigits: 15 } : COUNTRY_RULES[country];
79
+ const minDigits = options.minDigits ?? preset.minDigits;
80
+ const maxDigits = options.maxDigits ?? preset.maxDigits;
81
+ if (digits.length < minDigits) {
82
+ return fail("TOO_SHORT", `Phone number must have at least ${minDigits} digits.`);
83
+ }
84
+ if (digits.length > maxDigits) {
85
+ return fail("TOO_LONG", `Phone number must have at most ${maxDigits} digits.`);
86
+ }
87
+ return ok("Valid cellphone number.");
88
+ }
89
+ /**
90
+ * Boolean wrapper for `validateCellphoneNumber`.
91
+ *
92
+ * @param value - Input phone string.
93
+ * @param options - Validation options.
94
+ * @returns `true` when the value is valid.
95
+ */
96
+ export function isCellphoneNumber(value, options = {}) {
97
+ return validateCellphoneNumber(value, options).ok;
98
+ }
99
+ /**
100
+ * Validates address direction using localized dictionaries.
101
+ *
102
+ * @param value - Direction text.
103
+ * @param options - Validation options.
104
+ * @param options.locale - Locale dictionary (`en`, `es`).
105
+ * @returns Structured validation result.
106
+ */
107
+ export function validateAddressDirection(value, options = {}) {
108
+ const locale = options.locale ?? "en";
109
+ if (!ADDRESS_DIRECTIONS[locale]) {
110
+ return fail("UNSUPPORTED_LOCALE", `Unsupported direction locale: ${locale}.`);
37
111
  }
38
- const digits = normalized.startsWith("+") ? normalized.slice(1) : normalized;
39
- return digits.length >= minDigits && digits.length <= maxDigits;
112
+ const normalized = value.trim().toUpperCase();
113
+ if (!normalized) {
114
+ return fail("EMPTY", "Direction cannot be empty.");
115
+ }
116
+ return ADDRESS_DIRECTIONS[locale].has(normalized)
117
+ ? ok("Valid address direction.")
118
+ : fail("INVALID_FORMAT", "Direction does not match locale dictionary.");
40
119
  }
41
120
  /**
42
- * Validates common cardinal and intercardinal address directions.
121
+ * Boolean wrapper for `validateAddressDirection`.
43
122
  *
44
123
  * @param value - Direction text.
45
- * @returns `true` when the input matches known direction tokens.
124
+ * @param options - Validation options.
125
+ * @returns `true` when the value is valid.
46
126
  */
47
- export function isAddressDirection(value) {
48
- return ADDRESS_DIRECTIONS.has(value.trim().toUpperCase());
127
+ export function isAddressDirection(value, options = {}) {
128
+ return validateAddressDirection(value, options).ok;
49
129
  }
50
130
  /**
51
- * Validates names using practical rules for most user forms.
131
+ * Validates person names with practical production constraints.
52
132
  *
53
133
  * @param value - Name string.
54
134
  * @param options - Validation options.
55
135
  * @param options.minLength - Minimum total length.
56
136
  * @param options.maxLength - Maximum total length.
57
- * @returns `true` when the name is considered valid.
137
+ * @returns Structured validation result.
58
138
  */
59
- export function isValidName(value, options = {}) {
139
+ export function validateName(value, options = {}) {
60
140
  const minLength = options.minLength ?? 2;
61
141
  const maxLength = options.maxLength ?? 80;
62
142
  const normalized = value.trim();
63
- if (normalized.length < minLength || normalized.length > maxLength) {
64
- return false;
143
+ if (!normalized) {
144
+ return fail("EMPTY", "Name cannot be empty.");
145
+ }
146
+ if (normalized.length < minLength) {
147
+ return fail("TOO_SHORT", `Name must have at least ${minLength} characters.`);
148
+ }
149
+ if (normalized.length > maxLength) {
150
+ return fail("TOO_LONG", `Name must have at most ${maxLength} characters.`);
151
+ }
152
+ if (!/^[A-Za-zÀ-ÖØ-öø-ÿ' -]+$/.test(normalized)) {
153
+ return fail("INVALID_CHARACTERS", "Name contains unsupported characters.");
154
+ }
155
+ return ok("Valid name.");
156
+ }
157
+ /**
158
+ * Boolean wrapper for `validateName`.
159
+ *
160
+ * @param value - Name string.
161
+ * @param options - Validation options.
162
+ * @returns `true` when the value is valid.
163
+ */
164
+ export function isValidName(value, options = {}) {
165
+ return validateName(value, options).ok;
166
+ }
167
+ /**
168
+ * Validates an email shape.
169
+ *
170
+ * @param value - Email string.
171
+ * @returns Structured validation result.
172
+ */
173
+ export function validateEmail(value) {
174
+ const normalized = value.trim();
175
+ if (!normalized) {
176
+ return fail("EMPTY", "Email cannot be empty.");
65
177
  }
66
- return /^[A-Za-zÀ-ÖØ-öø-ÿ' -]+$/.test(normalized);
178
+ return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(normalized)
179
+ ? ok("Valid email.")
180
+ : fail("INVALID_FORMAT", "Email does not match expected format.");
67
181
  }
68
182
  /**
69
- * Validates an email using practical constraints for application forms.
183
+ * Boolean wrapper for `validateEmail`.
70
184
  *
71
185
  * @param value - Email string.
72
- * @returns `true` when email shape is valid.
186
+ * @returns `true` when the value is valid.
73
187
  */
74
188
  export function isEmail(value) {
75
- return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value.trim());
189
+ return validateEmail(value).ok;
76
190
  }
77
191
  /**
78
192
  * Validates an HTTP(S) URL.
79
193
  *
80
194
  * @param value - URL string.
81
- * @returns `true` when URL is valid and protocol is HTTP or HTTPS.
195
+ * @returns Structured validation result.
82
196
  */
83
- export function isHttpUrl(value) {
197
+ export function validateHttpUrl(value) {
198
+ const normalized = value.trim();
199
+ if (!normalized) {
200
+ return fail("EMPTY", "URL cannot be empty.");
201
+ }
84
202
  try {
85
- const parsed = new URL(value.trim());
86
- return parsed.protocol === "http:" || parsed.protocol === "https:";
203
+ const parsed = new URL(normalized);
204
+ if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
205
+ return fail("INVALID_FORMAT", "Only HTTP and HTTPS URLs are supported.");
206
+ }
207
+ return ok("Valid URL.");
87
208
  }
88
209
  catch {
89
- return false;
210
+ return fail("INVALID_FORMAT", "URL does not match expected format.");
90
211
  }
91
212
  }
213
+ /**
214
+ * Boolean wrapper for `validateHttpUrl`.
215
+ *
216
+ * @param value - URL string.
217
+ * @returns `true` when the value is valid.
218
+ */
219
+ export function isHttpUrl(value) {
220
+ return validateHttpUrl(value).ok;
221
+ }
92
222
  /**
93
223
  * Validates US-style postal codes (`12345` or `12345-6789`).
94
224
  *
95
225
  * @param value - Postal code string.
96
- * @returns `true` when value matches supported postal formats.
226
+ * @returns Structured validation result.
227
+ */
228
+ export function validatePostalCode(value) {
229
+ const normalized = value.trim();
230
+ if (!normalized) {
231
+ return fail("EMPTY", "Postal code cannot be empty.");
232
+ }
233
+ return /^\d{5}(?:-\d{4})?$/.test(normalized)
234
+ ? ok("Valid postal code.")
235
+ : fail("INVALID_FORMAT", "Postal code does not match supported formats.");
236
+ }
237
+ /**
238
+ * Boolean wrapper for `validatePostalCode`.
239
+ *
240
+ * @param value - Postal code string.
241
+ * @returns `true` when the value is valid.
97
242
  */
98
243
  export function isPostalCode(value) {
99
- return /^\d{5}(?:-\d{4})?$/.test(value.trim());
244
+ return validatePostalCode(value).ok;
100
245
  }
101
246
  /**
102
- * Validates password strength with common security requirements.
247
+ * Validates password strength using default security checks.
103
248
  *
104
249
  * @param value - Password candidate.
105
250
  * @param options - Validation options.
106
251
  * @param options.minLength - Minimum required length.
107
- * @returns `true` when password meets complexity requirements.
252
+ * @returns Structured validation result.
108
253
  */
109
- export function isStrongPassword(value, options = {}) {
254
+ export function validateStrongPassword(value, options = {}) {
110
255
  const minLength = options.minLength ?? 8;
256
+ if (!value) {
257
+ return fail("EMPTY", "Password cannot be empty.");
258
+ }
111
259
  if (value.length < minLength) {
112
- return false;
260
+ return fail("TOO_SHORT", `Password must have at least ${minLength} characters.`);
113
261
  }
114
- const hasUpper = /[A-Z]/.test(value);
115
- const hasLower = /[a-z]/.test(value);
116
- const hasDigit = /\d/.test(value);
117
- const hasSymbol = /[^A-Za-z0-9]/.test(value);
118
- return hasUpper && hasLower && hasDigit && hasSymbol;
262
+ if (!/[A-Z]/.test(value) || !/[a-z]/.test(value) || !/\d/.test(value) || !/[^A-Za-z0-9]/.test(value)) {
263
+ return fail("INVALID_FORMAT", "Password must include upper, lower, digit, and symbol characters.");
264
+ }
265
+ return ok("Strong password.");
266
+ }
267
+ /**
268
+ * Boolean wrapper for `validateStrongPassword`.
269
+ *
270
+ * @param value - Password candidate.
271
+ * @param options - Validation options.
272
+ * @returns `true` when the value is valid.
273
+ */
274
+ export function isStrongPassword(value, options = {}) {
275
+ return validateStrongPassword(value, options).ok;
119
276
  }
120
277
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jdsalasc/solvejs-validators",
3
- "version": "1.0.2",
3
+ "version": "1.1.0",
4
4
  "description": "Practical validators for real JS/TS form pain points: cellphone, direction, name, password, email, and URL.",
5
5
  "license": "MIT",
6
6
  "type": "module",