appium-safari-driver 3.2.4 → 3.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1 +1,3 @@
1
+ ## [3.2.5](https://github.com/appium/appium-safari-driver/compare/v3.2.4...v3.2.5) (2022-11-29)
2
+
1
3
  ## [3.2.4](https://github.com/appium/appium-safari-driver/compare/v3.2.3...v3.2.4) (2022-11-06)
@@ -7,7 +7,6 @@ exports.default = exports.commands = void 0;
7
7
  require("source-map-support/register");
8
8
  var _support = require("appium/support");
9
9
  const commands = {};
10
-
11
10
  exports.commands = commands;
12
11
  commands.findElOrEls = async function findElOrEls(strategy, selector, mult, context) {
13
12
  context = _support.util.unwrapElement(context);
@@ -19,4 +18,4 @@ commands.findElOrEls = async function findElOrEls(strategy, selector, mult, cont
19
18
  };
20
19
  var _default = commands;
21
20
  exports.default = _default;
22
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsImZpbmRFbE9yRWxzIiwic3RyYXRlZ3kiLCJzZWxlY3RvciIsIm11bHQiLCJjb250ZXh0IiwidXRpbCIsInVud3JhcEVsZW1lbnQiLCJlbmRwb2ludCIsInNhZmFyaSIsInByb3h5IiwiY29tbWFuZCIsInVzaW5nIiwidmFsdWUiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvZmluZC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1dGlsIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuXG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5cbi8vIFRoaXMgaXMgbmVlZGVkIHRvIG1ha2UgbG9va3VwIGJ5IGltYWdlIHdvcmtpbmdcbmNvbW1hbmRzLmZpbmRFbE9yRWxzID0gYXN5bmMgZnVuY3Rpb24gZmluZEVsT3JFbHMgKHN0cmF0ZWd5LCBzZWxlY3RvciwgbXVsdCwgY29udGV4dCkge1xuICBjb250ZXh0ID0gdXRpbC51bndyYXBFbGVtZW50KGNvbnRleHQpO1xuICBjb25zdCBlbmRwb2ludCA9IGAvZWxlbWVudCR7Y29udGV4dCA/IGAvJHtjb250ZXh0fS9lbGVtZW50YCA6ICcnfSR7bXVsdCA/ICdzJyA6ICcnfWA7XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMuc2FmYXJpLnByb3h5LmNvbW1hbmQoZW5kcG9pbnQsICdQT1NUJywge1xuICAgIHVzaW5nOiBzdHJhdGVneSxcbiAgICB2YWx1ZTogc2VsZWN0b3IsXG4gIH0pO1xufTtcblxuXG5leHBvcnQgeyBjb21tYW5kcyB9O1xuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUdBLE1BQU1BLFFBQVEsR0FBRyxDQUFDLENBQUM7O0FBQUM7QUFHcEJBLFFBQVEsQ0FBQ0MsV0FBVyxHQUFHLGVBQWVBLFdBQVcsQ0FBRUMsUUFBUSxFQUFFQyxRQUFRLEVBQUVDLElBQUksRUFBRUMsT0FBTyxFQUFFO0VBQ3BGQSxPQUFPLEdBQUdDLGFBQUksQ0FBQ0MsYUFBYSxDQUFDRixPQUFPLENBQUM7RUFDckMsTUFBTUcsUUFBUSxHQUFJLFdBQVVILE9BQU8sR0FBSSxJQUFHQSxPQUFRLFVBQVMsR0FBRyxFQUFHLEdBQUVELElBQUksR0FBRyxHQUFHLEdBQUcsRUFBRyxFQUFDO0VBRXBGLE9BQU8sTUFBTSxJQUFJLENBQUNLLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDQyxPQUFPLENBQUNILFFBQVEsRUFBRSxNQUFNLEVBQUU7SUFDdkRJLEtBQUssRUFBRVYsUUFBUTtJQUNmVyxLQUFLLEVBQUVWO0VBQ1QsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUFDLGVBSWFILFFBQVE7QUFBQSJ9
21
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsImZpbmRFbE9yRWxzIiwic3RyYXRlZ3kiLCJzZWxlY3RvciIsIm11bHQiLCJjb250ZXh0IiwidXRpbCIsInVud3JhcEVsZW1lbnQiLCJlbmRwb2ludCIsInNhZmFyaSIsInByb3h5IiwiY29tbWFuZCIsInVzaW5nIiwidmFsdWUiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvZmluZC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1dGlsIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuXG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5cbi8vIFRoaXMgaXMgbmVlZGVkIHRvIG1ha2UgbG9va3VwIGJ5IGltYWdlIHdvcmtpbmdcbmNvbW1hbmRzLmZpbmRFbE9yRWxzID0gYXN5bmMgZnVuY3Rpb24gZmluZEVsT3JFbHMgKHN0cmF0ZWd5LCBzZWxlY3RvciwgbXVsdCwgY29udGV4dCkge1xuICBjb250ZXh0ID0gdXRpbC51bndyYXBFbGVtZW50KGNvbnRleHQpO1xuICBjb25zdCBlbmRwb2ludCA9IGAvZWxlbWVudCR7Y29udGV4dCA/IGAvJHtjb250ZXh0fS9lbGVtZW50YCA6ICcnfSR7bXVsdCA/ICdzJyA6ICcnfWA7XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMuc2FmYXJpLnByb3h5LmNvbW1hbmQoZW5kcG9pbnQsICdQT1NUJywge1xuICAgIHVzaW5nOiBzdHJhdGVneSxcbiAgICB2YWx1ZTogc2VsZWN0b3IsXG4gIH0pO1xufTtcblxuXG5leHBvcnQgeyBjb21tYW5kcyB9O1xuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUdBLE1BQU1BLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFBQztBQUdwQkEsUUFBUSxDQUFDQyxXQUFXLEdBQUcsZUFBZUEsV0FBVyxDQUFFQyxRQUFRLEVBQUVDLFFBQVEsRUFBRUMsSUFBSSxFQUFFQyxPQUFPLEVBQUU7RUFDcEZBLE9BQU8sR0FBR0MsYUFBSSxDQUFDQyxhQUFhLENBQUNGLE9BQU8sQ0FBQztFQUNyQyxNQUFNRyxRQUFRLEdBQUksV0FBVUgsT0FBTyxHQUFJLElBQUdBLE9BQVEsVUFBUyxHQUFHLEVBQUcsR0FBRUQsSUFBSSxHQUFHLEdBQUcsR0FBRyxFQUFHLEVBQUM7RUFFcEYsT0FBTyxNQUFNLElBQUksQ0FBQ0ssTUFBTSxDQUFDQyxLQUFLLENBQUNDLE9BQU8sQ0FBQ0gsUUFBUSxFQUFFLE1BQU0sRUFBRTtJQUN2REksS0FBSyxFQUFFVixRQUFRO0lBQ2ZXLEtBQUssRUFBRVY7RUFDVCxDQUFDLENBQUM7QUFDSixDQUFDO0FBQUMsZUFJYUgsUUFBUTtBQUFBIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"find.js","names":["commands","findElOrEls","strategy","selector","mult","context","util","unwrapElement","endpoint","safari","proxy","command","using","value"],"sources":["../../../lib/commands/find.js"],"sourcesContent":["import { util } from 'appium/support';\n\n\nconst commands = {};\n\n// This is needed to make lookup by image working\ncommands.findElOrEls = async function findElOrEls (strategy, selector, mult, context) {\n context = util.unwrapElement(context);\n const endpoint = `/element${context ? `/${context}/element` : ''}${mult ? 's' : ''}`;\n\n return await this.safari.proxy.command(endpoint, 'POST', {\n using: strategy,\n value: selector,\n });\n};\n\n\nexport { commands };\nexport default commands;\n"],"mappings":";;;;;;;AAAA;AAGA,MAAMA,QAAQ,GAAG,CAAC,CAAC;;AAAC;AAGpBA,QAAQ,CAACC,WAAW,GAAG,eAAeA,WAAW,CAAEC,QAAQ,EAAEC,QAAQ,EAAEC,IAAI,EAAEC,OAAO,EAAE;EACpFA,OAAO,GAAGC,aAAI,CAACC,aAAa,CAACF,OAAO,CAAC;EACrC,MAAMG,QAAQ,GAAI,WAAUH,OAAO,GAAI,IAAGA,OAAQ,UAAS,GAAG,EAAG,GAAED,IAAI,GAAG,GAAG,GAAG,EAAG,EAAC;EAEpF,OAAO,MAAM,IAAI,CAACK,MAAM,CAACC,KAAK,CAACC,OAAO,CAACH,QAAQ,EAAE,MAAM,EAAE;IACvDI,KAAK,EAAEV,QAAQ;IACfW,KAAK,EAAEV;EACT,CAAC,CAAC;AACJ,CAAC;AAAC,eAIaH,QAAQ;AAAA"}
1
+ {"version":3,"file":"find.js","names":["commands","findElOrEls","strategy","selector","mult","context","util","unwrapElement","endpoint","safari","proxy","command","using","value"],"sources":["../../../lib/commands/find.js"],"sourcesContent":["import { util } from 'appium/support';\n\n\nconst commands = {};\n\n// This is needed to make lookup by image working\ncommands.findElOrEls = async function findElOrEls (strategy, selector, mult, context) {\n context = util.unwrapElement(context);\n const endpoint = `/element${context ? `/${context}/element` : ''}${mult ? 's' : ''}`;\n\n return await this.safari.proxy.command(endpoint, 'POST', {\n using: strategy,\n value: selector,\n });\n};\n\n\nexport { commands };\nexport default commands;\n"],"mappings":";;;;;;;AAAA;AAGA,MAAMA,QAAQ,GAAG,CAAC,CAAC;AAAC;AAGpBA,QAAQ,CAACC,WAAW,GAAG,eAAeA,WAAW,CAAEC,QAAQ,EAAEC,QAAQ,EAAEC,IAAI,EAAEC,OAAO,EAAE;EACpFA,OAAO,GAAGC,aAAI,CAACC,aAAa,CAACF,OAAO,CAAC;EACrC,MAAMG,QAAQ,GAAI,WAAUH,OAAO,GAAI,IAAGA,OAAQ,UAAS,GAAG,EAAG,GAAED,IAAI,GAAG,GAAG,GAAG,EAAG,EAAC;EAEpF,OAAO,MAAM,IAAI,CAACK,MAAM,CAACC,KAAK,CAACC,OAAO,CAACH,QAAQ,EAAE,MAAM,EAAE;IACvDI,KAAK,EAAEV,QAAQ;IACfW,KAAK,EAAEV;EACT,CAAC,CAAC;AACJ,CAAC;AAAC,eAIaH,QAAQ;AAAA"}
@@ -11,8 +11,7 @@ var _cookies = _interopRequireDefault(require("./cookies"));
11
11
  var _recordScreen = _interopRequireDefault(require("./record-screen"));
12
12
  const commands = {};
13
13
  exports.commands = commands;
14
- Object.assign(commands, _find.default, _cookies.default, _recordScreen.default
15
- );
14
+ Object.assign(commands, _find.default, _cookies.default, _recordScreen.default);
16
15
  var _default = commands;
17
16
  exports.default = _default;
18
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsIk9iamVjdCIsImFzc2lnbiIsImZpbmRDbWRzIiwiY29va2llQ21kcyIsInJlY29yZFNjcmVlbkNvbW1hbmRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmaW5kQ21kcyBmcm9tICcuL2ZpbmQnO1xuaW1wb3J0IGNvb2tpZUNtZHMgZnJvbSAnLi9jb29raWVzJztcbmltcG9ydCByZWNvcmRTY3JlZW5Db21tYW5kcyBmcm9tICcuL3JlY29yZC1zY3JlZW4nO1xuXG5jb25zdCBjb21tYW5kcyA9IHt9O1xuT2JqZWN0LmFzc2lnbihcbiAgY29tbWFuZHMsXG4gIGZpbmRDbWRzLFxuICBjb29raWVDbWRzLFxuICByZWNvcmRTY3JlZW5Db21tYW5kcyxcbiAgLy8gYWRkIG90aGVyIGNvbW1hbmQgdHlwZXMgaGVyZVxuKTtcblxuZXhwb3J0IHsgY29tbWFuZHMgfTtcbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUVBLE1BQU1BLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFBQztBQUNwQkMsTUFBTSxDQUFDQyxNQUFNLENBQ1hGLFFBQVEsRUFDUkcsYUFBUSxFQUNSQyxnQkFBVSxFQUNWQztBQUFvQixDQUVyQjtBQUFDLGVBR2FMLFFBQVE7QUFBQSJ9
17
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsIk9iamVjdCIsImFzc2lnbiIsImZpbmRDbWRzIiwiY29va2llQ21kcyIsInJlY29yZFNjcmVlbkNvbW1hbmRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmaW5kQ21kcyBmcm9tICcuL2ZpbmQnO1xuaW1wb3J0IGNvb2tpZUNtZHMgZnJvbSAnLi9jb29raWVzJztcbmltcG9ydCByZWNvcmRTY3JlZW5Db21tYW5kcyBmcm9tICcuL3JlY29yZC1zY3JlZW4nO1xuXG5jb25zdCBjb21tYW5kcyA9IHt9O1xuT2JqZWN0LmFzc2lnbihcbiAgY29tbWFuZHMsXG4gIGZpbmRDbWRzLFxuICBjb29raWVDbWRzLFxuICByZWNvcmRTY3JlZW5Db21tYW5kcyxcbiAgLy8gYWRkIG90aGVyIGNvbW1hbmQgdHlwZXMgaGVyZVxuKTtcblxuZXhwb3J0IHsgY29tbWFuZHMgfTtcbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUVBLE1BQU1BLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFBQztBQUNwQkMsTUFBTSxDQUFDQyxNQUFNLENBQ1hGLFFBQVEsRUFDUkcsYUFBUSxFQUNSQyxnQkFBVSxFQUNWQyxxQkFBb0IsQ0FFckI7QUFBQyxlQUdhTCxRQUFRO0FBQUEifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["commands","Object","assign","findCmds","cookieCmds","recordScreenCommands"],"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;AACA;AACA;AAEA,MAAMA,QAAQ,GAAG,CAAC,CAAC;AAAC;AACpBC,MAAM,CAACC,MAAM,CACXF,QAAQ,EACRG,aAAQ,EACRC,gBAAU,EACVC;AAAoB,CAErB;AAAC,eAGaL,QAAQ;AAAA"}
1
+ {"version":3,"file":"index.js","names":["commands","Object","assign","findCmds","cookieCmds","recordScreenCommands"],"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;AACA;AACA;AAEA,MAAMA,QAAQ,GAAG,CAAC,CAAC;AAAC;AACpBC,MAAM,CAACC,MAAM,CACXF,QAAQ,EACRG,aAAQ,EACRC,gBAAU,EACVC,qBAAoB,CAErB;AAAC,eAGaL,QAAQ;AAAA"}
@@ -191,7 +191,6 @@ async function extractSimulatorUdid(caps) {
191
191
  }
192
192
  return null;
193
193
  }
194
-
195
194
  commands.startRecordingScreen = async function startRecordingScreen(options = {}) {
196
195
  var _this$_screenRecorder;
197
196
  const {
@@ -232,7 +231,6 @@ commands.startRecordingScreen = async function startRecordingScreen(options = {}
232
231
  throw e;
233
232
  }
234
233
  };
235
-
236
234
  commands.stopRecordingScreen = async function stopRecordingScreen(options = {}) {
237
235
  if (!this._screenRecorder) {
238
236
  this.log.info('No screen recording has been started. Doing nothing');
@@ -254,4 +252,4 @@ commands.stopRecordingScreen = async function stopRecordingScreen(options = {})
254
252
  };
255
253
  var _default = commands;
256
254
  exports.default = _default;
257
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsIlNUQVJUVVBfSU5URVJWQUxfTVMiLCJTVEFSVFVQX1RJTUVPVVRfTVMiLCJERUZBVUxUX1RJTUVfTElNSVRfTVMiLCJQUk9DRVNTX1NIVVRET1dOX1RJTUVPVVRfTVMiLCJERUZBVUxUX0VYVCIsInVwbG9hZFJlY29yZGVkTWVkaWEiLCJsb2NhbEZpbGUiLCJyZW1vdGVQYXRoIiwidXBsb2FkT3B0aW9ucyIsIl8iLCJpc0VtcHR5IiwidXRpbCIsInRvSW5NZW1vcnlCYXNlNjQiLCJ0b1N0cmluZyIsInVzZXIiLCJwYXNzIiwibWV0aG9kIiwiaGVhZGVycyIsImZpbGVGaWVsZE5hbWUiLCJmb3JtRmllbGRzIiwib3B0aW9ucyIsImF1dGgiLCJuZXQiLCJ1cGxvYWRGaWxlIiwiVklERU9fRklMRVMiLCJTZXQiLCJwcm9jZXNzIiwib24iLCJ2aWRlb0ZpbGUiLCJmcyIsInJpbXJhZlN5bmMiLCJpZ24iLCJTY3JlZW5SZWNvcmRlciIsImNvbnN0cnVjdG9yIiwidWRpZCIsInZpZGVvUGF0aCIsImxvZyIsIm9wdHMiLCJfcHJvY2VzcyIsIl91ZGlkIiwiX3ZpZGVvUGF0aCIsIl9jb2RlYyIsImNvZGVjIiwiX2Rpc3BsYXkiLCJkaXNwbGF5IiwiX21hc2siLCJtYXNrIiwiX3RpbWVMaW1pdE1zIiwidGltZUxpbWl0IiwiX3RpbWVyIiwiZ2V0VmlkZW9QYXRoIiwiZXhpc3RzIiwiYWRkIiwiaXNSdW5uaW5nIiwiX2VuZm9yY2VUZXJtaW5hdGlvbiIsImRlYnVnIiwic3RvcCIsInJpbXJhZiIsImRlbGV0ZSIsInN0YXJ0IiwiYXJncyIsInB1c2giLCJTaW1jdGwiLCJleGVjIiwiYXN5bmNocm9ub3VzIiwicXVvdGUiLCJzdGRvdXQiLCJzdGRlcnIiLCJsaW5lIiwidHJpbSIsInN1YnN0cmluZyIsIm9uY2UiLCJjb2RlIiwic2lnbmFsIiwid2FybiIsIndhaXRGb3JDb25kaXRpb24iLCJFcnJvciIsIndhaXRNcyIsImludGVydmFsTXMiLCJlIiwiZXJyb3JBbmRUaHJvdyIsInNldFRpbWVvdXQiLCJlcnJvciIsImluZm8iLCJmb3JjZSIsImNsZWFyVGltZW91dCIsImV4dHJhY3RTaW11bGF0b3JVZGlkIiwiY2FwcyIsImFsbERldmljZXMiLCJmbGF0TWFwIiwidmFsdWVzIiwiZ2V0RGV2aWNlcyIsIm5hbWUiLCJzdGF0ZSIsInNkayIsInRvTG93ZXIiLCJzdGFydFJlY29yZGluZ1NjcmVlbiIsImZvcmNlUmVzdGFydCIsIl9zY3JlZW5SZWNvcmRlciIsInRlbXBEaXIiLCJwYXRoIiwicHJlZml4IiwidXVpZFY0Iiwic3VmZml4IiwicGFyc2VJbnQiLCJzdG9wUmVjb3JkaW5nU2NyZWVuIiwic2l6ZSIsInN0YXQiLCJ0b1JlYWRhYmxlU2l6ZVN0cmluZyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9yZWNvcmQtc2NyZWVuLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyB1dGlsLCBmcywgbmV0LCB0ZW1wRGlyIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCBTaW1jdGwgZnJvbSAnbm9kZS1zaW1jdGwnO1xuXG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5cbmNvbnN0IFNUQVJUVVBfSU5URVJWQUxfTVMgPSAzMDA7XG5jb25zdCBTVEFSVFVQX1RJTUVPVVRfTVMgPSAxMCAqIDEwMDA7XG5jb25zdCBERUZBVUxUX1RJTUVfTElNSVRfTVMgPSA2MCAqIDEwICogMTAwMDsgLy8gMTAgbWludXRlc1xuY29uc3QgUFJPQ0VTU19TSFVURE9XTl9USU1FT1VUX01TID0gMTAgKiAxMDAwO1xuY29uc3QgREVGQVVMVF9FWFQgPSAnLm1wNCc7XG5cblxuYXN5bmMgZnVuY3Rpb24gdXBsb2FkUmVjb3JkZWRNZWRpYSAobG9jYWxGaWxlLCByZW1vdGVQYXRoID0gbnVsbCwgdXBsb2FkT3B0aW9ucyA9IHt9KSB7XG4gIGlmIChfLmlzRW1wdHkocmVtb3RlUGF0aCkpIHtcbiAgICByZXR1cm4gKGF3YWl0IHV0aWwudG9Jbk1lbW9yeUJhc2U2NChsb2NhbEZpbGUpKS50b1N0cmluZygpO1xuICB9XG5cbiAgY29uc3Qge3VzZXIsIHBhc3MsIG1ldGhvZCwgaGVhZGVycywgZmlsZUZpZWxkTmFtZSwgZm9ybUZpZWxkc30gPSB1cGxvYWRPcHRpb25zO1xuICBjb25zdCBvcHRpb25zID0ge1xuICAgIG1ldGhvZDogbWV0aG9kIHx8ICdQVVQnLFxuICAgIGhlYWRlcnMsXG4gICAgZmlsZUZpZWxkTmFtZSxcbiAgICBmb3JtRmllbGRzLFxuICB9O1xuICBpZiAodXNlciAmJiBwYXNzKSB7XG4gICAgb3B0aW9ucy5hdXRoID0ge3VzZXIsIHBhc3N9O1xuICB9XG4gIGF3YWl0IG5ldC51cGxvYWRGaWxlKGxvY2FsRmlsZSwgcmVtb3RlUGF0aCwgb3B0aW9ucyk7XG4gIHJldHVybiAnJztcbn1cblxuY29uc3QgVklERU9fRklMRVMgPSBuZXcgU2V0KCk7XG5wcm9jZXNzLm9uKCdleGl0JywgKCkgPT4ge1xuICBmb3IgKGNvbnN0IHZpZGVvRmlsZSBvZiBWSURFT19GSUxFUykge1xuICAgIHRyeSB7XG4gICAgICBmcy5yaW1yYWZTeW5jKHZpZGVvRmlsZSk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICB9XG59KTtcblxuY2xhc3MgU2NyZWVuUmVjb3JkZXIge1xuICBjb25zdHJ1Y3RvciAodWRpZCwgdmlkZW9QYXRoLCBsb2csIG9wdHMgPSB7fSkge1xuICAgIHRoaXMubG9nID0gbG9nO1xuICAgIHRoaXMuX3Byb2Nlc3MgPSBudWxsO1xuICAgIHRoaXMuX3VkaWQgPSB1ZGlkO1xuICAgIHRoaXMuX3ZpZGVvUGF0aCA9IHZpZGVvUGF0aDtcbiAgICB0aGlzLl9jb2RlYyA9IG9wdHMuY29kZWM7XG4gICAgdGhpcy5fZGlzcGxheSA9IG9wdHMuZGlzcGxheTtcbiAgICB0aGlzLl9tYXNrID0gb3B0cy5tYXNrO1xuICAgIHRoaXMuX3RpbWVMaW1pdE1zID0gb3B0cy50aW1lTGltaXQgPiAwID8gb3B0cy50aW1lTGltaXQgKiAxMDAwIDogREVGQVVMVF9USU1FX0xJTUlUX01TO1xuICAgIHRoaXMuX3RpbWVyID0gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIGdldFZpZGVvUGF0aCAoKSB7XG4gICAgaWYgKGF3YWl0IGZzLmV4aXN0cyh0aGlzLl92aWRlb1BhdGgpKSB7XG4gICAgICBWSURFT19GSUxFUy5hZGQodGhpcy5fdmlkZW9QYXRoKTtcbiAgICAgIHJldHVybiB0aGlzLl92aWRlb1BhdGg7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGdldCBpc1J1bm5pbmcgKCkge1xuICAgIHJldHVybiAhISh0aGlzLl9wcm9jZXNzPy5pc1J1bm5pbmcpO1xuICB9XG5cbiAgYXN5bmMgX2VuZm9yY2VUZXJtaW5hdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMuaXNSdW5uaW5nKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnRm9yY2Utc3RvcHBpbmcgdGhlIGN1cnJlbnRseSBydW5uaW5nIHZpZGVvIHJlY29yZGluZycpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5fcHJvY2Vzcy5zdG9wKCdTSUdLSUxMJyk7XG4gICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgfVxuICAgIHRoaXMuX3Byb2Nlc3MgPSBudWxsO1xuICAgIGNvbnN0IHZpZGVvUGF0aCA9IGF3YWl0IHRoaXMuZ2V0VmlkZW9QYXRoKCk7XG4gICAgaWYgKHZpZGVvUGF0aCkge1xuICAgICAgYXdhaXQgZnMucmltcmFmKHZpZGVvUGF0aCk7XG4gICAgICBWSURFT19GSUxFUy5kZWxldGUodmlkZW9QYXRoKTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQgKCkge1xuICAgIGNvbnN0IGFyZ3MgPSBbXG4gICAgICB0aGlzLl91ZGlkLCAncmVjb3JkVmlkZW8nXG4gICAgXTtcbiAgICBpZiAodGhpcy5fZGlzcGxheSkge1xuICAgICAgYXJncy5wdXNoKCctLWRpc3BsYXknLCB0aGlzLl9kaXNwbGF5KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2NvZGVjKSB7XG4gICAgICBhcmdzLnB1c2goJy0tY29kZWMnLCB0aGlzLl9jb2RlYyk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9tYXNrKSB7XG4gICAgICBhcmdzLnB1c2goJy0tbWFzaycsIHRoaXMuX21hc2spO1xuICAgIH1cbiAgICBhcmdzLnB1c2goJy0tZm9yY2UnLCB0aGlzLl92aWRlb1BhdGgpO1xuICAgIHRoaXMuX3Byb2Nlc3MgPSBhd2FpdCBuZXcgU2ltY3RsKCkuZXhlYygnaW8nLCB7XG4gICAgICBhcmdzLFxuICAgICAgYXN5bmNocm9ub3VzOiB0cnVlLFxuICAgIH0pO1xuICAgIHRoaXMubG9nLmRlYnVnKGBTdGFydGluZyB2aWRlbyByZWNvcmRpbmcgd2l0aCBhcmd1bWVudHM6ICR7dXRpbC5xdW90ZShhcmdzKX1gKTtcbiAgICB0aGlzLl9wcm9jZXNzLm9uKCdvdXRwdXQnLCAoc3Rkb3V0LCBzdGRlcnIpID0+IHtcbiAgICAgIGNvbnN0IGxpbmUgPSBfLnRyaW0oc3Rkb3V0IHx8IHN0ZGVycik7XG4gICAgICBpZiAobGluZSkge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgW3JlY29yZFZpZGVvQCR7dGhpcy5fdWRpZC5zdWJzdHJpbmcoMCwgOCl9XSAke2xpbmV9YCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5fcHJvY2Vzcy5vbmNlKCdleGl0JywgYXN5bmMgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgdGhpcy5fcHJvY2VzcyA9IG51bGw7XG4gICAgICBpZiAoY29kZSA9PT0gMCkge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZygnU2NyZWVuIHJlY29yZGluZyBleGl0ZWQgd2l0aG91dCBlcnJvcnMnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMuX2VuZm9yY2VUZXJtaW5hdGlvbigpO1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBTY3JlZW4gcmVjb3JkaW5nIGV4aXRlZCB3aXRoIGVycm9yIGNvZGUgJHtjb2RlfSwgc2lnbmFsICR7c2lnbmFsfWApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGF3YWl0IHRoaXMuX3Byb2Nlc3Muc3RhcnQoMCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuaXNSdW5uaW5nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICEhKGF3YWl0IHRoaXMuZ2V0VmlkZW9QYXRoKCkpO1xuICAgICAgfSwge1xuICAgICAgICB3YWl0TXM6IFNUQVJUVVBfVElNRU9VVF9NUyxcbiAgICAgICAgaW50ZXJ2YWxNczogU1RBUlRVUF9JTlRFUlZBTF9NUyxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2VuZm9yY2VUZXJtaW5hdGlvbigpO1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgVGhlIGV4cGVjdGVkIHNjcmVlbiByZWNvcmQgZmlsZSAnJHt0aGlzLl92aWRlb1BhdGh9JyBkb2VzIG5vdCBleGlzdCBhZnRlciAke1NUQVJUVVBfVElNRU9VVF9NU31tcy4gYCArXG4gICAgICAgIGBDaGVjayB0aGUgc2VydmVyIGxvZyBmb3IgbW9yZSBkZXRhaWxzYCk7XG4gICAgfVxuICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1J1bm5pbmcpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnN0b3AoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRoaXMubG9nLmVycm9yKGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgdGhpcy5fdGltZUxpbWl0TXMpO1xuICAgIHRoaXMubG9nLmluZm8oYFRoZSB2aWRlbyByZWNvcmRpbmcgaGFzIHN0YXJ0ZWQuIFdpbGwgdGltZW91dCBpbiAke3RoaXMuX3RpbWVMaW1pdE1zfW1zYCk7XG4gIH1cblxuICBhc3luYyBzdG9wIChmb3JjZSA9IGZhbHNlKSB7XG4gICAgaWYgKHRoaXMuX3RpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO1xuICAgICAgdGhpcy5fdGltZXIgPSBudWxsO1xuICAgIH1cblxuICAgIGlmIChmb3JjZSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2VuZm9yY2VUZXJtaW5hdGlvbigpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pc1J1bm5pbmcpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdTY3JlZW4gcmVjb3JkaW5nIGlzIG5vdCBydW5uaW5nLiBSZXR1cm5pbmcgdGhlIHJlY2VudGx5IHJlY29yZGVkIHZpZGVvJyk7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRWaWRlb1BhdGgoKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fcHJvY2Vzcy5zdG9wKCdTSUdJTlQnLCBQUk9DRVNTX1NIVVRET1dOX1RJTUVPVVRfTVMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2VuZm9yY2VUZXJtaW5hdGlvbigpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTY3JlZW4gcmVjb3JkaW5nIGhhcyBmYWlsZWQgdG8gc3RvcCBhZnRlciAke1BST0NFU1NfU0hVVERPV05fVElNRU9VVF9NU31tc2ApO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmdldFZpZGVvUGF0aCgpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RTaW11bGF0b3JVZGlkIChjYXBzKSB7XG4gIGlmIChjYXBzWydzYWZhcmk6dXNlU2ltdWxhdG9yJ10gPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBhbGxEZXZpY2VzID0gXy5mbGF0TWFwKF8udmFsdWVzKGF3YWl0IG5ldyBTaW1jdGwoKS5nZXREZXZpY2VzKG51bGwsICdpT1MnKSkpO1xuICBmb3IgKGNvbnN0IHtuYW1lLCB1ZGlkLCBzdGF0ZSwgc2RrfSBvZiBhbGxEZXZpY2VzKSB7XG4gICAgaWYgKHN0YXRlICE9PSAnQm9vdGVkJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKF8udG9Mb3dlcihjYXBzWydzYWZhcmk6ZGV2aWNlVURJRCddKSA9PT0gXy50b0xvd2VyKHVkaWQpKSB7XG4gICAgICByZXR1cm4gdWRpZDtcbiAgICB9XG4gICAgaWYgKF8udG9Mb3dlcihjYXBzWydzYWZhcmk6ZGV2aWNlTmFtZSddKSA9PT0gXy50b0xvd2VyKG5hbWUpICYmXG4gICAgICAoY2Fwc1snc2FmYXJpOnBsYXRmb3JtVmVyc2lvbiddICYmIGNhcHNbJ3NhZmFyaTpwbGF0Zm9ybVZlcnNpb24nXSA9PT0gc2RrXG4gICAgICAgIHx8ICFjYXBzWydzYWZhcmk6cGxhdGZvcm1WZXJzaW9uJ10pKSB7XG4gICAgICByZXR1cm4gdWRpZDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFN0YXJ0UmVjb3JkaW5nT3B0aW9uc1xuICpcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gY29kZWMgW2hldmNdIC0gU3BlY2lmaWVzIHRoZSBjb2RlYyB0eXBlOiBcImgyNjRcIiBvciBcImhldmNcIlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBkaXNwbGF5IFtpbnRlcm5hbF0gLSBTdXBwb3J0cyBcImludGVybmFsXCIgb3IgXCJleHRlcm5hbFwiLiBEZWZhdWx0IGlzIFwiaW50ZXJuYWxcIlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBtYXNrIC0gRm9yIG5vbi1yZWN0YW5ndWxhciBkaXNwbGF5cywgaGFuZGxlIHRoZSBtYXNrIGJ5IHBvbGljeTpcbiAqIC0gaWdub3JlZDogVGhlIG1hc2sgaXMgaWdub3JlZCBhbmQgdGhlIHVubWFza2VkIGZyYW1lYnVmZmVyIGlzIHNhdmVkLlxuICogLSBhbHBoYTogTm90IHN1cHBvcnRlZCwgYnV0IHJldGFpbmVkIGZvciBjb21wYXRpYmlsaXR5OyB0aGUgbWFzayBpcyByZW5kZXJlZCBibGFjay5cbiAqIC0gYmxhY2s6IFRoZSBtYXNrIGlzIHJlbmRlcmVkIGJsYWNrLlxuICogQHByb3BlcnR5IHtzdHJpbmd8bnVtYmVyfSB0aW1lTGltaXQgWzYwMF0gLSBUaGUgbWF4aW11bSByZWNvcmRpbmcgdGltZSwgaW4gc2Vjb25kcy4gVGhlIGRlZmF1bHRcbiAqIHZhbHVlIGlzIDYwMCBzZWNvbmRzICgxMCBtaW51dGVzKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZm9yY2VSZXN0YXJ0IFt0cnVlXSAtIFdoZXRoZXIgdG8gaWdub3JlIHRoZSBjYWxsIGlmIGEgc2NyZWVuIHJlY29yZGluZyBpcyBjdXJyZW50bHkgcnVubmluZ1xuICogKGBmYWxzZWApIG9yIHRvIHN0YXJ0IGEgbmV3IHJlY29yZGluZyBpbW1lZGlhdGVseSBhbmQgdGVybWluYXRlIHRoZSBleGlzdGluZyBvbmUgaWYgcnVubmluZyAoYHRydWVgKS5cbiAqL1xuXG4vKipcbiAqIFJlY29yZCB0aGUgU2ltdWxhdG9yJ3MgZGlzcGxheSBpbiBiYWNrZ3JvdW5kIHdoaWxlIHRoZSBhdXRvbWF0ZWQgdGVzdCBpcyBydW5uaW5nLlxuICogVGhpcyBtZXRob2QgdXNlcyBgeGNydW4gc2ltY3RsIGlvIHJlY29yZFZpZGVvYCBoZWxwZXIgdW5kZXIgdGhlIGhvb2QuXG4gKiBDaGVjayB0aGUgb3V0cHV0IG9mIGB4Y3J1biBzaW1jdGwgaW9gIGNvbW1hbmQgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAcGFyYW0gez9TdGFydFJlY29yZGluZ09wdGlvbnN9IG9wdGlvbnMgLSBUaGUgYXZhaWxhYmxlIG9wdGlvbnMuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgc2NyZWVuIHJlY29yZGluZyBoYXMgZmFpbGVkIHRvIHN0YXJ0IG9yIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBkZXN0aW5hdGlvbiBkZXZpY2UuXG4gKi9cbmNvbW1hbmRzLnN0YXJ0UmVjb3JkaW5nU2NyZWVuID0gYXN5bmMgZnVuY3Rpb24gc3RhcnRSZWNvcmRpbmdTY3JlZW4gKG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdGltZUxpbWl0LFxuICAgIGNvZGVjLFxuICAgIGRpc3BsYXksXG4gICAgbWFzayxcbiAgICBmb3JjZVJlc3RhcnQgPSB0cnVlLFxuICB9ID0gb3B0aW9ucztcbiAgaWYgKHRoaXMuX3NjcmVlblJlY29yZGVyPy5pc1J1bm5pbmcpIHtcbiAgICB0aGlzLmxvZy5pbmZvKCdUaGUgc2NyZWVuIHJlY29yZGluZyBpcyBhbHJlYWR5IHJ1bm5pbmcnKTtcbiAgICBpZiAoIWZvcmNlUmVzdGFydCkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnRG9pbmcgbm90aGluZycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmxvZy5pbmZvKCdGb3JjaW5nIHRoZSBhY3RpdmUgc2NyZWVuIHJlY29yZGluZyB0byBzdG9wJyk7XG4gICAgYXdhaXQgdGhpcy5fc2NyZWVuUmVjb3JkZXIuc3RvcCh0cnVlKTtcbiAgfVxuICB0aGlzLl9zY3JlZW5SZWNvcmRlciA9IG51bGw7XG5cbiAgY29uc3QgdWRpZCA9IGF3YWl0IGV4dHJhY3RTaW11bGF0b3JVZGlkKHRoaXMuY2Fwcyk7XG4gIGlmICghdWRpZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGRldGVybWluZSBTaW11bGF0b3IgVURJRCB0byByZWNvcmQgdGhlIHZpZGVvIGZyb20uICcgK1xuICAgICAgJ0RvdWJsZSBjaGVjayB5b3VyIHNlc3Npb24gY2FwYWJpbGl0aWVzJyk7XG4gIH1cblxuICBjb25zdCB2aWRlb1BhdGggPSBhd2FpdCB0ZW1wRGlyLnBhdGgoe1xuICAgIHByZWZpeDogdXRpbC51dWlkVjQoKS5zdWJzdHJpbmcoMCwgOCksXG4gICAgc3VmZml4OiBERUZBVUxUX0VYVCxcbiAgfSk7XG4gIHRoaXMuX3NjcmVlblJlY29yZGVyID0gbmV3IFNjcmVlblJlY29yZGVyKHVkaWQsIHZpZGVvUGF0aCwgdGhpcy5sb2csIHtcbiAgICB0aW1lTGltaXQ6IHBhcnNlSW50KHRpbWVMaW1pdCwgMTApLFxuICAgIGNvZGVjLFxuICAgIGRpc3BsYXksXG4gICAgbWFzayxcbiAgfSk7XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5fc2NyZWVuUmVjb3JkZXIuc3RhcnQoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRoaXMuX3NjcmVlblJlY29yZGVyID0gbnVsbDtcbiAgICB0aHJvdyBlO1xuICB9XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFN0b3BSZWNvcmRpbmdPcHRpb25zXG4gKlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSByZW1vdGVQYXRoIC0gVGhlIHBhdGggdG8gdGhlIHJlbW90ZSBsb2NhdGlvbiwgd2hlcmUgdGhlIHJlc3VsdGluZyB2aWRlbyBzaG91bGQgYmUgdXBsb2FkZWQuXG4gKiBUaGUgZm9sbG93aW5nIHByb3RvY29scyBhcmUgc3VwcG9ydGVkOiBodHRwL2h0dHBzLCBmdHAuXG4gKiBOdWxsIG9yIGVtcHR5IHN0cmluZyB2YWx1ZSAodGhlIGRlZmF1bHQgc2V0dGluZykgbWVhbnMgdGhlIGNvbnRlbnQgb2YgcmVzdWx0aW5nXG4gKiBmaWxlIHNob3VsZCBiZSBlbmNvZGVkIGFzIEJhc2U2NCBhbmQgcGFzc2VkIGFzIHRoZSBlbmRwb2ludCByZXNwb25zZSB2YWx1ZS5cbiAqIEFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93biBpZiB0aGUgZ2VuZXJhdGVkIG1lZGlhIGZpbGUgaXMgdG9vIGJpZyB0b1xuICogZml0IGludG8gdGhlIGF2YWlsYWJsZSBwcm9jZXNzIG1lbW9yeS5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gdXNlciAtIFRoZSBuYW1lIG9mIHRoZSB1c2VyIGZvciB0aGUgcmVtb3RlIGF1dGhlbnRpY2F0aW9uLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBwYXNzIC0gVGhlIHBhc3N3b3JkIGZvciB0aGUgcmVtb3RlIGF1dGhlbnRpY2F0aW9uLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBtZXRob2QgLSBUaGUgaHR0cCBtdWx0aXBhcnQgdXBsb2FkIG1ldGhvZCBuYW1lLiBUaGUgJ1BVVCcgb25lIGlzIHVzZWQgYnkgZGVmYXVsdC5cbiAqIEBwcm9wZXJ0eSB7P09iamVjdH0gaGVhZGVycyAtIEFkZGl0aW9uYWwgaGVhZGVycyBtYXBwaW5nIGZvciBtdWx0aXBhcnQgaHR0cChzKSB1cGxvYWRzXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGZpbGVGaWVsZE5hbWUgW2ZpbGVdIC0gVGhlIG5hbWUgb2YgdGhlIGZvcm0gZmllbGQsIHdoZXJlIHRoZSBmaWxlIGNvbnRlbnQgQkxPQiBzaG91bGQgYmUgc3RvcmVkIGZvclxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHAocykgdXBsb2Fkc1xuICogQHByb3BlcnR5IHs/T2JqZWN0fEFycmF5PFBhaXI+fSBmb3JtRmllbGRzIC0gQWRkaXRpb25hbCBmb3JtIGZpZWxkcyBmb3IgbXVsdGlwYXJ0IGh0dHAocykgdXBsb2Fkc1xuICovXG5cbi8qKlxuICogU3RvcCByZWNvcmRpbmcgdGhlIHNjcmVlbi5cbiAqIElmIG5vIHNjcmVlbiByZWNvcmRpbmcgaGFzIGJlZW4gc3RhcnRlZCBiZWZvcmUgdGhlbiB0aGUgbWV0aG9kIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7P1N0b3BSZWNvcmRpbmdPcHRpb25zfSBvcHRpb25zIC0gVGhlIGF2YWlsYWJsZSBvcHRpb25zLlxuICogQHJldHVybnMge3N0cmluZ30gQmFzZTY0LWVuY29kZWQgY29udGVudCBvZiB0aGUgcmVjb3JkZWQgbWVkaWEgZmlsZSBpZiAncmVtb3RlUGF0aCdcbiAqIHBhcmFtZXRlciBpcyBmYWxzeSBvciBhbiBlbXB0eSBzdHJpbmcuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGdldHRpbmcgdGhlIG5hbWUgb2YgYSBtZWRpYSBmaWxlXG4gKiBvciB0aGUgZmlsZSBjb250ZW50IGNhbm5vdCBiZSB1cGxvYWRlZCB0byB0aGUgcmVtb3RlIGxvY2F0aW9uXG4gKiBvciBzY3JlZW4gcmVjb3JkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICovXG5jb21tYW5kcy5zdG9wUmVjb3JkaW5nU2NyZWVuID0gYXN5bmMgZnVuY3Rpb24gc3RvcFJlY29yZGluZ1NjcmVlbiAob3B0aW9ucyA9IHt9KSB7XG4gIGlmICghdGhpcy5fc2NyZWVuUmVjb3JkZXIpIHtcbiAgICB0aGlzLmxvZy5pbmZvKCdObyBzY3JlZW4gcmVjb3JkaW5nIGhhcyBiZWVuIHN0YXJ0ZWQuIERvaW5nIG5vdGhpbmcnKTtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB0aGlzLmxvZy5kZWJ1ZygnUmV0cmlldmluZyB0aGUgcmVzdWx0aW5nIHZpZGVvIGRhdGEnKTtcbiAgY29uc3QgdmlkZW9QYXRoID0gYXdhaXQgdGhpcy5fc2NyZWVuUmVjb3JkZXIuc3RvcCgpO1xuICBpZiAoIXZpZGVvUGF0aCkge1xuICAgIHRoaXMubG9nLmluZm8oJ05vIHZpZGVvIGRhdGEgaXMgZm91bmQuIFJldHVybmluZyBhbiBlbXB0eSBzdHJpbmcnKTtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgaWYgKF8uaXNFbXB0eShvcHRpb25zLnJlbW90ZVBhdGgpKSB7XG4gICAgY29uc3Qge3NpemV9ID0gYXdhaXQgZnMuc3RhdCh2aWRlb1BhdGgpO1xuICAgIHRoaXMubG9nLmRlYnVnKGBUaGUgc2l6ZSBvZiB0aGUgcmVzdWx0aW5nIHNjcmVlbiByZWNvcmRpbmcgaXMgJHt1dGlsLnRvUmVhZGFibGVTaXplU3RyaW5nKHNpemUpfWApO1xuICB9XG4gIHJldHVybiBhd2FpdCB1cGxvYWRSZWNvcmRlZE1lZGlhKHZpZGVvUGF0aCwgb3B0aW9ucy5yZW1vdGVQYXRoLCBvcHRpb25zKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBR0EsTUFBTUEsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUVuQixNQUFNQyxtQkFBbUIsR0FBRyxHQUFHO0FBQy9CLE1BQU1DLGtCQUFrQixHQUFHLEVBQUUsR0FBRyxJQUFJO0FBQ3BDLE1BQU1DLHFCQUFxQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSTtBQUM1QyxNQUFNQywyQkFBMkIsR0FBRyxFQUFFLEdBQUcsSUFBSTtBQUM3QyxNQUFNQyxXQUFXLEdBQUcsTUFBTTtBQUcxQixlQUFlQyxtQkFBbUIsQ0FBRUMsU0FBUyxFQUFFQyxVQUFVLEdBQUcsSUFBSSxFQUFFQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDcEYsSUFBSUMsZUFBQyxDQUFDQyxPQUFPLENBQUNILFVBQVUsQ0FBQyxFQUFFO0lBQ3pCLE9BQU8sQ0FBQyxNQUFNSSxhQUFJLENBQUNDLGdCQUFnQixDQUFDTixTQUFTLENBQUMsRUFBRU8sUUFBUSxFQUFFO0VBQzVEO0VBRUEsTUFBTTtJQUFDQyxJQUFJO0lBQUVDLElBQUk7SUFBRUMsTUFBTTtJQUFFQyxPQUFPO0lBQUVDLGFBQWE7SUFBRUM7RUFBVSxDQUFDLEdBQUdYLGFBQWE7RUFDOUUsTUFBTVksT0FBTyxHQUFHO0lBQ2RKLE1BQU0sRUFBRUEsTUFBTSxJQUFJLEtBQUs7SUFDdkJDLE9BQU87SUFDUEMsYUFBYTtJQUNiQztFQUNGLENBQUM7RUFDRCxJQUFJTCxJQUFJLElBQUlDLElBQUksRUFBRTtJQUNoQkssT0FBTyxDQUFDQyxJQUFJLEdBQUc7TUFBQ1AsSUFBSTtNQUFFQztJQUFJLENBQUM7RUFDN0I7RUFDQSxNQUFNTyxZQUFHLENBQUNDLFVBQVUsQ0FBQ2pCLFNBQVMsRUFBRUMsVUFBVSxFQUFFYSxPQUFPLENBQUM7RUFDcEQsT0FBTyxFQUFFO0FBQ1g7QUFF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
255
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsIlNUQVJUVVBfSU5URVJWQUxfTVMiLCJTVEFSVFVQX1RJTUVPVVRfTVMiLCJERUZBVUxUX1RJTUVfTElNSVRfTVMiLCJQUk9DRVNTX1NIVVRET1dOX1RJTUVPVVRfTVMiLCJERUZBVUxUX0VYVCIsInVwbG9hZFJlY29yZGVkTWVkaWEiLCJsb2NhbEZpbGUiLCJyZW1vdGVQYXRoIiwidXBsb2FkT3B0aW9ucyIsIl8iLCJpc0VtcHR5IiwidXRpbCIsInRvSW5NZW1vcnlCYXNlNjQiLCJ0b1N0cmluZyIsInVzZXIiLCJwYXNzIiwibWV0aG9kIiwiaGVhZGVycyIsImZpbGVGaWVsZE5hbWUiLCJmb3JtRmllbGRzIiwib3B0aW9ucyIsImF1dGgiLCJuZXQiLCJ1cGxvYWRGaWxlIiwiVklERU9fRklMRVMiLCJTZXQiLCJwcm9jZXNzIiwib24iLCJ2aWRlb0ZpbGUiLCJmcyIsInJpbXJhZlN5bmMiLCJpZ24iLCJTY3JlZW5SZWNvcmRlciIsImNvbnN0cnVjdG9yIiwidWRpZCIsInZpZGVvUGF0aCIsImxvZyIsIm9wdHMiLCJfcHJvY2VzcyIsIl91ZGlkIiwiX3ZpZGVvUGF0aCIsIl9jb2RlYyIsImNvZGVjIiwiX2Rpc3BsYXkiLCJkaXNwbGF5IiwiX21hc2siLCJtYXNrIiwiX3RpbWVMaW1pdE1zIiwidGltZUxpbWl0IiwiX3RpbWVyIiwiZ2V0VmlkZW9QYXRoIiwiZXhpc3RzIiwiYWRkIiwiaXNSdW5uaW5nIiwiX2VuZm9yY2VUZXJtaW5hdGlvbiIsImRlYnVnIiwic3RvcCIsInJpbXJhZiIsImRlbGV0ZSIsInN0YXJ0IiwiYXJncyIsInB1c2giLCJTaW1jdGwiLCJleGVjIiwiYXN5bmNocm9ub3VzIiwicXVvdGUiLCJzdGRvdXQiLCJzdGRlcnIiLCJsaW5lIiwidHJpbSIsInN1YnN0cmluZyIsIm9uY2UiLCJjb2RlIiwic2lnbmFsIiwid2FybiIsIndhaXRGb3JDb25kaXRpb24iLCJFcnJvciIsIndhaXRNcyIsImludGVydmFsTXMiLCJlIiwiZXJyb3JBbmRUaHJvdyIsInNldFRpbWVvdXQiLCJlcnJvciIsImluZm8iLCJmb3JjZSIsImNsZWFyVGltZW91dCIsImV4dHJhY3RTaW11bGF0b3JVZGlkIiwiY2FwcyIsImFsbERldmljZXMiLCJmbGF0TWFwIiwidmFsdWVzIiwiZ2V0RGV2aWNlcyIsIm5hbWUiLCJzdGF0ZSIsInNkayIsInRvTG93ZXIiLCJzdGFydFJlY29yZGluZ1NjcmVlbiIsImZvcmNlUmVzdGFydCIsIl9zY3JlZW5SZWNvcmRlciIsInRlbXBEaXIiLCJwYXRoIiwicHJlZml4IiwidXVpZFY0Iiwic3VmZml4IiwicGFyc2VJbnQiLCJzdG9wUmVjb3JkaW5nU2NyZWVuIiwic2l6ZSIsInN0YXQiLCJ0b1JlYWRhYmxlU2l6ZVN0cmluZyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9yZWNvcmQtc2NyZWVuLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyB1dGlsLCBmcywgbmV0LCB0ZW1wRGlyIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCBTaW1jdGwgZnJvbSAnbm9kZS1zaW1jdGwnO1xuXG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5cbmNvbnN0IFNUQVJUVVBfSU5URVJWQUxfTVMgPSAzMDA7XG5jb25zdCBTVEFSVFVQX1RJTUVPVVRfTVMgPSAxMCAqIDEwMDA7XG5jb25zdCBERUZBVUxUX1RJTUVfTElNSVRfTVMgPSA2MCAqIDEwICogMTAwMDsgLy8gMTAgbWludXRlc1xuY29uc3QgUFJPQ0VTU19TSFVURE9XTl9USU1FT1VUX01TID0gMTAgKiAxMDAwO1xuY29uc3QgREVGQVVMVF9FWFQgPSAnLm1wNCc7XG5cblxuYXN5bmMgZnVuY3Rpb24gdXBsb2FkUmVjb3JkZWRNZWRpYSAobG9jYWxGaWxlLCByZW1vdGVQYXRoID0gbnVsbCwgdXBsb2FkT3B0aW9ucyA9IHt9KSB7XG4gIGlmIChfLmlzRW1wdHkocmVtb3RlUGF0aCkpIHtcbiAgICByZXR1cm4gKGF3YWl0IHV0aWwudG9Jbk1lbW9yeUJhc2U2NChsb2NhbEZpbGUpKS50b1N0cmluZygpO1xuICB9XG5cbiAgY29uc3Qge3VzZXIsIHBhc3MsIG1ldGhvZCwgaGVhZGVycywgZmlsZUZpZWxkTmFtZSwgZm9ybUZpZWxkc30gPSB1cGxvYWRPcHRpb25zO1xuICBjb25zdCBvcHRpb25zID0ge1xuICAgIG1ldGhvZDogbWV0aG9kIHx8ICdQVVQnLFxuICAgIGhlYWRlcnMsXG4gICAgZmlsZUZpZWxkTmFtZSxcbiAgICBmb3JtRmllbGRzLFxuICB9O1xuICBpZiAodXNlciAmJiBwYXNzKSB7XG4gICAgb3B0aW9ucy5hdXRoID0ge3VzZXIsIHBhc3N9O1xuICB9XG4gIGF3YWl0IG5ldC51cGxvYWRGaWxlKGxvY2FsRmlsZSwgcmVtb3RlUGF0aCwgb3B0aW9ucyk7XG4gIHJldHVybiAnJztcbn1cblxuY29uc3QgVklERU9fRklMRVMgPSBuZXcgU2V0KCk7XG5wcm9jZXNzLm9uKCdleGl0JywgKCkgPT4ge1xuICBmb3IgKGNvbnN0IHZpZGVvRmlsZSBvZiBWSURFT19GSUxFUykge1xuICAgIHRyeSB7XG4gICAgICBmcy5yaW1yYWZTeW5jKHZpZGVvRmlsZSk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICB9XG59KTtcblxuY2xhc3MgU2NyZWVuUmVjb3JkZXIge1xuICBjb25zdHJ1Y3RvciAodWRpZCwgdmlkZW9QYXRoLCBsb2csIG9wdHMgPSB7fSkge1xuICAgIHRoaXMubG9nID0gbG9nO1xuICAgIHRoaXMuX3Byb2Nlc3MgPSBudWxsO1xuICAgIHRoaXMuX3VkaWQgPSB1ZGlkO1xuICAgIHRoaXMuX3ZpZGVvUGF0aCA9IHZpZGVvUGF0aDtcbiAgICB0aGlzLl9jb2RlYyA9IG9wdHMuY29kZWM7XG4gICAgdGhpcy5fZGlzcGxheSA9IG9wdHMuZGlzcGxheTtcbiAgICB0aGlzLl9tYXNrID0gb3B0cy5tYXNrO1xuICAgIHRoaXMuX3RpbWVMaW1pdE1zID0gb3B0cy50aW1lTGltaXQgPiAwID8gb3B0cy50aW1lTGltaXQgKiAxMDAwIDogREVGQVVMVF9USU1FX0xJTUlUX01TO1xuICAgIHRoaXMuX3RpbWVyID0gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIGdldFZpZGVvUGF0aCAoKSB7XG4gICAgaWYgKGF3YWl0IGZzLmV4aXN0cyh0aGlzLl92aWRlb1BhdGgpKSB7XG4gICAgICBWSURFT19GSUxFUy5hZGQodGhpcy5fdmlkZW9QYXRoKTtcbiAgICAgIHJldHVybiB0aGlzLl92aWRlb1BhdGg7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGdldCBpc1J1bm5pbmcgKCkge1xuICAgIHJldHVybiAhISh0aGlzLl9wcm9jZXNzPy5pc1J1bm5pbmcpO1xuICB9XG5cbiAgYXN5bmMgX2VuZm9yY2VUZXJtaW5hdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMuaXNSdW5uaW5nKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnRm9yY2Utc3RvcHBpbmcgdGhlIGN1cnJlbnRseSBydW5uaW5nIHZpZGVvIHJlY29yZGluZycpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5fcHJvY2Vzcy5zdG9wKCdTSUdLSUxMJyk7XG4gICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgfVxuICAgIHRoaXMuX3Byb2Nlc3MgPSBudWxsO1xuICAgIGNvbnN0IHZpZGVvUGF0aCA9IGF3YWl0IHRoaXMuZ2V0VmlkZW9QYXRoKCk7XG4gICAgaWYgKHZpZGVvUGF0aCkge1xuICAgICAgYXdhaXQgZnMucmltcmFmKHZpZGVvUGF0aCk7XG4gICAgICBWSURFT19GSUxFUy5kZWxldGUodmlkZW9QYXRoKTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQgKCkge1xuICAgIGNvbnN0IGFyZ3MgPSBbXG4gICAgICB0aGlzLl91ZGlkLCAncmVjb3JkVmlkZW8nXG4gICAgXTtcbiAgICBpZiAodGhpcy5fZGlzcGxheSkge1xuICAgICAgYXJncy5wdXNoKCctLWRpc3BsYXknLCB0aGlzLl9kaXNwbGF5KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2NvZGVjKSB7XG4gICAgICBhcmdzLnB1c2goJy0tY29kZWMnLCB0aGlzLl9jb2RlYyk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9tYXNrKSB7XG4gICAgICBhcmdzLnB1c2goJy0tbWFzaycsIHRoaXMuX21hc2spO1xuICAgIH1cbiAgICBhcmdzLnB1c2goJy0tZm9yY2UnLCB0aGlzLl92aWRlb1BhdGgpO1xuICAgIHRoaXMuX3Byb2Nlc3MgPSBhd2FpdCBuZXcgU2ltY3RsKCkuZXhlYygnaW8nLCB7XG4gICAgICBhcmdzLFxuICAgICAgYXN5bmNocm9ub3VzOiB0cnVlLFxuICAgIH0pO1xuICAgIHRoaXMubG9nLmRlYnVnKGBTdGFydGluZyB2aWRlbyByZWNvcmRpbmcgd2l0aCBhcmd1bWVudHM6ICR7dXRpbC5xdW90ZShhcmdzKX1gKTtcbiAgICB0aGlzLl9wcm9jZXNzLm9uKCdvdXRwdXQnLCAoc3Rkb3V0LCBzdGRlcnIpID0+IHtcbiAgICAgIGNvbnN0IGxpbmUgPSBfLnRyaW0oc3Rkb3V0IHx8IHN0ZGVycik7XG4gICAgICBpZiAobGluZSkge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgW3JlY29yZFZpZGVvQCR7dGhpcy5fdWRpZC5zdWJzdHJpbmcoMCwgOCl9XSAke2xpbmV9YCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5fcHJvY2Vzcy5vbmNlKCdleGl0JywgYXN5bmMgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgdGhpcy5fcHJvY2VzcyA9IG51bGw7XG4gICAgICBpZiAoY29kZSA9PT0gMCkge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZygnU2NyZWVuIHJlY29yZGluZyBleGl0ZWQgd2l0aG91dCBlcnJvcnMnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMuX2VuZm9yY2VUZXJtaW5hdGlvbigpO1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBTY3JlZW4gcmVjb3JkaW5nIGV4aXRlZCB3aXRoIGVycm9yIGNvZGUgJHtjb2RlfSwgc2lnbmFsICR7c2lnbmFsfWApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGF3YWl0IHRoaXMuX3Byb2Nlc3Muc3RhcnQoMCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuaXNSdW5uaW5nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICEhKGF3YWl0IHRoaXMuZ2V0VmlkZW9QYXRoKCkpO1xuICAgICAgfSwge1xuICAgICAgICB3YWl0TXM6IFNUQVJUVVBfVElNRU9VVF9NUyxcbiAgICAgICAgaW50ZXJ2YWxNczogU1RBUlRVUF9JTlRFUlZBTF9NUyxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2VuZm9yY2VUZXJtaW5hdGlvbigpO1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgVGhlIGV4cGVjdGVkIHNjcmVlbiByZWNvcmQgZmlsZSAnJHt0aGlzLl92aWRlb1BhdGh9JyBkb2VzIG5vdCBleGlzdCBhZnRlciAke1NUQVJUVVBfVElNRU9VVF9NU31tcy4gYCArXG4gICAgICAgIGBDaGVjayB0aGUgc2VydmVyIGxvZyBmb3IgbW9yZSBkZXRhaWxzYCk7XG4gICAgfVxuICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1J1bm5pbmcpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnN0b3AoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRoaXMubG9nLmVycm9yKGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgdGhpcy5fdGltZUxpbWl0TXMpO1xuICAgIHRoaXMubG9nLmluZm8oYFRoZSB2aWRlbyByZWNvcmRpbmcgaGFzIHN0YXJ0ZWQuIFdpbGwgdGltZW91dCBpbiAke3RoaXMuX3RpbWVMaW1pdE1zfW1zYCk7XG4gIH1cblxuICBhc3luYyBzdG9wIChmb3JjZSA9IGZhbHNlKSB7XG4gICAgaWYgKHRoaXMuX3RpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO1xuICAgICAgdGhpcy5fdGltZXIgPSBudWxsO1xuICAgIH1cblxuICAgIGlmIChmb3JjZSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2VuZm9yY2VUZXJtaW5hdGlvbigpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pc1J1bm5pbmcpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdTY3JlZW4gcmVjb3JkaW5nIGlzIG5vdCBydW5uaW5nLiBSZXR1cm5pbmcgdGhlIHJlY2VudGx5IHJlY29yZGVkIHZpZGVvJyk7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRWaWRlb1BhdGgoKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fcHJvY2Vzcy5zdG9wKCdTSUdJTlQnLCBQUk9DRVNTX1NIVVRET1dOX1RJTUVPVVRfTVMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2VuZm9yY2VUZXJtaW5hdGlvbigpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTY3JlZW4gcmVjb3JkaW5nIGhhcyBmYWlsZWQgdG8gc3RvcCBhZnRlciAke1BST0NFU1NfU0hVVERPV05fVElNRU9VVF9NU31tc2ApO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmdldFZpZGVvUGF0aCgpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RTaW11bGF0b3JVZGlkIChjYXBzKSB7XG4gIGlmIChjYXBzWydzYWZhcmk6dXNlU2ltdWxhdG9yJ10gPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBhbGxEZXZpY2VzID0gXy5mbGF0TWFwKF8udmFsdWVzKGF3YWl0IG5ldyBTaW1jdGwoKS5nZXREZXZpY2VzKG51bGwsICdpT1MnKSkpO1xuICBmb3IgKGNvbnN0IHtuYW1lLCB1ZGlkLCBzdGF0ZSwgc2RrfSBvZiBhbGxEZXZpY2VzKSB7XG4gICAgaWYgKHN0YXRlICE9PSAnQm9vdGVkJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKF8udG9Mb3dlcihjYXBzWydzYWZhcmk6ZGV2aWNlVURJRCddKSA9PT0gXy50b0xvd2VyKHVkaWQpKSB7XG4gICAgICByZXR1cm4gdWRpZDtcbiAgICB9XG4gICAgaWYgKF8udG9Mb3dlcihjYXBzWydzYWZhcmk6ZGV2aWNlTmFtZSddKSA9PT0gXy50b0xvd2VyKG5hbWUpICYmXG4gICAgICAoY2Fwc1snc2FmYXJpOnBsYXRmb3JtVmVyc2lvbiddICYmIGNhcHNbJ3NhZmFyaTpwbGF0Zm9ybVZlcnNpb24nXSA9PT0gc2RrXG4gICAgICAgIHx8ICFjYXBzWydzYWZhcmk6cGxhdGZvcm1WZXJzaW9uJ10pKSB7XG4gICAgICByZXR1cm4gdWRpZDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFN0YXJ0UmVjb3JkaW5nT3B0aW9uc1xuICpcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gY29kZWMgW2hldmNdIC0gU3BlY2lmaWVzIHRoZSBjb2RlYyB0eXBlOiBcImgyNjRcIiBvciBcImhldmNcIlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBkaXNwbGF5IFtpbnRlcm5hbF0gLSBTdXBwb3J0cyBcImludGVybmFsXCIgb3IgXCJleHRlcm5hbFwiLiBEZWZhdWx0IGlzIFwiaW50ZXJuYWxcIlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBtYXNrIC0gRm9yIG5vbi1yZWN0YW5ndWxhciBkaXNwbGF5cywgaGFuZGxlIHRoZSBtYXNrIGJ5IHBvbGljeTpcbiAqIC0gaWdub3JlZDogVGhlIG1hc2sgaXMgaWdub3JlZCBhbmQgdGhlIHVubWFza2VkIGZyYW1lYnVmZmVyIGlzIHNhdmVkLlxuICogLSBhbHBoYTogTm90IHN1cHBvcnRlZCwgYnV0IHJldGFpbmVkIGZvciBjb21wYXRpYmlsaXR5OyB0aGUgbWFzayBpcyByZW5kZXJlZCBibGFjay5cbiAqIC0gYmxhY2s6IFRoZSBtYXNrIGlzIHJlbmRlcmVkIGJsYWNrLlxuICogQHByb3BlcnR5IHtzdHJpbmd8bnVtYmVyfSB0aW1lTGltaXQgWzYwMF0gLSBUaGUgbWF4aW11bSByZWNvcmRpbmcgdGltZSwgaW4gc2Vjb25kcy4gVGhlIGRlZmF1bHRcbiAqIHZhbHVlIGlzIDYwMCBzZWNvbmRzICgxMCBtaW51dGVzKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZm9yY2VSZXN0YXJ0IFt0cnVlXSAtIFdoZXRoZXIgdG8gaWdub3JlIHRoZSBjYWxsIGlmIGEgc2NyZWVuIHJlY29yZGluZyBpcyBjdXJyZW50bHkgcnVubmluZ1xuICogKGBmYWxzZWApIG9yIHRvIHN0YXJ0IGEgbmV3IHJlY29yZGluZyBpbW1lZGlhdGVseSBhbmQgdGVybWluYXRlIHRoZSBleGlzdGluZyBvbmUgaWYgcnVubmluZyAoYHRydWVgKS5cbiAqL1xuXG4vKipcbiAqIFJlY29yZCB0aGUgU2ltdWxhdG9yJ3MgZGlzcGxheSBpbiBiYWNrZ3JvdW5kIHdoaWxlIHRoZSBhdXRvbWF0ZWQgdGVzdCBpcyBydW5uaW5nLlxuICogVGhpcyBtZXRob2QgdXNlcyBgeGNydW4gc2ltY3RsIGlvIHJlY29yZFZpZGVvYCBoZWxwZXIgdW5kZXIgdGhlIGhvb2QuXG4gKiBDaGVjayB0aGUgb3V0cHV0IG9mIGB4Y3J1biBzaW1jdGwgaW9gIGNvbW1hbmQgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAcGFyYW0gez9TdGFydFJlY29yZGluZ09wdGlvbnN9IG9wdGlvbnMgLSBUaGUgYXZhaWxhYmxlIG9wdGlvbnMuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgc2NyZWVuIHJlY29yZGluZyBoYXMgZmFpbGVkIHRvIHN0YXJ0IG9yIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBkZXN0aW5hdGlvbiBkZXZpY2UuXG4gKi9cbmNvbW1hbmRzLnN0YXJ0UmVjb3JkaW5nU2NyZWVuID0gYXN5bmMgZnVuY3Rpb24gc3RhcnRSZWNvcmRpbmdTY3JlZW4gKG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdGltZUxpbWl0LFxuICAgIGNvZGVjLFxuICAgIGRpc3BsYXksXG4gICAgbWFzayxcbiAgICBmb3JjZVJlc3RhcnQgPSB0cnVlLFxuICB9ID0gb3B0aW9ucztcbiAgaWYgKHRoaXMuX3NjcmVlblJlY29yZGVyPy5pc1J1bm5pbmcpIHtcbiAgICB0aGlzLmxvZy5pbmZvKCdUaGUgc2NyZWVuIHJlY29yZGluZyBpcyBhbHJlYWR5IHJ1bm5pbmcnKTtcbiAgICBpZiAoIWZvcmNlUmVzdGFydCkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnRG9pbmcgbm90aGluZycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmxvZy5pbmZvKCdGb3JjaW5nIHRoZSBhY3RpdmUgc2NyZWVuIHJlY29yZGluZyB0byBzdG9wJyk7XG4gICAgYXdhaXQgdGhpcy5fc2NyZWVuUmVjb3JkZXIuc3RvcCh0cnVlKTtcbiAgfVxuICB0aGlzLl9zY3JlZW5SZWNvcmRlciA9IG51bGw7XG5cbiAgY29uc3QgdWRpZCA9IGF3YWl0IGV4dHJhY3RTaW11bGF0b3JVZGlkKHRoaXMuY2Fwcyk7XG4gIGlmICghdWRpZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGRldGVybWluZSBTaW11bGF0b3IgVURJRCB0byByZWNvcmQgdGhlIHZpZGVvIGZyb20uICcgK1xuICAgICAgJ0RvdWJsZSBjaGVjayB5b3VyIHNlc3Npb24gY2FwYWJpbGl0aWVzJyk7XG4gIH1cblxuICBjb25zdCB2aWRlb1BhdGggPSBhd2FpdCB0ZW1wRGlyLnBhdGgoe1xuICAgIHByZWZpeDogdXRpbC51dWlkVjQoKS5zdWJzdHJpbmcoMCwgOCksXG4gICAgc3VmZml4OiBERUZBVUxUX0VYVCxcbiAgfSk7XG4gIHRoaXMuX3NjcmVlblJlY29yZGVyID0gbmV3IFNjcmVlblJlY29yZGVyKHVkaWQsIHZpZGVvUGF0aCwgdGhpcy5sb2csIHtcbiAgICB0aW1lTGltaXQ6IHBhcnNlSW50KHRpbWVMaW1pdCwgMTApLFxuICAgIGNvZGVjLFxuICAgIGRpc3BsYXksXG4gICAgbWFzayxcbiAgfSk7XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5fc2NyZWVuUmVjb3JkZXIuc3RhcnQoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRoaXMuX3NjcmVlblJlY29yZGVyID0gbnVsbDtcbiAgICB0aHJvdyBlO1xuICB9XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFN0b3BSZWNvcmRpbmdPcHRpb25zXG4gKlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSByZW1vdGVQYXRoIC0gVGhlIHBhdGggdG8gdGhlIHJlbW90ZSBsb2NhdGlvbiwgd2hlcmUgdGhlIHJlc3VsdGluZyB2aWRlbyBzaG91bGQgYmUgdXBsb2FkZWQuXG4gKiBUaGUgZm9sbG93aW5nIHByb3RvY29scyBhcmUgc3VwcG9ydGVkOiBodHRwL2h0dHBzLCBmdHAuXG4gKiBOdWxsIG9yIGVtcHR5IHN0cmluZyB2YWx1ZSAodGhlIGRlZmF1bHQgc2V0dGluZykgbWVhbnMgdGhlIGNvbnRlbnQgb2YgcmVzdWx0aW5nXG4gKiBmaWxlIHNob3VsZCBiZSBlbmNvZGVkIGFzIEJhc2U2NCBhbmQgcGFzc2VkIGFzIHRoZSBlbmRwb2ludCByZXNwb25zZSB2YWx1ZS5cbiAqIEFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93biBpZiB0aGUgZ2VuZXJhdGVkIG1lZGlhIGZpbGUgaXMgdG9vIGJpZyB0b1xuICogZml0IGludG8gdGhlIGF2YWlsYWJsZSBwcm9jZXNzIG1lbW9yeS5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gdXNlciAtIFRoZSBuYW1lIG9mIHRoZSB1c2VyIGZvciB0aGUgcmVtb3RlIGF1dGhlbnRpY2F0aW9uLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBwYXNzIC0gVGhlIHBhc3N3b3JkIGZvciB0aGUgcmVtb3RlIGF1dGhlbnRpY2F0aW9uLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBtZXRob2QgLSBUaGUgaHR0cCBtdWx0aXBhcnQgdXBsb2FkIG1ldGhvZCBuYW1lLiBUaGUgJ1BVVCcgb25lIGlzIHVzZWQgYnkgZGVmYXVsdC5cbiAqIEBwcm9wZXJ0eSB7P09iamVjdH0gaGVhZGVycyAtIEFkZGl0aW9uYWwgaGVhZGVycyBtYXBwaW5nIGZvciBtdWx0aXBhcnQgaHR0cChzKSB1cGxvYWRzXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGZpbGVGaWVsZE5hbWUgW2ZpbGVdIC0gVGhlIG5hbWUgb2YgdGhlIGZvcm0gZmllbGQsIHdoZXJlIHRoZSBmaWxlIGNvbnRlbnQgQkxPQiBzaG91bGQgYmUgc3RvcmVkIGZvclxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHAocykgdXBsb2Fkc1xuICogQHByb3BlcnR5IHs/T2JqZWN0fEFycmF5PFBhaXI+fSBmb3JtRmllbGRzIC0gQWRkaXRpb25hbCBmb3JtIGZpZWxkcyBmb3IgbXVsdGlwYXJ0IGh0dHAocykgdXBsb2Fkc1xuICovXG5cbi8qKlxuICogU3RvcCByZWNvcmRpbmcgdGhlIHNjcmVlbi5cbiAqIElmIG5vIHNjcmVlbiByZWNvcmRpbmcgaGFzIGJlZW4gc3RhcnRlZCBiZWZvcmUgdGhlbiB0aGUgbWV0aG9kIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7P1N0b3BSZWNvcmRpbmdPcHRpb25zfSBvcHRpb25zIC0gVGhlIGF2YWlsYWJsZSBvcHRpb25zLlxuICogQHJldHVybnMge3N0cmluZ30gQmFzZTY0LWVuY29kZWQgY29udGVudCBvZiB0aGUgcmVjb3JkZWQgbWVkaWEgZmlsZSBpZiAncmVtb3RlUGF0aCdcbiAqIHBhcmFtZXRlciBpcyBmYWxzeSBvciBhbiBlbXB0eSBzdHJpbmcuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGdldHRpbmcgdGhlIG5hbWUgb2YgYSBtZWRpYSBmaWxlXG4gKiBvciB0aGUgZmlsZSBjb250ZW50IGNhbm5vdCBiZSB1cGxvYWRlZCB0byB0aGUgcmVtb3RlIGxvY2F0aW9uXG4gKiBvciBzY3JlZW4gcmVjb3JkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICovXG5jb21tYW5kcy5zdG9wUmVjb3JkaW5nU2NyZWVuID0gYXN5bmMgZnVuY3Rpb24gc3RvcFJlY29yZGluZ1NjcmVlbiAob3B0aW9ucyA9IHt9KSB7XG4gIGlmICghdGhpcy5fc2NyZWVuUmVjb3JkZXIpIHtcbiAgICB0aGlzLmxvZy5pbmZvKCdObyBzY3JlZW4gcmVjb3JkaW5nIGhhcyBiZWVuIHN0YXJ0ZWQuIERvaW5nIG5vdGhpbmcnKTtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB0aGlzLmxvZy5kZWJ1ZygnUmV0cmlldmluZyB0aGUgcmVzdWx0aW5nIHZpZGVvIGRhdGEnKTtcbiAgY29uc3QgdmlkZW9QYXRoID0gYXdhaXQgdGhpcy5fc2NyZWVuUmVjb3JkZXIuc3RvcCgpO1xuICBpZiAoIXZpZGVvUGF0aCkge1xuICAgIHRoaXMubG9nLmluZm8oJ05vIHZpZGVvIGRhdGEgaXMgZm91bmQuIFJldHVybmluZyBhbiBlbXB0eSBzdHJpbmcnKTtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgaWYgKF8uaXNFbXB0eShvcHRpb25zLnJlbW90ZVBhdGgpKSB7XG4gICAgY29uc3Qge3NpemV9ID0gYXdhaXQgZnMuc3RhdCh2aWRlb1BhdGgpO1xuICAgIHRoaXMubG9nLmRlYnVnKGBUaGUgc2l6ZSBvZiB0aGUgcmVzdWx0aW5nIHNjcmVlbiByZWNvcmRpbmcgaXMgJHt1dGlsLnRvUmVhZGFibGVTaXplU3RyaW5nKHNpemUpfWApO1xuICB9XG4gIHJldHVybiBhd2FpdCB1cGxvYWRSZWNvcmRlZE1lZGlhKHZpZGVvUGF0aCwgb3B0aW9ucy5yZW1vdGVQYXRoLCBvcHRpb25zKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBR0EsTUFBTUEsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUVuQixNQUFNQyxtQkFBbUIsR0FBRyxHQUFHO0FBQy9CLE1BQU1DLGtCQUFrQixHQUFHLEVBQUUsR0FBRyxJQUFJO0FBQ3BDLE1BQU1DLHFCQUFxQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSTtBQUM1QyxNQUFNQywyQkFBMkIsR0FBRyxFQUFFLEdBQUcsSUFBSTtBQUM3QyxNQUFNQyxXQUFXLEdBQUcsTUFBTTtBQUcxQixlQUFlQyxtQkFBbUIsQ0FBRUMsU0FBUyxFQUFFQyxVQUFVLEdBQUcsSUFBSSxFQUFFQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDcEYsSUFBSUMsZUFBQyxDQUFDQyxPQUFPLENBQUNILFVBQVUsQ0FBQyxFQUFFO0lBQ3pCLE9BQU8sQ0FBQyxNQUFNSSxhQUFJLENBQUNDLGdCQUFnQixDQUFDTixTQUFTLENBQUMsRUFBRU8sUUFBUSxFQUFFO0VBQzVEO0VBRUEsTUFBTTtJQUFDQyxJQUFJO0lBQUVDLElBQUk7SUFBRUMsTUFBTTtJQUFFQyxPQUFPO0lBQUVDLGFBQWE7SUFBRUM7RUFBVSxDQUFDLEdBQUdYLGFBQWE7RUFDOUUsTUFBTVksT0FBTyxHQUFHO0lBQ2RKLE1BQU0sRUFBRUEsTUFBTSxJQUFJLEtBQUs7SUFDdkJDLE9BQU87SUFDUEMsYUFBYTtJQUNiQztFQUNGLENBQUM7RUFDRCxJQUFJTCxJQUFJLElBQUlDLElBQUksRUFBRTtJQUNoQkssT0FBTyxDQUFDQyxJQUFJLEdBQUc7TUFBQ1AsSUFBSTtNQUFFQztJQUFJLENBQUM7RUFDN0I7RUFDQSxNQUFNTyxZQUFHLENBQUNDLFVBQVUsQ0FBQ2pCLFNBQVMsRUFBRUMsVUFBVSxFQUFFYSxPQUFPLENBQUM7RUFDcEQsT0FBTyxFQUFFO0FBQ1g7QUFF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
@@ -1 +1 @@
1
- {"version":3,"file":"record-screen.js","names":["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","_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","forceRestart","_screenRecorder","tempDir","path","prefix","uuidV4","suffix","parseInt","stopRecordingScreen","size","stat","toReadableSizeString"],"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":["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","_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","forceRestart","_screenRecorder","tempDir","path","prefix","uuidV4","suffix","parseInt","stopRecordingScreen","size","stat","toReadableSizeString"],"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":";;;;;;;;AAAA;AACA;AACA;AACA;AAGA,MAAMA,QAAQ,GAAG,CAAC,CAAC;AAEnB,MAAMC,mBAAmB,GAAG,GAAG;AAC/B,MAAMC,kBAAkB,GAAG,EAAE,GAAG,IAAI;AACpC,MAAMC,qBAAqB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;AAC5C,MAAMC,2BAA2B,GAAG,EAAE,GAAG,IAAI;AAC7C,MAAMC,WAAW,GAAG,MAAM;AAG1B,eAAeC,mBAAmB,CAAEC,SAAS,EAAEC,UAAU,GAAG,IAAI,EAAEC,aAAa,GAAG,CAAC,CAAC,EAAE;EACpF,IAAIC,eAAC,CAACC,OAAO,CAACH,UAAU,CAAC,EAAE;IACzB,OAAO,CAAC,MAAMI,aAAI,CAACC,gBAAgB,CAACN,SAAS,CAAC,EAAEO,QAAQ,EAAE;EAC5D;EAEA,MAAM;IAACC,IAAI;IAAEC,IAAI;IAAEC,MAAM;IAAEC,OAAO;IAAEC,aAAa;IAAEC;EAAU,CAAC,GAAGX,aAAa;EAC9E,MAAMY,OAAO,GAAG;IACdJ,MAAM,EAAEA,MAAM,IAAI,KAAK;IACvBC,OAAO;IACPC,aAAa;IACbC;EACF,CAAC;EACD,IAAIL,IAAI,IAAIC,IAAI,EAAE;IAChBK,OAAO,CAACC,IAAI,GAAG;MAACP,IAAI;MAAEC;IAAI,CAAC;EAC7B;EACA,MAAMO,YAAG,CAACC,UAAU,CAACjB,SAAS,EAAEC,UAAU,EAAEa,OAAO,CAAC;EACpD,OAAO,EAAE;AACX;AAEA,MAAMI,WAAW,GAAG,IAAIC,GAAG,EAAE;AAC7BC,OAAO,CAACC,EAAE,CAAC,MAAM,EAAE,MAAM;EACvB,KAAK,MAAMC,SAAS,IAAIJ,WAAW,EAAE;IACnC,IAAI;MACFK,WAAE,CAACC,UAAU,CAACF,SAAS,CAAC;IAC1B,CAAC,CAAC,OAAOG,GAAG,EAAE,CAAC;EACjB;AACF,CAAC,CAAC;AAEF,MAAMC,cAAc,CAAC;EACnBC,WAAW,CAAEC,IAAI,EAAEC,SAAS,EAAEC,GAAG,EAAEC,IAAI,GAAG,CAAC,CAAC,EAAE;IAC5C,IAAI,CAACD,GAAG,GAAGA,GAAG;IACd,IAAI,CAACE,QAAQ,GAAG,IAAI;IACpB,IAAI,CAACC,KAAK,GAAGL,IAAI;IACjB,IAAI,CAACM,UAAU,GAAGL,SAAS;IAC3B,IAAI,CAACM,MAAM,GAAGJ,IAAI,CAACK,KAAK;IACxB,IAAI,CAACC,QAAQ,GAAGN,IAAI,CAACO,OAAO;IAC5B,IAAI,CAACC,KAAK,GAAGR,IAAI,CAACS,IAAI;IACtB,IAAI,CAACC,YAAY,GAAGV,IAAI,CAACW,SAAS,GAAG,CAAC,GAAGX,IAAI,CAACW,SAAS,GAAG,IAAI,GAAG9C,qBAAqB;IACtF,IAAI,CAAC+C,MAAM,GAAG,IAAI;EACpB;EAEA,MAAMC,YAAY,GAAI;IACpB,IAAI,MAAMrB,WAAE,CAACsB,MAAM,CAAC,IAAI,CAACX,UAAU,CAAC,EAAE;MACpChB,WAAW,CAAC4B,GAAG,CAAC,IAAI,CAACZ,UAAU,CAAC;MAChC,OAAO,IAAI,CAACA,UAAU;IACxB;IACA,OAAO,EAAE;EACX;EAEA,IAAIa,SAAS,GAAI;IAAA;IACf,OAAO,CAAC,oBAAE,IAAI,CAACf,QAAQ,2CAAb,eAAee,SAAS,CAAC;EACrC;EAEA,MAAMC,mBAAmB,GAAI;IAC3B,IAAI,IAAI,CAACD,SAAS,EAAE;MAClB,IAAI,CAACjB,GAAG,CAACmB,KAAK,CAAC,sDAAsD,CAAC;MACtE,IAAI;QACF,MAAM,IAAI,CAACjB,QAAQ,CAACkB,IAAI,CAAC,SAAS,CAAC;MACrC,CAAC,CAAC,OAAOzB,GAAG,EAAE,CAAC;IACjB;IACA,IAAI,CAACO,QAAQ,GAAG,IAAI;IACpB,MAAMH,SAAS,GAAG,MAAM,IAAI,CAACe,YAAY,EAAE;IAC3C,IAAIf,SAAS,EAAE;MACb,MAAMN,WAAE,CAAC4B,MAAM,CAACtB,SAAS,CAAC;MAC1BX,WAAW,CAACkC,MAAM,CAACvB,SAAS,CAAC;IAC/B;IACA,OAAO,EAAE;EACX;EAEA,MAAMwB,KAAK,GAAI;IACb,MAAMC,IAAI,GAAG,CACX,IAAI,CAACrB,KAAK,EAAE,aAAa,CAC1B;IACD,IAAI,IAAI,CAACI,QAAQ,EAAE;MACjBiB,IAAI,CAACC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAClB,QAAQ,CAAC;IACvC;IACA,IAAI,IAAI,CAACF,MAAM,EAAE;MACfmB,IAAI,CAACC,IAAI,CAAC,SAAS,EAAE,IAAI,CAACpB,MAAM,CAAC;IACnC;IACA,IAAI,IAAI,CAACI,KAAK,EAAE;MACde,IAAI,CAACC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAChB,KAAK,CAAC;IACjC;IACAe,IAAI,CAACC,IAAI,CAAC,SAAS,EAAE,IAAI,CAACrB,UAAU,CAAC;IACrC,IAAI,CAACF,QAAQ,GAAG,MAAM,IAAIwB,mBAAM,EAAE,CAACC,IAAI,CAAC,IAAI,EAAE;MAC5CH,IAAI;MACJI,YAAY,EAAE;IAChB,CAAC,CAAC;IACF,IAAI,CAAC5B,GAAG,CAACmB,KAAK,CAAE,4CAA2C5C,aAAI,CAACsD,KAAK,CAACL,IAAI,CAAE,EAAC,CAAC;IAC9E,IAAI,CAACtB,QAAQ,CAACX,EAAE,CAAC,QAAQ,EAAE,CAACuC,MAAM,EAAEC,MAAM,KAAK;MAC7C,MAAMC,IAAI,GAAG3D,eAAC,CAAC4D,IAAI,CAACH,MAAM,IAAIC,MAAM,CAAC;MACrC,IAAIC,IAAI,EAAE;QACR,IAAI,CAAChC,GAAG,CAACmB,KAAK,CAAE,gBAAe,IAAI,CAAChB,KAAK,CAAC+B,SAAS,CAAC,CAAC,EAAE,CAAC,CAAE,KAAIF,IAAK,EAAC,CAAC;MACvE;IACF,CAAC,CAAC;IACF,IAAI,CAAC9B,QAAQ,CAACiC,IAAI,CAAC,MAAM,EAAE,OAAOC,IAAI,EAAEC,MAAM,KAAK;MACjD,IAAI,CAACnC,QAAQ,GAAG,IAAI;MACpB,IAAIkC,IAAI,KAAK,CAAC,EAAE;QACd,IAAI,CAACpC,GAAG,CAACmB,KAAK,CAAC,wCAAwC,CAAC;MAC1D,CAAC,MAAM;QACL,MAAM,IAAI,CAACD,mBAAmB,EAAE;QAChC,IAAI,CAAClB,GAAG,CAACsC,IAAI,CAAE,2CAA0CF,IAAK,YAAWC,MAAO,EAAC,CAAC;MACpF;IACF,CAAC,CAAC;IACF,MAAM,IAAI,CAACnC,QAAQ,CAACqB,KAAK,CAAC,CAAC,CAAC;IAC5B,IAAI;MACF,MAAM,IAAAgB,0BAAgB,EAAC,YAAY;QACjC,IAAI,CAAC,IAAI,CAACtB,SAAS,EAAE;UACnB,MAAM,IAAIuB,KAAK,EAAE;QACnB;QACA,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC1B,YAAY,EAAE,CAAC;MACtC,CAAC,EAAE;QACD2B,MAAM,EAAE5E,kBAAkB;QAC1B6E,UAAU,EAAE9E;MACd,CAAC,CAAC;IACJ,CAAC,CAAC,OAAO+E,CAAC,EAAE;MACV,MAAM,IAAI,CAACzB,mBAAmB,EAAE;MAChC,IAAI,CAAClB,GAAG,CAAC4C,aAAa,CAAE,oCAAmC,IAAI,CAACxC,UAAW,0BAAyBvC,kBAAmB,MAAK,GACzH,uCAAsC,CAAC;IAC5C;IACA,IAAI,CAACgD,MAAM,GAAGgC,UAAU,CAAC,YAAY;MACnC,IAAI,IAAI,CAAC5B,SAAS,EAAE;QAClB,IAAI;UACF,MAAM,IAAI,CAACG,IAAI,EAAE;QACnB,CAAC,CAAC,OAAOuB,CAAC,EAAE;UACV,IAAI,CAAC3C,GAAG,CAAC8C,KAAK,CAACH,CAAC,CAAC;QACnB;MACF;IACF,CAAC,EAAE,IAAI,CAAChC,YAAY,CAAC;IACrB,IAAI,CAACX,GAAG,CAAC+C,IAAI,CAAE,oDAAmD,IAAI,CAACpC,YAAa,IAAG,CAAC;EAC1F;EAEA,MAAMS,IAAI,CAAE4B,KAAK,GAAG,KAAK,EAAE;IACzB,IAAI,IAAI,CAACnC,MAAM,EAAE;MACfoC,YAAY,CAAC,IAAI,CAACpC,MAAM,CAAC;MACzB,IAAI,CAACA,MAAM,GAAG,IAAI;IACpB;IAEA,IAAImC,KAAK,EAAE;MACT,OAAO,MAAM,IAAI,CAAC9B,mBAAmB,EAAE;IACzC;IAEA,IAAI,CAAC,IAAI,CAACD,SAAS,EAAE;MACnB,IAAI,CAACjB,GAAG,CAACmB,KAAK,CAAC,wEAAwE,CAAC;MACxF,OAAO,MAAM,IAAI,CAACL,YAAY,EAAE;IAClC;IAEA,IAAI;MACF,MAAM,IAAI,CAACZ,QAAQ,CAACkB,IAAI,CAAC,QAAQ,EAAErD,2BAA2B,CAAC;IACjE,CAAC,CAAC,OAAO4E,CAAC,EAAE;MACV,MAAM,IAAI,CAACzB,mBAAmB,EAAE;MAChC,MAAM,IAAIsB,KAAK,CAAE,6CAA4CzE,2BAA4B,IAAG,CAAC;IAC/F;IAEA,OAAO,MAAM,IAAI,CAAC+C,YAAY,EAAE;EAClC;AACF;AAEA,eAAeoC,oBAAoB,CAAEC,IAAI,EAAE;EACzC,IAAIA,IAAI,CAAC,qBAAqB,CAAC,KAAK,KAAK,EAAE;IACzC,OAAO,IAAI;EACb;EAEA,MAAMC,UAAU,GAAG/E,eAAC,CAACgF,OAAO,CAAChF,eAAC,CAACiF,MAAM,CAAC,MAAM,IAAI5B,mBAAM,EAAE,CAAC6B,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;EAClF,KAAK,MAAM;IAACC,IAAI;IAAE1D,IAAI;IAAE2D,KAAK;IAAEC;EAAG,CAAC,IAAIN,UAAU,EAAE;IACjD,IAAIK,KAAK,KAAK,QAAQ,EAAE;MACtB;IACF;IAEA,IAAIpF,eAAC,CAACsF,OAAO,CAACR,IAAI,CAAC,mBAAmB,CAAC,CAAC,KAAK9E,eAAC,CAACsF,OAAO,CAAC7D,IAAI,CAAC,EAAE;MAC5D,OAAOA,IAAI;IACb;IACA,IAAIzB,eAAC,CAACsF,OAAO,CAACR,IAAI,CAAC,mBAAmB,CAAC,CAAC,KAAK9E,eAAC,CAACsF,OAAO,CAACH,IAAI,CAAC,KACzDL,IAAI,CAAC,wBAAwB,CAAC,IAAIA,IAAI,CAAC,wBAAwB,CAAC,KAAKO,GAAG,IACpE,CAACP,IAAI,CAAC,wBAAwB,CAAC,CAAC,EAAE;MACvC,OAAOrD,IAAI;IACb;EACF;EAEA,OAAO,IAAI;AACb;AA0BAnC,QAAQ,CAACiG,oBAAoB,GAAG,eAAeA,oBAAoB,CAAE5E,OAAO,GAAG,CAAC,CAAC,EAAE;EAAA;EACjF,MAAM;IACJ4B,SAAS;IACTN,KAAK;IACLE,OAAO;IACPE,IAAI;IACJmD,YAAY,GAAG;EACjB,CAAC,GAAG7E,OAAO;EACX,6BAAI,IAAI,CAAC8E,eAAe,kDAApB,sBAAsB7C,SAAS,EAAE;IACnC,IAAI,CAACjB,GAAG,CAAC+C,IAAI,CAAC,yCAAyC,CAAC;IACxD,IAAI,CAACc,YAAY,EAAE;MACjB,IAAI,CAAC7D,GAAG,CAAC+C,IAAI,CAAC,eAAe,CAAC;MAC9B;IACF;IACA,IAAI,CAAC/C,GAAG,CAAC+C,IAAI,CAAC,6CAA6C,CAAC;IAC5D,MAAM,IAAI,CAACe,eAAe,CAAC1C,IAAI,CAAC,IAAI,CAAC;EACvC;EACA,IAAI,CAAC0C,eAAe,GAAG,IAAI;EAE3B,MAAMhE,IAAI,GAAG,MAAMoD,oBAAoB,CAAC,IAAI,CAACC,IAAI,CAAC;EAClD,IAAI,CAACrD,IAAI,EAAE;IACT,MAAM,IAAI0C,KAAK,CAAC,4DAA4D,GAC1E,wCAAwC,CAAC;EAC7C;EAEA,MAAMzC,SAAS,GAAG,MAAMgE,gBAAO,CAACC,IAAI,CAAC;IACnCC,MAAM,EAAE1F,aAAI,CAAC2F,MAAM,EAAE,CAAChC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;IACrCiC,MAAM,EAAEnG;EACV,CAAC,CAAC;EACF,IAAI,CAAC8F,eAAe,GAAG,IAAIlE,cAAc,CAACE,IAAI,EAAEC,SAAS,EAAE,IAAI,CAACC,GAAG,EAAE;IACnEY,SAAS,EAAEwD,QAAQ,CAACxD,SAAS,EAAE,EAAE,CAAC;IAClCN,KAAK;IACLE,OAAO;IACPE;EACF,CAAC,CAAC;EACF,IAAI;IACF,MAAM,IAAI,CAACoD,eAAe,CAACvC,KAAK,EAAE;EACpC,CAAC,CAAC,OAAOoB,CAAC,EAAE;IACV,IAAI,CAACmB,eAAe,GAAG,IAAI;IAC3B,MAAMnB,CAAC;EACT;AACF,CAAC;AA+BDhF,QAAQ,CAAC0G,mBAAmB,GAAG,eAAeA,mBAAmB,CAAErF,OAAO,GAAG,CAAC,CAAC,EAAE;EAC/E,IAAI,CAAC,IAAI,CAAC8E,eAAe,EAAE;IACzB,IAAI,CAAC9D,GAAG,CAAC+C,IAAI,CAAC,qDAAqD,CAAC;IACpE,OAAO,EAAE;EACX;EAEA,IAAI,CAAC/C,GAAG,CAACmB,KAAK,CAAC,qCAAqC,CAAC;EACrD,MAAMpB,SAAS,GAAG,MAAM,IAAI,CAAC+D,eAAe,CAAC1C,IAAI,EAAE;EACnD,IAAI,CAACrB,SAAS,EAAE;IACd,IAAI,CAACC,GAAG,CAAC+C,IAAI,CAAC,mDAAmD,CAAC;IAClE,OAAO,EAAE;EACX;EACA,IAAI1E,eAAC,CAACC,OAAO,CAACU,OAAO,CAACb,UAAU,CAAC,EAAE;IACjC,MAAM;MAACmG;IAAI,CAAC,GAAG,MAAM7E,WAAE,CAAC8E,IAAI,CAACxE,SAAS,CAAC;IACvC,IAAI,CAACC,GAAG,CAACmB,KAAK,CAAE,iDAAgD5C,aAAI,CAACiG,oBAAoB,CAACF,IAAI,CAAE,EAAC,CAAC;EACpG;EACA,OAAO,MAAMrG,mBAAmB,CAAC8B,SAAS,EAAEf,OAAO,CAACb,UAAU,EAAEa,OAAO,CAAC;AAC1E,CAAC;AAAC,eAEarB,QAAQ;AAAA"}
@@ -17,8 +17,7 @@ class SafariDriver extends _driver.BaseDriver {
17
17
  constructor(opts = {}) {
18
18
  super(opts);
19
19
  this.desiredCapConstraints = _desiredCaps.desiredCapConstraints;
20
- this.locatorStrategies = ['xpath', 'tag name', 'link text', 'partial link text', 'css selector',
21
- 'id', 'name'];
20
+ this.locatorStrategies = ['xpath', 'tag name', 'link text', 'partial link text', 'css selector', 'id', 'name'];
22
21
  this.resetState();
23
22
  for (const [cmd, fn] of _lodash.default.toPairs(_index.default)) {
24
23
  SafariDriver.prototype[cmd] = fn;
@@ -63,4 +62,4 @@ class SafariDriver extends _driver.BaseDriver {
63
62
  }
64
63
  var _default = SafariDriver;
65
64
  exports.default = _default;
66
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOT19QUk9YWSIsIlJlZ0V4cCIsIlNhZmFyaURyaXZlciIsIkJhc2VEcml2ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJsb2NhdG9yU3RyYXRlZ2llcyIsInJlc2V0U3RhdGUiLCJjbWQiLCJmbiIsIl8iLCJ0b1BhaXJzIiwiY29tbWFuZHMiLCJwcm90b3R5cGUiLCJzYWZhcmkiLCJwcm94eVJlcVJlcyIsImlzUHJveHlBY3RpdmUiLCJfc2NyZWVuUmVjb3JkZXIiLCJwcm94eUFjdGl2ZSIsImdldFByb3h5QXZvaWRMaXN0IiwiY2FuUHJveHkiLCJjcmVhdGVTZXNzaW9uIiwiYXJncyIsInNlc3Npb25JZCIsImNhcHMiLCJTYWZhcmlEcml2ZXJTZXJ2ZXIiLCJsb2ciLCJzdGFydCIsImZvcm1hdENhcHNGb3JTZXJ2ZXIiLCJlIiwiZGVsZXRlU2Vzc2lvbiIsInByb3h5IiwiYmluZCIsImluZm8iLCJzdG9wIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2RyaXZlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQmFzZURyaXZlciB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuaW1wb3J0IFNhZmFyaURyaXZlclNlcnZlciBmcm9tICcuL3NhZmFyaSc7XG5pbXBvcnQgeyBkZXNpcmVkQ2FwQ29uc3RyYWludHMgfSBmcm9tICcuL2Rlc2lyZWQtY2Fwcyc7XG5pbXBvcnQgY29tbWFuZHMgZnJvbSAnLi9jb21tYW5kcy9pbmRleCc7XG5pbXBvcnQgeyBmb3JtYXRDYXBzRm9yU2VydmVyIH0gZnJvbSAnLi91dGlscyc7XG5cbmNvbnN0IE5PX1BST1hZID0gW1xuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50L1teL10rL2VsZW1lbnRzPyQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50cz8kJyldLFxuXG4gIFsnREVMRVRFJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2Nvb2tpZSQnKV0sXG5dO1xuXG5jbGFzcyBTYWZhcmlEcml2ZXIgZXh0ZW5kcyBCYXNlRHJpdmVyIHtcbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICAgIHRoaXMuZGVzaXJlZENhcENvbnN0cmFpbnRzID0gZGVzaXJlZENhcENvbnN0cmFpbnRzO1xuICAgIHRoaXMubG9jYXRvclN0cmF0ZWdpZXMgPSBbXG4gICAgICAneHBhdGgnLFxuICAgICAgJ3RhZyBuYW1lJyxcbiAgICAgICdsaW5rIHRleHQnLFxuICAgICAgJ3BhcnRpYWwgbGluayB0ZXh0JyxcbiAgICAgICdjc3Mgc2VsZWN0b3InLFxuICAgICAgLy8gTGV0IHRoZXNlIHR3byByZWFjaCBTYWZhcmkgRHJpdmVyIGFuZCBmYWlsIHRoZXJlIHdpdGggYSBwcm9wZXIgZXJyb3IgbWVzc2FnZVxuICAgICAgJ2lkJyxcbiAgICAgICduYW1lJyxcbiAgICBdO1xuICAgIHRoaXMucmVzZXRTdGF0ZSgpO1xuXG4gICAgZm9yIChjb25zdCBbY21kLCBmbl0gb2YgXy50b1BhaXJzKGNvbW1hbmRzKSkge1xuICAgICAgU2FmYXJpRHJpdmVyLnByb3RvdHlwZVtjbWRdID0gZm47XG4gICAgfVxuICB9XG5cbiAgcmVzZXRTdGF0ZSAoKSB7XG4gICAgdGhpcy5zYWZhcmkgPSBudWxsO1xuICAgIHRoaXMucHJveHlSZXFSZXMgPSBudWxsO1xuICAgIHRoaXMuaXNQcm94eUFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuX3NjcmVlblJlY29yZGVyID0gbnVsbDtcbiAgfVxuXG4gIHByb3h5QWN0aXZlICgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1Byb3h5QWN0aXZlO1xuICB9XG5cbiAgZ2V0UHJveHlBdm9pZExpc3QgKCkge1xuICAgIHJldHVybiBOT19QUk9YWTtcbiAgfVxuXG4gIGNhblByb3h5ICgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVNlc3Npb24gKC4uLmFyZ3MpIHtcbiAgICBjb25zdCBbc2Vzc2lvbklkLCBjYXBzXSA9IGF3YWl0IHN1cGVyLmNyZWF0ZVNlc3Npb24oLi4uYXJncyk7XG4gICAgdGhpcy5zYWZhcmkgPSBuZXcgU2FmYXJpRHJpdmVyU2VydmVyKHRoaXMubG9nKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5zYWZhcmkuc3RhcnQoZm9ybWF0Q2Fwc0ZvclNlcnZlcihjYXBzKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKCk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy5zYWZhcmkucHJveHkucHJveHlSZXFSZXMuYmluZCh0aGlzLnNhZmFyaS5wcm94eSk7XG4gICAgdGhpcy5pc1Byb3h5QWN0aXZlID0gdHJ1ZTtcbiAgICByZXR1cm4gW3Nlc3Npb25JZCwgY2Fwc107XG4gIH1cblxuICBhc3luYyBkZWxldGVTZXNzaW9uICgpIHtcbiAgICB0aGlzLmxvZy5pbmZvKCdFbmRpbmcgU2FmYXJpIHNlc3Npb24nKTtcbiAgICBhd2FpdCB0aGlzLl9zY3JlZW5SZWNvcmRlcj8uc3RvcCh0cnVlKTtcbiAgICBhd2FpdCB0aGlzLnNhZmFyaT8uc3RvcCgpO1xuICAgIHRoaXMucmVzZXRTdGF0ZSgpO1xuXG4gICAgYXdhaXQgc3VwZXIuZGVsZXRlU2Vzc2lvbigpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNhZmFyaURyaXZlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFNQSxRQUFRLEdBQUcsQ0FDZixDQUFDLEtB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
65
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOT19QUk9YWSIsIlJlZ0V4cCIsIlNhZmFyaURyaXZlciIsIkJhc2VEcml2ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJsb2NhdG9yU3RyYXRlZ2llcyIsInJlc2V0U3RhdGUiLCJjbWQiLCJmbiIsIl8iLCJ0b1BhaXJzIiwiY29tbWFuZHMiLCJwcm90b3R5cGUiLCJzYWZhcmkiLCJwcm94eVJlcVJlcyIsImlzUHJveHlBY3RpdmUiLCJfc2NyZWVuUmVjb3JkZXIiLCJwcm94eUFjdGl2ZSIsImdldFByb3h5QXZvaWRMaXN0IiwiY2FuUHJveHkiLCJjcmVhdGVTZXNzaW9uIiwiYXJncyIsInNlc3Npb25JZCIsImNhcHMiLCJTYWZhcmlEcml2ZXJTZXJ2ZXIiLCJsb2ciLCJzdGFydCIsImZvcm1hdENhcHNGb3JTZXJ2ZXIiLCJlIiwiZGVsZXRlU2Vzc2lvbiIsInByb3h5IiwiYmluZCIsImluZm8iLCJzdG9wIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2RyaXZlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQmFzZURyaXZlciB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuaW1wb3J0IFNhZmFyaURyaXZlclNlcnZlciBmcm9tICcuL3NhZmFyaSc7XG5pbXBvcnQgeyBkZXNpcmVkQ2FwQ29uc3RyYWludHMgfSBmcm9tICcuL2Rlc2lyZWQtY2Fwcyc7XG5pbXBvcnQgY29tbWFuZHMgZnJvbSAnLi9jb21tYW5kcy9pbmRleCc7XG5pbXBvcnQgeyBmb3JtYXRDYXBzRm9yU2VydmVyIH0gZnJvbSAnLi91dGlscyc7XG5cbmNvbnN0IE5PX1BST1hZID0gW1xuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50L1teL10rL2VsZW1lbnRzPyQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50cz8kJyldLFxuXG4gIFsnREVMRVRFJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2Nvb2tpZSQnKV0sXG5dO1xuXG5jbGFzcyBTYWZhcmlEcml2ZXIgZXh0ZW5kcyBCYXNlRHJpdmVyIHtcbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICAgIHRoaXMuZGVzaXJlZENhcENvbnN0cmFpbnRzID0gZGVzaXJlZENhcENvbnN0cmFpbnRzO1xuICAgIHRoaXMubG9jYXRvclN0cmF0ZWdpZXMgPSBbXG4gICAgICAneHBhdGgnLFxuICAgICAgJ3RhZyBuYW1lJyxcbiAgICAgICdsaW5rIHRleHQnLFxuICAgICAgJ3BhcnRpYWwgbGluayB0ZXh0JyxcbiAgICAgICdjc3Mgc2VsZWN0b3InLFxuICAgICAgLy8gTGV0IHRoZXNlIHR3byByZWFjaCBTYWZhcmkgRHJpdmVyIGFuZCBmYWlsIHRoZXJlIHdpdGggYSBwcm9wZXIgZXJyb3IgbWVzc2FnZVxuICAgICAgJ2lkJyxcbiAgICAgICduYW1lJyxcbiAgICBdO1xuICAgIHRoaXMucmVzZXRTdGF0ZSgpO1xuXG4gICAgZm9yIChjb25zdCBbY21kLCBmbl0gb2YgXy50b1BhaXJzKGNvbW1hbmRzKSkge1xuICAgICAgU2FmYXJpRHJpdmVyLnByb3RvdHlwZVtjbWRdID0gZm47XG4gICAgfVxuICB9XG5cbiAgcmVzZXRTdGF0ZSAoKSB7XG4gICAgdGhpcy5zYWZhcmkgPSBudWxsO1xuICAgIHRoaXMucHJveHlSZXFSZXMgPSBudWxsO1xuICAgIHRoaXMuaXNQcm94eUFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuX3NjcmVlblJlY29yZGVyID0gbnVsbDtcbiAgfVxuXG4gIHByb3h5QWN0aXZlICgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1Byb3h5QWN0aXZlO1xuICB9XG5cbiAgZ2V0UHJveHlBdm9pZExpc3QgKCkge1xuICAgIHJldHVybiBOT19QUk9YWTtcbiAgfVxuXG4gIGNhblByb3h5ICgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVNlc3Npb24gKC4uLmFyZ3MpIHtcbiAgICBjb25zdCBbc2Vzc2lvbklkLCBjYXBzXSA9IGF3YWl0IHN1cGVyLmNyZWF0ZVNlc3Npb24oLi4uYXJncyk7XG4gICAgdGhpcy5zYWZhcmkgPSBuZXcgU2FmYXJpRHJpdmVyU2VydmVyKHRoaXMubG9nKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5zYWZhcmkuc3RhcnQoZm9ybWF0Q2Fwc0ZvclNlcnZlcihjYXBzKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKCk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy5zYWZhcmkucHJveHkucHJveHlSZXFSZXMuYmluZCh0aGlzLnNhZmFyaS5wcm94eSk7XG4gICAgdGhpcy5pc1Byb3h5QWN0aXZlID0gdHJ1ZTtcbiAgICByZXR1cm4gW3Nlc3Npb25JZCwgY2Fwc107XG4gIH1cblxuICBhc3luYyBkZWxldGVTZXNzaW9uICgpIHtcbiAgICB0aGlzLmxvZy5pbmZvKCdFbmRpbmcgU2FmYXJpIHNlc3Npb24nKTtcbiAgICBhd2FpdCB0aGlzLl9zY3JlZW5SZWNvcmRlcj8uc3RvcCh0cnVlKTtcbiAgICBhd2FpdCB0aGlzLnNhZmFyaT8uc3RvcCgpO1xuICAgIHRoaXMucmVzZXRTdGF0ZSgpO1xuXG4gICAgYXdhaXQgc3VwZXIuZGVsZXRlU2Vzc2lvbigpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNhZmFyaURyaXZlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFNQSxRQUFRLEdBQUcsQ0FDZixDQUFDLEtB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
@@ -1 +1 @@
1
- {"version":3,"file":"driver.js","names":["NO_PROXY","RegExp","SafariDriver","BaseDriver","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","info","stop"],"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';\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 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;AACA;AACA;AACA;AACA;AACA;AAEA,MAAMA,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;EACpCC,WAAW,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;IAEd,IAAI,EACJ,MAAM,CACP;IACD,IAAI,CAACC,UAAU,EAAE;IAEjB,KAAK,MAAM,CAACC,GAAG,EAAEC,EAAE,CAAC,IAAIC,eAAC,CAACC,OAAO,CAACC,cAAQ,CAAC,EAAE;MAC3CX,YAAY,CAACY,SAAS,CAACL,GAAG,CAAC,GAAGC,EAAE;IAClC;EACF;EAEAF,UAAU,GAAI;IACZ,IAAI,CAACO,MAAM,GAAG,IAAI;IAClB,IAAI,CAACC,WAAW,GAAG,IAAI;IACvB,IAAI,CAACC,aAAa,GAAG,KAAK;IAC1B,IAAI,CAACC,eAAe,GAAG,IAAI;EAC7B;EAEAC,WAAW,GAAI;IACb,OAAO,IAAI,CAACF,aAAa;EAC3B;EAEAG,iBAAiB,GAAI;IACnB,OAAOpB,QAAQ;EACjB;EAEAqB,QAAQ,GAAI;IACV,OAAO,IAAI;EACb;EAEA,MAAMC,aAAa,CAAE,GAAGC,IAAI,EAAE;IAC5B,MAAM,CAACC,SAAS,EAAEC,IAAI,CAAC,GAAG,MAAM,KAAK,CAACH,aAAa,CAAC,GAAGC,IAAI,CAAC;IAC5D,IAAI,CAACR,MAAM,GAAG,IAAIW,eAAkB,CAAC,IAAI,CAACC,GAAG,CAAC;IAC9C,IAAI;MACF,MAAM,IAAI,CAACZ,MAAM,CAACa,KAAK,CAAC,IAAAC,0BAAmB,EAACJ,IAAI,CAAC,CAAC;IACpD,CAAC,CAAC,OAAOK,CAAC,EAAE;MACV,MAAM,IAAI,CAACC,aAAa,EAAE;MAC1B,MAAMD,CAAC;IACT;IACA,IAAI,CAACd,WAAW,GAAG,IAAI,CAACD,MAAM,CAACiB,KAAK,CAAChB,WAAW,CAACiB,IAAI,CAAC,IAAI,CAAClB,MAAM,CAACiB,KAAK,CAAC;IACxE,IAAI,CAACf,aAAa,GAAG,IAAI;IACzB,OAAO,CAACO,SAAS,EAAEC,IAAI,CAAC;EAC1B;EAEA,MAAMM,aAAa,GAAI;IAAA;IACrB,IAAI,CAACJ,GAAG,CAACO,IAAI,CAAC,uBAAuB,CAAC;IACtC,gCAAM,IAAI,CAAChB,eAAe,0DAApB,sBAAsBiB,IAAI,CAAC,IAAI,CAAC;IACtC,uBAAM,IAAI,CAACpB,MAAM,iDAAX,aAAaoB,IAAI,EAAE;IACzB,IAAI,CAAC3B,UAAU,EAAE;IAEjB,MAAM,KAAK,CAACuB,aAAa,EAAE;EAC7B;AACF;AAAC,eAEc7B,YAAY;AAAA"}
1
+ {"version":3,"file":"driver.js","names":["NO_PROXY","RegExp","SafariDriver","BaseDriver","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","info","stop"],"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';\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 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;AACA;AACA;AACA;AACA;AACA;AAEA,MAAMA,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;EACpCC,WAAW,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,EAAE;IAEjB,KAAK,MAAM,CAACC,GAAG,EAAEC,EAAE,CAAC,IAAIC,eAAC,CAACC,OAAO,CAACC,cAAQ,CAAC,EAAE;MAC3CX,YAAY,CAACY,SAAS,CAACL,GAAG,CAAC,GAAGC,EAAE;IAClC;EACF;EAEAF,UAAU,GAAI;IACZ,IAAI,CAACO,MAAM,GAAG,IAAI;IAClB,IAAI,CAACC,WAAW,GAAG,IAAI;IACvB,IAAI,CAACC,aAAa,GAAG,KAAK;IAC1B,IAAI,CAACC,eAAe,GAAG,IAAI;EAC7B;EAEAC,WAAW,GAAI;IACb,OAAO,IAAI,CAACF,aAAa;EAC3B;EAEAG,iBAAiB,GAAI;IACnB,OAAOpB,QAAQ;EACjB;EAEAqB,QAAQ,GAAI;IACV,OAAO,IAAI;EACb;EAEA,MAAMC,aAAa,CAAE,GAAGC,IAAI,EAAE;IAC5B,MAAM,CAACC,SAAS,EAAEC,IAAI,CAAC,GAAG,MAAM,KAAK,CAACH,aAAa,CAAC,GAAGC,IAAI,CAAC;IAC5D,IAAI,CAACR,MAAM,GAAG,IAAIW,eAAkB,CAAC,IAAI,CAACC,GAAG,CAAC;IAC9C,IAAI;MACF,MAAM,IAAI,CAACZ,MAAM,CAACa,KAAK,CAAC,IAAAC,0BAAmB,EAACJ,IAAI,CAAC,CAAC;IACpD,CAAC,CAAC,OAAOK,CAAC,EAAE;MACV,MAAM,IAAI,CAACC,aAAa,EAAE;MAC1B,MAAMD,CAAC;IACT;IACA,IAAI,CAACd,WAAW,GAAG,IAAI,CAACD,MAAM,CAACiB,KAAK,CAAChB,WAAW,CAACiB,IAAI,CAAC,IAAI,CAAClB,MAAM,CAACiB,KAAK,CAAC;IACxE,IAAI,CAACf,aAAa,GAAG,IAAI;IACzB,OAAO,CAACO,SAAS,EAAEC,IAAI,CAAC;EAC1B;EAEA,MAAMM,aAAa,GAAI;IAAA;IACrB,IAAI,CAACJ,GAAG,CAACO,IAAI,CAAC,uBAAuB,CAAC;IACtC,gCAAM,IAAI,CAAChB,eAAe,0DAApB,sBAAsBiB,IAAI,CAAC,IAAI,CAAC;IACtC,uBAAM,IAAI,CAACpB,MAAM,iDAAX,aAAaoB,IAAI,EAAE;IACzB,IAAI,CAAC3B,UAAU,EAAE;IAEjB,MAAM,KAAK,CAACuB,aAAa,EAAE;EAC7B;AACF;AAAC,eAEc7B,YAAY;AAAA"}
@@ -76,7 +76,6 @@ class SafariDriverProcess {
76
76
  }
77
77
  }
78
78
  }
79
-
80
79
  const SAFARI_DRIVER_PROCESS = new SafariDriverProcess();
81
80
  process.once('exit', () => {
82
81
  if (SAFARI_DRIVER_PROCESS.isRunning) {
@@ -154,4 +153,4 @@ class SafariDriverServer {
154
153
  }
155
154
  var _default = SafariDriverServer;
156
155
  exports.default = _default;
157
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTRF9CSU5BUlkiLCJTVEFSVFVQX1RJTUVPVVQiLCJTQUZBUklfUE9SVF9SQU5HRSIsIlNBRkFSSV9TRVJWRVJfR1VBUkQiLCJ1dGlsIiwiZ2V0TG9ja0ZpbGVHdWFyZCIsInBhdGgiLCJyZXNvbHZlIiwib3MiLCJ0bXBkaXIiLCJ0aW1lb3V0IiwidHJ5UmVjb3ZlcnkiLCJTYWZhcmlQcm94eSIsIkpXUHJveHkiLCJwcm94eUNvbW1hbmQiLCJ1cmwiLCJtZXRob2QiLCJib2R5IiwiZGlkUHJvY2Vzc0V4aXQiLCJlcnJvcnMiLCJJbnZhbGlkQ29udGV4dEVycm9yIiwiU2FmYXJpRHJpdmVyUHJvY2VzcyIsImNvbnN0cnVjdG9yIiwibG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwicG9ydCIsInByb2MiLCJpc1J1bm5pbmciLCJpbml0Iiwic3RhcnRQb3J0IiwiZW5kUG9ydCIsImZpbmRBUG9ydE5vdEluVXNlIiwiZSIsIkVycm9yIiwic2FmYXJpQmluIiwiZnMiLCJ3aGljaCIsIlN1YlByb2Nlc3MiLCJvbiIsInN0ZG91dCIsInN0ZGVyciIsImxpbmUiLCJkZWJ1ZyIsImNvZGUiLCJzaWduYWwiLCJpbmZvIiwic3RhcnQiLCJraWxsIiwic3RvcCIsImlnbiIsIlNBRkFSSV9EUklWRVJfUFJPQ0VTUyIsInByb2Nlc3MiLCJvbmNlIiwiZXhlY1N5bmMiLCJwaWQiLCJTYWZhcmlEcml2ZXJTZXJ2ZXIiLCJwcm94eSIsImNhcHMiLCJzZXJ2ZXIiLCJiYXNlIiwia2VlcEFsaXZlIiwid2FpdEZvckNvbmRpdGlvbiIsImNvbW1hbmQiLCJlcnIiLCJtZXNzYWdlIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsInRlc3QiLCJjYXBhYmlsaXRpZXMiLCJmaXJzdE1hdGNoIiwiYWx3YXlzTWF0Y2giLCJzZXNzaW9uSWQiXSwic291cmNlcyI6WyIuLi8uLi9saWIvc2FmYXJpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBvcyBmcm9tICdvcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IEpXUHJveHksIGVycm9ycyB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuaW1wb3J0IHsgZnMsIGxvZ2dlciwgdXRpbCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IFN1YlByb2Nlc3MgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IGZpbmRBUG9ydE5vdEluVXNlIH0gZnJvbSAncG9ydHNjYW5uZXInO1xuaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcblxuY29uc3QgU0RfQklOQVJZID0gJ3NhZmFyaWRyaXZlcic7XG5jb25zdCBTVEFSVFVQX1RJTUVPVVQgPSAxMDAwMDsgLy8gc2Vjb25kc1xuY29uc3QgU0FGQVJJX1BPUlRfUkFOR0UgPSBbNTEwMCwgNTIwMF07XG4vLyBUaGlzIGd1YXJkIGlzIG5lZWRlZCB0byBtYWtlIHN1cmVcbi8vIHdlIG5ldmVyIHJ1biBtdWx0aXBsZSBTYWZhcmkgZHJpdmVyIHByb2Nlc3NlcyBmb3IgdGhlIHNhbWUgQXBwaXVtIHByb2Nlc3NcbmNvbnN0IFNBRkFSSV9TRVJWRVJfR1VBUkQgPSB1dGlsLmdldExvY2tGaWxlR3VhcmQoXG4gIHBhdGgucmVzb2x2ZShvcy50bXBkaXIoKSwgJ3NhZmFyaV9zZXJ2ZXJfZ3VhcmQubG9jaycpLFxuICB7dGltZW91dDogNSwgdHJ5UmVjb3Zlcnk6IHRydWV9XG4pO1xuXG5cbmNsYXNzIFNhZmFyaVByb3h5IGV4dGVuZHMgSldQcm94eSB7XG4gIGFzeW5jIHByb3h5Q29tbWFuZCAodXJsLCBtZXRob2QsIGJvZHkgPSBudWxsKSB7XG4gICAgaWYgKHRoaXMuZGlkUHJvY2Vzc0V4aXQpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZENvbnRleHRFcnJvcihcbiAgICAgICAgYCcke21ldGhvZH0gJHt1cmx9JyBjYW5ub3QgYmUgcHJveGllZCB0byBTYWZhcmkgRHJpdmVyIHNlcnZlciBiZWNhdXNlIGAgK1xuICAgICAgICAndGhlIHByb2Nlc3MgaXMgbm90IHJ1bm5pbmcgKHByb2JhYmx5IGNyYXNoZWQpLiBDaGVjayB0aGUgc2VydmVyIGxvZyBmb3IgbW9yZSBkZXRhaWxzJyk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCBzdXBlci5wcm94eUNvbW1hbmQodXJsLCBtZXRob2QsIGJvZHkpO1xuICB9XG59XG5cbmNsYXNzIFNhZmFyaURyaXZlclByb2Nlc3Mge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgdGhpcy5sb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdTYWZhcmlEcml2ZXJQcm9jZXNzJyk7XG4gICAgdGhpcy5wb3J0ID0gbnVsbDtcbiAgICB0aGlzLnByb2MgPSBudWxsO1xuICB9XG5cbiAgZ2V0IGlzUnVubmluZyAoKSB7XG4gICAgcmV0dXJuICEhKHRoaXMucHJvYz8uaXNSdW5uaW5nKTtcbiAgfVxuXG4gIGFzeW5jIGluaXQgKCkge1xuICAgIGF3YWl0IFNBRkFSSV9TRVJWRVJfR1VBUkQoYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNSdW5uaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgW3N0YXJ0UG9ydCwgZW5kUG9ydF0gPSBTQUZBUklfUE9SVF9SQU5HRTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMucG9ydCA9IGF3YWl0IGZpbmRBUG9ydE5vdEluVXNlKHN0YXJ0UG9ydCwgZW5kUG9ydCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2Fubm90IGZpbmQgYW55IGZyZWUgcG9ydCBpbiByYW5nZSAke3N0YXJ0UG9ydH0uLiR7ZW5kUG9ydH0uIGAgK1xuICAgICAgICAgIGBEb3VibGUgY2hlY2sgdGhlIHByb2Nlc3NlcyB0aGF0IGFyZSBsb2NraW5nIHBvcnRzIHdpdGhpbiB0aGlzIHJhbmdlIGFuZCB0ZXJtaW5hdGUgYCArXG4gICAgICAgICAgYHRoZXNlIHdoaWNoIGFyZSBub3QgbmVlZGVkIGFueW1vcmVgKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHNhZmFyaUJpbjtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNhZmFyaUJpbiA9IGF3YWl0IGZzLndoaWNoKFNEX0JJTkFSWSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtTRF9CSU5BUll9IGJpbmFyeSBjYW5ub3QgYmUgZm91bmQgaW4gUEFUSC4gYCArXG4gICAgICAgICAgYFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgcHJlc2VudCBvbiB5b3VyIHN5c3RlbWApO1xuICAgICAgfVxuICAgICAgdGhpcy5wcm9jID0gbmV3IFN1YlByb2Nlc3Moc2FmYXJpQmluLCBbJy1wJywgdGhpcy5wb3J0LCAnLS1kaWFnbm9zZSddKTtcbiAgICAgIHRoaXMucHJvYy5vbignb3V0cHV0JywgKHN0ZG91dCwgc3RkZXJyKSA9PiB7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBzdGRvdXQgfHwgc3RkZXJyO1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgWyR7U0RfQklOQVJZfV0gJHtsaW5lfWApO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnByb2Mub24oJ2V4aXQnLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYCR7U0RfQklOQVJZfSBoYXMgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9LCBzaWduYWwgJHtzaWduYWx9YCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMubG9nLmluZm8oYFN0YXJ0aW5nICcke3NhZmFyaUJpbn0nIG9uIHBvcnQgJHt0aGlzLnBvcnR9YCk7XG4gICAgICBhd2FpdCB0aGlzLnByb2Muc3RhcnQoMCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBraWxsICgpIHtcbiAgICBpZiAodGhpcy5pc1J1bm5pbmcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMucHJvYy5zdG9wKCdTSUdLSUxMJyk7XG4gICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgfVxuICB9XG59XG5cbi8vIFNpbmdsZSBzZXJ2ZXIgcHJvY2VzcyBwZXIgQXBwaXVtIGluc3RhbmNlXG5jb25zdCBTQUZBUklfRFJJVkVSX1BST0NFU1MgPSBuZXcgU2FmYXJpRHJpdmVyUHJvY2VzcygpO1xucHJvY2Vzcy5vbmNlKCdleGl0JywgKCkgPT4ge1xuICBpZiAoU0FGQVJJX0RSSVZFUl9QUk9DRVNTLmlzUnVubmluZykge1xuICAgIHRyeSB7XG4gICAgICBleGVjU3luYyhga2lsbCAke1NBRkFSSV9EUklWRVJfUFJPQ0VTUy5wcm9jLnBpZH1gKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gIH1cbn0pO1xuXG5jbGFzcyBTYWZhcmlEcml2ZXJTZXJ2ZXIge1xuICBjb25zdHJ1Y3RvciAobG9nKSB7XG4gICAgdGhpcy5sb2cgPSBsb2c7XG4gICAgdGhpcy5wcm94eSA9IG51bGw7XG4gIH1cblxuICBnZXQgaXNSdW5uaW5nICgpIHtcbiAgICByZXR1cm4gISEoU0FGQVJJX0RSSVZFUl9QUk9DRVNTLmlzUnVubmluZyk7XG4gIH1cblxuICBhc3luYyBzdGFydCAoY2Fwcykge1xuICAgIGF3YWl0IFNBRkFSSV9EUklWRVJfUFJPQ0VTUy5pbml0KCk7XG5cbiAgICB0aGlzLnByb3h5ID0gbmV3IFNhZmFyaVByb3h5KHtcbiAgICAgIHNlcnZlcjogJzEyNy4wLjAuMScsXG4gICAgICBwb3J0OiBTQUZBUklfRFJJVkVSX1BST0NFU1MucG9ydCxcbiAgICAgIGJhc2U6ICcnLFxuICAgICAgbG9nOiB0aGlzLmxvZyxcbiAgICAgIGtlZXBBbGl2ZTogdHJ1ZSxcbiAgICB9KTtcbiAgICB0aGlzLnByb3h5LmRpZFByb2Nlc3NFeGl0ID0gZmFsc2U7XG4gICAgU0FGQVJJX0RSSVZFUl9QUk9DRVNTLnByb2Mub24oJ2V4aXQnLCAoKSA9PiB7XG4gICAgICB0aGlzLnByb3h5LmRpZFByb2Nlc3NFeGl0ID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnByb3h5LmNvbW1hbmQoJy9zdGF0dXMnLCAnR0VUJyk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGlmICh0aGlzLnByb3h5LmRpZFByb2Nlc3NFeGl0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyLm1lc3NhZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgd2FpdE1zOiBTVEFSVFVQX1RJTUVPVVQsXG4gICAgICAgIGludGVydmFsTXM6IDEwMDAsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoL0NvbmRpdGlvbiB1bm1ldC8udGVzdChlLm1lc3NhZ2UpKSB7XG4gICAgICAgIGlmIChTQUZBUklfRFJJVkVSX1BST0NFU1MuaXNSdW5uaW5nKSB7XG4gICAgICAgICAgLy8gYXZvaWQgXCJmcm96ZW5cIiBwcm9jZXNzZXMsXG4gICAgICAgICAgYXdhaXQgU0FGQVJJX0RSSVZFUl9QUk9DRVNTLmtpbGwoKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNhZmFyaSBEcml2ZXIgc2VydmVyIGlzIG5vdCBsaXN0ZW5pbmcgd2l0aGluICR7U1RBUlRVUF9USU1FT1VUfW1zIHRpbWVvdXQuIGAgK1xuICAgICAgICAgIGBNYWtlIHN1cmUgaXQgaGFzIGJlZW4gZXhlY3V0ZWQgbWFudWFsbHkgYXQgbGVhc3Qgb25jZSB3aXRoICctLWVuYWJsZScgY29tbWFuZCBsaW5lIGFyZ3VtZW50LiBgICtcbiAgICAgICAgICBgQ2hlY2sgdGhlIHNlcnZlciBsb2cgZm9yIG1vcmUgZGV0YWlsc2ApO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnByb3h5LmNvbW1hbmQoJy9zZXNzaW9uJywgJ1BPU1QnLCB7XG4gICAgICBjYXBhYmlsaXRpZXM6IHtcbiAgICAgICAgZmlyc3RNYXRjaDogW3t9XSxcbiAgICAgICAgYWx3YXlzTWF0Y2g6IGNhcHMsXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzdG9wICgpIHtcbiAgICBpZiAoIXRoaXMuaXNSdW5uaW5nKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGAke1NEX0JJTkFSWX0gc2Vzc2lvbiBjYW5ub3QgYmUgc3RvcHBlZCwgYmVjYXVzZSB0aGUgc2VydmVyIGlzIG5vdCBydW5uaW5nYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJveHk/LnNlc3Npb25JZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcm94eS5jb21tYW5kKGAvc2Vzc2lvbi8ke3RoaXMucHJveHkuc2Vzc2lvbklkfWAsICdERUxFVEUnKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgJHtTRF9CSU5BUll9IHNlc3Npb24gY2Fubm90IGJlIGRlbGV0ZWQuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2FmYXJpRHJpdmVyU2VydmVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFNQSxTQUFTLEdBQUcsY0FBYztBQUNoQyxNQUFNQyxlQUFlLEdBQUcsS0FBSztBQUM3QixNQUFNQyxpQkFBaUIsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7QUFHdEMsTUFBTUMsbUJBQW1CLEdBQUdDLGFBQUksQ0FBQ0MsZ0JBQWdCLENBQy9DQyxhQUFJLENBQUNDLE9BQU8sQ0FBQ0MsV0FBRSxDQUFDQyxN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
156
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTRF9CSU5BUlkiLCJTVEFSVFVQX1RJTUVPVVQiLCJTQUZBUklfUE9SVF9SQU5HRSIsIlNBRkFSSV9TRVJWRVJfR1VBUkQiLCJ1dGlsIiwiZ2V0TG9ja0ZpbGVHdWFyZCIsInBhdGgiLCJyZXNvbHZlIiwib3MiLCJ0bXBkaXIiLCJ0aW1lb3V0IiwidHJ5UmVjb3ZlcnkiLCJTYWZhcmlQcm94eSIsIkpXUHJveHkiLCJwcm94eUNvbW1hbmQiLCJ1cmwiLCJtZXRob2QiLCJib2R5IiwiZGlkUHJvY2Vzc0V4aXQiLCJlcnJvcnMiLCJJbnZhbGlkQ29udGV4dEVycm9yIiwiU2FmYXJpRHJpdmVyUHJvY2VzcyIsImNvbnN0cnVjdG9yIiwibG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwicG9ydCIsInByb2MiLCJpc1J1bm5pbmciLCJpbml0Iiwic3RhcnRQb3J0IiwiZW5kUG9ydCIsImZpbmRBUG9ydE5vdEluVXNlIiwiZSIsIkVycm9yIiwic2FmYXJpQmluIiwiZnMiLCJ3aGljaCIsIlN1YlByb2Nlc3MiLCJvbiIsInN0ZG91dCIsInN0ZGVyciIsImxpbmUiLCJkZWJ1ZyIsImNvZGUiLCJzaWduYWwiLCJpbmZvIiwic3RhcnQiLCJraWxsIiwic3RvcCIsImlnbiIsIlNBRkFSSV9EUklWRVJfUFJPQ0VTUyIsInByb2Nlc3MiLCJvbmNlIiwiZXhlY1N5bmMiLCJwaWQiLCJTYWZhcmlEcml2ZXJTZXJ2ZXIiLCJwcm94eSIsImNhcHMiLCJzZXJ2ZXIiLCJiYXNlIiwia2VlcEFsaXZlIiwid2FpdEZvckNvbmRpdGlvbiIsImNvbW1hbmQiLCJlcnIiLCJtZXNzYWdlIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsInRlc3QiLCJjYXBhYmlsaXRpZXMiLCJmaXJzdE1hdGNoIiwiYWx3YXlzTWF0Y2giLCJzZXNzaW9uSWQiXSwic291cmNlcyI6WyIuLi8uLi9saWIvc2FmYXJpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBvcyBmcm9tICdvcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IEpXUHJveHksIGVycm9ycyB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuaW1wb3J0IHsgZnMsIGxvZ2dlciwgdXRpbCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IFN1YlByb2Nlc3MgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IGZpbmRBUG9ydE5vdEluVXNlIH0gZnJvbSAncG9ydHNjYW5uZXInO1xuaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcblxuY29uc3QgU0RfQklOQVJZID0gJ3NhZmFyaWRyaXZlcic7XG5jb25zdCBTVEFSVFVQX1RJTUVPVVQgPSAxMDAwMDsgLy8gc2Vjb25kc1xuY29uc3QgU0FGQVJJX1BPUlRfUkFOR0UgPSBbNTEwMCwgNTIwMF07XG4vLyBUaGlzIGd1YXJkIGlzIG5lZWRlZCB0byBtYWtlIHN1cmVcbi8vIHdlIG5ldmVyIHJ1biBtdWx0aXBsZSBTYWZhcmkgZHJpdmVyIHByb2Nlc3NlcyBmb3IgdGhlIHNhbWUgQXBwaXVtIHByb2Nlc3NcbmNvbnN0IFNBRkFSSV9TRVJWRVJfR1VBUkQgPSB1dGlsLmdldExvY2tGaWxlR3VhcmQoXG4gIHBhdGgucmVzb2x2ZShvcy50bXBkaXIoKSwgJ3NhZmFyaV9zZXJ2ZXJfZ3VhcmQubG9jaycpLFxuICB7dGltZW91dDogNSwgdHJ5UmVjb3Zlcnk6IHRydWV9XG4pO1xuXG5cbmNsYXNzIFNhZmFyaVByb3h5IGV4dGVuZHMgSldQcm94eSB7XG4gIGFzeW5jIHByb3h5Q29tbWFuZCAodXJsLCBtZXRob2QsIGJvZHkgPSBudWxsKSB7XG4gICAgaWYgKHRoaXMuZGlkUHJvY2Vzc0V4aXQpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZENvbnRleHRFcnJvcihcbiAgICAgICAgYCcke21ldGhvZH0gJHt1cmx9JyBjYW5ub3QgYmUgcHJveGllZCB0byBTYWZhcmkgRHJpdmVyIHNlcnZlciBiZWNhdXNlIGAgK1xuICAgICAgICAndGhlIHByb2Nlc3MgaXMgbm90IHJ1bm5pbmcgKHByb2JhYmx5IGNyYXNoZWQpLiBDaGVjayB0aGUgc2VydmVyIGxvZyBmb3IgbW9yZSBkZXRhaWxzJyk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCBzdXBlci5wcm94eUNvbW1hbmQodXJsLCBtZXRob2QsIGJvZHkpO1xuICB9XG59XG5cbmNsYXNzIFNhZmFyaURyaXZlclByb2Nlc3Mge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgdGhpcy5sb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdTYWZhcmlEcml2ZXJQcm9jZXNzJyk7XG4gICAgdGhpcy5wb3J0ID0gbnVsbDtcbiAgICB0aGlzLnByb2MgPSBudWxsO1xuICB9XG5cbiAgZ2V0IGlzUnVubmluZyAoKSB7XG4gICAgcmV0dXJuICEhKHRoaXMucHJvYz8uaXNSdW5uaW5nKTtcbiAgfVxuXG4gIGFzeW5jIGluaXQgKCkge1xuICAgIGF3YWl0IFNBRkFSSV9TRVJWRVJfR1VBUkQoYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNSdW5uaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgW3N0YXJ0UG9ydCwgZW5kUG9ydF0gPSBTQUZBUklfUE9SVF9SQU5HRTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMucG9ydCA9IGF3YWl0IGZpbmRBUG9ydE5vdEluVXNlKHN0YXJ0UG9ydCwgZW5kUG9ydCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2Fubm90IGZpbmQgYW55IGZyZWUgcG9ydCBpbiByYW5nZSAke3N0YXJ0UG9ydH0uLiR7ZW5kUG9ydH0uIGAgK1xuICAgICAgICAgIGBEb3VibGUgY2hlY2sgdGhlIHByb2Nlc3NlcyB0aGF0IGFyZSBsb2NraW5nIHBvcnRzIHdpdGhpbiB0aGlzIHJhbmdlIGFuZCB0ZXJtaW5hdGUgYCArXG4gICAgICAgICAgYHRoZXNlIHdoaWNoIGFyZSBub3QgbmVlZGVkIGFueW1vcmVgKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHNhZmFyaUJpbjtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNhZmFyaUJpbiA9IGF3YWl0IGZzLndoaWNoKFNEX0JJTkFSWSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtTRF9CSU5BUll9IGJpbmFyeSBjYW5ub3QgYmUgZm91bmQgaW4gUEFUSC4gYCArXG4gICAgICAgICAgYFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgcHJlc2VudCBvbiB5b3VyIHN5c3RlbWApO1xuICAgICAgfVxuICAgICAgdGhpcy5wcm9jID0gbmV3IFN1YlByb2Nlc3Moc2FmYXJpQmluLCBbJy1wJywgdGhpcy5wb3J0LCAnLS1kaWFnbm9zZSddKTtcbiAgICAgIHRoaXMucHJvYy5vbignb3V0cHV0JywgKHN0ZG91dCwgc3RkZXJyKSA9PiB7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBzdGRvdXQgfHwgc3RkZXJyO1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgWyR7U0RfQklOQVJZfV0gJHtsaW5lfWApO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnByb2Mub24oJ2V4aXQnLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYCR7U0RfQklOQVJZfSBoYXMgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9LCBzaWduYWwgJHtzaWduYWx9YCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMubG9nLmluZm8oYFN0YXJ0aW5nICcke3NhZmFyaUJpbn0nIG9uIHBvcnQgJHt0aGlzLnBvcnR9YCk7XG4gICAgICBhd2FpdCB0aGlzLnByb2Muc3RhcnQoMCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBraWxsICgpIHtcbiAgICBpZiAodGhpcy5pc1J1bm5pbmcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMucHJvYy5zdG9wKCdTSUdLSUxMJyk7XG4gICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgfVxuICB9XG59XG5cbi8vIFNpbmdsZSBzZXJ2ZXIgcHJvY2VzcyBwZXIgQXBwaXVtIGluc3RhbmNlXG5jb25zdCBTQUZBUklfRFJJVkVSX1BST0NFU1MgPSBuZXcgU2FmYXJpRHJpdmVyUHJvY2VzcygpO1xucHJvY2Vzcy5vbmNlKCdleGl0JywgKCkgPT4ge1xuICBpZiAoU0FGQVJJX0RSSVZFUl9QUk9DRVNTLmlzUnVubmluZykge1xuICAgIHRyeSB7XG4gICAgICBleGVjU3luYyhga2lsbCAke1NBRkFSSV9EUklWRVJfUFJPQ0VTUy5wcm9jLnBpZH1gKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gIH1cbn0pO1xuXG5jbGFzcyBTYWZhcmlEcml2ZXJTZXJ2ZXIge1xuICBjb25zdHJ1Y3RvciAobG9nKSB7XG4gICAgdGhpcy5sb2cgPSBsb2c7XG4gICAgdGhpcy5wcm94eSA9IG51bGw7XG4gIH1cblxuICBnZXQgaXNSdW5uaW5nICgpIHtcbiAgICByZXR1cm4gISEoU0FGQVJJX0RSSVZFUl9QUk9DRVNTLmlzUnVubmluZyk7XG4gIH1cblxuICBhc3luYyBzdGFydCAoY2Fwcykge1xuICAgIGF3YWl0IFNBRkFSSV9EUklWRVJfUFJPQ0VTUy5pbml0KCk7XG5cbiAgICB0aGlzLnByb3h5ID0gbmV3IFNhZmFyaVByb3h5KHtcbiAgICAgIHNlcnZlcjogJzEyNy4wLjAuMScsXG4gICAgICBwb3J0OiBTQUZBUklfRFJJVkVSX1BST0NFU1MucG9ydCxcbiAgICAgIGJhc2U6ICcnLFxuICAgICAgbG9nOiB0aGlzLmxvZyxcbiAgICAgIGtlZXBBbGl2ZTogdHJ1ZSxcbiAgICB9KTtcbiAgICB0aGlzLnByb3h5LmRpZFByb2Nlc3NFeGl0ID0gZmFsc2U7XG4gICAgU0FGQVJJX0RSSVZFUl9QUk9DRVNTLnByb2Mub24oJ2V4aXQnLCAoKSA9PiB7XG4gICAgICB0aGlzLnByb3h5LmRpZFByb2Nlc3NFeGl0ID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnByb3h5LmNvbW1hbmQoJy9zdGF0dXMnLCAnR0VUJyk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGlmICh0aGlzLnByb3h5LmRpZFByb2Nlc3NFeGl0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyLm1lc3NhZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgd2FpdE1zOiBTVEFSVFVQX1RJTUVPVVQsXG4gICAgICAgIGludGVydmFsTXM6IDEwMDAsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoL0NvbmRpdGlvbiB1bm1ldC8udGVzdChlLm1lc3NhZ2UpKSB7XG4gICAgICAgIGlmIChTQUZBUklfRFJJVkVSX1BST0NFU1MuaXNSdW5uaW5nKSB7XG4gICAgICAgICAgLy8gYXZvaWQgXCJmcm96ZW5cIiBwcm9jZXNzZXMsXG4gICAgICAgICAgYXdhaXQgU0FGQVJJX0RSSVZFUl9QUk9DRVNTLmtpbGwoKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNhZmFyaSBEcml2ZXIgc2VydmVyIGlzIG5vdCBsaXN0ZW5pbmcgd2l0aGluICR7U1RBUlRVUF9USU1FT1VUfW1zIHRpbWVvdXQuIGAgK1xuICAgICAgICAgIGBNYWtlIHN1cmUgaXQgaGFzIGJlZW4gZXhlY3V0ZWQgbWFudWFsbHkgYXQgbGVhc3Qgb25jZSB3aXRoICctLWVuYWJsZScgY29tbWFuZCBsaW5lIGFyZ3VtZW50LiBgICtcbiAgICAgICAgICBgQ2hlY2sgdGhlIHNlcnZlciBsb2cgZm9yIG1vcmUgZGV0YWlsc2ApO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnByb3h5LmNvbW1hbmQoJy9zZXNzaW9uJywgJ1BPU1QnLCB7XG4gICAgICBjYXBhYmlsaXRpZXM6IHtcbiAgICAgICAgZmlyc3RNYXRjaDogW3t9XSxcbiAgICAgICAgYWx3YXlzTWF0Y2g6IGNhcHMsXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzdG9wICgpIHtcbiAgICBpZiAoIXRoaXMuaXNSdW5uaW5nKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGAke1NEX0JJTkFSWX0gc2Vzc2lvbiBjYW5ub3QgYmUgc3RvcHBlZCwgYmVjYXVzZSB0aGUgc2VydmVyIGlzIG5vdCBydW5uaW5nYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJveHk/LnNlc3Npb25JZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcm94eS5jb21tYW5kKGAvc2Vzc2lvbi8ke3RoaXMucHJveHkuc2Vzc2lvbklkfWAsICdERUxFVEUnKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgJHtTRF9CSU5BUll9IHNlc3Npb24gY2Fubm90IGJlIGRlbGV0ZWQuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2FmYXJpRHJpdmVyU2VydmVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFNQSxTQUFTLEdBQUcsY0FBYztBQUNoQyxNQUFNQyxlQUFlLEdBQUcsS0FBSztBQUM3QixNQUFNQyxpQkFBaUIsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7QUFHdEMsTUFBTUMsbUJBQW1CLEdBQUdDLGFBQUksQ0FBQ0MsZ0JBQWdCLENBQy9DQyxhQUFJLENBQUNDLE9BQU8sQ0FBQ0MsV0FBRSxDQUFDQyxN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
@@ -1 +1 @@
1
- {"version":3,"file":"safari.js","names":["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","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","sessionId"],"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":["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","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","sessionId"],"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,12 +1,12 @@
1
1
  {
2
2
  "name": "appium-safari-driver",
3
- "version": "3.2.4",
3
+ "version": "3.2.5",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "appium-safari-driver",
9
- "version": "3.2.4",
9
+ "version": "3.2.5",
10
10
  "license": "Apache-2.0",
11
11
  "dependencies": {
12
12
  "@babel/runtime": "^7.0.0",
@@ -41,7 +41,7 @@
41
41
  "pre-commit": "^1.1.3",
42
42
  "rimraf": "^3.0.2",
43
43
  "semantic-release": "^19.0.2",
44
- "sinon": "^14.0.0",
44
+ "sinon": "^15.0.0",
45
45
  "webdriverio": "^7.0.0"
46
46
  },
47
47
  "engines": {
@@ -86,6 +86,21 @@
86
86
  "npm": ">=8"
87
87
  }
88
88
  },
89
+ "node_modules/@appium/base-driver/node_modules/asyncbox": {
90
+ "version": "2.9.2",
91
+ "engines": [
92
+ "node"
93
+ ],
94
+ "extraneous": true,
95
+ "license": "Apache-2.0",
96
+ "dependencies": {
97
+ "@babel/runtime": "^7.0.0",
98
+ "bluebird": "^3.5.1",
99
+ "es6-mapify": "^1.1.0",
100
+ "lodash": "^4.17.4",
101
+ "source-map-support": "^0.5.5"
102
+ }
103
+ },
89
104
  "node_modules/@appium/base-plugin": {
90
105
  "version": "1.10.5",
91
106
  "extraneous": true,
@@ -309,7 +324,7 @@
309
324
  }
310
325
  },
311
326
  "node_modules/@babel/parser": {
312
- "version": "7.20.2",
327
+ "version": "7.20.5",
313
328
  "extraneous": true,
314
329
  "license": "MIT",
315
330
  "bin": {
@@ -320,10 +335,10 @@
320
335
  }
321
336
  },
322
337
  "node_modules/@babel/runtime": {
323
- "version": "7.20.1",
338
+ "version": "7.20.6",
324
339
  "license": "MIT",
325
340
  "dependencies": {
326
- "regenerator-runtime": "^0.13.10"
341
+ "regenerator-runtime": "^0.13.11"
327
342
  },
328
343
  "engines": {
329
344
  "node": ">=6.9.0"
@@ -897,7 +912,6 @@
897
912
  },
898
913
  "node_modules/@types/bluebird": {
899
914
  "version": "3.5.37",
900
- "extraneous": true,
901
915
  "license": "MIT"
902
916
  },
903
917
  "node_modules/@types/body-parser": {
@@ -910,14 +924,14 @@
910
924
  }
911
925
  },
912
926
  "node_modules/@types/cacheable-request": {
913
- "version": "6.0.2",
927
+ "version": "6.0.3",
914
928
  "extraneous": true,
915
929
  "license": "MIT",
916
930
  "dependencies": {
917
931
  "@types/http-cache-semantics": "*",
918
- "@types/keyv": "*",
932
+ "@types/keyv": "^3.1.4",
919
933
  "@types/node": "*",
920
- "@types/responselike": "*"
934
+ "@types/responselike": "^1.0.0"
921
935
  }
922
936
  },
923
937
  "node_modules/@types/connect": {
@@ -987,12 +1001,11 @@
987
1001
  "license": "MIT"
988
1002
  },
989
1003
  "node_modules/@types/keyv": {
990
- "version": "4.2.0",
991
- "deprecated": "This is a stub types definition. keyv provides its own type definitions, so you do not need this installed.",
1004
+ "version": "3.1.4",
992
1005
  "extraneous": true,
993
1006
  "license": "MIT",
994
1007
  "dependencies": {
995
- "keyv": "*"
1008
+ "@types/node": "*"
996
1009
  }
997
1010
  },
998
1011
  "node_modules/@types/klaw": {
@@ -1362,17 +1375,17 @@
1362
1375
  "license": "MIT"
1363
1376
  },
1364
1377
  "node_modules/asyncbox": {
1365
- "version": "2.9.2",
1366
- "engines": [
1367
- "node"
1368
- ],
1378
+ "version": "2.9.4",
1369
1379
  "license": "Apache-2.0",
1370
1380
  "dependencies": {
1371
1381
  "@babel/runtime": "^7.0.0",
1382
+ "@types/bluebird": "^3.5.37",
1372
1383
  "bluebird": "^3.5.1",
1373
- "es6-mapify": "^1.1.0",
1374
1384
  "lodash": "^4.17.4",
1375
1385
  "source-map-support": "^0.5.5"
1386
+ },
1387
+ "engines": {
1388
+ "node": ">=10"
1376
1389
  }
1377
1390
  },
1378
1391
  "node_modules/asynckit": {
@@ -2086,6 +2099,7 @@
2086
2099
  "engines": [
2087
2100
  "node"
2088
2101
  ],
2102
+ "extraneous": true,
2089
2103
  "license": "Apache-2.0",
2090
2104
  "dependencies": {
2091
2105
  "@babel/runtime": "^7.0.0"
@@ -3026,7 +3040,7 @@
3026
3040
  "license": "MIT"
3027
3041
  },
3028
3042
  "node_modules/keyv": {
3029
- "version": "4.5.0",
3043
+ "version": "4.5.2",
3030
3044
  "extraneous": true,
3031
3045
  "license": "MIT",
3032
3046
  "dependencies": {
@@ -3315,7 +3329,7 @@
3315
3329
  }
3316
3330
  },
3317
3331
  "node_modules/marked": {
3318
- "version": "4.2.2",
3332
+ "version": "4.2.3",
3319
3333
  "extraneous": true,
3320
3334
  "license": "MIT",
3321
3335
  "bin": {
@@ -3568,7 +3582,7 @@
3568
3582
  }
3569
3583
  },
3570
3584
  "node_modules/node-simctl": {
3571
- "version": "7.1.4",
3585
+ "version": "7.1.6",
3572
3586
  "license": "Apache-2.0",
3573
3587
  "dependencies": {
3574
3588
  "@babel/runtime": "^7.0.0",
@@ -3580,7 +3594,7 @@
3580
3594
  "semver": "^7.0.0",
3581
3595
  "source-map-support": "^0.x",
3582
3596
  "teen_process": "^2.0.0",
3583
- "uuid": "^8.0.0",
3597
+ "uuid": "^9.0.0",
3584
3598
  "which": "^2.0.0"
3585
3599
  },
3586
3600
  "engines": {
@@ -3611,6 +3625,13 @@
3611
3625
  "node": ">=10"
3612
3626
  }
3613
3627
  },
3628
+ "node_modules/node-simctl/node_modules/uuid": {
3629
+ "version": "9.0.0",
3630
+ "license": "MIT",
3631
+ "bin": {
3632
+ "uuid": "dist/bin/uuid"
3633
+ }
3634
+ },
3614
3635
  "node_modules/normalize-package-data": {
3615
3636
  "version": "2.5.0",
3616
3637
  "extraneous": true,
@@ -4218,7 +4239,7 @@
4218
4239
  }
4219
4240
  },
4220
4241
  "node_modules/regenerator-runtime": {
4221
- "version": "0.13.10",
4242
+ "version": "0.13.11",
4222
4243
  "license": "MIT"
4223
4244
  },
4224
4245
  "node_modules/regexp.prototype.flags": {
@@ -4246,11 +4267,11 @@
4246
4267
  }
4247
4268
  },
4248
4269
  "node_modules/requizzle": {
4249
- "version": "0.2.3",
4270
+ "version": "0.2.4",
4250
4271
  "extraneous": true,
4251
4272
  "license": "MIT",
4252
4273
  "dependencies": {
4253
- "lodash": "^4.17.14"
4274
+ "lodash": "^4.17.21"
4254
4275
  }
4255
4276
  },
4256
4277
  "node_modules/resolve": {
@@ -4605,17 +4626,17 @@
4605
4626
  }
4606
4627
  },
4607
4628
  "node_modules/string.prototype.matchall": {
4608
- "version": "4.0.7",
4629
+ "version": "4.0.8",
4609
4630
  "extraneous": true,
4610
4631
  "license": "MIT",
4611
4632
  "dependencies": {
4612
4633
  "call-bind": "^1.0.2",
4613
- "define-properties": "^1.1.3",
4614
- "es-abstract": "^1.19.1",
4615
- "get-intrinsic": "^1.1.1",
4634
+ "define-properties": "^1.1.4",
4635
+ "es-abstract": "^1.20.4",
4636
+ "get-intrinsic": "^1.1.3",
4616
4637
  "has-symbols": "^1.0.3",
4617
4638
  "internal-slot": "^1.0.3",
4618
- "regexp.prototype.flags": "^1.4.1",
4639
+ "regexp.prototype.flags": "^1.4.3",
4619
4640
  "side-channel": "^1.0.4"
4620
4641
  },
4621
4642
  "funding": {
@@ -4623,26 +4644,26 @@
4623
4644
  }
4624
4645
  },
4625
4646
  "node_modules/string.prototype.trimend": {
4626
- "version": "1.0.5",
4647
+ "version": "1.0.6",
4627
4648
  "extraneous": true,
4628
4649
  "license": "MIT",
4629
4650
  "dependencies": {
4630
4651
  "call-bind": "^1.0.2",
4631
4652
  "define-properties": "^1.1.4",
4632
- "es-abstract": "^1.19.5"
4653
+ "es-abstract": "^1.20.4"
4633
4654
  },
4634
4655
  "funding": {
4635
4656
  "url": "https://github.com/sponsors/ljharb"
4636
4657
  }
4637
4658
  },
4638
4659
  "node_modules/string.prototype.trimstart": {
4639
- "version": "1.0.5",
4660
+ "version": "1.0.6",
4640
4661
  "extraneous": true,
4641
4662
  "license": "MIT",
4642
4663
  "dependencies": {
4643
4664
  "call-bind": "^1.0.2",
4644
4665
  "define-properties": "^1.1.4",
4645
- "es-abstract": "^1.19.5"
4666
+ "es-abstract": "^1.20.4"
4646
4667
  },
4647
4668
  "funding": {
4648
4669
  "url": "https://github.com/sponsors/ljharb"
@@ -4885,6 +4906,7 @@
4885
4906
  },
4886
4907
  "node_modules/uuid": {
4887
4908
  "version": "8.3.2",
4909
+ "extraneous": true,
4888
4910
  "license": "MIT",
4889
4911
  "bin": {
4890
4912
  "uuid": "dist/bin/uuid"
@@ -5219,6 +5241,19 @@
5219
5241
  "source-map-support": "0.5.21",
5220
5242
  "type-fest": "3.1.0",
5221
5243
  "validate.js": "0.13.1"
5244
+ },
5245
+ "dependencies": {
5246
+ "asyncbox": {
5247
+ "version": "2.9.2",
5248
+ "extraneous": true,
5249
+ "requires": {
5250
+ "@babel/runtime": "^7.0.0",
5251
+ "bluebird": "^3.5.1",
5252
+ "es6-mapify": "^1.1.0",
5253
+ "lodash": "^4.17.4",
5254
+ "source-map-support": "^0.5.5"
5255
+ }
5256
+ }
5222
5257
  }
5223
5258
  },
5224
5259
  "@appium/base-plugin": {
@@ -5386,13 +5421,13 @@
5386
5421
  }
5387
5422
  },
5388
5423
  "@babel/parser": {
5389
- "version": "7.20.2",
5424
+ "version": "7.20.5",
5390
5425
  "extraneous": true
5391
5426
  },
5392
5427
  "@babel/runtime": {
5393
- "version": "7.20.1",
5428
+ "version": "7.20.6",
5394
5429
  "requires": {
5395
- "regenerator-runtime": "^0.13.10"
5430
+ "regenerator-runtime": "^0.13.11"
5396
5431
  }
5397
5432
  },
5398
5433
  "@colors/colors": {
@@ -5781,8 +5816,7 @@
5781
5816
  }
5782
5817
  },
5783
5818
  "@types/bluebird": {
5784
- "version": "3.5.37",
5785
- "extraneous": true
5819
+ "version": "3.5.37"
5786
5820
  },
5787
5821
  "@types/body-parser": {
5788
5822
  "version": "1.19.2",
@@ -5793,13 +5827,13 @@
5793
5827
  }
5794
5828
  },
5795
5829
  "@types/cacheable-request": {
5796
- "version": "6.0.2",
5830
+ "version": "6.0.3",
5797
5831
  "extraneous": true,
5798
5832
  "requires": {
5799
5833
  "@types/http-cache-semantics": "*",
5800
- "@types/keyv": "*",
5834
+ "@types/keyv": "^3.1.4",
5801
5835
  "@types/node": "*",
5802
- "@types/responselike": "*"
5836
+ "@types/responselike": "^1.0.0"
5803
5837
  }
5804
5838
  },
5805
5839
  "@types/connect": {
@@ -5860,10 +5894,10 @@
5860
5894
  "extraneous": true
5861
5895
  },
5862
5896
  "@types/keyv": {
5863
- "version": "4.2.0",
5897
+ "version": "3.1.4",
5864
5898
  "extraneous": true,
5865
5899
  "requires": {
5866
- "keyv": "*"
5900
+ "@types/node": "*"
5867
5901
  }
5868
5902
  },
5869
5903
  "@types/klaw": {
@@ -6147,11 +6181,11 @@
6147
6181
  "extraneous": true
6148
6182
  },
6149
6183
  "asyncbox": {
6150
- "version": "2.9.2",
6184
+ "version": "2.9.4",
6151
6185
  "requires": {
6152
6186
  "@babel/runtime": "^7.0.0",
6187
+ "@types/bluebird": "^3.5.37",
6153
6188
  "bluebird": "^3.5.1",
6154
- "es6-mapify": "^1.1.0",
6155
6189
  "lodash": "^4.17.4",
6156
6190
  "source-map-support": "^0.5.5"
6157
6191
  }
@@ -6618,6 +6652,7 @@
6618
6652
  },
6619
6653
  "es6-mapify": {
6620
6654
  "version": "1.2.0",
6655
+ "extraneous": true,
6621
6656
  "requires": {
6622
6657
  "@babel/runtime": "^7.0.0"
6623
6658
  }
@@ -7241,7 +7276,7 @@
7241
7276
  "extraneous": true
7242
7277
  },
7243
7278
  "keyv": {
7244
- "version": "4.5.0",
7279
+ "version": "4.5.2",
7245
7280
  "extraneous": true,
7246
7281
  "requires": {
7247
7282
  "json-buffer": "3.0.1"
@@ -7450,7 +7485,7 @@
7450
7485
  "requires": {}
7451
7486
  },
7452
7487
  "marked": {
7453
- "version": "4.2.2",
7488
+ "version": "4.2.3",
7454
7489
  "extraneous": true
7455
7490
  },
7456
7491
  "mdurl": {
@@ -7616,7 +7651,7 @@
7616
7651
  "extraneous": true
7617
7652
  },
7618
7653
  "node-simctl": {
7619
- "version": "7.1.4",
7654
+ "version": "7.1.6",
7620
7655
  "requires": {
7621
7656
  "@babel/runtime": "^7.0.0",
7622
7657
  "asyncbox": "^2.3.1",
@@ -7627,7 +7662,7 @@
7627
7662
  "semver": "^7.0.0",
7628
7663
  "source-map-support": "^0.x",
7629
7664
  "teen_process": "^2.0.0",
7630
- "uuid": "^8.0.0",
7665
+ "uuid": "^9.0.0",
7631
7666
  "which": "^2.0.0"
7632
7667
  },
7633
7668
  "dependencies": {
@@ -7642,6 +7677,9 @@
7642
7677
  "requires": {
7643
7678
  "lru-cache": "^6.0.0"
7644
7679
  }
7680
+ },
7681
+ "uuid": {
7682
+ "version": "9.0.0"
7645
7683
  }
7646
7684
  }
7647
7685
  },
@@ -8037,7 +8075,7 @@
8037
8075
  }
8038
8076
  },
8039
8077
  "regenerator-runtime": {
8040
- "version": "0.13.10"
8078
+ "version": "0.13.11"
8041
8079
  },
8042
8080
  "regexp.prototype.flags": {
8043
8081
  "version": "1.4.3",
@@ -8053,10 +8091,10 @@
8053
8091
  "extraneous": true
8054
8092
  },
8055
8093
  "requizzle": {
8056
- "version": "0.2.3",
8094
+ "version": "0.2.4",
8057
8095
  "extraneous": true,
8058
8096
  "requires": {
8059
- "lodash": "^4.17.14"
8097
+ "lodash": "^4.17.21"
8060
8098
  }
8061
8099
  },
8062
8100
  "resolve": {
@@ -8305,35 +8343,35 @@
8305
8343
  }
8306
8344
  },
8307
8345
  "string.prototype.matchall": {
8308
- "version": "4.0.7",
8346
+ "version": "4.0.8",
8309
8347
  "extraneous": true,
8310
8348
  "requires": {
8311
8349
  "call-bind": "^1.0.2",
8312
- "define-properties": "^1.1.3",
8313
- "es-abstract": "^1.19.1",
8314
- "get-intrinsic": "^1.1.1",
8350
+ "define-properties": "^1.1.4",
8351
+ "es-abstract": "^1.20.4",
8352
+ "get-intrinsic": "^1.1.3",
8315
8353
  "has-symbols": "^1.0.3",
8316
8354
  "internal-slot": "^1.0.3",
8317
- "regexp.prototype.flags": "^1.4.1",
8355
+ "regexp.prototype.flags": "^1.4.3",
8318
8356
  "side-channel": "^1.0.4"
8319
8357
  }
8320
8358
  },
8321
8359
  "string.prototype.trimend": {
8322
- "version": "1.0.5",
8360
+ "version": "1.0.6",
8323
8361
  "extraneous": true,
8324
8362
  "requires": {
8325
8363
  "call-bind": "^1.0.2",
8326
8364
  "define-properties": "^1.1.4",
8327
- "es-abstract": "^1.19.5"
8365
+ "es-abstract": "^1.20.4"
8328
8366
  }
8329
8367
  },
8330
8368
  "string.prototype.trimstart": {
8331
- "version": "1.0.5",
8369
+ "version": "1.0.6",
8332
8370
  "extraneous": true,
8333
8371
  "requires": {
8334
8372
  "call-bind": "^1.0.2",
8335
8373
  "define-properties": "^1.1.4",
8336
- "es-abstract": "^1.19.5"
8374
+ "es-abstract": "^1.20.4"
8337
8375
  }
8338
8376
  },
8339
8377
  "strip-ansi": {
@@ -8489,7 +8527,8 @@
8489
8527
  "extraneous": true
8490
8528
  },
8491
8529
  "uuid": {
8492
- "version": "8.3.2"
8530
+ "version": "8.3.2",
8531
+ "extraneous": true
8493
8532
  },
8494
8533
  "validate-npm-package-license": {
8495
8534
  "version": "3.0.4",
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "appium",
6
6
  "safari"
7
7
  ],
8
- "version": "3.2.4",
8
+ "version": "3.2.5",
9
9
  "author": "Appium Contributors",
10
10
  "license": "Apache-2.0",
11
11
  "repository": {
@@ -94,7 +94,7 @@
94
94
  "pre-commit": "^1.1.3",
95
95
  "rimraf": "^3.0.2",
96
96
  "semantic-release": "^19.0.2",
97
- "sinon": "^14.0.0",
97
+ "sinon": "^15.0.0",
98
98
  "webdriverio": "^7.0.0"
99
99
  }
100
100
  }