@decaf-ts/decorator-validation 1.1.1 → 1.1.4
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.bundle.min.js +1 -1
- package/dist/esm/decorator-validation.bundle.min.esm.js +1 -1
- package/lib/esm/index.d.ts +1 -2
- package/lib/esm/index.js +2 -3
- package/lib/esm/model/Model.js +2 -4
- package/lib/esm/model/Registry.js +2 -2
- package/lib/esm/model/construction.js +3 -2
- package/lib/esm/model/index.d.ts +1 -0
- package/lib/esm/model/index.js +2 -1
- package/lib/esm/model/utils.d.ts +9 -0
- package/lib/esm/model/utils.js +16 -0
- package/lib/esm/utils/index.d.ts +0 -1
- package/lib/esm/utils/index.js +1 -2
- package/lib/esm/validation/Validators/TypeValidator.js +2 -2
- package/lib/esm/validation/Validators/Validator.js +2 -2
- package/lib/esm/validation/Validators/decorators.js +2 -2
- package/lib/esm/validation/decorators.d.ts +10 -10
- package/lib/esm/validation/decorators.js +2 -2
- package/lib/esm/validation/types.d.ts +2 -14
- package/lib/esm/validation/types.js +1 -1
- package/lib/index.cjs +2 -3
- package/lib/index.d.ts +1 -2
- package/lib/model/Model.cjs +5 -7
- package/lib/model/Registry.cjs +2 -2
- package/lib/model/construction.cjs +4 -3
- package/lib/model/index.cjs +2 -1
- package/lib/model/index.d.ts +1 -0
- package/lib/model/utils.cjs +19 -0
- package/lib/model/utils.d.ts +9 -0
- package/lib/utils/index.cjs +1 -2
- package/lib/utils/index.d.ts +0 -1
- package/lib/validation/Validators/TypeValidator.cjs +5 -5
- package/lib/validation/Validators/Validator.cjs +3 -3
- package/lib/validation/Validators/decorators.cjs +2 -2
- package/lib/validation/decorators.cjs +12 -12
- package/lib/validation/decorators.d.ts +10 -10
- package/lib/validation/types.cjs +1 -1
- package/lib/validation/types.d.ts +2 -14
- package/package.json +2 -1
- package/lib/esm/reflection/decorators.d.ts +0 -27
- package/lib/esm/reflection/decorators.js +0 -51
- package/lib/esm/reflection/index.d.ts +0 -2
- package/lib/esm/reflection/index.js +0 -4
- package/lib/esm/reflection/utils.d.ts +0 -113
- package/lib/esm/reflection/utils.js +0 -239
- package/lib/esm/utils/equality.d.ts +0 -14
- package/lib/esm/utils/equality.js +0 -34
- package/lib/reflection/decorators.cjs +0 -55
- package/lib/reflection/decorators.d.ts +0 -27
- package/lib/reflection/index.cjs +0 -20
- package/lib/reflection/index.d.ts +0 -2
- package/lib/reflection/utils.cjs +0 -251
- package/lib/reflection/utils.d.ts +0 -113
- package/lib/utils/equality.cjs +0 -37
- package/lib/utils/equality.d.ts +0 -14
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import { Model } from "../model/Model";
|
|
2
|
-
import "reflect-metadata";
|
|
3
|
-
import { DecoratorMetadata } from "../validation";
|
|
4
|
-
/**
|
|
5
|
-
* @summary Util function to retrieve the decorators for the provided Property
|
|
6
|
-
*
|
|
7
|
-
* @param {string} annotationPrefix
|
|
8
|
-
* @param {any} target
|
|
9
|
-
* @param {string | symbol} propertyName
|
|
10
|
-
* @param {boolean} [ignoreType] defaults to false. decides if the {@link ModelKeys.TYPE} is ignored or not
|
|
11
|
-
* @param {boolean} [recursive] defaults to true. decides if it should climb the prototypal tree searching for more decorators on that property
|
|
12
|
-
* @param {DecoratorMetadata[]} [accumulator] used when recursive is true, to cache decorators while it climbs the prototypal tree
|
|
13
|
-
*
|
|
14
|
-
* @function getPropertyDecorators
|
|
15
|
-
* @memberOf module:decorator-validation.Reflection
|
|
16
|
-
* @category Reflection
|
|
17
|
-
*/
|
|
18
|
-
export declare function getPropertyDecorators(annotationPrefix: string, target: any, propertyName: string | symbol, ignoreType?: boolean, recursive?: boolean, accumulator?: DecoratorMetadata[]): {
|
|
19
|
-
prop: string;
|
|
20
|
-
decorators: DecoratorMetadata[];
|
|
21
|
-
};
|
|
22
|
-
/**
|
|
23
|
-
* @summary gets the prop type from the decorator
|
|
24
|
-
* @param {any} model
|
|
25
|
-
* @param {string | symbol} propKey
|
|
26
|
-
* @return {string | undefined}
|
|
27
|
-
*
|
|
28
|
-
* @function geTypeFromDecorators
|
|
29
|
-
*
|
|
30
|
-
* @memberOf module:decorator-validation.Reflection
|
|
31
|
-
*/
|
|
32
|
-
export declare function getTypeFromDecorator(model: any, propKey: string | symbol): string | undefined;
|
|
33
|
-
/**
|
|
34
|
-
* @summary Retrieves the decorators for an object's properties prefixed by {@param prefixes}
|
|
35
|
-
*
|
|
36
|
-
* @param {T} model
|
|
37
|
-
* @param {string[]} prefixes
|
|
38
|
-
*
|
|
39
|
-
* @function getAllPropertyDecorators
|
|
40
|
-
*
|
|
41
|
-
* @memberOf module:db-decorators.Reflection
|
|
42
|
-
*/
|
|
43
|
-
export declare const getAllPropertyDecorators: <T extends Model>(model: T, ...prefixes: string[]) => Record<string, any> | undefined;
|
|
44
|
-
/**
|
|
45
|
-
* @summary Retrieves all properties of an object
|
|
46
|
-
* @description
|
|
47
|
-
* - and of all its prototypes if {@param climbTree} until it reaches {@param stopAt} (or ends the prototype chain)
|
|
48
|
-
*
|
|
49
|
-
* @param obj
|
|
50
|
-
* @param {boolean} [climbTree] default to true
|
|
51
|
-
* @param {string} [stopAt] defaults to 'Object'
|
|
52
|
-
*
|
|
53
|
-
* @function getAllProperties
|
|
54
|
-
*
|
|
55
|
-
* @memberOf module:decorator-validation.Model
|
|
56
|
-
*/
|
|
57
|
-
export declare function getAllProperties(obj: Record<any, any>, climbTree?: boolean, stopAt?: string): string[];
|
|
58
|
-
/**
|
|
59
|
-
* @summary Util function to retrieve the Class decorators
|
|
60
|
-
*
|
|
61
|
-
* @function getClassDecorators
|
|
62
|
-
* @memberOf module:decorator-validation.Reflection
|
|
63
|
-
* @category Reflection
|
|
64
|
-
*/
|
|
65
|
-
export declare function getClassDecorators(annotationPrefix: string, target: any): {
|
|
66
|
-
key: string;
|
|
67
|
-
props: any;
|
|
68
|
-
}[];
|
|
69
|
-
/**
|
|
70
|
-
* @summary Util function to check a type according to a typeName
|
|
71
|
-
*
|
|
72
|
-
* @param {any} value
|
|
73
|
-
* @param {string} acceptedType
|
|
74
|
-
* @return {boolean} true for a match, false otherwise
|
|
75
|
-
*
|
|
76
|
-
* @function checkType
|
|
77
|
-
* @memberOf module:decorator-validation.Validation
|
|
78
|
-
* @category Validation
|
|
79
|
-
*/
|
|
80
|
-
export declare function checkType(value: any, acceptedType: string): any;
|
|
81
|
-
/**
|
|
82
|
-
* @summary Util function to check a type according multiple possibilities
|
|
83
|
-
* @param {any} value
|
|
84
|
-
* @param {string[]} acceptedTypes
|
|
85
|
-
* @return {boolean} true if any is a match, false otherwise
|
|
86
|
-
*
|
|
87
|
-
* @function checkTypes
|
|
88
|
-
* @memberOf module:decorator-validation.Validation
|
|
89
|
-
* @category Validation
|
|
90
|
-
*/
|
|
91
|
-
export declare function checkTypes(value: any, acceptedTypes: string[]): boolean;
|
|
92
|
-
/**
|
|
93
|
-
* @summary The model type
|
|
94
|
-
*
|
|
95
|
-
* @param {any} value
|
|
96
|
-
* @param {string | string[] | {name: string}} types
|
|
97
|
-
*
|
|
98
|
-
* @function evaluateDesignTypes
|
|
99
|
-
* @memberOf module:decorator-validation.Validation
|
|
100
|
-
* @category Validation
|
|
101
|
-
*/
|
|
102
|
-
export declare function evaluateDesignTypes(value: any, types: string | string[] | {
|
|
103
|
-
name: string;
|
|
104
|
-
}): any;
|
|
105
|
-
/**
|
|
106
|
-
* @summary For Serialization/deserialization purposes.
|
|
107
|
-
* @description Reads the {@link ModelKeys.ANCHOR} property of a {@link Model} to discover the class to instantiate
|
|
108
|
-
*
|
|
109
|
-
* @function isModel
|
|
110
|
-
* @memberOf module:decorator-validation.Validation
|
|
111
|
-
* @category Validation
|
|
112
|
-
*/
|
|
113
|
-
export declare function isModel(target: Record<string, any>): boolean;
|
|
@@ -1,239 +0,0 @@
|
|
|
1
|
-
import { ModelKeys } from "../utils/constants";
|
|
2
|
-
import { sf } from "../utils/strings";
|
|
3
|
-
import { isEqual } from "../utils/equality";
|
|
4
|
-
import "reflect-metadata";
|
|
5
|
-
/**
|
|
6
|
-
* @summary Util function to retrieve the decorators for the provided Property
|
|
7
|
-
*
|
|
8
|
-
* @param {string} annotationPrefix
|
|
9
|
-
* @param {any} target
|
|
10
|
-
* @param {string | symbol} propertyName
|
|
11
|
-
* @param {boolean} [ignoreType] defaults to false. decides if the {@link ModelKeys.TYPE} is ignored or not
|
|
12
|
-
* @param {boolean} [recursive] defaults to true. decides if it should climb the prototypal tree searching for more decorators on that property
|
|
13
|
-
* @param {DecoratorMetadata[]} [accumulator] used when recursive is true, to cache decorators while it climbs the prototypal tree
|
|
14
|
-
*
|
|
15
|
-
* @function getPropertyDecorators
|
|
16
|
-
* @memberOf module:decorator-validation.Reflection
|
|
17
|
-
* @category Reflection
|
|
18
|
-
*/
|
|
19
|
-
export function getPropertyDecorators(annotationPrefix, target, propertyName, ignoreType = false, recursive = true, accumulator) {
|
|
20
|
-
const getPropertyDecoratorsForModel = function (annotationPrefix, target, propertyName, ignoreType = false, accumulator) {
|
|
21
|
-
// get info about keys that used in current property
|
|
22
|
-
const keys = Reflect.getMetadataKeys(target, propertyName);
|
|
23
|
-
const decorators = keys
|
|
24
|
-
// filter your custom decorators
|
|
25
|
-
.filter((key) => {
|
|
26
|
-
if (ignoreType)
|
|
27
|
-
return key.toString().startsWith(annotationPrefix);
|
|
28
|
-
return (key === ModelKeys.TYPE || key.toString().startsWith(annotationPrefix));
|
|
29
|
-
})
|
|
30
|
-
.reduce((values, key) => {
|
|
31
|
-
// get metadata value.
|
|
32
|
-
const currValues = {
|
|
33
|
-
key: key !== ModelKeys.TYPE
|
|
34
|
-
? key.substring(annotationPrefix.length)
|
|
35
|
-
: key,
|
|
36
|
-
props: Reflect.getMetadata(key, target, propertyName),
|
|
37
|
-
};
|
|
38
|
-
return values.concat(currValues);
|
|
39
|
-
}, accumulator || []);
|
|
40
|
-
return {
|
|
41
|
-
prop: propertyName.toString(),
|
|
42
|
-
decorators: decorators,
|
|
43
|
-
};
|
|
44
|
-
};
|
|
45
|
-
const result = getPropertyDecoratorsForModel(annotationPrefix, target, propertyName, ignoreType, accumulator);
|
|
46
|
-
const trim = function (items) {
|
|
47
|
-
const cache = {};
|
|
48
|
-
return items.filter((item) => {
|
|
49
|
-
if (item.key in cache) {
|
|
50
|
-
if (!isEqual(item.props, cache[item.key]))
|
|
51
|
-
console.log(sf("Found a similar decorator for the {0} property of a {1} model but with different attributes. The original one will be kept", item.key, target.constructor.name));
|
|
52
|
-
return false;
|
|
53
|
-
}
|
|
54
|
-
cache[item.key.toString()] = item.props;
|
|
55
|
-
return true;
|
|
56
|
-
});
|
|
57
|
-
};
|
|
58
|
-
if (!recursive || Object.getPrototypeOf(target) === Object.prototype) {
|
|
59
|
-
return {
|
|
60
|
-
prop: result.prop,
|
|
61
|
-
decorators: trim(result.decorators),
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
// We choose to ignore type here, because in inheritance the expected type is from the lowest child class
|
|
65
|
-
return getPropertyDecorators(annotationPrefix, Object.getPrototypeOf(target.constructor), propertyName, true, recursive, result.decorators);
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* @summary gets the prop type from the decorator
|
|
69
|
-
* @param {any} model
|
|
70
|
-
* @param {string | symbol} propKey
|
|
71
|
-
* @return {string | undefined}
|
|
72
|
-
*
|
|
73
|
-
* @function geTypeFromDecorators
|
|
74
|
-
*
|
|
75
|
-
* @memberOf module:decorator-validation.Reflection
|
|
76
|
-
*/
|
|
77
|
-
export function getTypeFromDecorator(model, propKey) {
|
|
78
|
-
const decorators = getPropertyDecorators(ModelKeys.REFLECT, model, propKey, false);
|
|
79
|
-
if (!decorators || !decorators.decorators)
|
|
80
|
-
return;
|
|
81
|
-
// TODO handle @type decorators. for now we stick with design:type
|
|
82
|
-
const typeDecorator = decorators.decorators.shift();
|
|
83
|
-
const name = typeDecorator.props ? typeDecorator.props.name : undefined;
|
|
84
|
-
return name !== "Function" ? name : undefined;
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* @summary Retrieves the decorators for an object's properties prefixed by {@param prefixes}
|
|
88
|
-
*
|
|
89
|
-
* @param {T} model
|
|
90
|
-
* @param {string[]} prefixes
|
|
91
|
-
*
|
|
92
|
-
* @function getAllPropertyDecorators
|
|
93
|
-
*
|
|
94
|
-
* @memberOf module:db-decorators.Reflection
|
|
95
|
-
*/
|
|
96
|
-
export const getAllPropertyDecorators = function (model, ...prefixes) {
|
|
97
|
-
if (!prefixes || !prefixes.length)
|
|
98
|
-
return;
|
|
99
|
-
const pushOrCreate = function (accum, key, decorators) {
|
|
100
|
-
if (!decorators || !decorators.length)
|
|
101
|
-
return;
|
|
102
|
-
if (!accum[key])
|
|
103
|
-
accum[key] = [];
|
|
104
|
-
accum[key].push(...decorators);
|
|
105
|
-
};
|
|
106
|
-
return Object.getOwnPropertyNames(model).reduce((accum, propKey) => {
|
|
107
|
-
prefixes.forEach((p, index) => {
|
|
108
|
-
const decorators = getPropertyDecorators(p, model, propKey, index !== 0);
|
|
109
|
-
if (!accum)
|
|
110
|
-
accum = {};
|
|
111
|
-
pushOrCreate(accum, propKey, decorators.decorators);
|
|
112
|
-
});
|
|
113
|
-
return accum;
|
|
114
|
-
}, undefined);
|
|
115
|
-
};
|
|
116
|
-
/**
|
|
117
|
-
* @summary Retrieves all properties of an object
|
|
118
|
-
* @description
|
|
119
|
-
* - and of all its prototypes if {@param climbTree} until it reaches {@param stopAt} (or ends the prototype chain)
|
|
120
|
-
*
|
|
121
|
-
* @param obj
|
|
122
|
-
* @param {boolean} [climbTree] default to true
|
|
123
|
-
* @param {string} [stopAt] defaults to 'Object'
|
|
124
|
-
*
|
|
125
|
-
* @function getAllProperties
|
|
126
|
-
*
|
|
127
|
-
* @memberOf module:decorator-validation.Model
|
|
128
|
-
*/
|
|
129
|
-
export function getAllProperties(obj, climbTree = true, stopAt = "Object") {
|
|
130
|
-
const allProps = [];
|
|
131
|
-
let curr = obj;
|
|
132
|
-
const keepAtIt = function () {
|
|
133
|
-
if (!climbTree)
|
|
134
|
-
return;
|
|
135
|
-
const prototype = Object.getPrototypeOf(curr);
|
|
136
|
-
if (!prototype || prototype.constructor.name === stopAt)
|
|
137
|
-
return;
|
|
138
|
-
curr = prototype;
|
|
139
|
-
return curr;
|
|
140
|
-
};
|
|
141
|
-
do {
|
|
142
|
-
const props = Object.getOwnPropertyNames(curr);
|
|
143
|
-
props.forEach(function (prop) {
|
|
144
|
-
if (allProps.indexOf(prop) === -1)
|
|
145
|
-
allProps.push(prop);
|
|
146
|
-
});
|
|
147
|
-
} while (keepAtIt());
|
|
148
|
-
return allProps;
|
|
149
|
-
}
|
|
150
|
-
/**
|
|
151
|
-
* @summary Util function to retrieve the Class decorators
|
|
152
|
-
*
|
|
153
|
-
* @function getClassDecorators
|
|
154
|
-
* @memberOf module:decorator-validation.Reflection
|
|
155
|
-
* @category Reflection
|
|
156
|
-
*/
|
|
157
|
-
export function getClassDecorators(annotationPrefix, target) {
|
|
158
|
-
const keys = Reflect.getOwnMetadataKeys(target.constructor);
|
|
159
|
-
return keys
|
|
160
|
-
.filter((key) => key.toString().startsWith(annotationPrefix))
|
|
161
|
-
.reduce((values, key) => {
|
|
162
|
-
// get metadata value
|
|
163
|
-
const currValues = {
|
|
164
|
-
key: key.substring(annotationPrefix.length),
|
|
165
|
-
props: Reflect.getMetadata(key, target.constructor),
|
|
166
|
-
};
|
|
167
|
-
return values.concat(currValues);
|
|
168
|
-
}, []);
|
|
169
|
-
}
|
|
170
|
-
/**
|
|
171
|
-
* @summary Util function to check a type according to a typeName
|
|
172
|
-
*
|
|
173
|
-
* @param {any} value
|
|
174
|
-
* @param {string} acceptedType
|
|
175
|
-
* @return {boolean} true for a match, false otherwise
|
|
176
|
-
*
|
|
177
|
-
* @function checkType
|
|
178
|
-
* @memberOf module:decorator-validation.Validation
|
|
179
|
-
* @category Validation
|
|
180
|
-
*/
|
|
181
|
-
export function checkType(value, acceptedType) {
|
|
182
|
-
if (typeof value === acceptedType)
|
|
183
|
-
return true;
|
|
184
|
-
return (value.constructor &&
|
|
185
|
-
value.constructor.name.toLowerCase() === acceptedType.toLowerCase());
|
|
186
|
-
}
|
|
187
|
-
/**
|
|
188
|
-
* @summary Util function to check a type according multiple possibilities
|
|
189
|
-
* @param {any} value
|
|
190
|
-
* @param {string[]} acceptedTypes
|
|
191
|
-
* @return {boolean} true if any is a match, false otherwise
|
|
192
|
-
*
|
|
193
|
-
* @function checkTypes
|
|
194
|
-
* @memberOf module:decorator-validation.Validation
|
|
195
|
-
* @category Validation
|
|
196
|
-
*/
|
|
197
|
-
export function checkTypes(value, acceptedTypes) {
|
|
198
|
-
return !acceptedTypes.every((t) => !checkType(value, t));
|
|
199
|
-
}
|
|
200
|
-
/**
|
|
201
|
-
* @summary The model type
|
|
202
|
-
*
|
|
203
|
-
* @param {any} value
|
|
204
|
-
* @param {string | string[] | {name: string}} types
|
|
205
|
-
*
|
|
206
|
-
* @function evaluateDesignTypes
|
|
207
|
-
* @memberOf module:decorator-validation.Validation
|
|
208
|
-
* @category Validation
|
|
209
|
-
*/
|
|
210
|
-
export function evaluateDesignTypes(value, types) {
|
|
211
|
-
switch (typeof types) {
|
|
212
|
-
case "string":
|
|
213
|
-
return checkType(value, types);
|
|
214
|
-
case "object":
|
|
215
|
-
if (Array.isArray(types))
|
|
216
|
-
return checkTypes(value, types);
|
|
217
|
-
return true;
|
|
218
|
-
case "function":
|
|
219
|
-
if (types.name && types.name !== "Object")
|
|
220
|
-
return checkType(value, types.name);
|
|
221
|
-
return true;
|
|
222
|
-
default:
|
|
223
|
-
return true;
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
/**
|
|
227
|
-
* @summary For Serialization/deserialization purposes.
|
|
228
|
-
* @description Reads the {@link ModelKeys.ANCHOR} property of a {@link Model} to discover the class to instantiate
|
|
229
|
-
*
|
|
230
|
-
* @function isModel
|
|
231
|
-
* @memberOf module:decorator-validation.Validation
|
|
232
|
-
* @category Validation
|
|
233
|
-
*/
|
|
234
|
-
export function isModel(target) {
|
|
235
|
-
return (!!target[ModelKeys.ANCHOR] ||
|
|
236
|
-
!!getClassDecorators(ModelKeys.REFLECT, target).find((dec) => dec.key === ModelKeys.MODEL && dec.props && dec.props.class));
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9yZWZsZWN0aW9uL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzVDLE9BQU8sa0JBQWtCLENBQUM7QUFHMUI7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FDbkMsZ0JBQXdCLEVBQ3hCLE1BQVcsRUFDWCxZQUE2QixFQUM3QixhQUFzQixLQUFLLEVBQzNCLFNBQVMsR0FBRyxJQUFJLEVBQ2hCLFdBQWlDO0lBRWpDLE1BQU0sNkJBQTZCLEdBQUcsVUFDcEMsZ0JBQXdCLEVBQ3hCLE1BQVcsRUFDWCxZQUE2QixFQUM3QixhQUFzQixLQUFLLEVBQzNCLFdBQWlDO1FBRWpDLG9EQUFvRDtRQUNwRCxNQUFNLElBQUksR0FBVSxPQUFPLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNsRSxNQUFNLFVBQVUsR0FBd0IsSUFBSTtZQUMxQyxnQ0FBZ0M7YUFDL0IsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDZCxJQUFJLFVBQVU7Z0JBQUUsT0FBTyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDbkUsT0FBTyxDQUNMLEdBQUcsS0FBSyxTQUFTLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FDdEUsQ0FBQztRQUNKLENBQUMsQ0FBQzthQUNELE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUN0QixzQkFBc0I7WUFDdEIsTUFBTSxVQUFVLEdBQUc7Z0JBQ2pCLEdBQUcsRUFDRCxHQUFHLEtBQUss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QUksQ0FBQztRQUNkLEtBQUssVUFBVTtZQUNiLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVE7Z0JBQ3ZDLE9BQU8sU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEMsT0FBTyxJQUFJLENBQUM7UUFDZDtZQUNFLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxPQUFPLENBQUMsTUFBMkI7SUFDakQsT0FBTyxDQUNMLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUMxQixDQUFDLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQ2xELENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLFNBQVMsQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FDckUsQ0FDRixDQUFDO0FBQ0osQ0FBQyIsImZpbGUiOiJyZWZsZWN0aW9uL3V0aWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWwvTW9kZWxcIjtcbmltcG9ydCB7IE1vZGVsS2V5cyB9IGZyb20gXCIuLi91dGlscy9jb25zdGFudHNcIjtcbmltcG9ydCB7IHNmIH0gZnJvbSBcIi4uL3V0aWxzL3N0cmluZ3NcIjtcbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tIFwiLi4vdXRpbHMvZXF1YWxpdHlcIjtcbmltcG9ydCBcInJlZmxlY3QtbWV0YWRhdGFcIjtcbmltcG9ydCB7IERlY29yYXRvck1ldGFkYXRhIH0gZnJvbSBcIi4uL3ZhbGlkYXRpb25cIjtcblxuLyoqXG4gKiBAc3VtbWFyeSBVdGlsIGZ1bmN0aW9uIHRvIHJldHJpZXZlIHRoZSBkZWNvcmF0b3JzIGZvciB0aGUgcHJvdmlkZWQgUHJvcGVydHlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYW5ub3RhdGlvblByZWZpeFxuICogQHBhcmFtIHthbnl9IHRhcmdldFxuICogQHBhcmFtIHtzdHJpbmcgfCBzeW1ib2x9IHByb3BlcnR5TmFtZVxuICogQHBhcmFtIHtib29sZWFufSBbaWdub3JlVHlwZV0gZGVmYXVsdHMgdG8gZmFsc2UuIGRlY2lkZXMgaWYgdGhlIHtAbGluayBNb2RlbEtleXMuVFlQRX0gaXMgaWdub3JlZCBvciBub3RcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlY3Vyc2l2ZV0gZGVmYXVsdHMgdG8gdHJ1ZS4gZGVjaWRlcyBpZiBpdCBzaG91bGQgY2xpbWIgdGhlIHByb3RvdHlwYWwgdHJlZSBzZWFyY2hpbmcgZm9yIG1vcmUgZGVjb3JhdG9ycyBvbiB0aGF0IHByb3BlcnR5XG4gKiBAcGFyYW0ge0RlY29yYXRvck1ldGFkYXRhW119IFthY2N1bXVsYXRvcl0gdXNlZCB3aGVuIHJlY3Vyc2l2ZSBpcyB0cnVlLCB0byBjYWNoZSBkZWNvcmF0b3JzIHdoaWxlIGl0IGNsaW1icyB0aGUgcHJvdG90eXBhbCB0cmVlXG4gKlxuICogQGZ1bmN0aW9uIGdldFByb3BlcnR5RGVjb3JhdG9yc1xuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5SZWZsZWN0aW9uXG4gKiBAY2F0ZWdvcnkgUmVmbGVjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJvcGVydHlEZWNvcmF0b3JzKFxuICBhbm5vdGF0aW9uUHJlZml4OiBzdHJpbmcsXG4gIHRhcmdldDogYW55LFxuICBwcm9wZXJ0eU5hbWU6IHN0cmluZyB8IHN5bWJvbCxcbiAgaWdub3JlVHlwZTogYm9vbGVhbiA9IGZhbHNlLFxuICByZWN1cnNpdmUgPSB0cnVlLFxuICBhY2N1bXVsYXRvcj86IERlY29yYXRvck1ldGFkYXRhW10sXG4pOiB7IHByb3A6IHN0cmluZzsgZGVjb3JhdG9yczogRGVjb3JhdG9yTWV0YWRhdGFbXSB9IHtcbiAgY29uc3QgZ2V0UHJvcGVydHlEZWNvcmF0b3JzRm9yTW9kZWwgPSBmdW5jdGlvbiAoXG4gICAgYW5ub3RhdGlvblByZWZpeDogc3RyaW5nLFxuICAgIHRhcmdldDogYW55LFxuICAgIHByb3BlcnR5TmFtZTogc3RyaW5nIHwgc3ltYm9sLFxuICAgIGlnbm9yZVR5cGU6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBhY2N1bXVsYXRvcj86IERlY29yYXRvck1ldGFkYXRhW10sXG4gICk6IHsgcHJvcDogc3RyaW5nOyBkZWNvcmF0b3JzOiBEZWNvcmF0b3JNZXRhZGF0YVtdIH0ge1xuICAgIC8vIGdldCBpbmZvIGFib3V0IGtleXMgdGhhdCB1c2VkIGluIGN1cnJlbnQgcHJvcGVydHlcbiAgICBjb25zdCBrZXlzOiBhbnlbXSA9IFJlZmxlY3QuZ2V0TWV0YWRhdGFLZXlzKHRhcmdldCwgcHJvcGVydHlOYW1lKTtcbiAgICBjb25zdCBkZWNvcmF0b3JzOiBEZWNvcmF0b3JNZXRhZGF0YVtdID0ga2V5c1xuICAgICAgLy8gZmlsdGVyIHlvdXIgY3VzdG9tIGRlY29yYXRvcnNcbiAgICAgIC5maWx0ZXIoKGtleSkgPT4ge1xuICAgICAgICBpZiAoaWdub3JlVHlwZSkgcmV0dXJuIGtleS50b1N0cmluZygpLnN0YXJ0c1dpdGgoYW5ub3RhdGlvblByZWZpeCk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAga2V5ID09PSBNb2RlbEtleXMuVFlQRSB8fCBrZXkudG9TdHJpbmcoKS5zdGFydHNXaXRoKGFubm90YXRpb25QcmVmaXgpXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICAgLnJlZHVjZSgodmFsdWVzLCBrZXkpID0+IHtcbiAgICAgICAgLy8gZ2V0IG1ldGFkYXRhIHZhbHVlLlxuICAgICAgICBjb25zdCBjdXJyVmFsdWVzID0ge1xuICAgICAgICAgIGtleTpcbiAgICAgICAgICAgIGtleSAhPT0gTW9kZWxLZXlzLlRZUEVcbiAgICAgICAgICAgICAgPyBrZXkuc3Vic3RyaW5nKGFubm90YXRpb25QcmVmaXgubGVuZ3RoKVxuICAgICAgICAgICAgICA6IGtleSxcbiAgICAgICAgICBwcm9wczogUmVmbGVjdC5nZXRNZXRhZGF0YShrZXksIHRhcmdldCwgcHJvcGVydHlOYW1lKSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHZhbHVlcy5jb25jYXQoY3VyclZhbHVlcyk7XG4gICAgICB9LCBhY2N1bXVsYXRvciB8fCBbXSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcHJvcDogcHJvcGVydHlOYW1lLnRvU3RyaW5nKCksXG4gICAgICBkZWNvcmF0b3JzOiBkZWNvcmF0b3JzLFxuICAgIH07XG4gIH07XG5cbiAgY29uc3QgcmVzdWx0OiB7IHByb3A6IHN0cmluZzsgZGVjb3JhdG9yczogRGVjb3JhdG9yTWV0YWRhdGFbXSB9ID1cbiAgICBnZXRQcm9wZXJ0eURlY29yYXRvcnNGb3JNb2RlbChcbiAgICAgIGFubm90YXRpb25QcmVmaXgsXG4gICAgICB0YXJnZXQsXG4gICAgICBwcm9wZXJ0eU5hbWUsXG4gICAgICBpZ25vcmVUeXBlLFxuICAgICAgYWNjdW11bGF0b3IsXG4gICAgKTtcblxuICBjb25zdCB0cmltID0gZnVuY3Rpb24gKGl0ZW1zOiBEZWNvcmF0b3JNZXRhZGF0YVtdKSB7XG4gICAgY29uc3QgY2FjaGU6IFJlY29yZDxzdHJpbmcsIERlY29yYXRvck1ldGFkYXRhPiA9IHt9O1xuICAgIHJldHVybiBpdGVtcy5maWx0ZXIoKGl0ZW06IERlY29yYXRvck1ldGFkYXRhKSA9PiB7XG4gICAgICBpZiAoaXRlbS5rZXkgaW4gY2FjaGUpIHtcbiAgICAgICAgaWYgKCFpc0VxdWFsKGl0ZW0ucHJvcHMsIGNhY2hlW2l0ZW0ua2V5XSkpXG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBzZihcbiAgICAgICAgICAgICAgXCJGb3VuZCBhIHNpbWlsYXIgZGVjb3JhdG9yIGZvciB0aGUgezB9IHByb3BlcnR5IG9mIGEgezF9IG1vZGVsIGJ1dCB3aXRoIGRpZmZlcmVudCBhdHRyaWJ1dGVzLiBUaGUgb3JpZ2luYWwgb25lIHdpbGwgYmUga2VwdFwiLFxuICAgICAgICAgICAgICBpdGVtLmtleSxcbiAgICAgICAgICAgICAgdGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWUsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY2FjaGVbaXRlbS5rZXkudG9TdHJpbmcoKV0gPSBpdGVtLnByb3BzIGFzIERlY29yYXRvck1ldGFkYXRhO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH07XG5cbiAgaWYgKCFyZWN1cnNpdmUgfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldCkgPT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvcDogcmVzdWx0LnByb3AsXG4gICAgICBkZWNvcmF0b3JzOiB0cmltKHJlc3VsdC5kZWNvcmF0b3JzKSxcbiAgICB9O1xuICB9XG5cbiAgLy8gV2UgY2hvb3NlIHRvIGlnbm9yZSB0eXBlIGhlcmUsIGJlY2F1c2UgaW4gaW5oZXJpdGFuY2UgdGhlIGV4cGVjdGVkIHR5cGUgaXMgZnJvbSB0aGUgbG93ZXN0IGNoaWxkIGNsYXNzXG4gIHJldHVybiBnZXRQcm9wZXJ0eURlY29yYXRvcnMoXG4gICAgYW5ub3RhdGlvblByZWZpeCxcbiAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0LmNvbnN0cnVjdG9yKSxcbiAgICBwcm9wZXJ0eU5hbWUsXG4gICAgdHJ1ZSxcbiAgICByZWN1cnNpdmUsXG4gICAgcmVzdWx0LmRlY29yYXRvcnMsXG4gICk7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgZ2V0cyB0aGUgcHJvcCB0eXBlIGZyb20gdGhlIGRlY29yYXRvclxuICogQHBhcmFtIHthbnl9IG1vZGVsXG4gKiBAcGFyYW0ge3N0cmluZyB8IHN5bWJvbH0gcHJvcEtleVxuICogQHJldHVybiB7c3RyaW5nIHwgdW5kZWZpbmVkfVxuICpcbiAqIEBmdW5jdGlvbiBnZVR5cGVGcm9tRGVjb3JhdG9yc1xuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uUmVmbGVjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZUZyb21EZWNvcmF0b3IoXG4gIG1vZGVsOiBhbnksXG4gIHByb3BLZXk6IHN0cmluZyB8IHN5bWJvbCxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGRlY29yYXRvcnM6IHsgcHJvcDogc3RyaW5nIHwgc3ltYm9sOyBkZWNvcmF0b3JzOiBhbnlbXSB9ID1cbiAgICBnZXRQcm9wZXJ0eURlY29yYXRvcnMoTW9kZWxLZXlzLlJFRkxFQ1QsIG1vZGVsLCBwcm9wS2V5LCBmYWxzZSk7XG4gIGlmICghZGVjb3JhdG9ycyB8fCAhZGVjb3JhdG9ycy5kZWNvcmF0b3JzKSByZXR1cm47XG5cbiAgLy8gVE9ETyBoYW5kbGUgQHR5cGUgZGVjb3JhdG9ycy4gZm9yIG5vdyB3ZSBzdGljayB3aXRoIGRlc2lnbjp0eXBlXG4gIGNvbnN0IHR5cGVEZWNvcmF0b3IgPSBkZWNvcmF0b3JzLmRlY29yYXRvcnMuc2hpZnQoKTtcbiAgY29uc3QgbmFtZSA9IHR5cGVEZWNvcmF0b3IucHJvcHMgPyB0eXBlRGVjb3JhdG9yLnByb3BzLm5hbWUgOiB1bmRlZmluZWQ7XG4gIHJldHVybiBuYW1lICE9PSBcIkZ1bmN0aW9uXCIgPyBuYW1lIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IFJldHJpZXZlcyB0aGUgZGVjb3JhdG9ycyBmb3IgYW4gb2JqZWN0J3MgcHJvcGVydGllcyBwcmVmaXhlZCBieSB7QHBhcmFtIHByZWZpeGVzfVxuICpcbiAqIEBwYXJhbSB7VH0gbW9kZWxcbiAqIEBwYXJhbSB7c3RyaW5nW119IHByZWZpeGVzXG4gKlxuICogQGZ1bmN0aW9uIGdldEFsbFByb3BlcnR5RGVjb3JhdG9yc1xuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGItZGVjb3JhdG9ycy5SZWZsZWN0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRBbGxQcm9wZXJ0eURlY29yYXRvcnMgPSBmdW5jdGlvbiA8VCBleHRlbmRzIE1vZGVsPihcbiAgbW9kZWw6IFQsXG4gIC4uLnByZWZpeGVzOiBzdHJpbmdbXVxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmICghcHJlZml4ZXMgfHwgIXByZWZpeGVzLmxlbmd0aCkgcmV0dXJuO1xuXG4gIGNvbnN0IHB1c2hPckNyZWF0ZSA9IGZ1bmN0aW9uIChcbiAgICBhY2N1bTogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgYW55Pj4sXG4gICAga2V5OiBzdHJpbmcsXG4gICAgZGVjb3JhdG9yczogYW55W10sXG4gICkge1xuICAgIGlmICghZGVjb3JhdG9ycyB8fCAhZGVjb3JhdG9ycy5sZW5ndGgpIHJldHVybjtcbiAgICBpZiAoIWFjY3VtW2tleV0pIGFjY3VtW2tleV0gPSBbXTtcbiAgICBhY2N1bVtrZXldLnB1c2goLi4uZGVjb3JhdG9ycyk7XG4gIH07XG5cbiAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG1vZGVsKS5yZWR1Y2UoXG4gICAgKGFjY3VtOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkLCBwcm9wS2V5KSA9PiB7XG4gICAgICBwcmVmaXhlcy5mb3JFYWNoKChwLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBkZWNvcmF0b3JzOiB7IHByb3A6IHN0cmluZyB8IHN5bWJvbDsgZGVjb3JhdG9yczogYW55W10gfSA9XG4gICAgICAgICAgZ2V0UHJvcGVydHlEZWNvcmF0b3JzKHAsIG1vZGVsLCBwcm9wS2V5LCBpbmRleCAhPT0gMCk7XG4gICAgICAgIGlmICghYWNjdW0pIGFjY3VtID0ge307XG4gICAgICAgIHB1c2hPckNyZWF0ZShhY2N1bSwgcHJvcEtleSwgZGVjb3JhdG9ycy5kZWNvcmF0b3JzKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFjY3VtO1xuICAgIH0sXG4gICAgdW5kZWZpbmVkLFxuICApO1xufTtcblxuLyoqXG4gKiBAc3VtbWFyeSBSZXRyaWV2ZXMgYWxsIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0XG4gKiBAZGVzY3JpcHRpb25cbiAqICAtIGFuZCBvZiBhbGwgaXRzIHByb3RvdHlwZXMgaWYge0BwYXJhbSBjbGltYlRyZWV9IHVudGlsIGl0IHJlYWNoZXMge0BwYXJhbSBzdG9wQXR9IChvciBlbmRzIHRoZSBwcm90b3R5cGUgY2hhaW4pXG4gKlxuICogQHBhcmFtIG9ialxuICogQHBhcmFtIHtib29sZWFufSBbY2xpbWJUcmVlXSBkZWZhdWx0IHRvIHRydWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RvcEF0XSBkZWZhdWx0cyB0byAnT2JqZWN0J1xuICpcbiAqIEBmdW5jdGlvbiBnZXRBbGxQcm9wZXJ0aWVzXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5Nb2RlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWxsUHJvcGVydGllcyhcbiAgb2JqOiBSZWNvcmQ8YW55LCBhbnk+LFxuICBjbGltYlRyZWUgPSB0cnVlLFxuICBzdG9wQXQgPSBcIk9iamVjdFwiLFxuKSB7XG4gIGNvbnN0IGFsbFByb3BzOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgY3VycjogUmVjb3JkPGFueSwgYW55PiA9IG9iajtcblxuICBjb25zdCBrZWVwQXRJdCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWNsaW1iVHJlZSkgcmV0dXJuO1xuICAgIGNvbnN0IHByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjdXJyKTtcbiAgICBpZiAoIXByb3RvdHlwZSB8fCBwcm90b3R5cGUuY29uc3RydWN0b3IubmFtZSA9PT0gc3RvcEF0KSByZXR1cm47XG4gICAgY3VyciA9IHByb3RvdHlwZTtcbiAgICByZXR1cm4gY3VycjtcbiAgfTtcblxuICBkbyB7XG4gICAgY29uc3QgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjdXJyKTtcbiAgICBwcm9wcy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICBpZiAoYWxsUHJvcHMuaW5kZXhPZihwcm9wKSA9PT0gLTEpIGFsbFByb3BzLnB1c2gocHJvcCk7XG4gICAgfSk7XG4gIH0gd2hpbGUgKGtlZXBBdEl0KCkpO1xuICByZXR1cm4gYWxsUHJvcHM7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgVXRpbCBmdW5jdGlvbiB0byByZXRyaWV2ZSB0aGUgQ2xhc3MgZGVjb3JhdG9yc1xuICpcbiAqIEBmdW5jdGlvbiBnZXRDbGFzc0RlY29yYXRvcnNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uUmVmbGVjdGlvblxuICogQGNhdGVnb3J5IFJlZmxlY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENsYXNzRGVjb3JhdG9ycyhcbiAgYW5ub3RhdGlvblByZWZpeDogc3RyaW5nLFxuICB0YXJnZXQ6IGFueSxcbik6IHsga2V5OiBzdHJpbmc7IHByb3BzOiBhbnkgfVtdIHtcbiAgY29uc3Qga2V5czogYW55W10gPSBSZWZsZWN0LmdldE93bk1ldGFkYXRhS2V5cyh0YXJnZXQuY29uc3RydWN0b3IpO1xuXG4gIHJldHVybiBrZXlzXG4gICAgLmZpbHRlcigoa2V5KSA9PiBrZXkudG9TdHJpbmcoKS5zdGFydHNXaXRoKGFubm90YXRpb25QcmVmaXgpKVxuICAgIC5yZWR1Y2UoKHZhbHVlcywga2V5KSA9PiB7XG4gICAgICAvLyBnZXQgbWV0YWRhdGEgdmFsdWVcbiAgICAgIGNvbnN0IGN1cnJWYWx1ZXMgPSB7XG4gICAgICAgIGtleToga2V5LnN1YnN0cmluZyhhbm5vdGF0aW9uUHJlZml4Lmxlbmd0aCksXG4gICAgICAgIHByb3BzOiBSZWZsZWN0LmdldE1ldGFkYXRhKGtleSwgdGFyZ2V0LmNvbnN0cnVjdG9yKSxcbiAgICAgIH07XG4gICAgICByZXR1cm4gdmFsdWVzLmNvbmNhdChjdXJyVmFsdWVzKTtcbiAgICB9LCBbXSk7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgVXRpbCBmdW5jdGlvbiB0byBjaGVjayBhIHR5cGUgYWNjb3JkaW5nIHRvIGEgdHlwZU5hbWVcbiAqXG4gKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBhY2NlcHRlZFR5cGVcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgZm9yIGEgbWF0Y2gsIGZhbHNlIG90aGVyd2lzZVxuICpcbiAqIEBmdW5jdGlvbiBjaGVja1R5cGVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uVmFsaWRhdGlvblxuICogQGNhdGVnb3J5IFZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrVHlwZSh2YWx1ZTogYW55LCBhY2NlcHRlZFR5cGU6IHN0cmluZykge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSBhY2NlcHRlZFR5cGUpIHJldHVybiB0cnVlO1xuICByZXR1cm4gKFxuICAgIHZhbHVlLmNvbnN0cnVjdG9yICYmXG4gICAgdmFsdWUuY29uc3RydWN0b3IubmFtZS50b0xvd2VyQ2FzZSgpID09PSBhY2NlcHRlZFR5cGUudG9Mb3dlckNhc2UoKVxuICApO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IFV0aWwgZnVuY3Rpb24gdG8gY2hlY2sgYSB0eXBlIGFjY29yZGluZyBtdWx0aXBsZSBwb3NzaWJpbGl0aWVzXG4gKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nW119IGFjY2VwdGVkVHlwZXNcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgYW55IGlzIGEgbWF0Y2gsIGZhbHNlIG90aGVyd2lzZVxuICpcbiAqIEBmdW5jdGlvbiBjaGVja1R5cGVzXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uLlZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1R5cGVzKHZhbHVlOiBhbnksIGFjY2VwdGVkVHlwZXM6IHN0cmluZ1tdKSB7XG4gIHJldHVybiAhYWNjZXB0ZWRUeXBlcy5ldmVyeSgodCkgPT4gIWNoZWNrVHlwZSh2YWx1ZSwgdCkpO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IFRoZSBtb2RlbCB0eXBlXG4gKlxuICogQHBhcmFtIHthbnl9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZyB8IHN0cmluZ1tdIHwge25hbWU6IHN0cmluZ319IHR5cGVzXG4gKlxuICogQGZ1bmN0aW9uIGV2YWx1YXRlRGVzaWduVHlwZXNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uVmFsaWRhdGlvblxuICogQGNhdGVnb3J5IFZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV2YWx1YXRlRGVzaWduVHlwZXMoXG4gIHZhbHVlOiBhbnksXG4gIHR5cGVzOiBzdHJpbmcgfCBzdHJpbmdbXSB8IHsgbmFtZTogc3RyaW5nIH0sXG4pIHtcbiAgc3dpdGNoICh0eXBlb2YgdHlwZXMpIHtcbiAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICByZXR1cm4gY2hlY2tUeXBlKHZhbHVlLCB0eXBlcyk7XG4gICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodHlwZXMpKSByZXR1cm4gY2hlY2tUeXBlcyh2YWx1ZSwgdHlwZXMpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICBpZiAodHlwZXMubmFtZSAmJiB0eXBlcy5uYW1lICE9PSBcIk9iamVjdFwiKVxuICAgICAgICByZXR1cm4gY2hlY2tUeXBlKHZhbHVlLCB0eXBlcy5uYW1lKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEBzdW1tYXJ5IEZvciBTZXJpYWxpemF0aW9uL2Rlc2VyaWFsaXphdGlvbiBwdXJwb3Nlcy5cbiAqIEBkZXNjcmlwdGlvbiBSZWFkcyB0aGUge0BsaW5rIE1vZGVsS2V5cy5BTkNIT1J9IHByb3BlcnR5IG9mIGEge0BsaW5rIE1vZGVsfSB0byBkaXNjb3ZlciB0aGUgY2xhc3MgdG8gaW5zdGFudGlhdGVcbiAqXG4gKiBAZnVuY3Rpb24gaXNNb2RlbFxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5WYWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNNb2RlbCh0YXJnZXQ6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgcmV0dXJuIChcbiAgICAhIXRhcmdldFtNb2RlbEtleXMuQU5DSE9SXSB8fFxuICAgICEhZ2V0Q2xhc3NEZWNvcmF0b3JzKE1vZGVsS2V5cy5SRUZMRUNULCB0YXJnZXQpLmZpbmQoXG4gICAgICAoZGVjKSA9PiBkZWMua2V5ID09PSBNb2RlbEtleXMuTU9ERUwgJiYgZGVjLnByb3BzICYmIGRlYy5wcm9wcy5jbGFzcyxcbiAgICApXG4gICk7XG59XG4iXX0=
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @summary Deep Object Comparison
|
|
3
|
-
* @description algorithm from {@link https://stackoverflow.com/questions/30476150/javascript-deep-comparison-recursively-objects-and-properties}
|
|
4
|
-
* but with optional ignored properties
|
|
5
|
-
*
|
|
6
|
-
* @param {any} a
|
|
7
|
-
* @param {any} b
|
|
8
|
-
* @param {string} [propsToIgnore]
|
|
9
|
-
*
|
|
10
|
-
* @function isEqual
|
|
11
|
-
* @memberOf module:decorator-validation.Utils.Equality
|
|
12
|
-
* @category Validation
|
|
13
|
-
*/
|
|
14
|
-
export declare function isEqual(a: any, b: any, ...propsToIgnore: string[]): boolean;
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @summary Deep Object Comparison
|
|
3
|
-
* @description algorithm from {@link https://stackoverflow.com/questions/30476150/javascript-deep-comparison-recursively-objects-and-properties}
|
|
4
|
-
* but with optional ignored properties
|
|
5
|
-
*
|
|
6
|
-
* @param {any} a
|
|
7
|
-
* @param {any} b
|
|
8
|
-
* @param {string} [propsToIgnore]
|
|
9
|
-
*
|
|
10
|
-
* @function isEqual
|
|
11
|
-
* @memberOf module:decorator-validation.Utils.Equality
|
|
12
|
-
* @category Validation
|
|
13
|
-
*/
|
|
14
|
-
export function isEqual(a, b, ...propsToIgnore) {
|
|
15
|
-
if (a === b)
|
|
16
|
-
return true;
|
|
17
|
-
if (a instanceof Date && b instanceof Date)
|
|
18
|
-
return a.getTime() === b.getTime();
|
|
19
|
-
if (!a || !b || (typeof a !== "object" && typeof b !== "object"))
|
|
20
|
-
return a === b;
|
|
21
|
-
if (a === null || a === undefined || b === null || b === undefined)
|
|
22
|
-
return false;
|
|
23
|
-
if (typeof a !== typeof b)
|
|
24
|
-
return false;
|
|
25
|
-
if (a.prototype !== b.prototype)
|
|
26
|
-
return false;
|
|
27
|
-
const keys = Object.keys(a).filter((k) => propsToIgnore.indexOf(k) === -1);
|
|
28
|
-
if (keys.length !==
|
|
29
|
-
Object.keys(b).filter((k) => propsToIgnore.indexOf(k) === -1).length)
|
|
30
|
-
return false;
|
|
31
|
-
return keys.every((k) => propsToIgnore.indexOf(k) !== -1 || isEqual(a[k], b[k], ...propsToIgnore));
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy91dGlscy9lcXVhbGl0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLFVBQVUsT0FBTyxDQUFDLENBQU0sRUFBRSxDQUFNLEVBQUUsR0FBRyxhQUF1QjtJQUNoRSxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDekIsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJO1FBQ3hDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNyQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQztRQUM5RCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakIsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxTQUFTLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssU0FBUztRQUNoRSxPQUFPLEtBQUssQ0FBQztJQUNmLElBQUksT0FBTyxDQUFDLEtBQUssT0FBTyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDeEMsSUFBSSxDQUFDLENBQUMsU0FBUyxLQUFLLENBQUMsQ0FBQyxTQUFTO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDOUMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzRSxJQUNFLElBQUksQ0FBQyxNQUFNO1FBQ1gsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO1FBRXBFLE9BQU8sS0FBSyxDQUFDO0lBQ2YsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUNmLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDSixhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsYUFBYSxDQUFDLENBQzNFLENBQUM7QUFDSixDQUFDIiwiZmlsZSI6InV0aWxzL2VxdWFsaXR5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAc3VtbWFyeSBEZWVwIE9iamVjdCBDb21wYXJpc29uXG4gKiBAZGVzY3JpcHRpb24gYWxnb3JpdGhtIGZyb20ge0BsaW5rIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzMwNDc2MTUwL2phdmFzY3JpcHQtZGVlcC1jb21wYXJpc29uLXJlY3Vyc2l2ZWx5LW9iamVjdHMtYW5kLXByb3BlcnRpZXN9XG4gKiBidXQgd2l0aCBvcHRpb25hbCBpZ25vcmVkIHByb3BlcnRpZXNcbiAqXG4gKiBAcGFyYW0ge2FueX0gYVxuICogQHBhcmFtIHthbnl9IGJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbcHJvcHNUb0lnbm9yZV1cbiAqXG4gKiBAZnVuY3Rpb24gaXNFcXVhbFxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5VdGlscy5FcXVhbGl0eVxuICogQGNhdGVnb3J5IFZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRXF1YWwoYTogYW55LCBiOiBhbnksIC4uLnByb3BzVG9JZ25vcmU6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gIGlmIChhID09PSBiKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGEgaW5zdGFuY2VvZiBEYXRlICYmIGIgaW5zdGFuY2VvZiBEYXRlKVxuICAgIHJldHVybiBhLmdldFRpbWUoKSA9PT0gYi5nZXRUaW1lKCk7XG4gIGlmICghYSB8fCAhYiB8fCAodHlwZW9mIGEgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIGIgIT09IFwib2JqZWN0XCIpKVxuICAgIHJldHVybiBhID09PSBiO1xuICBpZiAoYSA9PT0gbnVsbCB8fCBhID09PSB1bmRlZmluZWQgfHwgYiA9PT0gbnVsbCB8fCBiID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIGEgIT09IHR5cGVvZiBiKSByZXR1cm4gZmFsc2U7XG4gIGlmIChhLnByb3RvdHlwZSAhPT0gYi5wcm90b3R5cGUpIHJldHVybiBmYWxzZTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGEpLmZpbHRlcigoaykgPT4gcHJvcHNUb0lnbm9yZS5pbmRleE9mKGspID09PSAtMSk7XG4gIGlmIChcbiAgICBrZXlzLmxlbmd0aCAhPT1cbiAgICBPYmplY3Qua2V5cyhiKS5maWx0ZXIoKGspID0+IHByb3BzVG9JZ25vcmUuaW5kZXhPZihrKSA9PT0gLTEpLmxlbmd0aFxuICApXG4gICAgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4ga2V5cy5ldmVyeShcbiAgICAoaykgPT5cbiAgICAgIHByb3BzVG9JZ25vcmUuaW5kZXhPZihrKSAhPT0gLTEgfHwgaXNFcXVhbChhW2tdLCBiW2tdLCAuLi5wcm9wc1RvSWdub3JlKSxcbiAgKTtcbn1cbiJdfQ==
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.metadata = metadata;
|
|
4
|
-
exports.apply = apply;
|
|
5
|
-
require("reflect-metadata");
|
|
6
|
-
/**
|
|
7
|
-
* @summary Decorator that assigns metadata to the class/method using the
|
|
8
|
-
* specified `key`.
|
|
9
|
-
*
|
|
10
|
-
* @param {string} key a value defining the key under which the metadata is stored
|
|
11
|
-
* @param {any} value metadata to be associated with `key`
|
|
12
|
-
*
|
|
13
|
-
* @function metadata
|
|
14
|
-
*
|
|
15
|
-
* @memberOf module:decorator-validation.Reflections
|
|
16
|
-
* @category Decorators
|
|
17
|
-
*/
|
|
18
|
-
function metadata(key, value) {
|
|
19
|
-
return (target, propertyKey, descriptor) => {
|
|
20
|
-
if (descriptor) {
|
|
21
|
-
Reflect.defineMetadata(key, value, descriptor.value); // method
|
|
22
|
-
}
|
|
23
|
-
else if (propertyKey) {
|
|
24
|
-
Reflect.defineMetadata(key, value, target, propertyKey); // property
|
|
25
|
-
}
|
|
26
|
-
else {
|
|
27
|
-
Reflect.defineMetadata(key, value, target); // class
|
|
28
|
-
}
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* @summary Decorator that assigns metadata to the class/method using the
|
|
33
|
-
* specified `key`.
|
|
34
|
-
*
|
|
35
|
-
* @param {Array<ClassDecorator | MethodDecorator | PropertyDecorator>} decorators a value defining the key under which the metadata is stored
|
|
36
|
-
*
|
|
37
|
-
* @function apply
|
|
38
|
-
*
|
|
39
|
-
* @memberOf module:decorator-validation.Reflections
|
|
40
|
-
* @category Decorators
|
|
41
|
-
*/
|
|
42
|
-
function apply(...decorators) {
|
|
43
|
-
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
44
|
-
return (target, propertyKey, descriptor) => {
|
|
45
|
-
for (const decorator of decorators) {
|
|
46
|
-
if (target instanceof Function && !descriptor) {
|
|
47
|
-
decorator(target);
|
|
48
|
-
continue;
|
|
49
|
-
}
|
|
50
|
-
decorator(target, propertyKey, descriptor);
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9yZWZsZWN0aW9uL2RlY29yYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFtQkEsNEJBY0M7QUFhRCxzQkFxQkM7QUFuRUQsNEJBQTBCO0FBTzFCOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBZ0IsUUFBUSxDQUFJLEdBQVcsRUFBRSxLQUFRO0lBQy9DLE9BQU8sQ0FDTCxNQUFjLEVBQ2QsV0FBNkIsRUFDN0IsVUFBK0IsRUFDL0IsRUFBRTtRQUNGLElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUztRQUNqRSxDQUFDO2FBQU0sSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUN2QixPQUFPLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVztRQUN0RSxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVE7UUFDdEQsQ0FBQztJQUNILENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBZ0IsS0FBSyxDQUNuQixHQUFHLFVBQXVFO0lBRTFFLHdEQUF3RDtJQUN4RCxPQUFPLENBQ0wsTUFBMEIsRUFDMUIsV0FBNkIsRUFDN0IsVUFBdUMsRUFDdkMsRUFBRTtRQUNGLEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxFQUFFLENBQUM7WUFDbkMsSUFBSSxNQUFNLFlBQVksUUFBUSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQzdDLFNBQTRCLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3RDLFNBQVM7WUFDWCxDQUFDO1lBQ0EsU0FBaUQsQ0FDaEQsTUFBTSxFQUNOLFdBQThCLEVBQzlCLFVBQXdDLENBQ3pDLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsImZpbGUiOiJyZWZsZWN0aW9uL2RlY29yYXRvcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXCJyZWZsZWN0LW1ldGFkYXRhXCI7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmV4cG9ydCB0eXBlIEN1c3RvbURlY29yYXRvcjxWPiA9IE1ldGhvZERlY29yYXRvciAmXG4gIENsYXNzRGVjb3JhdG9yICZcbiAgUHJvcGVydHlEZWNvcmF0b3I7XG5cbi8qKlxuICogQHN1bW1hcnkgRGVjb3JhdG9yIHRoYXQgYXNzaWducyBtZXRhZGF0YSB0byB0aGUgY2xhc3MvbWV0aG9kIHVzaW5nIHRoZVxuICogc3BlY2lmaWVkIGBrZXlgLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgYSB2YWx1ZSBkZWZpbmluZyB0aGUga2V5IHVuZGVyIHdoaWNoIHRoZSBtZXRhZGF0YSBpcyBzdG9yZWRcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZSBtZXRhZGF0YSB0byBiZSBhc3NvY2lhdGVkIHdpdGggYGtleWBcbiAqXG4gKiBAZnVuY3Rpb24gbWV0YWRhdGFcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uLlJlZmxlY3Rpb25zXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWV0YWRhdGE8Vj4oa2V5OiBzdHJpbmcsIHZhbHVlOiBWKTogQ3VzdG9tRGVjb3JhdG9yPFY+IHtcbiAgcmV0dXJuIChcbiAgICB0YXJnZXQ6IG9iamVjdCxcbiAgICBwcm9wZXJ0eUtleT86IHN0cmluZyB8IHN5bWJvbCxcbiAgICBkZXNjcmlwdG9yPzogUHJvcGVydHlEZXNjcmlwdG9yLFxuICApID0+IHtcbiAgICBpZiAoZGVzY3JpcHRvcikge1xuICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShrZXksIHZhbHVlLCBkZXNjcmlwdG9yLnZhbHVlKTsgLy8gbWV0aG9kXG4gICAgfSBlbHNlIGlmIChwcm9wZXJ0eUtleSkge1xuICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShrZXksIHZhbHVlLCB0YXJnZXQsIHByb3BlcnR5S2V5KTsgLy8gcHJvcGVydHlcbiAgICB9IGVsc2Uge1xuICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShrZXksIHZhbHVlLCB0YXJnZXQpOyAvLyBjbGFzc1xuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBEZWNvcmF0b3IgdGhhdCBhc3NpZ25zIG1ldGFkYXRhIHRvIHRoZSBjbGFzcy9tZXRob2QgdXNpbmcgdGhlXG4gKiBzcGVjaWZpZWQgYGtleWAuXG4gKlxuICogQHBhcmFtIHtBcnJheTxDbGFzc0RlY29yYXRvciB8IE1ldGhvZERlY29yYXRvciB8IFByb3BlcnR5RGVjb3JhdG9yPn0gZGVjb3JhdG9ycyBhIHZhbHVlIGRlZmluaW5nIHRoZSBrZXkgdW5kZXIgd2hpY2ggdGhlIG1ldGFkYXRhIGlzIHN0b3JlZFxuICpcbiAqIEBmdW5jdGlvbiBhcHBseVxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uUmVmbGVjdGlvbnNcbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseShcbiAgLi4uZGVjb3JhdG9yczogQXJyYXk8Q2xhc3NEZWNvcmF0b3IgfCBNZXRob2REZWNvcmF0b3IgfCBQcm9wZXJ0eURlY29yYXRvcj5cbikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlc1xuICByZXR1cm4gPFRGdW5jdGlvbiBleHRlbmRzIEZ1bmN0aW9uLCBZPihcbiAgICB0YXJnZXQ6IFRGdW5jdGlvbiB8IG9iamVjdCxcbiAgICBwcm9wZXJ0eUtleT86IHN0cmluZyB8IHN5bWJvbCxcbiAgICBkZXNjcmlwdG9yPzogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8WT4sXG4gICkgPT4ge1xuICAgIGZvciAoY29uc3QgZGVjb3JhdG9yIG9mIGRlY29yYXRvcnMpIHtcbiAgICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiAhZGVzY3JpcHRvcikge1xuICAgICAgICAoZGVjb3JhdG9yIGFzIENsYXNzRGVjb3JhdG9yKSh0YXJnZXQpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIChkZWNvcmF0b3IgYXMgTWV0aG9kRGVjb3JhdG9yIHwgUHJvcGVydHlEZWNvcmF0b3IpKFxuICAgICAgICB0YXJnZXQsXG4gICAgICAgIHByb3BlcnR5S2V5IGFzIHN0cmluZyB8IHN5bWJvbCxcbiAgICAgICAgZGVzY3JpcHRvciBhcyBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjxZPixcbiAgICAgICk7XG4gICAgfVxuICB9O1xufVxuIl19
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import "reflect-metadata";
|
|
2
|
-
export type CustomDecorator<V> = MethodDecorator & ClassDecorator & PropertyDecorator;
|
|
3
|
-
/**
|
|
4
|
-
* @summary Decorator that assigns metadata to the class/method using the
|
|
5
|
-
* specified `key`.
|
|
6
|
-
*
|
|
7
|
-
* @param {string} key a value defining the key under which the metadata is stored
|
|
8
|
-
* @param {any} value metadata to be associated with `key`
|
|
9
|
-
*
|
|
10
|
-
* @function metadata
|
|
11
|
-
*
|
|
12
|
-
* @memberOf module:decorator-validation.Reflections
|
|
13
|
-
* @category Decorators
|
|
14
|
-
*/
|
|
15
|
-
export declare function metadata<V>(key: string, value: V): CustomDecorator<V>;
|
|
16
|
-
/**
|
|
17
|
-
* @summary Decorator that assigns metadata to the class/method using the
|
|
18
|
-
* specified `key`.
|
|
19
|
-
*
|
|
20
|
-
* @param {Array<ClassDecorator | MethodDecorator | PropertyDecorator>} decorators a value defining the key under which the metadata is stored
|
|
21
|
-
*
|
|
22
|
-
* @function apply
|
|
23
|
-
*
|
|
24
|
-
* @memberOf module:decorator-validation.Reflections
|
|
25
|
-
* @category Decorators
|
|
26
|
-
*/
|
|
27
|
-
export declare function apply(...decorators: Array<ClassDecorator | MethodDecorator | PropertyDecorator>): <TFunction extends Function, Y>(target: TFunction | object, propertyKey?: string | symbol, descriptor?: TypedPropertyDescriptor<Y>) => void;
|
package/lib/reflection/index.cjs
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./decorators.cjs"), exports);
|
|
18
|
-
__exportStar(require("./utils.cjs"), exports);
|
|
19
|
-
|
|
20
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9yZWZsZWN0aW9uL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBNkI7QUFDN0IsMENBQXdCIiwiZmlsZSI6InJlZmxlY3Rpb24vaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9kZWNvcmF0b3JzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlsc1wiO1xuIl19
|