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.
Files changed (265) hide show
  1. package/.husky/pre-commit +4 -0
  2. package/CHANGELOG.md +65 -0
  3. package/build/core/OxygenCore.js +36 -257
  4. package/build/core/OxygenEvents.js +1 -11
  5. package/build/core/OxygenModule.js +1 -14
  6. package/build/core/OxygenService.js +1 -12
  7. package/build/core/OxygenSubModule.js +1 -10
  8. package/build/core/WebDriverModule.js +1 -30
  9. package/build/core/utils.js +1 -17
  10. package/build/errors/HookError.js +1 -7
  11. package/build/errors/ModuleError.js +1 -7
  12. package/build/errors/ModuleUnavailableError.js +1 -3
  13. package/build/errors/OxygenError.js +1 -33
  14. package/build/errors/ScriptNotFound.js +1 -7
  15. package/build/errors/helper.js +46 -77
  16. package/build/index.js +6 -18
  17. package/build/lib/cli-util.js +28 -90
  18. package/build/lib/cli.js +1 -23
  19. package/build/lib/debugger.js +1 -144
  20. package/build/lib/img-merge.js +1 -15
  21. package/build/lib/launcher.js +1 -28
  22. package/build/lib/moduleRequire.js +1 -4
  23. package/build/lib/param-manager.js +1 -28
  24. package/build/lib/param-reader-csv.js +1 -15
  25. package/build/lib/param-reader-excel.js +1 -14
  26. package/build/lib/param-reader-json.js +1 -10
  27. package/build/lib/util.js +3 -58
  28. package/build/model/case-result.js +1 -2
  29. package/build/model/failure.js +1 -2
  30. package/build/model/status.js +1 -2
  31. package/build/model/step-result.js +1 -2
  32. package/build/model/suite-result.js +1 -2
  33. package/build/model/test-result.js +1 -2
  34. package/build/model/testcase.js +1 -2
  35. package/build/model/testsuite.js +1 -2
  36. package/build/ox_modules/index.js +13 -33
  37. package/build/ox_modules/module-assert.js +8 -24
  38. package/build/ox_modules/module-date.js +3 -8
  39. package/build/ox_modules/module-db.js +7 -28
  40. package/build/ox_modules/module-email.js +10 -36
  41. package/build/ox_modules/module-eyes.js +5 -46
  42. package/build/ox_modules/module-http.js +42 -104
  43. package/build/ox_modules/module-log.js +5 -22
  44. package/build/ox_modules/module-mailinator.js +10 -32
  45. package/build/ox_modules/module-mob/commands/alertAccept.js +1 -2
  46. package/build/ox_modules/module-mob/commands/alertDismiss.js +1 -2
  47. package/build/ox_modules/module-mob/commands/assertAlert.js +1 -6
  48. package/build/ox_modules/module-mob/commands/assertText.js +1 -3
  49. package/build/ox_modules/module-mob/commands/assertTitle.js +1 -4
  50. package/build/ox_modules/module-mob/commands/assertValue.js +9 -15
  51. package/build/ox_modules/module-mob/commands/back.js +1 -2
  52. package/build/ox_modules/module-mob/commands/clear.js +1 -4
  53. package/build/ox_modules/module-mob/commands/click.js +3 -4
  54. package/build/ox_modules/module-mob/commands/clickHidden.js +3 -9
  55. package/build/ox_modules/module-mob/commands/clickLong.js +1 -2
  56. package/build/ox_modules/module-mob/commands/clickMultipleTimes.js +1 -4
  57. package/build/ox_modules/module-mob/commands/closeApp.js +1 -2
  58. package/build/ox_modules/module-mob/commands/debug.js +2 -2
  59. package/build/ox_modules/module-mob/commands/dragAndDrop.js +1 -2
  60. package/build/ox_modules/module-mob/commands/enableNetwork.js +4 -12
  61. package/build/ox_modules/module-mob/commands/execute.js +1 -2
  62. package/build/ox_modules/module-mob/commands/findElement.js +1 -3
  63. package/build/ox_modules/module-mob/commands/findElements.js +1 -4
  64. package/build/ox_modules/module-mob/commands/getAlertText.js +1 -2
  65. package/build/ox_modules/module-mob/commands/getAppiumLogs.js +1 -2
  66. package/build/ox_modules/module-mob/commands/getBrowserLogs.js +1 -10
  67. package/build/ox_modules/module-mob/commands/getCurrentActivity.js +1 -2
  68. package/build/ox_modules/module-mob/commands/getCurrentPackage.js +1 -2
  69. package/build/ox_modules/module-mob/commands/getDeviceLogs.js +1 -9
  70. package/build/ox_modules/module-mob/commands/getDeviceTime.js +1 -2
  71. package/build/ox_modules/module-mob/commands/getLocation.js +1 -2
  72. package/build/ox_modules/module-mob/commands/getSource.js +1 -2
  73. package/build/ox_modules/module-mob/commands/getText.js +1 -4
  74. package/build/ox_modules/module-mob/commands/getTitle.js +1 -2
  75. package/build/ox_modules/module-mob/commands/getUrl.js +1 -2
  76. package/build/ox_modules/module-mob/commands/getValue.js +5 -9
  77. package/build/ox_modules/module-mob/commands/getWindowHandles.js +1 -2
  78. package/build/ox_modules/module-mob/commands/hideKeyboard.js +1 -2
  79. package/build/ox_modules/module-mob/commands/index.js +19 -94
  80. package/build/ox_modules/module-mob/commands/installApp.js +1 -2
  81. package/build/ox_modules/module-mob/commands/isAppInstalled.js +1 -2
  82. package/build/ox_modules/module-mob/commands/isCheckable.js +1 -2
  83. package/build/ox_modules/module-mob/commands/isChecked.js +1 -2
  84. package/build/ox_modules/module-mob/commands/isClickable.js +1 -2
  85. package/build/ox_modules/module-mob/commands/isExist.js +1 -3
  86. package/build/ox_modules/module-mob/commands/isSelected.js +1 -2
  87. package/build/ox_modules/module-mob/commands/isVisible.js +1 -3
  88. package/build/ox_modules/module-mob/commands/isWebViewContext.js +1 -2
  89. package/build/ox_modules/module-mob/commands/launchApp.js +1 -2
  90. package/build/ox_modules/module-mob/commands/longPressKeyCode.js +1 -2
  91. package/build/ox_modules/module-mob/commands/open.js +1 -3
  92. package/build/ox_modules/module-mob/commands/pause.js +1 -2
  93. package/build/ox_modules/module-mob/commands/removeApp.js +1 -2
  94. package/build/ox_modules/module-mob/commands/resetApp.js +1 -2
  95. package/build/ox_modules/module-mob/commands/scrollIntoElement.js +1 -6
  96. package/build/ox_modules/module-mob/commands/scrollIntoView.js +1 -2
  97. package/build/ox_modules/module-mob/commands/select.js +1 -4
  98. package/build/ox_modules/module-mob/commands/selectFrame.js +1 -4
  99. package/build/ox_modules/module-mob/commands/selectWindow.js +5 -26
  100. package/build/ox_modules/module-mob/commands/sendKeys.js +6 -9
  101. package/build/ox_modules/module-mob/commands/setContext.js +1 -2
  102. package/build/ox_modules/module-mob/commands/setNativeContext.js +1 -2
  103. package/build/ox_modules/module-mob/commands/setTimeout.js +1 -2
  104. package/build/ox_modules/module-mob/commands/setWebViewContext.js +3 -6
  105. package/build/ox_modules/module-mob/commands/shake.js +1 -2
  106. package/build/ox_modules/module-mob/commands/smsClickLink.js +1 -2
  107. package/build/ox_modules/module-mob/commands/smsGetText.js +3 -6
  108. package/build/ox_modules/module-mob/commands/swipe.js +1 -2
  109. package/build/ox_modules/module-mob/commands/swipeElement.js +1 -2
  110. package/build/ox_modules/module-mob/commands/swipeScreen.js +1 -2
  111. package/build/ox_modules/module-mob/commands/takeScreenshot.js +1 -2
  112. package/build/ox_modules/module-mob/commands/tap.js +1 -2
  113. package/build/ox_modules/module-mob/commands/type.js +3 -7
  114. package/build/ox_modules/module-mob/commands/unlockPattern.js +9 -10
  115. package/build/ox_modules/module-mob/commands/waitForExist.js +1 -2
  116. package/build/ox_modules/module-mob/commands/waitForInteractable.js +1 -3
  117. package/build/ox_modules/module-mob/commands/waitForVisible.js +1 -2
  118. package/build/ox_modules/module-mob.js +72 -142
  119. package/build/ox_modules/module-pdf.js +23 -62
  120. package/build/ox_modules/module-proxy.js +8 -68
  121. package/build/ox_modules/module-serial.js +7 -32
  122. package/build/ox_modules/module-shell.js +8 -27
  123. package/build/ox_modules/module-soap.js +14 -47
  124. package/build/ox_modules/module-twilio.js +10 -53
  125. package/build/ox_modules/module-utils.js +16 -51
  126. package/build/ox_modules/module-web/commands/alertAccept.js +1 -2
  127. package/build/ox_modules/module-web/commands/alertDismiss.js +1 -2
  128. package/build/ox_modules/module-web/commands/assertAlert.js +1 -6
  129. package/build/ox_modules/module-web/commands/assertExist.js +1 -2
  130. package/build/ox_modules/module-web/commands/assertSelectedLabel.js +1 -4
  131. package/build/ox_modules/module-web/commands/assertSelectedValue.js +1 -3
  132. package/build/ox_modules/module-web/commands/assertText.js +1 -3
  133. package/build/ox_modules/module-web/commands/assertTextNotPresent.js +1 -6
  134. package/build/ox_modules/module-web/commands/assertTextPresent.js +1 -6
  135. package/build/ox_modules/module-web/commands/assertTitle.js +1 -3
  136. package/build/ox_modules/module-web/commands/assertValue.js +1 -3
  137. package/build/ox_modules/module-web/commands/back.js +1 -2
  138. package/build/ox_modules/module-web/commands/clear.js +1 -5
  139. package/build/ox_modules/module-web/commands/click.js +4 -13
  140. package/build/ox_modules/module-web/commands/clickHidden.js +2 -7
  141. package/build/ox_modules/module-web/commands/closeWindow.js +1 -2
  142. package/build/ox_modules/module-web/commands/debug.js +2 -2
  143. package/build/ox_modules/module-web/commands/deleteCookies.js +1 -2
  144. package/build/ox_modules/module-web/commands/deselect.js +1 -2
  145. package/build/ox_modules/module-web/commands/doubleClick.js +3 -9
  146. package/build/ox_modules/module-web/commands/dragAndDrop.js +1 -2
  147. package/build/ox_modules/module-web/commands/execute.js +1 -2
  148. package/build/ox_modules/module-web/commands/fileBrowse.js +4 -10
  149. package/build/ox_modules/module-web/commands/findElement.js +1 -3
  150. package/build/ox_modules/module-web/commands/findElements.js +1 -4
  151. package/build/ox_modules/module-web/commands/fullscreenWindow.js +1 -2
  152. package/build/ox_modules/module-web/commands/getAlertText.js +1 -2
  153. package/build/ox_modules/module-web/commands/getAttribute.js +1 -4
  154. package/build/ox_modules/module-web/commands/getBrowserLogs.js +1 -3
  155. package/build/ox_modules/module-web/commands/getCookies.js +1 -2
  156. package/build/ox_modules/module-web/commands/getCssValue.js +1 -4
  157. package/build/ox_modules/module-web/commands/getElementCount.js +1 -2
  158. package/build/ox_modules/module-web/commands/getHTML.js +1 -2
  159. package/build/ox_modules/module-web/commands/getSource.js +1 -2
  160. package/build/ox_modules/module-web/commands/getText.js +1 -4
  161. package/build/ox_modules/module-web/commands/getTitle.js +1 -2
  162. package/build/ox_modules/module-web/commands/getUrl.js +1 -2
  163. package/build/ox_modules/module-web/commands/getValue.js +1 -5
  164. package/build/ox_modules/module-web/commands/getWindowHandles.js +1 -2
  165. package/build/ox_modules/module-web/commands/getWindowSize.js +1 -2
  166. package/build/ox_modules/module-web/commands/getXMLPageSource.js +1 -5
  167. package/build/ox_modules/module-web/commands/index.js +26 -99
  168. package/build/ox_modules/module-web/commands/isAlertPresent.js +1 -2
  169. package/build/ox_modules/module-web/commands/isChecked.js +1 -2
  170. package/build/ox_modules/module-web/commands/isExist.js +1 -3
  171. package/build/ox_modules/module-web/commands/isInteractable.js +33 -0
  172. package/build/ox_modules/module-web/commands/isSelected.js +1 -2
  173. package/build/ox_modules/module-web/commands/isVisible.js +1 -3
  174. package/build/ox_modules/module-web/commands/makeVisible.js +2 -10
  175. package/build/ox_modules/module-web/commands/maximizeWindow.js +1 -2
  176. package/build/ox_modules/module-web/commands/minimizeWindow.js +1 -2
  177. package/build/ox_modules/module-web/commands/newWindow.js +1 -2
  178. package/build/ox_modules/module-web/commands/open.js +1 -4
  179. package/build/ox_modules/module-web/commands/pause.js +1 -2
  180. package/build/ox_modules/module-web/commands/point.js +1 -2
  181. package/build/ox_modules/module-web/commands/pointJS.js +2 -8
  182. package/build/ox_modules/module-web/commands/refresh.js +1 -2
  183. package/build/ox_modules/module-web/commands/rightClick.js +3 -8
  184. package/build/ox_modules/module-web/commands/rightClickActions.js +1 -2
  185. package/build/ox_modules/module-web/commands/scrollToElement.js +1 -2
  186. package/build/ox_modules/module-web/commands/select.js +1 -5
  187. package/build/ox_modules/module-web/commands/selectFrame.js +1 -3
  188. package/build/ox_modules/module-web/commands/selectWindow.js +5 -26
  189. package/build/ox_modules/module-web/commands/sendKeys.js +3 -6
  190. package/build/ox_modules/module-web/commands/setAutoWaitForAngular.js +2 -2
  191. package/build/ox_modules/module-web/commands/setTimeout.js +1 -2
  192. package/build/ox_modules/module-web/commands/setWindowSize.js +1 -2
  193. package/build/ox_modules/module-web/commands/takeScreenshot.js +3 -5
  194. package/build/ox_modules/module-web/commands/type.js +1 -5
  195. package/build/ox_modules/module-web/commands/waitForAngular.js +6 -11
  196. package/build/ox_modules/module-web/commands/waitForExist.js +1 -2
  197. package/build/ox_modules/module-web/commands/waitForInteractable.js +1 -2
  198. package/build/ox_modules/module-web/commands/waitForNotExist.js +1 -8
  199. package/build/ox_modules/module-web/commands/waitForNotText.js +3 -5
  200. package/build/ox_modules/module-web/commands/waitForNotValue.js +3 -5
  201. package/build/ox_modules/module-web/commands/waitForText.js +3 -5
  202. package/build/ox_modules/module-web/commands/waitForValue.js +3 -5
  203. package/build/ox_modules/module-web/commands/waitForVisible.js +1 -2
  204. package/build/ox_modules/module-web/commands/waitForWindow.js +4 -21
  205. package/build/ox_modules/module-web.js +86 -192
  206. package/build/ox_modules/module-win/commands/assertText.js +1 -3
  207. package/build/ox_modules/module-win/commands/assertTitle.js +1 -4
  208. package/build/ox_modules/module-win/commands/assertValue.js +9 -15
  209. package/build/ox_modules/module-win/commands/back.js +1 -2
  210. package/build/ox_modules/module-win/commands/clear.js +1 -4
  211. package/build/ox_modules/module-win/commands/click.js +1 -2
  212. package/build/ox_modules/module-win/commands/clickLong.js +1 -2
  213. package/build/ox_modules/module-win/commands/clickMultipleTimes.js +1 -4
  214. package/build/ox_modules/module-win/commands/findElement.js +1 -3
  215. package/build/ox_modules/module-win/commands/findElements.js +1 -4
  216. package/build/ox_modules/module-win/commands/getAppiumLogs.js +1 -2
  217. package/build/ox_modules/module-win/commands/getCurrentWindowHandle.js +1 -2
  218. package/build/ox_modules/module-win/commands/getLocation.js +1 -2
  219. package/build/ox_modules/module-win/commands/getSource.js +1 -2
  220. package/build/ox_modules/module-win/commands/getText.js +1 -4
  221. package/build/ox_modules/module-win/commands/getValue.js +5 -9
  222. package/build/ox_modules/module-win/commands/getWindowHandles.js +1 -2
  223. package/build/ox_modules/module-win/commands/index.js +5 -43
  224. package/build/ox_modules/module-win/commands/isCheckable.js +1 -2
  225. package/build/ox_modules/module-win/commands/isChecked.js +1 -2
  226. package/build/ox_modules/module-win/commands/isClickable.js +1 -2
  227. package/build/ox_modules/module-win/commands/isExist.js +1 -3
  228. package/build/ox_modules/module-win/commands/isSelected.js +1 -2
  229. package/build/ox_modules/module-win/commands/isVisible.js +1 -3
  230. package/build/ox_modules/module-win/commands/open.js +1 -2
  231. package/build/ox_modules/module-win/commands/pause.js +1 -2
  232. package/build/ox_modules/module-win/commands/rightClick.js +1 -2
  233. package/build/ox_modules/module-win/commands/selectWindow.js +1 -15
  234. package/build/ox_modules/module-win/commands/sendKeys.js +1 -4
  235. package/build/ox_modules/module-win/commands/setTimeout.js +1 -2
  236. package/build/ox_modules/module-win/commands/takeScreenshot.js +1 -2
  237. package/build/ox_modules/module-win/commands/tap.js +1 -2
  238. package/build/ox_modules/module-win/commands/type.js +1 -4
  239. package/build/ox_modules/module-win/commands/waitForExist.js +1 -2
  240. package/build/ox_modules/module-win/commands/waitForInteractable.js +1 -4
  241. package/build/ox_modules/module-win/commands/waitForVisible.js +1 -2
  242. package/build/ox_modules/module-win.js +48 -87
  243. package/build/ox_modules/utils.js +22 -76
  244. package/build/ox_reporters/reporter-excel.js +1 -58
  245. package/build/ox_reporters/reporter-html.js +1 -28
  246. package/build/ox_reporters/reporter-json.js +1 -14
  247. package/build/ox_reporters/reporter-junit.js +1 -24
  248. package/build/ox_reporters/reporter-pdf.js +1 -19
  249. package/build/ox_reporters/reporter-xml.js +1 -17
  250. package/build/ox_services/service-devtools/submodule-network.js +3 -84
  251. package/build/ox_services/service-devtools.js +1 -23
  252. package/build/reporter/FileReporterBase.js +5 -44
  253. package/build/reporter/ReportAggregator.js +1 -65
  254. package/build/reporter/ReporterBase.js +1 -6
  255. package/build/runners/WorkerProcess.js +1 -99
  256. package/build/runners/cucumber/CucumberEventListener.js +4 -29
  257. package/build/runners/cucumber/CucumberReporter.js +1 -56
  258. package/build/runners/cucumber/CucumberWorker.js +1 -66
  259. package/build/runners/cucumber/index.js +1 -30
  260. package/build/runners/cucumber/worker.js +1 -18
  261. package/build/runners/index.js +1 -6
  262. package/build/runners/oxygen/OxygenWorker.js +20 -54
  263. package/build/runners/oxygen/index.js +17 -177
  264. package/build/runners/oxygen/worker.js +2 -25
  265. package/package.json +28 -29
@@ -1,17 +1,11 @@
1
1
  "use strict";
2
2
 
3
3
  require("source-map-support/register");
4
-
5
4
  var _logger = require("../../lib/logger");
6
-
7
5
  var _OxygenWorker = _interopRequireDefault(require("./OxygenWorker"));
8
-
9
6
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
-
11
7
  const oxutil = require('../../lib/util');
12
-
13
8
  const errorHelper = require('../../errors/helper');
14
-
15
9
  const reporter = {
16
10
  onSuiteStart: function (...args) {
17
11
  emitReporterEvent('onSuiteStart', args);
@@ -61,7 +55,6 @@ const logger = {
61
55
  if (!src) {
62
56
  src = _logger.DEFAULT_LOGGER_ISSUER;
63
57
  }
64
-
65
58
  const ts = oxutil.getTimeStamp();
66
59
  processSend({
67
60
  time: ts,
@@ -83,13 +76,10 @@ const logger = {
83
76
  });
84
77
  }
85
78
  };
86
-
87
79
  let _worker = new _OxygenWorker.default(reporter, logger);
88
-
89
80
  function stringify(obj) {
90
81
  return typeof obj === 'string' || obj instanceof String ? obj : JSON.stringify(obj, null, 2);
91
82
  }
92
-
93
83
  oxutil.hookLogs(logger);
94
84
  process.on('unhandledRejection', async (err, origin) => {
95
85
  logger.error(err.message, _logger.ISSUERS.USER);
@@ -114,7 +104,6 @@ process.on('message', async function (msg) {
114
104
  if (!msg.type) {
115
105
  return;
116
106
  }
117
-
118
107
  if ((msg.type === 'invoke' || msg.type === 'invoke:hook') && msg.method) {
119
108
  const {
120
109
  callId,
@@ -137,7 +126,6 @@ process.on('message', async function (msg) {
137
126
  subscribe(msg.event);
138
127
  }
139
128
  });
140
-
141
129
  async function dispose(status = null) {
142
130
  if (_worker) {
143
131
  try {
@@ -145,7 +133,6 @@ async function dispose(status = null) {
145
133
  } catch (e) {}
146
134
  }
147
135
  }
148
-
149
136
  function processSend(msg) {
150
137
  try {
151
138
  process.connected && process.send({
@@ -154,10 +141,8 @@ function processSend(msg) {
154
141
  });
155
142
  } catch (e) {}
156
143
  }
157
-
158
144
  async function invoke(method, args) {
159
145
  let retval, error;
160
-
161
146
  if (_worker && _worker[method] && typeof _worker[method] === 'function') {
162
147
  try {
163
148
  retval = await _worker[method].apply(_worker, args || []);
@@ -168,39 +153,32 @@ async function invoke(method, args) {
168
153
  } else {
169
154
  error = new Error(`Method "${method}" does not exist`);
170
155
  }
171
-
172
156
  if (error) {
173
157
  error = errorHelper.getFailureFromError(error);
174
158
  }
175
-
176
159
  return {
177
160
  retval,
178
161
  error
179
162
  };
180
163
  }
181
-
182
164
  async function invokeTestHook(method, args) {
183
165
  let retval = undefined,
184
- error = null;
185
-
166
+ error = null;
186
167
  try {
187
168
  retval = await _worker.callTestHook(method, args);
188
169
  } catch (e) {
189
170
  error = e.message;
190
171
  }
191
-
192
172
  return {
193
173
  retval,
194
174
  error
195
175
  };
196
176
  }
197
-
198
177
  async function subscribe(eventName) {
199
178
  if (_worker && _worker.on) {
200
179
  _worker.on(eventName, (...args) => emitWorkerEvent(eventName, args));
201
180
  }
202
181
  }
203
-
204
182
  function emitWorkerEvent(eventName, eventArgs) {
205
183
  processSend({
206
184
  event: 'event',
@@ -208,7 +186,6 @@ function emitWorkerEvent(eventName, eventArgs) {
208
186
  args: eventArgs
209
187
  });
210
188
  }
211
-
212
189
  function emitReporterEvent(eventName, eventArgs) {
213
190
  processSend({
214
191
  event: 'reporter',
@@ -216,4 +193,4 @@ function emitReporterEvent(eventName, eventArgs) {
216
193
  args: eventArgs
217
194
  });
218
195
  }
219
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydW5uZXJzL294eWdlbi93b3JrZXIuanMiXSwibmFtZXMiOlsib3h1dGlsIiwicmVxdWlyZSIsImVycm9ySGVscGVyIiwicmVwb3J0ZXIiLCJvblN1aXRlU3RhcnQiLCJhcmdzIiwiZW1pdFJlcG9ydGVyRXZlbnQiLCJvblN1aXRlRW5kIiwib25DYXNlU3RhcnQiLCJvbkNhc2VFbmQiLCJvblN0ZXBTdGFydCIsIm9uU3RlcEVuZCIsIm9uUnVubmVyRW5kIiwiZ2xvYmFsIiwiYnJvd3NlciIsImxvZ2dlciIsImluZm8iLCJtZXNzYWdlIiwic3JjIiwiREVGQVVMVF9MT0dHRVJfSVNTVUVSIiwidHMiLCJnZXRUaW1lU3RhbXAiLCJwcm9jZXNzU2VuZCIsInRpbWUiLCJldmVudCIsImxldmVsIiwiTEVWRUxTIiwiSU5GTyIsIm1zZyIsInN0cmluZ2lmeSIsImRlYnVnIiwiREVCVUciLCJlcnJvciIsImVyciIsIkVSUk9SIiwid2FybiIsIldBUk4iLCJfd29ya2VyIiwiT3h5Z2VuV29ya2VyIiwib2JqIiwiU3RyaW5nIiwiSlNPTiIsImhvb2tMb2dzIiwicHJvY2VzcyIsIm9uIiwib3JpZ2luIiwiSVNTVUVSUyIsIlVTRVIiLCJjb25zb2xlIiwibG9nIiwiZXJyTWVzc2FnZSIsImRpc3Bvc2UiLCJ0eXBlIiwibWV0aG9kIiwiY2FsbElkIiwiaW52b2tlRnVuYyIsImludm9rZVRlc3RIb29rIiwiaW52b2tlIiwicmV0dmFsIiwic3Vic2NyaWJlIiwic3RhdHVzIiwiZSIsImNvbm5lY3RlZCIsInNlbmQiLCJhcHBseSIsIkVycm9yIiwiZ2V0RmFpbHVyZUZyb21FcnJvciIsInVuZGVmaW5lZCIsImNhbGxUZXN0SG9vayIsImV2ZW50TmFtZSIsImVtaXRXb3JrZXJFdmVudCIsImV2ZW50QXJncyIsIm5hbWUiXSwibWFwcGluZ3MiOiI7Ozs7QUFhQTs7QUFDQTs7OztBQUNBLE1BQU1BLE1BQU0sR0FBR0MsT0FBTyxDQUFDLGdCQUFELENBQXRC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QUFJQSxPQUFPLENBQUNPLEVBQXZCLEVBQTJCO0FBQ3ZCUCxJQUFBQSxPQUFPLENBQUNPLEVBQVIsQ0FBV3lCLFNBQVgsRUFBc0IsQ0FBQyxHQUFHaEUsSUFBSixLQUFhaUUsZUFBZSxDQUFDRCxTQUFELEVBQVloRSxJQUFaLENBQWxEO0FBQ0g7QUFDSjs7QUFFRCxTQUFTaUUsZUFBVCxDQUF5QkQsU0FBekIsRUFBb0NFLFNBQXBDLEVBQStDO0FBQzNDakQsRUFBQUEsV0FBVyxDQUFDO0FBQ1JFLElBQUFBLEtBQUssRUFBRSxPQURDO0FBRVJnRCxJQUFBQSxJQUFJLEVBQUVILFNBRkU7QUFHUmhFLElBQUFBLElBQUksRUFBRWtFO0FBSEUsR0FBRCxDQUFYO0FBS0g7O0FBRUQsU0FBU2pFLGlCQUFULENBQTJCK0QsU0FBM0IsRUFBc0NFLFNBQXRDLEVBQWlEO0FBQzdDakQsRUFBQUEsV0FBVyxDQUFDO0FBQ1JFLElBQUFBLEtBQUssRUFBRSxVQURDO0FBRVI2QixJQUFBQSxNQUFNLEVBQUVnQixTQUZBO0FBR1JoRSxJQUFBQSxJQUFJLEVBQUVrRTtBQUhFLEdBQUQsQ0FBWDtBQUtIIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKlxyXG4gKiBCb2lsZXJwbGF0ZSBjb2RlIGZvciB1c2VyIHNjcmlwdHMuXHJcbiAqIFByb3ZpZGVzIGV2ZXJ5dGhpbmcgbmVjZXNzYXJ5IGZvciBleGVjdXRpbmcgSlMgdGVzdCBzY3JpcHRzLlxyXG4gKi9cclxuaW1wb3J0IHsgTEVWRUxTLCBERUZBVUxUX0xPR0dFUl9JU1NVRVIsIElTU1VFUlMgfSBmcm9tICcuLi8uLi9saWIvbG9nZ2VyJztcclxuaW1wb3J0IE94eWdlbldvcmtlciBmcm9tICcuL094eWdlbldvcmtlcic7XHJcbmNvbnN0IG94dXRpbCA9IHJlcXVpcmUoJy4uLy4uL2xpYi91dGlsJyk7XHJcbmNvbnN0IGVycm9ySGVscGVyID0gcmVxdWlyZSgnLi4vLi4vZXJyb3JzL2hlbHBlcicpO1xyXG5cclxuY29uc3QgcmVwb3J0ZXIgPSB7XHJcbiAgICBvblN1aXRlU3RhcnQ6IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcclxuICAgICAgICBlbWl0UmVwb3J0ZXJFdmVudCgnb25TdWl0ZVN0YXJ0JywgYXJncyk7XHJcbiAgICB9LFxyXG4gICAgb25TdWl0ZUVuZDogZnVuY3Rpb24oLi4uYXJncykge1xyXG4gICAgICAgIGVtaXRSZXBvcnRlckV2ZW50KCdvblN1aXRlRW5kJywgYXJncyk7XHJcbiAgICB9LFxyXG4gICAgb25DYXNlU3RhcnQ6IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcclxuICAgICAgICBlbWl0UmVwb3J0ZXJFdmVudCgnb25DYXNlU3RhcnQnLCBhcmdzKTtcclxuICAgIH0sXHJcbiAgICBvbkNhc2VFbmQ6IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcclxuICAgICAgICBlbWl0UmVwb3J0ZXJFdmVudCgnb25DYXNlRW5kJywgYXJncyk7XHJcbiAgICB9LFxyXG4gICAgb25TdGVwU3RhcnQ6IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcclxuICAgICAgICBlbWl0UmVwb3J0ZXJFdmVudCgnb25TdGVwU3RhcnQnLCBhcmdzKTtcclxuICAgIH0sXHJcbiAgICBvblN0ZXBFbmQ6IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcclxuICAgICAgICBlbWl0UmVwb3J0ZXJFdmVudCgnb25TdGVwRW5kJywgYXJncyk7XHJcbiAgICB9LFxyXG4gICAgb25SdW5uZXJFbmQ6IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcclxuICAgICAgICBlbWl0UmVwb3J0ZXJFdmVudCgnb25SdW5uZXJFbmQnLCBhcmdzKTtcclxuICAgIH1cclxufTtcclxuXHJcbi8vIG1vY2t1cCBnbG9iYmFsLmJyb3dzZXIgb2JqZWN0IGZvciBpbnRlcm5hbCBXRElPIGZ1bmN0aW9ucyB0byB3b3JrIHByb3Blcmx5XHJcbmdsb2JhbC5icm93c2VyID0ge307XHJcblxyXG5jb25zdCBsb2dnZXIgPSB7XHJcbiAgICBpbmZvOiBmdW5jdGlvbihtZXNzYWdlLCBzcmMgPSBERUZBVUxUX0xPR0dFUl9JU1NVRVIpIHtcclxuICAgICAgICBjb25zdCB0cyA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICBwcm9jZXNzU2VuZCh7IHRpbWU6IHRzLCBldmVudDogJ2xvZycsIGxldmVsOiBMRVZFTFMuSU5GTywgbXNnOiBzdHJpbmdpZnkobWVzc2FnZSksIHNyYyB9KTtcclxuICAgIH0sXHJcbiAgICBkZWJ1ZzogZnVuY3Rpb24obWVzc2FnZSwgc3JjID0gREVGQVVMVF9MT0dHRVJfSVNTVUVSKSB7XHJcbiAgICAgICAgY29uc3QgdHMgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XHJcbiAgICAgICAgcHJvY2Vzc1NlbmQoeyB0aW1lOiB0cywgZXZlbnQ6ICdsb2cnLCBsZXZlbDogTEVWRUxTLkRFQlVHLCBtc2c6IHN0cmluZ2lmeShtZXNzYWdlKSwgc3JjIH0pO1xyXG4gICAgfSxcclxuICAgIGVycm9yOiBmdW5jdGlvbihtZXNzYWdlLCBzcmMgPSBERUZBVUxUX0xPR0dFUl9JU1NVRVIsIGVyciA9IG51bGwpIHtcclxuICAgICAgICBpZiAoIXNyYykge1xyXG4gICAgICAgICAgICBzcmMgPSBERUZBVUxUX0xPR0dFUl9JU1NVRVI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRzID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgIHByb2Nlc3NTZW5kKHsgdGltZTogdHMsIGV2ZW50OiAnbG9nJywgbGV2ZWw6IExFVkVMUy5FUlJPUiwgbXNnOiBzdHJpbmdpZnkobWVzc2FnZSksIHNyYywgZXJyOiBlcnIgfSk7XHJcbiAgICB9LFxyXG4gICAgd2FybjogZnVuY3Rpb24obWVzc2FnZSwgc3JjID0gREVGQVVMVF9MT0dHRVJfSVNTVUVSKSB7XHJcbiAgICAgICAgY29uc3QgdHMgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XHJcbiAgICAgICAgcHJvY2Vzc1NlbmQoeyB0aW1lOiB0cywgZXZlbnQ6ICdsb2cnLCBsZXZlbDogTEVWRUxTLldBUk4sIG1zZzogc3RyaW5naWZ5KG1lc3NhZ2UpLCBzcmMgfSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5sZXQgX3dvcmtlciA9IG5ldyBPeHlnZW5Xb3JrZXIocmVwb3J0ZXIsIGxvZ2dlcik7XHJcblxyXG5mdW5jdGlvbiBzdHJpbmdpZnkob2JqKSB7XHJcbiAgICByZXR1cm4gKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnIHx8IG9iaiBpbnN0YW5jZW9mIFN0cmluZyA/IG9iaiA6IEpTT04uc3RyaW5naWZ5KG9iaiwgbnVsbCwgMikpO1xyXG59XHJcblxyXG5veHV0aWwuaG9va0xvZ3MobG9nZ2VyKTtcclxuLy8gcmVkaXJlY3Qgc3Rkb3V0IGFuZCBzdGRlcnIgdG8gdGhlIGxvZ2dlclxyXG4vL3Byb2Nlc3Muc3Rkb3V0LndyaXRlID0gbG9nZ2VyLmRlYnVnO1xyXG4vL3Byb2Nlc3Muc3RkZXJyLndyaXRlID0gbG9nZ2VyLmVycm9yO1xyXG5cclxucHJvY2Vzcy5vbigndW5oYW5kbGVkUmVqZWN0aW9uJywgYXN5bmMoZXJyLCBvcmlnaW4pID0+IHtcclxuICAgIGxvZ2dlci5lcnJvcihlcnIubWVzc2FnZSwgSVNTVUVSUy5VU0VSKTtcclxuICAgIGNvbnNvbGUubG9nKCd1bmhhbmRsZWRSZWplY3Rpb24nLCBlcnIpO1xyXG4gICAgcHJvY2Vzc1NlbmQoe1xyXG4gICAgICAgIGV2ZW50OiAnd29ya2VyRXJyb3InLFxyXG4gICAgICAgIGVyck1lc3NhZ2U6IGVyci5tZXNzYWdlLFxyXG4gICAgfSk7XHJcbn0pO1xyXG5cclxucHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCBhc3luYyhlcnIsIG9yaWdpbikgPT4ge1xyXG4gICAgbG9nZ2VyLmVycm9yKGVyci5tZXNzYWdlLCBJU1NVRVJTLlVTRVIpO1xyXG4gICAgY29uc29sZS5sb2coJ3VuY2F1Z2h0RXhjZXB0aW9uJywgZXJyKTtcclxuICAgIHByb2Nlc3NTZW5kKHtcclxuICAgICAgICBldmVudDogJ3dvcmtlckVycm9yJyxcclxuICAgICAgICBlcnJNZXNzYWdlOiBlcnIubWVzc2FnZSxcclxuICAgIH0pO1xyXG59KTtcclxuXHJcbnByb2Nlc3Mub24oJ1NJR0lOVCcsIGFzeW5jIGZ1bmN0aW9uKCkge1xyXG4gICAgYXdhaXQgZGlzcG9zZSgnQ0FOQ0VMRUQnKTtcclxufSk7XHJcblxyXG5wcm9jZXNzLm9uKCdtZXNzYWdlJywgYXN5bmMgZnVuY3Rpb24gKG1zZykge1xyXG4gICAgaWYgKCFtc2cudHlwZSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICgobXNnLnR5cGUgPT09ICdpbnZva2UnIHx8IG1zZy50eXBlID09PSAnaW52b2tlOmhvb2snKSAmJiBtc2cubWV0aG9kKSB7XHJcbiAgICAgICAgY29uc3QgeyBjYWxsSWQsIG1ldGhvZCwgYXJncyB9ID0gbXNnO1xyXG4gICAgICAgIGNvbnN0IGludm9rZUZ1bmMgPSBtc2cudHlwZSA9PT0gJ2ludm9rZTpob29rJyA/IGludm9rZVRlc3RIb29rIDogaW52b2tlO1xyXG4gICAgICAgIGNvbnN0IHsgcmV0dmFsLCBlcnJvciB9ID0gYXdhaXQgaW52b2tlRnVuYyhtZXRob2QsIGFyZ3MpO1xyXG4gICAgICAgIHByb2Nlc3NTZW5kKHtcclxuICAgICAgICAgICAgZXZlbnQ6ICdpbnZva2U6cmVzdWx0JyxcclxuICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QsXHJcbiAgICAgICAgICAgIGNhbGxJZDogY2FsbElkLFxyXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IsXHJcbiAgICAgICAgICAgIHJldHZhbDogcmV0dmFsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChtc2cudHlwZSA9PT0gJ3N1YnNjcmliZScpIHtcclxuICAgICAgICBzdWJzY3JpYmUobXNnLmV2ZW50KTtcclxuICAgIH1cclxufSk7XHJcblxyXG5hc3luYyBmdW5jdGlvbiBkaXNwb3NlKHN0YXR1cz0gbnVsbCkge1xyXG4gICAgaWYgKF93b3JrZXIpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCBfd29ya2VyLmRpc3Bvc2Uoc3RhdHVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBwcm9jZXNzU2VuZChtc2cpIHtcclxuICAgIC8vIHdyYXAgcHJvY2Vzcy5zZW5kIHdpdGggdHJ5L2NhdGNoIGFzIHNvbWV0aW1lcyB3ZSBtaWdodCBjYWxsIHByb2Nlc3Muc2VuZCBcclxuICAgIC8vIHdoZW4gcGFyZW50IHByb2Nlc3MgaXMgYWxyZWFkeSBkaXNjb25uZWN0ZWQgKHdoZW4gdXNlIGtpbGxzIHRoZSBtYWluIHByb2Nlc3MpXHJcbiAgICB0cnkge1xyXG4gICAgICAgIC8vIGFkZCB1dGMgdGltZXN0YW1wXHJcbiAgICAgICAgcHJvY2Vzcy5jb25uZWN0ZWQgJiYgcHJvY2Vzcy5zZW5kKHsgdGltZTogb3h1dGlsLmdldFRpbWVTdGFtcCgpLCAuLi5tc2cgfSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgIC8vIGlnbm9yZVxyXG4gICAgfVxyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmdzKSB7XHJcbiAgICBsZXQgcmV0dmFsLCBlcnJvcjtcclxuICAgIGlmIChfd29ya2VyICYmIF93b3JrZXJbbWV0aG9kXSAmJiB0eXBlb2YgX3dvcmtlclttZXRob2RdID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dmFsID0gYXdhaXQgX3dvcmtlclttZXRob2RdLmFwcGx5KF93b3JrZXIsIGFyZ3MgfHwgW10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgRmFpbGVkIHRvIGludm9rZTogJHttZXRob2R9OmAsIGUpO1xyXG4gICAgICAgICAgICBlcnJvciA9IGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoYE1ldGhvZCBcIiR7bWV0aG9kfVwiIGRvZXMgbm90IGV4aXN0YCk7XHJcbiAgICB9XHJcbiAgICAvLyBjb252ZXJ0IEpTIGVycm9yIHRvIE94eWdlbiBGYWlsdXJlIG9iamVjdFxyXG4gICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgZXJyb3IgPSBlcnJvckhlbHBlci5nZXRGYWlsdXJlRnJvbUVycm9yKGVycm9yKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7IHJldHZhbCwgZXJyb3IgfTtcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gaW52b2tlVGVzdEhvb2sobWV0aG9kLCBhcmdzKSB7XHJcbiAgICBsZXQgcmV0dmFsID0gdW5kZWZpbmVkLCBlcnJvciA9IG51bGw7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHJldHZhbCA9IGF3YWl0IF93b3JrZXIuY2FsbFRlc3RIb29rKG1ldGhvZCwgYXJncyk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgIGVycm9yID0gZS5tZXNzYWdlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgcmV0dmFsLCBlcnJvciB9O1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBzdWJzY3JpYmUoZXZlbnROYW1lKSB7XHJcbiAgICBpZiAoX3dvcmtlciAmJiBfd29ya2VyLm9uKSB7XHJcbiAgICAgICAgX3dvcmtlci5vbihldmVudE5hbWUsICguLi5hcmdzKSA9PiBlbWl0V29ya2VyRXZlbnQoZXZlbnROYW1lLCBhcmdzKSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVtaXRXb3JrZXJFdmVudChldmVudE5hbWUsIGV2ZW50QXJncykge1xyXG4gICAgcHJvY2Vzc1NlbmQoe1xyXG4gICAgICAgIGV2ZW50OiAnZXZlbnQnLFxyXG4gICAgICAgIG5hbWU6IGV2ZW50TmFtZSxcclxuICAgICAgICBhcmdzOiBldmVudEFyZ3NcclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlbWl0UmVwb3J0ZXJFdmVudChldmVudE5hbWUsIGV2ZW50QXJncykge1xyXG4gICAgcHJvY2Vzc1NlbmQoe1xyXG4gICAgICAgIGV2ZW50OiAncmVwb3J0ZXInLFxyXG4gICAgICAgIG1ldGhvZDogZXZlbnROYW1lLFxyXG4gICAgICAgIGFyZ3M6IGV2ZW50QXJnc1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbiJdfQ==
196
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJveHV0aWwiLCJyZXF1aXJlIiwiZXJyb3JIZWxwZXIiLCJyZXBvcnRlciIsIm9uU3VpdGVTdGFydCIsImFyZ3MiLCJlbWl0UmVwb3J0ZXJFdmVudCIsIm9uU3VpdGVFbmQiLCJvbkNhc2VTdGFydCIsIm9uQ2FzZUVuZCIsIm9uU3RlcFN0YXJ0Iiwib25TdGVwRW5kIiwib25SdW5uZXJFbmQiLCJnbG9iYWwiLCJicm93c2VyIiwibG9nZ2VyIiwiaW5mbyIsIm1lc3NhZ2UiLCJzcmMiLCJERUZBVUxUX0xPR0dFUl9JU1NVRVIiLCJ0cyIsImdldFRpbWVTdGFtcCIsInByb2Nlc3NTZW5kIiwidGltZSIsImV2ZW50IiwibGV2ZWwiLCJMRVZFTFMiLCJJTkZPIiwibXNnIiwic3RyaW5naWZ5IiwiZGVidWciLCJERUJVRyIsImVycm9yIiwiZXJyIiwiRVJST1IiLCJ3YXJuIiwiV0FSTiIsIl93b3JrZXIiLCJPeHlnZW5Xb3JrZXIiLCJvYmoiLCJTdHJpbmciLCJKU09OIiwiaG9va0xvZ3MiLCJwcm9jZXNzIiwib24iLCJvcmlnaW4iLCJJU1NVRVJTIiwiVVNFUiIsImNvbnNvbGUiLCJsb2ciLCJlcnJNZXNzYWdlIiwiZGlzcG9zZSIsInR5cGUiLCJtZXRob2QiLCJjYWxsSWQiLCJpbnZva2VGdW5jIiwiaW52b2tlVGVzdEhvb2siLCJpbnZva2UiLCJyZXR2YWwiLCJzdWJzY3JpYmUiLCJzdGF0dXMiLCJlIiwiY29ubmVjdGVkIiwic2VuZCIsImFwcGx5IiwiRXJyb3IiLCJnZXRGYWlsdXJlRnJvbUVycm9yIiwidW5kZWZpbmVkIiwiY2FsbFRlc3RIb29rIiwiZXZlbnROYW1lIiwiZW1pdFdvcmtlckV2ZW50IiwiZXZlbnRBcmdzIiwibmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydW5uZXJzL294eWdlbi93b3JrZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKlxyXG4gKiBCb2lsZXJwbGF0ZSBjb2RlIGZvciB1c2VyIHNjcmlwdHMuXHJcbiAqIFByb3ZpZGVzIGV2ZXJ5dGhpbmcgbmVjZXNzYXJ5IGZvciBleGVjdXRpbmcgSlMgdGVzdCBzY3JpcHRzLlxyXG4gKi9cclxuaW1wb3J0IHsgTEVWRUxTLCBERUZBVUxUX0xPR0dFUl9JU1NVRVIsIElTU1VFUlMgfSBmcm9tICcuLi8uLi9saWIvbG9nZ2VyJztcclxuaW1wb3J0IE94eWdlbldvcmtlciBmcm9tICcuL094eWdlbldvcmtlcic7XHJcbmNvbnN0IG94dXRpbCA9IHJlcXVpcmUoJy4uLy4uL2xpYi91dGlsJyk7XHJcbmNvbnN0IGVycm9ySGVscGVyID0gcmVxdWlyZSgnLi4vLi4vZXJyb3JzL2hlbHBlcicpO1xyXG5cclxuY29uc3QgcmVwb3J0ZXIgPSB7XHJcbiAgICBvblN1aXRlU3RhcnQ6IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcclxuICAgICAgICBlbWl0UmVwb3J0ZXJFdmVudCgnb25TdWl0ZVN0YXJ0JywgYXJncyk7XHJcbiAgICB9LFxyXG4gICAgb25TdWl0ZUVuZDogZnVuY3Rpb24oLi4uYXJncykge1xyXG4gICAgICAgIGVtaXRSZXBvcnRlckV2ZW50KCdvblN1aXRlRW5kJywgYXJncyk7XHJcbiAgICB9LFxyXG4gICAgb25DYXNlU3RhcnQ6IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcclxuICAgICAgICBlbWl0UmVwb3J0ZXJFdmVudCgnb25DYXNlU3RhcnQnLCBhcmdzKTtcclxuICAgIH0sXHJcbiAgICBvbkNhc2VFbmQ6IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcclxuICAgICAgICBlbWl0UmVwb3J0ZXJFdmVudCgnb25DYXNlRW5kJywgYXJncyk7XHJcbiAgICB9LFxyXG4gICAgb25TdGVwU3RhcnQ6IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcclxuICAgICAgICBlbWl0UmVwb3J0ZXJFdmVudCgnb25TdGVwU3RhcnQnLCBhcmdzKTtcclxuICAgIH0sXHJcbiAgICBvblN0ZXBFbmQ6IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcclxuICAgICAgICBlbWl0UmVwb3J0ZXJFdmVudCgnb25TdGVwRW5kJywgYXJncyk7XHJcbiAgICB9LFxyXG4gICAgb25SdW5uZXJFbmQ6IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcclxuICAgICAgICBlbWl0UmVwb3J0ZXJFdmVudCgnb25SdW5uZXJFbmQnLCBhcmdzKTtcclxuICAgIH1cclxufTtcclxuXHJcbi8vIG1vY2t1cCBnbG9iYmFsLmJyb3dzZXIgb2JqZWN0IGZvciBpbnRlcm5hbCBXRElPIGZ1bmN0aW9ucyB0byB3b3JrIHByb3Blcmx5XHJcbmdsb2JhbC5icm93c2VyID0ge307XHJcblxyXG5jb25zdCBsb2dnZXIgPSB7XHJcbiAgICBpbmZvOiBmdW5jdGlvbihtZXNzYWdlLCBzcmMgPSBERUZBVUxUX0xPR0dFUl9JU1NVRVIpIHtcclxuICAgICAgICBjb25zdCB0cyA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICBwcm9jZXNzU2VuZCh7IHRpbWU6IHRzLCBldmVudDogJ2xvZycsIGxldmVsOiBMRVZFTFMuSU5GTywgbXNnOiBzdHJpbmdpZnkobWVzc2FnZSksIHNyYyB9KTtcclxuICAgIH0sXHJcbiAgICBkZWJ1ZzogZnVuY3Rpb24obWVzc2FnZSwgc3JjID0gREVGQVVMVF9MT0dHRVJfSVNTVUVSKSB7XHJcbiAgICAgICAgY29uc3QgdHMgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XHJcbiAgICAgICAgcHJvY2Vzc1NlbmQoeyB0aW1lOiB0cywgZXZlbnQ6ICdsb2cnLCBsZXZlbDogTEVWRUxTLkRFQlVHLCBtc2c6IHN0cmluZ2lmeShtZXNzYWdlKSwgc3JjIH0pO1xyXG4gICAgfSxcclxuICAgIGVycm9yOiBmdW5jdGlvbihtZXNzYWdlLCBzcmMgPSBERUZBVUxUX0xPR0dFUl9JU1NVRVIsIGVyciA9IG51bGwpIHtcclxuICAgICAgICBpZiAoIXNyYykge1xyXG4gICAgICAgICAgICBzcmMgPSBERUZBVUxUX0xPR0dFUl9JU1NVRVI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRzID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgIHByb2Nlc3NTZW5kKHsgdGltZTogdHMsIGV2ZW50OiAnbG9nJywgbGV2ZWw6IExFVkVMUy5FUlJPUiwgbXNnOiBzdHJpbmdpZnkobWVzc2FnZSksIHNyYywgZXJyOiBlcnIgfSk7XHJcbiAgICB9LFxyXG4gICAgd2FybjogZnVuY3Rpb24obWVzc2FnZSwgc3JjID0gREVGQVVMVF9MT0dHRVJfSVNTVUVSKSB7XHJcbiAgICAgICAgY29uc3QgdHMgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XHJcbiAgICAgICAgcHJvY2Vzc1NlbmQoeyB0aW1lOiB0cywgZXZlbnQ6ICdsb2cnLCBsZXZlbDogTEVWRUxTLldBUk4sIG1zZzogc3RyaW5naWZ5KG1lc3NhZ2UpLCBzcmMgfSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5sZXQgX3dvcmtlciA9IG5ldyBPeHlnZW5Xb3JrZXIocmVwb3J0ZXIsIGxvZ2dlcik7XHJcblxyXG5mdW5jdGlvbiBzdHJpbmdpZnkob2JqKSB7XHJcbiAgICByZXR1cm4gKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnIHx8IG9iaiBpbnN0YW5jZW9mIFN0cmluZyA/IG9iaiA6IEpTT04uc3RyaW5naWZ5KG9iaiwgbnVsbCwgMikpO1xyXG59XHJcblxyXG5veHV0aWwuaG9va0xvZ3MobG9nZ2VyKTtcclxuLy8gcmVkaXJlY3Qgc3Rkb3V0IGFuZCBzdGRlcnIgdG8gdGhlIGxvZ2dlclxyXG4vL3Byb2Nlc3Muc3Rkb3V0LndyaXRlID0gbG9nZ2VyLmRlYnVnO1xyXG4vL3Byb2Nlc3Muc3RkZXJyLndyaXRlID0gbG9nZ2VyLmVycm9yO1xyXG5cclxucHJvY2Vzcy5vbigndW5oYW5kbGVkUmVqZWN0aW9uJywgYXN5bmMoZXJyLCBvcmlnaW4pID0+IHtcclxuICAgIGxvZ2dlci5lcnJvcihlcnIubWVzc2FnZSwgSVNTVUVSUy5VU0VSKTtcclxuICAgIGNvbnNvbGUubG9nKCd1bmhhbmRsZWRSZWplY3Rpb24nLCBlcnIpO1xyXG4gICAgcHJvY2Vzc1NlbmQoe1xyXG4gICAgICAgIGV2ZW50OiAnd29ya2VyRXJyb3InLFxyXG4gICAgICAgIGVyck1lc3NhZ2U6IGVyci5tZXNzYWdlLFxyXG4gICAgfSk7XHJcbn0pO1xyXG5cclxucHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCBhc3luYyhlcnIsIG9yaWdpbikgPT4ge1xyXG4gICAgbG9nZ2VyLmVycm9yKGVyci5tZXNzYWdlLCBJU1NVRVJTLlVTRVIpO1xyXG4gICAgY29uc29sZS5sb2coJ3VuY2F1Z2h0RXhjZXB0aW9uJywgZXJyKTtcclxuICAgIHByb2Nlc3NTZW5kKHtcclxuICAgICAgICBldmVudDogJ3dvcmtlckVycm9yJyxcclxuICAgICAgICBlcnJNZXNzYWdlOiBlcnIubWVzc2FnZSxcclxuICAgIH0pO1xyXG59KTtcclxuXHJcbnByb2Nlc3Mub24oJ1NJR0lOVCcsIGFzeW5jIGZ1bmN0aW9uKCkge1xyXG4gICAgYXdhaXQgZGlzcG9zZSgnQ0FOQ0VMRUQnKTtcclxufSk7XHJcblxyXG5wcm9jZXNzLm9uKCdtZXNzYWdlJywgYXN5bmMgZnVuY3Rpb24gKG1zZykge1xyXG4gICAgaWYgKCFtc2cudHlwZSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICgobXNnLnR5cGUgPT09ICdpbnZva2UnIHx8IG1zZy50eXBlID09PSAnaW52b2tlOmhvb2snKSAmJiBtc2cubWV0aG9kKSB7XHJcbiAgICAgICAgY29uc3QgeyBjYWxsSWQsIG1ldGhvZCwgYXJncyB9ID0gbXNnO1xyXG4gICAgICAgIGNvbnN0IGludm9rZUZ1bmMgPSBtc2cudHlwZSA9PT0gJ2ludm9rZTpob29rJyA/IGludm9rZVRlc3RIb29rIDogaW52b2tlO1xyXG4gICAgICAgIGNvbnN0IHsgcmV0dmFsLCBlcnJvciB9ID0gYXdhaXQgaW52b2tlRnVuYyhtZXRob2QsIGFyZ3MpO1xyXG4gICAgICAgIHByb2Nlc3NTZW5kKHtcclxuICAgICAgICAgICAgZXZlbnQ6ICdpbnZva2U6cmVzdWx0JyxcclxuICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QsXHJcbiAgICAgICAgICAgIGNhbGxJZDogY2FsbElkLFxyXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IsXHJcbiAgICAgICAgICAgIHJldHZhbDogcmV0dmFsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChtc2cudHlwZSA9PT0gJ3N1YnNjcmliZScpIHtcclxuICAgICAgICBzdWJzY3JpYmUobXNnLmV2ZW50KTtcclxuICAgIH1cclxufSk7XHJcblxyXG5hc3luYyBmdW5jdGlvbiBkaXNwb3NlKHN0YXR1cz0gbnVsbCkge1xyXG4gICAgaWYgKF93b3JrZXIpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCBfd29ya2VyLmRpc3Bvc2Uoc3RhdHVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBwcm9jZXNzU2VuZChtc2cpIHtcclxuICAgIC8vIHdyYXAgcHJvY2Vzcy5zZW5kIHdpdGggdHJ5L2NhdGNoIGFzIHNvbWV0aW1lcyB3ZSBtaWdodCBjYWxsIHByb2Nlc3Muc2VuZCBcclxuICAgIC8vIHdoZW4gcGFyZW50IHByb2Nlc3MgaXMgYWxyZWFkeSBkaXNjb25uZWN0ZWQgKHdoZW4gdXNlIGtpbGxzIHRoZSBtYWluIHByb2Nlc3MpXHJcbiAgICB0cnkge1xyXG4gICAgICAgIC8vIGFkZCB1dGMgdGltZXN0YW1wXHJcbiAgICAgICAgcHJvY2Vzcy5jb25uZWN0ZWQgJiYgcHJvY2Vzcy5zZW5kKHsgdGltZTogb3h1dGlsLmdldFRpbWVTdGFtcCgpLCAuLi5tc2cgfSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgIC8vIGlnbm9yZVxyXG4gICAgfVxyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmdzKSB7XHJcbiAgICBsZXQgcmV0dmFsLCBlcnJvcjtcclxuICAgIGlmIChfd29ya2VyICYmIF93b3JrZXJbbWV0aG9kXSAmJiB0eXBlb2YgX3dvcmtlclttZXRob2RdID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dmFsID0gYXdhaXQgX3dvcmtlclttZXRob2RdLmFwcGx5KF93b3JrZXIsIGFyZ3MgfHwgW10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgRmFpbGVkIHRvIGludm9rZTogJHttZXRob2R9OmAsIGUpO1xyXG4gICAgICAgICAgICBlcnJvciA9IGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoYE1ldGhvZCBcIiR7bWV0aG9kfVwiIGRvZXMgbm90IGV4aXN0YCk7XHJcbiAgICB9XHJcbiAgICAvLyBjb252ZXJ0IEpTIGVycm9yIHRvIE94eWdlbiBGYWlsdXJlIG9iamVjdFxyXG4gICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgZXJyb3IgPSBlcnJvckhlbHBlci5nZXRGYWlsdXJlRnJvbUVycm9yKGVycm9yKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7IHJldHZhbCwgZXJyb3IgfTtcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gaW52b2tlVGVzdEhvb2sobWV0aG9kLCBhcmdzKSB7XHJcbiAgICBsZXQgcmV0dmFsID0gdW5kZWZpbmVkLCBlcnJvciA9IG51bGw7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHJldHZhbCA9IGF3YWl0IF93b3JrZXIuY2FsbFRlc3RIb29rKG1ldGhvZCwgYXJncyk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgIGVycm9yID0gZS5tZXNzYWdlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgcmV0dmFsLCBlcnJvciB9O1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBzdWJzY3JpYmUoZXZlbnROYW1lKSB7XHJcbiAgICBpZiAoX3dvcmtlciAmJiBfd29ya2VyLm9uKSB7XHJcbiAgICAgICAgX3dvcmtlci5vbihldmVudE5hbWUsICguLi5hcmdzKSA9PiBlbWl0V29ya2VyRXZlbnQoZXZlbnROYW1lLCBhcmdzKSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVtaXRXb3JrZXJFdmVudChldmVudE5hbWUsIGV2ZW50QXJncykge1xyXG4gICAgcHJvY2Vzc1NlbmQoe1xyXG4gICAgICAgIGV2ZW50OiAnZXZlbnQnLFxyXG4gICAgICAgIG5hbWU6IGV2ZW50TmFtZSxcclxuICAgICAgICBhcmdzOiBldmVudEFyZ3NcclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlbWl0UmVwb3J0ZXJFdmVudChldmVudE5hbWUsIGV2ZW50QXJncykge1xyXG4gICAgcHJvY2Vzc1NlbmQoe1xyXG4gICAgICAgIGV2ZW50OiAncmVwb3J0ZXInLFxyXG4gICAgICAgIG1ldGhvZDogZXZlbnROYW1lLFxyXG4gICAgICAgIGFyZ3M6IGV2ZW50QXJnc1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBYUE7QUFDQTtBQUEwQztBQUMxQyxNQUFNQSxNQUFNLEdB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oxygen-cli",
3
- "version": "1.25.0-beta.2",
3
+ "version": "1.25.0",
4
4
  "description": "Automation framework for testing modern applications",
5
5
  "main": "./build/index.js",
6
6
  "bin": {
@@ -29,11 +29,6 @@
29
29
  "bugs": {
30
30
  "url": "https://github.com/oxygenhq/oxygen/issues"
31
31
  },
32
- "husky": {
33
- "hooks": {
34
- "pre-commit": "npm run lint"
35
- }
36
- },
37
32
  "devDependencies": {
38
33
  "@babel/cli": "7.14.5",
39
34
  "@babel/core": "7.14.6",
@@ -41,44 +36,48 @@
41
36
  "babel-plugin-source-map-support": "2.2.0",
42
37
  "cross-env": "7.0.3",
43
38
  "doctrine": "3.0.0",
44
- "eslint": "6.8.0",
45
- "husky": "4.3.8",
39
+ "eslint": "7.32.0",
40
+ "husky": "7.0.4",
46
41
  "md-reverse": "1.0.0"
47
42
  },
43
+ "@comment dependencies": [
44
+ "axios is a peer dependency of soap. when using npm 6 (node 12-14) it needs to be explicitly included. when we migrate to npm 7 (node 16+) it can be removed."
45
+ ],
48
46
  "dependencies": {
49
- "@applitools/eyes-webdriverio": "5.35.7",
50
- "@lambdatest/node-rest-client": "1.0.3",
47
+ "@applitools/eyes-webdriverio": "5.38.2",
48
+ "@lambdatest/node-rest-client": "1.0.5",
51
49
  "@oxygenhq/chrome-remote-interface": "0.30.0",
52
50
  "@oxygenhq/logger": "0.5.1",
53
51
  "@oxygenhq/mitmproxy-node": "1.0.1",
54
- "@wdio/cli": "7.20.8",
55
- "@wdio/devtools-service": "7.20.8",
56
- "@wdio/sync": "7.20.8",
52
+ "@wdio/cli": "7.28.0",
53
+ "@wdio/devtools-service": "7.28.0",
54
+ "@wdio/sync": "7.28.0",
57
55
  "async": "3.2.4",
58
- "chai": "4.3.6",
59
- "chrome-har": "0.11.12",
60
- "config": "3.3.7",
56
+ "axios": "0.27.2",
57
+ "chai": "4.3.7",
58
+ "chrome-har": "0.13.0",
59
+ "config": "3.3.8",
61
60
  "cross-spawn": "7.0.3",
62
- "csv-parse": "4.16.0",
61
+ "csv-parse": "4.16.3",
63
62
  "cucumber": "6.0.5",
64
63
  "deasync": "0.1.26",
65
64
  "decache": "4.6.1",
66
65
  "easyxml": "2.0.1",
67
66
  "ejs": "3.1.8",
68
67
  "esm": "3.2.25",
69
- "fast-xml-parser": "4.0.9",
70
- "fibers": "5.0.0",
71
- "glob": "7.1.7",
68
+ "fast-xml-parser": "4.0.12",
69
+ "fibers": "5.0.3",
70
+ "glob": "7.2.3",
72
71
  "glob-to-regexp": "0.4.1",
73
72
  "global-agent": "3.0.0",
74
73
  "got": "11.8.5",
75
74
  "imap-simple": "5.1.0",
76
75
  "is-glob": "4.0.3",
77
- "jimp": "0.16.1",
76
+ "jimp": "0.16.2",
78
77
  "junit-report-builder": "3.0.1",
79
78
  "lodash": "4.17.21",
80
79
  "mailparser": "3.5.0",
81
- "minimist": "1.2.6",
80
+ "minimist": "1.2.7",
82
81
  "mockery": "2.1.0",
83
82
  "moment": "2.29.4",
84
83
  "node-addon-api": "3.0.2",
@@ -86,21 +85,21 @@
86
85
  "pdf2json": "1.2.5",
87
86
  "perfecto-reporting": "2.5.3",
88
87
  "request": "2.88.2",
89
- "saucelabs": "3.0.1",
88
+ "saucelabs": "7.2.0",
90
89
  "serialport": "9.2.8",
91
- "soap": "0.43.0",
90
+ "soap": "0.45.0",
92
91
  "source-map-support": "0.5.21",
93
92
  "stacktrace-parser": "0.1.10",
94
- "testdouble": "3.16.6",
95
- "testingbot-api": "1.0.7",
93
+ "testdouble": "3.16.8",
94
+ "testingbot-api": "1.0.8",
96
95
  "text-to-image": "5.2.0",
97
- "twilio": "3.77.2",
98
- "webdriverio": "7.20.8",
96
+ "twilio": "3.84.0",
97
+ "webdriverio": "7.28.0",
99
98
  "when": "3.7.8",
100
99
  "xlsx": "0.18.5"
101
100
  },
102
101
  "optionalDependencies": {
103
- "odbc": "2.4.4"
102
+ "odbc": "2.4.6"
104
103
  },
105
104
  "scripts": {
106
105
  "build": "npm run clean && npm run compile",