oxygen-cli 1.25.0-beta.2 → 1.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.husky/pre-commit +4 -0
- package/CHANGELOG.md +65 -0
- package/build/core/OxygenCore.js +36 -257
- package/build/core/OxygenEvents.js +1 -11
- package/build/core/OxygenModule.js +1 -14
- package/build/core/OxygenService.js +1 -12
- package/build/core/OxygenSubModule.js +1 -10
- package/build/core/WebDriverModule.js +1 -30
- package/build/core/utils.js +1 -17
- package/build/errors/HookError.js +1 -7
- package/build/errors/ModuleError.js +1 -7
- package/build/errors/ModuleUnavailableError.js +1 -3
- package/build/errors/OxygenError.js +1 -33
- package/build/errors/ScriptNotFound.js +1 -7
- package/build/errors/helper.js +46 -77
- package/build/index.js +6 -18
- package/build/lib/cli-util.js +28 -90
- package/build/lib/cli.js +1 -23
- package/build/lib/debugger.js +1 -144
- package/build/lib/img-merge.js +1 -15
- package/build/lib/launcher.js +1 -28
- package/build/lib/moduleRequire.js +1 -4
- package/build/lib/param-manager.js +1 -28
- package/build/lib/param-reader-csv.js +1 -15
- package/build/lib/param-reader-excel.js +1 -14
- package/build/lib/param-reader-json.js +1 -10
- package/build/lib/util.js +3 -58
- package/build/model/case-result.js +1 -2
- package/build/model/failure.js +1 -2
- package/build/model/status.js +1 -2
- package/build/model/step-result.js +1 -2
- package/build/model/suite-result.js +1 -2
- package/build/model/test-result.js +1 -2
- package/build/model/testcase.js +1 -2
- package/build/model/testsuite.js +1 -2
- package/build/ox_modules/index.js +13 -33
- package/build/ox_modules/module-assert.js +8 -24
- package/build/ox_modules/module-date.js +3 -8
- package/build/ox_modules/module-db.js +7 -28
- package/build/ox_modules/module-email.js +10 -36
- package/build/ox_modules/module-eyes.js +5 -46
- package/build/ox_modules/module-http.js +42 -104
- package/build/ox_modules/module-log.js +5 -22
- package/build/ox_modules/module-mailinator.js +10 -32
- package/build/ox_modules/module-mob/commands/alertAccept.js +1 -2
- package/build/ox_modules/module-mob/commands/alertDismiss.js +1 -2
- package/build/ox_modules/module-mob/commands/assertAlert.js +1 -6
- package/build/ox_modules/module-mob/commands/assertText.js +1 -3
- package/build/ox_modules/module-mob/commands/assertTitle.js +1 -4
- package/build/ox_modules/module-mob/commands/assertValue.js +9 -15
- package/build/ox_modules/module-mob/commands/back.js +1 -2
- package/build/ox_modules/module-mob/commands/clear.js +1 -4
- package/build/ox_modules/module-mob/commands/click.js +3 -4
- package/build/ox_modules/module-mob/commands/clickHidden.js +3 -9
- package/build/ox_modules/module-mob/commands/clickLong.js +1 -2
- package/build/ox_modules/module-mob/commands/clickMultipleTimes.js +1 -4
- package/build/ox_modules/module-mob/commands/closeApp.js +1 -2
- package/build/ox_modules/module-mob/commands/debug.js +2 -2
- package/build/ox_modules/module-mob/commands/dragAndDrop.js +1 -2
- package/build/ox_modules/module-mob/commands/enableNetwork.js +4 -12
- package/build/ox_modules/module-mob/commands/execute.js +1 -2
- package/build/ox_modules/module-mob/commands/findElement.js +1 -3
- package/build/ox_modules/module-mob/commands/findElements.js +1 -4
- package/build/ox_modules/module-mob/commands/getAlertText.js +1 -2
- package/build/ox_modules/module-mob/commands/getAppiumLogs.js +1 -2
- package/build/ox_modules/module-mob/commands/getBrowserLogs.js +1 -10
- package/build/ox_modules/module-mob/commands/getCurrentActivity.js +1 -2
- package/build/ox_modules/module-mob/commands/getCurrentPackage.js +1 -2
- package/build/ox_modules/module-mob/commands/getDeviceLogs.js +1 -9
- package/build/ox_modules/module-mob/commands/getDeviceTime.js +1 -2
- package/build/ox_modules/module-mob/commands/getLocation.js +1 -2
- package/build/ox_modules/module-mob/commands/getSource.js +1 -2
- package/build/ox_modules/module-mob/commands/getText.js +1 -4
- package/build/ox_modules/module-mob/commands/getTitle.js +1 -2
- package/build/ox_modules/module-mob/commands/getUrl.js +1 -2
- package/build/ox_modules/module-mob/commands/getValue.js +5 -9
- package/build/ox_modules/module-mob/commands/getWindowHandles.js +1 -2
- package/build/ox_modules/module-mob/commands/hideKeyboard.js +1 -2
- package/build/ox_modules/module-mob/commands/index.js +19 -94
- package/build/ox_modules/module-mob/commands/installApp.js +1 -2
- package/build/ox_modules/module-mob/commands/isAppInstalled.js +1 -2
- package/build/ox_modules/module-mob/commands/isCheckable.js +1 -2
- package/build/ox_modules/module-mob/commands/isChecked.js +1 -2
- package/build/ox_modules/module-mob/commands/isClickable.js +1 -2
- package/build/ox_modules/module-mob/commands/isExist.js +1 -3
- package/build/ox_modules/module-mob/commands/isSelected.js +1 -2
- package/build/ox_modules/module-mob/commands/isVisible.js +1 -3
- package/build/ox_modules/module-mob/commands/isWebViewContext.js +1 -2
- package/build/ox_modules/module-mob/commands/launchApp.js +1 -2
- package/build/ox_modules/module-mob/commands/longPressKeyCode.js +1 -2
- package/build/ox_modules/module-mob/commands/open.js +1 -3
- package/build/ox_modules/module-mob/commands/pause.js +1 -2
- package/build/ox_modules/module-mob/commands/removeApp.js +1 -2
- package/build/ox_modules/module-mob/commands/resetApp.js +1 -2
- package/build/ox_modules/module-mob/commands/scrollIntoElement.js +1 -6
- package/build/ox_modules/module-mob/commands/scrollIntoView.js +1 -2
- package/build/ox_modules/module-mob/commands/select.js +1 -4
- package/build/ox_modules/module-mob/commands/selectFrame.js +1 -4
- package/build/ox_modules/module-mob/commands/selectWindow.js +5 -26
- package/build/ox_modules/module-mob/commands/sendKeys.js +6 -9
- package/build/ox_modules/module-mob/commands/setContext.js +1 -2
- package/build/ox_modules/module-mob/commands/setNativeContext.js +1 -2
- package/build/ox_modules/module-mob/commands/setTimeout.js +1 -2
- package/build/ox_modules/module-mob/commands/setWebViewContext.js +3 -6
- package/build/ox_modules/module-mob/commands/shake.js +1 -2
- package/build/ox_modules/module-mob/commands/smsClickLink.js +1 -2
- package/build/ox_modules/module-mob/commands/smsGetText.js +3 -6
- package/build/ox_modules/module-mob/commands/swipe.js +1 -2
- package/build/ox_modules/module-mob/commands/swipeElement.js +1 -2
- package/build/ox_modules/module-mob/commands/swipeScreen.js +1 -2
- package/build/ox_modules/module-mob/commands/takeScreenshot.js +1 -2
- package/build/ox_modules/module-mob/commands/tap.js +1 -2
- package/build/ox_modules/module-mob/commands/type.js +3 -7
- package/build/ox_modules/module-mob/commands/unlockPattern.js +9 -10
- package/build/ox_modules/module-mob/commands/waitForExist.js +1 -2
- package/build/ox_modules/module-mob/commands/waitForInteractable.js +1 -3
- package/build/ox_modules/module-mob/commands/waitForVisible.js +1 -2
- package/build/ox_modules/module-mob.js +72 -142
- package/build/ox_modules/module-pdf.js +23 -62
- package/build/ox_modules/module-proxy.js +8 -68
- package/build/ox_modules/module-serial.js +7 -32
- package/build/ox_modules/module-shell.js +8 -27
- package/build/ox_modules/module-soap.js +14 -47
- package/build/ox_modules/module-twilio.js +10 -53
- package/build/ox_modules/module-utils.js +16 -51
- package/build/ox_modules/module-web/commands/alertAccept.js +1 -2
- package/build/ox_modules/module-web/commands/alertDismiss.js +1 -2
- package/build/ox_modules/module-web/commands/assertAlert.js +1 -6
- package/build/ox_modules/module-web/commands/assertExist.js +1 -2
- package/build/ox_modules/module-web/commands/assertSelectedLabel.js +1 -4
- package/build/ox_modules/module-web/commands/assertSelectedValue.js +1 -3
- package/build/ox_modules/module-web/commands/assertText.js +1 -3
- package/build/ox_modules/module-web/commands/assertTextNotPresent.js +1 -6
- package/build/ox_modules/module-web/commands/assertTextPresent.js +1 -6
- package/build/ox_modules/module-web/commands/assertTitle.js +1 -3
- package/build/ox_modules/module-web/commands/assertValue.js +1 -3
- package/build/ox_modules/module-web/commands/back.js +1 -2
- package/build/ox_modules/module-web/commands/clear.js +1 -5
- package/build/ox_modules/module-web/commands/click.js +4 -13
- package/build/ox_modules/module-web/commands/clickHidden.js +2 -7
- package/build/ox_modules/module-web/commands/closeWindow.js +1 -2
- package/build/ox_modules/module-web/commands/debug.js +2 -2
- package/build/ox_modules/module-web/commands/deleteCookies.js +1 -2
- package/build/ox_modules/module-web/commands/deselect.js +1 -2
- package/build/ox_modules/module-web/commands/doubleClick.js +3 -9
- package/build/ox_modules/module-web/commands/dragAndDrop.js +1 -2
- package/build/ox_modules/module-web/commands/execute.js +1 -2
- package/build/ox_modules/module-web/commands/fileBrowse.js +4 -10
- package/build/ox_modules/module-web/commands/findElement.js +1 -3
- package/build/ox_modules/module-web/commands/findElements.js +1 -4
- package/build/ox_modules/module-web/commands/fullscreenWindow.js +1 -2
- package/build/ox_modules/module-web/commands/getAlertText.js +1 -2
- package/build/ox_modules/module-web/commands/getAttribute.js +1 -4
- package/build/ox_modules/module-web/commands/getBrowserLogs.js +1 -3
- package/build/ox_modules/module-web/commands/getCookies.js +1 -2
- package/build/ox_modules/module-web/commands/getCssValue.js +1 -4
- package/build/ox_modules/module-web/commands/getElementCount.js +1 -2
- package/build/ox_modules/module-web/commands/getHTML.js +1 -2
- package/build/ox_modules/module-web/commands/getSource.js +1 -2
- package/build/ox_modules/module-web/commands/getText.js +1 -4
- package/build/ox_modules/module-web/commands/getTitle.js +1 -2
- package/build/ox_modules/module-web/commands/getUrl.js +1 -2
- package/build/ox_modules/module-web/commands/getValue.js +1 -5
- package/build/ox_modules/module-web/commands/getWindowHandles.js +1 -2
- package/build/ox_modules/module-web/commands/getWindowSize.js +1 -2
- package/build/ox_modules/module-web/commands/getXMLPageSource.js +1 -5
- package/build/ox_modules/module-web/commands/index.js +26 -99
- package/build/ox_modules/module-web/commands/isAlertPresent.js +1 -2
- package/build/ox_modules/module-web/commands/isChecked.js +1 -2
- package/build/ox_modules/module-web/commands/isExist.js +1 -3
- package/build/ox_modules/module-web/commands/isInteractable.js +33 -0
- package/build/ox_modules/module-web/commands/isSelected.js +1 -2
- package/build/ox_modules/module-web/commands/isVisible.js +1 -3
- package/build/ox_modules/module-web/commands/makeVisible.js +2 -10
- package/build/ox_modules/module-web/commands/maximizeWindow.js +1 -2
- package/build/ox_modules/module-web/commands/minimizeWindow.js +1 -2
- package/build/ox_modules/module-web/commands/newWindow.js +1 -2
- package/build/ox_modules/module-web/commands/open.js +1 -4
- package/build/ox_modules/module-web/commands/pause.js +1 -2
- package/build/ox_modules/module-web/commands/point.js +1 -2
- package/build/ox_modules/module-web/commands/pointJS.js +2 -8
- package/build/ox_modules/module-web/commands/refresh.js +1 -2
- package/build/ox_modules/module-web/commands/rightClick.js +3 -8
- package/build/ox_modules/module-web/commands/rightClickActions.js +1 -2
- package/build/ox_modules/module-web/commands/scrollToElement.js +1 -2
- package/build/ox_modules/module-web/commands/select.js +1 -5
- package/build/ox_modules/module-web/commands/selectFrame.js +1 -3
- package/build/ox_modules/module-web/commands/selectWindow.js +5 -26
- package/build/ox_modules/module-web/commands/sendKeys.js +3 -6
- package/build/ox_modules/module-web/commands/setAutoWaitForAngular.js +2 -2
- package/build/ox_modules/module-web/commands/setTimeout.js +1 -2
- package/build/ox_modules/module-web/commands/setWindowSize.js +1 -2
- package/build/ox_modules/module-web/commands/takeScreenshot.js +3 -5
- package/build/ox_modules/module-web/commands/type.js +1 -5
- package/build/ox_modules/module-web/commands/waitForAngular.js +6 -11
- package/build/ox_modules/module-web/commands/waitForExist.js +1 -2
- package/build/ox_modules/module-web/commands/waitForInteractable.js +1 -2
- package/build/ox_modules/module-web/commands/waitForNotExist.js +1 -8
- package/build/ox_modules/module-web/commands/waitForNotText.js +3 -5
- package/build/ox_modules/module-web/commands/waitForNotValue.js +3 -5
- package/build/ox_modules/module-web/commands/waitForText.js +3 -5
- package/build/ox_modules/module-web/commands/waitForValue.js +3 -5
- package/build/ox_modules/module-web/commands/waitForVisible.js +1 -2
- package/build/ox_modules/module-web/commands/waitForWindow.js +4 -21
- package/build/ox_modules/module-web.js +86 -192
- package/build/ox_modules/module-win/commands/assertText.js +1 -3
- package/build/ox_modules/module-win/commands/assertTitle.js +1 -4
- package/build/ox_modules/module-win/commands/assertValue.js +9 -15
- package/build/ox_modules/module-win/commands/back.js +1 -2
- package/build/ox_modules/module-win/commands/clear.js +1 -4
- package/build/ox_modules/module-win/commands/click.js +1 -2
- package/build/ox_modules/module-win/commands/clickLong.js +1 -2
- package/build/ox_modules/module-win/commands/clickMultipleTimes.js +1 -4
- package/build/ox_modules/module-win/commands/findElement.js +1 -3
- package/build/ox_modules/module-win/commands/findElements.js +1 -4
- package/build/ox_modules/module-win/commands/getAppiumLogs.js +1 -2
- package/build/ox_modules/module-win/commands/getCurrentWindowHandle.js +1 -2
- package/build/ox_modules/module-win/commands/getLocation.js +1 -2
- package/build/ox_modules/module-win/commands/getSource.js +1 -2
- package/build/ox_modules/module-win/commands/getText.js +1 -4
- package/build/ox_modules/module-win/commands/getValue.js +5 -9
- package/build/ox_modules/module-win/commands/getWindowHandles.js +1 -2
- package/build/ox_modules/module-win/commands/index.js +5 -43
- package/build/ox_modules/module-win/commands/isCheckable.js +1 -2
- package/build/ox_modules/module-win/commands/isChecked.js +1 -2
- package/build/ox_modules/module-win/commands/isClickable.js +1 -2
- package/build/ox_modules/module-win/commands/isExist.js +1 -3
- package/build/ox_modules/module-win/commands/isSelected.js +1 -2
- package/build/ox_modules/module-win/commands/isVisible.js +1 -3
- package/build/ox_modules/module-win/commands/open.js +1 -2
- package/build/ox_modules/module-win/commands/pause.js +1 -2
- package/build/ox_modules/module-win/commands/rightClick.js +1 -2
- package/build/ox_modules/module-win/commands/selectWindow.js +1 -15
- package/build/ox_modules/module-win/commands/sendKeys.js +1 -4
- package/build/ox_modules/module-win/commands/setTimeout.js +1 -2
- package/build/ox_modules/module-win/commands/takeScreenshot.js +1 -2
- package/build/ox_modules/module-win/commands/tap.js +1 -2
- package/build/ox_modules/module-win/commands/type.js +1 -4
- package/build/ox_modules/module-win/commands/waitForExist.js +1 -2
- package/build/ox_modules/module-win/commands/waitForInteractable.js +1 -4
- package/build/ox_modules/module-win/commands/waitForVisible.js +1 -2
- package/build/ox_modules/module-win.js +48 -87
- package/build/ox_modules/utils.js +22 -76
- package/build/ox_reporters/reporter-excel.js +1 -58
- package/build/ox_reporters/reporter-html.js +1 -28
- package/build/ox_reporters/reporter-json.js +1 -14
- package/build/ox_reporters/reporter-junit.js +1 -24
- package/build/ox_reporters/reporter-pdf.js +1 -19
- package/build/ox_reporters/reporter-xml.js +1 -17
- package/build/ox_services/service-devtools/submodule-network.js +3 -84
- package/build/ox_services/service-devtools.js +1 -23
- package/build/reporter/FileReporterBase.js +5 -44
- package/build/reporter/ReportAggregator.js +1 -65
- package/build/reporter/ReporterBase.js +1 -6
- package/build/runners/WorkerProcess.js +1 -99
- package/build/runners/cucumber/CucumberEventListener.js +4 -29
- package/build/runners/cucumber/CucumberReporter.js +1 -56
- package/build/runners/cucumber/CucumberWorker.js +1 -66
- package/build/runners/cucumber/index.js +1 -30
- package/build/runners/cucumber/worker.js +1 -18
- package/build/runners/index.js +1 -6
- package/build/runners/oxygen/OxygenWorker.js +20 -54
- package/build/runners/oxygen/index.js +17 -177
- package/build/runners/oxygen/worker.js +2 -25
- package/package.json +28 -29
package/build/lib/cli-util.js
CHANGED
|
@@ -3,58 +3,47 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.OXYGEN_PAGE_OBJECT_FILE_NAME = exports.OXYGEN_ENV_FILE_NAME = exports.OXYGEN_CONFIG_FILE_NAME = void 0;
|
|
6
7
|
exports.generateTestOptions = generateTestOptions;
|
|
7
|
-
exports.
|
|
8
|
-
exports.
|
|
8
|
+
exports.getCommandLineOptions = getCommandLineOptions;
|
|
9
|
+
exports.getConfigurations = getConfigurations;
|
|
10
|
+
exports.getEnvironments = getEnvironments;
|
|
9
11
|
exports.getPageObjectFilePath = getPageObjectFilePath;
|
|
10
12
|
exports.loadEnvironmentVariables = loadEnvironmentVariables;
|
|
11
|
-
exports.
|
|
12
|
-
exports.
|
|
13
|
-
exports.getCommandLineOptions = getCommandLineOptions;
|
|
13
|
+
exports.loadSuiteDefinitionsFromFolder = loadSuiteDefinitionsFromFolder;
|
|
14
|
+
exports.loadSuites = loadSuites;
|
|
14
15
|
exports.processTargetPath = processTargetPath;
|
|
15
|
-
exports.OXYGEN_PAGE_OBJECT_FILE_NAME = exports.OXYGEN_ENV_FILE_NAME = exports.OXYGEN_CONFIG_FILE_NAME = void 0;
|
|
16
|
-
|
|
17
16
|
require("source-map-support/register");
|
|
18
|
-
|
|
19
17
|
var _path = _interopRequireDefault(require("path"));
|
|
20
|
-
|
|
21
18
|
var _fs = _interopRequireDefault(require("fs"));
|
|
22
|
-
|
|
23
19
|
var _util = _interopRequireDefault(require("./util"));
|
|
24
|
-
|
|
25
20
|
var _async = require("async");
|
|
26
|
-
|
|
27
21
|
var _moduleRequire = _interopRequireDefault(require("./moduleRequire"));
|
|
28
|
-
|
|
29
22
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
30
|
-
|
|
31
23
|
const OXYGEN_CONFIG_FILE_NAME = 'oxygen.conf';
|
|
32
24
|
exports.OXYGEN_CONFIG_FILE_NAME = OXYGEN_CONFIG_FILE_NAME;
|
|
33
25
|
const OXYGEN_ENV_FILE_NAME = 'oxygen.env';
|
|
34
26
|
exports.OXYGEN_ENV_FILE_NAME = OXYGEN_ENV_FILE_NAME;
|
|
35
27
|
const OXYGEN_PAGE_OBJECT_FILE_NAME = 'oxygen.po';
|
|
36
28
|
exports.OXYGEN_PAGE_OBJECT_FILE_NAME = OXYGEN_PAGE_OBJECT_FILE_NAME;
|
|
37
|
-
|
|
38
29
|
async function generateTestOptions(config, argv) {
|
|
39
|
-
const options = {
|
|
30
|
+
const options = {
|
|
31
|
+
...config
|
|
40
32
|
};
|
|
41
33
|
options.env = loadEnvironmentVariables(config, argv);
|
|
42
34
|
options.po = getPageObjectFilePath(config, argv);
|
|
43
35
|
options.suites = await loadSuites(config, argv);
|
|
44
36
|
return options;
|
|
45
37
|
}
|
|
46
|
-
|
|
47
38
|
async function loadSuites(config, argv) {
|
|
48
39
|
if (config.framework && typeof config.framework === 'string' && config.framework.toLowerCase() !== 'oxygen') {
|
|
49
40
|
return;
|
|
50
41
|
}
|
|
51
|
-
|
|
52
42
|
const {
|
|
53
43
|
target
|
|
54
44
|
} = config;
|
|
55
45
|
const isConfigFile = target && target.name && target.name.indexOf(OXYGEN_CONFIG_FILE_NAME) === 0;
|
|
56
46
|
let suites = [];
|
|
57
|
-
|
|
58
47
|
if (!isConfigFile) {
|
|
59
48
|
if (target && target.extension === '.js') {
|
|
60
49
|
suites.push(await _util.default.generateTestSuiteFromJSFile(target.path, config.parameters.file, config.parameters.mode, false, config.iterations || 1));
|
|
@@ -62,52 +51,39 @@ async function loadSuites(config, argv) {
|
|
|
62
51
|
suites.push(await _util.default.generateTestSuiteFromJsonFile(target.path, config.parameters.file, config.parameters.mode, config));
|
|
63
52
|
}
|
|
64
53
|
} else {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
suiteDefs = config.suites;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
const suitesFolder = _path.default.join(target.cwd, 'suites');
|
|
72
|
-
|
|
73
|
-
if (_fs.default.existsSync(suitesFolder)) {
|
|
74
|
-
suiteDefs = [...suiteDefs, ...loadSuiteDefinitionsFromFolder(suitesFolder)];
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
suites = await Promise.all(suiteDefs.map(async suiteDef => await _util.default.generateTestSuiteFromJson(suiteDef, config)));
|
|
54
|
+
let suiteDefs = [];
|
|
55
|
+
if (config.suites && Array.isArray(config.suites)) {
|
|
56
|
+
suiteDefs = config.suites;
|
|
78
57
|
}
|
|
79
|
-
|
|
58
|
+
const suitesFolder = _path.default.join(target.cwd, 'suites');
|
|
59
|
+
if (_fs.default.existsSync(suitesFolder)) {
|
|
60
|
+
suiteDefs = [...suiteDefs, ...loadSuiteDefinitionsFromFolder(suitesFolder)];
|
|
61
|
+
}
|
|
62
|
+
suites = await Promise.all(suiteDefs.map(async suiteDef => await _util.default.generateTestSuiteFromJson(suiteDef, config)));
|
|
63
|
+
}
|
|
80
64
|
if (argv.suites && typeof argv.suites === 'string') {
|
|
81
65
|
const selectedSuiteNames = argv.suites.split(',');
|
|
82
66
|
suites = suites.filter(x => selectedSuiteNames.includes(x.name));
|
|
83
67
|
}
|
|
84
|
-
|
|
85
68
|
return suites;
|
|
86
69
|
}
|
|
87
|
-
|
|
88
70
|
function loadSuiteDefinitionsFromFolder(folderPath) {
|
|
89
71
|
const files = _fs.default.readdirSync(folderPath);
|
|
90
|
-
|
|
91
72
|
let suiteDefs = [];
|
|
92
73
|
(0, _async.forEach)(files, file => {
|
|
93
74
|
if (_path.default.extname(file) === '.json') {
|
|
94
75
|
const fullPath = _path.default.join(folderPath, file);
|
|
95
|
-
|
|
96
76
|
suiteDefs.push((0, _moduleRequire.default)(fullPath));
|
|
97
77
|
}
|
|
98
78
|
});
|
|
99
79
|
return suiteDefs;
|
|
100
80
|
}
|
|
101
|
-
|
|
102
81
|
function getPageObjectFilePath(config, argv = {}) {
|
|
103
82
|
const target = config.target || {};
|
|
104
83
|
const poFileName = argv.po || `${OXYGEN_PAGE_OBJECT_FILE_NAME}.js`;
|
|
105
84
|
const cwd = target.cwd || process.cwd();
|
|
106
|
-
|
|
107
85
|
let poFilePath = _path.default.resolve(cwd, poFileName);
|
|
108
|
-
|
|
109
86
|
poFilePath = _fs.default.existsSync(poFilePath) ? poFilePath : null;
|
|
110
|
-
|
|
111
87
|
if (poFilePath) {
|
|
112
88
|
try {
|
|
113
89
|
(0, _moduleRequire.default)(poFilePath);
|
|
@@ -120,46 +96,33 @@ function getPageObjectFilePath(config, argv = {}) {
|
|
|
120
96
|
return null;
|
|
121
97
|
}
|
|
122
98
|
}
|
|
123
|
-
|
|
124
99
|
function loadEnvironmentVariables(config, argv) {
|
|
125
100
|
const target = config.target || {};
|
|
126
101
|
const envName = argv.env || config.environment || 'default';
|
|
127
102
|
const cwd = target.cwd || process.cwd();
|
|
128
|
-
|
|
129
103
|
const defaultEnvFile = _path.default.join(cwd, `${OXYGEN_ENV_FILE_NAME}.js`);
|
|
130
|
-
|
|
131
104
|
if (_fs.default.existsSync(defaultEnvFile)) {
|
|
132
105
|
const env = (0, _moduleRequire.default)(defaultEnvFile);
|
|
133
|
-
|
|
134
106
|
if (env && typeof env === 'object' && Object.prototype.hasOwnProperty.call(env, envName)) {
|
|
135
107
|
return env[envName];
|
|
136
108
|
}
|
|
137
109
|
}
|
|
138
|
-
|
|
139
110
|
const dedicatedEnvFileJs = _path.default.join(cwd, 'env', `${envName}.js`);
|
|
140
|
-
|
|
141
111
|
const dedicatedEnvFileJson = _path.default.join(cwd, 'env', `${envName}.json`);
|
|
142
|
-
|
|
143
112
|
if (_fs.default.existsSync(dedicatedEnvFileJs)) {
|
|
144
113
|
return (0, _moduleRequire.default)(dedicatedEnvFileJs);
|
|
145
114
|
} else if (_fs.default.existsSync(dedicatedEnvFileJson)) {
|
|
146
115
|
return (0, _moduleRequire.default)(dedicatedEnvFileJson);
|
|
147
116
|
}
|
|
148
|
-
|
|
149
117
|
return {};
|
|
150
118
|
}
|
|
151
|
-
|
|
152
119
|
function getEnvironments(target) {
|
|
153
120
|
let targetCwd = null;
|
|
154
|
-
|
|
155
121
|
if (target && target.cwd) {
|
|
156
122
|
targetCwd = target.cwd;
|
|
157
123
|
}
|
|
158
|
-
|
|
159
124
|
const cwd = targetCwd || process.cwd();
|
|
160
|
-
|
|
161
125
|
const defaultEnvFile = _path.default.join(cwd, `${OXYGEN_ENV_FILE_NAME}.js`);
|
|
162
|
-
|
|
163
126
|
if (_fs.default.existsSync(defaultEnvFile)) {
|
|
164
127
|
try {
|
|
165
128
|
return (0, _moduleRequire.default)(defaultEnvFile);
|
|
@@ -168,17 +131,13 @@ function getEnvironments(target) {
|
|
|
168
131
|
throw err;
|
|
169
132
|
}
|
|
170
133
|
}
|
|
171
|
-
|
|
172
134
|
return {};
|
|
173
135
|
}
|
|
174
|
-
|
|
175
136
|
function getConfigurations(target, argv) {
|
|
176
137
|
let targetCwd = null;
|
|
177
|
-
|
|
178
138
|
if (target && target.cwd) {
|
|
179
139
|
targetCwd = target.cwd;
|
|
180
140
|
}
|
|
181
|
-
|
|
182
141
|
const DEFAULT_OPTS = {
|
|
183
142
|
cwd: target ? targetCwd || process.cwd() : process.cwd(),
|
|
184
143
|
target: target,
|
|
@@ -203,7 +162,6 @@ function getConfigurations(target, argv) {
|
|
|
203
162
|
};
|
|
204
163
|
const cmdOpts = getCommandLineOptions(argv);
|
|
205
164
|
let projConfigOpts = {};
|
|
206
|
-
|
|
207
165
|
if (target && target.name === OXYGEN_CONFIG_FILE_NAME && (target.extension === '.js' || target.extension === '.json')) {
|
|
208
166
|
try {
|
|
209
167
|
projConfigOpts = (0, _moduleRequire.default)(target.path);
|
|
@@ -212,32 +170,29 @@ function getConfigurations(target, argv) {
|
|
|
212
170
|
throw err;
|
|
213
171
|
}
|
|
214
172
|
}
|
|
215
|
-
|
|
216
173
|
const envs = getEnvironments(target);
|
|
217
|
-
|
|
218
174
|
if (projConfigOpts.envs) {
|
|
219
|
-
projConfigOpts.envs = {
|
|
175
|
+
projConfigOpts.envs = {
|
|
176
|
+
...projConfigOpts.envs,
|
|
220
177
|
...envs
|
|
221
178
|
};
|
|
222
179
|
} else {
|
|
223
|
-
projConfigOpts = {
|
|
180
|
+
projConfigOpts = {
|
|
181
|
+
...projConfigOpts,
|
|
224
182
|
envs: envs
|
|
225
183
|
};
|
|
226
184
|
}
|
|
227
|
-
|
|
228
185
|
let name = cmdOpts.name || projConfigOpts.name || null;
|
|
229
|
-
|
|
230
186
|
if (!name && target) {
|
|
231
187
|
name = target.name !== OXYGEN_CONFIG_FILE_NAME ? target.name : target.baseName;
|
|
232
188
|
}
|
|
233
|
-
|
|
234
|
-
|
|
189
|
+
return {
|
|
190
|
+
...DEFAULT_OPTS,
|
|
235
191
|
...projConfigOpts,
|
|
236
192
|
...cmdOpts,
|
|
237
193
|
name: name
|
|
238
194
|
};
|
|
239
195
|
}
|
|
240
|
-
|
|
241
196
|
function getCommandLineOptions(argv) {
|
|
242
197
|
const opts = {
|
|
243
198
|
name: argv.name || null,
|
|
@@ -249,44 +204,37 @@ function getCommandLineOptions(argv) {
|
|
|
249
204
|
debugPort: argv.dbgport || null,
|
|
250
205
|
delay: argv.d || argv.delay || null
|
|
251
206
|
};
|
|
252
|
-
|
|
253
207
|
if (argv.rf && typeof argv.rf === 'string' && argv.rf.length > 0) {
|
|
254
208
|
const reportFormats = argv.rf.split(',');
|
|
255
209
|
opts.reporting = {
|
|
256
210
|
reporters: reportFormats
|
|
257
211
|
};
|
|
258
|
-
|
|
259
212
|
if (argv.ro && typeof argv.ro === 'string' && argv.ro.length > 0) {
|
|
260
213
|
opts.reporting.outputDir = argv.ro;
|
|
261
214
|
}
|
|
262
215
|
}
|
|
263
|
-
|
|
264
216
|
if (argv.p || argv.param) {
|
|
265
217
|
opts.parameters = {
|
|
266
218
|
file: argv.p || argv.param || null,
|
|
267
219
|
mode: argv.pm || 'seq'
|
|
268
220
|
};
|
|
269
221
|
}
|
|
270
|
-
|
|
271
222
|
if (argv.specs && typeof argv.specs === 'string' && argv.specs.length > 0) {
|
|
272
223
|
const specs = argv.specs.split(',');
|
|
273
224
|
opts.specs = specs;
|
|
274
225
|
}
|
|
275
|
-
|
|
276
226
|
if (argv.modules && typeof argv.modules === 'string' && argv.modules.length > 0) {
|
|
277
227
|
const modules = argv.modules.split(',');
|
|
278
228
|
opts.modules = modules;
|
|
279
229
|
}
|
|
280
|
-
|
|
281
230
|
return deleteNullProperties(opts);
|
|
282
231
|
}
|
|
283
|
-
|
|
284
232
|
function deleteNullProperties(obj) {
|
|
285
233
|
if (typeof obj !== 'object') {
|
|
286
234
|
return obj;
|
|
287
235
|
}
|
|
288
|
-
|
|
289
|
-
|
|
236
|
+
const clone = {
|
|
237
|
+
...obj
|
|
290
238
|
};
|
|
291
239
|
const keys = Object.keys(obj);
|
|
292
240
|
(0, _async.forEach)(keys, key => {
|
|
@@ -296,40 +244,30 @@ function deleteNullProperties(obj) {
|
|
|
296
244
|
});
|
|
297
245
|
return clone;
|
|
298
246
|
}
|
|
299
|
-
|
|
300
247
|
function processTargetPath(targetPath, cwd) {
|
|
301
248
|
if (typeof targetPath === 'undefined') {
|
|
302
249
|
targetPath = cwd || process.cwd();
|
|
303
250
|
} else {
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
251
|
+
targetPath = _util.default.resolvePath(targetPath, cwd || process.cwd());
|
|
252
|
+
}
|
|
307
253
|
if (!_fs.default.existsSync(targetPath)) {
|
|
308
254
|
return null;
|
|
309
255
|
}
|
|
310
|
-
|
|
311
256
|
const stats = _fs.default.lstatSync(targetPath);
|
|
312
|
-
|
|
313
257
|
const isDirector = stats.isDirectory();
|
|
314
|
-
|
|
315
258
|
if (isDirector) {
|
|
316
259
|
let configFilePath = _path.default.join(targetPath, OXYGEN_CONFIG_FILE_NAME + '.js');
|
|
317
|
-
|
|
318
260
|
if (!_fs.default.existsSync(configFilePath)) {
|
|
319
261
|
configFilePath = _path.default.join(targetPath, OXYGEN_CONFIG_FILE_NAME + '.json');
|
|
320
|
-
|
|
321
262
|
if (!_fs.default.existsSync(configFilePath)) {
|
|
322
263
|
return null;
|
|
323
264
|
}
|
|
324
265
|
}
|
|
325
|
-
|
|
326
266
|
targetPath = configFilePath;
|
|
327
267
|
}
|
|
328
|
-
|
|
329
268
|
if (!_fs.default.existsSync(targetPath)) {
|
|
330
269
|
return null;
|
|
331
270
|
}
|
|
332
|
-
|
|
333
271
|
return {
|
|
334
272
|
path: targetPath,
|
|
335
273
|
cwd: cwd || _path.default.dirname(targetPath),
|
|
@@ -339,4 +277,4 @@ function processTargetPath(targetPath, cwd) {
|
|
|
339
277
|
extension: _path.default.extname(targetPath)
|
|
340
278
|
};
|
|
341
279
|
}
|
|
342
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY2xpLXV0aWwuanMiXSwibmFtZXMiOlsiT1hZR0VOX0NPTkZJR19GSUxFX05BTUUiLCJPWFlHRU5fRU5WX0ZJTEVfTkFNRSIsIk9YWUdFTl9QQUdFX09CSkVDVF9GSUxFX05BTUUiLCJnZW5lcmF0ZVRlc3RPcHRpb25zIiwiY29uZmlnIiwiYXJndiIsIm9wdGlvbnMiLCJlbnYiLCJsb2FkRW52aXJvbm1lbnRWYXJpYWJsZXMiLCJwbyIsImdldFBhZ2VPYmplY3RGaWxlUGF0aCIsInN1aXRlcyIsImxvYWRTdWl0ZXMiLCJmcmFtZXdvcmsiLCJ0b0xvd2VyQ2FzZSIsInRhcmdldCIsImlzQ29uZmlnRmlsZSIsIm5hbWUiLCJpbmRleE9mIiwiZXh0ZW5zaW9uIiwicHVzaCIsIm94dXRpbCIsImdlbmVyYXRlVGVzdFN1aXRlRnJvbUpTRmlsZSIsInBhdGgiLCJwYXJhbWV0ZXJzIiwiZmlsZSIsIm1vZGUiLCJpdGVyYXRpb25zIiwiZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbkZpbGUiLCJzdWl0ZURlZnMiLCJBcnJheSIsImlzQXJyYXkiLCJzdWl0ZXNGb2xkZXIiLCJqb2luIiwiY3dkIiwiZnMiLCJleGlzdHNTeW5jIiwibG9hZFN1aXRlRGVmaW5pdGlvbnNGcm9tRm9sZGVyIiwiUHJvbWlzZSIsImFsbCIsIm1hcCIsInN1aXRlRGVmIiwiZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbiIsInNlbGVjdGVkU3VpdGVOYW1lcyIsInNwbGl0IiwiZmlsdGVyIiwieCIsImluY2x1ZGVzIiwiZm9sZGVyUGF0aCIsImZpbGVzIiwicmVhZGRpclN5bmMiLCJleHRuYW1lIiwiZnVsbFBhdGgiLCJwb0ZpbGVOYW1lIiwicHJvY2VzcyIsInBvRmlsZVBhdGgiLCJyZXNvbHZlIiwiZSIsImVyciIsIkVycm9yIiwibWVzc2FnZSIsInN0YWNrIiwiZW52TmFtZSIsImVudmlyb25tZW50IiwiZGVmYXVsdEVudkZpbGUiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJkZWRpY2F0ZWRFbnZGaWxlSnMiLCJkZWRpY2F0ZWRFbnZGaWxlSnNvbiIsImdldEVudmlyb25tZW50cyIsInRhcmdldEN3ZCIsImdldENvbmZpZ3VyYXRpb25zIiwiREVGQVVMVF9PUFRTIiwiYnJvd3Nlck5hbWUiLCJzZWxlbml1bVVybCIsImFwcGl1bVVybCIsInJlb3BlblNlc3Npb24iLCJyZVJ1bk9uRmFpbGVkIiwiZGVidWdQb3J0IiwiZGVsYXkiLCJjb2xsZWN0RGV2aWNlTG9ncyIsImNvbGxlY3RBcHBpdW1Mb2dzIiwiY29sbGVjdEJyb3dzZXJMb2dzIiwicmVwb3J0aW5nIiwicmVwb3J0ZXJzIiwiY21kT3B0cyIsImdldENvbW1hbmRMaW5lT3B0aW9ucyIsInByb2pDb25maWdPcHRzIiwiZW52cyIsImJhc2VOYW1lIiwib3B0cyIsImIiLCJicm93c2VyIiwicyIsInNlcnZlciIsInJlb3BlbiIsImkiLCJwYXJzZUludCIsIml0ZXIiLCJkYmdwb3J0IiwiZCIsInJmIiwibGVuZ3RoIiwicmVwb3J0Rm9ybWF0cyIsInJvIiwib3V0cHV0RGlyIiwicCIsInBhcmFtIiwicG0iLCJzcGVjcyIsIm1vZHVsZXMiLCJkZWxldGVOdWxsUHJvcGVydGllcyIsIm9iaiIsImNsb25lIiwia2V5cyIsImtleSIsInVuZGVmaW5lZCIsInByb2Nlc3NUYXJnZXRQYXRoIiwidGFyZ2V0UGF0aCIsInJlc29sdmVQYXRoIiwic3RhdHMiLCJsc3RhdFN5bmMiLCJpc0RpcmVjdG9yIiwiaXNEaXJlY3RvcnkiLCJjb25maWdGaWxlUGF0aCIsImRpcm5hbWUiLCJnZXRGaWxlTmFtZVdpdGhvdXRFeHQiLCJmdWxsTmFtZSIsImJhc2VuYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUVPLE1BQU1BLHVCQUF1QixHQUFHLGFBQWhDOztBQUNBLE1BQU1DLG9CQUFvQixHQUFHLFlBQTdCOztBQUNBLE1B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QUFPMkcscUJBQVAsQ0FBNkJSLFVBQTdCLENBTkg7QUFRSFMsSUFBQUEsUUFBUSxFQUFFMUcsY0FBSzJHLFFBQUwsQ0FBY1YsVUFBZCxDQVJQO0FBVUg3QixJQUFBQSxRQUFRLEVBQUVwRSxjQUFLMkcsUUFBTCxDQUFjM0csY0FBS3dHLE9BQUwsQ0FBYVAsVUFBYixDQUFkLENBVlA7QUFZSHJHLElBQUFBLFNBQVMsRUFBRUksY0FBSzRCLE9BQUwsQ0FBYXFFLFVBQWI7QUFaUixHQUFQO0FBY0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcclxuaW1wb3J0IGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0IG94dXRpbCBmcm9tICcuL3V0aWwnO1xyXG5pbXBvcnQgeyBmb3JFYWNoIH0gZnJvbSAnYXN5bmMnO1xyXG5pbXBvcnQgbW9kdWxlUmVxdWlyZSBmcm9tICcuL21vZHVsZVJlcXVpcmUnO1xyXG5cclxuZXhwb3J0IGNvbnN0IE9YWUdFTl9DT05GSUdfRklMRV9OQU1FID0gJ294eWdlbi5jb25mJztcclxuZXhwb3J0IGNvbnN0IE9YWUdFTl9FTlZfRklMRV9OQU1FID0gJ294eWdlbi5lbnYnO1xyXG5leHBvcnQgY29uc3QgT1hZR0VOX1BBR0VfT0JKRUNUX0ZJTEVfTkFNRSA9ICdveHlnZW4ucG8nO1xyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlVGVzdE9wdGlvbnMoY29uZmlnLCBhcmd2KSB7XHJcbiAgICBjb25zdCBvcHRpb25zID0geyAuLi5jb25maWcgfTtcclxuICAgIG9wdGlvbnMuZW52ID0gbG9hZEVudmlyb25tZW50VmFyaWFibGVzKGNvbmZpZywgYXJndik7XHJcbiAgICBvcHRpb25zLnBvID0gZ2V0UGFnZU9iamVjdEZpbGVQYXRoKGNvbmZpZywgYXJndik7XHJcbiAgICBvcHRpb25zLnN1aXRlcyA9IGF3YWl0IGxvYWRTdWl0ZXMoY29uZmlnLCBhcmd2KTtcclxuICAgIHJldHVybiBvcHRpb25zO1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFN1aXRlcyhjb25maWcsIGFyZ3YpIHtcclxuICAgIGlmIChjb25maWcuZnJhbWV3b3JrICYmIHR5cGVvZiBjb25maWcuZnJhbWV3b3JrID09PSAnc3RyaW5nJyAmJiBjb25maWcuZnJhbWV3b3JrLnRvTG93ZXJDYXNlKCkgIT09ICdveHlnZW4nKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgeyB0YXJnZXQgfSA9IGNvbmZpZztcclxuICAgIGNvbnN0IGlzQ29uZmlnRmlsZSA9IHRhcmdldCAmJiB0YXJnZXQubmFtZSAmJiB0YXJnZXQubmFtZS5pbmRleE9mKE9YWUdFTl9DT05GSUdfRklMRV9OQU1FKSA9PT0gMDtcclxuICAgIGxldCBzdWl0ZXMgPSBbXTtcclxuICAgIC8vIGlmIGFuIGluZGl2aWR1YWwgc2NyaXB0IG9yIHN1aXRlIGZpbGUgd2FzIHBhc3NlZFxyXG4gICAgaWYgKCFpc0NvbmZpZ0ZpbGUpIHtcclxuICAgICAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC5leHRlbnNpb24gPT09ICcuanMnKSB7XHJcbiAgICAgICAgICAgIHN1aXRlcy5wdXNoKGF3YWl0IG94dXRpbC5nZW5lcmF0ZVRlc3RTdWl0ZUZyb21KU0ZpbGUodGFyZ2V0LnBhdGgsIGNvbmZpZy5wYXJhbWV0ZXJzLmZpbGUsIGNvbmZpZy5wYXJhbWV0ZXJzLm1vZGUsIGZhbHNlLCBjb25maWcuaXRlcmF0aW9ucyB8fCAxKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRhcmdldCAmJiB0YXJnZXQuZXh0ZW5zaW9uID09PSAnLmpzb24nKSB7XHJcbiAgICAgICAgICAgIHN1aXRlcy5wdXNoKGF3YWl0IG94dXRpbC5nZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uRmlsZSh0YXJnZXQucGF0aCwgY29uZmlnLnBhcmFtZXRlcnMuZmlsZSwgY29uZmlnLnBhcmFtZXRlcnMubW9kZSwgY29uZmlnKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gaWYgYSBmb2xkZXIgb3IgYSBjb25maWd1cmF0aW9uIGZpbGUgd2FzIHBhc3NlZFxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgbGV0IHN1aXRlRGVmcyA9IFtdO1xyXG4gICAgICAgIGlmIChjb25maWcuc3VpdGVzICYmIEFycmF5LmlzQXJyYXkoY29uZmlnLnN1aXRlcykpIHtcclxuICAgICAgICAgICAgc3VpdGVEZWZzID0gY29uZmlnLnN1aXRlcztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY2hlY2sgaWYgbW9yZSBzdWl0ZXMgYXJlIGRlZmluZWQgaW4gdGhlICdzdWl0ZXMnIGZvbGRlclxyXG4gICAgICAgIGNvbnN0IHN1aXRlc0ZvbGRlciA9IHBhdGguam9pbih0YXJnZXQuY3dkLCAnc3VpdGVzJyk7XHJcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoc3VpdGVzRm9sZGVyKSkge1xyXG4gICAgICAgICAgICBzdWl0ZURlZnMgPSBbXHJcbiAgICAgICAgICAgICAgICAuLi5zdWl0ZURlZnMsXHJcbiAgICAgICAgICAgICAgICAuLi5sb2FkU3VpdGVEZWZpbml0aW9uc0Zyb21Gb2xkZXIoc3VpdGVzRm9sZGVyKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBtZXJnZSBzdWl0ZXMgY29uZmlndXJlZCBpbiB0aGUgcHJvamVjdCBjb25maWcgZmlsZSBhbmQgdGhvc2UgZm91bmQgaW4gJ3N1aXRlcycgZm9sZGVyXHJcbiAgICAgICAgc3VpdGVzID0gYXdhaXQgUHJvbWlzZS5hbGwoc3VpdGVEZWZzLm1hcChhc3luYyAoc3VpdGVEZWYpID0+IGF3YWl0IG94dXRpbC5nZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uKHN1aXRlRGVmLCBjb25maWcpKSk7XHJcbiAgICB9XHJcbiAgICAvLyBmaWx0ZXIgb3V0IHN1aXRlcyBpZiAnLS1zdWl0ZXMnIGNvbW1hbmQgbGluZSBhcmd1bWVudCB3YXMgc3BlY2lmaWVkXHJcbiAgICBpZiAoYXJndi5zdWl0ZXMgJiYgdHlwZW9mIGFyZ3Yuc3VpdGVzID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkU3VpdGVOYW1lcyA9IGFyZ3Yuc3VpdGVzLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgc3VpdGVzID0gc3VpdGVzLmZpbHRlcih4ID0+IHNlbGVjdGVkU3VpdGVOYW1lcy5pbmNsdWRlcyh4Lm5hbWUpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdWl0ZXM7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkU3VpdGVEZWZpbml0aW9uc0Zyb21Gb2xkZXIoZm9sZGVyUGF0aCkge1xyXG4gICAgY29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhmb2xkZXJQYXRoKTtcclxuICAgIGxldCBzdWl0ZURlZnMgPSBbXTtcclxuICAgIGZvckVhY2goZmlsZXMsIGZpbGUgPT4ge1xyXG4gICAgICAgIGlmIChwYXRoLmV4dG5hbWUoZmlsZSkgPT09ICcuanNvbicpIHtcclxuICAgICAgICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmpvaW4oZm9sZGVyUGF0aCwgZmlsZSk7XHJcbiAgICAgICAgICAgIHN1aXRlRGVmcy5wdXNoKG1vZHVsZVJlcXVpcmUoZnVsbFBhdGgpKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBzdWl0ZURlZnM7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWdlT2JqZWN0RmlsZVBhdGgoY29uZmlnLCBhcmd2ID0ge30pIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IGNvbmZpZy50YXJnZXQgfHwge307XHJcbiAgICBjb25zdCBwb0ZpbGVOYW1lID0gYXJndi5wbyB8fCBgJHtPWFlHRU5fUEFHRV9PQkpFQ1RfRklMRV9OQU1FfS5qc2A7XHJcbiAgICBjb25zdCBjd2QgPSB0YXJnZXQuY3dkIHx8IHByb2Nlc3MuY3dkKCk7XHJcbiAgICBsZXQgcG9GaWxlUGF0aCA9IHBhdGgucmVzb2x2ZShjd2QsIHBvRmlsZU5hbWUpO1xyXG4gICAgcG9GaWxlUGF0aCA9IGZzLmV4aXN0c1N5bmMocG9GaWxlUGF0aCkgPyBwb0ZpbGVQYXRoIDogbnVsbDtcclxuXHJcbiAgICBpZiAocG9GaWxlUGF0aCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIG1vZHVsZVJlcXVpcmUocG9GaWxlUGF0aCk7XHJcbiAgICAgICAgICAgIHJldHVybiBwb0ZpbGVQYXRoO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKGBVbmFibGUgdG8gbG9hZCBmaWxlOiAke3BvRmlsZVBhdGh9LiBSZWFzb246ICR7ZS5tZXNzYWdlfSAke2Uuc3RhY2t9YCk7XHJcbiAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbG9hZEVudmlyb25tZW50VmFyaWFibGVzKGNvbmZpZywgYXJndikge1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gY29uZmlnLnRhcmdldCB8fCB7fTtcclxuICAgIGNvbnN0IGVudk5hbWUgPSBhcmd2LmVudiB8fCBjb25maWcuZW52aXJvbm1lbnQgfHwgJ2RlZmF1bHQnO1xyXG4gICAgY29uc3QgY3dkID0gdGFyZ2V0LmN3ZCB8fCBwcm9jZXNzLmN3ZCgpO1xyXG4gICAgY29uc3QgZGVmYXVsdEVudkZpbGUgPSBwYXRoLmpvaW4oY3dkLCBgJHtPWFlHRU5fRU5WX0ZJTEVfTkFNRX0uanNgKTtcclxuICAgIGlmIChmcy5leGlzdHNTeW5jKGRlZmF1bHRFbnZGaWxlKSkge1xyXG4gICAgICAgIGNvbnN0IGVudiA9IG1vZHVsZVJlcXVpcmUoZGVmYXVsdEVudkZpbGUpO1xyXG4gICAgICAgIGlmIChlbnYgJiYgdHlwZW9mIGVudiA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGVudiwgZW52TmFtZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGVudltlbnZOYW1lXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyB0cnkgdG8gcmVzb2x2ZSBhIGRlZGljYXRlZCBlbnZpcm9ubWVudCBmaWxlIGluICdlbnYnIHN1YiBmb2xkZXJcclxuICAgIGNvbnN0IGRlZGljYXRlZEVudkZpbGVKcyA9IHBhdGguam9pbihjd2QsICdlbnYnLCBgJHtlbnZOYW1lfS5qc2ApO1xyXG4gICAgY29uc3QgZGVkaWNhdGVkRW52RmlsZUpzb24gPSBwYXRoLmpvaW4oY3dkLCAnZW52JywgYCR7ZW52TmFtZX0uanNvbmApO1xyXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoZGVkaWNhdGVkRW52RmlsZUpzKSkge1xyXG4gICAgICAgIHJldHVybiBtb2R1bGVSZXF1aXJlKGRlZGljYXRlZEVudkZpbGVKcyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmcy5leGlzdHNTeW5jKGRlZGljYXRlZEVudkZpbGVKc29uKSkge1xyXG4gICAgICAgIHJldHVybiBtb2R1bGVSZXF1aXJlKGRlZGljYXRlZEVudkZpbGVKc29uKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7fTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEVudmlyb25tZW50cyh0YXJnZXQpIHtcclxuICAgIGxldCB0YXJnZXRDd2QgPSBudWxsO1xyXG5cclxuICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0LmN3ZCkge1xyXG4gICAgICAgIHRhcmdldEN3ZCA9IHRhcmdldC5jd2Q7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY3dkID0gdGFyZ2V0Q3dkIHx8IHByb2Nlc3MuY3dkKCk7XHJcbiAgICBjb25zdCBkZWZhdWx0RW52RmlsZSA9IHBhdGguam9pbihjd2QsIGAke09YWUdFTl9FTlZfRklMRV9OQU1FfS5qc2ApO1xyXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoZGVmYXVsdEVudkZpbGUpKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIG1vZHVsZVJlcXVpcmUoZGVmYXVsdEVudkZpbGUpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKGBVbmFibGUgdG8gbG9hZCBmaWxlOiAke2RlZmF1bHRFbnZGaWxlfS4gUmVhc29uOiAke2UubWVzc2FnZX0gJHtlLnN0YWNrfWApO1xyXG4gICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHt9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uZmlndXJhdGlvbnModGFyZ2V0LCBhcmd2KSB7XHJcbiAgICAvLyBwcm9jZXNzIGNvbW1hbmQgbGluZSBhcmd1bWVudHNcclxuICAgIGxldCB0YXJnZXRDd2QgPSBudWxsO1xyXG5cclxuICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0LmN3ZCkge1xyXG4gICAgICAgIHRhcmdldEN3ZCA9IHRhcmdldC5jd2Q7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgREVGQVVMVF9PUFRTID0ge1xyXG4gICAgICAgIGN3ZDogdGFyZ2V0ID8gKHRhcmdldEN3ZCB8fCBwcm9jZXNzLmN3ZCgpKSA6IHByb2Nlc3MuY3dkKCksXHJcbiAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXHJcbiAgICAgICAgYnJvd3Nlck5hbWU6ICdjaHJvbWUnLFxyXG4gICAgICAgIHNlbGVuaXVtVXJsIDogJ2h0dHA6Ly9sb2NhbGhvc3Q6NDQ0NC93ZC9odWInLFxyXG4gICAgICAgIGFwcGl1bVVybCA6ICdodHRwOi8vbG9jYWxob3N0OjQ3MjMvd2QvaHViJyxcclxuICAgICAgICByZW9wZW5TZXNzaW9uOiBmYWxzZSxcclxuICAgICAgICByZVJ1bk9uRmFpbGVkOiBmYWxzZSxcclxuICAgICAgICBpdGVyYXRpb25zIDogMSxcclxuICAgICAgICBkZWJ1Z1BvcnQ6IG51bGwsXHJcbiAgICAgICAgZGVsYXk6IG51bGwsXHJcbiAgICAgICAgY29sbGVjdERldmljZUxvZ3M6IGZhbHNlLFxyXG4gICAgICAgIGNvbGxlY3RBcHBpdW1Mb2dzOiBmYWxzZSxcclxuICAgICAgICBjb2xsZWN0QnJvd3NlckxvZ3M6IGZhbHNlLFxyXG4gICAgICAgIHJlcG9ydGluZzoge1xyXG4gICAgICAgICAgICByZXBvcnRlcnM6IFsnaHRtbCddXHJcbiAgICAgICAgfSxcclxuICAgICAgICBwYXJhbWV0ZXJzIDoge1xyXG4gICAgICAgICAgICBmaWxlOiBudWxsLFxyXG4gICAgICAgICAgICBtb2RlOiAnc2VxJ1xyXG4gICAgICAgIH0sXHJcbiAgICB9O1xyXG4gICAgLy8gcmV0cmlldmUgb3B0aW9ucyBwcm92aWRlZCB2aWEgY29tbWFuZCBsaW5lIGFyZ3VtZW50c1xyXG4gICAgY29uc3QgY21kT3B0cyA9IGdldENvbW1hbmRMaW5lT3B0aW9ucyhhcmd2KTtcclxuICAgIC8vIGlmIHRoZSB0YXJnZXQgaXMgb3h5Z2VuIGNvbmZpZyBmaWxlLCBtZXJnZSBpdHMgY29udGVudCB3aXRoIHRoZSBkZWZhdWx0IG9wdGlvbnNcclxuICAgIGxldCBwcm9qQ29uZmlnT3B0cyA9IHt9O1xyXG4gICAgaWYgKHRhcmdldCAmJiB0YXJnZXQubmFtZSA9PT0gT1hZR0VOX0NPTkZJR19GSUxFX05BTUUgJiYgKHRhcmdldC5leHRlbnNpb24gPT09ICcuanMnIHx8IHRhcmdldC5leHRlbnNpb24gPT09ICcuanNvbicpKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcHJvakNvbmZpZ09wdHMgPSBtb2R1bGVSZXF1aXJlKHRhcmdldC5wYXRoKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihgVW5hYmxlIHRvIGxvYWQgZmlsZTogJHt0YXJnZXQucGF0aH0uIFJlYXNvbjogJHtlLm1lc3NhZ2V9ICR7ZS5zdGFja31gKTtcclxuICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGVudnMgPSBnZXRFbnZpcm9ubWVudHModGFyZ2V0KTtcclxuXHJcbiAgICBpZiAocHJvakNvbmZpZ09wdHMuZW52cykge1xyXG4gICAgICAgIC8vIG1lcmdlIGV4dGVybmFsIGVudmlyb25tZW50cyBkZWZpbml0aW9uIHdpdGggdGhlIG9uZSBpbiB0aGUgY29uZmlnIGZpbGVcclxuICAgICAgICBwcm9qQ29uZmlnT3B0cy5lbnZzID0geyAuLi5wcm9qQ29uZmlnT3B0cy5lbnZzLCAuLi5lbnZzIH07XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBwcm9qQ29uZmlnT3B0cyA9IHsgLi4ucHJvakNvbmZpZ09wdHMsIGVudnM6IGVudnMgfTtcclxuICAgIH1cclxuICAgIC8vIGRldGVybWluZSB0ZXN0IG5hbWVcclxuICAgIGxldCBuYW1lID0gY21kT3B0cy5uYW1lIHx8IHByb2pDb25maWdPcHRzLm5hbWUgfHwgbnVsbDtcclxuICAgIGlmICghbmFtZSAmJiB0YXJnZXQpIHtcclxuICAgICAgICBuYW1lID0gdGFyZ2V0Lm5hbWUgIT09IE9YWUdFTl9DT05GSUdfRklMRV9OQU1FID8gdGFyZ2V0Lm5hbWUgOiB0YXJnZXQuYmFzZU5hbWU7XHJcbiAgICB9XHJcbiAgICAvLyBtZXJnZSBvcHRpb25zIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIG9yZGVyICh0aGUgbGFzdCBvbmUgb3ZlcnJpZGVzIHRoZSBwcmV2aW91cyBvbmUpOlxyXG4gICAgLy8gZGVmYXVsdCBvcHRpb25zLCBwcm9qZWN0IGNvbmZpZyBmaWxlLCBjb21tYW5kIGxpbmUgYXJndW1lbnRzXHJcbiAgICByZXR1cm4geyAuLi5ERUZBVUxUX09QVFMsIC4uLnByb2pDb25maWdPcHRzLCAuLi5jbWRPcHRzLCBuYW1lOiBuYW1lIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDb21tYW5kTGluZU9wdGlvbnMoYXJndikge1xyXG4gICAgY29uc3Qgb3B0cyA9IHtcclxuICAgICAgICAvLyBzd2l0Y2g6IC0tbmFtZSBcclxuICAgICAgICBuYW1lOiBhcmd2Lm5hbWUgfHwgbnVsbCxcclxuICAgICAgICAvLyBzd2l0Y2g6IC1iIG9yIC0tYnJvd3NlclxyXG4gICAgICAgIGJyb3dzZXJOYW1lIDogYXJndi5iIHx8IGFyZ3YuYnJvd3NlciB8fCBudWxsLFxyXG4gICAgICAgIHNlbGVuaXVtVXJsIDogYXJndi5zIHx8IGFyZ3Yuc2VydmVyIHx8IG51bGwsXHJcbiAgICAgICAgYXBwaXVtVXJsIDogYXJndi5zIHx8IGFyZ3Yuc2VydmVyIHx8IG51bGwsXHJcbiAgICAgICAgcmVvcGVuU2Vzc2lvbjogYXJndi5yZW9wZW4gPyBhcmd2LnJlb3BlbiA9PT0gJ3RydWUnIDogbnVsbCxcclxuICAgICAgICBpdGVyYXRpb25zIDogYXJndi5pID8gcGFyc2VJbnQoYXJndi5pKSA6IChhcmd2Lml0ZXIgPyBwYXJzZUludChhcmd2Lml0ZXIpIDogbnVsbCksXHJcbiAgICAgICAgZGVidWdQb3J0OiBhcmd2LmRiZ3BvcnQgfHwgbnVsbCxcclxuICAgICAgICBkZWxheTogYXJndi5kIHx8IGFyZ3YuZGVsYXkgfHwgbnVsbCxcclxuICAgIH07XHJcbiAgICAvLyBzd2l0Y2g6IC0tcmYgZmxhZ1xyXG4gICAgaWYgKGFyZ3YucmYgJiYgdHlwZW9mIGFyZ3YucmYgPT09ICdzdHJpbmcnICYmIGFyZ3YucmYubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IHJlcG9ydEZvcm1hdHMgPSBhcmd2LnJmLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgb3B0cy5yZXBvcnRpbmcgPSB7XHJcbiAgICAgICAgICAgIHJlcG9ydGVyczogcmVwb3J0Rm9ybWF0c1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgLy8gc3dpdGNoOiAtLXJvIC0gc2V0IHJlcG9ydGVyIG91dHB1dCBkaXJlY3RvcnkgaWYgc2V0IGJ5IHVzZXIgdGhyb3VnaCBjb21uYW5kIGxpbmVcclxuICAgICAgICAvLyBOT1RFOiAtLXJvIHN3aXRjaCBtdXN0IGJlIHNwZWNpZmllZCB0b2dldGhlciB3aXRoIC0tcmZcclxuICAgICAgICBpZiAoYXJndi5ybyAmJiB0eXBlb2YgYXJndi5ybyA9PT0gJ3N0cmluZycgJiYgYXJndi5yby5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIG9wdHMucmVwb3J0aW5nLm91dHB1dERpciA9IGFyZ3Yucm87XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gb3B0aW9uOiAtcCBvciAtLXBhcmFtIGFuZCAtLXBtXHJcbiAgICBpZiAoYXJndi5wIHx8IGFyZ3YucGFyYW0pIHtcclxuICAgICAgICBvcHRzLnBhcmFtZXRlcnMgPSB7XHJcbiAgICAgICAgICAgIGZpbGU6IGFyZ3YucCB8fCBhcmd2LnBhcmFtIHx8IG51bGwsXHJcbiAgICAgICAgICAgIG1vZGU6IGFyZ3YucG0gfHwgJ3NlcSdcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHN3aXRjaDogLS1zcGVjcyAtIHNldCBzcGVjcyBpZiBzZXQgYnkgdXNlciB0aHJvdWdoIGNvbW5hbmQgbGluZVxyXG4gICAgaWYgKGFyZ3Yuc3BlY3MgJiYgdHlwZW9mIGFyZ3Yuc3BlY3MgPT09ICdzdHJpbmcnICYmIGFyZ3Yuc3BlY3MubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IHNwZWNzID0gYXJndi5zcGVjcy5zcGxpdCgnLCcpO1xyXG4gICAgICAgIG9wdHMuc3BlY3MgPSBzcGVjcztcclxuICAgIH1cclxuICAgIC8vIHN3aXRjaDogLS1tb2R1bGVzIC0gc2V0IGEgbGlzdCBvZiBtb2R1bGVzIHRvIGJlIGxvYWRlZCwgaWYgc2V0IGJ5IHVzZXIgdGhyb3VnaCBjb21uYW5kIGxpbmVcclxuICAgIGlmIChhcmd2Lm1vZHVsZXMgJiYgdHlwZW9mIGFyZ3YubW9kdWxlcyA9PT0gJ3N0cmluZycgJiYgYXJndi5tb2R1bGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBtb2R1bGVzID0gYXJndi5tb2R1bGVzLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgb3B0cy5tb2R1bGVzID0gbW9kdWxlcztcclxuICAgIH1cclxuICAgIC8vIHJlbW92ZSBhbnkgcHJvcGVydHkgd2l0aCBudWxsIHZhbHVlIChzbyBpdCB3b24ndCBvdmVycmlkZSBkZWZhdWx0IHZhbHVlcyBpZiBpdCdzIG51bGwpXHJcbiAgICByZXR1cm4gZGVsZXRlTnVsbFByb3BlcnRpZXMob3B0cyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlbGV0ZU51bGxQcm9wZXJ0aWVzKG9iaikge1xyXG4gICAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuICAgIGNvbnN0IGNsb25lID0geyAuLi5vYmogfTtcclxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xyXG4gICAgZm9yRWFjaCAoa2V5cywga2V5ID0+IHtcclxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSAmJiAob2JqW2tleV0gPT0gbnVsbCB8fCBvYmpba2V5XSA9PSB1bmRlZmluZWQpKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBjbG9uZVtrZXldO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGNsb25lO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1RhcmdldFBhdGgodGFyZ2V0UGF0aCwgY3dkKSB7XHJcbiAgICAvLyBnZXQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpZiB1c2VyIGhhcyBub3QgcHJvdmlkZWQgcGF0aFxyXG4gICAgaWYgKHR5cGVvZih0YXJnZXRQYXRoKSA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICB0YXJnZXRQYXRoID0gY3dkIHx8IHByb2Nlc3MuY3dkKCk7XHJcbiAgICB9XHJcbiAgICAvLyB1c2VyJ3MgcGF0aCBtaWdodCBiZSByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSAtIG1ha2Ugc3VyZSB0aGUgcmVsYXRpdmUgcGF0aCB3aWxsIHdvcmtcclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRhcmdldFBhdGggPSBveHV0aWwucmVzb2x2ZVBhdGgodGFyZ2V0UGF0aCwgY3dkIHx8IHByb2Nlc3MuY3dkKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghZnMuZXhpc3RzU3luYyh0YXJnZXRQYXRoKSkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHN0YXRzID0gZnMubHN0YXRTeW5jKHRhcmdldFBhdGgpO1xyXG4gICAgY29uc3QgaXNEaXJlY3RvciA9IHN0YXRzLmlzRGlyZWN0b3J5KCk7XHJcbiAgICBpZiAoaXNEaXJlY3Rvcikge1xyXG4gICAgICAgIC8vIGFwcGVuZCBveHlnZW4gY29uZmlnIGZpbGUgbmFtZSB0byB0aGUgZGlyZWN0b3J5LCBpZiBubyB0ZXN0IGNhc2UgZmlsZSB3YXMgcHJvdmlkZWRcclxuICAgICAgICBsZXQgY29uZmlnRmlsZVBhdGggPSBwYXRoLmpvaW4odGFyZ2V0UGF0aCwgT1hZR0VOX0NPTkZJR19GSUxFX05BTUUgKyAnLmpzJyk7XHJcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGNvbmZpZ0ZpbGVQYXRoKSkge1xyXG4gICAgICAgICAgICBjb25maWdGaWxlUGF0aCA9IHBhdGguam9pbih0YXJnZXRQYXRoLCBPWFlHRU5fQ09ORklHX0ZJTEVfTkFNRSArICcuanNvbicpO1xyXG4gICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoY29uZmlnRmlsZVBhdGgpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0YXJnZXRQYXRoID0gY29uZmlnRmlsZVBhdGg7XHJcbiAgICB9XHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmModGFyZ2V0UGF0aCkpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgLy8gcGF0aCB0byB0aGUgY29uZmlnIG9yIC5qcyBmaWxlXHJcbiAgICAgICAgcGF0aDogdGFyZ2V0UGF0aCxcclxuICAgICAgICAvLyB3b3JraW5nIGRpcmVjdG9yeVxyXG4gICAgICAgIGN3ZDogY3dkIHx8IHBhdGguZGlybmFtZSh0YXJnZXRQYXRoKSxcclxuICAgICAgICAvLyBuYW1lIG9mIHRoZSB0YXJnZXQgZmlsZSB3aXRob3V0IGV4dGVuc2lvblxyXG4gICAgICAgIG5hbWU6IG94dXRpbC5nZXRGaWxlTmFtZVdpdGhvdXRFeHQodGFyZ2V0UGF0aCksXHJcbiAgICAgICAgLy8gbmFtZSBpbmNsdWRpbmcgZXh0ZW5zaW9uXHJcbiAgICAgICAgZnVsbE5hbWU6IHBhdGguYmFzZW5hbWUodGFyZ2V0UGF0aCksXHJcbiAgICAgICAgLy8gcGFyZW50IGZvbGRlcidzIG5hbWVcclxuICAgICAgICBiYXNlTmFtZTogcGF0aC5iYXNlbmFtZShwYXRoLmRpcm5hbWUodGFyZ2V0UGF0aCkpLFxyXG4gICAgICAgIC8vIHRhcmdldCBmaWxlIGV4dGVuc2lvblxyXG4gICAgICAgIGV4dGVuc2lvbjogcGF0aC5leHRuYW1lKHRhcmdldFBhdGgpXHJcbiAgICB9O1xyXG59Il19
|
|
280
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPWFlHRU5fQ09ORklHX0ZJTEVfTkFNRSIsIk9YWUdFTl9FTlZfRklMRV9OQU1FIiwiT1hZR0VOX1BBR0VfT0JKRUNUX0ZJTEVfTkFNRSIsImdlbmVyYXRlVGVzdE9wdGlvbnMiLCJjb25maWciLCJhcmd2Iiwib3B0aW9ucyIsImVudiIsImxvYWRFbnZpcm9ubWVudFZhcmlhYmxlcyIsInBvIiwiZ2V0UGFnZU9iamVjdEZpbGVQYXRoIiwic3VpdGVzIiwibG9hZFN1aXRlcyIsImZyYW1ld29yayIsInRvTG93ZXJDYXNlIiwidGFyZ2V0IiwiaXNDb25maWdGaWxlIiwibmFtZSIsImluZGV4T2YiLCJleHRlbnNpb24iLCJwdXNoIiwib3h1dGlsIiwiZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSlNGaWxlIiwicGF0aCIsInBhcmFtZXRlcnMiLCJmaWxlIiwibW9kZSIsIml0ZXJhdGlvbnMiLCJnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uRmlsZSIsInN1aXRlRGVmcyIsIkFycmF5IiwiaXNBcnJheSIsInN1aXRlc0ZvbGRlciIsImpvaW4iLCJjd2QiLCJmcyIsImV4aXN0c1N5bmMiLCJsb2FkU3VpdGVEZWZpbml0aW9uc0Zyb21Gb2xkZXIiLCJQcm9taXNlIiwiYWxsIiwibWFwIiwic3VpdGVEZWYiLCJnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uIiwic2VsZWN0ZWRTdWl0ZU5hbWVzIiwic3BsaXQiLCJmaWx0ZXIiLCJ4IiwiaW5jbHVkZXMiLCJmb2xkZXJQYXRoIiwiZmlsZXMiLCJyZWFkZGlyU3luYyIsImZvckVhY2giLCJleHRuYW1lIiwiZnVsbFBhdGgiLCJtb2R1bGVSZXF1aXJlIiwicG9GaWxlTmFtZSIsInByb2Nlc3MiLCJwb0ZpbGVQYXRoIiwicmVzb2x2ZSIsImUiLCJlcnIiLCJFcnJvciIsIm1lc3NhZ2UiLCJzdGFjayIsImVudk5hbWUiLCJlbnZpcm9ubWVudCIsImRlZmF1bHRFbnZGaWxlIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZGVkaWNhdGVkRW52RmlsZUpzIiwiZGVkaWNhdGVkRW52RmlsZUpzb24iLCJnZXRFbnZpcm9ubWVudHMiLCJ0YXJnZXRDd2QiLCJnZXRDb25maWd1cmF0aW9ucyIsIkRFRkFVTFRfT1BUUyIsImJyb3dzZXJOYW1lIiwic2VsZW5pdW1VcmwiLCJhcHBpdW1VcmwiLCJyZW9wZW5TZXNzaW9uIiwicmVSdW5PbkZhaWxlZCIsImRlYnVnUG9ydCIsImRlbGF5IiwiY29sbGVjdERldmljZUxvZ3MiLCJjb2xsZWN0QXBwaXVtTG9ncyIsImNvbGxlY3RCcm93c2VyTG9ncyIsInJlcG9ydGluZyIsInJlcG9ydGVycyIsImNtZE9wdHMiLCJnZXRDb21tYW5kTGluZU9wdGlvbnMiLCJwcm9qQ29uZmlnT3B0cyIsImVudnMiLCJiYXNlTmFtZSIsIm9wdHMiLCJiIiwiYnJvd3NlciIsInMiLCJzZXJ2ZXIiLCJyZW9wZW4iLCJpIiwicGFyc2VJbnQiLCJpdGVyIiwiZGJncG9ydCIsImQiLCJyZiIsImxlbmd0aCIsInJlcG9ydEZvcm1hdHMiLCJybyIsIm91dHB1dERpciIsInAiLCJwYXJhbSIsInBtIiwic3BlY3MiLCJtb2R1bGVzIiwiZGVsZXRlTnVsbFByb3BlcnRpZXMiLCJvYmoiLCJjbG9uZSIsImtleXMiLCJrZXkiLCJ1bmRlZmluZWQiLCJwcm9jZXNzVGFyZ2V0UGF0aCIsInRhcmdldFBhdGgiLCJyZXNvbHZlUGF0aCIsInN0YXRzIiwibHN0YXRTeW5jIiwiaXNEaXJlY3RvciIsImlzRGlyZWN0b3J5IiwiY29uZmlnRmlsZVBhdGgiLCJkaXJuYW1lIiwiZ2V0RmlsZU5hbWVXaXRob3V0RXh0IiwiZnVsbE5hbWUiLCJiYXNlbmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY2xpLXV0aWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcbmltcG9ydCBmcyBmcm9tICdmcyc7XHJcbmltcG9ydCBveHV0aWwgZnJvbSAnLi91dGlsJztcclxuaW1wb3J0IHsgZm9yRWFjaCB9IGZyb20gJ2FzeW5jJztcclxuaW1wb3J0IG1vZHVsZVJlcXVpcmUgZnJvbSAnLi9tb2R1bGVSZXF1aXJlJztcclxuXHJcbmV4cG9ydCBjb25zdCBPWFlHRU5fQ09ORklHX0ZJTEVfTkFNRSA9ICdveHlnZW4uY29uZic7XHJcbmV4cG9ydCBjb25zdCBPWFlHRU5fRU5WX0ZJTEVfTkFNRSA9ICdveHlnZW4uZW52JztcclxuZXhwb3J0IGNvbnN0IE9YWUdFTl9QQUdFX09CSkVDVF9GSUxFX05BTUUgPSAnb3h5Z2VuLnBvJztcclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVRlc3RPcHRpb25zKGNvbmZpZywgYXJndikge1xyXG4gICAgY29uc3Qgb3B0aW9ucyA9IHsgLi4uY29uZmlnIH07XHJcbiAgICBvcHRpb25zLmVudiA9IGxvYWRFbnZpcm9ubWVudFZhcmlhYmxlcyhjb25maWcsIGFyZ3YpO1xyXG4gICAgb3B0aW9ucy5wbyA9IGdldFBhZ2VPYmplY3RGaWxlUGF0aChjb25maWcsIGFyZ3YpO1xyXG4gICAgb3B0aW9ucy5zdWl0ZXMgPSBhd2FpdCBsb2FkU3VpdGVzKGNvbmZpZywgYXJndik7XHJcbiAgICByZXR1cm4gb3B0aW9ucztcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRTdWl0ZXMoY29uZmlnLCBhcmd2KSB7XHJcbiAgICBpZiAoY29uZmlnLmZyYW1ld29yayAmJiB0eXBlb2YgY29uZmlnLmZyYW1ld29yayA9PT0gJ3N0cmluZycgJiYgY29uZmlnLmZyYW1ld29yay50b0xvd2VyQ2FzZSgpICE9PSAnb3h5Z2VuJykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHsgdGFyZ2V0IH0gPSBjb25maWc7XHJcbiAgICBjb25zdCBpc0NvbmZpZ0ZpbGUgPSB0YXJnZXQgJiYgdGFyZ2V0Lm5hbWUgJiYgdGFyZ2V0Lm5hbWUuaW5kZXhPZihPWFlHRU5fQ09ORklHX0ZJTEVfTkFNRSkgPT09IDA7XHJcbiAgICBsZXQgc3VpdGVzID0gW107XHJcbiAgICAvLyBpZiBhbiBpbmRpdmlkdWFsIHNjcmlwdCBvciBzdWl0ZSBmaWxlIHdhcyBwYXNzZWRcclxuICAgIGlmICghaXNDb25maWdGaWxlKSB7XHJcbiAgICAgICAgaWYgKHRhcmdldCAmJiB0YXJnZXQuZXh0ZW5zaW9uID09PSAnLmpzJykge1xyXG4gICAgICAgICAgICBzdWl0ZXMucHVzaChhd2FpdCBveHV0aWwuZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSlNGaWxlKHRhcmdldC5wYXRoLCBjb25maWcucGFyYW1ldGVycy5maWxlLCBjb25maWcucGFyYW1ldGVycy5tb2RlLCBmYWxzZSwgY29uZmlnLml0ZXJhdGlvbnMgfHwgMSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0YXJnZXQgJiYgdGFyZ2V0LmV4dGVuc2lvbiA9PT0gJy5qc29uJykge1xyXG4gICAgICAgICAgICBzdWl0ZXMucHVzaChhd2FpdCBveHV0aWwuZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbkZpbGUodGFyZ2V0LnBhdGgsIGNvbmZpZy5wYXJhbWV0ZXJzLmZpbGUsIGNvbmZpZy5wYXJhbWV0ZXJzLm1vZGUsIGNvbmZpZykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGlmIGEgZm9sZGVyIG9yIGEgY29uZmlndXJhdGlvbiBmaWxlIHdhcyBwYXNzZWRcclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGxldCBzdWl0ZURlZnMgPSBbXTtcclxuICAgICAgICBpZiAoY29uZmlnLnN1aXRlcyAmJiBBcnJheS5pc0FycmF5KGNvbmZpZy5zdWl0ZXMpKSB7XHJcbiAgICAgICAgICAgIHN1aXRlRGVmcyA9IGNvbmZpZy5zdWl0ZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNoZWNrIGlmIG1vcmUgc3VpdGVzIGFyZSBkZWZpbmVkIGluIHRoZSAnc3VpdGVzJyBmb2xkZXJcclxuICAgICAgICBjb25zdCBzdWl0ZXNGb2xkZXIgPSBwYXRoLmpvaW4odGFyZ2V0LmN3ZCwgJ3N1aXRlcycpO1xyXG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKHN1aXRlc0ZvbGRlcikpIHtcclxuICAgICAgICAgICAgc3VpdGVEZWZzID0gW1xyXG4gICAgICAgICAgICAgICAgLi4uc3VpdGVEZWZzLFxyXG4gICAgICAgICAgICAgICAgLi4ubG9hZFN1aXRlRGVmaW5pdGlvbnNGcm9tRm9sZGVyKHN1aXRlc0ZvbGRlcilcclxuICAgICAgICAgICAgXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gbWVyZ2Ugc3VpdGVzIGNvbmZpZ3VyZWQgaW4gdGhlIHByb2plY3QgY29uZmlnIGZpbGUgYW5kIHRob3NlIGZvdW5kIGluICdzdWl0ZXMnIGZvbGRlclxyXG4gICAgICAgIHN1aXRlcyA9IGF3YWl0IFByb21pc2UuYWxsKHN1aXRlRGVmcy5tYXAoYXN5bmMgKHN1aXRlRGVmKSA9PiBhd2FpdCBveHV0aWwuZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbihzdWl0ZURlZiwgY29uZmlnKSkpO1xyXG4gICAgfVxyXG4gICAgLy8gZmlsdGVyIG91dCBzdWl0ZXMgaWYgJy0tc3VpdGVzJyBjb21tYW5kIGxpbmUgYXJndW1lbnQgd2FzIHNwZWNpZmllZFxyXG4gICAgaWYgKGFyZ3Yuc3VpdGVzICYmIHR5cGVvZiBhcmd2LnN1aXRlcyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFN1aXRlTmFtZXMgPSBhcmd2LnN1aXRlcy5zcGxpdCgnLCcpO1xyXG4gICAgICAgIHN1aXRlcyA9IHN1aXRlcy5maWx0ZXIoeCA9PiBzZWxlY3RlZFN1aXRlTmFtZXMuaW5jbHVkZXMoeC5uYW1lKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3VpdGVzO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbG9hZFN1aXRlRGVmaW5pdGlvbnNGcm9tRm9sZGVyKGZvbGRlclBhdGgpIHtcclxuICAgIGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmMoZm9sZGVyUGF0aCk7XHJcbiAgICBsZXQgc3VpdGVEZWZzID0gW107XHJcbiAgICBmb3JFYWNoKGZpbGVzLCBmaWxlID0+IHtcclxuICAgICAgICBpZiAocGF0aC5leHRuYW1lKGZpbGUpID09PSAnLmpzb24nKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5qb2luKGZvbGRlclBhdGgsIGZpbGUpO1xyXG4gICAgICAgICAgICBzdWl0ZURlZnMucHVzaChtb2R1bGVSZXF1aXJlKGZ1bGxQYXRoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gc3VpdGVEZWZzO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFnZU9iamVjdEZpbGVQYXRoKGNvbmZpZywgYXJndiA9IHt9KSB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBjb25maWcudGFyZ2V0IHx8IHt9O1xyXG4gICAgY29uc3QgcG9GaWxlTmFtZSA9IGFyZ3YucG8gfHwgYCR7T1hZR0VOX1BBR0VfT0JKRUNUX0ZJTEVfTkFNRX0uanNgO1xyXG4gICAgY29uc3QgY3dkID0gdGFyZ2V0LmN3ZCB8fCBwcm9jZXNzLmN3ZCgpO1xyXG4gICAgbGV0IHBvRmlsZVBhdGggPSBwYXRoLnJlc29sdmUoY3dkLCBwb0ZpbGVOYW1lKTtcclxuICAgIHBvRmlsZVBhdGggPSBmcy5leGlzdHNTeW5jKHBvRmlsZVBhdGgpID8gcG9GaWxlUGF0aCA6IG51bGw7XHJcblxyXG4gICAgaWYgKHBvRmlsZVBhdGgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBtb2R1bGVSZXF1aXJlKHBvRmlsZVBhdGgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcG9GaWxlUGF0aDtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihgVW5hYmxlIHRvIGxvYWQgZmlsZTogJHtwb0ZpbGVQYXRofS4gUmVhc29uOiAke2UubWVzc2FnZX0gJHtlLnN0YWNrfWApO1xyXG4gICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRFbnZpcm9ubWVudFZhcmlhYmxlcyhjb25maWcsIGFyZ3YpIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IGNvbmZpZy50YXJnZXQgfHwge307XHJcbiAgICBjb25zdCBlbnZOYW1lID0gYXJndi5lbnYgfHwgY29uZmlnLmVudmlyb25tZW50IHx8ICdkZWZhdWx0JztcclxuICAgIGNvbnN0IGN3ZCA9IHRhcmdldC5jd2QgfHwgcHJvY2Vzcy5jd2QoKTtcclxuICAgIGNvbnN0IGRlZmF1bHRFbnZGaWxlID0gcGF0aC5qb2luKGN3ZCwgYCR7T1hZR0VOX0VOVl9GSUxFX05BTUV9LmpzYCk7XHJcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhkZWZhdWx0RW52RmlsZSkpIHtcclxuICAgICAgICBjb25zdCBlbnYgPSBtb2R1bGVSZXF1aXJlKGRlZmF1bHRFbnZGaWxlKTtcclxuICAgICAgICBpZiAoZW52ICYmIHR5cGVvZiBlbnYgPT09ICdvYmplY3QnICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlbnYsIGVudk5hbWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlbnZbZW52TmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gdHJ5IHRvIHJlc29sdmUgYSBkZWRpY2F0ZWQgZW52aXJvbm1lbnQgZmlsZSBpbiAnZW52JyBzdWIgZm9sZGVyXHJcbiAgICBjb25zdCBkZWRpY2F0ZWRFbnZGaWxlSnMgPSBwYXRoLmpvaW4oY3dkLCAnZW52JywgYCR7ZW52TmFtZX0uanNgKTtcclxuICAgIGNvbnN0IGRlZGljYXRlZEVudkZpbGVKc29uID0gcGF0aC5qb2luKGN3ZCwgJ2VudicsIGAke2Vudk5hbWV9Lmpzb25gKTtcclxuICAgIGlmIChmcy5leGlzdHNTeW5jKGRlZGljYXRlZEVudkZpbGVKcykpIHtcclxuICAgICAgICByZXR1cm4gbW9kdWxlUmVxdWlyZShkZWRpY2F0ZWRFbnZGaWxlSnMpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZnMuZXhpc3RzU3luYyhkZWRpY2F0ZWRFbnZGaWxlSnNvbikpIHtcclxuICAgICAgICByZXR1cm4gbW9kdWxlUmVxdWlyZShkZWRpY2F0ZWRFbnZGaWxlSnNvbik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge307XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnZpcm9ubWVudHModGFyZ2V0KSB7XHJcbiAgICBsZXQgdGFyZ2V0Q3dkID0gbnVsbDtcclxuXHJcbiAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC5jd2QpIHtcclxuICAgICAgICB0YXJnZXRDd2QgPSB0YXJnZXQuY3dkO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGN3ZCA9IHRhcmdldEN3ZCB8fCBwcm9jZXNzLmN3ZCgpO1xyXG4gICAgY29uc3QgZGVmYXVsdEVudkZpbGUgPSBwYXRoLmpvaW4oY3dkLCBgJHtPWFlHRU5fRU5WX0ZJTEVfTkFNRX0uanNgKTtcclxuICAgIGlmIChmcy5leGlzdHNTeW5jKGRlZmF1bHRFbnZGaWxlKSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtb2R1bGVSZXF1aXJlKGRlZmF1bHRFbnZGaWxlKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihgVW5hYmxlIHRvIGxvYWQgZmlsZTogJHtkZWZhdWx0RW52RmlsZX0uIFJlYXNvbjogJHtlLm1lc3NhZ2V9ICR7ZS5zdGFja31gKTtcclxuICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7fTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbmZpZ3VyYXRpb25zKHRhcmdldCwgYXJndikge1xyXG4gICAgLy8gcHJvY2VzcyBjb21tYW5kIGxpbmUgYXJndW1lbnRzXHJcbiAgICBsZXQgdGFyZ2V0Q3dkID0gbnVsbDtcclxuXHJcbiAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC5jd2QpIHtcclxuICAgICAgICB0YXJnZXRDd2QgPSB0YXJnZXQuY3dkO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IERFRkFVTFRfT1BUUyA9IHtcclxuICAgICAgICBjd2Q6IHRhcmdldCA/ICh0YXJnZXRDd2QgfHwgcHJvY2Vzcy5jd2QoKSkgOiBwcm9jZXNzLmN3ZCgpLFxyXG4gICAgICAgIHRhcmdldDogdGFyZ2V0LFxyXG4gICAgICAgIGJyb3dzZXJOYW1lOiAnY2hyb21lJyxcclxuICAgICAgICBzZWxlbml1bVVybCA6ICdodHRwOi8vbG9jYWxob3N0OjQ0NDQvd2QvaHViJyxcclxuICAgICAgICBhcHBpdW1VcmwgOiAnaHR0cDovL2xvY2FsaG9zdDo0NzIzL3dkL2h1YicsXHJcbiAgICAgICAgcmVvcGVuU2Vzc2lvbjogZmFsc2UsXHJcbiAgICAgICAgcmVSdW5PbkZhaWxlZDogZmFsc2UsXHJcbiAgICAgICAgaXRlcmF0aW9ucyA6IDEsXHJcbiAgICAgICAgZGVidWdQb3J0OiBudWxsLFxyXG4gICAgICAgIGRlbGF5OiBudWxsLFxyXG4gICAgICAgIGNvbGxlY3REZXZpY2VMb2dzOiBmYWxzZSxcclxuICAgICAgICBjb2xsZWN0QXBwaXVtTG9nczogZmFsc2UsXHJcbiAgICAgICAgY29sbGVjdEJyb3dzZXJMb2dzOiBmYWxzZSxcclxuICAgICAgICByZXBvcnRpbmc6IHtcclxuICAgICAgICAgICAgcmVwb3J0ZXJzOiBbJ2h0bWwnXVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcGFyYW1ldGVycyA6IHtcclxuICAgICAgICAgICAgZmlsZTogbnVsbCxcclxuICAgICAgICAgICAgbW9kZTogJ3NlcSdcclxuICAgICAgICB9LFxyXG4gICAgfTtcclxuICAgIC8vIHJldHJpZXZlIG9wdGlvbnMgcHJvdmlkZWQgdmlhIGNvbW1hbmQgbGluZSBhcmd1bWVudHNcclxuICAgIGNvbnN0IGNtZE9wdHMgPSBnZXRDb21tYW5kTGluZU9wdGlvbnMoYXJndik7XHJcbiAgICAvLyBpZiB0aGUgdGFyZ2V0IGlzIG94eWdlbiBjb25maWcgZmlsZSwgbWVyZ2UgaXRzIGNvbnRlbnQgd2l0aCB0aGUgZGVmYXVsdCBvcHRpb25zXHJcbiAgICBsZXQgcHJvakNvbmZpZ09wdHMgPSB7fTtcclxuICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0Lm5hbWUgPT09IE9YWUdFTl9DT05GSUdfRklMRV9OQU1FICYmICh0YXJnZXQuZXh0ZW5zaW9uID09PSAnLmpzJyB8fCB0YXJnZXQuZXh0ZW5zaW9uID09PSAnLmpzb24nKSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHByb2pDb25maWdPcHRzID0gbW9kdWxlUmVxdWlyZSh0YXJnZXQucGF0aCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoYFVuYWJsZSB0byBsb2FkIGZpbGU6ICR7dGFyZ2V0LnBhdGh9LiBSZWFzb246ICR7ZS5tZXNzYWdlfSAke2Uuc3RhY2t9YCk7XHJcbiAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBlbnZzID0gZ2V0RW52aXJvbm1lbnRzKHRhcmdldCk7XHJcblxyXG4gICAgaWYgKHByb2pDb25maWdPcHRzLmVudnMpIHtcclxuICAgICAgICAvLyBtZXJnZSBleHRlcm5hbCBlbnZpcm9ubWVudHMgZGVmaW5pdGlvbiB3aXRoIHRoZSBvbmUgaW4gdGhlIGNvbmZpZyBmaWxlXHJcbiAgICAgICAgcHJvakNvbmZpZ09wdHMuZW52cyA9IHsgLi4ucHJvakNvbmZpZ09wdHMuZW52cywgLi4uZW52cyB9O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcHJvakNvbmZpZ09wdHMgPSB7IC4uLnByb2pDb25maWdPcHRzLCBlbnZzOiBlbnZzIH07XHJcbiAgICB9XHJcbiAgICAvLyBkZXRlcm1pbmUgdGVzdCBuYW1lXHJcbiAgICBsZXQgbmFtZSA9IGNtZE9wdHMubmFtZSB8fCBwcm9qQ29uZmlnT3B0cy5uYW1lIHx8IG51bGw7XHJcbiAgICBpZiAoIW5hbWUgJiYgdGFyZ2V0KSB7XHJcbiAgICAgICAgbmFtZSA9IHRhcmdldC5uYW1lICE9PSBPWFlHRU5fQ09ORklHX0ZJTEVfTkFNRSA/IHRhcmdldC5uYW1lIDogdGFyZ2V0LmJhc2VOYW1lO1xyXG4gICAgfVxyXG4gICAgLy8gbWVyZ2Ugb3B0aW9ucyBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyBvcmRlciAodGhlIGxhc3Qgb25lIG92ZXJyaWRlcyB0aGUgcHJldmlvdXMgb25lKTpcclxuICAgIC8vIGRlZmF1bHQgb3B0aW9ucywgcHJvamVjdCBjb25maWcgZmlsZSwgY29tbWFuZCBsaW5lIGFyZ3VtZW50c1xyXG4gICAgcmV0dXJuIHsgLi4uREVGQVVMVF9PUFRTLCAuLi5wcm9qQ29uZmlnT3B0cywgLi4uY21kT3B0cywgbmFtZTogbmFtZSB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29tbWFuZExpbmVPcHRpb25zKGFyZ3YpIHtcclxuICAgIGNvbnN0IG9wdHMgPSB7XHJcbiAgICAgICAgLy8gc3dpdGNoOiAtLW5hbWUgXHJcbiAgICAgICAgbmFtZTogYXJndi5uYW1lIHx8IG51bGwsXHJcbiAgICAgICAgLy8gc3dpdGNoOiAtYiBvciAtLWJyb3dzZXJcclxuICAgICAgICBicm93c2VyTmFtZSA6IGFyZ3YuYiB8fCBhcmd2LmJyb3dzZXIgfHwgbnVsbCxcclxuICAgICAgICBzZWxlbml1bVVybCA6IGFyZ3YucyB8fCBhcmd2LnNlcnZlciB8fCBudWxsLFxyXG4gICAgICAgIGFwcGl1bVVybCA6IGFyZ3YucyB8fCBhcmd2LnNlcnZlciB8fCBudWxsLFxyXG4gICAgICAgIHJlb3BlblNlc3Npb246IGFyZ3YucmVvcGVuID8gYXJndi5yZW9wZW4gPT09ICd0cnVlJyA6IG51bGwsXHJcbiAgICAgICAgaXRlcmF0aW9ucyA6IGFyZ3YuaSA/IHBhcnNlSW50KGFyZ3YuaSkgOiAoYXJndi5pdGVyID8gcGFyc2VJbnQoYXJndi5pdGVyKSA6IG51bGwpLFxyXG4gICAgICAgIGRlYnVnUG9ydDogYXJndi5kYmdwb3J0IHx8IG51bGwsXHJcbiAgICAgICAgZGVsYXk6IGFyZ3YuZCB8fCBhcmd2LmRlbGF5IHx8IG51bGwsXHJcbiAgICB9O1xyXG4gICAgLy8gc3dpdGNoOiAtLXJmIGZsYWdcclxuICAgIGlmIChhcmd2LnJmICYmIHR5cGVvZiBhcmd2LnJmID09PSAnc3RyaW5nJyAmJiBhcmd2LnJmLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCByZXBvcnRGb3JtYXRzID0gYXJndi5yZi5zcGxpdCgnLCcpO1xyXG4gICAgICAgIG9wdHMucmVwb3J0aW5nID0ge1xyXG4gICAgICAgICAgICByZXBvcnRlcnM6IHJlcG9ydEZvcm1hdHNcclxuICAgICAgICB9O1xyXG4gICAgICAgIC8vIHN3aXRjaDogLS1ybyAtIHNldCByZXBvcnRlciBvdXRwdXQgZGlyZWN0b3J5IGlmIHNldCBieSB1c2VyIHRocm91Z2ggY29tbmFuZCBsaW5lXHJcbiAgICAgICAgLy8gTk9URTogLS1ybyBzd2l0Y2ggbXVzdCBiZSBzcGVjaWZpZWQgdG9nZXRoZXIgd2l0aCAtLXJmXHJcbiAgICAgICAgaWYgKGFyZ3Yucm8gJiYgdHlwZW9mIGFyZ3Yucm8gPT09ICdzdHJpbmcnICYmIGFyZ3Yucm8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBvcHRzLnJlcG9ydGluZy5vdXRwdXREaXIgPSBhcmd2LnJvO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIG9wdGlvbjogLXAgb3IgLS1wYXJhbSBhbmQgLS1wbVxyXG4gICAgaWYgKGFyZ3YucCB8fCBhcmd2LnBhcmFtKSB7XHJcbiAgICAgICAgb3B0cy5wYXJhbWV0ZXJzID0ge1xyXG4gICAgICAgICAgICBmaWxlOiBhcmd2LnAgfHwgYXJndi5wYXJhbSB8fCBudWxsLFxyXG4gICAgICAgICAgICBtb2RlOiBhcmd2LnBtIHx8ICdzZXEnXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBzd2l0Y2g6IC0tc3BlY3MgLSBzZXQgc3BlY3MgaWYgc2V0IGJ5IHVzZXIgdGhyb3VnaCBjb21uYW5kIGxpbmVcclxuICAgIGlmIChhcmd2LnNwZWNzICYmIHR5cGVvZiBhcmd2LnNwZWNzID09PSAnc3RyaW5nJyAmJiBhcmd2LnNwZWNzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBzcGVjcyA9IGFyZ3Yuc3BlY3Muc3BsaXQoJywnKTtcclxuICAgICAgICBvcHRzLnNwZWNzID0gc3BlY3M7XHJcbiAgICB9XHJcbiAgICAvLyBzd2l0Y2g6IC0tbW9kdWxlcyAtIHNldCBhIGxpc3Qgb2YgbW9kdWxlcyB0byBiZSBsb2FkZWQsIGlmIHNldCBieSB1c2VyIHRocm91Z2ggY29tbmFuZCBsaW5lXHJcbiAgICBpZiAoYXJndi5tb2R1bGVzICYmIHR5cGVvZiBhcmd2Lm1vZHVsZXMgPT09ICdzdHJpbmcnICYmIGFyZ3YubW9kdWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29uc3QgbW9kdWxlcyA9IGFyZ3YubW9kdWxlcy5zcGxpdCgnLCcpO1xyXG4gICAgICAgIG9wdHMubW9kdWxlcyA9IG1vZHVsZXM7XHJcbiAgICB9XHJcbiAgICAvLyByZW1vdmUgYW55IHByb3BlcnR5IHdpdGggbnVsbCB2YWx1ZSAoc28gaXQgd29uJ3Qgb3ZlcnJpZGUgZGVmYXVsdCB2YWx1ZXMgaWYgaXQncyBudWxsKVxyXG4gICAgcmV0dXJuIGRlbGV0ZU51bGxQcm9wZXJ0aWVzKG9wdHMpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBkZWxldGVOdWxsUHJvcGVydGllcyhvYmopIHtcclxuICAgIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9XHJcbiAgICBjb25zdCBjbG9uZSA9IHsgLi4ub2JqIH07XHJcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcclxuICAgIGZvckVhY2ggKGtleXMsIGtleSA9PiB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkgJiYgKG9ialtrZXldID09IG51bGwgfHwgb2JqW2tleV0gPT0gdW5kZWZpbmVkKSkge1xyXG4gICAgICAgICAgICBkZWxldGUgY2xvbmVba2V5XTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBjbG9uZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NUYXJnZXRQYXRoKHRhcmdldFBhdGgsIGN3ZCkge1xyXG4gICAgLy8gZ2V0IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgaWYgdXNlciBoYXMgbm90IHByb3ZpZGVkIHBhdGhcclxuICAgIGlmICh0eXBlb2YodGFyZ2V0UGF0aCkgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgdGFyZ2V0UGF0aCA9IGN3ZCB8fCBwcm9jZXNzLmN3ZCgpO1xyXG4gICAgfVxyXG4gICAgLy8gdXNlcidzIHBhdGggbWlnaHQgYmUgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgLSBtYWtlIHN1cmUgdGhlIHJlbGF0aXZlIHBhdGggd2lsbCB3b3JrXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0YXJnZXRQYXRoID0gb3h1dGlsLnJlc29sdmVQYXRoKHRhcmdldFBhdGgsIGN3ZCB8fCBwcm9jZXNzLmN3ZCgpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmModGFyZ2V0UGF0aCkpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzdGF0cyA9IGZzLmxzdGF0U3luYyh0YXJnZXRQYXRoKTtcclxuICAgIGNvbnN0IGlzRGlyZWN0b3IgPSBzdGF0cy5pc0RpcmVjdG9yeSgpO1xyXG4gICAgaWYgKGlzRGlyZWN0b3IpIHtcclxuICAgICAgICAvLyBhcHBlbmQgb3h5Z2VuIGNvbmZpZyBmaWxlIG5hbWUgdG8gdGhlIGRpcmVjdG9yeSwgaWYgbm8gdGVzdCBjYXNlIGZpbGUgd2FzIHByb3ZpZGVkXHJcbiAgICAgICAgbGV0IGNvbmZpZ0ZpbGVQYXRoID0gcGF0aC5qb2luKHRhcmdldFBhdGgsIE9YWUdFTl9DT05GSUdfRklMRV9OQU1FICsgJy5qcycpO1xyXG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhjb25maWdGaWxlUGF0aCkpIHtcclxuICAgICAgICAgICAgY29uZmlnRmlsZVBhdGggPSBwYXRoLmpvaW4odGFyZ2V0UGF0aCwgT1hZR0VOX0NPTkZJR19GSUxFX05BTUUgKyAnLmpzb24nKTtcclxuICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGNvbmZpZ0ZpbGVQYXRoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGFyZ2V0UGF0aCA9IGNvbmZpZ0ZpbGVQYXRoO1xyXG4gICAgfVxyXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHRhcmdldFBhdGgpKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIC8vIHBhdGggdG8gdGhlIGNvbmZpZyBvciAuanMgZmlsZVxyXG4gICAgICAgIHBhdGg6IHRhcmdldFBhdGgsXHJcbiAgICAgICAgLy8gd29ya2luZyBkaXJlY3RvcnlcclxuICAgICAgICBjd2Q6IGN3ZCB8fCBwYXRoLmRpcm5hbWUodGFyZ2V0UGF0aCksXHJcbiAgICAgICAgLy8gbmFtZSBvZiB0aGUgdGFyZ2V0IGZpbGUgd2l0aG91dCBleHRlbnNpb25cclxuICAgICAgICBuYW1lOiBveHV0aWwuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KHRhcmdldFBhdGgpLFxyXG4gICAgICAgIC8vIG5hbWUgaW5jbHVkaW5nIGV4dGVuc2lvblxyXG4gICAgICAgIGZ1bGxOYW1lOiBwYXRoLmJhc2VuYW1lKHRhcmdldFBhdGgpLFxyXG4gICAgICAgIC8vIHBhcmVudCBmb2xkZXIncyBuYW1lXHJcbiAgICAgICAgYmFzZU5hbWU6IHBhdGguYmFzZW5hbWUocGF0aC5kaXJuYW1lKHRhcmdldFBhdGgpKSxcclxuICAgICAgICAvLyB0YXJnZXQgZmlsZSBleHRlbnNpb25cclxuICAgICAgICBleHRlbnNpb246IHBhdGguZXh0bmFtZSh0YXJnZXRQYXRoKVxyXG4gICAgfTtcclxufSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBNEM7QUFFckMsTUFBTUEsdUJBQXVCLEdBQUcsYUFBYTtBQUFDO0FBQzlDLE1BQU1DLG9CQUFvQixHQUFHLFlBQVk7QUFBQztBQUMxQyxNQUFNQyw0QkFBNEIsR0FBRyxXQUFXO0FBQUM7QUFFakQsZUFBZUMsbUJBQW1CLENBQUNDLE1BQU0sRUFBRUMsSUFBSSxFQUFFO0VBQ3BELE1BQU1DLE9BQU8sR0FBRztJQUFFLEdBQUdGO0VBQU8sQ0FBQztFQUM3QkUsT0FBTyxDQUFDQyxHQUFHLEdBQUdDLHdCQUF3QixDQUFDSixNQUFNLEVBQUVDLElBQUksQ0FBQztFQUNwREMsT0FBTyxDQUFDRyxFQUFFLEdBQUdDLHFCQUFxQixDQUFDTixNQUFNLEVBQUVDLElBQUksQ0FBQztFQUNoREMsT0FBTyxDQUFDSyxNQUFNLEdBQUcsTUFBTUMsVUFBVSxDQUFDUixNQUFNLEVBQUVDLElBQUksQ0FBQztFQUMvQyxPQUFPQyxPQUFPO0FBQ2xCO0FBRU8sZUFBZU0sVUFBVSxDQUFDUixNQUFNLEVBQUVDLElBQUksRUFBRTtFQUMzQyxJQUFJRCxNQUFNLENBQUNTLFNBQVMsSUFBSSxPQUFPVCxNQUFNLENBQUNTLFNBQVMsS0FBSyxRQUFRLElBQUlULE1BQU0sQ0FBQ1MsU0FBUyxDQUFDQyxXQUFXLEVBQUUsS0FBSyxRQUFRLEVBQUU7SUFDekc7RUFDSjtFQUNBLE1BQU07SUFB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
|
package/build/lib/cli.js
CHANGED
|
@@ -2,19 +2,12 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
4
|
require("source-map-support/register");
|
|
5
|
-
|
|
6
5
|
var cliutil = _interopRequireWildcard(require("./cli-util"));
|
|
7
|
-
|
|
8
6
|
var _launcher = _interopRequireDefault(require("./launcher"));
|
|
9
|
-
|
|
10
7
|
var _ReportAggregator = _interopRequireDefault(require("../reporter/ReportAggregator"));
|
|
11
|
-
|
|
12
8
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
-
|
|
14
9
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
15
|
-
|
|
16
10
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
17
|
-
|
|
18
11
|
process.on('SIGINT', handleSigInt);
|
|
19
12
|
process.on('uncaughtException', error => {
|
|
20
13
|
console.error('uncaughtException', error);
|
|
@@ -22,9 +15,7 @@ process.on('uncaughtException', error => {
|
|
|
22
15
|
process.on('unhandledRejection', error => {
|
|
23
16
|
console.error('unhandledRejection', error);
|
|
24
17
|
});
|
|
25
|
-
|
|
26
18
|
const argv = require('minimist')(process.argv.slice(2));
|
|
27
|
-
|
|
28
19
|
if (argv.v || argv.version) {
|
|
29
20
|
console.log(require('../../package.json').version);
|
|
30
21
|
process.exit(0);
|
|
@@ -32,24 +23,19 @@ if (argv.v || argv.version) {
|
|
|
32
23
|
printUsage();
|
|
33
24
|
process.exit(1);
|
|
34
25
|
}
|
|
35
|
-
|
|
36
26
|
if (argv.d || argv.delay) {
|
|
37
27
|
const delay = argv.d || argv.delay;
|
|
38
|
-
|
|
39
28
|
if (!(parseInt(delay) > 0)) {
|
|
40
29
|
console.error("Invalid argument - 'delay' should be a non-negative number.");
|
|
41
30
|
printUsage();
|
|
42
31
|
process.exit(1);
|
|
43
32
|
}
|
|
44
33
|
}
|
|
45
|
-
|
|
46
34
|
const targetFile = cliutil.processTargetPath(argv._[0], argv.cwd);
|
|
47
|
-
|
|
48
35
|
if (targetFile == null) {
|
|
49
36
|
printUsage();
|
|
50
37
|
process.exit(1);
|
|
51
38
|
}
|
|
52
|
-
|
|
53
39
|
const config = cliutil.getConfigurations(targetFile, argv);
|
|
54
40
|
cliutil.generateTestOptions(config, argv).then(options => {
|
|
55
41
|
prepareAndStartTheTest(options).then(code => {
|
|
@@ -63,20 +49,15 @@ cliutil.generateTestOptions(config, argv).then(options => {
|
|
|
63
49
|
console.error('Test failed on generate state: ', e);
|
|
64
50
|
process.exit(1);
|
|
65
51
|
});
|
|
66
|
-
|
|
67
52
|
async function prepareAndStartTheTest(options) {
|
|
68
53
|
if (options.framework === 'oxygen' && (!options.suites || !Array.isArray(options.suites))) {
|
|
69
54
|
throw new Error('Cannot start the test - no suites are specified.');
|
|
70
55
|
}
|
|
71
|
-
|
|
72
56
|
let capsArr = options.capabilities || [{}];
|
|
73
|
-
|
|
74
57
|
if (!(capsArr instanceof Array)) {
|
|
75
58
|
capsArr = [capsArr];
|
|
76
59
|
}
|
|
77
|
-
|
|
78
60
|
let exitCode = 0;
|
|
79
|
-
|
|
80
61
|
try {
|
|
81
62
|
const reporter = new _ReportAggregator.default(options);
|
|
82
63
|
const launcher = new _launcher.default(options, reporter);
|
|
@@ -89,14 +70,11 @@ async function prepareAndStartTheTest(options) {
|
|
|
89
70
|
console.trace();
|
|
90
71
|
process.exit(1);
|
|
91
72
|
}
|
|
92
|
-
|
|
93
73
|
return exitCode;
|
|
94
74
|
}
|
|
95
|
-
|
|
96
75
|
function handleSigInt() {
|
|
97
76
|
setTimeout(() => process.exit(0), 2000);
|
|
98
77
|
}
|
|
99
|
-
|
|
100
78
|
function printUsage() {
|
|
101
79
|
console.log(`Usage: oxygen [OPTIONS]... FILE
|
|
102
80
|
|
|
@@ -132,4 +110,4 @@ Web test options:
|
|
|
132
110
|
Mobile test options:
|
|
133
111
|
-s, --server=SERVER_URL Appium server URL. Default is http://localhost:4723/wd/hub.`);
|
|
134
112
|
}
|
|
135
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY2xpLmpzIl0sIm5hbWVzIjpbInByb2Nlc3MiLCJvbiIsImhhbmRsZVNpZ0ludCIsImVycm9yIiwiY29uc29sZSIsImFyZ3YiLCJyZXF1aXJlIiwic2xpY2UiLCJ2IiwidmVyc2lvbiIsImxvZyIsImV4aXQiLCJfIiwiaGVscCIsInByaW50VXNhZ2UiLCJkIiwiZGVsYXkiLCJwYXJzZUludCIsInRhcmdldEZpbGUiLCJjbGl1dGlsIiwicHJvY2Vzc1RhcmdldFBhdGgiLCJjd2QiLCJjb25maWciLCJnZXRDb25maWd1cmF0aW9ucyIsImdlbmVyYXRlVGVzdE9wdGlvbnMiLCJ0aGVuIiwib3B0aW9ucyIsInByZXBhcmVBbmRTdGFydFRoZVRlc3QiLCJjb2RlIiwiZSIsImZyYW1ld29yayIsInN1aXRlcyIsIkFycmF5IiwiaXNBcnJheSIsIkVycm9yIiwiY2Fwc0FyciIsImNhcGFiaWxpdGllcyIsImV4aXRDb2RlIiwicmVwb3J0ZXIiLCJSZXBvcnRBZ2dyZWdhdG9yIiwibGF1bmNoZXIiLCJMYXVuY2hlciIsInJ1biIsImdlbmVyYXRlUmVwb3J0cyIsImdldEV4aXRDb2RlIiwidHJhY2UiLCJzZXRUaW1lb3V0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7QUFTQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7QUFFQUEsT0FBTyxDQUFDQyxFQUFSLENBQVcsUUFBWCxFQUFxQkMsWUFBckI7QUFDQUYsT0FBTyxDQUFDQyxFQUFSLENBQVcsbUJBQVgsRUFBZ0NFLEtBQUssSUFBSTtBQUNyQ0MsRUFBQUEsT0FBTyxDQUFDRCxLQUFSLENBQWMsbUJBQWQsRUFBbUNBLEtBQW5DO0FBQ0gsQ0FGRDtBQUlBSCxPQUFPLENBQUNDLEVBQVIsQ0FBVyxvQkFBWCxFQUFpQ0UsS0FBSyxJQUFJO0FBQ3RDQyxFQUFBQSxPQUFPLENBQUNELEtBQVIsQ0FBYyxvQkFBZCxFQUFvQ0EsS0FBcEM7QUFDSCxDQUZEOztBQUtBLE1BQU1FLElBQUksR0FBR0MsT0FBTyxDQUFD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QUNIOztBQUNELE1BQUlFLFFBQVEsR0FBRyxDQUFmOztBQUVBLE1BQUk7QUFDQSxVQUFNQyxRQUFRLEdBQUcsSUFBSUMseUJBQUosQ0FBcUJiLE9BQXJCLENBQWpCO0FBQ0EsVUFBTWMsUUFBUSxHQUFHLElBQUlDLGlCQUFKLENBQWFmLE9BQWIsRUFBc0JZLFFBQXRCLENBQWpCO0FBQ0FsQyxJQUFBQSxPQUFPLENBQUNNLEdBQVIsQ0FBWSxpQkFBWjtBQUNBLFVBQU04QixRQUFRLENBQUNFLEdBQVQsQ0FBYVAsT0FBYixDQUFOO0FBQ0FHLElBQUFBLFFBQVEsQ0FBQ0ssZUFBVDtBQUNBTixJQUFBQSxRQUFRLEdBQUdDLFFBQVEsQ0FBQ00sV0FBVCxFQUFYO0FBQ0gsR0FQRCxDQVFBLE9BQU9mLENBQVAsRUFBVTtBQUNOekIsSUFBQUEsT0FBTyxDQUFDRCxLQUFSLENBQWMsYUFBZCxFQUE2QjBCLENBQTdCO0FBQ0F6QixJQUFBQSxPQUFPLENBQUN5QyxLQUFSO0FBQ0E3QyxJQUFBQSxPQUFPLENBQUNXLElBQVIsQ0FBYSxDQUFiO0FBQ0g7O0FBQ0QsU0FBTzBCLFFBQVA7QUFDSDs7QUFFRCxTQUFTbkMsWUFBVCxHQUF3QjtBQUVwQjRDLEVBQUFBLFVBQVUsQ0FBQyxNQUFNOUMsT0FBTyxDQUFDVyxJQUFSLENBQWEsQ0FBYixDQUFQLEVBQXdCLElBQXhCLENBQVY7QUFDSDs7QUFFRCxTQUFTRyxVQUFULEdBQXNCO0FBQ2xCVixFQUFBQSxPQUFPLENBQUNNLEdBQVIsQ0FBYTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlGQWhDSTtBQWlDSCIsInNvdXJjZXNDb250ZW50IjpbIiMhIC91c3IvYmluL2VudiBub2RlXHJcbi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5pbXBvcnQgKiBhcyBjbGl1dGlsIGZyb20gJy4vY2xpLXV0aWwnO1xyXG5pbXBvcnQgTGF1bmNoZXIgZnJvbSAnLi9sYXVuY2hlcic7XHJcbmltcG9ydCBSZXBvcnRBZ2dyZWdhdG9yIGZyb20gJy4uL3JlcG9ydGVyL1JlcG9ydEFnZ3JlZ2F0b3InO1xyXG5cclxucHJvY2Vzcy5vbignU0lHSU5UJywgaGFuZGxlU2lnSW50KTtcclxucHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCBlcnJvciA9PiB7XHJcbiAgICBjb25zb2xlLmVycm9yKCd1bmNhdWdodEV4Y2VwdGlvbicsIGVycm9yKTtcclxufSk7XHJcblxyXG5wcm9jZXNzLm9uKCd1bmhhbmRsZWRSZWplY3Rpb24nLCBlcnJvciA9PiB7XHJcbiAgICBjb25zb2xlLmVycm9yKCd1bmhhbmRsZWRSZWplY3Rpb24nLCBlcnJvcik7XHJcbn0pO1xyXG5cclxuLy8gcGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50c1xyXG5jb25zdCBhcmd2ID0gcmVxdWlyZSgnbWluaW1pc3QnKShwcm9jZXNzLmFyZ3Yuc2xpY2UoMikpO1xyXG5cclxuaWYgKGFyZ3YudiB8fCBhcmd2LnZlcnNpb24pIHtcclxuICAgIGNvbnNvbGUubG9nKHJlcXVpcmUoJy4uLy4uL3BhY2thZ2UuanNvbicpLnZlcnNpb24pO1xyXG4gICAgcHJvY2Vzcy5leGl0KDApO1xyXG59IGVsc2UgaWYgKHR5cGVvZihhcmd2Ll9bMF0pID09PSAndW5kZWZpbmVkJyB8fCBhcmd2LmhlbHApIHtcclxuICAgIHByaW50VXNhZ2UoKTtcclxuICAgIHByb2Nlc3MuZXhpdCgxKTtcclxufVxyXG5cclxuaWYgKGFyZ3YuZCB8fCBhcmd2LmRlbGF5KSB7XHJcbiAgICBjb25zdCBkZWxheSA9IGFyZ3YuZCB8fCBhcmd2LmRlbGF5O1xyXG4gICAgaWYgKCEocGFyc2VJbnQoZGVsYXkpID4gMCkpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiSW52YWxpZCBhcmd1bWVudCAtICdkZWxheScgc2hvdWxkIGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci5cIik7XHJcbiAgICAgICAgcHJpbnRVc2FnZSgpO1xyXG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcclxuICAgIH1cclxufVxyXG5cclxuY29uc3QgdGFyZ2V0RmlsZSA9IGNsaXV0aWwucHJvY2Vzc1RhcmdldFBhdGgoYXJndi5fWzBdLCBhcmd2LmN3ZCk7XHJcbmlmICh0YXJnZXRGaWxlID09IG51bGwpIHtcclxuICAgIHByaW50VXNhZ2UoKTtcclxuICAgIHByb2Nlc3MuZXhpdCgxKTtcclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gY2xpdXRpbC5nZXRDb25maWd1cmF0aW9ucyh0YXJnZXRGaWxlLCBhcmd2KTtcclxuXHJcbmNsaXV0aWwuZ2VuZXJhdGVUZXN0T3B0aW9ucyhjb25maWcsIGFyZ3YpLnRoZW4oXHJcbiAgICAob3B0aW9ucykgPT4ge1xyXG4gICAgICAgIHByZXBhcmVBbmRTdGFydFRoZVRlc3Qob3B0aW9ucykudGhlbihcclxuICAgICAgICAgICAgKGNvZGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdEb25lIScpO1xyXG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5leGl0KGNvZGUpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVGVzdCBmYWlsZWQ6ICcsIGUpO1xyXG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH0sXHJcbiAgICAoZSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1Rlc3QgZmFpbGVkIG9uIGdlbmVyYXRlIHN0YXRlOiAnLCBlKTtcclxuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XHJcbiAgICB9XHJcbik7XHJcblxyXG5hc3luYyBmdW5jdGlvbiBwcmVwYXJlQW5kU3RhcnRUaGVUZXN0KG9wdGlvbnMpIHtcclxuICAgIGlmIChvcHRpb25zLmZyYW1ld29yayA9PT0gJ294eWdlbicgJiYgKCFvcHRpb25zLnN1aXRlcyB8fCAhQXJyYXkuaXNBcnJheShvcHRpb25zLnN1aXRlcykpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc3RhcnQgdGhlIHRlc3QgLSBubyBzdWl0ZXMgYXJlIHNwZWNpZmllZC4nKTtcclxuICAgIH1cclxuICAgIGxldCBjYXBzQXJyID0gb3B0aW9ucy5jYXBhYmlsaXRpZXMgfHwgW3t9XTtcclxuICAgIC8vIGNoZWNrIGlmIGNhcGFiaWxpdGllcyBvYmplY3QgaXMgYW4gYXJyYXkgb3IgYSBoYXNodGFibGVcclxuICAgIGlmICghKGNhcHNBcnIgaW5zdGFuY2VvZiBBcnJheSkpIHtcclxuICAgICAgICBjYXBzQXJyID0gW2NhcHNBcnJdO1xyXG4gICAgfVxyXG4gICAgbGV0IGV4aXRDb2RlID0gMDtcclxuICAgIC8vIHN0YXJ0IGxhdW5jaGVyXHJcbiAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHJlcG9ydGVyID0gbmV3IFJlcG9ydEFnZ3JlZ2F0b3Iob3B0aW9ucyk7XHJcbiAgICAgICAgY29uc3QgbGF1bmNoZXIgPSBuZXcgTGF1bmNoZXIob3B0aW9ucywgcmVwb3J0ZXIpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdUZXN0IHN0YXJ0ZWQuLi4nKTtcclxuICAgICAgICBhd2FpdCBsYXVuY2hlci5ydW4oY2Fwc0Fycik7XHJcbiAgICAgICAgcmVwb3J0ZXIuZ2VuZXJhdGVSZXBvcnRzKCk7XHJcbiAgICAgICAgZXhpdENvZGUgPSByZXBvcnRlci5nZXRFeGl0Q29kZSgpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdGYXRhbCBlcnJvcicsIGUpO1xyXG4gICAgICAgIGNvbnNvbGUudHJhY2UoKTtcclxuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZXhpdENvZGU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhhbmRsZVNpZ0ludCgpIHtcclxuICAgIC8vIGRlbGF5IHByb2Nlc3MgZXhpdCB0byBsZXQgT3h5Z2VuIHRvIHByb3Blcmx5IGRpc3Bvc2VcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gcHJvY2Vzcy5leGl0KDApLCAyMDAwKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcHJpbnRVc2FnZSgpIHtcclxuICAgIGNvbnNvbGUubG9nKGBVc2FnZTogb3h5Z2VuIFtPUFRJT05TXS4uLiBGSUxFXHJcblxyXG5GSUxFIC0gUGF0aCB0byBhIHRlc3Qgc2NyaXB0ICguanMpIG9yIGEgcHJvamVjdCBjb25maWd1cmF0aW9uICguanNvbikgZmlsZS5cclxuXHJcbkdlbmVyYWwgb3B0aW9uczpcclxuICAtZCwgLS1kZWxheT1TRUNPTkRTICAgICAgICBEZWxheSBiZXR3ZWVuIGVhY2ggY29tbWFuZCBpbiBzZWNvbmRzLlxyXG4gICAgICAtLXJmPXtodG1sfHBkZnx4bWx8ZXhjZWx8anVuaXR8anNvbn0gIFJlcG9ydHMgZmlsZSBmb3JtYXQuIERlZmF1bHQgaXMgaHRtbC5cclxuICAgICAgLS1ybz1QQVRIICAgICAgICAgICAgICBPdXRwdXQgcGF0aCBmb3IgcmVwb3J0IGZpbGUuIElmIHNwZWNpZmllZCwgdGhlIHJlcG9ydFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgb3ZlcndyaXRlIGFueSBwcmV2aW91cyByZXBvcnRzLlxyXG4gIC1pLCAtLWl0ZXI9Q09VTlQgICAgICAgICAgIE51bWJlciBvZiB0aW1lcyB0byBydW4gdGhlIHRlc3QuIERlZmF1bHQgaXMgMS5cclxuICAtcCwgLS1wYXJhbT1GSUxFICAgICAgICAgICBQYXJhbWV0ZXJzIGZpbGUuIElmIG5vdCBzcGVjaWZpZWQgYW4gYXR0ZW1wdCB3aWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgbWFkZSB0byBsb2FkIHBhcmFtZXRlcnMgZnJvbSBhIGZpbGUgbmFtZWQgc2FtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHRoZSB0ZXN0IHNjcmlwdCwgbG9jYXRlZCBpbiB0aGUgc2FtZSBkaXJlY3RvcnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGhhdmluZyBleHRlbnNpb24gLSB4bHN4LCB4bHMsIGNzdiwgb3IgdHh0LlxyXG4gICAgICAtLXBtPXtzZXF8cmFuZG9tfGFsbH0gIE9yZGVyIGluIHdoaWNoIHRvIHJlYWQgdGhlIHBhcmFtZXRlcnMgLSBzZXF1ZW50aWFsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbSwgYWxsLiBEZWZhdWx0IGlzIHNlcS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiAnc2VxJyBhbmQgJ3JhbmRvbScgbW9kZXMgdGVzdCB3aWxsIHJ1biBleGFjdCBudW1iZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aW1lcyBzcGVjaWZpZWQgd2l0aCB0aGUgLWkgb3B0aW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluICdhbGwnIG1vZGUsIGFsbCBhdmFpbGFibGUgcGFyYW1ldGVycyB3aWxsIGJlIHJlYWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXF1ZW50aWFsbHkuIFRoaXMgb3B0aW9uIGlzIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWkgb3B0aW9uLlxyXG4gICAgICAtLWRiZ3BvcnQ9UE9SVCAgICAgICAgIERlYnVnZ2VyIHBvcnQuXHJcbiAgICAgIC0tc3VpdGVzICAgICAgICAgICAgICAgRmlsdGVyIG91dCBzdWl0ZXMgYnkgbmFtZVxyXG4gIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgIERpc3BsYXkgdGhpcyBpbmZvcm1hdGlvbiBhbmQgZXhpdC5cclxuICAtdiwgLS12ZXJzaW9uICAgICAgICAgICAgICBEaXNwbGF5IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQuXHJcblxyXG5XZWIgdGVzdCBvcHRpb25zOlxyXG4gIC1iLCAtLWJyb3dzZXI9e2Nocm9tZXxpZXxzYWZhcml8ZmlyZWZveH0gIEJyb3dzZXIgbmFtZS4gRGVmYXVsdCBpcyBjaHJvbWUuXHJcbiAgLXMsIC0tc2VydmVyPVNFUlZFUl9VUkwgICAgU2VsZW5pdW0gaHViIFVSTC4gRGVmYXVsdCBpcyBodHRwOi8vbG9jYWxob3N0OjQ0NDQvd2QvaHViLlxyXG4gICAgICAtLXJlb3Blbj17dHJ1ZXxmYWxzZX0gIFJlb3BlbiBicm93c2VyIG9uIGVhY2ggaXRlcmF0aW9uLiBEZWZhdWx0IGlzIGZhbHNlLlxyXG4gICAgICBcclxuTW9iaWxlIHRlc3Qgb3B0aW9uczpcclxuICAgIC1zLCAtLXNlcnZlcj1TRVJWRVJfVVJMICBBcHBpdW0gc2VydmVyIFVSTC4gRGVmYXVsdCBpcyBodHRwOi8vbG9jYWxob3N0OjQ3MjMvd2QvaHViLmApO1xyXG59Il19
|
|
113
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwcm9jZXNzIiwib24iLCJoYW5kbGVTaWdJbnQiLCJlcnJvciIsImNvbnNvbGUiLCJhcmd2IiwicmVxdWlyZSIsInNsaWNlIiwidiIsInZlcnNpb24iLCJsb2ciLCJleGl0IiwiXyIsImhlbHAiLCJwcmludFVzYWdlIiwiZCIsImRlbGF5IiwicGFyc2VJbnQiLCJ0YXJnZXRGaWxlIiwiY2xpdXRpbCIsInByb2Nlc3NUYXJnZXRQYXRoIiwiY3dkIiwiY29uZmlnIiwiZ2V0Q29uZmlndXJhdGlvbnMiLCJnZW5lcmF0ZVRlc3RPcHRpb25zIiwidGhlbiIsIm9wdGlvbnMiLCJwcmVwYXJlQW5kU3RhcnRUaGVUZXN0IiwiY29kZSIsImUiLCJmcmFtZXdvcmsiLCJzdWl0ZXMiLCJBcnJheSIsImlzQXJyYXkiLCJFcnJvciIsImNhcHNBcnIiLCJjYXBhYmlsaXRpZXMiLCJleGl0Q29kZSIsInJlcG9ydGVyIiwiUmVwb3J0QWdncmVnYXRvciIsImxhdW5jaGVyIiwiTGF1bmNoZXIiLCJydW4iLCJnZW5lcmF0ZVJlcG9ydHMiLCJnZXRFeGl0Q29kZSIsInRyYWNlIiwic2V0VGltZW91dCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY2xpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIiMhIC91c3IvYmluL2VudiBub2RlXHJcbi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5pbXBvcnQgKiBhcyBjbGl1dGlsIGZyb20gJy4vY2xpLXV0aWwnO1xyXG5pbXBvcnQgTGF1bmNoZXIgZnJvbSAnLi9sYXVuY2hlcic7XHJcbmltcG9ydCBSZXBvcnRBZ2dyZWdhdG9yIGZyb20gJy4uL3JlcG9ydGVyL1JlcG9ydEFnZ3JlZ2F0b3InO1xyXG5cclxucHJvY2Vzcy5vbignU0lHSU5UJywgaGFuZGxlU2lnSW50KTtcclxucHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCBlcnJvciA9PiB7XHJcbiAgICBjb25zb2xlLmVycm9yKCd1bmNhdWdodEV4Y2VwdGlvbicsIGVycm9yKTtcclxufSk7XHJcblxyXG5wcm9jZXNzLm9uKCd1bmhhbmRsZWRSZWplY3Rpb24nLCBlcnJvciA9PiB7XHJcbiAgICBjb25zb2xlLmVycm9yKCd1bmhhbmRsZWRSZWplY3Rpb24nLCBlcnJvcik7XHJcbn0pO1xyXG5cclxuLy8gcGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50c1xyXG5jb25zdCBhcmd2ID0gcmVxdWlyZSgnbWluaW1pc3QnKShwcm9jZXNzLmFyZ3Yuc2xpY2UoMikpO1xyXG5cclxuaWYgKGFyZ3YudiB8fCBhcmd2LnZlcnNpb24pIHtcclxuICAgIGNvbnNvbGUubG9nKHJlcXVpcmUoJy4uLy4uL3BhY2thZ2UuanNvbicpLnZlcnNpb24pO1xyXG4gICAgcHJvY2Vzcy5leGl0KDApO1xyXG59IGVsc2UgaWYgKHR5cGVvZihhcmd2Ll9bMF0pID09PSAndW5kZWZpbmVkJyB8fCBhcmd2LmhlbHApIHtcclxuICAgIHByaW50VXNhZ2UoKTtcclxuICAgIHByb2Nlc3MuZXhpdCgxKTtcclxufVxyXG5cclxuaWYgKGFyZ3YuZCB8fCBhcmd2LmRlbGF5KSB7XHJcbiAgICBjb25zdCBkZWxheSA9IGFyZ3YuZCB8fCBhcmd2LmRlbGF5O1xyXG4gICAgaWYgKCEocGFyc2VJbnQoZGVsYXkpID4gMCkpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiSW52YWxpZCBhcmd1bWVudCAtICdkZWxheScgc2hvdWxkIGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci5cIik7XHJcbiAgICAgICAgcHJpbnRVc2FnZSgpO1xyXG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcclxuICAgIH1cclxufVxyXG5cclxuY29uc3QgdGFyZ2V0RmlsZSA9IGNsaXV0aWwucHJvY2Vzc1RhcmdldFBhdGgoYXJndi5fWzBdLCBhcmd2LmN3ZCk7XHJcbmlmICh0YXJnZXRGaWxlID09IG51bGwpIHtcclxuICAgIHByaW50VXNhZ2UoKTtcclxuICAgIHByb2Nlc3MuZXhpdCgxKTtcclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gY2xpdXRpbC5nZXRDb25maWd1cmF0aW9ucyh0YXJnZXRGaWxlLCBhcmd2KTtcclxuXHJcbmNsaXV0aWwuZ2VuZXJhdGVUZXN0T3B0aW9ucyhjb25maWcsIGFyZ3YpLnRoZW4oXHJcbiAgICAob3B0aW9ucykgPT4ge1xyXG4gICAgICAgIHByZXBhcmVBbmRTdGFydFRoZVRlc3Qob3B0aW9ucykudGhlbihcclxuICAgICAgICAgICAgKGNvZGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdEb25lIScpO1xyXG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5leGl0KGNvZGUpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVGVzdCBmYWlsZWQ6ICcsIGUpO1xyXG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH0sXHJcbiAgICAoZSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1Rlc3QgZmFpbGVkIG9uIGdlbmVyYXRlIHN0YXRlOiAnLCBlKTtcclxuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XHJcbiAgICB9XHJcbik7XHJcblxyXG5hc3luYyBmdW5jdGlvbiBwcmVwYXJlQW5kU3RhcnRUaGVUZXN0KG9wdGlvbnMpIHtcclxuICAgIGlmIChvcHRpb25zLmZyYW1ld29yayA9PT0gJ294eWdlbicgJiYgKCFvcHRpb25zLnN1aXRlcyB8fCAhQXJyYXkuaXNBcnJheShvcHRpb25zLnN1aXRlcykpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc3RhcnQgdGhlIHRlc3QgLSBubyBzdWl0ZXMgYXJlIHNwZWNpZmllZC4nKTtcclxuICAgIH1cclxuICAgIGxldCBjYXBzQXJyID0gb3B0aW9ucy5jYXBhYmlsaXRpZXMgfHwgW3t9XTtcclxuICAgIC8vIGNoZWNrIGlmIGNhcGFiaWxpdGllcyBvYmplY3QgaXMgYW4gYXJyYXkgb3IgYSBoYXNodGFibGVcclxuICAgIGlmICghKGNhcHNBcnIgaW5zdGFuY2VvZiBBcnJheSkpIHtcclxuICAgICAgICBjYXBzQXJyID0gW2NhcHNBcnJdO1xyXG4gICAgfVxyXG4gICAgbGV0IGV4aXRDb2RlID0gMDtcclxuICAgIC8vIHN0YXJ0IGxhdW5jaGVyXHJcbiAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHJlcG9ydGVyID0gbmV3IFJlcG9ydEFnZ3JlZ2F0b3Iob3B0aW9ucyk7XHJcbiAgICAgICAgY29uc3QgbGF1bmNoZXIgPSBuZXcgTGF1bmNoZXIob3B0aW9ucywgcmVwb3J0ZXIpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdUZXN0IHN0YXJ0ZWQuLi4nKTtcclxuICAgICAgICBhd2FpdCBsYXVuY2hlci5ydW4oY2Fwc0Fycik7XHJcbiAgICAgICAgcmVwb3J0ZXIuZ2VuZXJhdGVSZXBvcnRzKCk7XHJcbiAgICAgICAgZXhpdENvZGUgPSByZXBvcnRlci5nZXRFeGl0Q29kZSgpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdGYXRhbCBlcnJvcicsIGUpO1xyXG4gICAgICAgIGNvbnNvbGUudHJhY2UoKTtcclxuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZXhpdENvZGU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhhbmRsZVNpZ0ludCgpIHtcclxuICAgIC8vIGRlbGF5IHByb2Nlc3MgZXhpdCB0byBsZXQgT3h5Z2VuIHRvIHByb3Blcmx5IGRpc3Bvc2VcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gcHJvY2Vzcy5leGl0KDApLCAyMDAwKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcHJpbnRVc2FnZSgpIHtcclxuICAgIGNvbnNvbGUubG9nKGBVc2FnZTogb3h5Z2VuIFtPUFRJT05TXS4uLiBGSUxFXHJcblxyXG5GSUxFIC0gUGF0aCB0byBhIHRlc3Qgc2NyaXB0ICguanMpIG9yIGEgcHJvamVjdCBjb25maWd1cmF0aW9uICguanNvbikgZmlsZS5cclxuXHJcbkdlbmVyYWwgb3B0aW9uczpcclxuICAtZCwgLS1kZWxheT1TRUNPTkRTICAgICAgICBEZWxheSBiZXR3ZWVuIGVhY2ggY29tbWFuZCBpbiBzZWNvbmRzLlxyXG4gICAgICAtLXJmPXtodG1sfHBkZnx4bWx8ZXhjZWx8anVuaXR8anNvbn0gIFJlcG9ydHMgZmlsZSBmb3JtYXQuIERlZmF1bHQgaXMgaHRtbC5cclxuICAgICAgLS1ybz1QQVRIICAgICAgICAgICAgICBPdXRwdXQgcGF0aCBmb3IgcmVwb3J0IGZpbGUuIElmIHNwZWNpZmllZCwgdGhlIHJlcG9ydFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgb3ZlcndyaXRlIGFueSBwcmV2aW91cyByZXBvcnRzLlxyXG4gIC1pLCAtLWl0ZXI9Q09VTlQgICAgICAgICAgIE51bWJlciBvZiB0aW1lcyB0byBydW4gdGhlIHRlc3QuIERlZmF1bHQgaXMgMS5cclxuICAtcCwgLS1wYXJhbT1GSUxFICAgICAgICAgICBQYXJhbWV0ZXJzIGZpbGUuIElmIG5vdCBzcGVjaWZpZWQgYW4gYXR0ZW1wdCB3aWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgbWFkZSB0byBsb2FkIHBhcmFtZXRlcnMgZnJvbSBhIGZpbGUgbmFtZWQgc2FtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHRoZSB0ZXN0IHNjcmlwdCwgbG9jYXRlZCBpbiB0aGUgc2FtZSBkaXJlY3RvcnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGhhdmluZyBleHRlbnNpb24gLSB4bHN4LCB4bHMsIGNzdiwgb3IgdHh0LlxyXG4gICAgICAtLXBtPXtzZXF8cmFuZG9tfGFsbH0gIE9yZGVyIGluIHdoaWNoIHRvIHJlYWQgdGhlIHBhcmFtZXRlcnMgLSBzZXF1ZW50aWFsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbSwgYWxsLiBEZWZhdWx0IGlzIHNlcS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiAnc2VxJyBhbmQgJ3JhbmRvbScgbW9kZXMgdGVzdCB3aWxsIHJ1biBleGFjdCBudW1iZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aW1lcyBzcGVjaWZpZWQgd2l0aCB0aGUgLWkgb3B0aW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluICdhbGwnIG1vZGUsIGFsbCBhdmFpbGFibGUgcGFyYW1ldGVycyB3aWxsIGJlIHJlYWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXF1ZW50aWFsbHkuIFRoaXMgb3B0aW9uIGlzIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWkgb3B0aW9uLlxyXG4gICAgICAtLWRiZ3BvcnQ9UE9SVCAgICAgICAgIERlYnVnZ2VyIHBvcnQuXHJcbiAgICAgIC0tc3VpdGVzICAgICAgICAgICAgICAgRmlsdGVyIG91dCBzdWl0ZXMgYnkgbmFtZVxyXG4gIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgIERpc3BsYXkgdGhpcyBpbmZvcm1hdGlvbiBhbmQgZXhpdC5cclxuICAtdiwgLS12ZXJzaW9uICAgICAgICAgICAgICBEaXNwbGF5IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQuXHJcblxyXG5XZWIgdGVzdCBvcHRpb25zOlxyXG4gIC1iLCAtLWJyb3dzZXI9e2Nocm9tZXxpZXxzYWZhcml8ZmlyZWZveH0gIEJyb3dzZXIgbmFtZS4gRGVmYXVsdCBpcyBjaHJvbWUuXHJcbiAgLXMsIC0tc2VydmVyPVNFUlZFUl9VUkwgICAgU2VsZW5pdW0gaHViIFVSTC4gRGVmYXVsdCBpcyBodHRwOi8vbG9jYWxob3N0OjQ0NDQvd2QvaHViLlxyXG4gICAgICAtLXJlb3Blbj17dHJ1ZXxmYWxzZX0gIFJlb3BlbiBicm93c2VyIG9uIGVhY2ggaXRlcmF0aW9uLiBEZWZhdWx0IGlzIGZhbHNlLlxyXG4gICAgICBcclxuTW9iaWxlIHRlc3Qgb3B0aW9uczpcclxuICAgIC1zLCAtLXNlcnZlcj1TRVJWRVJfVVJMICBBcHBpdW0gc2VydmVyIFVSTC4gRGVmYXVsdCBpcyBodHRwOi8vbG9jYWxob3N0OjQ3MjMvd2QvaHViLmApO1xyXG59Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFvQjs7QUFBQTtBQVNwQjtBQUNBO0FBQ0E7QUFBNEQ7QUFBQTtBQUFBO0FBRTVEQSxPQUFPLENBQUNDLEVBQUUsQ0FBQyxRQUFRLEVBQUVDLFlBQVksQ0FBQztBQUNsQ0YsT0FBTyxDQUFDQyxFQUFFLENBQUMsbUJBQW1CLEVBQUVFLEtBQUssSUFBSTtFQUNyQ0MsT0FBTyxDQUFDRCxLQUFLLENBQUMsbUJBQW1CLEVBQUVBLEtBQUssQ0FBQztBQUM3QyxDQUFDLENBQUM7QUFFRkgsT0FBTyxDQUFDQyxFQUFFLENBQUMsb0JBQW9CLEVBQUVFLEtBQUssSUFBSTtFQUN0Q0MsT0FBTyxDQUFDRCxLQUFLLENBQUMsb0JBQW9CLEVBQUVBLEtBQUssQ0FBQztBQUM5QyxDQUFDLENBQUM7QUFHRixNQUFNRSxJQUFJLEdBQUdDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQ04sT0FBTyxDQUFDSyxJQUFJLENBQUNFLEtBQUssQ0FBQyxDQUFD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
|