oxygen-cli 1.41.0 → 1.42.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/CHANGELOG.md +8 -0
- package/build/core/OxygenCore.js +41 -274
- package/build/core/OxygenEvents.js +2 -12
- package/build/core/OxygenModule.js +1 -16
- package/build/core/OxygenService.js +1 -12
- package/build/core/OxygenSubModule.js +1 -10
- package/build/core/WebDriverModule.js +2 -32
- package/build/core/utils.js +2 -21
- package/build/errors/HookError.js +2 -8
- package/build/errors/ModuleError.js +2 -8
- package/build/errors/ModuleUnavailableError.js +1 -3
- package/build/errors/OxygenError.js +3 -36
- package/build/errors/ScriptNotFound.js +2 -8
- package/build/errors/helper.js +50 -82
- package/build/index.js +8 -22
- package/build/lib/cli-util.js +35 -105
- package/build/lib/cli.js +3 -30
- package/build/lib/debugger.js +2 -145
- package/build/lib/img-merge.js +2 -16
- package/build/lib/launcher.js +3 -31
- package/build/lib/moduleRequire.js +1 -4
- package/build/lib/parallel-launcher.js +44 -84
- package/build/lib/param-manager.js +2 -29
- 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/text-to-image.js +5 -26
- package/build/lib/util.js +4 -75
- 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 +20 -41
- package/build/ox_modules/module-assert.js +9 -28
- package/build/ox_modules/module-date.js +3 -8
- package/build/ox_modules/module-db.js +8 -29
- package/build/ox_modules/module-email.js +14 -45
- package/build/ox_modules/module-eyes.js +6 -47
- package/build/ox_modules/module-http/ntlm-util.js +3 -7
- package/build/ox_modules/module-http/ntlm.js +9 -78
- package/build/ox_modules/module-http.js +69 -172
- package/build/ox_modules/module-log.js +10 -23
- package/build/ox_modules/module-mailinator.js +11 -33
- package/build/ox_modules/module-mob/commands/alertAccept.js +1 -3
- package/build/ox_modules/module-mob/commands/alertDismiss.js +1 -3
- package/build/ox_modules/module-mob/commands/assertAlert.js +1 -7
- package/build/ox_modules/module-mob/commands/assertText.js +1 -4
- package/build/ox_modules/module-mob/commands/assertTitle.js +1 -5
- package/build/ox_modules/module-mob/commands/assertValue.js +9 -17
- package/build/ox_modules/module-mob/commands/back.js +1 -3
- package/build/ox_modules/module-mob/commands/clear.js +1 -5
- package/build/ox_modules/module-mob/commands/click.js +3 -5
- package/build/ox_modules/module-mob/commands/clickHidden.js +3 -10
- package/build/ox_modules/module-mob/commands/clickLong.js +1 -3
- package/build/ox_modules/module-mob/commands/clickMultipleTimes.js +1 -5
- package/build/ox_modules/module-mob/commands/closeApp.js +1 -3
- package/build/ox_modules/module-mob/commands/debug.js +2 -3
- package/build/ox_modules/module-mob/commands/dragAndDrop.js +1 -3
- package/build/ox_modules/module-mob/commands/enableNetwork.js +4 -13
- package/build/ox_modules/module-mob/commands/execute.js +1 -3
- package/build/ox_modules/module-mob/commands/findElement.js +1 -4
- package/build/ox_modules/module-mob/commands/findElements.js +1 -5
- package/build/ox_modules/module-mob/commands/getAlertText.js +1 -3
- package/build/ox_modules/module-mob/commands/getAppiumLogs.js +1 -3
- package/build/ox_modules/module-mob/commands/getBrowserLogs.js +1 -11
- package/build/ox_modules/module-mob/commands/getCurrentActivity.js +1 -3
- package/build/ox_modules/module-mob/commands/getCurrentPackage.js +1 -3
- package/build/ox_modules/module-mob/commands/getDeviceLogs.js +1 -10
- package/build/ox_modules/module-mob/commands/getDeviceTime.js +1 -3
- package/build/ox_modules/module-mob/commands/getLocation.js +1 -3
- package/build/ox_modules/module-mob/commands/getSource.js +1 -3
- package/build/ox_modules/module-mob/commands/getText.js +1 -5
- package/build/ox_modules/module-mob/commands/getTitle.js +1 -3
- package/build/ox_modules/module-mob/commands/getUrl.js +1 -3
- package/build/ox_modules/module-mob/commands/getValue.js +5 -10
- package/build/ox_modules/module-mob/commands/getWindowHandles.js +1 -3
- package/build/ox_modules/module-mob/commands/hideKeyboard.js +1 -3
- package/build/ox_modules/module-mob/commands/index.js +1 -148
- package/build/ox_modules/module-mob/commands/installApp.js +1 -3
- package/build/ox_modules/module-mob/commands/isAppInstalled.js +1 -3
- package/build/ox_modules/module-mob/commands/isCheckable.js +1 -3
- package/build/ox_modules/module-mob/commands/isChecked.js +1 -3
- package/build/ox_modules/module-mob/commands/isClickable.js +1 -3
- package/build/ox_modules/module-mob/commands/isExist.js +1 -4
- package/build/ox_modules/module-mob/commands/isSelected.js +1 -3
- package/build/ox_modules/module-mob/commands/isVisible.js +1 -4
- package/build/ox_modules/module-mob/commands/isWebViewContext.js +1 -3
- package/build/ox_modules/module-mob/commands/launchApp.js +1 -3
- package/build/ox_modules/module-mob/commands/longPressKeyCode.js +1 -3
- package/build/ox_modules/module-mob/commands/open.js +1 -4
- package/build/ox_modules/module-mob/commands/pause.js +1 -3
- package/build/ox_modules/module-mob/commands/removeApp.js +1 -3
- package/build/ox_modules/module-mob/commands/resetApp.js +1 -3
- package/build/ox_modules/module-mob/commands/scrollIntoElement.js +1 -7
- package/build/ox_modules/module-mob/commands/scrollIntoView.js +1 -3
- package/build/ox_modules/module-mob/commands/select.js +1 -5
- package/build/ox_modules/module-mob/commands/selectFrame.js +1 -5
- package/build/ox_modules/module-mob/commands/selectWindow.js +5 -27
- package/build/ox_modules/module-mob/commands/sendKeys.js +6 -10
- package/build/ox_modules/module-mob/commands/setContext.js +1 -3
- package/build/ox_modules/module-mob/commands/setNativeContext.js +1 -3
- package/build/ox_modules/module-mob/commands/setTimeout.js +1 -3
- package/build/ox_modules/module-mob/commands/setWebViewContext.js +3 -7
- package/build/ox_modules/module-mob/commands/shake.js +1 -3
- package/build/ox_modules/module-mob/commands/smsClickLink.js +1 -3
- package/build/ox_modules/module-mob/commands/smsGetText.js +3 -7
- package/build/ox_modules/module-mob/commands/swipe.js +1 -3
- package/build/ox_modules/module-mob/commands/swipeElement.js +1 -3
- package/build/ox_modules/module-mob/commands/swipeScreen.js +1 -3
- package/build/ox_modules/module-mob/commands/takeScreenshot.js +1 -3
- package/build/ox_modules/module-mob/commands/tap.js +1 -3
- package/build/ox_modules/module-mob/commands/type.js +3 -8
- package/build/ox_modules/module-mob/commands/unlockPattern.js +9 -11
- package/build/ox_modules/module-mob/commands/waitForExist.js +1 -3
- package/build/ox_modules/module-mob/commands/waitForInteractable.js +1 -4
- package/build/ox_modules/module-mob/commands/waitForVisible.js +1 -3
- package/build/ox_modules/module-mob.js +74 -216
- package/build/ox_modules/module-mongo.js +14 -51
- package/build/ox_modules/module-pdf.js +24 -65
- package/build/ox_modules/module-proxy.js +9 -69
- package/build/ox_modules/module-serial.js +8 -33
- package/build/ox_modules/module-shell.js +10 -30
- package/build/ox_modules/module-soap.js +17 -52
- package/build/ox_modules/module-twilio.js +11 -54
- package/build/ox_modules/module-utils.js +22 -58
- package/build/ox_modules/module-web/commands/alertAccept.js +1 -3
- package/build/ox_modules/module-web/commands/alertDismiss.js +1 -3
- package/build/ox_modules/module-web/commands/assertAlert.js +1 -7
- package/build/ox_modules/module-web/commands/assertExist.js +1 -3
- package/build/ox_modules/module-web/commands/assertSelectedLabel.js +1 -5
- package/build/ox_modules/module-web/commands/assertSelectedValue.js +1 -4
- package/build/ox_modules/module-web/commands/assertText.js +1 -4
- package/build/ox_modules/module-web/commands/assertTextNotPresent.js +1 -7
- package/build/ox_modules/module-web/commands/assertTextPresent.js +1 -7
- package/build/ox_modules/module-web/commands/assertTitle.js +1 -4
- package/build/ox_modules/module-web/commands/assertValue.js +1 -4
- package/build/ox_modules/module-web/commands/back.js +1 -3
- package/build/ox_modules/module-web/commands/clear.js +1 -6
- package/build/ox_modules/module-web/commands/click.js +4 -15
- package/build/ox_modules/module-web/commands/clickHidden.js +2 -8
- package/build/ox_modules/module-web/commands/closeWindow.js +1 -3
- package/build/ox_modules/module-web/commands/debug.js +2 -3
- package/build/ox_modules/module-web/commands/deleteCookies.js +1 -3
- package/build/ox_modules/module-web/commands/deselect.js +1 -3
- package/build/ox_modules/module-web/commands/doubleClick.js +3 -10
- package/build/ox_modules/module-web/commands/dragAndDrop.js +1 -3
- package/build/ox_modules/module-web/commands/execute.js +1 -3
- package/build/ox_modules/module-web/commands/fileBrowse.js +4 -11
- package/build/ox_modules/module-web/commands/findElement.js +1 -4
- package/build/ox_modules/module-web/commands/findElements.js +1 -5
- package/build/ox_modules/module-web/commands/fullscreenWindow.js +1 -3
- package/build/ox_modules/module-web/commands/getAlertText.js +1 -3
- package/build/ox_modules/module-web/commands/getAttribute.js +1 -5
- package/build/ox_modules/module-web/commands/getBrowserLogs.js +1 -4
- package/build/ox_modules/module-web/commands/getCookies.js +1 -3
- package/build/ox_modules/module-web/commands/getCssValue.js +1 -5
- package/build/ox_modules/module-web/commands/getElementCount.js +1 -3
- package/build/ox_modules/module-web/commands/getHTML.js +1 -3
- package/build/ox_modules/module-web/commands/getSource.js +1 -3
- package/build/ox_modules/module-web/commands/getText.js +1 -5
- package/build/ox_modules/module-web/commands/getTitle.js +1 -3
- package/build/ox_modules/module-web/commands/getUrl.js +1 -3
- package/build/ox_modules/module-web/commands/getValue.js +1 -6
- package/build/ox_modules/module-web/commands/getWindowHandles.js +1 -3
- package/build/ox_modules/module-web/commands/getWindowSize.js +1 -3
- package/build/ox_modules/module-web/commands/getXMLPageSource.js +1 -6
- package/build/ox_modules/module-web/commands/index.js +1 -184
- package/build/ox_modules/module-web/commands/isAlertPresent.js +1 -3
- package/build/ox_modules/module-web/commands/isChecked.js +1 -3
- package/build/ox_modules/module-web/commands/isExist.js +1 -4
- package/build/ox_modules/module-web/commands/isInteractable.js +1 -3
- package/build/ox_modules/module-web/commands/isSelected.js +1 -3
- package/build/ox_modules/module-web/commands/isVisible.js +1 -4
- package/build/ox_modules/module-web/commands/makeVisible.js +2 -11
- package/build/ox_modules/module-web/commands/maximizeWindow.js +1 -3
- package/build/ox_modules/module-web/commands/minimizeWindow.js +1 -3
- package/build/ox_modules/module-web/commands/mock.js +1 -3
- package/build/ox_modules/module-web/commands/mockClearAll.js +1 -3
- package/build/ox_modules/module-web/commands/mockRestoreAll.js +1 -3
- package/build/ox_modules/module-web/commands/newWindow.js +1 -3
- package/build/ox_modules/module-web/commands/open.js +1 -5
- package/build/ox_modules/module-web/commands/pause.js +1 -3
- package/build/ox_modules/module-web/commands/point.js +1 -3
- package/build/ox_modules/module-web/commands/pointJS.js +2 -9
- package/build/ox_modules/module-web/commands/refresh.js +1 -3
- package/build/ox_modules/module-web/commands/rightClick.js +3 -9
- package/build/ox_modules/module-web/commands/rightClickActions.js +1 -3
- package/build/ox_modules/module-web/commands/scrollToElement.js +1 -3
- package/build/ox_modules/module-web/commands/select.js +1 -6
- package/build/ox_modules/module-web/commands/selectFrame.js +1 -4
- package/build/ox_modules/module-web/commands/selectWindow.js +5 -27
- package/build/ox_modules/module-web/commands/sendKeys.js +3 -7
- package/build/ox_modules/module-web/commands/setAutoWaitForAngular.js +2 -3
- package/build/ox_modules/module-web/commands/setTimeout.js +1 -3
- package/build/ox_modules/module-web/commands/setWindowSize.js +1 -3
- package/build/ox_modules/module-web/commands/takeScreenshot.js +3 -6
- package/build/ox_modules/module-web/commands/type.js +1 -6
- package/build/ox_modules/module-web/commands/verifyAlert.js +1 -7
- package/build/ox_modules/module-web/commands/verifyExist.js +2 -7
- package/build/ox_modules/module-web/commands/verifySelectedLabel.js +1 -5
- package/build/ox_modules/module-web/commands/verifySelectedValue.js +1 -4
- package/build/ox_modules/module-web/commands/verifyText.js +1 -4
- package/build/ox_modules/module-web/commands/verifyTextNotPresent.js +1 -7
- package/build/ox_modules/module-web/commands/verifyTextPresent.js +1 -7
- package/build/ox_modules/module-web/commands/verifyTitle.js +1 -4
- package/build/ox_modules/module-web/commands/verifyValue.js +1 -4
- package/build/ox_modules/module-web/commands/waitForAngular.js +11 -14
- package/build/ox_modules/module-web/commands/waitForExist.js +1 -3
- package/build/ox_modules/module-web/commands/waitForInteractable.js +1 -3
- package/build/ox_modules/module-web/commands/waitForNotExist.js +1 -9
- package/build/ox_modules/module-web/commands/waitForNotText.js +1 -4
- package/build/ox_modules/module-web/commands/waitForNotValue.js +1 -4
- package/build/ox_modules/module-web/commands/waitForText.js +1 -4
- package/build/ox_modules/module-web/commands/waitForValue.js +1 -4
- package/build/ox_modules/module-web/commands/waitForVisible.js +1 -3
- package/build/ox_modules/module-web/commands/waitForWindow.js +4 -22
- package/build/ox_modules/module-web/webdriver/ChromeWDM.js +287 -0
- package/build/ox_modules/module-web/webdriver/auto-start.js +25 -0
- package/build/ox_modules/module-web.js +112 -232
- package/build/ox_modules/module-win/commands/assertText.js +1 -4
- package/build/ox_modules/module-win/commands/assertTitle.js +1 -5
- package/build/ox_modules/module-win/commands/assertValue.js +9 -17
- package/build/ox_modules/module-win/commands/back.js +1 -3
- package/build/ox_modules/module-win/commands/clear.js +1 -5
- package/build/ox_modules/module-win/commands/click.js +1 -3
- package/build/ox_modules/module-win/commands/clickLong.js +1 -3
- package/build/ox_modules/module-win/commands/clickMultipleTimes.js +1 -5
- package/build/ox_modules/module-win/commands/findElement.js +1 -4
- package/build/ox_modules/module-win/commands/findElements.js +1 -5
- package/build/ox_modules/module-win/commands/getAppiumLogs.js +1 -3
- package/build/ox_modules/module-win/commands/getCurrentWindowHandle.js +1 -3
- package/build/ox_modules/module-win/commands/getLocation.js +1 -3
- package/build/ox_modules/module-win/commands/getSource.js +1 -3
- package/build/ox_modules/module-win/commands/getText.js +1 -5
- package/build/ox_modules/module-win/commands/getValue.js +5 -10
- package/build/ox_modules/module-win/commands/getWindowHandles.js +1 -3
- package/build/ox_modules/module-win/commands/index.js +1 -74
- package/build/ox_modules/module-win/commands/isCheckable.js +1 -3
- package/build/ox_modules/module-win/commands/isChecked.js +1 -3
- package/build/ox_modules/module-win/commands/isClickable.js +1 -3
- package/build/ox_modules/module-win/commands/isExist.js +1 -4
- package/build/ox_modules/module-win/commands/isSelected.js +1 -3
- package/build/ox_modules/module-win/commands/isVisible.js +1 -4
- package/build/ox_modules/module-win/commands/open.js +1 -3
- package/build/ox_modules/module-win/commands/pause.js +1 -3
- package/build/ox_modules/module-win/commands/rightClick.js +1 -3
- package/build/ox_modules/module-win/commands/selectWindow.js +1 -16
- package/build/ox_modules/module-win/commands/sendKeys.js +1 -5
- package/build/ox_modules/module-win/commands/setTimeout.js +1 -3
- package/build/ox_modules/module-win/commands/takeScreenshot.js +1 -3
- package/build/ox_modules/module-win/commands/tap.js +1 -3
- package/build/ox_modules/module-win/commands/type.js +1 -5
- package/build/ox_modules/module-win/commands/waitForExist.js +1 -3
- package/build/ox_modules/module-win/commands/waitForInteractable.js +1 -5
- package/build/ox_modules/module-win/commands/waitForVisible.js +1 -3
- package/build/ox_modules/module-win.js +54 -95
- package/build/ox_modules/utils.js +91 -79
- package/build/ox_reporters/reporter-excel.js +2 -59
- package/build/ox_reporters/reporter-html.js +2 -29
- package/build/ox_reporters/reporter-json.js +2 -15
- package/build/ox_reporters/reporter-junit.js +2 -25
- package/build/ox_reporters/reporter-pdf.js +2 -20
- package/build/ox_reporters/reporter-rp.js +2 -91
- package/build/ox_reporters/reporter-xml.js +2 -18
- package/build/ox_services/service-devtools/submodule-network.js +4 -86
- package/build/ox_services/service-devtools.js +2 -24
- package/build/reporter/FileReporterBase.js +6 -45
- package/build/reporter/ReportAggregator.js +7 -121
- package/build/reporter/ReporterBase.js +1 -6
- package/build/reporter/WebSocketReporter.js +1 -39
- package/build/runners/WorkerProcess.js +2 -107
- package/build/runners/cucumber/CucumberEventListener.js +4 -29
- package/build/runners/cucumber/CucumberReporter.js +2 -57
- package/build/runners/cucumber/CucumberWorker.js +3 -69
- package/build/runners/cucumber/index.js +2 -31
- package/build/runners/cucumber/worker.js +2 -19
- package/build/runners/index.js +4 -11
- package/build/runners/oxygen/OxygenWorker.js +3 -61
- package/build/runners/oxygen/index.js +18 -179
- package/build/runners/oxygen/worker.js +3 -27
- package/package.json +3 -1
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
require("source-map-support/register");
|
|
4
|
-
|
|
5
4
|
var _OxygenError = _interopRequireDefault(require("../errors/OxygenError"));
|
|
6
|
-
|
|
7
5
|
var _util = _interopRequireDefault(require("../lib/util"));
|
|
8
|
-
|
|
9
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
|
-
|
|
6
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
7
|
/*
|
|
12
8
|
* Copyright (C) 2015-present CloudBeat Limited
|
|
13
9
|
*
|
|
@@ -21,31 +17,27 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
21
17
|
* @name twilio
|
|
22
18
|
* @description Provides methods for working with Twilio service.
|
|
23
19
|
*/
|
|
20
|
+
|
|
24
21
|
module.exports = function () {
|
|
25
22
|
const utils = require('./utils');
|
|
26
|
-
|
|
27
23
|
const OxError = this.OxError = _OxygenError.default;
|
|
28
|
-
|
|
29
24
|
const errHelper = this.errHelper = require('../errors/helper');
|
|
30
|
-
|
|
31
25
|
const helpers = this.helpers = {};
|
|
32
|
-
|
|
33
26
|
var _client;
|
|
34
|
-
|
|
35
27
|
module.isInitialized = function () {
|
|
36
28
|
return _client !== undefined;
|
|
37
29
|
};
|
|
30
|
+
|
|
38
31
|
/**
|
|
39
32
|
* @summary Set Twilio authentication details.
|
|
40
33
|
* @function init
|
|
41
34
|
* @param {String} accountSid - Account SID.
|
|
42
35
|
* @param {String} authToken - Authentication token.
|
|
43
36
|
*/
|
|
44
|
-
|
|
45
|
-
|
|
46
37
|
module.init = function (accountSid, authToken) {
|
|
47
38
|
_client = require('twilio')(accountSid, authToken);
|
|
48
39
|
};
|
|
40
|
+
|
|
49
41
|
/**
|
|
50
42
|
* @summary Retrieves last SMS message.
|
|
51
43
|
* @function getLastSms
|
|
@@ -55,24 +47,18 @@ module.exports = function () {
|
|
|
55
47
|
* @param {String=} fromNumber - From number to filter message
|
|
56
48
|
* @return {String} SMS text.
|
|
57
49
|
*/
|
|
58
|
-
|
|
59
|
-
|
|
60
50
|
module.getLastSms = async function (removeOnRead, timeout, notOlderThan, fromNumber) {
|
|
61
51
|
helpers.assertArgumentBool(removeOnRead, 'removeOnRead');
|
|
62
52
|
helpers.assertArgumentNumberNonNegative(timeout, 'timeout');
|
|
63
|
-
|
|
64
53
|
if (fromNumber) {
|
|
65
54
|
helpers.assertArgumentString(fromNumber, 'fromNumber');
|
|
66
55
|
}
|
|
67
|
-
|
|
68
56
|
if (!notOlderThan) {
|
|
69
57
|
notOlderThan = 4 * 60 * 1000;
|
|
70
58
|
}
|
|
71
|
-
|
|
72
59
|
var msg;
|
|
73
60
|
var now = Date.now();
|
|
74
61
|
var earliestMessageDate = new Date(now - notOlderThan);
|
|
75
|
-
|
|
76
62
|
while (!msg && Date.now() - now < timeout) {
|
|
77
63
|
await (() => {
|
|
78
64
|
return new Promise((resolve, reject) => {
|
|
@@ -80,15 +66,14 @@ module.exports = function () {
|
|
|
80
66
|
dateSentAfter: earliestMessageDate
|
|
81
67
|
}, function (err, messages) {
|
|
82
68
|
var _msg;
|
|
83
|
-
|
|
84
69
|
if (messages && typeof messages[Symbol.iterator] === 'function') {
|
|
85
70
|
for (_msg of messages) {
|
|
86
71
|
if (_msg.direction == 'inbound') {
|
|
87
|
-
if (fromNumber && _msg.from !== fromNumber) {
|
|
72
|
+
if (fromNumber && _msg.from !== fromNumber) {
|
|
73
|
+
// ignore
|
|
88
74
|
} else {
|
|
89
|
-
var _msgDate = Date.parse(_msg.dateCreated);
|
|
90
|
-
|
|
91
|
-
|
|
75
|
+
var _msgDate = Date.parse(_msg.dateCreated);
|
|
76
|
+
// if message is newer than the previous one - save it
|
|
92
77
|
if (msg && Date.parse(msg.dateCreated) < _msgDate) {
|
|
93
78
|
msg = _msg;
|
|
94
79
|
} else if (!msg) {
|
|
@@ -98,18 +83,15 @@ module.exports = function () {
|
|
|
98
83
|
}
|
|
99
84
|
}
|
|
100
85
|
}
|
|
101
|
-
|
|
102
86
|
resolve();
|
|
103
87
|
});
|
|
104
88
|
});
|
|
105
89
|
})();
|
|
106
90
|
await _util.default.sleep(800);
|
|
107
91
|
}
|
|
108
|
-
|
|
109
92
|
if (!msg) {
|
|
110
93
|
throw new OxError(errHelper.errorCode.TWILIO_ERROR, "Couldn't get the SMS within " + timeout + 'ms.');
|
|
111
94
|
}
|
|
112
|
-
|
|
113
95
|
if (removeOnRead) {
|
|
114
96
|
await (() => {
|
|
115
97
|
return new Promise((resolve, reject) => {
|
|
@@ -119,9 +101,9 @@ module.exports = function () {
|
|
|
119
101
|
});
|
|
120
102
|
})();
|
|
121
103
|
}
|
|
122
|
-
|
|
123
104
|
return msg.body;
|
|
124
105
|
};
|
|
106
|
+
|
|
125
107
|
/**
|
|
126
108
|
* @summary Retrieves last SMS message sent from API.
|
|
127
109
|
* @function getLastSentApiSms
|
|
@@ -130,20 +112,15 @@ module.exports = function () {
|
|
|
130
112
|
* @param {Number=} notOlderThan - Retrieve message only if it arrived not before the given time (in ms). Default is 4 minutes.
|
|
131
113
|
* @return {String} SMS text.
|
|
132
114
|
*/
|
|
133
|
-
|
|
134
|
-
|
|
135
115
|
module.getLastSentApiSms = async function (removeOnRead, timeout, notOlderThan) {
|
|
136
116
|
helpers.assertArgumentBool(removeOnRead, 'removeOnRead');
|
|
137
117
|
helpers.assertArgumentNumberNonNegative(timeout, 'timeout');
|
|
138
|
-
|
|
139
118
|
if (!notOlderThan) {
|
|
140
119
|
notOlderThan = 4 * 60 * 1000;
|
|
141
120
|
}
|
|
142
|
-
|
|
143
121
|
var msg;
|
|
144
122
|
var now = Date.now();
|
|
145
123
|
var earliestMessageDate = new Date(now - notOlderThan);
|
|
146
|
-
|
|
147
124
|
while (!msg && Date.now() - now < timeout) {
|
|
148
125
|
await (() => {
|
|
149
126
|
return new Promise((resolve, reject) => {
|
|
@@ -151,13 +128,11 @@ module.exports = function () {
|
|
|
151
128
|
dateSentAfter: earliestMessageDate
|
|
152
129
|
}, function (err, messages) {
|
|
153
130
|
var _msg;
|
|
154
|
-
|
|
155
131
|
if (messages && typeof messages[Symbol.iterator] === 'function') {
|
|
156
132
|
for (_msg of messages) {
|
|
157
133
|
if (_msg.direction == 'outbound-api') {
|
|
158
134
|
var _msgDate = Date.parse(_msg.dateCreated); // if message is newer than the previous one - save it
|
|
159
135
|
|
|
160
|
-
|
|
161
136
|
if (msg && Date.parse(msg.dateCreated) < _msgDate) {
|
|
162
137
|
msg = _msg;
|
|
163
138
|
} else if (!msg) {
|
|
@@ -166,18 +141,15 @@ module.exports = function () {
|
|
|
166
141
|
}
|
|
167
142
|
}
|
|
168
143
|
}
|
|
169
|
-
|
|
170
144
|
resolve();
|
|
171
145
|
});
|
|
172
146
|
});
|
|
173
147
|
})();
|
|
174
148
|
await _util.default.sleep(800);
|
|
175
149
|
}
|
|
176
|
-
|
|
177
150
|
if (!msg) {
|
|
178
151
|
throw new OxError(errHelper.errorCode.TWILIO_ERROR, "Couldn't get the SMS within " + timeout + 'ms.');
|
|
179
152
|
}
|
|
180
|
-
|
|
181
153
|
if (removeOnRead) {
|
|
182
154
|
await (() => {
|
|
183
155
|
return new Promise((resolve, reject) => {
|
|
@@ -187,9 +159,9 @@ module.exports = function () {
|
|
|
187
159
|
});
|
|
188
160
|
})();
|
|
189
161
|
}
|
|
190
|
-
|
|
191
162
|
return msg.body;
|
|
192
163
|
};
|
|
164
|
+
|
|
193
165
|
/**
|
|
194
166
|
* @summary Send an SMS.
|
|
195
167
|
* @function sendSms
|
|
@@ -201,8 +173,6 @@ module.exports = function () {
|
|
|
201
173
|
* twilio.init('Account Sid', 'Account Token');
|
|
202
174
|
* twilio.sendSms('+1xxxxxxxxxx', '+972xxxxxxxxx', 'Hello World!');
|
|
203
175
|
*/
|
|
204
|
-
|
|
205
|
-
|
|
206
176
|
module.sendSms = async function (from, to, message) {
|
|
207
177
|
helpers.assertArgumentNonEmptyString(from, 'from');
|
|
208
178
|
helpers.assertArgumentNonEmptyString(to, 'to');
|
|
@@ -223,38 +193,25 @@ module.exports = function () {
|
|
|
223
193
|
});
|
|
224
194
|
});
|
|
225
195
|
})();
|
|
226
|
-
|
|
227
196
|
if (response.message) {
|
|
228
197
|
var msg = response.message;
|
|
229
|
-
|
|
230
198
|
if (response.moreInfo) {
|
|
231
199
|
msg += ' For more info: ' + response.moreInfo;
|
|
232
200
|
} else if (response.code) {
|
|
233
201
|
msg = 'Unable to connect to Twilio: ' + msg;
|
|
234
202
|
}
|
|
235
|
-
|
|
236
203
|
throw new OxError(errHelper.errorCode.TWILIO_ERROR, msg);
|
|
237
204
|
}
|
|
238
|
-
|
|
239
205
|
return response;
|
|
240
206
|
};
|
|
241
|
-
|
|
242
207
|
helpers.assertArgument = (val, name) => utils.assertArgument.call(this, val, name);
|
|
243
|
-
|
|
244
208
|
helpers.assertArgumentNonEmptyString = (val, name) => utils.assertArgumentNonEmptyString.call(this, val, name);
|
|
245
|
-
|
|
246
209
|
helpers.assertArgumentString = (val, name) => utils.assertArgumentString.call(this, val, name);
|
|
247
|
-
|
|
248
210
|
helpers.assertArgumentNumber = (val, name) => utils.assertArgumentNumber.call(this, val, name);
|
|
249
|
-
|
|
250
211
|
helpers.assertArgumentNumberNonNegative = (val, name) => utils.assertArgumentNumberNonNegative.call(this, val, name);
|
|
251
|
-
|
|
252
212
|
helpers.assertArgumentBool = (val, name) => utils.assertArgumentBool.call(this, val, name);
|
|
253
|
-
|
|
254
213
|
helpers.assertArgumentBoolOptional = (val, name) => utils.assertArgumentBoolOptional.call(this, val, name);
|
|
255
|
-
|
|
256
214
|
helpers.assertArgumentTimeout = (val, name) => utils.assertArgumentTimeout.call(this, val, name);
|
|
257
|
-
|
|
258
215
|
return module;
|
|
259
216
|
};
|
|
260
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS10d2lsaW8uanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsInV0aWxzIiwicmVxdWlyZSIsIk94RXJyb3IiLCJPeEVycm9yQ29udHNydWN0b3IiLCJlcnJIZWxwZXIiLCJoZWxwZXJzIiwiX2NsaWVudCIsImlzSW5pdGlhbGl6ZWQiLCJ1bmRlZmluZWQiLCJpbml0IiwiYWNjb3VudFNpZCIsImF1dGhUb2tlbiIsImdldExhc3RTbXMiLCJyZW1vdmVPblJlYWQiLCJ0aW1lb3V0Iiwibm90T2xkZXJUaGFuIiwiZnJvbU51bWJlciIsImFzc2VydEFyZ3VtZW50Qm9vbCIsImFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUiLCJhc3NlcnRBcmd1bWVudFN0cmluZyIsIm1zZyIsIm5vdyIsIkRhdGUiLCJlYXJsaWVzdE1lc3NhZ2VEYXRlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJtZXNzYWdlcyIsImxpc3QiLCJkYXRlU2VudEFmdGVyIiwiZXJyIiwiX21zZyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiZGlyZWN0aW9uIiwiZnJvbSIsIl9tc2dEYXRlIiwicGFyc2UiLCJkYXRlQ3JlYXRlZCIsImxpYlV0aWxzIiwic2xlZXAiLCJlcnJvckNvZGUiLCJUV0lMSU9fRVJST1IiLCJzaWQiLCJyZW1vdmUiLCJ0aGVuIiwiYm9keSIsImdldExhc3RTZW50QXBpU21zIiwic2VuZFNtcyIsInRvIiwibWVzc2FnZSIsImFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmciLCJyZXNwb25zZSIsImNyZWF0ZSIsImNhdGNoIiwibW9yZUluZm8iLCJjb2RlIiwiYXNzZXJ0QXJndW1lbnQiLCJ2YWwiLCJuYW1lIiwiY2FsbCIsImFzc2VydEFyZ3VtZW50TnVtYmVyIiwiYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWwiLCJhc3NlcnRBcmd1bWVudFRpbWVvdXQiXSwibWFwcGluZ3MiOiI7Ozs7QUFhQTs7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R0FBRCxFQUFNQyxJQUFOLEtBQWUzRCxLQUFLLENBQUMrRCxxQkFBTixDQUE0QkgsSUFBNUIsQ0FBaUMsSUFBakMsRUFBdUNGLEdBQXZDLEVBQTRDQyxJQUE1QyxDQUEvQzs7QUFFQSxTQUFPN0QsTUFBUDtBQUNILENBbk5EIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWUgdHdpbGlvXHJcbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBtZXRob2RzIGZvciB3b3JraW5nIHdpdGggVHdpbGlvIHNlcnZpY2UuXHJcbiAqL1xyXG5pbXBvcnQgT3hFcnJvckNvbnRzcnVjdG9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbmltcG9ydCBsaWJVdGlscyBmcm9tICcuLi9saWIvdXRpbCc7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XHJcbiAgICBjb25zdCBPeEVycm9yID0gdGhpcy5PeEVycm9yID0gT3hFcnJvckNvbnRzcnVjdG9yO1xyXG4gICAgY29uc3QgZXJySGVscGVyID0gdGhpcy5lcnJIZWxwZXIgPSByZXF1aXJlKCcuLi9lcnJvcnMvaGVscGVyJyk7XHJcbiAgICBjb25zdCBoZWxwZXJzID0gdGhpcy5oZWxwZXJzID0ge307XHJcblxyXG4gICAgdmFyIF9jbGllbnQ7XHJcblxyXG4gICAgbW9kdWxlLmlzSW5pdGlhbGl6ZWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gX2NsaWVudCAhPT0gdW5kZWZpbmVkO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFNldCBUd2lsaW8gYXV0aGVudGljYXRpb24gZGV0YWlscy5cclxuICAgICAqIEBmdW5jdGlvbiBpbml0XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gYWNjb3VudFNpZCAtIEFjY291bnQgU0lELlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGF1dGhUb2tlbiAtIEF1dGhlbnRpY2F0aW9uIHRva2VuLlxyXG4gICAgICovXHJcbiAgICBtb2R1bGUuaW5pdCA9IGZ1bmN0aW9uKGFjY291bnRTaWQsIGF1dGhUb2tlbikge1xyXG4gICAgICAgIF9jbGllbnQgPSByZXF1aXJlKCd0d2lsaW8nKShhY2NvdW50U2lkLCBhdXRoVG9rZW4pO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFJldHJpZXZlcyBsYXN0IFNNUyBtZXNzYWdlLlxyXG4gICAgICogQGZ1bmN0aW9uIGdldExhc3RTbXNcclxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gcmVtb3ZlT25SZWFkIC0gU3BlY2lmaWVzIHdoZXRoZXIgdG8gZGVsZXRlIHRoZSBtZXNzYWdlIGFmdGVyIHJlYWRpbmcgaXQuXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gdGltZW91dCAtIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciB3YWl0aW5nIGZvciB0aGUgbWVzc2FnZSB0byBhcnJpdmUuXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcj19IG5vdE9sZGVyVGhhbiAtIFJldHJpZXZlIG1lc3NhZ2Ugb25seSBpZiBpdCBhcnJpdmVkIG5vdCBiZWZvcmUgdGhlIGdpdmVuIHRpbWUgKGluIG1zKS4gRGVmYXVsdCBpcyA0IG1pbnV0ZXMuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IGZyb21OdW1iZXIgLSBGcm9tIG51bWJlciB0byBmaWx0ZXIgbWVzc2FnZVxyXG4gICAgICogQHJldHVybiB7U3RyaW5nfSBTTVMgdGV4dC5cclxuICAgICAqL1xyXG4gICAgbW9kdWxlLmdldExhc3RTbXMgPSBhc3luYyBmdW5jdGlvbihyZW1vdmVPblJlYWQsIHRpbWVvdXQsIG5vdE9sZGVyVGhhbiwgZnJvbU51bWJlcikge1xyXG4gICAgICAgIGhlbHBlcnMuYXNzZXJ0QXJndW1lbnRCb29sKHJlbW92ZU9uUmVhZCwgJ3JlbW92ZU9uUmVhZCcpO1xyXG4gICAgICAgIGhlbHBlcnMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSh0aW1lb3V0LCAndGltZW91dCcpO1xyXG4gICAgICAgIGlmIChmcm9tTnVtYmVyKSB7XHJcbiAgICAgICAgICAgIGhlbHBlcnMuYXNzZXJ0QXJndW1lbnRTdHJpbmcoZnJvbU51bWJlciwgJ2Zyb21OdW1iZXInKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghbm90T2xkZXJUaGFuKSB7XHJcbiAgICAgICAgICAgIG5vdE9sZGVyVGhhbiA9IDQqNjAqMTAwMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG1zZztcclxuICAgICAgICB2YXIgbm93ID0gRGF0ZS5ub3coKTtcclxuICAgICAgICB2YXIgZWFybGllc3RNZXNzYWdlRGF0ZSA9IG5ldyBEYXRlKG5vdyAtIG5vdE9sZGVyVGhhbik7XHJcbiAgICAgICAgd2hpbGUgKCFtc2cgJiYgKERhdGUubm93KCkgLSBub3cpIDwgdGltZW91dCkge1xyXG4gICAgICAgICAgICBhd2FpdCAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBfY2xpZW50Lm1lc3NhZ2VzLmxpc3QoeyBkYXRlU2VudEFmdGVyOiBlYXJsaWVzdE1lc3NhZ2VEYXRlIH0sIGZ1bmN0aW9uKGVyciwgbWVzc2FnZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9tc2c7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlcyAmJiB0eXBlb2YgbWVzc2FnZXNbU3ltYm9sLml0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChfbXNnIG9mIG1lc3NhZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9tc2cuZGlyZWN0aW9uID09ICdpbmJvdW5kJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnJvbU51bWJlciAmJiBfbXNnLmZyb20gIT09IGZyb21OdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9tc2dEYXRlID0gRGF0ZS5wYXJzZShfbXNnLmRhdGVDcmVhdGVkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIG1lc3NhZ2UgaXMgbmV3ZXIgdGhhbiB0aGUgcHJldmlvdXMgb25lIC0gc2F2ZSBpdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1zZyAmJiBEYXRlLnBhcnNlKG1zZy5kYXRlQ3JlYXRlZCkgPCBfbXNnRGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IF9tc2c7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFtc2cpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBfbXNnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KSgpO1xyXG4gICAgICAgICAgICBhd2FpdCBsaWJVdGlscy5zbGVlcCg4MDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFtc2cpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5UV0lMSU9fRVJST1IsIFwiQ291bGRuJ3QgZ2V0IHRoZSBTTVMgd2l0aGluIFwiICsgdGltZW91dCArICdtcy4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZW1vdmVPblJlYWQpIHtcclxuICAgICAgICAgICAgYXdhaXQgKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2NsaWVudC5tZXNzYWdlcyhtc2cuc2lkKS5yZW1vdmUoKS50aGVuKCgpID0+IHsgcmVzb2x2ZSgpOyB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG1zZy5ib2R5O1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFJldHJpZXZlcyBsYXN0IFNNUyBtZXNzYWdlIHNlbnQgZnJvbSBBUEkuXHJcbiAgICAgKiBAZnVuY3Rpb24gZ2V0TGFzdFNlbnRBcGlTbXNcclxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gcmVtb3ZlT25SZWFkIC0gU3BlY2lmaWVzIHdoZXRoZXIgdG8gZGVsZXRlIHRoZSBtZXNzYWdlIGFmdGVyIHJlYWRpbmcgaXQuXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gdGltZW91dCAtIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciB3YWl0aW5nIGZvciB0aGUgbWVzc2FnZSB0byBhcnJpdmUuXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcj19IG5vdE9sZGVyVGhhbiAtIFJldHJpZXZlIG1lc3NhZ2Ugb25seSBpZiBpdCBhcnJpdmVkIG5vdCBiZWZvcmUgdGhlIGdpdmVuIHRpbWUgKGluIG1zKS4gRGVmYXVsdCBpcyA0IG1pbnV0ZXMuXHJcbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IFNNUyB0ZXh0LlxyXG4gICAgICovXHJcbiAgICBtb2R1bGUuZ2V0TGFzdFNlbnRBcGlTbXMgPSBhc3luYyBmdW5jdGlvbiAocmVtb3ZlT25SZWFkLCB0aW1lb3V0LCBub3RPbGRlclRoYW4pIHtcclxuICAgICAgICBoZWxwZXJzLmFzc2VydEFyZ3VtZW50Qm9vbChyZW1vdmVPblJlYWQsICdyZW1vdmVPblJlYWQnKTtcclxuICAgICAgICBoZWxwZXJzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUodGltZW91dCwgJ3RpbWVvdXQnKTtcclxuXHJcbiAgICAgICAgaWYgKCFub3RPbGRlclRoYW4pIHtcclxuICAgICAgICAgICAgbm90T2xkZXJUaGFuID0gNCAqIDYwICogMTAwMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBtc2c7XHJcbiAgICAgICAgdmFyIG5vdyA9IERhdGUubm93KCk7XHJcbiAgICAgICAgdmFyIGVhcmxpZXN0TWVzc2FnZURhdGUgPSBuZXcgRGF0ZShub3cgLSBub3RPbGRlclRoYW4pO1xyXG5cclxuICAgICAgICB3aGlsZSAoIW1zZyAmJiBEYXRlLm5vdygpIC0gbm93IDwgdGltZW91dCkge1xyXG4gICAgICAgICAgICBhd2FpdCAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBfY2xpZW50Lm1lc3NhZ2VzLmxpc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlU2VudEFmdGVyOiBlYXJsaWVzdE1lc3NhZ2VEYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgbWVzc2FnZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9tc2c7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZXMgJiYgdHlwZW9mIG1lc3NhZ2VzW1N5bWJvbC5pdGVyYXRvcl0gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoX21zZyBvZiBtZXNzYWdlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfbXNnLmRpcmVjdGlvbiA9PSAnb3V0Ym91bmQtYXBpJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX21zZ0RhdGUgPSBEYXRlLnBhcnNlKF9tc2cuZGF0ZUNyZWF0ZWQpOyAvLyBpZiBtZXNzYWdlIGlzIG5ld2VyIHRoYW4gdGhlIHByZXZpb3VzIG9uZSAtIHNhdmUgaXRcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtc2cgJiYgRGF0ZS5wYXJzZShtc2cuZGF0ZUNyZWF0ZWQpIDwgX21zZ0RhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IF9tc2c7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIW1zZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gX21zZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pKCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGxpYlV0aWxzLnNsZWVwKDgwMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIW1zZykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlRXSUxJT19FUlJPUiwgXCJDb3VsZG4ndCBnZXQgdGhlIFNNUyB3aXRoaW4gXCIgKyB0aW1lb3V0ICsgJ21zLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlbW92ZU9uUmVhZCkge1xyXG4gICAgICAgICAgICBhd2FpdCAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBfY2xpZW50Lm1lc3NhZ2VzKG1zZy5zaWQpLnJlbW92ZSgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSkoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBtc2cuYm9keTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBTZW5kIGFuIFNNUy5cclxuICAgICAqIEBmdW5jdGlvbiBzZW5kU21zXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZnJvbSAtIFBob25lIG51bWJlciB0byBzZW5kIGZyb20uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdG8gLSBQaG9uZSBudW1iZXIgdG8gc2VuZCB0by5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIC0gTWVzc2FnZSB0byBzZW5kLlxyXG4gICAgICogQHJldHVybiB7U3RyaW5nfSBNZXNzYWdlIFNJRC5cclxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPltqYXZhc2NyaXB0XSBVc2FnZSBleGFtcGxlPC9jYXB0aW9uPlxyXG4gICAgICogdHdpbGlvLmluaXQoJ0FjY291bnQgU2lkJywgJ0FjY291bnQgVG9rZW4nKTtcclxuICAgICAqIHR3aWxpby5zZW5kU21zKCcrMXh4eHh4eHh4eHgnLCAnKzk3Mnh4eHh4eHh4eCcsICdIZWxsbyBXb3JsZCEnKTtcclxuICAgICAqL1xyXG4gICAgbW9kdWxlLnNlbmRTbXMgPSBhc3luYyBmdW5jdGlvbihmcm9tLCB0bywgbWVzc2FnZSkge1xyXG4gICAgICAgIGhlbHBlcnMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyhmcm9tLCAnZnJvbScpO1xyXG4gICAgICAgIGhlbHBlcnMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyh0bywgJ3RvJyk7XHJcbiAgICAgICAgaGVscGVycy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nKG1lc3NhZ2UsICdtZXNzYWdlJyk7XHJcblxyXG4gICAgICAgIHZhciByZXNwb25zZSA9IG51bGw7XHJcblxyXG4gICAgICAgIGF3YWl0ICgoKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBfY2xpZW50Lm1lc3NhZ2VzLmNyZWF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9keTogbWVzc2FnZSxcclxuICAgICAgICAgICAgICAgICAgICBmcm9tOiBmcm9tLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvOiB0b1xyXG4gICAgICAgICAgICAgICAgfSkudGhlbihtZXNzYWdlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IG1lc3NhZ2Uuc2lkO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBlcnI7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pKCk7XHJcblxyXG4gICAgICAgIGlmIChyZXNwb25zZS5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIHZhciBtc2cgPSByZXNwb25zZS5tZXNzYWdlO1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UubW9yZUluZm8pIHtcclxuICAgICAgICAgICAgICAgIG1zZyArPSAnIEZvciBtb3JlIGluZm86ICcgKyByZXNwb25zZS5tb3JlSW5mbztcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5jb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBtc2cgPSAnVW5hYmxlIHRvIGNvbm5lY3QgdG8gVHdpbGlvOiAnICsgbXNnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuVFdJTElPX0VSUk9SLCBtc2cpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgfTtcclxuXHJcbiAgICBoZWxwZXJzLmFzc2VydEFyZ3VtZW50ID0gKHZhbCwgbmFtZSkgPT4gdXRpbHMuYXNzZXJ0QXJndW1lbnQuY2FsbCh0aGlzLCB2YWwsIG5hbWUpO1xyXG4gICAgaGVscGVycy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nID0gKHZhbCwgbmFtZSkgPT4gdXRpbHMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZy5jYWxsKHRoaXMsIHZhbCwgbmFtZSk7XHJcbiAgICBoZWxwZXJzLmFzc2VydEFyZ3VtZW50U3RyaW5nID0gKHZhbCwgbmFtZSkgPT4gdXRpbHMuYXNzZXJ0QXJndW1lbnRTdHJpbmcuY2FsbCh0aGlzLCB2YWwsIG5hbWUpO1xyXG4gICAgaGVscGVycy5hc3NlcnRBcmd1bWVudE51bWJlciA9ICh2YWwsIG5hbWUpID0+IHV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyLmNhbGwodGhpcywgdmFsLCBuYW1lKTtcclxuICAgIGhlbHBlcnMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSA9ICh2YWwsIG5hbWUpID0+IHV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUuY2FsbCh0aGlzLCB2YWwsIG5hbWUpO1xyXG4gICAgaGVscGVycy5hc3NlcnRBcmd1bWVudEJvb2wgPSAodmFsLCBuYW1lKSA9PiB1dGlscy5hc3NlcnRBcmd1bWVudEJvb2wuY2FsbCh0aGlzLCB2YWwsIG5hbWUpO1xyXG4gICAgaGVscGVycy5hc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbCA9ICh2YWwsIG5hbWUpID0+IHV0aWxzLmFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsLmNhbGwodGhpcywgdmFsLCBuYW1lKTtcclxuICAgIGhlbHBlcnMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0ID0gKHZhbCwgbmFtZSkgPT4gdXRpbHMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0LmNhbGwodGhpcywgdmFsLCBuYW1lKTtcclxuXHJcbiAgICByZXR1cm4gbW9kdWxlO1xyXG59O1xyXG4iXX0=
|
|
217
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfT3h5Z2VuRXJyb3IiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl91dGlsIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwibW9kdWxlIiwiZXhwb3J0cyIsInV0aWxzIiwiT3hFcnJvciIsIk94RXJyb3JDb250c3J1Y3RvciIsImVyckhlbHBlciIsImhlbHBlcnMiLCJfY2xpZW50IiwiaXNJbml0aWFsaXplZCIsInVuZGVmaW5lZCIsImluaXQiLCJhY2NvdW50U2lkIiwiYXV0aFRva2VuIiwiZ2V0TGFzdFNtcyIsInJlbW92ZU9uUmVhZCIsInRpbWVvdXQiLCJub3RPbGRlclRoYW4iLCJmcm9tTnVtYmVyIiwiYXNzZXJ0QXJndW1lbnRCb29sIiwiYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSIsImFzc2VydEFyZ3VtZW50U3RyaW5nIiwibXNnIiwibm93IiwiRGF0ZSIsImVhcmxpZXN0TWVzc2FnZURhdGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIm1lc3NhZ2VzIiwibGlzdCIsImRhdGVTZW50QWZ0ZXIiLCJlcnIiLCJfbXNnIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJkaXJlY3Rpb24iLCJmcm9tIiwiX21zZ0RhdGUiLCJwYXJzZSIsImRhdGVDcmVhdGVkIiwibGliVXRpbHMiLCJzbGVlcCIsImVycm9yQ29kZSIsIlRXSUxJT19FUlJPUiIsInNpZCIsInJlbW92ZSIsInRoZW4iLCJib2R5IiwiZ2V0TGFzdFNlbnRBcGlTbXMiLCJzZW5kU21zIiwidG8iLCJtZXNzYWdlIiwiYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyIsInJlc3BvbnNlIiwiY3JlYXRlIiwiY2F0Y2giLCJtb3JlSW5mbyIsImNvZGUiLCJhc3NlcnRBcmd1bWVudCIsInZhbCIsIm5hbWUiLCJjYWxsIiwiYXNzZXJ0QXJndW1lbnROdW1iZXIiLCJhc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbCIsImFzc2VydEFyZ3VtZW50VGltZW91dCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS10d2lsaW8uanMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWUgdHdpbGlvXHJcbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBtZXRob2RzIGZvciB3b3JraW5nIHdpdGggVHdpbGlvIHNlcnZpY2UuXHJcbiAqL1xyXG5pbXBvcnQgT3hFcnJvckNvbnRzcnVjdG9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbmltcG9ydCBsaWJVdGlscyBmcm9tICcuLi9saWIvdXRpbCc7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XHJcbiAgICBjb25zdCBPeEVycm9yID0gdGhpcy5PeEVycm9yID0gT3hFcnJvckNvbnRzcnVjdG9yO1xyXG4gICAgY29uc3QgZXJySGVscGVyID0gdGhpcy5lcnJIZWxwZXIgPSByZXF1aXJlKCcuLi9lcnJvcnMvaGVscGVyJyk7XHJcbiAgICBjb25zdCBoZWxwZXJzID0gdGhpcy5oZWxwZXJzID0ge307XHJcblxyXG4gICAgdmFyIF9jbGllbnQ7XHJcblxyXG4gICAgbW9kdWxlLmlzSW5pdGlhbGl6ZWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gX2NsaWVudCAhPT0gdW5kZWZpbmVkO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFNldCBUd2lsaW8gYXV0aGVudGljYXRpb24gZGV0YWlscy5cclxuICAgICAqIEBmdW5jdGlvbiBpbml0XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gYWNjb3VudFNpZCAtIEFjY291bnQgU0lELlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGF1dGhUb2tlbiAtIEF1dGhlbnRpY2F0aW9uIHRva2VuLlxyXG4gICAgICovXHJcbiAgICBtb2R1bGUuaW5pdCA9IGZ1bmN0aW9uKGFjY291bnRTaWQsIGF1dGhUb2tlbikge1xyXG4gICAgICAgIF9jbGllbnQgPSByZXF1aXJlKCd0d2lsaW8nKShhY2NvdW50U2lkLCBhdXRoVG9rZW4pO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFJldHJpZXZlcyBsYXN0IFNNUyBtZXNzYWdlLlxyXG4gICAgICogQGZ1bmN0aW9uIGdldExhc3RTbXNcclxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gcmVtb3ZlT25SZWFkIC0gU3BlY2lmaWVzIHdoZXRoZXIgdG8gZGVsZXRlIHRoZSBtZXNzYWdlIGFmdGVyIHJlYWRpbmcgaXQuXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gdGltZW91dCAtIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciB3YWl0aW5nIGZvciB0aGUgbWVzc2FnZSB0byBhcnJpdmUuXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcj19IG5vdE9sZGVyVGhhbiAtIFJldHJpZXZlIG1lc3NhZ2Ugb25seSBpZiBpdCBhcnJpdmVkIG5vdCBiZWZvcmUgdGhlIGdpdmVuIHRpbWUgKGluIG1zKS4gRGVmYXVsdCBpcyA0IG1pbnV0ZXMuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IGZyb21OdW1iZXIgLSBGcm9tIG51bWJlciB0byBmaWx0ZXIgbWVzc2FnZVxyXG4gICAgICogQHJldHVybiB7U3RyaW5nfSBTTVMgdGV4dC5cclxuICAgICAqL1xyXG4gICAgbW9kdWxlLmdldExhc3RTbXMgPSBhc3luYyBmdW5jdGlvbihyZW1vdmVPblJlYWQsIHRpbWVvdXQsIG5vdE9sZGVyVGhhbiwgZnJvbU51bWJlcikge1xyXG4gICAgICAgIGhlbHBlcnMuYXNzZXJ0QXJndW1lbnRCb29sKHJlbW92ZU9uUmVhZCwgJ3JlbW92ZU9uUmVhZCcpO1xyXG4gICAgICAgIGhlbHBlcnMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSh0aW1lb3V0LCAndGltZW91dCcpO1xyXG4gICAgICAgIGlmIChmcm9tTnVtYmVyKSB7XHJcbiAgICAgICAgICAgIGhlbHBlcnMuYXNzZXJ0QXJndW1lbnRTdHJpbmcoZnJvbU51bWJlciwgJ2Zyb21OdW1iZXInKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghbm90T2xkZXJUaGFuKSB7XHJcbiAgICAgICAgICAgIG5vdE9sZGVyVGhhbiA9IDQqNjAqMTAwMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG1zZztcclxuICAgICAgICB2YXIgbm93ID0gRGF0ZS5ub3coKTtcclxuICAgICAgICB2YXIgZWFybGllc3RNZXNzYWdlRGF0ZSA9IG5ldyBEYXRlKG5vdyAtIG5vdE9sZGVyVGhhbik7XHJcbiAgICAgICAgd2hpbGUgKCFtc2cgJiYgKERhdGUubm93KCkgLSBub3cpIDwgdGltZW91dCkge1xyXG4gICAgICAgICAgICBhd2FpdCAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBfY2xpZW50Lm1lc3NhZ2VzLmxpc3QoeyBkYXRlU2VudEFmdGVyOiBlYXJsaWVzdE1lc3NhZ2VEYXRlIH0sIGZ1bmN0aW9uKGVyciwgbWVzc2FnZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9tc2c7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlcyAmJiB0eXBlb2YgbWVzc2FnZXNbU3ltYm9sLml0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChfbXNnIG9mIG1lc3NhZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9tc2cuZGlyZWN0aW9uID09ICdpbmJvdW5kJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnJvbU51bWJlciAmJiBfbXNnLmZyb20gIT09IGZyb21OdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9tc2dEYXRlID0gRGF0ZS5wYXJzZShfbXNnLmRhdGVDcmVhdGVkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIG1lc3NhZ2UgaXMgbmV3ZXIgdGhhbiB0aGUgcHJldmlvdXMgb25lIC0gc2F2ZSBpdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1zZyAmJiBEYXRlLnBhcnNlKG1zZy5kYXRlQ3JlYXRlZCkgPCBfbXNnRGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IF9tc2c7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFtc2cpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBfbXNnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KSgpO1xyXG4gICAgICAgICAgICBhd2FpdCBsaWJVdGlscy5zbGVlcCg4MDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFtc2cpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5UV0lMSU9fRVJST1IsIFwiQ291bGRuJ3QgZ2V0IHRoZSBTTVMgd2l0aGluIFwiICsgdGltZW91dCArICdtcy4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZW1vdmVPblJlYWQpIHtcclxuICAgICAgICAgICAgYXdhaXQgKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2NsaWVudC5tZXNzYWdlcyhtc2cuc2lkKS5yZW1vdmUoKS50aGVuKCgpID0+IHsgcmVzb2x2ZSgpOyB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG1zZy5ib2R5O1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFJldHJpZXZlcyBsYXN0IFNNUyBtZXNzYWdlIHNlbnQgZnJvbSBBUEkuXHJcbiAgICAgKiBAZnVuY3Rpb24gZ2V0TGFzdFNlbnRBcGlTbXNcclxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gcmVtb3ZlT25SZWFkIC0gU3BlY2lmaWVzIHdoZXRoZXIgdG8gZGVsZXRlIHRoZSBtZXNzYWdlIGFmdGVyIHJlYWRpbmcgaXQuXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gdGltZW91dCAtIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciB3YWl0aW5nIGZvciB0aGUgbWVzc2FnZSB0byBhcnJpdmUuXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcj19IG5vdE9sZGVyVGhhbiAtIFJldHJpZXZlIG1lc3NhZ2Ugb25seSBpZiBpdCBhcnJpdmVkIG5vdCBiZWZvcmUgdGhlIGdpdmVuIHRpbWUgKGluIG1zKS4gRGVmYXVsdCBpcyA0IG1pbnV0ZXMuXHJcbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IFNNUyB0ZXh0LlxyXG4gICAgICovXHJcbiAgICBtb2R1bGUuZ2V0TGFzdFNlbnRBcGlTbXMgPSBhc3luYyBmdW5jdGlvbiAocmVtb3ZlT25SZWFkLCB0aW1lb3V0LCBub3RPbGRlclRoYW4pIHtcclxuICAgICAgICBoZWxwZXJzLmFzc2VydEFyZ3VtZW50Qm9vbChyZW1vdmVPblJlYWQsICdyZW1vdmVPblJlYWQnKTtcclxuICAgICAgICBoZWxwZXJzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUodGltZW91dCwgJ3RpbWVvdXQnKTtcclxuXHJcbiAgICAgICAgaWYgKCFub3RPbGRlclRoYW4pIHtcclxuICAgICAgICAgICAgbm90T2xkZXJUaGFuID0gNCAqIDYwICogMTAwMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBtc2c7XHJcbiAgICAgICAgdmFyIG5vdyA9IERhdGUubm93KCk7XHJcbiAgICAgICAgdmFyIGVhcmxpZXN0TWVzc2FnZURhdGUgPSBuZXcgRGF0ZShub3cgLSBub3RPbGRlclRoYW4pO1xyXG5cclxuICAgICAgICB3aGlsZSAoIW1zZyAmJiBEYXRlLm5vdygpIC0gbm93IDwgdGltZW91dCkge1xyXG4gICAgICAgICAgICBhd2FpdCAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBfY2xpZW50Lm1lc3NhZ2VzLmxpc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlU2VudEFmdGVyOiBlYXJsaWVzdE1lc3NhZ2VEYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgbWVzc2FnZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9tc2c7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZXMgJiYgdHlwZW9mIG1lc3NhZ2VzW1N5bWJvbC5pdGVyYXRvcl0gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoX21zZyBvZiBtZXNzYWdlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfbXNnLmRpcmVjdGlvbiA9PSAnb3V0Ym91bmQtYXBpJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX21zZ0RhdGUgPSBEYXRlLnBhcnNlKF9tc2cuZGF0ZUNyZWF0ZWQpOyAvLyBpZiBtZXNzYWdlIGlzIG5ld2VyIHRoYW4gdGhlIHByZXZpb3VzIG9uZSAtIHNhdmUgaXRcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtc2cgJiYgRGF0ZS5wYXJzZShtc2cuZGF0ZUNyZWF0ZWQpIDwgX21zZ0RhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IF9tc2c7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIW1zZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gX21zZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pKCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGxpYlV0aWxzLnNsZWVwKDgwMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIW1zZykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlRXSUxJT19FUlJPUiwgXCJDb3VsZG4ndCBnZXQgdGhlIFNNUyB3aXRoaW4gXCIgKyB0aW1lb3V0ICsgJ21zLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlbW92ZU9uUmVhZCkge1xyXG4gICAgICAgICAgICBhd2FpdCAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBfY2xpZW50Lm1lc3NhZ2VzKG1zZy5zaWQpLnJlbW92ZSgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSkoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBtc2cuYm9keTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBTZW5kIGFuIFNNUy5cclxuICAgICAqIEBmdW5jdGlvbiBzZW5kU21zXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZnJvbSAtIFBob25lIG51bWJlciB0byBzZW5kIGZyb20uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdG8gLSBQaG9uZSBudW1iZXIgdG8gc2VuZCB0by5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIC0gTWVzc2FnZSB0byBzZW5kLlxyXG4gICAgICogQHJldHVybiB7U3RyaW5nfSBNZXNzYWdlIFNJRC5cclxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPltqYXZhc2NyaXB0XSBVc2FnZSBleGFtcGxlPC9jYXB0aW9uPlxyXG4gICAgICogdHdpbGlvLmluaXQoJ0FjY291bnQgU2lkJywgJ0FjY291bnQgVG9rZW4nKTtcclxuICAgICAqIHR3aWxpby5zZW5kU21zKCcrMXh4eHh4eHh4eHgnLCAnKzk3Mnh4eHh4eHh4eCcsICdIZWxsbyBXb3JsZCEnKTtcclxuICAgICAqL1xyXG4gICAgbW9kdWxlLnNlbmRTbXMgPSBhc3luYyBmdW5jdGlvbihmcm9tLCB0bywgbWVzc2FnZSkge1xyXG4gICAgICAgIGhlbHBlcnMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyhmcm9tLCAnZnJvbScpO1xyXG4gICAgICAgIGhlbHBlcnMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyh0bywgJ3RvJyk7XHJcbiAgICAgICAgaGVscGVycy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nKG1lc3NhZ2UsICdtZXNzYWdlJyk7XHJcblxyXG4gICAgICAgIHZhciByZXNwb25zZSA9IG51bGw7XHJcblxyXG4gICAgICAgIGF3YWl0ICgoKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBfY2xpZW50Lm1lc3NhZ2VzLmNyZWF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9keTogbWVzc2FnZSxcclxuICAgICAgICAgICAgICAgICAgICBmcm9tOiBmcm9tLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvOiB0b1xyXG4gICAgICAgICAgICAgICAgfSkudGhlbihtZXNzYWdlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IG1lc3NhZ2Uuc2lkO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBlcnI7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pKCk7XHJcblxyXG4gICAgICAgIGlmIChyZXNwb25zZS5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIHZhciBtc2cgPSByZXNwb25zZS5tZXNzYWdlO1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UubW9yZUluZm8pIHtcclxuICAgICAgICAgICAgICAgIG1zZyArPSAnIEZvciBtb3JlIGluZm86ICcgKyByZXNwb25zZS5tb3JlSW5mbztcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5jb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBtc2cgPSAnVW5hYmxlIHRvIGNvbm5lY3QgdG8gVHdpbGlvOiAnICsgbXNnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuVFdJTElPX0VSUk9SLCBtc2cpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgfTtcclxuXHJcbiAgICBoZWxwZXJzLmFzc2VydEFyZ3VtZW50ID0gKHZhbCwgbmFtZSkgPT4gdXRpbHMuYXNzZXJ0QXJndW1lbnQuY2FsbCh0aGlzLCB2YWwsIG5hbWUpO1xyXG4gICAgaGVscGVycy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nID0gKHZhbCwgbmFtZSkgPT4gdXRpbHMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZy5jYWxsKHRoaXMsIHZhbCwgbmFtZSk7XHJcbiAgICBoZWxwZXJzLmFzc2VydEFyZ3VtZW50U3RyaW5nID0gKHZhbCwgbmFtZSkgPT4gdXRpbHMuYXNzZXJ0QXJndW1lbnRTdHJpbmcuY2FsbCh0aGlzLCB2YWwsIG5hbWUpO1xyXG4gICAgaGVscGVycy5hc3NlcnRBcmd1bWVudE51bWJlciA9ICh2YWwsIG5hbWUpID0+IHV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyLmNhbGwodGhpcywgdmFsLCBuYW1lKTtcclxuICAgIGhlbHBlcnMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSA9ICh2YWwsIG5hbWUpID0+IHV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUuY2FsbCh0aGlzLCB2YWwsIG5hbWUpO1xyXG4gICAgaGVscGVycy5hc3NlcnRBcmd1bWVudEJvb2wgPSAodmFsLCBuYW1lKSA9PiB1dGlscy5hc3NlcnRBcmd1bWVudEJvb2wuY2FsbCh0aGlzLCB2YWwsIG5hbWUpO1xyXG4gICAgaGVscGVycy5hc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbCA9ICh2YWwsIG5hbWUpID0+IHV0aWxzLmFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsLmNhbGwodGhpcywgdmFsLCBuYW1lKTtcclxuICAgIGhlbHBlcnMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0ID0gKHZhbCwgbmFtZSkgPT4gdXRpbHMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0LmNhbGwodGhpcywgdmFsLCBuYW1lKTtcclxuXHJcbiAgICByZXR1cm4gbW9kdWxlO1xyXG59O1xyXG4iXSwibWFwcGluZ3MiOiI7OztBQWFBLElBQUFBLFlBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLEtBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUFtQyxTQUFBRCx1QkFBQUcsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQWRuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUlBRyxNQUFNLENBQUNDLE9BQU8sR0FBRyxZQUFXO0VBQ3hCLE1BQU1DLEtBQUssR0FBR1AsT0FBTyxDQUFDLFNBQVMsQ0FBQztFQUNoQyxNQUFNUSxPQUFPLEdBQUcsSUFBSSxDQUFDQSxPQUFPLEdBQUdDLG9CQUFrQjtFQUNqRCxNQUFNQyxTQUFTLEdBQUcsSUFBSSxDQUFDQSxTQUFTLEdBQUdWLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztFQUM5RCxNQUFNVyxPQUFPLEdBQUcsSUFBSSxDQUFDQSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0VBRWpDLElBQUlDLE9BQU87RUFFWFAsTUFBTSxDQUFDUSxhQUFhLEdBQUcsWUFBVztJQUM5QixPQUFPRCxPQUFPLEtBQUtFLFNBQVM7RUFDaEMsQ0FBQzs7RUFFRDtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDSVQsTUFBTSxDQUFDVSxJQUFJLEdBQUcsVUFBU0MsVUFBVSxFQUFFQyxTQUFTLEVBQUU7SUFDMUNMLE9BQU8sR0FBR1osT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDZ0IsVUFBVSxFQUFFQyxTQUFTLENBQUM7RUFDdEQsQ0FBQzs7RUFFRDtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDSVosTUFBTSxDQUFDYSxVQUFVLEdBQUcsZ0JBQWVDLFlBQVksRUFBRUMsT0FBTyxFQUFFQyxZQUFZLEVBQUVDLFVBQVUsRUFBRTtJQUNoRlgsT0FBTyxDQUFDWSxrQkFBa0IsQ0FBQ0osWUFBWSxFQUFFLGNBQWMsQ0FBQztJQUN4RFIsT0FBTyxDQUFDYSwrQkFBK0IsQ0FBQ0osT0FBTyxFQUFFLFNBQVMsQ0FBQztJQUMzRCxJQUFJRSxVQUFVLEVBQUU7TUFDWlgsT0FBTyxDQUFDYyxvQkFBb0IsQ0FBQ0gsVUFBVSxFQUFFLFlBQVksQ0FBQztJQUMxRDtJQUVBLElBQUksQ0FBQ0QsWUFBWSxFQUFFO01BQ2ZBLFlBQVksR0FBRyxDQUFDLEdBQUMsRUFBRSxHQUFDLElBQUk7SUFDNUI7SUFDQSxJQUFJSyxHQUFHO0lBQ1AsSUFBSUMsR0FBRyxHQUFHQyxJQUFJLENBQUNELEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLElBQUlFLG1CQUFtQixHQUFHLElBQUlELElBQUksQ0FBQ0QsR0FBRyxHQUFHTixZQUFZLENBQUM7SUFDdEQsT0FBTyxDQUFDSyxHQUFHLElBQUtFLElBQUksQ0FBQ0QsR0FBRyxDQUFDLENBQUMsR0FBR0EsR0FBRyxHQUFJUCxPQUFPLEVBQUU7TUFDekMsTUFBTSxDQUFDLE1BQU07UUFDVCxPQUFPLElBQUlVLE9BQU8sQ0FBQyxDQUFDQyxPQUFPLEVBQUVDLE1BQU0sS0FBSztVQUNwQ3BCLE9BQU8sQ0FBQ3FCLFFBQVEsQ0FBQ0MsSUFBSSxDQUFDO1lBQUVDLGFBQWEsRUFBRU47VUFBb0IsQ0FBQyxFQUFFLFVBQVNPLEdBQUcsRUFBRUgsUUFBUSxFQUFFO1lBQ2xGLElBQUlJLElBQUk7WUFDUixJQUFJSixRQUFRLElBQUksT0FBT0EsUUFBUSxDQUFDSyxNQUFNLENBQUNDLFFBQVEsQ0FBQyxLQUFLLFVBQVUsRUFBRTtjQUM3RCxLQUFLRixJQUFJLElBQUlKLFFBQVEsRUFBRTtnQkFDbkIsSUFBSUksSUFBSSxDQUFDRyxTQUFTLElBQUksU0FBUyxFQUFFO2tCQUM3QixJQUFJbEIsVUFBVSxJQUFJZSxJQUFJLENBQUNJLElBQUksS0FBS25CLFVBQVUsRUFBRTtvQkFDeEM7a0JBQUEsQ0FDSCxNQUFNO29CQUNILElBQUlvQixRQUFRLEdBQUdkLElBQUksQ0FBQ2UsS0FBSyxDQUFDTixJQUFJLENBQUNPLFdBQVcsQ0FBQztvQkFDM0M7b0JBQ0EsSUFBSWxCLEdBQUcsSUFBSUUsSUFBSSxDQUFDZSxLQUFLLENBQUNqQixHQUFHLENBQUNrQixXQUFXLENBQUMsR0FBR0YsUUFBUSxFQUFFO3NCQUMvQ2hCLEdBQUcsR0FBR1csSUFBSTtvQkFDZCxDQUFDLE1BQU0sSUFBSSxDQUFDWCxHQUFHLEVBQUU7c0JBQ2JBLEdBQUcsR0FBR1csSUFBSTtvQkFDZDtrQkFDSjtnQkFDSjtjQUNKO1lBQ0o7WUFDQU4sT0FBTyxDQUFDLENBQUM7VUFDYixDQUFDLENBQUM7UUFDTixDQUFDLENBQUM7TUFDTixDQUFDLEVBQUUsQ0FBQztNQUNKLE1BQU1jLGFBQVEsQ0FBQ0MsS0FBSyxDQUFDLEdBQUcsQ0FBQztJQUM3QjtJQUVBLElBQUksQ0FBQ3BCLEdBQUcsRUFBRTtNQUNOLE1BQU0sSUFBSWxCLE9BQU8sQ0FBQ0UsU0FBUyxDQUFDcUMsU0FBUyxDQUFDQyxZQUFZLEVBQUUsOEJBQThCLEdBQUc1QixPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3pHO0lBRUEsSUFBSUQsWUFBWSxFQUFFO01BQ2QsTUFBTSxDQUFDLE1BQU07UUFDVCxPQUFPLElBQUlXLE9BQU8sQ0FBQyxDQUFDQyxPQUFPLEVBQUVDLE1BQU0sS0FBSztVQUNwQ3BCLE9BQU8sQ0FBQ3FCLFFBQVEsQ0FBQ1AsR0FBRyxDQUFDdUIsR0FBRyxDQUFDLENBQUNDLE1BQU0sQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQyxNQUFNO1lBQUVwQixPQUFPLENBQUMsQ0FBQztVQUFFLENBQUMsQ0FBQztRQUNqRSxDQUFDLENBQUM7TUFDTixDQUFDLEVBQUUsQ0FBQztJQUNSO0lBRUEsT0FBT0wsR0FBRyxDQUFDMEIsSUFBSTtFQUNuQixDQUFDOztFQUVEO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDSS9DLE1BQU0sQ0FBQ2dELGlCQUFpQixHQUFHLGdCQUFnQmxDLFlBQVksRUFBRUMsT0FBTyxFQUFFQyxZQUFZLEVBQUU7SUFDNUVWLE9BQU8sQ0FBQ1ksa0JBQWtCLENBQUNKLFlBQVksRUFBRSxjQUFjLENBQUM7SUFDeERSLE9BQU8sQ0FBQ2EsK0JBQStCLENBQUNKLE9BQU8sRUFBRSxTQUFTLENBQUM7SUFFM0QsSUFBSSxDQUFDQyxZQUFZLEVBQUU7TUFDZkEsWUFBWSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSTtJQUNoQztJQUVBLElBQUlLLEdBQUc7SUFDUCxJQUFJQyxHQUFHLEdBQUdDLElBQUksQ0FBQ0QsR0FBRyxDQUFDLENBQUM7SUFDcEIsSUFBSUUsbUJBQW1CLEdBQUcsSUFBSUQsSUFBSSxDQUFDRCxHQUFHLEdBQUdOLFlBQVksQ0FBQztJQUV0RCxPQUFPLENBQUNLLEdBQUcsSUFBSUUsSUFBSSxDQUFDRCxHQUFHLENBQUMsQ0FBQyxHQUFHQSxHQUFHLEdBQUdQLE9BQU8sRUFBRTtNQUN2QyxNQUFNLENBQUMsTUFBTTtRQUNULE9BQU8sSUFBSVUsT0FBTyxDQUFDLENBQUNDLE9BQU8sRUFBRUMsTUFBTSxLQUFLO1VBQ3BDcEIsT0FBTyxDQUFDcUIsUUFBUSxDQUFDQyxJQUFJLENBQUM7WUFDbEJDLGFBQWEsRUFBRU47VUFDbkIsQ0FBQyxFQUFFLFVBQVVPLEdBQUcsRUFBRUgsUUFBUSxFQUFFO1lBQ3hCLElBQUlJLElBQUk7WUFFUixJQUFJSixRQUFRLElBQUksT0FBT0EsUUFBUSxDQUFDSyxNQUFNLENBQUNDLFFBQVEsQ0FBQyxLQUFLLFVBQVUsRUFBRTtjQUM3RCxLQUFLRixJQUFJLElBQUlKLFFBQVEsRUFBRTtnQkFDbkIsSUFBSUksSUFBSSxDQUFDRyxTQUFTLElBQUksY0FBYyxFQUFFO2tCQUNsQyxJQUFJRSxRQUFRLEdBQUdkLElBQUksQ0FBQ2UsS0FBSyxDQUFDTixJQUFJLENBQUNPLFdBQVcsQ0FBQyxDQUFDLENBQUM7O2tCQUU3QyxJQUFJbEIsR0FBRyxJQUFJRSxJQUFJLENBQUNlLEtBQUssQ0FBQ2pCLEdBQUcsQ0FBQ2tCLFdBQVcsQ0FBQyxHQUFHRixRQUFRLEVBQUU7b0JBQy9DaEIsR0FBRyxHQUFHVyxJQUFJO2tCQUNkLENBQUMsTUFBTSxJQUFJLENBQUNYLEdBQUcsRUFBRTtvQkFDYkEsR0FBRyxHQUFHVyxJQUFJO2tCQUNkO2dCQUNKO2NBQ0o7WUFDSjtZQUVBTixPQUFPLENBQUMsQ0FBQztVQUNiLENBQUMsQ0FBQztRQUNOLENBQUMsQ0FBQztNQUNOLENBQUMsRUFBRSxDQUFDO01BQ0osTUFBTWMsYUFBUSxDQUFDQyxLQUFLLENBQUMsR0FBRyxDQUFDO0lBQzdCO0lBRUEsSUFBSSxDQUFDcEIsR0FBRyxFQUFFO01BQ04sTUFBTSxJQUFJbEIsT0FBTyxDQUFDRSxTQUFTLENBQUNxQyxTQUFTLENBQUNDLFlBQVksRUFBRSw4QkFBOEIsR0FBRzVCLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDekc7SUFFQSxJQUFJRCxZQUFZLEVBQUU7TUFDZCxNQUFNLENBQUMsTUFBTTtRQUNULE9BQU8sSUFBSVcsT0FBTyxDQUFDLENBQUNDLE9BQU8sRUFBRUMsTUFBTSxLQUFLO1VBQ3BDcEIsT0FBTyxDQUFDcUIsUUFBUSxDQUFDUCxHQUFHLENBQUN1QixHQUFHLENBQUMsQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLE1BQU07WUFDMUNwQixPQUFPLENBQUMsQ0FBQztVQUNiLENBQUMsQ0FBQztRQUNOLENBQUMsQ0FBQztNQUNOLENBQUMsRUFBRSxDQUFDO0lBQ1I7SUFFQSxPQUFPTCxHQUFHLENBQUMwQixJQUFJO0VBQ25CLENBQUM7O0VBRUQ7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJL0MsTUFBTSxDQUFDaUQsT0FBTyxHQUFHLGdCQUFlYixJQUFJLEVBQUVjLEVBQUUsRUFBRUMsT0FBTyxFQUFFO0lBQy9DN0MsT0FBTyxDQUFDOEMsNEJBQTRCLENBQUNoQixJQUFJLEVBQUUsTUFBTSxDQUFDO0lBQ2xEOUIsT0FBTyxDQUFDOEMsNEJBQTRCLENBQUNGLEVBQUUsRUFBRSxJQUFJLENBQUM7SUFDOUM1QyxPQUFPLENBQUM4Qyw0QkFBNEIsQ0FBQ0QsT0FBTyxFQUFFLFNBQVMsQ0FBQztJQUV4RCxJQUFJRSxRQUFRLEdBQUcsSUFBSTtJQUVuQixNQUFNLENBQUMsTUFBTTtNQUNULE9BQU8sSUFBSTVCLE9BQU8sQ0FBQyxDQUFDQyxPQUFPLEVBQUVDLE1BQU0sS0FBSztRQUNwQ3BCLE9BQU8sQ0FBQ3FCLFFBQVEsQ0FBQzBCLE1BQU0sQ0FBQztVQUNwQlAsSUFBSSxFQUFFSSxPQUFPO1VBQ2JmLElBQUksRUFBRUEsSUFBSTtVQUNWYyxFQUFFLEVBQUVBO1FBQ1IsQ0FBQyxDQUFDLENBQUNKLElBQUksQ0FBQ0ssT0FBTyxJQUFJO1VBQ2ZFLFFBQVEsR0FBR0YsT0FBTyxDQUFDUCxHQUFHO1VBQ3RCbEIsT0FBTyxDQUFDLENBQUM7UUFDYixDQUFDLENBQUMsQ0FBQzZCLEtBQUssQ0FBQ3hCLEdBQUcsSUFBSTtVQUNac0IsUUFBUSxHQUFHdEIsR0FBRztVQUNkTCxPQUFPLENBQUMsQ0FBQztRQUNiLENBQUMsQ0FBQztNQUNOLENBQUMsQ0FBQztJQUNOLENBQUMsRUFBRSxDQUFDO0lBRUosSUFBSTJCLFFBQVEsQ0FBQ0YsT0FBTyxFQUFFO01BQ2xCLElBQUk5QixHQUFHLEdBQUdnQyxRQUFRLENBQUNGLE9BQU87TUFDMUIsSUFBSUUsUUFBUSxDQUFDRyxRQUFRLEVBQUU7UUFDbkJuQyxHQUFHLElBQUksa0JBQWtCLEdBQUdnQyxRQUFRLENBQUNHLFFBQVE7TUFDakQsQ0FBQyxNQUFNLElBQUlILFFBQVEsQ0FBQ0ksSUFBSSxFQUFFO1FBQ3RCcEMsR0FBRyxHQUFHLCtCQUErQixHQUFHQSxHQUFHO01BQy9DO01BQ0EsTUFBTSxJQUFJbEIsT0FBTyxDQUFDRSxTQUFTLENBQUNxQyxTQUFTLENBQUNDLFlBQVksRUFBRXRCLEdBQUcsQ0FBQztJQUM1RDtJQUVBLE9BQU9nQyxRQUFRO0VBQ25CLENBQUM7RUFFRC9DLE9BQU8sQ0FBQ29ELGNBQWMsR0FBRyxDQUFDQyxHQUFHLEVBQUVDLElBQUksS0FBSzFELEtBQUssQ0FBQ3dELGNBQWMsQ0FBQ0csSUFBSSxDQUFDLElBQUksRUFBRUYsR0FBRyxFQUFFQyxJQUFJLENBQUM7RUFDbEZ0RCxPQUFPLENBQUM4Qyw0QkFBNEIsR0FBRyxDQUFDTyxHQUFHLEVBQUVDLElBQUksS0FBSzFELEtBQUssQ0FBQ2tELDRCQUE0QixDQUFDUyxJQUFJLENBQUMsSUFBSSxFQUFFRixHQUFHLEVBQUVDLElBQUksQ0FBQztFQUM5R3RELE9BQU8sQ0FBQ2Msb0JBQW9CLEdBQUcsQ0FBQ3VDLEdBQUcsRUFBRUMsSUFBSSxLQUFLMUQsS0FBSyxDQUFDa0Isb0JBQW9CLENBQUN5QyxJQUFJLENBQUMsSUFBSSxFQUFFRixHQUFHLEVBQUVDLElBQUksQ0FBQztFQUM5RnRELE9BQU8sQ0FBQ3dELG9CQUFvQixHQUFHLENBQUNILEdBQUcsRUFBRUMsSUFBSSxLQUFLMUQsS0FBSyxDQUFDNEQsb0JBQW9CLENBQUNELElBQUksQ0FBQyxJQUFJLEVBQUVGLEdBQUcsRUFBRUMsSUFBSSxDQUFDO0VBQzlGdEQsT0FBTyxDQUFDYSwrQkFBK0IsR0FBRyxDQUFDd0MsR0FBRyxFQUFFQyxJQUFJLEtBQUsxRCxLQUFLLENBQUNpQiwrQkFBK0IsQ0FBQzBDLElBQUksQ0FBQyxJQUFJLEVBQUVGLEdBQUcsRUFBRUMsSUFBSSxDQUFDO0VBQ3BIdEQsT0FBTyxDQUFDWSxrQkFBa0IsR0FBRyxDQUFDeUMsR0FBRyxFQUFFQyxJQUFJLEtBQUsxRCxLQUFLLENBQUNnQixrQkFBa0IsQ0FBQzJDLElBQUksQ0FBQyxJQUFJLEVBQUVGLEdBQUcsRUFBRUMsSUFBSSxDQUFDO0VBQzFGdEQsT0FBTyxDQUFDeUQsMEJBQTBCLEdBQUcsQ0FBQ0osR0FBRyxFQUFFQyxJQUFJLEtBQUsxRCxLQUFLLENBQUM2RCwwQkFBMEIsQ0FBQ0YsSUFBSSxDQUFDLElBQUksRUFBRUYsR0FBRyxFQUFFQyxJQUFJLENBQUM7RUFDMUd0RCxPQUFPLENBQUMwRCxxQkFBcUIsR0FBRyxDQUFDTCxHQUFHLEVBQUVDLElBQUksS0FBSzFELEtBQUssQ0FBQzhELHFCQUFxQixDQUFDSCxJQUFJLENBQUMsSUFBSSxFQUFFRixHQUFHLEVBQUVDLElBQUksQ0FBQztFQUVoRyxPQUFPNUQsTUFBTTtBQUNqQixDQUFDIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -4,25 +4,15 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
require("source-map-support/register");
|
|
9
|
-
|
|
10
8
|
var _fastXmlParser = _interopRequireDefault(require("fast-xml-parser"));
|
|
11
|
-
|
|
12
9
|
var _OxygenModule = _interopRequireDefault(require("../core/OxygenModule"));
|
|
13
|
-
|
|
14
10
|
var _utils = _interopRequireDefault(require("./utils"));
|
|
15
|
-
|
|
16
11
|
var _util = _interopRequireDefault(require("../lib/util"));
|
|
17
|
-
|
|
18
12
|
var _OxygenError = _interopRequireDefault(require("../errors/OxygenError"));
|
|
19
|
-
|
|
20
13
|
var _helper = _interopRequireDefault(require("../errors/helper"));
|
|
21
|
-
|
|
22
14
|
var _paramReaderExcel = _interopRequireDefault(require("../lib/param-reader-excel"));
|
|
23
|
-
|
|
24
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
25
|
-
|
|
15
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
26
16
|
/*
|
|
27
17
|
* Copyright (C) 2015-present CloudBeat Limited
|
|
28
18
|
*
|
|
@@ -36,36 +26,34 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
36
26
|
* @name utils
|
|
37
27
|
* @description Provides miscellaneous utility methods.
|
|
38
28
|
*/
|
|
39
|
-
const MODULE_NAME = 'utils';
|
|
40
29
|
|
|
30
|
+
const MODULE_NAME = 'utils';
|
|
41
31
|
class UtilsModule extends _OxygenModule.default {
|
|
42
32
|
constructor(options, context, rs, logger, modules, services) {
|
|
43
33
|
super(options, context, rs, logger, modules, services);
|
|
44
34
|
this._alwaysInitialized = true;
|
|
45
35
|
this._isInitialized = true;
|
|
46
36
|
}
|
|
37
|
+
|
|
47
38
|
/*
|
|
48
39
|
* @summary Gets module name
|
|
49
40
|
* @function name
|
|
50
41
|
* @return {String} Constant value "utils".
|
|
51
42
|
*/
|
|
52
|
-
|
|
53
|
-
|
|
54
43
|
get name() {
|
|
55
44
|
return MODULE_NAME;
|
|
56
45
|
}
|
|
46
|
+
|
|
57
47
|
/**
|
|
58
48
|
* @summary Pause test execution for the given amount of milliseconds.
|
|
59
49
|
* @function pause
|
|
60
50
|
* @param {Number} ms - Milliseconds to pause the execution for.
|
|
61
51
|
*/
|
|
62
|
-
|
|
63
|
-
|
|
64
52
|
async pause(ms) {
|
|
65
53
|
_utils.default.assertArgumentNumberNonNegative(ms, 'ms');
|
|
66
|
-
|
|
67
54
|
await _util.default.sleep(ms);
|
|
68
55
|
}
|
|
56
|
+
|
|
69
57
|
/**
|
|
70
58
|
* @summary Decrypt text
|
|
71
59
|
* @function decrypt
|
|
@@ -87,11 +75,10 @@ class UtilsModule extends _OxygenModule.default {
|
|
|
87
75
|
* const value = decrypt.getDecryptResult();
|
|
88
76
|
* log.info(value); //will print https://www.wikipedia.org
|
|
89
77
|
*/
|
|
90
|
-
|
|
91
|
-
|
|
92
78
|
decrypt(text) {
|
|
93
79
|
return _util.default.decrypt(text);
|
|
94
80
|
}
|
|
81
|
+
|
|
95
82
|
/**
|
|
96
83
|
* @summary Encrypt text
|
|
97
84
|
* @function encrypt
|
|
@@ -113,8 +100,6 @@ class UtilsModule extends _OxygenModule.default {
|
|
|
113
100
|
* const value = decrypt.getDecryptResult();
|
|
114
101
|
* log.info(value); //will print https://www.wikipedia.org
|
|
115
102
|
*/
|
|
116
|
-
|
|
117
|
-
|
|
118
103
|
encrypt(text) {
|
|
119
104
|
return _util.default.encrypt(text);
|
|
120
105
|
}
|
|
@@ -124,39 +109,31 @@ class UtilsModule extends _OxygenModule.default {
|
|
|
124
109
|
* @param {String} filePath - Absolute path to file
|
|
125
110
|
* @param {Object=} options - [Options](https://csv.js.org/parse/options/)
|
|
126
111
|
*/
|
|
127
|
-
|
|
128
|
-
|
|
129
112
|
readCsv(filePath, options = {}) {
|
|
130
113
|
const parse = require('csv-parse/lib/sync');
|
|
131
|
-
|
|
132
114
|
var fs = require('fs');
|
|
133
|
-
|
|
134
115
|
var path = require('path');
|
|
135
|
-
|
|
136
116
|
var ext = path.extname(filePath);
|
|
137
|
-
|
|
138
117
|
if (ext !== '.csv' && ext !== '.txt') {
|
|
139
118
|
throw new _OxygenError.default(_helper.default.errorCode.CSV_ERROR, 'Unsupported file extension: ' + ext);
|
|
140
119
|
}
|
|
141
|
-
|
|
142
120
|
var data;
|
|
143
|
-
|
|
144
121
|
try {
|
|
145
122
|
data = fs.readFileSync(filePath, 'utf8');
|
|
146
123
|
} catch (e) {
|
|
147
124
|
throw new _OxygenError.default(_helper.default.errorCode.CSV_ERROR, 'Unable to read parameters file: ' + e);
|
|
148
|
-
}
|
|
149
|
-
|
|
125
|
+
}
|
|
150
126
|
|
|
151
|
-
|
|
127
|
+
// CSVs produced by OS X Excel have header terminated with 0d0d0a
|
|
128
|
+
data = data.replace(/\r\r/g, '\r');
|
|
152
129
|
|
|
153
|
-
|
|
130
|
+
// strip BOM for UTF-8
|
|
131
|
+
var bom = false;
|
|
132
|
+
// catches 0xEFBBBF (UTF-8 BOM) because the buffer-to-string
|
|
154
133
|
// conversion translates it to 0xFEFF (UTF-16 BOM)
|
|
155
|
-
|
|
156
134
|
if (data.charCodeAt(0) === 0xFEFF) {
|
|
157
135
|
bom = true;
|
|
158
136
|
}
|
|
159
|
-
|
|
160
137
|
try {
|
|
161
138
|
var table = parse(data, {
|
|
162
139
|
bom: bom,
|
|
@@ -167,9 +144,9 @@ class UtilsModule extends _OxygenModule.default {
|
|
|
167
144
|
} catch (e) {
|
|
168
145
|
throw new _OxygenError.default(_helper.default.errorCode.CSV_ERROR, e.message);
|
|
169
146
|
}
|
|
170
|
-
|
|
171
147
|
return table;
|
|
172
148
|
}
|
|
149
|
+
|
|
173
150
|
/**
|
|
174
151
|
* @summary Writes data into csv file
|
|
175
152
|
* @function writeCsv
|
|
@@ -177,12 +154,9 @@ class UtilsModule extends _OxygenModule.default {
|
|
|
177
154
|
* @param {Array} data - CSV data in format [{column_name_1: 'foo', column_name_2: 'bar'}]
|
|
178
155
|
* @param {Object=} options - [Options](https://github.com/anton-bot/objects-to-csv#async-todiskfilename-options)
|
|
179
156
|
*/
|
|
180
|
-
|
|
181
|
-
|
|
182
157
|
async writeCsv(filePath, data, options = {}) {
|
|
183
158
|
try {
|
|
184
159
|
const ObjectsToCsv = require('objects-to-csv');
|
|
185
|
-
|
|
186
160
|
const csv = new ObjectsToCsv(data);
|
|
187
161
|
await csv.toDisk(filePath, {
|
|
188
162
|
allColumns: true,
|
|
@@ -192,18 +166,18 @@ class UtilsModule extends _OxygenModule.default {
|
|
|
192
166
|
throw new _OxygenError.default(_helper.default.errorCode.CSV_ERROR, e.message);
|
|
193
167
|
}
|
|
194
168
|
}
|
|
169
|
+
|
|
195
170
|
/**
|
|
196
171
|
* @summary Reads data from Xlsx file
|
|
197
172
|
* @function readXlsx
|
|
198
173
|
* @param {String} filePath - Absolute path to file
|
|
199
174
|
* @return {Array} - Array of xlsx data
|
|
200
175
|
*/
|
|
201
|
-
|
|
202
|
-
|
|
203
176
|
async readXlsx(filePath) {
|
|
204
177
|
const reader = new _paramReaderExcel.default();
|
|
205
178
|
return await reader.read(filePath);
|
|
206
179
|
}
|
|
180
|
+
|
|
207
181
|
/**
|
|
208
182
|
* @summary Uses the DNS protocol to resolve a host name
|
|
209
183
|
* @function dnsResolve
|
|
@@ -211,33 +185,26 @@ class UtilsModule extends _OxygenModule.default {
|
|
|
211
185
|
* @param {String=} rrType - Resource record type. Default: 'A'.
|
|
212
186
|
* @return {String[] | Object} - Array or Object of resource records. The type and structure of individual results vary based on rrtype
|
|
213
187
|
*/
|
|
214
|
-
|
|
215
|
-
|
|
216
188
|
async dnsResolve(hostname, rrType = 'A') {
|
|
217
189
|
_utils.default.assertArgumentNonEmptyString(hostname, 'hostname');
|
|
218
|
-
|
|
219
190
|
const rrTypes = ['A', 'AAAA', 'ANY', 'CNAME', 'MX', 'NAPTR', 'NS', 'PTR', 'SOA', 'SRV', 'TXT'];
|
|
220
|
-
|
|
221
191
|
if (!rrTypes.includes(rrType)) {
|
|
222
192
|
throw new _OxygenError.default(_helper.default.errorCode.SCRIPT_ERROR, `Invalid argument - 'rrType'. Available rrType values: ${rrTypes.join(', ')}`);
|
|
223
193
|
}
|
|
224
|
-
|
|
225
194
|
const dnsPromises = require('dns').promises;
|
|
226
|
-
|
|
227
195
|
try {
|
|
228
196
|
return await dnsPromises.resolve(hostname, rrType);
|
|
229
197
|
} catch (e) {
|
|
230
198
|
throw new _OxygenError.default(_helper.default.errorCode.DNS_ERROR, e.message);
|
|
231
199
|
}
|
|
232
200
|
}
|
|
201
|
+
|
|
233
202
|
/**
|
|
234
203
|
* @summary Parse XML data to JS object
|
|
235
204
|
* @function xmlToJson
|
|
236
205
|
* @param {string|Buffer} xmlDataStr - Like <root a="nice" b="very nice" ><a>wow</a></root>
|
|
237
206
|
* @param {boolean|Object} options - [Options](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/docs/v4/2.XMLparseOptions.md)
|
|
238
207
|
*/
|
|
239
|
-
|
|
240
|
-
|
|
241
208
|
xmlToJson(xmlDataStr, options = {}) {
|
|
242
209
|
try {
|
|
243
210
|
const parser = new _fastXmlParser.default.XMLParser(options);
|
|
@@ -247,27 +214,24 @@ class UtilsModule extends _OxygenModule.default {
|
|
|
247
214
|
throw new _OxygenError.default(_helper.default.errorCode.XML_ERROR, e.message);
|
|
248
215
|
}
|
|
249
216
|
}
|
|
217
|
+
|
|
250
218
|
/**
|
|
251
219
|
* @summary Opens new transaction.
|
|
252
220
|
* @description The transaction will persist untill a new one is opened. Transaction names must be unique.
|
|
253
221
|
* @function transaction
|
|
254
222
|
* @param {String} name - The transaction name.
|
|
255
223
|
*/
|
|
256
|
-
|
|
257
|
-
|
|
258
224
|
async transaction(name) {
|
|
259
225
|
if (!name) {
|
|
260
226
|
return;
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
name = name.toString(); // limit the name length (since we can't store values larger than 512B in the database)
|
|
227
|
+
}
|
|
228
|
+
// just in case user passed a complex object by mistake
|
|
229
|
+
name = name.toString();
|
|
265
230
|
|
|
231
|
+
// limit the name length (since we can't store values larger than 512B in the database)
|
|
266
232
|
name = name.slice(0, 512);
|
|
267
233
|
global._lastTransactionName = name;
|
|
268
234
|
}
|
|
269
|
-
|
|
270
235
|
}
|
|
271
|
-
|
|
272
236
|
exports.default = UtilsModule;
|
|
273
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS11dGlscy5qcyJdLCJuYW1lcyI6WyJNT0RVTEVfTkFNRSIsIlV0aWxzTW9kdWxlIiwiT3h5Z2VuTW9kdWxlIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwiY29udGV4dCIsInJzIiwibG9nZ2VyIiwibW9kdWxlcyIsInNlcnZpY2VzIiwiX2Fsd2F5c0luaXRpYWxpemVkIiwiX2lzSW5pdGlhbGl6ZWQiLCJuYW1lIiwicGF1c2UiLCJtcyIsInV0aWxzIiwiYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSIsImxpYlV0aWxzIiwic2xlZXAiLCJkZWNyeXB0IiwidGV4dCIsImVuY3J5cHQiLCJyZWFkQ3N2IiwiZmlsZVBhdGgiLCJwYXJzZSIsInJlcXVpcmUiLCJmcyIsInBhdGgiLCJleHQiLCJleHRuYW1lIiwiT3hFcnJvciIsImVycm9ySGVscGVyIiwiZXJyb3JDb2RlIiwiQ1NWX0VSUk9SIiwiZGF0YSIsInJlYWRGaWxlU3luYyIsImUiLCJyZXBsYWNlIiwiYm9tIiwiY2hhckNvZGVBdCIsInRhYmxlIiwiY29sdW1ucyIsInRyaW0iLCJtZXNzYWdlIiwid3JpdGVDc3YiLCJPYmplY3RzVG9Dc3YiLCJjc3YiLCJ0b0Rpc2siLCJhbGxDb2x1bW5zIiwicmVhZFhsc3giLCJyZWFkZXIiLCJFeGNlbFJlYWRlciIsInJlYWQiLCJkbnNSZXNvbHZlIiwiaG9zdG5hbWUiLCJyclR5cGUiLCJhc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nIiwicnJUeXBlcyIsImluY2x1ZGVzIiwiU0NSSVBUX0VSUk9SIiwiam9pbiIsImRuc1Byb21pc2VzIiwicHJvbWlzZXMiLCJyZXNvbHZlIiwiRE5TX0VSUk9SIiwieG1sVG9Kc29uIiwieG1sRGF0YVN0ciIsInBhcnNlciIsImZhc3RYbWxQYXJzZXIiLCJYTUxQYXJzZXIiLCJvdXRwdXQiLCJYTUxfRVJST1IiLCJ0cmFuc2FjdGlvbiIsInRvU3RyaW5nIiwic2xpY2Ui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QVMsQ0FBQ0MsVUFBRCxFQUFhOUQsT0FBTyxHQUFHLEVBQXZCLEVBQTJCO0FBQ2hDLFFBQUk7QUFDQSxZQUFNK0QsTUFBTSxHQUFHLElBQUlDLHVCQUFjQyxTQUFsQixDQUE0QmpFLE9BQTVCLENBQWY7QUFDQSxZQUFNa0UsTUFBTSxHQUFHSCxNQUFNLENBQUMzQyxLQUFQLENBQWEwQyxVQUFiLENBQWY7QUFDQSxhQUFPSSxNQUFQO0FBQ0gsS0FKRCxDQUlFLE9BQU9sQyxDQUFQLEVBQVU7QUFDUixZQUFNLElBQUlOLG9CQUFKLENBQVlDLGdCQUFZQyxTQUFaLENBQXNCdUMsU0FBbEMsRUFBNkNuQyxDQUFDLENBQUNPLE9BQS9DLENBQU47QUFDSDtBQUNKO0FBRUQ7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDcUIsUUFBWDZCLFdBQVcsQ0FBQzVELElBQUQsRUFBTztBQUNwQixRQUFJLENBQUNBLElBQUwsRUFBVztBQUNQO0FBQ0gsS0FIbUIsQ0FJcEI7OztBQUNBQSxJQUFBQSxJQUFJLEdBQUdBLElBQUksQ0FBQzZELFFBQUwsRUFBUCxDQUxvQixDQU9wQjs7QUFDQTdELElBQUFBLElBQUksR0FBR0EsSUFBSSxDQUFDOEQsS0FBTCxDQUFXLENBQVgsRUFBYyxHQUFkLENBQVA7QUFFQUMsSUFBQUEsTUFBTSxDQUFDQyxvQkFBUCxHQUE4QmhFLElBQTlCO0FBQ0g7O0FBMU1pRCIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lIHV0aWxzXHJcbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBtaXNjZWxsYW5lb3VzIHV0aWxpdHkgbWV0aG9kcy5cclxuICovXHJcblxyXG5jb25zdCBNT0RVTEVfTkFNRSA9ICd1dGlscyc7XHJcbmltcG9ydCBmYXN0WG1sUGFyc2VyIGZyb20gJ2Zhc3QteG1sLXBhcnNlcic7XHJcbmltcG9ydCBPeHlnZW5Nb2R1bGUgZnJvbSAnLi4vY29yZS9PeHlnZW5Nb2R1bGUnO1xyXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCBsaWJVdGlscyBmcm9tICcuLi9saWIvdXRpbCc7XHJcbmltcG9ydCBPeEVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbmltcG9ydCBlcnJvckhlbHBlciBmcm9tICcuLi9lcnJvcnMvaGVscGVyJztcclxuaW1wb3J0IEV4Y2VsUmVhZGVyIGZyb20gJy4uL2xpYi9wYXJhbS1yZWFkZXItZXhjZWwnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVXRpbHNNb2R1bGUgZXh0ZW5kcyBPeHlnZW5Nb2R1bGUge1xyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpIHtcclxuICAgICAgICBzdXBlcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcyk7XHJcbiAgICAgICAgdGhpcy5fYWx3YXlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBAc3VtbWFyeSBHZXRzIG1vZHVsZSBuYW1lXHJcbiAgICAgKiBAZnVuY3Rpb24gbmFtZVxyXG4gICAgICogQHJldHVybiB7U3RyaW5nfSBDb25zdGFudCB2YWx1ZSBcInV0aWxzXCIuXHJcbiAgICAgKi9cclxuICAgIGdldCBuYW1lKCkge1xyXG4gICAgICAgIHJldHVybiBNT0RVTEVfTkFNRTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFBhdXNlIHRlc3QgZXhlY3V0aW9uIGZvciB0aGUgZ2l2ZW4gYW1vdW50IG9mIG1pbGxpc2Vjb25kcy5cclxuICAgICAqIEBmdW5jdGlvbiBwYXVzZVxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IG1zIC0gTWlsbGlzZWNvbmRzIHRvIHBhdXNlIHRoZSBleGVjdXRpb24gZm9yLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBwYXVzZShtcykge1xyXG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUobXMsICdtcycpO1xyXG4gICAgICAgIGF3YWl0IGxpYlV0aWxzLnNsZWVwKG1zKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IERlY3J5cHQgdGV4dFxyXG4gICAgICogQGZ1bmN0aW9uIGRlY3J5cHRcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IC0gVGV4dFxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBEZWNyeXB0UmVzdWx0IE9iamVjdCB3aXRoIGdldERlY3J5cHRSZXN1bHQgbWV0aG9kXHJcbiAgICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5bamF2YXNjcmlwdF0gVXNhZ2UgZXhhbXBsZTwvY2FwdGlvbj5cclxuICAgICAqIC8vIHRvIGVuY3J5cHQgcGxhaW50ZXh0IGludG8gY2lwaGVydGV4dCBcclxuICAgICAqIGNvbnN0IGVuY3J5cHQgPSB1dGlscy5lbmNyeXB0KCdodHRwczovL3d3dy53aWtpcGVkaWEub3JnJyk7XHJcbiAgICAgKiBsb2cuaW5mbyhlbmNyeXB0KTsgLy8gd2lsbCBwcmludCBiNzU3YmEyYzJmYzUwZmJiNTExZDU5NjgxNmNhMDZjNGZhNTZmNGU5OGNlMjIyZjMwYmM1OGQ1MjUxZWQ2MzVlXHJcbiAgICAgKiBcclxuICAgICAqIC8vIHRvIGRlY3J5cHQgY2lwaGVydGV4dCBhbmQgdXNlIGl0IGluIHNjcmlwdCAgXHJcbiAgICAgKiBjb25zdCBkZWNyeXB0ID0gdXRpbHMuZGVjcnlwdChlbmNyeXB0KTtcclxuICAgICAqIGxvZy5pbmZvKGRlY3J5cHQpOyAvLyB3aWxsIHByaW50IEVOQ1JZUFRFRFxyXG4gICAgICogXHJcbiAgICAgKiB3ZWIuaW5pdCgpO1xyXG4gICAgICogd2ViLm9wZW4oZGVjcnlwdCk7IC8vIHdpbGwgb3BlbiBodHRwczovL3d3dy53aWtpcGVkaWEub3JnXHJcbiAgICAgKiBcclxuICAgICAqIC8vIHRvIGdldCBvcmlnaW5hbCBwbGFpbnRleHQgdXNlIGdldERlY3J5cHRSZXN1bHRcclxuICAgICAqIGNvbnN0IHZhbHVlID0gZGVjcnlwdC5nZXREZWNyeXB0UmVzdWx0KCk7XHJcbiAgICAgKiBsb2cuaW5mbyh2YWx1ZSk7IC8vd2lsbCBwcmludCBodHRwczovL3d3dy53aWtpcGVkaWEub3JnXHJcbiAgICAgKi9cclxuICAgIGRlY3J5cHQodGV4dCkge1xyXG4gICAgICAgIHJldHVybiBsaWJVdGlscy5kZWNyeXB0KHRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgRW5jcnlwdCB0ZXh0XHJcbiAgICAgKiBAZnVuY3Rpb24gZW5jcnlwdFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHRleHQgLSBUZXh0XHJcbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IEVuY3J5cHRlZCB0ZXh0XHJcbiAgICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5bamF2YXNjcmlwdF0gVXNhZ2UgZXhhbXBsZTwvY2FwdGlvbj5cclxuICAgICAqIC8vIHRvIGVuY3J5cHQgcGxhaW50ZXh0IGludG8gY2lwaGVydGV4dCBcclxuICAgICAqIGNvbnN0IGVuY3J5cHQgPSB1dGlscy5lbmNyeXB0KCdodHRwczovL3d3dy53aWtpcGVkaWEub3JnJyk7XHJcbiAgICAgKiBsb2cuaW5mbyhlbmNyeXB0KTsgLy8gd2lsbCBwcmludCBiNzU3YmEyYzJmYzUwZmJiNTExZDU5NjgxNmNhMDZjNGZhNTZmNGU5OGNlMjIyZjMwYmM1OGQ1MjUxZWQ2MzVlXHJcbiAgICAgKiBcclxuICAgICAqIC8vIHRvIGRlY3J5cHQgY2lwaGVydGV4dCBhbmQgdXNlIGl0IGluIHNjcmlwdCAgXHJcbiAgICAgKiBjb25zdCBkZWNyeXB0ID0gdXRpbHMuZGVjcnlwdChlbmNyeXB0KTtcclxuICAgICAqIGxvZy5pbmZvKGRlY3J5cHQpOyAvLyB3aWxsIHByaW50IEVOQ1JZUFRFRFxyXG4gICAgICogXHJcbiAgICAgKiB3ZWIuaW5pdCgpO1xyXG4gICAgICogd2ViLm9wZW4oZGVjcnlwdCk7IC8vIHdpbGwgb3BlbiBodHRwczovL3d3dy53aWtpcGVkaWEub3JnXHJcbiAgICAgKiBcclxuICAgICAqIC8vIHRvIGdldCBvcmlnaW5hbCBwbGFpbnRleHQgdXNlIGdldERlY3J5cHRSZXN1bHRcclxuICAgICAqIGNvbnN0IHZhbHVlID0gZGVjcnlwdC5nZXREZWNyeXB0UmVzdWx0KCk7XHJcbiAgICAgKiBsb2cuaW5mbyh2YWx1ZSk7IC8vd2lsbCBwcmludCBodHRwczovL3d3dy53aWtpcGVkaWEub3JnXHJcbiAgICAgKi9cclxuICAgIGVuY3J5cHQodGV4dCkge1xyXG4gICAgICAgIHJldHVybiBsaWJVdGlscy5lbmNyeXB0KHRleHQpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBSZWFkcyBkYXRhIGZyb20gY3N2IGZpbGVcclxuICAgICAqIEBmdW5jdGlvbiByZWFkQ3N2XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmlsZVBhdGggLSBBYnNvbHV0ZSBwYXRoIHRvIGZpbGVcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIFtPcHRpb25zXShodHRwczovL2Nzdi5qcy5vcmcvcGFyc2Uvb3B0aW9ucy8pXHJcbiAgICAgKi9cclxuICAgIHJlYWRDc3YoZmlsZVBhdGgsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgICAgIGNvbnN0IHBhcnNlID0gcmVxdWlyZSgnY3N2LXBhcnNlL2xpYi9zeW5jJyk7XHJcbiAgICAgICAgdmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcclxuICAgICAgICB2YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcclxuXHJcbiAgICAgICAgdmFyIGV4dCA9IHBhdGguZXh0bmFtZShmaWxlUGF0aCk7XHJcbiAgICAgICAgaWYgKGV4dCAhPT0gJy5jc3YnICYmIGV4dCAhPT0gJy50eHQnKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5DU1ZfRVJST1IsICdVbnN1cHBvcnRlZCBmaWxlIGV4dGVuc2lvbjogJyArIGV4dCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZGF0YTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBkYXRhID0gZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoLCAndXRmOCcpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLkNTVl9FUlJPUiwgJ1VuYWJsZSB0byByZWFkIHBhcmFtZXRlcnMgZmlsZTogJyArIGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQ1NWcyBwcm9kdWNlZCBieSBPUyBYIEV4Y2VsIGhhdmUgaGVhZGVyIHRlcm1pbmF0ZWQgd2l0aCAwZDBkMGFcclxuICAgICAgICBkYXRhID0gZGF0YS5yZXBsYWNlKC9cXHJcXHIvZywgJ1xccicpO1xyXG5cclxuICAgICAgICAvLyBzdHJpcCBCT00gZm9yIFVURi04XHJcbiAgICAgICAgdmFyIGJvbSA9IGZhbHNlO1xyXG4gICAgICAgIC8vIGNhdGNoZXMgMHhFRkJCQkYgKFVURi04IEJPTSkgYmVjYXVzZSB0aGUgYnVmZmVyLXRvLXN0cmluZ1xyXG4gICAgICAgIC8vIGNvbnZlcnNpb24gdHJhbnNsYXRlcyBpdCB0byAweEZFRkYgKFVURi0xNiBCT00pXHJcbiAgICAgICAgaWYgKGRhdGEuY2hhckNvZGVBdCgwKSA9PT0gMHhGRUZGKSB7XHJcbiAgICAgICAgICAgIGJvbSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2YXIgdGFibGUgPSBwYXJzZShkYXRhLCB7IGJvbTogYm9tLCBjb2x1bW5zOiB0cnVlLCB0cmltOiB0cnVlLCAuLi5vcHRpb25zIH0pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLkNTVl9FUlJPUiwgZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0YWJsZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFdyaXRlcyBkYXRhIGludG8gY3N2IGZpbGVcclxuICAgICAqIEBmdW5jdGlvbiB3cml0ZUNzdlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGZpbGVQYXRoIC0gQWJzb2x1dGUgcGF0aCB0byBmaWxlXHJcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBkYXRhIC0gQ1NWIGRhdGEgaW4gZm9ybWF0IFt7Y29sdW1uX25hbWVfMTogJ2ZvbycsIGNvbHVtbl9uYW1lXzI6ICdiYXInfV1cclxuICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIFtPcHRpb25zXShodHRwczovL2dpdGh1Yi5jb20vYW50b24tYm90L29iamVjdHMtdG8tY3N2I2FzeW5jLXRvZGlza2ZpbGVuYW1lLW9wdGlvbnMpXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHdyaXRlQ3N2KGZpbGVQYXRoLCBkYXRhLCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBPYmplY3RzVG9Dc3YgPSByZXF1aXJlKCdvYmplY3RzLXRvLWNzdicpO1xyXG4gICAgICAgICAgICBjb25zdCBjc3YgPSBuZXcgT2JqZWN0c1RvQ3N2KGRhdGEpO1xyXG4gICAgICAgICAgICBhd2FpdCBjc3YudG9EaXNrKGZpbGVQYXRoLCB7IGFsbENvbHVtbnM6IHRydWUsIC4uLm9wdGlvbnMgfSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuQ1NWX0VSUk9SLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFJlYWRzIGRhdGEgZnJvbSBYbHN4IGZpbGVcclxuICAgICAqIEBmdW5jdGlvbiByZWFkWGxzeFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGZpbGVQYXRoIC0gQWJzb2x1dGUgcGF0aCB0byBmaWxlXHJcbiAgICAgKiBAcmV0dXJuIHtBcnJheX0gLSBBcnJheSBvZiB4bHN4IGRhdGFcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcmVhZFhsc3goZmlsZVBhdGgpIHtcclxuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRXhjZWxSZWFkZXIoKTtcclxuICAgICAgICByZXR1cm4gYXdhaXQgcmVhZGVyLnJlYWQoZmlsZVBhdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgVXNlcyB0aGUgRE5TIHByb3RvY29sIHRvIHJlc29sdmUgYSBob3N0IG5hbWVcclxuICAgICAqIEBmdW5jdGlvbiBkbnNSZXNvbHZlXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gaG9zdG5hbWUgLSBIb3N0IG5hbWUgdG8gcmVzb2x2ZS5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nPX0gcnJUeXBlIC0gUmVzb3VyY2UgcmVjb3JkIHR5cGUuIERlZmF1bHQ6ICdBJy5cclxuICAgICAqIEByZXR1cm4ge1N0cmluZ1tdIHwgT2JqZWN0fSAtIEFycmF5IG9yIE9iamVjdCBvZiByZXNvdXJjZSByZWNvcmRzLiBUaGUgdHlwZSBhbmQgc3RydWN0dXJlIG9mIGluZGl2aWR1YWwgcmVzdWx0cyB2YXJ5IGJhc2VkIG9uIHJydHlwZVxyXG4gICAgICovXHJcbiAgICBhc3luYyBkbnNSZXNvbHZlKGhvc3RuYW1lLCByclR5cGUgPSAnQScpIHtcclxuICAgICAgICB1dGlscy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nKGhvc3RuYW1lLCAnaG9zdG5hbWUnKTtcclxuICAgICAgICBjb25zdCByclR5cGVzID0gWydBJywgJ0FBQUEnLCAnQU5ZJywgJ0NOQU1FJywgJ01YJywgJ05BUFRSJywgJ05TJywgJ1BUUicsICdTT0EnLCAnU1JWJywgJ1RYVCddO1xyXG5cclxuICAgICAgICBpZiAoIXJyVHlwZXMuaW5jbHVkZXMocnJUeXBlKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCBgSW52YWxpZCBhcmd1bWVudCAtICdyclR5cGUnLiBBdmFpbGFibGUgcnJUeXBlIHZhbHVlczogJHtyclR5cGVzLmpvaW4oJywgJyl9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBkbnNQcm9taXNlcyA9IHJlcXVpcmUoJ2RucycpLnByb21pc2VzO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBkbnNQcm9taXNlcy5yZXNvbHZlKGhvc3RuYW1lLCByclR5cGUpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLkROU19FUlJPUiwgZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBQYXJzZSBYTUwgZGF0YSB0byBKUyBvYmplY3QgXHJcbiAgICAgKiBAZnVuY3Rpb24geG1sVG9Kc29uXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xCdWZmZXJ9IHhtbERhdGFTdHIgLSBMaWtlIDxyb290IGE9XCJuaWNlXCIgYj1cInZlcnkgbmljZVwiID48YT53b3c8L2E+PC9yb290PlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufE9iamVjdH0gb3B0aW9ucyAtIFtPcHRpb25zXShodHRwczovL2dpdGh1Yi5jb20vTmF0dXJhbEludGVsbGlnZW5jZS9mYXN0LXhtbC1wYXJzZXIvYmxvYi9tYXN0ZXIvZG9jcy92NC8yLlhNTHBhcnNlT3B0aW9ucy5tZCkgXHJcbiAgICAgKi9cclxuICAgIHhtbFRvSnNvbih4bWxEYXRhU3RyLCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJzZXIgPSBuZXcgZmFzdFhtbFBhcnNlci5YTUxQYXJzZXIob3B0aW9ucyk7XHJcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dCA9IHBhcnNlci5wYXJzZSh4bWxEYXRhU3RyKTtcclxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5YTUxfRVJST1IsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgT3BlbnMgbmV3IHRyYW5zYWN0aW9uLlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSB0cmFuc2FjdGlvbiB3aWxsIHBlcnNpc3QgdW50aWxsIGEgbmV3IG9uZSBpcyBvcGVuZWQuIFRyYW5zYWN0aW9uIG5hbWVzIG11c3QgYmUgdW5pcXVlLlxyXG4gICAgICogQGZ1bmN0aW9uIHRyYW5zYWN0aW9uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSAtIFRoZSB0cmFuc2FjdGlvbiBuYW1lLlxyXG4gICAgICovXHJcbiAgICBhc3luYyB0cmFuc2FjdGlvbihuYW1lKSB7XHJcbiAgICAgICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8ganVzdCBpbiBjYXNlIHVzZXIgcGFzc2VkIGEgY29tcGxleCBvYmplY3QgYnkgbWlzdGFrZVxyXG4gICAgICAgIG5hbWUgPSBuYW1lLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICAgIC8vIGxpbWl0IHRoZSBuYW1lIGxlbmd0aCAoc2luY2Ugd2UgY2FuJ3Qgc3RvcmUgdmFsdWVzIGxhcmdlciB0aGFuIDUxMkIgaW4gdGhlIGRhdGFiYXNlKVxyXG4gICAgICAgIG5hbWUgPSBuYW1lLnNsaWNlKDAsIDUxMik7XHJcblxyXG4gICAgICAgIGdsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZSA9IG5hbWU7XHJcbiAgICB9XHJcbn0iXX0=
|
|
237
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZmFzdFhtbFBhcnNlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX094eWdlbk1vZHVsZSIsIl91dGlscyIsIl91dGlsIiwiX094eWdlbkVycm9yIiwiX2hlbHBlciIsIl9wYXJhbVJlYWRlckV4Y2VsIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiTU9EVUxFX05BTUUiLCJVdGlsc01vZHVsZSIsIk94eWdlbk1vZHVsZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNvbnRleHQiLCJycyIsImxvZ2dlciIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsIl9hbHdheXNJbml0aWFsaXplZCIsIl9pc0luaXRpYWxpemVkIiwibmFtZSIsInBhdXNlIiwibXMiLCJ1dGlscyIsImFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUiLCJsaWJVdGlscyIsInNsZWVwIiwiZGVjcnlwdCIsInRleHQiLCJlbmNyeXB0IiwicmVhZENzdiIsImZpbGVQYXRoIiwicGFyc2UiLCJmcyIsInBhdGgiLCJleHQiLCJleHRuYW1lIiwiT3hFcnJvciIsImVycm9ySGVscGVyIiwiZXJyb3JDb2RlIiwiQ1NWX0VSUk9SIiwiZGF0YSIsInJlYWRGaWxlU3luYyIsInJlcGxhY2UiLCJib20iLCJjaGFyQ29kZUF0IiwidGFibGUiLCJjb2x1bW5zIiwidHJpbSIsIm1lc3NhZ2UiLCJ3cml0ZUNzdiIsIk9iamVjdHNUb0NzdiIsImNzdiIsInRvRGlzayIsImFsbENvbHVtbnMiLCJyZWFkWGxzeCIsInJlYWRlciIsIkV4Y2VsUmVhZGVyIiwicmVhZCIsImRuc1Jlc29sdmUiLCJob3N0bmFtZSIsInJyVHlwZSIsImFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmciLCJyclR5cGVzIiwiaW5jbHVkZXMiLCJTQ1JJUFRfRVJST1IiLCJqb2luIiwiZG5zUHJvbWlzZXMiLCJwcm9taXNlcyIsInJlc29sdmUiLCJETlNfRVJST1IiLCJ4bWxUb0pzb24iLCJ4bWxEYXRhU3RyIiwicGFyc2VyIiwiZmFzdFhtbFBhcnNlciIsIlhNTFBhcnNlciIsIm91dHB1dCIsIlhNTF9FUlJPUiIsInRyYW5zYWN0aW9uIiwidG9TdHJpbmciLCJzbGljZSIsImdsb2JhbCIsIl9sYXN0VHJhbnNhY3Rpb25OYW1lIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS11dGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZSB1dGlsc1xyXG4gKiBAZGVzY3JpcHRpb24gUHJvdmlkZXMgbWlzY2VsbGFuZW91cyB1dGlsaXR5IG1ldGhvZHMuXHJcbiAqL1xyXG5cclxuY29uc3QgTU9EVUxFX05BTUUgPSAndXRpbHMnO1xyXG5pbXBvcnQgZmFzdFhtbFBhcnNlciBmcm9tICdmYXN0LXhtbC1wYXJzZXInO1xyXG5pbXBvcnQgT3h5Z2VuTW9kdWxlIGZyb20gJy4uL2NvcmUvT3h5Z2VuTW9kdWxlJztcclxuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xyXG5pbXBvcnQgbGliVXRpbHMgZnJvbSAnLi4vbGliL3V0aWwnO1xyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgZXJyb3JIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcbmltcG9ydCBFeGNlbFJlYWRlciBmcm9tICcuLi9saWIvcGFyYW0tcmVhZGVyLWV4Y2VsJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFV0aWxzTW9kdWxlIGV4dGVuZHMgT3h5Z2VuTW9kdWxlIHtcclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGNvbnRleHQsIHJzLCBsb2dnZXIsIG1vZHVsZXMsIHNlcnZpY2VzKSB7XHJcbiAgICAgICAgc3VwZXIob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpO1xyXG4gICAgICAgIHRoaXMuX2Fsd2F5c0luaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogQHN1bW1hcnkgR2V0cyBtb2R1bGUgbmFtZVxyXG4gICAgICogQGZ1bmN0aW9uIG5hbWVcclxuICAgICAqIEByZXR1cm4ge1N0cmluZ30gQ29uc3RhbnQgdmFsdWUgXCJ1dGlsc1wiLlxyXG4gICAgICovXHJcbiAgICBnZXQgbmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gTU9EVUxFX05BTUU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBQYXVzZSB0ZXN0IGV4ZWN1dGlvbiBmb3IgdGhlIGdpdmVuIGFtb3VudCBvZiBtaWxsaXNlY29uZHMuXHJcbiAgICAgKiBAZnVuY3Rpb24gcGF1c2VcclxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBtcyAtIE1pbGxpc2Vjb25kcyB0byBwYXVzZSB0aGUgZXhlY3V0aW9uIGZvci5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgcGF1c2UobXMpIHtcclxuICAgICAgICB1dGlscy5hc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlKG1zLCAnbXMnKTtcclxuICAgICAgICBhd2FpdCBsaWJVdGlscy5zbGVlcChtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBEZWNyeXB0IHRleHRcclxuICAgICAqIEBmdW5jdGlvbiBkZWNyeXB0XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdGV4dCAtIFRleHRcclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gRGVjcnlwdFJlc3VsdCBPYmplY3Qgd2l0aCBnZXREZWNyeXB0UmVzdWx0IG1ldGhvZFxyXG4gICAgICogQGV4YW1wbGUgPGNhcHRpb24+W2phdmFzY3JpcHRdIFVzYWdlIGV4YW1wbGU8L2NhcHRpb24+XHJcbiAgICAgKiAvLyB0byBlbmNyeXB0IHBsYWludGV4dCBpbnRvIGNpcGhlcnRleHQgXHJcbiAgICAgKiBjb25zdCBlbmNyeXB0ID0gdXRpbHMuZW5jcnlwdCgnaHR0cHM6Ly93d3cud2lraXBlZGlhLm9yZycpO1xyXG4gICAgICogbG9nLmluZm8oZW5jcnlwdCk7IC8vIHdpbGwgcHJpbnQgYjc1N2JhMmMyZmM1MGZiYjUxMWQ1OTY4MTZjYTA2YzRmYTU2ZjRlOThjZTIyMmYzMGJjNThkNTI1MWVkNjM1ZVxyXG4gICAgICogXHJcbiAgICAgKiAvLyB0byBkZWNyeXB0IGNpcGhlcnRleHQgYW5kIHVzZSBpdCBpbiBzY3JpcHQgIFxyXG4gICAgICogY29uc3QgZGVjcnlwdCA9IHV0aWxzLmRlY3J5cHQoZW5jcnlwdCk7XHJcbiAgICAgKiBsb2cuaW5mbyhkZWNyeXB0KTsgLy8gd2lsbCBwcmludCBFTkNSWVBURURcclxuICAgICAqIFxyXG4gICAgICogd2ViLmluaXQoKTtcclxuICAgICAqIHdlYi5vcGVuKGRlY3J5cHQpOyAvLyB3aWxsIG9wZW4gaHR0cHM6Ly93d3cud2lraXBlZGlhLm9yZ1xyXG4gICAgICogXHJcbiAgICAgKiAvLyB0byBnZXQgb3JpZ2luYWwgcGxhaW50ZXh0IHVzZSBnZXREZWNyeXB0UmVzdWx0XHJcbiAgICAgKiBjb25zdCB2YWx1ZSA9IGRlY3J5cHQuZ2V0RGVjcnlwdFJlc3VsdCgpO1xyXG4gICAgICogbG9nLmluZm8odmFsdWUpOyAvL3dpbGwgcHJpbnQgaHR0cHM6Ly93d3cud2lraXBlZGlhLm9yZ1xyXG4gICAgICovXHJcbiAgICBkZWNyeXB0KHRleHQpIHtcclxuICAgICAgICByZXR1cm4gbGliVXRpbHMuZGVjcnlwdCh0ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IEVuY3J5cHQgdGV4dFxyXG4gICAgICogQGZ1bmN0aW9uIGVuY3J5cHRcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IC0gVGV4dFxyXG4gICAgICogQHJldHVybiB7U3RyaW5nfSBFbmNyeXB0ZWQgdGV4dFxyXG4gICAgICogQGV4YW1wbGUgPGNhcHRpb24+W2phdmFzY3JpcHRdIFVzYWdlIGV4YW1wbGU8L2NhcHRpb24+XHJcbiAgICAgKiAvLyB0byBlbmNyeXB0IHBsYWludGV4dCBpbnRvIGNpcGhlcnRleHQgXHJcbiAgICAgKiBjb25zdCBlbmNyeXB0ID0gdXRpbHMuZW5jcnlwdCgnaHR0cHM6Ly93d3cud2lraXBlZGlhLm9yZycpO1xyXG4gICAgICogbG9nLmluZm8oZW5jcnlwdCk7IC8vIHdpbGwgcHJpbnQgYjc1N2JhMmMyZmM1MGZiYjUxMWQ1OTY4MTZjYTA2YzRmYTU2ZjRlOThjZTIyMmYzMGJjNThkNTI1MWVkNjM1ZVxyXG4gICAgICogXHJcbiAgICAgKiAvLyB0byBkZWNyeXB0IGNpcGhlcnRleHQgYW5kIHVzZSBpdCBpbiBzY3JpcHQgIFxyXG4gICAgICogY29uc3QgZGVjcnlwdCA9IHV0aWxzLmRlY3J5cHQoZW5jcnlwdCk7XHJcbiAgICAgKiBsb2cuaW5mbyhkZWNyeXB0KTsgLy8gd2lsbCBwcmludCBFTkNSWVBURURcclxuICAgICAqIFxyXG4gICAgICogd2ViLmluaXQoKTtcclxuICAgICAqIHdlYi5vcGVuKGRlY3J5cHQpOyAvLyB3aWxsIG9wZW4gaHR0cHM6Ly93d3cud2lraXBlZGlhLm9yZ1xyXG4gICAgICogXHJcbiAgICAgKiAvLyB0byBnZXQgb3JpZ2luYWwgcGxhaW50ZXh0IHVzZSBnZXREZWNyeXB0UmVzdWx0XHJcbiAgICAgKiBjb25zdCB2YWx1ZSA9IGRlY3J5cHQuZ2V0RGVjcnlwdFJlc3VsdCgpO1xyXG4gICAgICogbG9nLmluZm8odmFsdWUpOyAvL3dpbGwgcHJpbnQgaHR0cHM6Ly93d3cud2lraXBlZGlhLm9yZ1xyXG4gICAgICovXHJcbiAgICBlbmNyeXB0KHRleHQpIHtcclxuICAgICAgICByZXR1cm4gbGliVXRpbHMuZW5jcnlwdCh0ZXh0KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgUmVhZHMgZGF0YSBmcm9tIGNzdiBmaWxlXHJcbiAgICAgKiBAZnVuY3Rpb24gcmVhZENzdlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGZpbGVQYXRoIC0gQWJzb2x1dGUgcGF0aCB0byBmaWxlXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBbT3B0aW9uc10oaHR0cHM6Ly9jc3YuanMub3JnL3BhcnNlL29wdGlvbnMvKVxyXG4gICAgICovXHJcbiAgICByZWFkQ3N2KGZpbGVQYXRoLCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICBjb25zdCBwYXJzZSA9IHJlcXVpcmUoJ2Nzdi1wYXJzZS9saWIvc3luYycpO1xyXG4gICAgICAgIHZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7XHJcbiAgICAgICAgdmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XHJcblxyXG4gICAgICAgIHZhciBleHQgPSBwYXRoLmV4dG5hbWUoZmlsZVBhdGgpO1xyXG4gICAgICAgIGlmIChleHQgIT09ICcuY3N2JyAmJiBleHQgIT09ICcudHh0Jykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuQ1NWX0VSUk9SLCAnVW5zdXBwb3J0ZWQgZmlsZSBleHRlbnNpb246ICcgKyBleHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGRhdGE7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZGF0YSA9IGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0ZjgnKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5DU1ZfRVJST1IsICdVbmFibGUgdG8gcmVhZCBwYXJhbWV0ZXJzIGZpbGU6ICcgKyBlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENTVnMgcHJvZHVjZWQgYnkgT1MgWCBFeGNlbCBoYXZlIGhlYWRlciB0ZXJtaW5hdGVkIHdpdGggMGQwZDBhXHJcbiAgICAgICAgZGF0YSA9IGRhdGEucmVwbGFjZSgvXFxyXFxyL2csICdcXHInKTtcclxuXHJcbiAgICAgICAgLy8gc3RyaXAgQk9NIGZvciBVVEYtOFxyXG4gICAgICAgIHZhciBib20gPSBmYWxzZTtcclxuICAgICAgICAvLyBjYXRjaGVzIDB4RUZCQkJGIChVVEYtOCBCT00pIGJlY2F1c2UgdGhlIGJ1ZmZlci10by1zdHJpbmdcclxuICAgICAgICAvLyBjb252ZXJzaW9uIHRyYW5zbGF0ZXMgaXQgdG8gMHhGRUZGIChVVEYtMTYgQk9NKVxyXG4gICAgICAgIGlmIChkYXRhLmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xyXG4gICAgICAgICAgICBib20gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdmFyIHRhYmxlID0gcGFyc2UoZGF0YSwgeyBib206IGJvbSwgY29sdW1uczogdHJ1ZSwgdHJpbTogdHJ1ZSwgLi4ub3B0aW9ucyB9KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5DU1ZfRVJST1IsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGFibGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBXcml0ZXMgZGF0YSBpbnRvIGNzdiBmaWxlXHJcbiAgICAgKiBAZnVuY3Rpb24gd3JpdGVDc3ZcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmaWxlUGF0aCAtIEFic29sdXRlIHBhdGggdG8gZmlsZVxyXG4gICAgICogQHBhcmFtIHtBcnJheX0gZGF0YSAtIENTViBkYXRhIGluIGZvcm1hdCBbe2NvbHVtbl9uYW1lXzE6ICdmb28nLCBjb2x1bW5fbmFtZV8yOiAnYmFyJ31dXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBbT3B0aW9uc10oaHR0cHM6Ly9naXRodWIuY29tL2FudG9uLWJvdC9vYmplY3RzLXRvLWNzdiNhc3luYy10b2Rpc2tmaWxlbmFtZS1vcHRpb25zKVxyXG4gICAgICovXHJcbiAgICBhc3luYyB3cml0ZUNzdihmaWxlUGF0aCwgZGF0YSwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgT2JqZWN0c1RvQ3N2ID0gcmVxdWlyZSgnb2JqZWN0cy10by1jc3YnKTtcclxuICAgICAgICAgICAgY29uc3QgY3N2ID0gbmV3IE9iamVjdHNUb0NzdihkYXRhKTtcclxuICAgICAgICAgICAgYXdhaXQgY3N2LnRvRGlzayhmaWxlUGF0aCwgeyBhbGxDb2x1bW5zOiB0cnVlLCAuLi5vcHRpb25zIH0pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLkNTVl9FUlJPUiwgZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBSZWFkcyBkYXRhIGZyb20gWGxzeCBmaWxlXHJcbiAgICAgKiBAZnVuY3Rpb24gcmVhZFhsc3hcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmaWxlUGF0aCAtIEFic29sdXRlIHBhdGggdG8gZmlsZVxyXG4gICAgICogQHJldHVybiB7QXJyYXl9IC0gQXJyYXkgb2YgeGxzeCBkYXRhXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHJlYWRYbHN4KGZpbGVQYXRoKSB7XHJcbiAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEV4Y2VsUmVhZGVyKCk7XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlYWRlci5yZWFkKGZpbGVQYXRoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFVzZXMgdGhlIEROUyBwcm90b2NvbCB0byByZXNvbHZlIGEgaG9zdCBuYW1lXHJcbiAgICAgKiBAZnVuY3Rpb24gZG5zUmVzb2x2ZVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGhvc3RuYW1lIC0gSG9zdCBuYW1lIHRvIHJlc29sdmUuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IHJyVHlwZSAtIFJlc291cmNlIHJlY29yZCB0eXBlLiBEZWZhdWx0OiAnQScuXHJcbiAgICAgKiBAcmV0dXJuIHtTdHJpbmdbXSB8IE9iamVjdH0gLSBBcnJheSBvciBPYmplY3Qgb2YgcmVzb3VyY2UgcmVjb3Jkcy4gVGhlIHR5cGUgYW5kIHN0cnVjdHVyZSBvZiBpbmRpdmlkdWFsIHJlc3VsdHMgdmFyeSBiYXNlZCBvbiBycnR5cGVcclxuICAgICAqL1xyXG4gICAgYXN5bmMgZG5zUmVzb2x2ZShob3N0bmFtZSwgcnJUeXBlID0gJ0EnKSB7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyhob3N0bmFtZSwgJ2hvc3RuYW1lJyk7XHJcbiAgICAgICAgY29uc3QgcnJUeXBlcyA9IFsnQScsICdBQUFBJywgJ0FOWScsICdDTkFNRScsICdNWCcsICdOQVBUUicsICdOUycsICdQVFInLCAnU09BJywgJ1NSVicsICdUWFQnXTtcclxuXHJcbiAgICAgICAgaWYgKCFyclR5cGVzLmluY2x1ZGVzKHJyVHlwZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgYEludmFsaWQgYXJndW1lbnQgLSAncnJUeXBlJy4gQXZhaWxhYmxlIHJyVHlwZSB2YWx1ZXM6ICR7cnJUeXBlcy5qb2luKCcsICcpfWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZG5zUHJvbWlzZXMgPSByZXF1aXJlKCdkbnMnKS5wcm9taXNlcztcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgZG5zUHJvbWlzZXMucmVzb2x2ZShob3N0bmFtZSwgcnJUeXBlKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5ETlNfRVJST1IsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgUGFyc2UgWE1MIGRhdGEgdG8gSlMgb2JqZWN0IFxyXG4gICAgICogQGZ1bmN0aW9uIHhtbFRvSnNvblxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd8QnVmZmVyfSB4bWxEYXRhU3RyIC0gTGlrZSA8cm9vdCBhPVwibmljZVwiIGI9XCJ2ZXJ5IG5pY2VcIiA+PGE+d293PC9hPjwvcm9vdD5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbnxPYmplY3R9IG9wdGlvbnMgLSBbT3B0aW9uc10oaHR0cHM6Ly9naXRodWIuY29tL05hdHVyYWxJbnRlbGxpZ2VuY2UvZmFzdC14bWwtcGFyc2VyL2Jsb2IvbWFzdGVyL2RvY3MvdjQvMi5YTUxwYXJzZU9wdGlvbnMubWQpIFxyXG4gICAgICovXHJcbiAgICB4bWxUb0pzb24oeG1sRGF0YVN0ciwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcGFyc2VyID0gbmV3IGZhc3RYbWxQYXJzZXIuWE1MUGFyc2VyKG9wdGlvbnMpO1xyXG4gICAgICAgICAgICBjb25zdCBvdXRwdXQgPSBwYXJzZXIucGFyc2UoeG1sRGF0YVN0cik7XHJcbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuWE1MX0VSUk9SLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IE9wZW5zIG5ldyB0cmFuc2FjdGlvbi5cclxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgdHJhbnNhY3Rpb24gd2lsbCBwZXJzaXN0IHVudGlsbCBhIG5ldyBvbmUgaXMgb3BlbmVkLiBUcmFuc2FjdGlvbiBuYW1lcyBtdXN0IGJlIHVuaXF1ZS5cclxuICAgICAqIEBmdW5jdGlvbiB0cmFuc2FjdGlvblxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgLSBUaGUgdHJhbnNhY3Rpb24gbmFtZS5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgdHJhbnNhY3Rpb24obmFtZSkge1xyXG4gICAgICAgIGlmICghbmFtZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGp1c3QgaW4gY2FzZSB1c2VyIHBhc3NlZCBhIGNvbXBsZXggb2JqZWN0IGJ5IG1pc3Rha2VcclxuICAgICAgICBuYW1lID0gbmFtZS50b1N0cmluZygpO1xyXG5cclxuICAgICAgICAvLyBsaW1pdCB0aGUgbmFtZSBsZW5ndGggKHNpbmNlIHdlIGNhbid0IHN0b3JlIHZhbHVlcyBsYXJnZXIgdGhhbiA1MTJCIGluIHRoZSBkYXRhYmFzZSlcclxuICAgICAgICBuYW1lID0gbmFtZS5zbGljZSgwLCA1MTIpO1xyXG5cclxuICAgICAgICBnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUgPSBuYW1lO1xyXG4gICAgfVxyXG59Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBZUEsSUFB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
|