@decaf-ts/decorator-validation 1.6.4 → 1.7.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 (166) hide show
  1. package/dist/decorator-validation.cjs +1217 -404
  2. package/dist/decorator-validation.esm.cjs +1173 -359
  3. package/lib/constants/index.cjs +1 -1
  4. package/lib/esm/index.d.ts +5 -37
  5. package/lib/esm/index.js +6 -38
  6. package/lib/esm/model/Model.d.ts +107 -35
  7. package/lib/esm/model/Model.js +110 -45
  8. package/lib/esm/model/constants.d.ts +3 -3
  9. package/lib/esm/model/constants.js +4 -4
  10. package/lib/esm/model/construction.d.ts +3 -3
  11. package/lib/esm/model/construction.js +4 -4
  12. package/lib/esm/model/decorators.d.ts +3 -3
  13. package/lib/esm/model/decorators.js +2 -3
  14. package/lib/esm/model/index.d.ts +1 -0
  15. package/lib/esm/model/index.js +2 -1
  16. package/lib/esm/model/types.d.ts +30 -11
  17. package/lib/esm/model/types.js +1 -1
  18. package/lib/esm/model/utils.d.ts +3 -0
  19. package/lib/esm/model/utils.js +11 -0
  20. package/lib/esm/model/validation.d.ts +5 -5
  21. package/lib/esm/model/validation.js +8 -9
  22. package/lib/esm/utils/Decoration.d.ts +123 -0
  23. package/lib/esm/utils/Decoration.js +192 -0
  24. package/lib/esm/utils/constants.d.ts +27 -9
  25. package/lib/esm/utils/constants.js +28 -10
  26. package/lib/esm/utils/dates.d.ts +26 -16
  27. package/lib/esm/utils/dates.js +27 -17
  28. package/lib/esm/utils/decorators.d.ts +41 -0
  29. package/lib/esm/utils/decorators.js +42 -1
  30. package/lib/esm/utils/hashing.d.ts +50 -6
  31. package/lib/esm/utils/hashing.js +49 -5
  32. package/lib/esm/utils/index.d.ts +1 -0
  33. package/lib/esm/utils/index.js +2 -1
  34. package/lib/esm/utils/registry.d.ts +3 -3
  35. package/lib/esm/utils/registry.js +1 -1
  36. package/lib/esm/utils/serialization.d.ts +1 -1
  37. package/lib/esm/utils/serialization.js +4 -3
  38. package/lib/esm/utils/strings.d.ts +4 -4
  39. package/lib/esm/utils/strings.js +5 -5
  40. package/lib/esm/utils/types.d.ts +123 -16
  41. package/lib/esm/utils/types.js +1 -1
  42. package/lib/esm/validation/Validators/DateValidator.d.ts +40 -8
  43. package/lib/esm/validation/Validators/DateValidator.js +41 -9
  44. package/lib/esm/validation/Validators/DiffValidator.d.ts +3 -3
  45. package/lib/esm/validation/Validators/DiffValidator.js +3 -3
  46. package/lib/esm/validation/Validators/EmailValidator.d.ts +39 -7
  47. package/lib/esm/validation/Validators/EmailValidator.js +40 -8
  48. package/lib/esm/validation/Validators/EqualsValidator.d.ts +3 -3
  49. package/lib/esm/validation/Validators/EqualsValidator.js +3 -3
  50. package/lib/esm/validation/Validators/GreaterThanOrEqualValidator.d.ts +3 -3
  51. package/lib/esm/validation/Validators/GreaterThanOrEqualValidator.js +3 -3
  52. package/lib/esm/validation/Validators/GreaterThanValidator.d.ts +3 -3
  53. package/lib/esm/validation/Validators/GreaterThanValidator.js +3 -3
  54. package/lib/esm/validation/Validators/LessThanOrEqualValidator.d.ts +3 -3
  55. package/lib/esm/validation/Validators/LessThanOrEqualValidator.js +3 -3
  56. package/lib/esm/validation/Validators/LessThanValidator.d.ts +3 -3
  57. package/lib/esm/validation/Validators/LessThanValidator.js +3 -3
  58. package/lib/esm/validation/Validators/ListValidator.d.ts +44 -6
  59. package/lib/esm/validation/Validators/ListValidator.js +45 -7
  60. package/lib/esm/validation/Validators/MaxValidator.d.ts +52 -6
  61. package/lib/esm/validation/Validators/MaxValidator.js +53 -7
  62. package/lib/esm/validation/Validators/MinValidator.d.ts +52 -6
  63. package/lib/esm/validation/Validators/MinValidator.js +53 -7
  64. package/lib/esm/validation/Validators/PatternValidator.d.ts +75 -9
  65. package/lib/esm/validation/Validators/PatternValidator.js +76 -10
  66. package/lib/esm/validation/Validators/RequiredValidator.d.ts +52 -6
  67. package/lib/esm/validation/Validators/RequiredValidator.js +53 -7
  68. package/lib/esm/validation/Validators/TypeValidator.d.ts +60 -6
  69. package/lib/esm/validation/Validators/TypeValidator.js +69 -7
  70. package/lib/esm/validation/Validators/URLValidator.d.ts +41 -7
  71. package/lib/esm/validation/Validators/URLValidator.js +42 -8
  72. package/lib/esm/validation/Validators/Validator.d.ts +76 -16
  73. package/lib/esm/validation/Validators/Validator.js +68 -11
  74. package/lib/esm/validation/Validators/ValidatorRegistry.d.ts +1 -7
  75. package/lib/esm/validation/Validators/ValidatorRegistry.js +4 -11
  76. package/lib/esm/validation/decorators.d.ts +50 -40
  77. package/lib/esm/validation/decorators.js +108 -59
  78. package/lib/esm/validation/types.d.ts +163 -30
  79. package/lib/esm/validation/types.js +1 -1
  80. package/lib/index.cjs +7 -39
  81. package/lib/index.d.ts +5 -37
  82. package/lib/model/Model.cjs +114 -51
  83. package/lib/model/Model.d.ts +107 -35
  84. package/lib/model/constants.cjs +4 -4
  85. package/lib/model/constants.d.ts +3 -3
  86. package/lib/model/construction.cjs +4 -4
  87. package/lib/model/construction.d.ts +3 -3
  88. package/lib/model/decorators.cjs +3 -4
  89. package/lib/model/decorators.d.ts +3 -3
  90. package/lib/model/index.cjs +2 -1
  91. package/lib/model/index.d.ts +1 -0
  92. package/lib/model/types.cjs +1 -1
  93. package/lib/model/types.d.ts +30 -11
  94. package/lib/model/utils.cjs +15 -0
  95. package/lib/model/utils.d.ts +3 -0
  96. package/lib/model/validation.cjs +11 -12
  97. package/lib/model/validation.d.ts +5 -5
  98. package/lib/utils/Decoration.cjs +196 -0
  99. package/lib/utils/Decoration.d.ts +123 -0
  100. package/lib/utils/constants.cjs +29 -11
  101. package/lib/utils/constants.d.ts +27 -9
  102. package/lib/utils/dates.cjs +28 -18
  103. package/lib/utils/dates.d.ts +26 -16
  104. package/lib/utils/decorators.cjs +42 -1
  105. package/lib/utils/decorators.d.ts +41 -0
  106. package/lib/utils/hashing.cjs +49 -5
  107. package/lib/utils/hashing.d.ts +50 -6
  108. package/lib/utils/index.cjs +2 -1
  109. package/lib/utils/index.d.ts +1 -0
  110. package/lib/utils/registry.cjs +1 -1
  111. package/lib/utils/registry.d.ts +3 -3
  112. package/lib/utils/serialization.cjs +5 -4
  113. package/lib/utils/serialization.d.ts +1 -1
  114. package/lib/utils/strings.cjs +5 -5
  115. package/lib/utils/strings.d.ts +4 -4
  116. package/lib/utils/types.cjs +1 -1
  117. package/lib/utils/types.d.ts +123 -16
  118. package/lib/validation/Validation.cjs +1 -1
  119. package/lib/validation/Validators/DateValidator.cjs +41 -9
  120. package/lib/validation/Validators/DateValidator.d.ts +40 -8
  121. package/lib/validation/Validators/DiffValidator.cjs +3 -3
  122. package/lib/validation/Validators/DiffValidator.d.ts +3 -3
  123. package/lib/validation/Validators/EmailValidator.cjs +40 -8
  124. package/lib/validation/Validators/EmailValidator.d.ts +39 -7
  125. package/lib/validation/Validators/EqualsValidator.cjs +3 -3
  126. package/lib/validation/Validators/EqualsValidator.d.ts +3 -3
  127. package/lib/validation/Validators/GreaterThanOrEqualValidator.cjs +3 -3
  128. package/lib/validation/Validators/GreaterThanOrEqualValidator.d.ts +3 -3
  129. package/lib/validation/Validators/GreaterThanValidator.cjs +3 -3
  130. package/lib/validation/Validators/GreaterThanValidator.d.ts +3 -3
  131. package/lib/validation/Validators/LessThanOrEqualValidator.cjs +3 -3
  132. package/lib/validation/Validators/LessThanOrEqualValidator.d.ts +3 -3
  133. package/lib/validation/Validators/LessThanValidator.cjs +3 -3
  134. package/lib/validation/Validators/LessThanValidator.d.ts +3 -3
  135. package/lib/validation/Validators/ListValidator.cjs +45 -7
  136. package/lib/validation/Validators/ListValidator.d.ts +44 -6
  137. package/lib/validation/Validators/MaxLengthValidator.cjs +1 -1
  138. package/lib/validation/Validators/MaxValidator.cjs +53 -7
  139. package/lib/validation/Validators/MaxValidator.d.ts +52 -6
  140. package/lib/validation/Validators/MinLengthValidator.cjs +1 -1
  141. package/lib/validation/Validators/MinValidator.cjs +53 -7
  142. package/lib/validation/Validators/MinValidator.d.ts +52 -6
  143. package/lib/validation/Validators/PasswordValidator.cjs +1 -1
  144. package/lib/validation/Validators/PatternValidator.cjs +76 -10
  145. package/lib/validation/Validators/PatternValidator.d.ts +75 -9
  146. package/lib/validation/Validators/RequiredValidator.cjs +53 -7
  147. package/lib/validation/Validators/RequiredValidator.d.ts +52 -6
  148. package/lib/validation/Validators/StepValidator.cjs +1 -1
  149. package/lib/validation/Validators/TypeValidator.cjs +71 -9
  150. package/lib/validation/Validators/TypeValidator.d.ts +60 -6
  151. package/lib/validation/Validators/URLValidator.cjs +42 -8
  152. package/lib/validation/Validators/URLValidator.d.ts +41 -7
  153. package/lib/validation/Validators/Validator.cjs +69 -12
  154. package/lib/validation/Validators/Validator.d.ts +76 -16
  155. package/lib/validation/Validators/ValidatorRegistry.cjs +4 -12
  156. package/lib/validation/Validators/ValidatorRegistry.d.ts +1 -7
  157. package/lib/validation/Validators/constants.cjs +2 -2
  158. package/lib/validation/Validators/decorators.cjs +2 -2
  159. package/lib/validation/Validators/index.cjs +1 -1
  160. package/lib/validation/Validators/utils.cjs +3 -3
  161. package/lib/validation/decorators.cjs +111 -62
  162. package/lib/validation/decorators.d.ts +50 -40
  163. package/lib/validation/index.cjs +1 -1
  164. package/lib/validation/types.cjs +1 -1
  165. package/lib/validation/types.d.ts +163 -30
  166. package/package.json +2 -1
@@ -1,24 +1,62 @@
1
1
  import { Validator } from "./Validator";
2
2
  import { ListValidatorOptions } from "../types";
3
3
  /**
4
- * @summary List Validator
4
+ * @description Validator for checking if elements in a list or set match expected types
5
+ * @summary The ListValidator validates that all elements in an array or Set match the expected types.
6
+ * It checks each element against a list of allowed class types and ensures type consistency.
7
+ * This validator is typically used with the @list decorator.
5
8
  *
6
- * @param {string} [message] defaults to {@link DEFAULT_ERROR_MESSAGES#LIST}
9
+ * @param {string} [message] - Custom error message to display when validation fails, defaults to {@link DEFAULT_ERROR_MESSAGES#LIST}
7
10
  *
8
11
  * @class ListValidator
9
12
  * @extends Validator
10
13
  *
14
+ * @example
15
+ * ```typescript
16
+ * // Create a list validator with default error message
17
+ * const listValidator = new ListValidator();
18
+ *
19
+ * // Create a list validator with custom error message
20
+ * const customListValidator = new ListValidator("All items must be of the specified type");
21
+ *
22
+ * // Validate a list
23
+ * const options = { clazz: ["String", "Number"] };
24
+ * const result = listValidator.hasErrors(["test", 123], options); // undefined (valid)
25
+ * const invalidResult = listValidator.hasErrors([new Date()], options); // Returns error message (invalid)
26
+ * ```
27
+ *
28
+ * @mermaid
29
+ * sequenceDiagram
30
+ * participant C as Client
31
+ * participant V as ListValidator
32
+ *
33
+ * C->>V: new ListValidator(message)
34
+ * C->>V: hasErrors(value, options)
35
+ * alt value is empty
36
+ * V-->>C: undefined (valid)
37
+ * else value has elements
38
+ * V->>V: Check each element's type
39
+ * alt All elements match allowed types
40
+ * V-->>C: undefined (valid)
41
+ * else Some elements don't match
42
+ * V-->>C: Error message
43
+ * end
44
+ * end
45
+ *
11
46
  * @category Validators
12
47
  */
13
48
  export declare class ListValidator extends Validator<ListValidatorOptions> {
14
49
  constructor(message?: string);
15
50
  /**
16
- * @summary Validates a model
51
+ * @description Checks if all elements in a list or set match the expected types
52
+ * @summary Validates that each element in the provided array or Set matches one of the
53
+ * class types specified in the options. For object types, it checks the constructor name,
54
+ * and for primitive types, it compares against the lowercase type name.
17
55
  *
18
- * @param {any[] | Set<any>} value
19
- * @param {ListValidatorOptions} options
56
+ * @param {any[] | Set<any>} value - The array or Set to validate
57
+ * @param {ListValidatorOptions} options - Configuration options containing the allowed class types
20
58
  *
21
- * @return {string | undefined}
59
+ * @return {string | undefined} Error message if validation fails, undefined if validation passes
22
60
  *
23
61
  * @override
24
62
  *
@@ -11,13 +11,48 @@ import { Validator } from "./Validator";
11
11
  import { DEFAULT_ERROR_MESSAGES, ValidationKeys } from "./constants";
12
12
  import { validator } from "./decorators";
13
13
  /**
14
- * @summary List Validator
14
+ * @description Validator for checking if elements in a list or set match expected types
15
+ * @summary The ListValidator validates that all elements in an array or Set match the expected types.
16
+ * It checks each element against a list of allowed class types and ensures type consistency.
17
+ * This validator is typically used with the @list decorator.
15
18
  *
16
- * @param {string} [message] defaults to {@link DEFAULT_ERROR_MESSAGES#LIST}
19
+ * @param {string} [message] - Custom error message to display when validation fails, defaults to {@link DEFAULT_ERROR_MESSAGES#LIST}
17
20
  *
18
21
  * @class ListValidator
19
22
  * @extends Validator
20
23
  *
24
+ * @example
25
+ * ```typescript
26
+ * // Create a list validator with default error message
27
+ * const listValidator = new ListValidator();
28
+ *
29
+ * // Create a list validator with custom error message
30
+ * const customListValidator = new ListValidator("All items must be of the specified type");
31
+ *
32
+ * // Validate a list
33
+ * const options = { clazz: ["String", "Number"] };
34
+ * const result = listValidator.hasErrors(["test", 123], options); // undefined (valid)
35
+ * const invalidResult = listValidator.hasErrors([new Date()], options); // Returns error message (invalid)
36
+ * ```
37
+ *
38
+ * @mermaid
39
+ * sequenceDiagram
40
+ * participant C as Client
41
+ * participant V as ListValidator
42
+ *
43
+ * C->>V: new ListValidator(message)
44
+ * C->>V: hasErrors(value, options)
45
+ * alt value is empty
46
+ * V-->>C: undefined (valid)
47
+ * else value has elements
48
+ * V->>V: Check each element's type
49
+ * alt All elements match allowed types
50
+ * V-->>C: undefined (valid)
51
+ * else Some elements don't match
52
+ * V-->>C: Error message
53
+ * end
54
+ * end
55
+ *
21
56
  * @category Validators
22
57
  */
23
58
  let ListValidator = class ListValidator extends Validator {
@@ -25,12 +60,15 @@ let ListValidator = class ListValidator extends Validator {
25
60
  super(message, Array.name, Set.name);
26
61
  }
27
62
  /**
28
- * @summary Validates a model
63
+ * @description Checks if all elements in a list or set match the expected types
64
+ * @summary Validates that each element in the provided array or Set matches one of the
65
+ * class types specified in the options. For object types, it checks the constructor name,
66
+ * and for primitive types, it compares against the lowercase type name.
29
67
  *
30
- * @param {any[] | Set<any>} value
31
- * @param {ListValidatorOptions} options
68
+ * @param {any[] | Set<any>} value - The array or Set to validate
69
+ * @param {ListValidatorOptions} options - Configuration options containing the allowed class types
32
70
  *
33
- * @return {string | undefined}
71
+ * @return {string | undefined} Error message if validation fails, undefined if validation passes
34
72
  *
35
73
  * @override
36
74
  *
@@ -65,4 +103,4 @@ ListValidator = __decorate([
65
103
  __metadata("design:paramtypes", [String])
66
104
  ], ListValidator);
67
105
  export { ListValidator };
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGlzdFZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy92YWxpZGF0aW9uL1ZhbGlkYXRvcnMvTGlzdFZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUd6Qzs7Ozs7Ozs7O0dBU0c7QUFFSSxJQUFNLGFBQWEsR0FBbkIsTUFBTSxhQUFjLFNBQVEsU0FBK0I7SUFDaEUsWUFBWSxVQUFrQixzQkFBc0IsQ0FBQyxJQUFJO1FBQ3ZELEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0gsU0FBUyxDQUNQLEtBQXVCLEVBQ3ZCLE9BQTZCO1FBRTdCLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztZQUFFLE9BQU87UUFFM0UsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSztZQUNmLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQixJQUFJLEdBQVEsRUFDVixPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLEtBQ0UsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUNULENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFDdEQsQ0FBQyxFQUFFLEVBQ0gsQ0FBQztZQUNELEdBQUcsR0FBSSxLQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEIsUUFBUSxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNuQixLQUFLLFFBQVEsQ0FBQztnQkFDZCxLQUFLLFVBQVU7b0JBQ2IsT0FBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUUsR0FBYyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDNUQsTUFBTTtnQkFDUjtvQkFDRSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQVMsRUFBRSxFQUFFLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7b0JBQ3BFLE1BQU07WUFDVixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sT0FBTztZQUNaLENBQUMsQ0FBQyxTQUFTO1lBQ1gsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzlELENBQUM7Q0FDRixDQUFBO0FBakRZLGFBQWE7SUFEekIsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7O0dBQ2xCLGFBQWEsQ0FpRHpCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmFsaWRhdG9yIH0gZnJvbSBcIi4vVmFsaWRhdG9yXCI7XG5pbXBvcnQgeyBERUZBVUxUX0VSUk9SX01FU1NBR0VTLCBWYWxpZGF0aW9uS2V5cyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgdmFsaWRhdG9yIH0gZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgTGlzdFZhbGlkYXRvck9wdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXNcIjtcblxuLyoqXG4gKiBAc3VtbWFyeSBMaXN0IFZhbGlkYXRvclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZV0gZGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfRVJST1JfTUVTU0FHRVMjTElTVH1cbiAqXG4gKiBAY2xhc3MgTGlzdFZhbGlkYXRvclxuICogQGV4dGVuZHMgVmFsaWRhdG9yXG4gKlxuICogQGNhdGVnb3J5IFZhbGlkYXRvcnNcbiAqL1xuQHZhbGlkYXRvcihWYWxpZGF0aW9uS2V5cy5MSVNUKVxuZXhwb3J0IGNsYXNzIExpc3RWYWxpZGF0b3IgZXh0ZW5kcyBWYWxpZGF0b3I8TGlzdFZhbGlkYXRvck9wdGlvbnM+IHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nID0gREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5MSVNUKSB7XG4gICAgc3VwZXIobWVzc2FnZSwgQXJyYXkubmFtZSwgU2V0Lm5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFZhbGlkYXRlcyBhIG1vZGVsXG4gICAqXG4gICAqIEBwYXJhbSB7YW55W10gfCBTZXQ8YW55Pn0gdmFsdWVcbiAgICogQHBhcmFtIHtMaXN0VmFsaWRhdG9yT3B0aW9uc30gb3B0aW9uc1xuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmcgfCB1bmRlZmluZWR9XG4gICAqXG4gICAqIEBvdmVycmlkZVxuICAgKlxuICAgKiBAc2VlIFZhbGlkYXRvciNoYXNFcnJvcnNcbiAgICovXG4gIGhhc0Vycm9ycyhcbiAgICB2YWx1ZTogYW55W10gfCBTZXQ8YW55PixcbiAgICBvcHRpb25zOiBMaXN0VmFsaWRhdG9yT3B0aW9uc1xuICApOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghdmFsdWUgfHwgKEFycmF5LmlzQXJyYXkodmFsdWUpID8gIXZhbHVlLmxlbmd0aCA6ICF2YWx1ZS5zaXplKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgY2xhenogPSBBcnJheS5pc0FycmF5KG9wdGlvbnMuY2xhenopXG4gICAgICA/IG9wdGlvbnMuY2xhenpcbiAgICAgIDogW29wdGlvbnMuY2xhenpdO1xuICAgIGxldCB2YWw6IGFueSxcbiAgICAgIGlzVmFsaWQgPSB0cnVlO1xuICAgIGZvciAoXG4gICAgICBsZXQgaSA9IDA7XG4gICAgICBpIDwgKEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUubGVuZ3RoIDogdmFsdWUuc2l6ZSk7XG4gICAgICBpKytcbiAgICApIHtcbiAgICAgIHZhbCA9ICh2YWx1ZSBhcyBhbnkpW2ldO1xuICAgICAgc3dpdGNoICh0eXBlb2YgdmFsKSB7XG4gICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgaXNWYWxpZCA9IGNsYXp6LmluY2x1ZGVzKCh2YWwgYXMgb2JqZWN0KS5jb25zdHJ1Y3Rvcj8ubmFtZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaXNWYWxpZCA9IGNsYXp6LnNvbWUoKGM6IHN0cmluZykgPT4gdHlwZW9mIHZhbCA9PT0gYy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaXNWYWxpZFxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogdGhpcy5nZXRNZXNzYWdlKG9wdGlvbnMubWVzc2FnZSB8fCB0aGlzLm1lc3NhZ2UsIGNsYXp6KTtcbiAgfVxufVxuIl19
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGlzdFZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy92YWxpZGF0aW9uL1ZhbGlkYXRvcnMvTGlzdFZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUd6Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0Q0c7QUFFSSxJQUFNLGFBQWEsR0FBbkIsTUFBTSxhQUFjLFNBQVEsU0FBK0I7SUFDaEUsWUFBWSxVQUFrQixzQkFBc0IsQ0FBQyxJQUFJO1FBQ3ZELEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7OztPQWNHO0lBQ0gsU0FBUyxDQUNQLEtBQXVCLEVBQ3ZCLE9BQTZCO1FBRTdCLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztZQUFFLE9BQU87UUFFM0UsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSztZQUNmLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQixJQUFJLEdBQVEsRUFDVixPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLEtBQ0UsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUNULENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFDdEQsQ0FBQyxFQUFFLEVBQ0gsQ0FBQztZQUNELEdBQUcsR0FBSSxLQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEIsUUFBUSxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNuQixLQUFLLFFBQVEsQ0FBQztnQkFDZCxLQUFLLFVBQVU7b0JBQ2IsT0FBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUUsR0FBYyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDNUQsTUFBTTtnQkFDUjtvQkFDRSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQVMsRUFBRSxFQUFFLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7b0JBQ3BFLE1BQU07WUFDVixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sT0FBTztZQUNaLENBQUMsQ0FBQyxTQUFTO1lBQ1gsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzlELENBQUM7Q0FDRixDQUFBO0FBcERZLGFBQWE7SUFEekIsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7O0dBQ2xCLGFBQWEsQ0FvRHpCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmFsaWRhdG9yIH0gZnJvbSBcIi4vVmFsaWRhdG9yXCI7XG5pbXBvcnQgeyBERUZBVUxUX0VSUk9SX01FU1NBR0VTLCBWYWxpZGF0aW9uS2V5cyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgdmFsaWRhdG9yIH0gZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgTGlzdFZhbGlkYXRvck9wdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVmFsaWRhdG9yIGZvciBjaGVja2luZyBpZiBlbGVtZW50cyBpbiBhIGxpc3Qgb3Igc2V0IG1hdGNoIGV4cGVjdGVkIHR5cGVzXG4gKiBAc3VtbWFyeSBUaGUgTGlzdFZhbGlkYXRvciB2YWxpZGF0ZXMgdGhhdCBhbGwgZWxlbWVudHMgaW4gYW4gYXJyYXkgb3IgU2V0IG1hdGNoIHRoZSBleHBlY3RlZCB0eXBlcy5cbiAqIEl0IGNoZWNrcyBlYWNoIGVsZW1lbnQgYWdhaW5zdCBhIGxpc3Qgb2YgYWxsb3dlZCBjbGFzcyB0eXBlcyBhbmQgZW5zdXJlcyB0eXBlIGNvbnNpc3RlbmN5LlxuICogVGhpcyB2YWxpZGF0b3IgaXMgdHlwaWNhbGx5IHVzZWQgd2l0aCB0aGUgQGxpc3QgZGVjb3JhdG9yLlxuICogXG4gKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2VdIC0gQ3VzdG9tIGVycm9yIG1lc3NhZ2UgdG8gZGlzcGxheSB3aGVuIHZhbGlkYXRpb24gZmFpbHMsIGRlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX0VSUk9SX01FU1NBR0VTI0xJU1R9XG4gKiBcbiAqIEBjbGFzcyBMaXN0VmFsaWRhdG9yXG4gKiBAZXh0ZW5kcyBWYWxpZGF0b3JcbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIENyZWF0ZSBhIGxpc3QgdmFsaWRhdG9yIHdpdGggZGVmYXVsdCBlcnJvciBtZXNzYWdlXG4gKiBjb25zdCBsaXN0VmFsaWRhdG9yID0gbmV3IExpc3RWYWxpZGF0b3IoKTtcbiAqIFxuICogLy8gQ3JlYXRlIGEgbGlzdCB2YWxpZGF0b3Igd2l0aCBjdXN0b20gZXJyb3IgbWVzc2FnZVxuICogY29uc3QgY3VzdG9tTGlzdFZhbGlkYXRvciA9IG5ldyBMaXN0VmFsaWRhdG9yKFwiQWxsIGl0ZW1zIG11c3QgYmUgb2YgdGhlIHNwZWNpZmllZCB0eXBlXCIpO1xuICogXG4gKiAvLyBWYWxpZGF0ZSBhIGxpc3RcbiAqIGNvbnN0IG9wdGlvbnMgPSB7IGNsYXp6OiBbXCJTdHJpbmdcIiwgXCJOdW1iZXJcIl0gfTtcbiAqIGNvbnN0IHJlc3VsdCA9IGxpc3RWYWxpZGF0b3IuaGFzRXJyb3JzKFtcInRlc3RcIiwgMTIzXSwgb3B0aW9ucyk7IC8vIHVuZGVmaW5lZCAodmFsaWQpXG4gKiBjb25zdCBpbnZhbGlkUmVzdWx0ID0gbGlzdFZhbGlkYXRvci5oYXNFcnJvcnMoW25ldyBEYXRlKCldLCBvcHRpb25zKTsgLy8gUmV0dXJucyBlcnJvciBtZXNzYWdlIChpbnZhbGlkKVxuICogYGBgXG4gKiBcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQyBhcyBDbGllbnRcbiAqICAgcGFydGljaXBhbnQgViBhcyBMaXN0VmFsaWRhdG9yXG4gKiAgIFxuICogICBDLT4+VjogbmV3IExpc3RWYWxpZGF0b3IobWVzc2FnZSlcbiAqICAgQy0+PlY6IGhhc0Vycm9ycyh2YWx1ZSwgb3B0aW9ucylcbiAqICAgYWx0IHZhbHVlIGlzIGVtcHR5XG4gKiAgICAgVi0tPj5DOiB1bmRlZmluZWQgKHZhbGlkKVxuICogICBlbHNlIHZhbHVlIGhhcyBlbGVtZW50c1xuICogICAgIFYtPj5WOiBDaGVjayBlYWNoIGVsZW1lbnQncyB0eXBlXG4gKiAgICAgYWx0IEFsbCBlbGVtZW50cyBtYXRjaCBhbGxvd2VkIHR5cGVzXG4gKiAgICAgICBWLS0+PkM6IHVuZGVmaW5lZCAodmFsaWQpXG4gKiAgICAgZWxzZSBTb21lIGVsZW1lbnRzIGRvbid0IG1hdGNoXG4gKiAgICAgICBWLS0+PkM6IEVycm9yIG1lc3NhZ2VcbiAqICAgICBlbmRcbiAqICAgZW5kXG4gKiBcbiAqIEBjYXRlZ29yeSBWYWxpZGF0b3JzXG4gKi9cbkB2YWxpZGF0b3IoVmFsaWRhdGlvbktleXMuTElTVClcbmV4cG9ydCBjbGFzcyBMaXN0VmFsaWRhdG9yIGV4dGVuZHMgVmFsaWRhdG9yPExpc3RWYWxpZGF0b3JPcHRpb25zPiB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZyA9IERFRkFVTFRfRVJST1JfTUVTU0FHRVMuTElTVCkge1xuICAgIHN1cGVyKG1lc3NhZ2UsIEFycmF5Lm5hbWUsIFNldC5uYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ2hlY2tzIGlmIGFsbCBlbGVtZW50cyBpbiBhIGxpc3Qgb3Igc2V0IG1hdGNoIHRoZSBleHBlY3RlZCB0eXBlc1xuICAgKiBAc3VtbWFyeSBWYWxpZGF0ZXMgdGhhdCBlYWNoIGVsZW1lbnQgaW4gdGhlIHByb3ZpZGVkIGFycmF5IG9yIFNldCBtYXRjaGVzIG9uZSBvZiB0aGUgXG4gICAqIGNsYXNzIHR5cGVzIHNwZWNpZmllZCBpbiB0aGUgb3B0aW9ucy4gRm9yIG9iamVjdCB0eXBlcywgaXQgY2hlY2tzIHRoZSBjb25zdHJ1Y3RvciBuYW1lLFxuICAgKiBhbmQgZm9yIHByaW1pdGl2ZSB0eXBlcywgaXQgY29tcGFyZXMgYWdhaW5zdCB0aGUgbG93ZXJjYXNlIHR5cGUgbmFtZS5cbiAgICpcbiAgICogQHBhcmFtIHthbnlbXSB8IFNldDxhbnk+fSB2YWx1ZSAtIFRoZSBhcnJheSBvciBTZXQgdG8gdmFsaWRhdGVcbiAgICogQHBhcmFtIHtMaXN0VmFsaWRhdG9yT3B0aW9uc30gb3B0aW9ucyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBjb250YWluaW5nIHRoZSBhbGxvd2VkIGNsYXNzIHR5cGVzXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZyB8IHVuZGVmaW5lZH0gRXJyb3IgbWVzc2FnZSBpZiB2YWxpZGF0aW9uIGZhaWxzLCB1bmRlZmluZWQgaWYgdmFsaWRhdGlvbiBwYXNzZXNcbiAgICpcbiAgICogQG92ZXJyaWRlXG4gICAqXG4gICAqIEBzZWUgVmFsaWRhdG9yI2hhc0Vycm9yc1xuICAgKi9cbiAgaGFzRXJyb3JzKFxuICAgIHZhbHVlOiBhbnlbXSB8IFNldDxhbnk+LFxuICAgIG9wdGlvbnM6IExpc3RWYWxpZGF0b3JPcHRpb25zXG4gICk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF2YWx1ZSB8fCAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyAhdmFsdWUubGVuZ3RoIDogIXZhbHVlLnNpemUpKSByZXR1cm47XG5cbiAgICBjb25zdCBjbGF6eiA9IEFycmF5LmlzQXJyYXkob3B0aW9ucy5jbGF6eilcbiAgICAgID8gb3B0aW9ucy5jbGF6elxuICAgICAgOiBbb3B0aW9ucy5jbGF6el07XG4gICAgbGV0IHZhbDogYW55LFxuICAgICAgaXNWYWxpZCA9IHRydWU7XG4gICAgZm9yIChcbiAgICAgIGxldCBpID0gMDtcbiAgICAgIGkgPCAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5sZW5ndGggOiB2YWx1ZS5zaXplKTtcbiAgICAgIGkrK1xuICAgICkge1xuICAgICAgdmFsID0gKHZhbHVlIGFzIGFueSlbaV07XG4gICAgICBzd2l0Y2ggKHR5cGVvZiB2YWwpIHtcbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICBpc1ZhbGlkID0gY2xhenouaW5jbHVkZXMoKHZhbCBhcyBvYmplY3QpLmNvbnN0cnVjdG9yPy5uYW1lKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpc1ZhbGlkID0gY2xhenouc29tZSgoYzogc3RyaW5nKSA9PiB0eXBlb2YgdmFsID09PSBjLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpc1ZhbGlkXG4gICAgICA/IHVuZGVmaW5lZFxuICAgICAgOiB0aGlzLmdldE1lc3NhZ2Uob3B0aW9ucy5tZXNzYWdlIHx8IHRoaXMubWVzc2FnZSwgY2xhenopO1xuICB9XG59XG4iXX0=
@@ -1,24 +1,70 @@
1
1
  import { Validator } from "./Validator";
2
2
  import { MaxValidatorOptions } from "../types";
3
3
  /**
4
- * @summary Max Validator
4
+ * @description Validator for checking if a value is less than or equal to a maximum
5
+ * @summary The MaxValidator checks if a numeric value, date, or string is less than or equal to
6
+ * a specified maximum value. It supports comparing numbers directly, dates chronologically,
7
+ * and strings lexicographically. This validator is typically used with the @max decorator.
5
8
  *
6
- * @param {string} [message] defaults to {@link DEFAULT_ERROR_MESSAGES#MAX}
9
+ * @param {string} [message] - Custom error message to display when validation fails, defaults to {@link DEFAULT_ERROR_MESSAGES#MAX}
7
10
  *
8
11
  * @class MaxValidator
9
12
  * @extends Validator
10
13
  *
14
+ * @example
15
+ * ```typescript
16
+ * // Create a max validator with default error message
17
+ * const maxValidator = new MaxValidator();
18
+ *
19
+ * // Create a max validator with custom error message
20
+ * const customMaxValidator = new MaxValidator("Value must not exceed {0}");
21
+ *
22
+ * // Validate a number
23
+ * const numOptions = { max: 100, message: "Number too large" };
24
+ * const numResult = maxValidator.hasErrors(50, numOptions); // undefined (valid)
25
+ * const invalidNumResult = maxValidator.hasErrors(150, numOptions); // Returns error message (invalid)
26
+ *
27
+ * // Validate a date
28
+ * const dateOptions = { max: new Date(2023, 11, 31) };
29
+ * const dateResult = maxValidator.hasErrors(new Date(2023, 5, 15), dateOptions); // undefined (valid)
30
+ * ```
31
+ *
32
+ * @mermaid
33
+ * sequenceDiagram
34
+ * participant C as Client
35
+ * participant V as MaxValidator
36
+ *
37
+ * C->>V: new MaxValidator(message)
38
+ * C->>V: hasErrors(value, options)
39
+ * alt value is undefined
40
+ * V-->>C: undefined (valid)
41
+ * else value is Date and max is not Date
42
+ * V->>V: Convert max to Date
43
+ * alt conversion fails
44
+ * V-->>C: Error: Invalid Max param
45
+ * end
46
+ * end
47
+ * alt value > max
48
+ * V-->>C: Error message
49
+ * else value <= max
50
+ * V-->>C: undefined (valid)
51
+ * end
52
+ *
11
53
  * @category Validators
12
54
  */
13
55
  export declare class MaxValidator extends Validator<MaxValidatorOptions> {
14
56
  constructor(message?: string);
15
57
  /**
16
- * @summary Validates a Model
58
+ * @description Checks if a value is less than or equal to a maximum
59
+ * @summary Validates that the provided value does not exceed the maximum 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 {MaxValidatorOptions} options
64
+ * @param {number | Date | string} value - The value to validate
65
+ * @param {MaxValidatorOptions} options - Configuration options containing the maximum 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
- * @summary Max Validator
14
+ * @description Validator for checking if a value is less than or equal to a maximum
15
+ * @summary The MaxValidator checks if a numeric value, date, or string is less than or equal to
16
+ * a specified maximum value. It supports comparing numbers directly, dates chronologically,
17
+ * and strings lexicographically. This validator is typically used with the @max decorator.
15
18
  *
16
- * @param {string} [message] defaults to {@link DEFAULT_ERROR_MESSAGES#MAX}
19
+ * @param {string} [message] - Custom error message to display when validation fails, defaults to {@link DEFAULT_ERROR_MESSAGES#MAX}
17
20
  *
18
21
  * @class MaxValidator
19
22
  * @extends Validator
20
23
  *
24
+ * @example
25
+ * ```typescript
26
+ * // Create a max validator with default error message
27
+ * const maxValidator = new MaxValidator();
28
+ *
29
+ * // Create a max validator with custom error message
30
+ * const customMaxValidator = new MaxValidator("Value must not exceed {0}");
31
+ *
32
+ * // Validate a number
33
+ * const numOptions = { max: 100, message: "Number too large" };
34
+ * const numResult = maxValidator.hasErrors(50, numOptions); // undefined (valid)
35
+ * const invalidNumResult = maxValidator.hasErrors(150, numOptions); // Returns error message (invalid)
36
+ *
37
+ * // Validate a date
38
+ * const dateOptions = { max: new Date(2023, 11, 31) };
39
+ * const dateResult = maxValidator.hasErrors(new Date(2023, 5, 15), dateOptions); // undefined (valid)
40
+ * ```
41
+ *
42
+ * @mermaid
43
+ * sequenceDiagram
44
+ * participant C as Client
45
+ * participant V as MaxValidator
46
+ *
47
+ * C->>V: new MaxValidator(message)
48
+ * C->>V: hasErrors(value, options)
49
+ * alt value is undefined
50
+ * V-->>C: undefined (valid)
51
+ * else value is Date and max is not Date
52
+ * V->>V: Convert max to Date
53
+ * alt conversion fails
54
+ * V-->>C: Error: Invalid Max param
55
+ * end
56
+ * end
57
+ * alt value > max
58
+ * V-->>C: Error message
59
+ * else value <= max
60
+ * V-->>C: undefined (valid)
61
+ * end
62
+ *
21
63
  * @category Validators
22
64
  */
23
65
  let MaxValidator = class MaxValidator extends Validator {
@@ -25,12 +67,16 @@ let MaxValidator = class MaxValidator extends Validator {
25
67
  super(message, "number", "Date", "string");
26
68
  }
27
69
  /**
28
- * @summary Validates a Model
70
+ * @description Checks if a value is less than or equal to a maximum
71
+ * @summary Validates that the provided value does not exceed the maximum 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 {MaxValidatorOptions} options
76
+ * @param {number | Date | string} value - The value to validate
77
+ * @param {MaxValidatorOptions} options - Configuration options containing the maximum 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 @@ MaxValidator = __decorate([
55
101
  __metadata("design:paramtypes", [String])
56
102
  ], MaxValidator);
57
103
  export { MaxValidator };
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF4VmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3ZhbGlkYXRpb24vVmFsaWRhdG9ycy9NYXhWYWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN4QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHekM7Ozs7Ozs7OztHQVNHO0FBRUksSUFBTSxZQUFZLEdBQWxCLE1BQU0sWUFBYSxTQUFRLFNBQThCO0lBQzlELFlBQVksVUFBa0Isc0JBQXNCLENBQUMsR0FBRztRQUN0RCxLQUFLLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0ksU0FBUyxDQUNkLEtBQTZCLEVBQzdCLE9BQTRCO1FBRTVCLElBQUksT0FBTyxLQUFLLEtBQUssV0FBVztZQUFFLE9BQU87UUFFekMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUN0QixJQUFJLEtBQUssWUFBWSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsWUFBWSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3BELEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwQixJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDakQsQ0FBQztRQUVELE9BQU8sS0FBSyxHQUFHLEdBQUc7WUFDaEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQztZQUN2RCxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2hCLENBQUM7Q0FDRixDQUFBO0FBbENZLFlBQVk7SUFEeEIsU0FBUyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUM7O0dBQ2pCLFlBQVksQ0FrQ3hCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmFsaWRhdG9yIH0gZnJvbSBcIi4vVmFsaWRhdG9yXCI7XG5pbXBvcnQgeyBERUZBVUxUX0VSUk9SX01FU1NBR0VTLCBWYWxpZGF0aW9uS2V5cyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgdmFsaWRhdG9yIH0gZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgTWF4VmFsaWRhdG9yT3B0aW9ucyB9IGZyb20gXCIuLi90eXBlc1wiO1xuXG4vKipcbiAqIEBzdW1tYXJ5IE1heCBWYWxpZGF0b3JcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2VdIGRlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX0VSUk9SX01FU1NBR0VTI01BWH1cbiAqXG4gKiBAY2xhc3MgTWF4VmFsaWRhdG9yXG4gKiBAZXh0ZW5kcyBWYWxpZGF0b3JcbiAqXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdG9yc1xuICovXG5AdmFsaWRhdG9yKFZhbGlkYXRpb25LZXlzLk1BWClcbmV4cG9ydCBjbGFzcyBNYXhWYWxpZGF0b3IgZXh0ZW5kcyBWYWxpZGF0b3I8TWF4VmFsaWRhdG9yT3B0aW9ucz4ge1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcgPSBERUZBVUxUX0VSUk9SX01FU1NBR0VTLk1BWCkge1xuICAgIHN1cGVyKG1lc3NhZ2UsIFwibnVtYmVyXCIsIFwiRGF0ZVwiLCBcInN0cmluZ1wiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBWYWxpZGF0ZXMgYSBNb2RlbFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAgICogQHBhcmFtIHtNYXhWYWxpZGF0b3JPcHRpb25zfSBvcHRpb25zXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICpcbiAgICogQG92ZXJyaWRlXG4gICAqXG4gICAqIEBzZWUgVmFsaWRhdG9yI2hhc0Vycm9yc1xuICAgKi9cbiAgcHVibGljIGhhc0Vycm9ycyhcbiAgICB2YWx1ZTogbnVtYmVyIHwgRGF0ZSB8IHN0cmluZyxcbiAgICBvcHRpb25zOiBNYXhWYWxpZGF0b3JPcHRpb25zXG4gICk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xuXG4gICAgbGV0IHsgbWF4IH0gPSBvcHRpb25zO1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgIShtYXggaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgbWF4ID0gbmV3IERhdGUobWF4KTtcbiAgICAgIGlmIChOdW1iZXIuaXNOYU4obWF4LmdldERhdGUoKSkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgTWF4IHBhcmFtIGRlZmluZWRcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlID4gbWF4XG4gICAgICA/IHRoaXMuZ2V0TWVzc2FnZShvcHRpb25zLm1lc3NhZ2UgfHwgdGhpcy5tZXNzYWdlLCBtYXgpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF4VmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3ZhbGlkYXRpb24vVmFsaWRhdG9ycy9NYXhWYWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN4QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHekM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1ERztBQUVJLElBQU0sWUFBWSxHQUFsQixNQUFNLFlBQWEsU0FBUSxTQUE4QjtJQUM5RCxZQUFZLFVBQWtCLHNCQUFzQixDQUFDLEdBQUc7UUFDdEQsS0FBSyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7O09BZUc7SUFDSSxTQUFTLENBQ2QsS0FBNkIsRUFDN0IsT0FBNEI7UUFFNUIsSUFBSSxPQUFPLEtBQUssS0FBSyxXQUFXO1lBQUUsT0FBTztRQUV6QyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQ3RCLElBQUksS0FBSyxZQUFZLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxZQUFZLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDcEQsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3BCLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUNqRCxDQUFDO1FBRUQsT0FBTyxLQUFLLEdBQUcsR0FBRztZQUNoQixDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDO1lBQ3ZELENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDaEIsQ0FBQztDQUNGLENBQUE7QUF0Q1ksWUFBWTtJQUR4QixTQUFTLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQzs7R0FDakIsWUFBWSxDQXNDeEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWYWxpZGF0b3IgfSBmcm9tIFwiLi9WYWxpZGF0b3JcIjtcbmltcG9ydCB7IERFRkFVTFRfRVJST1JfTUVTU0FHRVMsIFZhbGlkYXRpb25LZXlzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyB2YWxpZGF0b3IgfSBmcm9tIFwiLi9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBNYXhWYWxpZGF0b3JPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFZhbGlkYXRvciBmb3IgY2hlY2tpbmcgaWYgYSB2YWx1ZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYSBtYXhpbXVtXG4gKiBAc3VtbWFyeSBUaGUgTWF4VmFsaWRhdG9yIGNoZWNrcyBpZiBhIG51bWVyaWMgdmFsdWUsIGRhdGUsIG9yIHN0cmluZyBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG9cbiAqIGEgc3BlY2lmaWVkIG1heGltdW0gdmFsdWUuIEl0IHN1cHBvcnRzIGNvbXBhcmluZyBudW1iZXJzIGRpcmVjdGx5LCBkYXRlcyBjaHJvbm9sb2dpY2FsbHksXG4gKiBhbmQgc3RyaW5ncyBsZXhpY29ncmFwaGljYWxseS4gVGhpcyB2YWxpZGF0b3IgaXMgdHlwaWNhbGx5IHVzZWQgd2l0aCB0aGUgQG1heCBkZWNvcmF0b3IuXG4gKiBcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZV0gLSBDdXN0b20gZXJyb3IgbWVzc2FnZSB0byBkaXNwbGF5IHdoZW4gdmFsaWRhdGlvbiBmYWlscywgZGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfRVJST1JfTUVTU0FHRVMjTUFYfVxuICogXG4gKiBAY2xhc3MgTWF4VmFsaWRhdG9yXG4gKiBAZXh0ZW5kcyBWYWxpZGF0b3JcbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIENyZWF0ZSBhIG1heCB2YWxpZGF0b3Igd2l0aCBkZWZhdWx0IGVycm9yIG1lc3NhZ2VcbiAqIGNvbnN0IG1heFZhbGlkYXRvciA9IG5ldyBNYXhWYWxpZGF0b3IoKTtcbiAqIFxuICogLy8gQ3JlYXRlIGEgbWF4IHZhbGlkYXRvciB3aXRoIGN1c3RvbSBlcnJvciBtZXNzYWdlXG4gKiBjb25zdCBjdXN0b21NYXhWYWxpZGF0b3IgPSBuZXcgTWF4VmFsaWRhdG9yKFwiVmFsdWUgbXVzdCBub3QgZXhjZWVkIHswfVwiKTtcbiAqIFxuICogLy8gVmFsaWRhdGUgYSBudW1iZXJcbiAqIGNvbnN0IG51bU9wdGlvbnMgPSB7IG1heDogMTAwLCBtZXNzYWdlOiBcIk51bWJlciB0b28gbGFyZ2VcIiB9O1xuICogY29uc3QgbnVtUmVzdWx0ID0gbWF4VmFsaWRhdG9yLmhhc0Vycm9ycyg1MCwgbnVtT3B0aW9ucyk7IC8vIHVuZGVmaW5lZCAodmFsaWQpXG4gKiBjb25zdCBpbnZhbGlkTnVtUmVzdWx0ID0gbWF4VmFsaWRhdG9yLmhhc0Vycm9ycygxNTAsIG51bU9wdGlvbnMpOyAvLyBSZXR1cm5zIGVycm9yIG1lc3NhZ2UgKGludmFsaWQpXG4gKiBcbiAqIC8vIFZhbGlkYXRlIGEgZGF0ZVxuICogY29uc3QgZGF0ZU9wdGlvbnMgPSB7IG1heDogbmV3IERhdGUoMjAyMywgMTEsIDMxKSB9O1xuICogY29uc3QgZGF0ZVJlc3VsdCA9IG1heFZhbGlkYXRvci5oYXNFcnJvcnMobmV3IERhdGUoMjAyMywgNSwgMTUpLCBkYXRlT3B0aW9ucyk7IC8vIHVuZGVmaW5lZCAodmFsaWQpXG4gKiBgYGBcbiAqIFxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDIGFzIENsaWVudFxuICogICBwYXJ0aWNpcGFudCBWIGFzIE1heFZhbGlkYXRvclxuICogICBcbiAqICAgQy0+PlY6IG5ldyBNYXhWYWxpZGF0b3IobWVzc2FnZSlcbiAqICAgQy0+PlY6IGhhc0Vycm9ycyh2YWx1ZSwgb3B0aW9ucylcbiAqICAgYWx0IHZhbHVlIGlzIHVuZGVmaW5lZFxuICogICAgIFYtLT4+QzogdW5kZWZpbmVkICh2YWxpZClcbiAqICAgZWxzZSB2YWx1ZSBpcyBEYXRlIGFuZCBtYXggaXMgbm90IERhdGVcbiAqICAgICBWLT4+VjogQ29udmVydCBtYXggdG8gRGF0ZVxuICogICAgIGFsdCBjb252ZXJzaW9uIGZhaWxzXG4gKiAgICAgICBWLS0+PkM6IEVycm9yOiBJbnZhbGlkIE1heCBwYXJhbVxuICogICAgIGVuZFxuICogICBlbmRcbiAqICAgYWx0IHZhbHVlID4gbWF4XG4gKiAgICAgVi0tPj5DOiBFcnJvciBtZXNzYWdlXG4gKiAgIGVsc2UgdmFsdWUgPD0gbWF4XG4gKiAgICAgVi0tPj5DOiB1bmRlZmluZWQgKHZhbGlkKVxuICogICBlbmRcbiAqIFxuICogQGNhdGVnb3J5IFZhbGlkYXRvcnNcbiAqL1xuQHZhbGlkYXRvcihWYWxpZGF0aW9uS2V5cy5NQVgpXG5leHBvcnQgY2xhc3MgTWF4VmFsaWRhdG9yIGV4dGVuZHMgVmFsaWRhdG9yPE1heFZhbGlkYXRvck9wdGlvbnM+IHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nID0gREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5NQVgpIHtcbiAgICBzdXBlcihtZXNzYWdlLCBcIm51bWJlclwiLCBcIkRhdGVcIiwgXCJzdHJpbmdcIik7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENoZWNrcyBpZiBhIHZhbHVlIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBhIG1heGltdW1cbiAgICogQHN1bW1hcnkgVmFsaWRhdGVzIHRoYXQgdGhlIHByb3ZpZGVkIHZhbHVlIGRvZXMgbm90IGV4Y2VlZCB0aGUgbWF4aW11bSB2YWx1ZVxuICAgKiBzcGVjaWZpZWQgaW4gdGhlIG9wdGlvbnMuIEZvciBkYXRlcywgaXQgcGVyZm9ybXMgY2hyb25vbG9naWNhbCBjb21wYXJpc29uLFxuICAgKiBjb252ZXJ0aW5nIHN0cmluZyByZXByZXNlbnRhdGlvbnMgdG8gRGF0ZSBvYmplY3RzIGlmIG5lY2Vzc2FyeS4gRm9yIG51bWJlcnNcbiAgICogYW5kIHN0cmluZ3MsIGl0IHBlcmZvcm1zIGRpcmVjdCBjb21wYXJpc29uLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IERhdGUgfCBzdHJpbmd9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIHZhbGlkYXRlXG4gICAqIEBwYXJhbSB7TWF4VmFsaWRhdG9yT3B0aW9uc30gb3B0aW9ucyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBjb250YWluaW5nIHRoZSBtYXhpbXVtIHZhbHVlXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZyB8IHVuZGVmaW5lZH0gRXJyb3IgbWVzc2FnZSBpZiB2YWxpZGF0aW9uIGZhaWxzLCB1bmRlZmluZWQgaWYgdmFsaWRhdGlvbiBwYXNzZXNcbiAgICpcbiAgICogQG92ZXJyaWRlXG4gICAqXG4gICAqIEBzZWUgVmFsaWRhdG9yI2hhc0Vycm9yc1xuICAgKi9cbiAgcHVibGljIGhhc0Vycm9ycyhcbiAgICB2YWx1ZTogbnVtYmVyIHwgRGF0ZSB8IHN0cmluZyxcbiAgICBvcHRpb25zOiBNYXhWYWxpZGF0b3JPcHRpb25zXG4gICk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xuXG4gICAgbGV0IHsgbWF4IH0gPSBvcHRpb25zO1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgIShtYXggaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgbWF4ID0gbmV3IERhdGUobWF4KTtcbiAgICAgIGlmIChOdW1iZXIuaXNOYU4obWF4LmdldERhdGUoKSkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgTWF4IHBhcmFtIGRlZmluZWRcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlID4gbWF4XG4gICAgICA/IHRoaXMuZ2V0TWVzc2FnZShvcHRpb25zLm1lc3NhZ2UgfHwgdGhpcy5tZXNzYWdlLCBtYXgpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
@@ -1,24 +1,70 @@
1
1
  import { Validator } from "./Validator";
2
2
  import { MinValidatorOptions } from "../types";
3
3
  /**
4
- * @summary Min Validator
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
- * @summary Validates Model
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 {MaxValidatorOptions} options
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
- * @summary Min Validator
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
- * @summary Validates Model
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 {MaxValidatorOptions} options
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWluVmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3ZhbGlkYXRpb24vVmFsaWRhdG9ycy9NaW5WYWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN4QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHekM7Ozs7Ozs7OztHQVNHO0FBRUksSUFBTSxZQUFZLEdBQWxCLE1BQU0sWUFBYSxTQUFRLFNBQThCO0lBQzlELFlBQVksVUFBa0Isc0JBQXNCLENBQUMsR0FBRztRQUN0RCxLQUFLLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0ksU0FBUyxDQUNkLEtBQTZCLEVBQzdCLE9BQTRCO1FBRTVCLElBQUksT0FBTyxLQUFLLEtBQUssV0FBVztZQUFFLE9BQU87UUFFekMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUN0QixJQUFJLEtBQUssWUFBWSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsWUFBWSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3BELEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwQixJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDakQsQ0FBQztRQUNELE9BQU8sS0FBSyxHQUFHLEdBQUc7WUFDaEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQztZQUN2RCxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2hCLENBQUM7Q0FDRixDQUFBO0FBakNZLFlBQVk7SUFEeEIsU0FBUyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUM7O0dBQ2pCLFlBQVksQ0FpQ3hCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmFsaWRhdG9yIH0gZnJvbSBcIi4vVmFsaWRhdG9yXCI7XG5pbXBvcnQgeyBERUZBVUxUX0VSUk9SX01FU1NBR0VTLCBWYWxpZGF0aW9uS2V5cyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgdmFsaWRhdG9yIH0gZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgTWluVmFsaWRhdG9yT3B0aW9ucyB9IGZyb20gXCIuLi90eXBlc1wiO1xuXG4vKipcbiAqIEBzdW1tYXJ5IE1pbiBWYWxpZGF0b3JcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2VdIGRlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX0VSUk9SX01FU1NBR0VTI01JTn1cbiAqXG4gKiBAY2xhc3MgTWluVmFsaWRhdG9yXG4gKiBAZXh0ZW5kcyBWYWxpZGF0b3JcbiAqXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdG9yc1xuICovXG5AdmFsaWRhdG9yKFZhbGlkYXRpb25LZXlzLk1JTilcbmV4cG9ydCBjbGFzcyBNaW5WYWxpZGF0b3IgZXh0ZW5kcyBWYWxpZGF0b3I8TWluVmFsaWRhdG9yT3B0aW9ucz4ge1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcgPSBERUZBVUxUX0VSUk9SX01FU1NBR0VTLk1JTikge1xuICAgIHN1cGVyKG1lc3NhZ2UsIFwibnVtYmVyXCIsIFwiRGF0ZVwiLCBcInN0cmluZ1wiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBWYWxpZGF0ZXMgTW9kZWxcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gICAqIEBwYXJhbSB7TWF4VmFsaWRhdG9yT3B0aW9uc30gb3B0aW9uc1xuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmcgfCB1bmRlZmluZWR9XG4gICAqXG4gICAqIEBvdmVycmlkZVxuICAgKlxuICAgKiBAc2VlIFZhbGlkYXRvciNoYXNFcnJvcnNcbiAgICovXG4gIHB1YmxpYyBoYXNFcnJvcnMoXG4gICAgdmFsdWU6IG51bWJlciB8IERhdGUgfCBzdHJpbmcsXG4gICAgb3B0aW9uczogTWluVmFsaWRhdG9yT3B0aW9uc1xuICApOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcblxuICAgIGxldCB7IG1pbiB9ID0gb3B0aW9ucztcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmICEobWluIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgIG1pbiA9IG5ldyBEYXRlKG1pbik7XG4gICAgICBpZiAoTnVtYmVyLmlzTmFOKG1pbi5nZXREYXRlKCkpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIE1pbiBwYXJhbSBkZWZpbmVkXCIpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWUgPCBtaW5cbiAgICAgID8gdGhpcy5nZXRNZXNzYWdlKG9wdGlvbnMubWVzc2FnZSB8fCB0aGlzLm1lc3NhZ2UsIG1pbilcbiAgICAgIDogdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWluVmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3ZhbGlkYXRpb24vVmFsaWRhdG9ycy9NaW5WYWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN4QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHekM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1ERztBQUVJLElBQU0sWUFBWSxHQUFsQixNQUFNLFlBQWEsU0FBUSxTQUE4QjtJQUM5RCxZQUFZLFVBQWtCLHNCQUFzQixDQUFDLEdBQUc7UUFDdEQsS0FBSyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7O09BZUc7SUFDSSxTQUFTLENBQ2QsS0FBNkIsRUFDN0IsT0FBNEI7UUFFNUIsSUFBSSxPQUFPLEtBQUssS0FBSyxXQUFXO1lBQUUsT0FBTztRQUV6QyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQ3RCLElBQUksS0FBSyxZQUFZLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxZQUFZLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDcEQsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3BCLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUNqRCxDQUFDO1FBQ0QsT0FBTyxLQUFLLEdBQUcsR0FBRztZQUNoQixDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDO1lBQ3ZELENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDaEIsQ0FBQztDQUNGLENBQUE7QUFyQ1ksWUFBWTtJQUR4QixTQUFTLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQzs7R0FDakIsWUFBWSxDQXFDeEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWYWxpZGF0b3IgfSBmcm9tIFwiLi9WYWxpZGF0b3JcIjtcbmltcG9ydCB7IERFRkFVTFRfRVJST1JfTUVTU0FHRVMsIFZhbGlkYXRpb25LZXlzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyB2YWxpZGF0b3IgfSBmcm9tIFwiLi9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBNaW5WYWxpZGF0b3JPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFZhbGlkYXRvciBmb3IgY2hlY2tpbmcgaWYgYSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYSBtaW5pbXVtXG4gKiBAc3VtbWFyeSBUaGUgTWluVmFsaWRhdG9yIGNoZWNrcyBpZiBhIG51bWVyaWMgdmFsdWUsIGRhdGUsIG9yIHN0cmluZyBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG9cbiAqIGEgc3BlY2lmaWVkIG1pbmltdW0gdmFsdWUuIEl0IHN1cHBvcnRzIGNvbXBhcmluZyBudW1iZXJzIGRpcmVjdGx5LCBkYXRlcyBjaHJvbm9sb2dpY2FsbHksXG4gKiBhbmQgc3RyaW5ncyBsZXhpY29ncmFwaGljYWxseS4gVGhpcyB2YWxpZGF0b3IgaXMgdHlwaWNhbGx5IHVzZWQgd2l0aCB0aGUgQG1pbiBkZWNvcmF0b3IuXG4gKiBcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZV0gLSBDdXN0b20gZXJyb3IgbWVzc2FnZSB0byBkaXNwbGF5IHdoZW4gdmFsaWRhdGlvbiBmYWlscywgZGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfRVJST1JfTUVTU0FHRVMjTUlOfVxuICogXG4gKiBAY2xhc3MgTWluVmFsaWRhdG9yXG4gKiBAZXh0ZW5kcyBWYWxpZGF0b3JcbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIENyZWF0ZSBhIG1pbiB2YWxpZGF0b3Igd2l0aCBkZWZhdWx0IGVycm9yIG1lc3NhZ2VcbiAqIGNvbnN0IG1pblZhbGlkYXRvciA9IG5ldyBNaW5WYWxpZGF0b3IoKTtcbiAqIFxuICogLy8gQ3JlYXRlIGEgbWluIHZhbGlkYXRvciB3aXRoIGN1c3RvbSBlcnJvciBtZXNzYWdlXG4gKiBjb25zdCBjdXN0b21NaW5WYWxpZGF0b3IgPSBuZXcgTWluVmFsaWRhdG9yKFwiVmFsdWUgbXVzdCBiZSBhdCBsZWFzdCB7MH1cIik7XG4gKiBcbiAqIC8vIFZhbGlkYXRlIGEgbnVtYmVyXG4gKiBjb25zdCBudW1PcHRpb25zID0geyBtaW46IDEwLCBtZXNzYWdlOiBcIk51bWJlciB0b28gc21hbGxcIiB9O1xuICogY29uc3QgbnVtUmVzdWx0ID0gbWluVmFsaWRhdG9yLmhhc0Vycm9ycyg1MCwgbnVtT3B0aW9ucyk7IC8vIHVuZGVmaW5lZCAodmFsaWQpXG4gKiBjb25zdCBpbnZhbGlkTnVtUmVzdWx0ID0gbWluVmFsaWRhdG9yLmhhc0Vycm9ycyg1LCBudW1PcHRpb25zKTsgLy8gUmV0dXJucyBlcnJvciBtZXNzYWdlIChpbnZhbGlkKVxuICogXG4gKiAvLyBWYWxpZGF0ZSBhIGRhdGVcbiAqIGNvbnN0IGRhdGVPcHRpb25zID0geyBtaW46IG5ldyBEYXRlKDIwMjMsIDAsIDEpIH07XG4gKiBjb25zdCBkYXRlUmVzdWx0ID0gbWluVmFsaWRhdG9yLmhhc0Vycm9ycyhuZXcgRGF0ZSgyMDIzLCA1LCAxNSksIGRhdGVPcHRpb25zKTsgLy8gdW5kZWZpbmVkICh2YWxpZClcbiAqIGBgYFxuICogXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IEMgYXMgQ2xpZW50XG4gKiAgIHBhcnRpY2lwYW50IFYgYXMgTWluVmFsaWRhdG9yXG4gKiAgIFxuICogICBDLT4+VjogbmV3IE1pblZhbGlkYXRvcihtZXNzYWdlKVxuICogICBDLT4+VjogaGFzRXJyb3JzKHZhbHVlLCBvcHRpb25zKVxuICogICBhbHQgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKiAgICAgVi0tPj5DOiB1bmRlZmluZWQgKHZhbGlkKVxuICogICBlbHNlIHZhbHVlIGlzIERhdGUgYW5kIG1pbiBpcyBub3QgRGF0ZVxuICogICAgIFYtPj5WOiBDb252ZXJ0IG1pbiB0byBEYXRlXG4gKiAgICAgYWx0IGNvbnZlcnNpb24gZmFpbHNcbiAqICAgICAgIFYtLT4+QzogRXJyb3I6IEludmFsaWQgTWluIHBhcmFtXG4gKiAgICAgZW5kXG4gKiAgIGVuZFxuICogICBhbHQgdmFsdWUgPCBtaW5cbiAqICAgICBWLS0+PkM6IEVycm9yIG1lc3NhZ2VcbiAqICAgZWxzZSB2YWx1ZSA+PSBtaW5cbiAqICAgICBWLS0+PkM6IHVuZGVmaW5lZCAodmFsaWQpXG4gKiAgIGVuZFxuICogXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdG9yc1xuICovXG5AdmFsaWRhdG9yKFZhbGlkYXRpb25LZXlzLk1JTilcbmV4cG9ydCBjbGFzcyBNaW5WYWxpZGF0b3IgZXh0ZW5kcyBWYWxpZGF0b3I8TWluVmFsaWRhdG9yT3B0aW9ucz4ge1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcgPSBERUZBVUxUX0VSUk9SX01FU1NBR0VTLk1JTikge1xuICAgIHN1cGVyKG1lc3NhZ2UsIFwibnVtYmVyXCIsIFwiRGF0ZVwiLCBcInN0cmluZ1wiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ2hlY2tzIGlmIGEgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGEgbWluaW11bVxuICAgKiBAc3VtbWFyeSBWYWxpZGF0ZXMgdGhhdCB0aGUgcHJvdmlkZWQgdmFsdWUgaXMgbm90IGxlc3MgdGhhbiB0aGUgbWluaW11bSB2YWx1ZVxuICAgKiBzcGVjaWZpZWQgaW4gdGhlIG9wdGlvbnMuIEZvciBkYXRlcywgaXQgcGVyZm9ybXMgY2hyb25vbG9naWNhbCBjb21wYXJpc29uLFxuICAgKiBjb252ZXJ0aW5nIHN0cmluZyByZXByZXNlbnRhdGlvbnMgdG8gRGF0ZSBvYmplY3RzIGlmIG5lY2Vzc2FyeS4gRm9yIG51bWJlcnNcbiAgICogYW5kIHN0cmluZ3MsIGl0IHBlcmZvcm1zIGRpcmVjdCBjb21wYXJpc29uLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IERhdGUgfCBzdHJpbmd9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIHZhbGlkYXRlXG4gICAqIEBwYXJhbSB7TWluVmFsaWRhdG9yT3B0aW9uc30gb3B0aW9ucyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBjb250YWluaW5nIHRoZSBtaW5pbXVtIHZhbHVlXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZyB8IHVuZGVmaW5lZH0gRXJyb3IgbWVzc2FnZSBpZiB2YWxpZGF0aW9uIGZhaWxzLCB1bmRlZmluZWQgaWYgdmFsaWRhdGlvbiBwYXNzZXNcbiAgICpcbiAgICogQG92ZXJyaWRlXG4gICAqXG4gICAqIEBzZWUgVmFsaWRhdG9yI2hhc0Vycm9yc1xuICAgKi9cbiAgcHVibGljIGhhc0Vycm9ycyhcbiAgICB2YWx1ZTogbnVtYmVyIHwgRGF0ZSB8IHN0cmluZyxcbiAgICBvcHRpb25zOiBNaW5WYWxpZGF0b3JPcHRpb25zXG4gICk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xuXG4gICAgbGV0IHsgbWluIH0gPSBvcHRpb25zO1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgIShtaW4gaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgbWluID0gbmV3IERhdGUobWluKTtcbiAgICAgIGlmIChOdW1iZXIuaXNOYU4obWluLmdldERhdGUoKSkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgTWluIHBhcmFtIGRlZmluZWRcIik7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZSA8IG1pblxuICAgICAgPyB0aGlzLmdldE1lc3NhZ2Uob3B0aW9ucy5tZXNzYWdlIHx8IHRoaXMubWVzc2FnZSwgbWluKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
@@ -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
- * @summary Pattern Validator
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} [key] defaults to {@link ValidationKeys#PATTERN}
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
- * @summary parses and validates a pattern
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
- * @summary Validates a Model
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
- * @param {string} value
28
- * @param {PatternValidatorOptions} options
94
+ * @return {string | undefined} Error message if validation fails, undefined if validation passes
29
95
  *
30
- * @return {string | undefined}
96
+ * @throws {Error} If no pattern is provided in the options
31
97
  *
32
98
  * @override
33
99
  *