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 +2 -0
- package/build/lib/commands/find.js +1 -2
- package/build/lib/commands/find.js.map +1 -1
- package/build/lib/commands/index.js +2 -3
- package/build/lib/commands/index.js.map +1 -1
- package/build/lib/commands/record-screen.js +1 -3
- package/build/lib/commands/record-screen.js.map +1 -1
- package/build/lib/driver.js +2 -3
- package/build/lib/driver.js.map +1 -1
- package/build/lib/safari.js +1 -2
- package/build/lib/safari.js.map +1 -1
- package/npm-shrinkwrap.json +102 -63
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -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/
|
|
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
|
|
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,
|
|
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
|
|
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"}
|
package/build/lib/driver.js
CHANGED
|
@@ -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,
|
|
65
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOT19QUk9YWSIsIlJlZ0V4cCIsIlNhZmFyaURyaXZlciIsIkJhc2VEcml2ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJsb2NhdG9yU3RyYXRlZ2llcyIsInJlc2V0U3RhdGUiLCJjbWQiLCJmbiIsIl8iLCJ0b1BhaXJzIiwiY29tbWFuZHMiLCJwcm90b3R5cGUiLCJzYWZhcmkiLCJwcm94eVJlcVJlcyIsImlzUHJveHlBY3RpdmUiLCJfc2NyZWVuUmVjb3JkZXIiLCJwcm94eUFjdGl2ZSIsImdldFByb3h5QXZvaWRMaXN0IiwiY2FuUHJveHkiLCJjcmVhdGVTZXNzaW9uIiwiYXJncyIsInNlc3Npb25JZCIsImNhcHMiLCJTYWZhcmlEcml2ZXJTZXJ2ZXIiLCJsb2ciLCJzdGFydCIsImZvcm1hdENhcHNGb3JTZXJ2ZXIiLCJlIiwiZGVsZXRlU2Vzc2lvbiIsInByb3h5IiwiYmluZCIsImluZm8iLCJzdG9wIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2RyaXZlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQmFzZURyaXZlciB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuaW1wb3J0IFNhZmFyaURyaXZlclNlcnZlciBmcm9tICcuL3NhZmFyaSc7XG5pbXBvcnQgeyBkZXNpcmVkQ2FwQ29uc3RyYWludHMgfSBmcm9tICcuL2Rlc2lyZWQtY2Fwcyc7XG5pbXBvcnQgY29tbWFuZHMgZnJvbSAnLi9jb21tYW5kcy9pbmRleCc7XG5pbXBvcnQgeyBmb3JtYXRDYXBzRm9yU2VydmVyIH0gZnJvbSAnLi91dGlscyc7XG5cbmNvbnN0IE5PX1BST1hZID0gW1xuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50L1teL10rL2VsZW1lbnRzPyQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50cz8kJyldLFxuXG4gIFsnREVMRVRFJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2Nvb2tpZSQnKV0sXG5dO1xuXG5jbGFzcyBTYWZhcmlEcml2ZXIgZXh0ZW5kcyBCYXNlRHJpdmVyIHtcbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICAgIHRoaXMuZGVzaXJlZENhcENvbnN0cmFpbnRzID0gZGVzaXJlZENhcENvbnN0cmFpbnRzO1xuICAgIHRoaXMubG9jYXRvclN0cmF0ZWdpZXMgPSBbXG4gICAgICAneHBhdGgnLFxuICAgICAgJ3RhZyBuYW1lJyxcbiAgICAgICdsaW5rIHRleHQnLFxuICAgICAgJ3BhcnRpYWwgbGluayB0ZXh0JyxcbiAgICAgICdjc3Mgc2VsZWN0b3InLFxuICAgICAgLy8gTGV0IHRoZXNlIHR3byByZWFjaCBTYWZhcmkgRHJpdmVyIGFuZCBmYWlsIHRoZXJlIHdpdGggYSBwcm9wZXIgZXJyb3IgbWVzc2FnZVxuICAgICAgJ2lkJyxcbiAgICAgICduYW1lJyxcbiAgICBdO1xuICAgIHRoaXMucmVzZXRTdGF0ZSgpO1xuXG4gICAgZm9yIChjb25zdCBbY21kLCBmbl0gb2YgXy50b1BhaXJzKGNvbW1hbmRzKSkge1xuICAgICAgU2FmYXJpRHJpdmVyLnByb3RvdHlwZVtjbWRdID0gZm47XG4gICAgfVxuICB9XG5cbiAgcmVzZXRTdGF0ZSAoKSB7XG4gICAgdGhpcy5zYWZhcmkgPSBudWxsO1xuICAgIHRoaXMucHJveHlSZXFSZXMgPSBudWxsO1xuICAgIHRoaXMuaXNQcm94eUFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuX3NjcmVlblJlY29yZGVyID0gbnVsbDtcbiAgfVxuXG4gIHByb3h5QWN0aXZlICgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1Byb3h5QWN0aXZlO1xuICB9XG5cbiAgZ2V0UHJveHlBdm9pZExpc3QgKCkge1xuICAgIHJldHVybiBOT19QUk9YWTtcbiAgfVxuXG4gIGNhblByb3h5ICgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVNlc3Npb24gKC4uLmFyZ3MpIHtcbiAgICBjb25zdCBbc2Vzc2lvbklkLCBjYXBzXSA9IGF3YWl0IHN1cGVyLmNyZWF0ZVNlc3Npb24oLi4uYXJncyk7XG4gICAgdGhpcy5zYWZhcmkgPSBuZXcgU2FmYXJpRHJpdmVyU2VydmVyKHRoaXMubG9nKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5zYWZhcmkuc3RhcnQoZm9ybWF0Q2Fwc0ZvclNlcnZlcihjYXBzKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKCk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy5zYWZhcmkucHJveHkucHJveHlSZXFSZXMuYmluZCh0aGlzLnNhZmFyaS5wcm94eSk7XG4gICAgdGhpcy5pc1Byb3h5QWN0aXZlID0gdHJ1ZTtcbiAgICByZXR1cm4gW3Nlc3Npb25JZCwgY2Fwc107XG4gIH1cblxuICBhc3luYyBkZWxldGVTZXNzaW9uICgpIHtcbiAgICB0aGlzLmxvZy5pbmZvKCdFbmRpbmcgU2FmYXJpIHNlc3Npb24nKTtcbiAgICBhd2FpdCB0aGlzLl9zY3JlZW5SZWNvcmRlcj8uc3RvcCh0cnVlKTtcbiAgICBhd2FpdCB0aGlzLnNhZmFyaT8uc3RvcCgpO1xuICAgIHRoaXMucmVzZXRTdGF0ZSgpO1xuXG4gICAgYXdhaXQgc3VwZXIuZGVsZXRlU2Vzc2lvbigpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNhZmFyaURyaXZlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFNQSxRQUFRLEdBQUcsQ0FDZixDQUFDLEtB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
|
package/build/lib/driver.js.map
CHANGED
|
@@ -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
|
|
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"}
|
package/build/lib/safari.js
CHANGED
|
@@ -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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
|
package/build/lib/safari.js.map
CHANGED
|
@@ -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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"}
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "appium-safari-driver",
|
|
3
|
-
"version": "3.2.
|
|
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.
|
|
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": "^
|
|
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.
|
|
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.
|
|
338
|
+
"version": "7.20.6",
|
|
324
339
|
"license": "MIT",
|
|
325
340
|
"dependencies": {
|
|
326
|
-
"regenerator-runtime": "^0.13.
|
|
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.
|
|
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": "
|
|
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
|
-
"
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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": "^
|
|
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.
|
|
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.
|
|
4270
|
+
"version": "0.2.4",
|
|
4250
4271
|
"extraneous": true,
|
|
4251
4272
|
"license": "MIT",
|
|
4252
4273
|
"dependencies": {
|
|
4253
|
-
"lodash": "^4.17.
|
|
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.
|
|
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.
|
|
4614
|
-
"es-abstract": "^1.
|
|
4615
|
-
"get-intrinsic": "^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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
5424
|
+
"version": "7.20.5",
|
|
5390
5425
|
"extraneous": true
|
|
5391
5426
|
},
|
|
5392
5427
|
"@babel/runtime": {
|
|
5393
|
-
"version": "7.20.
|
|
5428
|
+
"version": "7.20.6",
|
|
5394
5429
|
"requires": {
|
|
5395
|
-
"regenerator-runtime": "^0.13.
|
|
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.
|
|
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": "
|
|
5897
|
+
"version": "3.1.4",
|
|
5864
5898
|
"extraneous": true,
|
|
5865
5899
|
"requires": {
|
|
5866
|
-
"
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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": "^
|
|
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.
|
|
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.
|
|
8094
|
+
"version": "0.2.4",
|
|
8057
8095
|
"extraneous": true,
|
|
8058
8096
|
"requires": {
|
|
8059
|
-
"lodash": "^4.17.
|
|
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.
|
|
8346
|
+
"version": "4.0.8",
|
|
8309
8347
|
"extraneous": true,
|
|
8310
8348
|
"requires": {
|
|
8311
8349
|
"call-bind": "^1.0.2",
|
|
8312
|
-
"define-properties": "^1.1.
|
|
8313
|
-
"es-abstract": "^1.
|
|
8314
|
-
"get-intrinsic": "^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.
|
|
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.
|
|
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.
|
|
8365
|
+
"es-abstract": "^1.20.4"
|
|
8328
8366
|
}
|
|
8329
8367
|
},
|
|
8330
8368
|
"string.prototype.trimstart": {
|
|
8331
|
-
"version": "1.0.
|
|
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.
|
|
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.
|
|
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": "^
|
|
97
|
+
"sinon": "^15.0.0",
|
|
98
98
|
"webdriverio": "^7.0.0"
|
|
99
99
|
}
|
|
100
100
|
}
|