@decaf-ts/decorator-validation 1.6.5 → 1.7.1
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/dist/decorator-validation.cjs +1202 -386
- package/dist/decorator-validation.esm.cjs +1158 -341
- package/lib/constants/index.cjs +1 -1
- package/lib/esm/index.d.ts +5 -37
- package/lib/esm/index.js +6 -38
- package/lib/esm/model/Model.d.ts +107 -35
- package/lib/esm/model/Model.js +110 -45
- package/lib/esm/model/constants.d.ts +3 -3
- package/lib/esm/model/constants.js +4 -4
- package/lib/esm/model/construction.d.ts +3 -3
- package/lib/esm/model/construction.js +4 -4
- package/lib/esm/model/decorators.d.ts +3 -3
- package/lib/esm/model/decorators.js +5 -3
- package/lib/esm/model/index.d.ts +1 -0
- package/lib/esm/model/index.js +2 -1
- package/lib/esm/model/types.d.ts +30 -11
- package/lib/esm/model/types.js +1 -1
- package/lib/esm/model/utils.d.ts +3 -0
- package/lib/esm/model/utils.js +11 -0
- package/lib/esm/model/validation.d.ts +5 -5
- package/lib/esm/model/validation.js +8 -9
- package/lib/esm/utils/Decoration.d.ts +123 -0
- package/lib/esm/utils/Decoration.js +192 -0
- package/lib/esm/utils/constants.d.ts +27 -9
- package/lib/esm/utils/constants.js +28 -10
- package/lib/esm/utils/dates.d.ts +26 -16
- package/lib/esm/utils/dates.js +27 -17
- package/lib/esm/utils/decorators.d.ts +41 -0
- package/lib/esm/utils/decorators.js +42 -1
- package/lib/esm/utils/hashing.d.ts +50 -6
- package/lib/esm/utils/hashing.js +49 -5
- package/lib/esm/utils/index.d.ts +1 -0
- package/lib/esm/utils/index.js +2 -1
- package/lib/esm/utils/registry.d.ts +3 -3
- package/lib/esm/utils/registry.js +1 -1
- package/lib/esm/utils/serialization.d.ts +1 -1
- package/lib/esm/utils/serialization.js +4 -3
- package/lib/esm/utils/strings.d.ts +4 -4
- package/lib/esm/utils/strings.js +5 -5
- package/lib/esm/utils/types.d.ts +123 -16
- package/lib/esm/utils/types.js +1 -1
- package/lib/esm/validation/Validators/DateValidator.d.ts +40 -8
- package/lib/esm/validation/Validators/DateValidator.js +41 -9
- package/lib/esm/validation/Validators/EmailValidator.d.ts +39 -7
- package/lib/esm/validation/Validators/EmailValidator.js +40 -8
- package/lib/esm/validation/Validators/ListValidator.d.ts +44 -6
- package/lib/esm/validation/Validators/ListValidator.js +45 -7
- package/lib/esm/validation/Validators/MaxValidator.d.ts +52 -6
- package/lib/esm/validation/Validators/MaxValidator.js +53 -7
- package/lib/esm/validation/Validators/MinValidator.d.ts +52 -6
- package/lib/esm/validation/Validators/MinValidator.js +53 -7
- package/lib/esm/validation/Validators/PasswordValidator.js +1 -1
- package/lib/esm/validation/Validators/PatternValidator.d.ts +75 -9
- package/lib/esm/validation/Validators/PatternValidator.js +76 -10
- package/lib/esm/validation/Validators/RequiredValidator.d.ts +52 -6
- package/lib/esm/validation/Validators/RequiredValidator.js +53 -7
- package/lib/esm/validation/Validators/TypeValidator.d.ts +60 -6
- package/lib/esm/validation/Validators/TypeValidator.js +69 -7
- package/lib/esm/validation/Validators/URLValidator.d.ts +41 -7
- package/lib/esm/validation/Validators/URLValidator.js +42 -8
- package/lib/esm/validation/Validators/Validator.d.ts +76 -16
- package/lib/esm/validation/Validators/Validator.js +68 -11
- package/lib/esm/validation/Validators/ValidatorRegistry.d.ts +1 -7
- package/lib/esm/validation/Validators/ValidatorRegistry.js +4 -11
- package/lib/esm/validation/decorators.d.ts +50 -40
- package/lib/esm/validation/decorators.js +102 -53
- package/lib/esm/validation/types.d.ts +146 -28
- package/lib/esm/validation/types.js +1 -1
- package/lib/index.cjs +7 -39
- package/lib/index.d.ts +5 -37
- package/lib/model/Model.cjs +114 -51
- package/lib/model/Model.d.ts +107 -35
- package/lib/model/constants.cjs +4 -4
- package/lib/model/constants.d.ts +3 -3
- package/lib/model/construction.cjs +4 -4
- package/lib/model/construction.d.ts +3 -3
- package/lib/model/decorators.cjs +6 -4
- package/lib/model/decorators.d.ts +3 -3
- package/lib/model/index.cjs +2 -1
- package/lib/model/index.d.ts +1 -0
- package/lib/model/types.cjs +1 -1
- package/lib/model/types.d.ts +30 -11
- package/lib/model/utils.cjs +15 -0
- package/lib/model/utils.d.ts +3 -0
- package/lib/model/validation.cjs +11 -12
- package/lib/model/validation.d.ts +5 -5
- package/lib/utils/Decoration.cjs +196 -0
- package/lib/utils/Decoration.d.ts +123 -0
- package/lib/utils/constants.cjs +29 -11
- package/lib/utils/constants.d.ts +27 -9
- package/lib/utils/dates.cjs +28 -18
- package/lib/utils/dates.d.ts +26 -16
- package/lib/utils/decorators.cjs +42 -1
- package/lib/utils/decorators.d.ts +41 -0
- package/lib/utils/hashing.cjs +49 -5
- package/lib/utils/hashing.d.ts +50 -6
- package/lib/utils/index.cjs +2 -1
- package/lib/utils/index.d.ts +1 -0
- package/lib/utils/registry.cjs +1 -1
- package/lib/utils/registry.d.ts +3 -3
- package/lib/utils/serialization.cjs +5 -4
- package/lib/utils/serialization.d.ts +1 -1
- package/lib/utils/strings.cjs +5 -5
- package/lib/utils/strings.d.ts +4 -4
- package/lib/utils/types.cjs +1 -1
- package/lib/utils/types.d.ts +123 -16
- package/lib/validation/Validation.cjs +1 -1
- package/lib/validation/Validators/DateValidator.cjs +41 -9
- package/lib/validation/Validators/DateValidator.d.ts +40 -8
- package/lib/validation/Validators/DiffValidator.cjs +1 -1
- package/lib/validation/Validators/EmailValidator.cjs +40 -8
- package/lib/validation/Validators/EmailValidator.d.ts +39 -7
- package/lib/validation/Validators/EqualsValidator.cjs +1 -1
- package/lib/validation/Validators/GreaterThanOrEqualValidator.cjs +1 -1
- package/lib/validation/Validators/GreaterThanValidator.cjs +1 -1
- package/lib/validation/Validators/LessThanOrEqualValidator.cjs +1 -1
- package/lib/validation/Validators/LessThanValidator.cjs +1 -1
- package/lib/validation/Validators/ListValidator.cjs +45 -7
- package/lib/validation/Validators/ListValidator.d.ts +44 -6
- package/lib/validation/Validators/MaxLengthValidator.cjs +1 -1
- package/lib/validation/Validators/MaxValidator.cjs +53 -7
- package/lib/validation/Validators/MaxValidator.d.ts +52 -6
- package/lib/validation/Validators/MinLengthValidator.cjs +1 -1
- package/lib/validation/Validators/MinValidator.cjs +53 -7
- package/lib/validation/Validators/MinValidator.d.ts +52 -6
- package/lib/validation/Validators/PasswordValidator.cjs +1 -1
- package/lib/validation/Validators/PatternValidator.cjs +76 -10
- package/lib/validation/Validators/PatternValidator.d.ts +75 -9
- package/lib/validation/Validators/RequiredValidator.cjs +53 -7
- package/lib/validation/Validators/RequiredValidator.d.ts +52 -6
- package/lib/validation/Validators/StepValidator.cjs +1 -1
- package/lib/validation/Validators/TypeValidator.cjs +71 -9
- package/lib/validation/Validators/TypeValidator.d.ts +60 -6
- package/lib/validation/Validators/URLValidator.cjs +42 -8
- package/lib/validation/Validators/URLValidator.d.ts +41 -7
- package/lib/validation/Validators/Validator.cjs +69 -12
- package/lib/validation/Validators/Validator.d.ts +76 -16
- package/lib/validation/Validators/ValidatorRegistry.cjs +4 -12
- package/lib/validation/Validators/ValidatorRegistry.d.ts +1 -7
- package/lib/validation/Validators/constants.cjs +2 -2
- package/lib/validation/Validators/decorators.cjs +2 -2
- package/lib/validation/Validators/index.cjs +1 -1
- package/lib/validation/Validators/utils.cjs +3 -3
- package/lib/validation/decorators.cjs +105 -56
- package/lib/validation/decorators.d.ts +50 -40
- package/lib/validation/index.cjs +1 -1
- package/lib/validation/types.cjs +1 -1
- package/lib/validation/types.d.ts +146 -28
- package/package.json +2 -1
|
@@ -1,24 +1,70 @@
|
|
|
1
1
|
import { Validator } from "./Validator";
|
|
2
2
|
import { MinValidatorOptions } from "../types";
|
|
3
3
|
/**
|
|
4
|
-
* @
|
|
4
|
+
* @description Validator for checking if a value is greater than or equal to a minimum
|
|
5
|
+
* @summary The MinValidator checks if a numeric value, date, or string is greater than or equal to
|
|
6
|
+
* a specified minimum value. It supports comparing numbers directly, dates chronologically,
|
|
7
|
+
* and strings lexicographically. This validator is typically used with the @min decorator.
|
|
5
8
|
*
|
|
6
|
-
* @param {string} [message] defaults to {@link DEFAULT_ERROR_MESSAGES#MIN}
|
|
9
|
+
* @param {string} [message] - Custom error message to display when validation fails, defaults to {@link DEFAULT_ERROR_MESSAGES#MIN}
|
|
7
10
|
*
|
|
8
11
|
* @class MinValidator
|
|
9
12
|
* @extends Validator
|
|
10
13
|
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* // Create a min validator with default error message
|
|
17
|
+
* const minValidator = new MinValidator();
|
|
18
|
+
*
|
|
19
|
+
* // Create a min validator with custom error message
|
|
20
|
+
* const customMinValidator = new MinValidator("Value must be at least {0}");
|
|
21
|
+
*
|
|
22
|
+
* // Validate a number
|
|
23
|
+
* const numOptions = { min: 10, message: "Number too small" };
|
|
24
|
+
* const numResult = minValidator.hasErrors(50, numOptions); // undefined (valid)
|
|
25
|
+
* const invalidNumResult = minValidator.hasErrors(5, numOptions); // Returns error message (invalid)
|
|
26
|
+
*
|
|
27
|
+
* // Validate a date
|
|
28
|
+
* const dateOptions = { min: new Date(2023, 0, 1) };
|
|
29
|
+
* const dateResult = minValidator.hasErrors(new Date(2023, 5, 15), dateOptions); // undefined (valid)
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* @mermaid
|
|
33
|
+
* sequenceDiagram
|
|
34
|
+
* participant C as Client
|
|
35
|
+
* participant V as MinValidator
|
|
36
|
+
*
|
|
37
|
+
* C->>V: new MinValidator(message)
|
|
38
|
+
* C->>V: hasErrors(value, options)
|
|
39
|
+
* alt value is undefined
|
|
40
|
+
* V-->>C: undefined (valid)
|
|
41
|
+
* else value is Date and min is not Date
|
|
42
|
+
* V->>V: Convert min to Date
|
|
43
|
+
* alt conversion fails
|
|
44
|
+
* V-->>C: Error: Invalid Min param
|
|
45
|
+
* end
|
|
46
|
+
* end
|
|
47
|
+
* alt value < min
|
|
48
|
+
* V-->>C: Error message
|
|
49
|
+
* else value >= min
|
|
50
|
+
* V-->>C: undefined (valid)
|
|
51
|
+
* end
|
|
52
|
+
*
|
|
11
53
|
* @category Validators
|
|
12
54
|
*/
|
|
13
55
|
export declare class MinValidator extends Validator<MinValidatorOptions> {
|
|
14
56
|
constructor(message?: string);
|
|
15
57
|
/**
|
|
16
|
-
* @
|
|
58
|
+
* @description Checks if a value is greater than or equal to a minimum
|
|
59
|
+
* @summary Validates that the provided value is not less than the minimum value
|
|
60
|
+
* specified in the options. For dates, it performs chronological comparison,
|
|
61
|
+
* converting string representations to Date objects if necessary. For numbers
|
|
62
|
+
* and strings, it performs direct comparison.
|
|
17
63
|
*
|
|
18
|
-
* @param {string} value
|
|
19
|
-
* @param {
|
|
64
|
+
* @param {number | Date | string} value - The value to validate
|
|
65
|
+
* @param {MinValidatorOptions} options - Configuration options containing the minimum value
|
|
20
66
|
*
|
|
21
|
-
* @return {string | undefined}
|
|
67
|
+
* @return {string | undefined} Error message if validation fails, undefined if validation passes
|
|
22
68
|
*
|
|
23
69
|
* @override
|
|
24
70
|
*
|
|
@@ -11,13 +11,55 @@ import { Validator } from "./Validator";
|
|
|
11
11
|
import { DEFAULT_ERROR_MESSAGES, ValidationKeys } from "./constants";
|
|
12
12
|
import { validator } from "./decorators";
|
|
13
13
|
/**
|
|
14
|
-
* @
|
|
14
|
+
* @description Validator for checking if a value is greater than or equal to a minimum
|
|
15
|
+
* @summary The MinValidator checks if a numeric value, date, or string is greater than or equal to
|
|
16
|
+
* a specified minimum value. It supports comparing numbers directly, dates chronologically,
|
|
17
|
+
* and strings lexicographically. This validator is typically used with the @min decorator.
|
|
15
18
|
*
|
|
16
|
-
* @param {string} [message] defaults to {@link DEFAULT_ERROR_MESSAGES#MIN}
|
|
19
|
+
* @param {string} [message] - Custom error message to display when validation fails, defaults to {@link DEFAULT_ERROR_MESSAGES#MIN}
|
|
17
20
|
*
|
|
18
21
|
* @class MinValidator
|
|
19
22
|
* @extends Validator
|
|
20
23
|
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* // Create a min validator with default error message
|
|
27
|
+
* const minValidator = new MinValidator();
|
|
28
|
+
*
|
|
29
|
+
* // Create a min validator with custom error message
|
|
30
|
+
* const customMinValidator = new MinValidator("Value must be at least {0}");
|
|
31
|
+
*
|
|
32
|
+
* // Validate a number
|
|
33
|
+
* const numOptions = { min: 10, message: "Number too small" };
|
|
34
|
+
* const numResult = minValidator.hasErrors(50, numOptions); // undefined (valid)
|
|
35
|
+
* const invalidNumResult = minValidator.hasErrors(5, numOptions); // Returns error message (invalid)
|
|
36
|
+
*
|
|
37
|
+
* // Validate a date
|
|
38
|
+
* const dateOptions = { min: new Date(2023, 0, 1) };
|
|
39
|
+
* const dateResult = minValidator.hasErrors(new Date(2023, 5, 15), dateOptions); // undefined (valid)
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* @mermaid
|
|
43
|
+
* sequenceDiagram
|
|
44
|
+
* participant C as Client
|
|
45
|
+
* participant V as MinValidator
|
|
46
|
+
*
|
|
47
|
+
* C->>V: new MinValidator(message)
|
|
48
|
+
* C->>V: hasErrors(value, options)
|
|
49
|
+
* alt value is undefined
|
|
50
|
+
* V-->>C: undefined (valid)
|
|
51
|
+
* else value is Date and min is not Date
|
|
52
|
+
* V->>V: Convert min to Date
|
|
53
|
+
* alt conversion fails
|
|
54
|
+
* V-->>C: Error: Invalid Min param
|
|
55
|
+
* end
|
|
56
|
+
* end
|
|
57
|
+
* alt value < min
|
|
58
|
+
* V-->>C: Error message
|
|
59
|
+
* else value >= min
|
|
60
|
+
* V-->>C: undefined (valid)
|
|
61
|
+
* end
|
|
62
|
+
*
|
|
21
63
|
* @category Validators
|
|
22
64
|
*/
|
|
23
65
|
let MinValidator = class MinValidator extends Validator {
|
|
@@ -25,12 +67,16 @@ let MinValidator = class MinValidator extends Validator {
|
|
|
25
67
|
super(message, "number", "Date", "string");
|
|
26
68
|
}
|
|
27
69
|
/**
|
|
28
|
-
* @
|
|
70
|
+
* @description Checks if a value is greater than or equal to a minimum
|
|
71
|
+
* @summary Validates that the provided value is not less than the minimum value
|
|
72
|
+
* specified in the options. For dates, it performs chronological comparison,
|
|
73
|
+
* converting string representations to Date objects if necessary. For numbers
|
|
74
|
+
* and strings, it performs direct comparison.
|
|
29
75
|
*
|
|
30
|
-
* @param {string} value
|
|
31
|
-
* @param {
|
|
76
|
+
* @param {number | Date | string} value - The value to validate
|
|
77
|
+
* @param {MinValidatorOptions} options - Configuration options containing the minimum value
|
|
32
78
|
*
|
|
33
|
-
* @return {string | undefined}
|
|
79
|
+
* @return {string | undefined} Error message if validation fails, undefined if validation passes
|
|
34
80
|
*
|
|
35
81
|
* @override
|
|
36
82
|
*
|
|
@@ -55,4 +101,4 @@ MinValidator = __decorate([
|
|
|
55
101
|
__metadata("design:paramtypes", [String])
|
|
56
102
|
], MinValidator);
|
|
57
103
|
export { MinValidator };
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWluVmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3ZhbGlkYXRpb24vVmFsaWRhdG9ycy9NaW5WYWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN4QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHekM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1ERztBQUVJLElBQU0sWUFBWSxHQUFsQixNQUFNLFlBQWEsU0FBUSxTQUE4QjtJQUM5RCxZQUFZLFVBQWtCLHNCQUFzQixDQUFDLEdBQUc7UUFDdEQsS0FBSyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7O09BZUc7SUFDSSxTQUFTLENBQ2QsS0FBNkIsRUFDN0IsT0FBNEI7UUFFNUIsSUFBSSxPQUFPLEtBQUssS0FBSyxXQUFXO1lBQUUsT0FBTztRQUV6QyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQ3RCLElBQUksS0FBSyxZQUFZLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxZQUFZLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDcEQsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3BCLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUNqRCxDQUFDO1FBQ0QsT0FBTyxLQUFLLEdBQUcsR0FBRztZQUNoQixDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDO1lBQ3ZELENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDaEIsQ0FBQztDQUNGLENBQUE7QUFyQ1ksWUFBWTtJQUR4QixTQUFTLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQzs7R0FDakIsWUFBWSxDQXFDeEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWYWxpZGF0b3IgfSBmcm9tIFwiLi9WYWxpZGF0b3JcIjtcbmltcG9ydCB7IERFRkFVTFRfRVJST1JfTUVTU0FHRVMsIFZhbGlkYXRpb25LZXlzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyB2YWxpZGF0b3IgfSBmcm9tIFwiLi9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBNaW5WYWxpZGF0b3JPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFZhbGlkYXRvciBmb3IgY2hlY2tpbmcgaWYgYSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYSBtaW5pbXVtXG4gKiBAc3VtbWFyeSBUaGUgTWluVmFsaWRhdG9yIGNoZWNrcyBpZiBhIG51bWVyaWMgdmFsdWUsIGRhdGUsIG9yIHN0cmluZyBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG9cbiAqIGEgc3BlY2lmaWVkIG1pbmltdW0gdmFsdWUuIEl0IHN1cHBvcnRzIGNvbXBhcmluZyBudW1iZXJzIGRpcmVjdGx5LCBkYXRlcyBjaHJvbm9sb2dpY2FsbHksXG4gKiBhbmQgc3RyaW5ncyBsZXhpY29ncmFwaGljYWxseS4gVGhpcyB2YWxpZGF0b3IgaXMgdHlwaWNhbGx5IHVzZWQgd2l0aCB0aGUgQG1pbiBkZWNvcmF0b3IuXG4gKiBcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZV0gLSBDdXN0b20gZXJyb3IgbWVzc2FnZSB0byBkaXNwbGF5IHdoZW4gdmFsaWRhdGlvbiBmYWlscywgZGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfRVJST1JfTUVTU0FHRVMjTUlOfVxuICogXG4gKiBAY2xhc3MgTWluVmFsaWRhdG9yXG4gKiBAZXh0ZW5kcyBWYWxpZGF0b3JcbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIENyZWF0ZSBhIG1pbiB2YWxpZGF0b3Igd2l0aCBkZWZhdWx0IGVycm9yIG1lc3NhZ2VcbiAqIGNvbnN0IG1pblZhbGlkYXRvciA9IG5ldyBNaW5WYWxpZGF0b3IoKTtcbiAqIFxuICogLy8gQ3JlYXRlIGEgbWluIHZhbGlkYXRvciB3aXRoIGN1c3RvbSBlcnJvciBtZXNzYWdlXG4gKiBjb25zdCBjdXN0b21NaW5WYWxpZGF0b3IgPSBuZXcgTWluVmFsaWRhdG9yKFwiVmFsdWUgbXVzdCBiZSBhdCBsZWFzdCB7MH1cIik7XG4gKiBcbiAqIC8vIFZhbGlkYXRlIGEgbnVtYmVyXG4gKiBjb25zdCBudW1PcHRpb25zID0geyBtaW46IDEwLCBtZXNzYWdlOiBcIk51bWJlciB0b28gc21hbGxcIiB9O1xuICogY29uc3QgbnVtUmVzdWx0ID0gbWluVmFsaWRhdG9yLmhhc0Vycm9ycyg1MCwgbnVtT3B0aW9ucyk7IC8vIHVuZGVmaW5lZCAodmFsaWQpXG4gKiBjb25zdCBpbnZhbGlkTnVtUmVzdWx0ID0gbWluVmFsaWRhdG9yLmhhc0Vycm9ycyg1LCBudW1PcHRpb25zKTsgLy8gUmV0dXJucyBlcnJvciBtZXNzYWdlIChpbnZhbGlkKVxuICogXG4gKiAvLyBWYWxpZGF0ZSBhIGRhdGVcbiAqIGNvbnN0IGRhdGVPcHRpb25zID0geyBtaW46IG5ldyBEYXRlKDIwMjMsIDAsIDEpIH07XG4gKiBjb25zdCBkYXRlUmVzdWx0ID0gbWluVmFsaWRhdG9yLmhhc0Vycm9ycyhuZXcgRGF0ZSgyMDIzLCA1LCAxNSksIGRhdGVPcHRpb25zKTsgLy8gdW5kZWZpbmVkICh2YWxpZClcbiAqIGBgYFxuICogXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IEMgYXMgQ2xpZW50XG4gKiAgIHBhcnRpY2lwYW50IFYgYXMgTWluVmFsaWRhdG9yXG4gKiAgIFxuICogICBDLT4+VjogbmV3IE1pblZhbGlkYXRvcihtZXNzYWdlKVxuICogICBDLT4+VjogaGFzRXJyb3JzKHZhbHVlLCBvcHRpb25zKVxuICogICBhbHQgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKiAgICAgVi0tPj5DOiB1bmRlZmluZWQgKHZhbGlkKVxuICogICBlbHNlIHZhbHVlIGlzIERhdGUgYW5kIG1pbiBpcyBub3QgRGF0ZVxuICogICAgIFYtPj5WOiBDb252ZXJ0IG1pbiB0byBEYXRlXG4gKiAgICAgYWx0IGNvbnZlcnNpb24gZmFpbHNcbiAqICAgICAgIFYtLT4+QzogRXJyb3I6IEludmFsaWQgTWluIHBhcmFtXG4gKiAgICAgZW5kXG4gKiAgIGVuZFxuICogICBhbHQgdmFsdWUgPCBtaW5cbiAqICAgICBWLS0+PkM6IEVycm9yIG1lc3NhZ2VcbiAqICAgZWxzZSB2YWx1ZSA+PSBtaW5cbiAqICAgICBWLS0+PkM6IHVuZGVmaW5lZCAodmFsaWQpXG4gKiAgIGVuZFxuICogXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdG9yc1xuICovXG5AdmFsaWRhdG9yKFZhbGlkYXRpb25LZXlzLk1JTilcbmV4cG9ydCBjbGFzcyBNaW5WYWxpZGF0b3IgZXh0ZW5kcyBWYWxpZGF0b3I8TWluVmFsaWRhdG9yT3B0aW9ucz4ge1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcgPSBERUZBVUxUX0VSUk9SX01FU1NBR0VTLk1JTikge1xuICAgIHN1cGVyKG1lc3NhZ2UsIFwibnVtYmVyXCIsIFwiRGF0ZVwiLCBcInN0cmluZ1wiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ2hlY2tzIGlmIGEgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGEgbWluaW11bVxuICAgKiBAc3VtbWFyeSBWYWxpZGF0ZXMgdGhhdCB0aGUgcHJvdmlkZWQgdmFsdWUgaXMgbm90IGxlc3MgdGhhbiB0aGUgbWluaW11bSB2YWx1ZVxuICAgKiBzcGVjaWZpZWQgaW4gdGhlIG9wdGlvbnMuIEZvciBkYXRlcywgaXQgcGVyZm9ybXMgY2hyb25vbG9naWNhbCBjb21wYXJpc29uLFxuICAgKiBjb252ZXJ0aW5nIHN0cmluZyByZXByZXNlbnRhdGlvbnMgdG8gRGF0ZSBvYmplY3RzIGlmIG5lY2Vzc2FyeS4gRm9yIG51bWJlcnNcbiAgICogYW5kIHN0cmluZ3MsIGl0IHBlcmZvcm1zIGRpcmVjdCBjb21wYXJpc29uLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IERhdGUgfCBzdHJpbmd9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIHZhbGlkYXRlXG4gICAqIEBwYXJhbSB7TWluVmFsaWRhdG9yT3B0aW9uc30gb3B0aW9ucyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBjb250YWluaW5nIHRoZSBtaW5pbXVtIHZhbHVlXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZyB8IHVuZGVmaW5lZH0gRXJyb3IgbWVzc2FnZSBpZiB2YWxpZGF0aW9uIGZhaWxzLCB1bmRlZmluZWQgaWYgdmFsaWRhdGlvbiBwYXNzZXNcbiAgICpcbiAgICogQG92ZXJyaWRlXG4gICAqXG4gICAqIEBzZWUgVmFsaWRhdG9yI2hhc0Vycm9yc1xuICAgKi9cbiAgcHVibGljIGhhc0Vycm9ycyhcbiAgICB2YWx1ZTogbnVtYmVyIHwgRGF0ZSB8IHN0cmluZyxcbiAgICBvcHRpb25zOiBNaW5WYWxpZGF0b3JPcHRpb25zXG4gICk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xuXG4gICAgbGV0IHsgbWluIH0gPSBvcHRpb25zO1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgIShtaW4gaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgbWluID0gbmV3IERhdGUobWluKTtcbiAgICAgIGlmIChOdW1iZXIuaXNOYU4obWluLmdldERhdGUoKSkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgTWluIHBhcmFtIGRlZmluZWRcIik7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZSA8IG1pblxuICAgICAgPyB0aGlzLmdldE1lc3NhZ2Uob3B0aW9ucy5tZXNzYWdlIHx8IHRoaXMubWVzc2FnZSwgbWluKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -48,4 +48,4 @@ PasswordValidator = __decorate([
|
|
|
48
48
|
__metadata("design:paramtypes", [Object])
|
|
49
49
|
], PasswordValidator);
|
|
50
50
|
export { PasswordValidator };
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFzc3dvcmRWYWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdmFsaWRhdGlvbi9WYWxpZGF0b3JzL1Bhc3N3b3JkVmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUd6Qzs7Ozs7Ozs7O0dBU0c7QUFFSSxJQUFNLGlCQUFpQixHQUF2QixNQUFNLGlCQUFrQixTQUFRLGdCQUFnQjtJQUNyRCxZQUFZLE9BQU8sR0FBRyxzQkFBc0IsQ0FBQyxRQUFRO1FBQ25ELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDYSxTQUFTLENBQ3ZCLEtBQWEsRUFDYixVQUFtQyxFQUFFO1FBRXJDLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUU7WUFDNUIsR0FBRyxPQUFPO1lBQ1YsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU87U0FDekMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGLENBQUE7QUExQlksaUJBQWlCO0lBRDdCLFNBQVMsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDOztHQUN0QixpQkFBaUIsQ0EwQjdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGF0dGVyblZhbGlkYXRvciB9IGZyb20gXCIuL1BhdHRlcm5WYWxpZGF0b3JcIjtcbmltcG9ydCB7IERFRkFVTFRfRVJST1JfTUVTU0FHRVMsIFZhbGlkYXRpb25LZXlzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyB2YWxpZGF0b3IgfSBmcm9tIFwiLi9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBQYXR0ZXJuVmFsaWRhdG9yT3B0aW9ucyB9IGZyb20gXCIuLi90eXBlc1wiO1xuXG4vKipcbiAqIEBzdW1tYXJ5IEhhbmRsZXMgUGFzc3dvcmQgVmFsaWRhdGlvblxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbZXJyb3JNZXNzYWdlXSBkZWZhdWx0cyB0byB7QGxpbmsgREVGQVVMVF9FUlJPUl9NRVNTQUdFUyNQQVNTV09SRH1cbiAqXG4gKiBAY2xhc3MgUGFzc3dvcmRWYWxpZGF0b3JcbiAqIEBleHRlbmRzIFBhdHRlcm5WYWxpZGF0b3JcbiAqXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdG9yc1xuICovXG5AdmFsaWRhdG9yKFZhbGlkYXRpb25LZXlzLlBBU1NXT1JEKVxuZXhwb3J0IGNsYXNzIFBhc3N3b3JkVmFsaWRhdG9yIGV4dGVuZHMgUGF0dGVyblZhbGlkYXRvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UgPSBERUZBVUxUX0VSUk9SX01FU1NBR0VTLlBBU1NXT1JEKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgVmFsaWRhdGVzIGEgbW9kZWxcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gICAqIEBwYXJhbSB7UGF0dGVyblZhbGlkYXRvck9wdGlvbnN9IFtvcHRpb25zPXt9XVxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmcgfCB1bmRlZmluZWR9XG4gICAqXG4gICAqIEBvdmVycmlkZVxuICAgKlxuICAgKiBAc2VlIFBhdHRlcm5WYWxpZGF0b3IjaGFzRXJyb3JzXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgaGFzRXJyb3JzKFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgb3B0aW9uczogUGF0dGVyblZhbGlkYXRvck9wdGlvbnMgPSB7fVxuICApOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBzdXBlci5oYXNFcnJvcnModmFsdWUsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBtZXNzYWdlOiBvcHRpb25zLm1lc3NhZ2UgfHwgdGhpcy5tZXNzYWdlLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -1,33 +1,99 @@
|
|
|
1
1
|
import { Validator } from "./Validator";
|
|
2
2
|
import { PatternValidatorOptions } from "../types";
|
|
3
|
+
/**
|
|
4
|
+
* @description Regular expression for parsing string patterns with flags
|
|
5
|
+
* @summary This regular expression is used to parse string patterns in the format "/pattern/flags".
|
|
6
|
+
* It captures the pattern and flags separately, allowing the creation of a RegExp object
|
|
7
|
+
* with the appropriate flags.
|
|
8
|
+
*
|
|
9
|
+
* @const {RegExp}
|
|
10
|
+
* @memberOf module:decorator-validation
|
|
11
|
+
* @category Validation
|
|
12
|
+
*/
|
|
3
13
|
export declare const regexpParser: RegExp;
|
|
4
14
|
/**
|
|
5
|
-
* @
|
|
15
|
+
* @description Validator for checking if a string matches a regular expression pattern
|
|
16
|
+
* @summary The PatternValidator checks if a string value matches a specified regular expression pattern.
|
|
17
|
+
* It supports both RegExp objects and string representations of patterns, including those with flags.
|
|
18
|
+
* This validator is the foundation for specialized validators like EmailValidator and URLValidator,
|
|
19
|
+
* and is typically used with the @pattern decorator.
|
|
6
20
|
*
|
|
7
|
-
* @param {string} [
|
|
8
|
-
* @param {string} [message] defaults to {@link DEFAULT_ERROR_MESSAGES#PATTERN}
|
|
21
|
+
* @param {string} [message] - Custom error message to display when validation fails, defaults to {@link DEFAULT_ERROR_MESSAGES#PATTERN}
|
|
9
22
|
*
|
|
10
23
|
* @class PatternValidator
|
|
11
24
|
* @extends Validator
|
|
12
25
|
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* // Create a pattern validator with default error message
|
|
29
|
+
* const patternValidator = new PatternValidator();
|
|
30
|
+
*
|
|
31
|
+
* // Create a pattern validator with custom error message
|
|
32
|
+
* const customPatternValidator = new PatternValidator("Value must match the required format");
|
|
33
|
+
*
|
|
34
|
+
* // Validate using a RegExp object
|
|
35
|
+
* const regexOptions = { pattern: /^[A-Z][a-z]+$/ };
|
|
36
|
+
* patternValidator.hasErrors("Hello", regexOptions); // undefined (valid)
|
|
37
|
+
* patternValidator.hasErrors("hello", regexOptions); // Returns error message (invalid)
|
|
38
|
+
*
|
|
39
|
+
* // Validate using a string pattern
|
|
40
|
+
* const stringOptions = { pattern: "^\\d{3}-\\d{2}-\\d{4}$" };
|
|
41
|
+
* patternValidator.hasErrors("123-45-6789", stringOptions); // undefined (valid)
|
|
42
|
+
*
|
|
43
|
+
* // Validate using a string pattern with flags
|
|
44
|
+
* const flagOptions = { pattern: "/^hello$/i" };
|
|
45
|
+
* patternValidator.hasErrors("Hello", flagOptions); // undefined (valid)
|
|
46
|
+
* ```
|
|
47
|
+
*
|
|
48
|
+
* @mermaid
|
|
49
|
+
* sequenceDiagram
|
|
50
|
+
* participant C as Client
|
|
51
|
+
* participant V as PatternValidator
|
|
52
|
+
*
|
|
53
|
+
* C->>V: new PatternValidator(message)
|
|
54
|
+
* C->>V: hasErrors(value, options)
|
|
55
|
+
* alt value is empty
|
|
56
|
+
* V-->>C: undefined (valid)
|
|
57
|
+
* else pattern is missing
|
|
58
|
+
* V-->>C: Error: Missing Pattern
|
|
59
|
+
* else pattern is string
|
|
60
|
+
* V->>V: getPattern(pattern)
|
|
61
|
+
* end
|
|
62
|
+
* V->>V: Reset pattern.lastIndex
|
|
63
|
+
* V->>V: Test value against pattern
|
|
64
|
+
* alt pattern test passes
|
|
65
|
+
* V-->>C: undefined (valid)
|
|
66
|
+
* else pattern test fails
|
|
67
|
+
* V-->>C: Error message
|
|
68
|
+
* end
|
|
69
|
+
*
|
|
13
70
|
* @category Validators
|
|
14
71
|
*/
|
|
15
72
|
export declare class PatternValidator extends Validator<PatternValidatorOptions> {
|
|
16
73
|
constructor(message?: string);
|
|
17
74
|
/**
|
|
18
|
-
* @
|
|
75
|
+
* @description Converts a string pattern to a RegExp object
|
|
76
|
+
* @summary Parses a string representation of a regular expression and converts it to a RegExp object.
|
|
77
|
+
* It handles both simple string patterns and patterns with flags in the format "/pattern/flags".
|
|
19
78
|
*
|
|
20
|
-
* @param {string} pattern
|
|
79
|
+
* @param {string} pattern - The string pattern to convert
|
|
80
|
+
* @return {RegExp} A RegExp object created from the string pattern
|
|
21
81
|
* @private
|
|
22
82
|
*/
|
|
23
83
|
private getPattern;
|
|
24
84
|
/**
|
|
25
|
-
* @
|
|
85
|
+
* @description Checks if a string matches a regular expression pattern
|
|
86
|
+
* @summary Validates that the provided string matches the pattern specified in the options.
|
|
87
|
+
* If the pattern is provided as a string, it's converted to a RegExp object using the getPattern method.
|
|
88
|
+
* The method resets the pattern's lastIndex property to ensure consistent validation results
|
|
89
|
+
* for patterns with the global flag.
|
|
90
|
+
*
|
|
91
|
+
* @param {string} value - The string to validate against the pattern
|
|
92
|
+
* @param {PatternValidatorOptions} options - Configuration options containing the pattern
|
|
26
93
|
*
|
|
27
|
-
* @
|
|
28
|
-
* @param {PatternValidatorOptions} options
|
|
94
|
+
* @return {string | undefined} Error message if validation fails, undefined if validation passes
|
|
29
95
|
*
|
|
30
|
-
* @
|
|
96
|
+
* @throws {Error} If no pattern is provided in the options
|
|
31
97
|
*
|
|
32
98
|
* @override
|
|
33
99
|
*
|
|
@@ -10,16 +10,73 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
10
10
|
import { Validator } from "./Validator";
|
|
11
11
|
import { DEFAULT_ERROR_MESSAGES, ValidationKeys } from "./constants";
|
|
12
12
|
import { validator } from "./decorators";
|
|
13
|
+
/**
|
|
14
|
+
* @description Regular expression for parsing string patterns with flags
|
|
15
|
+
* @summary This regular expression is used to parse string patterns in the format "/pattern/flags".
|
|
16
|
+
* It captures the pattern and flags separately, allowing the creation of a RegExp object
|
|
17
|
+
* with the appropriate flags.
|
|
18
|
+
*
|
|
19
|
+
* @const {RegExp}
|
|
20
|
+
* @memberOf module:decorator-validation
|
|
21
|
+
* @category Validation
|
|
22
|
+
*/
|
|
13
23
|
export const regexpParser = new RegExp("^/(.+)/([gimus]*)$");
|
|
14
24
|
/**
|
|
15
|
-
* @
|
|
25
|
+
* @description Validator for checking if a string matches a regular expression pattern
|
|
26
|
+
* @summary The PatternValidator checks if a string value matches a specified regular expression pattern.
|
|
27
|
+
* It supports both RegExp objects and string representations of patterns, including those with flags.
|
|
28
|
+
* This validator is the foundation for specialized validators like EmailValidator and URLValidator,
|
|
29
|
+
* and is typically used with the @pattern decorator.
|
|
16
30
|
*
|
|
17
|
-
* @param {string} [
|
|
18
|
-
* @param {string} [message] defaults to {@link DEFAULT_ERROR_MESSAGES#PATTERN}
|
|
31
|
+
* @param {string} [message] - Custom error message to display when validation fails, defaults to {@link DEFAULT_ERROR_MESSAGES#PATTERN}
|
|
19
32
|
*
|
|
20
33
|
* @class PatternValidator
|
|
21
34
|
* @extends Validator
|
|
22
35
|
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* // Create a pattern validator with default error message
|
|
39
|
+
* const patternValidator = new PatternValidator();
|
|
40
|
+
*
|
|
41
|
+
* // Create a pattern validator with custom error message
|
|
42
|
+
* const customPatternValidator = new PatternValidator("Value must match the required format");
|
|
43
|
+
*
|
|
44
|
+
* // Validate using a RegExp object
|
|
45
|
+
* const regexOptions = { pattern: /^[A-Z][a-z]+$/ };
|
|
46
|
+
* patternValidator.hasErrors("Hello", regexOptions); // undefined (valid)
|
|
47
|
+
* patternValidator.hasErrors("hello", regexOptions); // Returns error message (invalid)
|
|
48
|
+
*
|
|
49
|
+
* // Validate using a string pattern
|
|
50
|
+
* const stringOptions = { pattern: "^\\d{3}-\\d{2}-\\d{4}$" };
|
|
51
|
+
* patternValidator.hasErrors("123-45-6789", stringOptions); // undefined (valid)
|
|
52
|
+
*
|
|
53
|
+
* // Validate using a string pattern with flags
|
|
54
|
+
* const flagOptions = { pattern: "/^hello$/i" };
|
|
55
|
+
* patternValidator.hasErrors("Hello", flagOptions); // undefined (valid)
|
|
56
|
+
* ```
|
|
57
|
+
*
|
|
58
|
+
* @mermaid
|
|
59
|
+
* sequenceDiagram
|
|
60
|
+
* participant C as Client
|
|
61
|
+
* participant V as PatternValidator
|
|
62
|
+
*
|
|
63
|
+
* C->>V: new PatternValidator(message)
|
|
64
|
+
* C->>V: hasErrors(value, options)
|
|
65
|
+
* alt value is empty
|
|
66
|
+
* V-->>C: undefined (valid)
|
|
67
|
+
* else pattern is missing
|
|
68
|
+
* V-->>C: Error: Missing Pattern
|
|
69
|
+
* else pattern is string
|
|
70
|
+
* V->>V: getPattern(pattern)
|
|
71
|
+
* end
|
|
72
|
+
* V->>V: Reset pattern.lastIndex
|
|
73
|
+
* V->>V: Test value against pattern
|
|
74
|
+
* alt pattern test passes
|
|
75
|
+
* V-->>C: undefined (valid)
|
|
76
|
+
* else pattern test fails
|
|
77
|
+
* V-->>C: Error message
|
|
78
|
+
* end
|
|
79
|
+
*
|
|
23
80
|
* @category Validators
|
|
24
81
|
*/
|
|
25
82
|
let PatternValidator = class PatternValidator extends Validator {
|
|
@@ -27,9 +84,12 @@ let PatternValidator = class PatternValidator extends Validator {
|
|
|
27
84
|
super(message, "string");
|
|
28
85
|
}
|
|
29
86
|
/**
|
|
30
|
-
* @
|
|
87
|
+
* @description Converts a string pattern to a RegExp object
|
|
88
|
+
* @summary Parses a string representation of a regular expression and converts it to a RegExp object.
|
|
89
|
+
* It handles both simple string patterns and patterns with flags in the format "/pattern/flags".
|
|
31
90
|
*
|
|
32
|
-
* @param {string} pattern
|
|
91
|
+
* @param {string} pattern - The string pattern to convert
|
|
92
|
+
* @return {RegExp} A RegExp object created from the string pattern
|
|
33
93
|
* @private
|
|
34
94
|
*/
|
|
35
95
|
getPattern(pattern) {
|
|
@@ -39,12 +99,18 @@ let PatternValidator = class PatternValidator extends Validator {
|
|
|
39
99
|
return new RegExp(match[1], match[2]);
|
|
40
100
|
}
|
|
41
101
|
/**
|
|
42
|
-
* @
|
|
102
|
+
* @description Checks if a string matches a regular expression pattern
|
|
103
|
+
* @summary Validates that the provided string matches the pattern specified in the options.
|
|
104
|
+
* If the pattern is provided as a string, it's converted to a RegExp object using the getPattern method.
|
|
105
|
+
* The method resets the pattern's lastIndex property to ensure consistent validation results
|
|
106
|
+
* for patterns with the global flag.
|
|
107
|
+
*
|
|
108
|
+
* @param {string} value - The string to validate against the pattern
|
|
109
|
+
* @param {PatternValidatorOptions} options - Configuration options containing the pattern
|
|
43
110
|
*
|
|
44
|
-
* @
|
|
45
|
-
* @param {PatternValidatorOptions} options
|
|
111
|
+
* @return {string | undefined} Error message if validation fails, undefined if validation passes
|
|
46
112
|
*
|
|
47
|
-
* @
|
|
113
|
+
* @throws {Error} If no pattern is provided in the options
|
|
48
114
|
*
|
|
49
115
|
* @override
|
|
50
116
|
*
|
|
@@ -68,4 +134,4 @@ PatternValidator = __decorate([
|
|
|
68
134
|
__metadata("design:paramtypes", [String])
|
|
69
135
|
], PatternValidator);
|
|
70
136
|
export { PatternValidator };
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
137
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGF0dGVyblZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy92YWxpZGF0aW9uL1ZhbGlkYXRvcnMvUGF0dGVyblZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUd6Qzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQVcsSUFBSSxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUVyRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeURHO0FBRUksSUFBTSxnQkFBZ0IsR0FBdEIsTUFBTSxnQkFBaUIsU0FBUSxTQUFrQztJQUN0RSxZQUFZLFVBQWtCLHNCQUFzQixDQUFDLE9BQU87UUFDMUQsS0FBSyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSyxVQUFVLENBQUMsT0FBZTtRQUNoQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7WUFBRSxPQUFPLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVELE1BQU0sS0FBSyxHQUFRLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDL0MsT0FBTyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7OztPQWlCRztJQUNJLFNBQVMsQ0FDZCxLQUFhLEVBQ2IsT0FBZ0M7UUFFaEMsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPO1FBRW5CLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDMUIsSUFBSSxDQUFDLE9BQU87WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDakQsT0FBTyxHQUFHLE9BQU8sT0FBTyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQzNFLE9BQU8sQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMseURBQXlEO1FBQ2hGLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUN6QixDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDbEQsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNoQixDQUFDO0NBQ0YsQ0FBQTtBQXBEWSxnQkFBZ0I7SUFENUIsU0FBUyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUM7O0dBQ3JCLGdCQUFnQixDQW9ENUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWYWxpZGF0b3IgfSBmcm9tIFwiLi9WYWxpZGF0b3JcIjtcbmltcG9ydCB7IERFRkFVTFRfRVJST1JfTUVTU0FHRVMsIFZhbGlkYXRpb25LZXlzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyB2YWxpZGF0b3IgfSBmcm9tIFwiLi9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBQYXR0ZXJuVmFsaWRhdG9yT3B0aW9ucyB9IGZyb20gXCIuLi90eXBlc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZWd1bGFyIGV4cHJlc3Npb24gZm9yIHBhcnNpbmcgc3RyaW5nIHBhdHRlcm5zIHdpdGggZmxhZ3NcbiAqIEBzdW1tYXJ5IFRoaXMgcmVndWxhciBleHByZXNzaW9uIGlzIHVzZWQgdG8gcGFyc2Ugc3RyaW5nIHBhdHRlcm5zIGluIHRoZSBmb3JtYXQgXCIvcGF0dGVybi9mbGFnc1wiLlxuICogSXQgY2FwdHVyZXMgdGhlIHBhdHRlcm4gYW5kIGZsYWdzIHNlcGFyYXRlbHksIGFsbG93aW5nIHRoZSBjcmVhdGlvbiBvZiBhIFJlZ0V4cCBvYmplY3RcbiAqIHdpdGggdGhlIGFwcHJvcHJpYXRlIGZsYWdzLlxuICpcbiAqIEBjb25zdCB7UmVnRXhwfVxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvblxuICogQGNhdGVnb3J5IFZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IHJlZ2V4cFBhcnNlcjogUmVnRXhwID0gbmV3IFJlZ0V4cChcIl4vKC4rKS8oW2dpbXVzXSopJFwiKTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVmFsaWRhdG9yIGZvciBjaGVja2luZyBpZiBhIHN0cmluZyBtYXRjaGVzIGEgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm5cbiAqIEBzdW1tYXJ5IFRoZSBQYXR0ZXJuVmFsaWRhdG9yIGNoZWNrcyBpZiBhIHN0cmluZyB2YWx1ZSBtYXRjaGVzIGEgc3BlY2lmaWVkIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuLlxuICogSXQgc3VwcG9ydHMgYm90aCBSZWdFeHAgb2JqZWN0cyBhbmQgc3RyaW5nIHJlcHJlc2VudGF0aW9ucyBvZiBwYXR0ZXJucywgaW5jbHVkaW5nIHRob3NlIHdpdGggZmxhZ3MuXG4gKiBUaGlzIHZhbGlkYXRvciBpcyB0aGUgZm91bmRhdGlvbiBmb3Igc3BlY2lhbGl6ZWQgdmFsaWRhdG9ycyBsaWtlIEVtYWlsVmFsaWRhdG9yIGFuZCBVUkxWYWxpZGF0b3IsXG4gKiBhbmQgaXMgdHlwaWNhbGx5IHVzZWQgd2l0aCB0aGUgQHBhdHRlcm4gZGVjb3JhdG9yLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZV0gLSBDdXN0b20gZXJyb3IgbWVzc2FnZSB0byBkaXNwbGF5IHdoZW4gdmFsaWRhdGlvbiBmYWlscywgZGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfRVJST1JfTUVTU0FHRVMjUEFUVEVSTn1cbiAqXG4gKiBAY2xhc3MgUGF0dGVyblZhbGlkYXRvclxuICogQGV4dGVuZHMgVmFsaWRhdG9yXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIENyZWF0ZSBhIHBhdHRlcm4gdmFsaWRhdG9yIHdpdGggZGVmYXVsdCBlcnJvciBtZXNzYWdlXG4gKiBjb25zdCBwYXR0ZXJuVmFsaWRhdG9yID0gbmV3IFBhdHRlcm5WYWxpZGF0b3IoKTtcbiAqXG4gKiAvLyBDcmVhdGUgYSBwYXR0ZXJuIHZhbGlkYXRvciB3aXRoIGN1c3RvbSBlcnJvciBtZXNzYWdlXG4gKiBjb25zdCBjdXN0b21QYXR0ZXJuVmFsaWRhdG9yID0gbmV3IFBhdHRlcm5WYWxpZGF0b3IoXCJWYWx1ZSBtdXN0IG1hdGNoIHRoZSByZXF1aXJlZCBmb3JtYXRcIik7XG4gKlxuICogLy8gVmFsaWRhdGUgdXNpbmcgYSBSZWdFeHAgb2JqZWN0XG4gKiBjb25zdCByZWdleE9wdGlvbnMgPSB7IHBhdHRlcm46IC9eW0EtWl1bYS16XSskLyB9O1xuICogcGF0dGVyblZhbGlkYXRvci5oYXNFcnJvcnMoXCJIZWxsb1wiLCByZWdleE9wdGlvbnMpOyAvLyB1bmRlZmluZWQgKHZhbGlkKVxuICogcGF0dGVyblZhbGlkYXRvci5oYXNFcnJvcnMoXCJoZWxsb1wiLCByZWdleE9wdGlvbnMpOyAvLyBSZXR1cm5zIGVycm9yIG1lc3NhZ2UgKGludmFsaWQpXG4gKlxuICogLy8gVmFsaWRhdGUgdXNpbmcgYSBzdHJpbmcgcGF0dGVyblxuICogY29uc3Qgc3RyaW5nT3B0aW9ucyA9IHsgcGF0dGVybjogXCJeXFxcXGR7M30tXFxcXGR7Mn0tXFxcXGR7NH0kXCIgfTtcbiAqIHBhdHRlcm5WYWxpZGF0b3IuaGFzRXJyb3JzKFwiMTIzLTQ1LTY3ODlcIiwgc3RyaW5nT3B0aW9ucyk7IC8vIHVuZGVmaW5lZCAodmFsaWQpXG4gKlxuICogLy8gVmFsaWRhdGUgdXNpbmcgYSBzdHJpbmcgcGF0dGVybiB3aXRoIGZsYWdzXG4gKiBjb25zdCBmbGFnT3B0aW9ucyA9IHsgcGF0dGVybjogXCIvXmhlbGxvJC9pXCIgfTtcbiAqIHBhdHRlcm5WYWxpZGF0b3IuaGFzRXJyb3JzKFwiSGVsbG9cIiwgZmxhZ09wdGlvbnMpOyAvLyB1bmRlZmluZWQgKHZhbGlkKVxuICogYGBgXG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDIGFzIENsaWVudFxuICogICBwYXJ0aWNpcGFudCBWIGFzIFBhdHRlcm5WYWxpZGF0b3JcbiAqXG4gKiAgIEMtPj5WOiBuZXcgUGF0dGVyblZhbGlkYXRvcihtZXNzYWdlKVxuICogICBDLT4+VjogaGFzRXJyb3JzKHZhbHVlLCBvcHRpb25zKVxuICogICBhbHQgdmFsdWUgaXMgZW1wdHlcbiAqICAgICBWLS0+PkM6IHVuZGVmaW5lZCAodmFsaWQpXG4gKiAgIGVsc2UgcGF0dGVybiBpcyBtaXNzaW5nXG4gKiAgICAgVi0tPj5DOiBFcnJvcjogTWlzc2luZyBQYXR0ZXJuXG4gKiAgIGVsc2UgcGF0dGVybiBpcyBzdHJpbmdcbiAqICAgICBWLT4+VjogZ2V0UGF0dGVybihwYXR0ZXJuKVxuICogICBlbmRcbiAqICAgVi0+PlY6IFJlc2V0IHBhdHRlcm4ubGFzdEluZGV4XG4gKiAgIFYtPj5WOiBUZXN0IHZhbHVlIGFnYWluc3QgcGF0dGVyblxuICogICBhbHQgcGF0dGVybiB0ZXN0IHBhc3Nlc1xuICogICAgIFYtLT4+QzogdW5kZWZpbmVkICh2YWxpZClcbiAqICAgZWxzZSBwYXR0ZXJuIHRlc3QgZmFpbHNcbiAqICAgICBWLS0+PkM6IEVycm9yIG1lc3NhZ2VcbiAqICAgZW5kXG4gKlxuICogQGNhdGVnb3J5IFZhbGlkYXRvcnNcbiAqL1xuQHZhbGlkYXRvcihWYWxpZGF0aW9uS2V5cy5QQVRURVJOKVxuZXhwb3J0IGNsYXNzIFBhdHRlcm5WYWxpZGF0b3IgZXh0ZW5kcyBWYWxpZGF0b3I8UGF0dGVyblZhbGlkYXRvck9wdGlvbnM+IHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nID0gREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5QQVRURVJOKSB7XG4gICAgc3VwZXIobWVzc2FnZSwgXCJzdHJpbmdcIik7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIGEgc3RyaW5nIHBhdHRlcm4gdG8gYSBSZWdFeHAgb2JqZWN0XG4gICAqIEBzdW1tYXJ5IFBhcnNlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBhbmQgY29udmVydHMgaXQgdG8gYSBSZWdFeHAgb2JqZWN0LlxuICAgKiBJdCBoYW5kbGVzIGJvdGggc2ltcGxlIHN0cmluZyBwYXR0ZXJucyBhbmQgcGF0dGVybnMgd2l0aCBmbGFncyBpbiB0aGUgZm9ybWF0IFwiL3BhdHRlcm4vZmxhZ3NcIi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdHRlcm4gLSBUaGUgc3RyaW5nIHBhdHRlcm4gdG8gY29udmVydFxuICAgKiBAcmV0dXJuIHtSZWdFeHB9IEEgUmVnRXhwIG9iamVjdCBjcmVhdGVkIGZyb20gdGhlIHN0cmluZyBwYXR0ZXJuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGdldFBhdHRlcm4ocGF0dGVybjogc3RyaW5nKTogUmVnRXhwIHtcbiAgICBpZiAoIXJlZ2V4cFBhcnNlci50ZXN0KHBhdHRlcm4pKSByZXR1cm4gbmV3IFJlZ0V4cChwYXR0ZXJuKTtcbiAgICBjb25zdCBtYXRjaDogYW55ID0gcGF0dGVybi5tYXRjaChyZWdleHBQYXJzZXIpO1xuICAgIHJldHVybiBuZXcgUmVnRXhwKG1hdGNoWzFdLCBtYXRjaFsyXSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENoZWNrcyBpZiBhIHN0cmluZyBtYXRjaGVzIGEgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm5cbiAgICogQHN1bW1hcnkgVmFsaWRhdGVzIHRoYXQgdGhlIHByb3ZpZGVkIHN0cmluZyBtYXRjaGVzIHRoZSBwYXR0ZXJuIHNwZWNpZmllZCBpbiB0aGUgb3B0aW9ucy5cbiAgICogSWYgdGhlIHBhdHRlcm4gaXMgcHJvdmlkZWQgYXMgYSBzdHJpbmcsIGl0J3MgY29udmVydGVkIHRvIGEgUmVnRXhwIG9iamVjdCB1c2luZyB0aGUgZ2V0UGF0dGVybiBtZXRob2QuXG4gICAqIFRoZSBtZXRob2QgcmVzZXRzIHRoZSBwYXR0ZXJuJ3MgbGFzdEluZGV4IHByb3BlcnR5IHRvIGVuc3VyZSBjb25zaXN0ZW50IHZhbGlkYXRpb24gcmVzdWx0c1xuICAgKiBmb3IgcGF0dGVybnMgd2l0aCB0aGUgZ2xvYmFsIGZsYWcuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAtIFRoZSBzdHJpbmcgdG8gdmFsaWRhdGUgYWdhaW5zdCB0aGUgcGF0dGVyblxuICAgKiBAcGFyYW0ge1BhdHRlcm5WYWxpZGF0b3JPcHRpb25zfSBvcHRpb25zIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGNvbnRhaW5pbmcgdGhlIHBhdHRlcm5cbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nIHwgdW5kZWZpbmVkfSBFcnJvciBtZXNzYWdlIGlmIHZhbGlkYXRpb24gZmFpbHMsIHVuZGVmaW5lZCBpZiB2YWxpZGF0aW9uIHBhc3Nlc1xuICAgKlxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgbm8gcGF0dGVybiBpcyBwcm92aWRlZCBpbiB0aGUgb3B0aW9uc1xuICAgKlxuICAgKiBAb3ZlcnJpZGVcbiAgICpcbiAgICogQHNlZSBWYWxpZGF0b3IjaGFzRXJyb3JzXG4gICAqL1xuICBwdWJsaWMgaGFzRXJyb3JzKFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgb3B0aW9uczogUGF0dGVyblZhbGlkYXRvck9wdGlvbnNcbiAgKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm47XG5cbiAgICBsZXQgeyBwYXR0ZXJuIH0gPSBvcHRpb25zO1xuICAgIGlmICghcGF0dGVybikgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBQYXR0ZXJuXCIpO1xuICAgIHBhdHRlcm4gPSB0eXBlb2YgcGF0dGVybiA9PT0gXCJzdHJpbmdcIiA/IHRoaXMuZ2V0UGF0dGVybihwYXR0ZXJuKSA6IHBhdHRlcm47XG4gICAgcGF0dGVybi5sYXN0SW5kZXggPSAwOyAvLyByZXNldHMgcGF0dGVybiBwb3NpdGlvbiBmb3IgcmVwZWF0IHZhbGlkYXRpb24gcmVxdWVzdHNcbiAgICByZXR1cm4gIXBhdHRlcm4udGVzdCh2YWx1ZSlcbiAgICAgID8gdGhpcy5nZXRNZXNzYWdlKG9wdGlvbnMubWVzc2FnZSB8fCB0aGlzLm1lc3NhZ2UpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
|
|
@@ -1,24 +1,70 @@
|
|
|
1
1
|
import { Validator } from "./Validator";
|
|
2
2
|
import { ValidatorOptions } from "../types";
|
|
3
3
|
/**
|
|
4
|
-
* @
|
|
4
|
+
* @description Validator for checking if a value is present and not empty
|
|
5
|
+
* @summary The RequiredValidator ensures that a value is provided and not empty.
|
|
6
|
+
* It handles different types of values appropriately: for booleans and numbers,
|
|
7
|
+
* it checks if they're undefined; for other types (strings, arrays, objects),
|
|
8
|
+
* it checks if they're falsy. This validator is typically used with the @required decorator
|
|
9
|
+
* and is often the first validation applied to important fields.
|
|
5
10
|
*
|
|
6
|
-
* @param {string} [message] defaults to {@link DEFAULT_ERROR_MESSAGES#REQUIRED}
|
|
11
|
+
* @param {string} [message] - Custom error message to display when validation fails, defaults to {@link DEFAULT_ERROR_MESSAGES#REQUIRED}
|
|
7
12
|
*
|
|
8
13
|
* @class RequiredValidator
|
|
9
14
|
* @extends Validator
|
|
10
15
|
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* // Create a required validator with default error message
|
|
19
|
+
* const requiredValidator = new RequiredValidator();
|
|
20
|
+
*
|
|
21
|
+
* // Create a required validator with custom error message
|
|
22
|
+
* const customRequiredValidator = new RequiredValidator("This field is mandatory");
|
|
23
|
+
*
|
|
24
|
+
* // Validate different types of values
|
|
25
|
+
* requiredValidator.hasErrors("Hello"); // undefined (valid)
|
|
26
|
+
* requiredValidator.hasErrors(""); // Returns error message (invalid)
|
|
27
|
+
* requiredValidator.hasErrors(0); // undefined (valid - 0 is a valid number)
|
|
28
|
+
* requiredValidator.hasErrors(null); // Returns error message (invalid)
|
|
29
|
+
* requiredValidator.hasErrors([]); // undefined (valid - empty array is still an array)
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* @mermaid
|
|
33
|
+
* sequenceDiagram
|
|
34
|
+
* participant C as Client
|
|
35
|
+
* participant V as RequiredValidator
|
|
36
|
+
*
|
|
37
|
+
* C->>V: new RequiredValidator(message)
|
|
38
|
+
* C->>V: hasErrors(value, options)
|
|
39
|
+
* alt typeof value is boolean or number
|
|
40
|
+
* alt value is undefined
|
|
41
|
+
* V-->>C: Error message
|
|
42
|
+
* else value is defined
|
|
43
|
+
* V-->>C: undefined (valid)
|
|
44
|
+
* end
|
|
45
|
+
* else other types
|
|
46
|
+
* alt value is falsy (null, undefined, empty string)
|
|
47
|
+
* V-->>C: Error message
|
|
48
|
+
* else value is truthy
|
|
49
|
+
* V-->>C: undefined (valid)
|
|
50
|
+
* end
|
|
51
|
+
* end
|
|
52
|
+
*
|
|
11
53
|
* @category Validators
|
|
12
54
|
*/
|
|
13
55
|
export declare class RequiredValidator extends Validator {
|
|
14
56
|
constructor(message?: string);
|
|
15
57
|
/**
|
|
16
|
-
* @
|
|
58
|
+
* @description Checks if a value is present and not empty
|
|
59
|
+
* @summary Validates that the provided value exists and is not empty.
|
|
60
|
+
* The validation logic varies by type:
|
|
61
|
+
* - For booleans and numbers: checks if the value is undefined
|
|
62
|
+
* - For other types (strings, arrays, objects): checks if the value is falsy
|
|
17
63
|
*
|
|
18
|
-
* @param {
|
|
19
|
-
* @param {ValidatorOptions} [options={}]
|
|
64
|
+
* @param {any} value - The value to validate
|
|
65
|
+
* @param {ValidatorOptions} [options={}] - Optional configuration options
|
|
20
66
|
*
|
|
21
|
-
* @return {string | undefined}
|
|
67
|
+
* @return {string | undefined} Error message if validation fails, undefined if validation passes
|
|
22
68
|
*
|
|
23
69
|
* @override
|
|
24
70
|
*
|
|
@@ -11,13 +11,55 @@ import { Validator } from "./Validator";
|
|
|
11
11
|
import { DEFAULT_ERROR_MESSAGES, ValidationKeys } from "./constants";
|
|
12
12
|
import { validator } from "./decorators";
|
|
13
13
|
/**
|
|
14
|
-
* @
|
|
14
|
+
* @description Validator for checking if a value is present and not empty
|
|
15
|
+
* @summary The RequiredValidator ensures that a value is provided and not empty.
|
|
16
|
+
* It handles different types of values appropriately: for booleans and numbers,
|
|
17
|
+
* it checks if they're undefined; for other types (strings, arrays, objects),
|
|
18
|
+
* it checks if they're falsy. This validator is typically used with the @required decorator
|
|
19
|
+
* and is often the first validation applied to important fields.
|
|
15
20
|
*
|
|
16
|
-
* @param {string} [message] defaults to {@link DEFAULT_ERROR_MESSAGES#REQUIRED}
|
|
21
|
+
* @param {string} [message] - Custom error message to display when validation fails, defaults to {@link DEFAULT_ERROR_MESSAGES#REQUIRED}
|
|
17
22
|
*
|
|
18
23
|
* @class RequiredValidator
|
|
19
24
|
* @extends Validator
|
|
20
25
|
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* // Create a required validator with default error message
|
|
29
|
+
* const requiredValidator = new RequiredValidator();
|
|
30
|
+
*
|
|
31
|
+
* // Create a required validator with custom error message
|
|
32
|
+
* const customRequiredValidator = new RequiredValidator("This field is mandatory");
|
|
33
|
+
*
|
|
34
|
+
* // Validate different types of values
|
|
35
|
+
* requiredValidator.hasErrors("Hello"); // undefined (valid)
|
|
36
|
+
* requiredValidator.hasErrors(""); // Returns error message (invalid)
|
|
37
|
+
* requiredValidator.hasErrors(0); // undefined (valid - 0 is a valid number)
|
|
38
|
+
* requiredValidator.hasErrors(null); // Returns error message (invalid)
|
|
39
|
+
* requiredValidator.hasErrors([]); // undefined (valid - empty array is still an array)
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* @mermaid
|
|
43
|
+
* sequenceDiagram
|
|
44
|
+
* participant C as Client
|
|
45
|
+
* participant V as RequiredValidator
|
|
46
|
+
*
|
|
47
|
+
* C->>V: new RequiredValidator(message)
|
|
48
|
+
* C->>V: hasErrors(value, options)
|
|
49
|
+
* alt typeof value is boolean or number
|
|
50
|
+
* alt value is undefined
|
|
51
|
+
* V-->>C: Error message
|
|
52
|
+
* else value is defined
|
|
53
|
+
* V-->>C: undefined (valid)
|
|
54
|
+
* end
|
|
55
|
+
* else other types
|
|
56
|
+
* alt value is falsy (null, undefined, empty string)
|
|
57
|
+
* V-->>C: Error message
|
|
58
|
+
* else value is truthy
|
|
59
|
+
* V-->>C: undefined (valid)
|
|
60
|
+
* end
|
|
61
|
+
* end
|
|
62
|
+
*
|
|
21
63
|
* @category Validators
|
|
22
64
|
*/
|
|
23
65
|
let RequiredValidator = class RequiredValidator extends Validator {
|
|
@@ -25,12 +67,16 @@ let RequiredValidator = class RequiredValidator extends Validator {
|
|
|
25
67
|
super(message);
|
|
26
68
|
}
|
|
27
69
|
/**
|
|
28
|
-
* @
|
|
70
|
+
* @description Checks if a value is present and not empty
|
|
71
|
+
* @summary Validates that the provided value exists and is not empty.
|
|
72
|
+
* The validation logic varies by type:
|
|
73
|
+
* - For booleans and numbers: checks if the value is undefined
|
|
74
|
+
* - For other types (strings, arrays, objects): checks if the value is falsy
|
|
29
75
|
*
|
|
30
|
-
* @param {
|
|
31
|
-
* @param {ValidatorOptions} [options={}]
|
|
76
|
+
* @param {any} value - The value to validate
|
|
77
|
+
* @param {ValidatorOptions} [options={}] - Optional configuration options
|
|
32
78
|
*
|
|
33
|
-
* @return {string | undefined}
|
|
79
|
+
* @return {string | undefined} Error message if validation fails, undefined if validation passes
|
|
34
80
|
*
|
|
35
81
|
* @override
|
|
36
82
|
*
|
|
@@ -55,4 +101,4 @@ RequiredValidator = __decorate([
|
|
|
55
101
|
__metadata("design:paramtypes", [String])
|
|
56
102
|
], RequiredValidator);
|
|
57
103
|
export { RequiredValidator };
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVxdWlyZWRWYWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdmFsaWRhdGlvbi9WYWxpZGF0b3JzL1JlcXVpcmVkVmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBR3pDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtREc7QUFFSSxJQUFNLGlCQUFpQixHQUF2QixNQUFNLGlCQUFrQixTQUFRLFNBQVM7SUFDOUMsWUFBWSxVQUFrQixzQkFBc0IsQ0FBQyxRQUFRO1FBQzNELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7OztPQWVHO0lBQ0ksU0FBUyxDQUNkLEtBQVUsRUFDVixVQUE0QixFQUFFO1FBRTlCLFFBQVEsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNyQixLQUFLLFNBQVMsQ0FBQztZQUNmLEtBQUssUUFBUTtnQkFDWCxPQUFPLE9BQU8sS0FBSyxLQUFLLFdBQVc7b0JBQ2pDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQztvQkFDbEQsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNoQjtnQkFDRSxPQUFPLENBQUMsS0FBSztvQkFDWCxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUM7b0JBQ2xELENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDbEIsQ0FBQztJQUNILENBQUM7Q0FDRixDQUFBO0FBckNZLGlCQUFpQjtJQUQ3QixTQUFTLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQzs7R0FDdEIsaUJBQWlCLENBcUM3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZhbGlkYXRvciB9IGZyb20gXCIuL1ZhbGlkYXRvclwiO1xuaW1wb3J0IHsgREVGQVVMVF9FUlJPUl9NRVNTQUdFUywgVmFsaWRhdGlvbktleXMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHZhbGlkYXRvciB9IGZyb20gXCIuL2RlY29yYXRvcnNcIjtcbmltcG9ydCB7IFZhbGlkYXRvck9wdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVmFsaWRhdG9yIGZvciBjaGVja2luZyBpZiBhIHZhbHVlIGlzIHByZXNlbnQgYW5kIG5vdCBlbXB0eVxuICogQHN1bW1hcnkgVGhlIFJlcXVpcmVkVmFsaWRhdG9yIGVuc3VyZXMgdGhhdCBhIHZhbHVlIGlzIHByb3ZpZGVkIGFuZCBub3QgZW1wdHkuXG4gKiBJdCBoYW5kbGVzIGRpZmZlcmVudCB0eXBlcyBvZiB2YWx1ZXMgYXBwcm9wcmlhdGVseTogZm9yIGJvb2xlYW5zIGFuZCBudW1iZXJzLFxuICogaXQgY2hlY2tzIGlmIHRoZXkncmUgdW5kZWZpbmVkOyBmb3Igb3RoZXIgdHlwZXMgKHN0cmluZ3MsIGFycmF5cywgb2JqZWN0cyksXG4gKiBpdCBjaGVja3MgaWYgdGhleSdyZSBmYWxzeS4gVGhpcyB2YWxpZGF0b3IgaXMgdHlwaWNhbGx5IHVzZWQgd2l0aCB0aGUgQHJlcXVpcmVkIGRlY29yYXRvclxuICogYW5kIGlzIG9mdGVuIHRoZSBmaXJzdCB2YWxpZGF0aW9uIGFwcGxpZWQgdG8gaW1wb3J0YW50IGZpZWxkcy5cbiAqIFxuICogQHBhcmFtIHtzdHJpbmd9IFttZXNzYWdlXSAtIEN1c3RvbSBlcnJvciBtZXNzYWdlIHRvIGRpc3BsYXkgd2hlbiB2YWxpZGF0aW9uIGZhaWxzLCBkZWZhdWx0cyB0byB7QGxpbmsgREVGQVVMVF9FUlJPUl9NRVNTQUdFUyNSRVFVSVJFRH1cbiAqIFxuICogQGNsYXNzIFJlcXVpcmVkVmFsaWRhdG9yXG4gKiBAZXh0ZW5kcyBWYWxpZGF0b3JcbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIENyZWF0ZSBhIHJlcXVpcmVkIHZhbGlkYXRvciB3aXRoIGRlZmF1bHQgZXJyb3IgbWVzc2FnZVxuICogY29uc3QgcmVxdWlyZWRWYWxpZGF0b3IgPSBuZXcgUmVxdWlyZWRWYWxpZGF0b3IoKTtcbiAqIFxuICogLy8gQ3JlYXRlIGEgcmVxdWlyZWQgdmFsaWRhdG9yIHdpdGggY3VzdG9tIGVycm9yIG1lc3NhZ2VcbiAqIGNvbnN0IGN1c3RvbVJlcXVpcmVkVmFsaWRhdG9yID0gbmV3IFJlcXVpcmVkVmFsaWRhdG9yKFwiVGhpcyBmaWVsZCBpcyBtYW5kYXRvcnlcIik7XG4gKiBcbiAqIC8vIFZhbGlkYXRlIGRpZmZlcmVudCB0eXBlcyBvZiB2YWx1ZXNcbiAqIHJlcXVpcmVkVmFsaWRhdG9yLmhhc0Vycm9ycyhcIkhlbGxvXCIpOyAvLyB1bmRlZmluZWQgKHZhbGlkKVxuICogcmVxdWlyZWRWYWxpZGF0b3IuaGFzRXJyb3JzKFwiXCIpOyAvLyBSZXR1cm5zIGVycm9yIG1lc3NhZ2UgKGludmFsaWQpXG4gKiByZXF1aXJlZFZhbGlkYXRvci5oYXNFcnJvcnMoMCk7IC8vIHVuZGVmaW5lZCAodmFsaWQgLSAwIGlzIGEgdmFsaWQgbnVtYmVyKVxuICogcmVxdWlyZWRWYWxpZGF0b3IuaGFzRXJyb3JzKG51bGwpOyAvLyBSZXR1cm5zIGVycm9yIG1lc3NhZ2UgKGludmFsaWQpXG4gKiByZXF1aXJlZFZhbGlkYXRvci5oYXNFcnJvcnMoW10pOyAvLyB1bmRlZmluZWQgKHZhbGlkIC0gZW1wdHkgYXJyYXkgaXMgc3RpbGwgYW4gYXJyYXkpXG4gKiBgYGBcbiAqIFxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDIGFzIENsaWVudFxuICogICBwYXJ0aWNpcGFudCBWIGFzIFJlcXVpcmVkVmFsaWRhdG9yXG4gKiAgIFxuICogICBDLT4+VjogbmV3IFJlcXVpcmVkVmFsaWRhdG9yKG1lc3NhZ2UpXG4gKiAgIEMtPj5WOiBoYXNFcnJvcnModmFsdWUsIG9wdGlvbnMpXG4gKiAgIGFsdCB0eXBlb2YgdmFsdWUgaXMgYm9vbGVhbiBvciBudW1iZXJcbiAqICAgICBhbHQgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKiAgICAgICBWLS0+PkM6IEVycm9yIG1lc3NhZ2VcbiAqICAgICBlbHNlIHZhbHVlIGlzIGRlZmluZWRcbiAqICAgICAgIFYtLT4+QzogdW5kZWZpbmVkICh2YWxpZClcbiAqICAgICBlbmRcbiAqICAgZWxzZSBvdGhlciB0eXBlc1xuICogICAgIGFsdCB2YWx1ZSBpcyBmYWxzeSAobnVsbCwgdW5kZWZpbmVkLCBlbXB0eSBzdHJpbmcpXG4gKiAgICAgICBWLS0+PkM6IEVycm9yIG1lc3NhZ2VcbiAqICAgICBlbHNlIHZhbHVlIGlzIHRydXRoeVxuICogICAgICAgVi0tPj5DOiB1bmRlZmluZWQgKHZhbGlkKVxuICogICAgIGVuZFxuICogICBlbmRcbiAqIFxuICogQGNhdGVnb3J5IFZhbGlkYXRvcnNcbiAqL1xuQHZhbGlkYXRvcihWYWxpZGF0aW9uS2V5cy5SRVFVSVJFRClcbmV4cG9ydCBjbGFzcyBSZXF1aXJlZFZhbGlkYXRvciBleHRlbmRzIFZhbGlkYXRvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZyA9IERFRkFVTFRfRVJST1JfTUVTU0FHRVMuUkVRVUlSRUQpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ2hlY2tzIGlmIGEgdmFsdWUgaXMgcHJlc2VudCBhbmQgbm90IGVtcHR5XG4gICAqIEBzdW1tYXJ5IFZhbGlkYXRlcyB0aGF0IHRoZSBwcm92aWRlZCB2YWx1ZSBleGlzdHMgYW5kIGlzIG5vdCBlbXB0eS5cbiAgICogVGhlIHZhbGlkYXRpb24gbG9naWMgdmFyaWVzIGJ5IHR5cGU6XG4gICAqIC0gRm9yIGJvb2xlYW5zIGFuZCBudW1iZXJzOiBjaGVja3MgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZFxuICAgKiAtIEZvciBvdGhlciB0eXBlcyAoc3RyaW5ncywgYXJyYXlzLCBvYmplY3RzKTogY2hlY2tzIGlmIHRoZSB2YWx1ZSBpcyBmYWxzeVxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gdmFsaWRhdGVcbiAgICogQHBhcmFtIHtWYWxpZGF0b3JPcHRpb25zfSBbb3B0aW9ucz17fV0gLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nIHwgdW5kZWZpbmVkfSBFcnJvciBtZXNzYWdlIGlmIHZhbGlkYXRpb24gZmFpbHMsIHVuZGVmaW5lZCBpZiB2YWxpZGF0aW9uIHBhc3Nlc1xuICAgKlxuICAgKiBAb3ZlcnJpZGVcbiAgICpcbiAgICogQHNlZSBWYWxpZGF0b3IjaGFzRXJyb3JzXG4gICAqL1xuICBwdWJsaWMgaGFzRXJyb3JzKFxuICAgIHZhbHVlOiBhbnksXG4gICAgb3B0aW9uczogVmFsaWRhdG9yT3B0aW9ucyA9IHt9XG4gICk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgICA/IHRoaXMuZ2V0TWVzc2FnZShvcHRpb25zLm1lc3NhZ2UgfHwgdGhpcy5tZXNzYWdlKVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICF2YWx1ZVxuICAgICAgICAgID8gdGhpcy5nZXRNZXNzYWdlKG9wdGlvbnMubWVzc2FnZSB8fCB0aGlzLm1lc3NhZ2UpXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG59XG4iXX0=
|