124 lines
18 KiB
JavaScript
124 lines
18 KiB
JavaScript
"use strict";
|
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
if (k2 === undefined) k2 = k;
|
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
}
|
|
Object.defineProperty(o, k2, desc);
|
|
}) : (function(o, m, k, k2) {
|
|
if (k2 === undefined) k2 = k;
|
|
o[k2] = m[k];
|
|
}));
|
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
}) : function(o, v) {
|
|
o["default"] = v;
|
|
});
|
|
var __importStar = (this && this.__importStar) || function (mod) {
|
|
if (mod && mod.__esModule) return mod;
|
|
var result = {};
|
|
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
__setModuleDefault(result, mod);
|
|
return result;
|
|
};
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const runtime_1 = require("./errors/runtime");
|
|
const types_1 = require("./errors/types");
|
|
const content_types_1 = __importDefault(require("./assets/content-types"));
|
|
const option_names_1 = __importDefault(require("./configuration/option-names"));
|
|
const INJECTABLES = __importStar(require("./assets/injectables"));
|
|
const setup_sourcemap_support_1 = require("./utils/setup-sourcemap-support");
|
|
const lazyRequire = require('import-lazy')(require);
|
|
const hammerhead = lazyRequire('testcafe-hammerhead');
|
|
const loadAssets = lazyRequire('./load-assets');
|
|
const errorHandlers = lazyRequire('./utils/handle-errors');
|
|
const BrowserConnectionGateway = lazyRequire('./browser/connection/gateway');
|
|
const BrowserConnection = lazyRequire('./browser/connection');
|
|
const browserProviderPool = lazyRequire('./browser/provider/pool');
|
|
const CompilerHost = lazyRequire('./services/compiler/host');
|
|
const Runner = lazyRequire('./runner');
|
|
const LiveModeRunner = lazyRequire('./live/test-runner');
|
|
// NOTE: CoffeeScript can't be loaded lazily, because it will break stack traces
|
|
require('coffeescript');
|
|
class TestCafe {
|
|
constructor(configuration) {
|
|
(0, setup_sourcemap_support_1.setupSourceMapSupport)();
|
|
errorHandlers.registerErrorHandlers();
|
|
const { hostname, port1, port2, options } = configuration.startOptions;
|
|
this.closed = false;
|
|
this.proxy = new hammerhead.Proxy(hostname, port1, port2, options);
|
|
this.runners = [];
|
|
this.configuration = configuration;
|
|
this.browserConnectionGateway = new BrowserConnectionGateway(this.proxy, {
|
|
retryTestPages: configuration.getOption(option_names_1.default.retryTestPages),
|
|
proxyless: configuration.getOption(option_names_1.default.experimentalProxyless),
|
|
});
|
|
if (configuration.getOption(option_names_1.default.experimentalDebug)) {
|
|
const developmentMode = configuration.getOption(option_names_1.default.developmentMode);
|
|
const v8Flags = configuration.getOption(option_names_1.default.v8Flags);
|
|
this.compilerService = new CompilerHost({ developmentMode, v8Flags });
|
|
}
|
|
this._registerAssets(options.developmentMode);
|
|
}
|
|
_registerAssets(developmentMode) {
|
|
const { favIcon, coreScript, driverScript, uiScript, uiStyle, uiSprite, uiSpriteSvg, automationScript, legacyRunnerScript } = loadAssets(developmentMode);
|
|
this.proxy.GET(INJECTABLES.TESTCAFE_CORE, { content: coreScript, contentType: content_types_1.default.javascript });
|
|
this.proxy.GET(INJECTABLES.TESTCAFE_DRIVER, { content: driverScript, contentType: content_types_1.default.javascript });
|
|
this.proxy.GET(INJECTABLES.TESTCAFE_LEGACY_RUNNER, {
|
|
content: legacyRunnerScript,
|
|
contentType: content_types_1.default.javascript,
|
|
});
|
|
this.proxy.GET(INJECTABLES.TESTCAFE_AUTOMATION, { content: automationScript, contentType: content_types_1.default.javascript });
|
|
this.proxy.GET(INJECTABLES.TESTCAFE_UI, { content: uiScript, contentType: content_types_1.default.javascript });
|
|
this.proxy.GET(INJECTABLES.TESTCAFE_UI_SPRITE, { content: uiSprite, contentType: content_types_1.default.png });
|
|
this.proxy.GET(INJECTABLES.TESTCAFE_UI_SPRITE_SVG, { content: uiSpriteSvg, contentType: content_types_1.default.svg });
|
|
this.proxy.GET(INJECTABLES.DEFAULT_FAVICON_PATH, { content: favIcon, contentType: content_types_1.default.icon });
|
|
this.proxy.GET(INJECTABLES.TESTCAFE_UI_STYLES, {
|
|
content: uiStyle,
|
|
contentType: content_types_1.default.css,
|
|
isShadowUIStylesheet: true,
|
|
});
|
|
}
|
|
_createRunner(isLiveMode) {
|
|
const Ctor = isLiveMode ? LiveModeRunner : Runner;
|
|
const newRunner = new Ctor({
|
|
proxy: this.proxy,
|
|
browserConnectionGateway: this.browserConnectionGateway,
|
|
configuration: this.configuration.clone(option_names_1.default.hooks),
|
|
compilerService: this.compilerService,
|
|
});
|
|
this.runners.push(newRunner);
|
|
return newRunner;
|
|
}
|
|
// API
|
|
async createBrowserConnection() {
|
|
const browserInfo = await browserProviderPool.getBrowserInfo('remote');
|
|
return new BrowserConnection(this.browserConnectionGateway, browserInfo, true);
|
|
}
|
|
createRunner() {
|
|
return this._createRunner(false);
|
|
}
|
|
createLiveModeRunner() {
|
|
if (this.runners.some(runner => runner instanceof LiveModeRunner))
|
|
throw new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.cannotCreateMultipleLiveModeRunners);
|
|
return this._createRunner(true);
|
|
}
|
|
async close() {
|
|
if (this.closed)
|
|
return;
|
|
this.closed = true;
|
|
await Promise.all(this.runners.map(runner => runner.stop()));
|
|
await browserProviderPool.dispose();
|
|
if (this.compilerService)
|
|
this.compilerService.stop();
|
|
await this.browserConnectionGateway.close();
|
|
this.proxy.close();
|
|
}
|
|
}
|
|
exports.default = TestCafe;
|
|
module.exports = exports.default;
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGNhZmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdGVzdGNhZmUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhDQUFnRDtBQUNoRCwwQ0FBZ0Q7QUFDaEQsMkVBQW1EO0FBQ25ELGdGQUF3RDtBQUN4RCxrRUFBb0Q7QUFDcEQsNkVBQXdFO0FBRXhFLE1BQU0sV0FBVyxHQUFnQixPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDakUsTUFBTSxVQUFVLEdBQWlCLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBQ3BFLE1BQU0sVUFBVSxHQUFpQixXQUFXLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDOUQsTUFBTSxhQUFhLEdBQWMsV0FBVyxDQUFDLHVCQUF1QixDQUFDLENBQUM7QUFDdEUsTUFBTSx3QkFBd0IsR0FBRyxXQUFXLENBQUMsOEJBQThCLENBQUMsQ0FBQztBQUM3RSxNQUFNLGlCQUFpQixHQUFVLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0FBQ3JFLE1BQU0sbUJBQW1CLEdBQVEsV0FBVyxDQUFDLHlCQUF5QixDQUFDLENBQUM7QUFDeEUsTUFBTSxZQUFZLEdBQWUsV0FBVyxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFDekUsTUFBTSxNQUFNLEdBQXFCLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN6RCxNQUFNLGNBQWMsR0FBYSxXQUFXLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUVuRSxnRkFBZ0Y7QUFDaEYsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBRXhCLE1BQXFCLFFBQVE7SUFDekIsWUFBYSxhQUFhO1FBQ3RCLElBQUEsK0NBQXFCLEdBQUUsQ0FBQztRQUN4QixhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUV0QyxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxF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QUFDO0lBQ3JDLENBQUM7SUFFRCxvQkFBb0I7UUFDaEIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sWUFBWSxjQUFjLENBQUM7WUFDN0QsTUFBTSxJQUFJLHNCQUFZLENBQUMsc0JBQWMsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1FBRS9FLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQUs7UUFDUCxJQUFJLElBQUksQ0FBQyxNQUFNO1lBQ1gsT0FBTztRQUVYLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBRW5CLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFN0QsTUFBTSxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUVwQyxJQUFJLElBQUksQ0FBQyxlQUFlO1lBQ3BCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFaEMsTUFBTSxJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDNUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN2QixDQUFDO0NBQ0o7QUFwR0QsMkJBb0dDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR2VuZXJhbEVycm9yIH0gZnJvbSAnLi9lcnJvcnMvcnVudGltZSc7XG5pbXBvcnQgeyBSVU5USU1FX0VSUk9SUyB9IGZyb20gJy4vZXJyb3JzL3R5cGVzJztcbmltcG9ydCBDT05URU5UX1RZUEVTIGZyb20gJy4vYXNzZXRzL2NvbnRlbnQtdHlwZXMnO1xuaW1wb3J0IE9QVElPTl9OQU1FUyBmcm9tICcuL2NvbmZpZ3VyYXRpb24vb3B0aW9uLW5hbWVzJztcbmltcG9ydCAqIGFzIElOSkVDVEFCTEVTIGZyb20gJy4vYXNzZXRzL2luamVjdGFibGVzJztcbmltcG9ydCB7IHNldHVwU291cmNlTWFwU3VwcG9ydCB9IGZyb20gJy4vdXRpbHMvc2V0dXAtc291cmNlbWFwLXN1cHBvcnQnO1xuXG5jb25zdCBsYXp5UmVxdWlyZSAgICAgICAgICAgICAgPSByZXF1aXJlKCdpbXBvcnQtbGF6eScpKHJlcXVpcmUpO1xuY29uc3QgaGFtbWVyaGVhZCAgICAgICAgICAgICAgID0gbGF6eVJlcXVpcmUoJ3Rlc3RjYWZlLWhhbW1lcmhlYWQnKTtcbmNvbnN0IGxvYWRBc3NldHMgICAgICAgICAgICAgICA9IGxhenlSZXF1aXJlKCcuL2xvYWQtYXNzZXRzJyk7XG5jb25zdCBlcnJvckhhbmRsZXJzICAgICAgICAgICAgPSBsYXp5UmVxdWlyZSgnLi91dGlscy9oYW5kbGUtZXJyb3JzJyk7XG5jb25zdCBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXkgPSBsYXp5UmVxdWlyZSgnLi9icm93c2VyL2Nvbm5lY3Rpb24vZ2F0ZXdheScpO1xuY29uc3QgQnJvd3NlckNvbm5lY3Rpb24gICAgICAgID0gbGF6eVJlcXVpcmUoJy4vYnJvd3Nlci9jb25uZWN0aW9uJyk7XG5jb25zdCBicm93c2VyUHJvdmlkZXJQb29sICAgICAgPSBsYXp5UmVxdWlyZSgnLi9icm93c2VyL3Byb3ZpZGVyL3Bvb2wnKTtcbmNvbnN0IENvbXBpbGVySG9zdCAgICAgICAgICAgICA9IGxhenlSZXF1aXJlKCcuL3NlcnZpY2VzL2NvbXBpbGVyL2hvc3QnKTtcbmNvbnN0IFJ1bm5lciAgICAgICAgICAgICAgICAgICA9IGxhenlSZXF1aXJlKCcuL3J1bm5lcicpO1xuY29uc3QgTGl2ZU1vZGVSdW5uZXIgICAgICAgICAgID0gbGF6eVJlcXVpcmUoJy4vbGl2ZS90ZXN0LXJ1bm5lcicpO1xuXG4vLyBOT1RFOiBDb2ZmZWVTY3JpcHQgY2FuJ3QgYmUgbG9hZGVkIGxhemlseSwgYmVjYXVzZSBpdCB3aWxsIGJyZWFrIHN0YWNrIHRyYWNlc1xucmVxdWlyZSgnY29mZmVlc2NyaXB0Jyk7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlc3RDYWZlIHtcbiAgICBjb25zdHJ1Y3RvciAoY29uZmlndXJhdGlvbikge1xuICAgICAgICBzZXR1cFNvdXJjZU1hcFN1cHBvcnQoKTtcbiAgICAgICAgZXJyb3JIYW5kbGVycy5yZWdpc3RlckVycm9ySGFuZGxlcnMoKTtcblxuICAgICAgICBjb25zdCB7IGhvc3RuYW1lLCBwb3J0MSwgcG9ydDIsIG9wdGlvbnMgfSA9IGNvbmZpZ3VyYXRpb24uc3RhcnRPcHRpb25zO1xuXG4gICAgICAgIHRoaXMuY2xvc2VkICAgICAgICA9IGZhbHNlO1xuICAgICAgICB0aGlzLnByb3h5ICAgICAgICAgPSBuZXcgaGFtbWVyaGVhZC5Qcm94eShob3N0bmFtZSwgcG9ydDEsIHBvcnQyLCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5ydW5uZXJzICAgICAgID0gW107XG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XG5cbiAgICAgICAgdGhpcy5icm93c2VyQ29ubmVjdGlvbkdhdGV3YXkgPSBuZXcgQnJvd3NlckNvbm5lY3Rpb25HYXRld2F5KHRoaXMucHJveHksIHtcbiAgICAgICAgICAgIHJldHJ5VGVzdFBhZ2VzOiBjb25maWd1cmF0aW9uLmdldE9wdGlvbihPUFRJT05fTkFNRVMucmV0cnlUZXN0UGFnZXMpLFxuICAgICAgICAgICAgcHJveHlsZXNzOiAgICAgIGNvbmZpZ3VyYXRpb24uZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy5leHBlcmltZW50YWxQcm94eWxlc3MpLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoY29uZmlndXJhdGlvbi5nZXRPcHRpb24oT1BUSU9OX05BTUVTLmV4cGVyaW1lbnRhbERlYnVnKSkge1xuICAgICAgICAgICAgY29uc3QgZGV2ZWxvcG1lbnRNb2RlID0gY29uZmlndXJhdGlvbi5nZXRPcHRpb24oT1BUSU9OX05BTUVTLmRldmVsb3BtZW50TW9kZSk7XG4gICAgICAgICAgICBjb25zdCB2OEZsYWdzICAgICAgICAgPSBjb25maWd1cmF0aW9uLmdldE9wdGlvbihPUFRJT05fTkFNRVMudjhGbGFncyk7XG5cbiAgICAgICAgICAgIHRoaXMuY29tcGlsZXJTZXJ2aWNlID0gbmV3IENvbXBpbGVySG9zdCh7IGRldmVsb3BtZW50TW9kZSwgdjhGbGFncyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3JlZ2lzdGVyQXNzZXRzKG9wdGlvbnMuZGV2ZWxvcG1lbnRNb2RlKTtcbiAgICB9XG5cbiAgICBfcmVnaXN0ZXJBc3NldHMgKGRldmVsb3BtZW50TW9kZSkge1xuICAgICAgICBjb25zdCB7IGZhdkljb24sIGNvcmVTY3JpcHQsIGRyaXZlclNjcmlwdCwgdWlTY3JpcHQsXG4gICAgICAgICAgICB1aVN0eWxlLCB1aVNwcml0ZSwgdWlTcHJpdGVTdmcsIGF1dG9tYXRpb25TY3JpcHQsIGxlZ2FjeVJ1bm5lclNjcmlwdCB9ID0gbG9hZEFzc2V0cyhkZXZlbG9wbWVudE1vZGUpO1xuXG4gICAgICAgIHRoaXMucHJveHkuR0VUKElOSkVDVEFCTEVTLlRFU1RDQUZFX0NPUkUsIHsgY29udGVudDogY29yZVNjcmlwdCwgY29udGVudFR5cGU6IENPTlRFTlRfVFlQRVMuamF2YXNjcmlwdCB9KTtcbiAgICAgICAgdGhpcy5wcm94eS5HRVQoSU5KRUNUQUJMRVMuVEVTVENBRkVfRFJJVkVSLCB7IGNvbnRlbnQ6IGRyaXZlclNjcmlwdCwgY29udGVudFR5cGU6IENPTlRFTlRfVFlQRVMuamF2YXNjcmlwdCB9KTtcblxuICAgICAgICB0aGlzLnByb3h5LkdFVChJTkpFQ1RBQkxFUy5URVNUQ0FGRV9MRUdBQ1lfUlVOTkVSLCB7XG4gICAgICAgICAgICBjb250ZW50OiAgICAgbGVnYWN5UnVubmVyU2NyaXB0LFxuICAgICAgICAgICAgY29udGVudFR5cGU6IENPTlRFTlRfVFlQRVMuamF2YXNjcmlwdCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5wcm94eS5HRVQoSU5KRUNUQUJMRVMuVEVTVENBRkVfQVVUT01BVElPTiwgeyBjb250ZW50OiBhdXRvbWF0aW9uU2NyaXB0LCBjb250ZW50VHlwZTogQ09OVEVOVF9UWVBFUy5qYXZhc2NyaXB0IH0pO1xuICAgICAgICB0aGlzLnByb3h5LkdFVChJTkpFQ1RBQkxFUy5URVNUQ0FGRV9VSSwgeyBjb250ZW50OiB1aVNjcmlwdCwgY29udGVudFR5cGU6IENPTlRFTlRfVFlQRVMuamF2YXNjcmlwdCB9KTtcbiAgICAgICAgdGhpcy5wcm94eS5HRVQoSU5KRUNUQUJMRVMuVEVTVENBRkVfVUlfU1BSSVRFLCB7IGNvbnRlbnQ6IHVpU3ByaXRlLCBjb250ZW50VHlwZTogQ09OVEVOVF9UWVBFUy5wbmcgfSk7XG4gICAgICAgIHRoaXMucHJveHkuR0VUKElOSkVDVEFCTEVTLlRFU1RDQUZFX1VJX1NQUklURV9TVkcsIHsgY29udGVudDogdWlTcHJpdGVTdmcsIGNvbnRlbnRUeXBlOiBDT05URU5UX1RZUEVTLnN2ZyB9KTtcbiAgICAgICAgdGhpcy5wcm94eS5HRVQoSU5KRUNUQUJMRVMuREVGQVVMVF9GQVZJQ09OX1BBVEgsIHsgY29udGVudDogZmF2SWNvbiwgY29udGVudFR5cGU6IENPTlRFTlRfVFlQRVMuaWNvbiB9KTtcblxuICAgICAgICB0aGlzLnByb3h5LkdFVChJTkpFQ1RBQkxFUy5URVNUQ0FGRV9VSV9TVFlMRVMsIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6ICAgICAgICAgICAgICB1aVN0eWxlLFxuICAgICAgICAgICAgY29udGVudFR5cGU6ICAgICAgICAgIENPTlRFTlRfVFlQRVMuY3NzLFxuICAgICAgICAgICAgaXNTaGFkb3dVSVN0eWxlc2hlZXQ6IHRydWUsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9jcmVhdGVSdW5uZXIgKGlzTGl2ZU1vZGUpIHtcbiAgICAgICAgY29uc3QgQ3RvciAgICAgID0gaXNMaXZlTW9kZSA/IExpdmVNb2RlUnVubmVyIDogUnVubmVyO1xuICAgICAgICBjb25zdCBuZXdSdW5uZXIgPSBuZXcgQ3Rvcih7XG4gICAgICAgICAgICBwcm94eTogICAgICAgICAgICAgICAgICAgIHRoaXMucHJveHksXG4gICAgICAgICAgICBicm93c2VyQ29ubmVjdGlvbkdhdGV3YXk6IHRoaXMuYnJvd3NlckNvbm5lY3Rpb25HYXRld2F5LFxuICAgICAgICAgICAgY29uZmlndXJhdGlvbjogICAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uY2xvbmUoT1BUSU9OX05BTUVTLmhvb2tzKSxcbiAgICAgICAgICAgIGNvbXBpbGVyU2VydmljZTogICAgICAgICAgdGhpcy5jb21waWxlclNlcnZpY2UsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucnVubmVycy5wdXNoKG5ld1J1bm5lcik7XG5cbiAgICAgICAgcmV0dXJuIG5ld1J1bm5lcjtcbiAgICB9XG5cbiAgICAvLyBBUElcbiAgICBhc3luYyBjcmVhdGVCcm93c2VyQ29ubmVjdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGJyb3dzZXJJbmZvID0gYXdhaXQgYnJvd3NlclByb3ZpZGVyUG9vbC5nZXRCcm93c2VySW5mbygncmVtb3RlJyk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBCcm93c2VyQ29ubmVjdGlvbih0aGlzLmJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheSwgYnJvd3NlckluZm8sIHRydWUpO1xuICAgIH1cblxuICAgIGNyZWF0ZVJ1bm5lciAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVSdW5uZXIoZmFsc2UpO1xuICAgIH1cblxuICAgIGNyZWF0ZUxpdmVNb2RlUnVubmVyICgpIHtcbiAgICAgICAgaWYgKHRoaXMucnVubmVycy5zb21lKHJ1bm5lciA9PiBydW5uZXIgaW5zdGFuY2VvZiBMaXZlTW9kZVJ1bm5lcikpXG4gICAgICAgICAgICB0aHJvdyBuZXcgR2VuZXJhbEVycm9yKFJVTlRJTUVfRVJST1JTLmNhbm5vdENyZWF0ZU11bHRpcGxlTGl2ZU1vZGVSdW5uZXJzKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fY3JlYXRlUnVubmVyKHRydWUpO1xuICAgIH1cblxuICAgIGFzeW5jIGNsb3NlICgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcblxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLnJ1bm5lcnMubWFwKHJ1bm5lciA9PiBydW5uZXIuc3RvcCgpKSk7XG5cbiAgICAgICAgYXdhaXQgYnJvd3NlclByb3ZpZGVyUG9vbC5kaXNwb3NlKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuY29tcGlsZXJTZXJ2aWNlKVxuICAgICAgICAgICAgdGhpcy5jb21waWxlclNlcnZpY2Uuc3RvcCgpO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuYnJvd3NlckNvbm5lY3Rpb25HYXRld2F5LmNsb3NlKCk7XG4gICAgICAgIHRoaXMucHJveHkuY2xvc2UoKTtcbiAgICB9XG59XG4iXX0=
|