oxygen-cli 1.40.2 → 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 +13 -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 +51 -82
- package/build/index.js +8 -22
- package/build/lib/cli-util.js +39 -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 +21 -34
- 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 +265 -0
- 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 +14 -120
- 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 +5 -1
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
require("source-map-support/register");
|
|
8
|
+
var _OxygenModule = _interopRequireDefault(require("../core/OxygenModule"));
|
|
9
|
+
var _OxygenError = _interopRequireDefault(require("../errors/OxygenError"));
|
|
10
|
+
var _helper = _interopRequireDefault(require("../errors/helper"));
|
|
11
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
|
+
/*
|
|
13
|
+
* Copyright (C) 2015-current CloudBeat Limited
|
|
14
|
+
*
|
|
15
|
+
* This program is free software: you can redistribute it and/or modify
|
|
16
|
+
* it under the terms of the GNU General Public License as published by
|
|
17
|
+
* the Free Software Foundation, either version 3 of the License, or
|
|
18
|
+
* (at your option) any later version.
|
|
19
|
+
*/
|
|
20
|
+
const {
|
|
21
|
+
MongoClient
|
|
22
|
+
} = require('mongodb');
|
|
23
|
+
const MODULE_NAME = 'mongo';
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* @name shell
|
|
27
|
+
* @description Provides methods for working with operating system shell.
|
|
28
|
+
*/
|
|
29
|
+
class MongoDbModule extends _OxygenModule.default {
|
|
30
|
+
constructor(options, context, rs, logger, modules, services) {
|
|
31
|
+
super(options, context, rs, logger, modules, services);
|
|
32
|
+
this._alwaysInitialized = false;
|
|
33
|
+
this._isInitialized = false;
|
|
34
|
+
this.client;
|
|
35
|
+
this.db;
|
|
36
|
+
this.collection;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* @summary Initializes MongoDB session.
|
|
40
|
+
* @function init
|
|
41
|
+
* @param {string} hostOrUrl - Host name or full URL of the target MongoDB server.
|
|
42
|
+
* @param {string} dbName - Database name. You can change it later using "setDatabase" method.
|
|
43
|
+
* @param {string} [username] - Optional username for authentication.
|
|
44
|
+
* @param {string} [password] - Optional password for authentication.
|
|
45
|
+
* @param {string} [authSource=admin] - Optional authentication source. Default value is "admin".
|
|
46
|
+
* @param {number} [port=27017] - Optional MongoDB server port. Default value is 27017.
|
|
47
|
+
*/
|
|
48
|
+
async init(hostOrUrl, dbName, username, password, authSource = 'admin', port = 27017) {
|
|
49
|
+
if (!hostOrUrl || typeof hostOrUrl !== 'string') {
|
|
50
|
+
throw new Error('MongoDB host name or full URL is not specified!');
|
|
51
|
+
} else if (!dbName) {
|
|
52
|
+
throw new Error('MongoDB database name is not specified!');
|
|
53
|
+
}
|
|
54
|
+
const isFullUrl = /^mongodb(\+srv)?:\/\//i.test(hostOrUrl);
|
|
55
|
+
const uri = isFullUrl ? hostOrUrl : (() => {
|
|
56
|
+
if (username) {
|
|
57
|
+
const encUsername = encodeURIComponent(username);
|
|
58
|
+
const encPassword = password ? encodeURIComponent(password) : undefined;
|
|
59
|
+
return `mongodb://${encUsername}:${encPassword || ''}@${hostOrUrl}:${port}/${dbName}?authSource=${authSource}`;
|
|
60
|
+
}
|
|
61
|
+
return `mongodb://${hostOrUrl}:${port}/${dbName}?authSource=${authSource}`;
|
|
62
|
+
})();
|
|
63
|
+
this.client = new MongoClient(uri, {
|
|
64
|
+
useNewUrlParser: true,
|
|
65
|
+
useUnifiedTopology: true
|
|
66
|
+
});
|
|
67
|
+
try {
|
|
68
|
+
await this.client.connect();
|
|
69
|
+
this.db = this.client.db(dbName);
|
|
70
|
+
this._isInitialized = true;
|
|
71
|
+
} catch (e) {
|
|
72
|
+
throw new _OxygenError.default(_helper.default.errorCode.MONGODB_ERROR, e.message, null, true, e);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* @summary Sets the current database to perform further actions.
|
|
78
|
+
* @function setDatabase
|
|
79
|
+
* @param {string} dbName - Database name.
|
|
80
|
+
*/
|
|
81
|
+
setDatabase(dbName) {
|
|
82
|
+
this.db = this.client.db(dbName);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* @summary Sets the current collection to perform further actions.
|
|
87
|
+
* @function setCollection
|
|
88
|
+
* @param {string} collectionName - Collection name.
|
|
89
|
+
*/
|
|
90
|
+
setCollection(collectionName) {
|
|
91
|
+
if (!this.db) {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
this.collection = this.db.collection(collectionName);
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* @summary Finds documents in the current collection.
|
|
100
|
+
* @function find
|
|
101
|
+
* @param {object} filter - The filter predicate.
|
|
102
|
+
* @param {object} options - Optional settings for the command.
|
|
103
|
+
* @return {object} A list of documents.
|
|
104
|
+
*/
|
|
105
|
+
async find(filter, options) {
|
|
106
|
+
if (!this.collection) {
|
|
107
|
+
return undefined;
|
|
108
|
+
}
|
|
109
|
+
try {
|
|
110
|
+
return await this.collection.find(filter, options).toArray();
|
|
111
|
+
} catch (e) {
|
|
112
|
+
throw new _OxygenError.default(_helper.default.errorCode.MONGODB_ERROR, e.message, null, true, e);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* @summary Gets the number of documents matching the filter.
|
|
118
|
+
* @function countDocuments
|
|
119
|
+
* @param {object} filter - The filter for the count.
|
|
120
|
+
* @param {object} options - Optional settings for the command.
|
|
121
|
+
* @return {number} Number of documents matching the filter.
|
|
122
|
+
*/
|
|
123
|
+
async countDocuments(filter, options) {
|
|
124
|
+
if (!this.collection) {
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
try {
|
|
128
|
+
return await this.collection.countDocuments(filter, options);
|
|
129
|
+
} catch (e) {
|
|
130
|
+
throw new _OxygenError.default(_helper.default.errorCode.MONGODB_ERROR, e.message, null, true, e);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* @summary Inserts a single document into a collection.
|
|
136
|
+
* @function insertOne
|
|
137
|
+
* @param {object} doc - The document to insert.
|
|
138
|
+
* @param {object} options - Optional settings for the command.
|
|
139
|
+
*/
|
|
140
|
+
async insertOne(doc, options) {
|
|
141
|
+
if (!this.collection) {
|
|
142
|
+
return undefined;
|
|
143
|
+
}
|
|
144
|
+
try {
|
|
145
|
+
return await this.collection.insertOne(doc, options);
|
|
146
|
+
} catch (e) {
|
|
147
|
+
throw new _OxygenError.default(_helper.default.errorCode.MONGODB_ERROR, e.message, null, true, e);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* @summary Inserts an array of documents into a collection.
|
|
153
|
+
* @function insertMany
|
|
154
|
+
* @param {object} docs - The documents to insert.
|
|
155
|
+
* @param {object} options - Optional settings for the command.
|
|
156
|
+
*/
|
|
157
|
+
async insertMany(docs, options) {
|
|
158
|
+
if (!this.collection) {
|
|
159
|
+
return undefined;
|
|
160
|
+
}
|
|
161
|
+
try {
|
|
162
|
+
return await this.collection.insertMany(docs, options);
|
|
163
|
+
} catch (e) {
|
|
164
|
+
throw new _OxygenError.default(_helper.default.errorCode.MONGODB_ERROR, e.message, null, true, e);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* @summary Update a single document in a collection.
|
|
170
|
+
* @function updateOne
|
|
171
|
+
* @param {object} filter - The filter used to select the document to replace.
|
|
172
|
+
* @param {UpdateFilter<TSchema>|Document[]} update - The modifications to apply.
|
|
173
|
+
* @param {object} options - Optional settings for the command.
|
|
174
|
+
*/
|
|
175
|
+
async updateOne(filter, update) {
|
|
176
|
+
if (!this.collection) {
|
|
177
|
+
return undefined;
|
|
178
|
+
}
|
|
179
|
+
try {
|
|
180
|
+
return await this.collection.updateOne(filter, update);
|
|
181
|
+
} catch (e) {
|
|
182
|
+
throw new _OxygenError.default(_helper.default.errorCode.MONGODB_ERROR, e.message, null, true, e);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* @summary Update multiple documents in a collection.
|
|
188
|
+
* @function updateMany
|
|
189
|
+
* @param {object} filter - The filter used to select the document to update.
|
|
190
|
+
* @param {UpdateFilter<TSchema>|Document[]} update - The modifications to apply.
|
|
191
|
+
* @param {object} options - Optional settings for the command.
|
|
192
|
+
*/
|
|
193
|
+
async updateMany(filter, update, options) {
|
|
194
|
+
if (!this.collection) {
|
|
195
|
+
return undefined;
|
|
196
|
+
}
|
|
197
|
+
try {
|
|
198
|
+
return await this.collection.updateMany(filter, update, options);
|
|
199
|
+
} catch (e) {
|
|
200
|
+
throw new _OxygenError.default(_helper.default.errorCode.MONGODB_ERROR, e.message, null, true, e);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* @summary Replace a document in a collection with another document.
|
|
206
|
+
* @function replaceOne
|
|
207
|
+
* @param {object} filter - The filter used to select the document to replace.
|
|
208
|
+
* @param {object} doc - The Document that replaces the matching document.
|
|
209
|
+
* @param {object} options - Optional settings for the command.
|
|
210
|
+
*/
|
|
211
|
+
async replaceOne(filter, doc) {
|
|
212
|
+
if (!this.collection) {
|
|
213
|
+
return undefined;
|
|
214
|
+
}
|
|
215
|
+
try {
|
|
216
|
+
return await this.collection.replaceOne(filter, doc);
|
|
217
|
+
} catch (e) {
|
|
218
|
+
throw new _OxygenError.default(_helper.default.errorCode.MONGODB_ERROR, e.message, null, true, e);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* @summary Delete a document from a collection.
|
|
224
|
+
* @function deleteOne
|
|
225
|
+
* @param {object} filter - The filter used to select the document to remove.
|
|
226
|
+
* @param {object} options - Optional settings for the command.
|
|
227
|
+
*/
|
|
228
|
+
async deleteOne(filter) {
|
|
229
|
+
if (!this.collection) {
|
|
230
|
+
return undefined;
|
|
231
|
+
}
|
|
232
|
+
try {
|
|
233
|
+
return await this.collection.deleteOne(filter);
|
|
234
|
+
} catch (e) {
|
|
235
|
+
throw new _OxygenError.default(_helper.default.errorCode.MONGODB_ERROR, e.message, null, true, e);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* @summary Delete multiple documents from a collection.
|
|
240
|
+
* @function deleteMany
|
|
241
|
+
* @param {object} filter - The filter used to select the documents to remove.
|
|
242
|
+
* @param {object} options - Optional settings for the command.
|
|
243
|
+
*/
|
|
244
|
+
async deleteMany(filter) {
|
|
245
|
+
if (!this.collection) {
|
|
246
|
+
return undefined;
|
|
247
|
+
}
|
|
248
|
+
try {
|
|
249
|
+
return await this.collection.deleteMany(filter);
|
|
250
|
+
} catch (e) {
|
|
251
|
+
throw new _OxygenError.default(_helper.default.errorCode.MONGODB_ERROR, e.message, null, true, e);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* @summary Gets module name
|
|
257
|
+
* @function name
|
|
258
|
+
* @return {String} Constant value "shell".
|
|
259
|
+
*/
|
|
260
|
+
get name() {
|
|
261
|
+
return MODULE_NAME;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
exports.default = MongoDbModule;
|
|
265
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfT3h5Z2VuTW9kdWxlIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfT3h5Z2VuRXJyb3IiLCJfaGVscGVyIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiTW9uZ29DbGllbnQiLCJNT0RVTEVfTkFNRSIsIk1vbmdvRGJNb2R1bGUiLCJPeHlnZW5Nb2R1bGUiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJjb250ZXh0IiwicnMiLCJsb2dnZXIiLCJtb2R1bGVzIiwic2VydmljZXMiLCJfYWx3YXlzSW5pdGlhbGl6ZWQiLCJfaXNJbml0aWFsaXplZCIsImNsaWVudCIsImRiIiwiY29sbGVjdGlvbiIsImluaXQiLCJob3N0T3JVcmwiLCJkYk5hbWUiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwiYXV0aFNvdXJjZSIsInBvcnQiLCJFcnJvciIsImlzRnVsbFVybCIsInRlc3QiLCJ1cmkiLCJlbmNVc2VybmFtZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImVuY1Bhc3N3b3JkIiwidW5kZWZpbmVkIiwidXNlTmV3VXJsUGFyc2VyIiwidXNlVW5pZmllZFRvcG9sb2d5IiwiY29ubmVjdCIsIk94RXJyb3IiLCJlcnJIZWxwZXIiLCJlcnJvckNvZGUiLCJNT05HT0RCX0VSUk9SIiwibWVzc2FnZSIsInNldERhdGFiYXNlIiwic2V0Q29sbGVjdGlvbiIsImNvbGxlY3Rpb25OYW1lIiwiZmluZCIsImZpbHRlciIsInRvQXJyYXkiLCJjb3VudERvY3VtZW50cyIsImluc2VydE9uZSIsImRvYyIsImluc2VydE1hbnkiLCJkb2NzIiwidXBkYXRlT25lIiwidXBkYXRlIiwidXBkYXRlTWFueSIsInJlcGxhY2VPbmUiLCJkZWxldGVPbmUiLCJkZWxldGVNYW55IiwibmFtZSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvb3hfbW9kdWxlcy9tb2R1bGUtbW9uZ28uanMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LWN1cnJlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcbmNvbnN0IHsgTW9uZ29DbGllbnQgfSA9IHJlcXVpcmUoJ21vbmdvZGInKTtcclxuaW1wb3J0IE94eWdlbk1vZHVsZSBmcm9tICcuLi9jb3JlL094eWdlbk1vZHVsZSc7XHJcbmltcG9ydCBPeEVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbmltcG9ydCBlcnJIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcblxyXG5jb25zdCBNT0RVTEVfTkFNRSA9ICdtb25nbyc7XHJcblxyXG4vKipcclxuICogQG5hbWUgc2hlbGxcclxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIG1ldGhvZHMgZm9yIHdvcmtpbmcgd2l0aCBvcGVyYXRpbmcgc3lzdGVtIHNoZWxsLlxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTW9uZ29EYk1vZHVsZSBleHRlbmRzIE94eWdlbk1vZHVsZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcykge1xyXG4gICAgICAgIHN1cGVyKG9wdGlvbnMsIGNvbnRleHQsIHJzLCBsb2dnZXIsIG1vZHVsZXMsIHNlcnZpY2VzKTtcclxuICAgICAgICB0aGlzLl9hbHdheXNJbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNsaWVudDtcclxuICAgICAgICB0aGlzLmRiO1xyXG4gICAgICAgIHRoaXMuY29sbGVjdGlvbjtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgSW5pdGlhbGl6ZXMgTW9uZ29EQiBzZXNzaW9uLlxyXG4gICAgICogQGZ1bmN0aW9uIGluaXRcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBob3N0T3JVcmwgLSBIb3N0IG5hbWUgb3IgZnVsbCBVUkwgb2YgdGhlIHRhcmdldCBNb25nb0RCIHNlcnZlci5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkYk5hbWUgLSBEYXRhYmFzZSBuYW1lLiBZb3UgY2FuIGNoYW5nZSBpdCBsYXRlciB1c2luZyBcInNldERhdGFiYXNlXCIgbWV0aG9kLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt1c2VybmFtZV0gLSBPcHRpb25hbCB1c2VybmFtZSBmb3IgYXV0aGVudGljYXRpb24uXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3Bhc3N3b3JkXSAtIE9wdGlvbmFsIHBhc3N3b3JkIGZvciBhdXRoZW50aWNhdGlvbi5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbYXV0aFNvdXJjZT1hZG1pbl0gLSBPcHRpb25hbCBhdXRoZW50aWNhdGlvbiBzb3VyY2UuIERlZmF1bHQgdmFsdWUgaXMgXCJhZG1pblwiLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtwb3J0PTI3MDE3XSAtIE9wdGlvbmFsIE1vbmdvREIgc2VydmVyIHBvcnQuIERlZmF1bHQgdmFsdWUgaXMgMjcwMTcuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGluaXQoXHJcbiAgICAgICAgaG9zdE9yVXJsLFxyXG4gICAgICAgIGRiTmFtZSxcclxuICAgICAgICB1c2VybmFtZSxcclxuICAgICAgICBwYXNzd29yZCxcclxuICAgICAgICBhdXRoU291cmNlID0gJ2FkbWluJyxcclxuICAgICAgICBwb3J0ID0gMjcwMTcsXHJcbiAgICApIHtcclxuICAgICAgICBpZiAoIWhvc3RPclVybCB8fCB0eXBlb2YgaG9zdE9yVXJsICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01vbmdvREIgaG9zdCBuYW1lIG9yIGZ1bGwgVVJMIGlzIG5vdCBzcGVjaWZpZWQhJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKCFkYk5hbWUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNb25nb0RCIGRhdGFiYXNlIG5hbWUgaXMgbm90IHNwZWNpZmllZCEnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaXNGdWxsVXJsID0gL15tb25nb2RiKFxcK3Nydik/OlxcL1xcLy9pLnRlc3QoaG9zdE9yVXJsKTtcclxuICAgICAgICBjb25zdCB1cmkgPSBpc0Z1bGxVcmxcclxuICAgICAgICAgICAgPyBob3N0T3JVcmxcclxuICAgICAgICAgICAgOiAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXJuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5jVXNlcm5hbWUgPSBlbmNvZGVVUklDb21wb25lbnQodXNlcm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuY1Bhc3N3b3JkID0gcGFzc3dvcmQgPyBlbmNvZGVVUklDb21wb25lbnQocGFzc3dvcmQpIDogdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgbW9uZ29kYjovLyR7ZW5jVXNlcm5hbWV9OiR7ZW5jUGFzc3dvcmQgfHwgJyd9QCR7aG9zdE9yVXJsfToke3BvcnR9LyR7ZGJOYW1lfT9hdXRoU291cmNlPSR7YXV0aFNvdXJjZX1gO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGBtb25nb2RiOi8vJHtob3N0T3JVcmx9OiR7cG9ydH0vJHtkYk5hbWV9P2F1dGhTb3VyY2U9JHthdXRoU291cmNlfWA7XHJcbiAgICAgICAgICAgIH0pKCk7XHJcbiAgICAgICAgdGhpcy5jbGllbnQgPSBuZXcgTW9uZ29DbGllbnQodXJpLCB7IHVzZU5ld1VybFBhcnNlcjogdHJ1ZSwgdXNlVW5pZmllZFRvcG9sb2d5OiB0cnVlIH0pO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2xpZW50LmNvbm5lY3QoKTtcclxuICAgICAgICAgICAgdGhpcy5kYiA9IHRoaXMuY2xpZW50LmRiKGRiTmFtZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PTkdPREJfRVJST1IsIGUubWVzc2FnZSwgbnVsbCwgdHJ1ZSwgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgU2V0cyB0aGUgY3VycmVudCBkYXRhYmFzZSB0byBwZXJmb3JtIGZ1cnRoZXIgYWN0aW9ucy5cclxuICAgICAqIEBmdW5jdGlvbiBzZXREYXRhYmFzZSBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkYk5hbWUgLSBEYXRhYmFzZSBuYW1lLlxyXG4gICAgICovXHJcbiAgICBzZXREYXRhYmFzZShkYk5hbWUpIHtcclxuICAgICAgICB0aGlzLmRiID0gdGhpcy5jbGllbnQuZGIoZGJOYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFNldHMgdGhlIGN1cnJlbnQgY29sbGVjdGlvbiB0byBwZXJmb3JtIGZ1cnRoZXIgYWN0aW9ucy5cclxuICAgICAqIEBmdW5jdGlvbiBzZXRDb2xsZWN0aW9uIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNvbGxlY3Rpb25OYW1lIC0gQ29sbGVjdGlvbiBuYW1lLlxyXG4gICAgICovXHJcbiAgICBzZXRDb2xsZWN0aW9uKGNvbGxlY3Rpb25OYW1lKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9uID0gdGhpcy5kYi5jb2xsZWN0aW9uKGNvbGxlY3Rpb25OYW1lKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IEZpbmRzIGRvY3VtZW50cyBpbiB0aGUgY3VycmVudCBjb2xsZWN0aW9uLlxyXG4gICAgICogQGZ1bmN0aW9uIGZpbmQgXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZmlsdGVyIC0gVGhlIGZpbHRlciBwcmVkaWNhdGUuXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIE9wdGlvbmFsIHNldHRpbmdzIGZvciB0aGUgY29tbWFuZC5cclxuICAgICAqIEByZXR1cm4ge29iamVjdH0gQSBsaXN0IG9mIGRvY3VtZW50cy5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgZmluZChmaWx0ZXIsIG9wdGlvbnMpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29sbGVjdGlvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jb2xsZWN0aW9uLmZpbmQoZmlsdGVyLCBvcHRpb25zKS50b0FycmF5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9OR09EQl9FUlJPUiwgZS5tZXNzYWdlLCBudWxsLCB0cnVlLCBlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBHZXRzIHRoZSBudW1iZXIgb2YgZG9jdW1lbnRzIG1hdGNoaW5nIHRoZSBmaWx0ZXIuXHJcbiAgICAgKiBAZnVuY3Rpb24gY291bnREb2N1bWVudHMgXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZmlsdGVyIC0gVGhlIGZpbHRlciBmb3IgdGhlIGNvdW50LlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBPcHRpb25hbCBzZXR0aW5ncyBmb3IgdGhlIGNvbW1hbmQuXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IE51bWJlciBvZiBkb2N1bWVudHMgbWF0Y2hpbmcgdGhlIGZpbHRlci5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgY291bnREb2N1bWVudHMoZmlsdGVyLCBvcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbGxlY3Rpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY29sbGVjdGlvbi5jb3VudERvY3VtZW50cyhmaWx0ZXIsIG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PTkdPREJfRVJST1IsIGUubWVzc2FnZSwgbnVsbCwgdHJ1ZSwgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgSW5zZXJ0cyBhIHNpbmdsZSBkb2N1bWVudCBpbnRvIGEgY29sbGVjdGlvbi5cclxuICAgICAqIEBmdW5jdGlvbiBpbnNlcnRPbmUgXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZG9jIC0gVGhlIGRvY3VtZW50IHRvIGluc2VydC5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gT3B0aW9uYWwgc2V0dGluZ3MgZm9yIHRoZSBjb21tYW5kLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBpbnNlcnRPbmUoZG9jLCBvcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbGxlY3Rpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY29sbGVjdGlvbi5pbnNlcnRPbmUoZG9jLCBvcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT05HT0RCX0VSUk9SLCBlLm1lc3NhZ2UsIG51bGwsIHRydWUsIGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IEluc2VydHMgYW4gYXJyYXkgb2YgZG9jdW1lbnRzIGludG8gYSBjb2xsZWN0aW9uLlxyXG4gICAgICogQGZ1bmN0aW9uIGluc2VydE1hbnkgXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZG9jcyAtIFRoZSBkb2N1bWVudHMgdG8gaW5zZXJ0LlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBPcHRpb25hbCBzZXR0aW5ncyBmb3IgdGhlIGNvbW1hbmQuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGluc2VydE1hbnkoZG9jcywgb3B0aW9ucykge1xyXG4gICAgICAgIGlmICghdGhpcy5jb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbGxlY3Rpb24uaW5zZXJ0TWFueShkb2NzLCBvcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT05HT0RCX0VSUk9SLCBlLm1lc3NhZ2UsIG51bGwsIHRydWUsIGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFVwZGF0ZSBhIHNpbmdsZSBkb2N1bWVudCBpbiBhIGNvbGxlY3Rpb24uXHJcbiAgICAgKiBAZnVuY3Rpb24gdXBkYXRlT25lIFxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGZpbHRlciAtIFRoZSBmaWx0ZXIgdXNlZCB0byBzZWxlY3QgdGhlIGRvY3VtZW50IHRvIHJlcGxhY2UuXHJcbiAgICAgKiBAcGFyYW0ge1VwZGF0ZUZpbHRlcjxUU2NoZW1hPnxEb2N1bWVudFtdfSB1cGRhdGUgLSBUaGUgbW9kaWZpY2F0aW9ucyB0byBhcHBseS5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gT3B0aW9uYWwgc2V0dGluZ3MgZm9yIHRoZSBjb21tYW5kLlxyXG4gICAgICovXHJcbiAgICBhc3luYyB1cGRhdGVPbmUoZmlsdGVyLCB1cGRhdGUpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29sbGVjdGlvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jb2xsZWN0aW9uLnVwZGF0ZU9uZShmaWx0ZXIsIHVwZGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9OR09EQl9FUlJPUiwgZS5tZXNzYWdlLCBudWxsLCB0cnVlLCBlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBVcGRhdGUgbXVsdGlwbGUgZG9jdW1lbnRzIGluIGEgY29sbGVjdGlvbi5cclxuICAgICAqIEBmdW5jdGlvbiB1cGRhdGVNYW55IFxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGZpbHRlciAtIFRoZSBmaWx0ZXIgdXNlZCB0byBzZWxlY3QgdGhlIGRvY3VtZW50IHRvIHVwZGF0ZS5cclxuICAgICAqIEBwYXJhbSB7VXBkYXRlRmlsdGVyPFRTY2hlbWE+fERvY3VtZW50W119IHVwZGF0ZSAtIFRoZSBtb2RpZmljYXRpb25zIHRvIGFwcGx5LlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBPcHRpb25hbCBzZXR0aW5ncyBmb3IgdGhlIGNvbW1hbmQuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHVwZGF0ZU1hbnkoZmlsdGVyLCB1cGRhdGUsIG9wdGlvbnMpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29sbGVjdGlvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jb2xsZWN0aW9uLnVwZGF0ZU1hbnkoZmlsdGVyLCB1cGRhdGUsIG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PTkdPREJfRVJST1IsIGUubWVzc2FnZSwgbnVsbCwgdHJ1ZSwgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgUmVwbGFjZSBhIGRvY3VtZW50IGluIGEgY29sbGVjdGlvbiB3aXRoIGFub3RoZXIgZG9jdW1lbnQuXHJcbiAgICAgKiBAZnVuY3Rpb24gcmVwbGFjZU9uZSBcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBmaWx0ZXIgLSBUaGUgZmlsdGVyIHVzZWQgdG8gc2VsZWN0IHRoZSBkb2N1bWVudCB0byByZXBsYWNlLlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRvYyAtIFRoZSBEb2N1bWVudCB0aGF0IHJlcGxhY2VzIHRoZSBtYXRjaGluZyBkb2N1bWVudC5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gT3B0aW9uYWwgc2V0dGluZ3MgZm9yIHRoZSBjb21tYW5kLlxyXG4gICAgICovXHJcbiAgICBhc3luYyByZXBsYWNlT25lKGZpbHRlciwgZG9jKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbGxlY3Rpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY29sbGVjdGlvbi5yZXBsYWNlT25lKGZpbHRlciwgZG9jKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT05HT0RCX0VSUk9SLCBlLm1lc3NhZ2UsIG51bGwsIHRydWUsIGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IERlbGV0ZSBhIGRvY3VtZW50IGZyb20gYSBjb2xsZWN0aW9uLlxyXG4gICAgICogQGZ1bmN0aW9uIGRlbGV0ZU9uZSBcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBmaWx0ZXIgLSBUaGUgZmlsdGVyIHVzZWQgdG8gc2VsZWN0IHRoZSBkb2N1bWVudCB0byByZW1vdmUuXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIE9wdGlvbmFsIHNldHRpbmdzIGZvciB0aGUgY29tbWFuZC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgZGVsZXRlT25lKGZpbHRlcikge1xyXG4gICAgICAgIGlmICghdGhpcy5jb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbGxlY3Rpb24uZGVsZXRlT25lKGZpbHRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9OR09EQl9FUlJPUiwgZS5tZXNzYWdlLCBudWxsLCB0cnVlLCBlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IERlbGV0ZSBtdWx0aXBsZSBkb2N1bWVudHMgZnJvbSBhIGNvbGxlY3Rpb24uXHJcbiAgICAgKiBAZnVuY3Rpb24gZGVsZXRlTWFueSBcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBmaWx0ZXIgLSBUaGUgZmlsdGVyIHVzZWQgdG8gc2VsZWN0IHRoZSBkb2N1bWVudHMgdG8gcmVtb3ZlLlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBPcHRpb25hbCBzZXR0aW5ncyBmb3IgdGhlIGNvbW1hbmQuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGRlbGV0ZU1hbnkoZmlsdGVyKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbGxlY3Rpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY29sbGVjdGlvbi5kZWxldGVNYW55KGZpbHRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9OR09EQl9FUlJPUiwgZS5tZXNzYWdlLCBudWxsLCB0cnVlLCBlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBHZXRzIG1vZHVsZSBuYW1lXHJcbiAgICAgKiBAZnVuY3Rpb24gbmFtZVxyXG4gICAgICogQHJldHVybiB7U3RyaW5nfSBDb25zdGFudCB2YWx1ZSBcInNoZWxsXCIuXHJcbiAgICAgKi9cclxuICAgIGdldCBuYW1lKCkge1xyXG4gICAgICAgIHJldHVybiBNT0RVTEVfTkFNRTtcclxuICAgIH1cclxufSJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQVNBLElBQUFBLGFBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFlBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLE9BQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUF5QyxTQUFBRCx1QkFBQUksQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQVh6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtFQUFFRztBQUFZLENBQUMsR0FBR04sT0FBTyxDQUFDLFNBQVMsQ0FBQztBQUsxQyxNQUFNTyxXQUFXLEdBQUcsT0FBTzs7QUFFM0I7QUFDQTtBQUNBO0FBQ0E7QUFDZSxNQUFNQyxhQUFhLFNBQVNDLHFCQUFZLENBQUM7RUFDcERDLFdBQVdBLENBQUNDLE9BQU8sRUFBRUMsT0FBTyxFQUFFQyxFQUFFLEVBQUVDLE1BQU0sRUFBRUMsT0FBTyxFQUFFQyxRQUFRLEVBQUU7SUFDekQsS0FBSyxDQUFDTCxPQUFPLEVBQUVDLE9BQU8sRUFBRUMsRUFBRSxFQUFFQyxNQUFNLEVBQUVDLE9BQU8sRUFBRUMsUUFBUSxDQUFDO0lBQ3RELElBQUksQ0FBQ0Msa0JBQWtCLEdBQUcsS0FBSztJQUMvQixJQUFJLENBQUNDLGNBQWMsR0FBRyxLQUFLO0lBQzNCLElBQUksQ0FBQ0MsTUFBTTtJQUNYLElBQUksQ0FBQ0MsRUFBRTtJQUNQLElBQUksQ0FBQ0MsVUFBVTtFQUNuQjtFQUNBO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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
|