@aws-cdk/integ-runner 2.200.1 → 2.201.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/README.md +22 -2
- package/THIRD_PARTY_LICENSES +739 -2567
- package/lib/cli.js +43 -7
- package/lib/engines/proxy-agent.js +35 -2
- package/lib/engines/toolkit-lib.js +43 -7
- package/lib/index.js +518 -457
- package/lib/logger.js +44 -8
- package/lib/runner/{runner-base.d.ts → cdk-integ-helper.d.ts} +96 -33
- package/lib/runner/cdk-integ-helper.d.ts.map +1 -0
- package/lib/runner/cdk-integ-helper.js +517 -0
- package/lib/runner/engine.d.ts +3 -2
- package/lib/runner/engine.d.ts.map +1 -1
- package/lib/runner/engine.js +1 -1
- package/lib/runner/index.d.ts +1 -1
- package/lib/runner/index.d.ts.map +1 -1
- package/lib/runner/index.js +2 -2
- package/lib/runner/integ-test-runner.d.ts +12 -4
- package/lib/runner/integ-test-runner.d.ts.map +1 -1
- package/lib/runner/integ-test-runner.js +134 -71
- package/lib/runner/integ-test-suite.js +36 -3
- package/lib/runner/integration-tests.d.ts +8 -0
- package/lib/runner/integration-tests.d.ts.map +1 -1
- package/lib/runner/integration-tests.js +47 -3
- package/lib/runner/private/cloud-assembly.d.ts +1 -2
- package/lib/runner/private/cloud-assembly.d.ts.map +1 -1
- package/lib/runner/private/cloud-assembly.js +36 -3
- package/lib/runner/private/integ-manifest.js +36 -3
- package/lib/runner/private/test-specific-context.d.ts +3 -0
- package/lib/runner/private/test-specific-context.d.ts.map +1 -0
- package/lib/runner/private/test-specific-context.js +81 -0
- package/lib/runner/snapshot-test-runner.d.ts +10 -6
- package/lib/runner/snapshot-test-runner.d.ts.map +1 -1
- package/lib/runner/snapshot-test-runner.js +64 -34
- package/lib/unstable-features.js +35 -2
- package/lib/workers/common.js +51 -15
- package/lib/workers/extract/extract_worker.js +35 -2
- package/lib/workers/extract/index.js +5149 -45331
- package/lib/workers/integ-snapshot-worker.js +35 -2
- package/lib/workers/integ-test-worker.js +35 -2
- package/package.json +7 -9
- package/lib/runner/runner-base.d.ts.map +0 -1
- package/lib/runner/runner-base.js +0 -381
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-specific-context.d.ts","sourceRoot":"","sources":["test-specific-context.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAIjD,wBAAsB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CA+BhG"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.findTestSpecificContext = findTestSpecificContext;
|
|
37
|
+
const fs = __importStar(require("fs/promises"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const INTEG_CONTEXT_JSON_FILE = 'integ.context.json';
|
|
40
|
+
const CDK_JSON_FILE = 'cdk.json';
|
|
41
|
+
const CONTEXT_CACHE = new Map();
|
|
42
|
+
async function findTestSpecificContext(directory) {
|
|
43
|
+
const existing = CONTEXT_CACHE.get(directory);
|
|
44
|
+
if (existing) {
|
|
45
|
+
return existing;
|
|
46
|
+
}
|
|
47
|
+
let maybeContext;
|
|
48
|
+
// Try to load `integ.context.json`
|
|
49
|
+
if (maybeContext === undefined) {
|
|
50
|
+
const contextFile = path.join(directory, INTEG_CONTEXT_JSON_FILE);
|
|
51
|
+
maybeContext = await tryReadJsonFile(contextFile);
|
|
52
|
+
}
|
|
53
|
+
// Try to load `cdk.json#context`
|
|
54
|
+
if (maybeContext === undefined) {
|
|
55
|
+
const cdkJsonFile = path.join(directory, CDK_JSON_FILE);
|
|
56
|
+
let maybeCdkJson = await tryReadJsonFile(cdkJsonFile);
|
|
57
|
+
maybeContext = maybeCdkJson?.context;
|
|
58
|
+
}
|
|
59
|
+
// Try to load from parent directory
|
|
60
|
+
if (maybeContext === undefined) {
|
|
61
|
+
const parentDir = path.dirname(directory);
|
|
62
|
+
if (parentDir !== directory) {
|
|
63
|
+
maybeContext = await findTestSpecificContext(parentDir);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
CONTEXT_CACHE.set(directory, maybeContext);
|
|
67
|
+
return maybeContext;
|
|
68
|
+
}
|
|
69
|
+
async function tryReadJsonFile(filePath) {
|
|
70
|
+
try {
|
|
71
|
+
const content = await fs.readFile(filePath, { encoding: 'utf-8' });
|
|
72
|
+
return JSON.parse(content);
|
|
73
|
+
}
|
|
74
|
+
catch (e) {
|
|
75
|
+
if (e.code === 'ENOENT' || e.code === 'ENOTDIR') {
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
throw e;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1zcGVjaWZpYy1jb250ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGVzdC1zcGVjaWZpYy1jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBVUEsMERBK0JDO0FBekNELGdEQUFrQztBQUNsQywyQ0FBNkI7QUFFN0IsTUFBTSx1QkFBdUIsR0FBRyxvQkFBb0IsQ0FBQztBQUNyRCxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUM7QUFJakMsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLEVBQWtDLENBQUM7QUFFekQsS0FBSyxVQUFVLHVCQUF1QixDQUFDLFNBQWlCO0lBQzdELE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDOUMsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNiLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxJQUFJLFlBQW9DLENBQUM7SUFFekMsbUNBQW1DO0lBQ25DLElBQUksWUFBWSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQy9CLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLHVCQUF1QixDQUFDLENBQUM7UUFDbEUsWUFBWSxHQUFHLE1BQU0sZUFBZSxDQUFDLFdBQVcsQ0FBMkIsQ0FBQztJQUM5RSxDQUFDO0lBRUQsaUNBQWlDO0lBQ2pDLElBQUksWUFBWSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQy9CLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3hELElBQUksWUFBWSxHQUFHLE1BQU0sZUFBZSxDQUFDLFdBQVcsQ0FBeUMsQ0FBQztRQUM5RixZQUFZLEdBQUcsWUFBWSxFQUFFLE9BQU8sQ0FBQztJQUN2QyxDQUFDO0lBRUQsb0NBQW9DO0lBQ3BDLElBQUksWUFBWSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQy9CLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUMsSUFBSSxTQUFTLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDNUIsWUFBWSxHQUFHLE1BQU0sdUJBQXVCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUQsQ0FBQztJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUMzQyxPQUFPLFlBQVksQ0FBQztBQUN0QixDQUFDO0FBRUQsS0FBSyxVQUFVLGVBQWUsQ0FBQyxRQUFnQjtJQUM3QyxJQUFJLENBQUM7UUFDSCxNQUFNLE9BQU8sR0FBRyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDbkUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNoRCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsTUFBTSxDQUFDLENBQUM7SUFDVixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzL3Byb21pc2VzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5cbmNvbnN0IElOVEVHX0NPTlRFWFRfSlNPTl9GSUxFID0gJ2ludGVnLmNvbnRleHQuanNvbic7XG5jb25zdCBDREtfSlNPTl9GSUxFID0gJ2Nkay5qc29uJztcblxuZXhwb3J0IHR5cGUgQ2RrQ29udGV4dCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5jb25zdCBDT05URVhUX0NBQ0hFID0gbmV3IE1hcDxzdHJpbmcsIENka0NvbnRleHQgfCB1bmRlZmluZWQ+KCk7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaW5kVGVzdFNwZWNpZmljQ29udGV4dChkaXJlY3Rvcnk6IHN0cmluZyk6IFByb21pc2U8Q2RrQ29udGV4dCB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBleGlzdGluZyA9IENPTlRFWFRfQ0FDSEUuZ2V0KGRpcmVjdG9yeSk7XG4gIGlmIChleGlzdGluZykge1xuICAgIHJldHVybiBleGlzdGluZztcbiAgfVxuXG4gIGxldCBtYXliZUNvbnRleHQ6IENka0NvbnRleHQgfCB1bmRlZmluZWQ7XG5cbiAgLy8gVHJ5IHRvIGxvYWQgYGludGVnLmNvbnRleHQuanNvbmBcbiAgaWYgKG1heWJlQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgY29udGV4dEZpbGUgPSBwYXRoLmpvaW4oZGlyZWN0b3J5LCBJTlRFR19DT05URVhUX0pTT05fRklMRSk7XG4gICAgbWF5YmVDb250ZXh0ID0gYXdhaXQgdHJ5UmVhZEpzb25GaWxlKGNvbnRleHRGaWxlKSBhcyBDZGtDb250ZXh0IHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gVHJ5IHRvIGxvYWQgYGNkay5qc29uI2NvbnRleHRgXG4gIGlmIChtYXliZUNvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IGNka0pzb25GaWxlID0gcGF0aC5qb2luKGRpcmVjdG9yeSwgQ0RLX0pTT05fRklMRSk7XG4gICAgbGV0IG1heWJlQ2RrSnNvbiA9IGF3YWl0IHRyeVJlYWRKc29uRmlsZShjZGtKc29uRmlsZSkgYXMgeyBjb250ZXh0PzogQ2RrQ29udGV4dCB9IHwgdW5kZWZpbmVkO1xuICAgIG1heWJlQ29udGV4dCA9IG1heWJlQ2RrSnNvbj8uY29udGV4dDtcbiAgfVxuXG4gIC8vIFRyeSB0byBsb2FkIGZyb20gcGFyZW50IGRpcmVjdG9yeVxuICBpZiAobWF5YmVDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBwYXJlbnREaXIgPSBwYXRoLmRpcm5hbWUoZGlyZWN0b3J5KTtcbiAgICBpZiAocGFyZW50RGlyICE9PSBkaXJlY3RvcnkpIHtcbiAgICAgIG1heWJlQ29udGV4dCA9IGF3YWl0IGZpbmRUZXN0U3BlY2lmaWNDb250ZXh0KHBhcmVudERpcik7XG4gICAgfVxuICB9XG5cbiAgQ09OVEVYVF9DQUNIRS5zZXQoZGlyZWN0b3J5LCBtYXliZUNvbnRleHQpO1xuICByZXR1cm4gbWF5YmVDb250ZXh0O1xufVxuXG5hc3luYyBmdW5jdGlvbiB0cnlSZWFkSnNvbkZpbGUoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8dW5rbm93biB8IHVuZGVmaW5lZD4ge1xuICB0cnkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShmaWxlUGF0aCwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KTtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShjb250ZW50KTtcbiAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgaWYgKGUuY29kZSA9PT0gJ0VOT0VOVCcgfHwgZS5jb2RlID09PSAnRU5PVERJUicpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRocm93IGU7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,15 +1,19 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import { IntegRunner } from './runner-base';
|
|
1
|
+
import type { CdkIntegHelperOptions } from './cdk-integ-helper';
|
|
3
2
|
import type { Diagnostic, DestructiveChange, SnapshotVerificationOptions } from '../workers/common';
|
|
4
3
|
/**
|
|
5
4
|
* Runner for snapshot tests. This handles orchestrating
|
|
6
5
|
* the validation of the integration test snapshots
|
|
7
6
|
*/
|
|
8
|
-
export declare class IntegSnapshotRunner
|
|
9
|
-
|
|
7
|
+
export declare class IntegSnapshotRunner {
|
|
8
|
+
private readonly helper;
|
|
9
|
+
constructor(options: Omit<CdkIntegHelperOptions, 'region'>);
|
|
10
|
+
hasSnapshot(): boolean;
|
|
11
|
+
actualTests(): Promise<{
|
|
12
|
+
[testName: string]: import("@aws-cdk/cloud-assembly-schema").TestCase;
|
|
13
|
+
} | undefined>;
|
|
14
|
+
dontCareAboutLegacyLookupsForTests(): void;
|
|
10
15
|
/**
|
|
11
|
-
* Synth the
|
|
12
|
-
* to the existing snapshot.
|
|
16
|
+
* Synth the CDK app and compare the templates to the existing snapshot.
|
|
13
17
|
*
|
|
14
18
|
* @returns any diagnostics and any destructive changes
|
|
15
19
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot-test-runner.d.ts","sourceRoot":"","sources":["snapshot-test-runner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"snapshot-test-runner.d.ts","sourceRoot":"","sources":["snapshot-test-runner.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAGhE,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAsBpG;;;GAGG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;gBAC5B,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE,QAAQ,CAAC;IAOnD,WAAW;IAIX,WAAW;;;IAIX,kCAAkC;IAIzC;;;;OAIG;IACU,YAAY,CAAC,OAAO,GAAE,2BAAgC,GAAG,OAAO,CAAC;QAC5E,WAAW,EAAE,UAAU,EAAE,CAAC;QAC1B,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;KACzC,CAAC;IAoDF;;;;;;;OAOG;IACH,OAAO,CAAC,mBAAmB;IAsB3B;;;;;;OAMG;YACW,8BAA8B;IAS5C;;;;;;OAMG;YACW,YAAY;IAuG1B,OAAO,CAAC,YAAY;IAIpB;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;CA4E7B"}
|
|
@@ -1,65 +1,95 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.IntegSnapshotRunner = void 0;
|
|
4
|
-
const path = require("path");
|
|
37
|
+
const path = __importStar(require("path"));
|
|
5
38
|
const stream_1 = require("stream");
|
|
6
39
|
const string_decoder_1 = require("string_decoder");
|
|
7
40
|
const cloud_assembly_api_1 = require("@aws-cdk/cloud-assembly-api");
|
|
8
41
|
const cloudformation_diff_1 = require("@aws-cdk/cloudformation-diff");
|
|
42
|
+
const cdk_integ_helper_1 = require("./cdk-integ-helper");
|
|
9
43
|
const cloud_assembly_1 = require("./private/cloud-assembly");
|
|
10
|
-
const runner_base_1 = require("./runner-base");
|
|
11
44
|
const common_1 = require("../workers/common");
|
|
12
45
|
/**
|
|
13
46
|
* Runner for snapshot tests. This handles orchestrating
|
|
14
47
|
* the validation of the integration test snapshots
|
|
15
48
|
*/
|
|
16
|
-
class IntegSnapshotRunner
|
|
49
|
+
class IntegSnapshotRunner {
|
|
50
|
+
helper;
|
|
17
51
|
constructor(options) {
|
|
18
|
-
|
|
52
|
+
this.helper = cdk_integ_helper_1.CdkIntegHelper.create({
|
|
19
53
|
...options,
|
|
20
54
|
region: cloud_assembly_api_1.UNKNOWN_REGION,
|
|
21
55
|
});
|
|
22
56
|
}
|
|
57
|
+
hasSnapshot() {
|
|
58
|
+
return this.helper.hasSnapshot();
|
|
59
|
+
}
|
|
60
|
+
actualTests() {
|
|
61
|
+
return this.helper.actualTests();
|
|
62
|
+
}
|
|
63
|
+
dontCareAboutLegacyLookupsForTests() {
|
|
64
|
+
this.helper.configureLegacyEnableLookups('dont-care');
|
|
65
|
+
}
|
|
23
66
|
/**
|
|
24
|
-
* Synth the
|
|
25
|
-
* to the existing snapshot.
|
|
67
|
+
* Synth the CDK app and compare the templates to the existing snapshot.
|
|
26
68
|
*
|
|
27
69
|
* @returns any diagnostics and any destructive changes
|
|
28
70
|
*/
|
|
29
71
|
async testSnapshot(options = {}) {
|
|
30
72
|
let doClean = true;
|
|
31
73
|
try {
|
|
32
|
-
|
|
33
|
-
const
|
|
34
|
-
const expectedSnapshotAssembly = this.getSnapshotAssembly(this.
|
|
35
|
-
//
|
|
36
|
-
|
|
37
|
-
// the cdkOutDir exists already, but for some reason generateActualSnapshot
|
|
38
|
-
// generates an incorrect snapshot and I have no idea why so synth again here
|
|
39
|
-
// to produce the "correct" snapshot
|
|
40
|
-
const env = runner_base_1.DEFAULT_SYNTH_OPTIONS.env;
|
|
41
|
-
await this.cdk.synth({
|
|
42
|
-
app: this.cdkApp,
|
|
43
|
-
context: this.getContext(actualTestSuite.enableLookups ? runner_base_1.DEFAULT_SYNTH_OPTIONS.context : {}),
|
|
44
|
-
env,
|
|
45
|
-
output: path.relative(this.directory, this.cdkOutDir),
|
|
46
|
-
});
|
|
74
|
+
// Read the "expected" snapshot
|
|
75
|
+
const expectedTestSuite = await this.helper.expectedTestSuite();
|
|
76
|
+
const expectedSnapshotAssembly = this.getSnapshotAssembly(this.helper.goldenSnapshotDir, expectedTestSuite?.stacks);
|
|
77
|
+
// Configure settings from the golden snapshot
|
|
78
|
+
this.helper.configureLegacyEnableLookups(expectedTestSuite?.enableLookups ?? false);
|
|
47
79
|
// read the "actual" snapshot
|
|
48
|
-
const
|
|
80
|
+
const actualSnapshot = await this.helper.actualSnapshot();
|
|
81
|
+
const actualSnapshotAssembly = this.getSnapshotAssembly(this.helper.cdkOutDir, actualSnapshot.testDefinition.stacks);
|
|
49
82
|
// diff the existing snapshot (expected) with the integration test (actual)
|
|
50
83
|
const diagnostics = await this.diffAssembly(expectedSnapshotAssembly, actualSnapshotAssembly);
|
|
51
84
|
if (diagnostics.diagnostics.length) {
|
|
52
85
|
// Attach additional messages to the first diagnostic
|
|
53
86
|
const additionalMessages = [];
|
|
54
87
|
if (options.retain) {
|
|
55
|
-
additionalMessages.push(`(Failure retained) Expected: ${path.relative(process.cwd(), this.
|
|
88
|
+
additionalMessages.push(`(Failure retained) Expected: ${path.relative(process.cwd(), this.helper.goldenSnapshotDir)}`, ` Actual: ${path.relative(process.cwd(), this.helper.cdkOutDir)}`),
|
|
56
89
|
doClean = false;
|
|
57
90
|
}
|
|
58
91
|
if (options.verbose) {
|
|
59
|
-
|
|
60
|
-
const envSet = Object.entries(env).map(([k, v]) => `${k}='${v}'`);
|
|
61
|
-
const envCmd = envSet.length > 0 ? ['env', ...envSet] : [];
|
|
62
|
-
additionalMessages.push('Repro:', ` ${[...envCmd, 'cdk synth', `-a '${this.cdkApp}'`, `-o '${this.cdkOutDir}'`, ...Object.entries(this.getContext()).flatMap(([k, v]) => typeof v !== 'object' ? [`-c '${k}=${v}'`] : [])].join(' ')}`);
|
|
92
|
+
additionalMessages.push('Repro:', ` ${this.helper.actualSynthReproCommand().join(' ')}`);
|
|
63
93
|
}
|
|
64
94
|
diagnostics.diagnostics[0] = {
|
|
65
95
|
...diagnostics.diagnostics[0],
|
|
@@ -73,7 +103,7 @@ class IntegSnapshotRunner extends runner_base_1.IntegRunner {
|
|
|
73
103
|
}
|
|
74
104
|
finally {
|
|
75
105
|
if (doClean) {
|
|
76
|
-
this.cleanup();
|
|
106
|
+
this.helper.cleanup();
|
|
77
107
|
}
|
|
78
108
|
}
|
|
79
109
|
}
|
|
@@ -112,7 +142,7 @@ class IntegSnapshotRunner extends runner_base_1.IntegRunner {
|
|
|
112
142
|
* @returns a list of resource types or undefined if none are found
|
|
113
143
|
*/
|
|
114
144
|
async getAllowedDestroyTypesForStack(stackId) {
|
|
115
|
-
for (const testCase of Object.values((await this.actualTests()) ?? {})) {
|
|
145
|
+
for (const testCase of Object.values((await this.helper.actualTests()) ?? {})) {
|
|
116
146
|
if (testCase.stacks.includes(stackId)) {
|
|
117
147
|
return testCase.allowDestroy;
|
|
118
148
|
}
|
|
@@ -135,7 +165,7 @@ class IntegSnapshotRunner extends runner_base_1.IntegRunner {
|
|
|
135
165
|
for (const templateId of Object.keys(stack.templates)) {
|
|
136
166
|
if (!actual[stackId]?.templates[templateId]) {
|
|
137
167
|
failures.push({
|
|
138
|
-
testName: this.testName,
|
|
168
|
+
testName: this.helper.testName,
|
|
139
169
|
stackName: templateId,
|
|
140
170
|
reason: common_1.DiagnosticReason.SNAPSHOT_FAILED,
|
|
141
171
|
message: `${templateId} exists in snapshot, but not in actual`,
|
|
@@ -149,7 +179,7 @@ class IntegSnapshotRunner extends runner_base_1.IntegRunner {
|
|
|
149
179
|
// that does not exist in the current snapshot
|
|
150
180
|
if (!expected[stackId]?.templates[templateId]) {
|
|
151
181
|
failures.push({
|
|
152
|
-
testName: this.testName,
|
|
182
|
+
testName: this.helper.testName,
|
|
153
183
|
stackName: templateId,
|
|
154
184
|
reason: common_1.DiagnosticReason.SNAPSHOT_FAILED,
|
|
155
185
|
message: `${templateId} does not exist in snapshot, but does in actual`,
|
|
@@ -158,7 +188,7 @@ class IntegSnapshotRunner extends runner_base_1.IntegRunner {
|
|
|
158
188
|
}
|
|
159
189
|
else {
|
|
160
190
|
const config = {
|
|
161
|
-
diffAssets: (await this.
|
|
191
|
+
diffAssets: (await this.helper.actualSnapshot()).testDefinition.getOptionsForStack(stackId)?.diffAssets,
|
|
162
192
|
};
|
|
163
193
|
let actualTemplate = actual[stackId].templates[templateId];
|
|
164
194
|
let expectedTemplate = expected[stackId].templates[templateId];
|
|
@@ -210,7 +240,7 @@ class IntegSnapshotRunner extends runner_base_1.IntegRunner {
|
|
|
210
240
|
reason: common_1.DiagnosticReason.SNAPSHOT_FAILED,
|
|
211
241
|
message: writable.data,
|
|
212
242
|
stackName: templateId,
|
|
213
|
-
testName: this.testName,
|
|
243
|
+
testName: this.helper.testName,
|
|
214
244
|
config,
|
|
215
245
|
});
|
|
216
246
|
}
|
|
@@ -320,4 +350,4 @@ class StringWritable extends stream_1.Writable {
|
|
|
320
350
|
callback();
|
|
321
351
|
}
|
|
322
352
|
}
|
|
323
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hcHNob3QtdGVzdC1ydW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzbmFwc2hvdC10ZXN0LXJ1bm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBNkI7QUFFN0IsbUNBQWtDO0FBQ2xDLG1EQUErQztBQUMvQyxvRUFBNkQ7QUFFN0Qsc0VBQTJGO0FBQzNGLDZEQUFrRTtBQUVsRSwrQ0FBbUU7QUFFbkUsOENBQXFEO0FBcUJyRDs7O0dBR0c7QUFDSCxNQUFhLG1CQUFvQixTQUFRLHlCQUFXO0lBQ2xELFlBQVksT0FBMkM7UUFDckQsS0FBSyxDQUFDO1lBQ0osR0FBRyxPQUFPO1lBQ1YsTUFBTSxFQUFFLG1DQUFjO1NBQ3ZCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBdUMsRUFBRTtRQUlqRSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3pELE1BQU0sZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3JELE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFFdkcsNkJBQTZCO1lBQzdCLHlEQUF5RDtZQUN6RCwyRUFBMkU7WUFDM0UsNkVBQTZFO1lBQzdFLG9DQUFvQztZQUNwQyxNQUFNLEdBQUcsR0FBRyxtQ0FBcUIsQ0FBQyxHQUFHLENBQUM7WUFDdEMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztnQkFDbkIsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNO2dCQUNoQixPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENB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RUQsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLENBQUM7UUFDbkIsUUFBUSxFQUFFLENBQUM7SUFDYixDQUFDO0lBRUQsTUFBTSxDQUFDLFFBQXdDO1FBQzdDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNqQyxRQUFRLEVBQUUsQ0FBQztJQUNiLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgdHlwZSB7IFdyaXRhYmxlT3B0aW9ucyB9IGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgeyBXcml0YWJsZSB9IGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgeyBTdHJpbmdEZWNvZGVyIH0gZnJvbSAnc3RyaW5nX2RlY29kZXInO1xuaW1wb3J0IHsgVU5LTk9XTl9SRUdJT04gfSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1hcGknO1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZURpZmZlcmVuY2UgfSBmcm9tICdAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmJztcbmltcG9ydCB7IGZ1bGxEaWZmLCBmb3JtYXREaWZmZXJlbmNlcywgUmVzb3VyY2VJbXBhY3QgfSBmcm9tICdAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmJztcbmltcG9ydCB7IEFzc2VtYmx5TWFuaWZlc3RSZWFkZXIgfSBmcm9tICcuL3ByaXZhdGUvY2xvdWQtYXNzZW1ibHknO1xuaW1wb3J0IHR5cGUgeyBJbnRlZ1J1bm5lck9wdGlvbnMgfSBmcm9tICcuL3J1bm5lci1iYXNlJztcbmltcG9ydCB7IEludGVnUnVubmVyLCBERUZBVUxUX1NZTlRIX09QVElPTlMgfSBmcm9tICcuL3J1bm5lci1iYXNlJztcbmltcG9ydCB0eXBlIHsgRGlhZ25vc3RpYywgRGVzdHJ1Y3RpdmVDaGFuZ2UsIFNuYXBzaG90VmVyaWZpY2F0aW9uT3B0aW9ucyB9IGZyb20gJy4uL3dvcmtlcnMvY29tbW9uJztcbmltcG9ydCB7IERpYWdub3N0aWNSZWFzb24gfSBmcm9tICcuLi93b3JrZXJzL2NvbW1vbic7XG5cbmludGVyZmFjZSBTbmFwc2hvdEFzc2VtYmx5IHtcbiAgLyoqXG4gICAqIE1hcCBvZiBzdGFja3MgdGhhdCBhcmUgcGFydCBvZiB0aGlzIGFzc2VtYmx5XG4gICAqL1xuICBbc3RhY2tOYW1lOiBzdHJpbmddOiB7XG4gICAgLyoqXG4gICAgICogQWxsIHRlbXBsYXRlcyBmb3IgdGhpcyBzdGFjaywgaW5jbHVkaW5nIG5lc3RlZCBzdGFja3NcbiAgICAgKi9cbiAgICB0ZW1wbGF0ZXM6IHtcbiAgICAgIFt0ZW1wbGF0ZUlkOiBzdHJpbmddOiBhbnk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgYXNzZXQgSWRzIHRoYXQgYXJlIHVzZWQgYnkgdGhpcyBhc3NlbWJseVxuICAgICAqL1xuICAgIGFzc2V0czogc3RyaW5nW107XG4gIH07XG59XG5cbi8qKlxuICogUnVubmVyIGZvciBzbmFwc2hvdCB0ZXN0cy4gVGhpcyBoYW5kbGVzIG9yY2hlc3RyYXRpbmdcbiAqIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSBpbnRlZ3JhdGlvbiB0ZXN0IHNuYXBzaG90c1xuICovXG5leHBvcnQgY2xhc3MgSW50ZWdTbmFwc2hvdFJ1bm5lciBleHRlbmRzIEludGVnUnVubmVyIHtcbiAgY29uc3RydWN0b3Iob3B0aW9uczogT21pdDxJbnRlZ1J1bm5lck9wdGlvbnMsICdyZWdpb24nPikge1xuICAgIHN1cGVyKHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICByZWdpb246IFVOS05PV05fUkVHSU9OLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN5bnRoIHRoZSBpbnRlZ3JhdGlvbiB0ZXN0cyBhbmQgY29tcGFyZSB0aGUgdGVtcGxhdGVzXG4gICAqIHRvIHRoZSBleGlzdGluZyBzbmFwc2hvdC5cbiAgICpcbiAgICogQHJldHVybnMgYW55IGRpYWdub3N0aWNzIGFuZCBhbnkgZGVzdHJ1Y3RpdmUgY2hhbmdlc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHRlc3RTbmFwc2hvdChvcHRpb25zOiBTbmFwc2hvdFZlcmlmaWNhdGlvbk9wdGlvbnMgPSB7fSk6IFByb21pc2U8e1xuICAgIGRpYWdub3N0aWNzOiBEaWFnbm9zdGljW107XG4gICAgZGVzdHJ1Y3RpdmVDaGFuZ2VzOiBEZXN0cnVjdGl2ZUNoYW5nZVtdO1xuICB9PiB7XG4gICAgbGV0IGRvQ2xlYW4gPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBleHBlY3RlZFRlc3RTdWl0ZSA9IGF3YWl0IHRoaXMuZXhwZWN0ZWRUZXN0U3VpdGUoKTtcbiAgICAgIGNvbnN0IGFjdHVhbFRlc3RTdWl0ZSA9IGF3YWl0IHRoaXMuYWN0dWFsVGVzdFN1aXRlKCk7XG4gICAgICBjb25zdCBleHBlY3RlZFNuYXBzaG90QXNzZW1ibHkgPSB0aGlzLmdldFNuYXBzaG90QXNzZW1ibHkodGhpcy5zbmFwc2hvdERpciwgZXhwZWN0ZWRUZXN0U3VpdGU/LnN0YWNrcyk7XG5cbiAgICAgIC8vIHN5bnRoIHRoZSBpbnRlZ3JhdGlvbiB0ZXN0XG4gICAgICAvLyBGSVhNRTogaWRlYWxseSB3ZSBzaG91bGQgbm90IG5lZWQgdG8gcnVuIHRoaXMgYWdhaW4gaWZcbiAgICAgIC8vIHRoZSBjZGtPdXREaXIgZXhpc3RzIGFscmVhZHksIGJ1dCBmb3Igc29tZSByZWFzb24gZ2VuZXJhdGVBY3R1YWxTbmFwc2hvdFxuICAgICAgLy8gZ2VuZXJhdGVzIGFuIGluY29ycmVjdCBzbmFwc2hvdCBhbmQgSSBoYXZlIG5vIGlkZWEgd2h5IHNvIHN5bnRoIGFnYWluIGhlcmVcbiAgICAgIC8vIHRvIHByb2R1Y2UgdGhlIFwiY29ycmVjdFwiIHNuYXBzaG90XG4gICAgICBjb25zdCBlbnYgPSBERUZBVUxUX1NZTlRIX09QVElPTlMuZW52O1xuICAgICAgYXdhaXQgdGhpcy5jZGsuc3ludGgoe1xuICAgICAgICBhcHA6IHRoaXMuY2RrQXBwLFxuICAgICAgICBjb250ZXh0OiB0aGlzLmdldENvbnRleHQoYWN0dWFsVGVzdFN1aXRlLmVuYWJsZUxvb2t1cHMgPyBERUZBVUxUX1NZTlRIX09QVElPTlMuY29udGV4dCA6IHt9KSxcbiAgICAgICAgZW52LFxuICAgICAgICBvdXRwdXQ6IHBhdGgucmVsYXRpdmUodGhpcy5kaXJlY3RvcnksIHRoaXMuY2RrT3V0RGlyKSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyByZWFkIHRoZSBcImFjdHVhbFwiIHNuYXBzaG90XG4gICAgICBjb25zdCBhY3R1YWxTbmFwc2hvdEFzc2VtYmx5ID0gdGhpcy5nZXRTbmFwc2hvdEFzc2VtYmx5KHRoaXMuY2RrT3V0RGlyLCBhY3R1YWxUZXN0U3VpdGUuc3RhY2tzKTtcblxuICAgICAgLy8gZGlmZiB0aGUgZXhpc3Rpbmcgc25hcHNob3QgKGV4cGVjdGVkKSB3aXRoIHRoZSBpbnRlZ3JhdGlvbiB0ZXN0IChhY3R1YWwpXG4gICAgICBjb25zdCBkaWFnbm9zdGljcyA9IGF3YWl0IHRoaXMuZGlmZkFzc2VtYmx5KGV4cGVjdGVkU25hcHNob3RBc3NlbWJseSwgYWN0dWFsU25hcHNob3RBc3NlbWJseSk7XG5cbiAgICAgIGlmIChkaWFnbm9zdGljcy5kaWFnbm9zdGljcy5sZW5ndGgpIHtcbiAgICAgICAgLy8gQXR0YWNoIGFkZGl0aW9uYWwgbWVzc2FnZXMgdG8gdGhlIGZpcnN0IGRpYWdub3N0aWNcbiAgICAgICAgY29uc3QgYWRkaXRpb25hbE1lc3NhZ2VzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAgIGlmIChvcHRpb25zLnJldGFpbikge1xuICAgICAgICAgIGFkZGl0aW9uYWxNZXNzYWdlcy5wdXNoKFxuICAgICAgICAgICAgYChGYWlsdXJlIHJldGFpbmVkKSBFeHBlY3RlZDogJHtwYXRoLnJlbGF0aXZlKHByb2Nlc3MuY3dkKCksIHRoaXMuc25hcHNob3REaXIpfWAsXG4gICAgICAgICAgICBgICAgICAgICAgICAgICAgICAgIEFjdHVhbDogICAke3BhdGgucmVsYXRpdmUocHJvY2Vzcy5jd2QoKSwgdGhpcy5jZGtPdXREaXIpfWAsXG4gICAgICAgICAgKSxcbiAgICAgICAgICBkb0NsZWFuID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgLy8gU2hvdyB0aGUgY29tbWFuZCBuZWNlc3NhcnkgdG8gcmVwcm8gdGhpc1xuICAgICAgICAgIGNvbnN0IGVudlNldCA9IE9iamVjdC5lbnRyaWVzKGVudikubWFwKChbaywgdl0pID0+IGAke2t9PScke3Z9J2ApO1xuICAgICAgICAgIGNvbnN0IGVudkNtZCA9IGVudlNldC5sZW5ndGggPiAwID8gWydlbnYnLCAuLi5lbnZTZXRdIDogW107XG5cbiAgICAgICAgICBhZGRpdGlvbmFsTWVzc2FnZXMucHVzaChcbiAgICAgICAgICAgICdSZXBybzonLFxuICAgICAgICAgICAgYCAgJHtbLi4uZW52Q21kLCAnY2RrIHN5bnRoJywgYC1hICcke3RoaXMuY2RrQXBwfSdgLCBgLW8gJyR7dGhpcy5jZGtPdXREaXJ9J2AsIC4uLk9iamVjdC5lbnRyaWVzKHRoaXMuZ2V0Q29udGV4dCgpKS5mbGF0TWFwKChbaywgdl0pID0+IHR5cGVvZiB2ICE9PSAnb2JqZWN0JyA/IFtgLWMgJyR7a309JHt2fSdgXSA6IFtdKV0uam9pbignICcpfWAsXG5cbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgZGlhZ25vc3RpY3MuZGlhZ25vc3RpY3NbMF0gPSB7XG4gICAgICAgICAgLi4uZGlhZ25vc3RpY3MuZGlhZ25vc3RpY3NbMF0sXG4gICAgICAgICAgYWRkaXRpb25hbE1lc3NhZ2VzLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGlhZ25vc3RpY3M7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKGRvQ2xlYW4pIHtcbiAgICAgICAgdGhpcy5jbGVhbnVwKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZvciBhIGdpdmVuIGNsb3VkIGFzc2VtYmx5IHJldHVybiBhIGNvbGxlY3Rpb24gb2YgYWxsIHRlbXBsYXRlc1xuICAgKiB0aGF0IHNob3VsZCBiZSBwYXJ0IG9mIHRoZSBzbmFwc2hvdCBhbmQgYW55IHJlcXVpcmVkIG1ldGEgZGF0YS5cbiAgICpcbiAgICogQHBhcmFtIGNsb3VkQXNzZW1ibHlEaXIgLSBUaGUgZGlyZWN0b3J5IG9mIHRoZSBjbG91ZCBhc3NlbWJseSB0byBsb29rIGZvciBzbmFwc2hvdHNcbiAgICogQHBhcmFtIHBpY2tTdGFja3MgLSBQaWNrIG9ubHkgdGhlc2Ugc3RhY2tzIGZyb20gdGhlIGNsb3VkIGFzc2VtYmx5XG4gICAqIEByZXR1cm5zIEEgU25hcHNob3RBc3NlbWJseSwgdGhlIGNvbGxlY3Rpb24gb2YgYWxsIHRlbXBsYXRlcyBpbiB0aGlzIHNuYXBzaG90IGFuZCByZXF1aXJlZCBtZXRhIGRhdGFcbiAgICovXG4gIHByaXZhdGUgZ2V0U25hcHNob3RBc3NlbWJseShjbG91ZEFzc2VtYmx5RGlyOiBzdHJpbmcsIHBpY2tTdGFja3M6IHN0cmluZ1tdID0gW10pOiBTbmFwc2hvdEFzc2VtYmx5IHtcbiAgICBjb25zdCBhc3NlbWJseSA9IHRoaXMucmVhZEFzc2VtYmx5KGNsb3VkQXNzZW1ibHlEaXIpO1xuICAgIGNvbnN0IHN0YWNrcyA9IGFzc2VtYmx5LnN0YWNrcztcbiAgICBjb25zdCBzbmFwc2hvdHM6IFNuYXBzaG90QXNzZW1ibHkgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtzdGFja05hbWUsIHN0YWNrVGVtcGxhdGVdIG9mIE9iamVjdC5lbnRyaWVzKHN0YWNrcykpIHtcbiAgICAgIGlmIChwaWNrU3RhY2tzLmluY2x1ZGVzKHN0YWNrTmFtZSkpIHtcbiAgICAgICAgY29uc3QgbWFuaWZlc3QgPSBBc3NlbWJseU1hbmlmZXN0UmVhZGVyLmZyb21QYXRoKGNsb3VkQXNzZW1ibHlEaXIpO1xuICAgICAgICBjb25zdCBhc3NldHMgPSBtYW5pZmVzdC5nZXRBc3NldElkc0ZvclN0YWNrKHN0YWNrTmFtZSk7XG5cbiAgICAgICAgc25hcHNob3RzW3N0YWNrTmFtZV0gPSB7XG4gICAgICAgICAgdGVtcGxhdGVzOiB7XG4gICAgICAgICAgICBbc3RhY2tOYW1lXTogc3RhY2tUZW1wbGF0ZSxcbiAgICAgICAgICAgIC4uLmFzc2VtYmx5LmdldE5lc3RlZFN0YWNrc0ZvclN0YWNrKHN0YWNrTmFtZSksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhc3NldHMsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNuYXBzaG90cztcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3IgYSBnaXZlbiBzdGFjayByZXR1cm4gYWxsIHJlc291cmNlIHR5cGVzIHRoYXQgYXJlIGFsbG93ZWQgdG8gYmUgZGVzdHJveWVkXG4gICAqIGFzIHBhcnQgb2YgYSBzdGFjayB1cGRhdGVcbiAgICpcbiAgICogQHBhcmFtIHN0YWNrSWQgLSB0aGUgc3RhY2sgaWRcbiAgICogQHJldHVybnMgYSBsaXN0IG9mIHJlc291cmNlIHR5cGVzIG9yIHVuZGVmaW5lZCBpZiBub25lIGFyZSBmb3VuZFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXRBbGxvd2VkRGVzdHJveVR5cGVzRm9yU3RhY2soc3RhY2tJZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXSB8IHVuZGVmaW5lZD4ge1xuICAgIGZvciAoY29uc3QgdGVzdENhc2Ugb2YgT2JqZWN0LnZhbHVlcygoYXdhaXQgdGhpcy5hY3R1YWxUZXN0cygpKSA/PyB7fSkpIHtcbiAgICAgIGlmICh0ZXN0Q2FzZS5zdGFja3MuaW5jbHVkZXMoc3RhY2tJZCkpIHtcbiAgICAgICAgcmV0dXJuIHRlc3RDYXNlLmFsbG93RGVzdHJveTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIGFueSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBleGlzdGluZyBhbmQgZXhwZWN0ZWQgc25hcHNob3RzXG4gICAqXG4gICAqIEBwYXJhbSBleGlzdGluZyAtIHRoZSBleGlzdGluZyAoZXhwZWN0ZWQpIHNuYXBzaG90XG4gICAqIEBwYXJhbSBhY3R1YWwgLSB0aGUgbmV3IChhY3R1YWwpIHNuYXBzaG90XG4gICAqIEByZXR1cm5zIGFueSBkaWFnbm9zdGljcyBhbmQgYW55IGRlc3RydWN0aXZlIGNoYW5nZXNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZGlmZkFzc2VtYmx5KFxuICAgIGV4cGVjdGVkOiBTbmFwc2hvdEFzc2VtYmx5LFxuICAgIGFjdHVhbDogU25hcHNob3RBc3NlbWJseSxcbiAgKTogUHJvbWlzZTx7IGRpYWdub3N0aWNzOiBEaWFnbm9zdGljW107IGRlc3RydWN0aXZlQ2hhbmdlczogRGVzdHJ1Y3RpdmVDaGFuZ2VbXSB9PiB7XG4gICAgY29uc3QgZmFpbHVyZXM6IERpYWdub3N0aWNbXSA9IFtdO1xuICAgIGNvbnN0IGRlc3RydWN0aXZlQ2hhbmdlczogRGVzdHJ1Y3RpdmVDaGFuZ2VbXSA9IFtdO1xuXG4gICAgLy8gY2hlY2sgaWYgdGhlcmUgaXMgYSBDRk4gdGVtcGxhdGUgaW4gdGhlIGN1cnJlbnQgc25hcHNob3RcbiAgICAvLyB0aGF0IGRvZXMgbm90IGV4aXN0IGluIHRoZSBcImFjdHVhbFwiIHNuYXBzaG90XG4gICAgZm9yIChjb25zdCBbc3RhY2tJZCwgc3RhY2tdIG9mIE9iamVjdC5lbnRyaWVzKGV4cGVjdGVkKSkge1xuICAgICAgZm9yIChjb25zdCB0ZW1wbGF0ZUlkIG9mIE9iamVjdC5rZXlzKHN0YWNrLnRlbXBsYXRlcykpIHtcbiAgICAgICAgaWYgKCFhY3R1YWxbc3RhY2tJZF0/LnRlbXBsYXRlc1t0ZW1wbGF0ZUlkXSkge1xuICAgICAgICAgIGZhaWx1cmVzLnB1c2goe1xuICAgICAgICAgICAgdGVzdE5hbWU6IHRoaXMudGVzdE5hbWUsXG4gICAgICAgICAgICBzdGFja05hbWU6IHRlbXBsYXRlSWQsXG4gICAgICAgICAgICByZWFzb246IERpYWdub3N0aWNSZWFzb24uU05BUFNIT1RfRkFJTEVELFxuICAgICAgICAgICAgbWVzc2FnZTogYCR7dGVtcGxhdGVJZH0gZXhpc3RzIGluIHNuYXBzaG90LCBidXQgbm90IGluIGFjdHVhbGAsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtzdGFja0lkLCBzdGFja10gb2YgT2JqZWN0LmVudHJpZXMoYWN0dWFsKSkge1xuICAgICAgZm9yIChjb25zdCB0ZW1wbGF0ZUlkIG9mIE9iamVjdC5rZXlzKHN0YWNrLnRlbXBsYXRlcykpIHtcbiAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIGlzIGEgQ0ZOIHRlbXBsYXRlIGluIHRoZSBcImFjdHVhbFwiIHNuYXBzaG90XG4gICAgICAvLyB0aGF0IGRvZXMgbm90IGV4aXN0IGluIHRoZSBjdXJyZW50IHNuYXBzaG90XG4gICAgICAgIGlmICghZXhwZWN0ZWRbc3RhY2tJZF0/LnRlbXBsYXRlc1t0ZW1wbGF0ZUlkXSkge1xuICAgICAgICAgIGZhaWx1cmVzLnB1c2goe1xuICAgICAgICAgICAgdGVzdE5hbWU6IHRoaXMudGVzdE5hbWUsXG4gICAgICAgICAgICBzdGFja05hbWU6IHRlbXBsYXRlSWQsXG4gICAgICAgICAgICByZWFzb246IERpYWdub3N0aWNSZWFzb24uU05BUFNIT1RfRkFJTEVELFxuICAgICAgICAgICAgbWVzc2FnZTogYCR7dGVtcGxhdGVJZH0gZG9lcyBub3QgZXhpc3QgaW4gc25hcHNob3QsIGJ1dCBkb2VzIGluIGFjdHVhbGAsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgICAgICAgZGlmZkFzc2V0czogKGF3YWl0IHRoaXMuYWN0dWFsVGVzdFN1aXRlKCkpLmdldE9wdGlvbnNGb3JTdGFjayhzdGFja0lkKT8uZGlmZkFzc2V0cyxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGxldCBhY3R1YWxUZW1wbGF0ZSA9IGFjdHVhbFtzdGFja0lkXS50ZW1wbGF0ZXNbdGVtcGxhdGVJZF07XG4gICAgICAgICAgbGV0IGV4cGVjdGVkVGVtcGxhdGUgPSBleHBlY3RlZFtzdGFja0lkXS50ZW1wbGF0ZXNbdGVtcGxhdGVJZF07XG5cbiAgICAgICAgICAvLyBpZiB3ZSBhcmUgbm90IHZlcmlmeWluZyBhc3NldCBoYXNoZXMgdGhlbiByZW1vdmUgdGhlIHNwZWNpZmljXG4gICAgICAgICAgLy8gYXNzZXQgaGFzaGVzIGZyb20gdGhlIHRlbXBsYXRlcyBzbyB0aGV5IGFyZSBub3QgcGFydCBvZiB0aGUgZGlmZlxuICAgICAgICAgIC8vIGNvbXBhcmlzb25cbiAgICAgICAgICBpZiAoIWNvbmZpZy5kaWZmQXNzZXRzKSB7XG4gICAgICAgICAgICBhY3R1YWxUZW1wbGF0ZSA9IHRoaXMuY2Fub25pY2FsaXplVGVtcGxhdGUoYWN0dWFsVGVtcGxhdGUsIGFjdHVhbFtzdGFja0lkXS5hc3NldHMpO1xuICAgICAgICAgICAgZXhwZWN0ZWRUZW1wbGF0ZSA9IHRoaXMuY2Fub25pY2FsaXplVGVtcGxhdGUoZXhwZWN0ZWRUZW1wbGF0ZSwgZXhwZWN0ZWRbc3RhY2tJZF0uYXNzZXRzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgdGVtcGxhdGVEaWZmID0gZnVsbERpZmYoZXhwZWN0ZWRUZW1wbGF0ZSwgYWN0dWFsVGVtcGxhdGUpO1xuICAgICAgICAgIGlmICghdGVtcGxhdGVEaWZmLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIGNvbnN0IGFsbG93ZWREZXN0cm95VHlwZXMgPSAoYXdhaXQgdGhpcy5nZXRBbGxvd2VkRGVzdHJveVR5cGVzRm9yU3RhY2soc3RhY2tJZCkpID8/IFtdO1xuXG4gICAgICAgICAgICAvLyBnbyB0aHJvdWdoIGFsbCB0aGUgcmVzb3VyY2UgZGlmZmVyZW5jZXMgYW5kIGNoZWNrIGZvciBhbnlcbiAgICAgICAgICAgIC8vIFwiZGVzdHJ1Y3RpdmVcIiBjaGFuZ2VzXG4gICAgICAgICAgICB0ZW1wbGF0ZURpZmYucmVzb3VyY2VzLmZvckVhY2hEaWZmZXJlbmNlKChsb2dpY2FsSWQ6IHN0cmluZywgY2hhbmdlOiBSZXNvdXJjZURpZmZlcmVuY2UpID0+IHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSBjaGFuZ2UgaXMgYSByZW1vdmFsIGl0IHdpbGwgbm90IHNob3cgdXAgYXMgYSAnY2hhbmdlSW1wYWN0J1xuICAgICAgICAgICAgLy8gc28gbmVlZCB0byBjaGVjayBmb3IgaXQgc2VwYXJhdGVseSwgdW5sZXNzIGl0IGlzIGEgcmVzb3VyY2VUeXBlIHRoYXRcbiAgICAgICAgICAgIC8vIGhhcyBiZWVuIFwiYWxsb3dlZFwiIHRvIGJlIGRlc3Ryb3llZFxuICAgICAgICAgICAgICBjb25zdCByZXNvdXJjZVR5cGUgPSBjaGFuZ2Uub2xkVmFsdWU/LlR5cGUgPz8gY2hhbmdlLm5ld1ZhbHVlPy5UeXBlO1xuICAgICAgICAgICAgICBpZiAocmVzb3VyY2VUeXBlICYmIGFsbG93ZWREZXN0cm95VHlwZXMuaW5jbHVkZXMocmVzb3VyY2VUeXBlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoY2hhbmdlLmlzUmVtb3ZhbCkge1xuICAgICAgICAgICAgICAgIGRlc3RydWN0aXZlQ2hhbmdlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIGltcGFjdDogUmVzb3VyY2VJbXBhY3QuV0lMTF9ERVNUUk9ZLFxuICAgICAgICAgICAgICAgICAgbG9naWNhbElkLFxuICAgICAgICAgICAgICAgICAgc3RhY2tOYW1lOiB0ZW1wbGF0ZUlkLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoY2hhbmdlLmNoYW5nZUltcGFjdCkge1xuICAgICAgICAgICAgICAgICAgY2FzZSBSZXNvdXJjZUltcGFjdC5NQVlfUkVQTEFDRTpcbiAgICAgICAgICAgICAgICAgIGNhc2UgUmVzb3VyY2VJbXBhY3QuV0lMTF9PUlBIQU46XG4gICAgICAgICAgICAgICAgICBjYXNlIFJlc291cmNlSW1wYWN0LldJTExfREVTVFJPWTpcbiAgICAgICAgICAgICAgICAgIGNhc2UgUmVzb3VyY2VJbXBhY3QuV0lMTF9SRVBMQUNFOlxuICAgICAgICAgICAgICAgICAgICBkZXN0cnVjdGl2ZUNoYW5nZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgaW1wYWN0OiBjaGFuZ2UuY2hhbmdlSW1wYWN0LFxuICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxJZCxcbiAgICAgICAgICAgICAgICAgICAgICBzdGFja05hbWU6IHRlbXBsYXRlSWQsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qgd3JpdGFibGUgPSBuZXcgU3RyaW5nV3JpdGFibGUoe30pO1xuICAgICAgICAgICAgZm9ybWF0RGlmZmVyZW5jZXMod3JpdGFibGUsIHRlbXBsYXRlRGlmZik7XG4gICAgICAgICAgICBmYWlsdXJlcy5wdXNoKHtcbiAgICAgICAgICAgICAgcmVhc29uOiBEaWFnbm9zdGljUmVhc29uLlNOQVBTSE9UX0ZBSUxFRCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogd3JpdGFibGUuZGF0YSxcbiAgICAgICAgICAgICAgc3RhY2tOYW1lOiB0ZW1wbGF0ZUlkLFxuICAgICAgICAgICAgICB0ZXN0TmFtZTogdGhpcy50ZXN0TmFtZSxcbiAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRpYWdub3N0aWNzOiBmYWlsdXJlcyxcbiAgICAgIGRlc3RydWN0aXZlQ2hhbmdlcyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkQXNzZW1ibHkoZGlyOiBzdHJpbmcpOiBBc3NlbWJseU1hbmlmZXN0UmVhZGVyIHtcbiAgICByZXR1cm4gQXNzZW1ibHlNYW5pZmVzdFJlYWRlci5mcm9tUGF0aChkaXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZHVjZSB0ZW1wbGF0ZSB0byBhIG5vcm1hbCBmb3JtIHdoZXJlIGFzc2V0IHJlZmVyZW5jZXMgaGF2ZSBiZWVuIG5vcm1hbGl6ZWRcbiAgICpcbiAgICogVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBjb21wYXJlIHRlbXBsYXRlcyBpZiBhbGwgdGhhdCdzIGRpZmZlcmVudCBiZXR3ZWVuXG4gICAqIHRoZW0gaXMgdGhlIGhhc2hlcyBvZiB0aGUgYXNzZXQgdmFsdWVzLlxuICAgKi9cbiAgcHJpdmF0ZSBjYW5vbmljYWxpemVUZW1wbGF0ZSh0ZW1wbGF0ZTogYW55LCBhc3NldHM6IHN0cmluZ1tdKTogYW55IHtcbiAgICBjb25zdCBhc3NldHNTZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3Qgc3RyaW5nU3Vic3RpdHV0aW9ucyA9IG5ldyBBcnJheTxbUmVnRXhwLCBzdHJpbmddPigpO1xuXG4gICAgLy8gRmluZCBhc3NldHMgdmlhIHBhcmFtZXRlcnMgKGZvciBMZWdhY3lTdGFja1N5bnRoZXNpemVyKVxuICAgIGNvbnN0IHBhcmFtUmUgPSAvXkFzc2V0UGFyYW1ldGVycyhbYS16QS1aMC05XXs2NH0pKFMzQnVja2V0fFMzVmVyc2lvbktleXxBcnRpZmFjdEhhc2gpKFthLXpBLVowLTldezh9KSQvO1xuICAgIGZvciAoY29uc3QgcGFyYW1OYW1lIG9mIE9iamVjdC5rZXlzKHRlbXBsYXRlPy5QYXJhbWV0ZXJzIHx8IHt9KSkge1xuICAgICAgY29uc3QgbSA9IHBhcmFtUmUuZXhlYyhwYXJhbU5hbWUpO1xuICAgICAgaWYgKCFtKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKGFzc2V0c1NlZW4uaGFzKG1bMV0pKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBhc3NldHNTZWVuLmFkZChtWzFdKTtcbiAgICAgIGNvbnN0IGl4ID0gYXNzZXRzU2Vlbi5zaXplO1xuXG4gICAgICAvLyBGdWxsIHBhcmFtZXRlciByZWZlcmVuY2VcbiAgICAgIHN0cmluZ1N1YnN0aXR1dGlvbnMucHVzaChbXG4gICAgICAgIG5ldyBSZWdFeHAoYEFzc2V0UGFyYW1ldGVycyR7bVsxXX0oUzNCdWNrZXR8UzNWZXJzaW9uS2V5fEFydGlmYWN0SGFzaCkoW2EtekEtWjAtOV17OH0pYCksXG4gICAgICAgIGBBc3NldCR7aXh9JDFgLFxuICAgICAgXSk7XG4gICAgICAvLyBTdWJzdHJpbmcgYXNzZXQgaGFzaCByZWZlcmVuY2VcbiAgICAgIHN0cmluZ1N1YnN0aXR1dGlvbnMucHVzaChbXG4gICAgICAgIG5ldyBSZWdFeHAoYCR7bVsxXX1gKSxcbiAgICAgICAgYEFzc2V0JHtpeH1IYXNoYCxcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIC8vIGZpbmQgYXNzZXRzIGRlZmluZWQgaW4gdGhlIGFzc2V0IG1hbmlmZXN0XG4gICAgdHJ5IHtcbiAgICAgIGFzc2V0cy5mb3JFYWNoKGFzc2V0ID0+IHtcbiAgICAgICAgaWYgKCFhc3NldHNTZWVuLmhhcyhhc3NldCkpIHtcbiAgICAgICAgICBhc3NldHNTZWVuLmFkZChhc3NldCk7XG4gICAgICAgICAgY29uc3QgaXggPSBhc3NldHNTZWVuLnNpemU7XG4gICAgICAgICAgc3RyaW5nU3Vic3RpdHV0aW9ucy5wdXNoKFtcbiAgICAgICAgICAgIG5ldyBSZWdFeHAoYXNzZXQpLFxuICAgICAgICAgICAgYEFzc2V0JHtpeH0kMWAsXG4gICAgICAgICAgXSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gYXNzZXQgbWFuaWZlc3QgdGhhdCBpcyBmaW5lLlxuICAgIH1cblxuICAgIC8vIFN1YnN0aXR1dGUgdGhlbSBvdXRcbiAgICByZXR1cm4gc3Vic3RpdHV0ZSh0ZW1wbGF0ZSk7XG5cbiAgICBmdW5jdGlvbiBzdWJzdGl0dXRlKHdoYXQ6IGFueSk6IGFueSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh3aGF0KSkge1xuICAgICAgICByZXR1cm4gd2hhdC5tYXAoc3Vic3RpdHV0ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygd2hhdCA9PT0gJ29iamVjdCcgJiYgd2hhdCAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCByZXQ6IGFueSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyh3aGF0KSkge1xuICAgICAgICAgIHJldFtzdHJpbmdTdWIoayldID0gc3Vic3RpdHV0ZSh2KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHdoYXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmdTdWIod2hhdCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB3aGF0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0cmluZ1N1Yih4OiBzdHJpbmcpIHtcbiAgICAgIGZvciAoY29uc3QgW3JlLCByZXBsYWNlbWVudF0gb2Ygc3RyaW5nU3Vic3RpdHV0aW9ucykge1xuICAgICAgICB4ID0geC5yZXBsYWNlKHJlLCByZXBsYWNlbWVudCk7XG4gICAgICB9XG4gICAgICByZXR1cm4geDtcbiAgICB9XG4gIH1cbn1cblxuY2xhc3MgU3RyaW5nV3JpdGFibGUgZXh0ZW5kcyBXcml0YWJsZSB7XG4gIHB1YmxpYyBkYXRhOiBzdHJpbmc7XG4gIHByaXZhdGUgX2RlY29kZXI6IFN0cmluZ0RlY29kZXI7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFdyaXRhYmxlT3B0aW9ucykge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuICAgIHRoaXMuX2RlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcigpO1xuICAgIHRoaXMuZGF0YSA9ICcnO1xuICB9XG5cbiAgX3dyaXRlKGNodW5rOiBhbnksIGVuY29kaW5nOiBzdHJpbmcsIGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvciB8IG51bGwpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBpZiAoZW5jb2RpbmcgPT09ICdidWZmZXInKSB7XG4gICAgICBjaHVuayA9IHRoaXMuX2RlY29kZXIud3JpdGUoY2h1bmspO1xuICAgIH1cblxuICAgIHRoaXMuZGF0YSArPSBjaHVuaztcbiAgICBjYWxsYmFjaygpO1xuICB9XG5cbiAgX2ZpbmFsKGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvciB8IG51bGwpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGEgKz0gdGhpcy5fZGVjb2Rlci5lbmQoKTtcbiAgICBjYWxsYmFjaygpO1xuICB9XG59XG4iXX0=
|
|
353
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hcHNob3QtdGVzdC1ydW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzbmFwc2hvdC10ZXN0LXJ1bm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBNkI7QUFFN0IsbUNBQWtDO0FBQ2xDLG1EQUErQztBQUMvQyxvRUFBNkQ7QUFFN0Qsc0VBQTJGO0FBRTNGLHlEQUFvRDtBQUNwRCw2REFBa0U7QUFFbEUsOENBQXFEO0FBcUJyRDs7O0dBR0c7QUFDSCxNQUFhLG1CQUFtQjtJQUNiLE1BQU0sQ0FBaUI7SUFDeEMsWUFBWSxPQUE4QztRQUN4RCxJQUFJLENBQUMsTUFBTSxHQUFHLGlDQUFjLENBQUMsTUFBTSxDQUFDO1lBQ2xDLEdBQUcsT0FBTztZQUNWLE1BQU0sRUFBRSxtQ0FBYztTQUN2QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sV0FBVztRQUNoQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVNLFdBQVc7UUFDaEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFTSxrQ0FBa0M7UUFDdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBdUMsRUFBRTtRQUlqRSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDO1lBQ0gsK0JBQStCO1lBQy9CLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDaEUsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUVwSCw4Q0FBOEM7WUFDOUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQyxpQkFBaUIsRUFBRSxhQUFhLElBQUksS0FBSyxDQUFDLENBQUM7WUFFcEYsNkJBQTZCO1lBQzdCLE1BQU0sY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUMxRCxNQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRXJILDJFQUEyRTtZQUMzRSxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsd0JBQXdCLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztZQUU5RixJQUFJLFdBQVcsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ25DLHFEQUFxRDtnQkFDckQsTUFBTSxrQkFBa0IsR0FBYSxFQUFFLENBQUM7Z0JBRXhDLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNuQixrQkFBa0IsQ0FBQyxJQUFJLENBQ3JCLGdDQUFnQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFDN0YsZ0NBQWdDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FDdEY7d0JBQ0QsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDbEIsQ0FBQztnQkFFRCxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDcEIsa0JBQWtCLENBQUMsSUFBSSxDQUNyQixRQUFRLEVBQ1IsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLHVCQUF1QixFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQ3ZELENBQUM7Z0JBQ0osQ0FBQztnQkFFRCxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHO29CQUMzQixHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO29CQUM3QixrQkFBa0I7aUJBQ25CLENBQUM7WUFDSixDQUFDO1lBRUQsT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxNQUFNLENBQUMsQ0FBQztRQUNWLENBQUM7Z0JBQVMsQ0FBQztZQUNULElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN4QixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ssbUJBQW1CLENBQUMsZ0JBQXdCLEVBQUUsYUFBdUIsRUFBRTtRQUM3RSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDckQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUMvQixNQUFNLFNBQVMsR0FBcUIsRUFBRSxDQUFDO1FBQ3ZDLEtBQUssTUFBTSxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDaEUsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQ25DLE1BQU0sUUFBUSxHQUFHLHVDQUFzQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUNuRSxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBRXZELFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRztvQkFDckIsU0FBUyxFQUFFO3dCQUNULENBQUMsU0FBUyxDQUFDLEVBQUUsYUFBYTt3QkFDMUIsR0FBRyxRQUFRLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUFDO3FCQUMvQztvQkFDRCxNQUFNO2lCQUNQLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSyxLQUFLLENBQUMsOEJBQThCLENBQUMsT0FBZTtRQUMxRCxLQUFLLE1BQU0sUUFBUSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzlFLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDdEMsT0FBTyxRQUFRLENBQUMsWUFBWSxDQUFDO1lBQy9CLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLEtBQUssQ0FBQyxZQUFZLENBQ3hCLFFBQTBCLEVBQzFCLE1BQXdCO1FBRXhCLE1BQU0sUUFBUSxHQUFpQixFQUFFLENBQUM7UUFDbEMsTUFBTSxrQkFBa0IsR0FBd0IsRUFBRSxDQUFDO1FBRW5ELDJEQUEyRDtRQUMzRCwrQ0FBK0M7UUFDL0MsS0FBSyxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUN4RCxLQUFLLE1BQU0sVUFBVSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7b0JBQzVDLFFBQVEsQ0FBQyxJQUFJLENBQUM7d0JBQ1osUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUTt3QkFDOUIsU0FBUyxFQUFFLFVBQVU7d0JBQ3JCLE1BQU0sRUFBRSx5QkFBZ0IsQ0FBQyxlQUFlO3dCQUN4QyxPQUFPLEVBQUUsR0FBRyxVQUFVLHdDQUF3QztxQkFDL0QsQ0FBQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDdEQsS0FBSyxNQUFNLFVBQVUsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUN4RCw0REFBNEQ7Z0JBQzVELDhDQUE4QztnQkFDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztvQkFDOUMsUUFBUSxDQUFDLElBQUksQ0FBQzt3QkFDWixRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRO3dCQUM5QixTQUFTLEVBQUUsVUFBVTt3QkFDckIsTUFBTSxFQUFFLHlCQUFnQixDQUFDLGVBQWU7d0JBQ3hDLE9BQU8sRUFBRSxHQUFHLFVBQVUsaURBQWlEO3FCQUN4RSxDQUFDLENBQUM7b0JBQ0gsU0FBUztnQkFDWCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxNQUFNLEdBQUc7d0JBQ2IsVUFBVSxFQUFFLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxFQUFFLFVBQVU7cUJBQ3hHLENBQUM7b0JBQ0YsSUFBSSxjQUFjLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDM0QsSUFBSSxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUUvRCxnRUFBZ0U7b0JBQ2hFLG1FQUFtRTtvQkFDbkUsYUFBYTtvQkFDYixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO3dCQUN2QixjQUFjLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQ25GLGdCQUFnQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQzNGLENBQUM7b0JBQ0QsTUFBTSxZQUFZLEdBQUcsSUFBQSw4QkFBUSxFQUFDLGdCQUFnQixFQUFFLGNBQWMsQ0FBQyxDQUFDO29CQUNoRSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO3dCQUMxQixNQUFNLG1CQUFtQixHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsOEJBQThCLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBRXZGLDREQUE0RDt3QkFDNUQsd0JBQXdCO3dCQUN4QixZQUFZLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUMsU0FBaUIsRUFBRSxNQUEwQixFQUFFLEVBQUU7NEJBQzNGLHFFQUFxRTs0QkFDckUsdUVBQXVFOzRCQUN2RSxxQ0FBcUM7NEJBQ25DLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDOzRCQUNwRSxJQUFJLFlBQVksSUFBSSxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztnQ0FDL0QsT0FBTzs0QkFDVCxDQUFDOzRCQUNELElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dDQUNyQixrQkFBa0IsQ0FBQyxJQUFJLENBQUM7b0NBQ3RCLE1BQU0sRUFBRSxvQ0FBYyxDQUFDLFlBQVk7b0NBQ25DLFNBQVM7b0NBQ1QsU0FBUyxFQUFFLFVBQVU7aUNBQ3RCLENBQUMsQ0FBQzs0QkFDTCxDQUFDO2lDQUFNLENBQUM7Z0NBQ04sUUFBUSxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7b0NBQzVCLEtBQUssb0NBQWMsQ0FBQyxXQUFXLENBQUM7b0NBQ2hDLEtBQUssb0NBQWMsQ0FBQyxXQUFXLENBQUM7b0NBQ2hDLEtBQUssb0NBQWMsQ0FBQyxZQUFZLENBQUM7b0NBQ2pDLEtBQUssb0NBQWMsQ0FBQyxZQUFZO3dDQUM5QixrQkFBa0IsQ0FBQyxJQUFJLENBQUM7NENBQ3RCLE1BQU0sRUFBRSxNQUFNLENBQUMsWUFBWTs0Q0FDM0IsU0FBUzs0Q0FDVCxTQUFTLEVBQUUsVUFBVTt5Q0FDdEIsQ0FBQyxDQUFDO3dDQUNILE1BQU07Z0NBQ1YsQ0FBQzs0QkFDSCxDQUFDO3dCQUNILENBQUMsQ0FBQyxDQUFDO3dCQUNILE1BQU0sUUFBUSxHQUFHLElBQUksY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUN4QyxJQUFBLHVDQUFpQixFQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQzt3QkFDMUMsUUFBUSxDQUFDLElBQUksQ0FBQzs0QkFDWixNQUFNLEVBQUUseUJBQWdCLENBQUMsZUFBZTs0QkFDeEMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxJQUFJOzRCQUN0QixTQUFTLEVBQUUsVUFBVTs0QkFDckIsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUTs0QkFDOUIsTUFBTTt5QkFDUCxDQUFDLENBQUM7b0JBQ0wsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPO1lBQ0wsV0FBVyxFQUFFLFFBQVE7WUFDckIsa0JBQWtCO1NBQ25CLENBQUM7SUFDSixDQUFDO0lBRU8sWUFBWSxDQUFDLEdBQVc7UUFDOUIsT0FBTyx1Q0FBc0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssb0JBQW9CLENBQUMsUUFBYSxFQUFFLE1BQWdCO1FBQzFELE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDckMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLEtBQUssRUFBb0IsQ0FBQztRQUUxRCwwREFBMEQ7UUFDMUQsTUFBTSxPQUFPLEdBQUcsd0ZBQXdGLENBQUM7UUFDekcsS0FBSyxNQUFNLFNBQVMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxVQUFVLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNoRSxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDUCxTQUFTO1lBQ1gsQ0FBQztZQUNELElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN6QixTQUFTO1lBQ1gsQ0FBQztZQUVELFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckIsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztZQUUzQiwyQkFBMkI7WUFDM0IsbUJBQW1CLENBQUMsSUFBSSxDQUFDO2dCQUN2QixJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxzREFBc0QsQ0FBQztnQkFDeEYsUUFBUSxFQUFFLElBQUk7YUFDZixDQUFDLENBQUM7WUFDSCxpQ0FBaUM7WUFDakMsbUJBQW1CLENBQUMsSUFBSSxDQUFDO2dCQUN2QixJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNyQixRQUFRLEVBQUUsTUFBTTthQUNqQixDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsNENBQTRDO1FBQzVDLElBQUksQ0FBQztZQUNILE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQzNCLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3RCLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7b0JBQzNCLG1CQUFtQixDQUFDLElBQUksQ0FBQzt3QkFDdkIsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDO3dCQUNqQixRQUFRLEVBQUUsSUFBSTtxQkFDZixDQUFDLENBQUM7Z0JBQ0wsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLDhDQUE4QztRQUNoRCxDQUFDO1FBRUQsc0JBQXNCO1FBQ3RCLE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTVCLFNBQVMsVUFBVSxDQUFDLElBQVM7WUFDM0IsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3hCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM5QixDQUFDO1lBRUQsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUM5QyxNQUFNLEdBQUcsR0FBUSxFQUFFLENBQUM7Z0JBQ3BCLEtBQUssTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQzFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BDLENBQUM7Z0JBQ0QsT0FBTyxHQUFHLENBQUM7WUFDYixDQUFDO1lBRUQsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDN0IsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekIsQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELFNBQVMsU0FBUyxDQUFDLENBQVM7WUFDMUIsS0FBSyxNQUFNLENBQUMsRUFBRSxFQUFFLFdBQVcsQ0FBQyxJQUFJLG1CQUFtQixFQUFFLENBQUM7Z0JBQ3BELENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUNqQyxDQUFDO1lBQ0QsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBblVELGtEQW1VQztBQUVELE1BQU0sY0FBZSxTQUFRLGlCQUFRO0lBQzVCLElBQUksQ0FBUztJQUNaLFFBQVEsQ0FBZ0I7SUFDaEMsWUFBWSxPQUF3QjtRQUNsQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksOEJBQWEsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBVSxFQUFFLFFBQWdCLEVBQUUsUUFBd0M7UUFDM0UsSUFBSSxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDMUIsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQztRQUNuQixRQUFRLEVBQUUsQ0FBQztJQUNiLENBQUM7SUFFRCxNQUFNLENBQUMsUUFBd0M7UUFDN0MsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2pDLFFBQVEsRUFBRSxDQUFDO0lBQ2IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB0eXBlIHsgV3JpdGFibGVPcHRpb25zIH0gZnJvbSAnc3RyZWFtJztcbmltcG9ydCB7IFdyaXRhYmxlIH0gZnJvbSAnc3RyZWFtJztcbmltcG9ydCB7IFN0cmluZ0RlY29kZXIgfSBmcm9tICdzdHJpbmdfZGVjb2Rlcic7XG5pbXBvcnQgeyBVTktOT1dOX1JFR0lPTiB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LWFwaSc7XG5pbXBvcnQgdHlwZSB7IFJlc291cmNlRGlmZmVyZW5jZSB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkZm9ybWF0aW9uLWRpZmYnO1xuaW1wb3J0IHsgZnVsbERpZmYsIGZvcm1hdERpZmZlcmVuY2VzLCBSZXNvdXJjZUltcGFjdCB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkZm9ybWF0aW9uLWRpZmYnO1xuaW1wb3J0IHR5cGUgeyBDZGtJbnRlZ0hlbHBlck9wdGlvbnMgfSBmcm9tICcuL2Nkay1pbnRlZy1oZWxwZXInO1xuaW1wb3J0IHsgQ2RrSW50ZWdIZWxwZXIgfSBmcm9tICcuL2Nkay1pbnRlZy1oZWxwZXInO1xuaW1wb3J0IHsgQXNzZW1ibHlNYW5pZmVzdFJlYWRlciB9IGZyb20gJy4vcHJpdmF0ZS9jbG91ZC1hc3NlbWJseSc7XG5pbXBvcnQgdHlwZSB7IERpYWdub3N0aWMsIERlc3RydWN0aXZlQ2hhbmdlLCBTbmFwc2hvdFZlcmlmaWNhdGlvbk9wdGlvbnMgfSBmcm9tICcuLi93b3JrZXJzL2NvbW1vbic7XG5pbXBvcnQgeyBEaWFnbm9zdGljUmVhc29uIH0gZnJvbSAnLi4vd29ya2Vycy9jb21tb24nO1xuXG5pbnRlcmZhY2UgU25hcHNob3RBc3NlbWJseSB7XG4gIC8qKlxuICAgKiBNYXAgb2Ygc3RhY2tzIHRoYXQgYXJlIHBhcnQgb2YgdGhpcyBhc3NlbWJseVxuICAgKi9cbiAgW3N0YWNrTmFtZTogc3RyaW5nXToge1xuICAgIC8qKlxuICAgICAqIEFsbCB0ZW1wbGF0ZXMgZm9yIHRoaXMgc3RhY2ssIGluY2x1ZGluZyBuZXN0ZWQgc3RhY2tzXG4gICAgICovXG4gICAgdGVtcGxhdGVzOiB7XG4gICAgICBbdGVtcGxhdGVJZDogc3RyaW5nXTogYW55O1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIGFzc2V0IElkcyB0aGF0IGFyZSB1c2VkIGJ5IHRoaXMgYXNzZW1ibHlcbiAgICAgKi9cbiAgICBhc3NldHM6IHN0cmluZ1tdO1xuICB9O1xufVxuXG4vKipcbiAqIFJ1bm5lciBmb3Igc25hcHNob3QgdGVzdHMuIFRoaXMgaGFuZGxlcyBvcmNoZXN0cmF0aW5nXG4gKiB0aGUgdmFsaWRhdGlvbiBvZiB0aGUgaW50ZWdyYXRpb24gdGVzdCBzbmFwc2hvdHNcbiAqL1xuZXhwb3J0IGNsYXNzIEludGVnU25hcHNob3RSdW5uZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGhlbHBlcjogQ2RrSW50ZWdIZWxwZXI7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9taXQ8Q2RrSW50ZWdIZWxwZXJPcHRpb25zLCAncmVnaW9uJz4pIHtcbiAgICB0aGlzLmhlbHBlciA9IENka0ludGVnSGVscGVyLmNyZWF0ZSh7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgcmVnaW9uOiBVTktOT1dOX1JFR0lPTixcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBoYXNTbmFwc2hvdCgpIHtcbiAgICByZXR1cm4gdGhpcy5oZWxwZXIuaGFzU25hcHNob3QoKTtcbiAgfVxuXG4gIHB1YmxpYyBhY3R1YWxUZXN0cygpIHtcbiAgICByZXR1cm4gdGhpcy5oZWxwZXIuYWN0dWFsVGVzdHMoKTtcbiAgfVxuXG4gIHB1YmxpYyBkb250Q2FyZUFib3V0TGVnYWN5TG9va3Vwc0ZvclRlc3RzKCkge1xuICAgIHRoaXMuaGVscGVyLmNvbmZpZ3VyZUxlZ2FjeUVuYWJsZUxvb2t1cHMoJ2RvbnQtY2FyZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN5bnRoIHRoZSBDREsgYXBwIGFuZCBjb21wYXJlIHRoZSB0ZW1wbGF0ZXMgdG8gdGhlIGV4aXN0aW5nIHNuYXBzaG90LlxuICAgKlxuICAgKiBAcmV0dXJucyBhbnkgZGlhZ25vc3RpY3MgYW5kIGFueSBkZXN0cnVjdGl2ZSBjaGFuZ2VzXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdGVzdFNuYXBzaG90KG9wdGlvbnM6IFNuYXBzaG90VmVyaWZpY2F0aW9uT3B0aW9ucyA9IHt9KTogUHJvbWlzZTx7XG4gICAgZGlhZ25vc3RpY3M6IERpYWdub3N0aWNbXTtcbiAgICBkZXN0cnVjdGl2ZUNoYW5nZXM6IERlc3RydWN0aXZlQ2hhbmdlW107XG4gIH0+IHtcbiAgICBsZXQgZG9DbGVhbiA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFJlYWQgdGhlIFwiZXhwZWN0ZWRcIiBzbmFwc2hvdFxuICAgICAgY29uc3QgZXhwZWN0ZWRUZXN0U3VpdGUgPSBhd2FpdCB0aGlzLmhlbHBlci5leHBlY3RlZFRlc3RTdWl0ZSgpO1xuICAgICAgY29uc3QgZXhwZWN0ZWRTbmFwc2hvdEFzc2VtYmx5ID0gdGhpcy5nZXRTbmFwc2hvdEFzc2VtYmx5KHRoaXMuaGVscGVyLmdvbGRlblNuYXBzaG90RGlyLCBleHBlY3RlZFRlc3RTdWl0ZT8uc3RhY2tzKTtcblxuICAgICAgLy8gQ29uZmlndXJlIHNldHRpbmdzIGZyb20gdGhlIGdvbGRlbiBzbmFwc2hvdFxuICAgICAgdGhpcy5oZWxwZXIuY29uZmlndXJlTGVnYWN5RW5hYmxlTG9va3VwcyhleHBlY3RlZFRlc3RTdWl0ZT8uZW5hYmxlTG9va3VwcyA/PyBmYWxzZSk7XG5cbiAgICAgIC8vIHJlYWQgdGhlIFwiYWN0dWFsXCIgc25hcHNob3RcbiAgICAgIGNvbnN0IGFjdHVhbFNuYXBzaG90ID0gYXdhaXQgdGhpcy5oZWxwZXIuYWN0dWFsU25hcHNob3QoKTtcbiAgICAgIGNvbnN0IGFjdHVhbFNuYXBzaG90QXNzZW1ibHkgPSB0aGlzLmdldFNuYXBzaG90QXNzZW1ibHkodGhpcy5oZWxwZXIuY2RrT3V0RGlyLCBhY3R1YWxTbmFwc2hvdC50ZXN0RGVmaW5pdGlvbi5zdGFja3MpO1xuXG4gICAgICAvLyBkaWZmIHRoZSBleGlzdGluZyBzbmFwc2hvdCAoZXhwZWN0ZWQpIHdpdGggdGhlIGludGVncmF0aW9uIHRlc3QgKGFjdHVhbClcbiAgICAgIGNvbnN0IGRpYWdub3N0aWNzID0gYXdhaXQgdGhpcy5kaWZmQXNzZW1ibHkoZXhwZWN0ZWRTbmFwc2hvdEFzc2VtYmx5LCBhY3R1YWxTbmFwc2hvdEFzc2VtYmx5KTtcblxuICAgICAgaWYgKGRpYWdub3N0aWNzLmRpYWdub3N0aWNzLmxlbmd0aCkge1xuICAgICAgICAvLyBBdHRhY2ggYWRkaXRpb25hbCBtZXNzYWdlcyB0byB0aGUgZmlyc3QgZGlhZ25vc3RpY1xuICAgICAgICBjb25zdCBhZGRpdGlvbmFsTWVzc2FnZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgICAgaWYgKG9wdGlvbnMucmV0YWluKSB7XG4gICAgICAgICAgYWRkaXRpb25hbE1lc3NhZ2VzLnB1c2goXG4gICAgICAgICAgICBgKEZhaWx1cmUgcmV0YWluZWQpIEV4cGVjdGVkOiAke3BhdGgucmVsYXRpdmUocHJvY2Vzcy5jd2QoKSwgdGhpcy5oZWxwZXIuZ29sZGVuU25hcHNob3REaXIpfWAsXG4gICAgICAgICAgICBgICAgICAgICAgICAgICAgICAgIEFjdHVhbDogICAke3BhdGgucmVsYXRpdmUocHJvY2Vzcy5jd2QoKSwgdGhpcy5oZWxwZXIuY2RrT3V0RGlyKX1gLFxuICAgICAgICAgICksXG4gICAgICAgICAgZG9DbGVhbiA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgIGFkZGl0aW9uYWxNZXNzYWdlcy5wdXNoKFxuICAgICAgICAgICAgJ1JlcHJvOicsXG4gICAgICAgICAgICBgICAke3RoaXMuaGVscGVyLmFjdHVhbFN5bnRoUmVwcm9Db21tYW5kKCkuam9pbignICcpfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRpYWdub3N0aWNzLmRpYWdub3N0aWNzWzBdID0ge1xuICAgICAgICAgIC4uLmRpYWdub3N0aWNzLmRpYWdub3N0aWNzWzBdLFxuICAgICAgICAgIGFkZGl0aW9uYWxNZXNzYWdlcyxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRpYWdub3N0aWNzO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChkb0NsZWFuKSB7XG4gICAgICAgIHRoaXMuaGVscGVyLmNsZWFudXAoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRm9yIGEgZ2l2ZW4gY2xvdWQgYXNzZW1ibHkgcmV0dXJuIGEgY29sbGVjdGlvbiBvZiBhbGwgdGVtcGxhdGVzXG4gICAqIHRoYXQgc2hvdWxkIGJlIHBhcnQgb2YgdGhlIHNuYXBzaG90IGFuZCBhbnkgcmVxdWlyZWQgbWV0YSBkYXRhLlxuICAgKlxuICAgKiBAcGFyYW0gY2xvdWRBc3NlbWJseURpciAtIFRoZSBkaXJlY3Rvcnkgb2YgdGhlIGNsb3VkIGFzc2VtYmx5IHRvIGxvb2sgZm9yIHNuYXBzaG90c1xuICAgKiBAcGFyYW0gcGlja1N0YWNrcyAtIFBpY2sgb25seSB0aGVzZSBzdGFja3MgZnJvbSB0aGUgY2xvdWQgYXNzZW1ibHlcbiAgICogQHJldHVybnMgQSBTbmFwc2hvdEFzc2VtYmx5LCB0aGUgY29sbGVjdGlvbiBvZiBhbGwgdGVtcGxhdGVzIGluIHRoaXMgc25hcHNob3QgYW5kIHJlcXVpcmVkIG1ldGEgZGF0YVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTbmFwc2hvdEFzc2VtYmx5KGNsb3VkQXNzZW1ibHlEaXI6IHN0cmluZywgcGlja1N0YWNrczogc3RyaW5nW10gPSBbXSk6IFNuYXBzaG90QXNzZW1ibHkge1xuICAgIGNvbnN0IGFzc2VtYmx5ID0gdGhpcy5yZWFkQXNzZW1ibHkoY2xvdWRBc3NlbWJseURpcik7XG4gICAgY29uc3Qgc3RhY2tzID0gYXNzZW1ibHkuc3RhY2tzO1xuICAgIGNvbnN0IHNuYXBzaG90czogU25hcHNob3RBc3NlbWJseSA9IHt9O1xuICAgIGZvciAoY29uc3QgW3N0YWNrTmFtZSwgc3RhY2tUZW1wbGF0ZV0gb2YgT2JqZWN0LmVudHJpZXMoc3RhY2tzKSkge1xuICAgICAgaWYgKHBpY2tTdGFja3MuaW5jbHVkZXMoc3RhY2tOYW1lKSkge1xuICAgICAgICBjb25zdCBtYW5pZmVzdCA9IEFzc2VtYmx5TWFuaWZlc3RSZWFkZXIuZnJvbVBhdGgoY2xvdWRBc3NlbWJseURpcik7XG4gICAgICAgIGNvbnN0IGFzc2V0cyA9IG1hbmlmZXN0LmdldEFzc2V0SWRzRm9yU3RhY2soc3RhY2tOYW1lKTtcblxuICAgICAgICBzbmFwc2hvdHNbc3RhY2tOYW1lXSA9IHtcbiAgICAgICAgICB0ZW1wbGF0ZXM6IHtcbiAgICAgICAgICAgIFtzdGFja05hbWVdOiBzdGFja1RlbXBsYXRlLFxuICAgICAgICAgICAgLi4uYXNzZW1ibHkuZ2V0TmVzdGVkU3RhY2tzRm9yU3RhY2soc3RhY2tOYW1lKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFzc2V0cyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc25hcHNob3RzO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvciBhIGdpdmVuIHN0YWNrIHJldHVybiBhbGwgcmVzb3VyY2UgdHlwZXMgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSBkZXN0cm95ZWRcbiAgICogYXMgcGFydCBvZiBhIHN0YWNrIHVwZGF0ZVxuICAgKlxuICAgKiBAcGFyYW0gc3RhY2tJZCAtIHRoZSBzdGFjayBpZFxuICAgKiBAcmV0dXJucyBhIGxpc3Qgb2YgcmVzb3VyY2UgdHlwZXMgb3IgdW5kZWZpbmVkIGlmIG5vbmUgYXJlIGZvdW5kXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldEFsbG93ZWREZXN0cm95VHlwZXNGb3JTdGFjayhzdGFja0lkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdIHwgdW5kZWZpbmVkPiB7XG4gICAgZm9yIChjb25zdCB0ZXN0Q2FzZSBvZiBPYmplY3QudmFsdWVzKChhd2FpdCB0aGlzLmhlbHBlci5hY3R1YWxUZXN0cygpKSA/PyB7fSkpIHtcbiAgICAgIGlmICh0ZXN0Q2FzZS5zdGFja3MuaW5jbHVkZXMoc3RhY2tJZCkpIHtcbiAgICAgICAgcmV0dXJuIHRlc3RDYXNlLmFsbG93RGVzdHJveTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIGFueSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBleGlzdGluZyBhbmQgZXhwZWN0ZWQgc25hcHNob3RzXG4gICAqXG4gICAqIEBwYXJhbSBleGlzdGluZyAtIHRoZSBleGlzdGluZyAoZXhwZWN0ZWQpIHNuYXBzaG90XG4gICAqIEBwYXJhbSBhY3R1YWwgLSB0aGUgbmV3IChhY3R1YWwpIHNuYXBzaG90XG4gICAqIEByZXR1cm5zIGFueSBkaWFnbm9zdGljcyBhbmQgYW55IGRlc3RydWN0aXZlIGNoYW5nZXNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZGlmZkFzc2VtYmx5KFxuICAgIGV4cGVjdGVkOiBTbmFwc2hvdEFzc2VtYmx5LFxuICAgIGFjdHVhbDogU25hcHNob3RBc3NlbWJseSxcbiAgKTogUHJvbWlzZTx7IGRpYWdub3N0aWNzOiBEaWFnbm9zdGljW107IGRlc3RydWN0aXZlQ2hhbmdlczogRGVzdHJ1Y3RpdmVDaGFuZ2VbXSB9PiB7XG4gICAgY29uc3QgZmFpbHVyZXM6IERpYWdub3N0aWNbXSA9IFtdO1xuICAgIGNvbnN0IGRlc3RydWN0aXZlQ2hhbmdlczogRGVzdHJ1Y3RpdmVDaGFuZ2VbXSA9IFtdO1xuXG4gICAgLy8gY2hlY2sgaWYgdGhlcmUgaXMgYSBDRk4gdGVtcGxhdGUgaW4gdGhlIGN1cnJlbnQgc25hcHNob3RcbiAgICAvLyB0aGF0IGRvZXMgbm90IGV4aXN0IGluIHRoZSBcImFjdHVhbFwiIHNuYXBzaG90XG4gICAgZm9yIChjb25zdCBbc3RhY2tJZCwgc3RhY2tdIG9mIE9iamVjdC5lbnRyaWVzKGV4cGVjdGVkKSkge1xuICAgICAgZm9yIChjb25zdCB0ZW1wbGF0ZUlkIG9mIE9iamVjdC5rZXlzKHN0YWNrLnRlbXBsYXRlcykpIHtcbiAgICAgICAgaWYgKCFhY3R1YWxbc3RhY2tJZF0/LnRlbXBsYXRlc1t0ZW1wbGF0ZUlkXSkge1xuICAgICAgICAgIGZhaWx1cmVzLnB1c2goe1xuICAgICAgICAgICAgdGVzdE5hbWU6IHRoaXMuaGVscGVyLnRlc3ROYW1lLFxuICAgICAgICAgICAgc3RhY2tOYW1lOiB0ZW1wbGF0ZUlkLFxuICAgICAgICAgICAgcmVhc29uOiBEaWFnbm9zdGljUmVhc29uLlNOQVBTSE9UX0ZBSUxFRCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGAke3RlbXBsYXRlSWR9IGV4aXN0cyBpbiBzbmFwc2hvdCwgYnV0IG5vdCBpbiBhY3R1YWxgLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBbc3RhY2tJZCwgc3RhY2tdIG9mIE9iamVjdC5lbnRyaWVzKGFjdHVhbCkpIHtcbiAgICAgIGZvciAoY29uc3QgdGVtcGxhdGVJZCBvZiBPYmplY3Qua2V5cyhzdGFjay50ZW1wbGF0ZXMpKSB7XG4gICAgICAvLyBjaGVjayBpZiB0aGVyZSBpcyBhIENGTiB0ZW1wbGF0ZSBpbiB0aGUgXCJhY3R1YWxcIiBzbmFwc2hvdFxuICAgICAgLy8gdGhhdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgY3VycmVudCBzbmFwc2hvdFxuICAgICAgICBpZiAoIWV4cGVjdGVkW3N0YWNrSWRdPy50ZW1wbGF0ZXNbdGVtcGxhdGVJZF0pIHtcbiAgICAgICAgICBmYWlsdXJlcy5wdXNoKHtcbiAgICAgICAgICAgIHRlc3ROYW1lOiB0aGlzLmhlbHBlci50ZXN0TmFtZSxcbiAgICAgICAgICAgIHN0YWNrTmFtZTogdGVtcGxhdGVJZCxcbiAgICAgICAgICAgIHJlYXNvbjogRGlhZ25vc3RpY1JlYXNvbi5TTkFQU0hPVF9GQUlMRUQsXG4gICAgICAgICAgICBtZXNzYWdlOiBgJHt0ZW1wbGF0ZUlkfSBkb2VzIG5vdCBleGlzdCBpbiBzbmFwc2hvdCwgYnV0IGRvZXMgaW4gYWN0dWFsYCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICAgICAgICBkaWZmQXNzZXRzOiAoYXdhaXQgdGhpcy5oZWxwZXIuYWN0dWFsU25hcHNob3QoKSkudGVzdERlZmluaXRpb24uZ2V0T3B0aW9uc0ZvclN0YWNrKHN0YWNrSWQpPy5kaWZmQXNzZXRzLFxuICAgICAgICAgIH07XG4gICAgICAgICAgbGV0IGFjdHVhbFRlbXBsYXRlID0gYWN0dWFsW3N0YWNrSWRdLnRlbXBsYXRlc1t0ZW1wbGF0ZUlkXTtcbiAgICAgICAgICBsZXQgZXhwZWN0ZWRUZW1wbGF0ZSA9IGV4cGVjdGVkW3N0YWNrSWRdLnRlbXBsYXRlc1t0ZW1wbGF0ZUlkXTtcblxuICAgICAgICAgIC8vIGlmIHdlIGFyZSBub3QgdmVyaWZ5aW5nIGFzc2V0IGhhc2hlcyB0aGVuIHJlbW92ZSB0aGUgc3BlY2lmaWNcbiAgICAgICAgICAvLyBhc3NldCBoYXNoZXMgZnJvbSB0aGUgdGVtcGxhdGVzIHNvIHRoZXkgYXJlIG5vdCBwYXJ0IG9mIHRoZSBkaWZmXG4gICAgICAgICAgLy8gY29tcGFyaXNvblxuICAgICAgICAgIGlmICghY29uZmlnLmRpZmZBc3NldHMpIHtcbiAgICAgICAgICAgIGFjdHVhbFRlbXBsYXRlID0gdGhpcy5jYW5vbmljYWxpemVUZW1wbGF0ZShhY3R1YWxUZW1wbGF0ZSwgYWN0dWFsW3N0YWNrSWRdLmFzc2V0cyk7XG4gICAgICAgICAgICBleHBlY3RlZFRlbXBsYXRlID0gdGhpcy5jYW5vbmljYWxpemVUZW1wbGF0ZShleHBlY3RlZFRlbXBsYXRlLCBleHBlY3RlZFtzdGFja0lkXS5hc3NldHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB0ZW1wbGF0ZURpZmYgPSBmdWxsRGlmZihleHBlY3RlZFRlbXBsYXRlLCBhY3R1YWxUZW1wbGF0ZSk7XG4gICAgICAgICAgaWYgKCF0ZW1wbGF0ZURpZmYuaXNFbXB0eSkge1xuICAgICAgICAgICAgY29uc3QgYWxsb3dlZERlc3Ryb3lUeXBlcyA9IChhd2FpdCB0aGlzLmdldEFsbG93ZWREZXN0cm95VHlwZXNGb3JTdGFjayhzdGFja0lkKSkgPz8gW107XG5cbiAgICAgICAgICAgIC8vIGdvIHRocm91Z2ggYWxsIHRoZSByZXNvdXJjZSBkaWZmZXJlbmNlcyBhbmQgY2hlY2sgZm9yIGFueVxuICAgICAgICAgICAgLy8gXCJkZXN0cnVjdGl2ZVwiIGNoYW5nZXNcbiAgICAgICAgICAgIHRlbXBsYXRlRGlmZi5yZXNvdXJjZXMuZm9yRWFjaERpZmZlcmVuY2UoKGxvZ2ljYWxJZDogc3RyaW5nLCBjaGFuZ2U6IFJlc291cmNlRGlmZmVyZW5jZSkgPT4ge1xuICAgICAgICAgICAgLy8gaWYgdGhlIGNoYW5nZSBpcyBhIHJlbW92YWwgaXQgd2lsbCBub3Qgc2hvdyB1cCBhcyBhICdjaGFuZ2VJbXBhY3QnXG4gICAgICAgICAgICAvLyBzbyBuZWVkIHRvIGNoZWNrIGZvciBpdCBzZXBhcmF0ZWx5LCB1bmxlc3MgaXQgaXMgYSByZXNvdXJjZVR5cGUgdGhhdFxuICAgICAgICAgICAgLy8gaGFzIGJlZW4gXCJhbGxvd2VkXCIgdG8gYmUgZGVzdHJveWVkXG4gICAgICAgICAgICAgIGNvbnN0IHJlc291cmNlVHlwZSA9IGNoYW5nZS5vbGRWYWx1ZT8uVHlwZSA/PyBjaGFuZ2UubmV3VmFsdWU/LlR5cGU7XG4gICAgICAgICAgICAgIGlmIChyZXNvdXJjZVR5cGUgJiYgYWxsb3dlZERlc3Ryb3lUeXBlcy5pbmNsdWRlcyhyZXNvdXJjZVR5cGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChjaGFuZ2UuaXNSZW1vdmFsKSB7XG4gICAgICAgICAgICAgICAgZGVzdHJ1Y3RpdmVDaGFuZ2VzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgaW1wYWN0OiBSZXNvdXJjZUltcGFjdC5XSUxMX0RFU1RST1ksXG4gICAgICAgICAgICAgICAgICBsb2dpY2FsSWQsXG4gICAgICAgICAgICAgICAgICBzdGFja05hbWU6IHRlbXBsYXRlSWQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChjaGFuZ2UuY2hhbmdlSW1wYWN0KSB7XG4gICAgICAgICAgICAgICAgICBjYXNlIFJlc291cmNlSW1wYWN0Lk1BWV9SRVBMQUNFOlxuICAgICAgICAgICAgICAgICAgY2FzZSBSZXNvdXJjZUltcGFjdC5XSUxMX09SUEhBTjpcbiAgICAgICAgICAgICAgICAgIGNhc2UgUmVzb3VyY2VJbXBhY3QuV0lMTF9ERVNUUk9ZOlxuICAgICAgICAgICAgICAgICAgY2FzZSBSZXNvdXJjZUltcGFjdC5XSUxMX1JFUExBQ0U6XG4gICAgICAgICAgICAgICAgICAgIGRlc3RydWN0aXZlQ2hhbmdlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICBpbXBhY3Q6IGNoYW5nZS5jaGFuZ2VJbXBhY3QsXG4gICAgICAgICAgICAgICAgICAgICAgbG9naWNhbElkLFxuICAgICAgICAgICAgICAgICAgICAgIHN0YWNrTmFtZTogdGVtcGxhdGVJZCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCB3cml0YWJsZSA9IG5ldyBTdHJpbmdXcml0YWJsZSh7fSk7XG4gICAgICAgICAgICBmb3JtYXREaWZmZXJlbmNlcyh3cml0YWJsZSwgdGVtcGxhdGVEaWZmKTtcbiAgICAgICAgICAgIGZhaWx1cmVzLnB1c2goe1xuICAgICAgICAgICAgICByZWFzb246IERpYWdub3N0aWNSZWFzb24uU05BUFNIT1RfRkFJTEVELFxuICAgICAgICAgICAgICBtZXNzYWdlOiB3cml0YWJsZS5kYXRhLFxuICAgICAgICAgICAgICBzdGFja05hbWU6IHRlbXBsYXRlSWQsXG4gICAgICAgICAgICAgIHRlc3ROYW1lOiB0aGlzLmhlbHBlci50ZXN0TmFtZSxcbiAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRpYWdub3N0aWNzOiBmYWlsdXJlcyxcbiAgICAgIGRlc3RydWN0aXZlQ2hhbmdlcyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkQXNzZW1ibHkoZGlyOiBzdHJpbmcpOiBBc3NlbWJseU1hbmlmZXN0UmVhZGVyIHtcbiAgICByZXR1cm4gQXNzZW1ibHlNYW5pZmVzdFJlYWRlci5mcm9tUGF0aChkaXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZHVjZSB0ZW1wbGF0ZSB0byBhIG5vcm1hbCBmb3JtIHdoZXJlIGFzc2V0IHJlZmVyZW5jZXMgaGF2ZSBiZWVuIG5vcm1hbGl6ZWRcbiAgICpcbiAgICogVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBjb21wYXJlIHRlbXBsYXRlcyBpZiBhbGwgdGhhdCdzIGRpZmZlcmVudCBiZXR3ZWVuXG4gICAqIHRoZW0gaXMgdGhlIGhhc2hlcyBvZiB0aGUgYXNzZXQgdmFsdWVzLlxuICAgKi9cbiAgcHJpdmF0ZSBjYW5vbmljYWxpemVUZW1wbGF0ZSh0ZW1wbGF0ZTogYW55LCBhc3NldHM6IHN0cmluZ1tdKTogYW55IHtcbiAgICBjb25zdCBhc3NldHNTZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3Qgc3RyaW5nU3Vic3RpdHV0aW9ucyA9IG5ldyBBcnJheTxbUmVnRXhwLCBzdHJpbmddPigpO1xuXG4gICAgLy8gRmluZCBhc3NldHMgdmlhIHBhcmFtZXRlcnMgKGZvciBMZWdhY3lTdGFja1N5bnRoZXNpemVyKVxuICAgIGNvbnN0IHBhcmFtUmUgPSAvXkFzc2V0UGFyYW1ldGVycyhbYS16QS1aMC05XXs2NH0pKFMzQnVja2V0fFMzVmVyc2lvbktleXxBcnRpZmFjdEhhc2gpKFthLXpBLVowLTldezh9KSQvO1xuICAgIGZvciAoY29uc3QgcGFyYW1OYW1lIG9mIE9iamVjdC5rZXlzKHRlbXBsYXRlPy5QYXJhbWV0ZXJzIHx8IHt9KSkge1xuICAgICAgY29uc3QgbSA9IHBhcmFtUmUuZXhlYyhwYXJhbU5hbWUpO1xuICAgICAgaWYgKCFtKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKGFzc2V0c1NlZW4uaGFzKG1bMV0pKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBhc3NldHNTZWVuLmFkZChtWzFdKTtcbiAgICAgIGNvbnN0IGl4ID0gYXNzZXRzU2Vlbi5zaXplO1xuXG4gICAgICAvLyBGdWxsIHBhcmFtZXRlciByZWZlcmVuY2VcbiAgICAgIHN0cmluZ1N1YnN0aXR1dGlvbnMucHVzaChbXG4gICAgICAgIG5ldyBSZWdFeHAoYEFzc2V0UGFyYW1ldGVycyR7bVsxXX0oUzNCdWNrZXR8UzNWZXJzaW9uS2V5fEFydGlmYWN0SGFzaCkoW2EtekEtWjAtOV17OH0pYCksXG4gICAgICAgIGBBc3NldCR7aXh9JDFgLFxuICAgICAgXSk7XG4gICAgICAvLyBTdWJzdHJpbmcgYXNzZXQgaGFzaCByZWZlcmVuY2VcbiAgICAgIHN0cmluZ1N1YnN0aXR1dGlvbnMucHVzaChbXG4gICAgICAgIG5ldyBSZWdFeHAoYCR7bVsxXX1gKSxcbiAgICAgICAgYEFzc2V0JHtpeH1IYXNoYCxcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIC8vIGZpbmQgYXNzZXRzIGRlZmluZWQgaW4gdGhlIGFzc2V0IG1hbmlmZXN0XG4gICAgdHJ5IHtcbiAgICAgIGFzc2V0cy5mb3JFYWNoKGFzc2V0ID0+IHtcbiAgICAgICAgaWYgKCFhc3NldHNTZWVuLmhhcyhhc3NldCkpIHtcbiAgICAgICAgICBhc3NldHNTZWVuLmFkZChhc3NldCk7XG4gICAgICAgICAgY29uc3QgaXggPSBhc3NldHNTZWVuLnNpemU7XG4gICAgICAgICAgc3RyaW5nU3Vic3RpdHV0aW9ucy5wdXNoKFtcbiAgICAgICAgICAgIG5ldyBSZWdFeHAoYXNzZXQpLFxuICAgICAgICAgICAgYEFzc2V0JHtpeH0kMWAsXG4gICAgICAgICAgXSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gYXNzZXQgbWFuaWZlc3QgdGhhdCBpcyBmaW5lLlxuICAgIH1cblxuICAgIC8vIFN1YnN0aXR1dGUgdGhlbSBvdXRcbiAgICByZXR1cm4gc3Vic3RpdHV0ZSh0ZW1wbGF0ZSk7XG5cbiAgICBmdW5jdGlvbiBzdWJzdGl0dXRlKHdoYXQ6IGFueSk6IGFueSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh3aGF0KSkge1xuICAgICAgICByZXR1cm4gd2hhdC5tYXAoc3Vic3RpdHV0ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygd2hhdCA9PT0gJ29iamVjdCcgJiYgd2hhdCAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCByZXQ6IGFueSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyh3aGF0KSkge1xuICAgICAgICAgIHJldFtzdHJpbmdTdWIoayldID0gc3Vic3RpdHV0ZSh2KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHdoYXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmdTdWIod2hhdCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB3aGF0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0cmluZ1N1Yih4OiBzdHJpbmcpIHtcbiAgICAgIGZvciAoY29uc3QgW3JlLCByZXBsYWNlbWVudF0gb2Ygc3RyaW5nU3Vic3RpdHV0aW9ucykge1xuICAgICAgICB4ID0geC5yZXBsYWNlKHJlLCByZXBsYWNlbWVudCk7XG4gICAgICB9XG4gICAgICByZXR1cm4geDtcbiAgICB9XG4gIH1cbn1cblxuY2xhc3MgU3RyaW5nV3JpdGFibGUgZXh0ZW5kcyBXcml0YWJsZSB7XG4gIHB1YmxpYyBkYXRhOiBzdHJpbmc7XG4gIHByaXZhdGUgX2RlY29kZXI6IFN0cmluZ0RlY29kZXI7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFdyaXRhYmxlT3B0aW9ucykge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuICAgIHRoaXMuX2RlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcigpO1xuICAgIHRoaXMuZGF0YSA9ICcnO1xuICB9XG5cbiAgX3dyaXRlKGNodW5rOiBhbnksIGVuY29kaW5nOiBzdHJpbmcsIGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvciB8IG51bGwpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBpZiAoZW5jb2RpbmcgPT09ICdidWZmZXInKSB7XG4gICAgICBjaHVuayA9IHRoaXMuX2RlY29kZXIud3JpdGUoY2h1bmspO1xuICAgIH1cblxuICAgIHRoaXMuZGF0YSArPSBjaHVuaztcbiAgICBjYWxsYmFjaygpO1xuICB9XG5cbiAgX2ZpbmFsKGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvciB8IG51bGwpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGEgKz0gdGhpcy5fZGVjb2Rlci5lbmQoKTtcbiAgICBjYWxsYmFjaygpO1xuICB9XG59XG4iXX0=
|
package/lib/unstable-features.js
CHANGED
|
@@ -1,9 +1,42 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.UNSTABLE_FEATURES = exports.FeatureStatus = void 0;
|
|
4
37
|
exports.processUnstableFeatures = processUnstableFeatures;
|
|
5
38
|
exports.availableFeaturesDescription = availableFeaturesDescription;
|
|
6
|
-
const logger = require("./logger");
|
|
39
|
+
const logger = __importStar(require("./logger"));
|
|
7
40
|
/**
|
|
8
41
|
* Status of an unstable feature
|
|
9
42
|
*/
|
|
@@ -81,4 +114,4 @@ function availableFeaturesDescription() {
|
|
|
81
114
|
}
|
|
82
115
|
return `Available features: ${availableFeatures.join(', ')}.`;
|
|
83
116
|
}
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5zdGFibGUtZmVhdHVyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1bnN0YWJsZS1mZWF0dXJlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnREEsMERBbUNDO0FBT0Qsb0VBVUM7QUFwR0QsaURBQW1DO0FBRW5DOztHQUVHO0FBQ0gsSUFBWSxhQU9YO0FBUEQsV0FBWSxhQUFhO0lBQ3ZCLG9EQUFvRDtJQUNwRCx3Q0FBdUIsQ0FBQTtJQUN2Qiw4REFBOEQ7SUFDOUQsMENBQXlCLENBQUE7SUFDekIsd0RBQXdEO0lBQ3hELG9DQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFQVyxhQUFhLDZCQUFiLGFBQWEsUUFPeEI7QUFjRDs7R0FFRztBQUNVLFFBQUEsaUJBQWlCLEdBQW9DO0lBQ2hFLHVCQUF1QixFQUFFO1FBQ3ZCLE1BQU0sRUFBRSxhQUFhLENBQUMsT0FBTztRQUM3QixrQkFBa0IsRUFBRSxnV0FBZ1c7UUFDcFgsY0FBYyxFQUFFLG9IQUFvSDtLQUNySTtJQUNELG9CQUFvQixFQUFFO1FBQ3BCLE1BQU0sRUFBRSxhQUFhLENBQUMsT0FBTztRQUM3QixrQkFBa0IsRUFBRSxvTUFBb007UUFDeE4sY0FBYyxFQUFFLDZGQUE2RjtLQUM5RztDQUNGLENBQUM7QUFFRjs7Ozs7R0FLRztBQUNILFNBQWdCLHVCQUF1QixDQUFDLG1CQUE2QixFQUFFO0lBQ3JFLE1BQU0sYUFBYSxHQUFhLEVBQUUsQ0FBQztJQUVuQyxLQUFLLE1BQU0sV0FBVyxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDM0MsTUFBTSxPQUFPLEdBQUcseUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFL0MsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2Isb0NBQW9DO1lBQ3BDLE1BQU0sQ0FBQyxPQUFPLENBQUMsOEJBQThCLFdBQVcsaUNBQWlDLENBQUMsQ0FBQztZQUMzRixTQUFTO1FBQ1gsQ0FBQztRQUVELFFBQVEsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3ZCLEtBQUssYUFBYSxDQUFDLE9BQU87Z0JBQ3hCLHlEQUF5RDtnQkFDekQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7Z0JBQzFELElBQUksT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUMzQixNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDekMsQ0FBQztnQkFDRCxNQUFNO1lBRVIsS0FBSyxhQUFhLENBQUMsVUFBVTtnQkFDM0IsNENBQTRDO2dCQUM1QyxNQUFNLENBQUMsT0FBTyxDQUFDLGdCQUFnQixPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO2dCQUM3RCxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUNoQyxNQUFNO1lBRVIsS0FBSyxhQUFhLENBQUMsU0FBUztnQkFDMUIsNENBQTRDO2dCQUM1QyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUNoQyxNQUFNO1FBQ1YsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLGFBQWEsQ0FBQztBQUN2QixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLDRCQUE0QjtJQUMxQyxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMseUJBQWlCLENBQUM7U0FDeEQsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssYUFBYSxDQUFDLFNBQVMsQ0FBQztTQUNwRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUV6QixJQUFJLGlCQUFpQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNuQyxPQUFPLCtDQUErQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxPQUFPLHVCQUF1QixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNoRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcblxuLyoqXG4gKiBTdGF0dXMgb2YgYW4gdW5zdGFibGUgZmVhdHVyZVxuICovXG5leHBvcnQgZW51bSBGZWF0dXJlU3RhdHVzIHtcbiAgLyoqIEZlYXR1cmUgaXMgYWN0aXZlbHkgc3VwcG9ydGVkIGFuZCBjYW4gYmUgdXNlZCAqL1xuICBTVVBQT1JURUQgPSAnc3VwcG9ydGVkJyxcbiAgLyoqIEZlYXR1cmUgaXMgZGVwcmVjYXRlZCBidXQgc3RpbGwgZnVuY3Rpb25hbCAtIHdhcm5zIHVzZXIgKi9cbiAgREVQUkVDQVRFRCA9ICdkZXByZWNhdGVkJyxcbiAgLyoqIEZlYXR1cmUgaGFzIGJlZW4gcmVtb3ZlZCAtIHdhcm5zIHVzZXIgYW5kIGlnbm9yZXMgKi9cbiAgUkVNT1ZFRCA9ICdyZW1vdmVkJyxcbn1cblxuLyoqXG4gKiBEZWZpbml0aW9uIG9mIGFuIHVuc3RhYmxlIGZlYXR1cmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVbnN0YWJsZUZlYXR1cmUge1xuICAvKiogQ3VycmVudCBzdGF0dXMgb2YgdGhlIGZlYXR1cmUgKi9cbiAgcmVhZG9ubHkgc3RhdHVzOiBGZWF0dXJlU3RhdHVzO1xuICAvKiogV2FybmluZyBtZXNzYWdlIHRvIGRpc3BsYXkgd2hlbiByZXF1ZXN0ZWQgZmVhdHVyZSBpcyBkZXByZWNhdGVkICovXG4gIHJlYWRvbmx5IGRlcHJlY2F0aW9uTWVzc2FnZTogc3RyaW5nO1xuICAvKiogTWVzc2FnZSB0byBkaXNwbGF5IGZvciByZXF1ZXN0ZWQgZmVhdHVyZXMgdGhhdCBhcmUgcmVtb3ZlZCAqL1xuICByZWFkb25seSByZW1vdmFsTWVzc2FnZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlZ2lzdHJ5IG9mIGFsbCB1bnN0YWJsZSBmZWF0dXJlc1xuICovXG5leHBvcnQgY29uc3QgVU5TVEFCTEVfRkVBVFVSRVM6IFJlY29yZDxzdHJpbmcsIFVuc3RhYmxlRmVhdHVyZT4gPSB7XG4gICdkZXByZWNhdGVkLWNsaS1lbmdpbmUnOiB7XG4gICAgc3RhdHVzOiBGZWF0dXJlU3RhdHVzLlJFTU9WRUQsXG4gICAgZGVwcmVjYXRpb25NZXNzYWdlOiAnWW91IGhhdmUgb3B0ZWQtaW4gdG8gdXNlIHRoZSBkZXByZWNhdGVkIENMSSBlbmdpbmUgd2hpY2ggaXMgc2NoZWR1bGVkIHRvIGJlIHJlbW92ZWQgaW4gSmFudWFyeSAyMDI2LiBJZiB5b3UgaGF2ZSBlbmNvdW50ZXJlZCBibG9ja2VycyB3aGlsZSB1c2luZyB0aGUgbmV3IGRlZmF1bHQgZW5naW5lLCBwbGVhc2UgbGV0IHVzIGtub3cgYnkgb3BlbmluZyBhbiBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrLWNsaS9pc3N1ZXMvbmV3L2Nob29zZVxcblxcblRvIHVzZSB0aGUgbmV3IGRlZmF1bHQgZW5naW5lLCByZW1vdmUgdGhlIGAtLXVuc3RhYmxlPWRlcHJlY2F0ZWQtY2xpLWVuZ2luZWAgb3B0aW9uLicsXG4gICAgcmVtb3ZhbE1lc3NhZ2U6ICdUaGUgQ0xJIGVuZ2luZSBoYXMgYmVlbiByZW1vdmVkLiBUaGUgdG9vbGtpdC1saWIgZW5naW5lIGlzIG5vdyB0aGUgb25seSBzdXBwb3J0ZWQgZW5naW5lLiBQbGVhc2UgcmVtb3ZlIHRoaXMgZmxhZy4nLFxuICB9LFxuICAndG9vbGtpdC1saWItZW5naW5lJzoge1xuICAgIHN0YXR1czogRmVhdHVyZVN0YXR1cy5SRU1PVkVELFxuICAgIGRlcHJlY2F0aW9uTWVzc2FnZTogJ1RoZSB0b29sa2l0LWxpYiBlbmdpbmUgaXMgbm93IHRoZSBkZWZhdWx0IGVuZ2luZS4gVGhpcyBmbGFnIGNhbiBiZSBzYWZlbHkgcmVtb3ZlZC4gWW91IG1heSBjaG9vc2UgdG8gdGVtcG9yYXJpbHkgcmV2ZXJ0IHRvIHRoZSBvbGQgZW5naW5lIGJ5IGFkZGluZyB0aGUgYC0tdW5zdGFibGU9ZGVwcmVjYXRlZC1jbGktZW5naW5lYCBvcHRpb24uJyxcbiAgICByZW1vdmFsTWVzc2FnZTogJ1RoZSB0b29sa2l0LWxpYiBlbmdpbmUgaXMgbm93IHRoZSBkZWZhdWx0IGFuZCBvbmx5IGVuZ2luZS4gVGhpcyBmbGFnIGNhbiBiZSBzYWZlbHkgcmVtb3ZlZC4nLFxuICB9LFxufTtcblxuLyoqXG4gKiBQcm9jZXNzIHVuc3RhYmxlIGZlYXR1cmUgZmxhZ3MgYW5kIGVtaXQgYXBwcm9wcmlhdGUgd2FybmluZ3NcbiAqXG4gKiBAcGFyYW0gdW5zdGFibGVGZWF0dXJlcyAtIEFycmF5IG9mIGZlYXR1cmUgbmFtZXMgZnJvbSBDTEkgLS11bnN0YWJsZSBvcHRpb25cbiAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkLCBlbmFibGVkIGZlYXR1cmUgbmFtZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NVbnN0YWJsZUZlYXR1cmVzKHVuc3RhYmxlRmVhdHVyZXM6IHN0cmluZ1tdID0gW10pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHZhbGlkRmVhdHVyZXM6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCBmZWF0dXJlTmFtZSBvZiB1bnN0YWJsZUZlYXR1cmVzKSB7XG4gICAgY29uc3QgZmVhdHVyZSA9IFVOU1RBQkxFX0ZFQVRVUkVTW2ZlYXR1cmVOYW1lXTtcblxuICAgIGlmICghZmVhdHVyZSkge1xuICAgICAgLy8gVW5rbm93biBmZWF0dXJlIC0gd2FybiBhbmQgaWdub3JlXG4gICAgICBsb2dnZXIud2FybmluZyhgVW5rbm93biB1bnN0YWJsZSBmZWF0dXJlOiAnJHtmZWF0dXJlTmFtZX0nLiBUaGlzIG9wdGlvbiB3aWxsIGJlIGlnbm9yZWQuYCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGZlYXR1cmUuc3RhdHVzKSB7XG4gICAgICBjYXNlIEZlYXR1cmVTdGF0dXMuUkVNT1ZFRDpcbiAgICAgICAgLy8gUmVtb3ZlZCBmZWF0dXJlIC0gd2FybiB3aXRoIHJlbW92YWwgbWVzc2FnZSBhbmQgaWdub3JlXG4gICAgICAgIGxvZ2dlci53YXJuaW5nKGBbUmVtb3ZlZF0gJHtmZWF0dXJlLmRlcHJlY2F0aW9uTWVzc2FnZX1gKTtcbiAgICAgICAgaWYgKGZlYXR1cmUucmVtb3ZhbE1lc3NhZ2UpIHtcbiAgICAgICAgICBsb2dnZXIud2FybmluZyhmZWF0dXJlLnJlbW92YWxNZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBGZWF0dXJlU3RhdHVzLkRFUFJFQ0FURUQ6XG4gICAgICAgIC8vIERlcHJlY2F0ZWQgZmVhdHVyZSAtIHdhcm4gYnV0IHN0aWxsIGFwcGx5XG4gICAgICAgIGxvZ2dlci53YXJuaW5nKGBbRGVwcmVjYXRlZF0gJHtmZWF0dXJlLmRlcHJlY2F0aW9uTWVzc2FnZX1gKTtcbiAgICAgICAgdmFsaWRGZWF0dXJlcy5wdXNoKGZlYXR1cmVOYW1lKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgRmVhdHVyZVN0YXR1cy5TVVBQT1JURUQ6XG4gICAgICAgIC8vIFN1cHBvcnRlZCBmZWF0dXJlIC0gYXBwbHkgd2l0aG91dCB3YXJuaW5nXG4gICAgICAgIHZhbGlkRmVhdHVyZXMucHVzaChmZWF0dXJlTmFtZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWxpZEZlYXR1cmVzO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBkZXNjcmlwdGlvbiBvZiBhdmFpbGFibGUgdW5zdGFibGUgZmVhdHVyZXMgZm9yIENMSSBoZWxwIHRleHRcbiAqXG4gKiBAcmV0dXJucyBBIHN0cmluZyBkZXNjcmliaW5nIGF2YWlsYWJsZSBmZWF0dXJlcyBvciBpbmRpY2F0aW5nIG5vbmUgYXJlIGF2YWlsYWJsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXZhaWxhYmxlRmVhdHVyZXNEZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICBjb25zdCBhdmFpbGFibGVGZWF0dXJlcyA9IE9iamVjdC5lbnRyaWVzKFVOU1RBQkxFX0ZFQVRVUkVTKVxuICAgIC5maWx0ZXIoKFtfLCBmZWF0dXJlXSkgPT4gZmVhdHVyZS5zdGF0dXMgPT09IEZlYXR1cmVTdGF0dXMuU1VQUE9SVEVEKVxuICAgIC5tYXAoKFtuYW1lXSkgPT4gbmFtZSk7XG5cbiAgaWYgKGF2YWlsYWJsZUZlYXR1cmVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnQ3VycmVudGx5IG5vIHVuc3RhYmxlIGZlYXR1cmVzIGFyZSBhdmFpbGFibGUuJztcbiAgfVxuXG4gIHJldHVybiBgQXZhaWxhYmxlIGZlYXR1cmVzOiAke2F2YWlsYWJsZUZlYXR1cmVzLmpvaW4oJywgJyl9LmA7XG59XG4iXX0=
|