@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.
Files changed (149) hide show
  1. package/dist/decorator-validation.cjs +1202 -386
  2. package/dist/decorator-validation.esm.cjs +1158 -341
  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 +5 -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/EmailValidator.d.ts +39 -7
  45. package/lib/esm/validation/Validators/EmailValidator.js +40 -8
  46. package/lib/esm/validation/Validators/ListValidator.d.ts +44 -6
  47. package/lib/esm/validation/Validators/ListValidator.js +45 -7
  48. package/lib/esm/validation/Validators/MaxValidator.d.ts +52 -6
  49. package/lib/esm/validation/Validators/MaxValidator.js +53 -7
  50. package/lib/esm/validation/Validators/MinValidator.d.ts +52 -6
  51. package/lib/esm/validation/Validators/MinValidator.js +53 -7
  52. package/lib/esm/validation/Validators/PasswordValidator.js +1 -1
  53. package/lib/esm/validation/Validators/PatternValidator.d.ts +75 -9
  54. package/lib/esm/validation/Validators/PatternValidator.js +76 -10
  55. package/lib/esm/validation/Validators/RequiredValidator.d.ts +52 -6
  56. package/lib/esm/validation/Validators/RequiredValidator.js +53 -7
  57. package/lib/esm/validation/Validators/TypeValidator.d.ts +60 -6
  58. package/lib/esm/validation/Validators/TypeValidator.js +69 -7
  59. package/lib/esm/validation/Validators/URLValidator.d.ts +41 -7
  60. package/lib/esm/validation/Validators/URLValidator.js +42 -8
  61. package/lib/esm/validation/Validators/Validator.d.ts +76 -16
  62. package/lib/esm/validation/Validators/Validator.js +68 -11
  63. package/lib/esm/validation/Validators/ValidatorRegistry.d.ts +1 -7
  64. package/lib/esm/validation/Validators/ValidatorRegistry.js +4 -11
  65. package/lib/esm/validation/decorators.d.ts +50 -40
  66. package/lib/esm/validation/decorators.js +102 -53
  67. package/lib/esm/validation/types.d.ts +146 -28
  68. package/lib/esm/validation/types.js +1 -1
  69. package/lib/index.cjs +7 -39
  70. package/lib/index.d.ts +5 -37
  71. package/lib/model/Model.cjs +114 -51
  72. package/lib/model/Model.d.ts +107 -35
  73. package/lib/model/constants.cjs +4 -4
  74. package/lib/model/constants.d.ts +3 -3
  75. package/lib/model/construction.cjs +4 -4
  76. package/lib/model/construction.d.ts +3 -3
  77. package/lib/model/decorators.cjs +6 -4
  78. package/lib/model/decorators.d.ts +3 -3
  79. package/lib/model/index.cjs +2 -1
  80. package/lib/model/index.d.ts +1 -0
  81. package/lib/model/types.cjs +1 -1
  82. package/lib/model/types.d.ts +30 -11
  83. package/lib/model/utils.cjs +15 -0
  84. package/lib/model/utils.d.ts +3 -0
  85. package/lib/model/validation.cjs +11 -12
  86. package/lib/model/validation.d.ts +5 -5
  87. package/lib/utils/Decoration.cjs +196 -0
  88. package/lib/utils/Decoration.d.ts +123 -0
  89. package/lib/utils/constants.cjs +29 -11
  90. package/lib/utils/constants.d.ts +27 -9
  91. package/lib/utils/dates.cjs +28 -18
  92. package/lib/utils/dates.d.ts +26 -16
  93. package/lib/utils/decorators.cjs +42 -1
  94. package/lib/utils/decorators.d.ts +41 -0
  95. package/lib/utils/hashing.cjs +49 -5
  96. package/lib/utils/hashing.d.ts +50 -6
  97. package/lib/utils/index.cjs +2 -1
  98. package/lib/utils/index.d.ts +1 -0
  99. package/lib/utils/registry.cjs +1 -1
  100. package/lib/utils/registry.d.ts +3 -3
  101. package/lib/utils/serialization.cjs +5 -4
  102. package/lib/utils/serialization.d.ts +1 -1
  103. package/lib/utils/strings.cjs +5 -5
  104. package/lib/utils/strings.d.ts +4 -4
  105. package/lib/utils/types.cjs +1 -1
  106. package/lib/utils/types.d.ts +123 -16
  107. package/lib/validation/Validation.cjs +1 -1
  108. package/lib/validation/Validators/DateValidator.cjs +41 -9
  109. package/lib/validation/Validators/DateValidator.d.ts +40 -8
  110. package/lib/validation/Validators/DiffValidator.cjs +1 -1
  111. package/lib/validation/Validators/EmailValidator.cjs +40 -8
  112. package/lib/validation/Validators/EmailValidator.d.ts +39 -7
  113. package/lib/validation/Validators/EqualsValidator.cjs +1 -1
  114. package/lib/validation/Validators/GreaterThanOrEqualValidator.cjs +1 -1
  115. package/lib/validation/Validators/GreaterThanValidator.cjs +1 -1
  116. package/lib/validation/Validators/LessThanOrEqualValidator.cjs +1 -1
  117. package/lib/validation/Validators/LessThanValidator.cjs +1 -1
  118. package/lib/validation/Validators/ListValidator.cjs +45 -7
  119. package/lib/validation/Validators/ListValidator.d.ts +44 -6
  120. package/lib/validation/Validators/MaxLengthValidator.cjs +1 -1
  121. package/lib/validation/Validators/MaxValidator.cjs +53 -7
  122. package/lib/validation/Validators/MaxValidator.d.ts +52 -6
  123. package/lib/validation/Validators/MinLengthValidator.cjs +1 -1
  124. package/lib/validation/Validators/MinValidator.cjs +53 -7
  125. package/lib/validation/Validators/MinValidator.d.ts +52 -6
  126. package/lib/validation/Validators/PasswordValidator.cjs +1 -1
  127. package/lib/validation/Validators/PatternValidator.cjs +76 -10
  128. package/lib/validation/Validators/PatternValidator.d.ts +75 -9
  129. package/lib/validation/Validators/RequiredValidator.cjs +53 -7
  130. package/lib/validation/Validators/RequiredValidator.d.ts +52 -6
  131. package/lib/validation/Validators/StepValidator.cjs +1 -1
  132. package/lib/validation/Validators/TypeValidator.cjs +71 -9
  133. package/lib/validation/Validators/TypeValidator.d.ts +60 -6
  134. package/lib/validation/Validators/URLValidator.cjs +42 -8
  135. package/lib/validation/Validators/URLValidator.d.ts +41 -7
  136. package/lib/validation/Validators/Validator.cjs +69 -12
  137. package/lib/validation/Validators/Validator.d.ts +76 -16
  138. package/lib/validation/Validators/ValidatorRegistry.cjs +4 -12
  139. package/lib/validation/Validators/ValidatorRegistry.d.ts +1 -7
  140. package/lib/validation/Validators/constants.cjs +2 -2
  141. package/lib/validation/Validators/decorators.cjs +2 -2
  142. package/lib/validation/Validators/index.cjs +1 -1
  143. package/lib/validation/Validators/utils.cjs +3 -3
  144. package/lib/validation/decorators.cjs +105 -56
  145. package/lib/validation/decorators.d.ts +50 -40
  146. package/lib/validation/index.cjs +1 -1
  147. package/lib/validation/types.cjs +1 -1
  148. package/lib/validation/types.d.ts +146 -28
  149. package/package.json +2 -1
@@ -11,26 +11,58 @@ import { Validator } from "./Validator";
11
11
  import { DEFAULT_ERROR_MESSAGES, ValidationKeys } from "./constants";
12
12
  import { validator } from "./decorators";
13
13
  /**
14
- * @summary Date Validator
15
- *
16
- * @param {string} [message] defaults to {@link DEFAULT_ERROR_MESSAGES#DATE}
17
- *
14
+ * @description Validator for checking if a value is a valid date
15
+ * @summary The DateValidator checks if a value is a valid date object or a string that can be converted to a valid date.
16
+ * It validates that the value represents a real date and not an invalid date like "2023-02-31".
17
+ * @param {string} [message] - Custom error message to display when validation fails, defaults to {@link DEFAULT_ERROR_MESSAGES#DATE}
18
18
  * @class DateValidator
19
19
  * @extends Validator
20
20
  *
21
21
  * @category Validators
22
+ * @example
23
+ * ```typescript
24
+ * // Create a date validator with default error message
25
+ * const dateValidator = new DateValidator();
26
+ *
27
+ * // Create a date validator with custom error message
28
+ * const customDateValidator = new DateValidator("Please enter a valid date");
29
+ *
30
+ * // Validate a date
31
+ * const result = dateValidator.hasErrors(new Date()); // undefined (valid)
32
+ * const invalidResult = dateValidator.hasErrors("not a date"); // Returns error message (invalid)
33
+ * ```
34
+ * @mermaid
35
+ * sequenceDiagram
36
+ * participant C as Client
37
+ * participant V as DateValidator
38
+ *
39
+ * C->>V: new DateValidator(message)
40
+ * C->>V: hasErrors(value, options)
41
+ * alt value is undefined
42
+ * V-->>C: undefined (valid)
43
+ * else value is string
44
+ * V->>V: Convert to Date
45
+ * end
46
+ * alt Date is invalid (NaN)
47
+ * V-->>C: Error message
48
+ * else Date is valid
49
+ * V-->>C: undefined (valid)
50
+ * end
22
51
  */
23
52
  let DateValidator = class DateValidator extends Validator {
24
53
  constructor(message = DEFAULT_ERROR_MESSAGES.DATE) {
25
54
  super(message, Number.name, Date.name, String.name);
26
55
  }
27
56
  /**
28
- * @summary Validates a model
57
+ * @description Checks if the provided value is a valid date
58
+ * @summary Validates that the given value is a valid date. If the value is a string,
59
+ * it attempts to convert it to a Date object. Returns an error message if the date is invalid,
60
+ * or undefined if the date is valid or if the value is undefined.
29
61
  *
30
- * @param {Date | string} value
31
- * @param {DateValidatorOptions} [options]
62
+ * @param {Date | string} value - The value to validate, can be a Date object or a string
63
+ * @param {DateValidatorOptions} [options={}] - Optional configuration options for the validator
32
64
  *
33
- * @return {string | undefined}
65
+ * @return {string | undefined} Error message if validation fails, undefined if validation passes
34
66
  *
35
67
  * @override
36
68
  *
@@ -52,4 +84,4 @@ DateValidator = __decorate([
52
84
  __metadata("design:paramtypes", [String])
53
85
  ], DateValidator);
54
86
  export { DateValidator };
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0ZVZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy92YWxpZGF0aW9uL1ZhbGlkYXRvcnMvRGF0ZVZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUd6Qzs7Ozs7Ozs7O0dBU0c7QUFFSSxJQUFNLGFBQWEsR0FBbkIsTUFBTSxhQUFjLFNBQVEsU0FBK0I7SUFDaEUsWUFBWSxVQUFrQixzQkFBc0IsQ0FBQyxJQUFJO1FBQ3ZELEtBQUssQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSSxTQUFTLENBQ2QsS0FBb0IsRUFDcEIsVUFBZ0MsRUFBRTtRQUVsQyxJQUFJLEtBQUssS0FBSyxTQUFTO1lBQUUsT0FBTztRQUVoQyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7WUFBRSxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFdkQsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDbEMsTUFBTSxFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUM7WUFDakMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEQsQ0FBQztJQUNILENBQUM7Q0FDRixDQUFBO0FBOUJZLGFBQWE7SUFEekIsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7O0dBQ2xCLGFBQWEsQ0E4QnpCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmFsaWRhdG9yIH0gZnJvbSBcIi4vVmFsaWRhdG9yXCI7XG5pbXBvcnQgeyBERUZBVUxUX0VSUk9SX01FU1NBR0VTLCBWYWxpZGF0aW9uS2V5cyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgdmFsaWRhdG9yIH0gZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgRGF0ZVZhbGlkYXRvck9wdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXNcIjtcblxuLyoqXG4gKiBAc3VtbWFyeSBEYXRlIFZhbGlkYXRvclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZV0gZGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfRVJST1JfTUVTU0FHRVMjREFURX1cbiAqXG4gKiBAY2xhc3MgRGF0ZVZhbGlkYXRvclxuICogQGV4dGVuZHMgVmFsaWRhdG9yXG4gKlxuICogQGNhdGVnb3J5IFZhbGlkYXRvcnNcbiAqL1xuQHZhbGlkYXRvcihWYWxpZGF0aW9uS2V5cy5EQVRFKVxuZXhwb3J0IGNsYXNzIERhdGVWYWxpZGF0b3IgZXh0ZW5kcyBWYWxpZGF0b3I8RGF0ZVZhbGlkYXRvck9wdGlvbnM+IHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nID0gREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5EQVRFKSB7XG4gICAgc3VwZXIobWVzc2FnZSwgTnVtYmVyLm5hbWUsIERhdGUubmFtZSwgU3RyaW5nLm5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFZhbGlkYXRlcyBhIG1vZGVsXG4gICAqXG4gICAqIEBwYXJhbSB7RGF0ZSB8IHN0cmluZ30gdmFsdWVcbiAgICogQHBhcmFtIHtEYXRlVmFsaWRhdG9yT3B0aW9uc30gW29wdGlvbnNdXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICpcbiAgICogQG92ZXJyaWRlXG4gICAqXG4gICAqIEBzZWUgVmFsaWRhdG9yI2hhc0Vycm9yc1xuICAgKi9cbiAgcHVibGljIGhhc0Vycm9ycyhcbiAgICB2YWx1ZTogRGF0ZSB8IHN0cmluZyxcbiAgICBvcHRpb25zOiBEYXRlVmFsaWRhdG9yT3B0aW9ucyA9IHt9XG4gICk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybjtcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHZhbHVlID0gbmV3IERhdGUodmFsdWUpO1xuXG4gICAgaWYgKE51bWJlci5pc05hTih2YWx1ZS5nZXREYXRlKCkpKSB7XG4gICAgICBjb25zdCB7IG1lc3NhZ2UgPSBcIlwiIH0gPSBvcHRpb25zO1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TWVzc2FnZShtZXNzYWdlIHx8IHRoaXMubWVzc2FnZSk7XG4gICAgfVxuICB9XG59XG4iXX0=
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0ZVZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy92YWxpZGF0aW9uL1ZhbGlkYXRvcnMvRGF0ZVZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUd6Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQ0c7QUFFSSxJQUFNLGFBQWEsR0FBbkIsTUFBTSxhQUFjLFNBQVEsU0FBK0I7SUFDaEUsWUFBWSxVQUFrQixzQkFBc0IsQ0FBQyxJQUFJO1FBQ3ZELEtBQUssQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSSxTQUFTLENBQ2QsS0FBb0IsRUFDcEIsVUFBZ0MsRUFBRTtRQUVsQyxJQUFJLEtBQUssS0FBSyxTQUFTO1lBQUUsT0FBTztRQUVoQyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7WUFBRSxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFdkQsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDbEMsTUFBTSxFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUM7WUFDakMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEQsQ0FBQztJQUNILENBQUM7Q0FDRixDQUFBO0FBakNZLGFBQWE7SUFEekIsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7O0dBQ2xCLGFBQWEsQ0FpQ3pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmFsaWRhdG9yIH0gZnJvbSBcIi4vVmFsaWRhdG9yXCI7XG5pbXBvcnQgeyBERUZBVUxUX0VSUk9SX01FU1NBR0VTLCBWYWxpZGF0aW9uS2V5cyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgdmFsaWRhdG9yIH0gZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgRGF0ZVZhbGlkYXRvck9wdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVmFsaWRhdG9yIGZvciBjaGVja2luZyBpZiBhIHZhbHVlIGlzIGEgdmFsaWQgZGF0ZVxuICogQHN1bW1hcnkgVGhlIERhdGVWYWxpZGF0b3IgY2hlY2tzIGlmIGEgdmFsdWUgaXMgYSB2YWxpZCBkYXRlIG9iamVjdCBvciBhIHN0cmluZyB0aGF0IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYSB2YWxpZCBkYXRlLlxuICogSXQgdmFsaWRhdGVzIHRoYXQgdGhlIHZhbHVlIHJlcHJlc2VudHMgYSByZWFsIGRhdGUgYW5kIG5vdCBhbiBpbnZhbGlkIGRhdGUgbGlrZSBcIjIwMjMtMDItMzFcIi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZV0gLSBDdXN0b20gZXJyb3IgbWVzc2FnZSB0byBkaXNwbGF5IHdoZW4gdmFsaWRhdGlvbiBmYWlscywgZGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfRVJST1JfTUVTU0FHRVMjREFURX1cbiAqIEBjbGFzcyBEYXRlVmFsaWRhdG9yXG4gKiBAZXh0ZW5kcyBWYWxpZGF0b3JcbiAqXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdG9yc1xuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIENyZWF0ZSBhIGRhdGUgdmFsaWRhdG9yIHdpdGggZGVmYXVsdCBlcnJvciBtZXNzYWdlXG4gKiBjb25zdCBkYXRlVmFsaWRhdG9yID0gbmV3IERhdGVWYWxpZGF0b3IoKTtcbiAqXG4gKiAvLyBDcmVhdGUgYSBkYXRlIHZhbGlkYXRvciB3aXRoIGN1c3RvbSBlcnJvciBtZXNzYWdlXG4gKiBjb25zdCBjdXN0b21EYXRlVmFsaWRhdG9yID0gbmV3IERhdGVWYWxpZGF0b3IoXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBkYXRlXCIpO1xuICpcbiAqIC8vIFZhbGlkYXRlIGEgZGF0ZVxuICogY29uc3QgcmVzdWx0ID0gZGF0ZVZhbGlkYXRvci5oYXNFcnJvcnMobmV3IERhdGUoKSk7IC8vIHVuZGVmaW5lZCAodmFsaWQpXG4gKiBjb25zdCBpbnZhbGlkUmVzdWx0ID0gZGF0ZVZhbGlkYXRvci5oYXNFcnJvcnMoXCJub3QgYSBkYXRlXCIpOyAvLyBSZXR1cm5zIGVycm9yIG1lc3NhZ2UgKGludmFsaWQpXG4gKiBgYGBcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQyBhcyBDbGllbnRcbiAqICAgcGFydGljaXBhbnQgViBhcyBEYXRlVmFsaWRhdG9yXG4gKlxuICogICBDLT4+VjogbmV3IERhdGVWYWxpZGF0b3IobWVzc2FnZSlcbiAqICAgQy0+PlY6IGhhc0Vycm9ycyh2YWx1ZSwgb3B0aW9ucylcbiAqICAgYWx0IHZhbHVlIGlzIHVuZGVmaW5lZFxuICogICAgIFYtLT4+QzogdW5kZWZpbmVkICh2YWxpZClcbiAqICAgZWxzZSB2YWx1ZSBpcyBzdHJpbmdcbiAqICAgICBWLT4+VjogQ29udmVydCB0byBEYXRlXG4gKiAgIGVuZFxuICogICBhbHQgRGF0ZSBpcyBpbnZhbGlkIChOYU4pXG4gKiAgICAgVi0tPj5DOiBFcnJvciBtZXNzYWdlXG4gKiAgIGVsc2UgRGF0ZSBpcyB2YWxpZFxuICogICAgIFYtLT4+QzogdW5kZWZpbmVkICh2YWxpZClcbiAqICAgZW5kXG4gKi9cbkB2YWxpZGF0b3IoVmFsaWRhdGlvbktleXMuREFURSlcbmV4cG9ydCBjbGFzcyBEYXRlVmFsaWRhdG9yIGV4dGVuZHMgVmFsaWRhdG9yPERhdGVWYWxpZGF0b3JPcHRpb25zPiB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZyA9IERFRkFVTFRfRVJST1JfTUVTU0FHRVMuREFURSkge1xuICAgIHN1cGVyKG1lc3NhZ2UsIE51bWJlci5uYW1lLCBEYXRlLm5hbWUsIFN0cmluZy5uYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ2hlY2tzIGlmIHRoZSBwcm92aWRlZCB2YWx1ZSBpcyBhIHZhbGlkIGRhdGVcbiAgICogQHN1bW1hcnkgVmFsaWRhdGVzIHRoYXQgdGhlIGdpdmVuIHZhbHVlIGlzIGEgdmFsaWQgZGF0ZS4gSWYgdGhlIHZhbHVlIGlzIGEgc3RyaW5nLFxuICAgKiBpdCBhdHRlbXB0cyB0byBjb252ZXJ0IGl0IHRvIGEgRGF0ZSBvYmplY3QuIFJldHVybnMgYW4gZXJyb3IgbWVzc2FnZSBpZiB0aGUgZGF0ZSBpcyBpbnZhbGlkLFxuICAgKiBvciB1bmRlZmluZWQgaWYgdGhlIGRhdGUgaXMgdmFsaWQgb3IgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZC5cbiAgICpcbiAgICogQHBhcmFtIHtEYXRlIHwgc3RyaW5nfSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB2YWxpZGF0ZSwgY2FuIGJlIGEgRGF0ZSBvYmplY3Qgb3IgYSBzdHJpbmdcbiAgICogQHBhcmFtIHtEYXRlVmFsaWRhdG9yT3B0aW9uc30gW29wdGlvbnM9e31dIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgdmFsaWRhdG9yXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZyB8IHVuZGVmaW5lZH0gRXJyb3IgbWVzc2FnZSBpZiB2YWxpZGF0aW9uIGZhaWxzLCB1bmRlZmluZWQgaWYgdmFsaWRhdGlvbiBwYXNzZXNcbiAgICpcbiAgICogQG92ZXJyaWRlXG4gICAqXG4gICAqIEBzZWUgVmFsaWRhdG9yI2hhc0Vycm9yc1xuICAgKi9cbiAgcHVibGljIGhhc0Vycm9ycyhcbiAgICB2YWx1ZTogRGF0ZSB8IHN0cmluZyxcbiAgICBvcHRpb25zOiBEYXRlVmFsaWRhdG9yT3B0aW9ucyA9IHt9XG4gICk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybjtcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHZhbHVlID0gbmV3IERhdGUodmFsdWUpO1xuXG4gICAgaWYgKE51bWJlci5pc05hTih2YWx1ZS5nZXREYXRlKCkpKSB7XG4gICAgICBjb25zdCB7IG1lc3NhZ2UgPSBcIlwiIH0gPSBvcHRpb25zO1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TWVzc2FnZShtZXNzYWdlIHx8IHRoaXMubWVzc2FnZSk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,28 +1,60 @@
1
1
  import { PatternValidator } from "./PatternValidator";
2
2
  import { PatternValidatorOptions } from "../types";
3
3
  /**
4
- * @summary Email Validator
4
+ * @description Validator for checking if a string is a valid email address
5
+ * @summary The EmailValidator checks if a string matches a standard email address pattern.
6
+ * It extends the PatternValidator and uses a predefined email regex pattern to validate email addresses.
7
+ * This validator is typically used with the @email decorator.
5
8
  *
6
- * @param {string} [message] defaults to {@link DEFAULT_ERROR_MESSAGES#EMAIL}
9
+ * @param {string} [message] - Custom error message to display when validation fails, defaults to {@link DEFAULT_ERROR_MESSAGES#EMAIL}
7
10
  *
8
11
  * @class EmailValidator
9
12
  * @extends PatternValidator
10
13
  *
14
+ * @example
15
+ * ```typescript
16
+ * // Create an email validator with default error message
17
+ * const emailValidator = new EmailValidator();
18
+ *
19
+ * // Create an email validator with custom error message
20
+ * const customEmailValidator = new EmailValidator("Please enter a valid email address");
21
+ *
22
+ * // Validate an email
23
+ * const result = emailValidator.hasErrors("user@example.com"); // undefined (valid)
24
+ * const invalidResult = emailValidator.hasErrors("invalid-email"); // Returns error message (invalid)
25
+ * ```
26
+ *
27
+ * @mermaid
28
+ * sequenceDiagram
29
+ * participant C as Client
30
+ * participant E as EmailValidator
31
+ * participant P as PatternValidator
32
+ *
33
+ * C->>E: new EmailValidator(message)
34
+ * E->>P: super(message)
35
+ * C->>E: hasErrors(value, options)
36
+ * E->>P: super.hasErrors(value, options with EMAIL pattern)
37
+ * P-->>E: validation result
38
+ * E-->>C: validation result
39
+ *
11
40
  * @category Validators
12
41
  */
13
42
  export declare class EmailValidator extends PatternValidator {
14
43
  constructor(message?: string);
15
44
  /**
16
- * @summary Validates a model
45
+ * @description Checks if a string is a valid email address
46
+ * @summary Validates that the provided string matches the email pattern.
47
+ * This method extends the PatternValidator's hasErrors method by ensuring
48
+ * the email pattern is used, even if not explicitly provided in the options.
17
49
  *
18
- * @param {string} value
19
- * @param {PatternValidatorOptions} [options]
50
+ * @param {string} value - The string to validate as an email address
51
+ * @param {PatternValidatorOptions} [options={}] - Optional configuration options
20
52
  *
21
- * @return {string | undefined}
53
+ * @return {string | undefined} Error message if validation fails, undefined if validation passes
22
54
  *
23
55
  * @override
24
56
  *
25
- * @see Validator#hasErrors
57
+ * @see PatternValidator#hasErrors
26
58
  */
27
59
  hasErrors(value: string, options?: PatternValidatorOptions): string | undefined;
28
60
  }
@@ -11,13 +11,42 @@ import { DEFAULT_ERROR_MESSAGES, DEFAULT_PATTERNS, ValidationKeys, } from "./con
11
11
  import { PatternValidator } from "./PatternValidator";
12
12
  import { validator } from "./decorators";
13
13
  /**
14
- * @summary Email Validator
14
+ * @description Validator for checking if a string is a valid email address
15
+ * @summary The EmailValidator checks if a string matches a standard email address pattern.
16
+ * It extends the PatternValidator and uses a predefined email regex pattern to validate email addresses.
17
+ * This validator is typically used with the @email decorator.
15
18
  *
16
- * @param {string} [message] defaults to {@link DEFAULT_ERROR_MESSAGES#EMAIL}
19
+ * @param {string} [message] - Custom error message to display when validation fails, defaults to {@link DEFAULT_ERROR_MESSAGES#EMAIL}
17
20
  *
18
21
  * @class EmailValidator
19
22
  * @extends PatternValidator
20
23
  *
24
+ * @example
25
+ * ```typescript
26
+ * // Create an email validator with default error message
27
+ * const emailValidator = new EmailValidator();
28
+ *
29
+ * // Create an email validator with custom error message
30
+ * const customEmailValidator = new EmailValidator("Please enter a valid email address");
31
+ *
32
+ * // Validate an email
33
+ * const result = emailValidator.hasErrors("user@example.com"); // undefined (valid)
34
+ * const invalidResult = emailValidator.hasErrors("invalid-email"); // Returns error message (invalid)
35
+ * ```
36
+ *
37
+ * @mermaid
38
+ * sequenceDiagram
39
+ * participant C as Client
40
+ * participant E as EmailValidator
41
+ * participant P as PatternValidator
42
+ *
43
+ * C->>E: new EmailValidator(message)
44
+ * E->>P: super(message)
45
+ * C->>E: hasErrors(value, options)
46
+ * E->>P: super.hasErrors(value, options with EMAIL pattern)
47
+ * P-->>E: validation result
48
+ * E-->>C: validation result
49
+ *
21
50
  * @category Validators
22
51
  */
23
52
  let EmailValidator = class EmailValidator extends PatternValidator {
@@ -25,16 +54,19 @@ let EmailValidator = class EmailValidator extends PatternValidator {
25
54
  super(message);
26
55
  }
27
56
  /**
28
- * @summary Validates a model
57
+ * @description Checks if a string is a valid email address
58
+ * @summary Validates that the provided string matches the email pattern.
59
+ * This method extends the PatternValidator's hasErrors method by ensuring
60
+ * the email pattern is used, even if not explicitly provided in the options.
29
61
  *
30
- * @param {string} value
31
- * @param {PatternValidatorOptions} [options]
62
+ * @param {string} value - The string to validate as an email address
63
+ * @param {PatternValidatorOptions} [options={}] - Optional configuration options
32
64
  *
33
- * @return {string | undefined}
65
+ * @return {string | undefined} Error message if validation fails, undefined if validation passes
34
66
  *
35
67
  * @override
36
68
  *
37
- * @see Validator#hasErrors
69
+ * @see PatternValidator#hasErrors
38
70
  */
39
71
  hasErrors(value, options = {}) {
40
72
  return super.hasErrors(value, {
@@ -48,4 +80,4 @@ EmailValidator = __decorate([
48
80
  __metadata("design:paramtypes", [String])
49
81
  ], EmailValidator);
50
82
  export { EmailValidator };
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW1haWxWYWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdmFsaWRhdGlvbi9WYWxpZGF0b3JzL0VtYWlsVmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsZ0JBQWdCLEVBQ2hCLGNBQWMsR0FDZixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBR3pDOzs7Ozs7Ozs7R0FTRztBQUVJLElBQU0sY0FBYyxHQUFwQixNQUFNLGNBQWUsU0FBUSxnQkFBZ0I7SUFDbEQsWUFBWSxVQUFrQixzQkFBc0IsQ0FBQyxLQUFLO1FBQ3hELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSSxTQUFTLENBQ2QsS0FBYSxFQUNiLFVBQW1DLEVBQUU7UUFFckMsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRTtZQUM1QixHQUFHLE9BQU87WUFDVixPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLO1NBQ3BELENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRixDQUFBO0FBMUJZLGNBQWM7SUFEMUIsU0FBUyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7O0dBQ25CLGNBQWMsQ0EwQjFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgREVGQVVMVF9FUlJPUl9NRVNTQUdFUyxcbiAgREVGQVVMVF9QQVRURVJOUyxcbiAgVmFsaWRhdGlvbktleXMsXG59IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgUGF0dGVyblZhbGlkYXRvciB9IGZyb20gXCIuL1BhdHRlcm5WYWxpZGF0b3JcIjtcbmltcG9ydCB7IHZhbGlkYXRvciB9IGZyb20gXCIuL2RlY29yYXRvcnNcIjtcbmltcG9ydCB7IFBhdHRlcm5WYWxpZGF0b3JPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5cbi8qKlxuICogQHN1bW1hcnkgRW1haWwgVmFsaWRhdG9yXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IFttZXNzYWdlXSBkZWZhdWx0cyB0byB7QGxpbmsgREVGQVVMVF9FUlJPUl9NRVNTQUdFUyNFTUFJTH1cbiAqXG4gKiBAY2xhc3MgRW1haWxWYWxpZGF0b3JcbiAqIEBleHRlbmRzIFBhdHRlcm5WYWxpZGF0b3JcbiAqXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdG9yc1xuICovXG5AdmFsaWRhdG9yKFZhbGlkYXRpb25LZXlzLkVNQUlMKVxuZXhwb3J0IGNsYXNzIEVtYWlsVmFsaWRhdG9yIGV4dGVuZHMgUGF0dGVyblZhbGlkYXRvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZyA9IERFRkFVTFRfRVJST1JfTUVTU0FHRVMuRU1BSUwpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBWYWxpZGF0ZXMgYSBtb2RlbFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAgICogQHBhcmFtIHtQYXR0ZXJuVmFsaWRhdG9yT3B0aW9uc30gW29wdGlvbnNdXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICpcbiAgICogQG92ZXJyaWRlXG4gICAqXG4gICAqIEBzZWUgVmFsaWRhdG9yI2hhc0Vycm9yc1xuICAgKi9cbiAgcHVibGljIGhhc0Vycm9ycyhcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IFBhdHRlcm5WYWxpZGF0b3JPcHRpb25zID0ge31cbiAgKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gc3VwZXIuaGFzRXJyb3JzKHZhbHVlLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgcGF0dGVybjogb3B0aW9ucz8ucGF0dGVybiB8fCBERUZBVUxUX1BBVFRFUk5TLkVNQUlMLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW1haWxWYWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdmFsaWRhdGlvbi9WYWxpZGF0b3JzL0VtYWlsVmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsZ0JBQWdCLEVBQ2hCLGNBQWMsR0FDZixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBR3pDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNDRztBQUVJLElBQU0sY0FBYyxHQUFwQixNQUFNLGNBQWUsU0FBUSxnQkFBZ0I7SUFDbEQsWUFBWSxVQUFrQixzQkFBc0IsQ0FBQyxLQUFLO1FBQ3hELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDYSxTQUFTLENBQ3ZCLEtBQWEsRUFDYixVQUFtQyxFQUFFO1FBRXJDLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUU7WUFDNUIsR0FBRyxPQUFPO1lBQ1YsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLElBQUksZ0JBQWdCLENBQUMsS0FBSztTQUNwRCxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YsQ0FBQTtBQTdCWSxjQUFjO0lBRDFCLFNBQVMsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDOztHQUNuQixjQUFjLENBNkIxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERFRkFVTFRfRVJST1JfTUVTU0FHRVMsXG4gIERFRkFVTFRfUEFUVEVSTlMsXG4gIFZhbGlkYXRpb25LZXlzLFxufSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IFBhdHRlcm5WYWxpZGF0b3IgfSBmcm9tIFwiLi9QYXR0ZXJuVmFsaWRhdG9yXCI7XG5pbXBvcnQgeyB2YWxpZGF0b3IgfSBmcm9tIFwiLi9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBQYXR0ZXJuVmFsaWRhdG9yT3B0aW9ucyB9IGZyb20gXCIuLi90eXBlc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBWYWxpZGF0b3IgZm9yIGNoZWNraW5nIGlmIGEgc3RyaW5nIGlzIGEgdmFsaWQgZW1haWwgYWRkcmVzc1xuICogQHN1bW1hcnkgVGhlIEVtYWlsVmFsaWRhdG9yIGNoZWNrcyBpZiBhIHN0cmluZyBtYXRjaGVzIGEgc3RhbmRhcmQgZW1haWwgYWRkcmVzcyBwYXR0ZXJuLlxuICogSXQgZXh0ZW5kcyB0aGUgUGF0dGVyblZhbGlkYXRvciBhbmQgdXNlcyBhIHByZWRlZmluZWQgZW1haWwgcmVnZXggcGF0dGVybiB0byB2YWxpZGF0ZSBlbWFpbCBhZGRyZXNzZXMuXG4gKiBUaGlzIHZhbGlkYXRvciBpcyB0eXBpY2FsbHkgdXNlZCB3aXRoIHRoZSBAZW1haWwgZGVjb3JhdG9yLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZV0gLSBDdXN0b20gZXJyb3IgbWVzc2FnZSB0byBkaXNwbGF5IHdoZW4gdmFsaWRhdGlvbiBmYWlscywgZGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfRVJST1JfTUVTU0FHRVMjRU1BSUx9XG4gKlxuICogQGNsYXNzIEVtYWlsVmFsaWRhdG9yXG4gKiBAZXh0ZW5kcyBQYXR0ZXJuVmFsaWRhdG9yXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIENyZWF0ZSBhbiBlbWFpbCB2YWxpZGF0b3Igd2l0aCBkZWZhdWx0IGVycm9yIG1lc3NhZ2VcbiAqIGNvbnN0IGVtYWlsVmFsaWRhdG9yID0gbmV3IEVtYWlsVmFsaWRhdG9yKCk7XG4gKlxuICogLy8gQ3JlYXRlIGFuIGVtYWlsIHZhbGlkYXRvciB3aXRoIGN1c3RvbSBlcnJvciBtZXNzYWdlXG4gKiBjb25zdCBjdXN0b21FbWFpbFZhbGlkYXRvciA9IG5ldyBFbWFpbFZhbGlkYXRvcihcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3NcIik7XG4gKlxuICogLy8gVmFsaWRhdGUgYW4gZW1haWxcbiAqIGNvbnN0IHJlc3VsdCA9IGVtYWlsVmFsaWRhdG9yLmhhc0Vycm9ycyhcInVzZXJAZXhhbXBsZS5jb21cIik7IC8vIHVuZGVmaW5lZCAodmFsaWQpXG4gKiBjb25zdCBpbnZhbGlkUmVzdWx0ID0gZW1haWxWYWxpZGF0b3IuaGFzRXJyb3JzKFwiaW52YWxpZC1lbWFpbFwiKTsgLy8gUmV0dXJucyBlcnJvciBtZXNzYWdlIChpbnZhbGlkKVxuICogYGBgXG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDIGFzIENsaWVudFxuICogICBwYXJ0aWNpcGFudCBFIGFzIEVtYWlsVmFsaWRhdG9yXG4gKiAgIHBhcnRpY2lwYW50IFAgYXMgUGF0dGVyblZhbGlkYXRvclxuICpcbiAqICAgQy0+PkU6IG5ldyBFbWFpbFZhbGlkYXRvcihtZXNzYWdlKVxuICogICBFLT4+UDogc3VwZXIobWVzc2FnZSlcbiAqICAgQy0+PkU6IGhhc0Vycm9ycyh2YWx1ZSwgb3B0aW9ucylcbiAqICAgRS0+PlA6IHN1cGVyLmhhc0Vycm9ycyh2YWx1ZSwgb3B0aW9ucyB3aXRoIEVNQUlMIHBhdHRlcm4pXG4gKiAgIFAtLT4+RTogdmFsaWRhdGlvbiByZXN1bHRcbiAqICAgRS0tPj5DOiB2YWxpZGF0aW9uIHJlc3VsdFxuICpcbiAqIEBjYXRlZ29yeSBWYWxpZGF0b3JzXG4gKi9cbkB2YWxpZGF0b3IoVmFsaWRhdGlvbktleXMuRU1BSUwpXG5leHBvcnQgY2xhc3MgRW1haWxWYWxpZGF0b3IgZXh0ZW5kcyBQYXR0ZXJuVmFsaWRhdG9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nID0gREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5FTUFJTCkge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDaGVja3MgaWYgYSBzdHJpbmcgaXMgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXG4gICAqIEBzdW1tYXJ5IFZhbGlkYXRlcyB0aGF0IHRoZSBwcm92aWRlZCBzdHJpbmcgbWF0Y2hlcyB0aGUgZW1haWwgcGF0dGVybi5cbiAgICogVGhpcyBtZXRob2QgZXh0ZW5kcyB0aGUgUGF0dGVyblZhbGlkYXRvcidzIGhhc0Vycm9ycyBtZXRob2QgYnkgZW5zdXJpbmdcbiAgICogdGhlIGVtYWlsIHBhdHRlcm4gaXMgdXNlZCwgZXZlbiBpZiBub3QgZXhwbGljaXRseSBwcm92aWRlZCBpbiB0aGUgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIC0gVGhlIHN0cmluZyB0byB2YWxpZGF0ZSBhcyBhbiBlbWFpbCBhZGRyZXNzXG4gICAqIEBwYXJhbSB7UGF0dGVyblZhbGlkYXRvck9wdGlvbnN9IFtvcHRpb25zPXt9XSAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmcgfCB1bmRlZmluZWR9IEVycm9yIG1lc3NhZ2UgaWYgdmFsaWRhdGlvbiBmYWlscywgdW5kZWZpbmVkIGlmIHZhbGlkYXRpb24gcGFzc2VzXG4gICAqXG4gICAqIEBvdmVycmlkZVxuICAgKlxuICAgKiBAc2VlIFBhdHRlcm5WYWxpZGF0b3IjaGFzRXJyb3JzXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgaGFzRXJyb3JzKFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgb3B0aW9uczogUGF0dGVyblZhbGlkYXRvck9wdGlvbnMgPSB7fVxuICApOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBzdXBlci5oYXNFcnJvcnModmFsdWUsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBwYXR0ZXJuOiBvcHRpb25zPy5wYXR0ZXJuIHx8IERFRkFVTFRfUEFUVEVSTlMuRU1BSUwsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -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