oxygen-cli 1.22.0 → 1.99.0-alpha.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 +0 -50
- package/build/core/OxygenCore.js +56 -145
- package/build/errors/OxygenError.js +5 -15
- package/build/errors/helper.js +45 -49
- package/build/index.js +14 -6
- package/build/lib/cli-util.js +19 -19
- package/build/lib/cli.js +4 -2
- package/build/lib/parallel-launcher.js +333 -0
- package/build/lib/param-manager.js +66 -47
- package/build/lib/util.js +38 -9
- package/build/ox_modules/index.js +1 -97
- package/build/ox_modules/module-assert.js +19 -9
- package/build/ox_modules/module-dns.js +220 -0
- package/build/ox_modules/module-http.js +39 -51
- package/build/ox_modules/module-shell.js +19 -75
- package/build/ox_modules/module-utils.js +1 -108
- package/build/ox_modules/utils.js +1 -357
- package/build/reporter/FileReporterBase.js +5 -5
- package/build/reporter/ReportAggregator.js +127 -4
- package/build/runners/WorkerProcess.js +15 -28
- package/build/runners/index.js +2 -6
- package/build/runners/oxygen/OxygenWorker.js +8 -8
- package/build/runners/oxygen/index.js +17 -18
- package/build/runners/oxygen/worker.js +10 -8
- package/package.json +12 -46
- package/build/lib/img-merge.js +0 -163
- package/build/ox_modules/module-db.js +0 -146
- package/build/ox_modules/module-email.js +0 -212
- package/build/ox_modules/module-eyes.js +0 -189
- package/build/ox_modules/module-mailinator.js +0 -207
- package/build/ox_modules/module-mob/commands/alertAccept.js +0 -35
- package/build/ox_modules/module-mob/commands/alertDismiss.js +0 -35
- package/build/ox_modules/module-mob/commands/assertAlert.js +0 -56
- package/build/ox_modules/module-mob/commands/assertText.js +0 -45
- package/build/ox_modules/module-mob/commands/assertTitle.js +0 -43
- package/build/ox_modules/module-mob/commands/assertValue.js +0 -66
- package/build/ox_modules/module-mob/commands/back.js +0 -27
- package/build/ox_modules/module-mob/commands/clear.js +0 -40
- package/build/ox_modules/module-mob/commands/click.js +0 -35
- package/build/ox_modules/module-mob/commands/clickHidden.js +0 -52
- package/build/ox_modules/module-mob/commands/clickLong.js +0 -34
- package/build/ox_modules/module-mob/commands/clickMultipleTimes.js +0 -37
- package/build/ox_modules/module-mob/commands/closeApp.js +0 -27
- package/build/ox_modules/module-mob/commands/debug.js +0 -26
- package/build/ox_modules/module-mob/commands/dragAndDrop.js +0 -38
- package/build/ox_modules/module-mob/commands/enableNetwork.js +0 -75
- package/build/ox_modules/module-mob/commands/execute.js +0 -32
- package/build/ox_modules/module-mob/commands/findElement.js +0 -36
- package/build/ox_modules/module-mob/commands/findElements.js +0 -39
- package/build/ox_modules/module-mob/commands/getAlertText.js +0 -31
- package/build/ox_modules/module-mob/commands/getAppiumLogs.js +0 -26
- package/build/ox_modules/module-mob/commands/getBrowserLogs.js +0 -66
- package/build/ox_modules/module-mob/commands/getCurrentActivity.js +0 -26
- package/build/ox_modules/module-mob/commands/getCurrentPackage.js +0 -26
- package/build/ox_modules/module-mob/commands/getDeviceLogs.js +0 -57
- package/build/ox_modules/module-mob/commands/getDeviceTime.js +0 -27
- package/build/ox_modules/module-mob/commands/getLocation.js +0 -32
- package/build/ox_modules/module-mob/commands/getSource.js +0 -26
- package/build/ox_modules/module-mob/commands/getText.js +0 -36
- package/build/ox_modules/module-mob/commands/getTitle.js +0 -24
- package/build/ox_modules/module-mob/commands/getUrl.js +0 -28
- package/build/ox_modules/module-mob/commands/getValue.js +0 -50
- package/build/ox_modules/module-mob/commands/getWindowHandles.js +0 -27
- package/build/ox_modules/module-mob/commands/hideKeyboard.js +0 -33
- package/build/ox_modules/module-mob/commands/index.js +0 -594
- package/build/ox_modules/module-mob/commands/installApp.js +0 -28
- package/build/ox_modules/module-mob/commands/isAppInstalled.js +0 -28
- package/build/ox_modules/module-mob/commands/isCheckable.js +0 -31
- package/build/ox_modules/module-mob/commands/isChecked.js +0 -31
- package/build/ox_modules/module-mob/commands/isClickable.js +0 -31
- package/build/ox_modules/module-mob/commands/isExist.js +0 -36
- package/build/ox_modules/module-mob/commands/isSelected.js +0 -36
- package/build/ox_modules/module-mob/commands/isVisible.js +0 -36
- package/build/ox_modules/module-mob/commands/isWebViewContext.js +0 -27
- package/build/ox_modules/module-mob/commands/launchApp.js +0 -26
- package/build/ox_modules/module-mob/commands/longPressKeyCode.js +0 -30
- package/build/ox_modules/module-mob/commands/open.js +0 -43
- package/build/ox_modules/module-mob/commands/pause.js +0 -27
- package/build/ox_modules/module-mob/commands/removeApp.js +0 -28
- package/build/ox_modules/module-mob/commands/resetApp.js +0 -26
- package/build/ox_modules/module-mob/commands/scrollIntoElement.js +0 -86
- package/build/ox_modules/module-mob/commands/scrollIntoView.js +0 -40
- package/build/ox_modules/module-mob/commands/select.js +0 -54
- package/build/ox_modules/module-mob/commands/selectFrame.js +0 -53
- package/build/ox_modules/module-mob/commands/selectWindow.js +0 -149
- package/build/ox_modules/module-mob/commands/sendKeys.js +0 -84
- package/build/ox_modules/module-mob/commands/setContext.js +0 -28
- package/build/ox_modules/module-mob/commands/setNativeContext.js +0 -26
- package/build/ox_modules/module-mob/commands/setTimeout.js +0 -33
- package/build/ox_modules/module-mob/commands/setWebViewContext.js +0 -39
- package/build/ox_modules/module-mob/commands/shake.js +0 -27
- package/build/ox_modules/module-mob/commands/smsClickLink.js +0 -32
- package/build/ox_modules/module-mob/commands/smsGetText.js +0 -45
- package/build/ox_modules/module-mob/commands/swipe.js +0 -58
- package/build/ox_modules/module-mob/commands/swipeElement.js +0 -58
- package/build/ox_modules/module-mob/commands/swipeScreen.js +0 -56
- package/build/ox_modules/module-mob/commands/takeScreenshot.js +0 -27
- package/build/ox_modules/module-mob/commands/tap.js +0 -34
- package/build/ox_modules/module-mob/commands/type.js +0 -67
- package/build/ox_modules/module-mob/commands/unlockPattern.js +0 -92
- package/build/ox_modules/module-mob/commands/waitForExist.js +0 -29
- package/build/ox_modules/module-mob/commands/waitForInteractable.js +0 -42
- package/build/ox_modules/module-mob/commands/waitForVisible.js +0 -28
- package/build/ox_modules/module-mob.js +0 -699
- package/build/ox_modules/module-pdf.js +0 -328
- package/build/ox_modules/module-proxy.js +0 -324
- package/build/ox_modules/module-serial.js +0 -187
- package/build/ox_modules/module-soap.js +0 -260
- package/build/ox_modules/module-twilio.js +0 -192
- package/build/ox_modules/module-web/commands/alertAccept.js +0 -35
- package/build/ox_modules/module-web/commands/alertDismiss.js +0 -35
- package/build/ox_modules/module-web/commands/assertAlert.js +0 -55
- package/build/ox_modules/module-web/commands/assertExist.js +0 -28
- package/build/ox_modules/module-web/commands/assertSelectedLabel.js +0 -51
- package/build/ox_modules/module-web/commands/assertSelectedValue.js +0 -45
- package/build/ox_modules/module-web/commands/assertText.js +0 -45
- package/build/ox_modules/module-web/commands/assertTextNotPresent.js +0 -56
- package/build/ox_modules/module-web/commands/assertTextPresent.js +0 -52
- package/build/ox_modules/module-web/commands/assertTitle.js +0 -42
- package/build/ox_modules/module-web/commands/assertValue.js +0 -44
- package/build/ox_modules/module-web/commands/back.js +0 -27
- package/build/ox_modules/module-web/commands/clear.js +0 -41
- package/build/ox_modules/module-web/commands/click.js +0 -112
- package/build/ox_modules/module-web/commands/clickHidden.js +0 -79
- package/build/ox_modules/module-web/commands/closeWindow.js +0 -25
- package/build/ox_modules/module-web/commands/debug.js +0 -25
- package/build/ox_modules/module-web/commands/deleteCookies.js +0 -22
- package/build/ox_modules/module-web/commands/deselect.js +0 -34
- package/build/ox_modules/module-web/commands/doubleClick.js +0 -65
- package/build/ox_modules/module-web/commands/dragAndDrop.js +0 -36
- package/build/ox_modules/module-web/commands/execute.js +0 -36
- package/build/ox_modules/module-web/commands/fileBrowse.js +0 -72
- package/build/ox_modules/module-web/commands/findElement.js +0 -35
- package/build/ox_modules/module-web/commands/findElements.js +0 -38
- package/build/ox_modules/module-web/commands/fullscreenWindow.js +0 -24
- package/build/ox_modules/module-web/commands/getAlertText.js +0 -30
- package/build/ox_modules/module-web/commands/getAttribute.js +0 -38
- package/build/ox_modules/module-web/commands/getBrowserLogs.js +0 -34
- package/build/ox_modules/module-web/commands/getCookies.js +0 -23
- package/build/ox_modules/module-web/commands/getCssValue.js +0 -38
- package/build/ox_modules/module-web/commands/getElementCount.js +0 -29
- package/build/ox_modules/module-web/commands/getHTML.js +0 -30
- package/build/ox_modules/module-web/commands/getSource.js +0 -26
- package/build/ox_modules/module-web/commands/getText.js +0 -36
- package/build/ox_modules/module-web/commands/getTitle.js +0 -22
- package/build/ox_modules/module-web/commands/getUrl.js +0 -26
- package/build/ox_modules/module-web/commands/getValue.js +0 -43
- package/build/ox_modules/module-web/commands/getWindowHandles.js +0 -26
- package/build/ox_modules/module-web/commands/getWindowSize.js +0 -26
- package/build/ox_modules/module-web/commands/getXMLPageSource.js +0 -51
- package/build/ox_modules/module-web/commands/index.js +0 -634
- package/build/ox_modules/module-web/commands/isAlertPresent.js +0 -31
- package/build/ox_modules/module-web/commands/isChecked.js +0 -30
- package/build/ox_modules/module-web/commands/isExist.js +0 -36
- package/build/ox_modules/module-web/commands/isSelected.js +0 -35
- package/build/ox_modules/module-web/commands/isVisible.js +0 -36
- package/build/ox_modules/module-web/commands/makeVisible.js +0 -74
- package/build/ox_modules/module-web/commands/maximizeWindow.js +0 -24
- package/build/ox_modules/module-web/commands/minimizeWindow.js +0 -24
- package/build/ox_modules/module-web/commands/newWindow.js +0 -27
- package/build/ox_modules/module-web/commands/open.js +0 -42
- package/build/ox_modules/module-web/commands/pause.js +0 -26
- package/build/ox_modules/module-web/commands/point.js +0 -37
- package/build/ox_modules/module-web/commands/pointJS.js +0 -56
- package/build/ox_modules/module-web/commands/refresh.js +0 -26
- package/build/ox_modules/module-web/commands/rightClick.js +0 -61
- package/build/ox_modules/module-web/commands/rightClickActions.js +0 -57
- package/build/ox_modules/module-web/commands/scrollToElement.js +0 -33
- package/build/ox_modules/module-web/commands/select.js +0 -55
- package/build/ox_modules/module-web/commands/selectFrame.js +0 -52
- package/build/ox_modules/module-web/commands/selectWindow.js +0 -148
- package/build/ox_modules/module-web/commands/sendKeys.js +0 -56
- package/build/ox_modules/module-web/commands/setAutoWaitForAngular.js +0 -33
- package/build/ox_modules/module-web/commands/setTimeout.js +0 -33
- package/build/ox_modules/module-web/commands/setWindowSize.js +0 -29
- package/build/ox_modules/module-web/commands/takeScreenshot.js +0 -37
- package/build/ox_modules/module-web/commands/type.js +0 -52
- package/build/ox_modules/module-web/commands/waitForAngular.js +0 -83
- package/build/ox_modules/module-web/commands/waitForExist.js +0 -28
- package/build/ox_modules/module-web/commands/waitForInteractable.js +0 -31
- package/build/ox_modules/module-web/commands/waitForNotExist.js +0 -57
- package/build/ox_modules/module-web/commands/waitForNotText.js +0 -45
- package/build/ox_modules/module-web/commands/waitForNotValue.js +0 -45
- package/build/ox_modules/module-web/commands/waitForText.js +0 -45
- package/build/ox_modules/module-web/commands/waitForValue.js +0 -45
- package/build/ox_modules/module-web/commands/waitForVisible.js +0 -28
- package/build/ox_modules/module-web/commands/waitForWindow.js +0 -118
- package/build/ox_modules/module-web.js +0 -909
- package/build/ox_modules/module-win/commands/assertText.js +0 -41
- package/build/ox_modules/module-win/commands/assertTitle.js +0 -38
- package/build/ox_modules/module-win/commands/assertValue.js +0 -62
- package/build/ox_modules/module-win/commands/back.js +0 -21
- package/build/ox_modules/module-win/commands/clear.js +0 -34
- package/build/ox_modules/module-win/commands/click.js +0 -25
- package/build/ox_modules/module-win/commands/clickLong.js +0 -30
- package/build/ox_modules/module-win/commands/clickMultipleTimes.js +0 -33
- package/build/ox_modules/module-win/commands/findElement.js +0 -31
- package/build/ox_modules/module-win/commands/findElements.js +0 -31
- package/build/ox_modules/module-win/commands/getAppiumLogs.js +0 -22
- package/build/ox_modules/module-win/commands/getCurrentWindowHandle.js +0 -25
- package/build/ox_modules/module-win/commands/getLocation.js +0 -26
- package/build/ox_modules/module-win/commands/getSource.js +0 -22
- package/build/ox_modules/module-win/commands/getText.js +0 -32
- package/build/ox_modules/module-win/commands/getValue.js +0 -46
- package/build/ox_modules/module-win/commands/getWindowHandles.js +0 -25
- package/build/ox_modules/module-win/commands/index.js +0 -298
- package/build/ox_modules/module-win/commands/isCheckable.js +0 -26
- package/build/ox_modules/module-win/commands/isChecked.js +0 -26
- package/build/ox_modules/module-win/commands/isClickable.js +0 -26
- package/build/ox_modules/module-win/commands/isExist.js +0 -32
- package/build/ox_modules/module-win/commands/isSelected.js +0 -26
- package/build/ox_modules/module-win/commands/isVisible.js +0 -32
- package/build/ox_modules/module-win/commands/open.js +0 -24
- package/build/ox_modules/module-win/commands/pause.js +0 -23
- package/build/ox_modules/module-win/commands/rightClick.js +0 -30
- package/build/ox_modules/module-win/commands/selectWindow.js +0 -97
- package/build/ox_modules/module-win/commands/sendKeys.js +0 -50
- package/build/ox_modules/module-win/commands/setTimeout.js +0 -29
- package/build/ox_modules/module-win/commands/takeScreenshot.js +0 -26
- package/build/ox_modules/module-win/commands/tap.js +0 -29
- package/build/ox_modules/module-win/commands/type.js +0 -38
- package/build/ox_modules/module-win/commands/waitForExist.js +0 -25
- package/build/ox_modules/module-win/commands/waitForInteractable.js +0 -43
- package/build/ox_modules/module-win/commands/waitForVisible.js +0 -24
- package/build/ox_modules/module-win.js +0 -367
- package/build/ox_services/service-devtools/submodule-network.js +0 -338
- package/build/ox_services/service-devtools.js +0 -83
- package/build/runners/cucumber/CucumberEventListener.js +0 -181
- package/build/runners/cucumber/CucumberReporter.js +0 -277
- package/build/runners/cucumber/CucumberWorker.js +0 -337
- package/build/runners/cucumber/index.js +0 -159
- package/build/runners/cucumber/worker.js +0 -184
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oxygen-cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.99.0-alpha.0",
|
|
4
4
|
"description": "Automation framework for testing modern applications",
|
|
5
5
|
"main": "./build/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -35,73 +35,39 @@
|
|
|
35
35
|
}
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
|
-
"@babel/cli": "7.14.
|
|
39
|
-
"@babel/core": "7.14.
|
|
40
|
-
"@babel/preset-env": "7.14.
|
|
38
|
+
"@babel/cli": "7.14.8",
|
|
39
|
+
"@babel/core": "7.14.8",
|
|
40
|
+
"@babel/preset-env": "7.14.8",
|
|
41
41
|
"babel-plugin-source-map-support": "2.1.3",
|
|
42
42
|
"cross-env": "7.0.3",
|
|
43
43
|
"doctrine": "3.0.0",
|
|
44
44
|
"eslint": "6.8.0",
|
|
45
45
|
"husky": "4.3.8",
|
|
46
46
|
"md-reverse": "1.0.0",
|
|
47
|
-
"npm-run-all": "4.1.5"
|
|
47
|
+
"npm-run-all": "4.1.5",
|
|
48
|
+
"rimraf": "3.0.2"
|
|
48
49
|
},
|
|
49
50
|
"dependencies": {
|
|
50
|
-
"@applitools/eyes-webdriverio": "5.34.11",
|
|
51
|
-
"@lambdatest/node-rest-client": "1.0.0",
|
|
52
|
-
"@oxygenhq/chrome-remote-interface": "0.30.0",
|
|
53
51
|
"@oxygenhq/logger": "0.5.1",
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"chai": "4.3.4",
|
|
60
|
-
"chrome-har": "0.11.12",
|
|
61
|
-
"config": "3.3.6",
|
|
62
|
-
"cross-spawn": "7.0.3",
|
|
63
|
-
"csv-parse": "4.16.0",
|
|
64
|
-
"cucumber": "6.0.5",
|
|
65
|
-
"deasync": "0.1.21",
|
|
66
|
-
"decache": "4.6.0",
|
|
52
|
+
"async": "3.2.3",
|
|
53
|
+
"chai": "4.3.6",
|
|
54
|
+
"config": "3.3.7",
|
|
55
|
+
"csv-parse": "4.16.3",
|
|
56
|
+
"decache": "4.6.1",
|
|
67
57
|
"easyxml": "2.0.1",
|
|
68
58
|
"ejs": "3.0.2",
|
|
69
59
|
"esm": "3.2.25",
|
|
70
|
-
"fast-xml-parser": "^4.0.1",
|
|
71
|
-
"fibers": "5.0.0",
|
|
72
|
-
"glob": "7.1.7",
|
|
73
|
-
"glob-to-regexp": "0.4.1",
|
|
74
60
|
"global-agent": "3.0.0",
|
|
75
61
|
"got": "11.8.2",
|
|
76
|
-
"imap-simple": "5.1.0",
|
|
77
|
-
"is-glob": "4.0.1",
|
|
78
|
-
"jimp": "0.16.1",
|
|
79
62
|
"junit-report-builder": "3.0.0",
|
|
80
63
|
"lodash": "4.17.21",
|
|
81
|
-
"mailparser": "3.4.0",
|
|
82
64
|
"minimist": "1.2.5",
|
|
83
65
|
"mockery": "2.1.0",
|
|
84
66
|
"moment": "2.29.1",
|
|
85
|
-
"node-addon-api": "3.0.2",
|
|
86
|
-
"objects-to-csv": "1.3.6",
|
|
87
|
-
"pdf2json": "1.2.5",
|
|
88
|
-
"perfecto-reporting": "2.5.3",
|
|
89
|
-
"request": "2.88.2",
|
|
90
|
-
"saucelabs": "3.0.1",
|
|
91
|
-
"serialport": "9.2.8",
|
|
92
|
-
"soap": "0.43.0",
|
|
93
67
|
"source-map-support": "0.5.21",
|
|
94
68
|
"stacktrace-parser": "0.1.10",
|
|
95
|
-
"testdouble": "3.16.1",
|
|
96
|
-
"testingbot-api": "1.0.7",
|
|
97
|
-
"text-to-image": "2.4.4",
|
|
98
|
-
"twilio": "3.74.0",
|
|
99
|
-
"webdriverio": "7.9.0",
|
|
100
69
|
"when": "3.7.8",
|
|
101
|
-
"xlsx": "0.
|
|
102
|
-
},
|
|
103
|
-
"optionalDependencies": {
|
|
104
|
-
"odbc": "2.4.2"
|
|
70
|
+
"xlsx": "0.18.4"
|
|
105
71
|
},
|
|
106
72
|
"scripts": {
|
|
107
73
|
"build": "run-s clean compile",
|
package/build/lib/img-merge.js
DELETED
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
require("source-map-support/register");
|
|
4
|
-
|
|
5
|
-
var _jimp = _interopRequireDefault(require("jimp"));
|
|
6
|
-
|
|
7
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
8
|
-
|
|
9
|
-
function alignImage(total, size, align) {
|
|
10
|
-
if (align === 'center') {
|
|
11
|
-
return (total - size) / 2;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
if (align === 'end') {
|
|
15
|
-
return total - size;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
return 0;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
function calcMargin(obj = {}) {
|
|
22
|
-
if (Number.isInteger(obj)) {
|
|
23
|
-
return {
|
|
24
|
-
top: obj,
|
|
25
|
-
right: obj,
|
|
26
|
-
bottom: obj,
|
|
27
|
-
left: obj
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
if (typeof obj === 'string') {
|
|
32
|
-
const [top, right = top, bottom = top, left = right] = obj.split(' ');
|
|
33
|
-
return {
|
|
34
|
-
top: Number(top),
|
|
35
|
-
right: Number(right),
|
|
36
|
-
bottom: Number(bottom),
|
|
37
|
-
left: Number(left)
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
const {
|
|
42
|
-
top = 0,
|
|
43
|
-
right = 0,
|
|
44
|
-
bottom = 0,
|
|
45
|
-
left = 0
|
|
46
|
-
} = obj;
|
|
47
|
-
return {
|
|
48
|
-
top,
|
|
49
|
-
right,
|
|
50
|
-
bottom,
|
|
51
|
-
left
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
module.exports = function mergeImages(images, {
|
|
56
|
-
direction = false,
|
|
57
|
-
color = 0x00000000,
|
|
58
|
-
align = 'start',
|
|
59
|
-
offset = 0,
|
|
60
|
-
margin
|
|
61
|
-
} = {}) {
|
|
62
|
-
if (!Array.isArray(images)) {
|
|
63
|
-
throw new TypeError('`images` must be an array that contains images');
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
if (images.length < 1) {
|
|
67
|
-
throw new Error('At least `images` must contain more than one image');
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
const processImg = async img => {
|
|
71
|
-
const imgBuffer = await new Buffer.from(img, 'base64');
|
|
72
|
-
return _jimp.default.read(imgBuffer).then(imgObj => ({
|
|
73
|
-
img: imgObj
|
|
74
|
-
}));
|
|
75
|
-
};
|
|
76
|
-
|
|
77
|
-
return Promise.all(images.map(processImg)).then(imgs => {
|
|
78
|
-
let totalX = 0;
|
|
79
|
-
let totalY = 0;
|
|
80
|
-
const imgData = imgs.reduce((res, {
|
|
81
|
-
img,
|
|
82
|
-
offsetX = 0,
|
|
83
|
-
offsetY = 0
|
|
84
|
-
}) => {
|
|
85
|
-
const {
|
|
86
|
-
bitmap: {
|
|
87
|
-
width,
|
|
88
|
-
height
|
|
89
|
-
}
|
|
90
|
-
} = img;
|
|
91
|
-
res.push({
|
|
92
|
-
img,
|
|
93
|
-
x: totalX + offsetX,
|
|
94
|
-
y: totalY + offsetY,
|
|
95
|
-
offsetX,
|
|
96
|
-
offsetY
|
|
97
|
-
});
|
|
98
|
-
totalX += width + offsetX;
|
|
99
|
-
totalY += height + offsetY;
|
|
100
|
-
return res;
|
|
101
|
-
}, []);
|
|
102
|
-
const {
|
|
103
|
-
top,
|
|
104
|
-
right,
|
|
105
|
-
bottom,
|
|
106
|
-
left
|
|
107
|
-
} = calcMargin(margin);
|
|
108
|
-
const marginTopBottom = top + bottom;
|
|
109
|
-
const marginRightLeft = right + left;
|
|
110
|
-
const totalWidth = direction ? Math.max(...imgData.map(({
|
|
111
|
-
img: {
|
|
112
|
-
bitmap: {
|
|
113
|
-
width
|
|
114
|
-
}
|
|
115
|
-
},
|
|
116
|
-
offsetX
|
|
117
|
-
}) => width + offsetX)) : imgData.reduce((res, {
|
|
118
|
-
img: {
|
|
119
|
-
bitmap: {
|
|
120
|
-
width
|
|
121
|
-
}
|
|
122
|
-
},
|
|
123
|
-
offsetX
|
|
124
|
-
}, index) => res + width + offsetX + Number(index > 0) * offset, 0);
|
|
125
|
-
const totalHeight = direction ? imgData.reduce((res, {
|
|
126
|
-
img: {
|
|
127
|
-
bitmap: {
|
|
128
|
-
height
|
|
129
|
-
}
|
|
130
|
-
},
|
|
131
|
-
offsetY
|
|
132
|
-
}, index) => res + height + offsetY + Number(index > 0) * offset, 0) : Math.max(...imgData.map(({
|
|
133
|
-
img: {
|
|
134
|
-
bitmap: {
|
|
135
|
-
height
|
|
136
|
-
}
|
|
137
|
-
},
|
|
138
|
-
offsetY
|
|
139
|
-
}) => height + offsetY));
|
|
140
|
-
const baseImage = new _jimp.default(totalWidth + marginRightLeft, totalHeight + marginTopBottom, color);
|
|
141
|
-
const imgDataEntries = imgData.map((data, index) => [index, data]);
|
|
142
|
-
|
|
143
|
-
for (const [index, {
|
|
144
|
-
img,
|
|
145
|
-
x,
|
|
146
|
-
y,
|
|
147
|
-
offsetX,
|
|
148
|
-
offsetY
|
|
149
|
-
}] of imgDataEntries) {
|
|
150
|
-
const {
|
|
151
|
-
bitmap: {
|
|
152
|
-
width,
|
|
153
|
-
height
|
|
154
|
-
}
|
|
155
|
-
} = img;
|
|
156
|
-
const [px, py] = direction ? [alignImage(totalWidth, width, align) + offsetX, y + index * offset] : [x + index * offset, alignImage(totalHeight, height, align) + offsetY];
|
|
157
|
-
baseImage.composite(img, px + left, py + top);
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
return baseImage.getBase64Async(_jimp.default.MIME_JPEG);
|
|
161
|
-
});
|
|
162
|
-
};
|
|
163
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvaW1nLW1lcmdlLmpzIl0sIm5hbWVzIjpbImFsaWduSW1hZ2UiLCJ0b3RhbCIsInNpemUiLCJhbGlnbiIsImNhbGNNYXJnaW4iLCJvYmoiLCJOdW1iZXIiLCJpc0ludGVnZXIiLCJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiLCJzcGxpdCIsIm1vZHVsZSIsImV4cG9ydHMiLCJtZXJnZUltYWdlcyIsImltYWdlcyIsImRpcmVjdGlvbiIsImNvbG9yIiwib2Zmc2V0IiwibWFyZ2luIiwiQXJyYXkiLCJpc0FycmF5IiwiVHlwZUVycm9yIiwibGVuZ3RoIiwiRXJyb3IiLCJwcm9jZXNzSW1nIiwiaW1nIiwiaW1nQnVmZmVyIiwiQnVmZmVyIiwiZnJvbSIsIkppbXAiLCJyZWFkIiwidGhlbiIsImltZ09iaiIsIlByb21pc2UiLCJhbGwiLCJtYXAiLCJpbWdzIiwidG90YWxYIiwidG90YWxZIiwiaW1nRGF0YSIsInJlZHVjZSIsInJlcyIsIm9mZnNldFgiLCJvZmZzZXRZIiwiYml0bWFwIiwid2lkdGgiLCJoZWlnaHQiLCJwdXNoIiwieCIsInkiLCJtYXJnaW5Ub3BCb3R0b20iLCJtYXJnaW5SaWdodExlZnQiLCJ0b3RhbFdpZHRoIiwiTWF0aCIsIm1heCIsImluZGV4IiwidG90YWxIZWlnaHQiLCJiYXNlSW1hZ2UiLCJpbWdEYXRhRW50cmllcyIsImRhdGEiLCJweCIsInB5IiwiY29tcG9zaXRlIiwiZ2V0QmFzZTY0QXN5bmMiLCJNSU1FX0pQRUciXSwibWFwcGluZ3MiOiI7Ozs7QUFFQTs7OztBQUVBLFNBQVNBLFVBQVQsQ0FBb0JDLEtBQXBCLEVBQTJCQyxJQUEzQixFQUFpQ0MsS0FBakMsRUFBd0M7QUFDcEMsTUFBSUEsS0FBSyxLQUFLLFFBQWQsRUFBd0I7QUFDcEIsV0FBTyxDQUFDRixLQUFLLEdBQUdDLElBQVQsSUFBaUIsQ0FBeEI7QUFDSDs7QUFFRCxNQUFJQyxLQUFLLEtBQUssS0FBZCxFQUFxQjtBQUNqQixXQUFPRixL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YjtBQUFzQkMsTUFBQUE7QUFBdEIsS0FBUixDQUFYLElBQXVEZSxjQUF2RCxFQUF1RTtBQUNuRSxZQUFNO0FBQ1ZkLFFBQUFBLE1BQU0sRUFBRTtBQUFFQyxVQUFBQSxLQUFGO0FBQVNDLFVBQUFBO0FBQVQ7QUFERSxVQUVSckIsR0FGRTtBQUdBLFlBQU0sQ0FBQ21DLEVBQUQsRUFBS0MsRUFBTCxJQUFXOUMsU0FBUyxHQUM1QixDQUFDakIsVUFBVSxDQUFDc0QsVUFBRCxFQUFhUCxLQUFiLEVBQW9CNUMsS0FBcEIsQ0FBVixHQUF1Q3lDLE9BQXhDLEVBQWlETyxDQUFDLEdBQUdNLEtBQUssR0FBR3RDLE1BQTdELENBRDRCLEdBRTVCLENBQ0UrQixDQUFDLEdBQUdPLEtBQUssR0FBR3RDLE1BRGQsRUFFRW5CLFVBQVUsQ0FBQzBELFdBQUQsRUFBY1YsTUFBZCxFQUFzQjdDLEtBQXRCLENBQVYsR0FBeUMwQyxPQUYzQyxDQUZFO0FBT0FjLE1BQUFBLFNBQVMsQ0FBQ0ssU0FBVixDQUFvQnJDLEdBQXBCLEVBQXlCbUMsRUFBRSxHQUFHbkQsSUFBOUIsRUFBb0NvRCxFQUFFLEdBQUd2RCxHQUF6QztBQUNIOztBQUVELFdBQU9tRCxTQUFTLENBQUNNLGNBQVYsQ0FBeUJsQyxjQUFLbUMsU0FBOUIsQ0FBUDtBQUVILEdBdEdNLENBQVA7QUF1R0gsQ0E5SEQiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vcmFncmFnL21lcmdlLWJhc2U2NFxyXG5cclxuaW1wb3J0IEppbXAgZnJvbSAnamltcCc7XHJcblxyXG5mdW5jdGlvbiBhbGlnbkltYWdlKHRvdGFsLCBzaXplLCBhbGlnbikge1xyXG4gICAgaWYgKGFsaWduID09PSAnY2VudGVyJykge1xyXG4gICAgICAgIHJldHVybiAodG90YWwgLSBzaXplKSAvIDI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGFsaWduID09PSAnZW5kJykge1xyXG4gICAgICAgIHJldHVybiB0b3RhbCAtIHNpemU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIDA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhbGNNYXJnaW4ob2JqID0ge30pIHtcclxuICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG9iaikpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB0b3A6IG9iaixcclxuICAgICAgICAgICAgcmlnaHQ6IG9iaixcclxuICAgICAgICAgICAgYm90dG9tOiBvYmosXHJcbiAgICAgICAgICAgIGxlZnQ6IG9ialxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgY29uc3QgW3RvcCwgcmlnaHQgPSB0b3AsIGJvdHRvbSA9IHRvcCwgbGVmdCA9IHJpZ2h0XSA9IG9iai5zcGxpdCgnICcpO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB0b3A6IE51bWJlcih0b3ApLFxyXG4gICAgICAgICAgICByaWdodDogTnVtYmVyKHJpZ2h0KSxcclxuICAgICAgICAgICAgYm90dG9tOiBOdW1iZXIoYm90dG9tKSxcclxuICAgICAgICAgICAgbGVmdDogTnVtYmVyKGxlZnQpXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB7IHRvcCA9IDAsIHJpZ2h0ID0gMCwgYm90dG9tID0gMCwgbGVmdCA9IDAgfSA9IG9iajtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHRvcCxcclxuICAgICAgICByaWdodCxcclxuICAgICAgICBib3R0b20sXHJcbiAgICAgICAgbGVmdFxyXG4gICAgfTtcclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtZXJnZUltYWdlcyhcclxuICBpbWFnZXMsXHJcbiAge1xyXG4gICAgZGlyZWN0aW9uID0gZmFsc2UsXHJcbiAgICBjb2xvciA9IDB4MDAwMDAwMDAsXHJcbiAgICBhbGlnbiA9ICdzdGFydCcsXHJcbiAgICBvZmZzZXQgPSAwLFxyXG4gICAgbWFyZ2luXHJcbiAgfSA9IHt9XHJcbikge1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGltYWdlcykpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdgaW1hZ2VzYCBtdXN0IGJlIGFuIGFycmF5IHRoYXQgY29udGFpbnMgaW1hZ2VzJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGltYWdlcy5sZW5ndGggPCAxKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdCBsZWFzdCBgaW1hZ2VzYCBtdXN0IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSBpbWFnZScpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHByb2Nlc3NJbWcgPSBhc3luYyBpbWcgPT4ge1xyXG4gICAgICAgIGNvbnN0IGltZ0J1ZmZlciA9IGF3YWl0IG5ldyBCdWZmZXIuZnJvbShpbWcsICdiYXNlNjQnKTtcclxuICAgICAgICByZXR1cm4gSmltcC5yZWFkKGltZ0J1ZmZlcikudGhlbihpbWdPYmogPT4gKHsgaW1nOiBpbWdPYmogfSkpO1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoaW1hZ2VzLm1hcChwcm9jZXNzSW1nKSkudGhlbihpbWdzID0+IHtcclxuICAgICAgICBsZXQgdG90YWxYID0gMDtcclxuICAgICAgICBsZXQgdG90YWxZID0gMDtcclxuXHJcbiAgICAgICAgY29uc3QgaW1nRGF0YSA9IGltZ3MucmVkdWNlKChyZXMsIHsgaW1nLCBvZmZzZXRYID0gMCwgb2Zmc2V0WSA9IDAgfSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB7XHJcbiAgICAgICAgYml0bWFwOiB7IHdpZHRoLCBoZWlnaHQgfVxyXG4gICAgICB9ID0gaW1nO1xyXG5cclxuICAgICAgICAgICAgcmVzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgaW1nLFxyXG4gICAgICAgICAgICAgICAgeDogdG90YWxYICsgb2Zmc2V0WCxcclxuICAgICAgICAgICAgICAgIHk6IHRvdGFsWSArIG9mZnNldFksXHJcbiAgICAgICAgICAgICAgICBvZmZzZXRYLFxyXG4gICAgICAgICAgICAgICAgb2Zmc2V0WVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHRvdGFsWCArPSB3aWR0aCArIG9mZnNldFg7XHJcbiAgICAgICAgICAgIHRvdGFsWSArPSBoZWlnaHQgKyBvZmZzZXRZO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9LCBbXSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0IH0gPSBjYWxjTWFyZ2luKG1hcmdpbik7XHJcbiAgICAgICAgY29uc3QgbWFyZ2luVG9wQm90dG9tID0gdG9wICsgYm90dG9tO1xyXG4gICAgICAgIGNvbnN0IG1hcmdpblJpZ2h0TGVmdCA9IHJpZ2h0ICsgbGVmdDtcclxuXHJcbiAgICAgICAgY29uc3QgdG90YWxXaWR0aCA9IGRpcmVjdGlvblxyXG4gICAgICA/IE1hdGgubWF4KFxyXG4gICAgICAgICAgLi4uaW1nRGF0YS5tYXAoXHJcbiAgICAgICAgICAgICh7XHJcbiAgICAgICAgICAgICAgaW1nOiB7XHJcbiAgICAgICAgICAgICAgICBiaXRtYXA6IHsgd2lkdGggfVxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgb2Zmc2V0WFxyXG4gICAgICAgICAgICB9KSA9PiB3aWR0aCArIG9mZnNldFhcclxuICAgICAgICAgIClcclxuICAgICAgICApXHJcbiAgICAgIDogaW1nRGF0YS5yZWR1Y2UoXHJcbiAgICAgICAgICAoXHJcbiAgICAgICAgICAgIHJlcyxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGltZzoge1xyXG4gICAgICAgICAgICAgICAgYml0bWFwOiB7IHdpZHRoIH1cclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIG9mZnNldFhcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgaW5kZXhcclxuICAgICAgICAgICkgPT4gcmVzICsgd2lkdGggKyBvZmZzZXRYICsgTnVtYmVyKGluZGV4ID4gMCkgKiBvZmZzZXQsXHJcbiAgICAgICAgICAwXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgdG90YWxIZWlnaHQgPSBkaXJlY3Rpb25cclxuICAgICAgPyBpbWdEYXRhLnJlZHVjZShcclxuICAgICAgICAgIChcclxuICAgICAgICAgICAgcmVzLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgaW1nOiB7XHJcbiAgICAgICAgICAgICAgICBiaXRtYXA6IHsgaGVpZ2h0IH1cclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIG9mZnNldFlcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgaW5kZXhcclxuICAgICAgICAgICkgPT4gcmVzICsgaGVpZ2h0ICsgb2Zmc2V0WSArIE51bWJlcihpbmRleCA+IDApICogb2Zmc2V0LFxyXG4gICAgICAgICAgMFxyXG4gICAgICAgIClcclxuICAgICAgOiBNYXRoLm1heChcclxuICAgICAgICAgIC4uLmltZ0RhdGEubWFwKFxyXG4gICAgICAgICAgICAoe1xyXG4gICAgICAgICAgICAgIGltZzoge1xyXG4gICAgICAgICAgICAgICAgYml0bWFwOiB7IGhlaWdodCB9XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBvZmZzZXRZXHJcbiAgICAgICAgICAgIH0pID0+IGhlaWdodCArIG9mZnNldFlcclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCBiYXNlSW1hZ2UgPSBuZXcgSmltcChcclxuICAgICAgdG90YWxXaWR0aCArIG1hcmdpblJpZ2h0TGVmdCxcclxuICAgICAgdG90YWxIZWlnaHQgKyBtYXJnaW5Ub3BCb3R0b20sXHJcbiAgICAgIGNvbG9yXHJcbiAgICApO1xyXG5cclxuICAgIC8vIEZhbGxiYWNrIGZvciBgQXJyYXkjZW50cmllcygpYFxyXG4gICAgICAgIGNvbnN0IGltZ0RhdGFFbnRyaWVzID0gaW1nRGF0YS5tYXAoKGRhdGEsIGluZGV4KSA9PiBbaW5kZXgsIGRhdGFdKTtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBbaW5kZXgsIHsgaW1nLCB4LCB5LCBvZmZzZXRYLCBvZmZzZXRZIH1dIG9mIGltZ0RhdGFFbnRyaWVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHtcclxuICAgICAgICBiaXRtYXA6IHsgd2lkdGgsIGhlaWdodCB9XHJcbiAgICAgIH0gPSBpbWc7XHJcbiAgICAgICAgICAgIGNvbnN0IFtweCwgcHldID0gZGlyZWN0aW9uXHJcbiAgICAgICAgPyBbYWxpZ25JbWFnZSh0b3RhbFdpZHRoLCB3aWR0aCwgYWxpZ24pICsgb2Zmc2V0WCwgeSArIGluZGV4ICogb2Zmc2V0XVxyXG4gICAgICAgIDogW1xyXG4gICAgICAgICAgICB4ICsgaW5kZXggKiBvZmZzZXQsXHJcbiAgICAgICAgICAgIGFsaWduSW1hZ2UodG90YWxIZWlnaHQsIGhlaWdodCwgYWxpZ24pICsgb2Zmc2V0WVxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgICAgICBiYXNlSW1hZ2UuY29tcG9zaXRlKGltZywgcHggKyBsZWZ0LCBweSArIHRvcCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYmFzZUltYWdlLmdldEJhc2U2NEFzeW5jKEppbXAuTUlNRV9KUEVHKTtcclxuICAgIC8vIHJldHVybiBiYXNlSW1hZ2U7XHJcbiAgICB9KTtcclxufTtcclxuIl19
|
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
require("source-map-support/register");
|
|
4
|
-
|
|
5
|
-
var _OxygenError = _interopRequireDefault(require("../errors/OxygenError"));
|
|
6
|
-
|
|
7
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
8
|
-
|
|
9
|
-
/*
|
|
10
|
-
* Copyright (C) 2015-present CloudBeat Limited
|
|
11
|
-
*
|
|
12
|
-
* This program is free software: you can redistribute it and/or modify
|
|
13
|
-
* it under the terms of the GNU General Public License as published by
|
|
14
|
-
* the Free Software Foundation, either version 3 of the License, or
|
|
15
|
-
* (at your option) any later version.
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* @name db
|
|
20
|
-
* @description Provides methods for working with Data Bases through ODBC.
|
|
21
|
-
* @note Before using this module, make sure to install `unixodbc`:
|
|
22
|
-
* * Windows - Install `Windows SDK`
|
|
23
|
-
* * OS X - `brew install unixodbc`
|
|
24
|
-
* * Linux - `sudo apt-get install unixodbc unixodbc-dev` or `sudo dnf install unixODBC unixODBC-devel`
|
|
25
|
-
*/
|
|
26
|
-
var connection;
|
|
27
|
-
|
|
28
|
-
var errHelper = require('../errors/helper');
|
|
29
|
-
|
|
30
|
-
module.exports = function () {
|
|
31
|
-
// FIXME: change setConnectionString to init and add hadnling in here
|
|
32
|
-
module.isInitialized = function () {
|
|
33
|
-
return true;
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
module._openDbConn = async function () {
|
|
37
|
-
if (!this.connString) {
|
|
38
|
-
throw new _OxygenError.default(errHelper.errorCode.DB_CONNECTION_ERROR, 'No connection string specified. Use db.setConnectionString().');
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
try {
|
|
42
|
-
// ignore this module if odbc wasn't installed
|
|
43
|
-
var db;
|
|
44
|
-
|
|
45
|
-
try {
|
|
46
|
-
db = require('odbc');
|
|
47
|
-
} catch (e) {
|
|
48
|
-
// could happen only on unix due to missing unixodbc binaries
|
|
49
|
-
const ModuleUnavailableError = require('../errors/ModuleUnavailableError');
|
|
50
|
-
|
|
51
|
-
throw new ModuleUnavailableError('Unable to load DB module. ' + e.message);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
connection = await db.connect(this.connString);
|
|
55
|
-
} catch (e) {
|
|
56
|
-
throw new _OxygenError.default(errHelper.errorCode.DB_CONNECTION_ERROR, errHelper.getDbErrorMessage(e));
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
/**
|
|
60
|
-
* @summary Sets DB connection string to be used by other methods.
|
|
61
|
-
* @description This method doesn't actually open the connection as it's opened/closed
|
|
62
|
-
* automatically by query methods.
|
|
63
|
-
* Example connection strings:
|
|
64
|
-
* - `Driver={MySQL ODBC 5.3 UNICODE Driver};Server=localhost;Database=myDatabase;
|
|
65
|
-
* User=myUsername;Password=myPassword;Option=3;`
|
|
66
|
-
* - `Driver={Oracle in instantclient_11_2};dbq=127.0.0.1:1521/XE;uid=myUsername;
|
|
67
|
-
* pwd=myPassword;`
|
|
68
|
-
* @function setConnectionString
|
|
69
|
-
* @param {String} connString - ODBC connection string.
|
|
70
|
-
*/
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
module.setConnectionString = function (connString) {
|
|
74
|
-
module.connString = connString;
|
|
75
|
-
};
|
|
76
|
-
/**
|
|
77
|
-
* @summary Executes SQL query and returns the first column of the first row in the result set.
|
|
78
|
-
* @function getScalar
|
|
79
|
-
* @param {String} query - The query to execute.
|
|
80
|
-
* @return {Object} The first column of the first row in the result set, or null if the result
|
|
81
|
-
* set is empty.
|
|
82
|
-
*/
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
module.getScalar = async function (query) {
|
|
86
|
-
await module._openDbConn();
|
|
87
|
-
|
|
88
|
-
try {
|
|
89
|
-
var resultSet = await connection.query(query);
|
|
90
|
-
|
|
91
|
-
if (resultSet.length === 0) {
|
|
92
|
-
return null;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
var firstRow = resultSet[0];
|
|
96
|
-
var firstCol = firstRow[Object.keys(firstRow)[0]];
|
|
97
|
-
return firstCol;
|
|
98
|
-
} catch (e) {
|
|
99
|
-
throw new _OxygenError.default(errHelper.errorCode.DB_QUERY_ERROR, errHelper.getDbErrorMessage(e));
|
|
100
|
-
} finally {
|
|
101
|
-
await connection.close();
|
|
102
|
-
}
|
|
103
|
-
};
|
|
104
|
-
/**
|
|
105
|
-
* @summary Executes SQL query and returns the result set.
|
|
106
|
-
* @function executeQuery
|
|
107
|
-
* @param {String} query - The query to execute.
|
|
108
|
-
* @return {Object} The result set.
|
|
109
|
-
*/
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
module.executeQuery = async function (query) {
|
|
113
|
-
await module._openDbConn();
|
|
114
|
-
|
|
115
|
-
try {
|
|
116
|
-
const querySyncRetval = await connection.query(query);
|
|
117
|
-
return querySyncRetval;
|
|
118
|
-
} catch (e) {
|
|
119
|
-
throw new _OxygenError.default(errHelper.errorCode.DB_QUERY_ERROR, errHelper.getDbErrorMessage(e));
|
|
120
|
-
} finally {
|
|
121
|
-
await connection.close();
|
|
122
|
-
}
|
|
123
|
-
};
|
|
124
|
-
/**
|
|
125
|
-
* @summary Executes SQL statement.
|
|
126
|
-
* @description Any results from the query are discarded.
|
|
127
|
-
* @function executeNonQuery
|
|
128
|
-
* @param {String} query - The query to execute.
|
|
129
|
-
*/
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
module.executeNonQuery = async function (query) {
|
|
133
|
-
await module._openDbConn();
|
|
134
|
-
|
|
135
|
-
try {
|
|
136
|
-
await connection.query(query);
|
|
137
|
-
} catch (e) {
|
|
138
|
-
throw new _OxygenError.default(errHelper.errorCode.DB_QUERY_ERROR, errHelper.getDbErrorMessage(e));
|
|
139
|
-
} finally {
|
|
140
|
-
await connection.close();
|
|
141
|
-
}
|
|
142
|
-
};
|
|
143
|
-
|
|
144
|
-
return module;
|
|
145
|
-
};
|
|
146
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1kYi5qcyJdLCJuYW1lcyI6WyJjb25uZWN0aW9uIiwiZXJySGVscGVyIiwicmVxdWlyZSIsIm1vZHVsZSIsImV4cG9ydHMiLCJpc0luaXRpYWxpemVkIiwiX29wZW5EYkNvbm4iLCJjb25uU3RyaW5nIiwiT3hFcnJvciIsImVycm9yQ29kZSIsIkRCX0NPTk5FQ1RJT05fRVJST1IiLCJkYiIsImUiLCJNb2R1bGVVbmF2YWlsYWJsZUVycm9yIiwibWVzc2FnZSIsImNvbm5lY3QiLCJnZXREYkVycm9yTWVzc2FnZSIsInNldENvbm5lY3Rpb25TdHJpbmciLCJnZXRTY2FsYXIiLCJxdWVyeSIsInJlc3VsdFNldCIsImxlbmd0aCIsImZpcnN0Um93IiwiZmlyc3RDb2wiLCJPYmplY3QiLCJrZXlzIiwiREJfUVVFUllfRVJST1IiLCJjbG9zZSIsImV4ZWN1dGVRdWVyeSIsInF1ZXJ5U3luY1JldHZhbCIsImV4ZWN1dGVOb25RdWVyeSJdLCJtYXBwaW5ncyI6Ijs7OztBQW9CQTs7OztBQXBCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxJQUFJQSxVQUFKOztBQUdBLElBQUlDLFNBQVMsR0FBR0MsT0FBTyxDQUFDLGtCQUFELENBQXZCOztBQUVBQyxNQUFNLENBQUNDLE9BQVAsR0FBaUIsWUFBVztBQUN4QjtBQUNBRCxFQUFBQSxNQUFNLENBQUNFLGFBQVAsR0FBdUIsWUFBVztBQUM5QixXQUFPLElBQVA7QUFDSCxHQUZEOztBQUlBRixFQUFBQSxNQUFNLENBQUNHLFdBQVAsR0FBcUIsa0JBQWlCO0FBQ2xDLFFBQUksQ0FBQyxLQUFLQyxVQUFWLEVBQXNCO0FBQ2xCLFlBQU0sSUFBSUMsb0JBQUosQ0FBWVAsU0FBUyxDQUFDUSxTQUFWLENBQW9CQyxtQkFBaEMsRUFBcUQsK0RBQXJELENBQU47QUFDSDs7QUFFRCxR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QkEsS0FBakIsQ0FBTjtBQUNILEtBRkQsQ0FFRSxPQUFPUCxDQUFQLEVBQVU7QUFDUixZQUFNLElBQUlKLG9CQUFKLENBQVlQLFNBQVMsQ0FBQ1EsU0FBVixDQUFvQmlCLGNBQWhDLEVBQWdEekIsU0FBUyxDQUFDZSxpQkFBVixDQUE0QkosQ0FBNUIsQ0FBaEQsQ0FBTjtBQUNILEtBSkQsU0FJVTtBQUNOLFlBQU1aLFVBQVUsQ0FBQzJCLEtBQVgsRUFBTjtBQUNIO0FBQ0osR0FURDs7QUFXQSxTQUFPeEIsTUFBUDtBQUNILENBeEdEIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWUgZGJcclxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIG1ldGhvZHMgZm9yIHdvcmtpbmcgd2l0aCBEYXRhIEJhc2VzIHRocm91Z2ggT0RCQy5cclxuICogQG5vdGUgQmVmb3JlIHVzaW5nIHRoaXMgbW9kdWxlLCBtYWtlIHN1cmUgdG8gaW5zdGFsbCBgdW5peG9kYmNgOiAgXHJcbiAqICAgKiBXaW5kb3dzIC0gSW5zdGFsbCBgV2luZG93cyBTREtgICBcclxuICogICAqIE9TIFggLSAgYGJyZXcgaW5zdGFsbCB1bml4b2RiY2AgIFxyXG4gKiAgICogTGludXggLSBgc3VkbyBhcHQtZ2V0IGluc3RhbGwgdW5peG9kYmMgdW5peG9kYmMtZGV2YCBvciBgc3VkbyBkbmYgaW5zdGFsbCB1bml4T0RCQyB1bml4T0RCQy1kZXZlbGBcclxuICovXHJcblxyXG52YXIgY29ubmVjdGlvbjtcclxuXHJcbmltcG9ydCBPeEVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbnZhciBlcnJIZWxwZXIgPSByZXF1aXJlKCcuLi9lcnJvcnMvaGVscGVyJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgLy8gRklYTUU6IGNoYW5nZSBzZXRDb25uZWN0aW9uU3RyaW5nIHRvIGluaXQgYW5kIGFkZCBoYWRubGluZyBpbiBoZXJlXHJcbiAgICBtb2R1bGUuaXNJbml0aWFsaXplZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuXHJcbiAgICBtb2R1bGUuX29wZW5EYkNvbm4gPSBhc3luYyBmdW5jdGlvbigpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29ublN0cmluZykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkRCX0NPTk5FQ1RJT05fRVJST1IsICdObyBjb25uZWN0aW9uIHN0cmluZyBzcGVjaWZpZWQuIFVzZSBkYi5zZXRDb25uZWN0aW9uU3RyaW5nKCkuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvLyBpZ25vcmUgdGhpcyBtb2R1bGUgaWYgb2RiYyB3YXNuJ3QgaW5zdGFsbGVkXHJcbiAgICAgICAgICAgIHZhciBkYjtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGRiID0gcmVxdWlyZSgnb2RiYycpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBjb3VsZCBoYXBwZW4gb25seSBvbiB1bml4IGR1ZSB0byBtaXNzaW5nIHVuaXhvZGJjIGJpbmFyaWVzXHJcbiAgICAgICAgICAgICAgICBjb25zdCBNb2R1bGVVbmF2YWlsYWJsZUVycm9yID0gcmVxdWlyZSgnLi4vZXJyb3JzL01vZHVsZVVuYXZhaWxhYmxlRXJyb3InKTtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBNb2R1bGVVbmF2YWlsYWJsZUVycm9yKCdVbmFibGUgdG8gbG9hZCBEQiBtb2R1bGUuICcrZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29ubmVjdGlvbiA9IGF3YWl0IGRiLmNvbm5lY3QodGhpcy5jb25uU3RyaW5nKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuREJfQ09OTkVDVElPTl9FUlJPUiwgZXJySGVscGVyLmdldERiRXJyb3JNZXNzYWdlKGUpKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBAc3VtbWFyeSBTZXRzIERCIGNvbm5lY3Rpb24gc3RyaW5nIHRvIGJlIHVzZWQgYnkgb3RoZXIgbWV0aG9kcy5cclxuICAgICogQGRlc2NyaXB0aW9uIFRoaXMgbWV0aG9kIGRvZXNuJ3QgYWN0dWFsbHkgb3BlbiB0aGUgY29ubmVjdGlvbiBhcyBpdCdzIG9wZW5lZC9jbG9zZWRcclxuICAgICogICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgYnkgcXVlcnkgbWV0aG9kcy4gIFxyXG4gICAgKiAgICAgICAgICAgICAgRXhhbXBsZSBjb25uZWN0aW9uIHN0cmluZ3M6ICBcclxuICAgICogICAgICAgICAgICAgIC0gYERyaXZlcj17TXlTUUwgT0RCQyA1LjMgVU5JQ09ERSBEcml2ZXJ9O1NlcnZlcj1sb2NhbGhvc3Q7RGF0YWJhc2U9bXlEYXRhYmFzZTtcclxuICAgICogICAgICAgICAgICAgICAgVXNlcj1teVVzZXJuYW1lO1Bhc3N3b3JkPW15UGFzc3dvcmQ7T3B0aW9uPTM7YCAgXHJcbiAgICAqICAgICAgICAgICAgICAtIGBEcml2ZXI9e09yYWNsZSBpbiBpbnN0YW50Y2xpZW50XzExXzJ9O2RicT0xMjcuMC4wLjE6MTUyMS9YRTt1aWQ9bXlVc2VybmFtZTtcclxuICAgICogICAgICAgICAgICAgICAgcHdkPW15UGFzc3dvcmQ7YFxyXG4gICAgKiBAZnVuY3Rpb24gc2V0Q29ubmVjdGlvblN0cmluZ1xyXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gY29ublN0cmluZyAtIE9EQkMgY29ubmVjdGlvbiBzdHJpbmcuXHJcbiAgICAqL1xyXG4gICAgbW9kdWxlLnNldENvbm5lY3Rpb25TdHJpbmcgPSBmdW5jdGlvbihjb25uU3RyaW5nKSB7XHJcbiAgICAgICAgbW9kdWxlLmNvbm5TdHJpbmcgPSBjb25uU3RyaW5nO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IEV4ZWN1dGVzIFNRTCBxdWVyeSBhbmQgcmV0dXJucyB0aGUgZmlyc3QgY29sdW1uIG9mIHRoZSBmaXJzdCByb3cgaW4gdGhlIHJlc3VsdCBzZXQuXHJcbiAgICAgKiBAZnVuY3Rpb24gZ2V0U2NhbGFyXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gcXVlcnkgLSBUaGUgcXVlcnkgdG8gZXhlY3V0ZS5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gVGhlIGZpcnN0IGNvbHVtbiBvZiB0aGUgZmlyc3Qgcm93IGluIHRoZSByZXN1bHQgc2V0LCBvciBudWxsIGlmIHRoZSByZXN1bHRcclxuICAgICAqICAgICAgICAgICAgICAgICAgc2V0IGlzIGVtcHR5LlxyXG4gICAgICovXHJcbiAgICBtb2R1bGUuZ2V0U2NhbGFyID0gYXN5bmMgZnVuY3Rpb24ocXVlcnkpIHtcclxuICAgICAgICBhd2FpdCBtb2R1bGUuX29wZW5EYkNvbm4oKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0U2V0ID0gYXdhaXQgY29ubmVjdGlvbi5xdWVyeShxdWVyeSk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHRTZXQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgZmlyc3RSb3cgPSByZXN1bHRTZXRbMF07XHJcbiAgICAgICAgICAgIHZhciBmaXJzdENvbCA9IGZpcnN0Um93W09iamVjdC5rZXlzKGZpcnN0Um93KVswXV07XHJcbiAgICAgICAgICAgIHJldHVybiBmaXJzdENvbDtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuREJfUVVFUllfRVJST1IsIGVyckhlbHBlci5nZXREYkVycm9yTWVzc2FnZShlKSk7XHJcbiAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgYXdhaXQgY29ubmVjdGlvbi5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBFeGVjdXRlcyBTUUwgcXVlcnkgYW5kIHJldHVybnMgdGhlIHJlc3VsdCBzZXQuXHJcbiAgICAgKiBAZnVuY3Rpb24gZXhlY3V0ZVF1ZXJ5XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gcXVlcnkgLSBUaGUgcXVlcnkgdG8gZXhlY3V0ZS5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gVGhlIHJlc3VsdCBzZXQuXHJcbiAgICAgKi9cclxuICAgIG1vZHVsZS5leGVjdXRlUXVlcnkgPSBhc3luYyBmdW5jdGlvbihxdWVyeSkge1xyXG4gICAgICAgIGF3YWl0IG1vZHVsZS5fb3BlbkRiQ29ubigpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5U3luY1JldHZhbCA9IGF3YWl0IGNvbm5lY3Rpb24ucXVlcnkocXVlcnkpO1xyXG4gICAgICAgICAgICByZXR1cm4gcXVlcnlTeW5jUmV0dmFsO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5EQl9RVUVSWV9FUlJPUiwgZXJySGVscGVyLmdldERiRXJyb3JNZXNzYWdlKGUpKTtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IEV4ZWN1dGVzIFNRTCBzdGF0ZW1lbnQuXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQW55IHJlc3VsdHMgZnJvbSB0aGUgcXVlcnkgYXJlIGRpc2NhcmRlZC5cclxuICAgICAqIEBmdW5jdGlvbiBleGVjdXRlTm9uUXVlcnlcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBxdWVyeSAtIFRoZSBxdWVyeSB0byBleGVjdXRlLlxyXG4gICAgICovXHJcbiAgICBtb2R1bGUuZXhlY3V0ZU5vblF1ZXJ5ID0gYXN5bmMgZnVuY3Rpb24ocXVlcnkpIHtcclxuICAgICAgICBhd2FpdCBtb2R1bGUuX29wZW5EYkNvbm4oKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLnF1ZXJ5KHF1ZXJ5KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuREJfUVVFUllfRVJST1IsIGVyckhlbHBlci5nZXREYkVycm9yTWVzc2FnZShlKSk7XHJcbiAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgYXdhaXQgY29ubmVjdGlvbi5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIG1vZHVsZTtcclxufTtcclxuIl19
|