oxygen-cli 1.25.0-beta.2 → 1.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.husky/pre-commit +4 -0
- package/CHANGELOG.md +65 -0
- package/build/core/OxygenCore.js +36 -257
- package/build/core/OxygenEvents.js +1 -11
- package/build/core/OxygenModule.js +1 -14
- package/build/core/OxygenService.js +1 -12
- package/build/core/OxygenSubModule.js +1 -10
- package/build/core/WebDriverModule.js +1 -30
- package/build/core/utils.js +1 -17
- package/build/errors/HookError.js +1 -7
- package/build/errors/ModuleError.js +1 -7
- package/build/errors/ModuleUnavailableError.js +1 -3
- package/build/errors/OxygenError.js +1 -33
- package/build/errors/ScriptNotFound.js +1 -7
- package/build/errors/helper.js +46 -77
- package/build/index.js +6 -18
- package/build/lib/cli-util.js +28 -90
- package/build/lib/cli.js +1 -23
- package/build/lib/debugger.js +1 -144
- package/build/lib/img-merge.js +1 -15
- package/build/lib/launcher.js +1 -28
- package/build/lib/moduleRequire.js +1 -4
- package/build/lib/param-manager.js +1 -28
- package/build/lib/param-reader-csv.js +1 -15
- package/build/lib/param-reader-excel.js +1 -14
- package/build/lib/param-reader-json.js +1 -10
- package/build/lib/util.js +3 -58
- package/build/model/case-result.js +1 -2
- package/build/model/failure.js +1 -2
- package/build/model/status.js +1 -2
- package/build/model/step-result.js +1 -2
- package/build/model/suite-result.js +1 -2
- package/build/model/test-result.js +1 -2
- package/build/model/testcase.js +1 -2
- package/build/model/testsuite.js +1 -2
- package/build/ox_modules/index.js +13 -33
- package/build/ox_modules/module-assert.js +8 -24
- package/build/ox_modules/module-date.js +3 -8
- package/build/ox_modules/module-db.js +7 -28
- package/build/ox_modules/module-email.js +10 -36
- package/build/ox_modules/module-eyes.js +5 -46
- package/build/ox_modules/module-http.js +42 -104
- package/build/ox_modules/module-log.js +5 -22
- package/build/ox_modules/module-mailinator.js +10 -32
- package/build/ox_modules/module-mob/commands/alertAccept.js +1 -2
- package/build/ox_modules/module-mob/commands/alertDismiss.js +1 -2
- package/build/ox_modules/module-mob/commands/assertAlert.js +1 -6
- package/build/ox_modules/module-mob/commands/assertText.js +1 -3
- package/build/ox_modules/module-mob/commands/assertTitle.js +1 -4
- package/build/ox_modules/module-mob/commands/assertValue.js +9 -15
- package/build/ox_modules/module-mob/commands/back.js +1 -2
- package/build/ox_modules/module-mob/commands/clear.js +1 -4
- package/build/ox_modules/module-mob/commands/click.js +3 -4
- package/build/ox_modules/module-mob/commands/clickHidden.js +3 -9
- package/build/ox_modules/module-mob/commands/clickLong.js +1 -2
- package/build/ox_modules/module-mob/commands/clickMultipleTimes.js +1 -4
- package/build/ox_modules/module-mob/commands/closeApp.js +1 -2
- package/build/ox_modules/module-mob/commands/debug.js +2 -2
- package/build/ox_modules/module-mob/commands/dragAndDrop.js +1 -2
- package/build/ox_modules/module-mob/commands/enableNetwork.js +4 -12
- package/build/ox_modules/module-mob/commands/execute.js +1 -2
- package/build/ox_modules/module-mob/commands/findElement.js +1 -3
- package/build/ox_modules/module-mob/commands/findElements.js +1 -4
- package/build/ox_modules/module-mob/commands/getAlertText.js +1 -2
- package/build/ox_modules/module-mob/commands/getAppiumLogs.js +1 -2
- package/build/ox_modules/module-mob/commands/getBrowserLogs.js +1 -10
- package/build/ox_modules/module-mob/commands/getCurrentActivity.js +1 -2
- package/build/ox_modules/module-mob/commands/getCurrentPackage.js +1 -2
- package/build/ox_modules/module-mob/commands/getDeviceLogs.js +1 -9
- package/build/ox_modules/module-mob/commands/getDeviceTime.js +1 -2
- package/build/ox_modules/module-mob/commands/getLocation.js +1 -2
- package/build/ox_modules/module-mob/commands/getSource.js +1 -2
- package/build/ox_modules/module-mob/commands/getText.js +1 -4
- package/build/ox_modules/module-mob/commands/getTitle.js +1 -2
- package/build/ox_modules/module-mob/commands/getUrl.js +1 -2
- package/build/ox_modules/module-mob/commands/getValue.js +5 -9
- package/build/ox_modules/module-mob/commands/getWindowHandles.js +1 -2
- package/build/ox_modules/module-mob/commands/hideKeyboard.js +1 -2
- package/build/ox_modules/module-mob/commands/index.js +19 -94
- package/build/ox_modules/module-mob/commands/installApp.js +1 -2
- package/build/ox_modules/module-mob/commands/isAppInstalled.js +1 -2
- package/build/ox_modules/module-mob/commands/isCheckable.js +1 -2
- package/build/ox_modules/module-mob/commands/isChecked.js +1 -2
- package/build/ox_modules/module-mob/commands/isClickable.js +1 -2
- package/build/ox_modules/module-mob/commands/isExist.js +1 -3
- package/build/ox_modules/module-mob/commands/isSelected.js +1 -2
- package/build/ox_modules/module-mob/commands/isVisible.js +1 -3
- package/build/ox_modules/module-mob/commands/isWebViewContext.js +1 -2
- package/build/ox_modules/module-mob/commands/launchApp.js +1 -2
- package/build/ox_modules/module-mob/commands/longPressKeyCode.js +1 -2
- package/build/ox_modules/module-mob/commands/open.js +1 -3
- package/build/ox_modules/module-mob/commands/pause.js +1 -2
- package/build/ox_modules/module-mob/commands/removeApp.js +1 -2
- package/build/ox_modules/module-mob/commands/resetApp.js +1 -2
- package/build/ox_modules/module-mob/commands/scrollIntoElement.js +1 -6
- package/build/ox_modules/module-mob/commands/scrollIntoView.js +1 -2
- package/build/ox_modules/module-mob/commands/select.js +1 -4
- package/build/ox_modules/module-mob/commands/selectFrame.js +1 -4
- package/build/ox_modules/module-mob/commands/selectWindow.js +5 -26
- package/build/ox_modules/module-mob/commands/sendKeys.js +6 -9
- package/build/ox_modules/module-mob/commands/setContext.js +1 -2
- package/build/ox_modules/module-mob/commands/setNativeContext.js +1 -2
- package/build/ox_modules/module-mob/commands/setTimeout.js +1 -2
- package/build/ox_modules/module-mob/commands/setWebViewContext.js +3 -6
- package/build/ox_modules/module-mob/commands/shake.js +1 -2
- package/build/ox_modules/module-mob/commands/smsClickLink.js +1 -2
- package/build/ox_modules/module-mob/commands/smsGetText.js +3 -6
- package/build/ox_modules/module-mob/commands/swipe.js +1 -2
- package/build/ox_modules/module-mob/commands/swipeElement.js +1 -2
- package/build/ox_modules/module-mob/commands/swipeScreen.js +1 -2
- package/build/ox_modules/module-mob/commands/takeScreenshot.js +1 -2
- package/build/ox_modules/module-mob/commands/tap.js +1 -2
- package/build/ox_modules/module-mob/commands/type.js +3 -7
- package/build/ox_modules/module-mob/commands/unlockPattern.js +9 -10
- package/build/ox_modules/module-mob/commands/waitForExist.js +1 -2
- package/build/ox_modules/module-mob/commands/waitForInteractable.js +1 -3
- package/build/ox_modules/module-mob/commands/waitForVisible.js +1 -2
- package/build/ox_modules/module-mob.js +72 -142
- package/build/ox_modules/module-pdf.js +23 -62
- package/build/ox_modules/module-proxy.js +8 -68
- package/build/ox_modules/module-serial.js +7 -32
- package/build/ox_modules/module-shell.js +8 -27
- package/build/ox_modules/module-soap.js +14 -47
- package/build/ox_modules/module-twilio.js +10 -53
- package/build/ox_modules/module-utils.js +16 -51
- package/build/ox_modules/module-web/commands/alertAccept.js +1 -2
- package/build/ox_modules/module-web/commands/alertDismiss.js +1 -2
- package/build/ox_modules/module-web/commands/assertAlert.js +1 -6
- package/build/ox_modules/module-web/commands/assertExist.js +1 -2
- package/build/ox_modules/module-web/commands/assertSelectedLabel.js +1 -4
- package/build/ox_modules/module-web/commands/assertSelectedValue.js +1 -3
- package/build/ox_modules/module-web/commands/assertText.js +1 -3
- package/build/ox_modules/module-web/commands/assertTextNotPresent.js +1 -6
- package/build/ox_modules/module-web/commands/assertTextPresent.js +1 -6
- package/build/ox_modules/module-web/commands/assertTitle.js +1 -3
- package/build/ox_modules/module-web/commands/assertValue.js +1 -3
- package/build/ox_modules/module-web/commands/back.js +1 -2
- package/build/ox_modules/module-web/commands/clear.js +1 -5
- package/build/ox_modules/module-web/commands/click.js +4 -13
- package/build/ox_modules/module-web/commands/clickHidden.js +2 -7
- package/build/ox_modules/module-web/commands/closeWindow.js +1 -2
- package/build/ox_modules/module-web/commands/debug.js +2 -2
- package/build/ox_modules/module-web/commands/deleteCookies.js +1 -2
- package/build/ox_modules/module-web/commands/deselect.js +1 -2
- package/build/ox_modules/module-web/commands/doubleClick.js +3 -9
- package/build/ox_modules/module-web/commands/dragAndDrop.js +1 -2
- package/build/ox_modules/module-web/commands/execute.js +1 -2
- package/build/ox_modules/module-web/commands/fileBrowse.js +4 -10
- package/build/ox_modules/module-web/commands/findElement.js +1 -3
- package/build/ox_modules/module-web/commands/findElements.js +1 -4
- package/build/ox_modules/module-web/commands/fullscreenWindow.js +1 -2
- package/build/ox_modules/module-web/commands/getAlertText.js +1 -2
- package/build/ox_modules/module-web/commands/getAttribute.js +1 -4
- package/build/ox_modules/module-web/commands/getBrowserLogs.js +1 -3
- package/build/ox_modules/module-web/commands/getCookies.js +1 -2
- package/build/ox_modules/module-web/commands/getCssValue.js +1 -4
- package/build/ox_modules/module-web/commands/getElementCount.js +1 -2
- package/build/ox_modules/module-web/commands/getHTML.js +1 -2
- package/build/ox_modules/module-web/commands/getSource.js +1 -2
- package/build/ox_modules/module-web/commands/getText.js +1 -4
- package/build/ox_modules/module-web/commands/getTitle.js +1 -2
- package/build/ox_modules/module-web/commands/getUrl.js +1 -2
- package/build/ox_modules/module-web/commands/getValue.js +1 -5
- package/build/ox_modules/module-web/commands/getWindowHandles.js +1 -2
- package/build/ox_modules/module-web/commands/getWindowSize.js +1 -2
- package/build/ox_modules/module-web/commands/getXMLPageSource.js +1 -5
- package/build/ox_modules/module-web/commands/index.js +26 -99
- package/build/ox_modules/module-web/commands/isAlertPresent.js +1 -2
- package/build/ox_modules/module-web/commands/isChecked.js +1 -2
- package/build/ox_modules/module-web/commands/isExist.js +1 -3
- package/build/ox_modules/module-web/commands/isInteractable.js +33 -0
- package/build/ox_modules/module-web/commands/isSelected.js +1 -2
- package/build/ox_modules/module-web/commands/isVisible.js +1 -3
- package/build/ox_modules/module-web/commands/makeVisible.js +2 -10
- package/build/ox_modules/module-web/commands/maximizeWindow.js +1 -2
- package/build/ox_modules/module-web/commands/minimizeWindow.js +1 -2
- package/build/ox_modules/module-web/commands/newWindow.js +1 -2
- package/build/ox_modules/module-web/commands/open.js +1 -4
- package/build/ox_modules/module-web/commands/pause.js +1 -2
- package/build/ox_modules/module-web/commands/point.js +1 -2
- package/build/ox_modules/module-web/commands/pointJS.js +2 -8
- package/build/ox_modules/module-web/commands/refresh.js +1 -2
- package/build/ox_modules/module-web/commands/rightClick.js +3 -8
- package/build/ox_modules/module-web/commands/rightClickActions.js +1 -2
- package/build/ox_modules/module-web/commands/scrollToElement.js +1 -2
- package/build/ox_modules/module-web/commands/select.js +1 -5
- package/build/ox_modules/module-web/commands/selectFrame.js +1 -3
- package/build/ox_modules/module-web/commands/selectWindow.js +5 -26
- package/build/ox_modules/module-web/commands/sendKeys.js +3 -6
- package/build/ox_modules/module-web/commands/setAutoWaitForAngular.js +2 -2
- package/build/ox_modules/module-web/commands/setTimeout.js +1 -2
- package/build/ox_modules/module-web/commands/setWindowSize.js +1 -2
- package/build/ox_modules/module-web/commands/takeScreenshot.js +3 -5
- package/build/ox_modules/module-web/commands/type.js +1 -5
- package/build/ox_modules/module-web/commands/waitForAngular.js +6 -11
- package/build/ox_modules/module-web/commands/waitForExist.js +1 -2
- package/build/ox_modules/module-web/commands/waitForInteractable.js +1 -2
- package/build/ox_modules/module-web/commands/waitForNotExist.js +1 -8
- package/build/ox_modules/module-web/commands/waitForNotText.js +3 -5
- package/build/ox_modules/module-web/commands/waitForNotValue.js +3 -5
- package/build/ox_modules/module-web/commands/waitForText.js +3 -5
- package/build/ox_modules/module-web/commands/waitForValue.js +3 -5
- package/build/ox_modules/module-web/commands/waitForVisible.js +1 -2
- package/build/ox_modules/module-web/commands/waitForWindow.js +4 -21
- package/build/ox_modules/module-web.js +86 -192
- package/build/ox_modules/module-win/commands/assertText.js +1 -3
- package/build/ox_modules/module-win/commands/assertTitle.js +1 -4
- package/build/ox_modules/module-win/commands/assertValue.js +9 -15
- package/build/ox_modules/module-win/commands/back.js +1 -2
- package/build/ox_modules/module-win/commands/clear.js +1 -4
- package/build/ox_modules/module-win/commands/click.js +1 -2
- package/build/ox_modules/module-win/commands/clickLong.js +1 -2
- package/build/ox_modules/module-win/commands/clickMultipleTimes.js +1 -4
- package/build/ox_modules/module-win/commands/findElement.js +1 -3
- package/build/ox_modules/module-win/commands/findElements.js +1 -4
- package/build/ox_modules/module-win/commands/getAppiumLogs.js +1 -2
- package/build/ox_modules/module-win/commands/getCurrentWindowHandle.js +1 -2
- package/build/ox_modules/module-win/commands/getLocation.js +1 -2
- package/build/ox_modules/module-win/commands/getSource.js +1 -2
- package/build/ox_modules/module-win/commands/getText.js +1 -4
- package/build/ox_modules/module-win/commands/getValue.js +5 -9
- package/build/ox_modules/module-win/commands/getWindowHandles.js +1 -2
- package/build/ox_modules/module-win/commands/index.js +5 -43
- package/build/ox_modules/module-win/commands/isCheckable.js +1 -2
- package/build/ox_modules/module-win/commands/isChecked.js +1 -2
- package/build/ox_modules/module-win/commands/isClickable.js +1 -2
- package/build/ox_modules/module-win/commands/isExist.js +1 -3
- package/build/ox_modules/module-win/commands/isSelected.js +1 -2
- package/build/ox_modules/module-win/commands/isVisible.js +1 -3
- package/build/ox_modules/module-win/commands/open.js +1 -2
- package/build/ox_modules/module-win/commands/pause.js +1 -2
- package/build/ox_modules/module-win/commands/rightClick.js +1 -2
- package/build/ox_modules/module-win/commands/selectWindow.js +1 -15
- package/build/ox_modules/module-win/commands/sendKeys.js +1 -4
- package/build/ox_modules/module-win/commands/setTimeout.js +1 -2
- package/build/ox_modules/module-win/commands/takeScreenshot.js +1 -2
- package/build/ox_modules/module-win/commands/tap.js +1 -2
- package/build/ox_modules/module-win/commands/type.js +1 -4
- package/build/ox_modules/module-win/commands/waitForExist.js +1 -2
- package/build/ox_modules/module-win/commands/waitForInteractable.js +1 -4
- package/build/ox_modules/module-win/commands/waitForVisible.js +1 -2
- package/build/ox_modules/module-win.js +48 -87
- package/build/ox_modules/utils.js +22 -76
- package/build/ox_reporters/reporter-excel.js +1 -58
- package/build/ox_reporters/reporter-html.js +1 -28
- package/build/ox_reporters/reporter-json.js +1 -14
- package/build/ox_reporters/reporter-junit.js +1 -24
- package/build/ox_reporters/reporter-pdf.js +1 -19
- package/build/ox_reporters/reporter-xml.js +1 -17
- package/build/ox_services/service-devtools/submodule-network.js +3 -84
- package/build/ox_services/service-devtools.js +1 -23
- package/build/reporter/FileReporterBase.js +5 -44
- package/build/reporter/ReportAggregator.js +1 -65
- package/build/reporter/ReporterBase.js +1 -6
- package/build/runners/WorkerProcess.js +1 -99
- package/build/runners/cucumber/CucumberEventListener.js +4 -29
- package/build/runners/cucumber/CucumberReporter.js +1 -56
- package/build/runners/cucumber/CucumberWorker.js +1 -66
- package/build/runners/cucumber/index.js +1 -30
- package/build/runners/cucumber/worker.js +1 -18
- package/build/runners/index.js +1 -6
- package/build/runners/oxygen/OxygenWorker.js +20 -54
- package/build/runners/oxygen/index.js +17 -177
- package/build/runners/oxygen/worker.js +2 -25
- package/package.json +28 -29
|
@@ -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
6
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
|
-
|
|
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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwidXRpbHMiLCJyZXF1aXJlIiwiT3hFcnJvciIsIk94RXJyb3JDb250c3J1Y3RvciIsImVyckhlbHBlciIsImhlbHBlcnMiLCJfY2xpZW50IiwiaXNJbml0aWFsaXplZCIsInVuZGVmaW5lZCIsImluaXQiLCJhY2NvdW50U2lkIiwiYXV0aFRva2VuIiwiZ2V0TGFzdFNtcyIsInJlbW92ZU9uUmVhZCIsInRpbWVvdXQiLCJub3RPbGRlclRoYW4iLCJmcm9tTnVtYmVyIiwiYXNzZXJ0QXJndW1lbnRCb29sIiwiYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSIsImFzc2VydEFyZ3VtZW50U3RyaW5nIiwibXNnIiwibm93IiwiRGF0ZSIsImVhcmxpZXN0TWVzc2FnZURhdGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIm1lc3NhZ2VzIiwibGlzdCIsImRhdGVTZW50QWZ0ZXIiLCJlcnIiLCJfbXNnIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJkaXJlY3Rpb24iLCJmcm9tIiwiX21zZ0RhdGUiLCJwYXJzZSIsImRhdGVDcmVhdGVkIiwibGliVXRpbHMiLCJzbGVlcCIsImVycm9yQ29kZSIsIlRXSUxJT19FUlJPUiIsInNpZCIsInJlbW92ZSIsInRoZW4iLCJib2R5IiwiZ2V0TGFzdFNlbnRBcGlTbXMiLCJzZW5kU21zIiwidG8iLCJtZXNzYWdlIiwiYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyIsInJlc3BvbnNlIiwiY3JlYXRlIiwiY2F0Y2giLCJtb3JlSW5mbyIsImNvZGUiLCJhc3NlcnRBcmd1bWVudCIsInZhbCIsIm5hbWUiLCJjYWxsIiwiYXNzZXJ0QXJndW1lbnROdW1iZXIiLCJhc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbCIsImFzc2VydEFyZ3VtZW50VGltZW91dCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS10d2lsaW8uanMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWUgdHdpbGlvXHJcbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBtZXRob2RzIGZvciB3b3JraW5nIHdpdGggVHdpbGlvIHNlcnZpY2UuXHJcbiAqL1xyXG5pbXBvcnQgT3hFcnJvckNvbnRzcnVjdG9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbmltcG9ydCBsaWJVdGlscyBmcm9tICcuLi9saWIvdXRpbCc7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XHJcbiAgICBjb25zdCBPeEVycm9yID0gdGhpcy5PeEVycm9yID0gT3hFcnJvckNvbnRzcnVjdG9yO1xyXG4gICAgY29uc3QgZXJySGVscGVyID0gdGhpcy5lcnJIZWxwZXIgPSByZXF1aXJlKCcuLi9lcnJvcnMvaGVscGVyJyk7XHJcbiAgICBjb25zdCBoZWxwZXJzID0gdGhpcy5oZWxwZXJzID0ge307XHJcblxyXG4gICAgdmFyIF9jbGllbnQ7XHJcblxyXG4gICAgbW9kdWxlLmlzSW5pdGlhbGl6ZWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gX2NsaWVudCAhPT0gdW5kZWZpbmVkO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFNldCBUd2lsaW8gYXV0aGVudGljYXRpb24gZGV0YWlscy5cclxuICAgICAqIEBmdW5jdGlvbiBpbml0XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gYWNjb3VudFNpZCAtIEFjY291bnQgU0lELlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGF1dGhUb2tlbiAtIEF1dGhlbnRpY2F0aW9uIHRva2VuLlxyXG4gICAgICovXHJcbiAgICBtb2R1bGUuaW5pdCA9IGZ1bmN0aW9uKGFjY291bnRTaWQsIGF1dGhUb2tlbikge1xyXG4gICAgICAgIF9jbGllbnQgPSByZXF1aXJlKCd0d2lsaW8nKShhY2NvdW50U2lkLCBhdXRoVG9rZW4pO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFJldHJpZXZlcyBsYXN0IFNNUyBtZXNzYWdlLlxyXG4gICAgICogQGZ1bmN0aW9uIGdldExhc3RTbXNcclxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gcmVtb3ZlT25SZWFkIC0gU3BlY2lmaWVzIHdoZXRoZXIgdG8gZGVsZXRlIHRoZSBtZXNzYWdlIGFmdGVyIHJlYWRpbmcgaXQuXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gdGltZW91dCAtIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciB3YWl0aW5nIGZvciB0aGUgbWVzc2FnZSB0byBhcnJpdmUuXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcj19IG5vdE9sZGVyVGhhbiAtIFJldHJpZXZlIG1lc3NhZ2Ugb25seSBpZiBpdCBhcnJpdmVkIG5vdCBiZWZvcmUgdGhlIGdpdmVuIHRpbWUgKGluIG1zKS4gRGVmYXVsdCBpcyA0IG1pbnV0ZXMuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IGZyb21OdW1iZXIgLSBGcm9tIG51bWJlciB0byBmaWx0ZXIgbWVzc2FnZVxyXG4gICAgICogQHJldHVybiB7U3RyaW5nfSBTTVMgdGV4dC5cclxuICAgICAqL1xyXG4gICAgbW9kdWxlLmdldExhc3RTbXMgPSBhc3luYyBmdW5jdGlvbihyZW1vdmVPblJlYWQsIHRpbWVvdXQsIG5vdE9sZGVyVGhhbiwgZnJvbU51bWJlcikge1xyXG4gICAgICAgIGhlbHBlcnMuYXNzZXJ0QXJndW1lbnRCb29sKHJlbW92ZU9uUmVhZCwgJ3JlbW92ZU9uUmVhZCcpO1xyXG4gICAgICAgIGhlbHBlcnMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSh0aW1lb3V0LCAndGltZW91dCcpO1xyXG4gICAgICAgIGlmIChmcm9tTnVtYmVyKSB7XHJcbiAgICAgICAgICAgIGhlbHBlcnMuYXNzZXJ0QXJndW1lbnRTdHJpbmcoZnJvbU51bWJlciwgJ2Zyb21OdW1iZXInKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghbm90T2xkZXJUaGFuKSB7XHJcbiAgICAgICAgICAgIG5vdE9sZGVyVGhhbiA9IDQqNjAqMTAwMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG1zZztcclxuICAgICAgICB2YXIgbm93ID0gRGF0ZS5ub3coKTtcclxuICAgICAgICB2YXIgZWFybGllc3RNZXNzYWdlRGF0ZSA9IG5ldyBEYXRlKG5vdyAtIG5vdE9sZGVyVGhhbik7XHJcbiAgICAgICAgd2hpbGUgKCFtc2cgJiYgKERhdGUubm93KCkgLSBub3cpIDwgdGltZW91dCkge1xyXG4gICAgICAgICAgICBhd2FpdCAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBfY2xpZW50Lm1lc3NhZ2VzLmxpc3QoeyBkYXRlU2VudEFmdGVyOiBlYXJsaWVzdE1lc3NhZ2VEYXRlIH0sIGZ1bmN0aW9uKGVyciwgbWVzc2FnZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9tc2c7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlcyAmJiB0eXBlb2YgbWVzc2FnZXNbU3ltYm9sLml0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChfbXNnIG9mIG1lc3NhZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9tc2cuZGlyZWN0aW9uID09ICdpbmJvdW5kJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnJvbU51bWJlciAmJiBfbXNnLmZyb20gIT09IGZyb21OdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9tc2dEYXRlID0gRGF0ZS5wYXJzZShfbXNnLmRhdGVDcmVhdGVkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIG1lc3NhZ2UgaXMgbmV3ZXIgdGhhbiB0aGUgcHJldmlvdXMgb25lIC0gc2F2ZSBpdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1zZyAmJiBEYXRlLnBhcnNlKG1zZy5kYXRlQ3JlYXRlZCkgPCBfbXNnRGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IF9tc2c7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFtc2cpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBfbXNnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KSgpO1xyXG4gICAgICAgICAgICBhd2FpdCBsaWJVdGlscy5zbGVlcCg4MDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFtc2cpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5UV0lMSU9fRVJST1IsIFwiQ291bGRuJ3QgZ2V0IHRoZSBTTVMgd2l0aGluIFwiICsgdGltZW91dCArICdtcy4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZW1vdmVPblJlYWQpIHtcclxuICAgICAgICAgICAgYXdhaXQgKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2NsaWVudC5tZXNzYWdlcyhtc2cuc2lkKS5yZW1vdmUoKS50aGVuKCgpID0+IHsgcmVzb2x2ZSgpOyB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG1zZy5ib2R5O1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFJldHJpZXZlcyBsYXN0IFNNUyBtZXNzYWdlIHNlbnQgZnJvbSBBUEkuXHJcbiAgICAgKiBAZnVuY3Rpb24gZ2V0TGFzdFNlbnRBcGlTbXNcclxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gcmVtb3ZlT25SZWFkIC0gU3BlY2lmaWVzIHdoZXRoZXIgdG8gZGVsZXRlIHRoZSBtZXNzYWdlIGFmdGVyIHJlYWRpbmcgaXQuXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gdGltZW91dCAtIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciB3YWl0aW5nIGZvciB0aGUgbWVzc2FnZSB0byBhcnJpdmUuXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcj19IG5vdE9sZGVyVGhhbiAtIFJldHJpZXZlIG1lc3NhZ2Ugb25seSBpZiBpdCBhcnJpdmVkIG5vdCBiZWZvcmUgdGhlIGdpdmVuIHRpbWUgKGluIG1zKS4gRGVmYXVsdCBpcyA0IG1pbnV0ZXMuXHJcbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IFNNUyB0ZXh0LlxyXG4gICAgICovXHJcbiAgICBtb2R1bGUuZ2V0TGFzdFNlbnRBcGlTbXMgPSBhc3luYyBmdW5jdGlvbiAocmVtb3ZlT25SZWFkLCB0aW1lb3V0LCBub3RPbGRlclRoYW4pIHtcclxuICAgICAgICBoZWxwZXJzLmFzc2VydEFyZ3VtZW50Qm9vbChyZW1vdmVPblJlYWQsICdyZW1vdmVPblJlYWQnKTtcclxuICAgICAgICBoZWxwZXJzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUodGltZW91dCwgJ3RpbWVvdXQnKTtcclxuXHJcbiAgICAgICAgaWYgKCFub3RPbGRlclRoYW4pIHtcclxuICAgICAgICAgICAgbm90T2xkZXJUaGFuID0gNCAqIDYwICogMTAwMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBtc2c7XHJcbiAgICAgICAgdmFyIG5vdyA9IERhdGUubm93KCk7XHJcbiAgICAgICAgdmFyIGVhcmxpZXN0TWVzc2FnZURhdGUgPSBuZXcgRGF0ZShub3cgLSBub3RPbGRlclRoYW4pO1xyXG5cclxuICAgICAgICB3aGlsZSAoIW1zZyAmJiBEYXRlLm5vdygpIC0gbm93IDwgdGltZW91dCkge1xyXG4gICAgICAgICAgICBhd2FpdCAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBfY2xpZW50Lm1lc3NhZ2VzLmxpc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlU2VudEFmdGVyOiBlYXJsaWVzdE1lc3NhZ2VEYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgbWVzc2FnZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9tc2c7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZXMgJiYgdHlwZW9mIG1lc3NhZ2VzW1N5bWJvbC5pdGVyYXRvcl0gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoX21zZyBvZiBtZXNzYWdlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfbXNnLmRpcmVjdGlvbiA9PSAnb3V0Ym91bmQtYXBpJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX21zZ0RhdGUgPSBEYXRlLnBhcnNlKF9tc2cuZGF0ZUNyZWF0ZWQpOyAvLyBpZiBtZXNzYWdlIGlzIG5ld2VyIHRoYW4gdGhlIHByZXZpb3VzIG9uZSAtIHNhdmUgaXRcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtc2cgJiYgRGF0ZS5wYXJzZShtc2cuZGF0ZUNyZWF0ZWQpIDwgX21zZ0RhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IF9tc2c7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIW1zZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gX21zZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pKCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGxpYlV0aWxzLnNsZWVwKDgwMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIW1zZykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlRXSUxJT19FUlJPUiwgXCJDb3VsZG4ndCBnZXQgdGhlIFNNUyB3aXRoaW4gXCIgKyB0aW1lb3V0ICsgJ21zLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlbW92ZU9uUmVhZCkge1xyXG4gICAgICAgICAgICBhd2FpdCAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBfY2xpZW50Lm1lc3NhZ2VzKG1zZy5zaWQpLnJlbW92ZSgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSkoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBtc2cuYm9keTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBTZW5kIGFuIFNNUy5cclxuICAgICAqIEBmdW5jdGlvbiBzZW5kU21zXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZnJvbSAtIFBob25lIG51bWJlciB0byBzZW5kIGZyb20uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdG8gLSBQaG9uZSBudW1iZXIgdG8gc2VuZCB0by5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIC0gTWVzc2FnZSB0byBzZW5kLlxyXG4gICAgICogQHJldHVybiB7U3RyaW5nfSBNZXNzYWdlIFNJRC5cclxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPltqYXZhc2NyaXB0XSBVc2FnZSBleGFtcGxlPC9jYXB0aW9uPlxyXG4gICAgICogdHdpbGlvLmluaXQoJ0FjY291bnQgU2lkJywgJ0FjY291bnQgVG9rZW4nKTtcclxuICAgICAqIHR3aWxpby5zZW5kU21zKCcrMXh4eHh4eHh4eHgnLCAnKzk3Mnh4eHh4eHh4eCcsICdIZWxsbyBXb3JsZCEnKTtcclxuICAgICAqL1xyXG4gICAgbW9kdWxlLnNlbmRTbXMgPSBhc3luYyBmdW5jdGlvbihmcm9tLCB0bywgbWVzc2FnZSkge1xyXG4gICAgICAgIGhlbHBlcnMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyhmcm9tLCAnZnJvbScpO1xyXG4gICAgICAgIGhlbHBlcnMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyh0bywgJ3RvJyk7XHJcbiAgICAgICAgaGVscGVycy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nKG1lc3NhZ2UsICdtZXNzYWdlJyk7XHJcblxyXG4gICAgICAgIHZhciByZXNwb25zZSA9IG51bGw7XHJcblxyXG4gICAgICAgIGF3YWl0ICgoKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBfY2xpZW50Lm1lc3NhZ2VzLmNyZWF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9keTogbWVzc2FnZSxcclxuICAgICAgICAgICAgICAgICAgICBmcm9tOiBmcm9tLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvOiB0b1xyXG4gICAgICAgICAgICAgICAgfSkudGhlbihtZXNzYWdlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IG1lc3NhZ2Uuc2lkO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBlcnI7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pKCk7XHJcblxyXG4gICAgICAgIGlmIChyZXNwb25zZS5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIHZhciBtc2cgPSByZXNwb25zZS5tZXNzYWdlO1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UubW9yZUluZm8pIHtcclxuICAgICAgICAgICAgICAgIG1zZyArPSAnIEZvciBtb3JlIGluZm86ICcgKyByZXNwb25zZS5tb3JlSW5mbztcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5jb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBtc2cgPSAnVW5hYmxlIHRvIGNvbm5lY3QgdG8gVHdpbGlvOiAnICsgbXNnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuVFdJTElPX0VSUk9SLCBtc2cpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgfTtcclxuXHJcbiAgICBoZWxwZXJzLmFzc2VydEFyZ3VtZW50ID0gKHZhbCwgbmFtZSkgPT4gdXRpbHMuYXNzZXJ0QXJndW1lbnQuY2FsbCh0aGlzLCB2YWwsIG5hbWUpO1xyXG4gICAgaGVscGVycy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nID0gKHZhbCwgbmFtZSkgPT4gdXRpbHMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZy5jYWxsKHRoaXMsIHZhbCwgbmFtZSk7XHJcbiAgICBoZWxwZXJzLmFzc2VydEFyZ3VtZW50U3RyaW5nID0gKHZhbCwgbmFtZSkgPT4gdXRpbHMuYXNzZXJ0QXJndW1lbnRTdHJpbmcuY2FsbCh0aGlzLCB2YWwsIG5hbWUpO1xyXG4gICAgaGVscGVycy5hc3NlcnRBcmd1bWVudE51bWJlciA9ICh2YWwsIG5hbWUpID0+IHV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyLmNhbGwodGhpcywgdmFsLCBuYW1lKTtcclxuICAgIGhlbHBlcnMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSA9ICh2YWwsIG5hbWUpID0+IHV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUuY2FsbCh0aGlzLCB2YWwsIG5hbWUpO1xyXG4gICAgaGVscGVycy5hc3NlcnRBcmd1bWVudEJvb2wgPSAodmFsLCBuYW1lKSA9PiB1dGlscy5hc3NlcnRBcmd1bWVudEJvb2wuY2FsbCh0aGlzLCB2YWwsIG5hbWUpO1xyXG4gICAgaGVscGVycy5hc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbCA9ICh2YWwsIG5hbWUpID0+IHV0aWxzLmFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsLmNhbGwodGhpcywgdmFsLCBuYW1lKTtcclxuICAgIGhlbHBlcnMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0ID0gKHZhbCwgbmFtZSkgPT4gdXRpbHMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0LmNhbGwodGhpcywgdmFsLCBuYW1lKTtcclxuXHJcbiAgICByZXR1cm4gbW9kdWxlO1xyXG59O1xyXG4iXSwibWFwcGluZ3MiOiI7OztBQWFBO0FBQ0E7QUFBbUM7QUFkbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFJQUEsTUFBTSxDQUFDQyxPQUFPLEdBQUcsWUFBVztFQUN4QixNQUFNQyxLQUFLLEdBQUdDLE9BQU8sQ0FBQyxTQUFTLENB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
|
|
@@ -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
15
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
25
|
-
|
|
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/b0ea6358844ccca95cab02758e038c1c3321427e/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,8 +214,6 @@ class UtilsModule extends _OxygenModule.default {
|
|
|
247
214
|
throw new _OxygenError.default(_helper.default.errorCode.XML_ERROR, e.message);
|
|
248
215
|
}
|
|
249
216
|
}
|
|
250
|
-
|
|
251
217
|
}
|
|
252
|
-
|
|
253
218
|
exports.default = UtilsModule;
|
|
254
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS11dGlscy5qcyJdLCJuYW1lcyI6WyJNT0RVTEVfTkFNRSIsIlV0aWxzTW9kdWxlIiwiT3h5Z2VuTW9kdWxlIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwiY29udGV4dCIsInJzIiwibG9nZ2VyIiwibW9kdWxlcyIsInNlcnZpY2VzIiwiX2Fsd2F5c0luaXRpYWxpemVkIiwiX2lzSW5pdGlhbGl6ZWQiLCJuYW1lIiwicGF1c2UiLCJtcyIsInV0aWxzIiwiYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSIsImxpYlV0aWxzIiwic2xlZXAiLCJkZWNyeXB0IiwidGV4dCIsImVuY3J5cHQiLCJyZWFkQ3N2IiwiZmlsZVBhdGgiLCJwYXJzZSIsInJlcXVpcmUiLCJmcyIsInBhdGgiLCJleHQiLCJleHRuYW1lIiwiT3hFcnJvciIsImVycm9ySGVscGVyIiwiZXJyb3JDb2RlIiwiQ1NWX0VSUk9SIiwiZGF0YSIsInJlYWRGaWxlU3luYyIsImUiLCJyZXBsYWNlIiwiYm9tIiwiY2hhckNvZGVBdCIsInRhYmxlIiwiY29sdW1ucyIsInRyaW0iLCJtZXNzYWdlIiwid3JpdGVDc3YiLCJPYmplY3RzVG9Dc3YiLCJjc3YiLCJ0b0Rpc2siLCJhbGxDb2x1bW5zIiwicmVhZFhsc3giLCJyZWFkZXIiLCJFeGNlbFJlYWRlciIsInJlYWQiLCJkbnNSZXNvbHZlIiwiaG9zdG5hbWUiLCJyclR5cGUiLCJhc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nIiwicnJUeXBlcyIsImluY2x1ZGVzIiwiU0NSSVBUX0VSUk9SIiwiam9pbiIsImRuc1Byb21pc2VzIiwicHJvbWlzZXMiLCJyZXNvbHZlIiwiRE5TX0VSUk9SIiwieG1sVG9Kc29uIiwieG1sRGF0YVN0ciIsInBhcnNlciIsImZhc3RYbWxQYXJzZXIiLCJYTUxQYXJzZXIiLCJvdXRwdXQiLCJYTUxfRVJST1IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQWVBOztBQUNB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LE1BQU0sR0FBRyxJQUFJQyx1QkFBY0MsU0FBbEIsQ0FBNEJqRSxPQUE1QixDQUFmO0FBQ0EsWUFBTWtFLE1BQU0sR0FBR0gsTUFBTSxDQUFDM0MsS0FBUCxDQUFhMEMsVUFBYixDQUFmO0FBQ0EsYUFBT0ksTUFBUDtBQUNILEtBSkQsQ0FJRSxPQUFPbEMsQ0FBUCxFQUFVO0FBQ1IsWUFBTSxJQUFJTixvQkFBSixDQUFZQyxnQkFBWUMsU0FBWixDQUFzQnVDLFNBQWxDLEVBQTZDbkMsQ0FBQyxDQUFDTyxPQUEvQyxDQUFOO0FBQ0g7QUFDSjs7QUF2TGlEIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWUgdXRpbHNcclxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIG1pc2NlbGxhbmVvdXMgdXRpbGl0eSBtZXRob2RzLlxyXG4gKi9cclxuXHJcbmNvbnN0IE1PRFVMRV9OQU1FID0gJ3V0aWxzJztcclxuaW1wb3J0IGZhc3RYbWxQYXJzZXIgZnJvbSAnZmFzdC14bWwtcGFyc2VyJztcclxuaW1wb3J0IE94eWdlbk1vZHVsZSBmcm9tICcuLi9jb3JlL094eWdlbk1vZHVsZSc7XHJcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcclxuaW1wb3J0IGxpYlV0aWxzIGZyb20gJy4uL2xpYi91dGlsJztcclxuaW1wb3J0IE94RXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxuaW1wb3J0IGVycm9ySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5pbXBvcnQgRXhjZWxSZWFkZXIgZnJvbSAnLi4vbGliL3BhcmFtLXJlYWRlci1leGNlbCc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVdGlsc01vZHVsZSBleHRlbmRzIE94eWdlbk1vZHVsZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcykge1xyXG4gICAgICAgIHN1cGVyKG9wdGlvbnMsIGNvbnRleHQsIHJzLCBsb2dnZXIsIG1vZHVsZXMsIHNlcnZpY2VzKTtcclxuICAgICAgICB0aGlzLl9hbHdheXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIEBzdW1tYXJ5IEdldHMgbW9kdWxlIG5hbWVcclxuICAgICAqIEBmdW5jdGlvbiBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IENvbnN0YW50IHZhbHVlIFwidXRpbHNcIi5cclxuICAgICAqL1xyXG4gICAgZ2V0IG5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIE1PRFVMRV9OQU1FO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgUGF1c2UgdGVzdCBleGVjdXRpb24gZm9yIHRoZSBnaXZlbiBhbW91bnQgb2YgbWlsbGlzZWNvbmRzLlxyXG4gICAgICogQGZ1bmN0aW9uIHBhdXNlXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gbXMgLSBNaWxsaXNlY29uZHMgdG8gcGF1c2UgdGhlIGV4ZWN1dGlvbiBmb3IuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHBhdXNlKG1zKSB7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZShtcywgJ21zJyk7XHJcbiAgICAgICAgYXdhaXQgbGliVXRpbHMuc2xlZXAobXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgRGVjcnlwdCB0ZXh0XHJcbiAgICAgKiBAZnVuY3Rpb24gZGVjcnlwdFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHRleHQgLSBUZXh0XHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IERlY3J5cHRSZXN1bHQgT2JqZWN0IHdpdGggZ2V0RGVjcnlwdFJlc3VsdCBtZXRob2RcclxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPltqYXZhc2NyaXB0XSBVc2FnZSBleGFtcGxlPC9jYXB0aW9uPlxyXG4gICAgICogLy8gdG8gZW5jcnlwdCBwbGFpbnRleHQgaW50byBjaXBoZXJ0ZXh0IFxyXG4gICAgICogY29uc3QgZW5jcnlwdCA9IHV0aWxzLmVuY3J5cHQoJ2h0dHBzOi8vd3d3Lndpa2lwZWRpYS5vcmcvJyk7XHJcbiAgICAgKiBsb2cuaW5mbyhlbmNyeXB0KTsgLy8gd2lsbCBwcmludCBiNzU3YmEyYzJmYzUwZmJiNTExZDU5NjgxNmNhMDZjNGZhNTZmNGU5OGNlMjIyZjMwYmM1OGQ1MjUxZWQ2MzVlXHJcbiAgICAgKiBcclxuICAgICAqIC8vIHRvIGRlY3J5cHQgY2lwaGVydGV4dCBhbmQgdXNlIGl0IGluIHNjcmlwdCAgXHJcbiAgICAgKiBjb25zdCBkZWNyeXB0ID0gdXRpbHMuZGVjcnlwdChlbmNyeXB0KTtcclxuICAgICAqIGxvZy5pbmZvKGRlY3J5cHQpOyAvLyB3aWxsIHByaW50IEVOQ1JZUFRFRFxyXG4gICAgICogXHJcbiAgICAgKiB3ZWIuaW5pdCgpO1xyXG4gICAgICogd2ViLm9wZW4oZGVjcnlwdCk7IC8vIHdpbGwgb3BlbiBodHRwczovL3d3dy53aWtpcGVkaWEub3JnL1xyXG4gICAgICogXHJcbiAgICAgKiAvLyB0byBnZXQgb3JpZ2luYWwgcGxhaW50ZXh0IHVzZSBnZXREZWNyeXB0UmVzdWx0XHJcbiAgICAgKiBjb25zdCB2YWx1ZSA9IGRlY3J5cHQuZ2V0RGVjcnlwdFJlc3VsdCgpO1xyXG4gICAgICogbG9nLmluZm8odmFsdWUpOyAvL3dpbGwgcHJpbnQgaHR0cHM6Ly93d3cud2lraXBlZGlhLm9yZy9cclxuICAgICAqL1xyXG4gICAgZGVjcnlwdCh0ZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIGxpYlV0aWxzLmRlY3J5cHQodGV4dCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBFbmNyeXB0IHRleHRcclxuICAgICAqIEBmdW5jdGlvbiBlbmNyeXB0XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdGV4dCAtIFRleHRcclxuICAgICAqIEByZXR1cm4ge1N0cmluZ30gRW5jcnlwdGVkIHRleHRcclxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPltqYXZhc2NyaXB0XSBVc2FnZSBleGFtcGxlPC9jYXB0aW9uPlxyXG4gICAgICogLy8gdG8gZW5jcnlwdCBwbGFpbnRleHQgaW50byBjaXBoZXJ0ZXh0IFxyXG4gICAgICogY29uc3QgZW5jcnlwdCA9IHV0aWxzLmVuY3J5cHQoJ2h0dHBzOi8vd3d3Lndpa2lwZWRpYS5vcmcvJyk7XHJcbiAgICAgKiBsb2cuaW5mbyhlbmNyeXB0KTsgLy8gd2lsbCBwcmludCBiNzU3YmEyYzJmYzUwZmJiNTExZDU5NjgxNmNhMDZjNGZhNTZmNGU5OGNlMjIyZjMwYmM1OGQ1MjUxZWQ2MzVlXHJcbiAgICAgKiBcclxuICAgICAqIC8vIHRvIGRlY3J5cHQgY2lwaGVydGV4dCBhbmQgdXNlIGl0IGluIHNjcmlwdCAgXHJcbiAgICAgKiBjb25zdCBkZWNyeXB0ID0gdXRpbHMuZGVjcnlwdChlbmNyeXB0KTtcclxuICAgICAqIGxvZy5pbmZvKGRlY3J5cHQpOyAvLyB3aWxsIHByaW50IEVOQ1JZUFRFRFxyXG4gICAgICogXHJcbiAgICAgKiB3ZWIuaW5pdCgpO1xyXG4gICAgICogd2ViLm9wZW4oZGVjcnlwdCk7IC8vIHdpbGwgb3BlbiBodHRwczovL3d3dy53aWtpcGVkaWEub3JnL1xyXG4gICAgICogXHJcbiAgICAgKiAvLyB0byBnZXQgb3JpZ2luYWwgcGxhaW50ZXh0IHVzZSBnZXREZWNyeXB0UmVzdWx0XHJcbiAgICAgKiBjb25zdCB2YWx1ZSA9IGRlY3J5cHQuZ2V0RGVjcnlwdFJlc3VsdCgpO1xyXG4gICAgICogbG9nLmluZm8odmFsdWUpOyAvL3dpbGwgcHJpbnQgaHR0cHM6Ly93d3cud2lraXBlZGlhLm9yZy9cclxuICAgICAqL1xyXG4gICAgZW5jcnlwdCh0ZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIGxpYlV0aWxzLmVuY3J5cHQodGV4dCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFJlYWRzIGRhdGEgZnJvbSBjc3YgZmlsZVxyXG4gICAgICogQGZ1bmN0aW9uIHJlYWRDc3ZcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmaWxlUGF0aCAtIEFic29sdXRlIHBhdGggdG8gZmlsZVxyXG4gICAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyAoaHR0cHM6Ly9jc3YuanMub3JnL3BhcnNlL29wdGlvbnMvKVxyXG4gICAgICovXHJcbiAgICByZWFkQ3N2KGZpbGVQYXRoLCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICBjb25zdCBwYXJzZSA9IHJlcXVpcmUoJ2Nzdi1wYXJzZS9saWIvc3luYycpO1xyXG4gICAgICAgIHZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7XHJcbiAgICAgICAgdmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XHJcblxyXG4gICAgICAgIHZhciBleHQgPSBwYXRoLmV4dG5hbWUoZmlsZVBhdGgpO1xyXG4gICAgICAgIGlmIChleHQgIT09ICcuY3N2JyAmJiBleHQgIT09ICcudHh0Jykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuQ1NWX0VSUk9SLCAnVW5zdXBwb3J0ZWQgZmlsZSBleHRlbnNpb246ICcgKyBleHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGRhdGE7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZGF0YSA9IGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0ZjgnKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5DU1ZfRVJST1IsICdVbmFibGUgdG8gcmVhZCBwYXJhbWV0ZXJzIGZpbGU6ICcgKyBlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENTVnMgcHJvZHVjZWQgYnkgT1MgWCBFeGNlbCBoYXZlIGhlYWRlciB0ZXJtaW5hdGVkIHdpdGggMGQwZDBhXHJcbiAgICAgICAgZGF0YSA9IGRhdGEucmVwbGFjZSgvXFxyXFxyL2csICdcXHInKTtcclxuXHJcbiAgICAgICAgLy8gc3RyaXAgQk9NIGZvciBVVEYtOFxyXG4gICAgICAgIHZhciBib20gPSBmYWxzZTtcclxuICAgICAgICAvLyBjYXRjaGVzIDB4RUZCQkJGIChVVEYtOCBCT00pIGJlY2F1c2UgdGhlIGJ1ZmZlci10by1zdHJpbmdcclxuICAgICAgICAvLyBjb252ZXJzaW9uIHRyYW5zbGF0ZXMgaXQgdG8gMHhGRUZGIChVVEYtMTYgQk9NKVxyXG4gICAgICAgIGlmIChkYXRhLmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xyXG4gICAgICAgICAgICBib20gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdmFyIHRhYmxlID0gcGFyc2UoZGF0YSwgeyBib206IGJvbSwgY29sdW1uczogdHJ1ZSwgdHJpbTogdHJ1ZSwgLi4ub3B0aW9ucyB9KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5DU1ZfRVJST1IsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGFibGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBXcml0ZXMgZGF0YSBpbnRvIGNzdiBmaWxlXHJcbiAgICAgKiBAZnVuY3Rpb24gd3JpdGVDc3ZcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmaWxlUGF0aCAtIEFic29sdXRlIHBhdGggdG8gZmlsZVxyXG4gICAgICogQHBhcmFtIHtBcnJheX0gZGF0YSAtIENTViBkYXRhIGluIGZvcm1hdCBbe2NvbHVtbl9uYW1lXzE6ICdmb28nLCBjb2x1bW5fbmFtZV8yOiAnYmFyJ31dXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIChodHRwczovL2dpdGh1Yi5jb20vYW50b24tYm90L29iamVjdHMtdG8tY3N2I2FzeW5jLXRvZGlza2ZpbGVuYW1lLW9wdGlvbnMpXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHdyaXRlQ3N2KGZpbGVQYXRoLCBkYXRhLCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBPYmplY3RzVG9Dc3YgPSByZXF1aXJlKCdvYmplY3RzLXRvLWNzdicpO1xyXG4gICAgICAgICAgICBjb25zdCBjc3YgPSBuZXcgT2JqZWN0c1RvQ3N2KGRhdGEpO1xyXG4gICAgICAgICAgICBhd2FpdCBjc3YudG9EaXNrKGZpbGVQYXRoLCB7IGFsbENvbHVtbnM6IHRydWUsIC4uLm9wdGlvbnMgfSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuQ1NWX0VSUk9SLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFJlYWRzIGRhdGEgZnJvbSBYbHN4IGZpbGVcclxuICAgICAqIEBmdW5jdGlvbiByZWFkWGxzeFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGZpbGVQYXRoIC0gQWJzb2x1dGUgcGF0aCB0byBmaWxlXHJcbiAgICAgKiBAcmV0dXJuIHtBcnJheX0gLSBBcnJheSBvZiB4bHN4IGRhdGFcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcmVhZFhsc3goZmlsZVBhdGgpIHtcclxuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRXhjZWxSZWFkZXIoKTtcclxuICAgICAgICByZXR1cm4gYXdhaXQgcmVhZGVyLnJlYWQoZmlsZVBhdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgVXNlcyB0aGUgRE5TIHByb3RvY29sIHRvIHJlc29sdmUgYSBob3N0IG5hbWVcclxuICAgICAqIEBmdW5jdGlvbiBkbnNSZXNvbHZlXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gaG9zdG5hbWUgLSBIb3N0IG5hbWUgdG8gcmVzb2x2ZS5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nPX0gcnJUeXBlIC0gUmVzb3VyY2UgcmVjb3JkIHR5cGUuIERlZmF1bHQ6ICdBJy5cclxuICAgICAqIEByZXR1cm4ge1N0cmluZ1tdIHwgT2JqZWN0fSAtIEFycmF5IG9yIE9iamVjdCBvZiByZXNvdXJjZSByZWNvcmRzLiBUaGUgdHlwZSBhbmQgc3RydWN0dXJlIG9mIGluZGl2aWR1YWwgcmVzdWx0cyB2YXJ5IGJhc2VkIG9uIHJydHlwZVxyXG4gICAgICovXHJcbiAgICBhc3luYyBkbnNSZXNvbHZlKGhvc3RuYW1lLCByclR5cGUgPSAnQScpIHtcclxuICAgICAgICB1dGlscy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nKGhvc3RuYW1lLCAnaG9zdG5hbWUnKTtcclxuICAgICAgICBjb25zdCByclR5cGVzID0gWydBJywgJ0FBQUEnLCAnQU5ZJywgJ0NOQU1FJywgJ01YJywgJ05BUFRSJywgJ05TJywgJ1BUUicsICdTT0EnLCAnU1JWJywgJ1RYVCddO1xyXG5cclxuICAgICAgICBpZiAoIXJyVHlwZXMuaW5jbHVkZXMocnJUeXBlKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCBgSW52YWxpZCBhcmd1bWVudCAtICdyclR5cGUnLiBBdmFpbGFibGUgcnJUeXBlIHZhbHVlczogJHtyclR5cGVzLmpvaW4oJywgJyl9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBkbnNQcm9taXNlcyA9IHJlcXVpcmUoJ2RucycpLnByb21pc2VzO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBkbnNQcm9taXNlcy5yZXNvbHZlKGhvc3RuYW1lLCByclR5cGUpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLkROU19FUlJPUiwgZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBQYXJzZSBYTUwgZGF0YSB0byBKUyBvYmplY3QgXHJcbiAgICAgKiBAZnVuY3Rpb24geG1sVG9Kc29uXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xCdWZmZXJ9IHhtbERhdGFTdHIgLSBMaWtlIDxyb290IGE9XCJuaWNlXCIgYj1cInZlcnkgbmljZVwiID48YT53b3c8L2E+PC9yb290PlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufE9iamVjdH0gb3B0aW9ucyAtIE9wdGlvbnMgKGh0dHBzOi8vZ2l0aHViLmNvbS9OYXR1cmFsSW50ZWxsaWdlbmNlL2Zhc3QteG1sLXBhcnNlci9ibG9iL2IwZWE2MzU4ODQ0Y2NjYTk1Y2FiMDI3NThlMDM4YzFjMzMyMTQyN2UvZG9jcy92NC8yLlhNTHBhcnNlT3B0aW9ucy5tZCkgXHJcbiAgICAgKi9cclxuICAgIHhtbFRvSnNvbih4bWxEYXRhU3RyLCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJzZXIgPSBuZXcgZmFzdFhtbFBhcnNlci5YTUxQYXJzZXIob3B0aW9ucyk7XHJcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dCA9IHBhcnNlci5wYXJzZSh4bWxEYXRhU3RyKTtcclxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5YTUxfRVJST1IsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59Il19
|
|
219
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNT0RVTEVfTkFNRSIsIlV0aWxzTW9kdWxlIiwiT3h5Z2VuTW9kdWxlIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwiY29udGV4dCIsInJzIiwibG9nZ2VyIiwibW9kdWxlcyIsInNlcnZpY2VzIiwiX2Fsd2F5c0luaXRpYWxpemVkIiwiX2lzSW5pdGlhbGl6ZWQiLCJuYW1lIiwicGF1c2UiLCJtcyIsInV0aWxzIiwiYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSIsImxpYlV0aWxzIiwic2xlZXAiLCJkZWNyeXB0IiwidGV4dCIsImVuY3J5cHQiLCJyZWFkQ3N2IiwiZmlsZVBhdGgiLCJwYXJzZSIsInJlcXVpcmUiLCJmcyIsInBhdGgiLCJleHQiLCJleHRuYW1lIiwiT3hFcnJvciIsImVycm9ySGVscGVyIiwiZXJyb3JDb2RlIiwiQ1NWX0VSUk9SIiwiZGF0YSIsInJlYWRGaWxlU3luYyIsImUiLCJyZXBsYWNlIiwiYm9tIiwiY2hhckNvZGVBdCIsInRhYmxlIiwiY29sdW1ucyIsInRyaW0iLCJtZXNzYWdlIiwid3JpdGVDc3YiLCJPYmplY3RzVG9Dc3YiLCJjc3YiLCJ0b0Rpc2siLCJhbGxDb2x1bW5zIiwicmVhZFhsc3giLCJyZWFkZXIiLCJFeGNlbFJlYWRlciIsInJlYWQiLCJkbnNSZXNvbHZlIiwiaG9zdG5hbWUiLCJyclR5cGUiLCJhc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nIiwicnJUeXBlcyIsImluY2x1ZGVzIiwiU0NSSVBUX0VSUk9SIiwiam9pbiIsImRuc1Byb21pc2VzIiwicHJvbWlzZXMiLCJyZXNvbHZlIiwiRE5TX0VSUk9SIiwieG1sVG9Kc29uIiwieG1sRGF0YVN0ciIsInBhcnNlciIsImZhc3RYbWxQYXJzZXIiLCJYTUxQYXJzZXIiLCJvdXRwdXQiLCJYTUxfRVJST1IiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvb3hfbW9kdWxlcy9tb2R1bGUtdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWUgdXRpbHNcclxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIG1pc2NlbGxhbmVvdXMgdXRpbGl0eSBtZXRob2RzLlxyXG4gKi9cclxuXHJcbmNvbnN0IE1PRFVMRV9OQU1FID0gJ3V0aWxzJztcclxuaW1wb3J0IGZhc3RYbWxQYXJzZXIgZnJvbSAnZmFzdC14bWwtcGFyc2VyJztcclxuaW1wb3J0IE94eWdlbk1vZHVsZSBmcm9tICcuLi9jb3JlL094eWdlbk1vZHVsZSc7XHJcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcclxuaW1wb3J0IGxpYlV0aWxzIGZyb20gJy4uL2xpYi91dGlsJztcclxuaW1wb3J0IE94RXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxuaW1wb3J0IGVycm9ySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5pbXBvcnQgRXhjZWxSZWFkZXIgZnJvbSAnLi4vbGliL3BhcmFtLXJlYWRlci1leGNlbCc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVdGlsc01vZHVsZSBleHRlbmRzIE94eWdlbk1vZHVsZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcykge1xyXG4gICAgICAgIHN1cGVyKG9wdGlvbnMsIGNvbnRleHQsIHJzLCBsb2dnZXIsIG1vZHVsZXMsIHNlcnZpY2VzKTtcclxuICAgICAgICB0aGlzLl9hbHdheXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIEBzdW1tYXJ5IEdldHMgbW9kdWxlIG5hbWVcclxuICAgICAqIEBmdW5jdGlvbiBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IENvbnN0YW50IHZhbHVlIFwidXRpbHNcIi5cclxuICAgICAqL1xyXG4gICAgZ2V0IG5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIE1PRFVMRV9OQU1FO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgUGF1c2UgdGVzdCBleGVjdXRpb24gZm9yIHRoZSBnaXZlbiBhbW91bnQgb2YgbWlsbGlzZWNvbmRzLlxyXG4gICAgICogQGZ1bmN0aW9uIHBhdXNlXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gbXMgLSBNaWxsaXNlY29uZHMgdG8gcGF1c2UgdGhlIGV4ZWN1dGlvbiBmb3IuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHBhdXNlKG1zKSB7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZShtcywgJ21zJyk7XHJcbiAgICAgICAgYXdhaXQgbGliVXRpbHMuc2xlZXAobXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgRGVjcnlwdCB0ZXh0XHJcbiAgICAgKiBAZnVuY3Rpb24gZGVjcnlwdFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHRleHQgLSBUZXh0XHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IERlY3J5cHRSZXN1bHQgT2JqZWN0IHdpdGggZ2V0RGVjcnlwdFJlc3VsdCBtZXRob2RcclxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPltqYXZhc2NyaXB0XSBVc2FnZSBleGFtcGxlPC9jYXB0aW9uPlxyXG4gICAgICogLy8gdG8gZW5jcnlwdCBwbGFpbnRleHQgaW50byBjaXBoZXJ0ZXh0IFxyXG4gICAgICogY29uc3QgZW5jcnlwdCA9IHV0aWxzLmVuY3J5cHQoJ2h0dHBzOi8vd3d3Lndpa2lwZWRpYS5vcmcvJyk7XHJcbiAgICAgKiBsb2cuaW5mbyhlbmNyeXB0KTsgLy8gd2lsbCBwcmludCBiNzU3YmEyYzJmYzUwZmJiNTExZDU5NjgxNmNhMDZjNGZhNTZmNGU5OGNlMjIyZjMwYmM1OGQ1MjUxZWQ2MzVlXHJcbiAgICAgKiBcclxuICAgICAqIC8vIHRvIGRlY3J5cHQgY2lwaGVydGV4dCBhbmQgdXNlIGl0IGluIHNjcmlwdCAgXHJcbiAgICAgKiBjb25zdCBkZWNyeXB0ID0gdXRpbHMuZGVjcnlwdChlbmNyeXB0KTtcclxuICAgICAqIGxvZy5pbmZvKGRlY3J5cHQpOyAvLyB3aWxsIHByaW50IEVOQ1JZUFRFRFxyXG4gICAgICogXHJcbiAgICAgKiB3ZWIuaW5pdCgpO1xyXG4gICAgICogd2ViLm9wZW4oZGVjcnlwdCk7IC8vIHdpbGwgb3BlbiBodHRwczovL3d3dy53aWtpcGVkaWEub3JnL1xyXG4gICAgICogXHJcbiAgICAgKiAvLyB0byBnZXQgb3JpZ2luYWwgcGxhaW50ZXh0IHVzZSBnZXREZWNyeXB0UmVzdWx0XHJcbiAgICAgKiBjb25zdCB2YWx1ZSA9IGRlY3J5cHQuZ2V0RGVjcnlwdFJlc3VsdCgpO1xyXG4gICAgICogbG9nLmluZm8odmFsdWUpOyAvL3dpbGwgcHJpbnQgaHR0cHM6Ly93d3cud2lraXBlZGlhLm9yZy9cclxuICAgICAqL1xyXG4gICAgZGVjcnlwdCh0ZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIGxpYlV0aWxzLmRlY3J5cHQodGV4dCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBFbmNyeXB0IHRleHRcclxuICAgICAqIEBmdW5jdGlvbiBlbmNyeXB0XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdGV4dCAtIFRleHRcclxuICAgICAqIEByZXR1cm4ge1N0cmluZ30gRW5jcnlwdGVkIHRleHRcclxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPltqYXZhc2NyaXB0XSBVc2FnZSBleGFtcGxlPC9jYXB0aW9uPlxyXG4gICAgICogLy8gdG8gZW5jcnlwdCBwbGFpbnRleHQgaW50byBjaXBoZXJ0ZXh0IFxyXG4gICAgICogY29uc3QgZW5jcnlwdCA9IHV0aWxzLmVuY3J5cHQoJ2h0dHBzOi8vd3d3Lndpa2lwZWRpYS5vcmcvJyk7XHJcbiAgICAgKiBsb2cuaW5mbyhlbmNyeXB0KTsgLy8gd2lsbCBwcmludCBiNzU3YmEyYzJmYzUwZmJiNTExZDU5NjgxNmNhMDZjNGZhNTZmNGU5OGNlMjIyZjMwYmM1OGQ1MjUxZWQ2MzVlXHJcbiAgICAgKiBcclxuICAgICAqIC8vIHRvIGRlY3J5cHQgY2lwaGVydGV4dCBhbmQgdXNlIGl0IGluIHNjcmlwdCAgXHJcbiAgICAgKiBjb25zdCBkZWNyeXB0ID0gdXRpbHMuZGVjcnlwdChlbmNyeXB0KTtcclxuICAgICAqIGxvZy5pbmZvKGRlY3J5cHQpOyAvLyB3aWxsIHByaW50IEVOQ1JZUFRFRFxyXG4gICAgICogXHJcbiAgICAgKiB3ZWIuaW5pdCgpO1xyXG4gICAgICogd2ViLm9wZW4oZGVjcnlwdCk7IC8vIHdpbGwgb3BlbiBodHRwczovL3d3dy53aWtpcGVkaWEub3JnL1xyXG4gICAgICogXHJcbiAgICAgKiAvLyB0byBnZXQgb3JpZ2luYWwgcGxhaW50ZXh0IHVzZSBnZXREZWNyeXB0UmVzdWx0XHJcbiAgICAgKiBjb25zdCB2YWx1ZSA9IGRlY3J5cHQuZ2V0RGVjcnlwdFJlc3VsdCgpO1xyXG4gICAgICogbG9nLmluZm8odmFsdWUpOyAvL3dpbGwgcHJpbnQgaHR0cHM6Ly93d3cud2lraXBlZGlhLm9yZy9cclxuICAgICAqL1xyXG4gICAgZW5jcnlwdCh0ZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIGxpYlV0aWxzLmVuY3J5cHQodGV4dCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFJlYWRzIGRhdGEgZnJvbSBjc3YgZmlsZVxyXG4gICAgICogQGZ1bmN0aW9uIHJlYWRDc3ZcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmaWxlUGF0aCAtIEFic29sdXRlIHBhdGggdG8gZmlsZVxyXG4gICAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyAoaHR0cHM6Ly9jc3YuanMub3JnL3BhcnNlL29wdGlvbnMvKVxyXG4gICAgICovXHJcbiAgICByZWFkQ3N2KGZpbGVQYXRoLCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICBjb25zdCBwYXJzZSA9IHJlcXVpcmUoJ2Nzdi1wYXJzZS9saWIvc3luYycpO1xyXG4gICAgICAgIHZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7XHJcbiAgICAgICAgdmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XHJcblxyXG4gICAgICAgIHZhciBleHQgPSBwYXRoLmV4dG5hbWUoZmlsZVBhdGgpO1xyXG4gICAgICAgIGlmIChleHQgIT09ICcuY3N2JyAmJiBleHQgIT09ICcudHh0Jykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuQ1NWX0VSUk9SLCAnVW5zdXBwb3J0ZWQgZmlsZSBleHRlbnNpb246ICcgKyBleHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGRhdGE7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZGF0YSA9IGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0ZjgnKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5DU1ZfRVJST1IsICdVbmFibGUgdG8gcmVhZCBwYXJhbWV0ZXJzIGZpbGU6ICcgKyBlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENTVnMgcHJvZHVjZWQgYnkgT1MgWCBFeGNlbCBoYXZlIGhlYWRlciB0ZXJtaW5hdGVkIHdpdGggMGQwZDBhXHJcbiAgICAgICAgZGF0YSA9IGRhdGEucmVwbGFjZSgvXFxyXFxyL2csICdcXHInKTtcclxuXHJcbiAgICAgICAgLy8gc3RyaXAgQk9NIGZvciBVVEYtOFxyXG4gICAgICAgIHZhciBib20gPSBmYWxzZTtcclxuICAgICAgICAvLyBjYXRjaGVzIDB4RUZCQkJGIChVVEYtOCBCT00pIGJlY2F1c2UgdGhlIGJ1ZmZlci10by1zdHJpbmdcclxuICAgICAgICAvLyBjb252ZXJzaW9uIHRyYW5zbGF0ZXMgaXQgdG8gMHhGRUZGIChVVEYtMTYgQk9NKVxyXG4gICAgICAgIGlmIChkYXRhLmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xyXG4gICAgICAgICAgICBib20gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdmFyIHRhYmxlID0gcGFyc2UoZGF0YSwgeyBib206IGJvbSwgY29sdW1uczogdHJ1ZSwgdHJpbTogdHJ1ZSwgLi4ub3B0aW9ucyB9KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5DU1ZfRVJST1IsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGFibGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBXcml0ZXMgZGF0YSBpbnRvIGNzdiBmaWxlXHJcbiAgICAgKiBAZnVuY3Rpb24gd3JpdGVDc3ZcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmaWxlUGF0aCAtIEFic29sdXRlIHBhdGggdG8gZmlsZVxyXG4gICAgICogQHBhcmFtIHtBcnJheX0gZGF0YSAtIENTViBkYXRhIGluIGZvcm1hdCBbe2NvbHVtbl9uYW1lXzE6ICdmb28nLCBjb2x1bW5fbmFtZV8yOiAnYmFyJ31dXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIChodHRwczovL2dpdGh1Yi5jb20vYW50b24tYm90L29iamVjdHMtdG8tY3N2I2FzeW5jLXRvZGlza2ZpbGVuYW1lLW9wdGlvbnMpXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHdyaXRlQ3N2KGZpbGVQYXRoLCBkYXRhLCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBPYmplY3RzVG9Dc3YgPSByZXF1aXJlKCdvYmplY3RzLXRvLWNzdicpO1xyXG4gICAgICAgICAgICBjb25zdCBjc3YgPSBuZXcgT2JqZWN0c1RvQ3N2KGRhdGEpO1xyXG4gICAgICAgICAgICBhd2FpdCBjc3YudG9EaXNrKGZpbGVQYXRoLCB7IGFsbENvbHVtbnM6IHRydWUsIC4uLm9wdGlvbnMgfSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuQ1NWX0VSUk9SLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFJlYWRzIGRhdGEgZnJvbSBYbHN4IGZpbGVcclxuICAgICAqIEBmdW5jdGlvbiByZWFkWGxzeFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGZpbGVQYXRoIC0gQWJzb2x1dGUgcGF0aCB0byBmaWxlXHJcbiAgICAgKiBAcmV0dXJuIHtBcnJheX0gLSBBcnJheSBvZiB4bHN4IGRhdGFcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcmVhZFhsc3goZmlsZVBhdGgpIHtcclxuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRXhjZWxSZWFkZXIoKTtcclxuICAgICAgICByZXR1cm4gYXdhaXQgcmVhZGVyLnJlYWQoZmlsZVBhdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgVXNlcyB0aGUgRE5TIHByb3RvY29sIHRvIHJlc29sdmUgYSBob3N0IG5hbWVcclxuICAgICAqIEBmdW5jdGlvbiBkbnNSZXNvbHZlXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gaG9zdG5hbWUgLSBIb3N0IG5hbWUgdG8gcmVzb2x2ZS5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nPX0gcnJUeXBlIC0gUmVzb3VyY2UgcmVjb3JkIHR5cGUuIERlZmF1bHQ6ICdBJy5cclxuICAgICAqIEByZXR1cm4ge1N0cmluZ1tdIHwgT2JqZWN0fSAtIEFycmF5IG9yIE9iamVjdCBvZiByZXNvdXJjZSByZWNvcmRzLiBUaGUgdHlwZSBhbmQgc3RydWN0dXJlIG9mIGluZGl2aWR1YWwgcmVzdWx0cyB2YXJ5IGJhc2VkIG9uIHJydHlwZVxyXG4gICAgICovXHJcbiAgICBhc3luYyBkbnNSZXNvbHZlKGhvc3RuYW1lLCByclR5cGUgPSAnQScpIHtcclxuICAgICAgICB1dGlscy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nKGhvc3RuYW1lLCAnaG9zdG5hbWUnKTtcclxuICAgICAgICBjb25zdCByclR5cGVzID0gWydBJywgJ0FBQUEnLCAnQU5ZJywgJ0NOQU1FJywgJ01YJywgJ05BUFRSJywgJ05TJywgJ1BUUicsICdTT0EnLCAnU1JWJywgJ1RYVCddO1xyXG5cclxuICAgICAgICBpZiAoIXJyVHlwZXMuaW5jbHVkZXMocnJUeXBlKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCBgSW52YWxpZCBhcmd1bWVudCAtICdyclR5cGUnLiBBdmFpbGFibGUgcnJUeXBlIHZhbHVlczogJHtyclR5cGVzLmpvaW4oJywgJyl9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBkbnNQcm9taXNlcyA9IHJlcXVpcmUoJ2RucycpLnByb21pc2VzO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBkbnNQcm9taXNlcy5yZXNvbHZlKGhvc3RuYW1lLCByclR5cGUpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLkROU19FUlJPUiwgZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBQYXJzZSBYTUwgZGF0YSB0byBKUyBvYmplY3QgXHJcbiAgICAgKiBAZnVuY3Rpb24geG1sVG9Kc29uXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xCdWZmZXJ9IHhtbERhdGFTdHIgLSBMaWtlIDxyb290IGE9XCJuaWNlXCIgYj1cInZlcnkgbmljZVwiID48YT53b3c8L2E+PC9yb290PlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufE9iamVjdH0gb3B0aW9ucyAtIE9wdGlvbnMgKGh0dHBzOi8vZ2l0aHViLmNvbS9OYXR1cmFsSW50ZWxsaWdlbmNlL2Zhc3QteG1sLXBhcnNlci9ibG9iL2IwZWE2MzU4ODQ0Y2NjYTk1Y2FiMDI3NThlMDM4YzFjMzMyMTQyN2UvZG9jcy92NC8yLlhNTHBhcnNlT3B0aW9ucy5tZCkgXHJcbiAgICAgKi9cclxuICAgIHhtbFRvSnNvbih4bWxEYXRhU3RyLCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJzZXIgPSBuZXcgZmFzdFhtbFBhcnNlci5YTUxQYXJzZXIob3B0aW9ucyk7XHJcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dCA9IHBhcnNlci5wYXJzZSh4bWxEYXRhU3RyKTtcclxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5YTUxfRVJST1IsIGUubWVzc2FnZSk7XHJc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
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
require("source-map-support/register");
|
|
4
|
-
|
|
5
4
|
/*
|
|
6
5
|
* Copyright (C) 2015-present CloudBeat Limited
|
|
7
6
|
*
|
|
@@ -32,4 +31,4 @@ module.exports = async function () {
|
|
|
32
31
|
}
|
|
33
32
|
}
|
|
34
33
|
};
|
|
35
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
34
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwiZHJpdmVyIiwiYWNjZXB0QWxlcnQiLCJlIiwibmFtZSIsInR5cGUiLCJPeEVycm9yIiwiZXJySGVscGVyIiwiZXJyb3JDb2RlIiwiTk9fQUxFUlRfT1BFTl9FUlJPUiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS13ZWIvY29tbWFuZHMvYWxlcnRBY2NlcHQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKipcclxuICogQHN1bW1hcnkgQWNjZXB0cyBhbiBhbGVydCBvciBhIGNvbmZpcm1hdGlvbiBkaWFsb2cuXHJcbiAqIEBkZXNjcmlwdGlvbiBJbiBjYXNlIG9mIGFuIGFsZXJ0IGJveCB0aGlzIGNvbW1hbmQgaXMgaWRlbnRpY2FsIHRvIGBhbGVydERpc21pc3NgLlxyXG4gKiBAZnVuY3Rpb24gYWxlcnRBY2NlcHRcclxuICogQGV4YW1wbGUgPGNhcHRpb24+W2phdmFzY3JpcHRdIFVzYWdlIGV4YW1wbGU8L2NhcHRpb24+XHJcbiAqIHdlYi5pbml0KCk7Ly9PcGVucyBicm93c2VyIHNlc3Npb25cclxuICogd2ViLm9wZW4oXCJ3d3cueW91cndlYnNpdGUuY29tXCIpOy8vIE9wZW5zIGEgd2Vic2l0ZS5cclxuICogd2ViLmNsaWNrKFwiaWQ9U2F2ZUJ1dHRvblwiKTsvL0NsaWNrcyBvbiBzYXZlIOKAkyBhbiBhbGVydCB3b3VsZCBwb3AgdXBcclxuICogd2ViLmFsZXJ0QWNjZXB0KCk7Ly9DbGlja3Mgb24gXCJPS1wiIGluIHRoZSBhbGVydCBkaWFsb2cuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9IGFzeW5jIGZ1bmN0aW9uKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5hY2NlcHRBbGVydCgpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGlmIChlLm5hbWUgPT09ICdubyBzdWNoIGFsZXJ0JyB8fCBlLnR5cGUgPT09ICdOT19BTEVSVF9PUEVOX0VSUk9SJykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgdGhpcy5PeEVycm9yKHRoaXMuZXJySGVscGVyLmVycm9yQ29kZS5OT19BTEVSVF9PUEVOX0VSUk9SLCAnTm8gYWxlcnQgcHJlc2VudCcpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG4iXSwibWFwcGluZ3MiOiI7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQUEsTUFBTSxDQUFDQyxPQUFPLEdBQUcsa0JBQWlCO0VBQzlCLElBQUk7SUFDQSxNQUFNLElBQUksQ0FBQ0MsTUFBTSxDQUFDQyxXQUFXLEVBQUU7RUFDbkMsQ0FBQyxDQUFDLE9BQU9DLENBQUMsRUFBRTtJQUNSLElBQUlBLENBQUMsQ0FBQ0MsSUFBSSxLQUFLLGVBQWUsSUFBSUQsQ0FBQyxDQUFDRSxJQUFJLEtBQUsscUJBQXFCLEVBQUU7TUFDaEUsTUFBTSxJQUFJLElBQUksQ0FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBQ0MsU0FBUyxDQUFDQyxTQUFTLENBQUNDLG1CQUFtQixFQUFFLGtCQUFrQixDQUFDO0lBQzVGLENBQUMsTUFBTTtNQUNILE1BQU1OLENBQUM7SUFDWDtFQUNKO0FBQ0osQ0FBQyJ9
|