@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,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
  *
@@ -14,13 +14,55 @@ const Validator_1 = require("./Validator.cjs");
14
14
  const constants_1 = require("./constants.cjs");
15
15
  const decorators_1 = require("./decorators.cjs");
16
16
  /**
17
- * @summary Required Validator
17
+ * @description Validator for checking if a value is present and not empty
18
+ * @summary The RequiredValidator ensures that a value is provided and not empty.
19
+ * It handles different types of values appropriately: for booleans and numbers,
20
+ * it checks if they're undefined; for other types (strings, arrays, objects),
21
+ * it checks if they're falsy. This validator is typically used with the @required decorator
22
+ * and is often the first validation applied to important fields.
18
23
  *
19
- * @param {string} [message] defaults to {@link DEFAULT_ERROR_MESSAGES#REQUIRED}
24
+ * @param {string} [message] - Custom error message to display when validation fails, defaults to {@link DEFAULT_ERROR_MESSAGES#REQUIRED}
20
25
  *
21
26
  * @class RequiredValidator
22
27
  * @extends Validator
23
28
  *
29
+ * @example
30
+ * ```typescript
31
+ * // Create a required validator with default error message
32
+ * const requiredValidator = new RequiredValidator();
33
+ *
34
+ * // Create a required validator with custom error message
35
+ * const customRequiredValidator = new RequiredValidator("This field is mandatory");
36
+ *
37
+ * // Validate different types of values
38
+ * requiredValidator.hasErrors("Hello"); // undefined (valid)
39
+ * requiredValidator.hasErrors(""); // Returns error message (invalid)
40
+ * requiredValidator.hasErrors(0); // undefined (valid - 0 is a valid number)
41
+ * requiredValidator.hasErrors(null); // Returns error message (invalid)
42
+ * requiredValidator.hasErrors([]); // undefined (valid - empty array is still an array)
43
+ * ```
44
+ *
45
+ * @mermaid
46
+ * sequenceDiagram
47
+ * participant C as Client
48
+ * participant V as RequiredValidator
49
+ *
50
+ * C->>V: new RequiredValidator(message)
51
+ * C->>V: hasErrors(value, options)
52
+ * alt typeof value is boolean or number
53
+ * alt value is undefined
54
+ * V-->>C: Error message
55
+ * else value is defined
56
+ * V-->>C: undefined (valid)
57
+ * end
58
+ * else other types
59
+ * alt value is falsy (null, undefined, empty string)
60
+ * V-->>C: Error message
61
+ * else value is truthy
62
+ * V-->>C: undefined (valid)
63
+ * end
64
+ * end
65
+ *
24
66
  * @category Validators
25
67
  */
26
68
  let RequiredValidator = class RequiredValidator extends Validator_1.Validator {
@@ -28,12 +70,16 @@ let RequiredValidator = class RequiredValidator extends Validator_1.Validator {
28
70
  super(message);
29
71
  }
30
72
  /**
31
- * @summary Validates a model
73
+ * @description Checks if a value is present and not empty
74
+ * @summary Validates that the provided value exists and is not empty.
75
+ * The validation logic varies by type:
76
+ * - For booleans and numbers: checks if the value is undefined
77
+ * - For other types (strings, arrays, objects): checks if the value is falsy
32
78
  *
33
- * @param {string} value
34
- * @param {ValidatorOptions} [options={}]
79
+ * @param {any} value - The value to validate
80
+ * @param {ValidatorOptions} [options={}] - Optional configuration options
35
81
  *
36
- * @return {string | undefined}
82
+ * @return {string | undefined} Error message if validation fails, undefined if validation passes
37
83
  *
38
84
  * @override
39
85
  *
@@ -58,4 +104,4 @@ exports.RequiredValidator = RequiredValidator = __decorate([
58
104
  (0, decorators_1.validator)(constants_1.ValidationKeys.REQUIRED),
59
105
  __metadata("design:paramtypes", [String])
60
106
  ], RequiredValidator);
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVxdWlyZWRWYWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdmFsaWRhdGlvbi9WYWxpZGF0b3JzL1JlcXVpcmVkVmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLDJDQUF3QztBQUN4QywyQ0FBcUU7QUFDckUsNkNBQXlDO0FBR3pDOzs7Ozs7Ozs7R0FTRztBQUVJLElBQU0saUJBQWlCLEdBQXZCLE1BQU0saUJBQWtCLFNBQVEscUJBQVM7SUFDOUMsWUFBWSxVQUFrQixrQ0FBc0IsQ0FBQyxRQUFRO1FBQzNELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSSxTQUFTLENBQ2QsS0FBVSxFQUNWLFVBQTRCLEVBQUU7UUFFOUIsUUFBUSxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ3JCLEtBQUssU0FBUyxDQUFDO1lBQ2YsS0FBSyxRQUFRO2dCQUNYLE9BQU8sT0FBTyxLQUFLLEtBQUssV0FBVztvQkFDakMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDO29CQUNsRCxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ2hCO2dCQUNFLE9BQU8sQ0FBQyxLQUFLO29CQUNYLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQztvQkFDbEQsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNsQixDQUFDO0lBQ0gsQ0FBQztDQUNGLENBQUE7QUFqQ1ksOENBQWlCOzRCQUFqQixpQkFBaUI7SUFEN0IsSUFBQSxzQkFBUyxFQUFDLDBCQUFjLENBQUMsUUFBUSxDQUFDOztHQUN0QixpQkFBaUIsQ0FpQzdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmFsaWRhdG9yIH0gZnJvbSBcIi4vVmFsaWRhdG9yXCI7XG5pbXBvcnQgeyBERUZBVUxUX0VSUk9SX01FU1NBR0VTLCBWYWxpZGF0aW9uS2V5cyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgdmFsaWRhdG9yIH0gZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgVmFsaWRhdG9yT3B0aW9ucyB9IGZyb20gXCIuLi90eXBlc1wiO1xuXG4vKipcbiAqIEBzdW1tYXJ5IFJlcXVpcmVkIFZhbGlkYXRvclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZV0gZGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfRVJST1JfTUVTU0FHRVMjUkVRVUlSRUR9XG4gKlxuICogQGNsYXNzIFJlcXVpcmVkVmFsaWRhdG9yXG4gKiBAZXh0ZW5kcyBWYWxpZGF0b3JcbiAqXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdG9yc1xuICovXG5AdmFsaWRhdG9yKFZhbGlkYXRpb25LZXlzLlJFUVVJUkVEKVxuZXhwb3J0IGNsYXNzIFJlcXVpcmVkVmFsaWRhdG9yIGV4dGVuZHMgVmFsaWRhdG9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nID0gREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5SRVFVSVJFRCkge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFZhbGlkYXRlcyBhIG1vZGVsXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1ZhbGlkYXRvck9wdGlvbnN9IFtvcHRpb25zPXt9XVxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmcgfCB1bmRlZmluZWR9XG4gICAqXG4gICAqIEBvdmVycmlkZVxuICAgKlxuICAgKiBAc2VlIFZhbGlkYXRvciNoYXNFcnJvcnNcbiAgICovXG4gIHB1YmxpYyBoYXNFcnJvcnMoXG4gICAgdmFsdWU6IGFueSxcbiAgICBvcHRpb25zOiBWYWxpZGF0b3JPcHRpb25zID0ge31cbiAgKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICAgID8gdGhpcy5nZXRNZXNzYWdlKG9wdGlvbnMubWVzc2FnZSB8fCB0aGlzLm1lc3NhZ2UpXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gIXZhbHVlXG4gICAgICAgICAgPyB0aGlzLmdldE1lc3NhZ2Uob3B0aW9ucy5tZXNzYWdlIHx8IHRoaXMubWVzc2FnZSlcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVxdWlyZWRWYWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdmFsaWRhdGlvbi9WYWxpZGF0b3JzL1JlcXVpcmVkVmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLCtDQUF3QztBQUN4QywrQ0FBcUU7QUFDckUsaURBQXlDO0FBR3pDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtREc7QUFFSSxJQUFNLGlCQUFpQixHQUF2QixNQUFNLGlCQUFrQixTQUFRLHFCQUFTO0lBQzlDLFlBQVksVUFBa0Isa0NBQXNCLENBQUMsUUFBUTtRQUMzRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7T0FlRztJQUNJLFNBQVMsQ0FDZCxLQUFVLEVBQ1YsVUFBNEIsRUFBRTtRQUU5QixRQUFRLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDckIsS0FBSyxTQUFTLENBQUM7WUFDZixLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxPQUFPLEtBQUssS0FBSyxXQUFXO29CQUNqQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUM7b0JBQ2xELENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDaEI7Z0JBQ0UsT0FBTyxDQUFDLEtBQUs7b0JBQ1gsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDO29CQUNsRCxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2xCLENBQUM7SUFDSCxDQUFDO0NBQ0YsQ0FBQTtBQXJDWSw4Q0FBaUI7NEJBQWpCLGlCQUFpQjtJQUQ3QixJQUFBLHNCQUFTLEVBQUMsMEJBQWMsQ0FBQyxRQUFRLENBQUM7O0dBQ3RCLGlCQUFpQixDQXFDN0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWYWxpZGF0b3IgfSBmcm9tIFwiLi9WYWxpZGF0b3JcIjtcbmltcG9ydCB7IERFRkFVTFRfRVJST1JfTUVTU0FHRVMsIFZhbGlkYXRpb25LZXlzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyB2YWxpZGF0b3IgfSBmcm9tIFwiLi9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBWYWxpZGF0b3JPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFZhbGlkYXRvciBmb3IgY2hlY2tpbmcgaWYgYSB2YWx1ZSBpcyBwcmVzZW50IGFuZCBub3QgZW1wdHlcbiAqIEBzdW1tYXJ5IFRoZSBSZXF1aXJlZFZhbGlkYXRvciBlbnN1cmVzIHRoYXQgYSB2YWx1ZSBpcyBwcm92aWRlZCBhbmQgbm90IGVtcHR5LlxuICogSXQgaGFuZGxlcyBkaWZmZXJlbnQgdHlwZXMgb2YgdmFsdWVzIGFwcHJvcHJpYXRlbHk6IGZvciBib29sZWFucyBhbmQgbnVtYmVycyxcbiAqIGl0IGNoZWNrcyBpZiB0aGV5J3JlIHVuZGVmaW5lZDsgZm9yIG90aGVyIHR5cGVzIChzdHJpbmdzLCBhcnJheXMsIG9iamVjdHMpLFxuICogaXQgY2hlY2tzIGlmIHRoZXkncmUgZmFsc3kuIFRoaXMgdmFsaWRhdG9yIGlzIHR5cGljYWxseSB1c2VkIHdpdGggdGhlIEByZXF1aXJlZCBkZWNvcmF0b3JcbiAqIGFuZCBpcyBvZnRlbiB0aGUgZmlyc3QgdmFsaWRhdGlvbiBhcHBsaWVkIHRvIGltcG9ydGFudCBmaWVsZHMuXG4gKiBcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZV0gLSBDdXN0b20gZXJyb3IgbWVzc2FnZSB0byBkaXNwbGF5IHdoZW4gdmFsaWRhdGlvbiBmYWlscywgZGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfRVJST1JfTUVTU0FHRVMjUkVRVUlSRUR9XG4gKiBcbiAqIEBjbGFzcyBSZXF1aXJlZFZhbGlkYXRvclxuICogQGV4dGVuZHMgVmFsaWRhdG9yXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBDcmVhdGUgYSByZXF1aXJlZCB2YWxpZGF0b3Igd2l0aCBkZWZhdWx0IGVycm9yIG1lc3NhZ2VcbiAqIGNvbnN0IHJlcXVpcmVkVmFsaWRhdG9yID0gbmV3IFJlcXVpcmVkVmFsaWRhdG9yKCk7XG4gKiBcbiAqIC8vIENyZWF0ZSBhIHJlcXVpcmVkIHZhbGlkYXRvciB3aXRoIGN1c3RvbSBlcnJvciBtZXNzYWdlXG4gKiBjb25zdCBjdXN0b21SZXF1aXJlZFZhbGlkYXRvciA9IG5ldyBSZXF1aXJlZFZhbGlkYXRvcihcIlRoaXMgZmllbGQgaXMgbWFuZGF0b3J5XCIpO1xuICogXG4gKiAvLyBWYWxpZGF0ZSBkaWZmZXJlbnQgdHlwZXMgb2YgdmFsdWVzXG4gKiByZXF1aXJlZFZhbGlkYXRvci5oYXNFcnJvcnMoXCJIZWxsb1wiKTsgLy8gdW5kZWZpbmVkICh2YWxpZClcbiAqIHJlcXVpcmVkVmFsaWRhdG9yLmhhc0Vycm9ycyhcIlwiKTsgLy8gUmV0dXJucyBlcnJvciBtZXNzYWdlIChpbnZhbGlkKVxuICogcmVxdWlyZWRWYWxpZGF0b3IuaGFzRXJyb3JzKDApOyAvLyB1bmRlZmluZWQgKHZhbGlkIC0gMCBpcyBhIHZhbGlkIG51bWJlcilcbiAqIHJlcXVpcmVkVmFsaWRhdG9yLmhhc0Vycm9ycyhudWxsKTsgLy8gUmV0dXJucyBlcnJvciBtZXNzYWdlIChpbnZhbGlkKVxuICogcmVxdWlyZWRWYWxpZGF0b3IuaGFzRXJyb3JzKFtdKTsgLy8gdW5kZWZpbmVkICh2YWxpZCAtIGVtcHR5IGFycmF5IGlzIHN0aWxsIGFuIGFycmF5KVxuICogYGBgXG4gKiBcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQyBhcyBDbGllbnRcbiAqICAgcGFydGljaXBhbnQgViBhcyBSZXF1aXJlZFZhbGlkYXRvclxuICogICBcbiAqICAgQy0+PlY6IG5ldyBSZXF1aXJlZFZhbGlkYXRvcihtZXNzYWdlKVxuICogICBDLT4+VjogaGFzRXJyb3JzKHZhbHVlLCBvcHRpb25zKVxuICogICBhbHQgdHlwZW9mIHZhbHVlIGlzIGJvb2xlYW4gb3IgbnVtYmVyXG4gKiAgICAgYWx0IHZhbHVlIGlzIHVuZGVmaW5lZFxuICogICAgICAgVi0tPj5DOiBFcnJvciBtZXNzYWdlXG4gKiAgICAgZWxzZSB2YWx1ZSBpcyBkZWZpbmVkXG4gKiAgICAgICBWLS0+PkM6IHVuZGVmaW5lZCAodmFsaWQpXG4gKiAgICAgZW5kXG4gKiAgIGVsc2Ugb3RoZXIgdHlwZXNcbiAqICAgICBhbHQgdmFsdWUgaXMgZmFsc3kgKG51bGwsIHVuZGVmaW5lZCwgZW1wdHkgc3RyaW5nKVxuICogICAgICAgVi0tPj5DOiBFcnJvciBtZXNzYWdlXG4gKiAgICAgZWxzZSB2YWx1ZSBpcyB0cnV0aHlcbiAqICAgICAgIFYtLT4+QzogdW5kZWZpbmVkICh2YWxpZClcbiAqICAgICBlbmRcbiAqICAgZW5kXG4gKiBcbiAqIEBjYXRlZ29yeSBWYWxpZGF0b3JzXG4gKi9cbkB2YWxpZGF0b3IoVmFsaWRhdGlvbktleXMuUkVRVUlSRUQpXG5leHBvcnQgY2xhc3MgUmVxdWlyZWRWYWxpZGF0b3IgZXh0ZW5kcyBWYWxpZGF0b3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcgPSBERUZBVUxUX0VSUk9SX01FU1NBR0VTLlJFUVVJUkVEKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENoZWNrcyBpZiBhIHZhbHVlIGlzIHByZXNlbnQgYW5kIG5vdCBlbXB0eVxuICAgKiBAc3VtbWFyeSBWYWxpZGF0ZXMgdGhhdCB0aGUgcHJvdmlkZWQgdmFsdWUgZXhpc3RzIGFuZCBpcyBub3QgZW1wdHkuXG4gICAqIFRoZSB2YWxpZGF0aW9uIGxvZ2ljIHZhcmllcyBieSB0eXBlOlxuICAgKiAtIEZvciBib29sZWFucyBhbmQgbnVtYmVyczogY2hlY2tzIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWRcbiAgICogLSBGb3Igb3RoZXIgdHlwZXMgKHN0cmluZ3MsIGFycmF5cywgb2JqZWN0cyk6IGNoZWNrcyBpZiB0aGUgdmFsdWUgaXMgZmFsc3lcbiAgICpcbiAgICogQHBhcmFtIHthbnl9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIHZhbGlkYXRlXG4gICAqIEBwYXJhbSB7VmFsaWRhdG9yT3B0aW9uc30gW29wdGlvbnM9e31dIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZyB8IHVuZGVmaW5lZH0gRXJyb3IgbWVzc2FnZSBpZiB2YWxpZGF0aW9uIGZhaWxzLCB1bmRlZmluZWQgaWYgdmFsaWRhdGlvbiBwYXNzZXNcbiAgICpcbiAgICogQG92ZXJyaWRlXG4gICAqXG4gICAqIEBzZWUgVmFsaWRhdG9yI2hhc0Vycm9yc1xuICAgKi9cbiAgcHVibGljIGhhc0Vycm9ycyhcbiAgICB2YWx1ZTogYW55LFxuICAgIG9wdGlvbnM6IFZhbGlkYXRvck9wdGlvbnMgPSB7fVxuICApOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInVuZGVmaW5lZFwiXG4gICAgICAgICAgPyB0aGlzLmdldE1lc3NhZ2Uob3B0aW9ucy5tZXNzYWdlIHx8IHRoaXMubWVzc2FnZSlcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAhdmFsdWVcbiAgICAgICAgICA/IHRoaXMuZ2V0TWVzc2FnZShvcHRpb25zLm1lc3NhZ2UgfHwgdGhpcy5tZXNzYWdlKVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -1,24 +1,70 @@
1
1
  import { Validator } from "./Validator";
2
2
  import { ValidatorOptions } from "../types";
3
3
  /**
4
- * @summary Required Validator
4
+ * @description Validator for checking if a value is present and not empty
5
+ * @summary The RequiredValidator ensures that a value is provided and not empty.
6
+ * It handles different types of values appropriately: for booleans and numbers,
7
+ * it checks if they're undefined; for other types (strings, arrays, objects),
8
+ * it checks if they're falsy. This validator is typically used with the @required decorator
9
+ * and is often the first validation applied to important fields.
5
10
  *
6
- * @param {string} [message] defaults to {@link DEFAULT_ERROR_MESSAGES#REQUIRED}
11
+ * @param {string} [message] - Custom error message to display when validation fails, defaults to {@link DEFAULT_ERROR_MESSAGES#REQUIRED}
7
12
  *
8
13
  * @class RequiredValidator
9
14
  * @extends Validator
10
15
  *
16
+ * @example
17
+ * ```typescript
18
+ * // Create a required validator with default error message
19
+ * const requiredValidator = new RequiredValidator();
20
+ *
21
+ * // Create a required validator with custom error message
22
+ * const customRequiredValidator = new RequiredValidator("This field is mandatory");
23
+ *
24
+ * // Validate different types of values
25
+ * requiredValidator.hasErrors("Hello"); // undefined (valid)
26
+ * requiredValidator.hasErrors(""); // Returns error message (invalid)
27
+ * requiredValidator.hasErrors(0); // undefined (valid - 0 is a valid number)
28
+ * requiredValidator.hasErrors(null); // Returns error message (invalid)
29
+ * requiredValidator.hasErrors([]); // undefined (valid - empty array is still an array)
30
+ * ```
31
+ *
32
+ * @mermaid
33
+ * sequenceDiagram
34
+ * participant C as Client
35
+ * participant V as RequiredValidator
36
+ *
37
+ * C->>V: new RequiredValidator(message)
38
+ * C->>V: hasErrors(value, options)
39
+ * alt typeof value is boolean or number
40
+ * alt value is undefined
41
+ * V-->>C: Error message
42
+ * else value is defined
43
+ * V-->>C: undefined (valid)
44
+ * end
45
+ * else other types
46
+ * alt value is falsy (null, undefined, empty string)
47
+ * V-->>C: Error message
48
+ * else value is truthy
49
+ * V-->>C: undefined (valid)
50
+ * end
51
+ * end
52
+ *
11
53
  * @category Validators
12
54
  */
13
55
  export declare class RequiredValidator extends Validator {
14
56
  constructor(message?: string);
15
57
  /**
16
- * @summary Validates a model
58
+ * @description Checks if a value is present and not empty
59
+ * @summary Validates that the provided value exists and is not empty.
60
+ * The validation logic varies by type:
61
+ * - For booleans and numbers: checks if the value is undefined
62
+ * - For other types (strings, arrays, objects): checks if the value is falsy
17
63
  *
18
- * @param {string} value
19
- * @param {ValidatorOptions} [options={}]
64
+ * @param {any} value - The value to validate
65
+ * @param {ValidatorOptions} [options={}] - Optional configuration options
20
66
  *
21
- * @return {string | undefined}
67
+ * @return {string | undefined} Error message if validation fails, undefined if validation passes
22
68
  *
23
69
  * @override
24
70
  *
@@ -53,4 +53,4 @@ exports.StepValidator = StepValidator = __decorate([
53
53
  (0, decorators_1.validator)(constants_1.ValidationKeys.STEP),
54
54
  __metadata("design:paramtypes", [String])
55
55
  ], StepValidator);
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RlcFZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92YWxpZGF0aW9uL1ZhbGlkYXRvcnMvU3RlcFZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBd0M7QUFDeEMsMkNBQXFFO0FBQ3JFLDZDQUF5QztBQUd6Qzs7Ozs7Ozs7O0dBU0c7QUFFSSxJQUFNLGFBQWEsR0FBbkIsTUFBTSxhQUFjLFNBQVEscUJBQStCO0lBQ2hFLFlBQVksVUFBa0Isa0NBQXNCLENBQUMsSUFBSTtRQUN2RCxLQUFLLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0ksU0FBUyxDQUNkLEtBQXNCLEVBQ3RCLE9BQTZCO1FBRTdCLElBQUksT0FBTyxLQUFLLEtBQUssV0FBVztZQUFFLE9BQU87UUFDekMsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQy9DLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ2hFLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDaEIsQ0FBQztDQUNGLENBQUE7QUEzQlksc0NBQWE7d0JBQWIsYUFBYTtJQUR6QixJQUFBLHNCQUFTLEVBQUMsMEJBQWMsQ0FBQyxJQUFJLENBQUM7O0dBQ2xCLGFBQWEsQ0EyQnpCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmFsaWRhdG9yIH0gZnJvbSBcIi4vVmFsaWRhdG9yXCI7XG5pbXBvcnQgeyBERUZBVUxUX0VSUk9SX01FU1NBR0VTLCBWYWxpZGF0aW9uS2V5cyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgdmFsaWRhdG9yIH0gZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgU3RlcFZhbGlkYXRvck9wdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXNcIjtcblxuLyoqXG4gKiBAc3VtbWFyeSBTdGVwIFZhbGlkYXRvclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZV0gZGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfRVJST1JfTUVTU0FHRVMjU1RFUH1cbiAqXG4gKiBAY2xhc3MgU3RlcFZhbGlkYXRvclxuICogQGV4dGVuZHMgVmFsaWRhdG9yXG4gKlxuICogQGNhdGVnb3J5IFZhbGlkYXRvcnNcbiAqL1xuQHZhbGlkYXRvcihWYWxpZGF0aW9uS2V5cy5TVEVQKVxuZXhwb3J0IGNsYXNzIFN0ZXBWYWxpZGF0b3IgZXh0ZW5kcyBWYWxpZGF0b3I8U3RlcFZhbGlkYXRvck9wdGlvbnM+IHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nID0gREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5TVEVQKSB7XG4gICAgc3VwZXIobWVzc2FnZSwgXCJudW1iZXJcIiwgXCJzdHJpbmdcIik7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgVmFsaWRhdGVzIGEgbW9kZWxcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGVwXG4gICAqIEBwYXJhbSB7U3RlcFZhbGlkYXRvck9wdGlvbnN9IG9wdGlvbnNcbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nIHwgdW5kZWZpbmVkfVxuICAgKlxuICAgKiBAb3ZlcnJpZGVcbiAgICpcbiAgICogQHNlZSBWYWxpZGF0b3IjaGFzRXJyb3JzXG4gICAqL1xuICBwdWJsaWMgaGFzRXJyb3JzKFxuICAgIHZhbHVlOiBudW1iZXIgfCBzdHJpbmcsXG4gICAgb3B0aW9uczogU3RlcFZhbGlkYXRvck9wdGlvbnNcbiAgKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XG4gICAgcmV0dXJuIE51bWJlcih2YWx1ZSkgJSBOdW1iZXIob3B0aW9ucy5zdGVwKSAhPT0gMFxuICAgICAgPyB0aGlzLmdldE1lc3NhZ2Uob3B0aW9ucy5tZXNzYWdlIHx8IHRoaXMubWVzc2FnZSwgb3B0aW9ucy5zdGVwKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RlcFZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92YWxpZGF0aW9uL1ZhbGlkYXRvcnMvU3RlcFZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBd0M7QUFDeEMsK0NBQXFFO0FBQ3JFLGlEQUF5QztBQUd6Qzs7Ozs7Ozs7O0dBU0c7QUFFSSxJQUFNLGFBQWEsR0FBbkIsTUFBTSxhQUFjLFNBQVEscUJBQStCO0lBQ2hFLFlBQVksVUFBa0Isa0NBQXNCLENBQUMsSUFBSTtRQUN2RCxLQUFLLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0ksU0FBUyxDQUNkLEtBQXNCLEVBQ3RCLE9BQTZCO1FBRTdCLElBQUksT0FBTyxLQUFLLEtBQUssV0FBVztZQUFFLE9BQU87UUFDekMsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQy9DLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ2hFLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDaEIsQ0FBQztDQUNGLENBQUE7QUEzQlksc0NBQWE7d0JBQWIsYUFBYTtJQUR6QixJQUFBLHNCQUFTLEVBQUMsMEJBQWMsQ0FBQyxJQUFJLENBQUM7O0dBQ2xCLGFBQWEsQ0EyQnpCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmFsaWRhdG9yIH0gZnJvbSBcIi4vVmFsaWRhdG9yXCI7XG5pbXBvcnQgeyBERUZBVUxUX0VSUk9SX01FU1NBR0VTLCBWYWxpZGF0aW9uS2V5cyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgdmFsaWRhdG9yIH0gZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgU3RlcFZhbGlkYXRvck9wdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXNcIjtcblxuLyoqXG4gKiBAc3VtbWFyeSBTdGVwIFZhbGlkYXRvclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZV0gZGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfRVJST1JfTUVTU0FHRVMjU1RFUH1cbiAqXG4gKiBAY2xhc3MgU3RlcFZhbGlkYXRvclxuICogQGV4dGVuZHMgVmFsaWRhdG9yXG4gKlxuICogQGNhdGVnb3J5IFZhbGlkYXRvcnNcbiAqL1xuQHZhbGlkYXRvcihWYWxpZGF0aW9uS2V5cy5TVEVQKVxuZXhwb3J0IGNsYXNzIFN0ZXBWYWxpZGF0b3IgZXh0ZW5kcyBWYWxpZGF0b3I8U3RlcFZhbGlkYXRvck9wdGlvbnM+IHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nID0gREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5TVEVQKSB7XG4gICAgc3VwZXIobWVzc2FnZSwgXCJudW1iZXJcIiwgXCJzdHJpbmdcIik7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgVmFsaWRhdGVzIGEgbW9kZWxcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGVwXG4gICAqIEBwYXJhbSB7U3RlcFZhbGlkYXRvck9wdGlvbnN9IG9wdGlvbnNcbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nIHwgdW5kZWZpbmVkfVxuICAgKlxuICAgKiBAb3ZlcnJpZGVcbiAgICpcbiAgICogQHNlZSBWYWxpZGF0b3IjaGFzRXJyb3JzXG4gICAqL1xuICBwdWJsaWMgaGFzRXJyb3JzKFxuICAgIHZhbHVlOiBudW1iZXIgfCBzdHJpbmcsXG4gICAgb3B0aW9uczogU3RlcFZhbGlkYXRvck9wdGlvbnNcbiAgKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XG4gICAgcmV0dXJuIE51bWJlcih2YWx1ZSkgJSBOdW1iZXIob3B0aW9ucy5zdGVwKSAhPT0gMFxuICAgICAgPyB0aGlzLmdldE1lc3NhZ2Uob3B0aW9ucy5tZXNzYWdlIHx8IHRoaXMubWVzc2FnZSwgb3B0aW9ucy5zdGVwKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
@@ -13,15 +13,65 @@ exports.TypeValidator = void 0;
13
13
  const Validator_1 = require("./Validator.cjs");
14
14
  const constants_1 = require("./constants.cjs");
15
15
  const decorators_1 = require("./decorators.cjs");
16
- const Validation_1 = require("../Validation.cjs");
17
- const constants_2 = require("../../utils/constants.cjs");
16
+ const Validation_1 = require("./../Validation.cjs");
17
+ const constants_2 = require("./../../utils/constants.cjs");
18
18
  const reflection_1 = require("@decaf-ts/reflection");
19
19
  /**
20
- * @summary Required Validator
20
+ * @description Validator for checking if a value is of the expected type(s)
21
+ * @summary The TypeValidator ensures that a value matches one of the specified types.
22
+ * It can validate against a single type, multiple types, or a type with a specific name.
23
+ * This validator is typically used with the @type decorator and is fundamental for
24
+ * ensuring type safety in validated models.
21
25
  *
22
- * @class RequiredValidator
26
+ * @param {string} [message] - Custom error message to display when validation fails, defaults to {@link DEFAULT_ERROR_MESSAGES#TYPE}
27
+ *
28
+ * @class TypeValidator
23
29
  * @extends Validator
24
30
  *
31
+ * @example
32
+ * ```typescript
33
+ * // Create a type validator with default error message
34
+ * const typeValidator = new TypeValidator();
35
+ *
36
+ * // Create a type validator with custom error message
37
+ * const customTypeValidator = new TypeValidator("Value must be of type {0}, but got {1}");
38
+ *
39
+ * // Validate against a single type
40
+ * const stringOptions = { types: "string" };
41
+ * typeValidator.hasErrors("hello", stringOptions); // undefined (valid)
42
+ * typeValidator.hasErrors(123, stringOptions); // Returns error message (invalid)
43
+ *
44
+ * // Validate against multiple types
45
+ * const multiOptions = { types: ["string", "number"] };
46
+ * typeValidator.hasErrors("hello", multiOptions); // undefined (valid)
47
+ * typeValidator.hasErrors(123, multiOptions); // undefined (valid)
48
+ * typeValidator.hasErrors(true, multiOptions); // Returns error message (invalid)
49
+ *
50
+ * // Validate against a class type
51
+ * const classOptions = { types: { name: "Date" } };
52
+ * typeValidator.hasErrors(new Date(), classOptions); // undefined (valid)
53
+ * ```
54
+ *
55
+ * @mermaid
56
+ * sequenceDiagram
57
+ * participant C as Client
58
+ * participant V as TypeValidator
59
+ * participant R as Reflection
60
+ *
61
+ * C->>V: new TypeValidator(message)
62
+ * C->>V: hasErrors(value, options)
63
+ * alt value is undefined
64
+ * V-->>C: undefined (valid)
65
+ * else value is defined
66
+ * V->>R: evaluateDesignTypes(value, types)
67
+ * alt type evaluation passes
68
+ * V-->>C: undefined (valid)
69
+ * else type evaluation fails
70
+ * V->>V: Format error message with type info
71
+ * V-->>C: Error message
72
+ * end
73
+ * end
74
+ *
25
75
  * @category Validators
26
76
  */
27
77
  let TypeValidator = class TypeValidator extends Validator_1.Validator {
@@ -29,11 +79,15 @@ let TypeValidator = class TypeValidator extends Validator_1.Validator {
29
79
  super(message);
30
80
  }
31
81
  /**
32
- * @summary Validates a model
33
- * @param {string} value
34
- * @param {TypeValidatorOptions} options
82
+ * @description Checks if a value is of the expected type(s)
83
+ * @summary Validates that the provided value matches one of the specified types.
84
+ * It uses the Reflection utility to evaluate if the value's type matches the expected types.
85
+ * The method skips validation for undefined values to avoid conflicts with the RequiredValidator.
86
+ *
87
+ * @param {any} value - The value to validate
88
+ * @param {TypeValidatorOptions} options - Configuration options containing the expected types
35
89
  *
36
- * @return {string | undefined}
90
+ * @return {string | undefined} Error message if validation fails, undefined if validation passes
37
91
  *
38
92
  * @override
39
93
  *
@@ -56,9 +110,17 @@ exports.TypeValidator = TypeValidator = __decorate([
56
110
  (0, decorators_1.validator)(constants_1.ValidationKeys.TYPE),
57
111
  __metadata("design:paramtypes", [String])
58
112
  ], TypeValidator);
113
+ /**
114
+ * @description Register the TypeValidator with the Validation registry
115
+ * @summary This registration associates the TypeValidator with the ModelKeys.TYPE key,
116
+ * allowing it to be used for validating design types. The save flag is set to false
117
+ * to prevent the validator from being saved in the standard validator registry.
118
+ *
119
+ * @memberOf module:decorator-validation
120
+ */
59
121
  Validation_1.Validation.register({
60
122
  validator: TypeValidator,
61
123
  validationKey: constants_2.ModelKeys.TYPE,
62
124
  save: false,
63
125
  });
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHlwZVZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92YWxpZGF0aW9uL1ZhbGlkYXRvcnMvVHlwZVZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBd0M7QUFDeEMsMkNBQXFFO0FBQ3JFLDZDQUF5QztBQUN6Qyw4Q0FBMkM7QUFFM0MscURBQWtEO0FBQ2xELHFEQUFrRDtBQUVsRDs7Ozs7OztHQU9HO0FBRUksSUFBTSxhQUFhLEdBQW5CLE1BQU0sYUFBYyxTQUFRLHFCQUErQjtJQUNoRSxZQUFZLFVBQWtCLGtDQUFzQixDQUFDLElBQUk7UUFDdkQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0ksU0FBUyxDQUNkLEtBQVUsRUFDVixPQUE2QjtRQUU3QixJQUFJLEtBQUssS0FBSyxTQUFTO1lBQUUsT0FBTyxDQUFDLDBDQUEwQztRQUMzRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUNuQyxJQUFJLENBQUMsdUJBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDO1lBQy9DLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FDcEIsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQ3ZCLE9BQU8sS0FBSyxLQUFLLFFBQVE7Z0JBQ3ZCLENBQUMsQ0FBQyxLQUFLO2dCQUNQLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztvQkFDcEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO29CQUNsQixDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFDaEIsT0FBTyxLQUFLLENBQ2IsQ0FBQztJQUNOLENBQUM7Q0FDRixDQUFBO0FBakNZLHNDQUFhO3dCQUFiLGFBQWE7SUFEekIsSUFBQSxzQkFBUyxFQUFDLDBCQUFjLENBQUMsSUFBSSxDQUFDOztHQUNsQixhQUFhLENBaUN6QjtBQUVELHVCQUFVLENBQUMsUUFBUSxDQUFDO0lBQ2xCLFNBQVMsRUFBRSxhQUFhO0lBQ3hCLGFBQWEsRUFBRSxxQkFBUyxDQUFDLElBQUk7SUFDN0IsSUFBSSxFQUFFLEtBQUs7Q0FDVyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWYWxpZGF0b3IgfSBmcm9tIFwiLi9WYWxpZGF0b3JcIjtcbmltcG9ydCB7IERFRkFVTFRfRVJST1JfTUVTU0FHRVMsIFZhbGlkYXRpb25LZXlzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyB2YWxpZGF0b3IgfSBmcm9tIFwiLi9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBWYWxpZGF0aW9uIH0gZnJvbSBcIi4uL1ZhbGlkYXRpb25cIjtcbmltcG9ydCB7IFR5cGVWYWxpZGF0b3JPcHRpb25zLCBWYWxpZGF0b3JEZWZpbml0aW9uIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBNb2RlbEtleXMgfSBmcm9tIFwiLi4vLi4vdXRpbHMvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBSZWZsZWN0aW9uIH0gZnJvbSBcIkBkZWNhZi10cy9yZWZsZWN0aW9uXCI7XG5cbi8qKlxuICogQHN1bW1hcnkgUmVxdWlyZWQgVmFsaWRhdG9yXG4gKlxuICogQGNsYXNzIFJlcXVpcmVkVmFsaWRhdG9yXG4gKiBAZXh0ZW5kcyBWYWxpZGF0b3JcbiAqXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdG9yc1xuICovXG5AdmFsaWRhdG9yKFZhbGlkYXRpb25LZXlzLlRZUEUpXG5leHBvcnQgY2xhc3MgVHlwZVZhbGlkYXRvciBleHRlbmRzIFZhbGlkYXRvcjxUeXBlVmFsaWRhdG9yT3B0aW9ucz4ge1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcgPSBERUZBVUxUX0VSUk9SX01FU1NBR0VTLlRZUEUpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBWYWxpZGF0ZXMgYSBtb2RlbFxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAgICogQHBhcmFtIHtUeXBlVmFsaWRhdG9yT3B0aW9uc30gb3B0aW9uc1xuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmcgfCB1bmRlZmluZWR9XG4gICAqXG4gICAqIEBvdmVycmlkZVxuICAgKlxuICAgKiBAc2VlIFZhbGlkYXRvciNoYXNFcnJvcnNcbiAgICovXG4gIHB1YmxpYyBoYXNFcnJvcnMoXG4gICAgdmFsdWU6IGFueSxcbiAgICBvcHRpb25zOiBUeXBlVmFsaWRhdG9yT3B0aW9uc1xuICApOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm47IC8vIERvbid0IHRyeSBhbmQgZW5mb3JjZSB0eXBlIGlmIHVuZGVmaW5lZFxuICAgIGNvbnN0IHsgdHlwZXMsIG1lc3NhZ2UgfSA9IG9wdGlvbnM7XG4gICAgaWYgKCFSZWZsZWN0aW9uLmV2YWx1YXRlRGVzaWduVHlwZXModmFsdWUsIHR5cGVzKSlcbiAgICAgIHJldHVybiB0aGlzLmdldE1lc3NhZ2UoXG4gICAgICAgIG1lc3NhZ2UgfHwgdGhpcy5tZXNzYWdlLFxuICAgICAgICB0eXBlb2YgdHlwZXMgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICA/IHR5cGVzXG4gICAgICAgICAgOiBBcnJheS5pc0FycmF5KHR5cGVzKVxuICAgICAgICAgICAgPyB0eXBlcy5qb2luKFwiLCBcIilcbiAgICAgICAgICAgIDogdHlwZXMubmFtZSxcbiAgICAgICAgdHlwZW9mIHZhbHVlXG4gICAgICApO1xuICB9XG59XG5cblZhbGlkYXRpb24ucmVnaXN0ZXIoe1xuICB2YWxpZGF0b3I6IFR5cGVWYWxpZGF0b3IsXG4gIHZhbGlkYXRpb25LZXk6IE1vZGVsS2V5cy5UWVBFLFxuICBzYXZlOiBmYWxzZSxcbn0gYXMgVmFsaWRhdG9yRGVmaW5pdGlvbik7XG4iXX0=
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHlwZVZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92YWxpZGF0aW9uL1ZhbGlkYXRvcnMvVHlwZVZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBd0M7QUFDeEMsK0NBQXFFO0FBQ3JFLGlEQUF5QztBQUN6QyxvREFBMkM7QUFFM0MsMkRBQWtEO0FBQ2xELHFEQUFrRDtBQUVsRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeURHO0FBRUksSUFBTSxhQUFhLEdBQW5CLE1BQU0sYUFBYyxTQUFRLHFCQUErQjtJQUNoRSxZQUFZLFVBQWtCLGtDQUFzQixDQUFDLElBQUk7UUFDdkQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7T0FjRztJQUNJLFNBQVMsQ0FDZCxLQUFVLEVBQ1YsT0FBNkI7UUFFN0IsSUFBSSxLQUFLLEtBQUssU0FBUztZQUFFLE9BQU8sQ0FBQywwQ0FBMEM7UUFDM0UsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDbkMsSUFBSSxDQUFDLHVCQUFVLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQztZQUMvQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQ3BCLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUN2QixPQUFPLEtBQUssS0FBSyxRQUFRO2dCQUN2QixDQUFDLENBQUMsS0FBSztnQkFDUCxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7b0JBQ3BCLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztvQkFDbEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQ2hCLE9BQU8sS0FBSyxDQUNiLENBQUM7SUFDTixDQUFDO0NBQ0YsQ0FBQTtBQXJDWSxzQ0FBYTt3QkFBYixhQUFhO0lBRHpCLElBQUEsc0JBQVMsRUFBQywwQkFBYyxDQUFDLElBQUksQ0FBQzs7R0FDbEIsYUFBYSxDQXFDekI7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsdUJBQVUsQ0FBQyxRQUFRLENBQUM7SUFDbEIsU0FBUyxFQUFFLGFBQWE7SUFDeEIsYUFBYSxFQUFFLHFCQUFTLENBQUMsSUFBSTtJQUM3QixJQUFJLEVBQUUsS0FBSztDQUNXLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZhbGlkYXRvciB9IGZyb20gXCIuL1ZhbGlkYXRvclwiO1xuaW1wb3J0IHsgREVGQVVMVF9FUlJPUl9NRVNTQUdFUywgVmFsaWRhdGlvbktleXMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHZhbGlkYXRvciB9IGZyb20gXCIuL2RlY29yYXRvcnNcIjtcbmltcG9ydCB7IFZhbGlkYXRpb24gfSBmcm9tIFwiLi4vVmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgVHlwZVZhbGlkYXRvck9wdGlvbnMsIFZhbGlkYXRvckRlZmluaXRpb24gfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7IE1vZGVsS2V5cyB9IGZyb20gXCIuLi8uLi91dGlscy9jb25zdGFudHNcIjtcbmltcG9ydCB7IFJlZmxlY3Rpb24gfSBmcm9tIFwiQGRlY2FmLXRzL3JlZmxlY3Rpb25cIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVmFsaWRhdG9yIGZvciBjaGVja2luZyBpZiBhIHZhbHVlIGlzIG9mIHRoZSBleHBlY3RlZCB0eXBlKHMpXG4gKiBAc3VtbWFyeSBUaGUgVHlwZVZhbGlkYXRvciBlbnN1cmVzIHRoYXQgYSB2YWx1ZSBtYXRjaGVzIG9uZSBvZiB0aGUgc3BlY2lmaWVkIHR5cGVzLlxuICogSXQgY2FuIHZhbGlkYXRlIGFnYWluc3QgYSBzaW5nbGUgdHlwZSwgbXVsdGlwbGUgdHlwZXMsIG9yIGEgdHlwZSB3aXRoIGEgc3BlY2lmaWMgbmFtZS5cbiAqIFRoaXMgdmFsaWRhdG9yIGlzIHR5cGljYWxseSB1c2VkIHdpdGggdGhlIEB0eXBlIGRlY29yYXRvciBhbmQgaXMgZnVuZGFtZW50YWwgZm9yXG4gKiBlbnN1cmluZyB0eXBlIHNhZmV0eSBpbiB2YWxpZGF0ZWQgbW9kZWxzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZV0gLSBDdXN0b20gZXJyb3IgbWVzc2FnZSB0byBkaXNwbGF5IHdoZW4gdmFsaWRhdGlvbiBmYWlscywgZGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfRVJST1JfTUVTU0FHRVMjVFlQRX1cbiAqXG4gKiBAY2xhc3MgVHlwZVZhbGlkYXRvclxuICogQGV4dGVuZHMgVmFsaWRhdG9yXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIENyZWF0ZSBhIHR5cGUgdmFsaWRhdG9yIHdpdGggZGVmYXVsdCBlcnJvciBtZXNzYWdlXG4gKiBjb25zdCB0eXBlVmFsaWRhdG9yID0gbmV3IFR5cGVWYWxpZGF0b3IoKTtcbiAqXG4gKiAvLyBDcmVhdGUgYSB0eXBlIHZhbGlkYXRvciB3aXRoIGN1c3RvbSBlcnJvciBtZXNzYWdlXG4gKiBjb25zdCBjdXN0b21UeXBlVmFsaWRhdG9yID0gbmV3IFR5cGVWYWxpZGF0b3IoXCJWYWx1ZSBtdXN0IGJlIG9mIHR5cGUgezB9LCBidXQgZ290IHsxfVwiKTtcbiAqXG4gKiAvLyBWYWxpZGF0ZSBhZ2FpbnN0IGEgc2luZ2xlIHR5cGVcbiAqIGNvbnN0IHN0cmluZ09wdGlvbnMgPSB7IHR5cGVzOiBcInN0cmluZ1wiIH07XG4gKiB0eXBlVmFsaWRhdG9yLmhhc0Vycm9ycyhcImhlbGxvXCIsIHN0cmluZ09wdGlvbnMpOyAvLyB1bmRlZmluZWQgKHZhbGlkKVxuICogdHlwZVZhbGlkYXRvci5oYXNFcnJvcnMoMTIzLCBzdHJpbmdPcHRpb25zKTsgLy8gUmV0dXJucyBlcnJvciBtZXNzYWdlIChpbnZhbGlkKVxuICpcbiAqIC8vIFZhbGlkYXRlIGFnYWluc3QgbXVsdGlwbGUgdHlwZXNcbiAqIGNvbnN0IG11bHRpT3B0aW9ucyA9IHsgdHlwZXM6IFtcInN0cmluZ1wiLCBcIm51bWJlclwiXSB9O1xuICogdHlwZVZhbGlkYXRvci5oYXNFcnJvcnMoXCJoZWxsb1wiLCBtdWx0aU9wdGlvbnMpOyAvLyB1bmRlZmluZWQgKHZhbGlkKVxuICogdHlwZVZhbGlkYXRvci5oYXNFcnJvcnMoMTIzLCBtdWx0aU9wdGlvbnMpOyAvLyB1bmRlZmluZWQgKHZhbGlkKVxuICogdHlwZVZhbGlkYXRvci5oYXNFcnJvcnModHJ1ZSwgbXVsdGlPcHRpb25zKTsgLy8gUmV0dXJucyBlcnJvciBtZXNzYWdlIChpbnZhbGlkKVxuICpcbiAqIC8vIFZhbGlkYXRlIGFnYWluc3QgYSBjbGFzcyB0eXBlXG4gKiBjb25zdCBjbGFzc09wdGlvbnMgPSB7IHR5cGVzOiB7IG5hbWU6IFwiRGF0ZVwiIH0gfTtcbiAqIHR5cGVWYWxpZGF0b3IuaGFzRXJyb3JzKG5ldyBEYXRlKCksIGNsYXNzT3B0aW9ucyk7IC8vIHVuZGVmaW5lZCAodmFsaWQpXG4gKiBgYGBcbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IEMgYXMgQ2xpZW50XG4gKiAgIHBhcnRpY2lwYW50IFYgYXMgVHlwZVZhbGlkYXRvclxuICogICBwYXJ0aWNpcGFudCBSIGFzIFJlZmxlY3Rpb25cbiAqXG4gKiAgIEMtPj5WOiBuZXcgVHlwZVZhbGlkYXRvcihtZXNzYWdlKVxuICogICBDLT4+VjogaGFzRXJyb3JzKHZhbHVlLCBvcHRpb25zKVxuICogICBhbHQgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKiAgICAgVi0tPj5DOiB1bmRlZmluZWQgKHZhbGlkKVxuICogICBlbHNlIHZhbHVlIGlzIGRlZmluZWRcbiAqICAgICBWLT4+UjogZXZhbHVhdGVEZXNpZ25UeXBlcyh2YWx1ZSwgdHlwZXMpXG4gKiAgICAgYWx0IHR5cGUgZXZhbHVhdGlvbiBwYXNzZXNcbiAqICAgICAgIFYtLT4+QzogdW5kZWZpbmVkICh2YWxpZClcbiAqICAgICBlbHNlIHR5cGUgZXZhbHVhdGlvbiBmYWlsc1xuICogICAgICAgVi0+PlY6IEZvcm1hdCBlcnJvciBtZXNzYWdlIHdpdGggdHlwZSBpbmZvXG4gKiAgICAgICBWLS0+PkM6IEVycm9yIG1lc3NhZ2VcbiAqICAgICBlbmRcbiAqICAgZW5kXG4gKlxuICogQGNhdGVnb3J5IFZhbGlkYXRvcnNcbiAqL1xuQHZhbGlkYXRvcihWYWxpZGF0aW9uS2V5cy5UWVBFKVxuZXhwb3J0IGNsYXNzIFR5cGVWYWxpZGF0b3IgZXh0ZW5kcyBWYWxpZGF0b3I8VHlwZVZhbGlkYXRvck9wdGlvbnM+IHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nID0gREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5UWVBFKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENoZWNrcyBpZiBhIHZhbHVlIGlzIG9mIHRoZSBleHBlY3RlZCB0eXBlKHMpXG4gICAqIEBzdW1tYXJ5IFZhbGlkYXRlcyB0aGF0IHRoZSBwcm92aWRlZCB2YWx1ZSBtYXRjaGVzIG9uZSBvZiB0aGUgc3BlY2lmaWVkIHR5cGVzLlxuICAgKiBJdCB1c2VzIHRoZSBSZWZsZWN0aW9uIHV0aWxpdHkgdG8gZXZhbHVhdGUgaWYgdGhlIHZhbHVlJ3MgdHlwZSBtYXRjaGVzIHRoZSBleHBlY3RlZCB0eXBlcy5cbiAgICogVGhlIG1ldGhvZCBza2lwcyB2YWxpZGF0aW9uIGZvciB1bmRlZmluZWQgdmFsdWVzIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIHRoZSBSZXF1aXJlZFZhbGlkYXRvci5cbiAgICpcbiAgICogQHBhcmFtIHthbnl9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIHZhbGlkYXRlXG4gICAqIEBwYXJhbSB7VHlwZVZhbGlkYXRvck9wdGlvbnN9IG9wdGlvbnMgLSBDb25maWd1cmF0aW9uIG9wdGlvbnMgY29udGFpbmluZyB0aGUgZXhwZWN0ZWQgdHlwZXNcbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nIHwgdW5kZWZpbmVkfSBFcnJvciBtZXNzYWdlIGlmIHZhbGlkYXRpb24gZmFpbHMsIHVuZGVmaW5lZCBpZiB2YWxpZGF0aW9uIHBhc3Nlc1xuICAgKlxuICAgKiBAb3ZlcnJpZGVcbiAgICpcbiAgICogQHNlZSBWYWxpZGF0b3IjaGFzRXJyb3JzXG4gICAqL1xuICBwdWJsaWMgaGFzRXJyb3JzKFxuICAgIHZhbHVlOiBhbnksXG4gICAgb3B0aW9uczogVHlwZVZhbGlkYXRvck9wdGlvbnNcbiAgKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuOyAvLyBEb24ndCB0cnkgYW5kIGVuZm9yY2UgdHlwZSBpZiB1bmRlZmluZWRcbiAgICBjb25zdCB7IHR5cGVzLCBtZXNzYWdlIH0gPSBvcHRpb25zO1xuICAgIGlmICghUmVmbGVjdGlvbi5ldmFsdWF0ZURlc2lnblR5cGVzKHZhbHVlLCB0eXBlcykpXG4gICAgICByZXR1cm4gdGhpcy5nZXRNZXNzYWdlKFxuICAgICAgICBtZXNzYWdlIHx8IHRoaXMubWVzc2FnZSxcbiAgICAgICAgdHlwZW9mIHR5cGVzID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgPyB0eXBlc1xuICAgICAgICAgIDogQXJyYXkuaXNBcnJheSh0eXBlcylcbiAgICAgICAgICAgID8gdHlwZXMuam9pbihcIiwgXCIpXG4gICAgICAgICAgICA6IHR5cGVzLm5hbWUsXG4gICAgICAgIHR5cGVvZiB2YWx1ZVxuICAgICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZWdpc3RlciB0aGUgVHlwZVZhbGlkYXRvciB3aXRoIHRoZSBWYWxpZGF0aW9uIHJlZ2lzdHJ5XG4gKiBAc3VtbWFyeSBUaGlzIHJlZ2lzdHJhdGlvbiBhc3NvY2lhdGVzIHRoZSBUeXBlVmFsaWRhdG9yIHdpdGggdGhlIE1vZGVsS2V5cy5UWVBFIGtleSxcbiAqIGFsbG93aW5nIGl0IHRvIGJlIHVzZWQgZm9yIHZhbGlkYXRpbmcgZGVzaWduIHR5cGVzLiBUaGUgc2F2ZSBmbGFnIGlzIHNldCB0byBmYWxzZVxuICogdG8gcHJldmVudCB0aGUgdmFsaWRhdG9yIGZyb20gYmVpbmcgc2F2ZWQgaW4gdGhlIHN0YW5kYXJkIHZhbGlkYXRvciByZWdpc3RyeS5cbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKi9cblZhbGlkYXRpb24ucmVnaXN0ZXIoe1xuICB2YWxpZGF0b3I6IFR5cGVWYWxpZGF0b3IsXG4gIHZhbGlkYXRpb25LZXk6IE1vZGVsS2V5cy5UWVBFLFxuICBzYXZlOiBmYWxzZSxcbn0gYXMgVmFsaWRhdG9yRGVmaW5pdGlvbik7XG4iXX0=
@@ -1,21 +1,75 @@
1
1
  import { Validator } from "./Validator";
2
2
  import { TypeValidatorOptions } from "../types";
3
3
  /**
4
- * @summary Required Validator
4
+ * @description Validator for checking if a value is of the expected type(s)
5
+ * @summary The TypeValidator ensures that a value matches one of the specified types.
6
+ * It can validate against a single type, multiple types, or a type with a specific name.
7
+ * This validator is typically used with the @type decorator and is fundamental for
8
+ * ensuring type safety in validated models.
5
9
  *
6
- * @class RequiredValidator
10
+ * @param {string} [message] - Custom error message to display when validation fails, defaults to {@link DEFAULT_ERROR_MESSAGES#TYPE}
11
+ *
12
+ * @class TypeValidator
7
13
  * @extends Validator
8
14
  *
15
+ * @example
16
+ * ```typescript
17
+ * // Create a type validator with default error message
18
+ * const typeValidator = new TypeValidator();
19
+ *
20
+ * // Create a type validator with custom error message
21
+ * const customTypeValidator = new TypeValidator("Value must be of type {0}, but got {1}");
22
+ *
23
+ * // Validate against a single type
24
+ * const stringOptions = { types: "string" };
25
+ * typeValidator.hasErrors("hello", stringOptions); // undefined (valid)
26
+ * typeValidator.hasErrors(123, stringOptions); // Returns error message (invalid)
27
+ *
28
+ * // Validate against multiple types
29
+ * const multiOptions = { types: ["string", "number"] };
30
+ * typeValidator.hasErrors("hello", multiOptions); // undefined (valid)
31
+ * typeValidator.hasErrors(123, multiOptions); // undefined (valid)
32
+ * typeValidator.hasErrors(true, multiOptions); // Returns error message (invalid)
33
+ *
34
+ * // Validate against a class type
35
+ * const classOptions = { types: { name: "Date" } };
36
+ * typeValidator.hasErrors(new Date(), classOptions); // undefined (valid)
37
+ * ```
38
+ *
39
+ * @mermaid
40
+ * sequenceDiagram
41
+ * participant C as Client
42
+ * participant V as TypeValidator
43
+ * participant R as Reflection
44
+ *
45
+ * C->>V: new TypeValidator(message)
46
+ * C->>V: hasErrors(value, options)
47
+ * alt value is undefined
48
+ * V-->>C: undefined (valid)
49
+ * else value is defined
50
+ * V->>R: evaluateDesignTypes(value, types)
51
+ * alt type evaluation passes
52
+ * V-->>C: undefined (valid)
53
+ * else type evaluation fails
54
+ * V->>V: Format error message with type info
55
+ * V-->>C: Error message
56
+ * end
57
+ * end
58
+ *
9
59
  * @category Validators
10
60
  */
11
61
  export declare class TypeValidator extends Validator<TypeValidatorOptions> {
12
62
  constructor(message?: string);
13
63
  /**
14
- * @summary Validates a model
15
- * @param {string} value
16
- * @param {TypeValidatorOptions} options
64
+ * @description Checks if a value is of the expected type(s)
65
+ * @summary Validates that the provided value matches one of the specified types.
66
+ * It uses the Reflection utility to evaluate if the value's type matches the expected types.
67
+ * The method skips validation for undefined values to avoid conflicts with the RequiredValidator.
68
+ *
69
+ * @param {any} value - The value to validate
70
+ * @param {TypeValidatorOptions} options - Configuration options containing the expected types
17
71
  *
18
- * @return {string | undefined}
72
+ * @return {string | undefined} Error message if validation fails, undefined if validation passes
19
73
  *
20
74
  * @override
21
75
  *
@@ -14,12 +14,43 @@ const constants_1 = require("./constants.cjs");
14
14
  const PatternValidator_1 = require("./PatternValidator.cjs");
15
15
  const decorators_1 = require("./decorators.cjs");
16
16
  /**
17
- * @summary URL Validator
18
- * @description Pattern from {@link https://gist.github.com/dperini/729294}
17
+ * @description Validator for checking if a string is a valid URL
18
+ * @summary The URLValidator checks if a string matches a standard URL pattern.
19
+ * It extends the PatternValidator and uses a robust URL regex pattern to validate web addresses.
20
+ * The pattern is sourced from {@link https://gist.github.com/dperini/729294} and is widely
21
+ * recognized for its accuracy in validating URLs. This validator is typically used with the @url decorator.
22
+ *
23
+ * @param {string} [message] - Custom error message to display when validation fails, defaults to {@link DEFAULT_ERROR_MESSAGES#URL}
19
24
  *
20
25
  * @class URLValidator
21
26
  * @extends PatternValidator
22
27
  *
28
+ * @example
29
+ * ```typescript
30
+ * // Create a URL validator with default error message
31
+ * const urlValidator = new URLValidator();
32
+ *
33
+ * // Create a URL validator with custom error message
34
+ * const customUrlValidator = new URLValidator("Please enter a valid web address");
35
+ *
36
+ * // Validate a URL
37
+ * const result = urlValidator.hasErrors("https://example.com"); // undefined (valid)
38
+ * const invalidResult = urlValidator.hasErrors("not-a-url"); // Returns error message (invalid)
39
+ * ```
40
+ *
41
+ * @mermaid
42
+ * sequenceDiagram
43
+ * participant C as Client
44
+ * participant U as URLValidator
45
+ * participant P as PatternValidator
46
+ *
47
+ * C->>U: new URLValidator(message)
48
+ * U->>P: super(message)
49
+ * C->>U: hasErrors(value, options)
50
+ * U->>P: super.hasErrors(value, options with URL pattern)
51
+ * P-->>U: validation result
52
+ * U-->>C: validation result
53
+ *
23
54
  * @category Validators
24
55
  */
25
56
  let URLValidator = class URLValidator extends PatternValidator_1.PatternValidator {
@@ -27,16 +58,19 @@ let URLValidator = class URLValidator extends PatternValidator_1.PatternValidato
27
58
  super(message);
28
59
  }
29
60
  /**
30
- * @summary Validates a model
61
+ * @description Checks if a string is a valid URL
62
+ * @summary Validates that the provided string matches the URL pattern.
63
+ * This method extends the PatternValidator's hasErrors method by ensuring
64
+ * the URL pattern is used, even if not explicitly provided in the options.
31
65
  *
32
- * @param {string} value
33
- * @param {PatternValidatorOptions} [options={}]
66
+ * @param {string} value - The string to validate as a URL
67
+ * @param {PatternValidatorOptions} [options={}] - Optional configuration options
34
68
  *
35
- * @return {string | undefined}
69
+ * @return {string | undefined} Error message if validation fails, undefined if validation passes
36
70
  *
37
71
  * @override
38
72
  *
39
- * @see Validator#hasErrors
73
+ * @see PatternValidator#hasErrors
40
74
  */
41
75
  hasErrors(value, options = {}) {
42
76
  return super.hasErrors(value, {
@@ -50,4 +84,4 @@ exports.URLValidator = URLValidator = __decorate([
50
84
  (0, decorators_1.validator)(constants_1.ValidationKeys.URL),
51
85
  __metadata("design:paramtypes", [String])
52
86
  ], URLValidator);
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVVJMVmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3ZhbGlkYXRpb24vVmFsaWRhdG9ycy9VUkxWYWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsMkNBSXFCO0FBQ3JCLHlEQUFzRDtBQUN0RCw2Q0FBeUM7QUFHekM7Ozs7Ozs7O0dBUUc7QUFFSSxJQUFNLFlBQVksR0FBbEIsTUFBTSxZQUFhLFNBQVEsbUNBQWdCO0lBQ2hELFlBQVksVUFBa0Isa0NBQXNCLENBQUMsR0FBRztRQUN0RCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0ksU0FBUyxDQUNkLEtBQWEsRUFDYixVQUFtQyxFQUFFO1FBRXJDLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUU7WUFDNUIsR0FBRyxPQUFPO1lBQ1YsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLElBQUksNEJBQWdCLENBQUMsR0FBRztTQUNqRCxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YsQ0FBQTtBQTFCWSxvQ0FBWTt1QkFBWixZQUFZO0lBRHhCLElBQUEsc0JBQVMsRUFBQywwQkFBYyxDQUFDLEdBQUcsQ0FBQzs7R0FDakIsWUFBWSxDQTBCeEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBWYWxpZGF0aW9uS2V5cyxcbiAgREVGQVVMVF9FUlJPUl9NRVNTQUdFUyxcbiAgREVGQVVMVF9QQVRURVJOUyxcbn0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBQYXR0ZXJuVmFsaWRhdG9yIH0gZnJvbSBcIi4vUGF0dGVyblZhbGlkYXRvclwiO1xuaW1wb3J0IHsgdmFsaWRhdG9yIH0gZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgUGF0dGVyblZhbGlkYXRvck9wdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXNcIjtcblxuLyoqXG4gKiBAc3VtbWFyeSBVUkwgVmFsaWRhdG9yXG4gKiBAZGVzY3JpcHRpb24gUGF0dGVybiBmcm9tIHtAbGluayBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9kcGVyaW5pLzcyOTI5NH1cbiAqXG4gKiBAY2xhc3MgVVJMVmFsaWRhdG9yXG4gKiBAZXh0ZW5kcyBQYXR0ZXJuVmFsaWRhdG9yXG4gKlxuICogQGNhdGVnb3J5IFZhbGlkYXRvcnNcbiAqL1xuQHZhbGlkYXRvcihWYWxpZGF0aW9uS2V5cy5VUkwpXG5leHBvcnQgY2xhc3MgVVJMVmFsaWRhdG9yIGV4dGVuZHMgUGF0dGVyblZhbGlkYXRvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZyA9IERFRkFVTFRfRVJST1JfTUVTU0FHRVMuVVJMKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgVmFsaWRhdGVzIGEgbW9kZWxcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gICAqIEBwYXJhbSB7UGF0dGVyblZhbGlkYXRvck9wdGlvbnN9IFtvcHRpb25zPXt9XVxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmcgfCB1bmRlZmluZWR9XG4gICAqXG4gICAqIEBvdmVycmlkZVxuICAgKlxuICAgKiBAc2VlIFZhbGlkYXRvciNoYXNFcnJvcnNcbiAgICovXG4gIHB1YmxpYyBoYXNFcnJvcnMoXG4gICAgdmFsdWU6IHN0cmluZyxcbiAgICBvcHRpb25zOiBQYXR0ZXJuVmFsaWRhdG9yT3B0aW9ucyA9IHt9XG4gICk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHN1cGVyLmhhc0Vycm9ycyh2YWx1ZSwge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHBhdHRlcm46IG9wdGlvbnMucGF0dGVybiB8fCBERUZBVUxUX1BBVFRFUk5TLlVSTCxcbiAgICB9KTtcbiAgfVxufVxuIl19
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVVJMVmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3ZhbGlkYXRpb24vVmFsaWRhdG9ycy9VUkxWYWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsK0NBSXFCO0FBQ3JCLDZEQUFzRDtBQUN0RCxpREFBeUM7QUFHekM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVDRztBQUVJLElBQU0sWUFBWSxHQUFsQixNQUFNLFlBQWEsU0FBUSxtQ0FBZ0I7SUFDaEQsWUFBWSxVQUFrQixrQ0FBc0IsQ0FBQyxHQUFHO1FBQ3RELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSSxTQUFTLENBQ2QsS0FBYSxFQUNiLFVBQW1DLEVBQUU7UUFFckMsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRTtZQUM1QixHQUFHLE9BQU87WUFDVixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sSUFBSSw0QkFBZ0IsQ0FBQyxHQUFHO1NBQ2pELENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRixDQUFBO0FBN0JZLG9DQUFZO3VCQUFaLFlBQVk7SUFEeEIsSUFBQSxzQkFBUyxFQUFDLDBCQUFjLENBQUMsR0FBRyxDQUFDOztHQUNqQixZQUFZLENBNkJ4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIFZhbGlkYXRpb25LZXlzLFxuICBERUZBVUxUX0VSUk9SX01FU1NBR0VTLFxuICBERUZBVUxUX1BBVFRFUk5TLFxufSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IFBhdHRlcm5WYWxpZGF0b3IgfSBmcm9tIFwiLi9QYXR0ZXJuVmFsaWRhdG9yXCI7XG5pbXBvcnQgeyB2YWxpZGF0b3IgfSBmcm9tIFwiLi9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBQYXR0ZXJuVmFsaWRhdG9yT3B0aW9ucyB9IGZyb20gXCIuLi90eXBlc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBWYWxpZGF0b3IgZm9yIGNoZWNraW5nIGlmIGEgc3RyaW5nIGlzIGEgdmFsaWQgVVJMXG4gKiBAc3VtbWFyeSBUaGUgVVJMVmFsaWRhdG9yIGNoZWNrcyBpZiBhIHN0cmluZyBtYXRjaGVzIGEgc3RhbmRhcmQgVVJMIHBhdHRlcm4uXG4gKiBJdCBleHRlbmRzIHRoZSBQYXR0ZXJuVmFsaWRhdG9yIGFuZCB1c2VzIGEgcm9idXN0IFVSTCByZWdleCBwYXR0ZXJuIHRvIHZhbGlkYXRlIHdlYiBhZGRyZXNzZXMuXG4gKiBUaGUgcGF0dGVybiBpcyBzb3VyY2VkIGZyb20ge0BsaW5rIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2RwZXJpbmkvNzI5Mjk0fSBhbmQgaXMgd2lkZWx5XG4gKiByZWNvZ25pemVkIGZvciBpdHMgYWNjdXJhY3kgaW4gdmFsaWRhdGluZyBVUkxzLiBUaGlzIHZhbGlkYXRvciBpcyB0eXBpY2FsbHkgdXNlZCB3aXRoIHRoZSBAdXJsIGRlY29yYXRvci5cbiAqIFxuICogQHBhcmFtIHtzdHJpbmd9IFttZXNzYWdlXSAtIEN1c3RvbSBlcnJvciBtZXNzYWdlIHRvIGRpc3BsYXkgd2hlbiB2YWxpZGF0aW9uIGZhaWxzLCBkZWZhdWx0cyB0byB7QGxpbmsgREVGQVVMVF9FUlJPUl9NRVNTQUdFUyNVUkx9XG4gKiBcbiAqIEBjbGFzcyBVUkxWYWxpZGF0b3JcbiAqIEBleHRlbmRzIFBhdHRlcm5WYWxpZGF0b3JcbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIENyZWF0ZSBhIFVSTCB2YWxpZGF0b3Igd2l0aCBkZWZhdWx0IGVycm9yIG1lc3NhZ2VcbiAqIGNvbnN0IHVybFZhbGlkYXRvciA9IG5ldyBVUkxWYWxpZGF0b3IoKTtcbiAqIFxuICogLy8gQ3JlYXRlIGEgVVJMIHZhbGlkYXRvciB3aXRoIGN1c3RvbSBlcnJvciBtZXNzYWdlXG4gKiBjb25zdCBjdXN0b21VcmxWYWxpZGF0b3IgPSBuZXcgVVJMVmFsaWRhdG9yKFwiUGxlYXNlIGVudGVyIGEgdmFsaWQgd2ViIGFkZHJlc3NcIik7XG4gKiBcbiAqIC8vIFZhbGlkYXRlIGEgVVJMXG4gKiBjb25zdCByZXN1bHQgPSB1cmxWYWxpZGF0b3IuaGFzRXJyb3JzKFwiaHR0cHM6Ly9leGFtcGxlLmNvbVwiKTsgLy8gdW5kZWZpbmVkICh2YWxpZClcbiAqIGNvbnN0IGludmFsaWRSZXN1bHQgPSB1cmxWYWxpZGF0b3IuaGFzRXJyb3JzKFwibm90LWEtdXJsXCIpOyAvLyBSZXR1cm5zIGVycm9yIG1lc3NhZ2UgKGludmFsaWQpXG4gKiBgYGBcbiAqIFxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDIGFzIENsaWVudFxuICogICBwYXJ0aWNpcGFudCBVIGFzIFVSTFZhbGlkYXRvclxuICogICBwYXJ0aWNpcGFudCBQIGFzIFBhdHRlcm5WYWxpZGF0b3JcbiAqICAgXG4gKiAgIEMtPj5VOiBuZXcgVVJMVmFsaWRhdG9yKG1lc3NhZ2UpXG4gKiAgIFUtPj5QOiBzdXBlcihtZXNzYWdlKVxuICogICBDLT4+VTogaGFzRXJyb3JzKHZhbHVlLCBvcHRpb25zKVxuICogICBVLT4+UDogc3VwZXIuaGFzRXJyb3JzKHZhbHVlLCBvcHRpb25zIHdpdGggVVJMIHBhdHRlcm4pXG4gKiAgIFAtLT4+VTogdmFsaWRhdGlvbiByZXN1bHRcbiAqICAgVS0tPj5DOiB2YWxpZGF0aW9uIHJlc3VsdFxuICogXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdG9yc1xuICovXG5AdmFsaWRhdG9yKFZhbGlkYXRpb25LZXlzLlVSTClcbmV4cG9ydCBjbGFzcyBVUkxWYWxpZGF0b3IgZXh0ZW5kcyBQYXR0ZXJuVmFsaWRhdG9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nID0gREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5VUkwpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ2hlY2tzIGlmIGEgc3RyaW5nIGlzIGEgdmFsaWQgVVJMXG4gICAqIEBzdW1tYXJ5IFZhbGlkYXRlcyB0aGF0IHRoZSBwcm92aWRlZCBzdHJpbmcgbWF0Y2hlcyB0aGUgVVJMIHBhdHRlcm4uXG4gICAqIFRoaXMgbWV0aG9kIGV4dGVuZHMgdGhlIFBhdHRlcm5WYWxpZGF0b3IncyBoYXNFcnJvcnMgbWV0aG9kIGJ5IGVuc3VyaW5nXG4gICAqIHRoZSBVUkwgcGF0dGVybiBpcyB1c2VkLCBldmVuIGlmIG5vdCBleHBsaWNpdGx5IHByb3ZpZGVkIGluIHRoZSBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgLSBUaGUgc3RyaW5nIHRvIHZhbGlkYXRlIGFzIGEgVVJMXG4gICAqIEBwYXJhbSB7UGF0dGVyblZhbGlkYXRvck9wdGlvbnN9IFtvcHRpb25zPXt9XSAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmcgfCB1bmRlZmluZWR9IEVycm9yIG1lc3NhZ2UgaWYgdmFsaWRhdGlvbiBmYWlscywgdW5kZWZpbmVkIGlmIHZhbGlkYXRpb24gcGFzc2VzXG4gICAqXG4gICAqIEBvdmVycmlkZVxuICAgKlxuICAgKiBAc2VlIFBhdHRlcm5WYWxpZGF0b3IjaGFzRXJyb3JzXG4gICAqL1xuICBwdWJsaWMgaGFzRXJyb3JzKFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgb3B0aW9uczogUGF0dGVyblZhbGlkYXRvck9wdGlvbnMgPSB7fVxuICApOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBzdXBlci5oYXNFcnJvcnModmFsdWUsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBwYXR0ZXJuOiBvcHRpb25zLnBhdHRlcm4gfHwgREVGQVVMVF9QQVRURVJOUy5VUkwsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==