testcafe 2.2.0 → 2.3.1
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/CHANGELOG.md +82 -0
- package/bin/testcafe-with-v8-flag-filter.js +16 -3
- package/lib/api/exportable-lib/index.mjs +27 -0
- package/lib/api/structure/fixture.js +7 -3
- package/lib/api/structure/test.js +8 -3
- package/lib/api/structure/testing-unit.js +15 -1
- package/lib/api/test-controller/index.js +4 -4
- package/lib/browser/connection/gateway.js +13 -1
- package/lib/browser/connection/index.js +10 -1
- package/lib/browser/connection/service-routes.js +2 -1
- package/lib/browser/provider/built-in/dedicated/chrome/index.js +6 -1
- package/lib/browser/provider/index.js +4 -1
- package/lib/cli/argument-parser/index.js +58 -59
- package/lib/cli/cli.js +3 -2
- package/lib/client/automation/index.js +90 -4
- package/lib/client/automation/index.min.js +1 -1
- package/lib/client/browser/idle-page/index.js +7 -5
- package/lib/client/core/deps/hammerhead.js +24 -0
- package/lib/client/core/index.js +42 -7
- package/lib/client/core/index.min.js +1 -1
- package/lib/client/core/utils/values/axis-values.js +43 -0
- package/lib/client/driver/index.js +336 -211
- package/lib/client/driver/index.min.js +1 -1
- package/lib/client/test-run/iframe.js.mustache +2 -1
- package/lib/client/test-run/index.js.mustache +30 -28
- package/lib/client/ui/index.js +33 -23
- package/lib/client/ui/index.min.js +1 -1
- package/lib/compiler/babel/load-libs.js +10 -9
- package/lib/compiler/compilers.js +7 -7
- package/lib/compiler/esm-loader.js +38 -0
- package/lib/compiler/index.js +8 -7
- package/lib/compiler/interfaces.js +1 -1
- package/lib/compiler/prevent-module-caching-suffix.js +6 -0
- package/lib/compiler/test-file/add-export-api.js +3 -9
- package/lib/compiler/test-file/api-based.js +30 -14
- package/lib/compiler/test-file/base.js +4 -1
- package/lib/compiler/test-file/formats/coffeescript/compiler.js +5 -4
- package/lib/compiler/test-file/formats/es-next/compiler.js +21 -11
- package/lib/compiler/test-file/formats/extensions.js +15 -0
- package/lib/compiler/test-file/formats/typescript/compiler.js +27 -17
- package/lib/compiler/test-file/get-exportable-lib-path.js +17 -0
- package/lib/configuration/option-names.js +2 -1
- package/lib/custom-client-scripts/get-code.js +4 -3
- package/lib/custom-client-scripts/routing.js +3 -3
- package/lib/errors/is-internal-stack-frame.js +3 -2
- package/lib/errors/process-test-fn-error.js +3 -2
- package/lib/errors/runtime/index.js +18 -4
- package/lib/errors/runtime/templates.js +2 -1
- package/lib/errors/test-run/utils.js +8 -3
- package/lib/errors/types.js +2 -1
- package/lib/proxyless/api-base.js +25 -0
- package/lib/proxyless/client/event-simulator.js +40 -0
- package/lib/proxyless/client/types.js +11 -0
- package/lib/proxyless/client/utils.js +24 -0
- package/lib/proxyless/cookie-provider.js +3 -3
- package/lib/proxyless/index.js +20 -2
- package/lib/proxyless/request-hooks/event-factory/frame-navigated-event-based.js +40 -0
- package/lib/proxyless/request-hooks/event-factory/request-paused-event-based.js +95 -0
- package/lib/proxyless/request-hooks/event-provider.js +6 -54
- package/lib/proxyless/request-pipeline/context-info.js +55 -0
- package/lib/proxyless/request-pipeline/index.js +73 -31
- package/lib/proxyless/request-pipeline/resendAuthRequest.js +23 -0
- package/lib/proxyless/request-pipeline/special-handlers.js +2 -2
- package/lib/proxyless/request-pipeline/test-run-bridge.js +45 -0
- package/lib/proxyless/resource-injector.js +41 -29
- package/lib/proxyless/session-storage/index.js +39 -0
- package/lib/proxyless/storages-provider.js +17 -0
- package/lib/proxyless/types.js +8 -1
- package/lib/proxyless/utils/cdp.js +29 -2
- package/lib/proxyless/utils/get-active-client.js +8 -0
- package/lib/runner/bootstrapper.js +3 -2
- package/lib/runner/browser-job.js +1 -1
- package/lib/runner/task/index.js +2 -2
- package/lib/services/compiler/service.js +4 -4
- package/lib/services/utils/ipc/interfaces.js +1 -1
- package/lib/services/utils/ipc/proxy.js +1 -4
- package/lib/shared/utils/is-file-protocol.js +9 -0
- package/lib/test-run/commands/actions.js +2 -2
- package/lib/test-run/index.js +21 -6
- package/lib/test-run/request/send.js +20 -13
- package/lib/test-run/storages/base.js +16 -0
- package/lib/test-run/storages/factory.js +12 -0
- package/lib/testcafe.js +3 -3
- package/lib/utils/async-event-emitter.js +1 -1
- package/lib/utils/convert-to-best-fit-type.js +1 -1
- package/lib/utils/get-options/base.js +1 -1
- package/lib/utils/setup-sourcemap-support.js +10 -4
- package/package.json +13 -8
- package/ts-defs/index.d.ts +4 -4
- package/ts-defs/selectors.d.ts +2 -2
- package/ts-defs/testcafe-scripts.d.ts +2 -2
- package/lib/compiler/test-file/exportble-lib-path.js +0 -7
- package/lib/proxyless/request-hooks/event-factory.js +0 -95
|
@@ -7,20 +7,14 @@ const fixture_1 = __importDefault(require("../../api/structure/fixture"));
|
|
|
7
7
|
const test_1 = __importDefault(require("../../api/structure/test"));
|
|
8
8
|
function default_1(testFile, exportableLibExports, { isCompilerServiceMode, baseUrl, } = {}) {
|
|
9
9
|
Object.defineProperty(exportableLibExports, 'fixture', {
|
|
10
|
-
get: () =>
|
|
10
|
+
get: () => fixture_1.default.init({ testFile, baseUrl }),
|
|
11
11
|
configurable: true,
|
|
12
12
|
});
|
|
13
13
|
Object.defineProperty(exportableLibExports, 'test', {
|
|
14
|
-
get: () => {
|
|
15
|
-
// NOTE: After wrapping the "import { test } from 'testcafe'" statement
|
|
16
|
-
// in service functions of the 'esm' module
|
|
17
|
-
// the 'test' directive executed a few times before the 'fixture' directive.
|
|
18
|
-
// We need to pass an additional flag to ensure correct 'Test' function loading.
|
|
19
|
-
return new test_1.default(testFile, isCompilerServiceMode, baseUrl);
|
|
20
|
-
},
|
|
14
|
+
get: () => test_1.default.init({ testFile, isCompilerServiceMode, baseUrl }),
|
|
21
15
|
configurable: true,
|
|
22
16
|
});
|
|
23
17
|
}
|
|
24
18
|
exports.default = default_1;
|
|
25
19
|
module.exports = exports.default;
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWV4cG9ydC1hcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcGlsZXIvdGVzdC1maWxlL2FkZC1leHBvcnQtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsMEVBQWtEO0FBQ2xELG9FQUE0QztBQUc1QyxtQkFBeUIsUUFBa0IsRUFBRSxvQkFBeUIsRUFBRSxFQUNwRSxxQkFBcUIsRUFDckIsT0FBTyxNQUNvQixFQUFFO0lBQzdCLE1BQU0sQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsU0FBUyxFQUFFO1FBQ25ELEdBQUcsRUFBVyxHQUFHLEVBQUUsQ0FBQyxpQkFBTyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN2RCxZQUFZLEVBQUUsSUFBSTtLQUNyQixDQUFDLENBQUM7SUFFSCxNQUFNLENBQUMsY0FBYyxDQUFDLG9CQUFvQixFQUFFLE1BQU0sRUFBRTtRQUNoRCxHQUFHLEVBQVcsR0FBRyxFQUFFLENBQUMsY0FBSSxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUMzRSxZQUFZLEVBQUUsSUFBSTtLQUNyQixDQUFDLENBQUM7QUFDUCxDQUFDO0FBYkQsNEJBYUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVGVzdEZpbGUgZnJvbSAnLi4vLi4vYXBpL3N0cnVjdHVyZS90ZXN0LWZpbGUnO1xuaW1wb3J0IEZpeHR1cmUgZnJvbSAnLi4vLi4vYXBpL3N0cnVjdHVyZS9maXh0dXJlJztcbmltcG9ydCBUZXN0IGZyb20gJy4uLy4uL2FwaS9zdHJ1Y3R1cmUvdGVzdCc7XG5pbXBvcnQgeyBPcHRpb25hbENvbXBpbGVyQXJndW1lbnRzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICh0ZXN0RmlsZTogVGVzdEZpbGUsIGV4cG9ydGFibGVMaWJFeHBvcnRzOiBhbnksIHtcbiAgICBpc0NvbXBpbGVyU2VydmljZU1vZGUsXG4gICAgYmFzZVVybCxcbn06IE9wdGlvbmFsQ29tcGlsZXJBcmd1bWVudHMgPSB7fSk6IHZvaWQge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRhYmxlTGliRXhwb3J0cywgJ2ZpeHR1cmUnLCB7XG4gICAgICAgIGdldDogICAgICAgICAgKCkgPT4gRml4dHVyZS5pbml0KHsgdGVzdEZpbGUsIGJhc2VVcmwgfSksXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRhYmxlTGliRXhwb3J0cywgJ3Rlc3QnLCB7XG4gICAgICAgIGdldDogICAgICAgICAgKCkgPT4gVGVzdC5pbml0KHsgdGVzdEZpbGUsIGlzQ29tcGlsZXJTZXJ2aWNlTW9kZSwgYmFzZVVybCB9KSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIH0pO1xufVxuIl19
|
|
@@ -18,18 +18,22 @@ const cache_proxy_1 = __importDefault(require("./cache-proxy"));
|
|
|
18
18
|
const exportable_lib_1 = __importDefault(require("../../api/exportable-lib"));
|
|
19
19
|
const test_file_temp_variable_name_1 = __importDefault(require("./test-file-temp-variable-name"));
|
|
20
20
|
const add_export_api_1 = __importDefault(require("./add-export-api"));
|
|
21
|
+
const url_1 = __importDefault(require("url"));
|
|
22
|
+
const prevent_module_caching_suffix_1 = __importDefault(require("../prevent-module-caching-suffix"));
|
|
21
23
|
const CWD = process.cwd();
|
|
22
24
|
const FIXTURE_RE = /(^|;|\s+)fixture\s*(\.|\(|`)/;
|
|
23
25
|
const TEST_RE = /(^|;|\s+)test\s*(\.|\()/;
|
|
24
26
|
const TESTCAFE_LIB_FOLDER_NAME = 'lib';
|
|
25
27
|
const Module = module.constructor;
|
|
28
|
+
const errRequireEsmErrorCode = 'ERR_REQUIRE_ESM';
|
|
26
29
|
class APIBasedTestFileCompilerBase extends base_1.default {
|
|
27
|
-
constructor({ isCompilerServiceMode, baseUrl }) {
|
|
30
|
+
constructor({ isCompilerServiceMode, baseUrl, experimentalEsm }) {
|
|
28
31
|
super({ baseUrl });
|
|
29
32
|
this.isCompilerServiceMode = isCompilerServiceMode;
|
|
30
33
|
this.cache = Object.create(null);
|
|
31
34
|
this.origRequireExtensions = Object.create(null);
|
|
32
35
|
this.cachePrefix = (0, nanoid_1.nanoid)(7);
|
|
36
|
+
this.experimentalEsm = experimentalEsm;
|
|
33
37
|
}
|
|
34
38
|
static _getNodeModulesLookupPath(filename) {
|
|
35
39
|
const dir = (0, path_1.dirname)(filename);
|
|
@@ -42,15 +46,24 @@ class APIBasedTestFileCompilerBase extends base_1.default {
|
|
|
42
46
|
}
|
|
43
47
|
static _isTestCafeLibDep(filename) {
|
|
44
48
|
return (0, path_1.relative)(CWD, filename)
|
|
45
|
-
.split(path_1.sep)
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
49
|
+
.split(path_1.sep)
|
|
50
|
+
.includes(TESTCAFE_LIB_FOLDER_NAME);
|
|
51
|
+
}
|
|
52
|
+
async _execAsModule(code, filename) {
|
|
53
|
+
if (this.experimentalEsm) {
|
|
54
|
+
const fileUrl = url_1.default.pathToFileURL(filename);
|
|
55
|
+
//NOTE: It is necessary to prevent module caching during live mode.
|
|
56
|
+
// eslint-disable-next-line no-eval
|
|
57
|
+
await eval(`import('${fileUrl}?${prevent_module_caching_suffix_1.default}=${Date.now()}')`);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
const mod = new Module(filename, module.parent);
|
|
61
|
+
mod.filename = filename;
|
|
62
|
+
mod.paths = APIBasedTestFileCompilerBase._getNodeModulesLookupPath(filename);
|
|
63
|
+
cache_proxy_1.default.startExternalCaching(this.cachePrefix);
|
|
64
|
+
mod._compile(code, filename);
|
|
65
|
+
cache_proxy_1.default.stopExternalCaching();
|
|
66
|
+
}
|
|
54
67
|
}
|
|
55
68
|
_compileCode(code, filename) {
|
|
56
69
|
if (this.canPrecompile)
|
|
@@ -159,16 +172,18 @@ class APIBasedTestFileCompilerBase extends base_1.default {
|
|
|
159
172
|
_hasGlobalAPI() {
|
|
160
173
|
return global.fixture && global.test;
|
|
161
174
|
}
|
|
162
|
-
_runCompiledCode(compiledCode, filename) {
|
|
175
|
+
async _runCompiledCode(compiledCode, filename) {
|
|
163
176
|
const testFile = new test_file_1.default(filename);
|
|
164
177
|
this._addGlobalAPI(testFile);
|
|
165
178
|
this._addExportAPI(testFile);
|
|
166
179
|
stack_cleaning_hook_1.default.enabled = true;
|
|
167
180
|
this._setupRequireHook(testFile);
|
|
168
181
|
try {
|
|
169
|
-
this._execAsModule(compiledCode, filename);
|
|
182
|
+
await this._execAsModule(compiledCode, filename);
|
|
170
183
|
}
|
|
171
184
|
catch (err) {
|
|
185
|
+
if (err.code === errRequireEsmErrorCode)
|
|
186
|
+
throw new runtime_1.ImportESMInCommonJSError(err, filename);
|
|
172
187
|
if (!(err instanceof runtime_1.APIError))
|
|
173
188
|
throw new runtime_1.TestCompilationError(stack_cleaning_hook_1.default.cleanError(err));
|
|
174
189
|
throw err;
|
|
@@ -176,7 +191,8 @@ class APIBasedTestFileCompilerBase extends base_1.default {
|
|
|
176
191
|
finally {
|
|
177
192
|
this._removeRequireHook();
|
|
178
193
|
stack_cleaning_hook_1.default.enabled = false;
|
|
179
|
-
this.
|
|
194
|
+
if (!this.experimentalEsm)
|
|
195
|
+
this._removeGlobalAPI();
|
|
180
196
|
}
|
|
181
197
|
return testFile.getTests();
|
|
182
198
|
}
|
|
@@ -201,4 +217,4 @@ class APIBasedTestFileCompilerBase extends base_1.default {
|
|
|
201
217
|
}
|
|
202
218
|
exports.default = APIBasedTestFileCompilerBase;
|
|
203
219
|
module.exports = exports.default;
|
|
204
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWJhc2VkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBpbGVyL3Rlc3QtZmlsZS9hcGktYmFzZWQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwrQkFJYztBQUVkLDJCQUFrQztBQUNsQywwREFBaUM7QUFDakMsbUNBQWdDO0FBQ2hDLGtEQUEwQztBQUMxQyw4RUFBcUQ7QUFDckQsMEVBQWtEO0FBQ2xELG9FQUE0QztBQUM1QyxrREFBc0U7QUFDdEUsMkZBQWlFO0FBQ2pFLG9HQUFnRTtBQUNoRSxnRUFBdUM7QUFDdkMsOEVBQXFEO0FBQ3JELGtHQUEwRTtBQUMxRSxzRUFBNEM7QUFFNUMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBRTFCLE1BQU0sVUFBVSxHQUFHLDhCQUE4QixDQUFDO0FBQ2xELE1BQU0sT0FBTyxHQUFNLHlCQUF5QixDQUFDO0FBRTdDLE1BQU0sd0JBQXdCLEdBQUcsS0FBSyxDQUFDO0FBRXZDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUM7QUFFbEMsTUFBcUIsNEJBQTZCLFNBQVEsY0FBb0I7SUFDMUUsWUFBYSxFQUFFLHFCQUFxQixFQUFFLE9BQU8sRUFBRTtRQUMzQyxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBRW5CLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxxQkFBcUIsQ0FBQztRQUNuRCxJQUFJLENBQUMsS0FBSyxHQUFtQixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxXQUFXLEdBQWEsSUFBQSxlQUFNLEVBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELE1BQU0sQ0FBQyx5QkFBeUIsQ0FBRSxRQUFRO1FBQ3RDLE1BQU0s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SUFFRCxLQUFLLENBQUMsT0FBTyxDQUFFLElBQUksRUFBRSxRQUFRO1FBQ3pCLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFbkUsSUFBSSxZQUFZO1lBQ1osT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVoRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsU0FBUyxDQUFFLElBQUk7UUFDWCxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsT0FBTztRQUNILElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQTNPRCwrQ0EyT0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIGRpcm5hbWUsXG4gICAgcmVsYXRpdmUsXG4gICAgc2VwIGFzIHBhdGhTZXAsXG59IGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgc3RyaXBCb20gZnJvbSAnc3RyaXAtYm9tJztcbmltcG9ydCB7IG5hbm9pZCB9IGZyb20gJ25hbm9pZCc7XG5pbXBvcnQgVGVzdEZpbGVDb21waWxlckJhc2UgZnJvbSAnLi9iYXNlJztcbmltcG9ydCBUZXN0RmlsZSBmcm9tICcuLi8uLi9hcGkvc3RydWN0dXJlL3Rlc3QtZmlsZSc7XG5pbXBvcnQgRml4dHVyZSBmcm9tICcuLi8uLi9hcGkvc3RydWN0dXJlL2ZpeHR1cmUnO1xuaW1wb3J0IFRlc3QgZnJvbSAnLi4vLi4vYXBpL3N0cnVjdHVyZS90ZXN0JztcbmltcG9ydCB7IFRlc3RDb21waWxhdGlvbkVycm9yLCBBUElFcnJvciB9IGZyb20gJy4uLy4uL2Vycm9ycy9ydW50aW1lJztcbmltcG9ydCBzdGFja0NsZWFuaW5nSG9vayBmcm9tICcuLi8uLi9lcnJvcnMvc3RhY2stY2xlYW5pbmctaG9vayc7XG5pbXBvcnQgTk9ERV9NT0RVTEVTIGZyb20gJy4uLy4uL3V0aWxzL25vZGUtbW9kdWxlcy1mb2xkZXItbmFtZSc7XG5pbXBvcnQgY2FjaGVQcm94eSBmcm9tICcuL2NhY2hlLXByb3h5JztcbmltcG9ydCBleHBvcnRhYmxlTGliIGZyb20gJy4uLy4uL2FwaS9leHBvcnRhYmxlLWxpYic7XG5pbXBvcnQgVEVTVF9GSUxFX1RFTVBfVkFSSUFCTEVfTkFNRSBmcm9tICcuL3Rlc3QtZmlsZS10ZW1wLXZhcmlhYmxlLW5hbWUnO1xuaW1wb3J0IGFkZEV4cG9ydEFQSSBmcm9tICcuL2FkZC1leHBvcnQtYXBpJztcblxuY29uc3QgQ1dEID0gcHJvY2Vzcy5jd2QoKTtcblxuY29uc3QgRklYVFVSRV9SRSA9IC8oXnw7fFxccyspZml4dHVyZVxccyooXFwufFxcKHxgKS87XG5jb25zdCBURVNUX1JFICAgID0gLyhefDt8XFxzKyl0ZXN0XFxzKihcXC58XFwoKS87XG5cbmNvbnN0IFRFU1RDQUZFX0xJQl9GT0xERVJfTkFNRSA9ICdsaWInO1xuXG5jb25zdCBNb2R1bGUgPSBtb2R1bGUuY29uc3RydWN0b3I7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFQSUJhc2VkVGVzdEZpbGVDb21waWxlckJhc2UgZXh0ZW5kcyBUZXN0RmlsZUNvbXBpbGVyQmFzZSB7XG4gICAgY29uc3RydWN0b3IgKHsgaXNDb21waWxlclNlcnZpY2VNb2RlLCBiYXNlVXJsIH0pIHtcbiAgICAgICAgc3VwZXIoeyBiYXNlVXJsIH0pO1xuXG4gICAgICAgIHRoaXMuaXNDb21waWxlclNlcnZpY2VNb2RlID0gaXNDb21waWxlclNlcnZpY2VNb2RlO1xuICAgICAgICB0aGlzLmNhY2hlICAgICAgICAgICAgICAgICA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHRoaXMub3JpZ1JlcXVpcmVFeHRlbnNpb25zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGhpcy5jYWNoZVByZWZpeCAgICAgICAgICAgPSBuYW5vaWQoNyk7XG4gICAgfVxuXG4gICAgc3RhdGljIF9nZXROb2RlTW9kdWxlc0xvb2t1cFBhdGggKGZpbGVuYW1lKSB7XG4gICAgICAgIGNvbnN0IGRpciA9IGRpcm5hbWUoZmlsZW5hbWUpO1xuXG4gICAgICAgIHJldHVybiBNb2R1bGUuX25vZGVNb2R1bGVQYXRocyhkaXIpO1xuICAgIH1cblxuICAgIHN0YXRpYyBfaXNOb2RlTW9kdWxlc0RlcCAoZmlsZW5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHJlbGF0aXZlKENXRCwgZmlsZW5hbWUpXG4gICAgICAgICAgICAuc3BsaXQocGF0aFNlcClcbiAgICAgICAgICAgIC5pbmNsdWRlcyhOT0RFX01PRFVMRVMpO1xuICAgIH1cblxuICAgIHN0YXRpYyBfaXNUZXN0Q2FmZUxpYkRlcCAoZmlsZW5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHJlbGF0aXZlKENXRCwgZmlsZW5hbWUpXG4gICAgICAgICAgICAuc3BsaXQocGF0aFNlcClbMF0gPT09IFRFU1RDQUZFX0xJQl9GT0xERVJfTkFNRTtcbiAgICB9XG5cbiAgICBfZXhlY0FzTW9kdWxlIChjb2RlLCBmaWxlbmFtZSkge1xuICAgICAgICBjb25zdCBtb2QgPSBuZXcgTW9kdWxlKGZpbGVuYW1lLCBtb2R1bGUucGFyZW50KTtcblxuICAgICAgICBtb2QuZmlsZW5hbWUgPSBmaWxlbmFtZTtcbiAgICAgICAgbW9kLnBhdGhzICAgID0gQVBJQmFzZWRUZXN0RmlsZUNvbXBpbGVyQmFzZS5fZ2V0Tm9kZU1vZHVsZXNMb29rdXBQYXRoKGZpbGVuYW1lKTtcblxuICAgICAgICBjYWNoZVByb3h5LnN0YXJ0RXh0ZXJuYWxDYWNoaW5nKHRoaXMuY2FjaGVQcmVmaXgpO1xuXG4gICAgICAgIG1vZC5fY29tcGlsZShjb2RlLCBmaWxlbmFtZSk7XG5cbiAgICAgICAgY2FjaGVQcm94eS5zdG9wRXh0ZXJuYWxDYWNoaW5nKCk7XG4gICAgfVxuXG4gICAgX2NvbXBpbGVDb2RlIChjb2RlLCBmaWxlbmFtZSkge1xuICAgICAgICBpZiAodGhpcy5jYW5QcmVjb21waWxlKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ByZWNvbXBpbGVDb2RlKFt7IGNvZGUsIGZpbGVuYW1lIH1dKVswXTtcblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBfcHJlY29tcGlsZUNvZGUgKHRlc3RGaWxlc0luZm8pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbiAgICB9XG5cbiAgICBfZ2V0UmVxdWlyZUNvbXBpbGVycyAoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gICAgfVxuXG4gICAgX2NvbXBpbGVFeHRlcm5hbE1vZHVsZSAobW9kLCBmaWxlbmFtZSwgcmVxdWlyZUNvbXBpbGVyLCBvcmlnRXh0KSB7XG4gICAgICAgIGlmIChBUElCYXNlZFRlc3RGaWxlQ29tcGlsZXJCYXNlLl9pc05vZGVNb2R1bGVzRGVwKGZpbGVuYW1lKSAmJiBvcmlnRXh0KVxuICAgICAgICAgICAgb3JpZ0V4dCggbW9kLCBmaWxlbmFtZSApO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLl9jb21waWxlTW9kdWxlKG1vZCwgZmlsZW5hbWUsIHJlcXVpcmVDb21waWxlciwgb3JpZ0V4dCk7XG4gICAgfVxuXG4gICAgX2NvbXBpbGVFeHRlcm5hbE1vZHVsZUluRXNtTW9kZSAobW9kLCBmaWxlbmFtZSwgcmVxdWlyZUNvbXBpbGVyLCBvcmlnRXh0KSB7XG4gICAgICAgIGlmICghb3JpZ0V4dClcbiAgICAgICAgICAgIG9yaWdFeHQgPSB0aGlzLm9yaWdSZXF1aXJlRXh0ZW5zaW9uc1snLmpzJ107XG5cbiAgICAgICAgaWYgKCFBUElCYXNlZFRlc3RGaWxlQ29tcGlsZXJCYXNlLl9pc05vZGVNb2R1bGVzRGVwKGZpbGVuYW1lKSAmJlxuICAgICAgICAgICAgIUFQSUJhc2VkVGVzdEZpbGVDb21waWxlckJhc2UuX2lzVGVzdENhZmVMaWJEZXAoZmlsZW5hbWUpKSB7XG4gICAgICAgICAgICBnbG9iYWwuY3VzdG9tRXh0ZW5zaW9uSG9vayA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBnbG9iYWwuY3VzdG9tRXh0ZW5zaW9uSG9vayA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9jb21waWxlTW9kdWxlKG1vZCwgZmlsZW5hbWUsIHJlcXVpcmVDb21waWxlcik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9yaWdFeHQobW9kLCBmaWxlbmFtZSk7XG4gICAgfVxuXG5cbiAgICBfY29tcGlsZU1vZHVsZSAobW9kLCBmaWxlbmFtZSwgcmVxdWlyZUNvbXBpbGVyKSB7XG4gICAgICAgIGNvbnN0IGNvZGUgICAgICAgICA9IHJlYWRGaWxlU3luYyhmaWxlbmFtZSkudG9TdHJpbmcoKTtcbiAgICAgICAgY29uc3QgY29tcGlsZWRDb2RlID0gcmVxdWlyZUNvbXBpbGVyKHN0cmlwQm9tKGNvZGUpLCBmaWxlbmFtZSk7XG5cbiAgICAgICAgbW9kLnBhdGhzID0gQVBJQmFzZWRUZXN0RmlsZUNvbXBpbGVyQmFzZS5fZ2V0Tm9kZU1vZHVsZXNMb29rdXBQYXRoKGZpbGVuYW1lKTtcblxuICAgICAgICBtb2QuX2NvbXBpbGUoY29tcGlsZWRDb2RlLCBmaWxlbmFtZSk7XG4gICAgfVxuXG4gICAgX3NldHVwUmVxdWlyZUhvb2sgKHRlc3RGaWxlKSB7XG4gICAgICAgIGNvbnN0IHJlcXVpcmVDb21waWxlcnMgPSB0aGlzLl9nZXRSZXF1aXJlQ29tcGlsZXJzKCk7XG5cbiAgICAgICAgdGhpcy5vcmlnUmVxdWlyZUV4dGVuc2lvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgICAgIE9iamVjdC5rZXlzKHJlcXVpcmVDb21waWxlcnMpLmZvckVhY2goZXh0ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdFeHQgPSByZXF1aXJlLmV4dGVuc2lvbnNbZXh0XTtcblxuICAgICAgICAgICAgdGhpcy5vcmlnUmVxdWlyZUV4dGVuc2lvbnNbZXh0XSA9IG9yaWdFeHQ7XG5cbiAgICAgICAgICAgIHJlcXVpcmUuZXh0ZW5zaW9uc1tleHRdID0gKG1vZCwgZmlsZW5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBoYWRHbG9iYWxBUEkgPSB0aGlzLl9oYXNHbG9iYWxBUEkoKTtcblxuICAgICAgICAgICAgICAgIC8vIE5PVEU6IHJlbW92ZSBnbG9iYWwgQVBJIHNvIHRoYXQgaXQgd2lsbCBiZSB1bmF2YWlsYWJsZSBmb3IgdGhlIGRlcGVuZGVuY2llc1xuICAgICAgICAgICAgICAgIGlmIChBUElCYXNlZFRlc3RGaWxlQ29tcGlsZXJCYXNlLl9pc05vZGVNb2R1bGVzRGVwKGZpbGVuYW1lKSAmJiBoYWRHbG9iYWxBUEkpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUdsb2JhbEFQSSgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNDb21waWxlclNlcnZpY2VNb2RlKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb21waWxlRXh0ZXJuYWxNb2R1bGVJbkVzbU1vZGUobW9kLCBmaWxlbmFtZSwgcmVxdWlyZUNvbXBpbGVyc1tleHRdLCBvcmlnRXh0KTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBpbGVFeHRlcm5hbE1vZHVsZShtb2QsIGZpbGVuYW1lLCByZXF1aXJlQ29tcGlsZXJzW2V4dF0sIG9yaWdFeHQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGhhZEdsb2JhbEFQSSAmJiAhdGhpcy5faGFzR2xvYmFsQVBJKCkpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkZEdsb2JhbEFQSSh0ZXN0RmlsZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfcmVtb3ZlUmVxdWlyZUhvb2sgKCkge1xuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLm9yaWdSZXF1aXJlRXh0ZW5zaW9ucykuZm9yRWFjaChleHQgPT4ge1xuICAgICAgICAgICAgcmVxdWlyZS5leHRlbnNpb25zW2V4dF0gPSB0aGlzLm9yaWdSZXF1aXJlRXh0ZW5zaW9uc1tleHRdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfY29tcGlsZUNvZGVGb3JUZXN0RmlsZXMgKHRlc3RGaWxlc0luZm8pIHtcbiAgICAgICAgc3RhY2tDbGVhbmluZ0hvb2suZW5hYmxlZCA9IHRydWU7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhblByZWNvbXBpbGUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ByZWNvbXBpbGVDb2RlKHRlc3RGaWxlc0luZm8pO1xuXG4gICAgICAgICAgICByZXR1cm4gdGVzdEZpbGVzSW5mby5tYXAoKHsgY29kZSwgZmlsZW5hbWUgfSkgPT4gdGhpcy5fY29tcGlsZUNvZGUoY29kZSwgZmlsZW5hbWUpKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVGVzdENvbXBpbGF0aW9uRXJyb3Ioc3RhY2tDbGVhbmluZ0hvb2suY2xlYW5FcnJvcihlcnIpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHN0YWNrQ2xlYW5pbmdIb29rLmVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9hZGRHbG9iYWxBUEkgKHRlc3RGaWxlKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWwsICdmaXh0dXJlJywge1xuICAgICAgICAgICAgZ2V0OiAgICAgICAgICAoKSA9PiBuZXcgRml4dHVyZSh0ZXN0RmlsZSwgdGhpcy5iYXNlVXJsKSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbCwgJ3Rlc3QnLCB7XG4gICAgICAgICAgICBnZXQ6ICAgICAgICAgICgpID0+IG5ldyBUZXN0KHRlc3RGaWxlLCBmYWxzZSwgdGhpcy5iYXNlVXJsKSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX2FkZEV4cG9ydEFQSUluQ29tcGlsZXJTZXJ2aWNlTW9kZSAodGVzdEZpbGUpIHtcbiAgICAgICAgLy8gJ2VzbScgbGlicmFyeSBoYXMgYW4gaXNzdWUgd2l0aCBsb2FkaW5nIG1vZHVsZXNcbiAgICAgICAgLy8gaW4gY2FzZSBvZiB0aGUgY29tYmluYXRpb24gb2YgcmVxdWlyZSBhbmQgaW1wb3J0IGRpcmVjdGl2ZXMuXG4gICAgICAgIC8vIFRoaXMgaGFjayBhbGxvd2luZyBhY2hpZXZlIHRoZSBkZXNpcmVkIGJlaGF2aW9yLlxuICAgICAgICBjb25zdCBleHBvcnRhYmxlTGliUGF0aCA9IHJlcXVpcmUucmVzb2x2ZSgnLi4vLi4vYXBpL2V4cG9ydGFibGUtbGliJyk7XG5cbiAgICAgICAgZGVsZXRlIHJlcXVpcmUuY2FjaGVbZXhwb3J0YWJsZUxpYlBhdGhdO1xuXG4gICAgICAgIGdsb2JhbFtURVNUX0ZJTEVfVEVNUF9WQVJJQUJMRV9OQU1FXSA9IHsgdGVzdEZpbGUsIGJhc2VVcmw6IHRoaXMuYmFzZVVybCB9O1xuXG4gICAgICAgIHJlcXVpcmUoJy4uLy4uL2FwaS9leHBvcnRhYmxlLWxpYicpO1xuICAgIH1cblxuICAgIF9hZGRFeHBvcnRBUEkgKHRlc3RGaWxlKSB7XG4gICAgICAgIGlmICh0aGlzLmlzQ29tcGlsZXJTZXJ2aWNlTW9kZSlcbiAgICAgICAgICAgIHRoaXMuX2FkZEV4cG9ydEFQSUluQ29tcGlsZXJTZXJ2aWNlTW9kZSh0ZXN0RmlsZSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGFkZEV4cG9ydEFQSSh0ZXN0RmlsZSwgZXhwb3J0YWJsZUxpYiwgeyBiYXNlVXJsOiB0aGlzLmJhc2VVcmwgfSk7XG4gICAgfVxuXG4gICAgX3JlbW92ZUdsb2JhbEFQSSAoKSB7XG4gICAgICAgIGRlbGV0ZSBnbG9iYWwuZml4dHVyZTtcbiAgICAgICAgZGVsZXRlIGdsb2JhbC50ZXN0O1xuICAgIH1cblxuICAgIF9oYXNHbG9iYWxBUEkgKCkge1xuICAgICAgICByZXR1cm4gZ2xvYmFsLmZpeHR1cmUgJiYgZ2xvYmFsLnRlc3Q7XG4gICAgfVxuXG4gICAgX3J1bkNvbXBpbGVkQ29kZSAoY29tcGlsZWRDb2RlLCBmaWxlbmFtZSkge1xuICAgICAgICBjb25zdCB0ZXN0RmlsZSA9IG5ldyBUZXN0RmlsZShmaWxlbmFtZSk7XG5cbiAgICAgICAgdGhpcy5fYWRkR2xvYmFsQVBJKHRlc3RGaWxlKTtcbiAgICAgICAgdGhpcy5fYWRkRXhwb3J0QVBJKHRlc3RGaWxlKTtcblxuICAgICAgICBzdGFja0NsZWFuaW5nSG9vay5lbmFibGVkID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLl9zZXR1cFJlcXVpcmVIb29rKHRlc3RGaWxlKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5fZXhlY0FzTW9kdWxlKGNvbXBpbGVkQ29kZSwgZmlsZW5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmICghKGVyciBpbnN0YW5jZW9mIEFQSUVycm9yKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVGVzdENvbXBpbGF0aW9uRXJyb3Ioc3RhY2tDbGVhbmluZ0hvb2suY2xlYW5FcnJvcihlcnIpKTtcblxuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5fcmVtb3ZlUmVxdWlyZUhvb2soKTtcbiAgICAgICAgICAgIHN0YWNrQ2xlYW5pbmdIb29rLmVuYWJsZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgdGhpcy5fcmVtb3ZlR2xvYmFsQVBJKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGVzdEZpbGUuZ2V0VGVzdHMoKTtcbiAgICB9XG5cblxuICAgIHByZWNvbXBpbGUgKHRlc3RGaWxlc0luZm8pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbXBpbGVDb2RlRm9yVGVzdEZpbGVzKHRlc3RGaWxlc0luZm8pO1xuICAgIH1cblxuICAgIGV4ZWN1dGUgKGNvbXBpbGVkQ29kZSwgZmlsZW5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkNvbXBpbGVkQ29kZShjb21waWxlZENvZGUsIGZpbGVuYW1lKTtcbiAgICB9XG5cbiAgICBhc3luYyBjb21waWxlIChjb2RlLCBmaWxlbmFtZSkge1xuICAgICAgICBjb25zdCBbY29tcGlsZWRDb2RlXSA9IGF3YWl0IHRoaXMucHJlY29tcGlsZShbeyBjb2RlLCBmaWxlbmFtZSB9XSk7XG5cbiAgICAgICAgaWYgKGNvbXBpbGVkQ29kZSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoY29tcGlsZWRDb2RlLCBmaWxlbmFtZSk7XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIF9oYXNUZXN0cyAoY29kZSkge1xuICAgICAgICByZXR1cm4gRklYVFVSRV9SRS50ZXN0KGNvZGUpICYmIFRFU1RfUkUudGVzdChjb2RlKTtcbiAgICB9XG5cbiAgICBjbGVhblVwICgpIHtcbiAgICAgICAgdGhpcy5jYWNoZSA9IHt9O1xuICAgIH1cbn1cbiJdfQ==
|
|
220
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWJhc2VkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBpbGVyL3Rlc3QtZmlsZS9hcGktYmFzZWQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwrQkFJYztBQUVkLDJCQUFrQztBQUNsQywwREFBaUM7QUFDakMsbUNBQWdDO0FBQ2hDLGtEQUEwQztBQUMxQyw4RUFBcUQ7QUFDckQsMEVBQWtEO0FBQ2xELG9FQUE0QztBQUM1QyxrREFJOEI7QUFDOUIsMkZBQWlFO0FBQ2pFLG9HQUFnRTtBQUNoRSxnRUFBdUM7QUFDdkMsOEVBQXFEO0FBQ3JELGtHQUEwRTtBQUMxRSxzRUFBNEM7QUFDNUMsOENBQXNCO0FBQ3RCLHFHQUE2RTtBQUc3RSxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7QUFFMUIsTUFBTSxVQUFVLEdBQUcsOEJBQThCLENBQUM7QUFDbEQsTUFBTSxPQUFPLEdBQU0seUJBQXlCLENBQUM7QUFFN0MsTUFBTSx3QkFBd0IsR0FBRyxLQUFLLENBQUM7QUFFdkMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztBQUVsQyxNQUFNLHNCQUFzQixHQUFHLGlCQUFpQixDQUFDO0FBRWpELE1BQXFCLDRCQUE2QixTQUFRLGNBQW9CO0lBQzFFLFlBQWEsRUFBRSxxQkFBcUIsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFO1FBQzVELEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFFbkIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLHFCQUFxQixDQUFDO1FBQ25ELElBQUksQ0FBQyxLQUFLLEdBQW1CLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLFdBQVcsR0FBYSxJQUFBLGVBQU0sRUFB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MVBELCtDQTBQQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgZGlybmFtZSxcbiAgICByZWxhdGl2ZSxcbiAgICBzZXAgYXMgcGF0aFNlcCxcbn0gZnJvbSAncGF0aCc7XG5cbmltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCBzdHJpcEJvbSBmcm9tICdzdHJpcC1ib20nO1xuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSAnbmFub2lkJztcbmltcG9ydCBUZXN0RmlsZUNvbXBpbGVyQmFzZSBmcm9tICcuL2Jhc2UnO1xuaW1wb3J0IFRlc3RGaWxlIGZyb20gJy4uLy4uL2FwaS9zdHJ1Y3R1cmUvdGVzdC1maWxlJztcbmltcG9ydCBGaXh0dXJlIGZyb20gJy4uLy4uL2FwaS9zdHJ1Y3R1cmUvZml4dHVyZSc7XG5pbXBvcnQgVGVzdCBmcm9tICcuLi8uLi9hcGkvc3RydWN0dXJlL3Rlc3QnO1xuaW1wb3J0IHtcbiAgICBUZXN0Q29tcGlsYXRpb25FcnJvcixcbiAgICBBUElFcnJvcixcbiAgICBJbXBvcnRFU01JbkNvbW1vbkpTRXJyb3IsXG59IGZyb20gJy4uLy4uL2Vycm9ycy9ydW50aW1lJztcbmltcG9ydCBzdGFja0NsZWFuaW5nSG9vayBmcm9tICcuLi8uLi9lcnJvcnMvc3RhY2stY2xlYW5pbmctaG9vayc7XG5pbXBvcnQgTk9ERV9NT0RVTEVTIGZyb20gJy4uLy4uL3V0aWxzL25vZGUtbW9kdWxlcy1mb2xkZXItbmFtZSc7XG5pbXBvcnQgY2FjaGVQcm94eSBmcm9tICcuL2NhY2hlLXByb3h5JztcbmltcG9ydCBleHBvcnRhYmxlTGliIGZyb20gJy4uLy4uL2FwaS9leHBvcnRhYmxlLWxpYic7XG5pbXBvcnQgVEVTVF9GSUxFX1RFTVBfVkFSSUFCTEVfTkFNRSBmcm9tICcuL3Rlc3QtZmlsZS10ZW1wLXZhcmlhYmxlLW5hbWUnO1xuaW1wb3J0IGFkZEV4cG9ydEFQSSBmcm9tICcuL2FkZC1leHBvcnQtYXBpJztcbmltcG9ydCB1cmwgZnJvbSAndXJsJztcbmltcG9ydCBQUkVWRU5UX01PRFVMRV9DQUNISU5HX1NVRkZJWCBmcm9tICcuLi9wcmV2ZW50LW1vZHVsZS1jYWNoaW5nLXN1ZmZpeCc7XG5cblxuY29uc3QgQ1dEID0gcHJvY2Vzcy5jd2QoKTtcblxuY29uc3QgRklYVFVSRV9SRSA9IC8oXnw7fFxccyspZml4dHVyZVxccyooXFwufFxcKHxgKS87XG5jb25zdCBURVNUX1JFICAgID0gLyhefDt8XFxzKyl0ZXN0XFxzKihcXC58XFwoKS87XG5cbmNvbnN0IFRFU1RDQUZFX0xJQl9GT0xERVJfTkFNRSA9ICdsaWInO1xuXG5jb25zdCBNb2R1bGUgPSBtb2R1bGUuY29uc3RydWN0b3I7XG5cbmNvbnN0IGVyclJlcXVpcmVFc21FcnJvckNvZGUgPSAnRVJSX1JFUVVJUkVfRVNNJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQVBJQmFzZWRUZXN0RmlsZUNvbXBpbGVyQmFzZSBleHRlbmRzIFRlc3RGaWxlQ29tcGlsZXJCYXNlIHtcbiAgICBjb25zdHJ1Y3RvciAoeyBpc0NvbXBpbGVyU2VydmljZU1vZGUsIGJhc2VVcmwsIGV4cGVyaW1lbnRhbEVzbSB9KSB7XG4gICAgICAgIHN1cGVyKHsgYmFzZVVybCB9KTtcblxuICAgICAgICB0aGlzLmlzQ29tcGlsZXJTZXJ2aWNlTW9kZSA9IGlzQ29tcGlsZXJTZXJ2aWNlTW9kZTtcbiAgICAgICAgdGhpcy5jYWNoZSAgICAgICAgICAgICAgICAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB0aGlzLm9yaWdSZXF1aXJlRXh0ZW5zaW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHRoaXMuY2FjaGVQcmVmaXggICAgICAgICAgID0gbmFub2lkKDcpO1xuICAgICAgICB0aGlzLmV4cGVyaW1lbnRhbEVzbSAgICAgICA9IGV4cGVyaW1lbnRhbEVzbTtcbiAgICB9XG5cbiAgICBzdGF0aWMgX2dldE5vZGVNb2R1bGVzTG9va3VwUGF0aCAoZmlsZW5hbWUpIHtcbiAgICAgICAgY29uc3QgZGlyID0gZGlybmFtZShmaWxlbmFtZSk7XG5cbiAgICAgICAgcmV0dXJuIE1vZHVsZS5fbm9kZU1vZHVsZVBhdGhzKGRpcik7XG4gICAgfVxuXG4gICAgc3RhdGljIF9pc05vZGVNb2R1bGVzRGVwIChmaWxlbmFtZSkge1xuICAgICAgICByZXR1cm4gcmVsYXRpdmUoQ1dELCBmaWxlbmFtZSlcbiAgICAgICAgICAgIC5zcGxpdChwYXRoU2VwKVxuICAgICAgICAgICAgLmluY2x1ZGVzKE5PREVfTU9EVUxFUyk7XG4gICAgfVxuXG4gICAgc3RhdGljIF9pc1Rlc3RDYWZlTGliRGVwIChmaWxlbmFtZSkge1xuICAgICAgICByZXR1cm4gcmVsYXRpdmUoQ1dELCBmaWxlbmFtZSlcbiAgICAgICAgICAgIC5zcGxpdChwYXRoU2VwKVxuICAgICAgICAgICAgLmluY2x1ZGVzKFRFU1RDQUZFX0xJQl9GT0xERVJfTkFNRSk7XG4gICAgfVxuXG4gICAgYXN5bmMgX2V4ZWNBc01vZHVsZSAoY29kZSwgZmlsZW5hbWUpIHtcbiAgICAgICAgaWYgKHRoaXMuZXhwZXJpbWVudGFsRXNtKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlVXJsID0gdXJsLnBhdGhUb0ZpbGVVUkwoZmlsZW5hbWUpO1xuXG4gICAgICAgICAgICAvL05PVEU6IEl0IGlzIG5lY2Vzc2FyeSB0byBwcmV2ZW50IG1vZHVsZSBjYWNoaW5nIGR1cmluZyBsaXZlIG1vZGUuXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXZhbFxuICAgICAgICAgICAgYXdhaXQgZXZhbChgaW1wb3J0KCcke2ZpbGVVcmx9PyR7UFJFVkVOVF9NT0RVTEVfQ0FDSElOR19TVUZGSVh9PSR7RGF0ZS5ub3coKX0nKWApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbW9kID0gbmV3IE1vZHVsZShmaWxlbmFtZSwgbW9kdWxlLnBhcmVudCk7XG5cbiAgICAgICAgICAgIG1vZC5maWxlbmFtZSA9IGZpbGVuYW1lO1xuICAgICAgICAgICAgbW9kLnBhdGhzICAgID0gQVBJQmFzZWRUZXN0RmlsZUNvbXBpbGVyQmFzZS5fZ2V0Tm9kZU1vZHVsZXNMb29rdXBQYXRoKGZpbGVuYW1lKTtcblxuICAgICAgICAgICAgY2FjaGVQcm94eS5zdGFydEV4dGVybmFsQ2FjaGluZyh0aGlzLmNhY2hlUHJlZml4KTtcblxuICAgICAgICAgICAgbW9kLl9jb21waWxlKGNvZGUsIGZpbGVuYW1lKTtcblxuICAgICAgICAgICAgY2FjaGVQcm94eS5zdG9wRXh0ZXJuYWxDYWNoaW5nKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfY29tcGlsZUNvZGUgKGNvZGUsIGZpbGVuYW1lKSB7XG4gICAgICAgIGlmICh0aGlzLmNhblByZWNvbXBpbGUpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJlY29tcGlsZUNvZGUoW3sgY29kZSwgZmlsZW5hbWUgfV0pWzBdO1xuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIF9wcmVjb21waWxlQ29kZSAodGVzdEZpbGVzSW5mbykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuICAgIH1cblxuICAgIF9nZXRSZXF1aXJlQ29tcGlsZXJzICgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbiAgICB9XG5cbiAgICBfY29tcGlsZUV4dGVybmFsTW9kdWxlIChtb2QsIGZpbGVuYW1lLCByZXF1aXJlQ29tcGlsZXIsIG9yaWdFeHQpIHtcbiAgICAgICAgaWYgKEFQSUJhc2VkVGVzdEZpbGVDb21waWxlckJhc2UuX2lzTm9kZU1vZHVsZXNEZXAoZmlsZW5hbWUpICYmIG9yaWdFeHQpXG4gICAgICAgICAgICBvcmlnRXh0KCBtb2QsIGZpbGVuYW1lICk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuX2NvbXBpbGVNb2R1bGUobW9kLCBmaWxlbmFtZSwgcmVxdWlyZUNvbXBpbGVyLCBvcmlnRXh0KTtcbiAgICB9XG5cbiAgICBfY29tcGlsZUV4dGVybmFsTW9kdWxlSW5Fc21Nb2RlIChtb2QsIGZpbGVuYW1lLCByZXF1aXJlQ29tcGlsZXIsIG9yaWdFeHQpIHtcbiAgICAgICAgaWYgKCFvcmlnRXh0KVxuICAgICAgICAgICAgb3JpZ0V4dCA9IHRoaXMub3JpZ1JlcXVpcmVFeHRlbnNpb25zWycuanMnXTtcblxuICAgICAgICBpZiAoIUFQSUJhc2VkVGVzdEZpbGVDb21waWxlckJhc2UuX2lzTm9kZU1vZHVsZXNEZXAoZmlsZW5hbWUpICYmXG4gICAgICAgICAgICAhQVBJQmFzZWRUZXN0RmlsZUNvbXBpbGVyQmFzZS5faXNUZXN0Q2FmZUxpYkRlcChmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIGdsb2JhbC5jdXN0b21FeHRlbnNpb25Ib29rID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGdsb2JhbC5jdXN0b21FeHRlbnNpb25Ib29rID0gbnVsbDtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBpbGVNb2R1bGUobW9kLCBmaWxlbmFtZSwgcmVxdWlyZUNvbXBpbGVyKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb3JpZ0V4dChtb2QsIGZpbGVuYW1lKTtcbiAgICB9XG5cblxuICAgIF9jb21waWxlTW9kdWxlIChtb2QsIGZpbGVuYW1lLCByZXF1aXJlQ29tcGlsZXIpIHtcbiAgICAgICAgY29uc3QgY29kZSAgICAgICAgID0gcmVhZEZpbGVTeW5jKGZpbGVuYW1lKS50b1N0cmluZygpO1xuICAgICAgICBjb25zdCBjb21waWxlZENvZGUgPSByZXF1aXJlQ29tcGlsZXIoc3RyaXBCb20oY29kZSksIGZpbGVuYW1lKTtcblxuICAgICAgICBtb2QucGF0aHMgPSBBUElCYXNlZFRlc3RGaWxlQ29tcGlsZXJCYXNlLl9nZXROb2RlTW9kdWxlc0xvb2t1cFBhdGgoZmlsZW5hbWUpO1xuXG4gICAgICAgIG1vZC5fY29tcGlsZShjb21waWxlZENvZGUsIGZpbGVuYW1lKTtcbiAgICB9XG5cbiAgICBfc2V0dXBSZXF1aXJlSG9vayAodGVzdEZpbGUpIHtcbiAgICAgICAgY29uc3QgcmVxdWlyZUNvbXBpbGVycyA9IHRoaXMuX2dldFJlcXVpcmVDb21waWxlcnMoKTtcblxuICAgICAgICB0aGlzLm9yaWdSZXF1aXJlRXh0ZW5zaW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAgICAgT2JqZWN0LmtleXMocmVxdWlyZUNvbXBpbGVycykuZm9yRWFjaChleHQgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ0V4dCA9IHJlcXVpcmUuZXh0ZW5zaW9uc1tleHRdO1xuXG4gICAgICAgICAgICB0aGlzLm9yaWdSZXF1aXJlRXh0ZW5zaW9uc1tleHRdID0gb3JpZ0V4dDtcblxuICAgICAgICAgICAgcmVxdWlyZS5leHRlbnNpb25zW2V4dF0gPSAobW9kLCBmaWxlbmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhZEdsb2JhbEFQSSA9IHRoaXMuX2hhc0dsb2JhbEFQSSgpO1xuXG4gICAgICAgICAgICAgICAgLy8gTk9URTogcmVtb3ZlIGdsb2JhbCBBUEkgc28gdGhhdCBpdCB3aWxsIGJlIHVuYXZhaWxhYmxlIGZvciB0aGUgZGVwZW5kZW5jaWVzXG4gICAgICAgICAgICAgICAgaWYgKEFQSUJhc2VkVGVzdEZpbGVDb21waWxlckJhc2UuX2lzTm9kZU1vZHVsZXNEZXAoZmlsZW5hbWUpICYmIGhhZEdsb2JhbEFQSSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlR2xvYmFsQVBJKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0NvbXBpbGVyU2VydmljZU1vZGUpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBpbGVFeHRlcm5hbE1vZHVsZUluRXNtTW9kZShtb2QsIGZpbGVuYW1lLCByZXF1aXJlQ29tcGlsZXJzW2V4dF0sIG9yaWdFeHQpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29tcGlsZUV4dGVybmFsTW9kdWxlKG1vZCwgZmlsZW5hbWUsIHJlcXVpcmVDb21waWxlcnNbZXh0XSwgb3JpZ0V4dCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaGFkR2xvYmFsQVBJICYmICF0aGlzLl9oYXNHbG9iYWxBUEkoKSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRkR2xvYmFsQVBJKHRlc3RGaWxlKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9yZW1vdmVSZXF1aXJlSG9vayAoKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMub3JpZ1JlcXVpcmVFeHRlbnNpb25zKS5mb3JFYWNoKGV4dCA9PiB7XG4gICAgICAgICAgICByZXF1aXJlLmV4dGVuc2lvbnNbZXh0XSA9IHRoaXMub3JpZ1JlcXVpcmVFeHRlbnNpb25zW2V4dF07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9jb21waWxlQ29kZUZvclRlc3RGaWxlcyAodGVzdEZpbGVzSW5mbykge1xuICAgICAgICBzdGFja0NsZWFuaW5nSG9vay5lbmFibGVkID0gdHJ1ZTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FuUHJlY29tcGlsZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJlY29tcGlsZUNvZGUodGVzdEZpbGVzSW5mbyk7XG5cbiAgICAgICAgICAgIHJldHVybiB0ZXN0RmlsZXNJbmZvLm1hcCgoeyBjb2RlLCBmaWxlbmFtZSB9KSA9PiB0aGlzLl9jb21waWxlQ29kZShjb2RlLCBmaWxlbmFtZSkpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUZXN0Q29tcGlsYXRpb25FcnJvcihzdGFja0NsZWFuaW5nSG9vay5jbGVhbkVycm9yKGVycikpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgc3RhY2tDbGVhbmluZ0hvb2suZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2FkZEdsb2JhbEFQSSAodGVzdEZpbGUpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbCwgJ2ZpeHR1cmUnLCB7XG4gICAgICAgICAgICBnZXQ6ICAgICAgICAgICgpID0+IG5ldyBGaXh0dXJlKHRlc3RGaWxlLCB0aGlzLmJhc2VVcmwpLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICB9KTtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsLCAndGVzdCcsIHtcbiAgICAgICAgICAgIGdldDogICAgICAgICAgKCkgPT4gbmV3IFRlc3QodGVzdEZpbGUsIGZhbHNlLCB0aGlzLmJhc2VVcmwpLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfYWRkRXhwb3J0QVBJSW5Db21waWxlclNlcnZpY2VNb2RlICh0ZXN0RmlsZSkge1xuICAgICAgICAvLyAnZXNtJyBsaWJyYXJ5IGhhcyBhbiBpc3N1ZSB3aXRoIGxvYWRpbmcgbW9kdWxlc1xuICAgICAgICAvLyBpbiBjYXNlIG9mIHRoZSBjb21iaW5hdGlvbiBvZiByZXF1aXJlIGFuZCBpbXBvcnQgZGlyZWN0aXZlcy5cbiAgICAgICAgLy8gVGhpcyBoYWNrIGFsbG93aW5nIGFjaGlldmUgdGhlIGRlc2lyZWQgYmVoYXZpb3IuXG4gICAgICAgIGNvbnN0IGV4cG9ydGFibGVMaWJQYXRoID0gcmVxdWlyZS5yZXNvbHZlKCcuLi8uLi9hcGkvZXhwb3J0YWJsZS1saWInKTtcblxuICAgICAgICBkZWxldGUgcmVxdWlyZS5jYWNoZVtleHBvcnRhYmxlTGliUGF0aF07XG5cbiAgICAgICAgZ2xvYmFsW1RFU1RfRklMRV9URU1QX1ZBUklBQkxFX05BTUVdID0geyB0ZXN0RmlsZSwgYmFzZVVybDogdGhpcy5iYXNlVXJsIH07XG5cbiAgICAgICAgcmVxdWlyZSgnLi4vLi4vYXBpL2V4cG9ydGFibGUtbGliJyk7XG4gICAgfVxuXG4gICAgX2FkZEV4cG9ydEFQSSAodGVzdEZpbGUpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNDb21waWxlclNlcnZpY2VNb2RlKVxuICAgICAgICAgICAgdGhpcy5fYWRkRXhwb3J0QVBJSW5Db21waWxlclNlcnZpY2VNb2RlKHRlc3RGaWxlKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgYWRkRXhwb3J0QVBJKHRlc3RGaWxlLCBleHBvcnRhYmxlTGliLCB7IGJhc2VVcmw6IHRoaXMuYmFzZVVybCB9KTtcbiAgICB9XG5cbiAgICBfcmVtb3ZlR2xvYmFsQVBJICgpIHtcbiAgICAgICAgZGVsZXRlIGdsb2JhbC5maXh0dXJlO1xuICAgICAgICBkZWxldGUgZ2xvYmFsLnRlc3Q7XG4gICAgfVxuXG4gICAgX2hhc0dsb2JhbEFQSSAoKSB7XG4gICAgICAgIHJldHVybiBnbG9iYWwuZml4dHVyZSAmJiBnbG9iYWwudGVzdDtcbiAgICB9XG5cbiAgICBhc3luYyBfcnVuQ29tcGlsZWRDb2RlIChjb21waWxlZENvZGUsIGZpbGVuYW1lKSB7XG4gICAgICAgIGNvbnN0IHRlc3RGaWxlID0gbmV3IFRlc3RGaWxlKGZpbGVuYW1lKTtcblxuICAgICAgICB0aGlzLl9hZGRHbG9iYWxBUEkodGVzdEZpbGUpO1xuICAgICAgICB0aGlzLl9hZGRFeHBvcnRBUEkodGVzdEZpbGUpO1xuXG4gICAgICAgIHN0YWNrQ2xlYW5pbmdIb29rLmVuYWJsZWQgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuX3NldHVwUmVxdWlyZUhvb2sodGVzdEZpbGUpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9leGVjQXNNb2R1bGUoY29tcGlsZWRDb2RlLCBmaWxlbmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKGVyci5jb2RlID09PSBlcnJSZXF1aXJlRXNtRXJyb3JDb2RlKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbXBvcnRFU01JbkNvbW1vbkpTRXJyb3IoZXJyLCBmaWxlbmFtZSk7XG5cbiAgICAgICAgICAgIGlmICghKGVyciBpbnN0YW5jZW9mIEFQSUVycm9yKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVGVzdENvbXBpbGF0aW9uRXJyb3Ioc3RhY2tDbGVhbmluZ0hvb2suY2xlYW5FcnJvcihlcnIpKTtcblxuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5fcmVtb3ZlUmVxdWlyZUhvb2soKTtcbiAgICAgICAgICAgIHN0YWNrQ2xlYW5pbmdIb29rLmVuYWJsZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLmV4cGVyaW1lbnRhbEVzbSlcbiAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmVHbG9iYWxBUEkoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0ZXN0RmlsZS5nZXRUZXN0cygpO1xuICAgIH1cblxuXG4gICAgcHJlY29tcGlsZSAodGVzdEZpbGVzSW5mbykge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29tcGlsZUNvZGVGb3JUZXN0RmlsZXModGVzdEZpbGVzSW5mbyk7XG4gICAgfVxuXG4gICAgZXhlY3V0ZSAoY29tcGlsZWRDb2RlLCBmaWxlbmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVuQ29tcGlsZWRDb2RlKGNvbXBpbGVkQ29kZSwgZmlsZW5hbWUpO1xuICAgIH1cblxuICAgIGFzeW5jIGNvbXBpbGUgKGNvZGUsIGZpbGVuYW1lKSB7XG4gICAgICAgIGNvbnN0IFtjb21waWxlZENvZGVdID0gYXdhaXQgdGhpcy5wcmVjb21waWxlKFt7IGNvZGUsIGZpbGVuYW1lIH1dKTtcblxuICAgICAgICBpZiAoY29tcGlsZWRDb2RlKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShjb21waWxlZENvZGUsIGZpbGVuYW1lKTtcblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgX2hhc1Rlc3RzIChjb2RlKSB7XG4gICAgICAgIHJldHVybiBGSVhUVVJFX1JFLnRlc3QoY29kZSkgJiYgVEVTVF9SRS50ZXN0KGNvZGUpO1xuICAgIH1cblxuICAgIGNsZWFuVXAgKCkge1xuICAgICAgICB0aGlzLmNhY2hlID0ge307XG4gICAgfVxufVxuIl19
|
|
@@ -37,6 +37,9 @@ class TestFileCompilerBase {
|
|
|
37
37
|
canCompile(code, filename) {
|
|
38
38
|
return this.supportedExtensionRe.test(filename);
|
|
39
39
|
}
|
|
40
|
+
get canCompileInEsm() {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
40
43
|
get canPrecompile() {
|
|
41
44
|
return false;
|
|
42
45
|
}
|
|
@@ -46,4 +49,4 @@ class TestFileCompilerBase {
|
|
|
46
49
|
}
|
|
47
50
|
exports.default = TestFileCompilerBase;
|
|
48
51
|
module.exports = exports.default;
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21waWxlci90ZXN0LWZpbGUvYmFzZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLG1DQUEyRDtBQUMzRCwyREFBZ0U7QUFDaEUsMEVBQXNFO0FBRXRFLE1BQXFCLG9CQUFvQjtJQUNyQyxZQUFhLEVBQUUsT0FBTyxFQUFFO1FBQ3BCLE1BQU0sVUFBVSxHQUFHLElBQUEsZ0JBQU8sRUFBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUM7YUFDckQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBQSxxQkFBUSxFQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3pCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVmLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLFVBQVUsSUFBSSxDQUFDLENBQUM7UUFFM0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsY0FBYyxDQUFFLEdBQUc7UUFDZixJQUFJLENBQUMsR0FBRztZQUNKLE9BQU87UUFFWCxJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztRQUVuQixJQUFBLDRCQUFVLEVBQUMsb0JBQUUsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0RSxJQUFBLDZCQUFhLEVBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBRTlDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBQSxzQkFBTSxFQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsU0FBUyxFQUFFLFVBQVU7UUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxxQkFBcUI7UUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxFQUFFLG1CQUFtQjtRQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLEVBQUUsb0JBQW9CO1FBQy9CLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU8sRUFBRSw0QkFBNEI7UUFDdkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxVQUFVLENBQUUsSUFBSSxFQUFFLFFBQVE7UUFDdEIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDZixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2IsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELE9BQU87UUFDSCx5Q0FBeUM7SUFDN0MsQ0FBQztDQUNKO0FBMURELHVDQTBEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVzY2FwZVJlZ0V4cCBhcyBlc2NhcGVSZSwgZmxhdHRlbiB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBhc3NlcnRCYXNlVXJsLCBnZXRVcmwgfSBmcm9tICcuLi8uLi9hcGkvdGVzdC1wYWdlLXVybCc7XG5pbXBvcnQgeyBhc3NlcnRUeXBlLCBpcyB9IGZyb20gJy4uLy4uL2Vycm9ycy9ydW50aW1lL3R5cGUtYXNzZXJ0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlc3RGaWxlQ29tcGlsZXJCYXNlIHtcbiAgICBjb25zdHJ1Y3RvciAoeyBiYXNlVXJsIH0pIHtcbiAgICAgICAgY29uc3QgZXNjYXBlZEV4dCA9IGZsYXR0ZW4oW3RoaXMuZ2V0U3VwcG9ydGVkRXh0ZW5zaW9uKCldKVxuICAgICAgICAgICAgLm1hcChleHQgPT4gZXNjYXBlUmUoZXh0KSlcbiAgICAgICAgICAgIC5qb2luKCd8Jyk7XG5cbiAgICAgICAgdGhpcy5zdXBwb3J0ZWRFeHRlbnNpb25SZSA9IG5ldyBSZWdFeHAoYCgke2VzY2FwZWRFeHR9KSRgKTtcblxuICAgICAgICB0aGlzLl9lbnN1cmVCYXNlVXJsKGJhc2VVcmwpO1xuICAgIH1cblxuICAgIF9lbnN1cmVCYXNlVXJsICh1cmwpIHtcbiAgICAgICAgaWYgKCF1cmwpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdGhpcy5iYXNlVXJsID0gdXJsO1xuXG4gICAgICAgIGFzc2VydFR5cGUoaXMuc3RyaW5nLCAnX2Vuc3VyZUJhc2VVcmwnLCAnVGhlIGJhc2UgVVJMJywgdGhpcy5iYXNlVXJsKTtcbiAgICAgICAgYXNzZXJ0QmFzZVVybCh0aGlzLmJhc2VVcmwsICdfZW5zdXJlQmFzZVVybCcpO1xuXG4gICAgICAgIHRoaXMuYmFzZVVybCA9IGdldFVybCh0aGlzLmJhc2VVcmwpO1xuICAgIH1cblxuICAgIF9oYXNUZXN0cyAoLyogY29kZSAqLykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuICAgIH1cblxuICAgIGdldFN1cHBvcnRlZEV4dGVuc2lvbiAoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gICAgfVxuXG4gICAgYXN5bmMgcHJlY29tcGlsZSAoLyogdGVzdEZpbGVzSW5mbyAqLykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuICAgIH1cblxuICAgIGFzeW5jIGNvbXBpbGUgKC8qIGNvZGUsIGZpbGVuYW1lICovKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gICAgfVxuXG4gICAgYXN5bmMgZXhlY3V0ZSAoLyogY29tcGlsZWRDb2RlLCBmaWxlbmFtZSAqLykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuICAgIH1cblxuICAgIGNhbkNvbXBpbGUgKGNvZGUsIGZpbGVuYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN1cHBvcnRlZEV4dGVuc2lvblJlLnRlc3QoZmlsZW5hbWUpO1xuICAgIH1cblxuICAgIGdldCBjYW5Db21waWxlSW5Fc20gKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0IGNhblByZWNvbXBpbGUgKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY2xlYW5VcCAoKSB7XG4gICAgICAgIC8vIE5PVEU6IE9wdGlvbmFsLiBEbyBub3RoaW5nIGJ5IGRlZmF1bHQuXG4gICAgfVxufVxuIl19
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const coffeescript_1 = __importDefault(require("coffeescript"));
|
|
7
7
|
const load_libs_1 = __importDefault(require("../../../babel/load-libs"));
|
|
8
8
|
const compiler_js_1 = __importDefault(require("../es-next/compiler.js"));
|
|
9
|
+
const extensions_1 = __importDefault(require("../extensions"));
|
|
9
10
|
const FIXTURE_RE = /(^|;|\s+)fixture\s*(\.|\(|'|")/;
|
|
10
11
|
const TEST_RE = /(^|;|\s+)test\s*/;
|
|
11
12
|
class CoffeeScriptTestFileCompiler extends compiler_js_1.default {
|
|
@@ -23,18 +24,18 @@ class CoffeeScriptTestFileCompiler extends compiler_js_1.default {
|
|
|
23
24
|
header: false,
|
|
24
25
|
});
|
|
25
26
|
const { babel } = (0, load_libs_1.default)();
|
|
26
|
-
const babelOptions = compiler_js_1.default.getBabelOptions(filename, code);
|
|
27
|
+
const babelOptions = compiler_js_1.default.getBabelOptions(filename, code, this);
|
|
27
28
|
const compiled = babel.transform(transpiled.js, babelOptions);
|
|
28
29
|
this.cache[filename] = compiled.code;
|
|
29
30
|
return compiled.code;
|
|
30
31
|
}
|
|
31
32
|
_getRequireCompilers() {
|
|
32
|
-
return {
|
|
33
|
+
return { [extensions_1.default.coffee]: (code, filename) => this._compileCode(code, filename) };
|
|
33
34
|
}
|
|
34
35
|
getSupportedExtension() {
|
|
35
|
-
return
|
|
36
|
+
return extensions_1.default.coffee;
|
|
36
37
|
}
|
|
37
38
|
}
|
|
38
39
|
exports.default = CoffeeScriptTestFileCompiler;
|
|
39
40
|
module.exports = exports.default;
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcGlsZXIvdGVzdC1maWxlL2Zvcm1hdHMvY29mZmVlc2NyaXB0L2NvbXBpbGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsZ0VBQXdDO0FBQ3hDLHlFQUFxRDtBQUNyRCx5RUFBNEQ7QUFDNUQsK0RBQXVDO0FBRXZDLE1BQU0sVUFBVSxHQUFHLGdDQUFnQyxDQUFDO0FBQ3BELE1BQU0sT0FBTyxHQUFNLGtCQUFrQixDQUFDO0FBRXRDLE1BQXFCLDRCQUE2QixTQUFRLHFCQUFzQjtJQUM1RSxTQUFTLENBQUUsSUFBSTtRQUNYLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxZQUFZLENBQUUsSUFBSSxFQUFFLFFBQVE7UUFDeEIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUNwQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFaEMsTUFBTSxVQUFVLEdBQUcsc0JBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO1lBQzFDLFFBQVE7WUFDUixJQUFJLEVBQU8sSUFBSTtZQUNmLFNBQVMsRUFBRSxJQUFJO1lBQ2YsU0FBUyxFQUFFLElBQUk7WUFDZixNQUFNLEVBQUssS0FBSztTQUNuQixDQUFDLENBQUM7UUFFSCxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQU0sSUFBQSxtQkFBYSxHQUFFLENBQUM7UUFDckMsTUFBTSxZQUFZLEdBQUcscUJBQXNCLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEYsTUFBTSxRQUFRLEdBQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRWxFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztRQUVyQyxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDekIsQ0FBQztJQUVELG9CQUFvQjtRQUNoQixPQUFPLEVBQUUsQ0FBQyxvQkFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQztJQUMxRixDQUFDO0lBRUQscUJBQXFCO1FBQ2pCLE9BQU8sb0JBQVUsQ0FBQyxNQUFNLENBQUM7SUFDN0IsQ0FBQztDQUNKO0FBakNELCtDQWlDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb2ZmZWVTY3JpcHQgZnJvbSAnY29mZmVlc2NyaXB0JztcbmltcG9ydCBsb2FkQmFiZWxMaWJzIGZyb20gJy4uLy4uLy4uL2JhYmVsL2xvYWQtbGlicyc7XG5pbXBvcnQgRVNOZXh0VGVzdEZpbGVDb21waWxlciBmcm9tICcuLi9lcy1uZXh0L2NvbXBpbGVyLmpzJztcbmltcG9ydCBFeHRlbnNpb25zIGZyb20gJy4uL2V4dGVuc2lvbnMnO1xuXG5jb25zdCBGSVhUVVJFX1JFID0gLyhefDt8XFxzKylmaXh0dXJlXFxzKihcXC58XFwofCd8XCIpLztcbmNvbnN0IFRFU1RfUkUgICAgPSAvKF58O3xcXHMrKXRlc3RcXHMqLztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29mZmVlU2NyaXB0VGVzdEZpbGVDb21waWxlciBleHRlbmRzIEVTTmV4dFRlc3RGaWxlQ29tcGlsZXIge1xuICAgIF9oYXNUZXN0cyAoY29kZSkge1xuICAgICAgICByZXR1cm4gRklYVFVSRV9SRS50ZXN0KGNvZGUpICYmIFRFU1RfUkUudGVzdChjb2RlKTtcbiAgICB9XG5cbiAgICBfY29tcGlsZUNvZGUgKGNvZGUsIGZpbGVuYW1lKSB7XG4gICAgICAgIGlmICh0aGlzLmNhY2hlW2ZpbGVuYW1lXSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhY2hlW2ZpbGVuYW1lXTtcblxuICAgICAgICBjb25zdCB0cmFuc3BpbGVkID0gQ29mZmVlU2NyaXB0LmNvbXBpbGUoY29kZSwge1xuICAgICAgICAgICAgZmlsZW5hbWUsXG4gICAgICAgICAgICBiYXJlOiAgICAgIHRydWUsXG4gICAgICAgICAgICBzb3VyY2VNYXA6IHRydWUsXG4gICAgICAgICAgICBpbmxpbmVNYXA6IHRydWUsXG4gICAgICAgICAgICBoZWFkZXI6ICAgIGZhbHNlLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB7IGJhYmVsIH0gICAgPSBsb2FkQmFiZWxMaWJzKCk7XG4gICAgICAgIGNvbnN0IGJhYmVsT3B0aW9ucyA9IEVTTmV4dFRlc3RGaWxlQ29tcGlsZXIuZ2V0QmFiZWxPcHRpb25zKGZpbGVuYW1lLCBjb2RlLCB0aGlzKTtcbiAgICAgICAgY29uc3QgY29tcGlsZWQgICAgID0gYmFiZWwudHJhbnNmb3JtKHRyYW5zcGlsZWQuanMsIGJhYmVsT3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5jYWNoZVtmaWxlbmFtZV0gPSBjb21waWxlZC5jb2RlO1xuXG4gICAgICAgIHJldHVybiBjb21waWxlZC5jb2RlO1xuICAgIH1cblxuICAgIF9nZXRSZXF1aXJlQ29tcGlsZXJzICgpIHtcbiAgICAgICAgcmV0dXJuIHsgW0V4dGVuc2lvbnMuY29mZmVlXTogKGNvZGUsIGZpbGVuYW1lKSA9PiB0aGlzLl9jb21waWxlQ29kZShjb2RlLCBmaWxlbmFtZSkgfTtcbiAgICB9XG5cbiAgICBnZXRTdXBwb3J0ZWRFeHRlbnNpb24gKCkge1xuICAgICAgICByZXR1cm4gRXh0ZW5zaW9ucy5jb2ZmZWU7XG4gICAgfVxufVxuIl19
|
|
@@ -8,12 +8,14 @@ const api_based_1 = __importDefault(require("../../api-based"));
|
|
|
8
8
|
const is_flow_code_1 = __importDefault(require("./is-flow-code"));
|
|
9
9
|
const get_base_babel_options_1 = __importDefault(require("../../../babel/get-base-babel-options"));
|
|
10
10
|
const disable_v8_optimization_note_1 = __importDefault(require("../../disable-v8-optimization-note"));
|
|
11
|
-
const
|
|
11
|
+
const extensions_1 = __importDefault(require("../extensions"));
|
|
12
|
+
//NOTE: The semicolon ; prevents the declaration from being bound with eval
|
|
13
|
+
const DISABLE_V8_OPTIMIZATION_CODE = `;/*${disable_v8_optimization_note_1.default}*/
|
|
12
14
|
eval("");
|
|
13
15
|
`;
|
|
14
16
|
class ESNextTestFileCompiler extends api_based_1.default {
|
|
15
|
-
static getBabelOptions(filename, code, isCompilerServiceMode) {
|
|
16
|
-
const { presetStage2, presetFlow, transformRuntime, presetEnvForTestCode, presetReact, moduleResolver, proposalPrivateMethods, proposalClassProperties, } = (0, load_libs_1.default)(isCompilerServiceMode);
|
|
17
|
+
static getBabelOptions(filename, code, { isCompilerServiceMode, experimentalEsm } = {}) {
|
|
18
|
+
const { presetStage2, presetFlow, transformRuntime, presetEnvForTestCode, presetReact, moduleResolver, proposalPrivateMethods, proposalClassProperties, } = (0, load_libs_1.default)({ isCompilerServiceMode, experimentalEsm });
|
|
17
19
|
const opts = Object.assign({}, get_base_babel_options_1.default, {
|
|
18
20
|
presets: [presetStage2, presetEnvForTestCode, presetReact],
|
|
19
21
|
plugins: [transformRuntime, moduleResolver, proposalPrivateMethods, proposalClassProperties],
|
|
@@ -25,26 +27,34 @@ class ESNextTestFileCompiler extends api_based_1.default {
|
|
|
25
27
|
return opts;
|
|
26
28
|
}
|
|
27
29
|
_compileCode(code, filename) {
|
|
28
|
-
const { babel } = (0, load_libs_1.default)();
|
|
30
|
+
const { babel } = (0, load_libs_1.default)(this);
|
|
29
31
|
if (this.cache[filename])
|
|
30
32
|
return this.cache[filename];
|
|
31
|
-
if (this.isCompilerServiceMode)
|
|
33
|
+
if (this.isCompilerServiceMode || this.experimentalEsm)
|
|
32
34
|
code += DISABLE_V8_OPTIMIZATION_CODE;
|
|
33
|
-
const opts = ESNextTestFileCompiler.getBabelOptions(filename, code, this
|
|
35
|
+
const opts = ESNextTestFileCompiler.getBabelOptions(filename, code, this);
|
|
34
36
|
const compiled = babel.transform(code, opts);
|
|
35
37
|
this.cache[filename] = compiled.code;
|
|
36
38
|
return compiled.code;
|
|
37
39
|
}
|
|
38
40
|
_getRequireCompilers() {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
41
|
+
const requireCompilers = {
|
|
42
|
+
[extensions_1.default.js]: (code, filename) => this._compileCode(code, filename),
|
|
43
|
+
[extensions_1.default.jsx]: (code, filename) => this._compileCode(code, filename),
|
|
44
|
+
[extensions_1.default.cjs]: (code, filename) => this._compileCode(code, filename),
|
|
42
45
|
};
|
|
46
|
+
if (this.experimentalEsm)
|
|
47
|
+
requireCompilers[extensions_1.default.mjs] = (code, filename) => this._compileCode(code, filename);
|
|
48
|
+
return requireCompilers;
|
|
49
|
+
}
|
|
50
|
+
get canCompileInEsm() {
|
|
51
|
+
return true;
|
|
43
52
|
}
|
|
44
53
|
getSupportedExtension() {
|
|
45
|
-
|
|
54
|
+
const supportedExtensions = [extensions_1.default.js, extensions_1.default.jsx, extensions_1.default.cjs, extensions_1.default.mjs];
|
|
55
|
+
return supportedExtensions;
|
|
46
56
|
}
|
|
47
57
|
}
|
|
48
58
|
exports.default = ESNextTestFileCompiler;
|
|
49
59
|
module.exports = exports.default;
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcGlsZXIvdGVzdC1maWxlL2Zvcm1hdHMvZXMtbmV4dC9jb21waWxlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHlFQUFxRDtBQUNyRCxnRUFBMkQ7QUFDM0Qsa0VBQXdDO0FBQ3hDLG1HQUF1RTtBQUN2RSxzR0FBOEU7QUFDOUUsK0RBQXVDO0FBRXZDLDJFQUEyRTtBQUMzRSxNQUFNLDRCQUE0QixHQUNsQyxNQUFNLHNDQUE0Qjs7Q0FFakMsQ0FBQztBQUVGLE1BQXFCLHNCQUF1QixTQUFRLG1CQUE0QjtJQUU1RSxNQUFNLENBQUMsZUFBZSxDQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsR0FBRyxFQUFFO1FBQ25GLE1BQU0sRUFDRixZQUFZLEVBQ1osVUFBVSxFQUNWLGdCQUFnQixFQUNoQixvQkFBb0IsRUFDcEIsV0FBVyxFQUNYLGNBQWMsRUFDZCxzQkFBc0IsRUFDdEIsdUJBQXVCLEdBQzFCLEdBQUcsSUFBQSxtQkFBYSxFQUFDLEVBQUUscUJBQXFCLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUU5RCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxnQ0FBa0IsRUFBRTtZQUMvQyxPQUFPLEVBQUssQ0FBQyxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsV0FBVyxDQUFDO1lBQzdELE9BQU8sRUFBSyxDQUFDLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxzQkFBc0IsRUFBRSx1QkFBdUIsQ0FBQztZQUMvRixVQUFVLEVBQUUsUUFBUTtZQUNwQixRQUFRO1NBQ1gsQ0FBQyxDQUFDO1FBRUgsSUFBSSxJQUFBLHNCQUFVLEVBQUMsSUFBSSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRWxDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxZQUFZLENBQUUsSUFBSSxFQUFFLFFBQVE7UUFDeEIsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUEsbUJBQWEsRUFBQyxJQUFJLENBQUMsQ0FBQztRQUV0QyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO1lBQ3BCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVoQyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxJQUFJLENBQUMsZUFBZTtZQUNsRCxJQUFJLElBQUksNEJBQTRCLENBQUM7UUFFekMsTUFBTSxJQUFJLEdBQU8sc0JBQXNCLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDOUUsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFN0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBRXJDLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztJQUN6QixDQUFDO0lBRUQsb0JBQW9CO1FBQ2hCLE1BQU0sZ0JBQWdCLEdBQUc7WUFDckIsQ0FBQyxvQkFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFHLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDO1lBQ3ZFLENBQUMsb0JBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQztZQUN2RSxDQUFDLG9CQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUM7U0FDMUUsQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLGVBQWU7WUFDcEIsZ0JBQWdCLENBQUMsb0JBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRTdGLE9BQU8sZ0JBQWdCLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksZUFBZTtRQUNmLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxxQkFBcUI7UUFDakIsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLG9CQUFVLENBQUMsRUFBRSxFQUFFLG9CQUFVLENBQUMsR0FBRyxFQUFFLG9CQUFVLENBQUMsR0FBRyxFQUFFLG9CQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFNUYsT0FBTyxtQkFBbUIsQ0FBQztJQUMvQixDQUFDO0NBQ0o7QUFsRUQseUNBa0VDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvYWRCYWJlbExpYnMgZnJvbSAnLi4vLi4vLi4vYmFiZWwvbG9hZC1saWJzJztcbmltcG9ydCBBUElCYXNlZFRlc3RGaWxlQ29tcGlsZXJCYXNlIGZyb20gJy4uLy4uL2FwaS1iYXNlZCc7XG5pbXBvcnQgaXNGbG93Q29kZSBmcm9tICcuL2lzLWZsb3ctY29kZSc7XG5pbXBvcnQgQkFTRV9CQUJFTF9PUFRJT05TIGZyb20gJy4uLy4uLy4uL2JhYmVsL2dldC1iYXNlLWJhYmVsLW9wdGlvbnMnO1xuaW1wb3J0IERJU0FCTEVfVjhfT1BUSU1JWkFUSU9OX05PVEUgZnJvbSAnLi4vLi4vZGlzYWJsZS12OC1vcHRpbWl6YXRpb24tbm90ZSc7XG5pbXBvcnQgRXh0ZW5zaW9ucyBmcm9tICcuLi9leHRlbnNpb25zJztcblxuLy9OT1RFOiBUaGUgc2VtaWNvbG9uIDsgcHJldmVudHMgdGhlIGRlY2xhcmF0aW9uIGZyb20gYmVpbmcgYm91bmQgd2l0aCBldmFsXG5jb25zdCBESVNBQkxFX1Y4X09QVElNSVpBVElPTl9DT0RFID1cbmA7Lyoke0RJU0FCTEVfVjhfT1BUSU1JWkFUSU9OX05PVEV9Ki9cbmV2YWwoXCJcIik7XG5gO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFU05leHRUZXN0RmlsZUNvbXBpbGVyIGV4dGVuZHMgQVBJQmFzZWRUZXN0RmlsZUNvbXBpbGVyQmFzZSB7XG5cbiAgICBzdGF0aWMgZ2V0QmFiZWxPcHRpb25zIChmaWxlbmFtZSwgY29kZSwgeyBpc0NvbXBpbGVyU2VydmljZU1vZGUsIGV4cGVyaW1lbnRhbEVzbSB9ID0ge30pIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgcHJlc2V0U3RhZ2UyLFxuICAgICAgICAgICAgcHJlc2V0RmxvdyxcbiAgICAgICAgICAgIHRyYW5zZm9ybVJ1bnRpbWUsXG4gICAgICAgICAgICBwcmVzZXRFbnZGb3JUZXN0Q29kZSxcbiAgICAgICAgICAgIHByZXNldFJlYWN0LFxuICAgICAgICAgICAgbW9kdWxlUmVzb2x2ZXIsXG4gICAgICAgICAgICBwcm9wb3NhbFByaXZhdGVNZXRob2RzLFxuICAgICAgICAgICAgcHJvcG9zYWxDbGFzc1Byb3BlcnRpZXMsXG4gICAgICAgIH0gPSBsb2FkQmFiZWxMaWJzKHsgaXNDb21waWxlclNlcnZpY2VNb2RlLCBleHBlcmltZW50YWxFc20gfSk7XG5cbiAgICAgICAgY29uc3Qgb3B0cyA9IE9iamVjdC5hc3NpZ24oe30sIEJBU0VfQkFCRUxfT1BUSU9OUywge1xuICAgICAgICAgICAgcHJlc2V0czogICAgW3ByZXNldFN0YWdlMiwgcHJlc2V0RW52Rm9yVGVzdENvZGUsIHByZXNldFJlYWN0XSxcbiAgICAgICAgICAgIHBsdWdpbnM6ICAgIFt0cmFuc2Zvcm1SdW50aW1lLCBtb2R1bGVSZXNvbHZlciwgcHJvcG9zYWxQcml2YXRlTWV0aG9kcywgcHJvcG9zYWxDbGFzc1Byb3BlcnRpZXNdLFxuICAgICAgICAgICAgc291cmNlTWFwczogJ2lubGluZScsXG4gICAgICAgICAgICBmaWxlbmFtZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGlzRmxvd0NvZGUoY29kZSkpXG4gICAgICAgICAgICBvcHRzLnByZXNldHMucHVzaChwcmVzZXRGbG93KTtcblxuICAgICAgICByZXR1cm4gb3B0cztcbiAgICB9XG5cbiAgICBfY29tcGlsZUNvZGUgKGNvZGUsIGZpbGVuYW1lKSB7XG4gICAgICAgIGNvbnN0IHsgYmFiZWwgfSA9IGxvYWRCYWJlbExpYnModGhpcyk7XG5cbiAgICAgICAgaWYgKHRoaXMuY2FjaGVbZmlsZW5hbWVdKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVbZmlsZW5hbWVdO1xuXG4gICAgICAgIGlmICh0aGlzLmlzQ29tcGlsZXJTZXJ2aWNlTW9kZSB8fCB0aGlzLmV4cGVyaW1lbnRhbEVzbSlcbiAgICAgICAgICAgIGNvZGUgKz0gRElTQUJMRV9WOF9PUFRJTUlaQVRJT05fQ09ERTtcblxuICAgICAgICBjb25zdCBvcHRzICAgICA9IEVTTmV4dFRlc3RGaWxlQ29tcGlsZXIuZ2V0QmFiZWxPcHRpb25zKGZpbGVuYW1lLCBjb2RlLCB0aGlzKTtcbiAgICAgICAgY29uc3QgY29tcGlsZWQgPSBiYWJlbC50cmFuc2Zvcm0oY29kZSwgb3B0cyk7XG5cbiAgICAgICAgdGhpcy5jYWNoZVtmaWxlbmFtZV0gPSBjb21waWxlZC5jb2RlO1xuXG4gICAgICAgIHJldHVybiBjb21waWxlZC5jb2RlO1xuICAgIH1cblxuICAgIF9nZXRSZXF1aXJlQ29tcGlsZXJzICgpIHtcbiAgICAgICAgY29uc3QgcmVxdWlyZUNvbXBpbGVycyA9IHtcbiAgICAgICAgICAgIFtFeHRlbnNpb25zLmpzXTogIChjb2RlLCBmaWxlbmFtZSkgPT4gdGhpcy5fY29tcGlsZUNvZGUoY29kZSwgZmlsZW5hbWUpLFxuICAgICAgICAgICAgW0V4dGVuc2lvbnMuanN4XTogKGNvZGUsIGZpbGVuYW1lKSA9PiB0aGlzLl9jb21waWxlQ29kZShjb2RlLCBmaWxlbmFtZSksXG4gICAgICAgICAgICBbRXh0ZW5zaW9ucy5janNdOiAoY29kZSwgZmlsZW5hbWUpID0+IHRoaXMuX2NvbXBpbGVDb2RlKGNvZGUsIGZpbGVuYW1lKSxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy5leHBlcmltZW50YWxFc20pXG4gICAgICAgICAgICByZXF1aXJlQ29tcGlsZXJzW0V4dGVuc2lvbnMubWpzXSA9IChjb2RlLCBmaWxlbmFtZSkgPT4gdGhpcy5fY29tcGlsZUNvZGUoY29kZSwgZmlsZW5hbWUpO1xuXG4gICAgICAgIHJldHVybiByZXF1aXJlQ29tcGlsZXJzO1xuICAgIH1cblxuICAgIGdldCBjYW5Db21waWxlSW5Fc20gKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBnZXRTdXBwb3J0ZWRFeHRlbnNpb24gKCkge1xuICAgICAgICBjb25zdCBzdXBwb3J0ZWRFeHRlbnNpb25zID0gW0V4dGVuc2lvbnMuanMsIEV4dGVuc2lvbnMuanN4LCBFeHRlbnNpb25zLmNqcywgRXh0ZW5zaW9ucy5tanNdO1xuXG4gICAgICAgIHJldHVybiBzdXBwb3J0ZWRFeHRlbnNpb25zO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var Extensions;
|
|
4
|
+
(function (Extensions) {
|
|
5
|
+
Extensions["js"] = ".js";
|
|
6
|
+
Extensions["cjs"] = ".cjs";
|
|
7
|
+
Extensions["mjs"] = ".mjs";
|
|
8
|
+
Extensions["ts"] = ".ts";
|
|
9
|
+
Extensions["jsx"] = ".jsx";
|
|
10
|
+
Extensions["tsx"] = ".tsx";
|
|
11
|
+
Extensions["coffee"] = ".coffee";
|
|
12
|
+
})(Extensions || (Extensions = {}));
|
|
13
|
+
exports.default = Extensions;
|
|
14
|
+
module.exports = exports.default;
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5zaW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21waWxlci90ZXN0LWZpbGUvZm9ybWF0cy9leHRlbnNpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsSUFBSyxVQVFKO0FBUkQsV0FBSyxVQUFVO0lBQ1gsd0JBQVUsQ0FBQTtJQUNWLDBCQUFZLENBQUE7SUFDWiwwQkFBWSxDQUFBO0lBQ1osd0JBQVUsQ0FBQTtJQUNWLDBCQUFZLENBQUE7SUFDWiwwQkFBWSxDQUFBO0lBQ1osZ0NBQWtCLENBQUE7QUFDdEIsQ0FBQyxFQVJJLFVBQVUsS0FBVixVQUFVLFFBUWQ7QUFFRCxrQkFBZSxVQUFVLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJlbnVtIEV4dGVuc2lvbnMge1xuICAgIGpzID0gJy5qcycsXG4gICAgY2pzID0gJy5janMnLFxuICAgIG1qcyA9ICcubWpzJyxcbiAgICB0cyA9ICcudHMnLFxuICAgIGpzeCA9ICcuanN4JyxcbiAgICB0c3ggPSAnLnRzeCcsXG4gICAgY29mZmVlID0gJy5jb2ZmZWUnLFxufVxuXG5leHBvcnQgZGVmYXVsdCBFeHRlbnNpb25zO1xuIl19
|
|
@@ -36,18 +36,21 @@ const runtime_1 = require("../../../../errors/runtime");
|
|
|
36
36
|
const types_1 = require("../../../../errors/types");
|
|
37
37
|
const debug_1 = __importDefault(require("debug"));
|
|
38
38
|
const test_page_url_1 = require("../../../../api/test-page-url");
|
|
39
|
-
const
|
|
39
|
+
const get_exportable_lib_path_1 = __importDefault(require("../../get-exportable-lib-path"));
|
|
40
40
|
const disable_v8_optimization_note_1 = __importDefault(require("../../disable-v8-optimization-note"));
|
|
41
41
|
// NOTE: For type definitions only
|
|
42
42
|
const typescript_1 = __importStar(require("typescript"));
|
|
43
|
+
const extensions_1 = __importDefault(require("../extensions"));
|
|
43
44
|
const tsFactory = typescript_1.default.factory;
|
|
44
|
-
function testcafeImportPathReplacer() {
|
|
45
|
+
function testcafeImportPathReplacer(experimentalEsm) {
|
|
45
46
|
return context => {
|
|
46
47
|
const visit = (node) => {
|
|
47
48
|
var _a;
|
|
48
49
|
// @ts-ignore
|
|
49
|
-
if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.kind) === typescript_1.SyntaxKind.ImportDeclaration && node.kind === typescript_1.SyntaxKind.StringLiteral && node.text === 'testcafe')
|
|
50
|
-
|
|
50
|
+
if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.kind) === typescript_1.SyntaxKind.ImportDeclaration && node.kind === typescript_1.SyntaxKind.StringLiteral && node.text === 'testcafe') {
|
|
51
|
+
const libPath = (0, get_exportable_lib_path_1.default)(experimentalEsm);
|
|
52
|
+
return tsFactory.createStringLiteral(libPath);
|
|
53
|
+
}
|
|
51
54
|
return (0, typescript_1.visitEachChild)(node, child => visit(child), context);
|
|
52
55
|
};
|
|
53
56
|
return node => (0, typescript_1.visitNode)(node, visit);
|
|
@@ -65,11 +68,11 @@ function disableV8OptimizationCodeAppender() {
|
|
|
65
68
|
};
|
|
66
69
|
}
|
|
67
70
|
const DEBUG_LOGGER = (0, debug_1.default)('testcafe:compiler:typescript');
|
|
68
|
-
const RENAMED_DEPENDENCIES_MAP = new Map([['testcafe',
|
|
71
|
+
const RENAMED_DEPENDENCIES_MAP = new Map([['testcafe', (0, get_exportable_lib_path_1.default)()]]);
|
|
69
72
|
const DEFAULT_TYPESCRIPT_COMPILER_PATH = 'typescript';
|
|
70
73
|
class TypeScriptTestFileCompiler extends api_based_1.default {
|
|
71
|
-
constructor(compilerOptions, { isCompilerServiceMode, baseUrl } = {}) {
|
|
72
|
-
super({ isCompilerServiceMode, baseUrl });
|
|
74
|
+
constructor(compilerOptions, { isCompilerServiceMode, baseUrl, experimentalEsm } = {}) {
|
|
75
|
+
super({ isCompilerServiceMode, baseUrl, experimentalEsm });
|
|
73
76
|
// NOTE: At present, it's necessary create an instance TypeScriptTestFileCompiler
|
|
74
77
|
// to collect a list of supported test file extensions.
|
|
75
78
|
// So all compilers creates 2 times: first time - for collecting all supported file extensions,
|
|
@@ -77,7 +80,7 @@ class TypeScriptTestFileCompiler extends api_based_1.default {
|
|
|
77
80
|
// In future, need to rewrite 'getSupportedExtension' method as static.
|
|
78
81
|
const configPath = compilerOptions && compilerOptions.configPath || null;
|
|
79
82
|
this._customCompilerOptions = compilerOptions && compilerOptions.options;
|
|
80
|
-
this._tsConfig = new typescript_configuration_1.default(configPath, isCompilerServiceMode);
|
|
83
|
+
this._tsConfig = new typescript_configuration_1.default(configPath, isCompilerServiceMode || experimentalEsm);
|
|
81
84
|
this._compilerPath = TypeScriptTestFileCompiler._getCompilerPath(compilerOptions);
|
|
82
85
|
}
|
|
83
86
|
static _getCompilerPath(compilerOptions) {
|
|
@@ -155,8 +158,8 @@ class TypeScriptTestFileCompiler extends api_based_1.default {
|
|
|
155
158
|
});
|
|
156
159
|
}
|
|
157
160
|
_getTypescriptTransformers() {
|
|
158
|
-
const transformers = [testcafeImportPathReplacer()];
|
|
159
|
-
if (this.isCompilerServiceMode)
|
|
161
|
+
const transformers = [testcafeImportPathReplacer(this.experimentalEsm)];
|
|
162
|
+
if (this.isCompilerServiceMode || this.experimentalEsm)
|
|
160
163
|
transformers.push(disableV8OptimizationCodeAppender());
|
|
161
164
|
return transformers;
|
|
162
165
|
}
|
|
@@ -175,21 +178,28 @@ class TypeScriptTestFileCompiler extends api_based_1.default {
|
|
|
175
178
|
return normalizedFilenames.map(filename => this.cache[filename]);
|
|
176
179
|
}
|
|
177
180
|
_getRequireCompilers() {
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
181
|
+
const requireCompilers = {
|
|
182
|
+
[extensions_1.default.ts]: (code, filename) => this._compileCode(code, filename),
|
|
183
|
+
[extensions_1.default.tsx]: (code, filename) => this._compileCode(code, filename),
|
|
184
|
+
[extensions_1.default.js]: (code, filename) => compiler_1.default.prototype._compileCode.call(this, code, filename),
|
|
185
|
+
[extensions_1.default.cjs]: (code, filename) => compiler_1.default.prototype._compileCode.call(this, code, filename),
|
|
186
|
+
[extensions_1.default.jsx]: (code, filename) => compiler_1.default.prototype._compileCode.call(this, code, filename),
|
|
183
187
|
};
|
|
188
|
+
if (this.experimentalEsm)
|
|
189
|
+
requireCompilers[extensions_1.default.mjs] = (code, filename) => compiler_1.default.prototype._compileCode.call(this, code, filename);
|
|
190
|
+
return requireCompilers;
|
|
184
191
|
}
|
|
185
192
|
get canPrecompile() {
|
|
186
193
|
return true;
|
|
187
194
|
}
|
|
195
|
+
get canCompileInEsm() {
|
|
196
|
+
return true;
|
|
197
|
+
}
|
|
188
198
|
getSupportedExtension() {
|
|
189
|
-
return [
|
|
199
|
+
return [extensions_1.default.ts, extensions_1.default.tsx];
|
|
190
200
|
}
|
|
191
201
|
}
|
|
192
202
|
exports.default = TypeScriptTestFileCompiler;
|
|
193
203
|
TypeScriptTestFileCompiler.tsDefsPath = TypeScriptTestFileCompiler._getTSDefsPath();
|
|
194
204
|
module.exports = exports.default;
|
|
195
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcGlsZXIvdGVzdC1maWxlL2Zvcm1hdHMvdHlwZXNjcmlwdC9jb21waWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0RBQXdCO0FBQ3hCLG1DQUFtQztBQUNuQywwREFBMkI7QUFDM0IsZ0VBQTJEO0FBQzNELG1FQUF5RDtBQUN6RCxrSEFBeUY7QUFDekYsd0RBQTBEO0FBQzFELG9EQUEwRDtBQUMxRCxrREFBMEI7QUFDMUIsaUVBQTJEO0FBQzNELGtGQUEyRDtBQUMzRCxzR0FBOEU7QUFFOUUsa0NBQWtDO0FBQ2xDLHlEQVdvQjtBQU9wQixNQUFNLFNBQVMsR0FBRyxvQkFBVSxDQUFDLE9BQU8sQ0FBQztBQWNyQyxTQUFTLDBCQUEwQjtJQUMvQixPQUFPLE9BQU8sQ0FBQyxFQUFFO1FBQ2IsTUFBTSxLQUFLLEdBQVksQ0FBQyxJQUFJLEVBQXFCLEVBQUU7O1lBQy9DLGFBQWE7WUFDYixJQUFJLENBQUEsTUFBQSxJQUFJLENBQUMsTUFBTSwwQ0FBRSxJQUFJLE1BQUssdUJBQVUsQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLHVCQUFVLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssVUFBVTtnQkFDeEgsT0FBTyxTQUFTLENBQUMsbUJBQW1CLENBQUMsNEJBQW1CLENBQUMsQ0FBQztZQUU5RCxPQUFPLElBQUEsMkJBQWMsRUFBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUFDO1FBRUYsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUEsc0JBQVMsRUFBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDMUMsQ0FBQyxDQUFDO0FBQ04s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QXJLTCw2Q0FzS0M7QUFyS2tCLHFDQUFVLEdBQUcsMEJBQTBCLENBQUMsY0FBYyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IHppcE9iamVjdCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgT1MgZnJvbSAnb3MtZmFtaWx5JztcbmltcG9ydCBBUElCYXNlZFRlc3RGaWxlQ29tcGlsZXJCYXNlIGZyb20gJy4uLy4uL2FwaS1iYXNlZCc7XG5pbXBvcnQgRVNOZXh0VGVzdEZpbGVDb21waWxlciBmcm9tICcuLi9lcy1uZXh0L2NvbXBpbGVyJztcbmltcG9ydCBUeXBlc2NyaXB0Q29uZmlndXJhdGlvbiBmcm9tICcuLi8uLi8uLi8uLi9jb25maWd1cmF0aW9uL3R5cGVzY3JpcHQtY29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBHZW5lcmFsRXJyb3IgfSBmcm9tICcuLi8uLi8uLi8uLi9lcnJvcnMvcnVudGltZSc7XG5pbXBvcnQgeyBSVU5USU1FX0VSUk9SUyB9IGZyb20gJy4uLy4uLy4uLy4uL2Vycm9ycy90eXBlcyc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IHsgaXNSZWxhdGl2ZSB9IGZyb20gJy4uLy4uLy4uLy4uL2FwaS90ZXN0LXBhZ2UtdXJsJztcbmltcG9ydCBFWFBPUlRBQkxFX0xJQl9QQVRIIGZyb20gJy4uLy4uL2V4cG9ydGJsZS1saWItcGF0aCc7XG5pbXBvcnQgRElTQUJMRV9WOF9PUFRJTUlaQVRJT05fTk9URSBmcm9tICcuLi8uLi9kaXNhYmxlLXY4LW9wdGltaXphdGlvbi1ub3RlJztcblxuLy8gTk9URTogRm9yIHR5cGUgZGVmaW5pdGlvbnMgb25seVxuaW1wb3J0IFR5cGVTY3JpcHQsIHtcbiAgICBDb21waWxlck9wdGlvbnNWYWx1ZSxcbiAgICBTeW50YXhLaW5kLFxuICAgIFZpc2l0UmVzdWx0LFxuICAgIFZpc2l0b3IsXG4gICAgTm9kZSxcbiAgICB2aXNpdEVhY2hDaGlsZCxcbiAgICB2aXNpdE5vZGUsXG4gICAgVHJhbnNmb3JtZXJGYWN0b3J5LFxuICAgIFNvdXJjZUZpbGUsXG4gICAgYWRkU3ludGhldGljTGVhZGluZ0NvbW1lbnQsXG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQgeyBEaWN0aW9uYXJ5LCBUeXBlU2NyaXB0Q29tcGlsZXJPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29uZmlndXJhdGlvbi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE9wdGlvbmFsQ29tcGlsZXJBcmd1bWVudHMgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzJztcblxuZGVjbGFyZSB0eXBlIFR5cGVTY3JpcHRJbnN0YW5jZSA9IHR5cGVvZiBUeXBlU2NyaXB0O1xuXG5jb25zdCB0c0ZhY3RvcnkgPSBUeXBlU2NyaXB0LmZhY3Rvcnk7XG5cbmludGVyZmFjZSBUZXN0RmlsZUluZm8ge1xuICAgIGZpbGVuYW1lOiBzdHJpbmc7XG59XG5cbmRlY2xhcmUgaW50ZXJmYWNlIFJlcXVpcmVDb21waWxlckZ1bmN0aW9uIHtcbiAgICAoY29kZTogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nKTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUmVxdWlyZUNvbXBpbGVycyB7XG4gICAgW2V4dGVuc2lvbjogc3RyaW5nXTogUmVxdWlyZUNvbXBpbGVyRnVuY3Rpb247XG59XG5cbmZ1bmN0aW9uIHRlc3RjYWZlSW1wb3J0UGF0aFJlcGxhY2VyPFQgZXh0ZW5kcyBOb2RlPiAoKTogVHJhbnNmb3JtZXJGYWN0b3J5PFQ+IHtcbiAgICByZXR1cm4gY29udGV4dCA9PiB7XG4gICAgICAgIGNvbnN0IHZpc2l0OiBWaXNpdG9yID0gKG5vZGUpOiBWaXNpdFJlc3VsdDxOb2RlPiA9PiB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBpZiAobm9kZS5wYXJlbnQ/LmtpbmQgPT09IFN5bnRheEtpbmQuSW1wb3J0RGVjbGFyYXRpb24gJiYgbm9kZS5raW5kID09PSBTeW50YXhLaW5kLlN0cmluZ0xpdGVyYWwgJiYgbm9kZS50ZXh0ID09PSAndGVzdGNhZmUnKVxuICAgICAgICAgICAgICAgIHJldHVybiB0c0ZhY3RvcnkuY3JlYXRlU3RyaW5nTGl0ZXJhbChFWFBPUlRBQkxFX0xJQl9QQVRIKTtcblxuICAgICAgICAgICAgcmV0dXJuIHZpc2l0RWFjaENoaWxkKG5vZGUsIGNoaWxkID0+IHZpc2l0KGNoaWxkKSwgY29udGV4dCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5vZGUgPT4gdmlzaXROb2RlKG5vZGUsIHZpc2l0KTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBkaXNhYmxlVjhPcHRpbWl6YXRpb25Db2RlQXBwZW5kZXI8VCBleHRlbmRzIE5vZGU+ICgpOiBUcmFuc2Zvcm1lckZhY3Rvcnk8VD4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHZpc2l0OiBWaXNpdG9yID0gKG5vZGUpOiBWaXNpdFJlc3VsdDxOb2RlPiA9PiB7XG4gICAgICAgICAgICBjb25zdCBldmFsU3RhdGVtZW50ID0gdHNGYWN0b3J5LmNyZWF0ZUV4cHJlc3Npb25TdGF0ZW1lbnQodHNGYWN0b3J5LmNyZWF0ZUNhbGxFeHByZXNzaW9uKFxuICAgICAgICAgICAgICAgIHRzRmFjdG9yeS5jcmVhdGVJZGVudGlmaWVyKCdldmFsJyksXG4gICAgICAgICAgICAgICAgdm9pZCAwLFxuICAgICAgICAgICAgICAgIFt0c0ZhY3RvcnkuY3JlYXRlU3RyaW5nTGl0ZXJhbCgnJyldXG4gICAgICAgICAgICApKTtcblxuICAgICAgICAgICAgY29uc3QgZXZhbFN0YXRlbWVudFdpdGhDb21tZW50ID0gYWRkU3ludGhldGljTGVhZGluZ0NvbW1lbnQoZXZhbFN0YXRlbWVudCwgU3ludGF4S2luZC5NdWx0aUxpbmVDb21tZW50VHJpdmlhLCBESVNBQkxFX1Y4X09QVElNSVpBVElPTl9OT1RFLCB0cnVlKTtcblxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgcmV0dXJuIHRzRmFjdG9yeS51cGRhdGVTb3VyY2VGaWxlKG5vZGUsIFsuLi5ub2RlLnN0YXRlbWVudHMsIGV2YWxTdGF0ZW1lbnRXaXRoQ29tbWVudF0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBub2RlID0+IHZpc2l0Tm9kZShub2RlLCB2aXNpdCk7XG4gICAgfTtcbn1cblxuXG5jb25zdCBERUJVR19MT0dHRVIgPSBkZWJ1ZygndGVzdGNhZmU6Y29tcGlsZXI6dHlwZXNjcmlwdCcpO1xuXG5jb25zdCBSRU5BTUVEX0RFUEVOREVOQ0lFU19NQVAgPSBuZXcgTWFwKFtbJ3Rlc3RjYWZlJywgRVhQT1JUQUJMRV9MSUJfUEFUSF1dKTtcblxuY29uc3QgREVGQVVMVF9UWVBFU0NSSVBUX0NPTVBJTEVSX1BBVEggPSAndHlwZXNjcmlwdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFR5cGVTY3JpcHRUZXN0RmlsZUNvbXBpbGVyIGV4dGVuZHMgQVBJQmFzZWRUZXN0RmlsZUNvbXBpbGVyQmFzZSB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgdHNEZWZzUGF0aCA9IFR5cGVTY3JpcHRUZXN0RmlsZUNvbXBpbGVyLl9nZXRUU0RlZnNQYXRoKCk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF90c0NvbmZpZzogVHlwZXNjcmlwdENvbmZpZ3VyYXRpb247XG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29tcGlsZXJQYXRoOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfY3VzdG9tQ29tcGlsZXJPcHRpb25zPzogb2JqZWN0O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yIChjb21waWxlck9wdGlvbnM/OiBUeXBlU2NyaXB0Q29tcGlsZXJPcHRpb25zLCB7IGlzQ29tcGlsZXJTZXJ2aWNlTW9kZSwgYmFzZVVybCB9OiBPcHRpb25hbENvbXBpbGVyQXJndW1lbnRzID0ge30pIHtcbiAgICAgICAgc3VwZXIoeyBpc0NvbXBpbGVyU2VydmljZU1vZGUsIGJhc2VVcmwgfSk7XG5cbiAgICAgICAgLy8gTk9URTogQXQgcHJlc2VudCwgaXQncyBuZWNlc3NhcnkgY3JlYXRlIGFuIGluc3RhbmNlIFR5cGVTY3JpcHRUZXN0RmlsZUNvbXBpbGVyXG4gICAgICAgIC8vIHRvIGNvbGxlY3QgYSBsaXN0IG9mIHN1cHBvcnRlZCB0ZXN0IGZpbGUgZXh0ZW5zaW9ucy5cbiAgICAgICAgLy8gU28gYWxsIGNvbXBpbGVycyBjcmVhdGVzIDIgdGltZXM6IGZpcnN0IHRpbWUgLSBmb3IgY29sbGVjdGluZyBhbGwgc3VwcG9ydGVkIGZpbGUgZXh0ZW5zaW9ucyxcbiAgICAgICAgLy8gc2Vjb25kIG9uZSAtIGZvciBjb21waWxpbmcgdGVzdHMuXG4gICAgICAgIC8vIEluIGZ1dHVyZSwgbmVlZCB0byByZXdyaXRlICdnZXRTdXBwb3J0ZWRFeHRlbnNpb24nIG1ldGhvZCBhcyBzdGF0aWMuXG5cbiAgICAgICAgY29uc3QgY29uZmlnUGF0aCA9IGNvbXBpbGVyT3B0aW9ucyAmJiBjb21waWxlck9wdGlvbnMuY29uZmlnUGF0aCB8fCBudWxsO1xuXG4gICAgICAgIHRoaXMuX2N1c3RvbUNvbXBpbGVyT3B0aW9ucyA9IGNvbXBpbGVyT3B0aW9ucyAmJiBjb21waWxlck9wdGlvbnMub3B0aW9ucztcbiAgICAgICAgdGhpcy5fdHNDb25maWcgICAgICAgICAgICAgID0gbmV3IFR5cGVzY3JpcHRDb25maWd1cmF0aW9uKGNvbmZpZ1BhdGgsIGlzQ29tcGlsZXJTZXJ2aWNlTW9kZSk7XG4gICAgICAgIHRoaXMuX2NvbXBpbGVyUGF0aCAgICAgICAgICA9IFR5cGVTY3JpcHRUZXN0RmlsZUNvbXBpbGVyLl9nZXRDb21waWxlclBhdGgoY29tcGlsZXJPcHRpb25zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBfZ2V0Q29tcGlsZXJQYXRoIChjb21waWxlck9wdGlvbnM/OiBUeXBlU2NyaXB0Q29tcGlsZXJPcHRpb25zKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IGNvbXBpbGVyUGF0aCA9IGNvbXBpbGVyT3B0aW9ucyAmJiBjb21waWxlck9wdGlvbnMuY3VzdG9tQ29tcGlsZXJNb2R1bGVQYXRoO1xuXG4gICAgICAgIGlmICghY29tcGlsZXJQYXRoIHx8IGNvbXBpbGVyUGF0aCA9PT0gREVGQVVMVF9UWVBFU0NSSVBUX0NPTVBJTEVSX1BBVEgpXG4gICAgICAgICAgICByZXR1cm4gREVGQVVMVF9UWVBFU0NSSVBUX0NPTVBJTEVSX1BBVEg7XG5cbiAgICAgICAgLy8gTk9URTogaWYgdGhlIHJlbGF0aXZlIHBhdGggdG8gY3VzdG9tIFR5cGVTY3JpcHQgY29tcGlsZXIgbW9kdWxlIGlzIHNwZWNpZmllZFxuICAgICAgICAvLyB0aGVuIHdlIHdpbGwgcmVzb2x2ZSB0aGUgcGF0aCBmcm9tIHRoZSByb290IG9mIHRoZSAndGVzdGNhZmUnIG1vZHVsZVxuICAgICAgICBpZiAoaXNSZWxhdGl2ZShjb21waWxlclBhdGgpKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXN0Y2FmZVJvb3RGb2xkZXIgPSBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi4vLi4vLi4vLi4vLi4vJyk7XG5cbiAgICAgICAgICAgIGNvbXBpbGVyUGF0aCA9IHBhdGgucmVzb2x2ZSh0ZXN0Y2FmZVJvb3RGb2xkZXIsIGNvbXBpbGVyUGF0aCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29tcGlsZXJQYXRoO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2xvYWRUeXBlU2NyaXB0Q29tcGlsZXIgKCk6IFR5cGVTY3JpcHRJbnN0YW5jZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gcmVxdWlyZSh0aGlzLl9jb21waWxlclBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEdlbmVyYWxFcnJvcihSVU5USU1FX0VSUk9SUy50eXBlU2NyaXB0Q29tcGlsZXJMb2FkaW5nRXJyb3IsIGVyci5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIF9ub3JtYWxpemVGaWxlbmFtZSAoZmlsZW5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGZpbGVuYW1lID0gcGF0aC5yZXNvbHZlKGZpbGVuYW1lKTtcblxuICAgICAgICBpZiAoT1Mud2luKVxuICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIHJldHVybiBmaWxlbmFtZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBfZ2V0VFNEZWZzUGF0aCAoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFR5cGVTY3JpcHRUZXN0RmlsZUNvbXBpbGVyLl9ub3JtYWxpemVGaWxlbmFtZShwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi4vLi4vLi4vLi4vLi4vdHMtZGVmcy9pbmRleC5kLnRzJykpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3JlcG9ydEVycm9ycyAoZGlhZ25vc3RpY3M6IFJlYWRvbmx5PFR5cGVTY3JpcHQuRGlhZ25vc3RpY1tdPik6IHZvaWQge1xuICAgICAgICAvLyBOT1RFOiBsYXp5IGxvYWQgdGhlIGNvbXBpbGVyXG4gICAgICAgIGNvbnN0IHRzOiBUeXBlU2NyaXB0SW5zdGFuY2UgPSB0aGlzLl9sb2FkVHlwZVNjcmlwdENvbXBpbGVyKCk7XG4gICAgICAgIGxldCBlcnJNc2cgPSAnVHlwZVNjcmlwdCBjb21waWxhdGlvbiBmYWlsZWQuXFxuJztcblxuICAgICAgICBkaWFnbm9zdGljcy5mb3JFYWNoKGQgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRzLmZsYXR0ZW5EaWFnbm9zdGljTWVzc2FnZVRleHQoZC5tZXNzYWdlVGV4dCwgJ1xcbicpO1xuICAgICAgICAgICAgY29uc3QgZmlsZSAgICA9IGQuZmlsZTtcblxuICAgICAgICAgICAgaWYgKGZpbGUgJiYgZC5zdGFydCAhPT0gdm9pZCAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBsaW5lLCBjaGFyYWN0ZXIgfSA9IGZpbGUuZ2V0TGluZUFuZENoYXJhY3Rlck9mUG9zaXRpb24oZC5zdGFydCk7XG5cbiAgICAgICAgICAgICAgICBlcnJNc2cgKz0gYCR7ZmlsZS5maWxlTmFtZX0gKCR7bGluZSArIDF9LCAke2NoYXJhY3RlciArIDF9KTogYDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXJyTXNnICs9IGAke21lc3NhZ2V9XFxuYDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZyk7XG4gICAgfVxuXG4gICAgcHVibGljIF9jb21waWxlQ29kZUZvclRlc3RGaWxlcyAodGVzdEZpbGVzSW5mbzogVGVzdEZpbGVJbmZvW10pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl90c0NvbmZpZy5pbml0KHRoaXMuX2N1c3RvbUNvbXBpbGVyT3B0aW9ucylcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIuX2NvbXBpbGVDb2RlRm9yVGVzdEZpbGVzKHRlc3RGaWxlc0luZm8pO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY29tcGlsZUZpbGVzVG9DYWNoZSAodHM6IFR5cGVTY3JpcHRJbnN0YW5jZSwgZmlsZW5hbWVzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBvcHRzICAgID0gdGhpcy5fdHNDb25maWcuZ2V0T3B0aW9ucygpIGFzIERpY3Rpb25hcnk8Q29tcGlsZXJPcHRpb25zVmFsdWU+O1xuICAgICAgICBjb25zdCBwcm9ncmFtID0gdHMuY3JlYXRlUHJvZ3JhbShbVHlwZVNjcmlwdFRlc3RGaWxlQ29tcGlsZXIudHNEZWZzUGF0aCwgLi4uZmlsZW5hbWVzXSwgb3B0cyk7XG5cbiAgICAgICAgREVCVUdfTE9HR0VSKCd2ZXJzaW9uOiAlcycsIHRzLnZlcnNpb24pO1xuICAgICAgICBERUJVR19MT0dHRVIoJ29wdGlvbnM6ICVPJywgb3B0cyk7XG5cbiAgICAgICAgcHJvZ3JhbS5nZXRTb3VyY2VGaWxlcygpLmZvckVhY2goc291cmNlRmlsZSA9PiB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlIEEgaGFjayB0byBhbGxvdyBpbXBvcnQgZ2xvYmFsbHkgaW5zdGFsbGVkIFRlc3RDYWZlIGluIHRlc3RzXG4gICAgICAgICAgICBzb3VyY2VGaWxlLnJlbmFtZWREZXBlbmRlbmNpZXMgPSBSRU5BTUVEX0RFUEVOREVOQ0lFU19NQVA7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGRpYWdub3N0aWNzID0gdHMuZ2V0UHJlRW1pdERpYWdub3N0aWNzKHByb2dyYW0pO1xuXG4gICAgICAgIGlmIChkaWFnbm9zdGljcy5sZW5ndGgpXG4gICAgICAgICAgICB0aGlzLl9yZXBvcnRFcnJvcnMoZGlhZ25vc3RpY3MpO1xuXG4gICAgICAgIC8vIE5PVEU6IFRoZSBmaXJzdCBhcmd1bWVudCBvZiBlbWl0KCkgaXMgYSBzb3VyY2UgZmlsZSB0byBiZSBjb21waWxlZC4gSWYgaXQncyB1bmRlZmluZWQsIGFsbCBmaWxlcyBpblxuICAgICAgICAvLyA8cHJvZ3JhbT4gd2lsbCBiZSBjb21waWxlZC4gPHByb2dyYW0+IGNvbnRhaW5zIGEgZmlsZSBzcGVjaWZpZWQgaW4gY3JlYXRlUHJvZ3JhbSgpIHBsdXMgYWxsIGl0cyBkZXBlbmRlbmNpZXMuXG4gICAgICAgIC8vIFRoaXMgbW9kZSBpcyBtdWNoIGZhc3RlciB0aGFuIGNvbXBpbGluZyBmaWxlcyBvbmUtYnktb25lLCBhbmQgaXQgaXMgdXNlZCBpbiB0aGUgdHNjIENMSSBjb21waWxlci5cbiAgICAgICAgcHJvZ3JhbS5lbWl0KHZvaWQgMCwgKG91dHB1dE5hbWUsIHJlc3VsdCwgd3JpdGVCT00sIG9uRXJyb3IsIHNvdXJjZXMpID0+IHtcbiAgICAgICAgICAgIGlmICghc291cmNlcylcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSBUeXBlU2NyaXB0VGVzdEZpbGVDb21waWxlci5fbm9ybWFsaXplRmlsZW5hbWUoc291cmNlc1swXS5maWxlTmFtZSk7XG5cbiAgICAgICAgICAgIHRoaXMuY2FjaGVbc291cmNlUGF0aF0gPSByZXN1bHQ7XG4gICAgICAgIH0sIHZvaWQgMCwgdm9pZCAwLCB7XG4gICAgICAgICAgICBiZWZvcmU6IHRoaXMuX2dldFR5cGVzY3JpcHRUcmFuc2Zvcm1lcnMoKSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0VHlwZXNjcmlwdFRyYW5zZm9ybWVycyAoKTogVHJhbnNmb3JtZXJGYWN0b3J5PFNvdXJjZUZpbGU+W10ge1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lcnM6IFRyYW5zZm9ybWVyRmFjdG9yeTxTb3VyY2VGaWxlPltdID0gW3Rlc3RjYWZlSW1wb3J0UGF0aFJlcGxhY2VyKCldO1xuXG4gICAgICAgIGlmICh0aGlzLmlzQ29tcGlsZXJTZXJ2aWNlTW9kZSlcbiAgICAgICAgICAgIHRyYW5zZm9ybWVycy5wdXNoKGRpc2FibGVWOE9wdGltaXphdGlvbkNvZGVBcHBlbmRlcigpKTtcblxuICAgICAgICByZXR1cm4gdHJhbnNmb3JtZXJzO1xuICAgIH1cblxuICAgIHB1YmxpYyBfcHJlY29tcGlsZUNvZGUgKHRlc3RGaWxlc0luZm86IFRlc3RGaWxlSW5mb1tdKTogc3RyaW5nW10ge1xuICAgICAgICBERUJVR19MT0dHRVIoJ3BhdGg6IFwiJXNcIicsIHRoaXMuX2NvbXBpbGVyUGF0aCk7XG5cbiAgICAgICAgLy8gTk9URTogbGF6eSBsb2FkIHRoZSBjb21waWxlclxuICAgICAgICBjb25zdCB0czogVHlwZVNjcmlwdEluc3RhbmNlID0gdGhpcy5fbG9hZFR5cGVTY3JpcHRDb21waWxlcigpO1xuICAgICAgICBjb25zdCBmaWxlbmFtZXMgICAgICAgICAgICAgID0gdGVzdEZpbGVzSW5mby5tYXAoKHsgZmlsZW5hbWUgfSkgPT4gZmlsZW5hbWUpO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkRmlsZW5hbWVzICAgID0gZmlsZW5hbWVzLm1hcChmaWxlbmFtZSA9PiBUeXBlU2NyaXB0VGVzdEZpbGVDb21waWxlci5fbm9ybWFsaXplRmlsZW5hbWUoZmlsZW5hbWUpKTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZEZpbGVuYW1lc01hcCA9IHppcE9iamVjdChub3JtYWxpemVkRmlsZW5hbWVzLCBmaWxlbmFtZXMpO1xuXG4gICAgICAgIGNvbnN0IHVuY2FjaGVkRmlsZXMgPSBub3JtYWxpemVkRmlsZW5hbWVzXG4gICAgICAgICAgICAuZmlsdGVyKGZpbGVuYW1lID0+IGZpbGVuYW1lICE9PSBUeXBlU2NyaXB0VGVzdEZpbGVDb21waWxlci50c0RlZnNQYXRoICYmICF0aGlzLmNhY2hlW2ZpbGVuYW1lXSlcbiAgICAgICAgICAgIC5tYXAoZmlsZW5hbWUgPT4gbm9ybWFsaXplZEZpbGVuYW1lc01hcFtmaWxlbmFtZV0pO1xuXG4gICAgICAgIGlmICh1bmNhY2hlZEZpbGVzLmxlbmd0aClcbiAgICAgICAgICAgIHRoaXMuX2NvbXBpbGVGaWxlc1RvQ2FjaGUodHMsIHVuY2FjaGVkRmlsZXMpO1xuXG4gICAgICAgIHJldHVybiBub3JtYWxpemVkRmlsZW5hbWVzLm1hcChmaWxlbmFtZSA9PiB0aGlzLmNhY2hlW2ZpbGVuYW1lXSk7XG4gICAgfVxuXG4gICAgcHVibGljIF9nZXRSZXF1aXJlQ29tcGlsZXJzICgpOiBSZXF1aXJlQ29tcGlsZXJzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICcudHMnOiAgKGNvZGUsIGZpbGVuYW1lKSA9PiB0aGlzLl9jb21waWxlQ29kZShjb2RlLCBmaWxlbmFtZSksXG4gICAgICAgICAgICAnLnRzeCc6IChjb2RlLCBmaWxlbmFtZSkgPT4gdGhpcy5fY29tcGlsZUNvZGUoY29kZSwgZmlsZW5hbWUpLFxuICAgICAgICAgICAgJy5qcyc6ICAoY29kZSwgZmlsZW5hbWUpID0+IEVTTmV4dFRlc3RGaWxlQ29tcGlsZXIucHJvdG90eXBlLl9jb21waWxlQ29kZS5jYWxsKHRoaXMsIGNvZGUsIGZpbGVuYW1lKSxcbiAgICAgICAgICAgICcuanN4JzogKGNvZGUsIGZpbGVuYW1lKSA9PiBFU05leHRUZXN0RmlsZUNvbXBpbGVyLnByb3RvdHlwZS5fY29tcGlsZUNvZGUuY2FsbCh0aGlzLCBjb2RlLCBmaWxlbmFtZSksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjYW5QcmVjb21waWxlICgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFN1cHBvcnRlZEV4dGVuc2lvbiAoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gWycudHMnLCAnLnRzeCddO1xuICAgIH1cbn1cbiJdfQ==
|
|
205
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcGlsZXIvdGVzdC1maWxlL2Zvcm1hdHMvdHlwZXNjcmlwdC9jb21waWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0RBQXdCO0FBQ3hCLG1DQUFtQztBQUNuQywwREFBMkI7QUFDM0IsZ0VBQTJEO0FBQzNELG1FQUF5RDtBQUN6RCxrSEFBeUY7QUFDekYsd0RBQTBEO0FBQzFELG9EQUEwRDtBQUMxRCxrREFBMEI7QUFDMUIsaUVBQTJEO0FBQzNELDRGQUFpRTtBQUNqRSxzR0FBOEU7QUFFOUUsa0NBQWtDO0FBQ2xDLHlEQVdvQjtBQUlwQiwrREFBdUM7QUFJdkMsTUFBTSxTQUFTLEdBQUcsb0JBQVUsQ0FBQyxPQUFPLENBQUM7QUFjckMsU0FBUywwQkFBMEIsQ0FBa0IsZUFBeUI7SUFDMUUsT0FBTyxPQUFPLENBQUMsRUFBRTtRQUNiLE1BQU0sS0FBSyxHQUFZLENBQUMsSUFBSSxFQUFxQixFQUFFOztZQUMvQyxhQUFhO1lBQ2IsSUFBSSxDQUFBLE1BQUEsSUFBSSxDQUFDLE1BQU0sMENBQUUsSUFBSSxNQUFLLHVCQUFVLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyx1QkFBVSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRTtnQkFDMUgsTUFBTSxPQUFPLEdBQUcsSUFBQSxpQ0FBb0IsRUFBQyxlQUFlLENBQUMsQ0FBQztnQkFFdEQsT0FBTyxTQUFTLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDakQ7WUFFRCxPQUFPLElBQUEsMkJBQWMsRUFBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUFDO1FBRUYs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QUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxrQkFBc0IsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQztZQUM5RyxDQUFDLG9CQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxrQkFBc0IsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQztTQUNqSCxDQUFDO1FBRUYsSUFBSSxJQUFJLENBQUMsZUFBZTtZQUNwQixnQkFBZ0IsQ0FBQyxvQkFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsa0JBQXNCLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVwSSxPQUFPLGdCQUFnQixDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFXLGFBQWE7UUFDcEIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELElBQVcsZUFBZTtRQUN0QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0scUJBQXFCO1FBQ3hCLE9BQU8sQ0FBQyxvQkFBVSxDQUFDLEVBQUUsRUFBRSxvQkFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLENBQUM7O0FBL0tMLDZDQWdMQztBQS9La0IscUNBQVUsR0FBRywwQkFBMEIsQ0FBQyxjQUFjLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgemlwT2JqZWN0IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBPUyBmcm9tICdvcy1mYW1pbHknO1xuaW1wb3J0IEFQSUJhc2VkVGVzdEZpbGVDb21waWxlckJhc2UgZnJvbSAnLi4vLi4vYXBpLWJhc2VkJztcbmltcG9ydCBFU05leHRUZXN0RmlsZUNvbXBpbGVyIGZyb20gJy4uL2VzLW5leHQvY29tcGlsZXInO1xuaW1wb3J0IFR5cGVzY3JpcHRDb25maWd1cmF0aW9uIGZyb20gJy4uLy4uLy4uLy4uL2NvbmZpZ3VyYXRpb24vdHlwZXNjcmlwdC1jb25maWd1cmF0aW9uJztcbmltcG9ydCB7IEdlbmVyYWxFcnJvciB9IGZyb20gJy4uLy4uLy4uLy4uL2Vycm9ycy9ydW50aW1lJztcbmltcG9ydCB7IFJVTlRJTUVfRVJST1JTIH0gZnJvbSAnLi4vLi4vLi4vLi4vZXJyb3JzL3R5cGVzJztcbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgeyBpc1JlbGF0aXZlIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXBpL3Rlc3QtcGFnZS11cmwnO1xuaW1wb3J0IGdldEV4cG9ydGFibGVMaWJQYXRoIGZyb20gJy4uLy4uL2dldC1leHBvcnRhYmxlLWxpYi1wYXRoJztcbmltcG9ydCBESVNBQkxFX1Y4X09QVElNSVpBVElPTl9OT1RFIGZyb20gJy4uLy4uL2Rpc2FibGUtdjgtb3B0aW1pemF0aW9uLW5vdGUnO1xuXG4vLyBOT1RFOiBGb3IgdHlwZSBkZWZpbml0aW9ucyBvbmx5XG5pbXBvcnQgVHlwZVNjcmlwdCwge1xuICAgIENvbXBpbGVyT3B0aW9uc1ZhbHVlLFxuICAgIFN5bnRheEtpbmQsXG4gICAgVmlzaXRSZXN1bHQsXG4gICAgVmlzaXRvcixcbiAgICBOb2RlLFxuICAgIHZpc2l0RWFjaENoaWxkLFxuICAgIHZpc2l0Tm9kZSxcbiAgICBUcmFuc2Zvcm1lckZhY3RvcnksXG4gICAgU291cmNlRmlsZSxcbiAgICBhZGRTeW50aGV0aWNMZWFkaW5nQ29tbWVudCxcbn0gZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7IERpY3Rpb25hcnksIFR5cGVTY3JpcHRDb21waWxlck9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi8uLi9jb25maWd1cmF0aW9uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgT3B0aW9uYWxDb21waWxlckFyZ3VtZW50cyB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IEV4dGVuc2lvbnMgZnJvbSAnLi4vZXh0ZW5zaW9ucyc7XG5cbmRlY2xhcmUgdHlwZSBUeXBlU2NyaXB0SW5zdGFuY2UgPSB0eXBlb2YgVHlwZVNjcmlwdDtcblxuY29uc3QgdHNGYWN0b3J5ID0gVHlwZVNjcmlwdC5mYWN0b3J5O1xuXG5pbnRlcmZhY2UgVGVzdEZpbGVJbmZvIHtcbiAgICBmaWxlbmFtZTogc3RyaW5nO1xufVxuXG5kZWNsYXJlIGludGVyZmFjZSBSZXF1aXJlQ29tcGlsZXJGdW5jdGlvbiB7XG4gICAgKGNvZGU6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZyk6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFJlcXVpcmVDb21waWxlcnMge1xuICAgIFtleHRlbnNpb246IHN0cmluZ106IFJlcXVpcmVDb21waWxlckZ1bmN0aW9uO1xufVxuXG5mdW5jdGlvbiB0ZXN0Y2FmZUltcG9ydFBhdGhSZXBsYWNlcjxUIGV4dGVuZHMgTm9kZT4gKGV4cGVyaW1lbnRhbEVzbT86IGJvb2xlYW4pOiBUcmFuc2Zvcm1lckZhY3Rvcnk8VD4ge1xuICAgIHJldHVybiBjb250ZXh0ID0+IHtcbiAgICAgICAgY29uc3QgdmlzaXQ6IFZpc2l0b3IgPSAobm9kZSk6IFZpc2l0UmVzdWx0PE5vZGU+ID0+IHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGlmIChub2RlLnBhcmVudD8ua2luZCA9PT0gU3ludGF4S2luZC5JbXBvcnREZWNsYXJhdGlvbiAmJiBub2RlLmtpbmQgPT09IFN5bnRheEtpbmQuU3RyaW5nTGl0ZXJhbCAmJiBub2RlLnRleHQgPT09ICd0ZXN0Y2FmZScpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsaWJQYXRoID0gZ2V0RXhwb3J0YWJsZUxpYlBhdGgoZXhwZXJpbWVudGFsRXNtKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0c0ZhY3RvcnkuY3JlYXRlU3RyaW5nTGl0ZXJhbChsaWJQYXRoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHZpc2l0RWFjaENoaWxkKG5vZGUsIGNoaWxkID0+IHZpc2l0KGNoaWxkKSwgY29udGV4dCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5vZGUgPT4gdmlzaXROb2RlKG5vZGUsIHZpc2l0KTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBkaXNhYmxlVjhPcHRpbWl6YXRpb25Db2RlQXBwZW5kZXI8VCBleHRlbmRzIE5vZGU+ICgpOiBUcmFuc2Zvcm1lckZhY3Rvcnk8VD4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHZpc2l0OiBWaXNpdG9yID0gKG5vZGUpOiBWaXNpdFJlc3VsdDxOb2RlPiA9PiB7XG4gICAgICAgICAgICBjb25zdCBldmFsU3RhdGVtZW50ID0gdHNGYWN0b3J5LmNyZWF0ZUV4cHJlc3Npb25TdGF0ZW1lbnQodHNGYWN0b3J5LmNyZWF0ZUNhbGxFeHByZXNzaW9uKFxuICAgICAgICAgICAgICAgIHRzRmFjdG9yeS5jcmVhdGVJZGVudGlmaWVyKCdldmFsJyksXG4gICAgICAgICAgICAgICAgdm9pZCAwLFxuICAgICAgICAgICAgICAgIFt0c0ZhY3RvcnkuY3JlYXRlU3RyaW5nTGl0ZXJhbCgnJyldXG4gICAgICAgICAgICApKTtcblxuICAgICAgICAgICAgY29uc3QgZXZhbFN0YXRlbWVudFdpdGhDb21tZW50ID0gYWRkU3ludGhldGljTGVhZGluZ0NvbW1lbnQoZXZhbFN0YXRlbWVudCwgU3ludGF4S2luZC5NdWx0aUxpbmVDb21tZW50VHJpdmlhLCBESVNBQkxFX1Y4X09QVElNSVpBVElPTl9OT1RFLCB0cnVlKTtcblxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgcmV0dXJuIHRzRmFjdG9yeS51cGRhdGVTb3VyY2VGaWxlKG5vZGUsIFsuLi5ub2RlLnN0YXRlbWVudHMsIGV2YWxTdGF0ZW1lbnRXaXRoQ29tbWVudF0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBub2RlID0+IHZpc2l0Tm9kZShub2RlLCB2aXNpdCk7XG4gICAgfTtcbn1cblxuXG5jb25zdCBERUJVR19MT0dHRVIgPSBkZWJ1ZygndGVzdGNhZmU6Y29tcGlsZXI6dHlwZXNjcmlwdCcpO1xuXG5jb25zdCBSRU5BTUVEX0RFUEVOREVOQ0lFU19NQVAgPSBuZXcgTWFwKFtbJ3Rlc3RjYWZlJywgZ2V0RXhwb3J0YWJsZUxpYlBhdGgoKV1dKTtcblxuY29uc3QgREVGQVVMVF9UWVBFU0NSSVBUX0NPTVBJTEVSX1BBVEggPSAndHlwZXNjcmlwdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFR5cGVTY3JpcHRUZXN0RmlsZUNvbXBpbGVyIGV4dGVuZHMgQVBJQmFzZWRUZXN0RmlsZUNvbXBpbGVyQmFzZSB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgdHNEZWZzUGF0aCA9IFR5cGVTY3JpcHRUZXN0RmlsZUNvbXBpbGVyLl9nZXRUU0RlZnNQYXRoKCk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF90c0NvbmZpZzogVHlwZXNjcmlwdENvbmZpZ3VyYXRpb247XG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29tcGlsZXJQYXRoOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfY3VzdG9tQ29tcGlsZXJPcHRpb25zPzogb2JqZWN0O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yIChjb21waWxlck9wdGlvbnM/OiBUeXBlU2NyaXB0Q29tcGlsZXJPcHRpb25zLCB7IGlzQ29tcGlsZXJTZXJ2aWNlTW9kZSwgYmFzZVVybCwgZXhwZXJpbWVudGFsRXNtIH06IE9wdGlvbmFsQ29tcGlsZXJBcmd1bWVudHMgPSB7fSkge1xuICAgICAgICBzdXBlcih7IGlzQ29tcGlsZXJTZXJ2aWNlTW9kZSwgYmFzZVVybCwgZXhwZXJpbWVudGFsRXNtIH0pO1xuXG4gICAgICAgIC8vIE5PVEU6IEF0IHByZXNlbnQsIGl0J3MgbmVjZXNzYXJ5IGNyZWF0ZSBhbiBpbnN0YW5jZSBUeXBlU2NyaXB0VGVzdEZpbGVDb21waWxlclxuICAgICAgICAvLyB0byBjb2xsZWN0IGEgbGlzdCBvZiBzdXBwb3J0ZWQgdGVzdCBmaWxlIGV4dGVuc2lvbnMuXG4gICAgICAgIC8vIFNvIGFsbCBjb21waWxlcnMgY3JlYXRlcyAyIHRpbWVzOiBmaXJzdCB0aW1lIC0gZm9yIGNvbGxlY3RpbmcgYWxsIHN1cHBvcnRlZCBmaWxlIGV4dGVuc2lvbnMsXG4gICAgICAgIC8vIHNlY29uZCBvbmUgLSBmb3IgY29tcGlsaW5nIHRlc3RzLlxuICAgICAgICAvLyBJbiBmdXR1cmUsIG5lZWQgdG8gcmV3cml0ZSAnZ2V0U3VwcG9ydGVkRXh0ZW5zaW9uJyBtZXRob2QgYXMgc3RhdGljLlxuXG4gICAgICAgIGNvbnN0IGNvbmZpZ1BhdGggPSBjb21waWxlck9wdGlvbnMgJiYgY29tcGlsZXJPcHRpb25zLmNvbmZpZ1BhdGggfHwgbnVsbDtcblxuICAgICAgICB0aGlzLl9jdXN0b21Db21waWxlck9wdGlvbnMgPSBjb21waWxlck9wdGlvbnMgJiYgY29tcGlsZXJPcHRpb25zLm9wdGlvbnM7XG4gICAgICAgIHRoaXMuX3RzQ29uZmlnICAgICAgICAgICAgICA9IG5ldyBUeXBlc2NyaXB0Q29uZmlndXJhdGlvbihjb25maWdQYXRoLCBpc0NvbXBpbGVyU2VydmljZU1vZGUgfHwgZXhwZXJpbWVudGFsRXNtKTtcbiAgICAgICAgdGhpcy5fY29tcGlsZXJQYXRoICAgICAgICAgID0gVHlwZVNjcmlwdFRlc3RGaWxlQ29tcGlsZXIuX2dldENvbXBpbGVyUGF0aChjb21waWxlck9wdGlvbnMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIF9nZXRDb21waWxlclBhdGggKGNvbXBpbGVyT3B0aW9ucz86IFR5cGVTY3JpcHRDb21waWxlck9wdGlvbnMpOiBzdHJpbmcge1xuICAgICAgICBsZXQgY29tcGlsZXJQYXRoID0gY29tcGlsZXJPcHRpb25zICYmIGNvbXBpbGVyT3B0aW9ucy5jdXN0b21Db21waWxlck1vZHVsZVBhdGg7XG5cbiAgICAgICAgaWYgKCFjb21waWxlclBhdGggfHwgY29tcGlsZXJQYXRoID09PSBERUZBVUxUX1RZUEVTQ1JJUFRfQ09NUElMRVJfUEFUSClcbiAgICAgICAgICAgIHJldHVybiBERUZBVUxUX1RZUEVTQ1JJUFRfQ09NUElMRVJfUEFUSDtcblxuICAgICAgICAvLyBOT1RFOiBpZiB0aGUgcmVsYXRpdmUgcGF0aCB0byBjdXN0b20gVHlwZVNjcmlwdCBjb21waWxlciBtb2R1bGUgaXMgc3BlY2lmaWVkXG4gICAgICAgIC8vIHRoZW4gd2Ugd2lsbCByZXNvbHZlIHRoZSBwYXRoIGZyb20gdGhlIHJvb3Qgb2YgdGhlICd0ZXN0Y2FmZScgbW9kdWxlXG4gICAgICAgIGlmIChpc1JlbGF0aXZlKGNvbXBpbGVyUGF0aCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RjYWZlUm9vdEZvbGRlciA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLi8uLi8uLi8uLi8uLi8nKTtcblxuICAgICAgICAgICAgY29tcGlsZXJQYXRoID0gcGF0aC5yZXNvbHZlKHRlc3RjYWZlUm9vdEZvbGRlciwgY29tcGlsZXJQYXRoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb21waWxlclBhdGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbG9hZFR5cGVTY3JpcHRDb21waWxlciAoKTogVHlwZVNjcmlwdEluc3RhbmNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiByZXF1aXJlKHRoaXMuX2NvbXBpbGVyUGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgR2VuZXJhbEVycm9yKFJVTlRJTUVfRVJST1JTLnR5cGVTY3JpcHRDb21waWxlckxvYWRpbmdFcnJvciwgZXJyLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgX25vcm1hbGl6ZUZpbGVuYW1lIChmaWxlbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgZmlsZW5hbWUgPSBwYXRoLnJlc29sdmUoZmlsZW5hbWUpO1xuXG4gICAgICAgIGlmIChPUy53aW4pXG4gICAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgcmV0dXJuIGZpbGVuYW1lO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIF9nZXRUU0RlZnNQYXRoICgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gVHlwZVNjcmlwdFRlc3RGaWxlQ29tcGlsZXIuX25vcm1hbGl6ZUZpbGVuYW1lKHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLi8uLi8uLi8uLi8uLi90cy1kZWZzL2luZGV4LmQudHMnKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVwb3J0RXJyb3JzIChkaWFnbm9zdGljczogUmVhZG9ubHk8VHlwZVNjcmlwdC5EaWFnbm9zdGljW10+KTogdm9pZCB7XG4gICAgICAgIC8vIE5PVEU6IGxhenkgbG9hZCB0aGUgY29tcGlsZXJcbiAgICAgICAgY29uc3QgdHM6IFR5cGVTY3JpcHRJbnN0YW5jZSA9IHRoaXMuX2xvYWRUeXBlU2NyaXB0Q29tcGlsZXIoKTtcbiAgICAgICAgbGV0IGVyck1zZyA9ICdUeXBlU2NyaXB0IGNvbXBpbGF0aW9uIGZhaWxlZC5cXG4nO1xuXG4gICAgICAgIGRpYWdub3N0aWNzLmZvckVhY2goZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gdHMuZmxhdHRlbkRpYWdub3N0aWNNZXNzYWdlVGV4dChkLm1lc3NhZ2VUZXh0LCAnXFxuJyk7XG4gICAgICAgICAgICBjb25zdCBmaWxlICAgID0gZC5maWxlO1xuXG4gICAgICAgICAgICBpZiAoZmlsZSAmJiBkLnN0YXJ0ICE9PSB2b2lkIDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGxpbmUsIGNoYXJhY3RlciB9ID0gZmlsZS5nZXRMaW5lQW5kQ2hhcmFjdGVyT2ZQb3NpdGlvbihkLnN0YXJ0KTtcblxuICAgICAgICAgICAgICAgIGVyck1zZyArPSBgJHtmaWxlLmZpbGVOYW1lfSAoJHtsaW5lICsgMX0sICR7Y2hhcmFjdGVyICsgMX0pOiBgO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlcnJNc2cgKz0gYCR7bWVzc2FnZX1cXG5gO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyTXNnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgX2NvbXBpbGVDb2RlRm9yVGVzdEZpbGVzICh0ZXN0RmlsZXNJbmZvOiBUZXN0RmlsZUluZm9bXSk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RzQ29uZmlnLmluaXQodGhpcy5fY3VzdG9tQ29tcGlsZXJPcHRpb25zKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdXBlci5fY29tcGlsZUNvZGVGb3JUZXN0RmlsZXModGVzdEZpbGVzSW5mbyk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jb21waWxlRmlsZXNUb0NhY2hlICh0czogVHlwZVNjcmlwdEluc3RhbmNlLCBmaWxlbmFtZXM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9wdHMgICAgPSB0aGlzLl90c0NvbmZpZy5nZXRPcHRpb25zKCkgYXMgRGljdGlvbmFyeTxDb21waWxlck9wdGlvbnNWYWx1ZT47XG4gICAgICAgIGNvbnN0IHByb2dyYW0gPSB0cy5jcmVhdGVQcm9ncmFtKFtUeXBlU2NyaXB0VGVzdEZpbGVDb21waWxlci50c0RlZnNQYXRoLCAuLi5maWxlbmFtZXNdLCBvcHRzKTtcblxuICAgICAgICBERUJVR19MT0dHRVIoJ3ZlcnNpb246ICVzJywgdHMudmVyc2lvbik7XG4gICAgICAgIERFQlVHX0xPR0dFUignb3B0aW9uczogJU8nLCBvcHRzKTtcblxuICAgICAgICBwcm9ncmFtLmdldFNvdXJjZUZpbGVzKCkuZm9yRWFjaChzb3VyY2VGaWxlID0+IHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgQSBoYWNrIHRvIGFsbG93IGltcG9ydCBnbG9iYWxseSBpbnN0YWxsZWQgVGVzdENhZmUgaW4gdGVzdHNcbiAgICAgICAgICAgIHNvdXJjZUZpbGUucmVuYW1lZERlcGVuZGVuY2llcyA9IFJFTkFNRURfREVQRU5ERU5DSUVTX01BUDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZGlhZ25vc3RpY3MgPSB0cy5nZXRQcmVFbWl0RGlhZ25vc3RpY3MocHJvZ3JhbSk7XG5cbiAgICAgICAgaWYgKGRpYWdub3N0aWNzLmxlbmd0aClcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydEVycm9ycyhkaWFnbm9zdGljcyk7XG5cbiAgICAgICAgLy8gTk9URTogVGhlIGZpcnN0IGFyZ3VtZW50IG9mIGVtaXQoKSBpcyBhIHNvdXJjZSBmaWxlIHRvIGJlIGNvbXBpbGVkLiBJZiBpdCdzIHVuZGVmaW5lZCwgYWxsIGZpbGVzIGluXG4gICAgICAgIC8vIDxwcm9ncmFtPiB3aWxsIGJlIGNvbXBpbGVkLiA8cHJvZ3JhbT4gY29udGFpbnMgYSBmaWxlIHNwZWNpZmllZCBpbiBjcmVhdGVQcm9ncmFtKCkgcGx1cyBhbGwgaXRzIGRlcGVuZGVuY2llcy5cbiAgICAgICAgLy8gVGhpcyBtb2RlIGlzIG11Y2ggZmFzdGVyIHRoYW4gY29tcGlsaW5nIGZpbGVzIG9uZS1ieS1vbmUsIGFuZCBpdCBpcyB1c2VkIGluIHRoZSB0c2MgQ0xJIGNvbXBpbGVyLlxuICAgICAgICBwcm9ncmFtLmVtaXQodm9pZCAwLCAob3V0cHV0TmFtZSwgcmVzdWx0LCB3cml0ZUJPTSwgb25FcnJvciwgc291cmNlcykgPT4ge1xuICAgICAgICAgICAgaWYgKCFzb3VyY2VzKVxuICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3Qgc291cmNlUGF0aCA9IFR5cGVTY3JpcHRUZXN0RmlsZUNvbXBpbGVyLl9ub3JtYWxpemVGaWxlbmFtZShzb3VyY2VzWzBdLmZpbGVOYW1lKTtcblxuICAgICAgICAgICAgdGhpcy5jYWNoZVtzb3VyY2VQYXRoXSA9IHJlc3VsdDtcbiAgICAgICAgfSwgdm9pZCAwLCB2b2lkIDAsIHtcbiAgICAgICAgICAgIGJlZm9yZTogdGhpcy5fZ2V0VHlwZXNjcmlwdFRyYW5zZm9ybWVycygpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRUeXBlc2NyaXB0VHJhbnNmb3JtZXJzICgpOiBUcmFuc2Zvcm1lckZhY3Rvcnk8U291cmNlRmlsZT5bXSB7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVyczogVHJhbnNmb3JtZXJGYWN0b3J5PFNvdXJjZUZpbGU+W10gPSBbdGVzdGNhZmVJbXBvcnRQYXRoUmVwbGFjZXIodGhpcy5leHBlcmltZW50YWxFc20pXTtcblxuICAgICAgICBpZiAodGhpcy5pc0NvbXBpbGVyU2VydmljZU1vZGUgfHwgdGhpcy5leHBlcmltZW50YWxFc20pXG4gICAgICAgICAgICB0cmFuc2Zvcm1lcnMucHVzaChkaXNhYmxlVjhPcHRpbWl6YXRpb25Db2RlQXBwZW5kZXIoKSk7XG5cbiAgICAgICAgcmV0dXJuIHRyYW5zZm9ybWVycztcbiAgICB9XG5cbiAgICBwdWJsaWMgX3ByZWNvbXBpbGVDb2RlICh0ZXN0RmlsZXNJbmZvOiBUZXN0RmlsZUluZm9bXSk6IHN0cmluZ1tdIHtcbiAgICAgICAgREVCVUdfTE9HR0VSKCdwYXRoOiBcIiVzXCInLCB0aGlzLl9jb21waWxlclBhdGgpO1xuXG4gICAgICAgIC8vIE5PVEU6IGxhenkgbG9hZCB0aGUgY29tcGlsZXJcbiAgICAgICAgY29uc3QgdHM6IFR5cGVTY3JpcHRJbnN0YW5jZSA9IHRoaXMuX2xvYWRUeXBlU2NyaXB0Q29tcGlsZXIoKTtcbiAgICAgICAgY29uc3QgZmlsZW5hbWVzICAgICAgICAgICAgICA9IHRlc3RGaWxlc0luZm8ubWFwKCh7IGZpbGVuYW1lIH0pID0+IGZpbGVuYW1lKTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZEZpbGVuYW1lcyAgICA9IGZpbGVuYW1lcy5tYXAoZmlsZW5hbWUgPT4gVHlwZVNjcmlwdFRlc3RGaWxlQ29tcGlsZXIuX25vcm1hbGl6ZUZpbGVuYW1lKGZpbGVuYW1lKSk7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRGaWxlbmFtZXNNYXAgPSB6aXBPYmplY3Qobm9ybWFsaXplZEZpbGVuYW1lcywgZmlsZW5hbWVzKTtcblxuICAgICAgICBjb25zdCB1bmNhY2hlZEZpbGVzID0gbm9ybWFsaXplZEZpbGVuYW1lc1xuICAgICAgICAgICAgLmZpbHRlcihmaWxlbmFtZSA9PiBmaWxlbmFtZSAhPT0gVHlwZVNjcmlwdFRlc3RGaWxlQ29tcGlsZXIudHNEZWZzUGF0aCAmJiAhdGhpcy5jYWNoZVtmaWxlbmFtZV0pXG4gICAgICAgICAgICAubWFwKGZpbGVuYW1lID0+IG5vcm1hbGl6ZWRGaWxlbmFtZXNNYXBbZmlsZW5hbWVdKTtcblxuICAgICAgICBpZiAodW5jYWNoZWRGaWxlcy5sZW5ndGgpXG4gICAgICAgICAgICB0aGlzLl9jb21waWxlRmlsZXNUb0NhY2hlKHRzLCB1bmNhY2hlZEZpbGVzKTtcblxuICAgICAgICByZXR1cm4gbm9ybWFsaXplZEZpbGVuYW1lcy5tYXAoZmlsZW5hbWUgPT4gdGhpcy5jYWNoZVtmaWxlbmFtZV0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBfZ2V0UmVxdWlyZUNvbXBpbGVycyAoKTogUmVxdWlyZUNvbXBpbGVycyB7XG4gICAgICAgIGNvbnN0IHJlcXVpcmVDb21waWxlcnM6IFJlcXVpcmVDb21waWxlcnMgPSB7XG4gICAgICAgICAgICBbRXh0ZW5zaW9ucy50c106ICAoY29kZSwgZmlsZW5hbWUpID0+IHRoaXMuX2NvbXBpbGVDb2RlKGNvZGUsIGZpbGVuYW1lKSxcbiAgICAgICAgICAgIFtFeHRlbnNpb25zLnRzeF06IChjb2RlLCBmaWxlbmFtZSkgPT4gdGhpcy5fY29tcGlsZUNvZGUoY29kZSwgZmlsZW5hbWUpLFxuICAgICAgICAgICAgW0V4dGVuc2lvbnMuanNdOiAgKGNvZGUsIGZpbGVuYW1lKSA9PiBFU05leHRUZXN0RmlsZUNvbXBpbGVyLnByb3RvdHlwZS5fY29tcGlsZUNvZGUuY2FsbCh0aGlzLCBjb2RlLCBmaWxlbmFtZSksXG4gICAgICAgICAgICBbRXh0ZW5zaW9ucy5janNdOiAoY29kZSwgZmlsZW5hbWUpID0+IEVTTmV4dFRlc3RGaWxlQ29tcGlsZXIucHJvdG90eXBlLl9jb21waWxlQ29kZS5jYWxsKHRoaXMsIGNvZGUsIGZpbGVuYW1lKSxcbiAgICAgICAgICAgIFtFeHRlbnNpb25zLmpzeF06IChjb2RlLCBmaWxlbmFtZSkgPT4gRVNOZXh0VGVzdEZpbGVDb21waWxlci5wcm90b3R5cGUuX2NvbXBpbGVDb2RlLmNhbGwodGhpcywgY29kZSwgZmlsZW5hbWUpLFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLmV4cGVyaW1lbnRhbEVzbSlcbiAgICAgICAgICAgIHJlcXVpcmVDb21waWxlcnNbRXh0ZW5zaW9ucy5tanNdID0gKGNvZGUsIGZpbGVuYW1lKSA9PiBFU05leHRUZXN0RmlsZUNvbXBpbGVyLnByb3RvdHlwZS5fY29tcGlsZUNvZGUuY2FsbCh0aGlzLCBjb2RlLCBmaWxlbmFtZSk7XG5cbiAgICAgICAgcmV0dXJuIHJlcXVpcmVDb21waWxlcnM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjYW5QcmVjb21waWxlICgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjYW5Db21waWxlSW5Fc20gKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U3VwcG9ydGVkRXh0ZW5zaW9uICgpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiBbRXh0ZW5zaW9ucy50cywgRXh0ZW5zaW9ucy50c3hdO1xuICAgIH1cbn1cbiJdfQ==
|