@decaf-ts/decorator-validation 1.3.7 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/decorator-validation.bundle.min.js +1 -1
- package/dist/esm/decorator-validation.bundle.min.esm.js +1 -1
- package/lib/esm/index.d.ts +1 -1
- package/lib/esm/index.js +2 -2
- package/lib/esm/model/Model.d.ts +30 -15
- package/lib/esm/model/Model.js +135 -24
- package/lib/esm/model/construction.d.ts +0 -27
- package/lib/esm/model/construction.js +1 -122
- package/lib/esm/model/decorators.d.ts +3 -3
- package/lib/esm/model/decorators.js +17 -8
- package/lib/esm/model/utils.d.ts +2 -10
- package/lib/esm/model/utils.js +8 -12
- package/lib/esm/utils/constants.d.ts +3 -1
- package/lib/esm/utils/constants.js +4 -2
- package/lib/esm/utils/decorators.d.ts +2 -2
- package/lib/esm/utils/decorators.js +16 -13
- package/lib/esm/validation/Validation.d.ts +7 -0
- package/lib/esm/validation/Validation.js +11 -1
- package/lib/esm/validation/Validators/constants.js +3 -2
- package/lib/esm/validation/Validators/decorators.js +2 -3
- package/lib/esm/validation/decorators.d.ts +12 -12
- package/lib/esm/validation/decorators.js +16 -16
- package/lib/esm/validation/index.d.ts +0 -1
- package/lib/esm/validation/index.js +1 -2
- package/lib/index.cjs +2 -2
- package/lib/index.d.ts +1 -1
- package/lib/model/Model.cjs +133 -22
- package/lib/model/Model.d.ts +30 -15
- package/lib/model/construction.cjs +1 -124
- package/lib/model/construction.d.ts +0 -27
- package/lib/model/decorators.cjs +19 -8
- package/lib/model/decorators.d.ts +3 -3
- package/lib/model/utils.cjs +9 -14
- package/lib/model/utils.d.ts +2 -10
- package/lib/utils/constants.cjs +4 -2
- package/lib/utils/constants.d.ts +3 -1
- package/lib/utils/decorators.cjs +17 -14
- package/lib/utils/decorators.d.ts +2 -2
- package/lib/validation/Validation.cjs +11 -1
- package/lib/validation/Validation.d.ts +7 -0
- package/lib/validation/Validators/constants.cjs +3 -2
- package/lib/validation/Validators/decorators.cjs +2 -3
- package/lib/validation/decorators.cjs +16 -16
- package/lib/validation/decorators.d.ts +12 -12
- package/lib/validation/index.cjs +1 -2
- package/lib/validation/index.d.ts +0 -1
- package/package.json +1 -1
- package/lib/esm/validation/utils.d.ts +0 -11
- package/lib/esm/validation/utils.js +0 -16
- package/lib/validation/utils.cjs +0 -19
- package/lib/validation/utils.d.ts +0 -11
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
export * from "./Validators";
|
|
2
2
|
export * from "./decorators";
|
|
3
3
|
export * from "./types";
|
|
4
|
-
export * from "./utils";
|
|
5
4
|
export * from "./Validation";
|
|
6
5
|
|
|
7
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
6
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy92YWxpZGF0aW9uL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsY0FBYyxDQUFDIiwiZmlsZSI6InZhbGlkYXRpb24vaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9WYWxpZGF0b3JzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kZWNvcmF0b3JzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vVmFsaWRhdGlvblwiO1xuIl19
|
package/lib/index.cjs
CHANGED
|
@@ -79,6 +79,6 @@ exports.VERSION = void 0;
|
|
|
79
79
|
__exportStar(require("./utils/index.cjs"), exports);
|
|
80
80
|
__exportStar(require("./validation/index.cjs"), exports);
|
|
81
81
|
__exportStar(require("./model/index.cjs"), exports);
|
|
82
|
-
exports.VERSION = "1.3.
|
|
82
|
+
exports.VERSION = "1.3.7";
|
|
83
83
|
|
|
84
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
84
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUg7Ozs7R0FJRztBQUVIOzs7O0dBSUc7QUFFSDs7O0dBR0c7QUFFSDs7O0dBR0c7QUFFSDs7O0dBR0c7QUFFSDs7O0dBR0c7QUFFSDs7O0dBR0c7QUFFSDs7O0dBR0c7QUFFSDs7O0dBR0c7QUFFSDs7O0dBR0c7QUFFSDs7O0dBR0c7QUFFSDs7O0dBR0c7QUFFSDs7O0dBR0c7QUFFSDs7O0dBR0c7QUFFSCwwQ0FBd0I7QUFDeEIsK0NBQTZCO0FBQzdCLDBDQUF3QjtBQUVYLFFBQUEsT0FBTyxHQUFHLE9BQU8sQ0FBQyIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG1vZHVsZSBkZWNvcmF0b3ItdmFsaWRhdGlvblxuICovXG5cbi8qKlxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgTW9kZWwgb2JqZWN0XG4gKiBAbmFtZXNwYWNlIE1vZGVsXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKi9cblxuLyoqXG4gKiBAc3VtbWFyeSBIb2xkcyBhbGwgdGhlIHN1cHBvcnRlZCBkZWNvcmF0b3JzXG4gKiBAbmFtZXNwYWNlIERlY29yYXRvcnNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgVmFsaWRhdGlvblxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5EZWNvcmF0b3JzXG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIE1vZGVsXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uLkRlY29yYXRvcnNcbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgUmVmbGVjdGlvbnNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uUmVmbGVjdGlvbnNcbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgQ29uc3RydWN0aW9uXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFZhbGlkYXRpb25cbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgVmFsaWRhdG9yc1xuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5WYWxpZGF0aW9uXG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIFV0aWxzXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIERhdGVzXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uLlV0aWxzXG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIEVxdWFsaXR5XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uLlV0aWxzXG4gKi9cblxuLyoqXG4gKiBAbmFtZXNwYWNlIEhhc2hpbmdcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uVXRpbHNcbiAqL1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgU2VyaWFsaXphdGlvblxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5VdGlsc1xuICovXG5cbi8qKlxuICogQG5hbWVzcGFjZSBGb3JtYXRcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uVXRpbHNcbiAqL1xuXG5leHBvcnQgKiBmcm9tIFwiLi91dGlsc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdmFsaWRhdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbW9kZWxcIjtcblxuZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBcIjEuMy43XCI7XG4iXX0=
|
package/lib/index.d.ts
CHANGED
package/lib/model/Model.cjs
CHANGED
|
@@ -2,13 +2,15 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Model = void 0;
|
|
4
4
|
const serialization_1 = require("../utils/serialization.cjs");
|
|
5
|
-
const construction_1 = require("./construction.cjs");
|
|
6
5
|
const Registry_1 = require("./Registry.cjs");
|
|
7
6
|
const reflection_1 = require("@decaf-ts/reflection");
|
|
8
7
|
const validation_1 = require("./validation.cjs");
|
|
9
8
|
const hashing_1 = require("../utils/hashing.cjs");
|
|
10
9
|
const utils_1 = require("./utils.cjs");
|
|
11
10
|
const constants_1 = require("../utils/constants.cjs");
|
|
11
|
+
const constants_2 = require("../validation/Validators/constants.cjs");
|
|
12
|
+
const strings_1 = require("../utils/strings.cjs");
|
|
13
|
+
const constants_3 = require("./constants.cjs");
|
|
12
14
|
let modelBuilderFunction;
|
|
13
15
|
let actingModelRegistry;
|
|
14
16
|
/**
|
|
@@ -16,14 +18,8 @@ let actingModelRegistry;
|
|
|
16
18
|
* @description Meant to be used as a base class for all Model classes
|
|
17
19
|
*
|
|
18
20
|
* Model objects must:
|
|
19
|
-
* - Have all their properties
|
|
20
|
-
* - Have all their properties
|
|
21
|
-
*
|
|
22
|
-
* <pre>
|
|
23
|
-
* class ClassName {
|
|
24
|
-
* propertyName?: PropertyType = undefined;
|
|
25
|
-
* }
|
|
26
|
-
* </pre>
|
|
21
|
+
* - Have all their required properties marked with '!';
|
|
22
|
+
* - Have all their optional properties marked as '?':
|
|
27
23
|
*
|
|
28
24
|
* @param {Model | {}} model base object from which to populate properties from
|
|
29
25
|
*
|
|
@@ -32,7 +28,13 @@ let actingModelRegistry;
|
|
|
32
28
|
* @implements Validatable
|
|
33
29
|
* @implements Serializable
|
|
34
30
|
*
|
|
35
|
-
* @
|
|
31
|
+
* @example
|
|
32
|
+
* class ClassName {
|
|
33
|
+
* @required()
|
|
34
|
+
* requiredPropertyName!: PropertyType;
|
|
35
|
+
*
|
|
36
|
+
* optionalPropertyName?: PropertyType;
|
|
37
|
+
* }
|
|
36
38
|
*/
|
|
37
39
|
class Model {
|
|
38
40
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
@@ -40,7 +42,7 @@ class Model {
|
|
|
40
42
|
/**
|
|
41
43
|
* @summary Validates the object according to its decorated properties
|
|
42
44
|
*
|
|
43
|
-
* @param {any[]} [exceptions] properties in the object to be ignored for
|
|
45
|
+
* @param {any[]} [exceptions] properties in the object to be ignored for the validation. Marked as 'any' to allow for extension but expects strings
|
|
44
46
|
*/
|
|
45
47
|
hasErrors(...exceptions) {
|
|
46
48
|
return (0, validation_1.validate)(this, ...exceptions);
|
|
@@ -80,26 +82,113 @@ class Model {
|
|
|
80
82
|
* @throws {Error} If it fails to parse the string, or if it fails to build the model
|
|
81
83
|
*/
|
|
82
84
|
static deserialize(str) {
|
|
83
|
-
const metadata = Reflect.getMetadata(
|
|
85
|
+
const metadata = Reflect.getMetadata(this.key(constants_1.ModelKeys.SERIALIZATION), this.constructor);
|
|
84
86
|
if (metadata && metadata.serializer)
|
|
85
87
|
return serialization_1.Serialization.deserialize(str, metadata.serializer, ...(metadata.args || []));
|
|
86
88
|
return serialization_1.Serialization.deserialize(str);
|
|
87
89
|
}
|
|
88
90
|
/**
|
|
89
|
-
* @summary
|
|
91
|
+
* @summary Repopulates the Object properties with the ones from the new object
|
|
92
|
+
* @description Iterates all common properties of obj (if existing) and self, and copies them onto self
|
|
93
|
+
*
|
|
90
94
|
* @param {T} self
|
|
91
|
-
* @param {T | Record<string, any>} obj
|
|
95
|
+
* @param {T | Record<string, any>} [obj]
|
|
96
|
+
*
|
|
92
97
|
*/
|
|
93
98
|
static fromObject(self, obj) {
|
|
94
|
-
|
|
99
|
+
if (!obj)
|
|
100
|
+
obj = {};
|
|
101
|
+
for (const prop of Model.getAttributes(self)) {
|
|
102
|
+
self[prop] = obj[prop] || undefined;
|
|
103
|
+
}
|
|
104
|
+
return self;
|
|
95
105
|
}
|
|
96
106
|
/**
|
|
97
|
-
* @summary
|
|
107
|
+
* @summary Repopulates the instance with the ones from the new Model Object
|
|
108
|
+
* @description Iterates all common properties of obj (if existing) and self, and copies them onto self.
|
|
109
|
+
* Is aware of nested Model Objects and rebuilds them also.
|
|
110
|
+
* When List properties are decorated with {@link list}, they list items will also be rebuilt
|
|
111
|
+
*
|
|
98
112
|
* @param {T} self
|
|
99
|
-
* @param {T | Record<string, any>} obj
|
|
113
|
+
* @param {T | Record<string, any>} [obj]
|
|
114
|
+
*
|
|
100
115
|
*/
|
|
101
116
|
static fromModel(self, obj) {
|
|
102
|
-
|
|
117
|
+
if (!obj)
|
|
118
|
+
obj = {};
|
|
119
|
+
let decorators, dec;
|
|
120
|
+
const props = Model.getAttributes(self);
|
|
121
|
+
for (const prop of props) {
|
|
122
|
+
self[prop] =
|
|
123
|
+
obj[prop] || undefined;
|
|
124
|
+
if (typeof self[prop] !== "object")
|
|
125
|
+
continue;
|
|
126
|
+
const propM = (0, utils_1.isPropertyModel)(self, prop);
|
|
127
|
+
if (propM) {
|
|
128
|
+
try {
|
|
129
|
+
self[prop] = Model.build(self[prop], typeof propM === "string" ? propM : undefined);
|
|
130
|
+
}
|
|
131
|
+
catch (e) {
|
|
132
|
+
console.log(e);
|
|
133
|
+
}
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
const allDecorators = (0, reflection_1.getPropertyDecorators)(constants_2.ValidationKeys.REFLECT, self, prop).decorators;
|
|
137
|
+
decorators = allDecorators.filter((d) => [constants_1.ModelKeys.TYPE, constants_2.ValidationKeys.TYPE].indexOf(d.key) !== -1);
|
|
138
|
+
if (!decorators || !decorators.length)
|
|
139
|
+
throw new Error((0, strings_1.sf)("failed to find decorators for property {0}", prop));
|
|
140
|
+
dec = decorators.pop();
|
|
141
|
+
const clazz = dec.props.name
|
|
142
|
+
? [dec.props.name]
|
|
143
|
+
: Array.isArray(dec.props.customTypes)
|
|
144
|
+
? dec.props.customTypes
|
|
145
|
+
: [dec.props.customTypes];
|
|
146
|
+
const reserved = Object.values(constants_3.ReservedModels).map((v) => v.toLowerCase());
|
|
147
|
+
clazz.forEach((c) => {
|
|
148
|
+
if (reserved.indexOf(c.toLowerCase()) === -1)
|
|
149
|
+
try {
|
|
150
|
+
switch (c) {
|
|
151
|
+
case "Array":
|
|
152
|
+
case "Set":
|
|
153
|
+
if (allDecorators.length) {
|
|
154
|
+
const listDec = allDecorators.find((d) => d.key === constants_2.ValidationKeys.LIST);
|
|
155
|
+
if (listDec) {
|
|
156
|
+
const clazzName = listDec.props.class.find((t) => !constants_3.jsTypes.includes(t.toLowerCase()));
|
|
157
|
+
if (c === "Array")
|
|
158
|
+
self[prop] = self[prop].map((el) => {
|
|
159
|
+
return ["object", "function"].includes(typeof el) &&
|
|
160
|
+
clazzName
|
|
161
|
+
? Model.build(el, clazzName)
|
|
162
|
+
: el;
|
|
163
|
+
});
|
|
164
|
+
if (c === "Set") {
|
|
165
|
+
const s = new Set();
|
|
166
|
+
for (const v of self[prop]) {
|
|
167
|
+
if (["object", "function"].includes(typeof v) &&
|
|
168
|
+
clazzName) {
|
|
169
|
+
s.add(Model.build(v, clazzName));
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
s.add(v);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
self[prop] = s;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
break;
|
|
180
|
+
default:
|
|
181
|
+
if (self[prop])
|
|
182
|
+
self[prop] = Model.build(self[prop], c);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
catch (e) {
|
|
186
|
+
console.log(e);
|
|
187
|
+
// do nothing. we have no registry of this class
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
return self;
|
|
103
192
|
}
|
|
104
193
|
/**
|
|
105
194
|
* @summary Sets the Global {@link ModelBuilderFunction}
|
|
@@ -163,11 +252,25 @@ class Model {
|
|
|
163
252
|
return Model.getRegistry().build(obj, clazz);
|
|
164
253
|
}
|
|
165
254
|
static getMetadata(model) {
|
|
166
|
-
const metadata = Reflect.getMetadata(
|
|
255
|
+
const metadata = Reflect.getMetadata(this.key(constants_1.ModelKeys.MODEL), model.constructor);
|
|
167
256
|
if (!metadata)
|
|
168
257
|
throw new Error("could not find metadata for provided " + model.constructor.name);
|
|
169
258
|
return metadata;
|
|
170
259
|
}
|
|
260
|
+
static getAttributes(model) {
|
|
261
|
+
const result = [];
|
|
262
|
+
let prototype = model instanceof Model
|
|
263
|
+
? Object.getPrototypeOf(model)
|
|
264
|
+
: model.prototype;
|
|
265
|
+
while (prototype != null) {
|
|
266
|
+
const props = prototype[constants_1.ModelKeys.ATTRIBUTE];
|
|
267
|
+
if (props) {
|
|
268
|
+
result.push(...props);
|
|
269
|
+
}
|
|
270
|
+
prototype = Object.getPrototypeOf(prototype);
|
|
271
|
+
}
|
|
272
|
+
return result;
|
|
273
|
+
}
|
|
171
274
|
static equals(obj1, obj2, ...exceptions) {
|
|
172
275
|
return (0, reflection_1.isEqual)(obj1, obj2, ...exceptions);
|
|
173
276
|
}
|
|
@@ -175,18 +278,26 @@ class Model {
|
|
|
175
278
|
return (0, validation_1.validate)(model, ...exceptions);
|
|
176
279
|
}
|
|
177
280
|
static serialize(model) {
|
|
178
|
-
const metadata = Reflect.getMetadata(
|
|
281
|
+
const metadata = Reflect.getMetadata(this.key(constants_1.ModelKeys.SERIALIZATION), model.constructor);
|
|
179
282
|
if (metadata && metadata.serializer)
|
|
180
283
|
return serialization_1.Serialization.serialize(this, metadata.serializer, ...(metadata.args || []));
|
|
181
284
|
return serialization_1.Serialization.serialize(model);
|
|
182
285
|
}
|
|
183
286
|
static hash(model) {
|
|
184
|
-
const metadata = Reflect.getMetadata(
|
|
287
|
+
const metadata = Reflect.getMetadata(this.key(constants_1.ModelKeys.HASHING), model.constructor);
|
|
185
288
|
if (metadata && metadata.algorithm)
|
|
186
289
|
return hashing_1.Hashing.hash(model, metadata.algorithm, ...(metadata.args || []));
|
|
187
290
|
return hashing_1.Hashing.hash(model);
|
|
188
291
|
}
|
|
292
|
+
/**
|
|
293
|
+
* @summary Builds the key to store as Metadata under Reflections
|
|
294
|
+
* @description concatenates {@link ModelKeys#REFLECT} with the provided key
|
|
295
|
+
* @param {string} str
|
|
296
|
+
*/
|
|
297
|
+
static key(str) {
|
|
298
|
+
return constants_1.ModelKeys.REFLECT + str;
|
|
299
|
+
}
|
|
189
300
|
}
|
|
190
301
|
exports.Model = Model;
|
|
191
302
|
|
|
192
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,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SUFDeEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxTQUFTLENBQWtCLEtBQVE7UUFDeEMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FDbEMsSUFBQSxtQkFBVyxFQUFDLHFCQUFTLENBQUMsYUFBYSxDQUFDLEVBQ3BDLEtBQUssQ0FBQyxXQUFXLENBQ2xCLENBQUM7UUFFRixJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsVUFBVTtZQUNqQyxPQUFPLDZCQUFhLENBQUMsU0FBUyxDQUM1QixJQUFJLEVBQ0osUUFBUSxDQUFDLFVBQVUsRUFDbkIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQ3pCLENBQUM7UUFDSixPQUFPLDZCQUFhLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBSSxDQUFrQixLQUFRO1FBQ25DLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQ2xDLElBQUEsbUJBQVcsRUFBQyxxQkFBUyxDQUFDLE9BQU8sQ0FBQyxFQUM5QixLQUFLLENBQUMsV0FBVyxDQUNsQixDQUFDO1FBRUYsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLFNBQVM7WUFDaEMsT0FBTyxpQkFBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzNFLE9BQU8saUJBQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQztDQUNGO0FBL01ELHNCQStNQyIsImZpbGUiOiJtb2RlbC9Nb2RlbC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlcmlhbGl6YXRpb24gfSBmcm9tIFwiLi4vdXRpbHMvc2VyaWFsaXphdGlvblwiO1xuaW1wb3J0IHsgQnVpbGRlclJlZ2lzdHJ5IH0gZnJvbSBcIi4uL3V0aWxzL3JlZ2lzdHJ5XCI7XG5pbXBvcnQgeyBNb2RlbEVycm9yRGVmaW5pdGlvbiB9IGZyb20gXCIuL01vZGVsRXJyb3JEZWZpbml0aW9uXCI7XG5pbXBvcnQge1xuICBDb21wYXJhYmxlLFxuICBIYXNoYWJsZSxcbiAgTW9kZWxBcmcsXG4gIE1vZGVsQ29uc3RydWN0b3IsXG4gIFNlcmlhbGl6YWJsZSxcbiAgVmFsaWRhdGFibGUsXG59IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQge1xuICBjb25zdHJ1Y3RGcm9tTW9kZWwsXG4gIGNvbnN0cnVjdEZyb21PYmplY3QsXG4gIE1vZGVsQnVpbGRlckZ1bmN0aW9uLFxufSBmcm9tIFwiLi9jb25zdHJ1Y3Rpb25cIjtcbmltcG9ydCB7IE1vZGVsUmVnaXN0cnlNYW5hZ2VyIH0gZnJvbSBcIi4vUmVnaXN0cnlcIjtcbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tIFwiQGRlY2FmLXRzL3JlZmxlY3Rpb25cIjtcbmltcG9ydCB7IHZhbGlkYXRlIH0gZnJvbSBcIi4vdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgSGFzaGluZyB9IGZyb20gXCIuLi91dGlscy9oYXNoaW5nXCI7XG5pbXBvcnQgeyBnZXRNb2RlbEtleSB9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgeyBNb2RlbEtleXMgfSBmcm9tIFwiLi4vdXRpbHMvY29uc3RhbnRzXCI7XG5cbmxldCBtb2RlbEJ1aWxkZXJGdW5jdGlvbjogTW9kZWxCdWlsZGVyRnVuY3Rpb24gfCB1bmRlZmluZWQ7XG5sZXQgYWN0aW5nTW9kZWxSZWdpc3RyeTogQnVpbGRlclJlZ2lzdHJ5PGFueT47XG5cbi8qKlxuICogQHN1bW1hcnkgQWJzdHJhY3QgY2xhc3MgcmVwcmVzZW50aW5nIGEgVmFsaWRhdGFibGUgTW9kZWwgb2JqZWN0XG4gKiBAZGVzY3JpcHRpb24gTWVhbnQgdG8gYmUgdXNlZCBhcyBhIGJhc2UgY2xhc3MgZm9yIGFsbCBNb2RlbCBjbGFzc2VzXG4gKlxuICogTW9kZWwgb2JqZWN0cyBtdXN0OlxuICogIC0gSGF2ZSBhbGwgdGhlaXIgcHJvcGVydGllcyBkZWZpbmVkIGFzIG9wdGlvbmFsO1xuICogIC0gSGF2ZSBhbGwgdGhlaXIgcHJvcGVydGllcyBpbml0aWFsaXplZCBlZzpcbiAqXG4gKiAgPHByZT5cbiAqICAgICAgY2xhc3MgQ2xhc3NOYW1lIHtcbiAqICAgICAgICAgIHByb3BlcnR5TmFtZT86IFByb3BlcnR5VHlwZSA9IHVuZGVmaW5lZDtcbiAqICAgICAgfVxuICogIDwvcHJlPlxuICpcbiAqIEBwYXJhbSB7TW9kZWwgfCB7fX0gbW9kZWwgYmFzZSBvYmplY3QgZnJvbSB3aGljaCB0byBwb3B1bGF0ZSBwcm9wZXJ0aWVzIGZyb21cbiAqXG4gKiBAY2xhc3MgTW9kZWxcbiAqIEBhYnN0cmFjdFxuICogQGltcGxlbWVudHMgVmFsaWRhdGFibGVcbiAqIEBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZVxuICpcbiAqIEBjYXRlZ29yeSBNb2RlbFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTW9kZWxcbiAgaW1wbGVtZW50cyBWYWxpZGF0YWJsZSwgU2VyaWFsaXphYmxlLCBIYXNoYWJsZSwgQ29tcGFyYWJsZTxNb2RlbD5cbntcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoYXJnPzogTW9kZWxBcmc8TW9kZWw+KSB7fVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBWYWxpZGF0ZXMgdGhlIG9iamVjdCBhY2NvcmRpbmcgdG8gaXRzIGRlY29yYXRlZCBwcm9wZXJ0aWVzXG4gICAqXG4gICAqIEBwYXJhbSB7YW55W119IFtleGNlcHRpb25zXSBwcm9wZXJ0aWVzIGluIHRoZSBvYmplY3QgdG8gYmUgaWdub3JlZCBmb3IgaGUgdmFsaWRhdGlvbi4gTWFya2VkIGFzICdhbnknIHRvIGFsbG93IGZvciBleHRlbnNpb24gYnV0IGV4cGVjdHMgc3RyaW5nc1xuICAgKi9cbiAgcHVibGljIGhhc0Vycm9ycyguLi5leGNlcHRpb25zOiBhbnlbXSk6IE1vZGVsRXJyb3JEZWZpbml0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdmFsaWRhdGUodGhpcywgLi4uZXhjZXB0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgQ29tcGFyZSBvYmplY3QgZXF1YWxpdHkgcmVjdXJzaXZlbHlcbiAgICogQHBhcmFtIHthbnl9IG9iaiBvYmplY3QgdG8gY29tcGFyZSB0b1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW2V4Y2VwdGlvbnNdIHByb3BlcnR5IG5hbWVzIHRvIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIGNvbXBhcmlzb25cbiAgICovXG4gIHB1YmxpYyBlcXVhbHMob2JqOiBhbnksIC4uLmV4Y2VwdGlvbnM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzRXF1YWwodGhpcywgb2JqLCAuLi5leGNlcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBSZXR1cm5zIHRoZSBzZXJpYWxpemVkIG1vZGVsIGFjY29yZGluZyB0byB0aGUgY3VycmVudGx5IGRlZmluZWQge0BsaW5rIFNlcmlhbGl6ZXJ9XG4gICAqL1xuICBzZXJpYWxpemUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gTW9kZWwuc2VyaWFsaXplKHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IE92ZXJyaWRlIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IganMncyAndG9TdHJpbmcoKScgd2hpY2ggc3Vja3MuLi5cbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lICsgXCI6IFwiICsgSlNPTi5zdHJpbmdpZnkodGhpcywgdW5kZWZpbmVkLCAyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBEZWZpbmVzIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3Igb2JqZWN0IGhhc2guIFJlbGllcyBvbiBhIHZlcnkgYmFzaWMgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gSmF2YSdzIHN0cmluZyBoYXNoO1xuICAgKi9cbiAgcHVibGljIGhhc2goKTogc3RyaW5nIHtcbiAgICByZXR1cm4gTW9kZWwuaGFzaCh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBEZXNlcmlhbGl6ZXMgYSBNb2RlbFxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqXG4gICAqIEBwYXJhbSBhcmdzXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiBpdCBmYWlscyB0byBwYXJzZSB0aGUgc3RyaW5nLCBvciBpZiBpdCBmYWlscyB0byBidWlsZCB0aGUgbW9kZWxcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZShzdHI6IHN0cmluZykge1xuICAgIGNvbnN0IG1ldGFkYXRhID0gUmVmbGVjdC5nZXRNZXRhZGF0YShcbiAgICAgIGdldE1vZGVsS2V5KE1vZGVsS2V5cy5TRVJJQUxJWkFUSU9OKSxcbiAgICAgIHRoaXMuY29uc3RydWN0b3JcbiAgICApO1xuXG4gICAgaWYgKG1ldGFkYXRhICYmIG1ldGFkYXRhLnNlcmlhbGl6ZXIpXG4gICAgICByZXR1cm4gU2VyaWFsaXphdGlvbi5kZXNlcmlhbGl6ZShcbiAgICAgICAgc3RyLFxuICAgICAgICBtZXRhZGF0YS5zZXJpYWxpemVyLFxuICAgICAgICAuLi4obWV0YWRhdGEuYXJncyB8fCBbXSlcbiAgICAgICk7XG4gICAgcmV0dXJuIFNlcmlhbGl6YXRpb24uZGVzZXJpYWxpemUoc3RyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBXcmFwcGVyIGFyb3VuZCB7QGxpbmsgY29uc3RydWN0RnJvbU9iamVjdH1cbiAgICogQHBhcmFtIHtUfSBzZWxmXG4gICAqIEBwYXJhbSB7VCB8IFJlY29yZDxzdHJpbmcsIGFueT59IG9ialxuICAgKi9cbiAgc3RhdGljIGZyb21PYmplY3Q8VCBleHRlbmRzIE1vZGVsPihcbiAgICBzZWxmOiBULFxuICAgIG9iaj86IFQgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICk6IFQge1xuICAgIHJldHVybiBjb25zdHJ1Y3RGcm9tT2JqZWN0PFQ+KHNlbGYsIG9iaik7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgV3JhcHBlciBhcm91bmQge0BsaW5rIGNvbnN0cnVjdEZyb21Nb2RlbH1cbiAgICogQHBhcmFtIHtUfSBzZWxmXG4gICAqIEBwYXJhbSB7VCB8IFJlY29yZDxzdHJpbmcsIGFueT59IG9ialxuICAgKi9cbiAgc3RhdGljIGZyb21Nb2RlbDxUIGV4dGVuZHMgTW9kZWw+KHNlbGY6IFQsIG9iaj86IFQgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogVCB7XG4gICAgcmV0dXJuIGNvbnN0cnVjdEZyb21Nb2RlbDxUPihzZWxmLCBvYmopO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFNldHMgdGhlIEdsb2JhbCB7QGxpbmsgTW9kZWxCdWlsZGVyRnVuY3Rpb259XG4gICAqIEBwYXJhbSB7TW9kZWxCdWlsZGVyRnVuY3Rpb259IFtidWlsZGVyXVxuICAgKi9cbiAgc3RhdGljIHNldEJ1aWxkZXIoYnVpbGRlcj86IE1vZGVsQnVpbGRlckZ1bmN0aW9uKSB7XG4gICAgbW9kZWxCdWlsZGVyRnVuY3Rpb24gPSBidWlsZGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFJldHJpZXZlcyB0aGUgY3VycmVudCBnbG9iYWwge0BsaW5rIE1vZGVsQnVpbGRlckZ1bmN0aW9ufVxuICAgKi9cbiAgc3RhdGljIGdldEJ1aWxkZXIoKTogTW9kZWxCdWlsZGVyRnVuY3Rpb24gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBtb2RlbEJ1aWxkZXJGdW5jdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHtAbGluayBNb2RlbFJlZ2lzdHJ5TWFuYWdlcn1cbiAgICpcbiAgICogQHJldHVybiBNb2RlbFJlZ2lzdHJ5LCBkZWZhdWx0cyB0byB7QGxpbmsgTW9kZWxSZWdpc3RyeU1hbmFnZXJ9XG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBnZXRSZWdpc3RyeSgpIHtcbiAgICBpZiAoIWFjdGluZ01vZGVsUmVnaXN0cnkpIGFjdGluZ01vZGVsUmVnaXN0cnkgPSBuZXcgTW9kZWxSZWdpc3RyeU1hbmFnZXIoKTtcbiAgICByZXR1cm4gYWN0aW5nTW9kZWxSZWdpc3RyeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGFjdGluZ01vZGVsUmVnaXN0cnlcbiAgICpcbiAgICogQHBhcmFtIHtCdWlsZGVyUmVnaXN0cnl9IG1vZGVsUmVnaXN0cnkgdGhlIG5ldyBpbXBsZW1lbnRhdGlvbiBvZiBSZWdpc3RyeVxuICAgKi9cbiAgc3RhdGljIHNldFJlZ2lzdHJ5KG1vZGVsUmVnaXN0cnk6IEJ1aWxkZXJSZWdpc3RyeTxhbnk+KSB7XG4gICAgYWN0aW5nTW9kZWxSZWdpc3RyeSA9IG1vZGVsUmVnaXN0cnk7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgcmVnaXN0ZXIgbmV3IE1vZGVsc1xuICAgKiBAcGFyYW0ge2FueX0gY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtuYW1lXSB3aGVuIG5vdCBkZWZpbmVkLCB0aGUgbmFtZSBvZiB0aGUgY29uc3RydWN0b3Igd2lsbCBiZSB1c2VkXG4gICAqXG4gICAqIEBzZWUgTW9kZWxSZWdpc3RyeVxuICAgKi9cbiAgc3RhdGljIHJlZ2lzdGVyPFQgZXh0ZW5kcyBNb2RlbD4oXG4gICAgY29uc3RydWN0b3I6IE1vZGVsQ29uc3RydWN0b3I8VD4sXG4gICAgbmFtZT86IHN0cmluZ1xuICApOiB2b2lkIHtcbiAgICByZXR1cm4gTW9kZWwuZ2V0UmVnaXN0cnkoKS5yZWdpc3Rlcihjb25zdHJ1Y3RvciwgbmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgR2V0cyBhIHJlZ2lzdGVyZWQgTW9kZWwge0BsaW5rIE1vZGVsQ29uc3RydWN0b3J9XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqXG4gICAqIEBzZWUgTW9kZWxSZWdpc3RyeVxuICAgKi9cbiAgc3RhdGljIGdldDxUIGV4dGVuZHMgTW9kZWw+KG5hbWU6IHN0cmluZyk6IE1vZGVsQ29uc3RydWN0b3I8VD4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBNb2RlbC5nZXRSZWdpc3RyeSgpLmdldChuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IG9ialxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2NsYXp6XSB3aGVuIHByb3ZpZGVkLCBpdCB3aWxsIGF0dGVtcHQgdG8gZmluZCB0aGUgbWF0Y2hpbmcgY29uc3RydWN0b3JcbiAgICpcbiAgICogQHRocm93cyBFcnJvciBJZiBjbGF6eiBpcyBub3QgZm91bmQsIG9yIG9iaiBpcyBub3QgYSB7QGxpbmsgTW9kZWx9IG1lYW5pbmcgaXQgaGFzIG5vIHtAbGluayBNb2RlbEtleXMuQU5DSE9SfSBwcm9wZXJ0eVxuICAgKlxuICAgKiBAc2VlIE1vZGVsUmVnaXN0cnlcbiAgICovXG4gIHN0YXRpYyBidWlsZDxUIGV4dGVuZHMgTW9kZWw+KFxuICAgIG9iajogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9LFxuICAgIGNsYXp6Pzogc3RyaW5nXG4gICk6IFQge1xuICAgIHJldHVybiBNb2RlbC5nZXRSZWdpc3RyeSgpLmJ1aWxkKG9iaiwgY2xhenopO1xuICB9XG5cbiAgc3RhdGljIGdldE1ldGFkYXRhPFYgZXh0ZW5kcyBNb2RlbD4obW9kZWw6IFYpIHtcbiAgICBjb25zdCBtZXRhZGF0YSA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoXG4gICAgICBnZXRNb2RlbEtleShNb2RlbEtleXMuTU9ERUwpLFxuICAgICAgbW9kZWwuY29uc3RydWN0b3JcbiAgICApO1xuICAgIGlmICghbWV0YWRhdGEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiY291bGQgbm90IGZpbmQgbWV0YWRhdGEgZm9yIHByb3ZpZGVkIFwiICsgbW9kZWwuY29uc3RydWN0b3IubmFtZVxuICAgICAgKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH1cblxuICBzdGF0aWMgZXF1YWxzPFYgZXh0ZW5kcyBNb2RlbD4ob2JqMTogViwgb2JqMjogViwgLi4uZXhjZXB0aW9uczogYW55W10pIHtcbiAgICByZXR1cm4gaXNFcXVhbChvYmoxLCBvYmoyLCAuLi5leGNlcHRpb25zKTtcbiAgfVxuXG4gIHN0YXRpYyBoYXNFcnJvcnM8ViBleHRlbmRzIE1vZGVsPihtb2RlbDogViwgLi4uZXhjZXB0aW9uczogYW55W10pIHtcbiAgICByZXR1cm4gdmFsaWRhdGUobW9kZWwsIC4uLmV4Y2VwdGlvbnMpO1xuICB9XG5cbiAgc3RhdGljIHNlcmlhbGl6ZTxWIGV4dGVuZHMgTW9kZWw+KG1vZGVsOiBWKSB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBSZWZsZWN0LmdldE1ldGFkYXRhKFxuICAgICAgZ2V0TW9kZWxLZXkoTW9kZWxLZXlzLlNFUklBTElaQVRJT04pLFxuICAgICAgbW9kZWwuY29uc3RydWN0b3JcbiAgICApO1xuXG4gICAgaWYgKG1ldGFkYXRhICYmIG1ldGFkYXRhLnNlcmlhbGl6ZXIpXG4gICAgICByZXR1cm4gU2VyaWFsaXphdGlvbi5zZXJpYWxpemUoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIG1ldGFkYXRhLnNlcmlhbGl6ZXIsXG4gICAgICAgIC4uLihtZXRhZGF0YS5hcmdzIHx8IFtdKVxuICAgICAgKTtcbiAgICByZXR1cm4gU2VyaWFsaXphdGlvbi5zZXJpYWxpemUobW9kZWwpO1xuICB9XG5cbiAgc3RhdGljIGhhc2g8ViBleHRlbmRzIE1vZGVsPihtb2RlbDogVikge1xuICAgIGNvbnN0IG1ldGFkYXRhID0gUmVmbGVjdC5nZXRNZXRhZGF0YShcbiAgICAgIGdldE1vZGVsS2V5KE1vZGVsS2V5cy5IQVNISU5HKSxcbiAgICAgIG1vZGVsLmNvbnN0cnVjdG9yXG4gICAgKTtcblxuICAgIGlmIChtZXRhZGF0YSAmJiBtZXRhZGF0YS5hbGdvcml0aG0pXG4gICAgICByZXR1cm4gSGFzaGluZy5oYXNoKG1vZGVsLCBtZXRhZGF0YS5hbGdvcml0aG0sIC4uLihtZXRhZGF0YS5hcmdzIHx8IFtdKSk7XG4gICAgcmV0dXJuIEhhc2hpbmcuaGFzaChtb2RlbCk7XG4gIH1cbn1cbiJdfQ==
|
|
303
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,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ZmlsZSI6Im1vZGVsL01vZGVsLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VyaWFsaXphdGlvbiB9IGZyb20gXCIuLi91dGlscy9zZXJpYWxpemF0aW9uXCI7XG5pbXBvcnQgeyBCdWlsZGVyUmVnaXN0cnkgfSBmcm9tIFwiLi4vdXRpbHMvcmVnaXN0cnlcIjtcbmltcG9ydCB7IE1vZGVsRXJyb3JEZWZpbml0aW9uIH0gZnJvbSBcIi4vTW9kZWxFcnJvckRlZmluaXRpb25cIjtcbmltcG9ydCB7XG4gIENvbXBhcmFibGUsXG4gIENvbnN0cnVjdG9yLFxuICBIYXNoYWJsZSxcbiAgTW9kZWxBcmcsXG4gIE1vZGVsQ29uc3RydWN0b3IsXG4gIFNlcmlhbGl6YWJsZSxcbiAgVmFsaWRhdGFibGUsXG59IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBNb2RlbEJ1aWxkZXJGdW5jdGlvbiB9IGZyb20gXCIuL2NvbnN0cnVjdGlvblwiO1xuaW1wb3J0IHsgTW9kZWxSZWdpc3RyeU1hbmFnZXIgfSBmcm9tIFwiLi9SZWdpc3RyeVwiO1xuaW1wb3J0IHtcbiAgRGVjb3JhdG9yTWV0YWRhdGEsXG4gIGdldFByb3BlcnR5RGVjb3JhdG9ycyxcbiAgaXNFcXVhbCxcbn0gZnJvbSBcIkBkZWNhZi10cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZSB9IGZyb20gXCIuL3ZhbGlkYXRpb25cIjtcbmltcG9ydCB7IEhhc2hpbmcgfSBmcm9tIFwiLi4vdXRpbHMvaGFzaGluZ1wiO1xuaW1wb3J0IHsgaXNQcm9wZXJ0eU1vZGVsIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7IE1vZGVsS2V5cyB9IGZyb20gXCIuLi91dGlscy9jb25zdGFudHNcIjtcbmltcG9ydCB7IFZhbGlkYXRpb25LZXlzIH0gZnJvbSBcIi4uL3ZhbGlkYXRpb24vVmFsaWRhdG9ycy9jb25zdGFudHNcIjtcbmltcG9ydCB7IHNmIH0gZnJvbSBcIi4uL3V0aWxzL3N0cmluZ3NcIjtcbmltcG9ydCB7IGpzVHlwZXMsIFJlc2VydmVkTW9kZWxzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmxldCBtb2RlbEJ1aWxkZXJGdW5jdGlvbjogTW9kZWxCdWlsZGVyRnVuY3Rpb24gfCB1bmRlZmluZWQ7XG5sZXQgYWN0aW5nTW9kZWxSZWdpc3RyeTogQnVpbGRlclJlZ2lzdHJ5PGFueT47XG5cbi8qKlxuICogQHN1bW1hcnkgQWJzdHJhY3QgY2xhc3MgcmVwcmVzZW50aW5nIGEgVmFsaWRhdGFibGUgTW9kZWwgb2JqZWN0XG4gKiBAZGVzY3JpcHRpb24gTWVhbnQgdG8gYmUgdXNlZCBhcyBhIGJhc2UgY2xhc3MgZm9yIGFsbCBNb2RlbCBjbGFzc2VzXG4gKlxuICogTW9kZWwgb2JqZWN0cyBtdXN0OlxuICogIC0gSGF2ZSBhbGwgdGhlaXIgcmVxdWlyZWQgcHJvcGVydGllcyBtYXJrZWQgd2l0aCAnISc7XG4gKiAgLSBIYXZlIGFsbCB0aGVpciBvcHRpb25hbCBwcm9wZXJ0aWVzIG1hcmtlZCBhcyAnPyc6XG4gKlxuICogQHBhcmFtIHtNb2RlbCB8IHt9fSBtb2RlbCBiYXNlIG9iamVjdCBmcm9tIHdoaWNoIHRvIHBvcHVsYXRlIHByb3BlcnRpZXMgZnJvbVxuICpcbiAqIEBjbGFzcyBNb2RlbFxuICogQGFic3RyYWN0XG4gKiBAaW1wbGVtZW50cyBWYWxpZGF0YWJsZVxuICogQGltcGxlbWVudHMgU2VyaWFsaXphYmxlXG4gKlxuICogQGV4YW1wbGVcbiAqICAgICAgY2xhc3MgQ2xhc3NOYW1lIHtcbiAqICAgICAgICAgIEByZXF1aXJlZCgpXG4gKiAgICAgICAgICByZXF1aXJlZFByb3BlcnR5TmFtZSE6IFByb3BlcnR5VHlwZTtcbiAqXG4gKiAgICAgICAgICBvcHRpb25hbFByb3BlcnR5TmFtZT86IFByb3BlcnR5VHlwZTtcbiAqICAgICAgfVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTW9kZWxcbiAgaW1wbGVtZW50cyBWYWxpZGF0YWJsZSwgU2VyaWFsaXphYmxlLCBIYXNoYWJsZSwgQ29tcGFyYWJsZTxNb2RlbD5cbntcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoYXJnPzogTW9kZWxBcmc8TW9kZWw+KSB7fVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBWYWxpZGF0ZXMgdGhlIG9iamVjdCBhY2NvcmRpbmcgdG8gaXRzIGRlY29yYXRlZCBwcm9wZXJ0aWVzXG4gICAqXG4gICAqIEBwYXJhbSB7YW55W119IFtleGNlcHRpb25zXSBwcm9wZXJ0aWVzIGluIHRoZSBvYmplY3QgdG8gYmUgaWdub3JlZCBmb3IgdGhlIHZhbGlkYXRpb24uIE1hcmtlZCBhcyAnYW55JyB0byBhbGxvdyBmb3IgZXh0ZW5zaW9uIGJ1dCBleHBlY3RzIHN0cmluZ3NcbiAgICovXG4gIHB1YmxpYyBoYXNFcnJvcnMoLi4uZXhjZXB0aW9uczogYW55W10pOiBNb2RlbEVycm9yRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHZhbGlkYXRlKHRoaXMsIC4uLmV4Y2VwdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IENvbXBhcmUgb2JqZWN0IGVxdWFsaXR5IHJlY3Vyc2l2ZWx5XG4gICAqIEBwYXJhbSB7YW55fSBvYmogb2JqZWN0IHRvIGNvbXBhcmUgdG9cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtleGNlcHRpb25zXSBwcm9wZXJ0eSBuYW1lcyB0byBiZSBleGNsdWRlZCBmcm9tIHRoZSBjb21wYXJpc29uXG4gICAqL1xuICBwdWJsaWMgZXF1YWxzKG9iajogYW55LCAuLi5leGNlcHRpb25zOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc0VxdWFsKHRoaXMsIG9iaiwgLi4uZXhjZXB0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgUmV0dXJucyB0aGUgc2VyaWFsaXplZCBtb2RlbCBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnRseSBkZWZpbmVkIHtAbGluayBTZXJpYWxpemVyfVxuICAgKi9cbiAgc2VyaWFsaXplKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIE1vZGVsLnNlcmlhbGl6ZSh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBPdmVycmlkZSB0aGUgaW1wbGVtZW50YXRpb24gZm9yIGpzJ3MgJ3RvU3RyaW5nKCknIHdoaWNoIHN1Y2tzLi4uXG4gICAqIEBvdmVycmlkZVxuICAgKi9cbiAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IubmFtZSArIFwiOiBcIiArIEpTT04uc3RyaW5naWZ5KHRoaXMsIHVuZGVmaW5lZCwgMik7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgRGVmaW5lcyBhIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZm9yIG9iamVjdCBoYXNoLiBSZWxpZXMgb24gYSB2ZXJ5IGJhc2ljIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIEphdmEncyBzdHJpbmcgaGFzaDtcbiAgICovXG4gIHB1YmxpYyBoYXNoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIE1vZGVsLmhhc2godGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgRGVzZXJpYWxpemVzIGEgTW9kZWxcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKlxuICAgKiBAcGFyYW0gYXJnc1xuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgaXQgZmFpbHMgdG8gcGFyc2UgdGhlIHN0cmluZywgb3IgaWYgaXQgZmFpbHMgdG8gYnVpbGQgdGhlIG1vZGVsXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemUoc3RyOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtZXRhZGF0YSA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoXG4gICAgICB0aGlzLmtleShNb2RlbEtleXMuU0VSSUFMSVpBVElPTiksXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yXG4gICAgKTtcblxuICAgIGlmIChtZXRhZGF0YSAmJiBtZXRhZGF0YS5zZXJpYWxpemVyKVxuICAgICAgcmV0dXJuIFNlcmlhbGl6YXRpb24uZGVzZXJpYWxpemUoXG4gICAgICAgIHN0cixcbiAgICAgICAgbWV0YWRhdGEuc2VyaWFsaXplcixcbiAgICAgICAgLi4uKG1ldGFkYXRhLmFyZ3MgfHwgW10pXG4gICAgICApO1xuICAgIHJldHVybiBTZXJpYWxpemF0aW9uLmRlc2VyaWFsaXplKHN0cik7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgUmVwb3B1bGF0ZXMgdGhlIE9iamVjdCBwcm9wZXJ0aWVzIHdpdGggdGhlIG9uZXMgZnJvbSB0aGUgbmV3IG9iamVjdFxuICAgKiBAZGVzY3JpcHRpb24gSXRlcmF0ZXMgYWxsIGNvbW1vbiBwcm9wZXJ0aWVzIG9mIG9iaiAoaWYgZXhpc3RpbmcpIGFuZCBzZWxmLCBhbmQgY29waWVzIHRoZW0gb250byBzZWxmXG4gICAqXG4gICAqIEBwYXJhbSB7VH0gc2VsZlxuICAgKiBAcGFyYW0ge1QgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+fSBbb2JqXVxuICAgKlxuICAgKi9cbiAgc3RhdGljIGZyb21PYmplY3Q8VCBleHRlbmRzIE1vZGVsPihcbiAgICBzZWxmOiBULFxuICAgIG9iaj86IFQgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICk6IFQge1xuICAgIGlmICghb2JqKSBvYmogPSB7fTtcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgTW9kZWwuZ2V0QXR0cmlidXRlcyhzZWxmKSkge1xuICAgICAgKHNlbGYgYXMgYW55KVtwcm9wXSA9IChvYmogYXMgYW55KVtwcm9wXSB8fCB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBzZWxmO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFJlcG9wdWxhdGVzIHRoZSBpbnN0YW5jZSB3aXRoIHRoZSBvbmVzIGZyb20gdGhlIG5ldyBNb2RlbCBPYmplY3RcbiAgICogQGRlc2NyaXB0aW9uIEl0ZXJhdGVzIGFsbCBjb21tb24gcHJvcGVydGllcyBvZiBvYmogKGlmIGV4aXN0aW5nKSBhbmQgc2VsZiwgYW5kIGNvcGllcyB0aGVtIG9udG8gc2VsZi5cbiAgICogSXMgYXdhcmUgb2YgbmVzdGVkIE1vZGVsIE9iamVjdHMgYW5kIHJlYnVpbGRzIHRoZW0gYWxzby5cbiAgICogV2hlbiBMaXN0IHByb3BlcnRpZXMgYXJlIGRlY29yYXRlZCB3aXRoIHtAbGluayBsaXN0fSwgdGhleSBsaXN0IGl0ZW1zIHdpbGwgYWxzbyBiZSByZWJ1aWx0XG4gICAqXG4gICAqIEBwYXJhbSB7VH0gc2VsZlxuICAgKiBAcGFyYW0ge1QgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+fSBbb2JqXVxuICAgKlxuICAgKi9cbiAgc3RhdGljIGZyb21Nb2RlbDxUIGV4dGVuZHMgTW9kZWw+KHNlbGY6IFQsIG9iaj86IFQgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogVCB7XG4gICAgaWYgKCFvYmopIG9iaiA9IHt9O1xuXG4gICAgbGV0IGRlY29yYXRvcnM6IERlY29yYXRvck1ldGFkYXRhW10sIGRlYzogRGVjb3JhdG9yTWV0YWRhdGE7XG5cbiAgICBjb25zdCBwcm9wcyA9IE1vZGVsLmdldEF0dHJpYnV0ZXMoc2VsZik7XG5cbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgcHJvcHMpIHtcbiAgICAgIChzZWxmIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3Byb3BdID1cbiAgICAgICAgKG9iaiBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtwcm9wXSB8fCB1bmRlZmluZWQ7XG4gICAgICBpZiAodHlwZW9mIChzZWxmIGFzIGFueSlbcHJvcF0gIT09IFwib2JqZWN0XCIpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgcHJvcE0gPSBpc1Byb3BlcnR5TW9kZWwoc2VsZiwgcHJvcCk7XG4gICAgICBpZiAocHJvcE0pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAoc2VsZiBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtwcm9wXSA9IE1vZGVsLmJ1aWxkKFxuICAgICAgICAgICAgKHNlbGYgYXMgUmVjb3JkPHN0cmluZywgYW55PilbcHJvcF0sXG4gICAgICAgICAgICB0eXBlb2YgcHJvcE0gPT09IFwic3RyaW5nXCIgPyBwcm9wTSA6IHVuZGVmaW5lZFxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhbGxEZWNvcmF0b3JzOiBEZWNvcmF0b3JNZXRhZGF0YVtdID0gZ2V0UHJvcGVydHlEZWNvcmF0b3JzKFxuICAgICAgICBWYWxpZGF0aW9uS2V5cy5SRUZMRUNULFxuICAgICAgICBzZWxmLFxuICAgICAgICBwcm9wXG4gICAgICApLmRlY29yYXRvcnM7XG4gICAgICBkZWNvcmF0b3JzID0gYWxsRGVjb3JhdG9ycy5maWx0ZXIoXG4gICAgICAgIChkOiBEZWNvcmF0b3JNZXRhZGF0YSkgPT5cbiAgICAgICAgICBbTW9kZWxLZXlzLlRZUEUsIFZhbGlkYXRpb25LZXlzLlRZUEVdLmluZGV4T2YoZC5rZXkpICE9PSAtMVxuICAgICAgKTtcbiAgICAgIGlmICghZGVjb3JhdG9ycyB8fCAhZGVjb3JhdG9ycy5sZW5ndGgpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihzZihcImZhaWxlZCB0byBmaW5kIGRlY29yYXRvcnMgZm9yIHByb3BlcnR5IHswfVwiLCBwcm9wKSk7XG4gICAgICBkZWMgPSBkZWNvcmF0b3JzLnBvcCgpIGFzIERlY29yYXRvck1ldGFkYXRhO1xuICAgICAgY29uc3QgY2xhenogPSBkZWMucHJvcHMubmFtZVxuICAgICAgICA/IFtkZWMucHJvcHMubmFtZV1cbiAgICAgICAgOiBBcnJheS5pc0FycmF5KGRlYy5wcm9wcy5jdXN0b21UeXBlcylcbiAgICAgICAgICA/IGRlYy5wcm9wcy5jdXN0b21UeXBlc1xuICAgICAgICAgIDogW2RlYy5wcm9wcy5jdXN0b21UeXBlc107XG4gICAgICBjb25zdCByZXNlcnZlZCA9IE9iamVjdC52YWx1ZXMoUmVzZXJ2ZWRNb2RlbHMpLm1hcCgodikgPT5cbiAgICAgICAgdi50b0xvd2VyQ2FzZSgpXG4gICAgICApIGFzIHN0cmluZ1tdO1xuXG4gICAgICBjbGF6ei5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgIGlmIChyZXNlcnZlZC5pbmRleE9mKGMudG9Mb3dlckNhc2UoKSkgPT09IC0xKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGMpIHtcbiAgICAgICAgICAgICAgY2FzZSBcIkFycmF5XCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJTZXRcIjpcbiAgICAgICAgICAgICAgICBpZiAoYWxsRGVjb3JhdG9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGxpc3REZWMgPSBhbGxEZWNvcmF0b3JzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIChkKSA9PiBkLmtleSA9PT0gVmFsaWRhdGlvbktleXMuTElTVFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGlmIChsaXN0RGVjKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsYXp6TmFtZSA9IGxpc3REZWMucHJvcHMuY2xhc3MuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAodDogc3RyaW5nKSA9PiAhanNUeXBlcy5pbmNsdWRlcyh0LnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjID09PSBcIkFycmF5XCIpXG4gICAgICAgICAgICAgICAgICAgICAgKHNlbGYgYXMgUmVjb3JkPHN0cmluZywgYW55PilbcHJvcF0gPSAoXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmIGFzIFJlY29yZDxzdHJpbmcsIGFueT5cbiAgICAgICAgICAgICAgICAgICAgICApW3Byb3BdLm1hcCgoZWw6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcIm9iamVjdFwiLCBcImZ1bmN0aW9uXCJdLmluY2x1ZGVzKHR5cGVvZiBlbCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhenpOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gTW9kZWwuYnVpbGQoZWwsIGNsYXp6TmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlbDtcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09IFwiU2V0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdiBvZiAoc2VsZiBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtwcm9wXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbXCJvYmplY3RcIiwgXCJmdW5jdGlvblwiXS5pbmNsdWRlcyh0eXBlb2YgdikgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhenpOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcy5hZGQoTW9kZWwuYnVpbGQodiwgY2xhenpOYW1lKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzLmFkZCh2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgKHNlbGYgYXMgUmVjb3JkPHN0cmluZywgYW55PilbcHJvcF0gPSBzO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGlmICgoc2VsZiBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtwcm9wXSlcbiAgICAgICAgICAgICAgICAgIChzZWxmIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3Byb3BdID0gTW9kZWwuYnVpbGQoXG4gICAgICAgICAgICAgICAgICAgIChzZWxmIGFzIGFueSlbcHJvcF0sXG4gICAgICAgICAgICAgICAgICAgIGNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgICAgIC8vIGRvIG5vdGhpbmcuIHdlIGhhdmUgbm8gcmVnaXN0cnkgb2YgdGhpcyBjbGFzc1xuICAgICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gc2VsZjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBTZXRzIHRoZSBHbG9iYWwge0BsaW5rIE1vZGVsQnVpbGRlckZ1bmN0aW9ufVxuICAgKiBAcGFyYW0ge01vZGVsQnVpbGRlckZ1bmN0aW9ufSBbYnVpbGRlcl1cbiAgICovXG4gIHN0YXRpYyBzZXRCdWlsZGVyKGJ1aWxkZXI/OiBNb2RlbEJ1aWxkZXJGdW5jdGlvbikge1xuICAgIG1vZGVsQnVpbGRlckZ1bmN0aW9uID0gYnVpbGRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgZ2xvYmFsIHtAbGluayBNb2RlbEJ1aWxkZXJGdW5jdGlvbn1cbiAgICovXG4gIHN0YXRpYyBnZXRCdWlsZGVyKCk6IE1vZGVsQnVpbGRlckZ1bmN0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gbW9kZWxCdWlsZGVyRnVuY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCB7QGxpbmsgTW9kZWxSZWdpc3RyeU1hbmFnZXJ9XG4gICAqXG4gICAqIEByZXR1cm4gTW9kZWxSZWdpc3RyeSwgZGVmYXVsdHMgdG8ge0BsaW5rIE1vZGVsUmVnaXN0cnlNYW5hZ2VyfVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0UmVnaXN0cnkoKSB7XG4gICAgaWYgKCFhY3RpbmdNb2RlbFJlZ2lzdHJ5KSBhY3RpbmdNb2RlbFJlZ2lzdHJ5ID0gbmV3IE1vZGVsUmVnaXN0cnlNYW5hZ2VyKCk7XG4gICAgcmV0dXJuIGFjdGluZ01vZGVsUmVnaXN0cnk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCBhY3RpbmdNb2RlbFJlZ2lzdHJ5XG4gICAqXG4gICAqIEBwYXJhbSB7QnVpbGRlclJlZ2lzdHJ5fSBtb2RlbFJlZ2lzdHJ5IHRoZSBuZXcgaW1wbGVtZW50YXRpb24gb2YgUmVnaXN0cnlcbiAgICovXG4gIHN0YXRpYyBzZXRSZWdpc3RyeShtb2RlbFJlZ2lzdHJ5OiBCdWlsZGVyUmVnaXN0cnk8YW55Pikge1xuICAgIGFjdGluZ01vZGVsUmVnaXN0cnkgPSBtb2RlbFJlZ2lzdHJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IHJlZ2lzdGVyIG5ldyBNb2RlbHNcbiAgICogQHBhcmFtIHthbnl9IGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZV0gd2hlbiBub3QgZGVmaW5lZCwgdGhlIG5hbWUgb2YgdGhlIGNvbnN0cnVjdG9yIHdpbGwgYmUgdXNlZFxuICAgKlxuICAgKiBAc2VlIE1vZGVsUmVnaXN0cnlcbiAgICovXG4gIHN0YXRpYyByZWdpc3RlcjxUIGV4dGVuZHMgTW9kZWw+KFxuICAgIGNvbnN0cnVjdG9yOiBNb2RlbENvbnN0cnVjdG9yPFQ+LFxuICAgIG5hbWU/OiBzdHJpbmdcbiAgKTogdm9pZCB7XG4gICAgcmV0dXJuIE1vZGVsLmdldFJlZ2lzdHJ5KCkucmVnaXN0ZXIoY29uc3RydWN0b3IsIG5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IEdldHMgYSByZWdpc3RlcmVkIE1vZGVsIHtAbGluayBNb2RlbENvbnN0cnVjdG9yfVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKlxuICAgKiBAc2VlIE1vZGVsUmVnaXN0cnlcbiAgICovXG4gIHN0YXRpYyBnZXQ8VCBleHRlbmRzIE1vZGVsPihuYW1lOiBzdHJpbmcpOiBNb2RlbENvbnN0cnVjdG9yPFQ+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gTW9kZWwuZ2V0UmVnaXN0cnkoKS5nZXQobmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBvYmpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtjbGF6el0gd2hlbiBwcm92aWRlZCwgaXQgd2lsbCBhdHRlbXB0IHRvIGZpbmQgdGhlIG1hdGNoaW5nIGNvbnN0cnVjdG9yXG4gICAqXG4gICAqIEB0aHJvd3MgRXJyb3IgSWYgY2xhenogaXMgbm90IGZvdW5kLCBvciBvYmogaXMgbm90IGEge0BsaW5rIE1vZGVsfSBtZWFuaW5nIGl0IGhhcyBubyB7QGxpbmsgTW9kZWxLZXlzLkFOQ0hPUn0gcHJvcGVydHlcbiAgICpcbiAgICogQHNlZSBNb2RlbFJlZ2lzdHJ5XG4gICAqL1xuICBzdGF0aWMgYnVpbGQ8VCBleHRlbmRzIE1vZGVsPihcbiAgICBvYmo6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSxcbiAgICBjbGF6ej86IHN0cmluZ1xuICApOiBUIHtcbiAgICByZXR1cm4gTW9kZWwuZ2V0UmVnaXN0cnkoKS5idWlsZChvYmosIGNsYXp6KTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRNZXRhZGF0YTxWIGV4dGVuZHMgTW9kZWw+KG1vZGVsOiBWKSB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBSZWZsZWN0LmdldE1ldGFkYXRhKFxuICAgICAgdGhpcy5rZXkoTW9kZWxLZXlzLk1PREVMKSxcbiAgICAgIG1vZGVsLmNvbnN0cnVjdG9yXG4gICAgKTtcbiAgICBpZiAoIW1ldGFkYXRhKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcImNvdWxkIG5vdCBmaW5kIG1ldGFkYXRhIGZvciBwcm92aWRlZCBcIiArIG1vZGVsLmNvbnN0cnVjdG9yLm5hbWVcbiAgICAgICk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9XG5cbiAgc3RhdGljIGdldEF0dHJpYnV0ZXM8ViBleHRlbmRzIE1vZGVsPihtb2RlbDogQ29uc3RydWN0b3I8Vj4gfCBWKSB7XG4gICAgY29uc3QgcmVzdWx0OiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBwcm90b3R5cGUgPVxuICAgICAgbW9kZWwgaW5zdGFuY2VvZiBNb2RlbFxuICAgICAgICA/IE9iamVjdC5nZXRQcm90b3R5cGVPZihtb2RlbClcbiAgICAgICAgOiAobW9kZWwgYXMgYW55KS5wcm90b3R5cGU7XG4gICAgd2hpbGUgKHByb3RvdHlwZSAhPSBudWxsKSB7XG4gICAgICBjb25zdCBwcm9wczogc3RyaW5nW10gPSBwcm90b3R5cGVbTW9kZWxLZXlzLkFUVFJJQlVURV07XG4gICAgICBpZiAocHJvcHMpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goLi4ucHJvcHMpO1xuICAgICAgfVxuICAgICAgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBzdGF0aWMgZXF1YWxzPFYgZXh0ZW5kcyBNb2RlbD4ob2JqMTogViwgb2JqMjogViwgLi4uZXhjZXB0aW9uczogYW55W10pIHtcbiAgICByZXR1cm4gaXNFcXVhbChvYmoxLCBvYmoyLCAuLi5leGNlcHRpb25zKTtcbiAgfVxuXG4gIHN0YXRpYyBoYXNFcnJvcnM8ViBleHRlbmRzIE1vZGVsPihtb2RlbDogViwgLi4uZXhjZXB0aW9uczogYW55W10pIHtcbiAgICByZXR1cm4gdmFsaWRhdGUobW9kZWwsIC4uLmV4Y2VwdGlvbnMpO1xuICB9XG5cbiAgc3RhdGljIHNlcmlhbGl6ZTxWIGV4dGVuZHMgTW9kZWw+KG1vZGVsOiBWKSB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBSZWZsZWN0LmdldE1ldGFkYXRhKFxuICAgICAgdGhpcy5rZXkoTW9kZWxLZXlzLlNFUklBTElaQVRJT04pLFxuICAgICAgbW9kZWwuY29uc3RydWN0b3JcbiAgICApO1xuXG4gICAgaWYgKG1ldGFkYXRhICYmIG1ldGFkYXRhLnNlcmlhbGl6ZXIpXG4gICAgICByZXR1cm4gU2VyaWFsaXphdGlvbi5zZXJpYWxpemUoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIG1ldGFkYXRhLnNlcmlhbGl6ZXIsXG4gICAgICAgIC4uLihtZXRhZGF0YS5hcmdzIHx8IFtdKVxuICAgICAgKTtcbiAgICByZXR1cm4gU2VyaWFsaXphdGlvbi5zZXJpYWxpemUobW9kZWwpO1xuICB9XG5cbiAgc3RhdGljIGhhc2g8ViBleHRlbmRzIE1vZGVsPihtb2RlbDogVikge1xuICAgIGNvbnN0IG1ldGFkYXRhID0gUmVmbGVjdC5nZXRNZXRhZGF0YShcbiAgICAgIHRoaXMua2V5KE1vZGVsS2V5cy5IQVNISU5HKSxcbiAgICAgIG1vZGVsLmNvbnN0cnVjdG9yXG4gICAgKTtcblxuICAgIGlmIChtZXRhZGF0YSAmJiBtZXRhZGF0YS5hbGdvcml0aG0pXG4gICAgICByZXR1cm4gSGFzaGluZy5oYXNoKG1vZGVsLCBtZXRhZGF0YS5hbGdvcml0aG0sIC4uLihtZXRhZGF0YS5hcmdzIHx8IFtdKSk7XG4gICAgcmV0dXJuIEhhc2hpbmcuaGFzaChtb2RlbCk7XG4gIH1cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IEJ1aWxkcyB0aGUga2V5IHRvIHN0b3JlIGFzIE1ldGFkYXRhIHVuZGVyIFJlZmxlY3Rpb25zXG4gICAqIEBkZXNjcmlwdGlvbiBjb25jYXRlbmF0ZXMge0BsaW5rIE1vZGVsS2V5cyNSRUZMRUNUfSB3aXRoIHRoZSBwcm92aWRlZCBrZXlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIGtleShzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBNb2RlbEtleXMuUkVGTEVDVCArIHN0cjtcbiAgfVxufVxuIl19
|
package/lib/model/Model.d.ts
CHANGED
|
@@ -1,20 +1,14 @@
|
|
|
1
1
|
import { BuilderRegistry } from "../utils/registry";
|
|
2
2
|
import { ModelErrorDefinition } from "./ModelErrorDefinition";
|
|
3
|
-
import { Comparable, Hashable, ModelArg, ModelConstructor, Serializable, Validatable } from "./types";
|
|
3
|
+
import { Comparable, Constructor, Hashable, ModelArg, ModelConstructor, Serializable, Validatable } from "./types";
|
|
4
4
|
import { ModelBuilderFunction } from "./construction";
|
|
5
5
|
/**
|
|
6
6
|
* @summary Abstract class representing a Validatable Model object
|
|
7
7
|
* @description Meant to be used as a base class for all Model classes
|
|
8
8
|
*
|
|
9
9
|
* Model objects must:
|
|
10
|
-
* - Have all their properties
|
|
11
|
-
* - Have all their properties
|
|
12
|
-
*
|
|
13
|
-
* <pre>
|
|
14
|
-
* class ClassName {
|
|
15
|
-
* propertyName?: PropertyType = undefined;
|
|
16
|
-
* }
|
|
17
|
-
* </pre>
|
|
10
|
+
* - Have all their required properties marked with '!';
|
|
11
|
+
* - Have all their optional properties marked as '?':
|
|
18
12
|
*
|
|
19
13
|
* @param {Model | {}} model base object from which to populate properties from
|
|
20
14
|
*
|
|
@@ -23,14 +17,20 @@ import { ModelBuilderFunction } from "./construction";
|
|
|
23
17
|
* @implements Validatable
|
|
24
18
|
* @implements Serializable
|
|
25
19
|
*
|
|
26
|
-
* @
|
|
20
|
+
* @example
|
|
21
|
+
* class ClassName {
|
|
22
|
+
* @required()
|
|
23
|
+
* requiredPropertyName!: PropertyType;
|
|
24
|
+
*
|
|
25
|
+
* optionalPropertyName?: PropertyType;
|
|
26
|
+
* }
|
|
27
27
|
*/
|
|
28
28
|
export declare abstract class Model implements Validatable, Serializable, Hashable, Comparable<Model> {
|
|
29
29
|
protected constructor(arg?: ModelArg<Model>);
|
|
30
30
|
/**
|
|
31
31
|
* @summary Validates the object according to its decorated properties
|
|
32
32
|
*
|
|
33
|
-
* @param {any[]} [exceptions] properties in the object to be ignored for
|
|
33
|
+
* @param {any[]} [exceptions] properties in the object to be ignored for the validation. Marked as 'any' to allow for extension but expects strings
|
|
34
34
|
*/
|
|
35
35
|
hasErrors(...exceptions: any[]): ModelErrorDefinition | undefined;
|
|
36
36
|
/**
|
|
@@ -61,15 +61,23 @@ export declare abstract class Model implements Validatable, Serializable, Hashab
|
|
|
61
61
|
*/
|
|
62
62
|
static deserialize(str: string): any;
|
|
63
63
|
/**
|
|
64
|
-
* @summary
|
|
64
|
+
* @summary Repopulates the Object properties with the ones from the new object
|
|
65
|
+
* @description Iterates all common properties of obj (if existing) and self, and copies them onto self
|
|
66
|
+
*
|
|
65
67
|
* @param {T} self
|
|
66
|
-
* @param {T | Record<string, any>} obj
|
|
68
|
+
* @param {T | Record<string, any>} [obj]
|
|
69
|
+
*
|
|
67
70
|
*/
|
|
68
71
|
static fromObject<T extends Model>(self: T, obj?: T | Record<string, any>): T;
|
|
69
72
|
/**
|
|
70
|
-
* @summary
|
|
73
|
+
* @summary Repopulates the instance with the ones from the new Model Object
|
|
74
|
+
* @description Iterates all common properties of obj (if existing) and self, and copies them onto self.
|
|
75
|
+
* Is aware of nested Model Objects and rebuilds them also.
|
|
76
|
+
* When List properties are decorated with {@link list}, they list items will also be rebuilt
|
|
77
|
+
*
|
|
71
78
|
* @param {T} self
|
|
72
|
-
* @param {T | Record<string, any>} obj
|
|
79
|
+
* @param {T | Record<string, any>} [obj]
|
|
80
|
+
*
|
|
73
81
|
*/
|
|
74
82
|
static fromModel<T extends Model>(self: T, obj?: T | Record<string, any>): T;
|
|
75
83
|
/**
|
|
@@ -118,8 +126,15 @@ export declare abstract class Model implements Validatable, Serializable, Hashab
|
|
|
118
126
|
*/
|
|
119
127
|
static build<T extends Model>(obj?: Record<string, any>, clazz?: string): T;
|
|
120
128
|
static getMetadata<V extends Model>(model: V): any;
|
|
129
|
+
static getAttributes<V extends Model>(model: Constructor<V> | V): string[];
|
|
121
130
|
static equals<V extends Model>(obj1: V, obj2: V, ...exceptions: any[]): boolean;
|
|
122
131
|
static hasErrors<V extends Model>(model: V, ...exceptions: any[]): ModelErrorDefinition | undefined;
|
|
123
132
|
static serialize<V extends Model>(model: V): any;
|
|
124
133
|
static hash<V extends Model>(model: V): any;
|
|
134
|
+
/**
|
|
135
|
+
* @summary Builds the key to store as Metadata under Reflections
|
|
136
|
+
* @description concatenates {@link ModelKeys#REFLECT} with the provided key
|
|
137
|
+
* @param {string} str
|
|
138
|
+
*/
|
|
139
|
+
static key(str: string): string;
|
|
125
140
|
}
|
|
@@ -1,132 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.constructFromObject = constructFromObject;
|
|
4
|
-
exports.constructFromModel = constructFromModel;
|
|
5
3
|
exports.construct = construct;
|
|
6
4
|
exports.findLastProtoBeforeObject = findLastProtoBeforeObject;
|
|
7
5
|
exports.bindModelPrototype = bindModelPrototype;
|
|
8
6
|
const Model_1 = require("./Model.cjs");
|
|
9
|
-
const constants_1 = require("../validation/Validators/constants.cjs");
|
|
10
|
-
const constants_2 = require("./constants.cjs");
|
|
11
|
-
const constants_3 = require("../utils/constants.cjs");
|
|
12
|
-
const strings_1 = require("../utils/strings.cjs");
|
|
13
|
-
const reflection_1 = require("@decaf-ts/reflection");
|
|
14
|
-
const utils_1 = require("./utils.cjs");
|
|
15
|
-
/**
|
|
16
|
-
* @summary Repopulates the Object properties with the ones from the new object
|
|
17
|
-
* @description Iterates all common properties of obj (if existing) and self, and copies them onto self
|
|
18
|
-
*
|
|
19
|
-
* @param {T} self
|
|
20
|
-
* @param {T | Record<string, any>} [obj]
|
|
21
|
-
*
|
|
22
|
-
* @function constructFromObject
|
|
23
|
-
* @memberOf module:decorator-validation.Construction
|
|
24
|
-
* @category Construction
|
|
25
|
-
*/
|
|
26
|
-
function constructFromObject(self, obj) {
|
|
27
|
-
if (!obj)
|
|
28
|
-
return self;
|
|
29
|
-
for (const prop in obj) {
|
|
30
|
-
if (Object.prototype.hasOwnProperty.call(obj, prop) &&
|
|
31
|
-
(Object.prototype.hasOwnProperty.call(self, prop) ||
|
|
32
|
-
(self.prototype &&
|
|
33
|
-
Object.prototype.hasOwnProperty.call(self.prototype, prop))))
|
|
34
|
-
self[prop] = obj[prop] || undefined;
|
|
35
|
-
}
|
|
36
|
-
return self;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* @summary Repopulates the instance with the ones from the new Model Object
|
|
40
|
-
* @description Iterates all common properties of obj (if existing) and self, and copies them onto self.
|
|
41
|
-
* Is aware of nested Model Objects and rebuilds them also.
|
|
42
|
-
* When List properties are decorated with {@link list}, they list items will also be rebuilt
|
|
43
|
-
*
|
|
44
|
-
* @param {T} self
|
|
45
|
-
* @param {T | Record<string, any>} [obj]
|
|
46
|
-
*
|
|
47
|
-
* @function constructFromModel
|
|
48
|
-
* @memberOf module:decorator-validation.Construction
|
|
49
|
-
* @category Construction
|
|
50
|
-
*/
|
|
51
|
-
function constructFromModel(self, obj) {
|
|
52
|
-
if (!obj)
|
|
53
|
-
return self;
|
|
54
|
-
let decorators, dec;
|
|
55
|
-
for (const prop in obj) {
|
|
56
|
-
if (Object.prototype.hasOwnProperty.call(obj, prop) &&
|
|
57
|
-
(Object.prototype.hasOwnProperty.call(self, prop) ||
|
|
58
|
-
(self.prototype &&
|
|
59
|
-
Object.prototype.hasOwnProperty.call(self.prototype, prop)))) {
|
|
60
|
-
self[prop] = obj[prop];
|
|
61
|
-
if (typeof self[prop] !== "object")
|
|
62
|
-
continue;
|
|
63
|
-
if ((0, utils_1.isModel)(self[prop])) {
|
|
64
|
-
try {
|
|
65
|
-
self[prop] = Model_1.Model.build(self[prop]);
|
|
66
|
-
}
|
|
67
|
-
catch (e) {
|
|
68
|
-
console.log(e);
|
|
69
|
-
}
|
|
70
|
-
continue;
|
|
71
|
-
}
|
|
72
|
-
const allDecorators = (0, reflection_1.getPropertyDecorators)(constants_1.ValidationKeys.REFLECT, self, prop).decorators;
|
|
73
|
-
decorators = allDecorators.filter((d) => [constants_3.ModelKeys.TYPE, constants_1.ValidationKeys.TYPE].indexOf(d.key) !== -1);
|
|
74
|
-
if (!decorators || !decorators.length)
|
|
75
|
-
throw new Error((0, strings_1.sf)("failed to find decorators for property {0}", prop));
|
|
76
|
-
dec = decorators.pop();
|
|
77
|
-
const clazz = dec.props.name
|
|
78
|
-
? [dec.props.name]
|
|
79
|
-
: Array.isArray(dec.props.customTypes)
|
|
80
|
-
? dec.props.customTypes
|
|
81
|
-
: [dec.props.customTypes];
|
|
82
|
-
const reserved = Object.values(constants_2.ReservedModels).map((v) => v.toLowerCase());
|
|
83
|
-
clazz.forEach((c) => {
|
|
84
|
-
if (reserved.indexOf(c.toLowerCase()) === -1)
|
|
85
|
-
try {
|
|
86
|
-
switch (c) {
|
|
87
|
-
case "Array":
|
|
88
|
-
case "Set":
|
|
89
|
-
if (allDecorators.length) {
|
|
90
|
-
const listDec = allDecorators.find((d) => d.key === constants_1.ValidationKeys.LIST);
|
|
91
|
-
if (listDec) {
|
|
92
|
-
const clazzName = listDec.props.class.find((t) => !constants_2.jsTypes.includes(t.toLowerCase()));
|
|
93
|
-
if (c === "Array")
|
|
94
|
-
self[prop] = self[prop].map((el) => {
|
|
95
|
-
return ["object", "function"].includes(typeof el) &&
|
|
96
|
-
clazzName
|
|
97
|
-
? Model_1.Model.build(el, clazzName)
|
|
98
|
-
: el;
|
|
99
|
-
});
|
|
100
|
-
if (c === "Set") {
|
|
101
|
-
const s = new Set();
|
|
102
|
-
for (const v of self[prop]) {
|
|
103
|
-
if (["object", "function"].includes(typeof v) &&
|
|
104
|
-
clazzName) {
|
|
105
|
-
s.add(Model_1.Model.build(v, clazzName));
|
|
106
|
-
}
|
|
107
|
-
else {
|
|
108
|
-
s.add(v);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
self[prop] = s;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
break;
|
|
116
|
-
default:
|
|
117
|
-
if (self[prop])
|
|
118
|
-
self[prop] = Model_1.Model.build(self[prop], c);
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
catch (e) {
|
|
122
|
-
console.log(e);
|
|
123
|
-
// do nothing. we have no registry of this class
|
|
124
|
-
}
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
return self;
|
|
129
|
-
}
|
|
130
7
|
/**
|
|
131
8
|
* @summary Helper Function to override constructors
|
|
132
9
|
*
|
|
@@ -176,4 +53,4 @@ function bindModelPrototype(obj) {
|
|
|
176
53
|
throw new Error("Could not find proper prototype to bind");
|
|
177
54
|
}
|
|
178
55
|
|
|
179
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9jb25zdHJ1Y3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFvQkEsa0RBZUM7QUFlRCxnREF3R0M7QUFhRCw4QkFPQztBQVlELDhEQVNDO0FBRUQsZ0RBcUJDO0FBMU5ELG1DQUFnQztBQUNoQyxrRUFBb0U7QUFDcEUsMkNBQXNEO0FBQ3RELGtEQUErQztBQUMvQyw4Q0FBc0M7QUFDdEMscURBQWdGO0FBQ2hGLG1DQUFrQztBQUdsQzs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBZ0IsbUJBQW1CLENBQ2pDLElBQU8sRUFDUCxHQUFpQjtJQUVqQixJQUFJLENBQUMsR0FBRztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3RCLEtBQUssTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFDRSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQztZQUMvQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO2dCQUMvQyxDQUFFLElBQVksQ0FBQyxTQUFTO29CQUN0QixNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUUsSUFBWSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBRXhFLElBQVksQ0FBQyxJQUFJLENBQUMsR0FBSSxHQUFXLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDO0lBQzFELENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFnQixrQkFBa0IsQ0FDaEMsSUFBTyxFQUNQLEdBQWlCO0lBRWpCLElBQUksQ0FBQyxHQUFHO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFdEIsSUFBSSxVQUErQixFQUFFLEdBQXNCLENBQUM7SUFFNUQsS0FBSyxNQUFNLElBQUksSUFBSSxHQUFHLEVB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IE1vZGVsIH0gZnJvbSBcIi4vTW9kZWxcIjtcbmltcG9ydCB7IFZhbGlkYXRpb25LZXlzIH0gZnJvbSBcIi4uL3ZhbGlkYXRpb24vVmFsaWRhdG9ycy9jb25zdGFudHNcIjtcbmltcG9ydCB7IGpzVHlwZXMsIFJlc2VydmVkTW9kZWxzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBNb2RlbEtleXMgfSBmcm9tIFwiLi4vdXRpbHMvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBzZiB9IGZyb20gXCIuLi91dGlscy9zdHJpbmdzXCI7XG5pbXBvcnQgeyBnZXRQcm9wZXJ0eURlY29yYXRvcnMsIERlY29yYXRvck1ldGFkYXRhIH0gZnJvbSBcIkBkZWNhZi10cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBpc01vZGVsIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7IE1vZGVsQXJnIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiBAc3VtbWFyeSBSZXBvcHVsYXRlcyB0aGUgT2JqZWN0IHByb3BlcnRpZXMgd2l0aCB0aGUgb25lcyBmcm9tIHRoZSBuZXcgb2JqZWN0XG4gKiBAZGVzY3JpcHRpb24gSXRlcmF0ZXMgYWxsIGNvbW1vbiBwcm9wZXJ0aWVzIG9mIG9iaiAoaWYgZXhpc3RpbmcpIGFuZCBzZWxmLCBhbmQgY29waWVzIHRoZW0gb250byBzZWxmXG4gKlxuICogQHBhcmFtIHtUfSBzZWxmXG4gKiBAcGFyYW0ge1QgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+fSBbb2JqXVxuICpcbiAqIEBmdW5jdGlvbiBjb25zdHJ1Y3RGcm9tT2JqZWN0XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uLkNvbnN0cnVjdGlvblxuICogQGNhdGVnb3J5IENvbnN0cnVjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0RnJvbU9iamVjdDxUIGV4dGVuZHMgTW9kZWw+KFxuICBzZWxmOiBULFxuICBvYmo/OiBNb2RlbEFyZzxUPlxuKSB7XG4gIGlmICghb2JqKSByZXR1cm4gc2VsZjtcbiAgZm9yIChjb25zdCBwcm9wIGluIG9iaikge1xuICAgIGlmIChcbiAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApICYmXG4gICAgICAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNlbGYsIHByb3ApIHx8XG4gICAgICAgICgoc2VsZiBhcyBhbnkpLnByb3RvdHlwZSAmJlxuICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCgoc2VsZiBhcyBhbnkpLnByb3RvdHlwZSwgcHJvcCkpKVxuICAgIClcbiAgICAgIChzZWxmIGFzIGFueSlbcHJvcF0gPSAob2JqIGFzIGFueSlbcHJvcF0gfHwgdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBzZWxmO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IFJlcG9wdWxhdGVzIHRoZSBpbnN0YW5jZSB3aXRoIHRoZSBvbmVzIGZyb20gdGhlIG5ldyBNb2RlbCBPYmplY3RcbiAqIEBkZXNjcmlwdGlvbiBJdGVyYXRlcyBhbGwgY29tbW9uIHByb3BlcnRpZXMgb2Ygb2JqIChpZiBleGlzdGluZykgYW5kIHNlbGYsIGFuZCBjb3BpZXMgdGhlbSBvbnRvIHNlbGYuXG4gKiBJcyBhd2FyZSBvZiBuZXN0ZWQgTW9kZWwgT2JqZWN0cyBhbmQgcmVidWlsZHMgdGhlbSBhbHNvLlxuICogV2hlbiBMaXN0IHByb3BlcnRpZXMgYXJlIGRlY29yYXRlZCB3aXRoIHtAbGluayBsaXN0fSwgdGhleSBsaXN0IGl0ZW1zIHdpbGwgYWxzbyBiZSByZWJ1aWx0XG4gKlxuICogQHBhcmFtIHtUfSBzZWxmXG4gKiBAcGFyYW0ge1QgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+fSBbb2JqXVxuICpcbiAqIEBmdW5jdGlvbiBjb25zdHJ1Y3RGcm9tTW9kZWxcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uQ29uc3RydWN0aW9uXG4gKiBAY2F0ZWdvcnkgQ29uc3RydWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RGcm9tTW9kZWw8VCBleHRlbmRzIE1vZGVsPihcbiAgc2VsZjogVCxcbiAgb2JqPzogTW9kZWxBcmc8VD5cbikge1xuICBpZiAoIW9iaikgcmV0dXJuIHNlbGY7XG5cbiAgbGV0IGRlY29yYXRvcnM6IERlY29yYXRvck1ldGFkYXRhW10sIGRlYzogRGVjb3JhdG9yTWV0YWRhdGE7XG5cbiAgZm9yIChjb25zdCBwcm9wIGluIG9iaikge1xuICAgIGlmIChcbiAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApICYmXG4gICAgICAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNlbGYsIHByb3ApIHx8XG4gICAgICAgICgoc2VsZiBhcyBhbnkpLnByb3RvdHlwZSAmJlxuICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCgoc2VsZiBhcyBhbnkpLnByb3RvdHlwZSwgcHJvcCkpKVxuICAgICkge1xuICAgICAgKHNlbGYgYXMgUmVjb3JkPHN0cmluZywgYW55PilbcHJvcF0gPSAob2JqIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3Byb3BdO1xuICAgICAgaWYgKHR5cGVvZiAoc2VsZiBhcyBhbnkpW3Byb3BdICE9PSBcIm9iamVjdFwiKSBjb250aW51ZTtcbiAgICAgIGlmIChpc01vZGVsKChzZWxmIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3Byb3BdKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIChzZWxmIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3Byb3BdID0gTW9kZWwuYnVpbGQoXG4gICAgICAgICAgICAoc2VsZiBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtwcm9wXVxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhbGxEZWNvcmF0b3JzOiBEZWNvcmF0b3JNZXRhZGF0YVtdID0gZ2V0UHJvcGVydHlEZWNvcmF0b3JzKFxuICAgICAgICBWYWxpZGF0aW9uS2V5cy5SRUZMRUNULFxuICAgICAgICBzZWxmLFxuICAgICAgICBwcm9wXG4gICAgICApLmRlY29yYXRvcnM7XG4gICAgICBkZWNvcmF0b3JzID0gYWxsRGVjb3JhdG9ycy5maWx0ZXIoXG4gICAgICAgIChkOiBEZWNvcmF0b3JNZXRhZGF0YSkgPT5cbiAgICAgICAgICBbTW9kZWxLZXlzLlRZUEUsIFZhbGlkYXRpb25LZXlzLlRZUEVdLmluZGV4T2YoZC5rZXkpICE9PSAtMVxuICAgICAgKTtcbiAgICAgIGlmICghZGVjb3JhdG9ycyB8fCAhZGVjb3JhdG9ycy5sZW5ndGgpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihzZihcImZhaWxlZCB0byBmaW5kIGRlY29yYXRvcnMgZm9yIHByb3BlcnR5IHswfVwiLCBwcm9wKSk7XG4gICAgICBkZWMgPSBkZWNvcmF0b3JzLnBvcCgpIGFzIERlY29yYXRvck1ldGFkYXRhO1xuICAgICAgY29uc3QgY2xhenogPSBkZWMucHJvcHMubmFtZVxuICAgICAgICA/IFtkZWMucHJvcHMubmFtZV1cbiAgICAgICAgOiBBcnJheS5pc0FycmF5KGRlYy5wcm9wcy5jdXN0b21UeXBlcylcbiAgICAgICAgICA/IGRlYy5wcm9wcy5jdXN0b21UeXBlc1xuICAgICAgICAgIDogW2RlYy5wcm9wcy5jdXN0b21UeXBlc107XG4gICAgICBjb25zdCByZXNlcnZlZCA9IE9iamVjdC52YWx1ZXMoUmVzZXJ2ZWRNb2RlbHMpLm1hcCgodikgPT5cbiAgICAgICAgdi50b0xvd2VyQ2FzZSgpXG4gICAgICApIGFzIHN0cmluZ1tdO1xuXG4gICAgICBjbGF6ei5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgIGlmIChyZXNlcnZlZC5pbmRleE9mKGMudG9Mb3dlckNhc2UoKSkgPT09IC0xKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGMpIHtcbiAgICAgICAgICAgICAgY2FzZSBcIkFycmF5XCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJTZXRcIjpcbiAgICAgICAgICAgICAgICBpZiAoYWxsRGVjb3JhdG9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGxpc3REZWMgPSBhbGxEZWNvcmF0b3JzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIChkKSA9PiBkLmtleSA9PT0gVmFsaWRhdGlvbktleXMuTElTVFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGlmIChsaXN0RGVjKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsYXp6TmFtZSA9IGxpc3REZWMucHJvcHMuY2xhc3MuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAodDogc3RyaW5nKSA9PiAhanNUeXBlcy5pbmNsdWRlcyh0LnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjID09PSBcIkFycmF5XCIpXG4gICAgICAgICAgICAgICAgICAgICAgKHNlbGYgYXMgUmVjb3JkPHN0cmluZywgYW55PilbcHJvcF0gPSAoXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmIGFzIFJlY29yZDxzdHJpbmcsIGFueT5cbiAgICAgICAgICAgICAgICAgICAgICApW3Byb3BdLm1hcCgoZWw6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcIm9iamVjdFwiLCBcImZ1bmN0aW9uXCJdLmluY2x1ZGVzKHR5cGVvZiBlbCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhenpOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gTW9kZWwuYnVpbGQoZWwsIGNsYXp6TmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlbDtcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09IFwiU2V0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdiBvZiAoc2VsZiBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtwcm9wXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbXCJvYmplY3RcIiwgXCJmdW5jdGlvblwiXS5pbmNsdWRlcyh0eXBlb2YgdikgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhenpOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcy5hZGQoTW9kZWwuYnVpbGQodiwgY2xhenpOYW1lKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzLmFkZCh2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgKHNlbGYgYXMgUmVjb3JkPHN0cmluZywgYW55PilbcHJvcF0gPSBzO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGlmICgoc2VsZiBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtwcm9wXSlcbiAgICAgICAgICAgICAgICAgIChzZWxmIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3Byb3BdID0gTW9kZWwuYnVpbGQoXG4gICAgICAgICAgICAgICAgICAgIChzZWxmIGFzIGFueSlbcHJvcF0sXG4gICAgICAgICAgICAgICAgICAgIGNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgICAgIC8vIGRvIG5vdGhpbmcuIHdlIGhhdmUgbm8gcmVnaXN0cnkgb2YgdGhpcyBjbGFzc1xuICAgICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc2VsZjtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBIZWxwZXIgRnVuY3Rpb24gdG8gb3ZlcnJpZGUgY29uc3RydWN0b3JzXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7YW55W119IFthcmdzXVxuICogQHJldHVybiB7VH0gdGhlIG5ldyBpbnN0YW5jZVxuICpcbiAqIEBmdW5jdGlvbiBjb25zdHJ1Y3RcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uQ29uc3RydWN0aW9uXG4gKiBAY2F0ZWdvcnkgQ29uc3RydWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3Q8VCBleHRlbmRzIE1vZGVsPihcbiAgY29uc3RydWN0b3I6IGFueSxcbiAgLi4uYXJnczogYW55W11cbik6IFQge1xuICBjb25zdCBfY29uc3RyID0gKC4uLmFyZ3o6IGFueVtdKSA9PiBuZXcgY29uc3RydWN0b3IoLi4uYXJneik7XG4gIF9jb25zdHIucHJvdG90eXBlID0gY29uc3RydWN0b3IucHJvdG90eXBlO1xuICByZXR1cm4gX2NvbnN0ciguLi5hcmdzKTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBUeXBvIG9mIGEgTW9kZWwgYnVpbGRlciBmdW5jdGlvblxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5Db25zdHJ1Y3Rpb25cbiAqIEBjYXRlZ29yeSBDb25zdHJ1Y3Rpb25cbiAqL1xuZXhwb3J0IHR5cGUgTW9kZWxCdWlsZGVyRnVuY3Rpb24gPSA8VCBleHRlbmRzIE1vZGVsPihcbiAgc2VsZjogVCxcbiAgb2JqPzogVCB8IFJlY29yZDxzdHJpbmcsIGFueT5cbikgPT4gVDtcblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRMYXN0UHJvdG9CZWZvcmVPYmplY3Qob2JqOiBvYmplY3QpOiBvYmplY3Qge1xuICBsZXQgcHJvdG90eXBlOiBhbnkgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKTtcbiAgaWYgKHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZSkgcmV0dXJuIG9iajtcbiAgd2hpbGUgKHByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgIHByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpO1xuICAgIGlmIChwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUpIHJldHVybiBwcm90b3R5cGU7XG4gICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpID09PSBPYmplY3QucHJvdG90eXBlKSByZXR1cm4gcHJvdG90eXBlO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBmaW5kIHByb3BlciBwcm90b3R5cGVcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kTW9kZWxQcm90b3R5cGUob2JqOiBhbnkpIHtcbiAgaWYgKG9iaiBpbnN0YW5jZW9mIE1vZGVsKSByZXR1cm47XG5cbiAgZnVuY3Rpb24gYmluZFByb3RvdHlwZShvYmpUb092ZXJyaWRlOiBvYmplY3QsIHByb3RvdHlwZTogb2JqZWN0KSB7XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKG9ialRvT3ZlcnJpZGUsIHByb3RvdHlwZSk7XG4gIH1cblxuICBjb25zdCBwcm90b3R5cGU6IGFueSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopO1xuICBpZiAocHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlKSB7XG4gICAgcmV0dXJuIGJpbmRQcm90b3R5cGUob2JqLCBNb2RlbC5wcm90b3R5cGUpO1xuICB9XG4gIHdoaWxlIChwcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICBjb25zdCBwcm90ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSk7XG4gICAgaWYgKFxuICAgICAgcHJvdCA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fFxuICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3QpID09PSBPYmplY3QucHJvdG90eXBlXG4gICAgKSB7XG4gICAgICByZXR1cm4gYmluZFByb3RvdHlwZShwcm90b3R5cGUsIE1vZGVsLnByb3RvdHlwZSk7XG4gICAgfVxuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBmaW5kIHByb3BlciBwcm90b3R5cGUgdG8gYmluZFwiKTtcbn1cbiJdfQ==
|
|
56
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tb2RlbC9jb25zdHJ1Y3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFhQSw4QkFPQztBQVlELDhEQVNDO0FBRUQsZ0RBcUJDO0FBaEVELG1DQUFnQztBQUVoQzs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBZ0IsU0FBUyxDQUN2QixXQUFnQixFQUNoQixHQUFHLElBQVc7SUFFZCxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQzdELE9BQU8sQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQztJQUMxQyxPQUFPLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzFCLENBQUM7QUFZRCxTQUFnQix5QkFBeUIsQ0FBQyxHQUFXO0lBQ25ELElBQUksU0FBUyxHQUFRLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEQsSUFBSSxTQUFTLEtBQUssTUFBTSxDQUFDLFNBQVM7UUFBRSxPQUFPLEdBQUcsQ0FBQztJQUMvQyxPQUFPLFNBQVMsS0FBSyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdEMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0MsSUFBSSxTQUFTLEtBQUssTUFBTSxDQUFDLFNBQVM7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUNyRCxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEtBQUssTUFBTSxDQUFDLFNBQVM7WUFBRSxPQUFPLFNBQVMsQ0FBQztJQUM5RSxDQUFDO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0FBQ3JELENBQUM7QUFFRCxTQUFnQixrQkFBa0IsQ0FBQyxHQUFRO0lBQ3pDLElBQUksR0FBRyxZQUFZLGFBQUs7UUFBRSxPQUFPO0lBRWpDLFNBQVMsYUFBYSxDQUFDLGFBQXFCLEVBQUUsU0FBaUI7UUFDN0QsTUFBTSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELE1BQU0sU0FBUyxHQUFRLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEQsSUFBSSxTQUFTLEtBQUssTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25DLE9BQU8sYUFBYSxDQUFDLEdBQUcsRUFBRSxhQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUNELE9BQU8sU0FBUyxLQUFLLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN0QyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlDLElBQ0UsSUFBSSxLQUFLLE1BQU0sQ0FBQyxTQUFTO1lBQ3pCLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssTUFBTSxDQUFDLFNBQVMsRUFDaEQsQ0FBQztZQUNELE9BQU8sYUFBYSxDQUFDLFNBQVMsRUFBRSxhQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbkQsQ0FBQztJQUNILENBQUM7SUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7QUFDN0QsQ0FBQyIsImZpbGUiOiJtb2RlbC9jb25zdHJ1Y3Rpb24uanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2RlbCB9IGZyb20gXCIuL01vZGVsXCI7XG5cbi8qKlxuICogQHN1bW1hcnkgSGVscGVyIEZ1bmN0aW9uIHRvIG92ZXJyaWRlIGNvbnN0cnVjdG9yc1xuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge2FueVtdfSBbYXJnc11cbiAqIEByZXR1cm4ge1R9IHRoZSBuZXcgaW5zdGFuY2VcbiAqXG4gKiBAZnVuY3Rpb24gY29uc3RydWN0XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uLkNvbnN0cnVjdGlvblxuICogQGNhdGVnb3J5IENvbnN0cnVjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0PFQgZXh0ZW5kcyBNb2RlbD4oXG4gIGNvbnN0cnVjdG9yOiBhbnksXG4gIC4uLmFyZ3M6IGFueVtdXG4pOiBUIHtcbiAgY29uc3QgX2NvbnN0ciA9ICguLi5hcmd6OiBhbnlbXSkgPT4gbmV3IGNvbnN0cnVjdG9yKC4uLmFyZ3opO1xuICBfY29uc3RyLnByb3RvdHlwZSA9IGNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgcmV0dXJuIF9jb25zdHIoLi4uYXJncyk7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgVHlwbyBvZiBhIE1vZGVsIGJ1aWxkZXIgZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uQ29uc3RydWN0aW9uXG4gKiBAY2F0ZWdvcnkgQ29uc3RydWN0aW9uXG4gKi9cbmV4cG9ydCB0eXBlIE1vZGVsQnVpbGRlckZ1bmN0aW9uID0gPFQgZXh0ZW5kcyBNb2RlbD4oXG4gIHNlbGY6IFQsXG4gIG9iaj86IFQgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4pID0+IFQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kTGFzdFByb3RvQmVmb3JlT2JqZWN0KG9iajogb2JqZWN0KTogb2JqZWN0IHtcbiAgbGV0IHByb3RvdHlwZTogYW55ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaik7XG4gIGlmIChwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUpIHJldHVybiBvYmo7XG4gIHdoaWxlIChwcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG90eXBlKTtcbiAgICBpZiAocHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlKSByZXR1cm4gcHJvdG90eXBlO1xuICAgIGlmIChPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG90eXBlKSA9PT0gT2JqZWN0LnByb3RvdHlwZSkgcmV0dXJuIHByb3RvdHlwZTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZmluZCBwcm9wZXIgcHJvdG90eXBlXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmluZE1vZGVsUHJvdG90eXBlKG9iajogYW55KSB7XG4gIGlmIChvYmogaW5zdGFuY2VvZiBNb2RlbCkgcmV0dXJuO1xuXG4gIGZ1bmN0aW9uIGJpbmRQcm90b3R5cGUob2JqVG9PdmVycmlkZTogb2JqZWN0LCBwcm90b3R5cGU6IG9iamVjdCkge1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihvYmpUb092ZXJyaWRlLCBwcm90b3R5cGUpO1xuICB9XG5cbiAgY29uc3QgcHJvdG90eXBlOiBhbnkgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKTtcbiAgaWYgKHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgIHJldHVybiBiaW5kUHJvdG90eXBlKG9iaiwgTW9kZWwucHJvdG90eXBlKTtcbiAgfVxuICB3aGlsZSAocHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlKSB7XG4gICAgY29uc3QgcHJvdCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpO1xuICAgIGlmIChcbiAgICAgIHByb3QgPT09IE9iamVjdC5wcm90b3R5cGUgfHxcbiAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90KSA9PT0gT2JqZWN0LnByb3RvdHlwZVxuICAgICkge1xuICAgICAgcmV0dXJuIGJpbmRQcm90b3R5cGUocHJvdG90eXBlLCBNb2RlbC5wcm90b3R5cGUpO1xuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZmluZCBwcm9wZXIgcHJvdG90eXBlIHRvIGJpbmRcIik7XG59XG4iXX0=
|