@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.
- package/dist/decorator-validation.cjs +1217 -404
- package/dist/decorator-validation.esm.cjs +1173 -359
- package/lib/constants/index.cjs +1 -1
- package/lib/esm/index.d.ts +5 -37
- package/lib/esm/index.js +6 -38
- package/lib/esm/model/Model.d.ts +107 -35
- package/lib/esm/model/Model.js +110 -45
- package/lib/esm/model/constants.d.ts +3 -3
- package/lib/esm/model/constants.js +4 -4
- package/lib/esm/model/construction.d.ts +3 -3
- package/lib/esm/model/construction.js +4 -4
- package/lib/esm/model/decorators.d.ts +3 -3
- package/lib/esm/model/decorators.js +2 -3
- package/lib/esm/model/index.d.ts +1 -0
- package/lib/esm/model/index.js +2 -1
- package/lib/esm/model/types.d.ts +30 -11
- package/lib/esm/model/types.js +1 -1
- package/lib/esm/model/utils.d.ts +3 -0
- package/lib/esm/model/utils.js +11 -0
- package/lib/esm/model/validation.d.ts +5 -5
- package/lib/esm/model/validation.js +8 -9
- package/lib/esm/utils/Decoration.d.ts +123 -0
- package/lib/esm/utils/Decoration.js +192 -0
- package/lib/esm/utils/constants.d.ts +27 -9
- package/lib/esm/utils/constants.js +28 -10
- package/lib/esm/utils/dates.d.ts +26 -16
- package/lib/esm/utils/dates.js +27 -17
- package/lib/esm/utils/decorators.d.ts +41 -0
- package/lib/esm/utils/decorators.js +42 -1
- package/lib/esm/utils/hashing.d.ts +50 -6
- package/lib/esm/utils/hashing.js +49 -5
- package/lib/esm/utils/index.d.ts +1 -0
- package/lib/esm/utils/index.js +2 -1
- package/lib/esm/utils/registry.d.ts +3 -3
- package/lib/esm/utils/registry.js +1 -1
- package/lib/esm/utils/serialization.d.ts +1 -1
- package/lib/esm/utils/serialization.js +4 -3
- package/lib/esm/utils/strings.d.ts +4 -4
- package/lib/esm/utils/strings.js +5 -5
- package/lib/esm/utils/types.d.ts +123 -16
- package/lib/esm/utils/types.js +1 -1
- package/lib/esm/validation/Validators/DateValidator.d.ts +40 -8
- package/lib/esm/validation/Validators/DateValidator.js +41 -9
- package/lib/esm/validation/Validators/DiffValidator.d.ts +3 -3
- package/lib/esm/validation/Validators/DiffValidator.js +3 -3
- package/lib/esm/validation/Validators/EmailValidator.d.ts +39 -7
- package/lib/esm/validation/Validators/EmailValidator.js +40 -8
- package/lib/esm/validation/Validators/EqualsValidator.d.ts +3 -3
- package/lib/esm/validation/Validators/EqualsValidator.js +3 -3
- package/lib/esm/validation/Validators/GreaterThanOrEqualValidator.d.ts +3 -3
- package/lib/esm/validation/Validators/GreaterThanOrEqualValidator.js +3 -3
- package/lib/esm/validation/Validators/GreaterThanValidator.d.ts +3 -3
- package/lib/esm/validation/Validators/GreaterThanValidator.js +3 -3
- package/lib/esm/validation/Validators/LessThanOrEqualValidator.d.ts +3 -3
- package/lib/esm/validation/Validators/LessThanOrEqualValidator.js +3 -3
- package/lib/esm/validation/Validators/LessThanValidator.d.ts +3 -3
- package/lib/esm/validation/Validators/LessThanValidator.js +3 -3
- package/lib/esm/validation/Validators/ListValidator.d.ts +44 -6
- package/lib/esm/validation/Validators/ListValidator.js +45 -7
- package/lib/esm/validation/Validators/MaxValidator.d.ts +52 -6
- package/lib/esm/validation/Validators/MaxValidator.js +53 -7
- package/lib/esm/validation/Validators/MinValidator.d.ts +52 -6
- package/lib/esm/validation/Validators/MinValidator.js +53 -7
- package/lib/esm/validation/Validators/PatternValidator.d.ts +75 -9
- package/lib/esm/validation/Validators/PatternValidator.js +76 -10
- package/lib/esm/validation/Validators/RequiredValidator.d.ts +52 -6
- package/lib/esm/validation/Validators/RequiredValidator.js +53 -7
- package/lib/esm/validation/Validators/TypeValidator.d.ts +60 -6
- package/lib/esm/validation/Validators/TypeValidator.js +69 -7
- package/lib/esm/validation/Validators/URLValidator.d.ts +41 -7
- package/lib/esm/validation/Validators/URLValidator.js +42 -8
- package/lib/esm/validation/Validators/Validator.d.ts +76 -16
- package/lib/esm/validation/Validators/Validator.js +68 -11
- package/lib/esm/validation/Validators/ValidatorRegistry.d.ts +1 -7
- package/lib/esm/validation/Validators/ValidatorRegistry.js +4 -11
- package/lib/esm/validation/decorators.d.ts +50 -40
- package/lib/esm/validation/decorators.js +108 -59
- package/lib/esm/validation/types.d.ts +163 -30
- package/lib/esm/validation/types.js +1 -1
- package/lib/index.cjs +7 -39
- package/lib/index.d.ts +5 -37
- package/lib/model/Model.cjs +114 -51
- package/lib/model/Model.d.ts +107 -35
- package/lib/model/constants.cjs +4 -4
- package/lib/model/constants.d.ts +3 -3
- package/lib/model/construction.cjs +4 -4
- package/lib/model/construction.d.ts +3 -3
- package/lib/model/decorators.cjs +3 -4
- package/lib/model/decorators.d.ts +3 -3
- package/lib/model/index.cjs +2 -1
- package/lib/model/index.d.ts +1 -0
- package/lib/model/types.cjs +1 -1
- package/lib/model/types.d.ts +30 -11
- package/lib/model/utils.cjs +15 -0
- package/lib/model/utils.d.ts +3 -0
- package/lib/model/validation.cjs +11 -12
- package/lib/model/validation.d.ts +5 -5
- package/lib/utils/Decoration.cjs +196 -0
- package/lib/utils/Decoration.d.ts +123 -0
- package/lib/utils/constants.cjs +29 -11
- package/lib/utils/constants.d.ts +27 -9
- package/lib/utils/dates.cjs +28 -18
- package/lib/utils/dates.d.ts +26 -16
- package/lib/utils/decorators.cjs +42 -1
- package/lib/utils/decorators.d.ts +41 -0
- package/lib/utils/hashing.cjs +49 -5
- package/lib/utils/hashing.d.ts +50 -6
- package/lib/utils/index.cjs +2 -1
- package/lib/utils/index.d.ts +1 -0
- package/lib/utils/registry.cjs +1 -1
- package/lib/utils/registry.d.ts +3 -3
- package/lib/utils/serialization.cjs +5 -4
- package/lib/utils/serialization.d.ts +1 -1
- package/lib/utils/strings.cjs +5 -5
- package/lib/utils/strings.d.ts +4 -4
- package/lib/utils/types.cjs +1 -1
- package/lib/utils/types.d.ts +123 -16
- package/lib/validation/Validation.cjs +1 -1
- package/lib/validation/Validators/DateValidator.cjs +41 -9
- package/lib/validation/Validators/DateValidator.d.ts +40 -8
- package/lib/validation/Validators/DiffValidator.cjs +3 -3
- package/lib/validation/Validators/DiffValidator.d.ts +3 -3
- package/lib/validation/Validators/EmailValidator.cjs +40 -8
- package/lib/validation/Validators/EmailValidator.d.ts +39 -7
- package/lib/validation/Validators/EqualsValidator.cjs +3 -3
- package/lib/validation/Validators/EqualsValidator.d.ts +3 -3
- package/lib/validation/Validators/GreaterThanOrEqualValidator.cjs +3 -3
- package/lib/validation/Validators/GreaterThanOrEqualValidator.d.ts +3 -3
- package/lib/validation/Validators/GreaterThanValidator.cjs +3 -3
- package/lib/validation/Validators/GreaterThanValidator.d.ts +3 -3
- package/lib/validation/Validators/LessThanOrEqualValidator.cjs +3 -3
- package/lib/validation/Validators/LessThanOrEqualValidator.d.ts +3 -3
- package/lib/validation/Validators/LessThanValidator.cjs +3 -3
- package/lib/validation/Validators/LessThanValidator.d.ts +3 -3
- package/lib/validation/Validators/ListValidator.cjs +45 -7
- package/lib/validation/Validators/ListValidator.d.ts +44 -6
- package/lib/validation/Validators/MaxLengthValidator.cjs +1 -1
- package/lib/validation/Validators/MaxValidator.cjs +53 -7
- package/lib/validation/Validators/MaxValidator.d.ts +52 -6
- package/lib/validation/Validators/MinLengthValidator.cjs +1 -1
- package/lib/validation/Validators/MinValidator.cjs +53 -7
- package/lib/validation/Validators/MinValidator.d.ts +52 -6
- package/lib/validation/Validators/PasswordValidator.cjs +1 -1
- package/lib/validation/Validators/PatternValidator.cjs +76 -10
- package/lib/validation/Validators/PatternValidator.d.ts +75 -9
- package/lib/validation/Validators/RequiredValidator.cjs +53 -7
- package/lib/validation/Validators/RequiredValidator.d.ts +52 -6
- package/lib/validation/Validators/StepValidator.cjs +1 -1
- package/lib/validation/Validators/TypeValidator.cjs +71 -9
- package/lib/validation/Validators/TypeValidator.d.ts +60 -6
- package/lib/validation/Validators/URLValidator.cjs +42 -8
- package/lib/validation/Validators/URLValidator.d.ts +41 -7
- package/lib/validation/Validators/Validator.cjs +69 -12
- package/lib/validation/Validators/Validator.d.ts +76 -16
- package/lib/validation/Validators/ValidatorRegistry.cjs +4 -12
- package/lib/validation/Validators/ValidatorRegistry.d.ts +1 -7
- package/lib/validation/Validators/constants.cjs +2 -2
- package/lib/validation/Validators/decorators.cjs +2 -2
- package/lib/validation/Validators/index.cjs +1 -1
- package/lib/validation/Validators/utils.cjs +3 -3
- package/lib/validation/decorators.cjs +111 -62
- package/lib/validation/decorators.d.ts +50 -40
- package/lib/validation/index.cjs +1 -1
- package/lib/validation/types.cjs +1 -1
- package/lib/validation/types.d.ts +163 -30
- package/package.json +2 -1
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Decoration = void 0;
|
|
4
|
+
const constants_1 = require("./constants.cjs");
|
|
5
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
6
|
+
function defaultFlavourResolver(target) {
|
|
7
|
+
return constants_1.DefaultFlavour;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* @description A decorator management class that handles flavoured decorators
|
|
11
|
+
* @summary The Decoration class provides a builder pattern for creating and managing decorators with different flavours.
|
|
12
|
+
* It supports registering, extending, and applying decorators with context-aware flavour resolution.
|
|
13
|
+
* The class implements a fluent interface for defining, extending, and applying decorators with different flavours,
|
|
14
|
+
* allowing for framework-specific decorator implementations while maintaining a consistent API.
|
|
15
|
+
* @template T Type of the decorator (ClassDecorator | PropertyDecorator | MethodDecorator)
|
|
16
|
+
* @param {string} [flavour] Optional flavour parameter for the decorator context
|
|
17
|
+
* @class
|
|
18
|
+
* @category Model
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* // Create a new decoration for 'component' with default flavour
|
|
22
|
+
* const componentDecorator = new Decoration()
|
|
23
|
+
* .for('component')
|
|
24
|
+
* .define(customComponentDecorator);
|
|
25
|
+
*
|
|
26
|
+
* // Create a flavoured decoration
|
|
27
|
+
* const vueComponent = new Decoration('vue')
|
|
28
|
+
* .for('component')
|
|
29
|
+
* .define(vueComponentDecorator);
|
|
30
|
+
*
|
|
31
|
+
* // Apply the decoration
|
|
32
|
+
* @componentDecorator
|
|
33
|
+
* class MyComponent {}
|
|
34
|
+
* ```
|
|
35
|
+
* @mermaid
|
|
36
|
+
* sequenceDiagram
|
|
37
|
+
* participant C as Client
|
|
38
|
+
* participant D as Decoration
|
|
39
|
+
* participant R as FlavourResolver
|
|
40
|
+
* participant F as DecoratorFactory
|
|
41
|
+
*
|
|
42
|
+
* C->>D: new Decoration(flavour)
|
|
43
|
+
* C->>D: for(key)
|
|
44
|
+
* C->>D: define(decorators)
|
|
45
|
+
* D->>D: register(key, flavour, decorators)
|
|
46
|
+
* D->>F: decoratorFactory(key, flavour)
|
|
47
|
+
* F->>R: resolve(target)
|
|
48
|
+
* R-->>F: resolved flavour
|
|
49
|
+
* F->>F: apply decorators
|
|
50
|
+
* F-->>C: decorated target
|
|
51
|
+
*/
|
|
52
|
+
class Decoration {
|
|
53
|
+
/**
|
|
54
|
+
* @description Static map of registered decorators
|
|
55
|
+
* @summary Stores all registered decorators organized by key and flavour
|
|
56
|
+
*/
|
|
57
|
+
static { this.decorators = {}; }
|
|
58
|
+
/**
|
|
59
|
+
* @description Function to resolve flavour from a target
|
|
60
|
+
* @summary Resolver function that determines the appropriate flavour for a given target
|
|
61
|
+
*/
|
|
62
|
+
static { this.flavourResolver = defaultFlavourResolver; }
|
|
63
|
+
constructor(flavour = constants_1.DefaultFlavour) {
|
|
64
|
+
this.flavour = flavour;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* @description Sets the key for the decoration builder
|
|
68
|
+
* @summary Initializes a new decoration chain with the specified key
|
|
69
|
+
* @param {string} key The identifier for the decorator
|
|
70
|
+
* @return {DecorationBuilderMid} Builder instance for method chaining
|
|
71
|
+
*/
|
|
72
|
+
for(key) {
|
|
73
|
+
this.key = key;
|
|
74
|
+
return this;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* @description Adds decorators to the current context
|
|
78
|
+
* @summary Internal method to add decorators with addon support
|
|
79
|
+
* @param {boolean} [addon=false] Whether the decorators are addons
|
|
80
|
+
* @param decorators Array of decorators
|
|
81
|
+
* @return {this} Current instance for chaining
|
|
82
|
+
*/
|
|
83
|
+
decorate(addon = false, ...decorators) {
|
|
84
|
+
if (!this.key)
|
|
85
|
+
throw new Error("key must be provided before decorators can be added");
|
|
86
|
+
if ((!decorators || !decorators.length) &&
|
|
87
|
+
!addon &&
|
|
88
|
+
this.flavour !== constants_1.DefaultFlavour)
|
|
89
|
+
throw new Error("Must provide overrides or addons to override or extend decaf's decorators");
|
|
90
|
+
if (this.flavour === constants_1.DefaultFlavour && addon)
|
|
91
|
+
throw new Error("Default flavour cannot be extended");
|
|
92
|
+
this[addon ? "extras" : "decorators"] = new Set([
|
|
93
|
+
...(this[addon ? "extras" : "decorators"] || new Set()).values(),
|
|
94
|
+
...decorators,
|
|
95
|
+
]);
|
|
96
|
+
return this;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* @description Defines the base decorators
|
|
100
|
+
* @summary Sets the primary decorators for the current context
|
|
101
|
+
* @param decorators Decorators to define
|
|
102
|
+
* @return Builder instance for finishing the chain
|
|
103
|
+
*/
|
|
104
|
+
define(...decorators) {
|
|
105
|
+
return this.decorate(false, ...decorators);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* @description Extends existing decorators
|
|
109
|
+
* @summary Adds additional decorators to the current context
|
|
110
|
+
* @param decorators Additional decorators
|
|
111
|
+
* @return {DecorationBuilderBuild} Builder instance for building the decorator
|
|
112
|
+
*/
|
|
113
|
+
extend(...decorators) {
|
|
114
|
+
return this.decorate(true, ...decorators);
|
|
115
|
+
}
|
|
116
|
+
decoratorFactory(key, f = constants_1.DefaultFlavour) {
|
|
117
|
+
const contextDecorator = function contextDecorator(target, propertyKey, descriptor) {
|
|
118
|
+
const flavour = Decoration.flavourResolver(target);
|
|
119
|
+
let decorators;
|
|
120
|
+
const extras = Decoration.decorators[key][flavour]
|
|
121
|
+
? Decoration.decorators[key][flavour].extras
|
|
122
|
+
: Decoration.decorators[key][constants_1.DefaultFlavour].extras;
|
|
123
|
+
if (Decoration.decorators[key] &&
|
|
124
|
+
Decoration.decorators[key][flavour] &&
|
|
125
|
+
Decoration.decorators[key][flavour].decorators) {
|
|
126
|
+
decorators = Decoration.decorators[key][flavour].decorators;
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
decorators = Decoration.decorators[key][constants_1.DefaultFlavour].decorators;
|
|
130
|
+
}
|
|
131
|
+
[
|
|
132
|
+
...(decorators ? decorators.values() : []),
|
|
133
|
+
...(extras ? extras.values() : []),
|
|
134
|
+
].forEach((d) => d(target, propertyKey, descriptor, descriptor));
|
|
135
|
+
// return apply(
|
|
136
|
+
//
|
|
137
|
+
// )(target, propertyKey, descriptor);
|
|
138
|
+
};
|
|
139
|
+
Object.defineProperty(contextDecorator, "name", {
|
|
140
|
+
value: [f, key].join("_decorator_for_"),
|
|
141
|
+
writable: false,
|
|
142
|
+
});
|
|
143
|
+
return contextDecorator;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* @description Creates the final decorator function
|
|
147
|
+
* @summary Builds and returns the decorator factory function
|
|
148
|
+
* @return {function(any, any?, TypedPropertyDescriptor?): any} The generated decorator function
|
|
149
|
+
*/
|
|
150
|
+
apply() {
|
|
151
|
+
if (!this.key)
|
|
152
|
+
throw new Error("No key provided for the decoration builder");
|
|
153
|
+
Decoration.register(this.key, this.flavour, this.decorators, this.extras);
|
|
154
|
+
return this.decoratorFactory(this.key, this.flavour);
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* @description Registers decorators for a specific key and flavour
|
|
158
|
+
* @summary Internal method to store decorators in the static registry
|
|
159
|
+
* @param {string} key Decorator key
|
|
160
|
+
* @param {string} flavour Decorator flavour
|
|
161
|
+
* @param [decorators] Primary decorators
|
|
162
|
+
* @param [extras] Additional decorators
|
|
163
|
+
*/
|
|
164
|
+
static register(key, flavour, decorators, extras) {
|
|
165
|
+
if (!key)
|
|
166
|
+
throw new Error("No key provided for the decoration builder");
|
|
167
|
+
if (!decorators)
|
|
168
|
+
throw new Error("No decorators provided for the decoration builder");
|
|
169
|
+
if (!flavour)
|
|
170
|
+
throw new Error("No flavour provided for the decoration builder");
|
|
171
|
+
if (!Decoration.decorators[key])
|
|
172
|
+
Decoration.decorators[key] = {};
|
|
173
|
+
if (!Decoration.decorators[key][flavour])
|
|
174
|
+
Decoration.decorators[key][flavour] = {};
|
|
175
|
+
if (decorators)
|
|
176
|
+
Decoration.decorators[key][flavour].decorators = decorators;
|
|
177
|
+
if (extras)
|
|
178
|
+
Decoration.decorators[key][flavour].extras = extras;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* @description Sets the global flavour resolver
|
|
182
|
+
* @summary Configures the function used to determine decorator flavours
|
|
183
|
+
* @param {FlavourResolver} resolver Function to resolve flavours
|
|
184
|
+
*/
|
|
185
|
+
static setFlavourResolver(resolver) {
|
|
186
|
+
Decoration.flavourResolver = resolver;
|
|
187
|
+
}
|
|
188
|
+
static for(key) {
|
|
189
|
+
return new Decoration().for(key);
|
|
190
|
+
}
|
|
191
|
+
static flavouredAs(flavour) {
|
|
192
|
+
return new Decoration(flavour);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
exports.Decoration = Decoration;
|
|
196
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVjb3JhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9EZWNvcmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVFBLCtDQUE2QztBQUU3Qyw2REFBNkQ7QUFDN0QsU0FBUyxzQkFBc0IsQ0FBQyxNQUFjO0lBQzVDLE9BQU8sMEJBQWMsQ0FBQztBQUN4QixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBDRztBQUNILE1BQWEsVUFBVTtJQUNyQjs7O09BR0c7YUFDWSxlQUFVLEdBU3JCLEVBQUUsQ0FBQztJQUVQOzs7T0FHRzthQUNZLG9CQUFlLEdBQW9CLHNCQUFzQixDQUFDO0lBbUJ6RSxZQUFvQixVQUFrQiwwQkFBYztRQUFoQyxZQUFPLEdBQVAsT0FBTyxDQUF5QjtJQUFHLENBQUM7SUFFeEQ7Ozs7O09BS0c7SUFDSCxHQUFHLENBQUMsR0FBVztRQUNiLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssUUFBUSxDQUNkLFFBQWlCLEtBQUssRUFDdEIsR0FBRyxVQUFvRTtRQUV2RSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUc7WUFDWCxNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7UUFDekUsSUFDRSxDQUFDLENBQUMsVUFBVSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztZQUNuQyxDQUFDLEtBQUs7WUFDTixJQUFJLENBQUMsT0FBTyxLQUFLLDBCQUFjO1lBRS9CLE1BQU0sSUFBSSxLQUFLLENBQ2IsMkVBQTJFLENBQzVFLENBQUM7UUFDSixJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssMEJBQWMsSUFBSSxLQUFLO1lBQzFDLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztRQUV4RCxJQUFJLENBQUMs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QztJQUNsRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxRQUF5QjtRQUNqRCxVQUFVLENBQUMsZUFBZSxHQUFHLFFBQVEsQ0FBQztJQUN4QyxDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFXO1FBQ3BCLE9BQU8sSUFBSSxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBZTtRQUNoQyxPQUFPLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7O0FBek1ILGdDQTBNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERlY29yYXRpb25CdWlsZGVyQnVpbGQsXG4gIERlY29yYXRpb25CdWlsZGVyRW5kLFxuICBEZWNvcmF0aW9uQnVpbGRlck1pZCxcbiAgRGVjb3JhdGlvbkJ1aWxkZXJTdGFydCxcbiAgRmxhdm91clJlc29sdmVyLFxuICBJRGVjb3JhdGlvbkJ1aWxkZXIsXG59IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBEZWZhdWx0Rmxhdm91ciB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5mdW5jdGlvbiBkZWZhdWx0Rmxhdm91clJlc29sdmVyKHRhcmdldDogb2JqZWN0KSB7XG4gIHJldHVybiBEZWZhdWx0Rmxhdm91cjtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQSBkZWNvcmF0b3IgbWFuYWdlbWVudCBjbGFzcyB0aGF0IGhhbmRsZXMgZmxhdm91cmVkIGRlY29yYXRvcnNcbiAqIEBzdW1tYXJ5IFRoZSBEZWNvcmF0aW9uIGNsYXNzIHByb3ZpZGVzIGEgYnVpbGRlciBwYXR0ZXJuIGZvciBjcmVhdGluZyBhbmQgbWFuYWdpbmcgZGVjb3JhdG9ycyB3aXRoIGRpZmZlcmVudCBmbGF2b3Vycy5cbiAqIEl0IHN1cHBvcnRzIHJlZ2lzdGVyaW5nLCBleHRlbmRpbmcsIGFuZCBhcHBseWluZyBkZWNvcmF0b3JzIHdpdGggY29udGV4dC1hd2FyZSBmbGF2b3VyIHJlc29sdXRpb24uXG4gKiBUaGUgY2xhc3MgaW1wbGVtZW50cyBhIGZsdWVudCBpbnRlcmZhY2UgZm9yIGRlZmluaW5nLCBleHRlbmRpbmcsIGFuZCBhcHBseWluZyBkZWNvcmF0b3JzIHdpdGggZGlmZmVyZW50IGZsYXZvdXJzLFxuICogYWxsb3dpbmcgZm9yIGZyYW1ld29yay1zcGVjaWZpYyBkZWNvcmF0b3IgaW1wbGVtZW50YXRpb25zIHdoaWxlIG1haW50YWluaW5nIGEgY29uc2lzdGVudCBBUEkuXG4gKiBAdGVtcGxhdGUgVCBUeXBlIG9mIHRoZSBkZWNvcmF0b3IgKENsYXNzRGVjb3JhdG9yIHwgUHJvcGVydHlEZWNvcmF0b3IgfCBNZXRob2REZWNvcmF0b3IpXG4gKiBAcGFyYW0ge3N0cmluZ30gW2ZsYXZvdXJdIE9wdGlvbmFsIGZsYXZvdXIgcGFyYW1ldGVyIGZvciB0aGUgZGVjb3JhdG9yIGNvbnRleHRcbiAqIEBjbGFzc1xuICogQGNhdGVnb3J5IE1vZGVsXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gQ3JlYXRlIGEgbmV3IGRlY29yYXRpb24gZm9yICdjb21wb25lbnQnIHdpdGggZGVmYXVsdCBmbGF2b3VyXG4gKiBjb25zdCBjb21wb25lbnREZWNvcmF0b3IgPSBuZXcgRGVjb3JhdGlvbigpXG4gKiAgIC5mb3IoJ2NvbXBvbmVudCcpXG4gKiAgIC5kZWZpbmUoY3VzdG9tQ29tcG9uZW50RGVjb3JhdG9yKTtcbiAqXG4gKiAvLyBDcmVhdGUgYSBmbGF2b3VyZWQgZGVjb3JhdGlvblxuICogY29uc3QgdnVlQ29tcG9uZW50ID0gbmV3IERlY29yYXRpb24oJ3Z1ZScpXG4gKiAgIC5mb3IoJ2NvbXBvbmVudCcpXG4gKiAgIC5kZWZpbmUodnVlQ29tcG9uZW50RGVjb3JhdG9yKTtcbiAqXG4gKiAvLyBBcHBseSB0aGUgZGVjb3JhdGlvblxuICogQGNvbXBvbmVudERlY29yYXRvclxuICogY2xhc3MgTXlDb21wb25lbnQge31cbiAqIGBgYFxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDIGFzIENsaWVudFxuICogICBwYXJ0aWNpcGFudCBEIGFzIERlY29yYXRpb25cbiAqICAgcGFydGljaXBhbnQgUiBhcyBGbGF2b3VyUmVzb2x2ZXJcbiAqICAgcGFydGljaXBhbnQgRiBhcyBEZWNvcmF0b3JGYWN0b3J5XG4gKlxuICogICBDLT4+RDogbmV3IERlY29yYXRpb24oZmxhdm91cilcbiAqICAgQy0+PkQ6IGZvcihrZXkpXG4gKiAgIEMtPj5EOiBkZWZpbmUoZGVjb3JhdG9ycylcbiAqICAgRC0+PkQ6IHJlZ2lzdGVyKGtleSwgZmxhdm91ciwgZGVjb3JhdG9ycylcbiAqICAgRC0+PkY6IGRlY29yYXRvckZhY3Rvcnkoa2V5LCBmbGF2b3VyKVxuICogICBGLT4+UjogcmVzb2x2ZSh0YXJnZXQpXG4gKiAgIFItLT4+RjogcmVzb2x2ZWQgZmxhdm91clxuICogICBGLT4+RjogYXBwbHkgZGVjb3JhdG9yc1xuICogICBGLS0+PkM6IGRlY29yYXRlZCB0YXJnZXRcbiAqL1xuZXhwb3J0IGNsYXNzIERlY29yYXRpb24gaW1wbGVtZW50cyBJRGVjb3JhdGlvbkJ1aWxkZXIge1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFN0YXRpYyBtYXAgb2YgcmVnaXN0ZXJlZCBkZWNvcmF0b3JzXG4gICAqIEBzdW1tYXJ5IFN0b3JlcyBhbGwgcmVnaXN0ZXJlZCBkZWNvcmF0b3JzIG9yZ2FuaXplZCBieSBrZXkgYW5kIGZsYXZvdXJcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGRlY29yYXRvcnM6IFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAgUmVjb3JkPFxuICAgICAgc3RyaW5nLFxuICAgICAge1xuICAgICAgICBkZWNvcmF0b3JzPzogU2V0PENsYXNzRGVjb3JhdG9yIHwgUHJvcGVydHlEZWNvcmF0b3IgfCBNZXRob2REZWNvcmF0b3I+O1xuICAgICAgICBleHRyYXM/OiBTZXQ8Q2xhc3NEZWNvcmF0b3IgfCBQcm9wZXJ0eURlY29yYXRvciB8IE1ldGhvZERlY29yYXRvcj47XG4gICAgICB9XG4gICAgPlxuICA+ID0ge307XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBGdW5jdGlvbiB0byByZXNvbHZlIGZsYXZvdXIgZnJvbSBhIHRhcmdldFxuICAgKiBAc3VtbWFyeSBSZXNvbHZlciBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgdGhlIGFwcHJvcHJpYXRlIGZsYXZvdXIgZm9yIGEgZ2l2ZW4gdGFyZ2V0XG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBmbGF2b3VyUmVzb2x2ZXI6IEZsYXZvdXJSZXNvbHZlciA9IGRlZmF1bHRGbGF2b3VyUmVzb2x2ZXI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXQgb2YgZGVjb3JhdG9ycyBmb3IgdGhlIGN1cnJlbnQgY29udGV4dFxuICAgKi9cbiAgcHJpdmF0ZSBkZWNvcmF0b3JzPzogU2V0PFxuICAgIENsYXNzRGVjb3JhdG9yIHwgUHJvcGVydHlEZWNvcmF0b3IgfCBNZXRob2REZWNvcmF0b3JcbiAgPjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldCBvZiBhZGRpdGlvbmFsIGRlY29yYXRvcnNcbiAgICovXG4gIHByaXZhdGUgZXh0cmFzPzogU2V0PENsYXNzRGVjb3JhdG9yIHwgUHJvcGVydHlEZWNvcmF0b3IgfCBNZXRob2REZWNvcmF0b3I+O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3VycmVudCBkZWNvcmF0b3Iga2V5XG4gICAqL1xuICBwcml2YXRlIGtleT86IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZsYXZvdXI6IHN0cmluZyA9IERlZmF1bHRGbGF2b3VyKSB7fVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUga2V5IGZvciB0aGUgZGVjb3JhdGlvbiBidWlsZGVyXG4gICAqIEBzdW1tYXJ5IEluaXRpYWxpemVzIGEgbmV3IGRlY29yYXRpb24gY2hhaW4gd2l0aCB0aGUgc3BlY2lmaWVkIGtleVxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBpZGVudGlmaWVyIGZvciB0aGUgZGVjb3JhdG9yXG4gICAqIEByZXR1cm4ge0RlY29yYXRpb25CdWlsZGVyTWlkfSBCdWlsZGVyIGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmdcbiAgICovXG4gIGZvcihrZXk6IHN0cmluZyk6IERlY29yYXRpb25CdWlsZGVyTWlkIHtcbiAgICB0aGlzLmtleSA9IGtleTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQWRkcyBkZWNvcmF0b3JzIHRvIHRoZSBjdXJyZW50IGNvbnRleHRcbiAgICogQHN1bW1hcnkgSW50ZXJuYWwgbWV0aG9kIHRvIGFkZCBkZWNvcmF0b3JzIHdpdGggYWRkb24gc3VwcG9ydFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthZGRvbj1mYWxzZV0gV2hldGhlciB0aGUgZGVjb3JhdG9ycyBhcmUgYWRkb25zXG4gICAqIEBwYXJhbSBkZWNvcmF0b3JzIEFycmF5IG9mIGRlY29yYXRvcnNcbiAgICogQHJldHVybiB7dGhpc30gQ3VycmVudCBpbnN0YW5jZSBmb3IgY2hhaW5pbmdcbiAgICovXG4gIHByaXZhdGUgZGVjb3JhdGUoXG4gICAgYWRkb246IGJvb2xlYW4gPSBmYWxzZSxcbiAgICAuLi5kZWNvcmF0b3JzOiAoQ2xhc3NEZWNvcmF0b3IgfCBQcm9wZXJ0eURlY29yYXRvciB8IE1ldGhvZERlY29yYXRvcilbXVxuICApOiB0aGlzIHtcbiAgICBpZiAoIXRoaXMua2V5KVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwia2V5IG11c3QgYmUgcHJvdmlkZWQgYmVmb3JlIGRlY29yYXRvcnMgY2FuIGJlIGFkZGVkXCIpO1xuICAgIGlmIChcbiAgICAgICghZGVjb3JhdG9ycyB8fCAhZGVjb3JhdG9ycy5sZW5ndGgpICYmXG4gICAgICAhYWRkb24gJiZcbiAgICAgIHRoaXMuZmxhdm91ciAhPT0gRGVmYXVsdEZsYXZvdXJcbiAgICApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiTXVzdCBwcm92aWRlIG92ZXJyaWRlcyBvciBhZGRvbnMgdG8gb3ZlcnJpZGUgb3IgZXh0ZW5kIGRlY2FmJ3MgZGVjb3JhdG9yc1wiXG4gICAgICApO1xuICAgIGlmICh0aGlzLmZsYXZvdXIgPT09IERlZmF1bHRGbGF2b3VyICYmIGFkZG9uKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGVmYXVsdCBmbGF2b3VyIGNhbm5vdCBiZSBleHRlbmRlZFwiKTtcblxuICAgIHRoaXNbYWRkb24gPyBcImV4dHJhc1wiIDogXCJkZWNvcmF0b3JzXCJdID0gbmV3IFNldChbXG4gICAgICAuLi4odGhpc1thZGRvbiA/IFwiZXh0cmFzXCIgOiBcImRlY29yYXRvcnNcIl0gfHwgbmV3IFNldCgpKS52YWx1ZXMoKSxcbiAgICAgIC4uLmRlY29yYXRvcnMsXG4gICAgXSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRGVmaW5lcyB0aGUgYmFzZSBkZWNvcmF0b3JzXG4gICAqIEBzdW1tYXJ5IFNldHMgdGhlIHByaW1hcnkgZGVjb3JhdG9ycyBmb3IgdGhlIGN1cnJlbnQgY29udGV4dFxuICAgKiBAcGFyYW0gZGVjb3JhdG9ycyBEZWNvcmF0b3JzIHRvIGRlZmluZVxuICAgKiBAcmV0dXJuIEJ1aWxkZXIgaW5zdGFuY2UgZm9yIGZpbmlzaGluZyB0aGUgY2hhaW5cbiAgICovXG4gIGRlZmluZShcbiAgICAuLi5kZWNvcmF0b3JzOiAoQ2xhc3NEZWNvcmF0b3IgfCBQcm9wZXJ0eURlY29yYXRvciB8IE1ldGhvZERlY29yYXRvcilbXVxuICApOiBEZWNvcmF0aW9uQnVpbGRlckVuZCAmIERlY29yYXRpb25CdWlsZGVyQnVpbGQge1xuICAgIHJldHVybiB0aGlzLmRlY29yYXRlKGZhbHNlLCAuLi5kZWNvcmF0b3JzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXh0ZW5kcyBleGlzdGluZyBkZWNvcmF0b3JzXG4gICAqIEBzdW1tYXJ5IEFkZHMgYWRkaXRpb25hbCBkZWNvcmF0b3JzIHRvIHRoZSBjdXJyZW50IGNvbnRleHRcbiAgICogQHBhcmFtIGRlY29yYXRvcnMgQWRkaXRpb25hbCBkZWNvcmF0b3JzXG4gICAqIEByZXR1cm4ge0RlY29yYXRpb25CdWlsZGVyQnVpbGR9IEJ1aWxkZXIgaW5zdGFuY2UgZm9yIGJ1aWxkaW5nIHRoZSBkZWNvcmF0b3JcbiAgICovXG4gIGV4dGVuZChcbiAgICAuLi5kZWNvcmF0b3JzOiAoQ2xhc3NEZWNvcmF0b3IgfCBQcm9wZXJ0eURlY29yYXRvciB8IE1ldGhvZERlY29yYXRvcilbXVxuICApOiBEZWNvcmF0aW9uQnVpbGRlckJ1aWxkIHtcbiAgICByZXR1cm4gdGhpcy5kZWNvcmF0ZSh0cnVlLCAuLi5kZWNvcmF0b3JzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBkZWNvcmF0b3JGYWN0b3J5KGtleTogc3RyaW5nLCBmOiBzdHJpbmcgPSBEZWZhdWx0Rmxhdm91cikge1xuICAgIGNvbnN0IGNvbnRleHREZWNvcmF0b3IgPSBmdW5jdGlvbiBjb250ZXh0RGVjb3JhdG9yKFxuICAgICAgdGFyZ2V0OiBvYmplY3QsXG4gICAgICBwcm9wZXJ0eUtleT86IGFueSxcbiAgICAgIGRlc2NyaXB0b3I/OiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjxhbnk+XG4gICAgKSB7XG4gICAgICBjb25zdCBmbGF2b3VyID0gRGVjb3JhdGlvbi5mbGF2b3VyUmVzb2x2ZXIodGFyZ2V0KTtcbiAgICAgIGxldCBkZWNvcmF0b3JzO1xuICAgICAgY29uc3QgZXh0cmFzID0gRGVjb3JhdGlvbi5kZWNvcmF0b3JzW2tleV1bZmxhdm91cl1cbiAgICAgICAgPyBEZWNvcmF0aW9uLmRlY29yYXRvcnNba2V5XVtmbGF2b3VyXS5leHRyYXNcbiAgICAgICAgOiBEZWNvcmF0aW9uLmRlY29yYXRvcnNba2V5XVtEZWZhdWx0Rmxhdm91cl0uZXh0cmFzO1xuICAgICAgaWYgKFxuICAgICAgICBEZWNvcmF0aW9uLmRlY29yYXRvcnNba2V5XSAmJlxuICAgICAgICBEZWNvcmF0aW9uLmRlY29yYXRvcnNba2V5XVtmbGF2b3VyXSAmJlxuICAgICAgICBEZWNvcmF0aW9uLmRlY29yYXRvcnNba2V5XVtmbGF2b3VyXS5kZWNvcmF0b3JzXG4gICAgICApIHtcbiAgICAgICAgZGVjb3JhdG9ycyA9IERlY29yYXRpb24uZGVjb3JhdG9yc1trZXldW2ZsYXZvdXJdLmRlY29yYXRvcnM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWNvcmF0b3JzID0gRGVjb3JhdGlvbi5kZWNvcmF0b3JzW2tleV1bRGVmYXVsdEZsYXZvdXJdLmRlY29yYXRvcnM7XG4gICAgICB9XG4gICAgICBbXG4gICAgICAgIC4uLihkZWNvcmF0b3JzID8gZGVjb3JhdG9ycy52YWx1ZXMoKSA6IFtdKSxcbiAgICAgICAgLi4uKGV4dHJhcyA/IGV4dHJhcy52YWx1ZXMoKSA6IFtdKSxcbiAgICAgIF0uZm9yRWFjaCgoZCkgPT4gKGQgYXMgYW55KSh0YXJnZXQsIHByb3BlcnR5S2V5LCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yKSk7XG4gICAgICAvLyByZXR1cm4gYXBwbHkoXG4gICAgICAvL1xuICAgICAgLy8gKSh0YXJnZXQsIHByb3BlcnR5S2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb250ZXh0RGVjb3JhdG9yLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IFtmLCBrZXldLmpvaW4oXCJfZGVjb3JhdG9yX2Zvcl9cIiksXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgfSk7XG4gICAgcmV0dXJuIGNvbnRleHREZWNvcmF0b3I7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgdGhlIGZpbmFsIGRlY29yYXRvciBmdW5jdGlvblxuICAgKiBAc3VtbWFyeSBCdWlsZHMgYW5kIHJldHVybnMgdGhlIGRlY29yYXRvciBmYWN0b3J5IGZ1bmN0aW9uXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9uKGFueSwgYW55PywgVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I/KTogYW55fSBUaGUgZ2VuZXJhdGVkIGRlY29yYXRvciBmdW5jdGlvblxuICAgKi9cbiAgYXBwbHkoKTogKFxuICAgIHRhcmdldDogYW55LFxuICAgIHByb3BlcnR5S2V5PzogYW55LFxuICAgIGRlc2NyaXB0b3I/OiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjxhbnk+XG4gICkgPT4gYW55IHtcbiAgICBpZiAoIXRoaXMua2V5KVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8ga2V5IHByb3ZpZGVkIGZvciB0aGUgZGVjb3JhdGlvbiBidWlsZGVyXCIpO1xuICAgIERlY29yYXRpb24ucmVnaXN0ZXIodGhpcy5rZXksIHRoaXMuZmxhdm91ciwgdGhpcy5kZWNvcmF0b3JzLCB0aGlzLmV4dHJhcyk7XG4gICAgcmV0dXJuIHRoaXMuZGVjb3JhdG9yRmFjdG9yeSh0aGlzLmtleSwgdGhpcy5mbGF2b3VyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVnaXN0ZXJzIGRlY29yYXRvcnMgZm9yIGEgc3BlY2lmaWMga2V5IGFuZCBmbGF2b3VyXG4gICAqIEBzdW1tYXJ5IEludGVybmFsIG1ldGhvZCB0byBzdG9yZSBkZWNvcmF0b3JzIGluIHRoZSBzdGF0aWMgcmVnaXN0cnlcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBEZWNvcmF0b3Iga2V5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmbGF2b3VyIERlY29yYXRvciBmbGF2b3VyXG4gICAqIEBwYXJhbSBbZGVjb3JhdG9yc10gUHJpbWFyeSBkZWNvcmF0b3JzXG4gICAqIEBwYXJhbSBbZXh0cmFzXSBBZGRpdGlvbmFsIGRlY29yYXRvcnNcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHJlZ2lzdGVyKFxuICAgIGtleTogc3RyaW5nLFxuICAgIGZsYXZvdXI6IHN0cmluZyxcbiAgICBkZWNvcmF0b3JzPzogU2V0PENsYXNzRGVjb3JhdG9yIHwgUHJvcGVydHlEZWNvcmF0b3IgfCBNZXRob2REZWNvcmF0b3I+LFxuICAgIGV4dHJhcz86IFNldDxDbGFzc0RlY29yYXRvciB8IFByb3BlcnR5RGVjb3JhdG9yIHwgTWV0aG9kRGVjb3JhdG9yPlxuICApIHtcbiAgICBpZiAoIWtleSkgdGhyb3cgbmV3IEVycm9yKFwiTm8ga2V5IHByb3ZpZGVkIGZvciB0aGUgZGVjb3JhdGlvbiBidWlsZGVyXCIpO1xuICAgIGlmICghZGVjb3JhdG9ycylcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGRlY29yYXRvcnMgcHJvdmlkZWQgZm9yIHRoZSBkZWNvcmF0aW9uIGJ1aWxkZXJcIik7XG4gICAgaWYgKCFmbGF2b3VyKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZmxhdm91ciBwcm92aWRlZCBmb3IgdGhlIGRlY29yYXRpb24gYnVpbGRlclwiKTtcblxuICAgIGlmICghRGVjb3JhdGlvbi5kZWNvcmF0b3JzW2tleV0pIERlY29yYXRpb24uZGVjb3JhdG9yc1trZXldID0ge307XG4gICAgaWYgKCFEZWNvcmF0aW9uLmRlY29yYXRvcnNba2V5XVtmbGF2b3VyXSlcbiAgICAgIERlY29yYXRpb24uZGVjb3JhdG9yc1trZXldW2ZsYXZvdXJdID0ge307XG4gICAgaWYgKGRlY29yYXRvcnMpIERlY29yYXRpb24uZGVjb3JhdG9yc1trZXldW2ZsYXZvdXJdLmRlY29yYXRvcnMgPSBkZWNvcmF0b3JzO1xuICAgIGlmIChleHRyYXMpIERlY29yYXRpb24uZGVjb3JhdG9yc1trZXldW2ZsYXZvdXJdLmV4dHJhcyA9IGV4dHJhcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgZ2xvYmFsIGZsYXZvdXIgcmVzb2x2ZXJcbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgZnVuY3Rpb24gdXNlZCB0byBkZXRlcm1pbmUgZGVjb3JhdG9yIGZsYXZvdXJzXG4gICAqIEBwYXJhbSB7Rmxhdm91clJlc29sdmVyfSByZXNvbHZlciBGdW5jdGlvbiB0byByZXNvbHZlIGZsYXZvdXJzXG4gICAqL1xuICBzdGF0aWMgc2V0Rmxhdm91clJlc29sdmVyKHJlc29sdmVyOiBGbGF2b3VyUmVzb2x2ZXIpIHtcbiAgICBEZWNvcmF0aW9uLmZsYXZvdXJSZXNvbHZlciA9IHJlc29sdmVyO1xuICB9XG5cbiAgc3RhdGljIGZvcihrZXk6IHN0cmluZyk6IERlY29yYXRpb25CdWlsZGVyTWlkIHtcbiAgICByZXR1cm4gbmV3IERlY29yYXRpb24oKS5mb3Ioa2V5KTtcbiAgfVxuXG4gIHN0YXRpYyBmbGF2b3VyZWRBcyhmbGF2b3VyOiBzdHJpbmcpOiBEZWNvcmF0aW9uQnVpbGRlclN0YXJ0IHtcbiAgICByZXR1cm4gbmV3IERlY29yYXRpb24oZmxhdm91cik7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { DecorationBuilderBuild, DecorationBuilderEnd, DecorationBuilderMid, DecorationBuilderStart, FlavourResolver, IDecorationBuilder } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* @description A decorator management class that handles flavoured decorators
|
|
4
|
+
* @summary The Decoration class provides a builder pattern for creating and managing decorators with different flavours.
|
|
5
|
+
* It supports registering, extending, and applying decorators with context-aware flavour resolution.
|
|
6
|
+
* The class implements a fluent interface for defining, extending, and applying decorators with different flavours,
|
|
7
|
+
* allowing for framework-specific decorator implementations while maintaining a consistent API.
|
|
8
|
+
* @template T Type of the decorator (ClassDecorator | PropertyDecorator | MethodDecorator)
|
|
9
|
+
* @param {string} [flavour] Optional flavour parameter for the decorator context
|
|
10
|
+
* @class
|
|
11
|
+
* @category Model
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* // Create a new decoration for 'component' with default flavour
|
|
15
|
+
* const componentDecorator = new Decoration()
|
|
16
|
+
* .for('component')
|
|
17
|
+
* .define(customComponentDecorator);
|
|
18
|
+
*
|
|
19
|
+
* // Create a flavoured decoration
|
|
20
|
+
* const vueComponent = new Decoration('vue')
|
|
21
|
+
* .for('component')
|
|
22
|
+
* .define(vueComponentDecorator);
|
|
23
|
+
*
|
|
24
|
+
* // Apply the decoration
|
|
25
|
+
* @componentDecorator
|
|
26
|
+
* class MyComponent {}
|
|
27
|
+
* ```
|
|
28
|
+
* @mermaid
|
|
29
|
+
* sequenceDiagram
|
|
30
|
+
* participant C as Client
|
|
31
|
+
* participant D as Decoration
|
|
32
|
+
* participant R as FlavourResolver
|
|
33
|
+
* participant F as DecoratorFactory
|
|
34
|
+
*
|
|
35
|
+
* C->>D: new Decoration(flavour)
|
|
36
|
+
* C->>D: for(key)
|
|
37
|
+
* C->>D: define(decorators)
|
|
38
|
+
* D->>D: register(key, flavour, decorators)
|
|
39
|
+
* D->>F: decoratorFactory(key, flavour)
|
|
40
|
+
* F->>R: resolve(target)
|
|
41
|
+
* R-->>F: resolved flavour
|
|
42
|
+
* F->>F: apply decorators
|
|
43
|
+
* F-->>C: decorated target
|
|
44
|
+
*/
|
|
45
|
+
export declare class Decoration implements IDecorationBuilder {
|
|
46
|
+
private flavour;
|
|
47
|
+
/**
|
|
48
|
+
* @description Static map of registered decorators
|
|
49
|
+
* @summary Stores all registered decorators organized by key and flavour
|
|
50
|
+
*/
|
|
51
|
+
private static decorators;
|
|
52
|
+
/**
|
|
53
|
+
* @description Function to resolve flavour from a target
|
|
54
|
+
* @summary Resolver function that determines the appropriate flavour for a given target
|
|
55
|
+
*/
|
|
56
|
+
private static flavourResolver;
|
|
57
|
+
/**
|
|
58
|
+
* @description Set of decorators for the current context
|
|
59
|
+
*/
|
|
60
|
+
private decorators?;
|
|
61
|
+
/**
|
|
62
|
+
* @description Set of additional decorators
|
|
63
|
+
*/
|
|
64
|
+
private extras?;
|
|
65
|
+
/**
|
|
66
|
+
* @description Current decorator key
|
|
67
|
+
*/
|
|
68
|
+
private key?;
|
|
69
|
+
constructor(flavour?: string);
|
|
70
|
+
/**
|
|
71
|
+
* @description Sets the key for the decoration builder
|
|
72
|
+
* @summary Initializes a new decoration chain with the specified key
|
|
73
|
+
* @param {string} key The identifier for the decorator
|
|
74
|
+
* @return {DecorationBuilderMid} Builder instance for method chaining
|
|
75
|
+
*/
|
|
76
|
+
for(key: string): DecorationBuilderMid;
|
|
77
|
+
/**
|
|
78
|
+
* @description Adds decorators to the current context
|
|
79
|
+
* @summary Internal method to add decorators with addon support
|
|
80
|
+
* @param {boolean} [addon=false] Whether the decorators are addons
|
|
81
|
+
* @param decorators Array of decorators
|
|
82
|
+
* @return {this} Current instance for chaining
|
|
83
|
+
*/
|
|
84
|
+
private decorate;
|
|
85
|
+
/**
|
|
86
|
+
* @description Defines the base decorators
|
|
87
|
+
* @summary Sets the primary decorators for the current context
|
|
88
|
+
* @param decorators Decorators to define
|
|
89
|
+
* @return Builder instance for finishing the chain
|
|
90
|
+
*/
|
|
91
|
+
define(...decorators: (ClassDecorator | PropertyDecorator | MethodDecorator)[]): DecorationBuilderEnd & DecorationBuilderBuild;
|
|
92
|
+
/**
|
|
93
|
+
* @description Extends existing decorators
|
|
94
|
+
* @summary Adds additional decorators to the current context
|
|
95
|
+
* @param decorators Additional decorators
|
|
96
|
+
* @return {DecorationBuilderBuild} Builder instance for building the decorator
|
|
97
|
+
*/
|
|
98
|
+
extend(...decorators: (ClassDecorator | PropertyDecorator | MethodDecorator)[]): DecorationBuilderBuild;
|
|
99
|
+
protected decoratorFactory(key: string, f?: string): (target: object, propertyKey?: any, descriptor?: TypedPropertyDescriptor<any>) => void;
|
|
100
|
+
/**
|
|
101
|
+
* @description Creates the final decorator function
|
|
102
|
+
* @summary Builds and returns the decorator factory function
|
|
103
|
+
* @return {function(any, any?, TypedPropertyDescriptor?): any} The generated decorator function
|
|
104
|
+
*/
|
|
105
|
+
apply(): (target: any, propertyKey?: any, descriptor?: TypedPropertyDescriptor<any>) => any;
|
|
106
|
+
/**
|
|
107
|
+
* @description Registers decorators for a specific key and flavour
|
|
108
|
+
* @summary Internal method to store decorators in the static registry
|
|
109
|
+
* @param {string} key Decorator key
|
|
110
|
+
* @param {string} flavour Decorator flavour
|
|
111
|
+
* @param [decorators] Primary decorators
|
|
112
|
+
* @param [extras] Additional decorators
|
|
113
|
+
*/
|
|
114
|
+
private static register;
|
|
115
|
+
/**
|
|
116
|
+
* @description Sets the global flavour resolver
|
|
117
|
+
* @summary Configures the function used to determine decorator flavours
|
|
118
|
+
* @param {FlavourResolver} resolver Function to resolve flavours
|
|
119
|
+
*/
|
|
120
|
+
static setFlavourResolver(resolver: FlavourResolver): void;
|
|
121
|
+
static for(key: string): DecorationBuilderMid;
|
|
122
|
+
static flavouredAs(flavour: string): DecorationBuilderStart;
|
|
123
|
+
}
|
package/lib/utils/constants.cjs
CHANGED
|
@@ -1,18 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ModelKeys = void 0;
|
|
3
|
+
exports.DefaultFlavour = exports.ModelKeys = void 0;
|
|
4
4
|
/**
|
|
5
|
-
* @
|
|
5
|
+
* @description Enum containing metadata keys used for reflection in the model system
|
|
6
|
+
* @summary Defines the various Model keys used for reflection and metadata storage.
|
|
7
|
+
* These keys are used throughout the library to store and retrieve metadata about models,
|
|
8
|
+
* their properties, and their behavior.
|
|
6
9
|
*
|
|
7
|
-
* @property {string} REFLECT
|
|
8
|
-
* @property {string} TYPE type
|
|
9
|
-
* @property {string} PARAMS method
|
|
10
|
-
* @property {string} RETURN method return
|
|
11
|
-
* @property {string} MODEL model
|
|
12
|
-
* @property {string} ANCHOR
|
|
10
|
+
* @property {string} REFLECT - Prefix to all other keys, used as a namespace
|
|
11
|
+
* @property {string} TYPE - Key for storing design type information
|
|
12
|
+
* @property {string} PARAMS - Key for storing method parameter types
|
|
13
|
+
* @property {string} RETURN - Key for storing method return type
|
|
14
|
+
* @property {string} MODEL - Key for identifying model metadata
|
|
15
|
+
* @property {string} ANCHOR - Anchor key that serves as a ghost property in the model
|
|
16
|
+
* @property {string} CONSTRUCTION - Key for storing construction information
|
|
17
|
+
* @property {string} ATTRIBUTE - Key for storing attribute metadata
|
|
18
|
+
* @property {string} HASHING - Key for storing hashing configuration
|
|
19
|
+
* @property {string} SERIALIZATION - Key for storing serialization configuration
|
|
13
20
|
*
|
|
14
|
-
* @
|
|
15
|
-
* @
|
|
21
|
+
* @readonly
|
|
22
|
+
* @enum {string}
|
|
23
|
+
* @memberOf module:decorator-validation
|
|
16
24
|
* @category Model
|
|
17
25
|
*/
|
|
18
26
|
var ModelKeys;
|
|
@@ -28,4 +36,14 @@ var ModelKeys;
|
|
|
28
36
|
ModelKeys["HASHING"] = "hashing";
|
|
29
37
|
ModelKeys["SERIALIZATION"] = "serialization";
|
|
30
38
|
})(ModelKeys || (exports.ModelKeys = ModelKeys = {}));
|
|
31
|
-
|
|
39
|
+
/**
|
|
40
|
+
* @description Default flavour identifier for the decorator system
|
|
41
|
+
* @summary Defines the default flavour used by the Decoration class when no specific flavour is provided.
|
|
42
|
+
* This constant is used throughout the library as the fallback flavour for decorators.
|
|
43
|
+
*
|
|
44
|
+
* @const {string}
|
|
45
|
+
* @memberOf module:decorator-validation
|
|
46
|
+
* @category Model
|
|
47
|
+
*/
|
|
48
|
+
exports.DefaultFlavour = "decaf";
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBQ0gsSUFBWSxTQVdYO0FBWEQsV0FBWSxTQUFTO0lBQ25CLHFDQUF3QixDQUFBO0lBQ3hCLGlDQUFvQixDQUFBO0lBQ3BCLHlDQUE0QixDQUFBO0lBQzVCLHlDQUE0QixDQUFBO0lBQzVCLDRCQUFlLENBQUE7SUFDZiwrQkFBa0IsQ0FBQTtJQUNsQiw0Q0FBK0IsQ0FBQTtJQUMvQix1Q0FBMEIsQ0FBQTtJQUMxQixnQ0FBbUIsQ0FBQTtJQUNuQiw0Q0FBK0IsQ0FBQTtBQUNqQyxDQUFDLEVBWFcsU0FBUyx5QkFBVCxTQUFTLFFBV3BCO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDVSxRQUFBLGNBQWMsR0FBRyxPQUFPLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBkZXNjcmlwdGlvbiBFbnVtIGNvbnRhaW5pbmcgbWV0YWRhdGEga2V5cyB1c2VkIGZvciByZWZsZWN0aW9uIGluIHRoZSBtb2RlbCBzeXN0ZW1cbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIHZhcmlvdXMgTW9kZWwga2V5cyB1c2VkIGZvciByZWZsZWN0aW9uIGFuZCBtZXRhZGF0YSBzdG9yYWdlLlxuICogVGhlc2Uga2V5cyBhcmUgdXNlZCB0aHJvdWdob3V0IHRoZSBsaWJyYXJ5IHRvIHN0b3JlIGFuZCByZXRyaWV2ZSBtZXRhZGF0YSBhYm91dCBtb2RlbHMsXG4gKiB0aGVpciBwcm9wZXJ0aWVzLCBhbmQgdGhlaXIgYmVoYXZpb3IuXG4gKlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFJFRkxFQ1QgLSBQcmVmaXggdG8gYWxsIG90aGVyIGtleXMsIHVzZWQgYXMgYSBuYW1lc3BhY2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBUWVBFIC0gS2V5IGZvciBzdG9yaW5nIGRlc2lnbiB0eXBlIGluZm9ybWF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gUEFSQU1TIC0gS2V5IGZvciBzdG9yaW5nIG1ldGhvZCBwYXJhbWV0ZXIgdHlwZXNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBSRVRVUk4gLSBLZXkgZm9yIHN0b3JpbmcgbWV0aG9kIHJldHVybiB0eXBlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gTU9ERUwgLSBLZXkgZm9yIGlkZW50aWZ5aW5nIG1vZGVsIG1ldGFkYXRhXG4gKiBAcHJvcGVydHkge3N0cmluZ30gQU5DSE9SIC0gQW5jaG9yIGtleSB0aGF0IHNlcnZlcyBhcyBhIGdob3N0IHByb3BlcnR5IGluIHRoZSBtb2RlbFxuICogQHByb3BlcnR5IHtzdHJpbmd9IENPTlNUUlVDVElPTiAtIEtleSBmb3Igc3RvcmluZyBjb25zdHJ1Y3Rpb24gaW5mb3JtYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBBVFRSSUJVVEUgLSBLZXkgZm9yIHN0b3JpbmcgYXR0cmlidXRlIG1ldGFkYXRhXG4gKiBAcHJvcGVydHkge3N0cmluZ30gSEFTSElORyAtIEtleSBmb3Igc3RvcmluZyBoYXNoaW5nIGNvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBTRVJJQUxJWkFUSU9OIC0gS2V5IGZvciBzdG9yaW5nIHNlcmlhbGl6YXRpb24gY29uZmlndXJhdGlvblxuICpcbiAqIEByZWFkb25seVxuICogQGVudW0ge3N0cmluZ31cbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBNb2RlbFxuICovXG5leHBvcnQgZW51bSBNb2RlbEtleXMge1xuICBSRUZMRUNUID0gXCJkZWNhZi5tb2RlbC5cIixcbiAgVFlQRSA9IFwiZGVzaWduOnR5cGVcIixcbiAgUEFSQU1TID0gXCJkZXNpZ246cGFyYW10eXBlc1wiLFxuICBSRVRVUk4gPSBcImRlc2lnbjpyZXR1cm50eXBlXCIsXG4gIE1PREVMID0gXCJtb2RlbFwiLFxuICBBTkNIT1IgPSBcIl9fbW9kZWxcIixcbiAgQ09OU1RSVUNUSU9OID0gXCJjb25zdHJ1Y3RlZC1ieVwiLFxuICBBVFRSSUJVVEUgPSBcIl9fYXR0cmlidXRlc1wiLFxuICBIQVNISU5HID0gXCJoYXNoaW5nXCIsXG4gIFNFUklBTElaQVRJT04gPSBcInNlcmlhbGl6YXRpb25cIixcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVmYXVsdCBmbGF2b3VyIGlkZW50aWZpZXIgZm9yIHRoZSBkZWNvcmF0b3Igc3lzdGVtXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBkZWZhdWx0IGZsYXZvdXIgdXNlZCBieSB0aGUgRGVjb3JhdGlvbiBjbGFzcyB3aGVuIG5vIHNwZWNpZmljIGZsYXZvdXIgaXMgcHJvdmlkZWQuXG4gKiBUaGlzIGNvbnN0YW50IGlzIHVzZWQgdGhyb3VnaG91dCB0aGUgbGlicmFyeSBhcyB0aGUgZmFsbGJhY2sgZmxhdm91ciBmb3IgZGVjb3JhdG9ycy5cbiAqXG4gKiBAY29uc3Qge3N0cmluZ31cbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBNb2RlbFxuICovXG5leHBvcnQgY29uc3QgRGVmYXVsdEZsYXZvdXIgPSBcImRlY2FmXCI7XG4iXX0=
|
package/lib/utils/constants.d.ts
CHANGED
|
@@ -1,15 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @
|
|
2
|
+
* @description Enum containing metadata keys used for reflection in the model system
|
|
3
|
+
* @summary Defines the various Model keys used for reflection and metadata storage.
|
|
4
|
+
* These keys are used throughout the library to store and retrieve metadata about models,
|
|
5
|
+
* their properties, and their behavior.
|
|
3
6
|
*
|
|
4
|
-
* @property {string} REFLECT
|
|
5
|
-
* @property {string} TYPE type
|
|
6
|
-
* @property {string} PARAMS method
|
|
7
|
-
* @property {string} RETURN method return
|
|
8
|
-
* @property {string} MODEL model
|
|
9
|
-
* @property {string} ANCHOR
|
|
7
|
+
* @property {string} REFLECT - Prefix to all other keys, used as a namespace
|
|
8
|
+
* @property {string} TYPE - Key for storing design type information
|
|
9
|
+
* @property {string} PARAMS - Key for storing method parameter types
|
|
10
|
+
* @property {string} RETURN - Key for storing method return type
|
|
11
|
+
* @property {string} MODEL - Key for identifying model metadata
|
|
12
|
+
* @property {string} ANCHOR - Anchor key that serves as a ghost property in the model
|
|
13
|
+
* @property {string} CONSTRUCTION - Key for storing construction information
|
|
14
|
+
* @property {string} ATTRIBUTE - Key for storing attribute metadata
|
|
15
|
+
* @property {string} HASHING - Key for storing hashing configuration
|
|
16
|
+
* @property {string} SERIALIZATION - Key for storing serialization configuration
|
|
10
17
|
*
|
|
11
|
-
* @
|
|
12
|
-
* @
|
|
18
|
+
* @readonly
|
|
19
|
+
* @enum {string}
|
|
20
|
+
* @memberOf module:decorator-validation
|
|
13
21
|
* @category Model
|
|
14
22
|
*/
|
|
15
23
|
export declare enum ModelKeys {
|
|
@@ -24,3 +32,13 @@ export declare enum ModelKeys {
|
|
|
24
32
|
HASHING = "hashing",
|
|
25
33
|
SERIALIZATION = "serialization"
|
|
26
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* @description Default flavour identifier for the decorator system
|
|
37
|
+
* @summary Defines the default flavour used by the Decoration class when no specific flavour is provided.
|
|
38
|
+
* This constant is used throughout the library as the fallback flavour for decorators.
|
|
39
|
+
*
|
|
40
|
+
* @const {string}
|
|
41
|
+
* @memberOf module:decorator-validation
|
|
42
|
+
* @category Model
|
|
43
|
+
*/
|
|
44
|
+
export declare const DefaultFlavour = "decaf";
|