@decaf-ts/decorator-validation 1.6.1 → 1.6.3

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 (124) hide show
  1. package/README.md +8 -2
  2. package/dist/decorator-validation.cjs +1154 -352
  3. package/dist/decorator-validation.esm.cjs +1124 -320
  4. package/lib/esm/index.d.ts +5 -36
  5. package/lib/esm/index.js +6 -37
  6. package/lib/esm/model/Model.d.ts +100 -29
  7. package/lib/esm/model/Model.js +103 -36
  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 +4 -4
  13. package/lib/esm/model/decorators.js +6 -5
  14. package/lib/esm/model/types.d.ts +30 -11
  15. package/lib/esm/model/types.js +1 -1
  16. package/lib/esm/model/validation.d.ts +2 -2
  17. package/lib/esm/model/validation.js +5 -5
  18. package/lib/esm/utils/Decoration.d.ts +123 -0
  19. package/lib/esm/utils/Decoration.js +188 -0
  20. package/lib/esm/utils/constants.d.ts +27 -9
  21. package/lib/esm/utils/constants.js +28 -10
  22. package/lib/esm/utils/dates.d.ts +26 -16
  23. package/lib/esm/utils/dates.js +27 -17
  24. package/lib/esm/utils/decorators.d.ts +41 -0
  25. package/lib/esm/utils/decorators.js +42 -1
  26. package/lib/esm/utils/hashing.d.ts +50 -6
  27. package/lib/esm/utils/hashing.js +49 -5
  28. package/lib/esm/utils/index.d.ts +1 -0
  29. package/lib/esm/utils/index.js +2 -1
  30. package/lib/esm/utils/registry.d.ts +2 -2
  31. package/lib/esm/utils/registry.js +1 -1
  32. package/lib/esm/utils/serialization.d.ts +1 -1
  33. package/lib/esm/utils/serialization.js +2 -2
  34. package/lib/esm/utils/strings.d.ts +4 -4
  35. package/lib/esm/utils/strings.js +5 -5
  36. package/lib/esm/utils/types.d.ts +123 -16
  37. package/lib/esm/utils/types.js +1 -1
  38. package/lib/esm/validation/Validators/DateValidator.d.ts +40 -8
  39. package/lib/esm/validation/Validators/DateValidator.js +41 -9
  40. package/lib/esm/validation/Validators/EmailValidator.d.ts +39 -7
  41. package/lib/esm/validation/Validators/EmailValidator.js +40 -8
  42. package/lib/esm/validation/Validators/ListValidator.d.ts +44 -6
  43. package/lib/esm/validation/Validators/ListValidator.js +45 -7
  44. package/lib/esm/validation/Validators/MaxValidator.d.ts +52 -6
  45. package/lib/esm/validation/Validators/MaxValidator.js +53 -7
  46. package/lib/esm/validation/Validators/MinValidator.d.ts +52 -6
  47. package/lib/esm/validation/Validators/MinValidator.js +53 -7
  48. package/lib/esm/validation/Validators/PatternValidator.d.ts +75 -9
  49. package/lib/esm/validation/Validators/PatternValidator.js +76 -10
  50. package/lib/esm/validation/Validators/RequiredValidator.d.ts +52 -6
  51. package/lib/esm/validation/Validators/RequiredValidator.js +53 -7
  52. package/lib/esm/validation/Validators/TypeValidator.d.ts +60 -6
  53. package/lib/esm/validation/Validators/TypeValidator.js +69 -7
  54. package/lib/esm/validation/Validators/URLValidator.d.ts +41 -7
  55. package/lib/esm/validation/Validators/URLValidator.js +42 -8
  56. package/lib/esm/validation/Validators/Validator.d.ts +77 -14
  57. package/lib/esm/validation/Validators/Validator.js +68 -11
  58. package/lib/esm/validation/Validators/ValidatorRegistry.d.ts +1 -7
  59. package/lib/esm/validation/Validators/ValidatorRegistry.js +4 -11
  60. package/lib/esm/validation/decorators.d.ts +50 -40
  61. package/lib/esm/validation/decorators.js +102 -53
  62. package/lib/esm/validation/types.d.ts +146 -28
  63. package/lib/esm/validation/types.js +1 -1
  64. package/lib/index.cjs +7 -38
  65. package/lib/index.d.ts +5 -36
  66. package/lib/model/Model.cjs +103 -38
  67. package/lib/model/Model.d.ts +100 -29
  68. package/lib/model/constants.cjs +4 -4
  69. package/lib/model/constants.d.ts +3 -3
  70. package/lib/model/construction.cjs +4 -4
  71. package/lib/model/construction.d.ts +3 -3
  72. package/lib/model/decorators.cjs +6 -5
  73. package/lib/model/decorators.d.ts +4 -4
  74. package/lib/model/types.cjs +1 -1
  75. package/lib/model/types.d.ts +30 -11
  76. package/lib/model/validation.cjs +4 -4
  77. package/lib/model/validation.d.ts +2 -2
  78. package/lib/utils/Decoration.cjs +192 -0
  79. package/lib/utils/Decoration.d.ts +123 -0
  80. package/lib/utils/constants.cjs +29 -11
  81. package/lib/utils/constants.d.ts +27 -9
  82. package/lib/utils/dates.cjs +27 -17
  83. package/lib/utils/dates.d.ts +26 -16
  84. package/lib/utils/decorators.cjs +42 -1
  85. package/lib/utils/decorators.d.ts +41 -0
  86. package/lib/utils/hashing.cjs +49 -5
  87. package/lib/utils/hashing.d.ts +50 -6
  88. package/lib/utils/index.cjs +2 -1
  89. package/lib/utils/index.d.ts +1 -0
  90. package/lib/utils/registry.cjs +1 -1
  91. package/lib/utils/registry.d.ts +2 -2
  92. package/lib/utils/serialization.cjs +2 -2
  93. package/lib/utils/serialization.d.ts +1 -1
  94. package/lib/utils/strings.cjs +5 -5
  95. package/lib/utils/strings.d.ts +4 -4
  96. package/lib/utils/types.cjs +1 -1
  97. package/lib/utils/types.d.ts +123 -16
  98. package/lib/validation/Validators/DateValidator.cjs +41 -9
  99. package/lib/validation/Validators/DateValidator.d.ts +40 -8
  100. package/lib/validation/Validators/EmailValidator.cjs +40 -8
  101. package/lib/validation/Validators/EmailValidator.d.ts +39 -7
  102. package/lib/validation/Validators/ListValidator.cjs +45 -7
  103. package/lib/validation/Validators/ListValidator.d.ts +44 -6
  104. package/lib/validation/Validators/MaxValidator.cjs +53 -7
  105. package/lib/validation/Validators/MaxValidator.d.ts +52 -6
  106. package/lib/validation/Validators/MinValidator.cjs +53 -7
  107. package/lib/validation/Validators/MinValidator.d.ts +52 -6
  108. package/lib/validation/Validators/PatternValidator.cjs +76 -10
  109. package/lib/validation/Validators/PatternValidator.d.ts +75 -9
  110. package/lib/validation/Validators/RequiredValidator.cjs +53 -7
  111. package/lib/validation/Validators/RequiredValidator.d.ts +52 -6
  112. package/lib/validation/Validators/TypeValidator.cjs +69 -7
  113. package/lib/validation/Validators/TypeValidator.d.ts +60 -6
  114. package/lib/validation/Validators/URLValidator.cjs +42 -8
  115. package/lib/validation/Validators/URLValidator.d.ts +41 -7
  116. package/lib/validation/Validators/Validator.cjs +68 -11
  117. package/lib/validation/Validators/Validator.d.ts +77 -14
  118. package/lib/validation/Validators/ValidatorRegistry.cjs +4 -12
  119. package/lib/validation/Validators/ValidatorRegistry.d.ts +1 -7
  120. package/lib/validation/decorators.cjs +102 -53
  121. package/lib/validation/decorators.d.ts +50 -40
  122. package/lib/validation/types.cjs +1 -1
  123. package/lib/validation/types.d.ts +146 -28
  124. package/package.json +2 -2
@@ -1,2 +1,43 @@
1
+ /**
2
+ * @description Property decorator factory for model attributes
3
+ * @summary Creates a decorator that marks class properties as model attributes. The decorator maintains a list
4
+ * of property keys under a specified metadata key in the model. If the key doesn't exist, it creates a new array;
5
+ * if it exists, it appends the property key to the existing array, avoiding duplicates.
6
+ *
7
+ * @param {string} [key=ModelKeys.ATTRIBUTE] - The metadata key under which to store the property name
8
+ * @return {function(object, any?): void} Decorator function that registers the property
9
+ *
10
+ * @function prop
11
+ * @category Decorators
12
+ *
13
+ * @mermaid
14
+ * sequenceDiagram
15
+ * participant D as Decorator
16
+ * participant M as Model
17
+ *
18
+ * D->>M: Check if key exists
19
+ * alt key exists
20
+ * M-->>D: Return existing props array
21
+ * else key doesn't exist
22
+ * D->>M: Create new props array
23
+ * end
24
+ * D->>M: Check if property exists
25
+ * alt property not in array
26
+ * D->>M: Add property to array
27
+ * end
28
+ */
1
29
  export declare function prop(key?: string): (model: object, propertyKey?: any) => void;
30
+ /**
31
+ * @description Combined property decorator factory for metadata and attribute marking
32
+ * @summary Creates a decorator that both marks a property as a model attribute and assigns metadata to it.
33
+ * Combines the functionality of prop() and metadata() decorators.
34
+ *
35
+ * @template V - The type of the metadata value
36
+ * @param {string} key - The metadata key
37
+ * @param {V} value - The metadata value to associate with the property
38
+ * @return {Function} Combined decorator function
39
+ *
40
+ * @function propMetadata
41
+ * @category Decorators
42
+ */
2
43
  export declare function propMetadata<V>(key: string, value: V): (target: object, propertyKey?: string | symbol | unknown, descriptor?: PropertyDescriptor) => void;
@@ -1,5 +1,33 @@
1
1
  import { apply, metadata } from "@decaf-ts/reflection";
2
2
  import { ModelKeys } from "./constants";
3
+ /**
4
+ * @description Property decorator factory for model attributes
5
+ * @summary Creates a decorator that marks class properties as model attributes. The decorator maintains a list
6
+ * of property keys under a specified metadata key in the model. If the key doesn't exist, it creates a new array;
7
+ * if it exists, it appends the property key to the existing array, avoiding duplicates.
8
+ *
9
+ * @param {string} [key=ModelKeys.ATTRIBUTE] - The metadata key under which to store the property name
10
+ * @return {function(object, any?): void} Decorator function that registers the property
11
+ *
12
+ * @function prop
13
+ * @category Decorators
14
+ *
15
+ * @mermaid
16
+ * sequenceDiagram
17
+ * participant D as Decorator
18
+ * participant M as Model
19
+ *
20
+ * D->>M: Check if key exists
21
+ * alt key exists
22
+ * M-->>D: Return existing props array
23
+ * else key doesn't exist
24
+ * D->>M: Create new props array
25
+ * end
26
+ * D->>M: Check if property exists
27
+ * alt property not in array
28
+ * D->>M: Add property to array
29
+ * end
30
+ */
3
31
  export function prop(key = ModelKeys.ATTRIBUTE) {
4
32
  return (model, propertyKey) => {
5
33
  let props;
@@ -13,7 +41,20 @@ export function prop(key = ModelKeys.ATTRIBUTE) {
13
41
  props.push(propertyKey);
14
42
  };
15
43
  }
44
+ /**
45
+ * @description Combined property decorator factory for metadata and attribute marking
46
+ * @summary Creates a decorator that both marks a property as a model attribute and assigns metadata to it.
47
+ * Combines the functionality of prop() and metadata() decorators.
48
+ *
49
+ * @template V - The type of the metadata value
50
+ * @param {string} key - The metadata key
51
+ * @param {V} value - The metadata value to associate with the property
52
+ * @return {Function} Combined decorator function
53
+ *
54
+ * @function propMetadata
55
+ * @category Decorators
56
+ */
16
57
  export function propMetadata(key, value) {
17
58
  return apply(prop(), metadata(key, value));
18
59
  }
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV4QyxNQUFNLFVBQVUsSUFBSSxDQUFDLE1BQWMsU0FBUyxDQUFDLFNBQVM7SUFDcEQsT0FBTyxDQUFDLEtBQWEsRUFBRSxXQUFpQixFQUFRLEVBQUU7UUFDaEQsSUFBSSxLQUFlLENBQUM7UUFDcEIsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDckQsS0FBSyxHQUFJLEtBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixDQUFDO2FBQU0sQ0FBQztZQUNOLEtBQUssR0FBSSxLQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ25DLENBQUM7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFxQixDQUFDO1lBQ3hDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBcUIsQ0FBQyxDQUFDO0lBQ3RDLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFJLEdBQVcsRUFBRSxLQUFRO0lBQ25ELE9BQU8sS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsQ0FBSSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNoRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXBwbHksIG1ldGFkYXRhIH0gZnJvbSBcIkBkZWNhZi10cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBNb2RlbEtleXMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Aoa2V5OiBzdHJpbmcgPSBNb2RlbEtleXMuQVRUUklCVVRFKSB7XG4gIHJldHVybiAobW9kZWw6IG9iamVjdCwgcHJvcGVydHlLZXk/OiBhbnkpOiB2b2lkID0+IHtcbiAgICBsZXQgcHJvcHM6IHN0cmluZ1tdO1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kZWwsIGtleSkpIHtcbiAgICAgIHByb3BzID0gKG1vZGVsIGFzIGFueSlba2V5XTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvcHMgPSAobW9kZWwgYXMgYW55KVtrZXldID0gW107XG4gICAgfVxuICAgIGlmICghcHJvcHMuaW5jbHVkZXMocHJvcGVydHlLZXkgYXMgc3RyaW5nKSlcbiAgICAgIHByb3BzLnB1c2gocHJvcGVydHlLZXkgYXMgc3RyaW5nKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BNZXRhZGF0YTxWPihrZXk6IHN0cmluZywgdmFsdWU6IFYpIHtcbiAgcmV0dXJuIGFwcGx5KHByb3AoKSwgbWV0YWRhdGE8Vj4oa2V5LCB2YWx1ZSkpO1xufVxuIl19
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV4Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBQ0gsTUFBTSxVQUFVLElBQUksQ0FBQyxNQUFjLFNBQVMsQ0FBQyxTQUFTO0lBQ3BELE9BQU8sQ0FBQyxLQUFhLEVBQUUsV0FBaUIsRUFBUSxFQUFFO1FBQ2hELElBQUksS0FBZSxDQUFDO1FBQ3BCLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3JELEtBQUssR0FBSSxLQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUIsQ0FBQzthQUFNLENBQUM7WUFDTixLQUFLLEdBQUksS0FBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBcUIsQ0FBQztZQUN4QyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQXFCLENBQUMsQ0FBQztJQUN0QyxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBSSxHQUFXLEVBQUUsS0FBUTtJQUNuRCxPQUFPLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLENBQUksR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFwcGx5LCBtZXRhZGF0YSB9IGZyb20gXCJAZGVjYWYtdHMvcmVmbGVjdGlvblwiO1xuaW1wb3J0IHsgTW9kZWxLZXlzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFByb3BlcnR5IGRlY29yYXRvciBmYWN0b3J5IGZvciBtb2RlbCBhdHRyaWJ1dGVzXG4gKiBAc3VtbWFyeSBDcmVhdGVzIGEgZGVjb3JhdG9yIHRoYXQgbWFya3MgY2xhc3MgcHJvcGVydGllcyBhcyBtb2RlbCBhdHRyaWJ1dGVzLiBUaGUgZGVjb3JhdG9yIG1haW50YWlucyBhIGxpc3RcbiAqIG9mIHByb3BlcnR5IGtleXMgdW5kZXIgYSBzcGVjaWZpZWQgbWV0YWRhdGEga2V5IGluIHRoZSBtb2RlbC4gSWYgdGhlIGtleSBkb2Vzbid0IGV4aXN0LCBpdCBjcmVhdGVzIGEgbmV3IGFycmF5O1xuICogaWYgaXQgZXhpc3RzLCBpdCBhcHBlbmRzIHRoZSBwcm9wZXJ0eSBrZXkgdG8gdGhlIGV4aXN0aW5nIGFycmF5LCBhdm9pZGluZyBkdXBsaWNhdGVzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBba2V5PU1vZGVsS2V5cy5BVFRSSUJVVEVdIC0gVGhlIG1ldGFkYXRhIGtleSB1bmRlciB3aGljaCB0byBzdG9yZSB0aGUgcHJvcGVydHkgbmFtZVxuICogQHJldHVybiB7ZnVuY3Rpb24ob2JqZWN0LCBhbnk/KTogdm9pZH0gRGVjb3JhdG9yIGZ1bmN0aW9uIHRoYXQgcmVnaXN0ZXJzIHRoZSBwcm9wZXJ0eVxuICpcbiAqIEBmdW5jdGlvbiBwcm9wXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgIHBhcnRpY2lwYW50IEQgYXMgRGVjb3JhdG9yXG4gKiAgICBwYXJ0aWNpcGFudCBNIGFzIE1vZGVsXG4gKlxuICogICAgRC0+Pk06IENoZWNrIGlmIGtleSBleGlzdHNcbiAqICAgIGFsdCBrZXkgZXhpc3RzXG4gKiAgICAgICAgTS0tPj5EOiBSZXR1cm4gZXhpc3RpbmcgcHJvcHMgYXJyYXlcbiAqICAgIGVsc2Uga2V5IGRvZXNuJ3QgZXhpc3RcbiAqICAgICAgICBELT4+TTogQ3JlYXRlIG5ldyBwcm9wcyBhcnJheVxuICogICAgZW5kXG4gKiAgICBELT4+TTogQ2hlY2sgaWYgcHJvcGVydHkgZXhpc3RzXG4gKiAgICBhbHQgcHJvcGVydHkgbm90IGluIGFycmF5XG4gKiAgICAgICAgRC0+Pk06IEFkZCBwcm9wZXJ0eSB0byBhcnJheVxuICogICAgZW5kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9wKGtleTogc3RyaW5nID0gTW9kZWxLZXlzLkFUVFJJQlVURSkge1xuICByZXR1cm4gKG1vZGVsOiBvYmplY3QsIHByb3BlcnR5S2V5PzogYW55KTogdm9pZCA9PiB7XG4gICAgbGV0IHByb3BzOiBzdHJpbmdbXTtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZGVsLCBrZXkpKSB7XG4gICAgICBwcm9wcyA9IChtb2RlbCBhcyBhbnkpW2tleV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb3BzID0gKG1vZGVsIGFzIGFueSlba2V5XSA9IFtdO1xuICAgIH1cbiAgICBpZiAoIXByb3BzLmluY2x1ZGVzKHByb3BlcnR5S2V5IGFzIHN0cmluZykpXG4gICAgICBwcm9wcy5wdXNoKHByb3BlcnR5S2V5IGFzIHN0cmluZyk7XG4gIH07XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbWJpbmVkIHByb3BlcnR5IGRlY29yYXRvciBmYWN0b3J5IGZvciBtZXRhZGF0YSBhbmQgYXR0cmlidXRlIG1hcmtpbmdcbiAqIEBzdW1tYXJ5IENyZWF0ZXMgYSBkZWNvcmF0b3IgdGhhdCBib3RoIG1hcmtzIGEgcHJvcGVydHkgYXMgYSBtb2RlbCBhdHRyaWJ1dGUgYW5kIGFzc2lnbnMgbWV0YWRhdGEgdG8gaXQuXG4gKiBDb21iaW5lcyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBwcm9wKCkgYW5kIG1ldGFkYXRhKCkgZGVjb3JhdG9ycy5cbiAqXG4gKiBAdGVtcGxhdGUgViAtIFRoZSB0eXBlIG9mIHRoZSBtZXRhZGF0YSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBtZXRhZGF0YSBrZXlcbiAqIEBwYXJhbSB7Vn0gdmFsdWUgLSBUaGUgbWV0YWRhdGEgdmFsdWUgdG8gYXNzb2NpYXRlIHdpdGggdGhlIHByb3BlcnR5XG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gQ29tYmluZWQgZGVjb3JhdG9yIGZ1bmN0aW9uXG4gKlxuICogQGZ1bmN0aW9uIHByb3BNZXRhZGF0YVxuICogQGNhdGVnb3J5IERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3BNZXRhZGF0YTxWPihrZXk6IHN0cmluZywgdmFsdWU6IFYpIHtcbiAgcmV0dXJuIGFwcGx5KHByb3AoKSwgbWV0YWRhdGE8Vj4oa2V5LCB2YWx1ZSkpO1xufVxuIl19
@@ -5,14 +5,14 @@
5
5
  * @return {number} hash value of obj
6
6
  *
7
7
  * @function hashCode
8
- * @memberOf module:decorator-validation.Utils.Hashing
9
- * @category Hashing
8
+ * @memberOf module:decorator-validation
9
+ * @category Model
10
10
  */
11
11
  export declare function hashCode(obj: string | number | symbol | Date): string;
12
12
  /**
13
13
  * @summary Defines teh type for a Hashing function
14
- * @memberOf module:decorator-validation.Utils.Hashing
15
- * @category Hashing
14
+ * @memberOf module:decorator-validation
15
+ * @category Model
16
16
  */
17
17
  export type HashingFunction = (value: any, ...args: any[]) => string;
18
18
  /**
@@ -22,16 +22,60 @@ export type HashingFunction = (value: any, ...args: any[]) => string;
22
22
  * @return {string} the resulting hash
23
23
  *
24
24
  * @function hashObj
25
- * @memberOf module:decorator-validation.Utils.Hashing
26
- * @category Hashing
25
+ * @memberOf module:decorator-validation
26
+ * @category Model
27
27
  */
28
28
  export declare function hashObj(obj: Record<string, any> | any[]): string;
29
29
  export declare const DefaultHashingMethod = "default";
30
+ /**
31
+ * @description Manages hashing methods and provides a unified hashing interface
32
+ * @summary A utility class that provides a registry for different hashing functions and methods to hash objects.
33
+ * The class maintains a cache of registered hashing functions and allows setting a default hashing method.
34
+ * It prevents direct instantiation and provides static methods for registration and hashing.
35
+ *
36
+ * @class Hashing
37
+ * @category Model
38
+ *
39
+ * @example
40
+ * ```typescript
41
+ * // Register a custom hashing function
42
+ * Hashing.register('md5', (obj) => createMD5Hash(obj), true);
43
+ *
44
+ * // Hash an object using default method
45
+ * const hash1 = Hashing.hash(myObject);
46
+ *
47
+ * // Hash using specific method
48
+ * const hash2 = Hashing.hash(myObject, 'md5');
49
+ * ```
50
+ */
30
51
  export declare class Hashing {
52
+ /**
53
+ * @description Current default hashing method identifier
54
+ * @private
55
+ */
31
56
  private static current;
57
+ /**
58
+ * @description Cache of registered hashing functions
59
+ * @private
60
+ */
32
61
  private static cache;
33
62
  private constructor();
63
+ /**
64
+ * @description Retrieves a registered hashing function
65
+ * @summary Fetches a hashing function from the cache by its key. Throws an error if the method is not registered.
66
+ *
67
+ * @param {string} key - The identifier of the hashing function to retrieve
68
+ * @return {HashingFunction} The requested hashing function
69
+ * @private
70
+ */
34
71
  private static get;
72
+ /**
73
+ * @description Registers a new hashing function
74
+ * @summary Adds a new hashing function to the registry. Optionally sets it as the default method.
75
+ * Throws an error if a method with the same key is already registered.
76
+ *
77
+ * @param {string} key - The identifier for the hashing function
78
+ */
35
79
  static register(key: string, func: HashingFunction, setDefault?: boolean): void;
36
80
  static hash(obj: any, method?: string, ...args: any[]): any;
37
81
  static setDefault(method: string): void;
@@ -5,8 +5,8 @@
5
5
  * @return {number} hash value of obj
6
6
  *
7
7
  * @function hashCode
8
- * @memberOf module:decorator-validation.Utils.Hashing
9
- * @category Hashing
8
+ * @memberOf module:decorator-validation
9
+ * @category Model
10
10
  */
11
11
  export function hashCode(obj) {
12
12
  obj = String(obj);
@@ -25,8 +25,8 @@ export function hashCode(obj) {
25
25
  * @return {string} the resulting hash
26
26
  *
27
27
  * @function hashObj
28
- * @memberOf module:decorator-validation.Utils.Hashing
29
- * @category Hashing
28
+ * @memberOf module:decorator-validation
29
+ * @category Model
30
30
  */
31
31
  export function hashObj(obj) {
32
32
  const hashReducer = function (h, el) {
@@ -53,17 +53,61 @@ export function hashObj(obj) {
53
53
  return (typeof result === "number" ? Math.abs(result) : result).toString();
54
54
  }
55
55
  export const DefaultHashingMethod = "default";
56
+ /**
57
+ * @description Manages hashing methods and provides a unified hashing interface
58
+ * @summary A utility class that provides a registry for different hashing functions and methods to hash objects.
59
+ * The class maintains a cache of registered hashing functions and allows setting a default hashing method.
60
+ * It prevents direct instantiation and provides static methods for registration and hashing.
61
+ *
62
+ * @class Hashing
63
+ * @category Model
64
+ *
65
+ * @example
66
+ * ```typescript
67
+ * // Register a custom hashing function
68
+ * Hashing.register('md5', (obj) => createMD5Hash(obj), true);
69
+ *
70
+ * // Hash an object using default method
71
+ * const hash1 = Hashing.hash(myObject);
72
+ *
73
+ * // Hash using specific method
74
+ * const hash2 = Hashing.hash(myObject, 'md5');
75
+ * ```
76
+ */
56
77
  export class Hashing {
78
+ /**
79
+ * @description Current default hashing method identifier
80
+ * @private
81
+ */
57
82
  static { this.current = DefaultHashingMethod; }
83
+ /**
84
+ * @description Cache of registered hashing functions
85
+ * @private
86
+ */
58
87
  static { this.cache = {
59
88
  default: hashObj,
60
89
  }; }
61
90
  constructor() { }
91
+ /**
92
+ * @description Retrieves a registered hashing function
93
+ * @summary Fetches a hashing function from the cache by its key. Throws an error if the method is not registered.
94
+ *
95
+ * @param {string} key - The identifier of the hashing function to retrieve
96
+ * @return {HashingFunction} The requested hashing function
97
+ * @private
98
+ */
62
99
  static get(key) {
63
100
  if (key in this.cache)
64
101
  return this.cache[key];
65
102
  throw new Error(`No hashing method registered under ${key}`);
66
103
  }
104
+ /**
105
+ * @description Registers a new hashing function
106
+ * @summary Adds a new hashing function to the registry. Optionally sets it as the default method.
107
+ * Throws an error if a method with the same key is already registered.
108
+ *
109
+ * @param {string} key - The identifier for the hashing function
110
+ */
67
111
  static register(key, func, setDefault = false) {
68
112
  if (key in this.cache)
69
113
  throw new Error(`Hashing method ${key} already registered`);
@@ -80,4 +124,4 @@ export class Hashing {
80
124
  this.current = this.get(method);
81
125
  }
82
126
  }
83
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzaGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9oYXNoaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQUMsR0FBb0M7SUFDM0QsR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7SUFDYixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEMsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxTQUFTLENBQUM7UUFDdEMsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQywyQkFBMkI7SUFDakQsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3pCLENBQUM7QUFTRDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUsT0FBTyxDQUFDLEdBQWdDO0lBQ3RELE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBa0IsRUFBRSxFQUFPO1FBQ3ZELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVoQyxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVE7WUFDNUIsT0FBTyxZQUFZLENBQUMsQ0FBRSxDQUFZLElBQUksRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFaEUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDWCxDQUFDLEdBQUcsQ0FBRSxDQUFZLElBQUksQ0FBQyxDQUFDLEdBQUksQ0FBWSxHQUFHLE1BQU0sQ0FBQztR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cmluZydzIEhhc2ggaW1wbGVtZW50YXRpb25cbiAqXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlciB8IHN5bWJvbCB8IERhdGV9IG9ialxuICogQHJldHVybiB7bnVtYmVyfSBoYXNoIHZhbHVlIG9mIG9ialxuICpcbiAqIEBmdW5jdGlvbiBoYXNoQ29kZVxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5VdGlscy5IYXNoaW5nXG4gKiBAY2F0ZWdvcnkgSGFzaGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzaENvZGUob2JqOiBzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2wgfCBEYXRlKTogc3RyaW5nIHtcbiAgb2JqID0gU3RyaW5nKG9iaik7XG4gIGxldCBoYXNoID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGFyYWN0ZXIgPSBvYmouY2hhckNvZGVBdChpKTtcbiAgICBoYXNoID0gKGhhc2ggPDwgNSkgLSBoYXNoICsgY2hhcmFjdGVyO1xuICAgIGhhc2ggPSBoYXNoICYgaGFzaDsgLy8gQ29udmVydCB0byAzMmJpdCBpbnRlZ2VyXG4gIH1cbiAgcmV0dXJuIGhhc2gudG9TdHJpbmcoKTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRlaCB0eXBlIGZvciBhIEhhc2hpbmcgZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uVXRpbHMuSGFzaGluZ1xuICogQGNhdGVnb3J5IEhhc2hpbmdcbiAqL1xuZXhwb3J0IHR5cGUgSGFzaGluZ0Z1bmN0aW9uID0gKHZhbHVlOiBhbnksIC4uLmFyZ3M6IGFueVtdKSA9PiBzdHJpbmc7XG5cbi8qKlxuICogQHN1bW1hcnkgSGFzaGVzIGFuIG9iamVjdCBieSBjb21iaW5pbmcgdGhlIGhhc2ggb2YgYWxsIGl0cyBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBvYmpcbiAqIEByZXR1cm4ge3N0cmluZ30gdGhlIHJlc3VsdGluZyBoYXNoXG4gKlxuICogQGZ1bmN0aW9uIGhhc2hPYmpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uVXRpbHMuSGFzaGluZ1xuICogQGNhdGVnb3J5IEhhc2hpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2hPYmoob2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgYW55W10pOiBzdHJpbmcge1xuICBjb25zdCBoYXNoUmVkdWNlciA9IGZ1bmN0aW9uIChoOiBudW1iZXIgfCBzdHJpbmcsIGVsOiBhbnkpOiBzdHJpbmcgfCBudW1iZXIge1xuICAgIGNvbnN0IGVsSGFzaCA9IGhhc2hGdW5jdGlvbihlbCk7XG5cbiAgICBpZiAodHlwZW9mIGVsSGFzaCA9PT0gXCJzdHJpbmdcIilcbiAgICAgIHJldHVybiBoYXNoRnVuY3Rpb24oKChoIGFzIHN0cmluZykgfHwgXCJcIikgKyBoYXNoRnVuY3Rpb24oZWwpKTtcblxuICAgIGggPSBoIHx8IDA7XG4gICAgaCA9ICgoaCBhcyBudW1iZXIpIDw8IDUpIC0gKGggYXMgbnVtYmVyKSArIGVsSGFzaDtcbiAgICByZXR1cm4gaCAmIGg7XG4gIH07XG5cbiAgY29uc3QgZnVuYzogSGFzaGluZ0Z1bmN0aW9uID0gaGFzaENvZGU7XG5cbiAgY29uc3QgaGFzaEZ1bmN0aW9uID0gZnVuY3Rpb24gKHZhbHVlOiBhbnkpOiBzdHJpbmcgfCBudW1iZXIge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBcIlwiO1xuICAgIGlmIChbXCJzdHJpbmdcIiwgXCJudW1iZXJcIiwgXCJzeW1ib2xcIl0uaW5kZXhPZih0eXBlb2YgdmFsdWUpICE9PSAtMSlcbiAgICAgIHJldHVybiBmdW5jKHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHJldHVybiBmdW5jKHZhbHVlLmdldFRpbWUoKSk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdmFsdWUucmVkdWNlKGhhc2hSZWR1Y2VyLCB1bmRlZmluZWQpO1xuICAgIHJldHVybiAoT2JqZWN0LnZhbHVlcyh2YWx1ZSkgYXMgKHN0cmluZyB8IG51bWJlcilbXSkucmVkdWNlKFxuICAgICAgaGFzaFJlZHVjZXIsXG4gICAgICB1bmRlZmluZWQgYXMgdW5rbm93biBhcyBzdHJpbmcgfCBudW1iZXJcbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IHJlc3VsdCA9IE9iamVjdC52YWx1ZXMob2JqKS5yZWR1Y2UoaGFzaFJlZHVjZXIsIDApO1xuXG4gIHJldHVybiAodHlwZW9mIHJlc3VsdCA9PT0gXCJudW1iZXJcIiA/IE1hdGguYWJzKHJlc3VsdCkgOiByZXN1bHQpLnRvU3RyaW5nKCk7XG59XG5cbmV4cG9ydCBjb25zdCBEZWZhdWx0SGFzaGluZ01ldGhvZCA9IFwiZGVmYXVsdFwiO1xuXG5leHBvcnQgY2xhc3MgSGFzaGluZyB7XG4gIHByaXZhdGUgc3RhdGljIGN1cnJlbnQ6IHN0cmluZyA9IERlZmF1bHRIYXNoaW5nTWV0aG9kO1xuXG4gIHByaXZhdGUgc3RhdGljIGNhY2hlOiBSZWNvcmQ8c3RyaW5nLCBIYXNoaW5nRnVuY3Rpb24+ID0ge1xuICAgIGRlZmF1bHQ6IGhhc2hPYmosXG4gIH07XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0KGtleTogc3RyaW5nKTogYW55IHtcbiAgICBpZiAoa2V5IGluIHRoaXMuY2FjaGUpIHJldHVybiB0aGlzLmNhY2hlW2tleV07XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBoYXNoaW5nIG1ldGhvZCByZWdpc3RlcmVkIHVuZGVyICR7a2V5fWApO1xuICB9XG5cbiAgc3RhdGljIHJlZ2lzdGVyKFxuICAgIGtleTogc3RyaW5nLFxuICAgIGZ1bmM6IEhhc2hpbmdGdW5jdGlvbixcbiAgICBzZXREZWZhdWx0ID0gZmFsc2VcbiAgKTogdm9pZCB7XG4gICAgaWYgKGtleSBpbiB0aGlzLmNhY2hlKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBIYXNoaW5nIG1ldGhvZCAke2tleX0gYWxyZWFkeSByZWdpc3RlcmVkYCk7XG4gICAgdGhpcy5jYWNoZVtrZXldID0gZnVuYztcbiAgICBpZiAoc2V0RGVmYXVsdCkgdGhpcy5jdXJyZW50ID0ga2V5O1xuICB9XG5cbiAgc3RhdGljIGhhc2gob2JqOiBhbnksIG1ldGhvZD86IHN0cmluZywgLi4uYXJnczogYW55W10pIHtcbiAgICBpZiAoIW1ldGhvZCkgcmV0dXJuIHRoaXMuZ2V0KHRoaXMuY3VycmVudCkob2JqLCAuLi5hcmdzKTtcbiAgICByZXR1cm4gdGhpcy5nZXQobWV0aG9kKShvYmosIC4uLmFyZ3MpO1xuICB9XG5cbiAgc3RhdGljIHNldERlZmF1bHQobWV0aG9kOiBzdHJpbmcpIHtcbiAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLmdldChtZXRob2QpO1xuICB9XG59XG4iXX0=
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzaGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9oYXNoaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQUMsR0FBb0M7SUFDM0QsR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7SUFDYixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEMsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxTQUFTLENBQUM7UUFDdEMsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQywyQkFBMkI7SUFDakQsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3pCLENBQUM7QUFTRDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUsT0FBTyxDQUFDLEdBQWdDO0lBQ3RELE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBa0IsRUFBRSxFQUFPO1FBQ3ZELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVoQyxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVE7WUFDNUIsT0FBTyxZQUFZLENBQUMsQ0FBRSxDQUFZLElBQUksRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFaEUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDWCxDQUFDLEdBQUcsQ0FBRSxDQUFZLElBQUksQ0FBQyxDQUFDLEdBQUksQ0FBWSxHQUFHLE1BQU0sQ0FBQztR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RyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBzdW1tYXJ5IE1pbWljcyBKYXZhJ3MgU3RyaW5nJ3MgSGFzaCBpbXBsZW1lbnRhdGlvblxuICpcbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sIHwgRGF0ZX0gb2JqXG4gKiBAcmV0dXJuIHtudW1iZXJ9IGhhc2ggdmFsdWUgb2Ygb2JqXG4gKlxuICogQGZ1bmN0aW9uIGhhc2hDb2RlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgTW9kZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2hDb2RlKG9iajogc3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sIHwgRGF0ZSk6IHN0cmluZyB7XG4gIG9iaiA9IFN0cmluZyhvYmopO1xuICBsZXQgaGFzaCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY2hhcmFjdGVyID0gb2JqLmNoYXJDb2RlQXQoaSk7XG4gICAgaGFzaCA9IChoYXNoIDw8IDUpIC0gaGFzaCArIGNoYXJhY3RlcjtcbiAgICBoYXNoID0gaGFzaCAmIGhhc2g7IC8vIENvbnZlcnQgdG8gMzJiaXQgaW50ZWdlclxuICB9XG4gIHJldHVybiBoYXNoLnRvU3RyaW5nKCk7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgRGVmaW5lcyB0ZWggdHlwZSBmb3IgYSBIYXNoaW5nIGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgTW9kZWxcbiAqL1xuZXhwb3J0IHR5cGUgSGFzaGluZ0Z1bmN0aW9uID0gKHZhbHVlOiBhbnksIC4uLmFyZ3M6IGFueVtdKSA9PiBzdHJpbmc7XG5cbi8qKlxuICogQHN1bW1hcnkgSGFzaGVzIGFuIG9iamVjdCBieSBjb21iaW5pbmcgdGhlIGhhc2ggb2YgYWxsIGl0cyBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBvYmpcbiAqIEByZXR1cm4ge3N0cmluZ30gdGhlIHJlc3VsdGluZyBoYXNoXG4gKlxuICogQGZ1bmN0aW9uIGhhc2hPYmpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBNb2RlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzaE9iaihvYmo6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBhbnlbXSk6IHN0cmluZyB7XG4gIGNvbnN0IGhhc2hSZWR1Y2VyID0gZnVuY3Rpb24gKGg6IG51bWJlciB8IHN0cmluZywgZWw6IGFueSk6IHN0cmluZyB8IG51bWJlciB7XG4gICAgY29uc3QgZWxIYXNoID0gaGFzaEZ1bmN0aW9uKGVsKTtcblxuICAgIGlmICh0eXBlb2YgZWxIYXNoID09PSBcInN0cmluZ1wiKVxuICAgICAgcmV0dXJuIGhhc2hGdW5jdGlvbigoKGggYXMgc3RyaW5nKSB8fCBcIlwiKSArIGhhc2hGdW5jdGlvbihlbCkpO1xuXG4gICAgaCA9IGggfHwgMDtcbiAgICBoID0gKChoIGFzIG51bWJlcikgPDwgNSkgLSAoaCBhcyBudW1iZXIpICsgZWxIYXNoO1xuICAgIHJldHVybiBoICYgaDtcbiAgfTtcblxuICBjb25zdCBmdW5jOiBIYXNoaW5nRnVuY3Rpb24gPSBoYXNoQ29kZTtcblxuICBjb25zdCBoYXNoRnVuY3Rpb24gPSBmdW5jdGlvbiAodmFsdWU6IGFueSk6IHN0cmluZyB8IG51bWJlciB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIFwiXCI7XG4gICAgaWYgKFtcInN0cmluZ1wiLCBcIm51bWJlclwiLCBcInN5bWJvbFwiXS5pbmRleE9mKHR5cGVvZiB2YWx1ZSkgIT09IC0xKVxuICAgICAgcmV0dXJuIGZ1bmModmFsdWUudG9TdHJpbmcoKSk7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIGZ1bmModmFsdWUuZ2V0VGltZSgpKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiB2YWx1ZS5yZWR1Y2UoaGFzaFJlZHVjZXIsIHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIChPYmplY3QudmFsdWVzKHZhbHVlKSBhcyAoc3RyaW5nIHwgbnVtYmVyKVtdKS5yZWR1Y2UoXG4gICAgICBoYXNoUmVkdWNlcixcbiAgICAgIHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIHN0cmluZyB8IG51bWJlclxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LnZhbHVlcyhvYmopLnJlZHVjZShoYXNoUmVkdWNlciwgMCk7XG5cbiAgcmV0dXJuICh0eXBlb2YgcmVzdWx0ID09PSBcIm51bWJlclwiID8gTWF0aC5hYnMocmVzdWx0KSA6IHJlc3VsdCkudG9TdHJpbmcoKTtcbn1cblxuZXhwb3J0IGNvbnN0IERlZmF1bHRIYXNoaW5nTWV0aG9kID0gXCJkZWZhdWx0XCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIE1hbmFnZXMgaGFzaGluZyBtZXRob2RzIGFuZCBwcm92aWRlcyBhIHVuaWZpZWQgaGFzaGluZyBpbnRlcmZhY2VcbiAqIEBzdW1tYXJ5IEEgdXRpbGl0eSBjbGFzcyB0aGF0IHByb3ZpZGVzIGEgcmVnaXN0cnkgZm9yIGRpZmZlcmVudCBoYXNoaW5nIGZ1bmN0aW9ucyBhbmQgbWV0aG9kcyB0byBoYXNoIG9iamVjdHMuXG4gKiBUaGUgY2xhc3MgbWFpbnRhaW5zIGEgY2FjaGUgb2YgcmVnaXN0ZXJlZCBoYXNoaW5nIGZ1bmN0aW9ucyBhbmQgYWxsb3dzIHNldHRpbmcgYSBkZWZhdWx0IGhhc2hpbmcgbWV0aG9kLlxuICogSXQgcHJldmVudHMgZGlyZWN0IGluc3RhbnRpYXRpb24gYW5kIHByb3ZpZGVzIHN0YXRpYyBtZXRob2RzIGZvciByZWdpc3RyYXRpb24gYW5kIGhhc2hpbmcuXG4gKlxuICogQGNsYXNzIEhhc2hpbmdcbiAqIEBjYXRlZ29yeSBNb2RlbFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBSZWdpc3RlciBhIGN1c3RvbSBoYXNoaW5nIGZ1bmN0aW9uXG4gKiBIYXNoaW5nLnJlZ2lzdGVyKCdtZDUnLCAob2JqKSA9PiBjcmVhdGVNRDVIYXNoKG9iaiksIHRydWUpO1xuICpcbiAqIC8vIEhhc2ggYW4gb2JqZWN0IHVzaW5nIGRlZmF1bHQgbWV0aG9kXG4gKiBjb25zdCBoYXNoMSA9IEhhc2hpbmcuaGFzaChteU9iamVjdCk7XG4gKlxuICogLy8gSGFzaCB1c2luZyBzcGVjaWZpYyBtZXRob2RcbiAqIGNvbnN0IGhhc2gyID0gSGFzaGluZy5oYXNoKG15T2JqZWN0LCAnbWQ1Jyk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIEhhc2hpbmcge1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEN1cnJlbnQgZGVmYXVsdCBoYXNoaW5nIG1ldGhvZCBpZGVudGlmaWVyXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBjdXJyZW50OiBzdHJpbmcgPSBEZWZhdWx0SGFzaGluZ01ldGhvZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENhY2hlIG9mIHJlZ2lzdGVyZWQgaGFzaGluZyBmdW5jdGlvbnNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGNhY2hlOiBSZWNvcmQ8c3RyaW5nLCBIYXNoaW5nRnVuY3Rpb24+ID0ge1xuICAgIGRlZmF1bHQ6IGhhc2hPYmosXG4gIH07XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYSByZWdpc3RlcmVkIGhhc2hpbmcgZnVuY3Rpb25cbiAgICogQHN1bW1hcnkgRmV0Y2hlcyBhIGhhc2hpbmcgZnVuY3Rpb24gZnJvbSB0aGUgY2FjaGUgYnkgaXRzIGtleS4gVGhyb3dzIGFuIGVycm9yIGlmIHRoZSBtZXRob2QgaXMgbm90IHJlZ2lzdGVyZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgaWRlbnRpZmllciBvZiB0aGUgaGFzaGluZyBmdW5jdGlvbiB0byByZXRyaWV2ZVxuICAgKiBAcmV0dXJuIHtIYXNoaW5nRnVuY3Rpb259IFRoZSByZXF1ZXN0ZWQgaGFzaGluZyBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0KGtleTogc3RyaW5nKTogYW55IHtcbiAgICBpZiAoa2V5IGluIHRoaXMuY2FjaGUpIHJldHVybiB0aGlzLmNhY2hlW2tleV07XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBoYXNoaW5nIG1ldGhvZCByZWdpc3RlcmVkIHVuZGVyICR7a2V5fWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZWdpc3RlcnMgYSBuZXcgaGFzaGluZyBmdW5jdGlvblxuICAgKiBAc3VtbWFyeSBBZGRzIGEgbmV3IGhhc2hpbmcgZnVuY3Rpb24gdG8gdGhlIHJlZ2lzdHJ5LiBPcHRpb25hbGx5IHNldHMgaXQgYXMgdGhlIGRlZmF1bHQgbWV0aG9kLlxuICAgKiBUaHJvd3MgYW4gZXJyb3IgaWYgYSBtZXRob2Qgd2l0aCB0aGUgc2FtZSBrZXkgaXMgYWxyZWFkeSByZWdpc3RlcmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGlkZW50aWZpZXIgZm9yIHRoZSBoYXNoaW5nIGZ1bmN0aW9uXG4gICAqL1xuICBzdGF0aWMgcmVnaXN0ZXIoXG4gICAga2V5OiBzdHJpbmcsXG4gICAgZnVuYzogSGFzaGluZ0Z1bmN0aW9uLFxuICAgIHNldERlZmF1bHQgPSBmYWxzZVxuICApOiB2b2lkIHtcbiAgICBpZiAoa2V5IGluIHRoaXMuY2FjaGUpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEhhc2hpbmcgbWV0aG9kICR7a2V5fSBhbHJlYWR5IHJlZ2lzdGVyZWRgKTtcbiAgICB0aGlzLmNhY2hlW2tleV0gPSBmdW5jO1xuICAgIGlmIChzZXREZWZhdWx0KSB0aGlzLmN1cnJlbnQgPSBrZXk7XG4gIH1cblxuICBzdGF0aWMgaGFzaChvYmo6IGFueSwgbWV0aG9kPzogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIGlmICghbWV0aG9kKSByZXR1cm4gdGhpcy5nZXQodGhpcy5jdXJyZW50KShvYmosIC4uLmFyZ3MpO1xuICAgIHJldHVybiB0aGlzLmdldChtZXRob2QpKG9iaiwgLi4uYXJncyk7XG4gIH1cblxuICBzdGF0aWMgc2V0RGVmYXVsdChtZXRob2Q6IHN0cmluZykge1xuICAgIHRoaXMuY3VycmVudCA9IHRoaXMuZ2V0KG1ldGhvZCk7XG4gIH1cbn1cbiJdfQ==
@@ -1,5 +1,6 @@
1
1
  export * from "./constants";
2
2
  export * from "./dates";
3
+ export * from "./Decoration";
3
4
  export * from "./decorators";
4
5
  export * from "./hashing";
5
6
  export * from "./registry";
@@ -1,9 +1,10 @@
1
1
  export * from "./constants";
2
2
  export * from "./dates";
3
+ export * from "./Decoration";
3
4
  export * from "./decorators";
4
5
  export * from "./hashing";
5
6
  export * from "./registry";
6
7
  export * from "./serialization";
7
8
  export * from "./strings";
8
9
  export * from "./types";
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2NvbnN0YW50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGF0ZXNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RlY29yYXRvcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2hhc2hpbmdcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3JlZ2lzdHJ5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zZXJpYWxpemF0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zdHJpbmdzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlc1wiO1xuIl19
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2NvbnN0YW50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGF0ZXNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0RlY29yYXRpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RlY29yYXRvcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2hhc2hpbmdcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3JlZ2lzdHJ5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zZXJpYWxpemF0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zdHJpbmdzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlc1wiO1xuIl19
@@ -4,7 +4,7 @@ import { Constructor } from "../model/types";
4
4
  *
5
5
  * @interface IRegistry
6
6
  *
7
- * @category Utilities
7
+ * @category Model
8
8
  */
9
9
  export interface IRegistry<T> {
10
10
  /**
@@ -33,7 +33,7 @@ export interface IRegistry<T> {
33
33
  * @typedef T
34
34
  * @interface BuilderRegistry<T>
35
35
  *
36
- * @category Construction
36
+ * @category Model
37
37
  */
38
38
  export interface BuilderRegistry<T> extends IRegistry<Constructor<T>> {
39
39
  /**
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvcmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdG9yIH0gZnJvbSBcIi4uL21vZGVsL3R5cGVzXCI7XG5cbi8qKlxuICogQHN1bW1hcnkgQmFzaWMgaW50ZXJmYWNlIGZvciBSZWdpc3RyaWVzXG4gKlxuICogQGludGVyZmFjZSBJUmVnaXN0cnlcbiAqXG4gKiBAY2F0ZWdvcnkgVXRpbGl0aWVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVJlZ2lzdHJ5PFQ+IHtcbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFJlZ2lzdGVycyBhbiBPYmplY3RcbiAgICpcbiAgICogQHBhcmFtIHtUfSBvYmpcbiAgICogQHBhcmFtIHthbnlbXX0gYXJnc1xuICAgKlxuICAgKiBAbWV0aG9kXG4gICAqL1xuICByZWdpc3RlcihvYmo6IFQgfCBhbnksIC4uLmFyZ3M6IGFueVtdKTogdm9pZDtcblxuICAvKipcbiAgICogQHN1bW1hcnkgUmV0cmlldmVzIGFuIE9iamVjdCBpZiBpdCBjYW4gZmluZCBpdFxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0ga2V5XG4gICAqIEBwYXJhbSB7YW55W119IGFyZ3NcbiAgICogQHJldHVybiB7VCB8IHVuZGVmaW5lZH1cbiAgICpcbiAgICogQG1ldGhvZFxuICAgKi9cbiAgZ2V0KGtleTogYW55LCAuLi5hcmdzOiBhbnlbXSk6IFQgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgQmFzaWMgQnVpbGRlciBSZWdpc3RyeSBJbnRlcmZhY2VcbiAqXG4gKiBAdHlwZWRlZiBUXG4gKiBAaW50ZXJmYWNlIEJ1aWxkZXJSZWdpc3RyeTxUPlxuICpcbiAqIEBjYXRlZ29yeSBDb25zdHJ1Y3Rpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZGVyUmVnaXN0cnk8VD4gZXh0ZW5kcyBJUmVnaXN0cnk8Q29uc3RydWN0b3I8VD4+IHtcbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFJldHJpZXZlcyBhbiBCdWlsZGVyIE9iamVjdCBieSBuYW1lIGlmIGl0IGNhblxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge2FueVtdfSBhcmdzXG4gICAqXG4gICAqIEBtZXRob2RcbiAgICovXG4gIGdldChuYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogQ29uc3RydWN0b3I8VD4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFJlZ2lzdGVycyBhIGNvbnN0cnVjdG9yIGJ5IG5hbWVcbiAgICpcbiAgICogQHBhcmFtIHtDb25zdHJ1Y3RvcjxUPn0gW2NvbnN0cnVjdG9yXVxuICAgKiBAcGFyYW0ge25hbWV9IG5hbWVcbiAgICogQHBhcmFtIHthbnlbXX0gYXJnc1xuICAgKlxuICAgKiBAbWV0aG9kXG4gICAqL1xuICByZWdpc3Rlcihjb25zdHJ1Y3RvcjogQ29uc3RydWN0b3I8VD4sIG5hbWU/OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogdm9pZDtcblxuICAvKipcbiAgICogQHN1bW1hcnkgQnVpbGRzIGFuIE9iamVjdCBieSBuYW1lXG4gICAqXG4gICAqIEBwYXJhbSB7e319IG9ialxuICAgKiBAcGFyYW0ge2FueVtdfSBhcmdzXG4gICAqIEByZXR1cm4gVFxuICAgKlxuICAgKiBAbWV0aG9kXG4gICAqL1xuICBidWlsZChvYmo6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBULCAuLi5hcmdzOiBhbnlbXSk6IFQ7XG59XG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvcmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdG9yIH0gZnJvbSBcIi4uL21vZGVsL3R5cGVzXCI7XG5cbi8qKlxuICogQHN1bW1hcnkgQmFzaWMgaW50ZXJmYWNlIGZvciBSZWdpc3RyaWVzXG4gKlxuICogQGludGVyZmFjZSBJUmVnaXN0cnlcbiAqXG4gKiBAY2F0ZWdvcnkgTW9kZWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUmVnaXN0cnk8VD4ge1xuICAvKipcbiAgICogQHN1bW1hcnkgUmVnaXN0ZXJzIGFuIE9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0ge1R9IG9ialxuICAgKiBAcGFyYW0ge2FueVtdfSBhcmdzXG4gICAqXG4gICAqIEBtZXRob2RcbiAgICovXG4gIHJlZ2lzdGVyKG9iajogVCB8IGFueSwgLi4uYXJnczogYW55W10pOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBSZXRyaWV2ZXMgYW4gT2JqZWN0IGlmIGl0IGNhbiBmaW5kIGl0XG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSBrZXlcbiAgICogQHBhcmFtIHthbnlbXX0gYXJnc1xuICAgKiBAcmV0dXJuIHtUIHwgdW5kZWZpbmVkfVxuICAgKlxuICAgKiBAbWV0aG9kXG4gICAqL1xuICBnZXQoa2V5OiBhbnksIC4uLmFyZ3M6IGFueVtdKTogVCB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBCYXNpYyBCdWlsZGVyIFJlZ2lzdHJ5IEludGVyZmFjZVxuICpcbiAqIEB0eXBlZGVmIFRcbiAqIEBpbnRlcmZhY2UgQnVpbGRlclJlZ2lzdHJ5PFQ+XG4gKlxuICogQGNhdGVnb3J5IE1vZGVsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRlclJlZ2lzdHJ5PFQ+IGV4dGVuZHMgSVJlZ2lzdHJ5PENvbnN0cnVjdG9yPFQ+PiB7XG4gIC8qKlxuICAgKiBAc3VtbWFyeSBSZXRyaWV2ZXMgYW4gQnVpbGRlciBPYmplY3QgYnkgbmFtZSBpZiBpdCBjYW5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHthbnlbXX0gYXJnc1xuICAgKlxuICAgKiBAbWV0aG9kXG4gICAqL1xuICBnZXQobmFtZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IENvbnN0cnVjdG9yPFQ+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBSZWdpc3RlcnMgYSBjb25zdHJ1Y3RvciBieSBuYW1lXG4gICAqXG4gICAqIEBwYXJhbSB7Q29uc3RydWN0b3I8VD59IFtjb25zdHJ1Y3Rvcl1cbiAgICogQHBhcmFtIHtuYW1lfSBuYW1lXG4gICAqIEBwYXJhbSB7YW55W119IGFyZ3NcbiAgICpcbiAgICogQG1ldGhvZFxuICAgKi9cbiAgcmVnaXN0ZXIoY29uc3RydWN0b3I6IENvbnN0cnVjdG9yPFQ+LCBuYW1lPzogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IEJ1aWxkcyBhbiBPYmplY3QgYnkgbmFtZVxuICAgKlxuICAgKiBAcGFyYW0ge3t9fSBvYmpcbiAgICogQHBhcmFtIHthbnlbXX0gYXJnc1xuICAgKiBAcmV0dXJuIFRcbiAgICpcbiAgICogQG1ldGhvZFxuICAgKi9cbiAgYnVpbGQob2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgVCwgLi4uYXJnczogYW55W10pOiBUO1xufVxuIl19
@@ -13,7 +13,7 @@ export declare const DefaultSerializationMethod = "json";
13
13
  * @class JSONSerializer
14
14
  * @implements Serializer
15
15
  *
16
- * @category Serialization
16
+ * @category Model
17
17
  */
18
18
  export declare class JSONSerializer<T extends Model> implements Serializer<T> {
19
19
  constructor();
@@ -12,7 +12,7 @@ export const DefaultSerializationMethod = "json";
12
12
  * @class JSONSerializer
13
13
  * @implements Serializer
14
14
  *
15
- * @category Serialization
15
+ * @category Model
16
16
  */
17
17
  export class JSONSerializer {
18
18
  constructor() { }
@@ -87,4 +87,4 @@ export class Serialization {
87
87
  this.current = this.get(method);
88
88
  }
89
89
  }
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXphdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9zZXJpYWxpemF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXhDLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLE1BQU0sQ0FBQztBQUVqRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLE9BQU8sY0FBYztJQUN6QixnQkFBZSxDQUFDO0lBQ2hCOzs7Ozs7O09BT0c7SUFDTyxZQUFZLENBQUMsS0FBUTtRQUM3Qiw2RUFBNkU7UUFDN0UsTUFBTSxXQUFXLEdBQXdCLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDbkUsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsV0FBVyxDQUFDLEdBQVc7UUFDckIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QyxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxTQUFTO1lBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sS0FBSyxHQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLFNBQVMsQ0FBaUIsQ0FBQztRQUN6RSxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFNBQVMsQ0FBQyxLQUFRO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEQsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLGFBQWE7YUFDVCxZQUFPLEdBQVcsMEJBQTBCLENBQUM7YUFFN0MsVUFBSyxHQUFvQztRQUN0RCxJQUFJLEVBQUUsSUFBSSxjQUFjLEVBQUU7S0FDM0IsQ0FBQztJQUVGLGdCQUF1QixDQUFDO0lBRWhCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBVztRQUM1QixJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QyxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRCxNQUFNLENBQUMsUUFBUSxDQUNiLEdBQVcsRUFDWCxJQUFrQyxFQUNsQyxVQUFVLEdBQUcsS0FBSztRQUVsQixJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSztZQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixHQUFHLHFCQUFxQixDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQzdCLElBQUksVUFBVTtZQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQVEsRUFBRSxNQUFlLEVBQUUsR0FBRyxJQUFXO1FBQ3hELElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDbkUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFXLEVBQUUsTUFBZSxFQUFFLEdBQUcsSUFBVztRQUM3RCxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ3JFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBYztRQUM5QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdG9yIH0gZnJvbSBcIi4uL21vZGVsL3R5cGVzXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IE1vZGVsIH0gZnJvbSBcIi4uL21vZGVsL01vZGVsXCI7XG5pbXBvcnQgeyBNb2RlbEtleXMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGNvbnN0IERlZmF1bHRTZXJpYWxpemF0aW9uTWV0aG9kID0gXCJqc29uXCI7XG5cbi8qKlxuICogQHN1bW1hcnkgQ29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgYSB7QGxpbmsgU2VyaWFsaXplcn0gaW4gSlNPTiBmb3JtYXRcbiAqIEBkZXNjcmlwdGlvbiBKUydzIG5hdGl2ZSBKU09OLnN0cmluZ2lmeSAodXNlZCBoZXJlKSBpcyBub3QgZGV0ZXJtaW5pc3RpY1xuICogYW5kIHRoZXJlZm9yZSBzaG91bGQgbm90IGJlIHVzZWQgZm9yIGhhc2hpbmcgcHVycG9zZXNcbiAqXG4gKiBUbyBrZWVwIGRlcGVuZGVuY2llcyBsb3csIHdlIHdpbGwgbm90IGltcGxlbWVudCB0aGlzLCBidXQgd2UgcmVjb21tZW5kXG4gKiBpbXBsZW1lbnRpbmcgYSBzaW1pbGFyIHtAbGluayBKU09OU2VyaWFsaXplcn0gdXNpbmcgJ2RldGVybWluaXN0aWMtanNvbicgbGlicmFyaWVzXG4gKlxuICogQGNsYXNzIEpTT05TZXJpYWxpemVyXG4gKiBAaW1wbGVtZW50cyBTZXJpYWxpemVyXG4gKlxuICogQGNhdGVnb3J5IFNlcmlhbGl6YXRpb25cbiAqL1xuZXhwb3J0IGNsYXNzIEpTT05TZXJpYWxpemVyPFQgZXh0ZW5kcyBNb2RlbD4gaW1wbGVtZW50cyBTZXJpYWxpemVyPFQ+IHtcbiAgY29uc3RydWN0b3IoKSB7fVxuICAvKipcbiAgICogQHN1bW1hcnkgcHJlcGFyZXMgdGhlIG1vZGVsIGZvciBzZXJpYWxpemF0aW9uXG4gICAqIEBkZXNjcmlwdGlvbiByZXR1cm5zIGEgc2hhbGxvdyBjb3B5IG9mIHRoZSBvYmplY3QsIGNvbnRhaW5pbmcgYW4gZW51bWVyYWJsZSB7QGxpbmsgTW9kZWxLZXlzI0FOQ0hPUn0gcHJvcGVydHlcbiAgICogc28gdGhlIG9iamVjdCBjYW4gYmUgcmVjb2duaXplZCB1cG9uIGRlc2VyaWFsaXphdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge1R9IG1vZGVsXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBwcmVTZXJpYWxpemUobW9kZWw6IFQpIHtcbiAgICAvLyBUT0RPOiBuZXN0ZWQgcHJlc2VyaWFsaXphdGlvbiAoc28gaW5jcmVhc2UgcGVyZm9ybWFuY2Ugd2hlbiBkZXNlcmlhbGl6aW5nKVxuICAgIGNvbnN0IHRvU2VyaWFsaXplOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gT2JqZWN0LmFzc2lnbih7fSwgbW9kZWwpO1xuICAgIGNvbnN0IG1ldGFkYXRhID0gTW9kZWwuZ2V0TWV0YWRhdGEobW9kZWwpO1xuICAgIHRvU2VyaWFsaXplW01vZGVsS2V5cy5BTkNIT1JdID0gbWV0YWRhdGEgfHwgbW9kZWwuY29uc3RydWN0b3IubmFtZTtcbiAgICByZXR1cm4gdG9TZXJpYWxpemU7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgUmVidWlsZHMgYSBtb2RlbCBmcm9tIGEgc2VyaWFsaXphdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiBpdCBmYWlscyB0byBwYXJzZSB0aGUgc3RyaW5nLCBvciB0byBidWlsZCB0aGUgbW9kZWxcbiAgICovXG4gIGRlc2VyaWFsaXplKHN0cjogc3RyaW5nKTogVCB7XG4gICAgY29uc3QgZGVzZXJpYWxpemF0aW9uID0gSlNPTi5wYXJzZShzdHIpO1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IGRlc2VyaWFsaXphdGlvbltNb2RlbEtleXMuQU5DSE9SXTtcbiAgICBpZiAoIWNsYXNzTmFtZSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBmaW5kIGNsYXNzIHJlZmVyZW5jZSBpbiBzZXJpYWxpemVkIG1vZGVsXCIpO1xuICAgIGNvbnN0IG1vZGVsOiBUID0gTW9kZWwuYnVpbGQoZGVzZXJpYWxpemF0aW9uLCBjbGFzc05hbWUpIGFzIHVua25vd24gYXMgVDtcbiAgICByZXR1cm4gbW9kZWw7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgU2VyaWFsaXplcyBhIG1vZGVsXG4gICAqIEBwYXJhbSB7VH0gbW9kZWxcbiAgICpcbiAgICogQHRocm93cyB7RXJyb3J9IGlmIGZhaWxzIHRvIHNlcmlhbGl6ZVxuICAgKi9cbiAgc2VyaWFsaXplKG1vZGVsOiBUKTogc3RyaW5nIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5wcmVTZXJpYWxpemUobW9kZWwpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2VyaWFsaXphdGlvbiB7XG4gIHByaXZhdGUgc3RhdGljIGN1cnJlbnQ6IHN0cmluZyA9IERlZmF1bHRTZXJpYWxpemF0aW9uTWV0aG9kO1xuXG4gIHByaXZhdGUgc3RhdGljIGNhY2hlOiBSZWNvcmQ8c3RyaW5nLCBTZXJpYWxpemVyPGFueT4+ID0ge1xuICAgIGpzb246IG5ldyBKU09OU2VyaWFsaXplcigpLFxuICB9O1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7fVxuXG4gIHByaXZhdGUgc3RhdGljIGdldChrZXk6IHN0cmluZyk6IGFueSB7XG4gICAgaWYgKGtleSBpbiB0aGlzLmNhY2hlKSByZXR1cm4gdGhpcy5jYWNoZVtrZXldO1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gc2VyaWFsaXphdGlvbiBtZXRob2QgcmVnaXN0ZXJlZCB1bmRlciAke2tleX1gKTtcbiAgfVxuXG4gIHN0YXRpYyByZWdpc3RlcihcbiAgICBrZXk6IHN0cmluZyxcbiAgICBmdW5jOiBDb25zdHJ1Y3RvcjxTZXJpYWxpemVyPGFueT4+LFxuICAgIHNldERlZmF1bHQgPSBmYWxzZVxuICApOiB2b2lkIHtcbiAgICBpZiAoa2V5IGluIHRoaXMuY2FjaGUpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFNlcmlhbGl6YXRpb24gbWV0aG9kICR7a2V5fSBhbHJlYWR5IHJlZ2lzdGVyZWRgKTtcbiAgICB0aGlzLmNhY2hlW2tleV0gPSBuZXcgZnVuYygpO1xuICAgIGlmIChzZXREZWZhdWx0KSB0aGlzLmN1cnJlbnQgPSBrZXk7XG4gIH1cblxuICBzdGF0aWMgc2VyaWFsaXplKG9iajogYW55LCBtZXRob2Q/OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgaWYgKCFtZXRob2QpIHJldHVybiB0aGlzLmdldCh0aGlzLmN1cnJlbnQpLnNlcmlhbGl6ZShvYmosIC4uLmFyZ3MpO1xuICAgIHJldHVybiB0aGlzLmdldChtZXRob2QpLnNlcmlhbGl6ZShvYmosIC4uLmFyZ3MpO1xuICB9XG5cbiAgc3RhdGljIGRlc2VyaWFsaXplKG9iajogc3RyaW5nLCBtZXRob2Q/OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgaWYgKCFtZXRob2QpIHJldHVybiB0aGlzLmdldCh0aGlzLmN1cnJlbnQpLmRlc2VyaWFsaXplKG9iaiwgLi4uYXJncyk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KG1ldGhvZCkuZGVzZXJpYWxpemUob2JqLCAuLi5hcmdzKTtcbiAgfVxuXG4gIHN0YXRpYyBzZXREZWZhdWx0KG1ldGhvZDogc3RyaW5nKSB7XG4gICAgdGhpcy5jdXJyZW50ID0gdGhpcy5nZXQobWV0aG9kKTtcbiAgfVxufVxuIl19
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXphdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9zZXJpYWxpemF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXhDLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLE1BQU0sQ0FBQztBQUVqRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLE9BQU8sY0FBYztJQUN6QixnQkFBZSxDQUFDO0lBQ2hCOzs7Ozs7O09BT0c7SUFDTyxZQUFZLENBQUMsS0FBUTtRQUM3Qiw2RUFBNkU7UUFDN0UsTUFBTSxXQUFXLEdBQXdCLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDbkUsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsV0FBVyxDQUFDLEdBQVc7UUFDckIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QyxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxTQUFTO1lBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sS0FBSyxHQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLFNBQVMsQ0FBaUIsQ0FBQztRQUN6RSxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFNBQVMsQ0FBQyxLQUFRO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEQsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLGFBQWE7YUFDVCxZQUFPLEdBQVcsMEJBQTBCLENBQUM7YUFFN0MsVUFBSyxHQUFvQztRQUN0RCxJQUFJLEVBQUUsSUFBSSxjQUFjLEVBQUU7S0FDM0IsQ0FBQztJQUVGLGdCQUF1QixDQUFDO0lBRWhCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBVztRQUM1QixJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QyxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRCxNQUFNLENBQUMsUUFBUSxDQUNiLEdBQVcsRUFDWCxJQUFrQyxFQUNsQyxVQUFVLEdBQUcsS0FBSztRQUVsQixJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSztZQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixHQUFHLHFCQUFxQixDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQzdCLElBQUksVUFBVTtZQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQVEsRUFBRSxNQUFlLEVBQUUsR0FBRyxJQUFXO1FBQ3hELElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDbkUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFXLEVBQUUsTUFBZSxFQUFFLEdBQUcsSUFBVztRQUM3RCxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ3JFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBYztRQUM5QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdG9yIH0gZnJvbSBcIi4uL21vZGVsL3R5cGVzXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IE1vZGVsIH0gZnJvbSBcIi4uL21vZGVsL01vZGVsXCI7XG5pbXBvcnQgeyBNb2RlbEtleXMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGNvbnN0IERlZmF1bHRTZXJpYWxpemF0aW9uTWV0aG9kID0gXCJqc29uXCI7XG5cbi8qKlxuICogQHN1bW1hcnkgQ29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgYSB7QGxpbmsgU2VyaWFsaXplcn0gaW4gSlNPTiBmb3JtYXRcbiAqIEBkZXNjcmlwdGlvbiBKUydzIG5hdGl2ZSBKU09OLnN0cmluZ2lmeSAodXNlZCBoZXJlKSBpcyBub3QgZGV0ZXJtaW5pc3RpY1xuICogYW5kIHRoZXJlZm9yZSBzaG91bGQgbm90IGJlIHVzZWQgZm9yIGhhc2hpbmcgcHVycG9zZXNcbiAqXG4gKiBUbyBrZWVwIGRlcGVuZGVuY2llcyBsb3csIHdlIHdpbGwgbm90IGltcGxlbWVudCB0aGlzLCBidXQgd2UgcmVjb21tZW5kXG4gKiBpbXBsZW1lbnRpbmcgYSBzaW1pbGFyIHtAbGluayBKU09OU2VyaWFsaXplcn0gdXNpbmcgJ2RldGVybWluaXN0aWMtanNvbicgbGlicmFyaWVzXG4gKlxuICogQGNsYXNzIEpTT05TZXJpYWxpemVyXG4gKiBAaW1wbGVtZW50cyBTZXJpYWxpemVyXG4gKlxuICogQGNhdGVnb3J5IE1vZGVsXG4gKi9cbmV4cG9ydCBjbGFzcyBKU09OU2VyaWFsaXplcjxUIGV4dGVuZHMgTW9kZWw+IGltcGxlbWVudHMgU2VyaWFsaXplcjxUPiB7XG4gIGNvbnN0cnVjdG9yKCkge31cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IHByZXBhcmVzIHRoZSBtb2RlbCBmb3Igc2VyaWFsaXphdGlvblxuICAgKiBAZGVzY3JpcHRpb24gcmV0dXJucyBhIHNoYWxsb3cgY29weSBvZiB0aGUgb2JqZWN0LCBjb250YWluaW5nIGFuIGVudW1lcmFibGUge0BsaW5rIE1vZGVsS2V5cyNBTkNIT1J9IHByb3BlcnR5XG4gICAqIHNvIHRoZSBvYmplY3QgY2FuIGJlIHJlY29nbml6ZWQgdXBvbiBkZXNlcmlhbGl6YXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtUfSBtb2RlbFxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgcHJlU2VyaWFsaXplKG1vZGVsOiBUKSB7XG4gICAgLy8gVE9ETzogbmVzdGVkIHByZXNlcmlhbGl6YXRpb24gKHNvIGluY3JlYXNlIHBlcmZvcm1hbmNlIHdoZW4gZGVzZXJpYWxpemluZylcbiAgICBjb25zdCB0b1NlcmlhbGl6ZTogUmVjb3JkPHN0cmluZywgYW55PiA9IE9iamVjdC5hc3NpZ24oe30sIG1vZGVsKTtcbiAgICBjb25zdCBtZXRhZGF0YSA9IE1vZGVsLmdldE1ldGFkYXRhKG1vZGVsKTtcbiAgICB0b1NlcmlhbGl6ZVtNb2RlbEtleXMuQU5DSE9SXSA9IG1ldGFkYXRhIHx8IG1vZGVsLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgcmV0dXJuIHRvU2VyaWFsaXplO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFJlYnVpbGRzIGEgbW9kZWwgZnJvbSBhIHNlcmlhbGl6YXRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKlxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgaXQgZmFpbHMgdG8gcGFyc2UgdGhlIHN0cmluZywgb3IgdG8gYnVpbGQgdGhlIG1vZGVsXG4gICAqL1xuICBkZXNlcmlhbGl6ZShzdHI6IHN0cmluZyk6IFQge1xuICAgIGNvbnN0IGRlc2VyaWFsaXphdGlvbiA9IEpTT04ucGFyc2Uoc3RyKTtcbiAgICBjb25zdCBjbGFzc05hbWUgPSBkZXNlcmlhbGl6YXRpb25bTW9kZWxLZXlzLkFOQ0hPUl07XG4gICAgaWYgKCFjbGFzc05hbWUpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZmluZCBjbGFzcyByZWZlcmVuY2UgaW4gc2VyaWFsaXplZCBtb2RlbFwiKTtcbiAgICBjb25zdCBtb2RlbDogVCA9IE1vZGVsLmJ1aWxkKGRlc2VyaWFsaXphdGlvbiwgY2xhc3NOYW1lKSBhcyB1bmtub3duIGFzIFQ7XG4gICAgcmV0dXJuIG1vZGVsO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFNlcmlhbGl6ZXMgYSBtb2RlbFxuICAgKiBAcGFyYW0ge1R9IG1vZGVsXG4gICAqXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBpZiBmYWlscyB0byBzZXJpYWxpemVcbiAgICovXG4gIHNlcmlhbGl6ZShtb2RlbDogVCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMucHJlU2VyaWFsaXplKG1vZGVsKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNlcmlhbGl6YXRpb24ge1xuICBwcml2YXRlIHN0YXRpYyBjdXJyZW50OiBzdHJpbmcgPSBEZWZhdWx0U2VyaWFsaXphdGlvbk1ldGhvZDtcblxuICBwcml2YXRlIHN0YXRpYyBjYWNoZTogUmVjb3JkPHN0cmluZywgU2VyaWFsaXplcjxhbnk+PiA9IHtcbiAgICBqc29uOiBuZXcgSlNPTlNlcmlhbGl6ZXIoKSxcbiAgfTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge31cblxuICBwcml2YXRlIHN0YXRpYyBnZXQoa2V5OiBzdHJpbmcpOiBhbnkge1xuICAgIGlmIChrZXkgaW4gdGhpcy5jYWNoZSkgcmV0dXJuIHRoaXMuY2FjaGVba2V5XTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHNlcmlhbGl6YXRpb24gbWV0aG9kIHJlZ2lzdGVyZWQgdW5kZXIgJHtrZXl9YCk7XG4gIH1cblxuICBzdGF0aWMgcmVnaXN0ZXIoXG4gICAga2V5OiBzdHJpbmcsXG4gICAgZnVuYzogQ29uc3RydWN0b3I8U2VyaWFsaXplcjxhbnk+PixcbiAgICBzZXREZWZhdWx0ID0gZmFsc2VcbiAgKTogdm9pZCB7XG4gICAgaWYgKGtleSBpbiB0aGlzLmNhY2hlKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTZXJpYWxpemF0aW9uIG1ldGhvZCAke2tleX0gYWxyZWFkeSByZWdpc3RlcmVkYCk7XG4gICAgdGhpcy5jYWNoZVtrZXldID0gbmV3IGZ1bmMoKTtcbiAgICBpZiAoc2V0RGVmYXVsdCkgdGhpcy5jdXJyZW50ID0ga2V5O1xuICB9XG5cbiAgc3RhdGljIHNlcmlhbGl6ZShvYmo6IGFueSwgbWV0aG9kPzogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIGlmICghbWV0aG9kKSByZXR1cm4gdGhpcy5nZXQodGhpcy5jdXJyZW50KS5zZXJpYWxpemUob2JqLCAuLi5hcmdzKTtcbiAgICByZXR1cm4gdGhpcy5nZXQobWV0aG9kKS5zZXJpYWxpemUob2JqLCAuLi5hcmdzKTtcbiAgfVxuXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZShvYmo6IHN0cmluZywgbWV0aG9kPzogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIGlmICghbWV0aG9kKSByZXR1cm4gdGhpcy5nZXQodGhpcy5jdXJyZW50KS5kZXNlcmlhbGl6ZShvYmosIC4uLmFyZ3MpO1xuICAgIHJldHVybiB0aGlzLmdldChtZXRob2QpLmRlc2VyaWFsaXplKG9iaiwgLi4uYXJncyk7XG4gIH1cblxuICBzdGF0aWMgc2V0RGVmYXVsdChtZXRob2Q6IHN0cmluZykge1xuICAgIHRoaXMuY3VycmVudCA9IHRoaXMuZ2V0KG1ldGhvZCk7XG4gIH1cbn1cbiJdfQ==
@@ -6,8 +6,8 @@
6
6
  * @return {string} formatted string
7
7
  *
8
8
  * @function stringFormat
9
- * @memberOf module:decorator-validation.Utils.Format
10
- * @category Format
9
+ * @memberOf module:decorator-validation
10
+ * @category Model
11
11
  */
12
12
  export declare function stringFormat(string: string, ...args: (string | number)[]): string;
13
13
  /**
@@ -19,7 +19,7 @@ export declare function stringFormat(string: string, ...args: (string | number)[
19
19
  * @return {string} formatted string
20
20
  *
21
21
  * @function sf
22
- * @memberOf module:decorator-validation.Utils.Format
23
- * @category Format
22
+ * @memberOf module:decorator-validation
23
+ * @category Model
24
24
  */
25
25
  export declare const sf: typeof stringFormat;
@@ -6,8 +6,8 @@
6
6
  * @return {string} formatted string
7
7
  *
8
8
  * @function stringFormat
9
- * @memberOf module:decorator-validation.Utils.Format
10
- * @category Format
9
+ * @memberOf module:decorator-validation
10
+ * @category Model
11
11
  */
12
12
  export function stringFormat(string, ...args) {
13
13
  return string.replace(/{(\d+)}/g, function (match, number) {
@@ -25,8 +25,8 @@ export function stringFormat(string, ...args) {
25
25
  * @return {string} formatted string
26
26
  *
27
27
  * @function sf
28
- * @memberOf module:decorator-validation.Utils.Format
29
- * @category Format
28
+ * @memberOf module:decorator-validation
29
+ * @category Model
30
30
  */
31
31
  export const sf = stringFormat;
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9zdHJpbmdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLE1BQWMsRUFBRSxHQUFHLElBQXlCO0lBQ3ZFLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsVUFBVSxLQUFLLEVBQUUsTUFBTTtRQUN2RCxPQUFPLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLFdBQVc7WUFDeEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUU7WUFDekIsQ0FBQyxDQUFDLFdBQVcsQ0FBQztJQUNsQixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBzdW1tYXJ5IFV0aWwgZnVuY3Rpb24gdG8gcHJvdmlkZSBzdHJpbmcgZm9ybWF0IGZ1bmN0aW9uYWxpdHkgc2ltaWxhciB0byBDIydzIHN0cmluZy5mb3JtYXRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZyB8IG51bWJlcj59IFthcmdzXSByZXBsYWNlbWVudHMgbWFkZSBieSBvcmRlciBvZiBhcHBlYXJhbmNlIChyZXBsYWNlbWVudDAgd2lsIHJlcGxhY2UgezB9IGFuZCBzbyBvbilcbiAqIEByZXR1cm4ge3N0cmluZ30gZm9ybWF0dGVkIHN0cmluZ1xuICpcbiAqIEBmdW5jdGlvbiBzdHJpbmdGb3JtYXRcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uVXRpbHMuRm9ybWF0XG4gKiBAY2F0ZWdvcnkgRm9ybWF0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdGb3JtYXQoc3RyaW5nOiBzdHJpbmcsIC4uLmFyZ3M6IChzdHJpbmcgfCBudW1iZXIpW10pIHtcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC97KFxcZCspfS9nLCBmdW5jdGlvbiAobWF0Y2gsIG51bWJlcikge1xuICAgIHJldHVybiB0eXBlb2YgYXJnc1tudW1iZXJdICE9PSBcInVuZGVmaW5lZFwiXG4gICAgICA/IGFyZ3NbbnVtYmVyXS50b1N0cmluZygpXG4gICAgICA6IFwidW5kZWZpbmVkXCI7XG4gIH0pO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IFV0aWwgZnVuY3Rpb24gdG8gcHJvdmlkZSBzdHJpbmcgZm9ybWF0IGZ1bmN0aW9uYWxpdHkgc2ltaWxhciB0byBDIydzIHN0cmluZy5mb3JtYXRcbiAqIEBkZXNjcmlwdGlvbiBhbGlhcyBmb3Ige0BsaW5rIHN0cmluZ0Zvcm1hdH1cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncyByZXBsYWNlbWVudHMgbWFkZSBieSBvcmRlciBvZiBhcHBlYXJhbmNlIChyZXBsYWNlbWVudDAgd2lsIHJlcGxhY2UgezB9IGFuZCBzbyBvbilcbiAqIEByZXR1cm4ge3N0cmluZ30gZm9ybWF0dGVkIHN0cmluZ1xuICpcbiAqIEBmdW5jdGlvbiBzZlxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5VdGlscy5Gb3JtYXRcbiAqIEBjYXRlZ29yeSBGb3JtYXRcbiAqL1xuZXhwb3J0IGNvbnN0IHNmID0gc3RyaW5nRm9ybWF0O1xuIl19
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9zdHJpbmdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLE1BQWMsRUFBRSxHQUFHLElBQXlCO0lBQ3ZFLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsVUFBVSxLQUFLLEVBQUUsTUFBTTtRQUN2RCxPQUFPLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLFdBQVc7WUFDeEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUU7WUFDekIsQ0FBQyxDQUFDLFdBQVcsQ0FBQztJQUNsQixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBzdW1tYXJ5IFV0aWwgZnVuY3Rpb24gdG8gcHJvdmlkZSBzdHJpbmcgZm9ybWF0IGZ1bmN0aW9uYWxpdHkgc2ltaWxhciB0byBDIydzIHN0cmluZy5mb3JtYXRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZyB8IG51bWJlcj59IFthcmdzXSByZXBsYWNlbWVudHMgbWFkZSBieSBvcmRlciBvZiBhcHBlYXJhbmNlIChyZXBsYWNlbWVudDAgd2lsIHJlcGxhY2UgezB9IGFuZCBzbyBvbilcbiAqIEByZXR1cm4ge3N0cmluZ30gZm9ybWF0dGVkIHN0cmluZ1xuICpcbiAqIEBmdW5jdGlvbiBzdHJpbmdGb3JtYXRcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBNb2RlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nRm9ybWF0KHN0cmluZzogc3RyaW5nLCAuLi5hcmdzOiAoc3RyaW5nIHwgbnVtYmVyKVtdKSB7XG4gIHJldHVybiBzdHJpbmcucmVwbGFjZSgveyhcXGQrKX0vZywgZnVuY3Rpb24gKG1hdGNoLCBudW1iZXIpIHtcbiAgICByZXR1cm4gdHlwZW9mIGFyZ3NbbnVtYmVyXSAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICAgPyBhcmdzW251bWJlcl0udG9TdHJpbmcoKVxuICAgICAgOiBcInVuZGVmaW5lZFwiO1xuICB9KTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBVdGlsIGZ1bmN0aW9uIHRvIHByb3ZpZGUgc3RyaW5nIGZvcm1hdCBmdW5jdGlvbmFsaXR5IHNpbWlsYXIgdG8gQyMncyBzdHJpbmcuZm9ybWF0XG4gKiBAZGVzY3JpcHRpb24gYWxpYXMgZm9yIHtAbGluayBzdHJpbmdGb3JtYXR9XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MgcmVwbGFjZW1lbnRzIG1hZGUgYnkgb3JkZXIgb2YgYXBwZWFyYW5jZSAocmVwbGFjZW1lbnQwIHdpbCByZXBsYWNlIHswfSBhbmQgc28gb24pXG4gKiBAcmV0dXJuIHtzdHJpbmd9IGZvcm1hdHRlZCBzdHJpbmdcbiAqXG4gKiBAZnVuY3Rpb24gc2ZcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBNb2RlbFxuICovXG5leHBvcnQgY29uc3Qgc2YgPSBzdHJpbmdGb3JtYXQ7XG4iXX0=
@@ -1,29 +1,136 @@
1
1
  import { Model } from "../model";
2
2
  /**
3
- * @summary Helper in serialization
3
+ * @description Interface for the final stage of the decoration builder pattern
4
+ * @summary Represents the build stage of the decoration builder, providing the ability to apply
5
+ * the configured decorator to a target. This is the final stage in the builder chain.
4
6
  *
5
- * @interface Serializer
6
- * @category Serialization
7
+ * @interface DecorationBuilderBuild
8
+ * @memberOf module:decorator-validation
9
+ * @category Model
7
10
  */
8
- export interface Serializer<T extends Model> {
11
+ export interface DecorationBuilderBuild {
9
12
  /**
10
- * @summary Serializes a model
11
- * @param {T} model
13
+ * @description Creates and returns the decorator function
14
+ * @summary Finalizes the builder process and returns a decorator function that can be applied to a class,
15
+ * property, or method.
12
16
  *
13
- * @param args
14
- * @method
17
+ * @returns {function} A decorator function that can be applied to a target
18
+ */
19
+ apply(): (target: object, propertyKey?: any, descriptor?: TypedPropertyDescriptor<any>) => any;
20
+ }
21
+ /**
22
+ * @description Interface for the extension stage of the decoration builder pattern
23
+ * @summary Represents the extension stage of the decoration builder, providing the ability to add
24
+ * additional decorators to the existing configuration.
25
+ *
26
+ * @interface DecorationBuilderEnd
27
+ * @memberOf module:decorator-validation
28
+ * @category Model
29
+ */
30
+ export interface DecorationBuilderEnd {
31
+ /**
32
+ * @description Adds additional decorators to the existing configuration
33
+ * @summary Extends the current decorator configuration with additional decorators.
34
+ * This is useful for adding behavior to existing decorators.
15
35
  *
16
- * @throws {Error}
36
+ * @param {...(ClassDecorator|PropertyDecorator|MethodDecorator)} decorators - Additional decorators to add
37
+ * @returns {DecorationBuilderBuild} The build stage of the builder pattern
38
+ */
39
+ extend(...decorators: (ClassDecorator | PropertyDecorator | MethodDecorator)[]): DecorationBuilderBuild;
40
+ }
41
+ /**
42
+ * @description Interface for the middle stage of the decoration builder pattern
43
+ * @summary Represents the middle stage of the decoration builder, extending the end stage
44
+ * and providing the ability to define the primary decorators for the configuration.
45
+ *
46
+ * @interface DecorationBuilderMid
47
+ * @memberOf module:decorator-validation
48
+ * @category Model
49
+ */
50
+ export interface DecorationBuilderMid extends DecorationBuilderEnd {
51
+ /**
52
+ * @description Defines the primary decorators for the configuration
53
+ * @summary Sets the main decorators for the current context. This is typically
54
+ * called after specifying the key with the 'for' method.
17
55
  */
18
- serialize(model: T, ...args: any[]): string;
56
+ define(...decorators: (ClassDecorator | PropertyDecorator | MethodDecorator)[]): DecorationBuilderEnd & DecorationBuilderBuild;
57
+ }
58
+ /**
59
+ * @description Interface for the starting stage of the decoration builder pattern
60
+ * @summary Represents the initial stage of the decoration builder, providing the entry point
61
+ * for the builder pattern by specifying the key for the decorator.
62
+ *
63
+ * @interface DecorationBuilderStart
64
+ * @memberOf module:decorator-validation
65
+ * @category Model
66
+ */
67
+ export interface DecorationBuilderStart {
19
68
  /**
20
- * @summary Rebuilds a model from serialization
21
- * @param {string} str
69
+ * @description Specifies the key for the decorator
70
+ * @summary Sets the identifier for the decorator, which is used to register and retrieve
71
+ * the decorator in the decoration registry.
22
72
  *
23
- * @param args
24
- * @method
73
+ * @param {string} id - The identifier for the decorator
74
+ * @return {DecorationBuilderMid} The middle stage of the builder pattern
75
+ */
76
+ for(id: string): DecorationBuilderMid;
77
+ }
78
+ /**
79
+ * @description Comprehensive interface for the complete decoration builder pattern
80
+ * @summary A unified interface that combines all stages of the decoration builder pattern,
81
+ * providing a complete API for creating, configuring, and applying decorators.
82
+ * This interface is implemented by the Decoration class.
83
+ *
84
+ * @interface IDecorationBuilder
85
+ * @memberOf module:decorator-validation
86
+ * @category Model
87
+ */
88
+ export interface IDecorationBuilder extends DecorationBuilderStart, DecorationBuilderMid, DecorationBuilderEnd, DecorationBuilderBuild {
89
+ }
90
+ /**
91
+ * @description Type definition for a function that resolves the flavour for a target
92
+ * @summary Defines a function type that determines the appropriate flavour for a given target object.
93
+ * This is used by the Decoration class to resolve which flavour of decorator to apply based on the target.
94
+ *
95
+ * @typedef {function(object): string} FlavourResolver
96
+ *
97
+ * @param {object} target - The target object to resolve the flavour for
98
+ * @return {string} The resolved flavour identifier
99
+ * @memberOf module:decorator-validation
100
+ * @category Model
101
+ */
102
+ export type FlavourResolver = (target: object) => string;
103
+ /**
104
+ * @description Interface for serializing and deserializing model objects
105
+ * @summary Defines the contract for classes that can convert model objects to and from string representations.
106
+ * Serializers are used to persist models or transmit them over networks.
107
+ *
108
+ * @interface Serializer
109
+ * @template T Type of model that can be serialized, must extend Model
110
+ * @memberOf module:decorator-validation
111
+ * @category Model
112
+ */
113
+ export interface Serializer<M extends Model> {
114
+ /**
115
+ * @description Converts a model object to a string representation
116
+ * @summary Serializes a model instance into a string format that can be stored or transmitted.
117
+ * Additional arguments can be provided to customize the serialization process.
118
+ *
119
+ * @param {T} model - The model instance to serialize
120
+ * @param {...any} args - Additional arguments for the serialization process
121
+ * @return {string} The serialized representation of the model
122
+ * @throws {Error} If the model cannot be serialized
123
+ */
124
+ serialize(model: M, ...args: any[]): string;
125
+ /**
126
+ * @description Reconstructs a model object from its string representation
127
+ * @summary Deserializes a string back into a model instance.
128
+ * Additional arguments can be provided to customize the deserialization process.
25
129
  *
26
- * @throws {Error}
130
+ * @param {string} str - The serialized string to convert back to a model
131
+ * @param {...any} args - Additional arguments for the deserialization process
132
+ * @return {T} The reconstructed model instance
133
+ * @throws {Error} If the string cannot be deserialized into a valid model
27
134
  */
28
- deserialize(str: string, ...args: any[]): T;
135
+ deserialize(str: string, ...args: any[]): M;
29
136
  }