@decaf-ts/decorator-validation 1.1.2 → 1.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/decorator-validation.bundle.min.js +1 -1
  2. package/dist/esm/decorator-validation.bundle.min.esm.js +1 -1
  3. package/lib/esm/index.d.ts +1 -2
  4. package/lib/esm/index.js +2 -3
  5. package/lib/esm/model/Model.js +2 -4
  6. package/lib/esm/model/Registry.js +2 -2
  7. package/lib/esm/model/construction.js +3 -2
  8. package/lib/esm/model/index.d.ts +1 -0
  9. package/lib/esm/model/index.js +2 -1
  10. package/lib/esm/model/utils.d.ts +9 -0
  11. package/lib/esm/model/utils.js +16 -0
  12. package/lib/esm/utils/index.d.ts +0 -1
  13. package/lib/esm/utils/index.js +1 -2
  14. package/lib/esm/utils/strings.d.ts +2 -2
  15. package/lib/esm/utils/strings.js +5 -3
  16. package/lib/esm/validation/Validators/TypeValidator.js +2 -2
  17. package/lib/esm/validation/Validators/Validator.d.ts +1 -2
  18. package/lib/esm/validation/Validators/Validator.js +2 -2
  19. package/lib/esm/validation/Validators/decorators.js +2 -2
  20. package/lib/esm/validation/decorators.d.ts +10 -10
  21. package/lib/esm/validation/decorators.js +2 -2
  22. package/lib/esm/validation/types.d.ts +1 -9
  23. package/lib/esm/validation/types.js +1 -1
  24. package/lib/index.cjs +2 -3
  25. package/lib/index.d.ts +1 -2
  26. package/lib/model/Model.cjs +5 -7
  27. package/lib/model/Registry.cjs +2 -2
  28. package/lib/model/construction.cjs +4 -3
  29. package/lib/model/index.cjs +2 -1
  30. package/lib/model/index.d.ts +1 -0
  31. package/lib/model/utils.cjs +19 -0
  32. package/lib/model/utils.d.ts +9 -0
  33. package/lib/utils/index.cjs +1 -2
  34. package/lib/utils/index.d.ts +0 -1
  35. package/lib/utils/strings.cjs +5 -3
  36. package/lib/utils/strings.d.ts +2 -2
  37. package/lib/validation/Validators/TypeValidator.cjs +5 -5
  38. package/lib/validation/Validators/Validator.cjs +3 -3
  39. package/lib/validation/Validators/Validator.d.ts +1 -2
  40. package/lib/validation/Validators/decorators.cjs +2 -2
  41. package/lib/validation/decorators.cjs +12 -12
  42. package/lib/validation/decorators.d.ts +10 -10
  43. package/lib/validation/types.cjs +1 -1
  44. package/lib/validation/types.d.ts +1 -9
  45. package/package.json +2 -1
  46. package/lib/esm/reflection/decorators.d.ts +0 -27
  47. package/lib/esm/reflection/decorators.js +0 -51
  48. package/lib/esm/reflection/index.d.ts +0 -2
  49. package/lib/esm/reflection/index.js +0 -4
  50. package/lib/esm/reflection/utils.d.ts +0 -113
  51. package/lib/esm/reflection/utils.js +0 -239
  52. package/lib/esm/utils/equality.d.ts +0 -14
  53. package/lib/esm/utils/equality.js +0 -34
  54. package/lib/reflection/decorators.cjs +0 -55
  55. package/lib/reflection/decorators.d.ts +0 -27
  56. package/lib/reflection/index.cjs +0 -20
  57. package/lib/reflection/index.d.ts +0 -2
  58. package/lib/reflection/utils.cjs +0 -250
  59. package/lib/reflection/utils.d.ts +0 -113
  60. package/lib/utils/equality.cjs +0 -37
  61. package/lib/utils/equality.d.ts +0 -14
@@ -1,2 +0,0 @@
1
- export * from "./decorators";
2
- export * from "./utils";
@@ -1,4 +0,0 @@
1
- export * from "./decorators";
2
- export * from "./utils";
3
-
4
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9yZWZsZWN0aW9uL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsU0FBUyxDQUFDIiwiZmlsZSI6InJlZmxlY3Rpb24vaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9kZWNvcmF0b3JzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlsc1wiO1xuIl19
@@ -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 function getAllPropertyDecorators<T extends Model>(model: T, ...prefixes: string[]): Record<string, DecoratorMetadata[]> | 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 function getAllPropertyDecorators(model, ...prefixes) {
97
- if (!prefixes || !prefixes.length)
98
- return;
99
- function pushOrCreate(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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Q2IsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUTtnQkFDdkMsT0FBTyxTQUFTLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0QyxPQUFPLElBQUksQ0FBQztRQUNkO1lBQ0UsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLE9BQU8sQ0FBQyxNQUEyQjtJQUNqRCxPQUFPLENBQ0wsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FDbEQsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssU0FBUyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUNyRSxDQUNGLENBQUM7QUFDSixDQUFDIiwiZmlsZSI6InJlZmxlY3Rpb24vdXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2RlbCB9IGZyb20gXCIuLi9tb2RlbC9Nb2RlbFwiO1xuaW1wb3J0IHsgTW9kZWxLZXlzIH0gZnJvbSBcIi4uL3V0aWxzL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgc2YgfSBmcm9tIFwiLi4vdXRpbHMvc3RyaW5nc1wiO1xuaW1wb3J0IHsgaXNFcXVhbCB9IGZyb20gXCIuLi91dGlscy9lcXVhbGl0eVwiO1xuaW1wb3J0IFwicmVmbGVjdC1tZXRhZGF0YVwiO1xuaW1wb3J0IHsgRGVjb3JhdG9yTWV0YWRhdGEgfSBmcm9tIFwiLi4vdmFsaWRhdGlvblwiO1xuXG4vKipcbiAqIEBzdW1tYXJ5IFV0aWwgZnVuY3Rpb24gdG8gcmV0cmlldmUgdGhlIGRlY29yYXRvcnMgZm9yIHRoZSBwcm92aWRlZCBQcm9wZXJ0eVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhbm5vdGF0aW9uUHJlZml4XG4gKiBAcGFyYW0ge2FueX0gdGFyZ2V0XG4gKiBAcGFyYW0ge3N0cmluZyB8IHN5bWJvbH0gcHJvcGVydHlOYW1lXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpZ25vcmVUeXBlXSBkZWZhdWx0cyB0byBmYWxzZS4gZGVjaWRlcyBpZiB0aGUge0BsaW5rIE1vZGVsS2V5cy5UWVBFfSBpcyBpZ25vcmVkIG9yIG5vdFxuICogQHBhcmFtIHtib29sZWFufSBbcmVjdXJzaXZlXSBkZWZhdWx0cyB0byB0cnVlLiBkZWNpZGVzIGlmIGl0IHNob3VsZCBjbGltYiB0aGUgcHJvdG90eXBhbCB0cmVlIHNlYXJjaGluZyBmb3IgbW9yZSBkZWNvcmF0b3JzIG9uIHRoYXQgcHJvcGVydHlcbiAqIEBwYXJhbSB7RGVjb3JhdG9yTWV0YWRhdGFbXX0gW2FjY3VtdWxhdG9yXSB1c2VkIHdoZW4gcmVjdXJzaXZlIGlzIHRydWUsIHRvIGNhY2hlIGRlY29yYXRvcnMgd2hpbGUgaXQgY2xpbWJzIHRoZSBwcm90b3R5cGFsIHRyZWVcbiAqXG4gKiBAZnVuY3Rpb24gZ2V0UHJvcGVydHlEZWNvcmF0b3JzXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uLlJlZmxlY3Rpb25cbiAqIEBjYXRlZ29yeSBSZWZsZWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9wZXJ0eURlY29yYXRvcnMoXG4gIGFubm90YXRpb25QcmVmaXg6IHN0cmluZyxcbiAgdGFyZ2V0OiBhbnksXG4gIHByb3BlcnR5TmFtZTogc3RyaW5nIHwgc3ltYm9sLFxuICBpZ25vcmVUeXBlOiBib29sZWFuID0gZmFsc2UsXG4gIHJlY3Vyc2l2ZSA9IHRydWUsXG4gIGFjY3VtdWxhdG9yPzogRGVjb3JhdG9yTWV0YWRhdGFbXSxcbik6IHsgcHJvcDogc3RyaW5nOyBkZWNvcmF0b3JzOiBEZWNvcmF0b3JNZXRhZGF0YVtdIH0ge1xuICBjb25zdCBnZXRQcm9wZXJ0eURlY29yYXRvcnNGb3JNb2RlbCA9IGZ1bmN0aW9uIChcbiAgICBhbm5vdGF0aW9uUHJlZml4OiBzdHJpbmcsXG4gICAgdGFyZ2V0OiBhbnksXG4gICAgcHJvcGVydHlOYW1lOiBzdHJpbmcgfCBzeW1ib2wsXG4gICAgaWdub3JlVHlwZTogYm9vbGVhbiA9IGZhbHNlLFxuICAgIGFjY3VtdWxhdG9yPzogRGVjb3JhdG9yTWV0YWRhdGFbXSxcbiAgKTogeyBwcm9wOiBzdHJpbmc7IGRlY29yYXRvcnM6IERlY29yYXRvck1ldGFkYXRhW10gfSB7XG4gICAgLy8gZ2V0IGluZm8gYWJvdXQga2V5cyB0aGF0IHVzZWQgaW4gY3VycmVudCBwcm9wZXJ0eVxuICAgIGNvbnN0IGtleXM6IGFueVtdID0gUmVmbGVjdC5nZXRNZXRhZGF0YUtleXModGFyZ2V0LCBwcm9wZXJ0eU5hbWUpO1xuICAgIGNvbnN0IGRlY29yYXRvcnM6IERlY29yYXRvck1ldGFkYXRhW10gPSBrZXlzXG4gICAgICAvLyBmaWx0ZXIgeW91ciBjdXN0b20gZGVjb3JhdG9yc1xuICAgICAgLmZpbHRlcigoa2V5KSA9PiB7XG4gICAgICAgIGlmIChpZ25vcmVUeXBlKSByZXR1cm4ga2V5LnRvU3RyaW5nKCkuc3RhcnRzV2l0aChhbm5vdGF0aW9uUHJlZml4KTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBrZXkgPT09IE1vZGVsS2V5cy5UWVBFIHx8IGtleS50b1N0cmluZygpLnN0YXJ0c1dpdGgoYW5ub3RhdGlvblByZWZpeClcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgICAucmVkdWNlKCh2YWx1ZXMsIGtleSkgPT4ge1xuICAgICAgICAvLyBnZXQgbWV0YWRhdGEgdmFsdWUuXG4gICAgICAgIGNvbnN0IGN1cnJWYWx1ZXMgPSB7XG4gICAgICAgICAga2V5OlxuICAgICAgICAgICAga2V5ICE9PSBNb2RlbEtleXMuVFlQRVxuICAgICAgICAgICAgICA/IGtleS5zdWJzdHJpbmcoYW5ub3RhdGlvblByZWZpeC5sZW5ndGgpXG4gICAgICAgICAgICAgIDoga2V5LFxuICAgICAgICAgIHByb3BzOiBSZWZsZWN0LmdldE1ldGFkYXRhKGtleSwgdGFyZ2V0LCBwcm9wZXJ0eU5hbWUpLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdmFsdWVzLmNvbmNhdChjdXJyVmFsdWVzKTtcbiAgICAgIH0sIGFjY3VtdWxhdG9yIHx8IFtdKTtcblxuICAgIHJldHVybiB7XG4gICAgICBwcm9wOiBwcm9wZXJ0eU5hbWUudG9TdHJpbmcoKSxcbiAgICAgIGRlY29yYXRvcnM6IGRlY29yYXRvcnMsXG4gICAgfTtcbiAgfTtcblxuICBjb25zdCByZXN1bHQ6IHsgcHJvcDogc3RyaW5nOyBkZWNvcmF0b3JzOiBEZWNvcmF0b3JNZXRhZGF0YVtdIH0gPVxuICAgIGdldFByb3BlcnR5RGVjb3JhdG9yc0Zvck1vZGVsKFxuICAgICAgYW5ub3RhdGlvblByZWZpeCxcbiAgICAgIHRhcmdldCxcbiAgICAgIHByb3BlcnR5TmFtZSxcbiAgICAgIGlnbm9yZVR5cGUsXG4gICAgICBhY2N1bXVsYXRvcixcbiAgICApO1xuXG4gIGNvbnN0IHRyaW0gPSBmdW5jdGlvbiAoaXRlbXM6IERlY29yYXRvck1ldGFkYXRhW10pIHtcbiAgICBjb25zdCBjYWNoZTogUmVjb3JkPHN0cmluZywgRGVjb3JhdG9yTWV0YWRhdGE+ID0ge307XG4gICAgcmV0dXJuIGl0ZW1zLmZpbHRlcigoaXRlbTogRGVjb3JhdG9yTWV0YWRhdGEpID0+IHtcbiAgICAgIGlmIChpdGVtLmtleSBpbiBjYWNoZSkge1xuICAgICAgICBpZiAoIWlzRXF1YWwoaXRlbS5wcm9wcywgY2FjaGVbaXRlbS5rZXldKSlcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIHNmKFxuICAgICAgICAgICAgICBcIkZvdW5kIGEgc2ltaWxhciBkZWNvcmF0b3IgZm9yIHRoZSB7MH0gcHJvcGVydHkgb2YgYSB7MX0gbW9kZWwgYnV0IHdpdGggZGlmZmVyZW50IGF0dHJpYnV0ZXMuIFRoZSBvcmlnaW5hbCBvbmUgd2lsbCBiZSBrZXB0XCIsXG4gICAgICAgICAgICAgIGl0ZW0ua2V5LFxuICAgICAgICAgICAgICB0YXJnZXQuY29uc3RydWN0b3IubmFtZSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjYWNoZVtpdGVtLmtleS50b1N0cmluZygpXSA9IGl0ZW0ucHJvcHMgYXMgRGVjb3JhdG9yTWV0YWRhdGE7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgfTtcblxuICBpZiAoIXJlY3Vyc2l2ZSB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSA9PT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgIHJldHVybiB7XG4gICAgICBwcm9wOiByZXN1bHQucHJvcCxcbiAgICAgIGRlY29yYXRvcnM6IHRyaW0ocmVzdWx0LmRlY29yYXRvcnMpLFxuICAgIH07XG4gIH1cblxuICAvLyBXZSBjaG9vc2UgdG8gaWdub3JlIHR5cGUgaGVyZSwgYmVjYXVzZSBpbiBpbmhlcml0YW5jZSB0aGUgZXhwZWN0ZWQgdHlwZSBpcyBmcm9tIHRoZSBsb3dlc3QgY2hpbGQgY2xhc3NcbiAgcmV0dXJuIGdldFByb3BlcnR5RGVjb3JhdG9ycyhcbiAgICBhbm5vdGF0aW9uUHJlZml4LFxuICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQuY29uc3RydWN0b3IpLFxuICAgIHByb3BlcnR5TmFtZSxcbiAgICB0cnVlLFxuICAgIHJlY3Vyc2l2ZSxcbiAgICByZXN1bHQuZGVjb3JhdG9ycyxcbiAgKTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBnZXRzIHRoZSBwcm9wIHR5cGUgZnJvbSB0aGUgZGVjb3JhdG9yXG4gKiBAcGFyYW0ge2FueX0gbW9kZWxcbiAqIEBwYXJhbSB7c3RyaW5nIHwgc3ltYm9sfSBwcm9wS2V5XG4gKiBAcmV0dXJuIHtzdHJpbmcgfCB1bmRlZmluZWR9XG4gKlxuICogQGZ1bmN0aW9uIGdlVHlwZUZyb21EZWNvcmF0b3JzXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5SZWZsZWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlRnJvbURlY29yYXRvcihcbiAgbW9kZWw6IGFueSxcbiAgcHJvcEtleTogc3RyaW5nIHwgc3ltYm9sLFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZGVjb3JhdG9yczogeyBwcm9wOiBzdHJpbmcgfCBzeW1ib2w7IGRlY29yYXRvcnM6IGFueVtdIH0gPVxuICAgIGdldFByb3BlcnR5RGVjb3JhdG9ycyhNb2RlbEtleXMuUkVGTEVDVCwgbW9kZWwsIHByb3BLZXksIGZhbHNlKTtcbiAgaWYgKCFkZWNvcmF0b3JzIHx8ICFkZWNvcmF0b3JzLmRlY29yYXRvcnMpIHJldHVybjtcblxuICAvLyBUT0RPIGhhbmRsZSBAdHlwZSBkZWNvcmF0b3JzLiBmb3Igbm93IHdlIHN0aWNrIHdpdGggZGVzaWduOnR5cGVcbiAgY29uc3QgdHlwZURlY29yYXRvciA9IGRlY29yYXRvcnMuZGVjb3JhdG9ycy5zaGlmdCgpO1xuICBjb25zdCBuYW1lID0gdHlwZURlY29yYXRvci5wcm9wcyA/IHR5cGVEZWNvcmF0b3IucHJvcHMubmFtZSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIG5hbWUgIT09IFwiRnVuY3Rpb25cIiA/IG5hbWUgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgUmV0cmlldmVzIHRoZSBkZWNvcmF0b3JzIGZvciBhbiBvYmplY3QncyBwcm9wZXJ0aWVzIHByZWZpeGVkIGJ5IHtAcGFyYW0gcHJlZml4ZXN9XG4gKlxuICogQHBhcmFtIHtUfSBtb2RlbFxuICogQHBhcmFtIHtzdHJpbmdbXX0gcHJlZml4ZXNcbiAqXG4gKiBAZnVuY3Rpb24gZ2V0QWxsUHJvcGVydHlEZWNvcmF0b3JzXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTpkYi1kZWNvcmF0b3JzLlJlZmxlY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFsbFByb3BlcnR5RGVjb3JhdG9yczxUIGV4dGVuZHMgTW9kZWw+KFxuICBtb2RlbDogVCxcbiAgLi4ucHJlZml4ZXM6IHN0cmluZ1tdXG4pOiBSZWNvcmQ8c3RyaW5nLCBEZWNvcmF0b3JNZXRhZGF0YVtdPiB8IHVuZGVmaW5lZCB7XG4gIGlmICghcHJlZml4ZXMgfHwgIXByZWZpeGVzLmxlbmd0aCkgcmV0dXJuO1xuXG4gIGZ1bmN0aW9uIHB1c2hPckNyZWF0ZShcbiAgICBhY2N1bTogUmVjb3JkPHN0cmluZywgRGVjb3JhdG9yTWV0YWRhdGFbXT4sXG4gICAga2V5OiBzdHJpbmcsXG4gICAgZGVjb3JhdG9yczogRGVjb3JhdG9yTWV0YWRhdGFbXSxcbiAgKTogdm9pZCB7XG4gICAgaWYgKCFkZWNvcmF0b3JzIHx8ICFkZWNvcmF0b3JzLmxlbmd0aCkgcmV0dXJuO1xuICAgIGlmICghYWNjdW1ba2V5XSkgYWNjdW1ba2V5XSA9IFtdO1xuICAgIGFjY3VtW2tleV0ucHVzaCguLi5kZWNvcmF0b3JzKTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhtb2RlbCkucmVkdWNlKFxuICAgIChhY2N1bTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCwgcHJvcEtleSkgPT4ge1xuICAgICAgcHJlZml4ZXMuZm9yRWFjaCgocCwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgZGVjb3JhdG9yczoge1xuICAgICAgICAgIHByb3A6IHN0cmluZztcbiAgICAgICAgICBkZWNvcmF0b3JzOiBEZWNvcmF0b3JNZXRhZGF0YVtdO1xuICAgICAgICB9ID0gZ2V0UHJvcGVydHlEZWNvcmF0b3JzKHAsIG1vZGVsLCBwcm9wS2V5LCBpbmRleCAhPT0gMCk7XG4gICAgICAgIGlmICghYWNjdW0pIGFjY3VtID0ge307XG4gICAgICAgIHB1c2hPckNyZWF0ZShhY2N1bSwgcHJvcEtleSwgZGVjb3JhdG9ycy5kZWNvcmF0b3JzKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFjY3VtO1xuICAgIH0sXG4gICAgdW5kZWZpbmVkLFxuICApO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IFJldHJpZXZlcyBhbGwgcHJvcGVydGllcyBvZiBhbiBvYmplY3RcbiAqIEBkZXNjcmlwdGlvblxuICogIC0gYW5kIG9mIGFsbCBpdHMgcHJvdG90eXBlcyBpZiB7QHBhcmFtIGNsaW1iVHJlZX0gdW50aWwgaXQgcmVhY2hlcyB7QHBhcmFtIHN0b3BBdH0gKG9yIGVuZHMgdGhlIHByb3RvdHlwZSBjaGFpbilcbiAqXG4gKiBAcGFyYW0gb2JqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtjbGltYlRyZWVdIGRlZmF1bHQgdG8gdHJ1ZVxuICogQHBhcmFtIHtzdHJpbmd9IFtzdG9wQXRdIGRlZmF1bHRzIHRvICdPYmplY3QnXG4gKlxuICogQGZ1bmN0aW9uIGdldEFsbFByb3BlcnRpZXNcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uLk1vZGVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbGxQcm9wZXJ0aWVzKFxuICBvYmo6IFJlY29yZDxhbnksIGFueT4sXG4gIGNsaW1iVHJlZSA9IHRydWUsXG4gIHN0b3BBdCA9IFwiT2JqZWN0XCIsXG4pIHtcbiAgY29uc3QgYWxsUHJvcHM6IHN0cmluZ1tdID0gW107XG4gIGxldCBjdXJyOiBSZWNvcmQ8YW55LCBhbnk+ID0gb2JqO1xuXG4gIGNvbnN0IGtlZXBBdEl0ID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICghY2xpbWJUcmVlKSByZXR1cm47XG4gICAgY29uc3QgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGN1cnIpO1xuICAgIGlmICghcHJvdG90eXBlIHx8IHByb3RvdHlwZS5jb25zdHJ1Y3Rvci5uYW1lID09PSBzdG9wQXQpIHJldHVybjtcbiAgICBjdXJyID0gcHJvdG90eXBlO1xuICAgIHJldHVybiBjdXJyO1xuICB9O1xuXG4gIGRvIHtcbiAgICBjb25zdCBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGN1cnIpO1xuICAgIHByb3BzLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgIGlmIChhbGxQcm9wcy5pbmRleE9mKHByb3ApID09PSAtMSkgYWxsUHJvcHMucHVzaChwcm9wKTtcbiAgICB9KTtcbiAgfSB3aGlsZSAoa2VlcEF0SXQoKSk7XG4gIHJldHVybiBhbGxQcm9wcztcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBVdGlsIGZ1bmN0aW9uIHRvIHJldHJpZXZlIHRoZSBDbGFzcyBkZWNvcmF0b3JzXG4gKlxuICogQGZ1bmN0aW9uIGdldENsYXNzRGVjb3JhdG9yc1xuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5SZWZsZWN0aW9uXG4gKiBAY2F0ZWdvcnkgUmVmbGVjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2xhc3NEZWNvcmF0b3JzKFxuICBhbm5vdGF0aW9uUHJlZml4OiBzdHJpbmcsXG4gIHRhcmdldDogYW55LFxuKTogeyBrZXk6IHN0cmluZzsgcHJvcHM6IGFueSB9W10ge1xuICBjb25zdCBrZXlzOiBhbnlbXSA9IFJlZmxlY3QuZ2V0T3duTWV0YWRhdGFLZXlzKHRhcmdldC5jb25zdHJ1Y3Rvcik7XG5cbiAgcmV0dXJuIGtleXNcbiAgICAuZmlsdGVyKChrZXkpID0+IGtleS50b1N0cmluZygpLnN0YXJ0c1dpdGgoYW5ub3RhdGlvblByZWZpeCkpXG4gICAgLnJlZHVjZSgodmFsdWVzLCBrZXkpID0+IHtcbiAgICAgIC8vIGdldCBtZXRhZGF0YSB2YWx1ZVxuICAgICAgY29uc3QgY3VyclZhbHVlcyA9IHtcbiAgICAgICAga2V5OiBrZXkuc3Vic3RyaW5nKGFubm90YXRpb25QcmVmaXgubGVuZ3RoKSxcbiAgICAgICAgcHJvcHM6IFJlZmxlY3QuZ2V0TWV0YWRhdGEoa2V5LCB0YXJnZXQuY29uc3RydWN0b3IpLFxuICAgICAgfTtcbiAgICAgIHJldHVybiB2YWx1ZXMuY29uY2F0KGN1cnJWYWx1ZXMpO1xuICAgIH0sIFtdKTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBVdGlsIGZ1bmN0aW9uIHRvIGNoZWNrIGEgdHlwZSBhY2NvcmRpbmcgdG8gYSB0eXBlTmFtZVxuICpcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IGFjY2VwdGVkVHlwZVxuICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBmb3IgYSBtYXRjaCwgZmFsc2Ugb3RoZXJ3aXNlXG4gKlxuICogQGZ1bmN0aW9uIGNoZWNrVHlwZVxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5WYWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tUeXBlKHZhbHVlOiBhbnksIGFjY2VwdGVkVHlwZTogc3RyaW5nKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IGFjY2VwdGVkVHlwZSkgcmV0dXJuIHRydWU7XG4gIHJldHVybiAoXG4gICAgdmFsdWUuY29uc3RydWN0b3IgJiZcbiAgICB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IGFjY2VwdGVkVHlwZS50b0xvd2VyQ2FzZSgpXG4gICk7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgVXRpbCBmdW5jdGlvbiB0byBjaGVjayBhIHR5cGUgYWNjb3JkaW5nIG11bHRpcGxlIHBvc3NpYmlsaXRpZXNcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmdbXX0gYWNjZXB0ZWRUeXBlc1xuICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBhbnkgaXMgYSBtYXRjaCwgZmFsc2Ugb3RoZXJ3aXNlXG4gKlxuICogQGZ1bmN0aW9uIGNoZWNrVHlwZXNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uVmFsaWRhdGlvblxuICogQGNhdGVnb3J5IFZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrVHlwZXModmFsdWU6IGFueSwgYWNjZXB0ZWRUeXBlczogc3RyaW5nW10pIHtcbiAgcmV0dXJuICFhY2NlcHRlZFR5cGVzLmV2ZXJ5KCh0KSA9PiAhY2hlY2tUeXBlKHZhbHVlLCB0KSk7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgVGhlIG1vZGVsIHR5cGVcbiAqXG4gKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nIHwgc3RyaW5nW10gfCB7bmFtZTogc3RyaW5nfX0gdHlwZXNcbiAqXG4gKiBAZnVuY3Rpb24gZXZhbHVhdGVEZXNpZ25UeXBlc1xuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5WYWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZXZhbHVhdGVEZXNpZ25UeXBlcyhcbiAgdmFsdWU6IGFueSxcbiAgdHlwZXM6IHN0cmluZyB8IHN0cmluZ1tdIHwgeyBuYW1lOiBzdHJpbmcgfSxcbikge1xuICBzd2l0Y2ggKHR5cGVvZiB0eXBlcykge1xuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgIHJldHVybiBjaGVja1R5cGUodmFsdWUsIHR5cGVzKTtcbiAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0eXBlcykpIHJldHVybiBjaGVja1R5cGVzKHZhbHVlLCB0eXBlcyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgIGlmICh0eXBlcy5uYW1lICYmIHR5cGVzLm5hbWUgIT09IFwiT2JqZWN0XCIpXG4gICAgICAgIHJldHVybiBjaGVja1R5cGUodmFsdWUsIHR5cGVzLm5hbWUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogQHN1bW1hcnkgRm9yIFNlcmlhbGl6YXRpb24vZGVzZXJpYWxpemF0aW9uIHB1cnBvc2VzLlxuICogQGRlc2NyaXB0aW9uIFJlYWRzIHRoZSB7QGxpbmsgTW9kZWxLZXlzLkFOQ0hPUn0gcHJvcGVydHkgb2YgYSB7QGxpbmsgTW9kZWx9IHRvIGRpc2NvdmVyIHRoZSBjbGFzcyB0byBpbnN0YW50aWF0ZVxuICpcbiAqIEBmdW5jdGlvbiBpc01vZGVsXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uLlZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc01vZGVsKHRhcmdldDogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICByZXR1cm4gKFxuICAgICEhdGFyZ2V0W01vZGVsS2V5cy5BTkNIT1JdIHx8XG4gICAgISFnZXRDbGFzc0RlY29yYXRvcnMoTW9kZWxLZXlzLlJFRkxFQ1QsIHRhcmdldCkuZmluZChcbiAgICAgIChkZWMpID0+IGRlYy5rZXkgPT09IE1vZGVsS2V5cy5NT0RFTCAmJiBkZWMucHJvcHMgJiYgZGVjLnByb3BzLmNsYXNzLFxuICAgIClcbiAgKTtcbn1cbiJdfQ==
@@ -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;
@@ -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
@@ -1,2 +0,0 @@
1
- export * from "./decorators";
2
- export * from "./utils";