appium-safari-driver 3.3.3 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/unit-test.yml +1 -1
- package/CHANGELOG.md +14 -0
- package/README.md +2 -2
- package/build/lib/commands/index.js +1 -1
- package/build/lib/commands/index.js.map +1 -1
- package/build/lib/commands/record-screen.js +1 -1
- package/build/lib/commands/record-screen.js.map +1 -1
- package/build/lib/desired-caps.js +4 -1
- package/build/lib/desired-caps.js.map +1 -1
- package/build/lib/driver.js +1 -1
- package/build/lib/driver.js.map +1 -1
- package/build/lib/safari.js +1 -1
- package/build/lib/safari.js.map +1 -1
- package/build/lib/utils.js +4 -1
- package/build/lib/utils.js.map +1 -1
- package/lib/desired-caps.js +3 -0
- package/lib/utils.js +3 -0
- package/npm-shrinkwrap.json +875 -1125
- package/package.json +2 -2
- package/test/unit/utils-specs.js +3 -1
|
@@ -13,7 +13,7 @@ jobs:
|
|
|
13
13
|
id: generate-matrix
|
|
14
14
|
run: |
|
|
15
15
|
sudo apt-get install -y lynx
|
|
16
|
-
lynx -dump https://endoflife.date/nodejs | grep -E -o '[0-9]+
|
|
16
|
+
lynx -dump https://endoflife.date/nodejs | grep -E -o '[0-9]+[( a-zA-Z]+LTS\)' | grep -E -o '([0-9]+)' > eol.list
|
|
17
17
|
cat eol.list
|
|
18
18
|
lts1=$(cat eol.list | head -1)
|
|
19
19
|
lts2=$(cat eol.list | head -2 | tail -1)
|
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
## [3.4.0](https://github.com/appium/appium-safari-driver/compare/v3.3.4...v3.4.0) (2023-07-14)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* add acceptInsecureCerts as safaridriver 15.4+ have it ([#63](https://github.com/appium/appium-safari-driver/issues/63)) ([0bf746a](https://github.com/appium/appium-safari-driver/commit/0bf746a3455c61313aeca0a75e9ee0877bc1661b))
|
|
7
|
+
|
|
8
|
+
## [3.3.4](https://github.com/appium/appium-safari-driver/compare/v3.3.3...v3.3.4) (2023-07-14)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Miscellaneous Chores
|
|
12
|
+
|
|
13
|
+
* **deps-dev:** bump conventional-changelog-conventionalcommits ([#59](https://github.com/appium/appium-safari-driver/issues/59)) ([911cbd4](https://github.com/appium/appium-safari-driver/commit/911cbd4d200a5dcce7eac2fd893050874f889414))
|
|
14
|
+
|
|
1
15
|
## [3.3.3](https://github.com/appium/appium-safari-driver/compare/v3.3.2...v3.3.3) (2023-04-10)
|
|
2
16
|
|
|
3
17
|
|
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@ Under the hood this driver is a wrapper/proxy over Apple's `safaridriver` binary
|
|
|
12
12
|
|
|
13
13
|
> **Note**
|
|
14
14
|
>
|
|
15
|
-
> Since version 3.0.0 Safari driver has dropped the support of Appium 1, and is only compatible to Appium 2. Use the `appium driver install safari`
|
|
15
|
+
> Since version 3.0.0 Safari driver has dropped the support of Appium 1, and is only compatible to Appium 2. Use the `appium driver install safari`
|
|
16
16
|
> command to add it to your Appium 2 dist.
|
|
17
17
|
|
|
18
18
|
|
|
@@ -34,6 +34,7 @@ platformName | safaridriver binary can only create WebDriver sessions for deskto
|
|
|
34
34
|
automationName | Value of automationName must equal to 'Safari' in order to start Safari driver session. Values of automationName are compared case-insensitively.
|
|
35
35
|
browserName | safaridriver can only create WebDriver sessions for Safari. Any value passed to this capability will be changed to 'Safari'.
|
|
36
36
|
browserVersion | safaridriver will only create a session using hosts whose Safari version matches the value of browserVersion. Browser version numbers are prefix-matched. For example, if the value of browserVersion is '12', this will allow hosts with a Safari version of '12.0.1' or '12.1'.
|
|
37
|
+
acceptInsecureCerts | Makes the browser to ignore the appropriate security warning and thus allows navigation to web sites having invalid or expired TLS certificates. The capability is supported since safaridriver v15.4.
|
|
37
38
|
safari:platformVersion | safaridriver will only create a session using hosts whose OS version matches the value of safari:platformVersion. OS version numbers are prefix-matched. For example, if the value of safari:platformVersion is '12', this will allow hosts with an OS version of '12.0' or '12.1' but not '10.12'.
|
|
38
39
|
safari:platformBuildVersion | safaridriver will only create a session using hosts whose OS build version matches the value of safari:platformBuildVersion. example of a macOS build version is '18E193'. On macOS, the OS build version can be determined by running the sw_vers(1) utility.
|
|
39
40
|
safari:useSimulator | If the value of safari:useSimulator is true, safaridriver will only use iOS Simulator hosts. If the value of safari:useSimulator is false, safaridriver will not use iOS Simulator hosts. NOTE: An Xcode installation is required in order to run WebDriver tests on iOS Simulator hosts.
|
|
@@ -153,4 +154,3 @@ npm install
|
|
|
153
154
|
npm run lint
|
|
154
155
|
npm run test
|
|
155
156
|
```
|
|
156
|
-
|
|
@@ -14,4 +14,4 @@ exports.commands = commands;
|
|
|
14
14
|
Object.assign(commands, _find.default, _cookies.default, _recordScreen.default);
|
|
15
15
|
var _default = commands;
|
|
16
16
|
exports.default = _default;
|
|
17
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZmluZCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2Nvb2tpZXMiLCJfcmVjb3JkU2NyZWVuIiwiY29tbWFuZHMiLCJleHBvcnRzIiwiT2JqZWN0IiwiYXNzaWduIiwiZmluZENtZHMiLCJjb29raWVDbWRzIiwicmVjb3JkU2NyZWVuQ29tbWFuZHMiLCJfZGVmYXVsdCIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZpbmRDbWRzIGZyb20gJy4vZmluZCc7XG5pbXBvcnQgY29va2llQ21kcyBmcm9tICcuL2Nvb2tpZXMnO1xuaW1wb3J0IHJlY29yZFNjcmVlbkNvbW1hbmRzIGZyb20gJy4vcmVjb3JkLXNjcmVlbic7XG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5PYmplY3QuYXNzaWduKFxuICBjb21tYW5kcyxcbiAgZmluZENtZHMsXG4gIGNvb2tpZUNtZHMsXG4gIHJlY29yZFNjcmVlbkNvbW1hbmRzLFxuICAvLyBhZGQgb3RoZXIgY29tbWFuZCB0eXBlcyBoZXJlXG4pO1xuXG5leHBvcnQgeyBjb21tYW5kcyB9O1xuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsS0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsUUFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsYUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBRUEsTUFBTUcsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUFDQyxPQUFBLENBQUFELFFBQUEsR0FBQUEsUUFBQTtBQUNwQkUsTUFBTSxDQUFDQyxNQUFNLENBQ1hILFFBQVEsRUFDUkksYUFBUSxFQUNSQyxnQkFBVSxFQUNWQyxxQkFFRixDQUFDO0FBQUMsSUFBQUMsUUFBQSxHQUdhUCxRQUFRO0FBQUFDLE9BQUEsQ0FBQU8sT0FBQSxHQUFBRCxRQUFBIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_find","_interopRequireDefault","require","_cookies","_recordScreen","commands","exports","Object","assign","findCmds","cookieCmds","recordScreenCommands","_default","default"],"sources":["../../../lib/commands/index.js"],"sourcesContent":["import findCmds from './find';\nimport cookieCmds from './cookies';\nimport recordScreenCommands from './record-screen';\n\nconst commands = {};\nObject.assign(\n commands,\n findCmds,\n cookieCmds,\n recordScreenCommands,\n // add other command types here\n);\n\nexport { commands };\nexport default commands;\n"],"mappings":";;;;;;;;AAAA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,aAAA,GAAAH,sBAAA,CAAAC,OAAA;AAEA,MAAMG,QAAQ,GAAG,CAAC,CAAC;AAACC,OAAA,CAAAD,QAAA,GAAAA,QAAA;AACpBE,MAAM,CAACC,MAAM,CACXH,QAAQ,EACRI,aAAQ,EACRC,gBAAU,EACVC,
|
|
1
|
+
{"version":3,"file":"index.js","names":["_find","_interopRequireDefault","require","_cookies","_recordScreen","commands","exports","Object","assign","findCmds","cookieCmds","recordScreenCommands","_default","default"],"sources":["../../../lib/commands/index.js"],"sourcesContent":["import findCmds from './find';\nimport cookieCmds from './cookies';\nimport recordScreenCommands from './record-screen';\n\nconst commands = {};\nObject.assign(\n commands,\n findCmds,\n cookieCmds,\n recordScreenCommands,\n // add other command types here\n);\n\nexport { commands };\nexport default commands;\n"],"mappings":";;;;;;;;AAAA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,aAAA,GAAAH,sBAAA,CAAAC,OAAA;AAEA,MAAMG,QAAQ,GAAG,CAAC,CAAC;AAACC,OAAA,CAAAD,QAAA,GAAAA,QAAA;AACpBE,MAAM,CAACC,MAAM,CACXH,QAAQ,EACRI,aAAQ,EACRC,gBAAU,EACVC,qBAEF,CAAC;AAAC,IAAAC,QAAA,GAGaP,QAAQ;AAAAC,OAAA,CAAAO,OAAA,GAAAD,QAAA"}
|
|
@@ -252,4 +252,4 @@ commands.stopRecordingScreen = async function stopRecordingScreen(options = {})
|
|
|
252
252
|
};
|
|
253
253
|
var _default = commands;
|
|
254
254
|
exports.default = _default;
|
|
255
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfc3VwcG9ydCIsIl9hc3luY2JveCIsIl9ub2RlU2ltY3RsIiwiY29tbWFuZHMiLCJTVEFSVFVQX0lOVEVSVkFMX01TIiwiU1RBUlRVUF9USU1FT1VUX01TIiwiREVGQVVMVF9USU1FX0xJTUlUX01TIiwiUFJPQ0VTU19TSFVURE9XTl9USU1FT1VUX01TIiwiREVGQVVMVF9FWFQiLCJ1cGxvYWRSZWNvcmRlZE1lZGlhIiwibG9jYWxGaWxlIiwicmVtb3RlUGF0aCIsInVwbG9hZE9wdGlvbnMiLCJfIiwiaXNFbXB0eSIsInV0aWwiLCJ0b0luTWVtb3J5QmFzZTY0IiwidG9TdHJpbmciLCJ1c2VyIiwicGFzcyIsIm1ldGhvZCIsImhlYWRlcnMiLCJmaWxlRmllbGROYW1lIiwiZm9ybUZpZWxkcyIsIm9wdGlvbnMiLCJhdXRoIiwibmV0IiwidXBsb2FkRmlsZSIsIlZJREVPX0ZJTEVTIiwiU2V0IiwicHJvY2VzcyIsIm9uIiwidmlkZW9GaWxlIiwiZnMiLCJyaW1yYWZTeW5jIiwiaWduIiwiU2NyZWVuUmVjb3JkZXIiLCJjb25zdHJ1Y3RvciIsInVkaWQiLCJ2aWRlb1BhdGgiLCJsb2ciLCJvcHRzIiwiX3Byb2Nlc3MiLCJfdWRpZCIsIl92aWRlb1BhdGgiLCJfY29kZWMiLCJjb2RlYyIsIl9kaXNwbGF5IiwiZGlzcGxheSIsIl9tYXNrIiwibWFzayIsIl90aW1lTGltaXRNcyIsInRpbWVMaW1pdCIsIl90aW1lciIsImdldFZpZGVvUGF0aCIsImV4aXN0cyIsImFkZCIsImlzUnVubmluZyIsIl90aGlzJF9wcm9jZXNzIiwiX2VuZm9yY2VUZXJtaW5hdGlvbiIsImRlYnVnIiwic3RvcCIsInJpbXJhZiIsImRlbGV0ZSIsInN0YXJ0IiwiYXJncyIsInB1c2giLCJTaW1jdGwiLCJleGVjIiwiYXN5bmNocm9ub3VzIiwicXVvdGUiLCJzdGRvdXQiLCJzdGRlcnIiLCJsaW5lIiwidHJpbSIsInN1YnN0cmluZyIsIm9uY2UiLCJjb2RlIiwic2lnbmFsIiwid2FybiIsIndhaXRGb3JDb25kaXRpb24iLCJFcnJvciIsIndhaXRNcyIsImludGVydmFsTXMiLCJlIiwiZXJyb3JBbmRUaHJvdyIsInNldFRpbWVvdXQiLCJlcnJvciIsImluZm8iLCJmb3JjZSIsImNsZWFyVGltZW91dCIsImV4dHJhY3RTaW11bGF0b3JVZGlkIiwiY2FwcyIsImFsbERldmljZXMiLCJmbGF0TWFwIiwidmFsdWVzIiwiZ2V0RGV2aWNlcyIsIm5hbWUiLCJzdGF0ZSIsInNkayIsInRvTG93ZXIiLCJzdGFydFJlY29yZGluZ1NjcmVlbiIsIl90aGlzJF9zY3JlZW5SZWNvcmRlciIsImZvcmNlUmVzdGFydCIsIl9zY3JlZW5SZWNvcmRlciIsInRlbXBEaXIiLCJwYXRoIiwicHJlZml4IiwidXVpZFY0Iiwic3VmZml4IiwicGFyc2VJbnQiLCJzdG9wUmVjb3JkaW5nU2NyZWVuIiwic2l6ZSIsInN0YXQiLCJ0b1JlYWRhYmxlU2l6ZVN0cmluZyIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvcmVjb3JkLXNjcmVlbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdXRpbCwgZnMsIG5ldCwgdGVtcERpciB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgU2ltY3RsIGZyb20gJ25vZGUtc2ltY3RsJztcblxuXG5jb25zdCBjb21tYW5kcyA9IHt9O1xuXG5jb25zdCBTVEFSVFVQX0lOVEVSVkFMX01TID0gMzAwO1xuY29uc3QgU1RBUlRVUF9USU1FT1VUX01TID0gMTAgKiAxMDAwO1xuY29uc3QgREVGQVVMVF9USU1FX0xJTUlUX01TID0gNjAgKiAxMCAqIDEwMDA7IC8vIDEwIG1pbnV0ZXNcbmNvbnN0IFBST0NFU1NfU0hVVERPV05fVElNRU9VVF9NUyA9IDEwICogMTAwMDtcbmNvbnN0IERFRkFVTFRfRVhUID0gJy5tcDQnO1xuXG5cbmFzeW5jIGZ1bmN0aW9uIHVwbG9hZFJlY29yZGVkTWVkaWEgKGxvY2FsRmlsZSwgcmVtb3RlUGF0aCA9IG51bGwsIHVwbG9hZE9wdGlvbnMgPSB7fSkge1xuICBpZiAoXy5pc0VtcHR5KHJlbW90ZVBhdGgpKSB7XG4gICAgcmV0dXJuIChhd2FpdCB1dGlsLnRvSW5NZW1vcnlCYXNlNjQobG9jYWxGaWxlKSkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGNvbnN0IHt1c2VyLCBwYXNzLCBtZXRob2QsIGhlYWRlcnMsIGZpbGVGaWVsZE5hbWUsIGZvcm1GaWVsZHN9ID0gdXBsb2FkT3B0aW9ucztcbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICBtZXRob2Q6IG1ldGhvZCB8fCAnUFVUJyxcbiAgICBoZWFkZXJzLFxuICAgIGZpbGVGaWVsZE5hbWUsXG4gICAgZm9ybUZpZWxkcyxcbiAgfTtcbiAgaWYgKHVzZXIgJiYgcGFzcykge1xuICAgIG9wdGlvbnMuYXV0aCA9IHt1c2VyLCBwYXNzfTtcbiAgfVxuICBhd2FpdCBuZXQudXBsb2FkRmlsZShsb2NhbEZpbGUsIHJlbW90ZVBhdGgsIG9wdGlvbnMpO1xuICByZXR1cm4gJyc7XG59XG5cbmNvbnN0IFZJREVPX0ZJTEVTID0gbmV3IFNldCgpO1xucHJvY2Vzcy5vbignZXhpdCcsICgpID0+IHtcbiAgZm9yIChjb25zdCB2aWRlb0ZpbGUgb2YgVklERU9fRklMRVMpIHtcbiAgICB0cnkge1xuICAgICAgZnMucmltcmFmU3luYyh2aWRlb0ZpbGUpO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgfVxufSk7XG5cbmNsYXNzIFNjcmVlblJlY29yZGVyIHtcbiAgY29uc3RydWN0b3IgKHVkaWQsIHZpZGVvUGF0aCwgbG9nLCBvcHRzID0ge30pIHtcbiAgICB0aGlzLmxvZyA9IGxvZztcbiAgICB0aGlzLl9wcm9jZXNzID0gbnVsbDtcbiAgICB0aGlzLl91ZGlkID0gdWRpZDtcbiAgICB0aGlzLl92aWRlb1BhdGggPSB2aWRlb1BhdGg7XG4gICAgdGhpcy5fY29kZWMgPSBvcHRzLmNvZGVjO1xuICAgIHRoaXMuX2Rpc3BsYXkgPSBvcHRzLmRpc3BsYXk7XG4gICAgdGhpcy5fbWFzayA9IG9wdHMubWFzaztcbiAgICB0aGlzLl90aW1lTGltaXRNcyA9IG9wdHMudGltZUxpbWl0ID4gMCA/IG9wdHMudGltZUxpbWl0ICogMTAwMCA6IERFRkFVTFRfVElNRV9MSU1JVF9NUztcbiAgICB0aGlzLl90aW1lciA9IG51bGw7XG4gIH1cblxuICBhc3luYyBnZXRWaWRlb1BhdGggKCkge1xuICAgIGlmIChhd2FpdCBmcy5leGlzdHModGhpcy5fdmlkZW9QYXRoKSkge1xuICAgICAgVklERU9fRklMRVMuYWRkKHRoaXMuX3ZpZGVvUGF0aCk7XG4gICAgICByZXR1cm4gdGhpcy5fdmlkZW9QYXRoO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBnZXQgaXNSdW5uaW5nICgpIHtcbiAgICByZXR1cm4gISEodGhpcy5fcHJvY2Vzcz8uaXNSdW5uaW5nKTtcbiAgfVxuXG4gIGFzeW5jIF9lbmZvcmNlVGVybWluYXRpb24gKCkge1xuICAgIGlmICh0aGlzLmlzUnVubmluZykge1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ0ZvcmNlLXN0b3BwaW5nIHRoZSBjdXJyZW50bHkgcnVubmluZyB2aWRlbyByZWNvcmRpbmcnKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuX3Byb2Nlc3Muc3RvcCgnU0lHS0lMTCcpO1xuICAgICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIH1cbiAgICB0aGlzLl9wcm9jZXNzID0gbnVsbDtcbiAgICBjb25zdCB2aWRlb1BhdGggPSBhd2FpdCB0aGlzLmdldFZpZGVvUGF0aCgpO1xuICAgIGlmICh2aWRlb1BhdGgpIHtcbiAgICAgIGF3YWl0IGZzLnJpbXJhZih2aWRlb1BhdGgpO1xuICAgICAgVklERU9fRklMRVMuZGVsZXRlKHZpZGVvUGF0aCk7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0ICgpIHtcbiAgICBjb25zdCBhcmdzID0gW1xuICAgICAgdGhpcy5fdWRpZCwgJ3JlY29yZFZpZGVvJ1xuICAgIF07XG4gICAgaWYgKHRoaXMuX2Rpc3BsYXkpIHtcbiAgICAgIGFyZ3MucHVzaCgnLS1kaXNwbGF5JywgdGhpcy5fZGlzcGxheSk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9jb2RlYykge1xuICAgICAgYXJncy5wdXNoKCctLWNvZGVjJywgdGhpcy5fY29kZWMpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fbWFzaykge1xuICAgICAgYXJncy5wdXNoKCctLW1hc2snLCB0aGlzLl9tYXNrKTtcbiAgICB9XG4gICAgYXJncy5wdXNoKCctLWZvcmNlJywgdGhpcy5fdmlkZW9QYXRoKTtcbiAgICB0aGlzLl9wcm9jZXNzID0gYXdhaXQgbmV3IFNpbWN0bCgpLmV4ZWMoJ2lvJywge1xuICAgICAgYXJncyxcbiAgICAgIGFzeW5jaHJvbm91czogdHJ1ZSxcbiAgICB9KTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgU3RhcnRpbmcgdmlkZW8gcmVjb3JkaW5nIHdpdGggYXJndW1lbnRzOiAke3V0aWwucXVvdGUoYXJncyl9YCk7XG4gICAgdGhpcy5fcHJvY2Vzcy5vbignb3V0cHV0JywgKHN0ZG91dCwgc3RkZXJyKSA9PiB7XG4gICAgICBjb25zdCBsaW5lID0gXy50cmltKHN0ZG91dCB8fCBzdGRlcnIpO1xuICAgICAgaWYgKGxpbmUpIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYFtyZWNvcmRWaWRlb0Ake3RoaXMuX3VkaWQuc3Vic3RyaW5nKDAsIDgpfV0gJHtsaW5lfWApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuX3Byb2Nlc3Mub25jZSgnZXhpdCcsIGFzeW5jIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgIHRoaXMuX3Byb2Nlc3MgPSBudWxsO1xuICAgICAgaWYgKGNvZGUgPT09IDApIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoJ1NjcmVlbiByZWNvcmRpbmcgZXhpdGVkIHdpdGhvdXQgZXJyb3JzJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLl9lbmZvcmNlVGVybWluYXRpb24oKTtcbiAgICAgICAgdGhpcy5sb2cud2FybihgU2NyZWVuIHJlY29yZGluZyBleGl0ZWQgd2l0aCBlcnJvciBjb2RlICR7Y29kZX0sIHNpZ25hbCAke3NpZ25hbH1gKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBhd2FpdCB0aGlzLl9wcm9jZXNzLnN0YXJ0KDApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmlzUnVubmluZykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhIShhd2FpdCB0aGlzLmdldFZpZGVvUGF0aCgpKTtcbiAgICAgIH0sIHtcbiAgICAgICAgd2FpdE1zOiBTVEFSVFVQX1RJTUVPVVRfTVMsXG4gICAgICAgIGludGVydmFsTXM6IFNUQVJUVVBfSU5URVJWQUxfTVMsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLl9lbmZvcmNlVGVybWluYXRpb24oKTtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYFRoZSBleHBlY3RlZCBzY3JlZW4gcmVjb3JkIGZpbGUgJyR7dGhpcy5fdmlkZW9QYXRofScgZG9lcyBub3QgZXhpc3QgYWZ0ZXIgJHtTVEFSVFVQX1RJTUVPVVRfTVN9bXMuIGAgK1xuICAgICAgICBgQ2hlY2sgdGhlIHNlcnZlciBsb2cgZm9yIG1vcmUgZGV0YWlsc2ApO1xuICAgIH1cbiAgICB0aGlzLl90aW1lciA9IHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNSdW5uaW5nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zdG9wKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB0aGlzLmxvZy5lcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHRoaXMuX3RpbWVMaW1pdE1zKTtcbiAgICB0aGlzLmxvZy5pbmZvKGBUaGUgdmlkZW8gcmVjb3JkaW5nIGhhcyBzdGFydGVkLiBXaWxsIHRpbWVvdXQgaW4gJHt0aGlzLl90aW1lTGltaXRNc31tc2ApO1xuICB9XG5cbiAgYXN5bmMgc3RvcCAoZm9yY2UgPSBmYWxzZSkge1xuICAgIGlmICh0aGlzLl90aW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgICAgIHRoaXMuX3RpbWVyID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZm9yY2UpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9lbmZvcmNlVGVybWluYXRpb24oKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaXNSdW5uaW5nKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnU2NyZWVuIHJlY29yZGluZyBpcyBub3QgcnVubmluZy4gUmV0dXJuaW5nIHRoZSByZWNlbnRseSByZWNvcmRlZCB2aWRlbycpO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0VmlkZW9QYXRoKCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuX3Byb2Nlc3Muc3RvcCgnU0lHSU5UJywgUFJPQ0VTU19TSFVURE9XTl9USU1FT1VUX01TKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLl9lbmZvcmNlVGVybWluYXRpb24oKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU2NyZWVuIHJlY29yZGluZyBoYXMgZmFpbGVkIHRvIHN0b3AgYWZ0ZXIgJHtQUk9DRVNTX1NIVVRET1dOX1RJTUVPVVRfTVN9bXNgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRWaWRlb1BhdGgoKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBleHRyYWN0U2ltdWxhdG9yVWRpZCAoY2Fwcykge1xuICBpZiAoY2Fwc1snc2FmYXJpOnVzZVNpbXVsYXRvciddID09PSBmYWxzZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgYWxsRGV2aWNlcyA9IF8uZmxhdE1hcChfLnZhbHVlcyhhd2FpdCBuZXcgU2ltY3RsKCkuZ2V0RGV2aWNlcyhudWxsLCAnaU9TJykpKTtcbiAgZm9yIChjb25zdCB7bmFtZSwgdWRpZCwgc3RhdGUsIHNka30gb2YgYWxsRGV2aWNlcykge1xuICAgIGlmIChzdGF0ZSAhPT0gJ0Jvb3RlZCcpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChfLnRvTG93ZXIoY2Fwc1snc2FmYXJpOmRldmljZVVESUQnXSkgPT09IF8udG9Mb3dlcih1ZGlkKSkge1xuICAgICAgcmV0dXJuIHVkaWQ7XG4gICAgfVxuICAgIGlmIChfLnRvTG93ZXIoY2Fwc1snc2FmYXJpOmRldmljZU5hbWUnXSkgPT09IF8udG9Mb3dlcihuYW1lKSAmJlxuICAgICAgKGNhcHNbJ3NhZmFyaTpwbGF0Zm9ybVZlcnNpb24nXSAmJiBjYXBzWydzYWZhcmk6cGxhdGZvcm1WZXJzaW9uJ10gPT09IHNka1xuICAgICAgICB8fCAhY2Fwc1snc2FmYXJpOnBsYXRmb3JtVmVyc2lvbiddKSkge1xuICAgICAgcmV0dXJuIHVkaWQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTdGFydFJlY29yZGluZ09wdGlvbnNcbiAqXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGNvZGVjIFtoZXZjXSAtIFNwZWNpZmllcyB0aGUgY29kZWMgdHlwZTogXCJoMjY0XCIgb3IgXCJoZXZjXCJcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZGlzcGxheSBbaW50ZXJuYWxdIC0gU3VwcG9ydHMgXCJpbnRlcm5hbFwiIG9yIFwiZXh0ZXJuYWxcIi4gRGVmYXVsdCBpcyBcImludGVybmFsXCJcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gbWFzayAtIEZvciBub24tcmVjdGFuZ3VsYXIgZGlzcGxheXMsIGhhbmRsZSB0aGUgbWFzayBieSBwb2xpY3k6XG4gKiAtIGlnbm9yZWQ6IFRoZSBtYXNrIGlzIGlnbm9yZWQgYW5kIHRoZSB1bm1hc2tlZCBmcmFtZWJ1ZmZlciBpcyBzYXZlZC5cbiAqIC0gYWxwaGE6IE5vdCBzdXBwb3J0ZWQsIGJ1dCByZXRhaW5lZCBmb3IgY29tcGF0aWJpbGl0eTsgdGhlIG1hc2sgaXMgcmVuZGVyZWQgYmxhY2suXG4gKiAtIGJsYWNrOiBUaGUgbWFzayBpcyByZW5kZXJlZCBibGFjay5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfG51bWJlcn0gdGltZUxpbWl0IFs2MDBdIC0gVGhlIG1heGltdW0gcmVjb3JkaW5nIHRpbWUsIGluIHNlY29uZHMuIFRoZSBkZWZhdWx0XG4gKiB2YWx1ZSBpcyA2MDAgc2Vjb25kcyAoMTAgbWludXRlcykuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGZvcmNlUmVzdGFydCBbdHJ1ZV0gLSBXaGV0aGVyIHRvIGlnbm9yZSB0aGUgY2FsbCBpZiBhIHNjcmVlbiByZWNvcmRpbmcgaXMgY3VycmVudGx5IHJ1bm5pbmdcbiAqIChgZmFsc2VgKSBvciB0byBzdGFydCBhIG5ldyByZWNvcmRpbmcgaW1tZWRpYXRlbHkgYW5kIHRlcm1pbmF0ZSB0aGUgZXhpc3Rpbmcgb25lIGlmIHJ1bm5pbmcgKGB0cnVlYCkuXG4gKi9cblxuLyoqXG4gKiBSZWNvcmQgdGhlIFNpbXVsYXRvcidzIGRpc3BsYXkgaW4gYmFja2dyb3VuZCB3aGlsZSB0aGUgYXV0b21hdGVkIHRlc3QgaXMgcnVubmluZy5cbiAqIFRoaXMgbWV0aG9kIHVzZXMgYHhjcnVuIHNpbWN0bCBpbyByZWNvcmRWaWRlb2AgaGVscGVyIHVuZGVyIHRoZSBob29kLlxuICogQ2hlY2sgdGhlIG91dHB1dCBvZiBgeGNydW4gc2ltY3RsIGlvYCBjb21tYW5kIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHBhcmFtIHs/U3RhcnRSZWNvcmRpbmdPcHRpb25zfSBvcHRpb25zIC0gVGhlIGF2YWlsYWJsZSBvcHRpb25zLlxuICogQHRocm93cyB7RXJyb3J9IElmIHNjcmVlbiByZWNvcmRpbmcgaGFzIGZhaWxlZCB0byBzdGFydCBvciBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGUgZGVzdGluYXRpb24gZGV2aWNlLlxuICovXG5jb21tYW5kcy5zdGFydFJlY29yZGluZ1NjcmVlbiA9IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0UmVjb3JkaW5nU2NyZWVuIChvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHRpbWVMaW1pdCxcbiAgICBjb2RlYyxcbiAgICBkaXNwbGF5LFxuICAgIG1hc2ssXG4gICAgZm9yY2VSZXN0YXJ0ID0gdHJ1ZSxcbiAgfSA9IG9wdGlvbnM7XG4gIGlmICh0aGlzLl9zY3JlZW5SZWNvcmRlcj8uaXNSdW5uaW5nKSB7XG4gICAgdGhpcy5sb2cuaW5mbygnVGhlIHNjcmVlbiByZWNvcmRpbmcgaXMgYWxyZWFkeSBydW5uaW5nJyk7XG4gICAgaWYgKCFmb3JjZVJlc3RhcnQpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ0RvaW5nIG5vdGhpbmcnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5sb2cuaW5mbygnRm9yY2luZyB0aGUgYWN0aXZlIHNjcmVlbiByZWNvcmRpbmcgdG8gc3RvcCcpO1xuICAgIGF3YWl0IHRoaXMuX3NjcmVlblJlY29yZGVyLnN0b3AodHJ1ZSk7XG4gIH1cbiAgdGhpcy5fc2NyZWVuUmVjb3JkZXIgPSBudWxsO1xuXG4gIGNvbnN0IHVkaWQgPSBhd2FpdCBleHRyYWN0U2ltdWxhdG9yVWRpZCh0aGlzLmNhcHMpO1xuICBpZiAoIXVkaWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBkZXRlcm1pbmUgU2ltdWxhdG9yIFVESUQgdG8gcmVjb3JkIHRoZSB2aWRlbyBmcm9tLiAnICtcbiAgICAgICdEb3VibGUgY2hlY2sgeW91ciBzZXNzaW9uIGNhcGFiaWxpdGllcycpO1xuICB9XG5cbiAgY29uc3QgdmlkZW9QYXRoID0gYXdhaXQgdGVtcERpci5wYXRoKHtcbiAgICBwcmVmaXg6IHV0aWwudXVpZFY0KCkuc3Vic3RyaW5nKDAsIDgpLFxuICAgIHN1ZmZpeDogREVGQVVMVF9FWFQsXG4gIH0pO1xuICB0aGlzLl9zY3JlZW5SZWNvcmRlciA9IG5ldyBTY3JlZW5SZWNvcmRlcih1ZGlkLCB2aWRlb1BhdGgsIHRoaXMubG9nLCB7XG4gICAgdGltZUxpbWl0OiBwYXJzZUludCh0aW1lTGltaXQsIDEwKSxcbiAgICBjb2RlYyxcbiAgICBkaXNwbGF5LFxuICAgIG1hc2ssXG4gIH0pO1xuICB0cnkge1xuICAgIGF3YWl0IHRoaXMuX3NjcmVlblJlY29yZGVyLnN0YXJ0KCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aGlzLl9zY3JlZW5SZWNvcmRlciA9IG51bGw7XG4gICAgdGhyb3cgZTtcbiAgfVxufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTdG9wUmVjb3JkaW5nT3B0aW9uc1xuICpcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gcmVtb3RlUGF0aCAtIFRoZSBwYXRoIHRvIHRoZSByZW1vdGUgbG9jYXRpb24sIHdoZXJlIHRoZSByZXN1bHRpbmcgdmlkZW8gc2hvdWxkIGJlIHVwbG9hZGVkLlxuICogVGhlIGZvbGxvd2luZyBwcm90b2NvbHMgYXJlIHN1cHBvcnRlZDogaHR0cC9odHRwcywgZnRwLlxuICogTnVsbCBvciBlbXB0eSBzdHJpbmcgdmFsdWUgKHRoZSBkZWZhdWx0IHNldHRpbmcpIG1lYW5zIHRoZSBjb250ZW50IG9mIHJlc3VsdGluZ1xuICogZmlsZSBzaG91bGQgYmUgZW5jb2RlZCBhcyBCYXNlNjQgYW5kIHBhc3NlZCBhcyB0aGUgZW5kcG9pbnQgcmVzcG9uc2UgdmFsdWUuXG4gKiBBbiBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24gaWYgdGhlIGdlbmVyYXRlZCBtZWRpYSBmaWxlIGlzIHRvbyBiaWcgdG9cbiAqIGZpdCBpbnRvIHRoZSBhdmFpbGFibGUgcHJvY2VzcyBtZW1vcnkuXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHVzZXIgLSBUaGUgbmFtZSBvZiB0aGUgdXNlciBmb3IgdGhlIHJlbW90ZSBhdXRoZW50aWNhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gcGFzcyAtIFRoZSBwYXNzd29yZCBmb3IgdGhlIHJlbW90ZSBhdXRoZW50aWNhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gbWV0aG9kIC0gVGhlIGh0dHAgbXVsdGlwYXJ0IHVwbG9hZCBtZXRob2QgbmFtZS4gVGhlICdQVVQnIG9uZSBpcyB1c2VkIGJ5IGRlZmF1bHQuXG4gKiBAcHJvcGVydHkgez9PYmplY3R9IGhlYWRlcnMgLSBBZGRpdGlvbmFsIGhlYWRlcnMgbWFwcGluZyBmb3IgbXVsdGlwYXJ0IGh0dHAocykgdXBsb2Fkc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBmaWxlRmllbGROYW1lIFtmaWxlXSAtIFRoZSBuYW1lIG9mIHRoZSBmb3JtIGZpZWxkLCB3aGVyZSB0aGUgZmlsZSBjb250ZW50IEJMT0Igc2hvdWxkIGJlIHN0b3JlZCBmb3JcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwKHMpIHVwbG9hZHNcbiAqIEBwcm9wZXJ0eSB7P09iamVjdHxBcnJheTxQYWlyPn0gZm9ybUZpZWxkcyAtIEFkZGl0aW9uYWwgZm9ybSBmaWVsZHMgZm9yIG11bHRpcGFydCBodHRwKHMpIHVwbG9hZHNcbiAqL1xuXG4vKipcbiAqIFN0b3AgcmVjb3JkaW5nIHRoZSBzY3JlZW4uXG4gKiBJZiBubyBzY3JlZW4gcmVjb3JkaW5nIGhhcyBiZWVuIHN0YXJ0ZWQgYmVmb3JlIHRoZW4gdGhlIG1ldGhvZCByZXR1cm5zIGFuIGVtcHR5IHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gez9TdG9wUmVjb3JkaW5nT3B0aW9uc30gb3B0aW9ucyAtIFRoZSBhdmFpbGFibGUgb3B0aW9ucy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEJhc2U2NC1lbmNvZGVkIGNvbnRlbnQgb2YgdGhlIHJlY29yZGVkIG1lZGlhIGZpbGUgaWYgJ3JlbW90ZVBhdGgnXG4gKiBwYXJhbWV0ZXIgaXMgZmFsc3kgb3IgYW4gZW1wdHkgc3RyaW5nLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBnZXR0aW5nIHRoZSBuYW1lIG9mIGEgbWVkaWEgZmlsZVxuICogb3IgdGhlIGZpbGUgY29udGVudCBjYW5ub3QgYmUgdXBsb2FkZWQgdG8gdGhlIHJlbW90ZSBsb2NhdGlvblxuICogb3Igc2NyZWVuIHJlY29yZGluZyBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC5cbiAqL1xuY29tbWFuZHMuc3RvcFJlY29yZGluZ1NjcmVlbiA9IGFzeW5jIGZ1bmN0aW9uIHN0b3BSZWNvcmRpbmdTY3JlZW4gKG9wdGlvbnMgPSB7fSkge1xuICBpZiAoIXRoaXMuX3NjcmVlblJlY29yZGVyKSB7XG4gICAgdGhpcy5sb2cuaW5mbygnTm8gc2NyZWVuIHJlY29yZGluZyBoYXMgYmVlbiBzdGFydGVkLiBEb2luZyBub3RoaW5nJyk7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgdGhpcy5sb2cuZGVidWcoJ1JldHJpZXZpbmcgdGhlIHJlc3VsdGluZyB2aWRlbyBkYXRhJyk7XG4gIGNvbnN0IHZpZGVvUGF0aCA9IGF3YWl0IHRoaXMuX3NjcmVlblJlY29yZGVyLnN0b3AoKTtcbiAgaWYgKCF2aWRlb1BhdGgpIHtcbiAgICB0aGlzLmxvZy5pbmZvKCdObyB2aWRlbyBkYXRhIGlzIGZvdW5kLiBSZXR1cm5pbmcgYW4gZW1wdHkgc3RyaW5nJyk7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGlmIChfLmlzRW1wdHkob3B0aW9ucy5yZW1vdGVQYXRoKSkge1xuICAgIGNvbnN0IHtzaXplfSA9IGF3YWl0IGZzLnN0YXQodmlkZW9QYXRoKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgVGhlIHNpemUgb2YgdGhlIHJlc3VsdGluZyBzY3JlZW4gcmVjb3JkaW5nIGlzICR7dXRpbC50b1JlYWRhYmxlU2l6ZVN0cmluZyhzaXplKX1gKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdXBsb2FkUmVjb3JkZWRNZWRpYSh2aWRlb1BhdGgsIG9wdGlvbnMucmVtb3RlUGF0aCwgb3B0aW9ucyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxRQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxTQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxXQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFHQSxNQUFNSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBRW5CLE1BQU1DLG1CQUFtQixHQUFHLEdBQUc7QUFDL0IsTUFBTUMsa0JBQWtCLEdBQUcsRUFBRSxHQUFHLElBQUk7QUFDcEMsTUFBTUMscUJBQXFCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJO0FBQzVDLE1BQU1DLDJCQUEyQixHQUFHLEVBQUUsR0FBRyxJQUFJO0FBQzdDLE1BQU1DLFdBQVcsR0FBRyxNQUFNO0FBRzFCLGVBQWVDLG1CQUFtQkEsQ0FBRUMsU0FBUyxFQUFFQyxVQUFVLEdBQUcsSUFBSSxFQUFFQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDcEYsSUFBSUMsZUFBQyxDQUFDQyxPQUFPLENBQUNILFVBQVUsQ0FBQyxFQUFFO0lBQ3pCLE9BQU8sQ0FBQyxNQUFNSSxhQUFJLENBQUNDLGdCQUFnQixDQUFDTixTQUFTLENBQUMsRUFBRU8sUUFBUSxFQUFFO0VBQzVEO0VBRUEsTUFBTTtJQUFDQyxJQUFJO0lBQUVDLElBQUk7SUFBRUMsTUFBTTtJQUFFQyxPQUFPO0lBQUVDLGFBQWE7SUFBRUM7RUFBVSxDQUFDLEdBQUdYLGFBQWE7RUFDOUUsTUFB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
|
|
255
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfc3VwcG9ydCIsIl9hc3luY2JveCIsIl9ub2RlU2ltY3RsIiwiY29tbWFuZHMiLCJTVEFSVFVQX0lOVEVSVkFMX01TIiwiU1RBUlRVUF9USU1FT1VUX01TIiwiREVGQVVMVF9USU1FX0xJTUlUX01TIiwiUFJPQ0VTU19TSFVURE9XTl9USU1FT1VUX01TIiwiREVGQVVMVF9FWFQiLCJ1cGxvYWRSZWNvcmRlZE1lZGlhIiwibG9jYWxGaWxlIiwicmVtb3RlUGF0aCIsInVwbG9hZE9wdGlvbnMiLCJfIiwiaXNFbXB0eSIsInV0aWwiLCJ0b0luTWVtb3J5QmFzZTY0IiwidG9TdHJpbmciLCJ1c2VyIiwicGFzcyIsIm1ldGhvZCIsImhlYWRlcnMiLCJmaWxlRmllbGROYW1lIiwiZm9ybUZpZWxkcyIsIm9wdGlvbnMiLCJhdXRoIiwibmV0IiwidXBsb2FkRmlsZSIsIlZJREVPX0ZJTEVTIiwiU2V0IiwicHJvY2VzcyIsIm9uIiwidmlkZW9GaWxlIiwiZnMiLCJyaW1yYWZTeW5jIiwiaWduIiwiU2NyZWVuUmVjb3JkZXIiLCJjb25zdHJ1Y3RvciIsInVkaWQiLCJ2aWRlb1BhdGgiLCJsb2ciLCJvcHRzIiwiX3Byb2Nlc3MiLCJfdWRpZCIsIl92aWRlb1BhdGgiLCJfY29kZWMiLCJjb2RlYyIsIl9kaXNwbGF5IiwiZGlzcGxheSIsIl9tYXNrIiwibWFzayIsIl90aW1lTGltaXRNcyIsInRpbWVMaW1pdCIsIl90aW1lciIsImdldFZpZGVvUGF0aCIsImV4aXN0cyIsImFkZCIsImlzUnVubmluZyIsIl90aGlzJF9wcm9jZXNzIiwiX2VuZm9yY2VUZXJtaW5hdGlvbiIsImRlYnVnIiwic3RvcCIsInJpbXJhZiIsImRlbGV0ZSIsInN0YXJ0IiwiYXJncyIsInB1c2giLCJTaW1jdGwiLCJleGVjIiwiYXN5bmNocm9ub3VzIiwicXVvdGUiLCJzdGRvdXQiLCJzdGRlcnIiLCJsaW5lIiwidHJpbSIsInN1YnN0cmluZyIsIm9uY2UiLCJjb2RlIiwic2lnbmFsIiwid2FybiIsIndhaXRGb3JDb25kaXRpb24iLCJFcnJvciIsIndhaXRNcyIsImludGVydmFsTXMiLCJlIiwiZXJyb3JBbmRUaHJvdyIsInNldFRpbWVvdXQiLCJlcnJvciIsImluZm8iLCJmb3JjZSIsImNsZWFyVGltZW91dCIsImV4dHJhY3RTaW11bGF0b3JVZGlkIiwiY2FwcyIsImFsbERldmljZXMiLCJmbGF0TWFwIiwidmFsdWVzIiwiZ2V0RGV2aWNlcyIsIm5hbWUiLCJzdGF0ZSIsInNkayIsInRvTG93ZXIiLCJzdGFydFJlY29yZGluZ1NjcmVlbiIsIl90aGlzJF9zY3JlZW5SZWNvcmRlciIsImZvcmNlUmVzdGFydCIsIl9zY3JlZW5SZWNvcmRlciIsInRlbXBEaXIiLCJwYXRoIiwicHJlZml4IiwidXVpZFY0Iiwic3VmZml4IiwicGFyc2VJbnQiLCJzdG9wUmVjb3JkaW5nU2NyZWVuIiwic2l6ZSIsInN0YXQiLCJ0b1JlYWRhYmxlU2l6ZVN0cmluZyIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvcmVjb3JkLXNjcmVlbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdXRpbCwgZnMsIG5ldCwgdGVtcERpciB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgU2ltY3RsIGZyb20gJ25vZGUtc2ltY3RsJztcblxuXG5jb25zdCBjb21tYW5kcyA9IHt9O1xuXG5jb25zdCBTVEFSVFVQX0lOVEVSVkFMX01TID0gMzAwO1xuY29uc3QgU1RBUlRVUF9USU1FT1VUX01TID0gMTAgKiAxMDAwO1xuY29uc3QgREVGQVVMVF9USU1FX0xJTUlUX01TID0gNjAgKiAxMCAqIDEwMDA7IC8vIDEwIG1pbnV0ZXNcbmNvbnN0IFBST0NFU1NfU0hVVERPV05fVElNRU9VVF9NUyA9IDEwICogMTAwMDtcbmNvbnN0IERFRkFVTFRfRVhUID0gJy5tcDQnO1xuXG5cbmFzeW5jIGZ1bmN0aW9uIHVwbG9hZFJlY29yZGVkTWVkaWEgKGxvY2FsRmlsZSwgcmVtb3RlUGF0aCA9IG51bGwsIHVwbG9hZE9wdGlvbnMgPSB7fSkge1xuICBpZiAoXy5pc0VtcHR5KHJlbW90ZVBhdGgpKSB7XG4gICAgcmV0dXJuIChhd2FpdCB1dGlsLnRvSW5NZW1vcnlCYXNlNjQobG9jYWxGaWxlKSkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGNvbnN0IHt1c2VyLCBwYXNzLCBtZXRob2QsIGhlYWRlcnMsIGZpbGVGaWVsZE5hbWUsIGZvcm1GaWVsZHN9ID0gdXBsb2FkT3B0aW9ucztcbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICBtZXRob2Q6IG1ldGhvZCB8fCAnUFVUJyxcbiAgICBoZWFkZXJzLFxuICAgIGZpbGVGaWVsZE5hbWUsXG4gICAgZm9ybUZpZWxkcyxcbiAgfTtcbiAgaWYgKHVzZXIgJiYgcGFzcykge1xuICAgIG9wdGlvbnMuYXV0aCA9IHt1c2VyLCBwYXNzfTtcbiAgfVxuICBhd2FpdCBuZXQudXBsb2FkRmlsZShsb2NhbEZpbGUsIHJlbW90ZVBhdGgsIG9wdGlvbnMpO1xuICByZXR1cm4gJyc7XG59XG5cbmNvbnN0IFZJREVPX0ZJTEVTID0gbmV3IFNldCgpO1xucHJvY2Vzcy5vbignZXhpdCcsICgpID0+IHtcbiAgZm9yIChjb25zdCB2aWRlb0ZpbGUgb2YgVklERU9fRklMRVMpIHtcbiAgICB0cnkge1xuICAgICAgZnMucmltcmFmU3luYyh2aWRlb0ZpbGUpO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgfVxufSk7XG5cbmNsYXNzIFNjcmVlblJlY29yZGVyIHtcbiAgY29uc3RydWN0b3IgKHVkaWQsIHZpZGVvUGF0aCwgbG9nLCBvcHRzID0ge30pIHtcbiAgICB0aGlzLmxvZyA9IGxvZztcbiAgICB0aGlzLl9wcm9jZXNzID0gbnVsbDtcbiAgICB0aGlzLl91ZGlkID0gdWRpZDtcbiAgICB0aGlzLl92aWRlb1BhdGggPSB2aWRlb1BhdGg7XG4gICAgdGhpcy5fY29kZWMgPSBvcHRzLmNvZGVjO1xuICAgIHRoaXMuX2Rpc3BsYXkgPSBvcHRzLmRpc3BsYXk7XG4gICAgdGhpcy5fbWFzayA9IG9wdHMubWFzaztcbiAgICB0aGlzLl90aW1lTGltaXRNcyA9IG9wdHMudGltZUxpbWl0ID4gMCA/IG9wdHMudGltZUxpbWl0ICogMTAwMCA6IERFRkFVTFRfVElNRV9MSU1JVF9NUztcbiAgICB0aGlzLl90aW1lciA9IG51bGw7XG4gIH1cblxuICBhc3luYyBnZXRWaWRlb1BhdGggKCkge1xuICAgIGlmIChhd2FpdCBmcy5leGlzdHModGhpcy5fdmlkZW9QYXRoKSkge1xuICAgICAgVklERU9fRklMRVMuYWRkKHRoaXMuX3ZpZGVvUGF0aCk7XG4gICAgICByZXR1cm4gdGhpcy5fdmlkZW9QYXRoO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBnZXQgaXNSdW5uaW5nICgpIHtcbiAgICByZXR1cm4gISEodGhpcy5fcHJvY2Vzcz8uaXNSdW5uaW5nKTtcbiAgfVxuXG4gIGFzeW5jIF9lbmZvcmNlVGVybWluYXRpb24gKCkge1xuICAgIGlmICh0aGlzLmlzUnVubmluZykge1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ0ZvcmNlLXN0b3BwaW5nIHRoZSBjdXJyZW50bHkgcnVubmluZyB2aWRlbyByZWNvcmRpbmcnKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuX3Byb2Nlc3Muc3RvcCgnU0lHS0lMTCcpO1xuICAgICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIH1cbiAgICB0aGlzLl9wcm9jZXNzID0gbnVsbDtcbiAgICBjb25zdCB2aWRlb1BhdGggPSBhd2FpdCB0aGlzLmdldFZpZGVvUGF0aCgpO1xuICAgIGlmICh2aWRlb1BhdGgpIHtcbiAgICAgIGF3YWl0IGZzLnJpbXJhZih2aWRlb1BhdGgpO1xuICAgICAgVklERU9fRklMRVMuZGVsZXRlKHZpZGVvUGF0aCk7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0ICgpIHtcbiAgICBjb25zdCBhcmdzID0gW1xuICAgICAgdGhpcy5fdWRpZCwgJ3JlY29yZFZpZGVvJ1xuICAgIF07XG4gICAgaWYgKHRoaXMuX2Rpc3BsYXkpIHtcbiAgICAgIGFyZ3MucHVzaCgnLS1kaXNwbGF5JywgdGhpcy5fZGlzcGxheSk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9jb2RlYykge1xuICAgICAgYXJncy5wdXNoKCctLWNvZGVjJywgdGhpcy5fY29kZWMpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fbWFzaykge1xuICAgICAgYXJncy5wdXNoKCctLW1hc2snLCB0aGlzLl9tYXNrKTtcbiAgICB9XG4gICAgYXJncy5wdXNoKCctLWZvcmNlJywgdGhpcy5fdmlkZW9QYXRoKTtcbiAgICB0aGlzLl9wcm9jZXNzID0gYXdhaXQgbmV3IFNpbWN0bCgpLmV4ZWMoJ2lvJywge1xuICAgICAgYXJncyxcbiAgICAgIGFzeW5jaHJvbm91czogdHJ1ZSxcbiAgICB9KTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgU3RhcnRpbmcgdmlkZW8gcmVjb3JkaW5nIHdpdGggYXJndW1lbnRzOiAke3V0aWwucXVvdGUoYXJncyl9YCk7XG4gICAgdGhpcy5fcHJvY2Vzcy5vbignb3V0cHV0JywgKHN0ZG91dCwgc3RkZXJyKSA9PiB7XG4gICAgICBjb25zdCBsaW5lID0gXy50cmltKHN0ZG91dCB8fCBzdGRlcnIpO1xuICAgICAgaWYgKGxpbmUpIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYFtyZWNvcmRWaWRlb0Ake3RoaXMuX3VkaWQuc3Vic3RyaW5nKDAsIDgpfV0gJHtsaW5lfWApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuX3Byb2Nlc3Mub25jZSgnZXhpdCcsIGFzeW5jIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgIHRoaXMuX3Byb2Nlc3MgPSBudWxsO1xuICAgICAgaWYgKGNvZGUgPT09IDApIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoJ1NjcmVlbiByZWNvcmRpbmcgZXhpdGVkIHdpdGhvdXQgZXJyb3JzJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLl9lbmZvcmNlVGVybWluYXRpb24oKTtcbiAgICAgICAgdGhpcy5sb2cud2FybihgU2NyZWVuIHJlY29yZGluZyBleGl0ZWQgd2l0aCBlcnJvciBjb2RlICR7Y29kZX0sIHNpZ25hbCAke3NpZ25hbH1gKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBhd2FpdCB0aGlzLl9wcm9jZXNzLnN0YXJ0KDApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmlzUnVubmluZykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhIShhd2FpdCB0aGlzLmdldFZpZGVvUGF0aCgpKTtcbiAgICAgIH0sIHtcbiAgICAgICAgd2FpdE1zOiBTVEFSVFVQX1RJTUVPVVRfTVMsXG4gICAgICAgIGludGVydmFsTXM6IFNUQVJUVVBfSU5URVJWQUxfTVMsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLl9lbmZvcmNlVGVybWluYXRpb24oKTtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYFRoZSBleHBlY3RlZCBzY3JlZW4gcmVjb3JkIGZpbGUgJyR7dGhpcy5fdmlkZW9QYXRofScgZG9lcyBub3QgZXhpc3QgYWZ0ZXIgJHtTVEFSVFVQX1RJTUVPVVRfTVN9bXMuIGAgK1xuICAgICAgICBgQ2hlY2sgdGhlIHNlcnZlciBsb2cgZm9yIG1vcmUgZGV0YWlsc2ApO1xuICAgIH1cbiAgICB0aGlzLl90aW1lciA9IHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNSdW5uaW5nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zdG9wKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB0aGlzLmxvZy5lcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHRoaXMuX3RpbWVMaW1pdE1zKTtcbiAgICB0aGlzLmxvZy5pbmZvKGBUaGUgdmlkZW8gcmVjb3JkaW5nIGhhcyBzdGFydGVkLiBXaWxsIHRpbWVvdXQgaW4gJHt0aGlzLl90aW1lTGltaXRNc31tc2ApO1xuICB9XG5cbiAgYXN5bmMgc3RvcCAoZm9yY2UgPSBmYWxzZSkge1xuICAgIGlmICh0aGlzLl90aW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgICAgIHRoaXMuX3RpbWVyID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZm9yY2UpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9lbmZvcmNlVGVybWluYXRpb24oKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaXNSdW5uaW5nKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnU2NyZWVuIHJlY29yZGluZyBpcyBub3QgcnVubmluZy4gUmV0dXJuaW5nIHRoZSByZWNlbnRseSByZWNvcmRlZCB2aWRlbycpO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0VmlkZW9QYXRoKCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuX3Byb2Nlc3Muc3RvcCgnU0lHSU5UJywgUFJPQ0VTU19TSFVURE9XTl9USU1FT1VUX01TKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLl9lbmZvcmNlVGVybWluYXRpb24oKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU2NyZWVuIHJlY29yZGluZyBoYXMgZmFpbGVkIHRvIHN0b3AgYWZ0ZXIgJHtQUk9DRVNTX1NIVVRET1dOX1RJTUVPVVRfTVN9bXNgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRWaWRlb1BhdGgoKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBleHRyYWN0U2ltdWxhdG9yVWRpZCAoY2Fwcykge1xuICBpZiAoY2Fwc1snc2FmYXJpOnVzZVNpbXVsYXRvciddID09PSBmYWxzZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgYWxsRGV2aWNlcyA9IF8uZmxhdE1hcChfLnZhbHVlcyhhd2FpdCBuZXcgU2ltY3RsKCkuZ2V0RGV2aWNlcyhudWxsLCAnaU9TJykpKTtcbiAgZm9yIChjb25zdCB7bmFtZSwgdWRpZCwgc3RhdGUsIHNka30gb2YgYWxsRGV2aWNlcykge1xuICAgIGlmIChzdGF0ZSAhPT0gJ0Jvb3RlZCcpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChfLnRvTG93ZXIoY2Fwc1snc2FmYXJpOmRldmljZVVESUQnXSkgPT09IF8udG9Mb3dlcih1ZGlkKSkge1xuICAgICAgcmV0dXJuIHVkaWQ7XG4gICAgfVxuICAgIGlmIChfLnRvTG93ZXIoY2Fwc1snc2FmYXJpOmRldmljZU5hbWUnXSkgPT09IF8udG9Mb3dlcihuYW1lKSAmJlxuICAgICAgKGNhcHNbJ3NhZmFyaTpwbGF0Zm9ybVZlcnNpb24nXSAmJiBjYXBzWydzYWZhcmk6cGxhdGZvcm1WZXJzaW9uJ10gPT09IHNka1xuICAgICAgICB8fCAhY2Fwc1snc2FmYXJpOnBsYXRmb3JtVmVyc2lvbiddKSkge1xuICAgICAgcmV0dXJuIHVkaWQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTdGFydFJlY29yZGluZ09wdGlvbnNcbiAqXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGNvZGVjIFtoZXZjXSAtIFNwZWNpZmllcyB0aGUgY29kZWMgdHlwZTogXCJoMjY0XCIgb3IgXCJoZXZjXCJcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZGlzcGxheSBbaW50ZXJuYWxdIC0gU3VwcG9ydHMgXCJpbnRlcm5hbFwiIG9yIFwiZXh0ZXJuYWxcIi4gRGVmYXVsdCBpcyBcImludGVybmFsXCJcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gbWFzayAtIEZvciBub24tcmVjdGFuZ3VsYXIgZGlzcGxheXMsIGhhbmRsZSB0aGUgbWFzayBieSBwb2xpY3k6XG4gKiAtIGlnbm9yZWQ6IFRoZSBtYXNrIGlzIGlnbm9yZWQgYW5kIHRoZSB1bm1hc2tlZCBmcmFtZWJ1ZmZlciBpcyBzYXZlZC5cbiAqIC0gYWxwaGE6IE5vdCBzdXBwb3J0ZWQsIGJ1dCByZXRhaW5lZCBmb3IgY29tcGF0aWJpbGl0eTsgdGhlIG1hc2sgaXMgcmVuZGVyZWQgYmxhY2suXG4gKiAtIGJsYWNrOiBUaGUgbWFzayBpcyByZW5kZXJlZCBibGFjay5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfG51bWJlcn0gdGltZUxpbWl0IFs2MDBdIC0gVGhlIG1heGltdW0gcmVjb3JkaW5nIHRpbWUsIGluIHNlY29uZHMuIFRoZSBkZWZhdWx0XG4gKiB2YWx1ZSBpcyA2MDAgc2Vjb25kcyAoMTAgbWludXRlcykuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGZvcmNlUmVzdGFydCBbdHJ1ZV0gLSBXaGV0aGVyIHRvIGlnbm9yZSB0aGUgY2FsbCBpZiBhIHNjcmVlbiByZWNvcmRpbmcgaXMgY3VycmVudGx5IHJ1bm5pbmdcbiAqIChgZmFsc2VgKSBvciB0byBzdGFydCBhIG5ldyByZWNvcmRpbmcgaW1tZWRpYXRlbHkgYW5kIHRlcm1pbmF0ZSB0aGUgZXhpc3Rpbmcgb25lIGlmIHJ1bm5pbmcgKGB0cnVlYCkuXG4gKi9cblxuLyoqXG4gKiBSZWNvcmQgdGhlIFNpbXVsYXRvcidzIGRpc3BsYXkgaW4gYmFja2dyb3VuZCB3aGlsZSB0aGUgYXV0b21hdGVkIHRlc3QgaXMgcnVubmluZy5cbiAqIFRoaXMgbWV0aG9kIHVzZXMgYHhjcnVuIHNpbWN0bCBpbyByZWNvcmRWaWRlb2AgaGVscGVyIHVuZGVyIHRoZSBob29kLlxuICogQ2hlY2sgdGhlIG91dHB1dCBvZiBgeGNydW4gc2ltY3RsIGlvYCBjb21tYW5kIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHBhcmFtIHs/U3RhcnRSZWNvcmRpbmdPcHRpb25zfSBvcHRpb25zIC0gVGhlIGF2YWlsYWJsZSBvcHRpb25zLlxuICogQHRocm93cyB7RXJyb3J9IElmIHNjcmVlbiByZWNvcmRpbmcgaGFzIGZhaWxlZCB0byBzdGFydCBvciBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGUgZGVzdGluYXRpb24gZGV2aWNlLlxuICovXG5jb21tYW5kcy5zdGFydFJlY29yZGluZ1NjcmVlbiA9IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0UmVjb3JkaW5nU2NyZWVuIChvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHRpbWVMaW1pdCxcbiAgICBjb2RlYyxcbiAgICBkaXNwbGF5LFxuICAgIG1hc2ssXG4gICAgZm9yY2VSZXN0YXJ0ID0gdHJ1ZSxcbiAgfSA9IG9wdGlvbnM7XG4gIGlmICh0aGlzLl9zY3JlZW5SZWNvcmRlcj8uaXNSdW5uaW5nKSB7XG4gICAgdGhpcy5sb2cuaW5mbygnVGhlIHNjcmVlbiByZWNvcmRpbmcgaXMgYWxyZWFkeSBydW5uaW5nJyk7XG4gICAgaWYgKCFmb3JjZVJlc3RhcnQpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ0RvaW5nIG5vdGhpbmcnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5sb2cuaW5mbygnRm9yY2luZyB0aGUgYWN0aXZlIHNjcmVlbiByZWNvcmRpbmcgdG8gc3RvcCcpO1xuICAgIGF3YWl0IHRoaXMuX3NjcmVlblJlY29yZGVyLnN0b3AodHJ1ZSk7XG4gIH1cbiAgdGhpcy5fc2NyZWVuUmVjb3JkZXIgPSBudWxsO1xuXG4gIGNvbnN0IHVkaWQgPSBhd2FpdCBleHRyYWN0U2ltdWxhdG9yVWRpZCh0aGlzLmNhcHMpO1xuICBpZiAoIXVkaWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBkZXRlcm1pbmUgU2ltdWxhdG9yIFVESUQgdG8gcmVjb3JkIHRoZSB2aWRlbyBmcm9tLiAnICtcbiAgICAgICdEb3VibGUgY2hlY2sgeW91ciBzZXNzaW9uIGNhcGFiaWxpdGllcycpO1xuICB9XG5cbiAgY29uc3QgdmlkZW9QYXRoID0gYXdhaXQgdGVtcERpci5wYXRoKHtcbiAgICBwcmVmaXg6IHV0aWwudXVpZFY0KCkuc3Vic3RyaW5nKDAsIDgpLFxuICAgIHN1ZmZpeDogREVGQVVMVF9FWFQsXG4gIH0pO1xuICB0aGlzLl9zY3JlZW5SZWNvcmRlciA9IG5ldyBTY3JlZW5SZWNvcmRlcih1ZGlkLCB2aWRlb1BhdGgsIHRoaXMubG9nLCB7XG4gICAgdGltZUxpbWl0OiBwYXJzZUludCh0aW1lTGltaXQsIDEwKSxcbiAgICBjb2RlYyxcbiAgICBkaXNwbGF5LFxuICAgIG1hc2ssXG4gIH0pO1xuICB0cnkge1xuICAgIGF3YWl0IHRoaXMuX3NjcmVlblJlY29yZGVyLnN0YXJ0KCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aGlzLl9zY3JlZW5SZWNvcmRlciA9IG51bGw7XG4gICAgdGhyb3cgZTtcbiAgfVxufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTdG9wUmVjb3JkaW5nT3B0aW9uc1xuICpcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gcmVtb3RlUGF0aCAtIFRoZSBwYXRoIHRvIHRoZSByZW1vdGUgbG9jYXRpb24sIHdoZXJlIHRoZSByZXN1bHRpbmcgdmlkZW8gc2hvdWxkIGJlIHVwbG9hZGVkLlxuICogVGhlIGZvbGxvd2luZyBwcm90b2NvbHMgYXJlIHN1cHBvcnRlZDogaHR0cC9odHRwcywgZnRwLlxuICogTnVsbCBvciBlbXB0eSBzdHJpbmcgdmFsdWUgKHRoZSBkZWZhdWx0IHNldHRpbmcpIG1lYW5zIHRoZSBjb250ZW50IG9mIHJlc3VsdGluZ1xuICogZmlsZSBzaG91bGQgYmUgZW5jb2RlZCBhcyBCYXNlNjQgYW5kIHBhc3NlZCBhcyB0aGUgZW5kcG9pbnQgcmVzcG9uc2UgdmFsdWUuXG4gKiBBbiBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24gaWYgdGhlIGdlbmVyYXRlZCBtZWRpYSBmaWxlIGlzIHRvbyBiaWcgdG9cbiAqIGZpdCBpbnRvIHRoZSBhdmFpbGFibGUgcHJvY2VzcyBtZW1vcnkuXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHVzZXIgLSBUaGUgbmFtZSBvZiB0aGUgdXNlciBmb3IgdGhlIHJlbW90ZSBhdXRoZW50aWNhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gcGFzcyAtIFRoZSBwYXNzd29yZCBmb3IgdGhlIHJlbW90ZSBhdXRoZW50aWNhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gbWV0aG9kIC0gVGhlIGh0dHAgbXVsdGlwYXJ0IHVwbG9hZCBtZXRob2QgbmFtZS4gVGhlICdQVVQnIG9uZSBpcyB1c2VkIGJ5IGRlZmF1bHQuXG4gKiBAcHJvcGVydHkgez9PYmplY3R9IGhlYWRlcnMgLSBBZGRpdGlvbmFsIGhlYWRlcnMgbWFwcGluZyBmb3IgbXVsdGlwYXJ0IGh0dHAocykgdXBsb2Fkc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBmaWxlRmllbGROYW1lIFtmaWxlXSAtIFRoZSBuYW1lIG9mIHRoZSBmb3JtIGZpZWxkLCB3aGVyZSB0aGUgZmlsZSBjb250ZW50IEJMT0Igc2hvdWxkIGJlIHN0b3JlZCBmb3JcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwKHMpIHVwbG9hZHNcbiAqIEBwcm9wZXJ0eSB7P09iamVjdHxBcnJheTxQYWlyPn0gZm9ybUZpZWxkcyAtIEFkZGl0aW9uYWwgZm9ybSBmaWVsZHMgZm9yIG11bHRpcGFydCBodHRwKHMpIHVwbG9hZHNcbiAqL1xuXG4vKipcbiAqIFN0b3AgcmVjb3JkaW5nIHRoZSBzY3JlZW4uXG4gKiBJZiBubyBzY3JlZW4gcmVjb3JkaW5nIGhhcyBiZWVuIHN0YXJ0ZWQgYmVmb3JlIHRoZW4gdGhlIG1ldGhvZCByZXR1cm5zIGFuIGVtcHR5IHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gez9TdG9wUmVjb3JkaW5nT3B0aW9uc30gb3B0aW9ucyAtIFRoZSBhdmFpbGFibGUgb3B0aW9ucy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEJhc2U2NC1lbmNvZGVkIGNvbnRlbnQgb2YgdGhlIHJlY29yZGVkIG1lZGlhIGZpbGUgaWYgJ3JlbW90ZVBhdGgnXG4gKiBwYXJhbWV0ZXIgaXMgZmFsc3kgb3IgYW4gZW1wdHkgc3RyaW5nLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBnZXR0aW5nIHRoZSBuYW1lIG9mIGEgbWVkaWEgZmlsZVxuICogb3IgdGhlIGZpbGUgY29udGVudCBjYW5ub3QgYmUgdXBsb2FkZWQgdG8gdGhlIHJlbW90ZSBsb2NhdGlvblxuICogb3Igc2NyZWVuIHJlY29yZGluZyBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC5cbiAqL1xuY29tbWFuZHMuc3RvcFJlY29yZGluZ1NjcmVlbiA9IGFzeW5jIGZ1bmN0aW9uIHN0b3BSZWNvcmRpbmdTY3JlZW4gKG9wdGlvbnMgPSB7fSkge1xuICBpZiAoIXRoaXMuX3NjcmVlblJlY29yZGVyKSB7XG4gICAgdGhpcy5sb2cuaW5mbygnTm8gc2NyZWVuIHJlY29yZGluZyBoYXMgYmVlbiBzdGFydGVkLiBEb2luZyBub3RoaW5nJyk7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgdGhpcy5sb2cuZGVidWcoJ1JldHJpZXZpbmcgdGhlIHJlc3VsdGluZyB2aWRlbyBkYXRhJyk7XG4gIGNvbnN0IHZpZGVvUGF0aCA9IGF3YWl0IHRoaXMuX3NjcmVlblJlY29yZGVyLnN0b3AoKTtcbiAgaWYgKCF2aWRlb1BhdGgpIHtcbiAgICB0aGlzLmxvZy5pbmZvKCdObyB2aWRlbyBkYXRhIGlzIGZvdW5kLiBSZXR1cm5pbmcgYW4gZW1wdHkgc3RyaW5nJyk7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGlmIChfLmlzRW1wdHkob3B0aW9ucy5yZW1vdGVQYXRoKSkge1xuICAgIGNvbnN0IHtzaXplfSA9IGF3YWl0IGZzLnN0YXQodmlkZW9QYXRoKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgVGhlIHNpemUgb2YgdGhlIHJlc3VsdGluZyBzY3JlZW4gcmVjb3JkaW5nIGlzICR7dXRpbC50b1JlYWRhYmxlU2l6ZVN0cmluZyhzaXplKX1gKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdXBsb2FkUmVjb3JkZWRNZWRpYSh2aWRlb1BhdGgsIG9wdGlvbnMucmVtb3RlUGF0aCwgb3B0aW9ucyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxRQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxTQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxXQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFHQSxNQUFNSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBRW5CLE1BQU1DLG1CQUFtQixHQUFHLEdBQUc7QUFDL0IsTUFBTUMsa0JBQWtCLEdBQUcsRUFBRSxHQUFHLElBQUk7QUFDcEMsTUFBTUMscUJBQXFCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJO0FBQzVDLE1BQU1DLDJCQUEyQixHQUFHLEVBQUUsR0FBRyxJQUFJO0FBQzdDLE1BQU1DLFdBQVcsR0FBRyxNQUFNO0FBRzFCLGVBQWVDLG1CQUFtQkEsQ0FBRUMsU0FBUyxFQUFFQyxVQUFVLEdBQUcsSUFBSSxFQUFFQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDcEYsSUFBSUMsZUFBQyxDQUFDQyxPQUFPLENBQUNILFVBQVUsQ0FBQyxFQUFFO0lBQ3pCLE9BQU8sQ0FBQyxNQUFNSSxhQUFJLENBQUNDLGdCQUFnQixDQUFDTixTQUFTLENBQUMsRUFBRU8sUUFBUSxDQUFDLENBQUM7RUFDNUQ7RUFFQSxNQUFNO0lBQUNDLElBQUk7SUFBRUMsSUFBSTtJQUFFQyxNQUFNO0lBQUVDLE9BQU87SUFBRUMsYUFBYTtJQUFFQztFQUFVLENBQUMsR0FBR1gsYUFBYTtFQUM5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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record-screen.js","names":["_lodash","_interopRequireDefault","require","_support","_asyncbox","_nodeSimctl","commands","STARTUP_INTERVAL_MS","STARTUP_TIMEOUT_MS","DEFAULT_TIME_LIMIT_MS","PROCESS_SHUTDOWN_TIMEOUT_MS","DEFAULT_EXT","uploadRecordedMedia","localFile","remotePath","uploadOptions","_","isEmpty","util","toInMemoryBase64","toString","user","pass","method","headers","fileFieldName","formFields","options","auth","net","uploadFile","VIDEO_FILES","Set","process","on","videoFile","fs","rimrafSync","ign","ScreenRecorder","constructor","udid","videoPath","log","opts","_process","_udid","_videoPath","_codec","codec","_display","display","_mask","mask","_timeLimitMs","timeLimit","_timer","getVideoPath","exists","add","isRunning","_this$_process","_enforceTermination","debug","stop","rimraf","delete","start","args","push","Simctl","exec","asynchronous","quote","stdout","stderr","line","trim","substring","once","code","signal","warn","waitForCondition","Error","waitMs","intervalMs","e","errorAndThrow","setTimeout","error","info","force","clearTimeout","extractSimulatorUdid","caps","allDevices","flatMap","values","getDevices","name","state","sdk","toLower","startRecordingScreen","_this$_screenRecorder","forceRestart","_screenRecorder","tempDir","path","prefix","uuidV4","suffix","parseInt","stopRecordingScreen","size","stat","toReadableSizeString","_default","exports","default"],"sources":["../../../lib/commands/record-screen.js"],"sourcesContent":["import _ from 'lodash';\nimport { util, fs, net, tempDir } from 'appium/support';\nimport { waitForCondition } from 'asyncbox';\nimport Simctl from 'node-simctl';\n\n\nconst commands = {};\n\nconst STARTUP_INTERVAL_MS = 300;\nconst STARTUP_TIMEOUT_MS = 10 * 1000;\nconst DEFAULT_TIME_LIMIT_MS = 60 * 10 * 1000; // 10 minutes\nconst PROCESS_SHUTDOWN_TIMEOUT_MS = 10 * 1000;\nconst DEFAULT_EXT = '.mp4';\n\n\nasync function uploadRecordedMedia (localFile, remotePath = null, uploadOptions = {}) {\n if (_.isEmpty(remotePath)) {\n return (await util.toInMemoryBase64(localFile)).toString();\n }\n\n const {user, pass, method, headers, fileFieldName, formFields} = uploadOptions;\n const options = {\n method: method || 'PUT',\n headers,\n fileFieldName,\n formFields,\n };\n if (user && pass) {\n options.auth = {user, pass};\n }\n await net.uploadFile(localFile, remotePath, options);\n return '';\n}\n\nconst VIDEO_FILES = new Set();\nprocess.on('exit', () => {\n for (const videoFile of VIDEO_FILES) {\n try {\n fs.rimrafSync(videoFile);\n } catch (ign) {}\n }\n});\n\nclass ScreenRecorder {\n constructor (udid, videoPath, log, opts = {}) {\n this.log = log;\n this._process = null;\n this._udid = udid;\n this._videoPath = videoPath;\n this._codec = opts.codec;\n this._display = opts.display;\n this._mask = opts.mask;\n this._timeLimitMs = opts.timeLimit > 0 ? opts.timeLimit * 1000 : DEFAULT_TIME_LIMIT_MS;\n this._timer = null;\n }\n\n async getVideoPath () {\n if (await fs.exists(this._videoPath)) {\n VIDEO_FILES.add(this._videoPath);\n return this._videoPath;\n }\n return '';\n }\n\n get isRunning () {\n return !!(this._process?.isRunning);\n }\n\n async _enforceTermination () {\n if (this.isRunning) {\n this.log.debug('Force-stopping the currently running video recording');\n try {\n await this._process.stop('SIGKILL');\n } catch (ign) {}\n }\n this._process = null;\n const videoPath = await this.getVideoPath();\n if (videoPath) {\n await fs.rimraf(videoPath);\n VIDEO_FILES.delete(videoPath);\n }\n return '';\n }\n\n async start () {\n const args = [\n this._udid, 'recordVideo'\n ];\n if (this._display) {\n args.push('--display', this._display);\n }\n if (this._codec) {\n args.push('--codec', this._codec);\n }\n if (this._mask) {\n args.push('--mask', this._mask);\n }\n args.push('--force', this._videoPath);\n this._process = await new Simctl().exec('io', {\n args,\n asynchronous: true,\n });\n this.log.debug(`Starting video recording with arguments: ${util.quote(args)}`);\n this._process.on('output', (stdout, stderr) => {\n const line = _.trim(stdout || stderr);\n if (line) {\n this.log.debug(`[recordVideo@${this._udid.substring(0, 8)}] ${line}`);\n }\n });\n this._process.once('exit', async (code, signal) => {\n this._process = null;\n if (code === 0) {\n this.log.debug('Screen recording exited without errors');\n } else {\n await this._enforceTermination();\n this.log.warn(`Screen recording exited with error code ${code}, signal ${signal}`);\n }\n });\n await this._process.start(0);\n try {\n await waitForCondition(async () => {\n if (!this.isRunning) {\n throw new Error();\n }\n return !!(await this.getVideoPath());\n }, {\n waitMs: STARTUP_TIMEOUT_MS,\n intervalMs: STARTUP_INTERVAL_MS,\n });\n } catch (e) {\n await this._enforceTermination();\n this.log.errorAndThrow(`The expected screen record file '${this._videoPath}' does not exist after ${STARTUP_TIMEOUT_MS}ms. ` +\n `Check the server log for more details`);\n }\n this._timer = setTimeout(async () => {\n if (this.isRunning) {\n try {\n await this.stop();\n } catch (e) {\n this.log.error(e);\n }\n }\n }, this._timeLimitMs);\n this.log.info(`The video recording has started. Will timeout in ${this._timeLimitMs}ms`);\n }\n\n async stop (force = false) {\n if (this._timer) {\n clearTimeout(this._timer);\n this._timer = null;\n }\n\n if (force) {\n return await this._enforceTermination();\n }\n\n if (!this.isRunning) {\n this.log.debug('Screen recording is not running. Returning the recently recorded video');\n return await this.getVideoPath();\n }\n\n try {\n await this._process.stop('SIGINT', PROCESS_SHUTDOWN_TIMEOUT_MS);\n } catch (e) {\n await this._enforceTermination();\n throw new Error(`Screen recording has failed to stop after ${PROCESS_SHUTDOWN_TIMEOUT_MS}ms`);\n }\n\n return await this.getVideoPath();\n }\n}\n\nasync function extractSimulatorUdid (caps) {\n if (caps['safari:useSimulator'] === false) {\n return null;\n }\n\n const allDevices = _.flatMap(_.values(await new Simctl().getDevices(null, 'iOS')));\n for (const {name, udid, state, sdk} of allDevices) {\n if (state !== 'Booted') {\n continue;\n }\n\n if (_.toLower(caps['safari:deviceUDID']) === _.toLower(udid)) {\n return udid;\n }\n if (_.toLower(caps['safari:deviceName']) === _.toLower(name) &&\n (caps['safari:platformVersion'] && caps['safari:platformVersion'] === sdk\n || !caps['safari:platformVersion'])) {\n return udid;\n }\n }\n\n return null;\n}\n\n\n/**\n * @typedef {Object} StartRecordingOptions\n *\n * @property {?string} codec [hevc] - Specifies the codec type: \"h264\" or \"hevc\"\n * @property {?string} display [internal] - Supports \"internal\" or \"external\". Default is \"internal\"\n * @property {?string} mask - For non-rectangular displays, handle the mask by policy:\n * - ignored: The mask is ignored and the unmasked framebuffer is saved.\n * - alpha: Not supported, but retained for compatibility; the mask is rendered black.\n * - black: The mask is rendered black.\n * @property {string|number} timeLimit [600] - The maximum recording time, in seconds. The default\n * value is 600 seconds (10 minutes).\n * @property {boolean} forceRestart [true] - Whether to ignore the call if a screen recording is currently running\n * (`false`) or to start a new recording immediately and terminate the existing one if running (`true`).\n */\n\n/**\n * Record the Simulator's display in background while the automated test is running.\n * This method uses `xcrun simctl io recordVideo` helper under the hood.\n * Check the output of `xcrun simctl io` command for more details.\n *\n * @param {?StartRecordingOptions} options - The available options.\n * @throws {Error} If screen recording has failed to start or is not supported for the destination device.\n */\ncommands.startRecordingScreen = async function startRecordingScreen (options = {}) {\n const {\n timeLimit,\n codec,\n display,\n mask,\n forceRestart = true,\n } = options;\n if (this._screenRecorder?.isRunning) {\n this.log.info('The screen recording is already running');\n if (!forceRestart) {\n this.log.info('Doing nothing');\n return;\n }\n this.log.info('Forcing the active screen recording to stop');\n await this._screenRecorder.stop(true);\n }\n this._screenRecorder = null;\n\n const udid = await extractSimulatorUdid(this.caps);\n if (!udid) {\n throw new Error('Cannot determine Simulator UDID to record the video from. ' +\n 'Double check your session capabilities');\n }\n\n const videoPath = await tempDir.path({\n prefix: util.uuidV4().substring(0, 8),\n suffix: DEFAULT_EXT,\n });\n this._screenRecorder = new ScreenRecorder(udid, videoPath, this.log, {\n timeLimit: parseInt(timeLimit, 10),\n codec,\n display,\n mask,\n });\n try {\n await this._screenRecorder.start();\n } catch (e) {\n this._screenRecorder = null;\n throw e;\n }\n};\n\n/**\n * @typedef {Object} StopRecordingOptions\n *\n * @property {?string} remotePath - The path to the remote location, where the resulting video should be uploaded.\n * The following protocols are supported: http/https, ftp.\n * Null or empty string value (the default setting) means the content of resulting\n * file should be encoded as Base64 and passed as the endpoint response value.\n * An exception will be thrown if the generated media file is too big to\n * fit into the available process memory.\n * @property {?string} user - The name of the user for the remote authentication.\n * @property {?string} pass - The password for the remote authentication.\n * @property {?string} method - The http multipart upload method name. The 'PUT' one is used by default.\n * @property {?Object} headers - Additional headers mapping for multipart http(s) uploads\n * @property {?string} fileFieldName [file] - The name of the form field, where the file content BLOB should be stored for\n * http(s) uploads\n * @property {?Object|Array<Pair>} formFields - Additional form fields for multipart http(s) uploads\n */\n\n/**\n * Stop recording the screen.\n * If no screen recording has been started before then the method returns an empty string.\n *\n * @param {?StopRecordingOptions} options - The available options.\n * @returns {string} Base64-encoded content of the recorded media file if 'remotePath'\n * parameter is falsy or an empty string.\n * @throws {Error} If there was an error while getting the name of a media file\n * or the file content cannot be uploaded to the remote location\n * or screen recording is not supported on the device under test.\n */\ncommands.stopRecordingScreen = async function stopRecordingScreen (options = {}) {\n if (!this._screenRecorder) {\n this.log.info('No screen recording has been started. Doing nothing');\n return '';\n }\n\n this.log.debug('Retrieving the resulting video data');\n const videoPath = await this._screenRecorder.stop();\n if (!videoPath) {\n this.log.info('No video data is found. Returning an empty string');\n return '';\n }\n if (_.isEmpty(options.remotePath)) {\n const {size} = await fs.stat(videoPath);\n this.log.debug(`The size of the resulting screen recording is ${util.toReadableSizeString(size)}`);\n }\n return await uploadRecordedMedia(videoPath, options.remotePath, options);\n};\n\nexport default commands;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"record-screen.js","names":["_lodash","_interopRequireDefault","require","_support","_asyncbox","_nodeSimctl","commands","STARTUP_INTERVAL_MS","STARTUP_TIMEOUT_MS","DEFAULT_TIME_LIMIT_MS","PROCESS_SHUTDOWN_TIMEOUT_MS","DEFAULT_EXT","uploadRecordedMedia","localFile","remotePath","uploadOptions","_","isEmpty","util","toInMemoryBase64","toString","user","pass","method","headers","fileFieldName","formFields","options","auth","net","uploadFile","VIDEO_FILES","Set","process","on","videoFile","fs","rimrafSync","ign","ScreenRecorder","constructor","udid","videoPath","log","opts","_process","_udid","_videoPath","_codec","codec","_display","display","_mask","mask","_timeLimitMs","timeLimit","_timer","getVideoPath","exists","add","isRunning","_this$_process","_enforceTermination","debug","stop","rimraf","delete","start","args","push","Simctl","exec","asynchronous","quote","stdout","stderr","line","trim","substring","once","code","signal","warn","waitForCondition","Error","waitMs","intervalMs","e","errorAndThrow","setTimeout","error","info","force","clearTimeout","extractSimulatorUdid","caps","allDevices","flatMap","values","getDevices","name","state","sdk","toLower","startRecordingScreen","_this$_screenRecorder","forceRestart","_screenRecorder","tempDir","path","prefix","uuidV4","suffix","parseInt","stopRecordingScreen","size","stat","toReadableSizeString","_default","exports","default"],"sources":["../../../lib/commands/record-screen.js"],"sourcesContent":["import _ from 'lodash';\nimport { util, fs, net, tempDir } from 'appium/support';\nimport { waitForCondition } from 'asyncbox';\nimport Simctl from 'node-simctl';\n\n\nconst commands = {};\n\nconst STARTUP_INTERVAL_MS = 300;\nconst STARTUP_TIMEOUT_MS = 10 * 1000;\nconst DEFAULT_TIME_LIMIT_MS = 60 * 10 * 1000; // 10 minutes\nconst PROCESS_SHUTDOWN_TIMEOUT_MS = 10 * 1000;\nconst DEFAULT_EXT = '.mp4';\n\n\nasync function uploadRecordedMedia (localFile, remotePath = null, uploadOptions = {}) {\n if (_.isEmpty(remotePath)) {\n return (await util.toInMemoryBase64(localFile)).toString();\n }\n\n const {user, pass, method, headers, fileFieldName, formFields} = uploadOptions;\n const options = {\n method: method || 'PUT',\n headers,\n fileFieldName,\n formFields,\n };\n if (user && pass) {\n options.auth = {user, pass};\n }\n await net.uploadFile(localFile, remotePath, options);\n return '';\n}\n\nconst VIDEO_FILES = new Set();\nprocess.on('exit', () => {\n for (const videoFile of VIDEO_FILES) {\n try {\n fs.rimrafSync(videoFile);\n } catch (ign) {}\n }\n});\n\nclass ScreenRecorder {\n constructor (udid, videoPath, log, opts = {}) {\n this.log = log;\n this._process = null;\n this._udid = udid;\n this._videoPath = videoPath;\n this._codec = opts.codec;\n this._display = opts.display;\n this._mask = opts.mask;\n this._timeLimitMs = opts.timeLimit > 0 ? opts.timeLimit * 1000 : DEFAULT_TIME_LIMIT_MS;\n this._timer = null;\n }\n\n async getVideoPath () {\n if (await fs.exists(this._videoPath)) {\n VIDEO_FILES.add(this._videoPath);\n return this._videoPath;\n }\n return '';\n }\n\n get isRunning () {\n return !!(this._process?.isRunning);\n }\n\n async _enforceTermination () {\n if (this.isRunning) {\n this.log.debug('Force-stopping the currently running video recording');\n try {\n await this._process.stop('SIGKILL');\n } catch (ign) {}\n }\n this._process = null;\n const videoPath = await this.getVideoPath();\n if (videoPath) {\n await fs.rimraf(videoPath);\n VIDEO_FILES.delete(videoPath);\n }\n return '';\n }\n\n async start () {\n const args = [\n this._udid, 'recordVideo'\n ];\n if (this._display) {\n args.push('--display', this._display);\n }\n if (this._codec) {\n args.push('--codec', this._codec);\n }\n if (this._mask) {\n args.push('--mask', this._mask);\n }\n args.push('--force', this._videoPath);\n this._process = await new Simctl().exec('io', {\n args,\n asynchronous: true,\n });\n this.log.debug(`Starting video recording with arguments: ${util.quote(args)}`);\n this._process.on('output', (stdout, stderr) => {\n const line = _.trim(stdout || stderr);\n if (line) {\n this.log.debug(`[recordVideo@${this._udid.substring(0, 8)}] ${line}`);\n }\n });\n this._process.once('exit', async (code, signal) => {\n this._process = null;\n if (code === 0) {\n this.log.debug('Screen recording exited without errors');\n } else {\n await this._enforceTermination();\n this.log.warn(`Screen recording exited with error code ${code}, signal ${signal}`);\n }\n });\n await this._process.start(0);\n try {\n await waitForCondition(async () => {\n if (!this.isRunning) {\n throw new Error();\n }\n return !!(await this.getVideoPath());\n }, {\n waitMs: STARTUP_TIMEOUT_MS,\n intervalMs: STARTUP_INTERVAL_MS,\n });\n } catch (e) {\n await this._enforceTermination();\n this.log.errorAndThrow(`The expected screen record file '${this._videoPath}' does not exist after ${STARTUP_TIMEOUT_MS}ms. ` +\n `Check the server log for more details`);\n }\n this._timer = setTimeout(async () => {\n if (this.isRunning) {\n try {\n await this.stop();\n } catch (e) {\n this.log.error(e);\n }\n }\n }, this._timeLimitMs);\n this.log.info(`The video recording has started. Will timeout in ${this._timeLimitMs}ms`);\n }\n\n async stop (force = false) {\n if (this._timer) {\n clearTimeout(this._timer);\n this._timer = null;\n }\n\n if (force) {\n return await this._enforceTermination();\n }\n\n if (!this.isRunning) {\n this.log.debug('Screen recording is not running. Returning the recently recorded video');\n return await this.getVideoPath();\n }\n\n try {\n await this._process.stop('SIGINT', PROCESS_SHUTDOWN_TIMEOUT_MS);\n } catch (e) {\n await this._enforceTermination();\n throw new Error(`Screen recording has failed to stop after ${PROCESS_SHUTDOWN_TIMEOUT_MS}ms`);\n }\n\n return await this.getVideoPath();\n }\n}\n\nasync function extractSimulatorUdid (caps) {\n if (caps['safari:useSimulator'] === false) {\n return null;\n }\n\n const allDevices = _.flatMap(_.values(await new Simctl().getDevices(null, 'iOS')));\n for (const {name, udid, state, sdk} of allDevices) {\n if (state !== 'Booted') {\n continue;\n }\n\n if (_.toLower(caps['safari:deviceUDID']) === _.toLower(udid)) {\n return udid;\n }\n if (_.toLower(caps['safari:deviceName']) === _.toLower(name) &&\n (caps['safari:platformVersion'] && caps['safari:platformVersion'] === sdk\n || !caps['safari:platformVersion'])) {\n return udid;\n }\n }\n\n return null;\n}\n\n\n/**\n * @typedef {Object} StartRecordingOptions\n *\n * @property {?string} codec [hevc] - Specifies the codec type: \"h264\" or \"hevc\"\n * @property {?string} display [internal] - Supports \"internal\" or \"external\". Default is \"internal\"\n * @property {?string} mask - For non-rectangular displays, handle the mask by policy:\n * - ignored: The mask is ignored and the unmasked framebuffer is saved.\n * - alpha: Not supported, but retained for compatibility; the mask is rendered black.\n * - black: The mask is rendered black.\n * @property {string|number} timeLimit [600] - The maximum recording time, in seconds. The default\n * value is 600 seconds (10 minutes).\n * @property {boolean} forceRestart [true] - Whether to ignore the call if a screen recording is currently running\n * (`false`) or to start a new recording immediately and terminate the existing one if running (`true`).\n */\n\n/**\n * Record the Simulator's display in background while the automated test is running.\n * This method uses `xcrun simctl io recordVideo` helper under the hood.\n * Check the output of `xcrun simctl io` command for more details.\n *\n * @param {?StartRecordingOptions} options - The available options.\n * @throws {Error} If screen recording has failed to start or is not supported for the destination device.\n */\ncommands.startRecordingScreen = async function startRecordingScreen (options = {}) {\n const {\n timeLimit,\n codec,\n display,\n mask,\n forceRestart = true,\n } = options;\n if (this._screenRecorder?.isRunning) {\n this.log.info('The screen recording is already running');\n if (!forceRestart) {\n this.log.info('Doing nothing');\n return;\n }\n this.log.info('Forcing the active screen recording to stop');\n await this._screenRecorder.stop(true);\n }\n this._screenRecorder = null;\n\n const udid = await extractSimulatorUdid(this.caps);\n if (!udid) {\n throw new Error('Cannot determine Simulator UDID to record the video from. ' +\n 'Double check your session capabilities');\n }\n\n const videoPath = await tempDir.path({\n prefix: util.uuidV4().substring(0, 8),\n suffix: DEFAULT_EXT,\n });\n this._screenRecorder = new ScreenRecorder(udid, videoPath, this.log, {\n timeLimit: parseInt(timeLimit, 10),\n codec,\n display,\n mask,\n });\n try {\n await this._screenRecorder.start();\n } catch (e) {\n this._screenRecorder = null;\n throw e;\n }\n};\n\n/**\n * @typedef {Object} StopRecordingOptions\n *\n * @property {?string} remotePath - The path to the remote location, where the resulting video should be uploaded.\n * The following protocols are supported: http/https, ftp.\n * Null or empty string value (the default setting) means the content of resulting\n * file should be encoded as Base64 and passed as the endpoint response value.\n * An exception will be thrown if the generated media file is too big to\n * fit into the available process memory.\n * @property {?string} user - The name of the user for the remote authentication.\n * @property {?string} pass - The password for the remote authentication.\n * @property {?string} method - The http multipart upload method name. The 'PUT' one is used by default.\n * @property {?Object} headers - Additional headers mapping for multipart http(s) uploads\n * @property {?string} fileFieldName [file] - The name of the form field, where the file content BLOB should be stored for\n * http(s) uploads\n * @property {?Object|Array<Pair>} formFields - Additional form fields for multipart http(s) uploads\n */\n\n/**\n * Stop recording the screen.\n * If no screen recording has been started before then the method returns an empty string.\n *\n * @param {?StopRecordingOptions} options - The available options.\n * @returns {string} Base64-encoded content of the recorded media file if 'remotePath'\n * parameter is falsy or an empty string.\n * @throws {Error} If there was an error while getting the name of a media file\n * or the file content cannot be uploaded to the remote location\n * or screen recording is not supported on the device under test.\n */\ncommands.stopRecordingScreen = async function stopRecordingScreen (options = {}) {\n if (!this._screenRecorder) {\n this.log.info('No screen recording has been started. Doing nothing');\n return '';\n }\n\n this.log.debug('Retrieving the resulting video data');\n const videoPath = await this._screenRecorder.stop();\n if (!videoPath) {\n this.log.info('No video data is found. Returning an empty string');\n return '';\n }\n if (_.isEmpty(options.remotePath)) {\n const {size} = await fs.stat(videoPath);\n this.log.debug(`The size of the resulting screen recording is ${util.toReadableSizeString(size)}`);\n }\n return await uploadRecordedMedia(videoPath, options.remotePath, options);\n};\n\nexport default commands;\n"],"mappings":"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"}
|
|
@@ -12,6 +12,9 @@ const desiredCapConstraints = {
|
|
|
12
12
|
browserVersion: {
|
|
13
13
|
isString: true
|
|
14
14
|
},
|
|
15
|
+
acceptInsecureCerts: {
|
|
16
|
+
isBoolean: true
|
|
17
|
+
},
|
|
15
18
|
'safari:platformVersion': {
|
|
16
19
|
isString: true
|
|
17
20
|
},
|
|
@@ -41,4 +44,4 @@ const desiredCapConstraints = {
|
|
|
41
44
|
}
|
|
42
45
|
};
|
|
43
46
|
exports.desiredCapConstraints = desiredCapConstraints;
|
|
44
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
47
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJicm93c2VyTmFtZSIsImlzU3RyaW5nIiwiYnJvd3NlclZlcnNpb24iLCJhY2NlcHRJbnNlY3VyZUNlcnRzIiwiaXNCb29sZWFuIiwiaXNPYmplY3QiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2Rlc2lyZWQtY2Fwcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBkZXNpcmVkQ2FwQ29uc3RyYWludHMgPSB7XG4gIGJyb3dzZXJOYW1lOiB7XG4gICAgaXNTdHJpbmc6IHRydWUsXG4gIH0sXG4gIGJyb3dzZXJWZXJzaW9uOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgYWNjZXB0SW5zZWN1cmVDZXJ0czoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICAnc2FmYXJpOnBsYXRmb3JtVmVyc2lvbic6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICAnc2FmYXJpOnBsYXRmb3JtQnVpbGRWZXJzaW9uJzoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gICdzYWZhcmk6dXNlU2ltdWxhdG9yJzoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICAnc2FmYXJpOmRldmljZVR5cGUnOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgJ3NhZmFyaTpkZXZpY2VOYW1lJzoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gICdzYWZhcmk6ZGV2aWNlVURJRCc6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICAnc2FmYXJpOmF1dG9tYXRpY0luc3BlY3Rpb24nOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gICdzYWZhcmk6YXV0b21hdGljUHJvZmlsaW5nJzoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICAnd2Via2l0OldlYlJUQyc6IHtcbiAgICBpc09iamVjdDogdHJ1ZVxuICB9LFxufTtcblxuZXhwb3J0IHsgZGVzaXJlZENhcENvbnN0cmFpbnRzIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxNQUFNQSxxQkFBcUIsR0FBRztFQUM1QkMsV0FBVyxFQUFFO0lBQ1hDLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREMsY0FBYyxFQUFFO0lBQ2RELFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREUsbUJBQW1CLEVBQUU7SUFDbkJDLFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRCx3QkFBd0IsRUFBRTtJQUN4QkgsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNELDZCQUE2QixFQUFFO0lBQzdCQSxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0QscUJBQXFCLEVBQUU7SUFDckJHLFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRCxtQkFBbUIsRUFBRTtJQUNuQkgsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNELG1CQUFtQixFQUFFO0lBQ25CQSxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0QsbUJBQW1CLEVBQUU7SUFDbkJBLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRCw0QkFBNEIsRUFBRTtJQUM1QkcsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNELDJCQUEyQixFQUFFO0lBQzNCQSxTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0QsZUFBZSxFQUFFO0lBQ2ZDLFFBQVEsRUFBRTtFQUNaO0FBQ0YsQ0FBQztBQUFDQyxPQUFBLENBQUFQLHFCQUFBLEdBQUFBLHFCQUFBIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"desired-caps.js","names":["desiredCapConstraints","browserName","isString","browserVersion","isBoolean","isObject","exports"],"sources":["../../lib/desired-caps.js"],"sourcesContent":["const desiredCapConstraints = {\n browserName: {\n isString: true,\n },\n browserVersion: {\n isString: true\n },\n 'safari:platformVersion': {\n isString: true\n },\n 'safari:platformBuildVersion': {\n isString: true\n },\n 'safari:useSimulator': {\n isBoolean: true\n },\n 'safari:deviceType': {\n isString: true\n },\n 'safari:deviceName': {\n isString: true\n },\n 'safari:deviceUDID': {\n isString: true\n },\n 'safari:automaticInspection': {\n isBoolean: true\n },\n 'safari:automaticProfiling': {\n isBoolean: true\n },\n 'webkit:WebRTC': {\n isObject: true\n },\n};\n\nexport { desiredCapConstraints };\n"],"mappings":";;;;;;;AAAA,MAAMA,qBAAqB,GAAG;EAC5BC,WAAW,EAAE;IACXC,QAAQ,EAAE;EACZ,CAAC;EACDC,cAAc,EAAE;IACdD,QAAQ,EAAE;EACZ,CAAC;EACD,wBAAwB,EAAE;
|
|
1
|
+
{"version":3,"file":"desired-caps.js","names":["desiredCapConstraints","browserName","isString","browserVersion","acceptInsecureCerts","isBoolean","isObject","exports"],"sources":["../../lib/desired-caps.js"],"sourcesContent":["const desiredCapConstraints = {\n browserName: {\n isString: true,\n },\n browserVersion: {\n isString: true\n },\n acceptInsecureCerts: {\n isBoolean: true\n },\n 'safari:platformVersion': {\n isString: true\n },\n 'safari:platformBuildVersion': {\n isString: true\n },\n 'safari:useSimulator': {\n isBoolean: true\n },\n 'safari:deviceType': {\n isString: true\n },\n 'safari:deviceName': {\n isString: true\n },\n 'safari:deviceUDID': {\n isString: true\n },\n 'safari:automaticInspection': {\n isBoolean: true\n },\n 'safari:automaticProfiling': {\n isBoolean: true\n },\n 'webkit:WebRTC': {\n isObject: true\n },\n};\n\nexport { desiredCapConstraints };\n"],"mappings":";;;;;;;AAAA,MAAMA,qBAAqB,GAAG;EAC5BC,WAAW,EAAE;IACXC,QAAQ,EAAE;EACZ,CAAC;EACDC,cAAc,EAAE;IACdD,QAAQ,EAAE;EACZ,CAAC;EACDE,mBAAmB,EAAE;IACnBC,SAAS,EAAE;EACb,CAAC;EACD,wBAAwB,EAAE;IACxBH,QAAQ,EAAE;EACZ,CAAC;EACD,6BAA6B,EAAE;IAC7BA,QAAQ,EAAE;EACZ,CAAC;EACD,qBAAqB,EAAE;IACrBG,SAAS,EAAE;EACb,CAAC;EACD,mBAAmB,EAAE;IACnBH,QAAQ,EAAE;EACZ,CAAC;EACD,mBAAmB,EAAE;IACnBA,QAAQ,EAAE;EACZ,CAAC;EACD,mBAAmB,EAAE;IACnBA,QAAQ,EAAE;EACZ,CAAC;EACD,4BAA4B,EAAE;IAC5BG,SAAS,EAAE;EACb,CAAC;EACD,2BAA2B,EAAE;IAC3BA,SAAS,EAAE;EACb,CAAC;EACD,eAAe,EAAE;IACfC,QAAQ,EAAE;EACZ;AACF,CAAC;AAACC,OAAA,CAAAP,qBAAA,GAAAA,qBAAA"}
|
package/build/lib/driver.js
CHANGED
|
@@ -64,4 +64,4 @@ class SafariDriver extends _driver.BaseDriver {
|
|
|
64
64
|
}
|
|
65
65
|
var _default = SafariDriver;
|
|
66
66
|
exports.default = _default;
|
|
67
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZHJpdmVyIiwiX3NhZmFyaSIsIl9kZXNpcmVkQ2FwcyIsIl9pbmRleCIsIl91dGlscyIsIl9tZXRob2RNYXAiLCJOT19QUk9YWSIsIlJlZ0V4cCIsIlNhZmFyaURyaXZlciIsIkJhc2VEcml2ZXIiLCJuZXdNZXRob2RNYXAiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJsb2NhdG9yU3RyYXRlZ2llcyIsInJlc2V0U3RhdGUiLCJjbWQiLCJmbiIsIl8iLCJ0b1BhaXJzIiwiY29tbWFuZHMiLCJwcm90b3R5cGUiLCJzYWZhcmkiLCJwcm94eVJlcVJlcyIsImlzUHJveHlBY3RpdmUiLCJfc2NyZWVuUmVjb3JkZXIiLCJwcm94eUFjdGl2ZSIsImdldFByb3h5QXZvaWRMaXN0IiwiY2FuUHJveHkiLCJjcmVhdGVTZXNzaW9uIiwiYXJncyIsInNlc3Npb25JZCIsImNhcHMiLCJTYWZhcmlEcml2ZXJTZXJ2ZXIiLCJsb2ciLCJzdGFydCIsImZvcm1hdENhcHNGb3JTZXJ2ZXIiLCJlIiwiZGVsZXRlU2Vzc2lvbiIsInByb3h5IiwiYmluZCIsIl90aGlzJF9zY3JlZW5SZWNvcmRlciIsIl90aGlzJHNhZmFyaSIsImluZm8iLCJzdG9wIiwiX2RlZmF1bHQiLCJleHBvcnRzIiwiZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9kcml2ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEJhc2VEcml2ZXIgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCBTYWZhcmlEcml2ZXJTZXJ2ZXIgZnJvbSAnLi9zYWZhcmknO1xuaW1wb3J0IHsgZGVzaXJlZENhcENvbnN0cmFpbnRzIH0gZnJvbSAnLi9kZXNpcmVkLWNhcHMnO1xuaW1wb3J0IGNvbW1hbmRzIGZyb20gJy4vY29tbWFuZHMvaW5kZXgnO1xuaW1wb3J0IHsgZm9ybWF0Q2Fwc0ZvclNlcnZlciB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgbmV3TWV0aG9kTWFwIH0gZnJvbSAnLi9tZXRob2QtbWFwJztcblxuY29uc3QgTk9fUFJPWFkgPSBbXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQvW14vXSsvZWxlbWVudHM/
|
|
67
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZHJpdmVyIiwiX3NhZmFyaSIsIl9kZXNpcmVkQ2FwcyIsIl9pbmRleCIsIl91dGlscyIsIl9tZXRob2RNYXAiLCJOT19QUk9YWSIsIlJlZ0V4cCIsIlNhZmFyaURyaXZlciIsIkJhc2VEcml2ZXIiLCJuZXdNZXRob2RNYXAiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJsb2NhdG9yU3RyYXRlZ2llcyIsInJlc2V0U3RhdGUiLCJjbWQiLCJmbiIsIl8iLCJ0b1BhaXJzIiwiY29tbWFuZHMiLCJwcm90b3R5cGUiLCJzYWZhcmkiLCJwcm94eVJlcVJlcyIsImlzUHJveHlBY3RpdmUiLCJfc2NyZWVuUmVjb3JkZXIiLCJwcm94eUFjdGl2ZSIsImdldFByb3h5QXZvaWRMaXN0IiwiY2FuUHJveHkiLCJjcmVhdGVTZXNzaW9uIiwiYXJncyIsInNlc3Npb25JZCIsImNhcHMiLCJTYWZhcmlEcml2ZXJTZXJ2ZXIiLCJsb2ciLCJzdGFydCIsImZvcm1hdENhcHNGb3JTZXJ2ZXIiLCJlIiwiZGVsZXRlU2Vzc2lvbiIsInByb3h5IiwiYmluZCIsIl90aGlzJF9zY3JlZW5SZWNvcmRlciIsIl90aGlzJHNhZmFyaSIsImluZm8iLCJzdG9wIiwiX2RlZmF1bHQiLCJleHBvcnRzIiwiZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9kcml2ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEJhc2VEcml2ZXIgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCBTYWZhcmlEcml2ZXJTZXJ2ZXIgZnJvbSAnLi9zYWZhcmknO1xuaW1wb3J0IHsgZGVzaXJlZENhcENvbnN0cmFpbnRzIH0gZnJvbSAnLi9kZXNpcmVkLWNhcHMnO1xuaW1wb3J0IGNvbW1hbmRzIGZyb20gJy4vY29tbWFuZHMvaW5kZXgnO1xuaW1wb3J0IHsgZm9ybWF0Q2Fwc0ZvclNlcnZlciB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgbmV3TWV0aG9kTWFwIH0gZnJvbSAnLi9tZXRob2QtbWFwJztcblxuY29uc3QgTk9fUFJPWFkgPSBbXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQvW14vXSsvZWxlbWVudHM/JCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnRzPyQnKV0sXG5cbiAgWydERUxFVEUnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvY29va2llJCcpXSxcbl07XG5cbmNsYXNzIFNhZmFyaURyaXZlciBleHRlbmRzIEJhc2VEcml2ZXIge1xuXG4gIHN0YXRpYyBuZXdNZXRob2RNYXAgPSBuZXdNZXRob2RNYXA7XG5cbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICAgIHRoaXMuZGVzaXJlZENhcENvbnN0cmFpbnRzID0gZGVzaXJlZENhcENvbnN0cmFpbnRzO1xuICAgIHRoaXMubG9jYXRvclN0cmF0ZWdpZXMgPSBbXG4gICAgICAneHBhdGgnLFxuICAgICAgJ3RhZyBuYW1lJyxcbiAgICAgICdsaW5rIHRleHQnLFxuICAgICAgJ3BhcnRpYWwgbGluayB0ZXh0JyxcbiAgICAgICdjc3Mgc2VsZWN0b3InLFxuICAgICAgLy8gTGV0IHRoZXNlIHR3byByZWFjaCBTYWZhcmkgRHJpdmVyIGFuZCBmYWlsIHRoZXJlIHdpdGggYSBwcm9wZXIgZXJyb3IgbWVzc2FnZVxuICAgICAgJ2lkJyxcbiAgICAgICduYW1lJyxcbiAgICBdO1xuICAgIHRoaXMucmVzZXRTdGF0ZSgpO1xuXG4gICAgZm9yIChjb25zdCBbY21kLCBmbl0gb2YgXy50b1BhaXJzKGNvbW1hbmRzKSkge1xuICAgICAgU2FmYXJpRHJpdmVyLnByb3RvdHlwZVtjbWRdID0gZm47XG4gICAgfVxuICB9XG5cbiAgcmVzZXRTdGF0ZSAoKSB7XG4gICAgdGhpcy5zYWZhcmkgPSBudWxsO1xuICAgIHRoaXMucHJveHlSZXFSZXMgPSBudWxsO1xuICAgIHRoaXMuaXNQcm94eUFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuX3NjcmVlblJlY29yZGVyID0gbnVsbDtcbiAgfVxuXG4gIHByb3h5QWN0aXZlICgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1Byb3h5QWN0aXZlO1xuICB9XG5cbiAgZ2V0UHJveHlBdm9pZExpc3QgKCkge1xuICAgIHJldHVybiBOT19QUk9YWTtcbiAgfVxuXG4gIGNhblByb3h5ICgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVNlc3Npb24gKC4uLmFyZ3MpIHtcbiAgICBjb25zdCBbc2Vzc2lvbklkLCBjYXBzXSA9IGF3YWl0IHN1cGVyLmNyZWF0ZVNlc3Npb24oLi4uYXJncyk7XG4gICAgdGhpcy5zYWZhcmkgPSBuZXcgU2FmYXJpRHJpdmVyU2VydmVyKHRoaXMubG9nKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5zYWZhcmkuc3RhcnQoZm9ybWF0Q2Fwc0ZvclNlcnZlcihjYXBzKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKCk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy5zYWZhcmkucHJveHkucHJveHlSZXFSZXMuYmluZCh0aGlzLnNhZmFyaS5wcm94eSk7XG4gICAgdGhpcy5pc1Byb3h5QWN0aXZlID0gdHJ1ZTtcbiAgICByZXR1cm4gW3Nlc3Npb25JZCwgY2Fwc107XG4gIH1cblxuICBhc3luYyBkZWxldGVTZXNzaW9uICgpIHtcbiAgICB0aGlzLmxvZy5pbmZvKCdFbmRpbmcgU2FmYXJpIHNlc3Npb24nKTtcbiAgICBhd2FpdCB0aGlzLl9zY3JlZW5SZWNvcmRlcj8uc3RvcCh0cnVlKTtcbiAgICBhd2FpdCB0aGlzLnNhZmFyaT8uc3RvcCgpO1xuICAgIHRoaXMucmVzZXRTdGF0ZSgpO1xuXG4gICAgYXdhaXQgc3VwZXIuZGVsZXRlU2Vzc2lvbigpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNhZmFyaURyaXZlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxZQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxNQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxNQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxVQUFBLEdBQUFOLE9BQUE7QUFFQSxNQUFNTyxRQUFRLEdBQUcsQ0FDZixDQUFDLEtBQUssRUFBRSxJQUFJQyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxFQUM3QyxDQUFDLE1BQU0sRUFBRSxJQUFJQSxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxFQUM5QyxDQUFDLE1BQU0sRUFBRSxJQUFJQSxNQUFNLENBQUMsMENBQTBDLENBQUMsQ0FBQyxFQUNoRSxDQUFDLE1BQU0sRUFBRSxJQUFJQSxNQUFNLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxFQUVsRCxDQUFDLFFBQVEsRUFBRSxJQUFJQSxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUNsRDtBQUVELE1BQU1DLFlBQVksU0FBU0Msa0JBQVUsQ0FBQztFQUVwQyxPQUFPQyxZQUFZLEdBQUdBLHVCQUFZO0VBRWxDQyxXQUFXQSxDQUFFQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7SUFDdEIsS0FBSyxDQUFDQSxJQUFJLENBQUM7SUFDWCxJQUFJLENBQUNDLHFCQUFxQixH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
|
package/build/lib/driver.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driver.js","names":["_lodash","_interopRequireDefault","require","_driver","_safari","_desiredCaps","_index","_utils","_methodMap","NO_PROXY","RegExp","SafariDriver","BaseDriver","newMethodMap","constructor","opts","desiredCapConstraints","locatorStrategies","resetState","cmd","fn","_","toPairs","commands","prototype","safari","proxyReqRes","isProxyActive","_screenRecorder","proxyActive","getProxyAvoidList","canProxy","createSession","args","sessionId","caps","SafariDriverServer","log","start","formatCapsForServer","e","deleteSession","proxy","bind","_this$_screenRecorder","_this$safari","info","stop","_default","exports","default"],"sources":["../../lib/driver.js"],"sourcesContent":["import _ from 'lodash';\nimport { BaseDriver } from 'appium/driver';\nimport SafariDriverServer from './safari';\nimport { desiredCapConstraints } from './desired-caps';\nimport commands from './commands/index';\nimport { formatCapsForServer } from './utils';\nimport { newMethodMap } from './method-map';\n\nconst NO_PROXY = [\n ['GET', new RegExp('^/session/[^/]+/appium')],\n ['POST', new RegExp('^/session/[^/]+/appium')],\n ['POST', new RegExp('^/session/[^/]+/element/[^/]+/elements?$')],\n ['POST', new RegExp('^/session/[^/]+/elements?$')],\n\n ['DELETE', new RegExp('^/session/[^/]+/cookie$')],\n];\n\nclass SafariDriver extends BaseDriver {\n\n static newMethodMap = newMethodMap;\n\n constructor (opts = {}) {\n super(opts);\n this.desiredCapConstraints = desiredCapConstraints;\n this.locatorStrategies = [\n 'xpath',\n 'tag name',\n 'link text',\n 'partial link text',\n 'css selector',\n // Let these two reach Safari Driver and fail there with a proper error message\n 'id',\n 'name',\n ];\n this.resetState();\n\n for (const [cmd, fn] of _.toPairs(commands)) {\n SafariDriver.prototype[cmd] = fn;\n }\n }\n\n resetState () {\n this.safari = null;\n this.proxyReqRes = null;\n this.isProxyActive = false;\n this._screenRecorder = null;\n }\n\n proxyActive () {\n return this.isProxyActive;\n }\n\n getProxyAvoidList () {\n return NO_PROXY;\n }\n\n canProxy () {\n return true;\n }\n\n async createSession (...args) {\n const [sessionId, caps] = await super.createSession(...args);\n this.safari = new SafariDriverServer(this.log);\n try {\n await this.safari.start(formatCapsForServer(caps));\n } catch (e) {\n await this.deleteSession();\n throw e;\n }\n this.proxyReqRes = this.safari.proxy.proxyReqRes.bind(this.safari.proxy);\n this.isProxyActive = true;\n return [sessionId, caps];\n }\n\n async deleteSession () {\n this.log.info('Ending Safari session');\n await this._screenRecorder?.stop(true);\n await this.safari?.stop();\n this.resetState();\n\n await super.deleteSession();\n }\n}\n\nexport default SafariDriver;\n"],"mappings":";;;;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,YAAA,GAAAH,OAAA;AACA,IAAAI,MAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,MAAA,GAAAL,OAAA;AACA,IAAAM,UAAA,GAAAN,OAAA;AAEA,MAAMO,QAAQ,GAAG,CACf,CAAC,KAAK,EAAE,IAAIC,MAAM,CAAC,wBAAwB,CAAC,CAAC,EAC7C,CAAC,MAAM,EAAE,IAAIA,MAAM,CAAC,wBAAwB,CAAC,CAAC,EAC9C,CAAC,MAAM,EAAE,IAAIA,MAAM,CAAC,0CAA0C,CAAC,CAAC,EAChE,CAAC,MAAM,EAAE,IAAIA,MAAM,CAAC,4BAA4B,CAAC,CAAC,EAElD,CAAC,QAAQ,EAAE,IAAIA,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAClD;AAED,MAAMC,YAAY,SAASC,kBAAU,CAAC;EAEpC,OAAOC,YAAY,GAAGA,uBAAY;EAElCC,WAAWA,CAAEC,IAAI,GAAG,CAAC,CAAC,EAAE;IACtB,KAAK,CAACA,IAAI,CAAC;IACX,IAAI,CAACC,qBAAqB,GAAGA,kCAAqB;IAClD,IAAI,CAACC,iBAAiB,GAAG,CACvB,OAAO,EACP,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,cAAc,EAEd,IAAI,EACJ,MAAM,CACP;IACD,IAAI,CAACC,UAAU,
|
|
1
|
+
{"version":3,"file":"driver.js","names":["_lodash","_interopRequireDefault","require","_driver","_safari","_desiredCaps","_index","_utils","_methodMap","NO_PROXY","RegExp","SafariDriver","BaseDriver","newMethodMap","constructor","opts","desiredCapConstraints","locatorStrategies","resetState","cmd","fn","_","toPairs","commands","prototype","safari","proxyReqRes","isProxyActive","_screenRecorder","proxyActive","getProxyAvoidList","canProxy","createSession","args","sessionId","caps","SafariDriverServer","log","start","formatCapsForServer","e","deleteSession","proxy","bind","_this$_screenRecorder","_this$safari","info","stop","_default","exports","default"],"sources":["../../lib/driver.js"],"sourcesContent":["import _ from 'lodash';\nimport { BaseDriver } from 'appium/driver';\nimport SafariDriverServer from './safari';\nimport { desiredCapConstraints } from './desired-caps';\nimport commands from './commands/index';\nimport { formatCapsForServer } from './utils';\nimport { newMethodMap } from './method-map';\n\nconst NO_PROXY = [\n ['GET', new RegExp('^/session/[^/]+/appium')],\n ['POST', new RegExp('^/session/[^/]+/appium')],\n ['POST', new RegExp('^/session/[^/]+/element/[^/]+/elements?$')],\n ['POST', new RegExp('^/session/[^/]+/elements?$')],\n\n ['DELETE', new RegExp('^/session/[^/]+/cookie$')],\n];\n\nclass SafariDriver extends BaseDriver {\n\n static newMethodMap = newMethodMap;\n\n constructor (opts = {}) {\n super(opts);\n this.desiredCapConstraints = desiredCapConstraints;\n this.locatorStrategies = [\n 'xpath',\n 'tag name',\n 'link text',\n 'partial link text',\n 'css selector',\n // Let these two reach Safari Driver and fail there with a proper error message\n 'id',\n 'name',\n ];\n this.resetState();\n\n for (const [cmd, fn] of _.toPairs(commands)) {\n SafariDriver.prototype[cmd] = fn;\n }\n }\n\n resetState () {\n this.safari = null;\n this.proxyReqRes = null;\n this.isProxyActive = false;\n this._screenRecorder = null;\n }\n\n proxyActive () {\n return this.isProxyActive;\n }\n\n getProxyAvoidList () {\n return NO_PROXY;\n }\n\n canProxy () {\n return true;\n }\n\n async createSession (...args) {\n const [sessionId, caps] = await super.createSession(...args);\n this.safari = new SafariDriverServer(this.log);\n try {\n await this.safari.start(formatCapsForServer(caps));\n } catch (e) {\n await this.deleteSession();\n throw e;\n }\n this.proxyReqRes = this.safari.proxy.proxyReqRes.bind(this.safari.proxy);\n this.isProxyActive = true;\n return [sessionId, caps];\n }\n\n async deleteSession () {\n this.log.info('Ending Safari session');\n await this._screenRecorder?.stop(true);\n await this.safari?.stop();\n this.resetState();\n\n await super.deleteSession();\n }\n}\n\nexport default SafariDriver;\n"],"mappings":"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"}
|
package/build/lib/safari.js
CHANGED
|
@@ -153,4 +153,4 @@ class SafariDriverServer {
|
|
|
153
153
|
}
|
|
154
154
|
var _default = SafariDriverServer;
|
|
155
155
|
exports.default = _default;
|
|
156
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfb3MiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9wYXRoIiwiX2RyaXZlciIsIl9zdXBwb3J0IiwiX3RlZW5fcHJvY2VzcyIsIl9hc3luY2JveCIsIl9wb3J0c2Nhbm5lciIsIl9jaGlsZF9wcm9jZXNzIiwiU0RfQklOQVJZIiwiU1RBUlRVUF9USU1FT1VUIiwiU0FGQVJJX1BPUlRfUkFOR0UiLCJTQUZBUklfU0VSVkVSX0dVQVJEIiwidXRpbCIsImdldExvY2tGaWxlR3VhcmQiLCJwYXRoIiwicmVzb2x2ZSIsIm9zIiwidG1wZGlyIiwidGltZW91dCIsInRyeVJlY292ZXJ5IiwiU2FmYXJpUHJveHkiLCJKV1Byb3h5IiwicHJveHlDb21tYW5kIiwidXJsIiwibWV0aG9kIiwiYm9keSIsImRpZFByb2Nlc3NFeGl0IiwiZXJyb3JzIiwiSW52YWxpZENvbnRleHRFcnJvciIsIlNhZmFyaURyaXZlclByb2Nlc3MiLCJjb25zdHJ1Y3RvciIsImxvZyIsImxvZ2dlciIsImdldExvZ2dlciIsInBvcnQiLCJwcm9jIiwiaXNSdW5uaW5nIiwiX3RoaXMkcHJvYyIsImluaXQiLCJzdGFydFBvcnQiLCJlbmRQb3J0IiwiZmluZEFQb3J0Tm90SW5Vc2UiLCJlIiwiRXJyb3IiLCJzYWZhcmlCaW4iLCJmcyIsIndoaWNoIiwiU3ViUHJvY2VzcyIsIm9uIiwic3Rkb3V0Iiwic3RkZXJyIiwibGluZSIsImRlYnVnIiwiY29kZSIsInNpZ25hbCIsImluZm8iLCJzdGFydCIsImtpbGwiLCJzdG9wIiwiaWduIiwiU0FGQVJJX0RSSVZFUl9QUk9DRVNTIiwicHJvY2VzcyIsIm9uY2UiLCJleGVjU3luYyIsInBpZCIsIlNhZmFyaURyaXZlclNlcnZlciIsInByb3h5IiwiY2FwcyIsInNlcnZlciIsImJhc2UiLCJrZWVwQWxpdmUiLCJ3YWl0Rm9yQ29uZGl0aW9uIiwiY29tbWFuZCIsImVyciIsIm1lc3NhZ2UiLCJ3YWl0TXMiLCJpbnRlcnZhbE1zIiwidGVzdCIsImNhcGFiaWxpdGllcyIsImZpcnN0TWF0Y2giLCJhbHdheXNNYXRjaCIsIl90aGlzJHByb3h5Iiwic2Vzc2lvbklkIiwiX2RlZmF1bHQiLCJleHBvcnRzIiwiZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9zYWZhcmkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgSldQcm94eSwgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgeyBmcywgbG9nZ2VyLCB1dGlsIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgU3ViUHJvY2VzcyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgeyB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgZmluZEFQb3J0Tm90SW5Vc2UgfSBmcm9tICdwb3J0c2Nhbm5lcic7XG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuXG5jb25zdCBTRF9CSU5BUlkgPSAnc2FmYXJpZHJpdmVyJztcbmNvbnN0IFNUQVJUVVBfVElNRU9VVCA9IDEwMDAwOyAvLyBzZWNvbmRzXG5jb25zdCBTQUZBUklfUE9SVF9SQU5HRSA9IFs1MTAwLCA1MjAwXTtcbi8vIFRoaXMgZ3VhcmQgaXMgbmVlZGVkIHRvIG1ha2Ugc3VyZVxuLy8gd2UgbmV2ZXIgcnVuIG11bHRpcGxlIFNhZmFyaSBkcml2ZXIgcHJvY2Vzc2VzIGZvciB0aGUgc2FtZSBBcHBpdW0gcHJvY2Vzc1xuY29uc3QgU0FGQVJJX1NFUlZFUl9HVUFSRCA9IHV0aWwuZ2V0TG9ja0ZpbGVHdWFyZChcbiAgcGF0aC5yZXNvbHZlKG9zLnRtcGRpcigpLCAnc2FmYXJpX3NlcnZlcl9ndWFyZC5sb2NrJyksXG4gIHt0aW1lb3V0OiA1LCB0cnlSZWNvdmVyeTogdHJ1ZX1cbik7XG5cblxuY2xhc3MgU2FmYXJpUHJveHkgZXh0ZW5kcyBKV1Byb3h5IHtcbiAgYXN5bmMgcHJveHlDb21tYW5kICh1cmwsIG1ldGhvZCwgYm9keSA9IG51bGwpIHtcbiAgICBpZiAodGhpcy5kaWRQcm9jZXNzRXhpdCkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQ29udGV4dEVycm9yKFxuICAgICAgICBgJyR7bWV0aG9kfSAke3VybH0nIGNhbm5vdCBiZSBwcm94aWVkIHRvIFNhZmFyaSBEcml2ZXIgc2VydmVyIGJlY2F1c2UgYCArXG4gICAgICAgICd0aGUgcHJvY2VzcyBpcyBub3QgcnVubmluZyAocHJvYmFibHkgY3Jhc2hlZCkuIENoZWNrIHRoZSBzZXJ2ZXIgbG9nIGZvciBtb3JlIGRldGFpbHMnKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLnByb3h5Q29tbWFuZCh1cmwsIG1ldGhvZCwgYm9keSk7XG4gIH1cbn1cblxuY2xhc3MgU2FmYXJpRHJpdmVyUHJvY2VzcyB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLmxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ1NhZmFyaURyaXZlclByb2Nlc3MnKTtcbiAgICB0aGlzLnBvcnQgPSBudWxsO1xuICAgIHRoaXMucHJvYyA9IG51bGw7XG4gIH1cblxuICBnZXQgaXNSdW5uaW5nICgpIHtcbiAgICByZXR1cm4gISEodGhpcy5wcm9jPy5pc1J1bm5pbmcpO1xuICB9XG5cbiAgYXN5bmMgaW5pdCAoKSB7XG4gICAgYXdhaXQgU0FGQVJJX1NFUlZFUl9HVUFSRChhc3luYyAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1J1bm5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBbc3RhcnRQb3J0LCBlbmRQb3J0XSA9IFNBRkFSSV9QT1JUX1JBTkdFO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5wb3J0ID0gYXdhaXQgZmluZEFQb3J0Tm90SW5Vc2Uoc3RhcnRQb3J0LCBlbmRQb3J0KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDYW5ub3QgZmluZCBhbnkgZnJlZSBwb3J0IGluIHJhbmdlICR7c3RhcnRQb3J0fS4uJHtlbmRQb3J0fS4gYCArXG4gICAgICAgICAgYERvdWJsZSBjaGVjayB0aGUgcHJvY2Vzc2VzIHRoYXQgYXJlIGxvY2tpbmcgcG9ydHMgd2l0aGluIHRoaXMgcmFuZ2UgYW5kIHRlcm1pbmF0ZSBgICtcbiAgICAgICAgICBgdGhlc2Ugd2hpY2ggYXJlIG5vdCBuZWVkZWQgYW55bW9yZWApO1xuICAgICAgfVxuXG4gICAgICBsZXQgc2FmYXJpQmluO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2FmYXJpQmluID0gYXdhaXQgZnMud2hpY2goU0RfQklOQVJZKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke1NEX0JJTkFSWX0gYmluYXJ5IGNhbm5vdCBiZSBmb3VuZCBpbiBQQVRILiBgICtcbiAgICAgICAgICBgUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBwcmVzZW50IG9uIHlvdXIgc3lzdGVtYCk7XG4gICAgICB9XG4gICAgICB0aGlzLnByb2MgPSBuZXcgU3ViUHJvY2VzcyhzYWZhcmlCaW4sIFsnLXAnLCB0aGlzLnBvcnQsICctLWRpYWdub3NlJ10pO1xuICAgICAgdGhpcy5wcm9jLm9uKCdvdXRwdXQnLCAoc3Rkb3V0LCBzdGRlcnIpID0+IHtcbiAgICAgICAgY29uc3QgbGluZSA9IHN0ZG91dCB8fCBzdGRlcnI7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBbJHtTRF9CSU5BUll9XSAke2xpbmV9YCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMucHJvYy5vbignZXhpdCcsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgJHtTRF9CSU5BUll9IGhhcyBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX0sIHNpZ25hbCAke3NpZ25hbH1gKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5sb2cuaW5mbyhgU3RhcnRpbmcgJyR7c2FmYXJpQmlufScgb24gcG9ydCAke3RoaXMucG9ydH1gKTtcbiAgICAgIGF3YWl0IHRoaXMucHJvYy5zdGFydCgwKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGtpbGwgKCkge1xuICAgIGlmICh0aGlzLmlzUnVubmluZykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9jLnN0b3AoJ1NJR0tJTEwnKTtcbiAgICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICB9XG4gIH1cbn1cblxuLy8gU2luZ2xlIHNlcnZlciBwcm9jZXNzIHBlciBBcHBpdW0gaW5zdGFuY2VcbmNvbnN0IFNBRkFSSV9EUklWRVJfUFJPQ0VTUyA9IG5ldyBTYWZhcmlEcml2ZXJQcm9jZXNzKCk7XG5wcm9jZXNzLm9uY2UoJ2V4aXQnLCAoKSA9PiB7XG4gIGlmIChTQUZBUklfRFJJVkVSX1BST0NFU1MuaXNSdW5uaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWNTeW5jKGBraWxsICR7U0FGQVJJX0RSSVZFUl9QUk9DRVNTLnByb2MucGlkfWApO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgfVxufSk7XG5cbmNsYXNzIFNhZmFyaURyaXZlclNlcnZlciB7XG4gIGNvbnN0cnVjdG9yIChsb2cpIHtcbiAgICB0aGlzLmxvZyA9IGxvZztcbiAgICB0aGlzLnByb3h5ID0gbnVsbDtcbiAgfVxuXG4gIGdldCBpc1J1bm5pbmcgKCkge1xuICAgIHJldHVybiAhIShTQUZBUklfRFJJVkVSX1BST0NFU1MuaXNSdW5uaW5nKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0IChjYXBzKSB7XG4gICAgYXdhaXQgU0FGQVJJX0RSSVZFUl9QUk9DRVNTLmluaXQoKTtcblxuICAgIHRoaXMucHJveHkgPSBuZXcgU2FmYXJpUHJveHkoe1xuICAgICAgc2VydmVyOiAnMTI3LjAuMC4xJyxcbiAgICAgIHBvcnQ6IFNBRkFSSV9EUklWRVJfUFJPQ0VTUy5wb3J0LFxuICAgICAgYmFzZTogJycsXG4gICAgICBsb2c6IHRoaXMubG9nLFxuICAgICAga2VlcEFsaXZlOiB0cnVlLFxuICAgIH0pO1xuICAgIHRoaXMucHJveHkuZGlkUHJvY2Vzc0V4aXQgPSBmYWxzZTtcbiAgICBTQUZBUklfRFJJVkVSX1BST0NFU1MucHJvYy5vbignZXhpdCcsICgpID0+IHtcbiAgICAgIHRoaXMucHJveHkuZGlkUHJvY2Vzc0V4aXQgPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMucHJveHkuY29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgaWYgKHRoaXMucHJveHkuZGlkUHJvY2Vzc0V4aXQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnIubWVzc2FnZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICB3YWl0TXM6IFNUQVJUVVBfVElNRU9VVCxcbiAgICAgICAgaW50ZXJ2YWxNczogMTAwMCxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmICgvQ29uZGl0aW9uIHVubWV0Ly50ZXN0KGUubWVzc2FnZSkpIHtcbiAgICAgICAgaWYgKFNBRkFSSV9EUklWRVJfUFJPQ0VTUy5pc1J1bm5pbmcpIHtcbiAgICAgICAgICAvLyBhdm9pZCBcImZyb3plblwiIHByb2Nlc3NlcyxcbiAgICAgICAgICBhd2FpdCBTQUZBUklfRFJJVkVSX1BST0NFU1Mua2lsbCgpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU2FmYXJpIERyaXZlciBzZXJ2ZXIgaXMgbm90IGxpc3RlbmluZyB3aXRoaW4gJHtTVEFSVFVQX1RJTUVPVVR9bXMgdGltZW91dC4gYCArXG4gICAgICAgICAgYE1ha2Ugc3VyZSBpdCBoYXMgYmVlbiBleGVjdXRlZCBtYW51YWxseSBhdCBsZWFzdCBvbmNlIHdpdGggJy0tZW5hYmxlJyBjb21tYW5kIGxpbmUgYXJndW1lbnQuIGAgK1xuICAgICAgICAgIGBDaGVjayB0aGUgc2VydmVyIGxvZyBmb3IgbW9yZSBkZXRhaWxzYCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMucHJveHkuY29tbWFuZCgnL3Nlc3Npb24nLCAnUE9TVCcsIHtcbiAgICAgIGNhcGFiaWxpdGllczoge1xuICAgICAgICBmaXJzdE1hdGNoOiBbe31dLFxuICAgICAgICBhbHdheXNNYXRjaDogY2FwcyxcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHN0b3AgKCkge1xuICAgIGlmICghdGhpcy5pc1J1bm5pbmcpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYCR7U0RfQklOQVJZfSBzZXNzaW9uIGNhbm5vdCBiZSBzdG9wcGVkLCBiZWNhdXNlIHRoZSBzZXJ2ZXIgaXMgbm90IHJ1bm5pbmdgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm94eT8uc2Vzc2lvbklkKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnByb3h5LmNvbW1hbmQoYC9zZXNzaW9uLyR7dGhpcy5wcm94eS5zZXNzaW9uSWR9YCwgJ0RFTEVURScpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGAke1NEX0JJTkFSWX0gc2Vzc2lvbiBjYW5ub3QgYmUgZGVsZXRlZC4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTYWZhcmlEcml2ZXJTZXJ2ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsR0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFB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
|
|
156
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfb3MiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9wYXRoIiwiX2RyaXZlciIsIl9zdXBwb3J0IiwiX3RlZW5fcHJvY2VzcyIsIl9hc3luY2JveCIsIl9wb3J0c2Nhbm5lciIsIl9jaGlsZF9wcm9jZXNzIiwiU0RfQklOQVJZIiwiU1RBUlRVUF9USU1FT1VUIiwiU0FGQVJJX1BPUlRfUkFOR0UiLCJTQUZBUklfU0VSVkVSX0dVQVJEIiwidXRpbCIsImdldExvY2tGaWxlR3VhcmQiLCJwYXRoIiwicmVzb2x2ZSIsIm9zIiwidG1wZGlyIiwidGltZW91dCIsInRyeVJlY292ZXJ5IiwiU2FmYXJpUHJveHkiLCJKV1Byb3h5IiwicHJveHlDb21tYW5kIiwidXJsIiwibWV0aG9kIiwiYm9keSIsImRpZFByb2Nlc3NFeGl0IiwiZXJyb3JzIiwiSW52YWxpZENvbnRleHRFcnJvciIsIlNhZmFyaURyaXZlclByb2Nlc3MiLCJjb25zdHJ1Y3RvciIsImxvZyIsImxvZ2dlciIsImdldExvZ2dlciIsInBvcnQiLCJwcm9jIiwiaXNSdW5uaW5nIiwiX3RoaXMkcHJvYyIsImluaXQiLCJzdGFydFBvcnQiLCJlbmRQb3J0IiwiZmluZEFQb3J0Tm90SW5Vc2UiLCJlIiwiRXJyb3IiLCJzYWZhcmlCaW4iLCJmcyIsIndoaWNoIiwiU3ViUHJvY2VzcyIsIm9uIiwic3Rkb3V0Iiwic3RkZXJyIiwibGluZSIsImRlYnVnIiwiY29kZSIsInNpZ25hbCIsImluZm8iLCJzdGFydCIsImtpbGwiLCJzdG9wIiwiaWduIiwiU0FGQVJJX0RSSVZFUl9QUk9DRVNTIiwicHJvY2VzcyIsIm9uY2UiLCJleGVjU3luYyIsInBpZCIsIlNhZmFyaURyaXZlclNlcnZlciIsInByb3h5IiwiY2FwcyIsInNlcnZlciIsImJhc2UiLCJrZWVwQWxpdmUiLCJ3YWl0Rm9yQ29uZGl0aW9uIiwiY29tbWFuZCIsImVyciIsIm1lc3NhZ2UiLCJ3YWl0TXMiLCJpbnRlcnZhbE1zIiwidGVzdCIsImNhcGFiaWxpdGllcyIsImZpcnN0TWF0Y2giLCJhbHdheXNNYXRjaCIsIl90aGlzJHByb3h5Iiwic2Vzc2lvbklkIiwiX2RlZmF1bHQiLCJleHBvcnRzIiwiZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9zYWZhcmkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgSldQcm94eSwgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgeyBmcywgbG9nZ2VyLCB1dGlsIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgU3ViUHJvY2VzcyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgeyB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgZmluZEFQb3J0Tm90SW5Vc2UgfSBmcm9tICdwb3J0c2Nhbm5lcic7XG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuXG5jb25zdCBTRF9CSU5BUlkgPSAnc2FmYXJpZHJpdmVyJztcbmNvbnN0IFNUQVJUVVBfVElNRU9VVCA9IDEwMDAwOyAvLyBzZWNvbmRzXG5jb25zdCBTQUZBUklfUE9SVF9SQU5HRSA9IFs1MTAwLCA1MjAwXTtcbi8vIFRoaXMgZ3VhcmQgaXMgbmVlZGVkIHRvIG1ha2Ugc3VyZVxuLy8gd2UgbmV2ZXIgcnVuIG11bHRpcGxlIFNhZmFyaSBkcml2ZXIgcHJvY2Vzc2VzIGZvciB0aGUgc2FtZSBBcHBpdW0gcHJvY2Vzc1xuY29uc3QgU0FGQVJJX1NFUlZFUl9HVUFSRCA9IHV0aWwuZ2V0TG9ja0ZpbGVHdWFyZChcbiAgcGF0aC5yZXNvbHZlKG9zLnRtcGRpcigpLCAnc2FmYXJpX3NlcnZlcl9ndWFyZC5sb2NrJyksXG4gIHt0aW1lb3V0OiA1LCB0cnlSZWNvdmVyeTogdHJ1ZX1cbik7XG5cblxuY2xhc3MgU2FmYXJpUHJveHkgZXh0ZW5kcyBKV1Byb3h5IHtcbiAgYXN5bmMgcHJveHlDb21tYW5kICh1cmwsIG1ldGhvZCwgYm9keSA9IG51bGwpIHtcbiAgICBpZiAodGhpcy5kaWRQcm9jZXNzRXhpdCkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQ29udGV4dEVycm9yKFxuICAgICAgICBgJyR7bWV0aG9kfSAke3VybH0nIGNhbm5vdCBiZSBwcm94aWVkIHRvIFNhZmFyaSBEcml2ZXIgc2VydmVyIGJlY2F1c2UgYCArXG4gICAgICAgICd0aGUgcHJvY2VzcyBpcyBub3QgcnVubmluZyAocHJvYmFibHkgY3Jhc2hlZCkuIENoZWNrIHRoZSBzZXJ2ZXIgbG9nIGZvciBtb3JlIGRldGFpbHMnKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLnByb3h5Q29tbWFuZCh1cmwsIG1ldGhvZCwgYm9keSk7XG4gIH1cbn1cblxuY2xhc3MgU2FmYXJpRHJpdmVyUHJvY2VzcyB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLmxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ1NhZmFyaURyaXZlclByb2Nlc3MnKTtcbiAgICB0aGlzLnBvcnQgPSBudWxsO1xuICAgIHRoaXMucHJvYyA9IG51bGw7XG4gIH1cblxuICBnZXQgaXNSdW5uaW5nICgpIHtcbiAgICByZXR1cm4gISEodGhpcy5wcm9jPy5pc1J1bm5pbmcpO1xuICB9XG5cbiAgYXN5bmMgaW5pdCAoKSB7XG4gICAgYXdhaXQgU0FGQVJJX1NFUlZFUl9HVUFSRChhc3luYyAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1J1bm5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBbc3RhcnRQb3J0LCBlbmRQb3J0XSA9IFNBRkFSSV9QT1JUX1JBTkdFO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5wb3J0ID0gYXdhaXQgZmluZEFQb3J0Tm90SW5Vc2Uoc3RhcnRQb3J0LCBlbmRQb3J0KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDYW5ub3QgZmluZCBhbnkgZnJlZSBwb3J0IGluIHJhbmdlICR7c3RhcnRQb3J0fS4uJHtlbmRQb3J0fS4gYCArXG4gICAgICAgICAgYERvdWJsZSBjaGVjayB0aGUgcHJvY2Vzc2VzIHRoYXQgYXJlIGxvY2tpbmcgcG9ydHMgd2l0aGluIHRoaXMgcmFuZ2UgYW5kIHRlcm1pbmF0ZSBgICtcbiAgICAgICAgICBgdGhlc2Ugd2hpY2ggYXJlIG5vdCBuZWVkZWQgYW55bW9yZWApO1xuICAgICAgfVxuXG4gICAgICBsZXQgc2FmYXJpQmluO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2FmYXJpQmluID0gYXdhaXQgZnMud2hpY2goU0RfQklOQVJZKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke1NEX0JJTkFSWX0gYmluYXJ5IGNhbm5vdCBiZSBmb3VuZCBpbiBQQVRILiBgICtcbiAgICAgICAgICBgUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBwcmVzZW50IG9uIHlvdXIgc3lzdGVtYCk7XG4gICAgICB9XG4gICAgICB0aGlzLnByb2MgPSBuZXcgU3ViUHJvY2VzcyhzYWZhcmlCaW4sIFsnLXAnLCB0aGlzLnBvcnQsICctLWRpYWdub3NlJ10pO1xuICAgICAgdGhpcy5wcm9jLm9uKCdvdXRwdXQnLCAoc3Rkb3V0LCBzdGRlcnIpID0+IHtcbiAgICAgICAgY29uc3QgbGluZSA9IHN0ZG91dCB8fCBzdGRlcnI7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBbJHtTRF9CSU5BUll9XSAke2xpbmV9YCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMucHJvYy5vbignZXhpdCcsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgJHtTRF9CSU5BUll9IGhhcyBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX0sIHNpZ25hbCAke3NpZ25hbH1gKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5sb2cuaW5mbyhgU3RhcnRpbmcgJyR7c2FmYXJpQmlufScgb24gcG9ydCAke3RoaXMucG9ydH1gKTtcbiAgICAgIGF3YWl0IHRoaXMucHJvYy5zdGFydCgwKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGtpbGwgKCkge1xuICAgIGlmICh0aGlzLmlzUnVubmluZykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9jLnN0b3AoJ1NJR0tJTEwnKTtcbiAgICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICB9XG4gIH1cbn1cblxuLy8gU2luZ2xlIHNlcnZlciBwcm9jZXNzIHBlciBBcHBpdW0gaW5zdGFuY2VcbmNvbnN0IFNBRkFSSV9EUklWRVJfUFJPQ0VTUyA9IG5ldyBTYWZhcmlEcml2ZXJQcm9jZXNzKCk7XG5wcm9jZXNzLm9uY2UoJ2V4aXQnLCAoKSA9PiB7XG4gIGlmIChTQUZBUklfRFJJVkVSX1BST0NFU1MuaXNSdW5uaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWNTeW5jKGBraWxsICR7U0FGQVJJX0RSSVZFUl9QUk9DRVNTLnByb2MucGlkfWApO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgfVxufSk7XG5cbmNsYXNzIFNhZmFyaURyaXZlclNlcnZlciB7XG4gIGNvbnN0cnVjdG9yIChsb2cpIHtcbiAgICB0aGlzLmxvZyA9IGxvZztcbiAgICB0aGlzLnByb3h5ID0gbnVsbDtcbiAgfVxuXG4gIGdldCBpc1J1bm5pbmcgKCkge1xuICAgIHJldHVybiAhIShTQUZBUklfRFJJVkVSX1BST0NFU1MuaXNSdW5uaW5nKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0IChjYXBzKSB7XG4gICAgYXdhaXQgU0FGQVJJX0RSSVZFUl9QUk9DRVNTLmluaXQoKTtcblxuICAgIHRoaXMucHJveHkgPSBuZXcgU2FmYXJpUHJveHkoe1xuICAgICAgc2VydmVyOiAnMTI3LjAuMC4xJyxcbiAgICAgIHBvcnQ6IFNBRkFSSV9EUklWRVJfUFJPQ0VTUy5wb3J0LFxuICAgICAgYmFzZTogJycsXG4gICAgICBsb2c6IHRoaXMubG9nLFxuICAgICAga2VlcEFsaXZlOiB0cnVlLFxuICAgIH0pO1xuICAgIHRoaXMucHJveHkuZGlkUHJvY2Vzc0V4aXQgPSBmYWxzZTtcbiAgICBTQUZBUklfRFJJVkVSX1BST0NFU1MucHJvYy5vbignZXhpdCcsICgpID0+IHtcbiAgICAgIHRoaXMucHJveHkuZGlkUHJvY2Vzc0V4aXQgPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMucHJveHkuY29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgaWYgKHRoaXMucHJveHkuZGlkUHJvY2Vzc0V4aXQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnIubWVzc2FnZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICB3YWl0TXM6IFNUQVJUVVBfVElNRU9VVCxcbiAgICAgICAgaW50ZXJ2YWxNczogMTAwMCxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmICgvQ29uZGl0aW9uIHVubWV0Ly50ZXN0KGUubWVzc2FnZSkpIHtcbiAgICAgICAgaWYgKFNBRkFSSV9EUklWRVJfUFJPQ0VTUy5pc1J1bm5pbmcpIHtcbiAgICAgICAgICAvLyBhdm9pZCBcImZyb3plblwiIHByb2Nlc3NlcyxcbiAgICAgICAgICBhd2FpdCBTQUZBUklfRFJJVkVSX1BST0NFU1Mua2lsbCgpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU2FmYXJpIERyaXZlciBzZXJ2ZXIgaXMgbm90IGxpc3RlbmluZyB3aXRoaW4gJHtTVEFSVFVQX1RJTUVPVVR9bXMgdGltZW91dC4gYCArXG4gICAgICAgICAgYE1ha2Ugc3VyZSBpdCBoYXMgYmVlbiBleGVjdXRlZCBtYW51YWxseSBhdCBsZWFzdCBvbmNlIHdpdGggJy0tZW5hYmxlJyBjb21tYW5kIGxpbmUgYXJndW1lbnQuIGAgK1xuICAgICAgICAgIGBDaGVjayB0aGUgc2VydmVyIGxvZyBmb3IgbW9yZSBkZXRhaWxzYCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMucHJveHkuY29tbWFuZCgnL3Nlc3Npb24nLCAnUE9TVCcsIHtcbiAgICAgIGNhcGFiaWxpdGllczoge1xuICAgICAgICBmaXJzdE1hdGNoOiBbe31dLFxuICAgICAgICBhbHdheXNNYXRjaDogY2FwcyxcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHN0b3AgKCkge1xuICAgIGlmICghdGhpcy5pc1J1bm5pbmcpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYCR7U0RfQklOQVJZfSBzZXNzaW9uIGNhbm5vdCBiZSBzdG9wcGVkLCBiZWNhdXNlIHRoZSBzZXJ2ZXIgaXMgbm90IHJ1bm5pbmdgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm94eT8uc2Vzc2lvbklkKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnByb3h5LmNvbW1hbmQoYC9zZXNzaW9uLyR7dGhpcy5wcm94eS5zZXNzaW9uSWR9YCwgJ0RFTEVURScpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGAke1NEX0JJTkFSWX0gc2Vzc2lvbiBjYW5ub3QgYmUgZGVsZXRlZC4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTYWZhcmlEcml2ZXJTZXJ2ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsR0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFB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
|
package/build/lib/safari.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safari.js","names":["_os","_interopRequireDefault","require","_path","_driver","_support","_teen_process","_asyncbox","_portscanner","_child_process","SD_BINARY","STARTUP_TIMEOUT","SAFARI_PORT_RANGE","SAFARI_SERVER_GUARD","util","getLockFileGuard","path","resolve","os","tmpdir","timeout","tryRecovery","SafariProxy","JWProxy","proxyCommand","url","method","body","didProcessExit","errors","InvalidContextError","SafariDriverProcess","constructor","log","logger","getLogger","port","proc","isRunning","_this$proc","init","startPort","endPort","findAPortNotInUse","e","Error","safariBin","fs","which","SubProcess","on","stdout","stderr","line","debug","code","signal","info","start","kill","stop","ign","SAFARI_DRIVER_PROCESS","process","once","execSync","pid","SafariDriverServer","proxy","caps","server","base","keepAlive","waitForCondition","command","err","message","waitMs","intervalMs","test","capabilities","firstMatch","alwaysMatch","_this$proxy","sessionId","_default","exports","default"],"sources":["../../lib/safari.js"],"sourcesContent":["import os from 'os';\nimport path from 'path';\nimport { JWProxy, errors } from 'appium/driver';\nimport { fs, logger, util } from 'appium/support';\nimport { SubProcess } from 'teen_process';\nimport { waitForCondition } from 'asyncbox';\nimport { findAPortNotInUse } from 'portscanner';\nimport { execSync } from 'child_process';\n\nconst SD_BINARY = 'safaridriver';\nconst STARTUP_TIMEOUT = 10000; // seconds\nconst SAFARI_PORT_RANGE = [5100, 5200];\n// This guard is needed to make sure\n// we never run multiple Safari driver processes for the same Appium process\nconst SAFARI_SERVER_GUARD = util.getLockFileGuard(\n path.resolve(os.tmpdir(), 'safari_server_guard.lock'),\n {timeout: 5, tryRecovery: true}\n);\n\n\nclass SafariProxy extends JWProxy {\n async proxyCommand (url, method, body = null) {\n if (this.didProcessExit) {\n throw new errors.InvalidContextError(\n `'${method} ${url}' cannot be proxied to Safari Driver server because ` +\n 'the process is not running (probably crashed). Check the server log for more details');\n }\n return await super.proxyCommand(url, method, body);\n }\n}\n\nclass SafariDriverProcess {\n constructor () {\n this.log = logger.getLogger('SafariDriverProcess');\n this.port = null;\n this.proc = null;\n }\n\n get isRunning () {\n return !!(this.proc?.isRunning);\n }\n\n async init () {\n await SAFARI_SERVER_GUARD(async () => {\n if (this.isRunning) {\n return;\n }\n\n const [startPort, endPort] = SAFARI_PORT_RANGE;\n try {\n this.port = await findAPortNotInUse(startPort, endPort);\n } catch (e) {\n throw new Error(\n `Cannot find any free port in range ${startPort}..${endPort}. ` +\n `Double check the processes that are locking ports within this range and terminate ` +\n `these which are not needed anymore`);\n }\n\n let safariBin;\n try {\n safariBin = await fs.which(SD_BINARY);\n } catch (e) {\n throw new Error(`${SD_BINARY} binary cannot be found in PATH. ` +\n `Please make sure it is present on your system`);\n }\n this.proc = new SubProcess(safariBin, ['-p', this.port, '--diagnose']);\n this.proc.on('output', (stdout, stderr) => {\n const line = stdout || stderr;\n this.log.debug(`[${SD_BINARY}] ${line}`);\n });\n this.proc.on('exit', (code, signal) => {\n this.log.info(`${SD_BINARY} has exited with code ${code}, signal ${signal}`);\n });\n this.log.info(`Starting '${safariBin}' on port ${this.port}`);\n await this.proc.start(0);\n });\n }\n\n async kill () {\n if (this.isRunning) {\n try {\n await this.proc.stop('SIGKILL');\n } catch (ign) {}\n }\n }\n}\n\n// Single server process per Appium instance\nconst SAFARI_DRIVER_PROCESS = new SafariDriverProcess();\nprocess.once('exit', () => {\n if (SAFARI_DRIVER_PROCESS.isRunning) {\n try {\n execSync(`kill ${SAFARI_DRIVER_PROCESS.proc.pid}`);\n } catch (ign) {}\n }\n});\n\nclass SafariDriverServer {\n constructor (log) {\n this.log = log;\n this.proxy = null;\n }\n\n get isRunning () {\n return !!(SAFARI_DRIVER_PROCESS.isRunning);\n }\n\n async start (caps) {\n await SAFARI_DRIVER_PROCESS.init();\n\n this.proxy = new SafariProxy({\n server: '127.0.0.1',\n port: SAFARI_DRIVER_PROCESS.port,\n base: '',\n log: this.log,\n keepAlive: true,\n });\n this.proxy.didProcessExit = false;\n SAFARI_DRIVER_PROCESS.proc.on('exit', () => {\n this.proxy.didProcessExit = true;\n });\n\n try {\n await waitForCondition(async () => {\n try {\n await this.proxy.command('/status', 'GET');\n return true;\n } catch (err) {\n if (this.proxy.didProcessExit) {\n throw new Error(err.message);\n }\n return false;\n }\n }, {\n waitMs: STARTUP_TIMEOUT,\n intervalMs: 1000,\n });\n } catch (e) {\n if (/Condition unmet/.test(e.message)) {\n if (SAFARI_DRIVER_PROCESS.isRunning) {\n // avoid \"frozen\" processes,\n await SAFARI_DRIVER_PROCESS.kill();\n }\n throw new Error(`Safari Driver server is not listening within ${STARTUP_TIMEOUT}ms timeout. ` +\n `Make sure it has been executed manually at least once with '--enable' command line argument. ` +\n `Check the server log for more details`);\n }\n throw e;\n }\n\n await this.proxy.command('/session', 'POST', {\n capabilities: {\n firstMatch: [{}],\n alwaysMatch: caps,\n }\n });\n }\n\n async stop () {\n if (!this.isRunning) {\n this.log.info(`${SD_BINARY} session cannot be stopped, because the server is not running`);\n return;\n }\n\n if (this.proxy?.sessionId) {\n try {\n await this.proxy.command(`/session/${this.proxy.sessionId}`, 'DELETE');\n } catch (e) {\n this.log.info(`${SD_BINARY} session cannot be deleted. Original error: ${e.message}`);\n }\n }\n }\n}\n\nexport default SafariDriverServer;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"safari.js","names":["_os","_interopRequireDefault","require","_path","_driver","_support","_teen_process","_asyncbox","_portscanner","_child_process","SD_BINARY","STARTUP_TIMEOUT","SAFARI_PORT_RANGE","SAFARI_SERVER_GUARD","util","getLockFileGuard","path","resolve","os","tmpdir","timeout","tryRecovery","SafariProxy","JWProxy","proxyCommand","url","method","body","didProcessExit","errors","InvalidContextError","SafariDriverProcess","constructor","log","logger","getLogger","port","proc","isRunning","_this$proc","init","startPort","endPort","findAPortNotInUse","e","Error","safariBin","fs","which","SubProcess","on","stdout","stderr","line","debug","code","signal","info","start","kill","stop","ign","SAFARI_DRIVER_PROCESS","process","once","execSync","pid","SafariDriverServer","proxy","caps","server","base","keepAlive","waitForCondition","command","err","message","waitMs","intervalMs","test","capabilities","firstMatch","alwaysMatch","_this$proxy","sessionId","_default","exports","default"],"sources":["../../lib/safari.js"],"sourcesContent":["import os from 'os';\nimport path from 'path';\nimport { JWProxy, errors } from 'appium/driver';\nimport { fs, logger, util } from 'appium/support';\nimport { SubProcess } from 'teen_process';\nimport { waitForCondition } from 'asyncbox';\nimport { findAPortNotInUse } from 'portscanner';\nimport { execSync } from 'child_process';\n\nconst SD_BINARY = 'safaridriver';\nconst STARTUP_TIMEOUT = 10000; // seconds\nconst SAFARI_PORT_RANGE = [5100, 5200];\n// This guard is needed to make sure\n// we never run multiple Safari driver processes for the same Appium process\nconst SAFARI_SERVER_GUARD = util.getLockFileGuard(\n path.resolve(os.tmpdir(), 'safari_server_guard.lock'),\n {timeout: 5, tryRecovery: true}\n);\n\n\nclass SafariProxy extends JWProxy {\n async proxyCommand (url, method, body = null) {\n if (this.didProcessExit) {\n throw new errors.InvalidContextError(\n `'${method} ${url}' cannot be proxied to Safari Driver server because ` +\n 'the process is not running (probably crashed). Check the server log for more details');\n }\n return await super.proxyCommand(url, method, body);\n }\n}\n\nclass SafariDriverProcess {\n constructor () {\n this.log = logger.getLogger('SafariDriverProcess');\n this.port = null;\n this.proc = null;\n }\n\n get isRunning () {\n return !!(this.proc?.isRunning);\n }\n\n async init () {\n await SAFARI_SERVER_GUARD(async () => {\n if (this.isRunning) {\n return;\n }\n\n const [startPort, endPort] = SAFARI_PORT_RANGE;\n try {\n this.port = await findAPortNotInUse(startPort, endPort);\n } catch (e) {\n throw new Error(\n `Cannot find any free port in range ${startPort}..${endPort}. ` +\n `Double check the processes that are locking ports within this range and terminate ` +\n `these which are not needed anymore`);\n }\n\n let safariBin;\n try {\n safariBin = await fs.which(SD_BINARY);\n } catch (e) {\n throw new Error(`${SD_BINARY} binary cannot be found in PATH. ` +\n `Please make sure it is present on your system`);\n }\n this.proc = new SubProcess(safariBin, ['-p', this.port, '--diagnose']);\n this.proc.on('output', (stdout, stderr) => {\n const line = stdout || stderr;\n this.log.debug(`[${SD_BINARY}] ${line}`);\n });\n this.proc.on('exit', (code, signal) => {\n this.log.info(`${SD_BINARY} has exited with code ${code}, signal ${signal}`);\n });\n this.log.info(`Starting '${safariBin}' on port ${this.port}`);\n await this.proc.start(0);\n });\n }\n\n async kill () {\n if (this.isRunning) {\n try {\n await this.proc.stop('SIGKILL');\n } catch (ign) {}\n }\n }\n}\n\n// Single server process per Appium instance\nconst SAFARI_DRIVER_PROCESS = new SafariDriverProcess();\nprocess.once('exit', () => {\n if (SAFARI_DRIVER_PROCESS.isRunning) {\n try {\n execSync(`kill ${SAFARI_DRIVER_PROCESS.proc.pid}`);\n } catch (ign) {}\n }\n});\n\nclass SafariDriverServer {\n constructor (log) {\n this.log = log;\n this.proxy = null;\n }\n\n get isRunning () {\n return !!(SAFARI_DRIVER_PROCESS.isRunning);\n }\n\n async start (caps) {\n await SAFARI_DRIVER_PROCESS.init();\n\n this.proxy = new SafariProxy({\n server: '127.0.0.1',\n port: SAFARI_DRIVER_PROCESS.port,\n base: '',\n log: this.log,\n keepAlive: true,\n });\n this.proxy.didProcessExit = false;\n SAFARI_DRIVER_PROCESS.proc.on('exit', () => {\n this.proxy.didProcessExit = true;\n });\n\n try {\n await waitForCondition(async () => {\n try {\n await this.proxy.command('/status', 'GET');\n return true;\n } catch (err) {\n if (this.proxy.didProcessExit) {\n throw new Error(err.message);\n }\n return false;\n }\n }, {\n waitMs: STARTUP_TIMEOUT,\n intervalMs: 1000,\n });\n } catch (e) {\n if (/Condition unmet/.test(e.message)) {\n if (SAFARI_DRIVER_PROCESS.isRunning) {\n // avoid \"frozen\" processes,\n await SAFARI_DRIVER_PROCESS.kill();\n }\n throw new Error(`Safari Driver server is not listening within ${STARTUP_TIMEOUT}ms timeout. ` +\n `Make sure it has been executed manually at least once with '--enable' command line argument. ` +\n `Check the server log for more details`);\n }\n throw e;\n }\n\n await this.proxy.command('/session', 'POST', {\n capabilities: {\n firstMatch: [{}],\n alwaysMatch: caps,\n }\n });\n }\n\n async stop () {\n if (!this.isRunning) {\n this.log.info(`${SD_BINARY} session cannot be stopped, because the server is not running`);\n return;\n }\n\n if (this.proxy?.sessionId) {\n try {\n await this.proxy.command(`/session/${this.proxy.sessionId}`, 'DELETE');\n } catch (e) {\n this.log.info(`${SD_BINARY} session cannot be deleted. Original error: ${e.message}`);\n }\n }\n }\n}\n\nexport default SafariDriverServer;\n"],"mappings":"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"}
|
package/build/lib/utils.js
CHANGED
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.formatCapsForServer = formatCapsForServer;
|
|
8
8
|
require("source-map-support/register");
|
|
9
|
+
var _driver = require("appium/driver");
|
|
9
10
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
10
11
|
const SAFARI_CAP_PREFIXES = ['safari:', 'webkit:'];
|
|
11
12
|
function formatCapsForServer(caps) {
|
|
@@ -17,8 +18,10 @@ function formatCapsForServer(caps) {
|
|
|
17
18
|
for (const [name, value] of _lodash.default.toPairs(caps)) {
|
|
18
19
|
if (SAFARI_CAP_PREFIXES.some(prefix => name.startsWith(prefix))) {
|
|
19
20
|
result[name] = value;
|
|
21
|
+
} else if (!_lodash.default.has(result, name) && _driver.STANDARD_CAPS.has(name)) {
|
|
22
|
+
result[name] = value;
|
|
20
23
|
}
|
|
21
24
|
}
|
|
22
25
|
return result;
|
|
23
26
|
}
|
|
24
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZHJpdmVyIiwicmVxdWlyZSIsIl9sb2Rhc2giLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiU0FGQVJJX0NBUF9QUkVGSVhFUyIsImZvcm1hdENhcHNGb3JTZXJ2ZXIiLCJjYXBzIiwicmVzdWx0IiwiYnJvd3Nlck5hbWUiLCJicm93c2VyVmVyc2lvbiIsInBsYXRmb3JtTmFtZSIsIm5hbWUiLCJ2YWx1ZSIsIl8iLCJ0b1BhaXJzIiwic29tZSIsInByZWZpeCIsInN0YXJ0c1dpdGgiLCJoYXMiLCJTVEFOREFSRF9DQVBTIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL3V0aWxzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNUQU5EQVJEX0NBUFMgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmNvbnN0IFNBRkFSSV9DQVBfUFJFRklYRVMgPSBbJ3NhZmFyaTonLCAnd2Via2l0OiddO1xuXG5mdW5jdGlvbiBmb3JtYXRDYXBzRm9yU2VydmVyIChjYXBzKSB7XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBicm93c2VyTmFtZTogJ1NhZmFyaScsXG4gICAgYnJvd3NlclZlcnNpb246IGNhcHMuYnJvd3NlclZlcnNpb24sXG4gICAgcGxhdGZvcm1OYW1lOiBjYXBzLnBsYXRmb3JtTmFtZSB8fCAnaU9TJyxcbiAgfTtcbiAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIF8udG9QYWlycyhjYXBzKSkge1xuICAgIGlmIChTQUZBUklfQ0FQX1BSRUZJWEVTLnNvbWUoKHByZWZpeCkgPT4gbmFtZS5zdGFydHNXaXRoKHByZWZpeCkpKSB7XG4gICAgICByZXN1bHRbbmFtZV0gPSB2YWx1ZTtcbiAgICB9IGVsc2UgaWYgKCFfLmhhcyhyZXN1bHQsIG5hbWUpICYmIFNUQU5EQVJEX0NBUFMuaGFzKG5hbWUpKSB7XG4gICAgICByZXN1bHRbbmFtZV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IHsgZm9ybWF0Q2Fwc0ZvclNlcnZlciB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUVBLE1BQU1HLG1CQUFtQixHQUFHLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQztBQUVsRCxTQUFTQyxtQkFBbUJBLENBQUVDLElBQUksRUFBRTtFQUNsQyxNQUFNQyxNQUFNLEdBQUc7SUFDYkMsV0FBVyxFQUFFLFFBQVE7SUFDckJDLGNBQWMsRUFBRUgsSUFBSSxDQUFDRyxjQUFjO0lBQ25DQyxZQUFZLEVBQUVKLElBQUksQ0FBQ0ksWUFBWSxJQUFJO0VBQ3JDLENBQUM7RUFDRCxLQUFLLE1BQU0sQ0FBQ0MsSUFBSSxFQUFFQyxLQUFLLENBQUMsSUFBSUMsZUFBQyxDQUFDQyxPQUFPLENBQUNSLElBQUksQ0FBQyxFQUFFO0lBQzNDLElBQUlGLG1CQUFtQixDQUFDVyxJQUFJLENBQUVDLE1BQU0sSUFBS0wsSUFBSSxDQUFDTSxVQUFVLENBQUNELE1BQU0sQ0FBQyxDQUFDLEVBQUU7TUFDakVULE1BQU0sQ0FBQ0ksSUFBSSxDQUFDLEdBQUdDLEtBQUs7SUFDdEIsQ0FBQyxNQUFNLElBQUksQ0FBQ0MsZUFBQyxDQUFDSyxHQUFHLENBQUNYLE1BQU0sRUFBRUksSUFBSSxDQUFDLElBQUlRLHFCQUFhLENBQUNELEdBQUcsQ0FBQ1AsSUFBSSxDQUFDLEVBQUU7TUFDMURKLE1BQU0sQ0FBQ0ksSUFBSSxDQUFDLEdBQUdDLEtBQUs7SUFDdEI7RUFDRjtFQUNBLE9BQU9MLE1BQU07QUFDZiJ9
|
package/build/lib/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":["
|
|
1
|
+
{"version":3,"file":"utils.js","names":["_driver","require","_lodash","_interopRequireDefault","SAFARI_CAP_PREFIXES","formatCapsForServer","caps","result","browserName","browserVersion","platformName","name","value","_","toPairs","some","prefix","startsWith","has","STANDARD_CAPS"],"sources":["../../lib/utils.js"],"sourcesContent":["import { STANDARD_CAPS } from 'appium/driver';\nimport _ from 'lodash';\n\nconst SAFARI_CAP_PREFIXES = ['safari:', 'webkit:'];\n\nfunction formatCapsForServer (caps) {\n const result = {\n browserName: 'Safari',\n browserVersion: caps.browserVersion,\n platformName: caps.platformName || 'iOS',\n };\n for (const [name, value] of _.toPairs(caps)) {\n if (SAFARI_CAP_PREFIXES.some((prefix) => name.startsWith(prefix))) {\n result[name] = value;\n } else if (!_.has(result, name) && STANDARD_CAPS.has(name)) {\n result[name] = value;\n }\n }\n return result;\n}\n\nexport { formatCapsForServer };\n"],"mappings":";;;;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAC,sBAAA,CAAAF,OAAA;AAEA,MAAMG,mBAAmB,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC;AAElD,SAASC,mBAAmBA,CAAEC,IAAI,EAAE;EAClC,MAAMC,MAAM,GAAG;IACbC,WAAW,EAAE,QAAQ;IACrBC,cAAc,EAAEH,IAAI,CAACG,cAAc;IACnCC,YAAY,EAAEJ,IAAI,CAACI,YAAY,IAAI;EACrC,CAAC;EACD,KAAK,MAAM,CAACC,IAAI,EAAEC,KAAK,CAAC,IAAIC,eAAC,CAACC,OAAO,CAACR,IAAI,CAAC,EAAE;IAC3C,IAAIF,mBAAmB,CAACW,IAAI,CAAEC,MAAM,IAAKL,IAAI,CAACM,UAAU,CAACD,MAAM,CAAC,CAAC,EAAE;MACjET,MAAM,CAACI,IAAI,CAAC,GAAGC,KAAK;IACtB,CAAC,MAAM,IAAI,CAACC,eAAC,CAACK,GAAG,CAACX,MAAM,EAAEI,IAAI,CAAC,IAAIQ,qBAAa,CAACD,GAAG,CAACP,IAAI,CAAC,EAAE;MAC1DJ,MAAM,CAACI,IAAI,CAAC,GAAGC,KAAK;IACtB;EACF;EACA,OAAOL,MAAM;AACf"}
|