jsii-reflect 1.47.0 → 1.51.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/lib/type-system.d.ts +5 -1
- package/lib/type-system.js +23 -31
- package/lib/util.d.ts +30 -0
- package/lib/util.js +74 -2
- package/package.json +11 -11
- package/test/independent.test.js +6 -2
package/lib/type-system.d.ts
CHANGED
|
@@ -27,8 +27,12 @@ export declare class TypeSystem {
|
|
|
27
27
|
/**
|
|
28
28
|
* Loads a jsii module or a single .jsii file into the type system.
|
|
29
29
|
*
|
|
30
|
+
* If `fileOrDirectory` is a directory, it will be treated as a jsii npm module,
|
|
31
|
+
* and its dependencies (as determined by its 'package.json' file) will be loaded
|
|
32
|
+
* as well.
|
|
33
|
+
*
|
|
30
34
|
* If `fileOrDirectory` is a file, it will be treated as a single .jsii file.
|
|
31
|
-
*
|
|
35
|
+
* No dependencies will be loaded. You almost never want this.
|
|
32
36
|
*
|
|
33
37
|
* Not validating makes the difference between loading assemblies with lots
|
|
34
38
|
* of dependencies (such as app-delivery) in 90ms vs 3500ms.
|
package/lib/type-system.js
CHANGED
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TypeSystem = void 0;
|
|
4
4
|
const jsii = require("@jsii/spec");
|
|
5
|
+
const fs = require("fs-extra");
|
|
5
6
|
const path = require("path");
|
|
6
|
-
const util_1 = require("util");
|
|
7
7
|
const assembly_1 = require("./assembly");
|
|
8
8
|
const class_1 = require("./class");
|
|
9
9
|
const enum_1 = require("./enum");
|
|
10
10
|
const interface_1 = require("./interface");
|
|
11
|
+
const util_1 = require("./util");
|
|
11
12
|
class TypeSystem {
|
|
12
13
|
constructor() {
|
|
13
14
|
/**
|
|
@@ -27,27 +28,31 @@ class TypeSystem {
|
|
|
27
28
|
* NOT have to declare a JSII dependency on any of the packages.
|
|
28
29
|
*/
|
|
29
30
|
async loadNpmDependencies(packageRoot, options = {}) {
|
|
30
|
-
|
|
31
|
-
const pkg = require(path.resolve(packageRoot, 'package.json'));
|
|
31
|
+
const pkg = await fs.readJson(path.resolve(packageRoot, 'package.json'));
|
|
32
32
|
for (const dep of dependenciesOf(pkg)) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
33
|
+
if (util_1.isBuiltinModule(dep)) {
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
// eslint-disable-next-line no-await-in-loop
|
|
37
|
+
const depDir = await util_1.findDependencyDirectory(dep, packageRoot);
|
|
38
|
+
// eslint-disable-next-line no-await-in-loop
|
|
39
|
+
const depPkgJson = await fs.readJson(path.join(depDir, 'package.json'));
|
|
39
40
|
if (!depPkgJson.jsii) {
|
|
40
41
|
continue;
|
|
41
42
|
}
|
|
42
43
|
// eslint-disable-next-line no-await-in-loop
|
|
43
|
-
await this.loadModule(
|
|
44
|
+
await this.loadModule(depDir, options);
|
|
44
45
|
}
|
|
45
46
|
}
|
|
46
47
|
/**
|
|
47
48
|
* Loads a jsii module or a single .jsii file into the type system.
|
|
48
49
|
*
|
|
50
|
+
* If `fileOrDirectory` is a directory, it will be treated as a jsii npm module,
|
|
51
|
+
* and its dependencies (as determined by its 'package.json' file) will be loaded
|
|
52
|
+
* as well.
|
|
53
|
+
*
|
|
49
54
|
* If `fileOrDirectory` is a file, it will be treated as a single .jsii file.
|
|
50
|
-
*
|
|
55
|
+
* No dependencies will be loaded. You almost never want this.
|
|
51
56
|
*
|
|
52
57
|
* Not validating makes the difference between loading assemblies with lots
|
|
53
58
|
* of dependencies (such as app-delivery) in 90ms vs 3500ms.
|
|
@@ -56,7 +61,7 @@ class TypeSystem {
|
|
|
56
61
|
* @param validate Whether or not to validate the assembly while loading it.
|
|
57
62
|
*/
|
|
58
63
|
async load(fileOrDirectory, options = {}) {
|
|
59
|
-
if ((await stat(fileOrDirectory)).isDirectory()) {
|
|
64
|
+
if ((await fs.stat(fileOrDirectory)).isDirectory()) {
|
|
60
65
|
return this.loadModule(fileOrDirectory, options);
|
|
61
66
|
}
|
|
62
67
|
return this.loadFile(fileOrDirectory, { ...options, isRoot: true });
|
|
@@ -69,7 +74,7 @@ class TypeSystem {
|
|
|
69
74
|
return out;
|
|
70
75
|
async function _loadModule(moduleDirectory, isRoot = false) {
|
|
71
76
|
const filePath = path.join(moduleDirectory, 'package.json');
|
|
72
|
-
const pkg = JSON.parse(
|
|
77
|
+
const pkg = JSON.parse(await fs.readFile(filePath, { encoding: 'utf-8' }));
|
|
73
78
|
if (!pkg.jsii) {
|
|
74
79
|
throw new Error(`No "jsii" section in ${filePath}`);
|
|
75
80
|
}
|
|
@@ -99,11 +104,10 @@ class TypeSystem {
|
|
|
99
104
|
if (bundled.includes(name)) {
|
|
100
105
|
continue;
|
|
101
106
|
}
|
|
102
|
-
const depDir = require.resolve(`${name}/package.json`, {
|
|
103
|
-
paths: [moduleDirectory],
|
|
104
|
-
});
|
|
105
107
|
// eslint-disable-next-line no-await-in-loop
|
|
106
|
-
await
|
|
108
|
+
const depDir = await util_1.findDependencyDirectory(name, moduleDirectory);
|
|
109
|
+
// eslint-disable-next-line no-await-in-loop
|
|
110
|
+
await _loadModule.call(this, depDir);
|
|
107
111
|
}
|
|
108
112
|
return root;
|
|
109
113
|
}
|
|
@@ -239,7 +243,7 @@ class TypeSystem {
|
|
|
239
243
|
* @param validate Whether to validate the assembly or just assume it matches the schema
|
|
240
244
|
*/
|
|
241
245
|
async loadAssembly(file, validate = true) {
|
|
242
|
-
const spec = JSON.parse(
|
|
246
|
+
const spec = JSON.parse(await fs.readFile(file, { encoding: 'utf-8' }));
|
|
243
247
|
const ass = validate
|
|
244
248
|
? jsii.validateAssembly(spec)
|
|
245
249
|
: spec;
|
|
@@ -272,16 +276,4 @@ function flatMap(collection, mapper) {
|
|
|
272
276
|
.map(mapper)
|
|
273
277
|
.reduce((acc, elt) => acc.concat(elt), new Array());
|
|
274
278
|
}
|
|
275
|
-
function stat(p) {
|
|
276
|
-
// just-in-time require so that this file can be loaded in browsers as well.
|
|
277
|
-
// eslint-disable-next-line @typescript-eslint/no-require-imports,@typescript-eslint/no-var-requires
|
|
278
|
-
const fs = require('fs');
|
|
279
|
-
return util_1.promisify(fs.stat)(p);
|
|
280
|
-
}
|
|
281
|
-
function readFile(p) {
|
|
282
|
-
// just-in-time require so that this file can be loaded in browsers as well.
|
|
283
|
-
// eslint-disable-next-line @typescript-eslint/no-require-imports,@typescript-eslint/no-var-requires
|
|
284
|
-
const fs = require('fs');
|
|
285
|
-
return util_1.promisify(fs.readFile)(p);
|
|
286
|
-
}
|
|
287
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS1zeXN0ZW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0eXBlLXN5c3RlbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBbUM7QUFDbkMsNkJBQTZCO0FBQzdCLCtCQUFpQztBQUVqQyx5Q0FBc0M7QUFDdEMsbUNBQW9DO0FBQ3BDLGlDQUFrQztBQUNsQywyQ0FBNEM7QUFNNUMsTUFBYSxVQUFVO0lBQXZCO1FBQ0U7O1dBRUc7UUFDYSxlQUFVLEdBQUcsSUFBSSxLQUFLLEVBQVksQ0FBQztRQUVuRDs7V0FFRztRQUNhLFVBQUssR0FBRyxJQUFJLEtBQUssRUFBWSxDQUFDO1FBRTdCLG9CQUFlLEdBQWlDLEVBQUUsQ0FBQztJQWtTdEUsQ0FBQztJQWhTQzs7Ozs7T0FLRztJQUNJLEtBQUssQ0FBQyxtQkFBbUIsQ0FDOUIsV0FBbUIsRUFDbkIsVUFBa0MsRUFBRTtRQUVwQyxxR0FBcUc7UUFDckcsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFFL0QsS0FBSyxNQUFNLEdBQUcsSUFBSSxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDckMsMkJBQTJCO1lBQzNCLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLGVBQWUsRUFBRTtnQkFDNUQsS0FBSyxFQUFFLENBQUMsV0FBVyxDQUFDO2FBQ3JCLENBQUMsQ0FBQztZQUNILHFHQUFxRztZQUNyRyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDM0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3BCLFNBQVM7YUFDVjtZQUVELDRDQUE0QztZQUM1QyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUM5RDtJQUNI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QUMsSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsS0FBSztRQUNkLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxFQUFZLENBQUM7UUFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUM1QixHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDckQsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFZLEVBQUUsUUFBUSxHQUFHLElBQUk7UUFDdEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUMzRCxNQUFNLEdBQUcsR0FBRyxRQUFRO1lBQ2xCLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1lBQzdCLENBQUMsQ0FBRSxJQUFzQixDQUFDO1FBQzVCLE9BQU8sSUFBSSxtQkFBUSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRU8sT0FBTyxDQUFDLEdBQWE7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNyRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN0QjtJQUNILENBQUM7Q0FDRjtBQTdTRCxnQ0E2U0M7QUFFRCxTQUFTLGNBQWMsQ0FBQyxXQUFnQjs7SUFDdEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUMvQixNQUFNLENBQUMsSUFBSSxPQUFDLFdBQVcsQ0FBQyxZQUFZLG1DQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sQ0FBQyxJQUFJLE9BQUMsV0FBVyxDQUFDLGdCQUFnQixtQ0FBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM3RSxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUNuQixNQUFrQixFQUNsQixNQUE0QztJQUU1QyxNQUFNLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBSyxDQUFDO0lBQzlCLEtBQUssTUFBTSxTQUFTLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRTtRQUN6QyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0tBQ2pEO0lBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQy9CLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFTLE9BQU8sQ0FDZCxVQUF3QixFQUN4QixNQUFrQztJQUVsQyxPQUFPLFVBQVU7U0FDZCxHQUFHLENBQUMsTUFBTSxDQUFDO1NBQ1gsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEtBQUssRUFBSyxDQUFDLENBQUM7QUFDM0QsQ0FBQztBQUVELFNBQVMsSUFBSSxDQUFDLENBQVM7SUFDckIsNEVBQTRFO0lBQzVFLG9HQUFvRztJQUNwRyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsT0FBTyxnQkFBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsQ0FBUztJQUN6Qiw0RUFBNEU7SUFDNUUsb0dBQW9HO0lBQ3BHLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QixPQUFPLGdCQUFTLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBqc2lpIGZyb20gJ0Bqc2lpL3NwZWMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gJ3V0aWwnO1xuXG5pbXBvcnQgeyBBc3NlbWJseSB9IGZyb20gJy4vYXNzZW1ibHknO1xuaW1wb3J0IHsgQ2xhc3NUeXBlIH0gZnJvbSAnLi9jbGFzcyc7XG5pbXBvcnQgeyBFbnVtVHlwZSB9IGZyb20gJy4vZW51bSc7XG5pbXBvcnQgeyBJbnRlcmZhY2VUeXBlIH0gZnJvbSAnLi9pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTWV0aG9kIH0gZnJvbSAnLi9tZXRob2QnO1xuaW1wb3J0IHsgTW9kdWxlTGlrZSB9IGZyb20gJy4vbW9kdWxlLWxpa2UnO1xuaW1wb3J0IHsgUHJvcGVydHkgfSBmcm9tICcuL3Byb3BlcnR5JztcbmltcG9ydCB7IFR5cGUgfSBmcm9tICcuL3R5cGUnO1xuXG5leHBvcnQgY2xhc3MgVHlwZVN5c3RlbSB7XG4gIC8qKlxuICAgKiBBbGwgYXNzZW1ibGllcyBpbiB0aGlzIHR5cGUgc3lzdGVtLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFzc2VtYmxpZXMgPSBuZXcgQXJyYXk8QXNzZW1ibHk+KCk7XG5cbiAgLyoqXG4gICAqIFRoZSBcInJvb3RcIiBhc3NlbWJsaWVzIChvbmVzIHRoYXQgbG9hZGVkIGV4cGxpY2l0bHkgdmlhIGEgXCJsb2FkXCIgY2FsbCkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcm9vdHMgPSBuZXcgQXJyYXk8QXNzZW1ibHk+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfYXNzZW1ibHlMb29rdXA6IHsgW25hbWU6IHN0cmluZ106IEFzc2VtYmx5IH0gPSB7fTtcblxuICAvKipcbiAgICogTG9hZCBhbGwgSlNJSSBkZXBlbmRlbmNpZXMgb2YgdGhlIGdpdmVuIE5QTSBwYWNrYWdlIGRpcmVjdG9yeS5cbiAgICpcbiAgICogVGhlIE5QTSBwYWNrYWdlIGl0c2VsZiBkb2VzICpub3QqIGhhdmUgdG8gYmUgYSBqc2lpIHBhY2thZ2UsIGFuZCBkb2VzXG4gICAqIE5PVCBoYXZlIHRvIGRlY2xhcmUgYSBKU0lJIGRlcGVuZGVuY3kgb24gYW55IG9mIHRoZSBwYWNrYWdlcy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBsb2FkTnBtRGVwZW5kZW5jaWVzKFxuICAgIHBhY2thZ2VSb290OiBzdHJpbmcsXG4gICAgb3B0aW9uczogeyB2YWxpZGF0ZT86IGJvb2xlYW4gfSA9IHt9LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlcywgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuICAgIGNvbnN0IHBrZyA9IHJlcXVpcmUocGF0aC5yZXNvbHZlKHBhY2thZ2VSb290LCAncGFja2FnZS5qc29uJykpO1xuXG4gICAgZm9yIChjb25zdCBkZXAgb2YgZGVwZW5kZW5jaWVzT2YocGtnKSkge1xuICAgICAgLy8gRmlsdGVyIGpzaWkgZGVwZW5kZW5jaWVzXG4gICAgICBjb25zdCBkZXBQa2dKc29uUGF0aCA9IHJlcXVpcmUucmVzb2x2ZShgJHtkZXB9L3BhY2thZ2UuanNvbmAsIHtcbiAgICAgICAgcGF0aHM6IFtwYWNrYWdlUm9vdF0sXG4gICAgICB9KTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG4gICAgICBjb25zdCBkZXBQa2dKc29uID0gcmVxdWlyZShkZXBQa2dKc29uUGF0aCk7XG4gICAgICBpZiAoIWRlcFBrZ0pzb24uanNpaSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWF3YWl0LWluLWxvb3BcbiAgICAgIGF3YWl0IHRoaXMubG9hZE1vZHVsZShwYXRoLmRpcm5hbWUoZGVwUGtnSnNvblBhdGgpLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgYSBqc2lpIG1vZHVsZSBvciBhIHNpbmdsZSAuanNpaSBmaWxlIGludG8gdGhlIHR5cGUgc3lzdGVtLlxuICAgKlxuICAgKiBJZiBgZmlsZU9yRGlyZWN0b3J5YCBpcyBhIGZpbGUsIGl0IHdpbGwgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZSAuanNpaSBmaWxlLlxuICAgKiBJZiBgZmlsZU9yRGlyZWN0b3J5YCBpcyBhIGRpcmVjdG9yeSwgaXQgd2lsbCBiZSB0cmVhdGVkIGFzIGEganNpaSBucG0gbW9kdWxlLlxuICAgKlxuICAgKiBOb3QgdmFsaWRhdGluZyBtYWtlcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGxvYWRpbmcgYXNzZW1ibGllcyB3aXRoIGxvdHNcbiAgICogb2YgZGVwZW5kZW5jaWVzIChzdWNoIGFzIGFwcC1kZWxpdmVyeSkgaW4gOTBtcyB2cyAzNTAwbXMuXG4gICAqXG4gICAqIEBwYXJhbSBmaWxlT3JEaXJlY3RvcnkgQSAuanNpaSBmaWxlIHBhdGggb3IgYSBtb2R1bGUgZGlyZWN0b3J5XG4gICAqIEBwYXJhbSB2YWxpZGF0ZSBXaGV0aGVyIG9yIG5vdCB0byB2YWxpZGF0ZSB0aGUgYXNzZW1ibHkgd2hpbGUgbG9hZGluZyBpdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBsb2FkKFxuICAgIGZpbGVPckRpcmVjdG9yeTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHsgdmFsaWRhdGU/OiBib29sZWFuIH0gPSB7fSxcbiAgKSB7XG4gICAgaWYgKChhd2FpdCBzdGF0KGZpbGVPckRpcmVjdG9yeSkpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWRNb2R1bGUoZmlsZU9yRGlyZWN0b3J5LCBvcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubG9hZEZpbGUoZmlsZU9yRGlyZWN0b3J5LCB7IC4uLm9wdGlvbnMsIGlzUm9vdDogdHJ1ZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsb2FkTW9kdWxlKFxuICAgIGRpcjogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHsgdmFsaWRhdGU/OiBib29sZWFuIH0gPSB7fSxcbiAgKTogUHJvbWlzZTxBc3NlbWJseT4ge1xuICAgIGNvbnN0IG91dCA9IGF3YWl0IF9sb2FkTW9kdWxlLmNhbGwodGhpcywgZGlyLCB0cnVlKTtcbiAgICBpZiAoIW91dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gbG9hZCBtb2R1bGUgZnJvbSBkaXJlY3Rvcnk6ICR7ZGlyfWApO1xuICAgIH1cblxuICAgIHJldHVybiBvdXQ7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBfbG9hZE1vZHVsZShcbiAgICAgIHRoaXM6IFR5cGVTeXN0ZW0sXG4gICAgICBtb2R1bGVEaXJlY3Rvcnk6IHN0cmluZyxcbiAgICAgIGlzUm9vdCA9IGZhbHNlLFxuICAgICkge1xuICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4obW9kdWxlRGlyZWN0b3J5LCAncGFja2FnZS5qc29uJyk7XG4gICAgICBjb25zdCBwa2cgPSBKU09OLnBhcnNlKChhd2FpdCByZWFkRmlsZShmaWxlUGF0aCkpLnRvU3RyaW5nKCkpO1xuICAgICAgaWYgKCFwa2cuanNpaSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIFwianNpaVwiIHNlY3Rpb24gaW4gJHtmaWxlUGF0aH1gKTtcbiAgICAgIH1cblxuICAgICAgLy8gTG9hZCB0aGUgYXNzZW1ibHksIGJ1dCBkb24ndCByZWN1cnNlIGlmIHdlIGFscmVhZHkgaGF2ZSBhbiBhc3NlbWJseSB3aXRoIHRoZSBzYW1lIG5hbWUuXG4gICAgICAvLyBWYWxpZGF0aW9uIGlzIG5vdCBhbiBpbnNpZ25pZmljYW50IHRpbWUgc2luaywgYW5kIGxvYWRpbmcgSVMgaW5zaWduaWZpY2FudCwgc28gZG8gYVxuICAgICAgLy8gbG9hZCB3aXRob3V0IHZhbGlkYXRpb24gZmlyc3QuIFRoaXMgc2F2ZXMgYWJvdXQgMi8zcmRzIG9mIHByb2Nlc3NpbmcgdGltZS5cbiAgICAgIGNvbnN0IGFzbSA9IGF3YWl0IHRoaXMubG9hZEFzc2VtYmx5KFxuICAgICAgICBwYXRoLmpvaW4obW9kdWxlRGlyZWN0b3J5LCAnLmpzaWknKSxcbiAgICAgICAgZmFsc2UsXG4gICAgICApO1xuICAgICAgaWYgKHRoaXMuaW5jbHVkZXNBc3NlbWJseShhc20ubmFtZSkpIHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmZpbmRBc3NlbWJseShhc20ubmFtZSk7XG4gICAgICAgIGlmIChleGlzdGluZy52ZXJzaW9uICE9PSBhc20udmVyc2lvbikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBDb25mbGljdGluZyB2ZXJzaW9ucyBvZiAke2FzbS5uYW1lfSBpbiB0eXBlIHN5c3RlbTogcHJldmlvdXNseSBsb2FkZWQgJHtleGlzdGluZy52ZXJzaW9ufSwgdHJ5aW5nIHRvIGxvYWQgJHthc20udmVyc2lvbn1gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UgbWFyayB0aGlzIHRoaW5nIGFzIHJvb3QgYWZ0ZXIgYWxsIGlmIGl0IHdhc24ndCB5ZXQuXG4gICAgICAgIGlmIChpc1Jvb3QpIHtcbiAgICAgICAgICB0aGlzLmFkZFJvb3QoYXNtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleGlzdGluZztcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMudmFsaWRhdGUgIT09IGZhbHNlKSB7XG4gICAgICAgIGFzbS52YWxpZGF0ZSgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByb290ID0gdGhpcy5hZGRBc3NlbWJseShhc20sIHsgaXNSb290IH0pO1xuICAgICAgLy8gVXNpbmcgfHwgaW5zdGVhZCBvZiA/PyBiZWNhdXNlIG5wbWpzLmNvbSB3aWxsIGFsdGVyIHRoZSBwYWNrYWdlLmpzb24gZmlsZSBhbmQgcG9zc2libHkgcHV0IGBmYWxzZWAgaW4gcGtnLmJ1bmRsZURlcGVuZGVuY2llcy5cbiAgICAgIC8vIFRoaXMgaXMgYWN0dWFsbHkgbm9uIGNvbXBsaWFudCB0byB0aGUgcGFja2FnZS5qc29uIHNwZWNpZmljYXRpb24sIGJ1dCB0aGF0J3MgaG93IGl0IGlzLi4uXG4gICAgICBjb25zdCBidW5kbGVkOiBzdHJpbmdbXSA9XG4gICAgICAgIHBrZy5idW5kbGVkRGVwZW5kZW5jaWVzIHx8IHBrZy5idW5kbGVEZXBlbmRlbmNpZXMgfHwgW107XG5cbiAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBkZXBlbmRlbmNpZXNPZihwa2cpKSB7XG4gICAgICAgIGlmIChidW5kbGVkLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZXBEaXIgPSByZXF1aXJlLnJlc29sdmUoYCR7bmFtZX0vcGFja2FnZS5qc29uYCwge1xuICAgICAgICAgIHBhdGhzOiBbbW9kdWxlRGlyZWN0b3J5XSxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hd2FpdC1pbi1sb29wXG4gICAgICAgIGF3YWl0IF9sb2FkTW9kdWxlLmNhbGwodGhpcywgcGF0aC5kaXJuYW1lKGRlcERpcikpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcm9vdDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9hZEZpbGUoXG4gICAgZmlsZTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHsgaXNSb290PzogYm9vbGVhbjsgdmFsaWRhdGU/OiBib29sZWFuIH0gPSB7fSxcbiAgKSB7XG4gICAgY29uc3QgYXNzZW1ibHkgPSBhd2FpdCB0aGlzLmxvYWRBc3NlbWJseShmaWxlLCBvcHRpb25zLnZhbGlkYXRlICE9PSBmYWxzZSk7XG4gICAgcmV0dXJuIHRoaXMuYWRkQXNzZW1ibHkoYXNzZW1ibHksIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIGFkZEFzc2VtYmx5KGFzbTogQXNzZW1ibHksIG9wdGlvbnM6IHsgaXNSb290PzogYm9vbGVhbiB9ID0ge30pIHtcbiAgICBpZiAoYXNtLnN5c3RlbSAhPT0gdGhpcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBc3NlbWJseSBoYXMgYmVlbiBjcmVhdGVkIGZvciBkaWZmZXJlbnQgdHlwZXN5c3RlbScpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fYXNzZW1ibHlMb29rdXBbYXNtLm5hbWVdKSB7XG4gICAgICB0aGlzLl9hc3NlbWJseUxvb2t1cFthc20ubmFtZV0gPSBhc207XG4gICAgICB0aGlzLmFzc2VtYmxpZXMucHVzaChhc20pO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmlzUm9vdCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuYWRkUm9vdChhc20pO1xuICAgIH1cblxuICAgIHJldHVybiBhc207XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoaXMgVHlwZVN5c3RlbSBpbmNsdWRlcyBhIGdpdmVuIGFzc2VtYmx5LlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgYXNzZW1ibHkgYmVpbmcgbG9va2VkIGZvci5cbiAgICovXG4gIHB1YmxpYyBpbmNsdWRlc0Fzc2VtYmx5KG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBuYW1lIGluIHRoaXMuX2Fzc2VtYmx5TG9va3VwO1xuICB9XG5cbiAgcHVibGljIGlzUm9vdChuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5yb290cy5tYXAoKHIpID0+IHIubmFtZSkuaW5jbHVkZXMobmFtZSk7XG4gIH1cblxuICBwdWJsaWMgZmluZEFzc2VtYmx5KG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IHJldCA9IHRoaXMudHJ5RmluZEFzc2VtYmx5KG5hbWUpO1xuICAgIGlmICghcmV0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEFzc2VtYmx5IFwiJHtuYW1lfVwiIG5vdCBmb3VuZGApO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgcHVibGljIHRyeUZpbmRBc3NlbWJseShuYW1lOiBzdHJpbmcpOiBBc3NlbWJseSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2Fzc2VtYmx5TG9va3VwW25hbWVdO1xuICB9XG5cbiAgcHVibGljIGZpbmRGcW4oZnFuOiBzdHJpbmcpOiBUeXBlIHtcbiAgICBjb25zdCBbYXNzZW1ibHldID0gZnFuLnNwbGl0KCcuJyk7XG4gICAgY29uc3QgYXNtID0gdGhpcy5maW5kQXNzZW1ibHkoYXNzZW1ibHkpO1xuICAgIHJldHVybiBhc20uZmluZFR5cGUoZnFuKTtcbiAgfVxuXG4gIHB1YmxpYyB0cnlGaW5kRnFuKGZxbjogc3RyaW5nKTogVHlwZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgW2Fzc2VtYmx5XSA9IGZxbi5zcGxpdCgnLicpO1xuICAgIGNvbnN0IGFzbSA9IHRoaXMudHJ5RmluZEFzc2VtYmx5KGFzc2VtYmx5KTtcbiAgICByZXR1cm4gYXNtPy50cnlGaW5kVHlwZShmcW4pO1xuICB9XG5cbiAgcHVibGljIGZpbmRDbGFzcyhmcW46IHN0cmluZyk6IENsYXNzVHlwZSB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZmluZEZxbihmcW4pO1xuICAgIGlmICghKHR5cGUgaW5zdGFuY2VvZiBDbGFzc1R5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZRTiAke2Zxbn0gaXMgbm90IGEgY2xhc3NgKTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBwdWJsaWMgZmluZEludGVyZmFjZShmcW46IHN0cmluZyk6IEludGVyZmFjZVR5cGUge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmZpbmRGcW4oZnFuKTtcbiAgICBpZiAoISh0eXBlIGluc3RhbmNlb2YgSW50ZXJmYWNlVHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRlFOICR7ZnFufSBpcyBub3QgYW4gaW50ZXJmYWNlYCk7XG4gICAgfVxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgcHVibGljIGZpbmRFbnVtKGZxbjogc3RyaW5nKTogRW51bVR5cGUge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmZpbmRGcW4oZnFuKTtcbiAgICBpZiAoISh0eXBlIGluc3RhbmNlb2YgRW51bVR5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZRTiAke2Zxbn0gaXMgbm90IGFuIGVudW1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICAvKipcbiAgICogQWxsIG1ldGhvZHMgaW4gdGhlIHR5cGUgc3lzdGVtLlxuICAgKi9cbiAgcHVibGljIGdldCBtZXRob2RzKCkge1xuICAgIGNvbnN0IGdldE1ldGhvZHMgPSAobW9kOiBNb2R1bGVMaWtlKTogcmVhZG9ubHkgTWV0aG9kW10gPT4ge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLi4uZmxhdE1hcChtb2Quc3VibW9kdWxlcywgZ2V0TWV0aG9kcyksXG4gICAgICAgIC4uLmZsYXRNYXAobW9kLmludGVyZmFjZXMsIChpZmFjZSkgPT4gaWZhY2Uub3duTWV0aG9kcyksXG4gICAgICAgIC4uLmZsYXRNYXAobW9kLmNsYXNzZXMsIChjbGF6eikgPT4gY2xhenoub3duTWV0aG9kcyksXG4gICAgICBdO1xuICAgIH07XG5cbiAgICByZXR1cm4gZmxhdE1hcCh0aGlzLmFzc2VtYmxpZXMsIGdldE1ldGhvZHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbCBwcm9wZXJ0aWVzIGluIHRoZSB0eXBlIHN5c3RlbS5cbiAgICovXG4gIHB1YmxpYyBnZXQgcHJvcGVydGllcygpIHtcbiAgICBjb25zdCBnZXRQcm9wZXJ0aWVzID0gKG1vZDogTW9kdWxlTGlrZSk6IHJlYWRvbmx5IFByb3BlcnR5W10gPT4ge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLi4uZmxhdE1hcChtb2Quc3VibW9kdWxlcywgZ2V0UHJvcGVydGllcyksXG4gICAgICAgIC4uLmZsYXRNYXAobW9kLmludGVyZmFjZXMsIChpZmFjZSkgPT4gaWZhY2Uub3duUHJvcGVydGllcyksXG4gICAgICAgIC4uLmZsYXRNYXAobW9kLmNsYXNzZXMsIChjbGF6eikgPT4gY2xhenoub3duUHJvcGVydGllcyksXG4gICAgICBdO1xuICAgIH07XG5cbiAgICByZXR1cm4gZmxhdE1hcCh0aGlzLmFzc2VtYmxpZXMsIGdldFByb3BlcnRpZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbCBjbGFzc2VzIGluIHRoZSB0eXBlIHN5c3RlbS5cbiAgICovXG4gIHB1YmxpYyBnZXQgY2xhc3NlcygpOiByZWFkb25seSBDbGFzc1R5cGVbXSB7XG4gICAgY29uc3Qgb3V0ID0gbmV3IEFycmF5PENsYXNzVHlwZT4oKTtcbiAgICB0aGlzLmFzc2VtYmxpZXMuZm9yRWFjaCgoYSkgPT4ge1xuICAgICAgb3V0LnB1c2goLi4uY29sbGVjdFR5cGVzKGEsIChpdGVtKSA9PiBpdGVtLmNsYXNzZXMpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbCBpbnRlcmZhY2VzIGluIHRoZSB0eXBlIHN5c3RlbS5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW50ZXJmYWNlcygpOiByZWFkb25seSBJbnRlcmZhY2VUeXBlW10ge1xuICAgIGNvbnN0IG91dCA9IG5ldyBBcnJheTxJbnRlcmZhY2VUeXBlPigpO1xuICAgIHRoaXMuYXNzZW1ibGllcy5mb3JFYWNoKChhKSA9PiB7XG4gICAgICBvdXQucHVzaCguLi5jb2xsZWN0VHlwZXMoYSwgKGl0ZW0pID0+IGl0ZW0uaW50ZXJmYWNlcykpO1xuICAgIH0pO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICAvKipcbiAgICogQWxsIGVudW1zIGluIHRoZSB0eXBlIHN5c3RlbS5cbiAgICovXG4gIHB1YmxpYyBnZXQgZW51bXMoKTogcmVhZG9ubHkgRW51bVR5cGVbXSB7XG4gICAgY29uc3Qgb3V0ID0gbmV3IEFycmF5PEVudW1UeXBlPigpO1xuICAgIHRoaXMuYXNzZW1ibGllcy5mb3JFYWNoKChhKSA9PiB7XG4gICAgICBvdXQucHVzaCguLi5jb2xsZWN0VHlwZXMoYSwgKGl0ZW0pID0+IGl0ZW0uZW51bXMpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgYW4gYXNzZW1ibHkgd2l0aG91dCBhZGRpbmcgaXQgdG8gdGhlIHR5cGVzeXN0ZW1cbiAgICogQHBhcmFtIGZpbGUgQXNzZW1ibHkgZmlsZSB0byBsb2FkXG4gICAqIEBwYXJhbSB2YWxpZGF0ZSBXaGV0aGVyIHRvIHZhbGlkYXRlIHRoZSBhc3NlbWJseSBvciBqdXN0IGFzc3VtZSBpdCBtYXRjaGVzIHRoZSBzY2hlbWFcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgbG9hZEFzc2VtYmx5KGZpbGU6IHN0cmluZywgdmFsaWRhdGUgPSB0cnVlKSB7XG4gICAgY29uc3Qgc3BlYyA9IEpTT04ucGFyc2UoKGF3YWl0IHJlYWRGaWxlKGZpbGUpKS50b1N0cmluZygpKTtcbiAgICBjb25zdCBhc3MgPSB2YWxpZGF0ZVxuICAgICAgPyBqc2lpLnZhbGlkYXRlQXNzZW1ibHkoc3BlYylcbiAgICAgIDogKHNwZWMgYXMganNpaS5Bc3NlbWJseSk7XG4gICAgcmV0dXJuIG5ldyBBc3NlbWJseSh0aGlzLCBhc3MpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRSb290KGFzbTogQXNzZW1ibHkpIHtcbiAgICBpZiAoIXRoaXMucm9vdHMubWFwKChyKSA9PiByLm5hbWUpLmluY2x1ZGVzKGFzbS5uYW1lKSkge1xuICAgICAgdGhpcy5yb290cy5wdXNoKGFzbSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRlcGVuZGVuY2llc09mKHBhY2thZ2VKc29uOiBhbnkpIHtcbiAgY29uc3QgZGVwcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBPYmplY3Qua2V5cyhwYWNrYWdlSnNvbi5kZXBlbmRlbmNpZXMgPz8ge30pLmZvckVhY2goZGVwcy5hZGQuYmluZChkZXBzKSk7XG4gIE9iamVjdC5rZXlzKHBhY2thZ2VKc29uLnBlZXJEZXBlbmRlbmNpZXMgPz8ge30pLmZvckVhY2goZGVwcy5hZGQuYmluZChkZXBzKSk7XG4gIHJldHVybiBBcnJheS5mcm9tKGRlcHMpO1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0VHlwZXM8VCBleHRlbmRzIFR5cGU+KFxuICBtb2R1bGU6IE1vZHVsZUxpa2UsXG4gIGdldHRlcjogKG1vZHVsZTogTW9kdWxlTGlrZSkgPT4gcmVhZG9ubHkgVFtdLFxuKTogcmVhZG9ubHkgVFtdIHtcbiAgY29uc3QgcmVzdWx0ID0gbmV3IEFycmF5PFQ+KCk7XG4gIGZvciAoY29uc3Qgc3VibW9kdWxlIG9mIG1vZHVsZS5zdWJtb2R1bGVzKSB7XG4gICAgcmVzdWx0LnB1c2goLi4uY29sbGVjdFR5cGVzKHN1Ym1vZHVsZSwgZ2V0dGVyKSk7XG4gIH1cbiAgcmVzdWx0LnB1c2goLi4uZ2V0dGVyKG1vZHVsZSkpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBmbGF0TWFwPFQsIFI+KFxuICBjb2xsZWN0aW9uOiByZWFkb25seSBUW10sXG4gIG1hcHBlcjogKHZhbHVlOiBUKSA9PiByZWFkb25seSBSW10sXG4pOiByZWFkb25seSBSW10ge1xuICByZXR1cm4gY29sbGVjdGlvblxuICAgIC5tYXAobWFwcGVyKVxuICAgIC5yZWR1Y2UoKGFjYywgZWx0KSA9PiBhY2MuY29uY2F0KGVsdCksIG5ldyBBcnJheTxSPigpKTtcbn1cblxuZnVuY3Rpb24gc3RhdChwOiBzdHJpbmcpIHtcbiAgLy8ganVzdC1pbi10aW1lIHJlcXVpcmUgc28gdGhhdCB0aGlzIGZpbGUgY2FuIGJlIGxvYWRlZCBpbiBicm93c2VycyBhcyB3ZWxsLlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0cyxAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG4gIGNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTtcbiAgcmV0dXJuIHByb21pc2lmeShmcy5zdGF0KShwKTtcbn1cblxuZnVuY3Rpb24gcmVhZEZpbGUocDogc3RyaW5nKSB7XG4gIC8vIGp1c3QtaW4tdGltZSByZXF1aXJlIHNvIHRoYXQgdGhpcyBmaWxlIGNhbiBiZSBsb2FkZWQgaW4gYnJvd3NlcnMgYXMgd2VsbC5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHMsQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuICBjb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG4gIHJldHVybiBwcm9taXNpZnkoZnMucmVhZEZpbGUpKHApO1xufVxuIl19
|
|
279
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS1zeXN0ZW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0eXBlLXN5c3RlbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBbUM7QUFDbkMsK0JBQStCO0FBQy9CLDZCQUE2QjtBQUU3Qix5Q0FBc0M7QUFDdEMsbUNBQW9DO0FBQ3BDLGlDQUFrQztBQUNsQywyQ0FBNEM7QUFLNUMsaUNBQWtFO0FBRWxFLE1BQWEsVUFBVTtJQUF2QjtRQUNFOztXQUVHO1FBQ2EsZUFBVSxHQUFHLElBQUksS0FBSyxFQUFZLENBQUM7UUFFbkQ7O1dBRUc7UUFDYSxVQUFLLEdBQUcsSUFBSSxLQUFLLEVBQVksQ0FBQztRQUU3QixvQkFBZSxHQUFpQyxFQUFFLENBQUM7SUEwU3RFLENBQUM7SUF4U0M7Ozs7O09BS0c7SUFDSSxLQUFLLENBQUMsbUJBQW1CLENBQzlCLFdBQW1CLEVBQ25CLFVBQWtDLEVBQUU7UUFFcEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFFekUsS0FBSyxNQUFNLEdBQUcsSUFBSSxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDckMsSUFBSSxzQkFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUN4QixTQUFTO2FBQ1Y7WUFFRCw0Q0FBNEM7WUFDNUMsTUFBTSxNQUFNLEdBQUcsTUFBTSw4QkFBdUIsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFFL0QsNENBQTRDO1lBQzVDLE1BQU0sVUFBVSxHQUFHLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO1lBQ3hFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFO2dCQUNwQixTQUFTO2FBQ1Y7WUFFRCw0Q0FBNEM7WUFDNUMsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztTQUN4QztJQUNILENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7O09BZUc7SUFDSSxLQUFLLENBQUMsSUFBSSxDQUNmLGVBQXVCLEVBQ3ZCLFVBQWtDLEVBQUU7UUFFcEMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ2xELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDbEQ7UUFDRCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVNLEtBQUssQ0FBQyxVQUFVLENBQ3JCLEdBQVcsRUFDWCxVQUFrQyxFQUFFO1FBRXBDLE1BQU0sR0FBRyxHQUFHLE1BQU0sV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDUixNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1NBQ2pFO1FBRUQsT0FBTyxHQUFHLENBQUM7UUFFWCxLQUFLLFVBQVUsV0FBVyxDQUV4QixlQUF1QixFQUN2QixNQUFNLEdBQUcsS0FBSztZQUVkLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQzVELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQ3BCLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FDbkQsQ0FBQztZQUNGLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFO2dCQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLFFBQVEsRUFBRSxDQUFDLENBQUM7YUFDckQ7WUFFRCwwRkFBMEY7WUFDMUYsc0ZBQXNGO1lBQ3RGLDZFQUE2RTtZQUM3RSxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxFQUNuQyxLQUFLLENBQ04sQ0FBQztZQUNGLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDbkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzdDLElBQUksUUFBUSxDQUFDLE9BQU8sS0FBSyxHQUFHLENBQUMsT0FBTyxFQUFFO29CQUNwQyxNQUFNLElBQUksS0FBSyxDQUNiLDJCQUEyQixHQUFHLENBQUMsSUFBSSxzQ0FBc0MsUUFBUSxDQUFDLE9BQU8sb0JBQW9CLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FDM0gsQ0FBQztpQkFDSDtnQkFDRCx3RUFBd0U7Z0JBQ3hFLElBQUksTUFBTSxFQUFFO29CQUNWLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ25CO2dCQUVELE9BQU8sUUFBUSxDQUFDO2FBQ2pCO1lBRUQsSUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLEtBQUssRUFBRTtnQkFDOUIsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQ2hCO1lBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQy9DLGdJQUFnSTtZQUNoSSw0RkFBNEY7WUFDNUYsTUFBTSxPQUFPLEdBQ1gsR0FBRyxDQUFDLG1CQUFtQixJQUFJLEdBQUcsQ0FBQyxrQkFBa0IsSUFBSSxFQUFFLENBQUM7WUFFMUQsS0FBSyxNQUFNLElBQUksSUFBSSxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3RDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDMUIsU0FBUztpQkFDVjtnQkFFRCw0Q0FBNEM7Z0JBQzVDLE1BQU0sTUFBTSxHQUFHLE1BQU0sOEJBQXVCLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO2dCQUVwRSw0Q0FBNEM7Z0JBQzVDLE1BQU0sV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDdEM7WUFFRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLFFBQVEsQ0FDbkIsSUFBWSxFQUNaLFVBQW9ELEVBQUU7UUFFdEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsUUFBUSxLQUFLLEtBQUssQ0FBQyxDQUFDO1FBQzNFLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVNLFdBQVcsQ0FBQyxHQUFhLEVBQUUsVUFBZ0MsRUFBRTtRQUNsRSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztTQUN2RTtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNuQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDckMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDM0I7UUFFRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssS0FBSyxFQUFFO1lBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDbkI7UUFFRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksZ0JBQWdCLENBQUMsSUFBWTtRQUNsQyxPQUFPLElBQUksSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQ3RDLENBQUM7SUFFTSxNQUFNLENBQUMsSUFBWTtRQUN4QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFTSxZQUFZLENBQUMsSUFBWTtRQUM5QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDUixNQUFNLElBQUksS0FBSyxDQUFDLGFBQWEsSUFBSSxhQUFhLENBQUMsQ0FBQztTQUNqRDtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVNLGVBQWUsQ0FBQyxJQUFZO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU0sT0FBTyxDQUFDLEdBQVc7UUFDeEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QyxPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVNLFVBQVUsQ0FBQyxHQUFXO1FBQzNCLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0MsT0FBTyxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsV0FBVyxDQUFDLEdBQUcsRUFBRTtJQUMvQixDQUFDO0lBRU0sU0FBUyxDQUFDLEdBQVc7UUFDMUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsQ0FBQyxJQUFJLFlBQVksaUJBQVMsQ0FBQyxFQUFFO1lBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxHQUFHLGlCQUFpQixDQUFDLENBQUM7U0FDOUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxhQUFhLENBQUMsR0FBVztRQUM5QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxDQUFDLElBQUksWUFBWSx5QkFBYSxDQUFDLEVBQUU7WUFDcEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLEdBQUcsc0JBQXNCLENBQUMsQ0FBQztTQUNuRDtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVNLFFBQVEsQ0FBQyxHQUFXO1FBQ3pCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLENBQUMsSUFBSSxZQUFZLGVBQVEsQ0FBQyxFQUFFO1lBQy9CLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxHQUFHLGlCQUFpQixDQUFDLENBQUM7U0FDOUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsT0FBTztRQUNoQixNQUFNLFVBQVUsR0FBRyxDQUFDLEdBQWUsRUFBcUIsRUFBRTtZQUN4RCxPQUFPO2dCQUNMLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDO2dCQUN0QyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO2dCQUN2RCxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO2FBQ3JELENBQUM7UUFDSixDQUFDLENBQUM7UUFFRixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsVUFBVTtRQUNuQixNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQWUsRUFBdUIsRUFBRTtZQUM3RCxPQUFPO2dCQUNMLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDO2dCQUN6QyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDO2dCQUMxRCxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDO2FBQ3hELENBQUM7UUFDSixDQUFDLENBQUM7UUFFRixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsT0FBTztRQUNoQixNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBYSxDQUFDO1FBQ25DLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDNUIsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFVBQVU7UUFDbkIsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLEVBQWlCLENBQUM7UUFDdkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUM1QixHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsS0FBSztRQUNkLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxFQUFZLENBQUM7UUFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUM1QixHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDckQsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFZLEVBQUUsUUFBUSxHQUFHLElBQUk7UUFDdEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN4RSxNQUFNLEdBQUcsR0FBRyxRQUFRO1lBQ2xCLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1lBQzdCLENBQUMsQ0FBRSxJQUFzQixDQUFDO1FBQzVCLE9BQU8sSUFBSSxtQkFBUSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRU8sT0FBTyxDQUFDLEdBQWE7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNyRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN0QjtJQUNILENBQUM7Q0FDRjtBQXJURCxnQ0FxVEM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxXQUFnQjs7SUFDdEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUMvQixNQUFNLENBQUMsSUFBSSxPQUFDLFdBQVcsQ0FBQyxZQUFZLG1DQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sQ0FBQyxJQUFJLE9BQUMsV0FBVyxDQUFDLGdCQUFnQixtQ0FBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM3RSxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUNuQixNQUFrQixFQUNsQixNQUE0QztJQUU1QyxNQUFNLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBSyxDQUFDO0lBQzlCLEtBQUssTUFBTSxTQUFTLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRTtRQUN6QyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0tBQ2pEO0lBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQy9CLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFTLE9BQU8sQ0FDZCxVQUF3QixFQUN4QixNQUFrQztJQUVsQyxPQUFPLFVBQVU7U0FDZCxHQUFHLENBQUMsTUFBTSxDQUFDO1NBQ1gsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEtBQUssRUFBSyxDQUFDLENBQUM7QUFDM0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGpzaWkgZnJvbSAnQGpzaWkvc3BlYyc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQgeyBBc3NlbWJseSB9IGZyb20gJy4vYXNzZW1ibHknO1xuaW1wb3J0IHsgQ2xhc3NUeXBlIH0gZnJvbSAnLi9jbGFzcyc7XG5pbXBvcnQgeyBFbnVtVHlwZSB9IGZyb20gJy4vZW51bSc7XG5pbXBvcnQgeyBJbnRlcmZhY2VUeXBlIH0gZnJvbSAnLi9pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTWV0aG9kIH0gZnJvbSAnLi9tZXRob2QnO1xuaW1wb3J0IHsgTW9kdWxlTGlrZSB9IGZyb20gJy4vbW9kdWxlLWxpa2UnO1xuaW1wb3J0IHsgUHJvcGVydHkgfSBmcm9tICcuL3Byb3BlcnR5JztcbmltcG9ydCB7IFR5cGUgfSBmcm9tICcuL3R5cGUnO1xuaW1wb3J0IHsgZmluZERlcGVuZGVuY3lEaXJlY3RvcnksIGlzQnVpbHRpbk1vZHVsZSB9IGZyb20gJy4vdXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBUeXBlU3lzdGVtIHtcbiAgLyoqXG4gICAqIEFsbCBhc3NlbWJsaWVzIGluIHRoaXMgdHlwZSBzeXN0ZW0uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXNzZW1ibGllcyA9IG5ldyBBcnJheTxBc3NlbWJseT4oKTtcblxuICAvKipcbiAgICogVGhlIFwicm9vdFwiIGFzc2VtYmxpZXMgKG9uZXMgdGhhdCBsb2FkZWQgZXhwbGljaXRseSB2aWEgYSBcImxvYWRcIiBjYWxsKS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb290cyA9IG5ldyBBcnJheTxBc3NlbWJseT4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9hc3NlbWJseUxvb2t1cDogeyBbbmFtZTogc3RyaW5nXTogQXNzZW1ibHkgfSA9IHt9O1xuXG4gIC8qKlxuICAgKiBMb2FkIGFsbCBKU0lJIGRlcGVuZGVuY2llcyBvZiB0aGUgZ2l2ZW4gTlBNIHBhY2thZ2UgZGlyZWN0b3J5LlxuICAgKlxuICAgKiBUaGUgTlBNIHBhY2thZ2UgaXRzZWxmIGRvZXMgKm5vdCogaGF2ZSB0byBiZSBhIGpzaWkgcGFja2FnZSwgYW5kIGRvZXNcbiAgICogTk9UIGhhdmUgdG8gZGVjbGFyZSBhIEpTSUkgZGVwZW5kZW5jeSBvbiBhbnkgb2YgdGhlIHBhY2thZ2VzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGxvYWROcG1EZXBlbmRlbmNpZXMoXG4gICAgcGFja2FnZVJvb3Q6IHN0cmluZyxcbiAgICBvcHRpb25zOiB7IHZhbGlkYXRlPzogYm9vbGVhbiB9ID0ge30sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBrZyA9IGF3YWl0IGZzLnJlYWRKc29uKHBhdGgucmVzb2x2ZShwYWNrYWdlUm9vdCwgJ3BhY2thZ2UuanNvbicpKTtcblxuICAgIGZvciAoY29uc3QgZGVwIG9mIGRlcGVuZGVuY2llc09mKHBrZykpIHtcbiAgICAgIGlmIChpc0J1aWx0aW5Nb2R1bGUoZGVwKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWF3YWl0LWluLWxvb3BcbiAgICAgIGNvbnN0IGRlcERpciA9IGF3YWl0IGZpbmREZXBlbmRlbmN5RGlyZWN0b3J5KGRlcCwgcGFja2FnZVJvb3QpO1xuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXdhaXQtaW4tbG9vcFxuICAgICAgY29uc3QgZGVwUGtnSnNvbiA9IGF3YWl0IGZzLnJlYWRKc29uKHBhdGguam9pbihkZXBEaXIsICdwYWNrYWdlLmpzb24nKSk7XG4gICAgICBpZiAoIWRlcFBrZ0pzb24uanNpaSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWF3YWl0LWluLWxvb3BcbiAgICAgIGF3YWl0IHRoaXMubG9hZE1vZHVsZShkZXBEaXIsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBhIGpzaWkgbW9kdWxlIG9yIGEgc2luZ2xlIC5qc2lpIGZpbGUgaW50byB0aGUgdHlwZSBzeXN0ZW0uXG4gICAqXG4gICAqIElmIGBmaWxlT3JEaXJlY3RvcnlgIGlzIGEgZGlyZWN0b3J5LCBpdCB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBqc2lpIG5wbSBtb2R1bGUsXG4gICAqIGFuZCBpdHMgZGVwZW5kZW5jaWVzIChhcyBkZXRlcm1pbmVkIGJ5IGl0cyAncGFja2FnZS5qc29uJyBmaWxlKSB3aWxsIGJlIGxvYWRlZFxuICAgKiBhcyB3ZWxsLlxuICAgKlxuICAgKiBJZiBgZmlsZU9yRGlyZWN0b3J5YCBpcyBhIGZpbGUsIGl0IHdpbGwgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZSAuanNpaSBmaWxlLlxuICAgKiBObyBkZXBlbmRlbmNpZXMgd2lsbCBiZSBsb2FkZWQuIFlvdSBhbG1vc3QgbmV2ZXIgd2FudCB0aGlzLlxuICAgKlxuICAgKiBOb3QgdmFsaWRhdGluZyBtYWtlcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGxvYWRpbmcgYXNzZW1ibGllcyB3aXRoIGxvdHNcbiAgICogb2YgZGVwZW5kZW5jaWVzIChzdWNoIGFzIGFwcC1kZWxpdmVyeSkgaW4gOTBtcyB2cyAzNTAwbXMuXG4gICAqXG4gICAqIEBwYXJhbSBmaWxlT3JEaXJlY3RvcnkgQSAuanNpaSBmaWxlIHBhdGggb3IgYSBtb2R1bGUgZGlyZWN0b3J5XG4gICAqIEBwYXJhbSB2YWxpZGF0ZSBXaGV0aGVyIG9yIG5vdCB0byB2YWxpZGF0ZSB0aGUgYXNzZW1ibHkgd2hpbGUgbG9hZGluZyBpdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBsb2FkKFxuICAgIGZpbGVPckRpcmVjdG9yeTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHsgdmFsaWRhdGU/OiBib29sZWFuIH0gPSB7fSxcbiAgKSB7XG4gICAgaWYgKChhd2FpdCBmcy5zdGF0KGZpbGVPckRpcmVjdG9yeSkpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWRNb2R1bGUoZmlsZU9yRGlyZWN0b3J5LCBvcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubG9hZEZpbGUoZmlsZU9yRGlyZWN0b3J5LCB7IC4uLm9wdGlvbnMsIGlzUm9vdDogdHJ1ZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsb2FkTW9kdWxlKFxuICAgIGRpcjogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHsgdmFsaWRhdGU/OiBib29sZWFuIH0gPSB7fSxcbiAgKTogUHJvbWlzZTxBc3NlbWJseT4ge1xuICAgIGNvbnN0IG91dCA9IGF3YWl0IF9sb2FkTW9kdWxlLmNhbGwodGhpcywgZGlyLCB0cnVlKTtcbiAgICBpZiAoIW91dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gbG9hZCBtb2R1bGUgZnJvbSBkaXJlY3Rvcnk6ICR7ZGlyfWApO1xuICAgIH1cblxuICAgIHJldHVybiBvdXQ7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBfbG9hZE1vZHVsZShcbiAgICAgIHRoaXM6IFR5cGVTeXN0ZW0sXG4gICAgICBtb2R1bGVEaXJlY3Rvcnk6IHN0cmluZyxcbiAgICAgIGlzUm9vdCA9IGZhbHNlLFxuICAgICkge1xuICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4obW9kdWxlRGlyZWN0b3J5LCAncGFja2FnZS5qc29uJyk7XG4gICAgICBjb25zdCBwa2cgPSBKU09OLnBhcnNlKFxuICAgICAgICBhd2FpdCBmcy5yZWFkRmlsZShmaWxlUGF0aCwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KSxcbiAgICAgICk7XG4gICAgICBpZiAoIXBrZy5qc2lpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gXCJqc2lpXCIgc2VjdGlvbiBpbiAke2ZpbGVQYXRofWApO1xuICAgICAgfVxuXG4gICAgICAvLyBMb2FkIHRoZSBhc3NlbWJseSwgYnV0IGRvbid0IHJlY3Vyc2UgaWYgd2UgYWxyZWFkeSBoYXZlIGFuIGFzc2VtYmx5IHdpdGggdGhlIHNhbWUgbmFtZS5cbiAgICAgIC8vIFZhbGlkYXRpb24gaXMgbm90IGFuIGluc2lnbmlmaWNhbnQgdGltZSBzaW5rLCBhbmQgbG9hZGluZyBJUyBpbnNpZ25pZmljYW50LCBzbyBkbyBhXG4gICAgICAvLyBsb2FkIHdpdGhvdXQgdmFsaWRhdGlvbiBmaXJzdC4gVGhpcyBzYXZlcyBhYm91dCAyLzNyZHMgb2YgcHJvY2Vzc2luZyB0aW1lLlxuICAgICAgY29uc3QgYXNtID0gYXdhaXQgdGhpcy5sb2FkQXNzZW1ibHkoXG4gICAgICAgIHBhdGguam9pbihtb2R1bGVEaXJlY3RvcnksICcuanNpaScpLFxuICAgICAgICBmYWxzZSxcbiAgICAgICk7XG4gICAgICBpZiAodGhpcy5pbmNsdWRlc0Fzc2VtYmx5KGFzbS5uYW1lKSkge1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuZmluZEFzc2VtYmx5KGFzbS5uYW1lKTtcbiAgICAgICAgaWYgKGV4aXN0aW5nLnZlcnNpb24gIT09IGFzbS52ZXJzaW9uKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYENvbmZsaWN0aW5nIHZlcnNpb25zIG9mICR7YXNtLm5hbWV9IGluIHR5cGUgc3lzdGVtOiBwcmV2aW91c2x5IGxvYWRlZCAke2V4aXN0aW5nLnZlcnNpb259LCB0cnlpbmcgdG8gbG9hZCAke2FzbS52ZXJzaW9ufWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBtYXJrIHRoaXMgdGhpbmcgYXMgcm9vdCBhZnRlciBhbGwgaWYgaXQgd2Fzbid0IHlldC5cbiAgICAgICAgaWYgKGlzUm9vdCkge1xuICAgICAgICAgIHRoaXMuYWRkUm9vdChhc20pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy52YWxpZGF0ZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgYXNtLnZhbGlkYXRlKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJvb3QgPSB0aGlzLmFkZEFzc2VtYmx5KGFzbSwgeyBpc1Jvb3QgfSk7XG4gICAgICAvLyBVc2luZyB8fCBpbnN0ZWFkIG9mID8/IGJlY2F1c2UgbnBtanMuY29tIHdpbGwgYWx0ZXIgdGhlIHBhY2thZ2UuanNvbiBmaWxlIGFuZCBwb3NzaWJseSBwdXQgYGZhbHNlYCBpbiBwa2cuYnVuZGxlRGVwZW5kZW5jaWVzLlxuICAgICAgLy8gVGhpcyBpcyBhY3R1YWxseSBub24gY29tcGxpYW50IHRvIHRoZSBwYWNrYWdlLmpzb24gc3BlY2lmaWNhdGlvbiwgYnV0IHRoYXQncyBob3cgaXQgaXMuLi5cbiAgICAgIGNvbnN0IGJ1bmRsZWQ6IHN0cmluZ1tdID1cbiAgICAgICAgcGtnLmJ1bmRsZWREZXBlbmRlbmNpZXMgfHwgcGtnLmJ1bmRsZURlcGVuZGVuY2llcyB8fCBbXTtcblxuICAgICAgZm9yIChjb25zdCBuYW1lIG9mIGRlcGVuZGVuY2llc09mKHBrZykpIHtcbiAgICAgICAgaWYgKGJ1bmRsZWQuaW5jbHVkZXMobmFtZSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hd2FpdC1pbi1sb29wXG4gICAgICAgIGNvbnN0IGRlcERpciA9IGF3YWl0IGZpbmREZXBlbmRlbmN5RGlyZWN0b3J5KG5hbWUsIG1vZHVsZURpcmVjdG9yeSk7XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWF3YWl0LWluLWxvb3BcbiAgICAgICAgYXdhaXQgX2xvYWRNb2R1bGUuY2FsbCh0aGlzLCBkZXBEaXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcm9vdDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9hZEZpbGUoXG4gICAgZmlsZTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHsgaXNSb290PzogYm9vbGVhbjsgdmFsaWRhdGU/OiBib29sZWFuIH0gPSB7fSxcbiAgKSB7XG4gICAgY29uc3QgYXNzZW1ibHkgPSBhd2FpdCB0aGlzLmxvYWRBc3NlbWJseShmaWxlLCBvcHRpb25zLnZhbGlkYXRlICE9PSBmYWxzZSk7XG4gICAgcmV0dXJuIHRoaXMuYWRkQXNzZW1ibHkoYXNzZW1ibHksIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIGFkZEFzc2VtYmx5KGFzbTogQXNzZW1ibHksIG9wdGlvbnM6IHsgaXNSb290PzogYm9vbGVhbiB9ID0ge30pIHtcbiAgICBpZiAoYXNtLnN5c3RlbSAhPT0gdGhpcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBc3NlbWJseSBoYXMgYmVlbiBjcmVhdGVkIGZvciBkaWZmZXJlbnQgdHlwZXN5c3RlbScpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fYXNzZW1ibHlMb29rdXBbYXNtLm5hbWVdKSB7XG4gICAgICB0aGlzLl9hc3NlbWJseUxvb2t1cFthc20ubmFtZV0gPSBhc207XG4gICAgICB0aGlzLmFzc2VtYmxpZXMucHVzaChhc20pO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmlzUm9vdCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuYWRkUm9vdChhc20pO1xuICAgIH1cblxuICAgIHJldHVybiBhc207XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoaXMgVHlwZVN5c3RlbSBpbmNsdWRlcyBhIGdpdmVuIGFzc2VtYmx5LlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgYXNzZW1ibHkgYmVpbmcgbG9va2VkIGZvci5cbiAgICovXG4gIHB1YmxpYyBpbmNsdWRlc0Fzc2VtYmx5KG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBuYW1lIGluIHRoaXMuX2Fzc2VtYmx5TG9va3VwO1xuICB9XG5cbiAgcHVibGljIGlzUm9vdChuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5yb290cy5tYXAoKHIpID0+IHIubmFtZSkuaW5jbHVkZXMobmFtZSk7XG4gIH1cblxuICBwdWJsaWMgZmluZEFzc2VtYmx5KG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IHJldCA9IHRoaXMudHJ5RmluZEFzc2VtYmx5KG5hbWUpO1xuICAgIGlmICghcmV0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEFzc2VtYmx5IFwiJHtuYW1lfVwiIG5vdCBmb3VuZGApO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgcHVibGljIHRyeUZpbmRBc3NlbWJseShuYW1lOiBzdHJpbmcpOiBBc3NlbWJseSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2Fzc2VtYmx5TG9va3VwW25hbWVdO1xuICB9XG5cbiAgcHVibGljIGZpbmRGcW4oZnFuOiBzdHJpbmcpOiBUeXBlIHtcbiAgICBjb25zdCBbYXNzZW1ibHldID0gZnFuLnNwbGl0KCcuJyk7XG4gICAgY29uc3QgYXNtID0gdGhpcy5maW5kQXNzZW1ibHkoYXNzZW1ibHkpO1xuICAgIHJldHVybiBhc20uZmluZFR5cGUoZnFuKTtcbiAgfVxuXG4gIHB1YmxpYyB0cnlGaW5kRnFuKGZxbjogc3RyaW5nKTogVHlwZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgW2Fzc2VtYmx5XSA9IGZxbi5zcGxpdCgnLicpO1xuICAgIGNvbnN0IGFzbSA9IHRoaXMudHJ5RmluZEFzc2VtYmx5KGFzc2VtYmx5KTtcbiAgICByZXR1cm4gYXNtPy50cnlGaW5kVHlwZShmcW4pO1xuICB9XG5cbiAgcHVibGljIGZpbmRDbGFzcyhmcW46IHN0cmluZyk6IENsYXNzVHlwZSB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZmluZEZxbihmcW4pO1xuICAgIGlmICghKHR5cGUgaW5zdGFuY2VvZiBDbGFzc1R5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZRTiAke2Zxbn0gaXMgbm90IGEgY2xhc3NgKTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBwdWJsaWMgZmluZEludGVyZmFjZShmcW46IHN0cmluZyk6IEludGVyZmFjZVR5cGUge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmZpbmRGcW4oZnFuKTtcbiAgICBpZiAoISh0eXBlIGluc3RhbmNlb2YgSW50ZXJmYWNlVHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRlFOICR7ZnFufSBpcyBub3QgYW4gaW50ZXJmYWNlYCk7XG4gICAgfVxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgcHVibGljIGZpbmRFbnVtKGZxbjogc3RyaW5nKTogRW51bVR5cGUge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmZpbmRGcW4oZnFuKTtcbiAgICBpZiAoISh0eXBlIGluc3RhbmNlb2YgRW51bVR5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZRTiAke2Zxbn0gaXMgbm90IGFuIGVudW1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICAvKipcbiAgICogQWxsIG1ldGhvZHMgaW4gdGhlIHR5cGUgc3lzdGVtLlxuICAgKi9cbiAgcHVibGljIGdldCBtZXRob2RzKCkge1xuICAgIGNvbnN0IGdldE1ldGhvZHMgPSAobW9kOiBNb2R1bGVMaWtlKTogcmVhZG9ubHkgTWV0aG9kW10gPT4ge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLi4uZmxhdE1hcChtb2Quc3VibW9kdWxlcywgZ2V0TWV0aG9kcyksXG4gICAgICAgIC4uLmZsYXRNYXAobW9kLmludGVyZmFjZXMsIChpZmFjZSkgPT4gaWZhY2Uub3duTWV0aG9kcyksXG4gICAgICAgIC4uLmZsYXRNYXAobW9kLmNsYXNzZXMsIChjbGF6eikgPT4gY2xhenoub3duTWV0aG9kcyksXG4gICAgICBdO1xuICAgIH07XG5cbiAgICByZXR1cm4gZmxhdE1hcCh0aGlzLmFzc2VtYmxpZXMsIGdldE1ldGhvZHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbCBwcm9wZXJ0aWVzIGluIHRoZSB0eXBlIHN5c3RlbS5cbiAgICovXG4gIHB1YmxpYyBnZXQgcHJvcGVydGllcygpIHtcbiAgICBjb25zdCBnZXRQcm9wZXJ0aWVzID0gKG1vZDogTW9kdWxlTGlrZSk6IHJlYWRvbmx5IFByb3BlcnR5W10gPT4ge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLi4uZmxhdE1hcChtb2Quc3VibW9kdWxlcywgZ2V0UHJvcGVydGllcyksXG4gICAgICAgIC4uLmZsYXRNYXAobW9kLmludGVyZmFjZXMsIChpZmFjZSkgPT4gaWZhY2Uub3duUHJvcGVydGllcyksXG4gICAgICAgIC4uLmZsYXRNYXAobW9kLmNsYXNzZXMsIChjbGF6eikgPT4gY2xhenoub3duUHJvcGVydGllcyksXG4gICAgICBdO1xuICAgIH07XG5cbiAgICByZXR1cm4gZmxhdE1hcCh0aGlzLmFzc2VtYmxpZXMsIGdldFByb3BlcnRpZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbCBjbGFzc2VzIGluIHRoZSB0eXBlIHN5c3RlbS5cbiAgICovXG4gIHB1YmxpYyBnZXQgY2xhc3NlcygpOiByZWFkb25seSBDbGFzc1R5cGVbXSB7XG4gICAgY29uc3Qgb3V0ID0gbmV3IEFycmF5PENsYXNzVHlwZT4oKTtcbiAgICB0aGlzLmFzc2VtYmxpZXMuZm9yRWFjaCgoYSkgPT4ge1xuICAgICAgb3V0LnB1c2goLi4uY29sbGVjdFR5cGVzKGEsIChpdGVtKSA9PiBpdGVtLmNsYXNzZXMpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbCBpbnRlcmZhY2VzIGluIHRoZSB0eXBlIHN5c3RlbS5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW50ZXJmYWNlcygpOiByZWFkb25seSBJbnRlcmZhY2VUeXBlW10ge1xuICAgIGNvbnN0IG91dCA9IG5ldyBBcnJheTxJbnRlcmZhY2VUeXBlPigpO1xuICAgIHRoaXMuYXNzZW1ibGllcy5mb3JFYWNoKChhKSA9PiB7XG4gICAgICBvdXQucHVzaCguLi5jb2xsZWN0VHlwZXMoYSwgKGl0ZW0pID0+IGl0ZW0uaW50ZXJmYWNlcykpO1xuICAgIH0pO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICAvKipcbiAgICogQWxsIGVudW1zIGluIHRoZSB0eXBlIHN5c3RlbS5cbiAgICovXG4gIHB1YmxpYyBnZXQgZW51bXMoKTogcmVhZG9ubHkgRW51bVR5cGVbXSB7XG4gICAgY29uc3Qgb3V0ID0gbmV3IEFycmF5PEVudW1UeXBlPigpO1xuICAgIHRoaXMuYXNzZW1ibGllcy5mb3JFYWNoKChhKSA9PiB7XG4gICAgICBvdXQucHVzaCguLi5jb2xsZWN0VHlwZXMoYSwgKGl0ZW0pID0+IGl0ZW0uZW51bXMpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgYW4gYXNzZW1ibHkgd2l0aG91dCBhZGRpbmcgaXQgdG8gdGhlIHR5cGVzeXN0ZW1cbiAgICogQHBhcmFtIGZpbGUgQXNzZW1ibHkgZmlsZSB0byBsb2FkXG4gICAqIEBwYXJhbSB2YWxpZGF0ZSBXaGV0aGVyIHRvIHZhbGlkYXRlIHRoZSBhc3NlbWJseSBvciBqdXN0IGFzc3VtZSBpdCBtYXRjaGVzIHRoZSBzY2hlbWFcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgbG9hZEFzc2VtYmx5KGZpbGU6IHN0cmluZywgdmFsaWRhdGUgPSB0cnVlKSB7XG4gICAgY29uc3Qgc3BlYyA9IEpTT04ucGFyc2UoYXdhaXQgZnMucmVhZEZpbGUoZmlsZSwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KSk7XG4gICAgY29uc3QgYXNzID0gdmFsaWRhdGVcbiAgICAgID8ganNpaS52YWxpZGF0ZUFzc2VtYmx5KHNwZWMpXG4gICAgICA6IChzcGVjIGFzIGpzaWkuQXNzZW1ibHkpO1xuICAgIHJldHVybiBuZXcgQXNzZW1ibHkodGhpcywgYXNzKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUm9vdChhc206IEFzc2VtYmx5KSB7XG4gICAgaWYgKCF0aGlzLnJvb3RzLm1hcCgocikgPT4gci5uYW1lKS5pbmNsdWRlcyhhc20ubmFtZSkpIHtcbiAgICAgIHRoaXMucm9vdHMucHVzaChhc20pO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkZXBlbmRlbmNpZXNPZihwYWNrYWdlSnNvbjogYW55KSB7XG4gIGNvbnN0IGRlcHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgT2JqZWN0LmtleXMocGFja2FnZUpzb24uZGVwZW5kZW5jaWVzID8/IHt9KS5mb3JFYWNoKGRlcHMuYWRkLmJpbmQoZGVwcykpO1xuICBPYmplY3Qua2V5cyhwYWNrYWdlSnNvbi5wZWVyRGVwZW5kZW5jaWVzID8/IHt9KS5mb3JFYWNoKGRlcHMuYWRkLmJpbmQoZGVwcykpO1xuICByZXR1cm4gQXJyYXkuZnJvbShkZXBzKTtcbn1cblxuZnVuY3Rpb24gY29sbGVjdFR5cGVzPFQgZXh0ZW5kcyBUeXBlPihcbiAgbW9kdWxlOiBNb2R1bGVMaWtlLFxuICBnZXR0ZXI6IChtb2R1bGU6IE1vZHVsZUxpa2UpID0+IHJlYWRvbmx5IFRbXSxcbik6IHJlYWRvbmx5IFRbXSB7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheTxUPigpO1xuICBmb3IgKGNvbnN0IHN1Ym1vZHVsZSBvZiBtb2R1bGUuc3VibW9kdWxlcykge1xuICAgIHJlc3VsdC5wdXNoKC4uLmNvbGxlY3RUeXBlcyhzdWJtb2R1bGUsIGdldHRlcikpO1xuICB9XG4gIHJlc3VsdC5wdXNoKC4uLmdldHRlcihtb2R1bGUpKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZmxhdE1hcDxULCBSPihcbiAgY29sbGVjdGlvbjogcmVhZG9ubHkgVFtdLFxuICBtYXBwZXI6ICh2YWx1ZTogVCkgPT4gcmVhZG9ubHkgUltdLFxuKTogcmVhZG9ubHkgUltdIHtcbiAgcmV0dXJuIGNvbGxlY3Rpb25cbiAgICAubWFwKG1hcHBlcilcbiAgICAucmVkdWNlKChhY2MsIGVsdCkgPT4gYWNjLmNvbmNhdChlbHQpLCBuZXcgQXJyYXk8Uj4oKSk7XG59XG4iXX0=
|
package/lib/util.d.ts
CHANGED
|
@@ -1,3 +1,33 @@
|
|
|
1
1
|
export declare function indexBy<T>(xs: T[], f: (x: T) => string): {
|
|
2
2
|
[key: string]: T;
|
|
3
3
|
};
|
|
4
|
+
/**
|
|
5
|
+
* Find the directory that contains a given dependency, identified by its 'package.json', from a starting search directory
|
|
6
|
+
*
|
|
7
|
+
* (This code is duplicated among jsii/jsii-pacmak/jsii-reflect. Changes should be done in all
|
|
8
|
+
* 3 locations, and we should unify these at some point: https://github.com/aws/jsii/issues/3236)
|
|
9
|
+
*/
|
|
10
|
+
export declare function findDependencyDirectory(dependencyName: string, searchStart: string): Promise<string>;
|
|
11
|
+
/**
|
|
12
|
+
* Whether the given dependency is a built-in
|
|
13
|
+
*
|
|
14
|
+
* Some dependencies that occur in `package.json` are also built-ins in modern Node
|
|
15
|
+
* versions (most egregious example: 'punycode'). Detect those and filter them out.
|
|
16
|
+
*/
|
|
17
|
+
export declare function isBuiltinModule(depName: string): any;
|
|
18
|
+
/**
|
|
19
|
+
* Find the package.json for a given package upwards from the given directory
|
|
20
|
+
*
|
|
21
|
+
* (This code is duplicated among jsii/jsii-pacmak/jsii-reflect. Changes should be done in all
|
|
22
|
+
* 3 locations, and we should unify these at some point: https://github.com/aws/jsii/issues/3236)
|
|
23
|
+
*/
|
|
24
|
+
export declare function findPackageJsonUp(packageName: string, directory: string): Promise<string | undefined>;
|
|
25
|
+
/**
|
|
26
|
+
* Find a directory up the tree from a starting directory matching a condition
|
|
27
|
+
*
|
|
28
|
+
* Will return `undefined` if no directory matches
|
|
29
|
+
*
|
|
30
|
+
* (This code is duplicated among jsii/jsii-pacmak/jsii-reflect. Changes should be done in all
|
|
31
|
+
* 3 locations, and we should unify these at some point: https://github.com/aws/jsii/issues/3236)
|
|
32
|
+
*/
|
|
33
|
+
export declare function findUp(directory: string, pred: (dir: string) => Promise<boolean>): Promise<string | undefined>;
|
package/lib/util.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.indexBy = void 0;
|
|
3
|
+
exports.findUp = exports.findPackageJsonUp = exports.isBuiltinModule = exports.findDependencyDirectory = exports.indexBy = void 0;
|
|
4
|
+
const fs = require("fs-extra");
|
|
5
|
+
const path = require("path");
|
|
4
6
|
function indexBy(xs, f) {
|
|
5
7
|
const ret = {};
|
|
6
8
|
for (const x of xs) {
|
|
@@ -9,4 +11,74 @@ function indexBy(xs, f) {
|
|
|
9
11
|
return ret;
|
|
10
12
|
}
|
|
11
13
|
exports.indexBy = indexBy;
|
|
12
|
-
|
|
14
|
+
/**
|
|
15
|
+
* Find the directory that contains a given dependency, identified by its 'package.json', from a starting search directory
|
|
16
|
+
*
|
|
17
|
+
* (This code is duplicated among jsii/jsii-pacmak/jsii-reflect. Changes should be done in all
|
|
18
|
+
* 3 locations, and we should unify these at some point: https://github.com/aws/jsii/issues/3236)
|
|
19
|
+
*/
|
|
20
|
+
async function findDependencyDirectory(dependencyName, searchStart) {
|
|
21
|
+
// Explicitly do not use 'require("dep/package.json")' because that will fail if the
|
|
22
|
+
// package does not export that particular file.
|
|
23
|
+
const entryPoint = require.resolve(dependencyName, {
|
|
24
|
+
paths: [searchStart],
|
|
25
|
+
});
|
|
26
|
+
// Search up from the given directory, looking for a package.json that matches
|
|
27
|
+
// the dependency name (so we don't accidentally find stray 'package.jsons').
|
|
28
|
+
const depPkgJsonPath = await findPackageJsonUp(dependencyName, path.dirname(entryPoint));
|
|
29
|
+
if (!depPkgJsonPath) {
|
|
30
|
+
throw new Error(`Could not find dependency '${dependencyName}' from '${searchStart}'`);
|
|
31
|
+
}
|
|
32
|
+
return depPkgJsonPath;
|
|
33
|
+
}
|
|
34
|
+
exports.findDependencyDirectory = findDependencyDirectory;
|
|
35
|
+
/**
|
|
36
|
+
* Whether the given dependency is a built-in
|
|
37
|
+
*
|
|
38
|
+
* Some dependencies that occur in `package.json` are also built-ins in modern Node
|
|
39
|
+
* versions (most egregious example: 'punycode'). Detect those and filter them out.
|
|
40
|
+
*/
|
|
41
|
+
function isBuiltinModule(depName) {
|
|
42
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports,@typescript-eslint/no-var-requires
|
|
43
|
+
const { builtinModules } = require('module');
|
|
44
|
+
return (builtinModules !== null && builtinModules !== void 0 ? builtinModules : []).includes(depName);
|
|
45
|
+
}
|
|
46
|
+
exports.isBuiltinModule = isBuiltinModule;
|
|
47
|
+
/**
|
|
48
|
+
* Find the package.json for a given package upwards from the given directory
|
|
49
|
+
*
|
|
50
|
+
* (This code is duplicated among jsii/jsii-pacmak/jsii-reflect. Changes should be done in all
|
|
51
|
+
* 3 locations, and we should unify these at some point: https://github.com/aws/jsii/issues/3236)
|
|
52
|
+
*/
|
|
53
|
+
async function findPackageJsonUp(packageName, directory) {
|
|
54
|
+
return findUp(directory, async (dir) => {
|
|
55
|
+
const pjFile = path.join(dir, 'package.json');
|
|
56
|
+
return ((await fs.pathExists(pjFile)) &&
|
|
57
|
+
(await fs.readJson(pjFile)).name === packageName);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
exports.findPackageJsonUp = findPackageJsonUp;
|
|
61
|
+
/**
|
|
62
|
+
* Find a directory up the tree from a starting directory matching a condition
|
|
63
|
+
*
|
|
64
|
+
* Will return `undefined` if no directory matches
|
|
65
|
+
*
|
|
66
|
+
* (This code is duplicated among jsii/jsii-pacmak/jsii-reflect. Changes should be done in all
|
|
67
|
+
* 3 locations, and we should unify these at some point: https://github.com/aws/jsii/issues/3236)
|
|
68
|
+
*/
|
|
69
|
+
async function findUp(directory, pred) {
|
|
70
|
+
// eslint-disable-next-line no-constant-condition
|
|
71
|
+
while (true) {
|
|
72
|
+
// eslint-disable-next-line no-await-in-loop
|
|
73
|
+
if (await pred(directory)) {
|
|
74
|
+
return directory;
|
|
75
|
+
}
|
|
76
|
+
const parent = path.dirname(directory);
|
|
77
|
+
if (parent === directory) {
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
directory = parent;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
exports.findUp = findUp;
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQStCO0FBQy9CLDZCQUE2QjtBQUU3QixTQUFnQixPQUFPLENBQUksRUFBTyxFQUFFLENBQW1CO0lBQ3JELE1BQU0sR0FBRyxHQUF5QixFQUFFLENBQUM7SUFDckMsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNmO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBTkQsMEJBTUM7QUFFRDs7Ozs7R0FLRztBQUNJLEtBQUssVUFBVSx1QkFBdUIsQ0FDM0MsY0FBc0IsRUFDdEIsV0FBbUI7SUFFbkIsb0ZBQW9GO0lBQ3BGLGdEQUFnRDtJQUNoRCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRTtRQUNqRCxLQUFLLEVBQUUsQ0FBQyxXQUFXLENBQUM7S0FDckIsQ0FBQyxDQUFDO0lBRUgsOEVBQThFO0lBQzlFLDZFQUE2RTtJQUM3RSxNQUFNLGNBQWMsR0FBRyxNQUFNLGlCQUFpQixDQUM1QyxjQUFjLEVBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FDekIsQ0FBQztJQUVGLElBQUksQ0FBQyxjQUFjLEVBQUU7UUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FDYiw4QkFBOEIsY0FBYyxXQUFXLFdBQVcsR0FBRyxDQUN0RSxDQUFDO0tBQ0g7SUFFRCxPQUFPLGNBQWMsQ0FBQztBQUN4QixDQUFDO0FBeEJELDBEQXdCQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsZUFBZSxDQUFDLE9BQWU7SUFDN0Msb0dBQW9HO0lBQ3BHLE1BQU0sRUFBRSxjQUFjLEVBQUUsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDN0MsT0FBTyxDQUFDLGNBQWMsYUFBZCxjQUFjLGNBQWQsY0FBYyxHQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBSkQsMENBSUM7QUFFRDs7Ozs7R0FLRztBQUNJLEtBQUssVUFBVSxpQkFBaUIsQ0FDckMsV0FBbUIsRUFDbkIsU0FBaUI7SUFFakIsT0FBTyxNQUFNLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUNyQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUM5QyxPQUFPLENBQ0wsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUNqRCxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBWEQsOENBV0M7QUFFRDs7Ozs7OztHQU9HO0FBQ0ksS0FBSyxVQUFVLE1BQU0sQ0FDMUIsU0FBaUIsRUFDakIsSUFBdUM7SUFFdkMsaURBQWlEO0lBQ2pELE9BQU8sSUFBSSxFQUFFO1FBQ1gsNENBQTRDO1FBQzVDLElBQUksTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDekIsT0FBTyxTQUFTLENBQUM7U0FDbEI7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRTtZQUN4QixPQUFPLFNBQVMsQ0FBQztTQUNsQjtRQUNELFNBQVMsR0FBRyxNQUFNLENBQUM7S0FDcEI7QUFDSCxDQUFDO0FBakJELHdCQWlCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmRleEJ5PFQ+KHhzOiBUW10sIGY6ICh4OiBUKSA9PiBzdHJpbmcpOiB7IFtrZXk6IHN0cmluZ106IFQgfSB7XG4gIGNvbnN0IHJldDogeyBba2V5OiBzdHJpbmddOiBUIH0gPSB7fTtcbiAgZm9yIChjb25zdCB4IG9mIHhzKSB7XG4gICAgcmV0W2YoeCldID0geDtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG4vKipcbiAqIEZpbmQgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGEgZ2l2ZW4gZGVwZW5kZW5jeSwgaWRlbnRpZmllZCBieSBpdHMgJ3BhY2thZ2UuanNvbicsIGZyb20gYSBzdGFydGluZyBzZWFyY2ggZGlyZWN0b3J5XG4gKlxuICogKFRoaXMgY29kZSBpcyBkdXBsaWNhdGVkIGFtb25nIGpzaWkvanNpaS1wYWNtYWsvanNpaS1yZWZsZWN0LiBDaGFuZ2VzIHNob3VsZCBiZSBkb25lIGluIGFsbFxuICogMyBsb2NhdGlvbnMsIGFuZCB3ZSBzaG91bGQgdW5pZnkgdGhlc2UgYXQgc29tZSBwb2ludDogaHR0cHM6Ly9naXRodWIuY29tL2F3cy9qc2lpL2lzc3Vlcy8zMjM2KVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmluZERlcGVuZGVuY3lEaXJlY3RvcnkoXG4gIGRlcGVuZGVuY3lOYW1lOiBzdHJpbmcsXG4gIHNlYXJjaFN0YXJ0OiBzdHJpbmcsXG4pIHtcbiAgLy8gRXhwbGljaXRseSBkbyBub3QgdXNlICdyZXF1aXJlKFwiZGVwL3BhY2thZ2UuanNvblwiKScgYmVjYXVzZSB0aGF0IHdpbGwgZmFpbCBpZiB0aGVcbiAgLy8gcGFja2FnZSBkb2VzIG5vdCBleHBvcnQgdGhhdCBwYXJ0aWN1bGFyIGZpbGUuXG4gIGNvbnN0IGVudHJ5UG9pbnQgPSByZXF1aXJlLnJlc29sdmUoZGVwZW5kZW5jeU5hbWUsIHtcbiAgICBwYXRoczogW3NlYXJjaFN0YXJ0XSxcbiAgfSk7XG5cbiAgLy8gU2VhcmNoIHVwIGZyb20gdGhlIGdpdmVuIGRpcmVjdG9yeSwgbG9va2luZyBmb3IgYSBwYWNrYWdlLmpzb24gdGhhdCBtYXRjaGVzXG4gIC8vIHRoZSBkZXBlbmRlbmN5IG5hbWUgKHNvIHdlIGRvbid0IGFjY2lkZW50YWxseSBmaW5kIHN0cmF5ICdwYWNrYWdlLmpzb25zJykuXG4gIGNvbnN0IGRlcFBrZ0pzb25QYXRoID0gYXdhaXQgZmluZFBhY2thZ2VKc29uVXAoXG4gICAgZGVwZW5kZW5jeU5hbWUsXG4gICAgcGF0aC5kaXJuYW1lKGVudHJ5UG9pbnQpLFxuICApO1xuXG4gIGlmICghZGVwUGtnSnNvblBhdGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQ291bGQgbm90IGZpbmQgZGVwZW5kZW5jeSAnJHtkZXBlbmRlbmN5TmFtZX0nIGZyb20gJyR7c2VhcmNoU3RhcnR9J2AsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBkZXBQa2dKc29uUGF0aDtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRoZSBnaXZlbiBkZXBlbmRlbmN5IGlzIGEgYnVpbHQtaW5cbiAqXG4gKiBTb21lIGRlcGVuZGVuY2llcyB0aGF0IG9jY3VyIGluIGBwYWNrYWdlLmpzb25gIGFyZSBhbHNvIGJ1aWx0LWlucyBpbiBtb2Rlcm4gTm9kZVxuICogdmVyc2lvbnMgKG1vc3QgZWdyZWdpb3VzIGV4YW1wbGU6ICdwdW55Y29kZScpLiBEZXRlY3QgdGhvc2UgYW5kIGZpbHRlciB0aGVtIG91dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQnVpbHRpbk1vZHVsZShkZXBOYW1lOiBzdHJpbmcpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHMsQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuICBjb25zdCB7IGJ1aWx0aW5Nb2R1bGVzIH0gPSByZXF1aXJlKCdtb2R1bGUnKTtcbiAgcmV0dXJuIChidWlsdGluTW9kdWxlcyA/PyBbXSkuaW5jbHVkZXMoZGVwTmFtZSk7XG59XG5cbi8qKlxuICogRmluZCB0aGUgcGFja2FnZS5qc29uIGZvciBhIGdpdmVuIHBhY2thZ2UgdXB3YXJkcyBmcm9tIHRoZSBnaXZlbiBkaXJlY3RvcnlcbiAqXG4gKiAoVGhpcyBjb2RlIGlzIGR1cGxpY2F0ZWQgYW1vbmcganNpaS9qc2lpLXBhY21hay9qc2lpLXJlZmxlY3QuIENoYW5nZXMgc2hvdWxkIGJlIGRvbmUgaW4gYWxsXG4gKiAzIGxvY2F0aW9ucywgYW5kIHdlIHNob3VsZCB1bmlmeSB0aGVzZSBhdCBzb21lIHBvaW50OiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2pzaWkvaXNzdWVzLzMyMzYpXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaW5kUGFja2FnZUpzb25VcChcbiAgcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgZGlyZWN0b3J5OiBzdHJpbmcsXG4pIHtcbiAgcmV0dXJuIGZpbmRVcChkaXJlY3RvcnksIGFzeW5jIChkaXIpID0+IHtcbiAgICBjb25zdCBwakZpbGUgPSBwYXRoLmpvaW4oZGlyLCAncGFja2FnZS5qc29uJyk7XG4gICAgcmV0dXJuIChcbiAgICAgIChhd2FpdCBmcy5wYXRoRXhpc3RzKHBqRmlsZSkpICYmXG4gICAgICAoYXdhaXQgZnMucmVhZEpzb24ocGpGaWxlKSkubmFtZSA9PT0gcGFja2FnZU5hbWVcbiAgICApO1xuICB9KTtcbn1cblxuLyoqXG4gKiBGaW5kIGEgZGlyZWN0b3J5IHVwIHRoZSB0cmVlIGZyb20gYSBzdGFydGluZyBkaXJlY3RvcnkgbWF0Y2hpbmcgYSBjb25kaXRpb25cbiAqXG4gKiBXaWxsIHJldHVybiBgdW5kZWZpbmVkYCBpZiBubyBkaXJlY3RvcnkgbWF0Y2hlc1xuICpcbiAqIChUaGlzIGNvZGUgaXMgZHVwbGljYXRlZCBhbW9uZyBqc2lpL2pzaWktcGFjbWFrL2pzaWktcmVmbGVjdC4gQ2hhbmdlcyBzaG91bGQgYmUgZG9uZSBpbiBhbGxcbiAqIDMgbG9jYXRpb25zLCBhbmQgd2Ugc2hvdWxkIHVuaWZ5IHRoZXNlIGF0IHNvbWUgcG9pbnQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvanNpaS9pc3N1ZXMvMzIzNilcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbmRVcChcbiAgZGlyZWN0b3J5OiBzdHJpbmcsXG4gIHByZWQ6IChkaXI6IHN0cmluZykgPT4gUHJvbWlzZTxib29sZWFuPixcbik6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zdGFudC1jb25kaXRpb25cbiAgd2hpbGUgKHRydWUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXdhaXQtaW4tbG9vcFxuICAgIGlmIChhd2FpdCBwcmVkKGRpcmVjdG9yeSkpIHtcbiAgICAgIHJldHVybiBkaXJlY3Rvcnk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50ID0gcGF0aC5kaXJuYW1lKGRpcmVjdG9yeSk7XG4gICAgaWYgKHBhcmVudCA9PT0gZGlyZWN0b3J5KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBkaXJlY3RvcnkgPSBwYXJlbnQ7XG4gIH1cbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "jsii-reflect",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.51.0",
|
|
4
4
|
"description": "strongly-typed reflection library and tools for jsii",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": {
|
|
@@ -34,24 +34,24 @@
|
|
|
34
34
|
"package": "package-js"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@jsii/check-node": "1.
|
|
38
|
-
"@jsii/spec": "^1.
|
|
37
|
+
"@jsii/check-node": "1.51.0",
|
|
38
|
+
"@jsii/spec": "^1.51.0",
|
|
39
39
|
"colors": "^1.4.0",
|
|
40
40
|
"fs-extra": "^9.1.0",
|
|
41
|
-
"oo-ascii-tree": "^1.
|
|
41
|
+
"oo-ascii-tree": "^1.51.0",
|
|
42
42
|
"yargs": "^16.2.0"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
|
-
"@scope/jsii-calc-lib": "^1.
|
|
45
|
+
"@scope/jsii-calc-lib": "^1.51.0",
|
|
46
46
|
"@types/fs-extra": "^9.0.13",
|
|
47
47
|
"@types/jest": "^27.0.3",
|
|
48
|
-
"@types/node": "^12.20.
|
|
49
|
-
"eslint": "^8.
|
|
50
|
-
"jest": "^27.
|
|
51
|
-
"jsii": "^1.
|
|
52
|
-
"jsii-build-tools": "^1.
|
|
48
|
+
"@types/node": "^12.20.39",
|
|
49
|
+
"eslint": "^8.5.0",
|
|
50
|
+
"jest": "^27.4.5",
|
|
51
|
+
"jsii": "^1.51.0",
|
|
52
|
+
"jsii-build-tools": "^1.51.0",
|
|
53
53
|
"jsii-calc": "^3.20.120",
|
|
54
|
-
"prettier": "^2.
|
|
54
|
+
"prettier": "^2.5.1",
|
|
55
55
|
"typescript": "~3.9.10"
|
|
56
56
|
}
|
|
57
57
|
}
|
package/test/independent.test.js
CHANGED
|
@@ -10,11 +10,15 @@ test('get full github source location for a class or method', async () => {
|
|
|
10
10
|
// Nothing to do
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
|
-
`.trim(), (obj) =>
|
|
13
|
+
`.trim(), (obj) => {
|
|
14
|
+
if (typeof obj.repository === 'object') {
|
|
15
|
+
obj.repository.directory = 'some/sub/dir';
|
|
16
|
+
}
|
|
17
|
+
});
|
|
14
18
|
// THEN
|
|
15
19
|
const klass = assembly.findType('testpkg.Foo');
|
|
16
20
|
expect(klass.isClassType).toBeTruthy();
|
|
17
21
|
expect(reflect.repositoryUrl(klass, 'main')).toBe('https://github.com/aws/jsii/blob/main/some/sub/dir/index.ts#L1');
|
|
18
22
|
expect(reflect.repositoryUrl(klass)).toBe('https://github.com/aws/jsii/blob/master/some/sub/dir/index.ts#L1');
|
|
19
23
|
});
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXBlbmRlbnQudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImluZGVwZW5kZW50LnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBa0M7QUFDbEMsaUNBQTRDO0FBRTVDLElBQUksQ0FBQyx1REFBdUQsRUFBRSxLQUFLLElBQUksRUFBRTtJQUN2RSxPQUFPO0lBQ1AsTUFBTSxRQUFRLEdBQUcsTUFBTSx5QkFBa0IsQ0FDdkM7Ozs7OztHQU1ELENBQUMsSUFBSSxFQUFFLEVBQ04sQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUNOLElBQUksT0FBTyxHQUFHLENBQUMsVUFBVSxLQUFLLFFBQVEsRUFBRTtZQUN0QyxHQUFHLENBQUMsVUFBVSxDQUFDLFNBQVMsR0FBRyxjQUFjLENBQUM7U0FDM0M7SUFDSCxDQUFDLENBQ0YsQ0FBQztJQUVGLE9BQU87SUFDUCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7SUFFdkMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUMvQyxnRUFBZ0UsQ0FDakUsQ0FBQztJQUVGLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUN2QyxrRUFBa0UsQ0FDbkUsQ0FBQztBQUNKLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcmVmbGVjdCBmcm9tICcuLi9saWInO1xuaW1wb3J0IHsgYXNzZW1ibHlGcm9tU291cmNlIH0gZnJvbSAnLi91dGlsJztcblxudGVzdCgnZ2V0IGZ1bGwgZ2l0aHViIHNvdXJjZSBsb2NhdGlvbiBmb3IgYSBjbGFzcyBvciBtZXRob2QnLCBhc3luYyAoKSA9PiB7XG4gIC8vIFdIRU5cbiAgY29uc3QgYXNzZW1ibHkgPSBhd2FpdCBhc3NlbWJseUZyb21Tb3VyY2UoXG4gICAgYFxuICAgIGV4cG9ydCBjbGFzcyBGb28ge1xuICAgICAgcHVibGljIGJhcigpIHtcbiAgICAgICAgLy8gTm90aGluZyB0byBkb1xuICAgICAgfVxuICAgIH1cbiAgYC50cmltKCksXG4gICAgKG9iaikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBvYmoucmVwb3NpdG9yeSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgb2JqLnJlcG9zaXRvcnkuZGlyZWN0b3J5ID0gJ3NvbWUvc3ViL2Rpcic7XG4gICAgICB9XG4gICAgfSxcbiAgKTtcblxuICAvLyBUSEVOXG4gIGNvbnN0IGtsYXNzID0gYXNzZW1ibHkuZmluZFR5cGUoJ3Rlc3Rwa2cuRm9vJyk7XG4gIGV4cGVjdChrbGFzcy5pc0NsYXNzVHlwZSkudG9CZVRydXRoeSgpO1xuXG4gIGV4cGVjdChyZWZsZWN0LnJlcG9zaXRvcnlVcmwoa2xhc3MsICdtYWluJykpLnRvQmUoXG4gICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9hd3MvanNpaS9ibG9iL21haW4vc29tZS9zdWIvZGlyL2luZGV4LnRzI0wxJyxcbiAgKTtcblxuICBleHBlY3QocmVmbGVjdC5yZXBvc2l0b3J5VXJsKGtsYXNzKSkudG9CZShcbiAgICAnaHR0cHM6Ly9naXRodWIuY29tL2F3cy9qc2lpL2Jsb2IvbWFzdGVyL3NvbWUvc3ViL2Rpci9pbmRleC50cyNMMScsXG4gICk7XG59KTtcbiJdfQ==
|