appium-geckodriver 0.3.3 → 1.0.3

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/.eslintrc CHANGED
@@ -1,3 +1,3 @@
1
1
  {
2
- "extends": "appium"
2
+ "extends": "@appium/eslint-config-appium"
3
3
  }
@@ -0,0 +1,30 @@
1
+ name: Release
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ push:
6
+ branches: [ master ]
7
+
8
+ jobs:
9
+ build:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: actions/checkout@v2
13
+ - name: Use Node.js 14.x
14
+ uses: actions/setup-node@v1
15
+ with:
16
+ node-version: 14.x
17
+ - run: npm install --production
18
+ name: Install prod dependencies
19
+ - run: rm -rf package-lock.json
20
+ - run: npm shrinkwrap
21
+ - run: npm install --no-package-lock
22
+ name: Install dev dependencies
23
+ - run: npm test
24
+ name: Run NPM Test
25
+ - run: npx semantic-release
26
+ env:
27
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
28
+ NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
29
+ name: Release
30
+
package/.releaserc ADDED
@@ -0,0 +1,18 @@
1
+ {
2
+ "plugins": [
3
+ ["@semantic-release/commit-analyzer", {
4
+ "preset": "angular",
5
+ "releaseRules": [
6
+ {"type": "chore", "release": "patch"}
7
+
8
+ ]
9
+ }],
10
+ "@semantic-release/npm",
11
+ "@semantic-release/release-notes-generator",
12
+ ["@semantic-release/git", {
13
+ "assets": ["docs", "package.json"],
14
+ "message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
15
+ }],
16
+ "@semantic-release/github",
17
+ ]
18
+ }
package/README.md CHANGED
@@ -1,6 +1,11 @@
1
- appium-geckodriver
1
+ Appium Geckodriver
2
2
  ====
3
3
 
4
+ [![NPM version](http://img.shields.io/npm/v/appium-geckodriver.svg)](https://npmjs.org/package/appium-geckodriver)
5
+ [![Downloads](http://img.shields.io/npm/dm/appium-geckodriver.svg)](https://npmjs.org/package/appium-geckodriver)
6
+
7
+ [![Release](https://github.com/appium/appium-geckodriver/actions/workflows/publish.js.yml/badge.svg)](https://github.com/appium/appium-geckodriver/actions/workflows/publish.js.yml)
8
+
4
9
  This is Appium driver for automating Firefox on different platforms, including Android.
5
10
  The driver only supports Firefox and Gecko-based web views (Android only) automation using [W3C WebDriver protocol](https://www.w3.org/TR/webdriver/).
6
11
  Under the hood this driver is a wrapper/proxy over `geckodriver` binary. Check the driver [release notes](https://github.com/mozilla/geckodriver/releases) and the [official documentation](https://developer.mozilla.org/en-US/docs/Web/WebDriver/Capabilities) to get more details on the supported features and possible pitfalls.
@@ -18,6 +23,8 @@ Then you need to decide where the automated test is going to be executed. Gecko
18
23
 
19
24
  In order to run your automated tests on Android it is necessary to have [Android SDK](https://developer.android.com/studio) installed, so the destination device is marked as `online` in the `adb devices -l` command output.
20
25
 
26
+ Since the version 1.0.0 this driver is only compatible with Appium 2. Use the `appium driver install gecko` CLI command to add it to your server dist.
27
+
21
28
  Gecko driver allows to define multiple criterions for platform selection and also to fine-tune your automation session properties. This could be done via the following session capabilities:
22
29
 
23
30
  Capability Name | Description
@@ -25,11 +32,12 @@ Capability Name | Description
25
32
  platformName | Gecko Driver supports the following platforms: `mac`, `linux`, `windows`. The fact your test must be executed on Android is detected based on `moz:firefoxOptions` entry values. Values of platformName are compared case-insensitively.
26
33
  browserName | Any value passed to this capability will be changed to 'firefox'.
27
34
  browserVersion | Provide the version number of the browser to automate if there are multiple versions installed on the same machine where the driver is running.
28
- automationName | Must always be set to `Gecko`.
29
- noReset | Being set to `true` adds the `--connect-existing` argument to the server, that allows to connect to an existing browser instance instead of starting a new browser instance on session startup.
30
- systemPort | The number of the port for the driver to listen on. Must be unique for each session. If not provided then Appium will try to detect it automatically.
31
- verbosity | The verbosity level of driver logging. By default minimum verbosity is applied. Possible values are `debug` or `trace`.
32
- androidStorage | See https://firefox-source-docs.mozilla.org/testing/geckodriver/Flags.html#code-android-storage-var-android-storage-var-code
35
+ appium:automationName | Must always be set to `Gecko`.
36
+ appium:noReset | Being set to `true` adds the `--connect-existing` argument to the server, that allows to connect to an existing browser instance instead of starting a new browser instance on session startup.
37
+ appium:marionettePort | Selects the port for Geckodriver’s connection to the Marionette remote protocol. The existing Firefox instance must have Marionette enabled. To enable the remote protocol in Firefox, you can pass the `-marionette` flag. Unless the `marionette.port` preference has been user-set, Marionette will listen on port `2828`, which is the default value for this capability.
38
+ appium:systemPort | The number of the port for the driver to listen on. Must be unique for each session. If not provided then Appium will try to detect it automatically.
39
+ appium:verbosity | The verbosity level of driver logging. By default minimum verbosity is applied. Possible values are `debug` or `trace`.
40
+ appium:androidStorage | See https://firefox-source-docs.mozilla.org/testing/geckodriver/Flags.html#code-android-storage-var-android-storage-var-code
33
41
  moz:firefoxOptions | See https://developer.mozilla.org/en-US/docs/Web/WebDriver/Capabilities/firefoxOptions
34
42
  acceptInsecureCerts | See https://www.w3.org/TR/webdriver/#capabilities
35
43
  pageLoadStrategy | See https://www.w3.org/TR/webdriver/#capabilities
@@ -146,4 +154,3 @@ def test_feature_status_page_filters(driver):
146
154
  npm install
147
155
  gulp watch
148
156
  ```
149
-
package/build/index.js CHANGED
@@ -11,13 +11,13 @@ Object.defineProperty(exports, "GeckoDriver", {
11
11
  return _driver.default;
12
12
  }
13
13
  });
14
+ exports.default = void 0;
14
15
  Object.defineProperty(exports, "startServer", {
15
16
  enumerable: true,
16
17
  get: function () {
17
18
  return _server.startServer;
18
19
  }
19
20
  });
20
- exports.default = void 0;
21
21
 
22
22
  require("source-map-support/register");
23
23
 
@@ -7,13 +7,13 @@ exports.default = exports.commands = void 0;
7
7
 
8
8
  require("source-map-support/register");
9
9
 
10
- var _appiumSupport = require("appium-support");
10
+ var _support = require("@appium/support");
11
11
 
12
12
  const commands = {};
13
13
  exports.commands = commands;
14
14
 
15
15
  commands.findElOrEls = async function findElOrEls(strategy, selector, mult, context) {
16
- context = _appiumSupport.util.unwrapElement(context);
16
+ context = _support.util.unwrapElement(context);
17
17
  const endpoint = `/element${context ? `/${context}/element` : ''}${mult ? 's' : ''}`;
18
18
  return await this.gecko.proxy.command(endpoint, 'POST', {
19
19
  using: strategy,
@@ -25,4 +25,4 @@ var _default = commands;
25
25
  exports.default = _default;require('source-map-support').install();
26
26
 
27
27
 
28
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9maW5kLmpzIl0sIm5hbWVzIjpbImNvbW1hbmRzIiwiZmluZEVsT3JFbHMiLCJzdHJhdGVneSIsInNlbGVjdG9yIiwibXVsdCIsImNvbnRleHQiLCJ1dGlsIiwidW53cmFwRWxlbWVudCIsImVuZHBvaW50IiwiZ2Vja28iLCJwcm94eSIsImNvbW1hbmQiLCJ1c2luZyIsInZhbHVlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFHQSxNQUFNQSxRQUFRLEdBQUcsRUFBakI7OztBQUdBQSxRQUFRLENBQUNDLFdBQVQsR0FBdUIsZUFBZUEsV0FBZixDQUE0QkMsUUFBNUIsRUFBc0NDLFFBQXRDLEVBQWdEQyxJQUFoRCxFQUFzREMsT0FBdEQsRUFBK0Q7QUFDcEZBLEVBQUFBLE9BQU8sR0FBR0Msb0JBQUtDLGFBQUwsQ0FBbUJGLE9BQW5CLENBQVY7QUFDQSxRQUFNRyxRQUFRLEdBQUksV0FBVUgsT0FBTyxHQUFJLElBQUdBLE9BQVEsVUFBZixHQUEyQixFQUFHLEdBQUVELElBQUksR0FBRyxHQUFILEdBQVMsRUFBRyxFQUFuRjtBQUVBLFNBQU8sTUFBTSxLQUFLSyxLQUFMLENBQVdDLEtBQVgsQ0FBaUJDLE9BQWpCLENBQXlCSCxRQUF6QixFQUFtQyxNQUFuQyxFQUEyQztBQUN0REksSUFBQUEsS0FBSyxFQUFFVixRQUQrQztBQUV0RFcsSUFBQUEsS0FBSyxFQUFFVjtBQUYrQyxHQUEzQyxDQUFiO0FBSUQsQ0FSRDs7ZUFZZUgsUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHV0aWwgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5cblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuLy8gVGhpcyBpcyBuZWVkZWQgdG8gbWFrZSBsb29rdXAgYnkgaW1hZ2Ugd29ya2luZ1xuY29tbWFuZHMuZmluZEVsT3JFbHMgPSBhc3luYyBmdW5jdGlvbiBmaW5kRWxPckVscyAoc3RyYXRlZ3ksIHNlbGVjdG9yLCBtdWx0LCBjb250ZXh0KSB7XG4gIGNvbnRleHQgPSB1dGlsLnVud3JhcEVsZW1lbnQoY29udGV4dCk7XG4gIGNvbnN0IGVuZHBvaW50ID0gYC9lbGVtZW50JHtjb250ZXh0ID8gYC8ke2NvbnRleHR9L2VsZW1lbnRgIDogJyd9JHttdWx0ID8gJ3MnIDogJyd9YDtcblxuICByZXR1cm4gYXdhaXQgdGhpcy5nZWNrby5wcm94eS5jb21tYW5kKGVuZHBvaW50LCAnUE9TVCcsIHtcbiAgICB1c2luZzogc3RyYXRlZ3ksXG4gICAgdmFsdWU6IHNlbGVjdG9yLFxuICB9KTtcbn07XG5cblxuZXhwb3J0IHsgY29tbWFuZHMgfTtcbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sImZpbGUiOiJsaWIvY29tbWFuZHMvZmluZC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
28
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9maW5kLmpzIl0sIm5hbWVzIjpbImNvbW1hbmRzIiwiZmluZEVsT3JFbHMiLCJzdHJhdGVneSIsInNlbGVjdG9yIiwibXVsdCIsImNvbnRleHQiLCJ1dGlsIiwidW53cmFwRWxlbWVudCIsImVuZHBvaW50IiwiZ2Vja28iLCJwcm94eSIsImNvbW1hbmQiLCJ1c2luZyIsInZhbHVlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFHQSxNQUFNQSxRQUFRLEdBQUcsRUFBakI7OztBQUdBQSxRQUFRLENBQUNDLFdBQVQsR0FBdUIsZUFBZUEsV0FBZixDQUE0QkMsUUFBNUIsRUFBc0NDLFFBQXRDLEVBQWdEQyxJQUFoRCxFQUFzREMsT0FBdEQsRUFBK0Q7QUFDcEZBLEVBQUFBLE9BQU8sR0FBR0MsY0FBS0MsYUFBTCxDQUFtQkYsT0FBbkIsQ0FBVjtBQUNBLFFBQU1HLFFBQVEsR0FBSSxXQUFVSCxPQUFPLEdBQUksSUFBR0EsT0FBUSxVQUFmLEdBQTJCLEVBQUcsR0FBRUQsSUFBSSxHQUFHLEdBQUgsR0FBUyxFQUFHLEVBQW5GO0FBRUEsU0FBTyxNQUFNLEtBQUtLLEtBQUwsQ0FBV0MsS0FBWCxDQUFpQkMsT0FBakIsQ0FBeUJILFFBQXpCLEVBQW1DLE1BQW5DLEVBQTJDO0FBQ3RESSxJQUFBQSxLQUFLLEVBQUVWLFFBRCtDO0FBRXREVyxJQUFBQSxLQUFLLEVBQUVWO0FBRitDLEdBQTNDLENBQWI7QUFJRCxDQVJEOztlQVllSCxRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5cblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuLy8gVGhpcyBpcyBuZWVkZWQgdG8gbWFrZSBsb29rdXAgYnkgaW1hZ2Ugd29ya2luZ1xuY29tbWFuZHMuZmluZEVsT3JFbHMgPSBhc3luYyBmdW5jdGlvbiBmaW5kRWxPckVscyAoc3RyYXRlZ3ksIHNlbGVjdG9yLCBtdWx0LCBjb250ZXh0KSB7XG4gIGNvbnRleHQgPSB1dGlsLnVud3JhcEVsZW1lbnQoY29udGV4dCk7XG4gIGNvbnN0IGVuZHBvaW50ID0gYC9lbGVtZW50JHtjb250ZXh0ID8gYC8ke2NvbnRleHR9L2VsZW1lbnRgIDogJyd9JHttdWx0ID8gJ3MnIDogJyd9YDtcblxuICByZXR1cm4gYXdhaXQgdGhpcy5nZWNrby5wcm94eS5jb21tYW5kKGVuZHBvaW50LCAnUE9TVCcsIHtcbiAgICB1c2luZzogc3RyYXRlZ3ksXG4gICAgdmFsdWU6IHNlbGVjdG9yLFxuICB9KTtcbn07XG5cblxuZXhwb3J0IHsgY29tbWFuZHMgfTtcbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sImZpbGUiOiJsaWIvY29tbWFuZHMvZmluZC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
@@ -37,6 +37,9 @@ const desiredCapConstraints = {
37
37
  systemPort: {
38
38
  isNumber: true
39
39
  },
40
+ marionettePort: {
41
+ isNumber: true
42
+ },
40
43
  verbosity: {
41
44
  isString: true,
42
45
  inclusionCaseInsensitive: Object.values(_constants.VERBOSITY)
@@ -52,4 +55,4 @@ const desiredCapConstraints = {
52
55
  exports.desiredCapConstraints = desiredCapConstraints;require('source-map-support').install();
53
56
 
54
57
 
55
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kZXNpcmVkLWNhcHMuanMiXSwibmFtZXMiOlsiZGVzaXJlZENhcENvbnN0cmFpbnRzIiwiYnJvd3Nlck5hbWUiLCJpc1N0cmluZyIsImJyb3dzZXJWZXJzaW9uIiwiYWNjZXB0SW5zZWN1cmVDZXJ0cyIsImlzQm9vbGVhbiIsInBhZ2VMb2FkU3RyYXRlZ3kiLCJwcm94eSIsImlzT2JqZWN0Iiwic2V0V2luZG93UmVjdCIsInRpbWVvdXRzIiwidW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IiLCJzeXN0ZW1Qb3J0IiwiaXNOdW1iZXIiLCJ2ZXJib3NpdHkiLCJpbmNsdXNpb25DYXNlSW5zZW5zaXRpdmUiLCJPYmplY3QiLCJ2YWx1ZXMiLCJWRVJCT1NJVFkiLCJhbmRyb2lkU3RvcmFnZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBRUEsTUFBTUEscUJBQXFCLEdBQUc7QUFDNUJDLEVBQUFBLFdBQVcsRUFBRTtBQUNYQyxJQUFBQSxRQUFRLEVBQUU7QUFEQyxHQURlO0FBSTVCQyxFQUFBQSxjQUFjLEVBQUU7QUFDZEQsSUFBQUEsUUFBUSxFQUFFO0FBREksR0FKWTtBQU81QkUsRUFBQUEsbUJBQW1CLEVBQUU7QUFDbkJDLElBQUFBLFNBQVMsRUFBRTtBQURRLEdBUE87QUFVNUJDLEVBQUFBLGdCQUFnQixFQUFFO0FBQ2hCSixJQUFBQSxRQUFRLEVBQUU7QUFETSxHQVZVO0FBYTVCSyxFQUFBQSxLQUFLLEVBQUU7QUFDTEMsSUFBQUEsUUFBUSxFQUFFO0FBREwsR0FicUI7QUFnQjVCQyxFQUFBQSxhQUFhLEVBQUU7QUFDYkosSUFBQUEsU0FBUyxFQUFFO0FBREUsR0FoQmE7QUFtQjVCSyxFQUFBQSxRQUFRLEVBQUU7QUFDUkYsSUFBQUEsUUFBUSxFQUFFO0FBREYsR0FuQmtCO0FBc0I1QkcsRUFBQUEsdUJBQXVCLEVBQUU7QUFDdkJULElBQUFBLFFBQVEsRUFBRTtBQURhLEdBdEJHO0FBeUI1QlUsRUFBQUEsVUFBVSxFQUFFO0FBQ1ZDLElBQUFBLFFBQVEsRUFBRTtBQURBLEdBekJnQjtBQTRCNUJDLEVBQUFBLFNBQVMsRUFBRTtBQUNUWixJQUFBQSxRQUFRLEVBQUUsSUFERDtBQUVUYSxJQUFBQSx3QkFBd0IsRUFBRUMsTUFBTSxDQUFDQyxNQUFQLENBQWNDLG9CQUFkO0FBRmpCLEdBNUJpQjtBQWdDNUJDLEVBQUFBLGNBQWMsRUFBRTtBQUNkakIsSUFBQUEsUUFBUSxFQUFFLElBREk7QUFFZGEsSUFBQUEsd0JBQXdCLEVBQUUsQ0FBQyxNQUFELEVBQVMsS0FBVCxFQUFnQixVQUFoQixFQUE0QixRQUE1QjtBQUZaLEdBaENZO0FBb0M1Qix3QkFBc0I7QUFDcEJQLElBQUFBLFFBQVEsRUFBRTtBQURVO0FBcENNLENBQTlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVkVSQk9TSVRZIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5jb25zdCBkZXNpcmVkQ2FwQ29uc3RyYWludHMgPSB7XG4gIGJyb3dzZXJOYW1lOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgYnJvd3NlclZlcnNpb246IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBhY2NlcHRJbnNlY3VyZUNlcnRzOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHBhZ2VMb2FkU3RyYXRlZ3k6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBwcm94eToge1xuICAgIGlzT2JqZWN0OiB0cnVlXG4gIH0sXG4gIHNldFdpbmRvd1JlY3Q6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgdGltZW91dHM6IHtcbiAgICBpc09iamVjdDogdHJ1ZVxuICB9LFxuICB1bmhhbmRsZWRQcm9tcHRCZWhhdmlvcjoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHN5c3RlbVBvcnQ6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICB2ZXJib3NpdHk6IHtcbiAgICBpc1N0cmluZzogdHJ1ZSxcbiAgICBpbmNsdXNpb25DYXNlSW5zZW5zaXRpdmU6IE9iamVjdC52YWx1ZXMoVkVSQk9TSVRZKVxuICB9LFxuICBhbmRyb2lkU3RvcmFnZToge1xuICAgIGlzU3RyaW5nOiB0cnVlLFxuICAgIGluY2x1c2lvbkNhc2VJbnNlbnNpdGl2ZTogWydhdXRvJywgJ2FwcCcsICdpbnRlcm5hbCcsICdzZGNhcmQnXVxuICB9LFxuICAnbW96OmZpcmVmb3hPcHRpb25zJzoge1xuICAgIGlzT2JqZWN0OiB0cnVlXG4gIH1cbn07XG5cbmV4cG9ydCB7IGRlc2lyZWRDYXBDb25zdHJhaW50cyB9O1xuIl0sImZpbGUiOiJsaWIvZGVzaXJlZC1jYXBzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
58
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kZXNpcmVkLWNhcHMuanMiXSwibmFtZXMiOlsiZGVzaXJlZENhcENvbnN0cmFpbnRzIiwiYnJvd3Nlck5hbWUiLCJpc1N0cmluZyIsImJyb3dzZXJWZXJzaW9uIiwiYWNjZXB0SW5zZWN1cmVDZXJ0cyIsImlzQm9vbGVhbiIsInBhZ2VMb2FkU3RyYXRlZ3kiLCJwcm94eSIsImlzT2JqZWN0Iiwic2V0V2luZG93UmVjdCIsInRpbWVvdXRzIiwidW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IiLCJzeXN0ZW1Qb3J0IiwiaXNOdW1iZXIiLCJtYXJpb25ldHRlUG9ydCIsInZlcmJvc2l0eSIsImluY2x1c2lvbkNhc2VJbnNlbnNpdGl2ZSIsIk9iamVjdCIsInZhbHVlcyIsIlZFUkJPU0lUWSIsImFuZHJvaWRTdG9yYWdlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFFQSxNQUFNQSxxQkFBcUIsR0FBRztBQUM1QkMsRUFBQUEsV0FBVyxFQUFFO0FBQ1hDLElBQUFBLFFBQVEsRUFBRTtBQURDLEdBRGU7QUFJNUJDLEVBQUFBLGNBQWMsRUFBRTtBQUNkRCxJQUFBQSxRQUFRLEVBQUU7QUFESSxHQUpZO0FBTzVCRSxFQUFBQSxtQkFBbUIsRUFBRTtBQUNuQkMsSUFBQUEsU0FBUyxFQUFFO0FBRFEsR0FQTztBQVU1QkMsRUFBQUEsZ0JBQWdCLEVBQUU7QUFDaEJKLElBQUFBLFFBQVEsRUFBRTtBQURNLEdBVlU7QUFhNUJLLEVBQUFBLEtBQUssRUFBRTtBQUNMQyxJQUFBQSxRQUFRLEVBQUU7QUFETCxHQWJxQjtBQWdCNUJDLEVBQUFBLGFBQWEsRUFBRTtBQUNiSixJQUFBQSxTQUFTLEVBQUU7QUFERSxHQWhCYTtBQW1CNUJLLEVBQUFBLFFBQVEsRUFBRTtBQUNSRixJQUFBQSxRQUFRLEVBQUU7QUFERixHQW5Ca0I7QUFzQjVCRyxFQUFBQSx1QkFBdUIsRUFBRTtBQUN2QlQsSUFBQUEsUUFBUSxFQUFFO0FBRGEsR0F0Qkc7QUF5QjVCVSxFQUFBQSxVQUFVLEVBQUU7QUFDVkMsSUFBQUEsUUFBUSxFQUFFO0FBREEsR0F6QmdCO0FBNEI1QkMsRUFBQUEsY0FBYyxFQUFFO0FBQ2RELElBQUFBLFFBQVEsRUFBRTtBQURJLEdBNUJZO0FBK0I1QkUsRUFBQUEsU0FBUyxFQUFFO0FBQ1RiLElBQUFBLFFBQVEsRUFBRSxJQUREO0FBRVRjLElBQUFBLHdCQUF3QixFQUFFQyxNQUFNLENBQUNDLE1BQVAsQ0FBY0Msb0JBQWQ7QUFGakIsR0EvQmlCO0FBbUM1QkMsRUFBQUEsY0FBYyxFQUFFO0FBQ2RsQixJQUFBQSxRQUFRLEVBQUUsSUFESTtBQUVkYyxJQUFBQSx3QkFBd0IsRUFBRSxDQUFDLE1BQUQsRUFBUyxLQUFULEVBQWdCLFVBQWhCLEVBQTRCLFFBQTVCO0FBRlosR0FuQ1k7QUF1QzVCLHdCQUFzQjtBQUNwQlIsSUFBQUEsUUFBUSxFQUFFO0FBRFU7QUF2Q00sQ0FBOUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWRVJCT1NJVFkgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmNvbnN0IGRlc2lyZWRDYXBDb25zdHJhaW50cyA9IHtcbiAgYnJvd3Nlck5hbWU6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBicm93c2VyVmVyc2lvbjoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGFjY2VwdEluc2VjdXJlQ2VydHM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgcGFnZUxvYWRTdHJhdGVneToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHByb3h5OiB7XG4gICAgaXNPYmplY3Q6IHRydWVcbiAgfSxcbiAgc2V0V2luZG93UmVjdDoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICB0aW1lb3V0czoge1xuICAgIGlzT2JqZWN0OiB0cnVlXG4gIH0sXG4gIHVuaGFuZGxlZFByb21wdEJlaGF2aW9yOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgc3lzdGVtUG9ydDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIG1hcmlvbmV0dGVQb3J0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgdmVyYm9zaXR5OiB7XG4gICAgaXNTdHJpbmc6IHRydWUsXG4gICAgaW5jbHVzaW9uQ2FzZUluc2Vuc2l0aXZlOiBPYmplY3QudmFsdWVzKFZFUkJPU0lUWSlcbiAgfSxcbiAgYW5kcm9pZFN0b3JhZ2U6IHtcbiAgICBpc1N0cmluZzogdHJ1ZSxcbiAgICBpbmNsdXNpb25DYXNlSW5zZW5zaXRpdmU6IFsnYXV0bycsICdhcHAnLCAnaW50ZXJuYWwnLCAnc2RjYXJkJ11cbiAgfSxcbiAgJ21vejpmaXJlZm94T3B0aW9ucyc6IHtcbiAgICBpc09iamVjdDogdHJ1ZVxuICB9XG59O1xuXG5leHBvcnQgeyBkZXNpcmVkQ2FwQ29uc3RyYWludHMgfTtcbiJdLCJmaWxlIjoibGliL2Rlc2lyZWQtY2Fwcy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
@@ -11,9 +11,7 @@ require("source-map-support/register");
11
11
 
12
12
  var _lodash = _interopRequireDefault(require("lodash"));
13
13
 
14
- var _appiumBaseDriver = require("appium-base-driver");
15
-
16
- var _logger = _interopRequireDefault(require("./logger"));
14
+ var _baseDriver = require("@appium/base-driver");
17
15
 
18
16
  var _gecko = _interopRequireDefault(require("./gecko"));
19
17
 
@@ -25,7 +23,7 @@ var _utils = require("./utils");
25
23
 
26
24
  const NO_PROXY = [['GET', new RegExp('^/session/[^/]+/appium')], ['POST', new RegExp('^/session/[^/]+/appium')], ['POST', new RegExp('^/session/[^/]+/element/[^/]+/elements?$')], ['POST', new RegExp('^/session/[^/]+/elements?$')]];
27
25
 
28
- class GeckoDriver extends _appiumBaseDriver.BaseDriver {
26
+ class GeckoDriver extends _baseDriver.BaseDriver {
29
27
  constructor(opts = {}) {
30
28
  super(opts);
31
29
  this.desiredCapConstraints = _desiredCaps.desiredCapConstraints;
@@ -57,7 +55,7 @@ class GeckoDriver extends _appiumBaseDriver.BaseDriver {
57
55
 
58
56
  async createSession(...args) {
59
57
  const [sessionId, caps] = await super.createSession(...args);
60
- this.gecko = new _gecko.default(caps);
58
+ this.gecko = new _gecko.default(this.log, caps);
61
59
 
62
60
  try {
63
61
  await this.gecko.start((0, _utils.formatCapsForServer)(caps));
@@ -72,8 +70,7 @@ class GeckoDriver extends _appiumBaseDriver.BaseDriver {
72
70
  }
73
71
 
74
72
  async deleteSession() {
75
- _logger.default.info('Ending Gecko Driver session');
76
-
73
+ this.log.info('Ending Gecko Driver session');
77
74
  await this.gecko.stop();
78
75
  this.resetState();
79
76
  await super.deleteSession();
@@ -85,4 +82,4 @@ var _default = GeckoDriver;
85
82
  exports.default = _default;require('source-map-support').install();
86
83
 
87
84
 
88
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXIuanMiXSwibmFtZXMiOlsiTk9fUFJPWFkiLCJSZWdFeHAiLCJHZWNrb0RyaXZlciIsIkJhc2VEcml2ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJsb2NhdG9yU3RyYXRlZ2llcyIsInJlc2V0U3RhdGUiLCJjbWQiLCJmbiIsIl8iLCJ0b1BhaXJzIiwiY29tbWFuZHMiLCJwcm90b3R5cGUiLCJnZWNrbyIsInByb3h5UmVxUmVzIiwiaXNQcm94eUFjdGl2ZSIsInByb3h5QWN0aXZlIiwiZ2V0UHJveHlBdm9pZExpc3QiLCJjYW5Qcm94eSIsImNyZWF0ZVNlc3Npb24iLCJhcmdzIiwic2Vzc2lvbklkIiwiY2FwcyIsIkdlY2tvRHJpdmVyU2VydmVyIiwic3RhcnQiLCJlIiwiZGVsZXRlU2Vzc2lvbiIsInByb3h5IiwiYmluZCIsImxvZyIsImluZm8iLCJzdG9wIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLFFBQVEsR0FBRyxDQUNmLENBQUMsS0FBRCxFQUFRLElBQUlDLE1BQUosQ0FBVyx3QkFBWCxDQUFSLENBRGUsRUFFZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsd0JBQVgsQ0FBVCxDQUZlLEVBR2YsQ0FBQyxNQUFELEVBQVMsSUFBSUEsTUFBSixDQUFXLDBDQUFYLENBQVQsQ0FIZSxFQUlmLENBQUMsTUFBRCxFQUFTLElBQUlBLE1BQUosQ0FBVyw0QkFBWCxDQUFULENBSmUsQ0FBakI7O0FBT0EsTUFBTUMsV0FBTixTQUEwQkMsNEJBQTFCLENBQXFDO0FBQ25DQyxFQUFBQSxXQUFXLENBQUVDLElBQUksR0FBRyxFQUFULEVBQWE7QUFDdEIsVUFBTUEsSUFBTjtBQUNBLFNBQUtDLHFCQUFMLEdBQTZCQSxrQ0FBN0I7QUFDQSxTQUFLQyxpQkFBTCxHQUF5QixDQUN2QixPQUR1QixFQUV2QixVQUZ1QixFQUd2QixXQUh1QixFQUl2QixtQkFKdUIsRUFLdkIsY0FMdUIsRUFPdkIsSUFQdUIsRUFRdkIsTUFSdUIsQ0FBekI7QUFVQSxTQUFLQyxVQUFMOztBQUVBLFNBQUssTUFBTSxDQUFDQyxHQUFELEVBQU1DLEVBQU4sQ0FBWCxJQUF3QkMsZ0JBQUVDLE9BQUYsQ0FBVUMsY0FBVixDQUF4QixFQUE2QztBQUMzQ1gsTUFBQUEsV0FBVyxDQUFDWSxTQUFaLENBQXNCTCxHQUF0QixJQUE2QkMsRUFBN0I7QUFDRDtBQUNGOztBQUVERixFQUFBQSxVQUFVLEdBQUk7QUFDWixTQUFLTyxLQUFMLEdBQWEsSUFBYjtBQUNBLFNBQUtDLFdBQUwsR0FBbUIsSUFBbkI7QUFDQSxTQUFLQyxhQUFMLEdBQXFCLEtBQXJCO0FBQ0Q7O0FBRURDLEVBQUFBLFdBQVcsR0FBSTtBQUNiLFdBQU8sS0FBS0QsYUFBWjtBQUNEOztBQUVERSxFQUFBQSxpQkFBaUIsR0FBSTtBQUNuQixXQUFPbkIsUUFBUDtBQUNEOztBQUVEb0IsRUFBQUEsUUFBUSxHQUFJO0FBQ1YsV0FBTyxJQUFQO0FBQ0Q7O0FBRUQsUUFBTUMsYUFBTixDQUFxQixHQUFHQyxJQUF4QixFQUE4QjtBQUM1QixVQUFNLENBQUNDLFNBQUQsRUFBWUMsSUFBWixJQUFvQixNQUFNLE1BQU1ILGFBQU4sQ0FBb0IsR0FBR0MsSUFBdkIsQ0FBaEM7QUFDQSxTQUFLUCxLQUFMLEdBQWEsSUFBSVUsY0FBSixDQUFzQkQsSUFBdEIsQ0FBYjs7QUFDQSxRQUFJO0FBQ0YsWUFBTSxLQUFLVCxLQUFMLENBQVdXLEtBQVgsQ0FBaUIsZ0NBQW9CRixJQUFwQixDQUFqQixDQUFOO0FBQ0QsS0FGRCxDQUVFLE9BQU9HLENBQVAsRUFBVTtBQUNWLFlBQU0sS0FBS0MsYUFBTCxFQUFOO0FBQ0EsWUFBTUQsQ0FBTjtBQUNEOztBQUNELFNBQUtYLFdBQUwsR0FBbUIsS0FBS0QsS0FBTCxDQUFXYyxLQUFYLENBQWlCYixXQUFqQixDQUE2QmMsSUFBN0IsQ0FBa0MsS0FBS2YsS0FBTCxDQUFXYyxLQUE3QyxDQUFuQjtBQUNBLFNBQUtaLGFBQUwsR0FBcUIsSUFBckI7QUFDQSxXQUFPLENBQUNNLFNBQUQsRUFBWUMsSUFBWixDQUFQO0FBQ0Q7O0FBRUQsUUFBTUksYUFBTixHQUF1QjtBQUNyQkcsb0JBQUlDLElBQUosQ0FBUyw2QkFBVDs7QUFDQSxVQUFNLEtBQUtqQixLQUFMLENBQVdrQixJQUFYLEVBQU47QUFDQSxTQUFLekIsVUFBTDtBQUVBLFVBQU0sTUFBTW9CLGFBQU4sRUFBTjtBQUNEOztBQTNEa0M7O2VBOER0QjFCLFciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQmFzZURyaXZlciB9IGZyb20gJ2FwcGl1bS1iYXNlLWRyaXZlcic7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBHZWNrb0RyaXZlclNlcnZlciBmcm9tICcuL2dlY2tvJztcbmltcG9ydCB7IGRlc2lyZWRDYXBDb25zdHJhaW50cyB9IGZyb20gJy4vZGVzaXJlZC1jYXBzJztcbmltcG9ydCBjb21tYW5kcyBmcm9tICcuL2NvbW1hbmRzL2luZGV4JztcbmltcG9ydCB7IGZvcm1hdENhcHNGb3JTZXJ2ZXIgfSBmcm9tICcuL3V0aWxzJztcblxuY29uc3QgTk9fUFJPWFkgPSBbXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQvW14vXSsvZWxlbWVudHM/JCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnRzPyQnKV0sXG5dO1xuXG5jbGFzcyBHZWNrb0RyaXZlciBleHRlbmRzIEJhc2VEcml2ZXIge1xuICBjb25zdHJ1Y3RvciAob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5kZXNpcmVkQ2FwQ29uc3RyYWludHMgPSBkZXNpcmVkQ2FwQ29uc3RyYWludHM7XG4gICAgdGhpcy5sb2NhdG9yU3RyYXRlZ2llcyA9IFtcbiAgICAgICd4cGF0aCcsXG4gICAgICAndGFnIG5hbWUnLFxuICAgICAgJ2xpbmsgdGV4dCcsXG4gICAgICAncGFydGlhbCBsaW5rIHRleHQnLFxuICAgICAgJ2NzcyBzZWxlY3RvcicsXG4gICAgICAvLyBMZXQgdGhlc2UgdHdvIHJlYWNoIEdlY2tvIERyaXZlciBhbmQgZmFpbCB0aGVyZSB3aXRoIGEgcHJvcGVyIGVycm9yIG1lc3NhZ2VcbiAgICAgICdpZCcsXG4gICAgICAnbmFtZScsXG4gICAgXTtcbiAgICB0aGlzLnJlc2V0U3RhdGUoKTtcblxuICAgIGZvciAoY29uc3QgW2NtZCwgZm5dIG9mIF8udG9QYWlycyhjb21tYW5kcykpIHtcbiAgICAgIEdlY2tvRHJpdmVyLnByb3RvdHlwZVtjbWRdID0gZm47XG4gICAgfVxuICB9XG5cbiAgcmVzZXRTdGF0ZSAoKSB7XG4gICAgdGhpcy5nZWNrbyA9IG51bGw7XG4gICAgdGhpcy5wcm94eVJlcVJlcyA9IG51bGw7XG4gICAgdGhpcy5pc1Byb3h5QWN0aXZlID0gZmFsc2U7XG4gIH1cblxuICBwcm94eUFjdGl2ZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNQcm94eUFjdGl2ZTtcbiAgfVxuXG4gIGdldFByb3h5QXZvaWRMaXN0ICgpIHtcbiAgICByZXR1cm4gTk9fUFJPWFk7XG4gIH1cblxuICBjYW5Qcm94eSAoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyBjcmVhdGVTZXNzaW9uICguLi5hcmdzKSB7XG4gICAgY29uc3QgW3Nlc3Npb25JZCwgY2Fwc10gPSBhd2FpdCBzdXBlci5jcmVhdGVTZXNzaW9uKC4uLmFyZ3MpO1xuICAgIHRoaXMuZ2Vja28gPSBuZXcgR2Vja29Ecml2ZXJTZXJ2ZXIoY2Fwcyk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZ2Vja28uc3RhcnQoZm9ybWF0Q2Fwc0ZvclNlcnZlcihjYXBzKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKCk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy5nZWNrby5wcm94eS5wcm94eVJlcVJlcy5iaW5kKHRoaXMuZ2Vja28ucHJveHkpO1xuICAgIHRoaXMuaXNQcm94eUFjdGl2ZSA9IHRydWU7XG4gICAgcmV0dXJuIFtzZXNzaW9uSWQsIGNhcHNdO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlU2Vzc2lvbiAoKSB7XG4gICAgbG9nLmluZm8oJ0VuZGluZyBHZWNrbyBEcml2ZXIgc2Vzc2lvbicpO1xuICAgIGF3YWl0IHRoaXMuZ2Vja28uc3RvcCgpO1xuICAgIHRoaXMucmVzZXRTdGF0ZSgpO1xuXG4gICAgYXdhaXQgc3VwZXIuZGVsZXRlU2Vzc2lvbigpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEdlY2tvRHJpdmVyO1xuIl0sImZpbGUiOiJsaWIvZHJpdmVyLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
85
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXIuanMiXSwibmFtZXMiOlsiTk9fUFJPWFkiLCJSZWdFeHAiLCJHZWNrb0RyaXZlciIsIkJhc2VEcml2ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJsb2NhdG9yU3RyYXRlZ2llcyIsInJlc2V0U3RhdGUiLCJjbWQiLCJmbiIsIl8iLCJ0b1BhaXJzIiwiY29tbWFuZHMiLCJwcm90b3R5cGUiLCJnZWNrbyIsInByb3h5UmVxUmVzIiwiaXNQcm94eUFjdGl2ZSIsInByb3h5QWN0aXZlIiwiZ2V0UHJveHlBdm9pZExpc3QiLCJjYW5Qcm94eSIsImNyZWF0ZVNlc3Npb24iLCJhcmdzIiwic2Vzc2lvbklkIiwiY2FwcyIsIkdlY2tvRHJpdmVyU2VydmVyIiwibG9nIiwic3RhcnQiLCJlIiwiZGVsZXRlU2Vzc2lvbiIsInByb3h5IiwiYmluZCIsImluZm8iLCJzdG9wIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLFFBQVEsR0FBRyxDQUNmLENBQUMsS0FBRCxFQUFRLElBQUlDLE1BQUosQ0FBVyx3QkFBWCxDQUFSLENBRGUsRUFFZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsd0JBQVgsQ0FBVCxDQUZlLEVBR2YsQ0FBQyxNQUFELEVBQVMsSUFBSUEsTUFBSixDQUFXLDBDQUFYLENBQVQsQ0FIZSxFQUlmLENBQUMsTUFBRCxFQUFTLElBQUlBLE1BQUosQ0FBVyw0QkFBWCxDQUFULENBSmUsQ0FBakI7O0FBT0EsTUFBTUMsV0FBTixTQUEwQkMsc0JBQTFCLENBQXFDO0FBQ25DQyxFQUFBQSxXQUFXLENBQUVDLElBQUksR0FBRyxFQUFULEVBQWE7QUFDdEIsVUFBTUEsSUFBTjtBQUNBLFNBQUtDLHFCQUFMLEdBQTZCQSxrQ0FBN0I7QUFDQSxTQUFLQyxpQkFBTCxHQUF5QixDQUN2QixPQUR1QixFQUV2QixVQUZ1QixFQUd2QixXQUh1QixFQUl2QixtQkFKdUIsRUFLdkIsY0FMdUIsRUFPdkIsSUFQdUIsRUFRdkIsTUFSdUIsQ0FBekI7QUFVQSxTQUFLQyxVQUFMOztBQUVBLFNBQUssTUFBTSxDQUFDQyxHQUFELEVBQU1DLEVBQU4sQ0FBWCxJQUF3QkMsZ0JBQUVDLE9BQUYsQ0FBVUMsY0FBVixDQUF4QixFQUE2QztBQUMzQ1gsTUFBQUEsV0FBVyxDQUFDWSxTQUFaLENBQXNCTCxHQUF0QixJQUE2QkMsRUFBN0I7QUFDRDtBQUNGOztBQUVERixFQUFBQSxVQUFVLEdBQUk7QUFDWixTQUFLTyxLQUFMLEdBQWEsSUFBYjtBQUNBLFNBQUtDLFdBQUwsR0FBbUIsSUFBbkI7QUFDQSxTQUFLQyxhQUFMLEdBQXFCLEtBQXJCO0FBQ0Q7O0FBRURDLEVBQUFBLFdBQVcsR0FBSTtBQUNiLFdBQU8sS0FBS0QsYUFBWjtBQUNEOztBQUVERSxFQUFBQSxpQkFBaUIsR0FBSTtBQUNuQixXQUFPbkIsUUFBUDtBQUNEOztBQUVEb0IsRUFBQUEsUUFBUSxHQUFJO0FBQ1YsV0FBTyxJQUFQO0FBQ0Q7O0FBRWtCLFFBQWJDLGFBQWEsQ0FBRSxHQUFHQyxJQUFMLEVBQVc7QUFDNUIsVUFBTSxDQUFDQyxTQUFELEVBQVlDLElBQVosSUFBb0IsTUFBTSxNQUFNSCxhQUFOLENBQW9CLEdBQUdDLElBQXZCLENBQWhDO0FBQ0EsU0FBS1AsS0FBTCxHQUFhLElBQUlVLGNBQUosQ0FBc0IsS0FBS0MsR0FBM0IsRUFBZ0NGLElBQWhDLENBQWI7O0FBQ0EsUUFBSTtBQUNGLFlBQU0sS0FBS1QsS0FBTCxDQUFXWSxLQUFYLENBQWlCLGdDQUFvQkgsSUFBcEIsQ0FBakIsQ0FBTjtBQUNELEtBRkQsQ0FFRSxPQUFPSSxDQUFQLEVBQVU7QUFDVixZQUFNLEtBQUtDLGFBQUwsRUFBTjtBQUNBLFlBQU1ELENBQU47QUFDRDs7QUFDRCxTQUFLWixXQUFMLEdBQW1CLEtBQUtELEtBQUwsQ0FBV2UsS0FBWCxDQUFpQmQsV0FBakIsQ0FBNkJlLElBQTdCLENBQWtDLEtBQUtoQixLQUFMLENBQVdlLEtBQTdDLENBQW5CO0FBQ0EsU0FBS2IsYUFBTCxHQUFxQixJQUFyQjtBQUNBLFdBQU8sQ0FBQ00sU0FBRCxFQUFZQyxJQUFaLENBQVA7QUFDRDs7QUFFa0IsUUFBYkssYUFBYSxHQUFJO0FBQ3JCLFNBQUtILEdBQUwsQ0FBU00sSUFBVCxDQUFjLDZCQUFkO0FBQ0EsVUFBTSxLQUFLakIsS0FBTCxDQUFXa0IsSUFBWCxFQUFOO0FBQ0EsU0FBS3pCLFVBQUw7QUFFQSxVQUFNLE1BQU1xQixhQUFOLEVBQU47QUFDRDs7QUEzRGtDOztlQThEdEIzQixXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEJhc2VEcml2ZXIgfSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcbmltcG9ydCBHZWNrb0RyaXZlclNlcnZlciBmcm9tICcuL2dlY2tvJztcbmltcG9ydCB7IGRlc2lyZWRDYXBDb25zdHJhaW50cyB9IGZyb20gJy4vZGVzaXJlZC1jYXBzJztcbmltcG9ydCBjb21tYW5kcyBmcm9tICcuL2NvbW1hbmRzL2luZGV4JztcbmltcG9ydCB7IGZvcm1hdENhcHNGb3JTZXJ2ZXIgfSBmcm9tICcuL3V0aWxzJztcblxuY29uc3QgTk9fUFJPWFkgPSBbXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQvW14vXSsvZWxlbWVudHM/JCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnRzPyQnKV0sXG5dO1xuXG5jbGFzcyBHZWNrb0RyaXZlciBleHRlbmRzIEJhc2VEcml2ZXIge1xuICBjb25zdHJ1Y3RvciAob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5kZXNpcmVkQ2FwQ29uc3RyYWludHMgPSBkZXNpcmVkQ2FwQ29uc3RyYWludHM7XG4gICAgdGhpcy5sb2NhdG9yU3RyYXRlZ2llcyA9IFtcbiAgICAgICd4cGF0aCcsXG4gICAgICAndGFnIG5hbWUnLFxuICAgICAgJ2xpbmsgdGV4dCcsXG4gICAgICAncGFydGlhbCBsaW5rIHRleHQnLFxuICAgICAgJ2NzcyBzZWxlY3RvcicsXG4gICAgICAvLyBMZXQgdGhlc2UgdHdvIHJlYWNoIEdlY2tvIERyaXZlciBhbmQgZmFpbCB0aGVyZSB3aXRoIGEgcHJvcGVyIGVycm9yIG1lc3NhZ2VcbiAgICAgICdpZCcsXG4gICAgICAnbmFtZScsXG4gICAgXTtcbiAgICB0aGlzLnJlc2V0U3RhdGUoKTtcblxuICAgIGZvciAoY29uc3QgW2NtZCwgZm5dIG9mIF8udG9QYWlycyhjb21tYW5kcykpIHtcbiAgICAgIEdlY2tvRHJpdmVyLnByb3RvdHlwZVtjbWRdID0gZm47XG4gICAgfVxuICB9XG5cbiAgcmVzZXRTdGF0ZSAoKSB7XG4gICAgdGhpcy5nZWNrbyA9IG51bGw7XG4gICAgdGhpcy5wcm94eVJlcVJlcyA9IG51bGw7XG4gICAgdGhpcy5pc1Byb3h5QWN0aXZlID0gZmFsc2U7XG4gIH1cblxuICBwcm94eUFjdGl2ZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNQcm94eUFjdGl2ZTtcbiAgfVxuXG4gIGdldFByb3h5QXZvaWRMaXN0ICgpIHtcbiAgICByZXR1cm4gTk9fUFJPWFk7XG4gIH1cblxuICBjYW5Qcm94eSAoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyBjcmVhdGVTZXNzaW9uICguLi5hcmdzKSB7XG4gICAgY29uc3QgW3Nlc3Npb25JZCwgY2Fwc10gPSBhd2FpdCBzdXBlci5jcmVhdGVTZXNzaW9uKC4uLmFyZ3MpO1xuICAgIHRoaXMuZ2Vja28gPSBuZXcgR2Vja29Ecml2ZXJTZXJ2ZXIodGhpcy5sb2csIGNhcHMpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmdlY2tvLnN0YXJ0KGZvcm1hdENhcHNGb3JTZXJ2ZXIoY2FwcykpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgdGhpcy5wcm94eVJlcVJlcyA9IHRoaXMuZ2Vja28ucHJveHkucHJveHlSZXFSZXMuYmluZCh0aGlzLmdlY2tvLnByb3h5KTtcbiAgICB0aGlzLmlzUHJveHlBY3RpdmUgPSB0cnVlO1xuICAgIHJldHVybiBbc2Vzc2lvbklkLCBjYXBzXTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVNlc3Npb24gKCkge1xuICAgIHRoaXMubG9nLmluZm8oJ0VuZGluZyBHZWNrbyBEcml2ZXIgc2Vzc2lvbicpO1xuICAgIGF3YWl0IHRoaXMuZ2Vja28uc3RvcCgpO1xuICAgIHRoaXMucmVzZXRTdGF0ZSgpO1xuXG4gICAgYXdhaXQgc3VwZXIuZGVsZXRlU2Vzc2lvbigpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEdlY2tvRHJpdmVyO1xuIl0sImZpbGUiOiJsaWIvZHJpdmVyLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
@@ -15,9 +15,9 @@ var _os = _interopRequireDefault(require("os"));
15
15
 
16
16
  var _path = _interopRequireDefault(require("path"));
17
17
 
18
- var _appiumBaseDriver = require("appium-base-driver");
18
+ var _baseDriver = require("@appium/base-driver");
19
19
 
20
- var _appiumSupport = require("appium-support");
20
+ var _support = require("@appium/support");
21
21
 
22
22
  var _teen_process = require("teen_process");
23
23
 
@@ -29,21 +29,28 @@ var _child_process = require("child_process");
29
29
 
30
30
  var _constants = require("./constants");
31
31
 
32
- const log = _appiumSupport.logger.getLogger('GeckoDriverServer');
33
-
34
- const GD_BINARY = `geckodriver${_appiumSupport.system.isWindows() ? '.exe' : ''}`;
32
+ const GD_BINARY = `geckodriver${_support.system.isWindows() ? '.exe' : ''}`;
35
33
  const STARTUP_TIMEOUT_MS = 10000;
36
34
  const GECKO_PORT_RANGE = [5200, 5300];
37
35
 
38
- const GECKO_SERVER_GUARD = _appiumSupport.util.getLockFileGuard(_path.default.resolve(_os.default.tmpdir(), 'gecko_server_guard.lock'), {
36
+ const GECKO_SERVER_GUARD = _support.util.getLockFileGuard(_path.default.resolve(_os.default.tmpdir(), 'gecko_server_guard.lock'), {
39
37
  timeout: 5,
40
38
  tryRecovery: true
41
39
  });
42
40
 
43
- class GeckoProxy extends _appiumBaseDriver.JWProxy {
41
+ const DEFAULT_MARIONETTE_PORT = 2828;
42
+ const PROCESS_SPECIFIC_OPTION_NAMES_MAP = Object.freeze({
43
+ noReset: 'noReset',
44
+ verbosity: 'verbosity',
45
+ androidStorage: 'androidStorage',
46
+ marionettePort: 'marionettePort',
47
+ systemPort: 'port'
48
+ });
49
+
50
+ class GeckoProxy extends _baseDriver.JWProxy {
44
51
  async proxyCommand(url, method, body = null) {
45
52
  if (this.didProcessExit) {
46
- throw new _appiumBaseDriver.errors.InvalidContextError(`'${method} ${url}' cannot be proxied to Gecko Driver server because ` + 'its process is not running (probably crashed). Check the Appium log for more details');
53
+ throw new _baseDriver.errors.InvalidContextError(`'${method} ${url}' cannot be proxied to Gecko Driver server because ` + 'its process is not running (probably crashed). Check the Appium log for more details');
47
54
  }
48
55
 
49
56
  return await super.proxyCommand(url, method, body);
@@ -52,19 +59,19 @@ class GeckoProxy extends _appiumBaseDriver.JWProxy {
52
59
  }
53
60
 
54
61
  class GeckoDriverProcess {
55
- constructor(opts = {}) {
56
- for (const optName of ['noReset', 'verbosity', 'androidStorage']) {
57
- this[optName] = opts[optName];
62
+ constructor(log, opts = {}) {
63
+ for (const [optName, propName] of _lodash.default.toPairs(PROCESS_SPECIFIC_OPTION_NAMES_MAP)) {
64
+ this[propName] = opts[optName];
58
65
  }
59
66
 
60
- this.port = opts.systemPort;
67
+ this.log = log;
61
68
  this.proc = null;
62
69
  }
63
70
 
64
71
  get isRunning() {
65
72
  var _this$proc;
66
73
 
67
- return !!((_this$proc = this.proc) === null || _this$proc === void 0 ? void 0 : _this$proc.isRunning);
74
+ return !!((_this$proc = this.proc) !== null && _this$proc !== void 0 && _this$proc.isRunning);
68
75
  }
69
76
 
70
77
  async init() {
@@ -87,7 +94,7 @@ class GeckoDriverProcess {
87
94
  let driverBin;
88
95
 
89
96
  try {
90
- driverBin = await _appiumSupport.fs.which(GD_BINARY);
97
+ driverBin = await _support.fs.which(GD_BINARY);
91
98
  } catch (e) {
92
99
  throw new Error(`${GD_BINARY} binary cannot be found in PATH. ` + `Please make sure it is present on your system`);
93
100
  }
@@ -105,7 +112,18 @@ class GeckoDriverProcess {
105
112
  }
106
113
 
107
114
  if (this.noReset) {
115
+ var _this$marionettePort;
116
+
108
117
  args.push('--connect-existing');
118
+
119
+ if (_lodash.default.isNil(this.marionettePort)) {
120
+ this.log.info(`'marionettePort' capability value is not provided while 'noReset' is enabled`);
121
+ this.log.info(`Assigning 'marionettePort' to the default value (${DEFAULT_MARIONETTE_PORT})`);
122
+ }
123
+
124
+ args.push('--marionette-port', (_this$marionettePort = this.marionettePort) !== null && _this$marionettePort !== void 0 ? _this$marionettePort : DEFAULT_MARIONETTE_PORT);
125
+ } else if (!_lodash.default.isNil(this.marionettePort)) {
126
+ args.push('--marionette-port', this.marionettePort);
109
127
  }
110
128
 
111
129
  args.push('-p', this.port);
@@ -119,13 +137,13 @@ class GeckoDriverProcess {
119
137
  const line = _lodash.default.trim(stdout || stderr);
120
138
 
121
139
  if (line) {
122
- log.debug(`[${GD_BINARY}] ${line}`);
140
+ this.log.debug(`[${GD_BINARY}] ${line}`);
123
141
  }
124
142
  });
125
143
  this.proc.on('exit', (code, signal) => {
126
- log.info(`${GD_BINARY} has exited with code ${code}, signal ${signal}`);
144
+ this.log.info(`${GD_BINARY} has exited with code ${code}, signal ${signal}`);
127
145
  });
128
- log.info(`Starting '${driverBin}' with args ${JSON.stringify(args)}`);
146
+ this.log.info(`Starting '${driverBin}' with args ${JSON.stringify(args)}`);
129
147
  await this.proc.start(0);
130
148
  }
131
149
 
@@ -147,25 +165,28 @@ class GeckoDriverProcess {
147
165
 
148
166
  const RUNNING_PROCESS_IDS = [];
149
167
  process.once('exit', () => {
150
- for (const pid of RUNNING_PROCESS_IDS) {
151
- const command = _appiumSupport.system.isWindows() ? `taskkill.exe /PID ${pid}` : `kill ${pid}`;
152
-
153
- try {
154
- (0, _child_process.execSync)(command);
155
- } catch (ign) {}
168
+ if (_lodash.default.isEmpty(RUNNING_PROCESS_IDS)) {
169
+ return;
156
170
  }
171
+
172
+ const command = _support.system.isWindows() ? 'taskkill.exe ' + RUNNING_PROCESS_IDS.map(pid => `/PID ${pid}`).join(' ') : `kill ${RUNNING_PROCESS_IDS.join(' ')}`;
173
+
174
+ try {
175
+ (0, _child_process.execSync)(command);
176
+ } catch (ign) {}
157
177
  });
158
178
 
159
179
  class GeckoDriverServer {
160
- constructor(caps) {
161
- this.process = new GeckoDriverProcess(caps);
180
+ constructor(log, caps) {
181
+ this.process = new GeckoDriverProcess(log, caps);
182
+ this.log = log;
162
183
  this.proxy = null;
163
184
  }
164
185
 
165
186
  get isRunning() {
166
187
  var _this$process;
167
188
 
168
- return !!((_this$process = this.process) === null || _this$process === void 0 ? void 0 : _this$process.isRunning);
189
+ return !!((_this$process = this.process) !== null && _this$process !== void 0 && _this$process.isRunning);
169
190
  }
170
191
 
171
192
  async start(geckoCaps) {
@@ -173,6 +194,7 @@ class GeckoDriverServer {
173
194
  this.proxy = new GeckoProxy({
174
195
  server: '127.0.0.1',
175
196
  port: this.process.port,
197
+ log: this.log,
176
198
  base: '',
177
199
  keepAlive: true
178
200
  });
@@ -224,22 +246,22 @@ class GeckoDriverServer {
224
246
  var _this$proxy;
225
247
 
226
248
  if (!this.isRunning) {
227
- log.info(`Gecko Driver session cannot be stopped, because the server is not running`);
249
+ this.log.info(`Gecko Driver session cannot be stopped, because the server is not running`);
228
250
  return;
229
251
  }
230
252
 
231
- if ((_this$proxy = this.proxy) === null || _this$proxy === void 0 ? void 0 : _this$proxy.sessionId) {
253
+ if ((_this$proxy = this.proxy) !== null && _this$proxy !== void 0 && _this$proxy.sessionId) {
232
254
  try {
233
255
  await this.proxy.command(`/session/${this.proxy.sessionId}`, 'DELETE');
234
256
  } catch (e) {
235
- log.info(`Gecko Driver session cannot be deleted. Original error: ${e.message}`);
257
+ this.log.info(`Gecko Driver session cannot be deleted. Original error: ${e.message}`);
236
258
  }
237
259
  }
238
260
 
239
261
  try {
240
262
  await this.process.stop();
241
263
  } catch (e) {
242
- log.warn(`Gecko Driver process cannot be stopped (${e.message}). Killing it forcefully`);
264
+ this.log.warn(`Gecko Driver process cannot be stopped (${e.message}). Killing it forcefully`);
243
265
  await this.process.kill();
244
266
  }
245
267
  }
@@ -250,4 +272,4 @@ var _default = GeckoDriverServer;
250
272
  exports.default = _default;require('source-map-support').install();
251
273
 
252
274
 
253
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9nZWNrby5qcyJdLCJuYW1lcyI6WyJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJHRF9CSU5BUlkiLCJzeXN0ZW0iLCJpc1dpbmRvd3MiLCJTVEFSVFVQX1RJTUVPVVRfTVMiLCJHRUNLT19QT1JUX1JBTkdFIiwiR0VDS09fU0VSVkVSX0dVQVJEIiwidXRpbCIsImdldExvY2tGaWxlR3VhcmQiLCJwYXRoIiwicmVzb2x2ZSIsIm9zIiwidG1wZGlyIiwidGltZW91dCIsInRyeVJlY292ZXJ5IiwiR2Vja29Qcm94eSIsIkpXUHJveHkiLCJwcm94eUNvbW1hbmQiLCJ1cmwiLCJtZXRob2QiLCJib2R5IiwiZGlkUHJvY2Vzc0V4aXQiLCJlcnJvcnMiLCJJbnZhbGlkQ29udGV4dEVycm9yIiwiR2Vja29Ecml2ZXJQcm9jZXNzIiwiY29uc3RydWN0b3IiLCJvcHRzIiwib3B0TmFtZSIsInBvcnQiLCJzeXN0ZW1Qb3J0IiwicHJvYyIsImlzUnVubmluZyIsImluaXQiLCJzdGFydFBvcnQiLCJlbmRQb3J0IiwiZSIsIkVycm9yIiwiZHJpdmVyQmluIiwiZnMiLCJ3aGljaCIsImFyZ3MiLCJfIiwidG9Mb3dlciIsInZlcmJvc2l0eSIsIlZFUkJPU0lUWSIsIkRFQlVHIiwicHVzaCIsIlRSQUNFIiwibm9SZXNldCIsImFuZHJvaWRTdG9yYWdlIiwiU3ViUHJvY2VzcyIsIm9uIiwic3Rkb3V0Iiwic3RkZXJyIiwibGluZSIsInRyaW0iLCJkZWJ1ZyIsImNvZGUiLCJzaWduYWwiLCJpbmZvIiwiSlNPTiIsInN0cmluZ2lmeSIsInN0YXJ0Iiwic3RvcCIsImtpbGwiLCJpZ24iLCJSVU5OSU5HX1BST0NFU1NfSURTIiwicHJvY2VzcyIsIm9uY2UiLCJwaWQiLCJjb21tYW5kIiwiR2Vja29Ecml2ZXJTZXJ2ZXIiLCJjYXBzIiwicHJveHkiLCJnZWNrb0NhcHMiLCJzZXJ2ZXIiLCJiYXNlIiwia2VlcEFsaXZlIiwiZXJyIiwibWVzc2FnZSIsIndhaXRNcyIsImludGVydmFsTXMiLCJ0ZXN0IiwicHVsbCIsImNhcGFiaWxpdGllcyIsImZpcnN0TWF0Y2giLCJhbHdheXNNYXRjaCIsInNlc3Npb25JZCIsIndhcm4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsR0FBRyxHQUFHQyxzQkFBT0MsU0FBUCxDQUFpQixtQkFBakIsQ0FBWjs7QUFFQSxNQUFNQyxTQUFTLEdBQUksY0FBYUMsc0JBQU9DLFNBQVAsS0FBcUIsTUFBckIsR0FBOEIsRUFBRyxFQUFqRTtBQUNBLE1BQU1DLGtCQUFrQixHQUFHLEtBQTNCO0FBQ0EsTUFBTUMsZ0JBQWdCLEdBQUcsQ0FBQyxJQUFELEVBQU8sSUFBUCxDQUF6Qjs7QUFDQSxNQUFNQyxrQkFBa0IsR0FBR0Msb0JBQUtDLGdCQUFMLENBQ3pCQyxjQUFLQyxPQUFMLENBQWFDLFlBQUdDLE1BQUgsRUFBYixFQUEwQix5QkFBMUIsQ0FEeUIsRUFFekI7QUFBQ0MsRUFBQUEsT0FBTyxFQUFFLENBQVY7QUFBYUMsRUFBQUEsV0FBVyxFQUFFO0FBQTFCLENBRnlCLENBQTNCOztBQU1BLE1BQU1DLFVBQU4sU0FBeUJDLHlCQUF6QixDQUFpQztBQUMvQixRQUFNQyxZQUFOLENBQW9CQyxHQUFwQixFQUF5QkMsTUFBekIsRUFBaUNDLElBQUksR0FBRyxJQUF4QyxFQUE4QztBQUM1QyxRQUFJLEtBQUtDLGNBQVQsRUFBeUI7QUFDdkIsWUFBTSxJQUFJQyx5QkFBT0MsbUJBQVgsQ0FDSCxJQUFHSixNQUFPLElBQUdELEdBQUkscURBQWxCLEdBQ0Esc0ZBRkksQ0FBTjtBQUdEOztBQUNELFdBQU8sTUFBTSxNQUFNRCxZQUFOLENBQW1CQyxHQUFuQixFQUF3QkMsTUFBeEIsRUFBZ0NDLElBQWhDLENBQWI7QUFDRDs7QUFSOEI7O0FBV2pDLE1BQU1JLGtCQUFOLENBQXlCO0FBQ3ZCQyxFQUFBQSxXQUFXLENBQUVDLElBQUksR0FBRyxF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QUFDRjs7QUFFRCxRQUFJO0FBQ0YsWUFBTSxLQUFLWixPQUFMLENBQWFKLElBQWIsRUFBTjtBQUNELEtBRkQsQ0FFRSxPQUFPNUIsQ0FBUCxFQUFVO0FBQ1ZyQyxNQUFBQSxHQUFHLENBQUMwRixJQUFKLENBQVUsMkNBQTBDckQsQ0FBQyxDQUFDNEMsT0FBUSwwQkFBOUQ7QUFDQSxZQUFNLEtBQUtaLE9BQUwsQ0FBYUgsSUFBYixFQUFOO0FBQ0Q7QUFDRjs7QUFsRnFCOztlQXFGVE8saUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgSldQcm94eSwgZXJyb3JzIH0gZnJvbSAnYXBwaXVtLWJhc2UtZHJpdmVyJztcbmltcG9ydCB7IGZzLCBsb2dnZXIsIHV0aWwsIHN5c3RlbSB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCB7IFN1YlByb2Nlc3MgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IGZpbmRBUG9ydE5vdEluVXNlIH0gZnJvbSAncG9ydHNjYW5uZXInO1xuaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IFZFUkJPU0lUWSB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuY29uc3QgbG9nID0gbG9nZ2VyLmdldExvZ2dlcignR2Vja29Ecml2ZXJTZXJ2ZXInKTtcblxuY29uc3QgR0RfQklOQVJZID0gYGdlY2tvZHJpdmVyJHtzeXN0ZW0uaXNXaW5kb3dzKCkgPyAnLmV4ZScgOiAnJ31gO1xuY29uc3QgU1RBUlRVUF9USU1FT1VUX01TID0gMTAwMDA7IC8vIDEwIHNlY29uZHNcbmNvbnN0IEdFQ0tPX1BPUlRfUkFOR0UgPSBbNTIwMCwgNTMwMF07XG5jb25zdCBHRUNLT19TRVJWRVJfR1VBUkQgPSB1dGlsLmdldExvY2tGaWxlR3VhcmQoXG4gIHBhdGgucmVzb2x2ZShvcy50bXBkaXIoKSwgJ2dlY2tvX3NlcnZlcl9ndWFyZC5sb2NrJyksXG4gIHt0aW1lb3V0OiA1LCB0cnlSZWNvdmVyeTogdHJ1ZX1cbik7XG5cblxuY2xhc3MgR2Vja29Qcm94eSBleHRlbmRzIEpXUHJveHkge1xuICBhc3luYyBwcm94eUNvbW1hbmQgKHVybCwgbWV0aG9kLCBib2R5ID0gbnVsbCkge1xuICAgIGlmICh0aGlzLmRpZFByb2Nlc3NFeGl0KSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRDb250ZXh0RXJyb3IoXG4gICAgICAgIGAnJHttZXRob2R9ICR7dXJsfScgY2Fubm90IGJlIHByb3hpZWQgdG8gR2Vja28gRHJpdmVyIHNlcnZlciBiZWNhdXNlIGAgK1xuICAgICAgICAnaXRzIHByb2Nlc3MgaXMgbm90IHJ1bm5pbmcgKHByb2JhYmx5IGNyYXNoZWQpLiBDaGVjayB0aGUgQXBwaXVtIGxvZyBmb3IgbW9yZSBkZXRhaWxzJyk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCBzdXBlci5wcm94eUNvbW1hbmQodXJsLCBtZXRob2QsIGJvZHkpO1xuICB9XG59XG5cbmNsYXNzIEdlY2tvRHJpdmVyUHJvY2VzcyB7XG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30pIHtcbiAgICBmb3IgKGNvbnN0IG9wdE5hbWUgb2YgWydub1Jlc2V0JywgJ3ZlcmJvc2l0eScsICdhbmRyb2lkU3RvcmFnZSddKSB7XG4gICAgICB0aGlzW29wdE5hbWVdID0gb3B0c1tvcHROYW1lXTtcbiAgICB9XG4gICAgdGhpcy5wb3J0ID0gb3B0cy5zeXN0ZW1Qb3J0O1xuICAgIHRoaXMucHJvYyA9IG51bGw7XG4gIH1cblxuICBnZXQgaXNSdW5uaW5nICgpIHtcbiAgICByZXR1cm4gISEodGhpcy5wcm9jPy5pc1J1bm5pbmcpO1xuICB9XG5cbiAgYXN5bmMgaW5pdCAoKSB7XG4gICAgaWYgKHRoaXMuaXNSdW5uaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnBvcnQpIHtcbiAgICAgIGF3YWl0IEdFQ0tPX1NFUlZFUl9HVUFSRChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IFtzdGFydFBvcnQsIGVuZFBvcnRdID0gR0VDS09fUE9SVF9SQU5HRTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLnBvcnQgPSBhd2FpdCBmaW5kQVBvcnROb3RJblVzZShzdGFydFBvcnQsIGVuZFBvcnQpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYENhbm5vdCBmaW5kIGFueSBmcmVlIHBvcnQgaW4gcmFuZ2UgJHtzdGFydFBvcnR9Li4ke2VuZFBvcnR9LiBgICtcbiAgICAgICAgICAgIGBEb3VibGUgY2hlY2sgdGhlIHByb2Nlc3NlcyB0aGF0IGFyZSBsb2NraW5nIHBvcnRzIHdpdGhpbiB0aGlzIHJhbmdlIGFuZCB0ZXJtaW5hdGUgYCArXG4gICAgICAgICAgICBgdGhlc2Ugd2hpY2ggYXJlIG5vdCBuZWVkZWQgYW55bW9yZSBvciBzZXQgYW55IGZyZWUgcG9ydCBudW1iZXIgdG8gdGhlICdzeXN0ZW1Qb3J0JyBjYXBhYmlsaXR5YCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGxldCBkcml2ZXJCaW47XG4gICAgdHJ5IHtcbiAgICAgIGRyaXZlckJpbiA9IGF3YWl0IGZzLndoaWNoKEdEX0JJTkFSWSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke0dEX0JJTkFSWX0gYmluYXJ5IGNhbm5vdCBiZSBmb3VuZCBpbiBQQVRILiBgICtcbiAgICAgICAgYFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgcHJlc2VudCBvbiB5b3VyIHN5c3RlbWApO1xuICAgIH1cbiAgICBjb25zdCBhcmdzID0gW107XG4gICAgLyogI3JlZ2lvbiBPcHRpb25zICovXG4gICAgc3dpdGNoIChfLnRvTG93ZXIodGhpcy52ZXJib3NpdHkpKSB7XG4gICAgICBjYXNlIFZFUkJPU0lUWS5ERUJVRzpcbiAgICAgICAgYXJncy5wdXNoKCctdicpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVkVSQk9TSVRZLlRSQUNFOlxuICAgICAgICBhcmdzLnB1c2goJy12dicpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKHRoaXMubm9SZXNldCkge1xuICAgICAgYXJncy5wdXNoKCctLWNvbm5lY3QtZXhpc3RpbmcnKTtcbiAgICB9XG4gICAgLyogI2VuZHJlZ2lvbiAqL1xuXG4gICAgYXJncy5wdXNoKCctcCcsIHRoaXMucG9ydCk7XG4gICAgaWYgKHRoaXMuYW5kcm9pZFN0b3JhZ2UpIHtcbiAgICAgIGFyZ3MucHVzaCgnLS1hbmRyb2lkLXN0b3JhZ2UnLCB0aGlzLmFuZHJvaWRTdG9yYWdlKTtcbiAgICB9XG4gICAgdGhpcy5wcm9jID0gbmV3IFN1YlByb2Nlc3MoZHJpdmVyQmluLCBhcmdzKTtcbiAgICB0aGlzLnByb2Mub24oJ291dHB1dCcsIChzdGRvdXQsIHN0ZGVycikgPT4ge1xuICAgICAgY29uc3QgbGluZSA9IF8udHJpbShzdGRvdXQgfHwgc3RkZXJyKTtcbiAgICAgIGlmIChsaW5lKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgWyR7R0RfQklOQVJZfV0gJHtsaW5lfWApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMucHJvYy5vbignZXhpdCcsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgIGxvZy5pbmZvKGAke0dEX0JJTkFSWX0gaGFzIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfSwgc2lnbmFsICR7c2lnbmFsfWApO1xuICAgIH0pO1xuICAgIGxvZy5pbmZvKGBTdGFydGluZyAnJHtkcml2ZXJCaW59JyB3aXRoIGFyZ3MgJHtKU09OLnN0cmluZ2lmeShhcmdzKX1gKTtcbiAgICBhd2FpdCB0aGlzLnByb2Muc3RhcnQoMCk7XG4gIH1cblxuICBhc3luYyBzdG9wICgpIHtcbiAgICBpZiAodGhpcy5pc1J1bm5pbmcpIHtcbiAgICAgIGF3YWl0IHRoaXMucHJvYy5zdG9wKCdTSUdURVJNJyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMga2lsbCAoKSB7XG4gICAgaWYgKHRoaXMuaXNSdW5uaW5nKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnByb2Muc3RvcCgnU0lHS0lMTCcpO1xuICAgICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIH1cbiAgfVxufVxuXG5jb25zdCBSVU5OSU5HX1BST0NFU1NfSURTID0gW107XG5wcm9jZXNzLm9uY2UoJ2V4aXQnLCAoKSA9PiB7XG4gIGZvciAoY29uc3QgcGlkIG9mIFJVTk5JTkdfUFJPQ0VTU19JRFMpIHtcbiAgICBjb25zdCBjb21tYW5kID0gc3lzdGVtLmlzV2luZG93cygpID8gYHRhc2traWxsLmV4ZSAvUElEICR7cGlkfWAgOiBga2lsbCAke3BpZH1gO1xuICAgIHRyeSB7XG4gICAgICBleGVjU3luYyhjb21tYW5kKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gIH1cbn0pO1xuXG5jbGFzcyBHZWNrb0RyaXZlclNlcnZlciB7XG4gIGNvbnN0cnVjdG9yIChjYXBzKSB7XG4gICAgdGhpcy5wcm9jZXNzID0gbmV3IEdlY2tvRHJpdmVyUHJvY2VzcyhjYXBzKTtcbiAgICB0aGlzLnByb3h5ID0gbnVsbDtcbiAgfVxuXG4gIGdldCBpc1J1bm5pbmcgKCkge1xuICAgIHJldHVybiAhISh0aGlzLnByb2Nlc3M/LmlzUnVubmluZyk7XG4gIH1cblxuICBhc3luYyBzdGFydCAoZ2Vja29DYXBzKSB7XG4gICAgYXdhaXQgdGhpcy5wcm9jZXNzLmluaXQoKTtcblxuICAgIHRoaXMucHJveHkgPSBuZXcgR2Vja29Qcm94eSh7XG4gICAgICBzZXJ2ZXI6ICcxMjcuMC4wLjEnLFxuICAgICAgcG9ydDogdGhpcy5wcm9jZXNzLnBvcnQsXG4gICAgICBiYXNlOiAnJyxcbiAgICAgIGtlZXBBbGl2ZTogdHJ1ZSxcbiAgICB9KTtcbiAgICB0aGlzLnByb3h5LmRpZFByb2Nlc3NFeGl0ID0gZmFsc2U7XG4gICAgdGhpcy5wcm9jZXNzLnByb2Mub24oJ2V4aXQnLCAoKSA9PiB7XG4gICAgICB0aGlzLnByb3h5LmRpZFByb2Nlc3NFeGl0ID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnByb3h5LmNvbW1hbmQoJy9zdGF0dXMnLCAnR0VUJyk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGlmICh0aGlzLnByb3h5LmRpZFByb2Nlc3NFeGl0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyLm1lc3NhZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgd2FpdE1zOiBTVEFSVFVQX1RJTUVPVVRfTVMsXG4gICAgICAgIGludGVydmFsTXM6IDEwMDAsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAodGhpcy5wcm9jZXNzLmlzUnVubmluZykge1xuICAgICAgICAvLyBhdm9pZCBcImZyb3plblwiIHByb2Nlc3NlcyxcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzLmtpbGwoKTtcbiAgICAgIH1cbiAgICAgIGlmICgvQ29uZGl0aW9uIHVubWV0Ly50ZXN0KGUubWVzc2FnZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBHZWNrbyBEcml2ZXIgc2VydmVyIGlzIG5vdCBsaXN0ZW5pbmcgd2l0aGluICR7U1RBUlRVUF9USU1FT1VUX01TfW1zIHRpbWVvdXQuIGAgK1xuICAgICAgICAgIGBNYWtlIHN1cmUgaXQgY291bGQgYmUgc3RhcnRlZCBtYW51YWxseSBmcm9tIGEgdGVybWluYWxgKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIGNvbnN0IHBpZCA9IHRoaXMucHJvY2Vzcy5wcm9jLnBpZDtcbiAgICBSVU5OSU5HX1BST0NFU1NfSURTLnB1c2gocGlkKTtcbiAgICB0aGlzLnByb2Nlc3MucHJvYy5vbignZXhpdCcsICgpID0+IHZvaWQgXy5wdWxsKFJVTk5JTkdfUFJPQ0VTU19JRFMsIHBpZCkpO1xuXG4gICAgYXdhaXQgdGhpcy5wcm94eS5jb21tYW5kKCcvc2Vzc2lvbicsICdQT1NUJywge1xuICAgICAgY2FwYWJpbGl0aWVzOiB7XG4gICAgICAgIGZpcnN0TWF0Y2g6IFt7fV0sXG4gICAgICAgIGFsd2F5c01hdGNoOiBnZWNrb0NhcHMsXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzdG9wICgpIHtcbiAgICBpZiAoIXRoaXMuaXNSdW5uaW5nKSB7XG4gICAgICBsb2cuaW5mbyhgR2Vja28gRHJpdmVyIHNlc3Npb24gY2Fubm90IGJlIHN0b3BwZWQsIGJlY2F1c2UgdGhlIHNlcnZlciBpcyBub3QgcnVubmluZ2ApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3h5Py5zZXNzaW9uSWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMucHJveHkuY29tbWFuZChgL3Nlc3Npb24vJHt0aGlzLnByb3h5LnNlc3Npb25JZH1gLCAnREVMRVRFJyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZy5pbmZvKGBHZWNrbyBEcml2ZXIgc2Vzc2lvbiBjYW5ub3QgYmUgZGVsZXRlZC4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnByb2Nlc3Muc3RvcCgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy53YXJuKGBHZWNrbyBEcml2ZXIgcHJvY2VzcyBjYW5ub3QgYmUgc3RvcHBlZCAoJHtlLm1lc3NhZ2V9KS4gS2lsbGluZyBpdCBmb3JjZWZ1bGx5YCk7XG4gICAgICBhd2FpdCB0aGlzLnByb2Nlc3Mua2lsbCgpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBHZWNrb0RyaXZlclNlcnZlcjtcbiJdLCJmaWxlIjoibGliL2dlY2tvLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
275
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9nZWNrby5qcyJdLCJuYW1lcyI6WyJHRF9CSU5BUlkiLCJzeXN0ZW0iLCJpc1dpbmRvd3MiLCJTVEFSVFVQX1RJTUVPVVRfTVMiLCJHRUNLT19QT1JUX1JBTkdFIiwiR0VDS09fU0VSVkVSX0dVQVJEIiwidXRpbCIsImdldExvY2tGaWxlR3VhcmQiLCJwYXRoIiwicmVzb2x2ZSIsIm9zIiwidG1wZGlyIiwidGltZW91dCIsInRyeVJlY292ZXJ5IiwiREVGQVVMVF9NQVJJT05FVFRFX1BPUlQiLCJQUk9DRVNTX1NQRUNJRklDX09QVElPTl9OQU1FU19NQVAiLCJPYmplY3QiLCJmcmVlemUiLCJub1Jlc2V0IiwidmVyYm9zaXR5IiwiYW5kcm9pZFN0b3JhZ2UiLCJtYXJpb25ldHRlUG9ydCIsInN5c3RlbVBvcnQiLCJHZWNrb1Byb3h5IiwiSldQcm94eSIsInByb3h5Q29tbWFuZCIsInVybCIsIm1ldGhvZCIsImJvZHkiLCJkaWRQcm9jZXNzRXhpdCIsImVycm9ycyIsIkludmFsaWRDb250ZXh0RXJyb3IiLCJHZWNrb0RyaXZlclByb2Nlc3MiLCJjb25zdHJ1Y3RvciIsImxvZyIsIm9wdHMiLCJvcHROYW1lIiwicHJvcE5hbWUiLCJfIiwidG9QYWlycyIsInByb2MiLCJpc1J1bm5pbmciLCJpbml0IiwicG9ydCIsInN0YXJ0UG9ydCIsImVuZFBvcnQiLCJlIiwiRXJyb3IiLCJkcml2ZXJCaW4iLCJmcyIsIndoaWNoIiwiYXJncyIsInRvTG93ZXIiLCJWRVJCT1NJVFkiLCJERUJVRyIsInB1c2giLCJUUkFDRSIsImlzTmlsIiwiaW5mbyIsIlN1YlByb2Nlc3MiLCJvbiIsInN0ZG91dCIsInN0ZGVyciIsImxpbmUiLCJ0cmltIiwiZGVidWciLCJjb2RlIiwic2lnbmFsIiwiSlNPTiIsInN0cmluZ2lmeSIsInN0YXJ0Iiwic3RvcCIsImtpbGwiLCJpZ24iLCJSVU5OSU5HX1BST0NFU1NfSURTIiwicHJvY2VzcyIsIm9uY2UiLCJpc0VtcHR5IiwiY29tbWFuZCIsIm1hcCIsInBpZCIsImpvaW4iLCJHZWNrb0RyaXZlclNlcnZlciIsImNhcHMiLCJwcm94eSIsImdlY2tvQ2FwcyIsInNlcnZlciIsImJhc2UiLCJrZWVwQWxpdmUiLCJlcnIiLCJtZXNzYWdlIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsInRlc3QiLCJwdWxsIiwiY2FwYWJpbGl0aWVzIiwiZmlyc3RNYXRjaCIsImFsd2F5c01hdGNoIiwic2Vzc2lvbklkIiwid2FybiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxTQUFTLEdBQUksY0FBYUMsZ0JBQU9DLFNBQVAsS0FBcUIsTUFBckIsR0FBOEIsRUFBRyxFQUFqRTtBQUNBLE1BQU1DLGtCQUFrQixHQUFHLEtBQTNCO0FBQ0EsTUFBTUMsZ0JBQWdCLEdBQUcsQ0FBQyxJQUFELEVBQU8sSUFBUCxDQUF6Qjs7QUFDQSxNQUFNQyxrQkFBa0IsR0FBR0MsY0FBS0MsZ0JBQUwsQ0FDekJDLGNBQUtDLE9BQUwsQ0FBYUMsWUFBR0MsTUFBSCxFQUFiLEVBQTBCLHlCQUExQixDQUR5QixFQUV6QjtBQUFDQyxFQUFBQSxPQUFPLEVBQUUsQ0FBVjtBQUFhQyxFQUFBQSxXQUFXLEVBQUU7QUFBMUIsQ0FGeUIsQ0FBM0I7O0FBSUEsTUFBTUMsdUJBQXVCLEdBQUcsSUFBaEM7QUFDQSxNQUFNQyxpQ0FBaUMsR0FBR0MsTUFBTSxDQUFDQyxNQUFQLENBQWM7QUFDdERDLEVBQUFBLE9BQU8sRUFBRSxTQUQ2QztBQUV0REMsRUFBQUEsU0FBUyxFQUFFLFdBRjJDO0FBR3REQyxFQUFBQSxjQUFjLEVBQUUsZ0JBSHNDO0FBSXREQyxFQUFBQSxjQUFjLEVBQUUsZ0JBSnNDO0FBS3REQyxFQUFBQSxVQUFVLEVBQUU7QUFMMEMsQ0FBZCxDQUExQzs7QUFTQSxNQUFNQyxVQUFOLFNBQXlCQyxtQkFBekIsQ0FBaUM7QUFDYixRQUFaQyxZQUFZLENBQUVD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QUFDRixZQUFNLEtBQUtmLE9BQUwsQ0FBYUosSUFBYixFQUFOO0FBQ0QsS0FGRCxDQUVFLE9BQU96QixDQUFQLEVBQVU7QUFDVixXQUFLWixHQUFMLENBQVNpRSxJQUFULENBQWUsMkNBQTBDckQsQ0FBQyxDQUFDNEMsT0FBUSwwQkFBbkU7QUFDQSxZQUFNLEtBQUtmLE9BQUwsQ0FBYUgsSUFBYixFQUFOO0FBQ0Q7QUFDRjs7QUFwRnFCOztlQXVGVFUsaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgSldQcm94eSwgZXJyb3JzIH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyBmcywgdXRpbCwgc3lzdGVtIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IFN1YlByb2Nlc3MgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IGZpbmRBUG9ydE5vdEluVXNlIH0gZnJvbSAncG9ydHNjYW5uZXInO1xuaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IFZFUkJPU0lUWSB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuY29uc3QgR0RfQklOQVJZID0gYGdlY2tvZHJpdmVyJHtzeXN0ZW0uaXNXaW5kb3dzKCkgPyAnLmV4ZScgOiAnJ31gO1xuY29uc3QgU1RBUlRVUF9USU1FT1VUX01TID0gMTAwMDA7IC8vIDEwIHNlY29uZHNcbmNvbnN0IEdFQ0tPX1BPUlRfUkFOR0UgPSBbNTIwMCwgNTMwMF07XG5jb25zdCBHRUNLT19TRVJWRVJfR1VBUkQgPSB1dGlsLmdldExvY2tGaWxlR3VhcmQoXG4gIHBhdGgucmVzb2x2ZShvcy50bXBkaXIoKSwgJ2dlY2tvX3NlcnZlcl9ndWFyZC5sb2NrJyksXG4gIHt0aW1lb3V0OiA1LCB0cnlSZWNvdmVyeTogdHJ1ZX1cbik7XG5jb25zdCBERUZBVUxUX01BUklPTkVUVEVfUE9SVCA9IDI4Mjg7XG5jb25zdCBQUk9DRVNTX1NQRUNJRklDX09QVElPTl9OQU1FU19NQVAgPSBPYmplY3QuZnJlZXplKHtcbiAgbm9SZXNldDogJ25vUmVzZXQnLFxuICB2ZXJib3NpdHk6ICd2ZXJib3NpdHknLFxuICBhbmRyb2lkU3RvcmFnZTogJ2FuZHJvaWRTdG9yYWdlJyxcbiAgbWFyaW9uZXR0ZVBvcnQ6ICdtYXJpb25ldHRlUG9ydCcsXG4gIHN5c3RlbVBvcnQ6ICdwb3J0Jyxcbn0pO1xuXG5cbmNsYXNzIEdlY2tvUHJveHkgZXh0ZW5kcyBKV1Byb3h5IHtcbiAgYXN5bmMgcHJveHlDb21tYW5kICh1cmwsIG1ldGhvZCwgYm9keSA9IG51bGwpIHtcbiAgICBpZiAodGhpcy5kaWRQcm9jZXNzRXhpdCkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQ29udGV4dEVycm9yKFxuICAgICAgICBgJyR7bWV0aG9kfSAke3VybH0nIGNhbm5vdCBiZSBwcm94aWVkIHRvIEdlY2tvIERyaXZlciBzZXJ2ZXIgYmVjYXVzZSBgICtcbiAgICAgICAgJ2l0cyBwcm9jZXNzIGlzIG5vdCBydW5uaW5nIChwcm9iYWJseSBjcmFzaGVkKS4gQ2hlY2sgdGhlIEFwcGl1bSBsb2cgZm9yIG1vcmUgZGV0YWlscycpO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgc3VwZXIucHJveHlDb21tYW5kKHVybCwgbWV0aG9kLCBib2R5KTtcbiAgfVxufVxuXG5jbGFzcyBHZWNrb0RyaXZlclByb2Nlc3Mge1xuICBjb25zdHJ1Y3RvciAobG9nLCBvcHRzID0ge30pIHtcbiAgICBmb3IgKGNvbnN0IFtvcHROYW1lLCBwcm9wTmFtZV0gb2YgXy50b1BhaXJzKFBST0NFU1NfU1BFQ0lGSUNfT1BUSU9OX05BTUVTX01BUCkpIHtcbiAgICAgIHRoaXNbcHJvcE5hbWVdID0gb3B0c1tvcHROYW1lXTtcbiAgICB9XG4gICAgdGhpcy5sb2cgPSBsb2c7XG4gICAgdGhpcy5wcm9jID0gbnVsbDtcbiAgfVxuXG4gIGdldCBpc1J1bm5pbmcgKCkge1xuICAgIHJldHVybiAhISh0aGlzLnByb2M/LmlzUnVubmluZyk7XG4gIH1cblxuICBhc3luYyBpbml0ICgpIHtcbiAgICBpZiAodGhpcy5pc1J1bm5pbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMucG9ydCkge1xuICAgICAgYXdhaXQgR0VDS09fU0VSVkVSX0dVQVJEKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgW3N0YXJ0UG9ydCwgZW5kUG9ydF0gPSBHRUNLT19QT1JUX1JBTkdFO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMucG9ydCA9IGF3YWl0IGZpbmRBUG9ydE5vdEluVXNlKHN0YXJ0UG9ydCwgZW5kUG9ydCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQ2Fubm90IGZpbmQgYW55IGZyZWUgcG9ydCBpbiByYW5nZSAke3N0YXJ0UG9ydH0uLiR7ZW5kUG9ydH0uIGAgK1xuICAgICAgICAgICAgYERvdWJsZSBjaGVjayB0aGUgcHJvY2Vzc2VzIHRoYXQgYXJlIGxvY2tpbmcgcG9ydHMgd2l0aGluIHRoaXMgcmFuZ2UgYW5kIHRlcm1pbmF0ZSBgICtcbiAgICAgICAgICAgIGB0aGVzZSB3aGljaCBhcmUgbm90IG5lZWRlZCBhbnltb3JlIG9yIHNldCBhbnkgZnJlZSBwb3J0IG51bWJlciB0byB0aGUgJ3N5c3RlbVBvcnQnIGNhcGFiaWxpdHlgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGV0IGRyaXZlckJpbjtcbiAgICB0cnkge1xuICAgICAgZHJpdmVyQmluID0gYXdhaXQgZnMud2hpY2goR0RfQklOQVJZKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7R0RfQklOQVJZfSBiaW5hcnkgY2Fubm90IGJlIGZvdW5kIGluIFBBVEguIGAgK1xuICAgICAgICBgUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBwcmVzZW50IG9uIHlvdXIgc3lzdGVtYCk7XG4gICAgfVxuICAgIGNvbnN0IGFyZ3MgPSBbXTtcbiAgICAvKiAjcmVnaW9uIE9wdGlvbnMgKi9cbiAgICBzd2l0Y2ggKF8udG9Mb3dlcih0aGlzLnZlcmJvc2l0eSkpIHtcbiAgICAgIGNhc2UgVkVSQk9TSVRZLkRFQlVHOlxuICAgICAgICBhcmdzLnB1c2goJy12Jyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBWRVJCT1NJVFkuVFJBQ0U6XG4gICAgICAgIGFyZ3MucHVzaCgnLXZ2Jyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpZiAodGhpcy5ub1Jlc2V0KSB7XG4gICAgICBhcmdzLnB1c2goJy0tY29ubmVjdC1leGlzdGluZycpO1xuICAgICAgLy8gaHR0cHM6Ly9maXJlZm94LXNvdXJjZS1kb2NzLm1vemlsbGEub3JnL3Rlc3RpbmcvZ2Vja29kcml2ZXIvRmxhZ3MuaHRtbCNjb2RlLWNvbm5lY3QtZXhpc3RpbmctY29kZVxuICAgICAgaWYgKF8uaXNOaWwodGhpcy5tYXJpb25ldHRlUG9ydCkpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgJ21hcmlvbmV0dGVQb3J0JyBjYXBhYmlsaXR5IHZhbHVlIGlzIG5vdCBwcm92aWRlZCB3aGlsZSAnbm9SZXNldCcgaXMgZW5hYmxlZGApO1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGBBc3NpZ25pbmcgJ21hcmlvbmV0dGVQb3J0JyB0byB0aGUgZGVmYXVsdCB2YWx1ZSAoJHtERUZBVUxUX01BUklPTkVUVEVfUE9SVH0pYCk7XG4gICAgICB9XG4gICAgICBhcmdzLnB1c2goJy0tbWFyaW9uZXR0ZS1wb3J0JywgdGhpcy5tYXJpb25ldHRlUG9ydCA/PyBERUZBVUxUX01BUklPTkVUVEVfUE9SVCk7XG4gICAgfSBlbHNlIGlmICghXy5pc05pbCh0aGlzLm1hcmlvbmV0dGVQb3J0KSkge1xuICAgICAgYXJncy5wdXNoKCctLW1hcmlvbmV0dGUtcG9ydCcsIHRoaXMubWFyaW9uZXR0ZVBvcnQpO1xuICAgIH1cbiAgICAvKiAjZW5kcmVnaW9uICovXG5cbiAgICBhcmdzLnB1c2goJy1wJywgdGhpcy5wb3J0KTtcbiAgICBpZiAodGhpcy5hbmRyb2lkU3RvcmFnZSkge1xuICAgICAgYXJncy5wdXNoKCctLWFuZHJvaWQtc3RvcmFnZScsIHRoaXMuYW5kcm9pZFN0b3JhZ2UpO1xuICAgIH1cbiAgICB0aGlzLnByb2MgPSBuZXcgU3ViUHJvY2Vzcyhkcml2ZXJCaW4sIGFyZ3MpO1xuICAgIHRoaXMucHJvYy5vbignb3V0cHV0JywgKHN0ZG91dCwgc3RkZXJyKSA9PiB7XG4gICAgICBjb25zdCBsaW5lID0gXy50cmltKHN0ZG91dCB8fCBzdGRlcnIpO1xuICAgICAgaWYgKGxpbmUpIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYFske0dEX0JJTkFSWX1dICR7bGluZX1gKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnByb2Mub24oJ2V4aXQnLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGAke0dEX0JJTkFSWX0gaGFzIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfSwgc2lnbmFsICR7c2lnbmFsfWApO1xuICAgIH0pO1xuICAgIHRoaXMubG9nLmluZm8oYFN0YXJ0aW5nICcke2RyaXZlckJpbn0nIHdpdGggYXJncyAke0pTT04uc3RyaW5naWZ5KGFyZ3MpfWApO1xuICAgIGF3YWl0IHRoaXMucHJvYy5zdGFydCgwKTtcbiAgfVxuXG4gIGFzeW5jIHN0b3AgKCkge1xuICAgIGlmICh0aGlzLmlzUnVubmluZykge1xuICAgICAgYXdhaXQgdGhpcy5wcm9jLnN0b3AoJ1NJR1RFUk0nKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBraWxsICgpIHtcbiAgICBpZiAodGhpcy5pc1J1bm5pbmcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMucHJvYy5zdG9wKCdTSUdLSUxMJyk7XG4gICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IFJVTk5JTkdfUFJPQ0VTU19JRFMgPSBbXTtcbnByb2Nlc3Mub25jZSgnZXhpdCcsICgpID0+IHtcbiAgaWYgKF8uaXNFbXB0eShSVU5OSU5HX1BST0NFU1NfSURTKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGNvbW1hbmQgPSBzeXN0ZW0uaXNXaW5kb3dzKClcbiAgICA/ICgndGFza2tpbGwuZXhlICcgKyBSVU5OSU5HX1BST0NFU1NfSURTLm1hcCgocGlkKSA9PiBgL1BJRCAke3BpZH1gKS5qb2luKCcgJykpXG4gICAgOiBga2lsbCAke1JVTk5JTkdfUFJPQ0VTU19JRFMuam9pbignICcpfWA7XG4gIHRyeSB7XG4gICAgZXhlY1N5bmMoY29tbWFuZCk7XG4gIH0gY2F0Y2ggKGlnbikge31cbn0pO1xuXG5jbGFzcyBHZWNrb0RyaXZlclNlcnZlciB7XG4gIGNvbnN0cnVjdG9yIChsb2csIGNhcHMpIHtcbiAgICB0aGlzLnByb2Nlc3MgPSBuZXcgR2Vja29Ecml2ZXJQcm9jZXNzKGxvZywgY2Fwcyk7XG4gICAgdGhpcy5sb2cgPSBsb2c7XG4gICAgdGhpcy5wcm94eSA9IG51bGw7XG4gIH1cblxuICBnZXQgaXNSdW5uaW5nICgpIHtcbiAgICByZXR1cm4gISEodGhpcy5wcm9jZXNzPy5pc1J1bm5pbmcpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQgKGdlY2tvQ2Fwcykge1xuICAgIGF3YWl0IHRoaXMucHJvY2Vzcy5pbml0KCk7XG5cbiAgICB0aGlzLnByb3h5ID0gbmV3IEdlY2tvUHJveHkoe1xuICAgICAgc2VydmVyOiAnMTI3LjAuMC4xJyxcbiAgICAgIHBvcnQ6IHRoaXMucHJvY2Vzcy5wb3J0LFxuICAgICAgbG9nOiB0aGlzLmxvZyxcbiAgICAgIGJhc2U6ICcnLFxuICAgICAga2VlcEFsaXZlOiB0cnVlLFxuICAgIH0pO1xuICAgIHRoaXMucHJveHkuZGlkUHJvY2Vzc0V4aXQgPSBmYWxzZTtcbiAgICB0aGlzLnByb2Nlc3MucHJvYy5vbignZXhpdCcsICgpID0+IHtcbiAgICAgIHRoaXMucHJveHkuZGlkUHJvY2Vzc0V4aXQgPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMucHJveHkuY29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgaWYgKHRoaXMucHJveHkuZGlkUHJvY2Vzc0V4aXQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnIubWVzc2FnZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICB3YWl0TXM6IFNUQVJUVVBfVElNRU9VVF9NUyxcbiAgICAgICAgaW50ZXJ2YWxNczogMTAwMCxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmICh0aGlzLnByb2Nlc3MuaXNSdW5uaW5nKSB7XG4gICAgICAgIC8vIGF2b2lkIFwiZnJvemVuXCIgcHJvY2Vzc2VzLFxuICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3Mua2lsbCgpO1xuICAgICAgfVxuICAgICAgaWYgKC9Db25kaXRpb24gdW5tZXQvLnRlc3QoZS5tZXNzYWdlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEdlY2tvIERyaXZlciBzZXJ2ZXIgaXMgbm90IGxpc3RlbmluZyB3aXRoaW4gJHtTVEFSVFVQX1RJTUVPVVRfTVN9bXMgdGltZW91dC4gYCArXG4gICAgICAgICAgYE1ha2Ugc3VyZSBpdCBjb3VsZCBiZSBzdGFydGVkIG1hbnVhbGx5IGZyb20gYSB0ZXJtaW5hbGApO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgY29uc3QgcGlkID0gdGhpcy5wcm9jZXNzLnByb2MucGlkO1xuICAgIFJVTk5JTkdfUFJPQ0VTU19JRFMucHVzaChwaWQpO1xuICAgIHRoaXMucHJvY2Vzcy5wcm9jLm9uKCdleGl0JywgKCkgPT4gdm9pZCBfLnB1bGwoUlVOTklOR19QUk9DRVNTX0lEUywgcGlkKSk7XG5cbiAgICBhd2FpdCB0aGlzLnByb3h5LmNvbW1hbmQoJy9zZXNzaW9uJywgJ1BPU1QnLCB7XG4gICAgICBjYXBhYmlsaXRpZXM6IHtcbiAgICAgICAgZmlyc3RNYXRjaDogW3t9XSxcbiAgICAgICAgYWx3YXlzTWF0Y2g6IGdlY2tvQ2FwcyxcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHN0b3AgKCkge1xuICAgIGlmICghdGhpcy5pc1J1bm5pbmcpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYEdlY2tvIERyaXZlciBzZXNzaW9uIGNhbm5vdCBiZSBzdG9wcGVkLCBiZWNhdXNlIHRoZSBzZXJ2ZXIgaXMgbm90IHJ1bm5pbmdgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm94eT8uc2Vzc2lvbklkKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnByb3h5LmNvbW1hbmQoYC9zZXNzaW9uLyR7dGhpcy5wcm94eS5zZXNzaW9uSWR9YCwgJ0RFTEVURScpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGBHZWNrbyBEcml2ZXIgc2Vzc2lvbiBjYW5ub3QgYmUgZGVsZXRlZC4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnByb2Nlc3Muc3RvcCgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oYEdlY2tvIERyaXZlciBwcm9jZXNzIGNhbm5vdCBiZSBzdG9wcGVkICgke2UubWVzc2FnZX0pLiBLaWxsaW5nIGl0IGZvcmNlZnVsbHlgKTtcbiAgICAgIGF3YWl0IHRoaXMucHJvY2Vzcy5raWxsKCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEdlY2tvRHJpdmVyU2VydmVyO1xuIl0sImZpbGUiOiJsaWIvZ2Vja28uanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
@@ -7,12 +7,12 @@ exports.default = void 0;
7
7
 
8
8
  require("source-map-support/register");
9
9
 
10
- var _appiumSupport = require("appium-support");
10
+ var _support = require("@appium/support");
11
11
 
12
- const log = _appiumSupport.logger.getLogger('GeckoDriver');
12
+ const log = _support.logger.getLogger('GeckoDriver');
13
13
 
14
14
  var _default = log;
15
15
  exports.default = _default;require('source-map-support').install();
16
16
 
17
17
 
18
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9sb2dnZXIuanMiXSwibmFtZXMiOlsibG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFFQSxNQUFNQSxHQUFHLEdBQUdDLHNCQUFPQyxTQUFQLENBQWlCLGFBQWpCLENBQVo7O2VBRWVGLEciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBsb2dnZXIgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5cbmNvbnN0IGxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ0dlY2tvRHJpdmVyJyk7XG5cbmV4cG9ydCBkZWZhdWx0IGxvZztcbiJdLCJmaWxlIjoibGliL2xvZ2dlci5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
18
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9sb2dnZXIuanMiXSwibmFtZXMiOlsibG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFFQSxNQUFNQSxHQUFHLEdBQUdDLGdCQUFPQyxTQUFQLENBQWlCLGFBQWpCLENBQVo7O2VBRWVGLEciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBsb2dnZXIgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuXG5jb25zdCBsb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdHZWNrb0RyaXZlcicpO1xuXG5leHBvcnQgZGVmYXVsdCBsb2c7XG4iXSwiZmlsZSI6ImxpYi9sb2dnZXIuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
@@ -11,7 +11,7 @@ require("source-map-support/register");
11
11
 
12
12
  var _logger = _interopRequireDefault(require("./logger"));
13
13
 
14
- var _appiumBaseDriver = require("appium-base-driver");
14
+ var _baseDriver = require("@appium/base-driver");
15
15
 
16
16
  var _driver = _interopRequireDefault(require("./driver"));
17
17
 
@@ -20,8 +20,8 @@ async function startServer(port, address) {
20
20
  port,
21
21
  address
22
22
  });
23
- let routeConfiguringFunction = (0, _appiumBaseDriver.routeConfiguringFunction)(d);
24
- let server = await (0, _appiumBaseDriver.server)({
23
+ let routeConfiguringFunction = (0, _baseDriver.routeConfiguringFunction)(d);
24
+ let server = await (0, _baseDriver.server)({
25
25
  routeConfiguringFunction,
26
26
  port,
27
27
  hostname: address
@@ -33,4 +33,4 @@ async function startServer(port, address) {
33
33
  }require('source-map-support').install();
34
34
 
35
35
 
36
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zZXJ2ZXIuanMiXSwibmFtZXMiOlsic3RhcnRTZXJ2ZXIiLCJwb3J0IiwiYWRkcmVzcyIsImQiLCJHZWNrb0RyaXZlciIsInJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiIsInNlcnZlciIsImhvc3RuYW1lIiwibG9nIiwiaW5mbyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFFQSxlQUFlQSxXQUFmLENBQTRCQyxJQUE1QixFQUFrQ0MsT0FBbEMsRUFBMkM7QUFDekMsTUFBSUMsQ0FBQyxHQUFHLElBQUlDLGVBQUosQ0FBZ0I7QUFBQ0gsSUFBQUEsSUFBRDtBQUFPQyxJQUFBQTtBQUFQLEdBQWhCLENBQVI7QUFDQSxNQUFJRyx3QkFBd0IsR0FBRyxnREFBV0YsQ0FBWCxDQUEvQjtBQUNBLE1BQUlHLE1BQU0sR0FBRyxNQUFNLDhCQUFXO0FBQUNELElBQUFBLHdCQUFEO0FBQTJCSixJQUFBQSxJQUEzQjtBQUFpQ00sSUFBQUEsUUFBUSxFQUFFTDtBQUEzQyxHQUFYLENBQW5COztBQUNBTSxrQkFBSUMsSUFBSixDQUFVLDJDQUEwQ1AsT0FBUSxJQUFHRCxJQUFLLEVBQXBFOztBQUNBLFNBQU9LLE1BQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgc2VydmVyIGFzIGJhc2VTZXJ2ZXIsIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiBhcyBtYWtlUm91dGVyIH0gZnJvbSAnYXBwaXVtLWJhc2UtZHJpdmVyJztcbmltcG9ydCBHZWNrb0RyaXZlciBmcm9tICcuL2RyaXZlcic7XG5cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0U2VydmVyIChwb3J0LCBhZGRyZXNzKSB7XG4gIGxldCBkID0gbmV3IEdlY2tvRHJpdmVyKHtwb3J0LCBhZGRyZXNzfSk7XG4gIGxldCByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24gPSBtYWtlUm91dGVyKGQpO1xuICBsZXQgc2VydmVyID0gYXdhaXQgYmFzZVNlcnZlcih7cm91dGVDb25maWd1cmluZ0Z1bmN0aW9uLCBwb3J0LCBob3N0bmFtZTogYWRkcmVzc30pO1xuICBsb2cuaW5mbyhgR2Vja28gRHJpdmVyIHNlcnZlciBsaXN0ZW5pbmcgb24gaHR0cDovLyR7YWRkcmVzc306JHtwb3J0fWApO1xuICByZXR1cm4gc2VydmVyO1xufVxuXG5leHBvcnQgeyBzdGFydFNlcnZlciB9O1xuIl0sImZpbGUiOiJsaWIvc2VydmVyLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
36
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zZXJ2ZXIuanMiXSwibmFtZXMiOlsic3RhcnRTZXJ2ZXIiLCJwb3J0IiwiYWRkcmVzcyIsImQiLCJHZWNrb0RyaXZlciIsInJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiIsInNlcnZlciIsImhvc3RuYW1lIiwibG9nIiwiaW5mbyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFHQTs7QUFFQSxlQUFlQSxXQUFmLENBQTRCQyxJQUE1QixFQUFrQ0MsT0FBbEMsRUFBMkM7QUFDekMsTUFBSUMsQ0FBQyxHQUFHLElBQUlDLGVBQUosQ0FBZ0I7QUFBQ0gsSUFBQUEsSUFBRDtBQUFPQyxJQUFBQTtBQUFQLEdBQWhCLENBQVI7QUFDQSxNQUFJRyx3QkFBd0IsR0FBRywwQ0FBV0YsQ0FBWCxDQUEvQjtBQUNBLE1BQUlHLE1BQU0sR0FBRyxNQUFNLHdCQUFXO0FBQUNELElBQUFBLHdCQUFEO0FBQTJCSixJQUFBQSxJQUEzQjtBQUFpQ00sSUFBQUEsUUFBUSxFQUFFTDtBQUEzQyxHQUFYLENBQW5COztBQUNBTSxrQkFBSUMsSUFBSixDQUFVLDJDQUEwQ1AsT0FBUSxJQUFHRCxJQUFLLEVBQXBFOztBQUNBLFNBQU9LLE1BQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHtcbiAgc2VydmVyIGFzIGJhc2VTZXJ2ZXIsIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiBhcyBtYWtlUm91dGVyXG59IGZyb20gJ0BhcHBpdW0vYmFzZS1kcml2ZXInO1xuaW1wb3J0IEdlY2tvRHJpdmVyIGZyb20gJy4vZHJpdmVyJztcblxuYXN5bmMgZnVuY3Rpb24gc3RhcnRTZXJ2ZXIgKHBvcnQsIGFkZHJlc3MpIHtcbiAgbGV0IGQgPSBuZXcgR2Vja29Ecml2ZXIoe3BvcnQsIGFkZHJlc3N9KTtcbiAgbGV0IHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiA9IG1ha2VSb3V0ZXIoZCk7XG4gIGxldCBzZXJ2ZXIgPSBhd2FpdCBiYXNlU2VydmVyKHtyb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24sIHBvcnQsIGhvc3RuYW1lOiBhZGRyZXNzfSk7XG4gIGxvZy5pbmZvKGBHZWNrbyBEcml2ZXIgc2VydmVyIGxpc3RlbmluZyBvbiBodHRwOi8vJHthZGRyZXNzfToke3BvcnR9YCk7XG4gIHJldHVybiBzZXJ2ZXI7XG59XG5cbmV4cG9ydCB7IHN0YXJ0U2VydmVyIH07XG4iXSwiZmlsZSI6ImxpYi9zZXJ2ZXIuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
 
5
5
  require("source-map-support/register");
6
6
 
7
- var _wd = _interopRequireDefault(require("wd"));
7
+ var _webdriverio = require("webdriverio");
8
8
 
9
9
  var _ = require("../..");
10
10
 
@@ -36,21 +36,24 @@ describe('Desktop Gecko Driver', function () {
36
36
  }
37
37
  });
38
38
  beforeEach(async function () {
39
- driver = _wd.default.promiseChainRemote(_utils.HOST, _utils.PORT);
40
- await driver.init(CAPS);
39
+ driver = await (0, _webdriverio.remote)({
40
+ hostname: _utils.HOST,
41
+ port: _utils.PORT,
42
+ capabilities: CAPS
43
+ });
41
44
  });
42
45
  afterEach(async function () {
43
46
  if (driver) {
44
- await driver.quit();
47
+ await driver.deleteSession();
45
48
  driver = null;
46
49
  }
47
50
  });
48
51
  it('should start and stop a session', async function () {
49
- await driver.get('https://appium.io/');
50
- const button = await driver.elementByCss('#downloadLink');
51
- await button.text().should.eventually.eql('Download Appium');
52
+ await driver.url('https://appium.io/');
53
+ const button = await driver.$('#downloadLink');
54
+ await button.getText().should.eventually.eql('Download Appium');
52
55
  });
53
56
  });require('source-map-support').install();
54
57
 
55
58
 
56
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvZnVuY3Rpb25hbC9kZXNrdG9wLWRyaXZlci1lMmUtc3BlY3MuanMiXSwibmFtZXMiOlsiY2hhaSIsInNob3VsZCIsInVzZSIsImNoYWlBc1Byb21pc2VkIiwiQ0FQUyIsImJyb3dzZXJOYW1lIiwicGxhdGZvcm1OYW1lIiwiZGVzY3JpYmUiLCJ0aW1lb3V0IiwiTU9DSEFfVElNRU9VVCIsInNlcnZlciIsImRyaXZlciIsImJlZm9yZSIsIlBPUlQiLCJIT1NUIiwiYWZ0ZXIiLCJjbG9zZSIsImJlZm9yZUVhY2giLCJ3ZCIsInByb21pc2VDaGFpblJlbW90ZSIsImluaXQiLCJhZnRlckVhY2giLCJxdWl0IiwiaXQiLCJnZXQiLCJidXR0b24iLCJlbGVtZW50QnlDc3MiLCJ0ZXh0IiwiZXZlbnR1YWxseSIsImVxbCJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUFBLGNBQUtDLE1BQUw7O0FBQ0FELGNBQUtFLEdBQUwsQ0FBU0MsdUJBQVQ7O0FBRUEsTUFBTUMsSUFBSSxHQUFHO0FBQ1hDLEVBQUFBLFdBQVcsRUFBRSxnQkFERjtBQUVYQyxFQUFBQSxZQUFZLEVBQUU7QUFGSCxDQUFiO0FBS0FDLFFBQVEsQ0FBQyxzQkFBRCxFQUF5QixZQUFZO0FBQzNDLE9BQUtDLE9BQUwsQ0FBYUMsb0JBQWI7QUFFQSxNQUFJQyxNQUFKO0FBQ0EsTUFBSUMsTUFBSjtBQUNBQyxFQUFBQSxNQUFNLENBQUMsa0JBQWtCO0FBQ3ZCRixJQUFBQSxNQUFNLEdBQUcsTUFBTSxtQkFBWUcsV0FBWixFQUFrQkMsV0FBbEIsQ0FBZjtBQUNELEdBRkssQ0FBTjtBQUdBQyxFQUFBQSxLQUFLLENBQUMsa0JBQWtCO0FBQ3RCLFFBQUlMLE1BQUosRUFBWTtBQUNWLFlBQU1BLE1BQU0sQ0FBQ00sS0FBUCxFQUFOO0FBQ0FOLE1BQUFBLE1BQU0sR0FBRyxJQUFUO0FBQ0Q7QUFDRixHQUxJLENBQUw7QUFNQU8sRUFBQUEsVUFBVSxDQUFDLGtCQUFrQjtBQUMzQk4sSUFBQUEsTUFBTSxHQUFHTyxZQUFHQyxrQkFBSCxDQUFzQkwsV0FBdEIsRUFBNEJELFdBQTVCLENBQVQ7QUFDQSxVQUFNRixNQUFNLENBQUNTLElBQVAsQ0FBWWhCLElBQVosQ0FBTjtBQUNELEdBSFMsQ0FBVjtBQUlBaUIsRUFBQUEsU0FBUyxDQUFDLGtCQUFrQjtBQUMxQixRQUFJVixNQUFKLEVBQVk7QUFDVixZQUFNQSxNQUFNLENBQUNXLElBQVAsRUFBTjtBQUNBWCxNQUFBQSxNQUFNLEdBQUcsSUFBVDtBQUNEO0FBQ0YsR0FMUSxDQUFUO0FBT0FZLEVBQUFBLEVBQUUsQ0FBQyxpQ0FBRCxFQUFvQyxrQkFBa0I7QUFDdEQsVUFBTVosTUFBTSxDQUFDYSxHQUFQLENBQVcsb0JBQVgsQ0FBTjtBQUNBLFVBQU1DLE1BQU0sR0FBRyxNQUFNZCxNQUFNLENBQUNlLFlBQVAsQ0FBb0IsZUFBcEIsQ0FBckI7QUFDQSxVQUFNRCxNQUFNLENBQUNFLElBQVAsR0FBYzFCLE1BQWQsQ0FBcUIyQixVQUFyQixDQUFnQ0MsR0FBaEMsQ0FBb0MsaUJBQXBDLENBQU47QUFDRCxHQUpDLENBQUY7QUFLRCxDQTlCTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHdkIGZyb20gJ3dkJztcbmltcG9ydCB7IHN0YXJ0U2VydmVyIH0gZnJvbSAnLi4vLi4nO1xuaW1wb3J0IGNoYWlBc1Byb21pc2VkIGZyb20gJ2NoYWktYXMtcHJvbWlzZWQnO1xuaW1wb3J0IGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQgeyBIT1NULCBQT1JULCBNT0NIQV9USU1FT1VUIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5jaGFpLnNob3VsZCgpO1xuY2hhaS51c2UoY2hhaUFzUHJvbWlzZWQpO1xuXG5jb25zdCBDQVBTID0ge1xuICBicm93c2VyTmFtZTogJ01vemlsbGFGaXJlZm94JyxcbiAgcGxhdGZvcm1OYW1lOiAnbGludXgnLFxufTtcblxuZGVzY3JpYmUoJ0Rlc2t0b3AgR2Vja28gRHJpdmVyJywgZnVuY3Rpb24gKCkge1xuICB0aGlzLnRpbWVvdXQoTU9DSEFfVElNRU9VVCk7XG5cbiAgbGV0IHNlcnZlcjtcbiAgbGV0IGRyaXZlcjtcbiAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBzZXJ2ZXIgPSBhd2FpdCBzdGFydFNlcnZlcihQT1JULCBIT1NUKTtcbiAgfSk7XG4gIGFmdGVyKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc2VydmVyKSB7XG4gICAgICBhd2FpdCBzZXJ2ZXIuY2xvc2UoKTtcbiAgICAgIHNlcnZlciA9IG51bGw7XG4gICAgfVxuICB9KTtcbiAgYmVmb3JlRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgZHJpdmVyID0gd2QucHJvbWlzZUNoYWluUmVtb3RlKEhPU1QsIFBPUlQpO1xuICAgIGF3YWl0IGRyaXZlci5pbml0KENBUFMpO1xuICB9KTtcbiAgYWZ0ZXJFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZHJpdmVyKSB7XG4gICAgICBhd2FpdCBkcml2ZXIucXVpdCgpO1xuICAgICAgZHJpdmVyID0gbnVsbDtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgc3RhcnQgYW5kIHN0b3AgYSBzZXNzaW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGF3YWl0IGRyaXZlci5nZXQoJ2h0dHBzOi8vYXBwaXVtLmlvLycpO1xuICAgIGNvbnN0IGJ1dHRvbiA9IGF3YWl0IGRyaXZlci5lbGVtZW50QnlDc3MoJyNkb3dubG9hZExpbmsnKTtcbiAgICBhd2FpdCBidXR0b24udGV4dCgpLnNob3VsZC5ldmVudHVhbGx5LmVxbCgnRG93bmxvYWQgQXBwaXVtJyk7XG4gIH0pO1xufSk7XG5cblxuIl0sImZpbGUiOiJ0ZXN0L2Z1bmN0aW9uYWwvZGVza3RvcC1kcml2ZXItZTJlLXNwZWNzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
59
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvZnVuY3Rpb25hbC9kZXNrdG9wLWRyaXZlci1lMmUtc3BlY3MuanMiXSwibmFtZXMiOlsiY2hhaSIsInNob3VsZCIsInVzZSIsImNoYWlBc1Byb21pc2VkIiwiQ0FQUyIsImJyb3dzZXJOYW1lIiwicGxhdGZvcm1OYW1lIiwiZGVzY3JpYmUiLCJ0aW1lb3V0IiwiTU9DSEFfVElNRU9VVCIsInNlcnZlciIsImRyaXZlciIsImJlZm9yZSIsIlBPUlQiLCJIT1NUIiwiYWZ0ZXIiLCJjbG9zZSIsImJlZm9yZUVhY2giLCJob3N0bmFtZSIsInBvcnQiLCJjYXBhYmlsaXRpZXMiLCJhZnRlckVhY2giLCJkZWxldGVTZXNzaW9uIiwiaXQiLCJ1cmwiLCJidXR0b24iLCIkIiwiZ2V0VGV4dCIsImV2ZW50dWFsbHkiLCJlcWwiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBQSxjQUFLQyxNQUFMOztBQUNBRCxjQUFLRSxHQUFMLENBQVNDLHVCQUFUOztBQUVBLE1BQU1DLElBQUksR0FBRztBQUNYQyxFQUFBQSxXQUFXLEVBQUUsZ0JBREY7QUFFWEMsRUFBQUEsWUFBWSxFQUFFO0FBRkgsQ0FBYjtBQUtBQyxRQUFRLENBQUMsc0JBQUQsRUFBeUIsWUFBWTtBQUMzQyxPQUFLQyxPQUFMLENBQWFDLG9CQUFiO0FBRUEsTUFBSUMsTUFBSjtBQUNBLE1BQUlDLE1BQUo7QUFDQUMsRUFBQUEsTUFBTSxDQUFDLGtCQUFrQjtBQUN2QkYsSUFBQUEsTUFBTSxHQUFHLE1BQU0sbUJBQVlHLFdBQVosRUFBa0JDLFdBQWxCLENBQWY7QUFDRCxHQUZLLENBQU47QUFHQUMsRUFBQUEsS0FBSyxDQUFDLGtCQUFrQjtBQUN0QixRQUFJTCxNQUFKLEVBQVk7QUFDVixZQUFNQSxNQUFNLENBQUNNLEtBQVAsRUFBTjtBQUNBTixNQUFBQSxNQUFNLEdBQUcsSUFBVDtBQUNEO0FBQ0YsR0FMSSxDQUFMO0FBTUFPLEVBQUFBLFVBQVUsQ0FBQyxrQkFBa0I7QUFDM0JOLElBQUFBLE1BQU0sR0FBRyxNQUFNLHlCQUFPO0FBQ3BCTyxNQUFBQSxRQUFRLEVBQUVKLFdBRFU7QUFFcEJLLE1BQUFBLElBQUksRUFBRU4sV0FGYztBQUdwQk8sTUFBQUEsWUFBWSxFQUFFaEI7QUFITSxLQUFQLENBQWY7QUFLRCxHQU5TLENBQVY7QUFPQWlCLEVBQUFBLFNBQVMsQ0FBQyxrQkFBa0I7QUFDMUIsUUFBSVYsTUFBSixFQUFZO0FBQ1YsWUFBTUEsTUFBTSxDQUFDVyxhQUFQLEVBQU47QUFDQVgsTUFBQUEsTUFBTSxHQUFHLElBQVQ7QUFDRDtBQUNGLEdBTFEsQ0FBVDtBQU9BWSxFQUFBQSxFQUFFLENBQUMsaUNBQUQsRUFBb0Msa0JBQWtCO0FBQ3RELFVBQU1aLE1BQU0sQ0FBQ2EsR0FBUCxDQUFXLG9CQUFYLENBQU47QUFDQSxVQUFNQyxNQUFNLEdBQUcsTUFBTWQsTUFBTSxDQUFDZSxDQUFQLENBQVMsZUFBVCxDQUFyQjtBQUNBLFVBQU1ELE1BQU0sQ0FBQ0UsT0FBUCxHQUFpQjFCLE1BQWpCLENBQXdCMkIsVUFBeEIsQ0FBbUNDLEdBQW5DLENBQXVDLGlCQUF2QyxDQUFOO0FBQ0QsR0FKQyxDQUFGO0FBS0QsQ0FqQ08sQ0FBUiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbW90ZSB9IGZyb20gJ3dlYmRyaXZlcmlvJztcbmltcG9ydCB7IHN0YXJ0U2VydmVyIH0gZnJvbSAnLi4vLi4nO1xuaW1wb3J0IGNoYWlBc1Byb21pc2VkIGZyb20gJ2NoYWktYXMtcHJvbWlzZWQnO1xuaW1wb3J0IGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQgeyBIT1NULCBQT1JULCBNT0NIQV9USU1FT1VUIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5jaGFpLnNob3VsZCgpO1xuY2hhaS51c2UoY2hhaUFzUHJvbWlzZWQpO1xuXG5jb25zdCBDQVBTID0ge1xuICBicm93c2VyTmFtZTogJ01vemlsbGFGaXJlZm94JyxcbiAgcGxhdGZvcm1OYW1lOiAnbGludXgnLFxufTtcblxuZGVzY3JpYmUoJ0Rlc2t0b3AgR2Vja28gRHJpdmVyJywgZnVuY3Rpb24gKCkge1xuICB0aGlzLnRpbWVvdXQoTU9DSEFfVElNRU9VVCk7XG5cbiAgbGV0IHNlcnZlcjtcbiAgbGV0IGRyaXZlcjtcbiAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBzZXJ2ZXIgPSBhd2FpdCBzdGFydFNlcnZlcihQT1JULCBIT1NUKTtcbiAgfSk7XG4gIGFmdGVyKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc2VydmVyKSB7XG4gICAgICBhd2FpdCBzZXJ2ZXIuY2xvc2UoKTtcbiAgICAgIHNlcnZlciA9IG51bGw7XG4gICAgfVxuICB9KTtcbiAgYmVmb3JlRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgZHJpdmVyID0gYXdhaXQgcmVtb3RlKHtcbiAgICAgIGhvc3RuYW1lOiBIT1NULFxuICAgICAgcG9ydDogUE9SVCxcbiAgICAgIGNhcGFiaWxpdGllczogQ0FQUyxcbiAgICB9KTtcbiAgfSk7XG4gIGFmdGVyRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGRyaXZlcikge1xuICAgICAgYXdhaXQgZHJpdmVyLmRlbGV0ZVNlc3Npb24oKTtcbiAgICAgIGRyaXZlciA9IG51bGw7XG4gICAgfVxuICB9KTtcblxuICBpdCgnc2hvdWxkIHN0YXJ0IGFuZCBzdG9wIGEgc2Vzc2lvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBhd2FpdCBkcml2ZXIudXJsKCdodHRwczovL2FwcGl1bS5pby8nKTtcbiAgICBjb25zdCBidXR0b24gPSBhd2FpdCBkcml2ZXIuJCgnI2Rvd25sb2FkTGluaycpO1xuICAgIGF3YWl0IGJ1dHRvbi5nZXRUZXh0KCkuc2hvdWxkLmV2ZW50dWFsbHkuZXFsKCdEb3dubG9hZCBBcHBpdW0nKTtcbiAgfSk7XG59KTtcblxuXG4iXSwiZmlsZSI6InRlc3QvZnVuY3Rpb25hbC9kZXNrdG9wLWRyaXZlci1lMmUtc3BlY3MuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==