appium-mac2-driver 1.6.0 → 1.6.1
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 +7 -0
- package/build/lib/wda-mac.js +7 -7
- package/build/lib/wda-mac.js.map +1 -1
- package/lib/wda-mac.js +6 -6
- package/npm-shrinkwrap.json +24 -24
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
## [1.6.1](https://github.com/appium/appium-mac2-driver/compare/v1.6.0...v1.6.1) (2023-06-05)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* Use module log instance ([8571666](https://github.com/appium/appium-mac2-driver/commit/8571666e217253209998dae7e552e63114769fd2))
|
|
7
|
+
|
|
1
8
|
## [1.6.0](https://github.com/appium/appium-mac2-driver/compare/v1.5.3...v1.6.0) (2023-06-02)
|
|
2
9
|
|
|
3
10
|
|
package/build/lib/wda-mac.js
CHANGED
|
@@ -86,15 +86,15 @@ class WDAMacProcess {
|
|
|
86
86
|
try {
|
|
87
87
|
boxItem = await box.createItemWithContents(RECENT_MODULE_VERSION_ITEM_NAME, '1.5.4');
|
|
88
88
|
} catch (e) {
|
|
89
|
-
|
|
89
|
+
log.warn(`The actual module version cannot be persisted: ${e.message}`);
|
|
90
90
|
return;
|
|
91
91
|
}
|
|
92
92
|
} else {
|
|
93
|
-
|
|
93
|
+
log.info('There is no need to perform the project cleanup. A fresh install has been detected');
|
|
94
94
|
try {
|
|
95
95
|
await box.createItemWithContents(RECENT_MODULE_VERSION_ITEM_NAME, packageInfo.version);
|
|
96
96
|
} catch (e) {
|
|
97
|
-
|
|
97
|
+
log.warn(`The actual module version cannot be persisted: ${e.message}`);
|
|
98
98
|
}
|
|
99
99
|
return;
|
|
100
100
|
}
|
|
@@ -103,13 +103,13 @@ class WDAMacProcess {
|
|
|
103
103
|
try {
|
|
104
104
|
recentModuleVersion = _support.util.coerceVersion(recentModuleVersion, true);
|
|
105
105
|
} catch (e) {
|
|
106
|
-
|
|
107
|
-
|
|
106
|
+
log.warn(`The persisted module version string has been damaged: ${e.message}`);
|
|
107
|
+
log.info(`Updating it to '${packageInfo.version}' assuming the project clenup is not needed`);
|
|
108
108
|
await boxItem.write(packageInfo.version);
|
|
109
109
|
return;
|
|
110
110
|
}
|
|
111
111
|
if (_support.util.compareVersions(recentModuleVersion, '>=', packageInfo.version)) {
|
|
112
|
-
|
|
112
|
+
log.info(`WebDriverAgent does not need a cleanup. The project sources are up to date ` + `(${recentModuleVersion} >= ${packageInfo.version})`);
|
|
113
113
|
return;
|
|
114
114
|
}
|
|
115
115
|
try {
|
|
@@ -384,4 +384,4 @@ class WDAMacServer {
|
|
|
384
384
|
const WDA_MAC_SERVER = new WDAMacServer();
|
|
385
385
|
var _default = WDA_MAC_SERVER;
|
|
386
386
|
exports.default = _default;
|
|
387
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfcGF0aCIsIl91cmwiLCJfYXhpb3MiLCJfYmx1ZWJpcmQiLCJfZHJpdmVyIiwiX3N1cHBvcnQiLCJfc3Ryb25nYm94IiwiX3RlZW5fcHJvY2VzcyIsIl9hc3luY2JveCIsIl9wb3J0c2Nhbm5lciIsIl9jaGlsZF9wcm9jZXNzIiwiX3V0aWxzIiwibG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwiREVGQVVMVF9XREFfUk9PVCIsInBhdGgiLCJyZXNvbHZlIiwiZ2V0TW9kdWxlUm9vdCIsIldEQV9QUk9KRUNUX05BTUUiLCJXREFfUFJPSkVDVCIsIndkYVJvb3QiLCJSVU5ORVJfU0NIRU1FIiwiRElTQUJMRV9TVE9SRV9BUkciLCJYQ09ERUJVSUxEIiwiU1RBUlRVUF9USU1FT1VUX01TIiwiREVGQVVMVF9TWVNURU1fUE9SVCIsIkRFRkFVTFRfU1lTVEVNX0hPU1QiLCJERUZBVUxUX1NIT1dfU0VSVkVSX0xPR1MiLCJSVU5OSU5HX1BST0NFU1NfSURTIiwiUkVDRU5UX1VQR1JBREVfVElNRVNUQU1QX1BBVEgiLCJqb2luIiwiUkVDRU5UX01PRFVMRV9WRVJTSU9OX0lURU1fTkFNRSIsImNsZWFudXBPYnNvbGV0ZVByb2Nlc3NlcyIsIl8iLCJpc0VtcHR5IiwiZGVidWciLCJsZW5ndGgiLCJ1dGlsIiwicGx1cmFsaXplIiwiZXhlYyIsImlnbiIsInB1bGxBbGwiLCJwcm9jZXNzIiwib25jZSIsImV4ZWNTeW5jIiwiV0RBTWFjUHJveHkiLCJKV1Byb3h5IiwicHJveHlDb21tYW5kIiwidXJsIiwibWV0aG9kIiwiYm9keSIsImRpZFByb2Nlc3NFeGl0IiwiZXJyb3JzIiwiSW52YWxpZENvbnRleHRFcnJvciIsIldEQU1hY1Byb2Nlc3MiLCJjb25zdHJ1Y3RvciIsInNob3dTZXJ2ZXJMb2dzIiwicG9ydCIsImhvc3QiLCJib290c3RyYXBSb290IiwicHJvYyIsImlzUnVubmluZyIsIl90aGlzJHByb2MiLCJwaWQiLCJsaXN0Q2hpbGRyZW5QaWRzIiwibGlzdENoaWxkcmVuUHJvY2Vzc0lkcyIsImNsZWFudXBQcm9qZWN0SWZGcmVzaCIsInBhY2thZ2VJbmZvIiwiSlNPTiIsInBhcnNlIiwiZnMiLCJyZWFkRmlsZSIsImJveCIsInN0cm9uZ2JveCIsIm5hbWUiLCJib3hJdGVtIiwiZ2V0SXRlbSIsInRpbWVzdGFtcFBhdGgiLCJlbnYiLCJIT01FIiwiZXhpc3RzIiwiY3JlYXRlSXRlbVdpdGhDb250ZW50cyIsImUiLCJ3YXJuIiwibWVzc2FnZSIsImluZm8iLCJ2ZXJzaW9uIiwicmVjZW50TW9kdWxlVmVyc2lvbiIsInJlYWQiLCJjb2VyY2VWZXJzaW9uIiwid3JpdGUiLCJjb21wYXJlVmVyc2lvbnMiLCJhcmdzIiwiY3dkIiwic3RkZXJyIiwiaGFzU2FtZU9wdHMiLCJzeXN0ZW1Qb3J0Iiwic3lzdGVtSG9zdCIsImlzQm9vbGVhbiIsImlzTmlsIiwiaW5pdCIsIm9wdHMiLCJFcnJvciIsImtpbGwiLCJ4Y29kZWJ1aWxkIiwid2hpY2giLCJpc1BvcnRCdXN5IiwiY2hlY2tQb3J0U3RhdHVzIiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsInN0YXJ0IiwiYXhpb3MiLCJkZWxldGUiLCJ0aW1lb3V0IiwiQiIsImRlbGF5Iiwid2FpdEZvckNvbmRpdGlvbiIsIndhaXRNcyIsImludGVydmFsTXMiLCJNYXRoIiwicm91bmQiLCJnZXREdXJhdGlvbiIsImFzTWlsbGlTZWNvbmRzIiwiT2JqZWN0IiwiYXNzaWduIiwiVVNFX1BPUlQiLCJVU0VfSE9TVCIsIlN1YlByb2Nlc3MiLCJvbiIsInN0ZG91dCIsImxpbmUiLCJ0cmltIiwiY29kZSIsInNpZ25hbCIsInF1b3RlIiwic3RvcCIsImNoaWxkcmVuUGlkcyIsIldEQU1hY1NlcnZlciIsInNlcnZlclN0YXJ0dXBUaW1lb3V0TXMiLCJwcm94eSIsImlzUHJveHlpbmdUb1JlbW90ZVNlcnZlciIsImlzUHJveHlSZWFkeSIsInRocm93T25FeGl0IiwiY29tbWFuZCIsImVyciIsInBhcnNlUHJveHlQcm9wZXJ0aWVzIiwiY2FwcyIsInNjaGVtZSIsIndlYkRyaXZlckFnZW50TWFjVXJsIiwiX3RoaXMkcHJvY2VzcyIsIl90aGlzJHByb2Nlc3MyIiwic2VydmVyIiwicGFyc2VkVXJsIiwiVVJMIiwicHJvdG9jb2wiLCJob3N0bmFtZSIsInBhdGhuYW1lIiwiaXNTdHJpbmciLCJzcGxpdCIsInBhcnNlSW50Iiwic3RhcnRTZXNzaW9uIiwic2VydmVyU3RhcnR1cFRpbWVvdXQiLCJ3YXNQcm9jZXNzSW5pdE5lY2Vzc2FyeSIsImJhc2UiLCJrZWVwQWxpdmUiLCJfdGhpcyRwcm9jZXNzMyIsInRlc3QiLCJtc2ciLCJwdXNoIiwicHVsbCIsInRvRml4ZWQiLCJjYXBhYmlsaXRpZXMiLCJmaXJzdE1hdGNoIiwiYWx3YXlzTWF0Y2giLCJzdG9wU2Vzc2lvbiIsIl90aGlzJHByb2Nlc3M0IiwiX3RoaXMkcHJveHkiLCJzZXNzaW9uSWQiLCJXREFfTUFDX1NFUlZFUiIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi9saWIvd2RhLW1hYy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgdXJsIGZyb20gJ3VybCc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgSldQcm94eSwgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgeyBmcywgbG9nZ2VyLCB1dGlsLCB0aW1pbmcgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBzdHJvbmdib3ggfSBmcm9tICdAYXBwaXVtL3N0cm9uZ2JveCc7XG5pbXBvcnQgeyBTdWJQcm9jZXNzLCBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCB7IHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBjaGVja1BvcnRTdGF0dXMgfSBmcm9tICdwb3J0c2Nhbm5lcic7XG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgbGlzdENoaWxkcmVuUHJvY2Vzc0lkcywgZ2V0TW9kdWxlUm9vdCB9IGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBsb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdXZWJEcml2ZXJBZ2VudE1hYycpO1xuXG5jb25zdCBERUZBVUxUX1dEQV9ST09UID0gcGF0aC5yZXNvbHZlKGdldE1vZHVsZVJvb3QoKSwgJ1dlYkRyaXZlckFnZW50TWFjJyk7XG5jb25zdCBXREFfUFJPSkVDVF9OQU1FID0gJ1dlYkRyaXZlckFnZW50TWFjLnhjb2RlcHJvaic7XG5jb25zdCBXREFfUFJPSkVDVCA9ICh3ZGFSb290ID0gREVGQVVMVF9XREFfUk9PVCkgPT4gcGF0aC5yZXNvbHZlKHdkYVJvb3QsIFdEQV9QUk9KRUNUX05BTUUpO1xuY29uc3QgUlVOTkVSX1NDSEVNRSA9ICdXZWJEcml2ZXJBZ2VudFJ1bm5lcic7XG5jb25zdCBESVNBQkxFX1NUT1JFX0FSRyA9ICdDT01QSUxFUl9JTkRFWF9TVE9SRV9FTkFCTEU9Tk8nO1xuY29uc3QgWENPREVCVUlMRCA9ICd4Y29kZWJ1aWxkJztcbmNvbnN0IFNUQVJUVVBfVElNRU9VVF9NUyA9IDEyMDAwMDtcbmNvbnN0IERFRkFVTFRfU1lTVEVNX1BPUlQgPSAxMDEwMDtcbmNvbnN0IERFRkFVTFRfU1lTVEVNX0hPU1QgPSAnMTI3LjAuMC4xJztcbmNvbnN0IERFRkFVTFRfU0hPV19TRVJWRVJfTE9HUyA9IGZhbHNlO1xuY29uc3QgUlVOTklOR19QUk9DRVNTX0lEUyA9IFtdO1xuY29uc3QgUkVDRU5UX1VQR1JBREVfVElNRVNUQU1QX1BBVEggPSBwYXRoLmpvaW4oJy5hcHBpdW0nLCAnd2ViZHJpdmVyYWdlbnRfbWFjJywgJ3VwZ3JhZGUudGltZScpO1xuY29uc3QgUkVDRU5UX01PRFVMRV9WRVJTSU9OX0lURU1fTkFNRSA9ICdyZWNlbnRXZGFNb2R1bGVWZXJzaW9uJztcblxuXG5hc3luYyBmdW5jdGlvbiBjbGVhbnVwT2Jzb2xldGVQcm9jZXNzZXMgKCkge1xuICBpZiAoIV8uaXNFbXB0eShSVU5OSU5HX1BST0NFU1NfSURTKSkge1xuICAgIGxvZy5kZWJ1ZyhgQ2xlYW5pbmcgdXAgJHtSVU5OSU5HX1BST0NFU1NfSURTLmxlbmd0aH0gb2Jzb2xldGUgYCArXG4gICAgICB1dGlsLnBsdXJhbGl6ZSgncHJvY2VzcycsIFJVTk5JTkdfUFJPQ0VTU19JRFMubGVuZ3RoLCBmYWxzZSkpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBleGVjKCdraWxsJywgWyctOScsIC4uLlJVTk5JTkdfUFJPQ0VTU19JRFNdKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgXy5wdWxsQWxsKFJVTk5JTkdfUFJPQ0VTU19JRFMsIFJVTk5JTkdfUFJPQ0VTU19JRFMpO1xuICB9XG59XG5cbnByb2Nlc3Mub25jZSgnZXhpdCcsICgpID0+IHtcbiAgaWYgKCFfLmlzRW1wdHkoUlVOTklOR19QUk9DRVNTX0lEUykpIHtcbiAgICB0cnkge1xuICAgICAgZXhlY1N5bmMoYGtpbGwgLTkgJHtSVU5OSU5HX1BST0NFU1NfSURTLmpvaW4oJyAnKX1gKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgXy5wdWxsQWxsKFJVTk5JTkdfUFJPQ0VTU19JRFMsIFJVTk5JTkdfUFJPQ0VTU19JRFMpO1xuICB9XG59KTtcblxuXG5jbGFzcyBXREFNYWNQcm94eSBleHRlbmRzIEpXUHJveHkge1xuICBhc3luYyBwcm94eUNvbW1hbmQgKHVybCwgbWV0aG9kLCBib2R5ID0gbnVsbCkge1xuICAgIGlmICh0aGlzLmRpZFByb2Nlc3NFeGl0KSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRDb250ZXh0RXJyb3IoXG4gICAgICAgIGAnJHttZXRob2R9ICR7dXJsfScgY2Fubm90IGJlIHByb3hpZWQgdG8gTWFjMiBEcml2ZXIgc2VydmVyIGJlY2F1c2UgYCArXG4gICAgICAgICdpdHMgcHJvY2VzcyBpcyBub3QgcnVubmluZyAocHJvYmFibHkgY3Jhc2hlZCkuIENoZWNrIHRoZSBBcHBpdW0gbG9nIGZvciBtb3JlIGRldGFpbHMnKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLnByb3h5Q29tbWFuZCh1cmwsIG1ldGhvZCwgYm9keSk7XG4gIH1cbn1cblxuY2xhc3MgV0RBTWFjUHJvY2VzcyB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLnNob3dTZXJ2ZXJMb2dzID0gREVGQVVMVF9TSE9XX1NFUlZFUl9MT0dTO1xuICAgIHRoaXMucG9ydCA9IERFRkFVTFRfU1lTVEVNX1BPUlQ7XG4gICAgdGhpcy5ob3N0ID0gREVGQVVMVF9TWVNURU1fSE9TVDtcbiAgICB0aGlzLmJvb3RzdHJhcFJvb3QgPSBERUZBVUxUX1dEQV9ST09UO1xuICAgIHRoaXMucHJvYyA9IG51bGw7XG4gIH1cblxuICBnZXQgaXNSdW5uaW5nICgpIHtcbiAgICByZXR1cm4gISEodGhpcy5wcm9jPy5pc1J1bm5pbmcpO1xuICB9XG5cbiAgZ2V0IHBpZCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNSdW5uaW5nID8gdGhpcy5wcm9jLnBpZCA6IG51bGw7XG4gIH1cblxuICBhc3luYyBsaXN0Q2hpbGRyZW5QaWRzICgpIHtcbiAgICByZXR1cm4gdGhpcy5waWQgPyAoYXdhaXQgbGlzdENoaWxkcmVuUHJvY2Vzc0lkcyh0aGlzLnBpZCkpIDogW107XG4gIH1cblxuICBhc3luYyBjbGVhbnVwUHJvamVjdElmRnJlc2ggKCkge1xuICAgIGNvbnN0IHBhY2thZ2VJbmZvID0gSlNPTi5wYXJzZShhd2FpdCBmcy5yZWFkRmlsZShwYXRoLmpvaW4oZ2V0TW9kdWxlUm9vdCgpLCAncGFja2FnZS5qc29uJyksICd1dGY4JykpO1xuICAgIGNvbnN0IGJveCA9IHN0cm9uZ2JveChwYWNrYWdlSW5mby5uYW1lKTtcbiAgICBsZXQgYm94SXRlbSA9IGJveC5nZXRJdGVtKFJFQ0VOVF9NT0RVTEVfVkVSU0lPTl9JVEVNX05BTUUpO1xuICAgIGlmICghYm94SXRlbSkge1xuICAgICAgY29uc3QgdGltZXN0YW1wUGF0aCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmVudi5IT01FLCBSRUNFTlRfVVBHUkFERV9USU1FU1RBTVBfUEFUSCk7XG4gICAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKHRpbWVzdGFtcFBhdGgpKSB7XG4gICAgICAgIC8vIFRPRE86IEl0IGlzIHByb2JhYmx5IGEgYml0IHVnbHkgdG8gaGFyZGNvZGUgdGhlIHJlY2VudCB2ZXJzaW9uIHN0cmluZyxcbiAgICAgICAgLy8gVE9ETzogaG92ZXdlciBpdCBzaG91bGQgZG8gdGhlIGpvYiBhcyBhIHRlbXBvcmFyeSB0cmFuc2l0aW9uIHRyaWNrXG4gICAgICAgIC8vIFRPRE86IHRvIHN3aXRjaCBmcm9tIGEgaGFyZGNvZGVkIGZpbGUgcGF0aCB0byB0aGUgc3Ryb25nYm94IHVzYWdlLlxuICAgICAgICB0cnkge1xuICAgICAgICAgIGJveEl0ZW0gPSBhd2FpdCBib3guY3JlYXRlSXRlbVdpdGhDb250ZW50cyhSRUNFTlRfTU9EVUxFX1ZFUlNJT05fSVRFTV9OQU1FLCAnMS41LjQnKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRoaXMubG9nLndhcm4oYFRoZSBhY3R1YWwgbW9kdWxlIHZlcnNpb24gY2Fubm90IGJlIHBlcnNpc3RlZDogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKCdUaGVyZSBpcyBubyBuZWVkIHRvIHBlcmZvcm0gdGhlIHByb2plY3QgY2xlYW51cC4gQSBmcmVzaCBpbnN0YWxsIGhhcyBiZWVuIGRldGVjdGVkJyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgYm94LmNyZWF0ZUl0ZW1XaXRoQ29udGVudHMoUkVDRU5UX01PRFVMRV9WRVJTSU9OX0lURU1fTkFNRSwgcGFja2FnZUluZm8udmVyc2lvbik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB0aGlzLmxvZy53YXJuKGBUaGUgYWN0dWFsIG1vZHVsZSB2ZXJzaW9uIGNhbm5vdCBiZSBwZXJzaXN0ZWQ6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcmVjZW50TW9kdWxlVmVyc2lvbiA9IGF3YWl0IGJveEl0ZW0ucmVhZCgpO1xuICAgIHRyeSB7XG4gICAgICByZWNlbnRNb2R1bGVWZXJzaW9uID0gdXRpbC5jb2VyY2VWZXJzaW9uKHJlY2VudE1vZHVsZVZlcnNpb24sIHRydWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oYFRoZSBwZXJzaXN0ZWQgbW9kdWxlIHZlcnNpb24gc3RyaW5nIGhhcyBiZWVuIGRhbWFnZWQ6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgdGhpcy5sb2cuaW5mbyhgVXBkYXRpbmcgaXQgdG8gJyR7cGFja2FnZUluZm8udmVyc2lvbn0nIGFzc3VtaW5nIHRoZSBwcm9qZWN0IGNsZW51cCBpcyBub3QgbmVlZGVkYCk7XG4gICAgICBhd2FpdCBib3hJdGVtLndyaXRlKHBhY2thZ2VJbmZvLnZlcnNpb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh1dGlsLmNvbXBhcmVWZXJzaW9ucyhyZWNlbnRNb2R1bGVWZXJzaW9uLCAnPj0nLCBwYWNrYWdlSW5mby52ZXJzaW9uKSkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhcbiAgICAgICAgYFdlYkRyaXZlckFnZW50IGRvZXMgbm90IG5lZWQgYSBjbGVhbnVwLiBUaGUgcHJvamVjdCBzb3VyY2VzIGFyZSB1cCB0byBkYXRlIGAgK1xuICAgICAgICBgKCR7cmVjZW50TW9kdWxlVmVyc2lvbn0gPj0gJHtwYWNrYWdlSW5mby52ZXJzaW9ufSlgXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBsb2cuaW5mbygnUGVyZm9ybWluZyBwcm9qZWN0IGNsZWFudXAnKTtcbiAgICAgIGNvbnN0IGFyZ3MgPSBbXG4gICAgICAgICdjbGVhbicsXG4gICAgICAgICctcHJvamVjdCcsIFdEQV9QUk9KRUNUKHRoaXMuYm9vdHN0cmFwUm9vdCksXG4gICAgICAgICctc2NoZW1lJywgUlVOTkVSX1NDSEVNRSxcbiAgICAgIF07XG4gICAgICBhd2FpdCBleGVjKFhDT0RFQlVJTEQsIGFyZ3MsIHtjd2Q6IHRoaXMuYm9vdHN0cmFwUm9vdH0pO1xuICAgICAgYXdhaXQgYm94SXRlbS53cml0ZShwYWNrYWdlSW5mby52ZXJzaW9uKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cud2FybihgQ2Fubm90IHBlcmZvcm0gcHJvamVjdCBjbGVhbnVwLiBPcmlnaW5hbCBlcnJvcjogJHtlLnN0ZGVyciB8fCBlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgaGFzU2FtZU9wdHMgKHsgc2hvd1NlcnZlckxvZ3MsIHN5c3RlbVBvcnQsIHN5c3RlbUhvc3QsIGJvb3RzdHJhcFJvb3QgfSkge1xuICAgIGlmIChfLmlzQm9vbGVhbihzaG93U2VydmVyTG9ncykgJiYgdGhpcy5zaG93U2VydmVyTG9ncyAhPT0gc2hvd1NlcnZlckxvZ3NcbiAgICAgIHx8IF8uaXNOaWwoc2hvd1NlcnZlckxvZ3MpICYmIHRoaXMuc2hvd1NlcnZlckxvZ3MgIT09IERFRkFVTFRfU0hPV19TRVJWRVJfTE9HUykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoc3lzdGVtUG9ydCAmJiB0aGlzLnBvcnQgIT09IHN5c3RlbVBvcnRcbiAgICAgIHx8ICFzeXN0ZW1Qb3J0ICYmIHRoaXMucG9ydCAhPT0gREVGQVVMVF9TWVNURU1fUE9SVCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoc3lzdGVtSG9zdCAmJiB0aGlzLmhvc3QgIT09IHN5c3RlbUhvc3RcbiAgICAgIHx8ICFzeXN0ZW1Ib3N0ICYmIHRoaXMuaG9zdCAhPT0gREVGQVVMVF9TWVNURU1fSE9TVCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoYm9vdHN0cmFwUm9vdCAmJiB0aGlzLmJvb3RzdHJhcFJvb3QgIT09IGJvb3RzdHJhcFJvb3RcbiAgICAgIHx8ICFib290c3RyYXBSb290ICYmIHRoaXMuYm9vdHN0cmFwUm9vdCAhPT0gREVGQVVMVF9XREFfUk9PVCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgaW5pdCAob3B0cyA9IHt9KSB7XG4gICAgaWYgKHRoaXMuaXNSdW5uaW5nICYmIHRoaXMuaGFzU2FtZU9wdHMob3B0cykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLnNob3dTZXJ2ZXJMb2dzID0gb3B0cy5zaG93U2VydmVyTG9ncyA/PyB0aGlzLnNob3dTZXJ2ZXJMb2dzO1xuICAgIHRoaXMucG9ydCA9IG9wdHMuc3lzdGVtUG9ydCA/PyB0aGlzLnBvcnQ7XG4gICAgdGhpcy5ob3N0ID0gb3B0cy5zeXN0ZW1Ib3N0ID8/IHRoaXMuaG9zdDtcbiAgICB0aGlzLmJvb3RzdHJhcFJvb3QgPSBvcHRzLmJvb3RzdHJhcFJvb3QgPz8gdGhpcy5ib290c3RyYXBSb290O1xuXG4gICAgbG9nLmRlYnVnKGBVc2luZyBib290c3RyYXAgcm9vdDogJHt0aGlzLmJvb3RzdHJhcFJvb3R9YCk7XG4gICAgaWYgKCFhd2FpdCBmcy5leGlzdHMoV0RBX1BST0pFQ1QodGhpcy5ib290c3RyYXBSb290KSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtXREFfUFJPSkVDVF9OQU1FfSBkb2VzIG5vdCBleGlzdCBhdCAnJHtXREFfUFJPSkVDVCh0aGlzLmJvb3RzdHJhcFJvb3QpfScuIGAgK1xuICAgICAgICBgV2FzICdib290c3RyYXBSb290JyBzZXQgdG8gYSBwcm9wZXIgdmFsdWU/YCk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5raWxsKCk7XG4gICAgYXdhaXQgY2xlYW51cE9ic29sZXRlUHJvY2Vzc2VzKCk7XG5cbiAgICBsZXQgeGNvZGVidWlsZDtcbiAgICB0cnkge1xuICAgICAgeGNvZGVidWlsZCA9IGF3YWl0IGZzLndoaWNoKFhDT0RFQlVJTEQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtYQ09ERUJVSUxEfSBiaW5hcnkgY2Fubm90IGJlIGZvdW5kIGluIFBBVEguIGAgK1xuICAgICAgICBgUGxlYXNlIG1ha2Ugc3VyZSB0aGF0IFhjb2RlIGlzIGluc3RhbGxlZCBvbiB5b3VyIHN5c3RlbWApO1xuICAgIH1cbiAgICBsb2cuZGVidWcoYFVzaW5nICR7WENPREVCVUlMRH0gYmluYXJ5IGF0ICcke3hjb2RlYnVpbGR9J2ApO1xuXG4gICAgYXdhaXQgdGhpcy5jbGVhbnVwUHJvamVjdElmRnJlc2goKTtcblxuICAgIGxvZy5kZWJ1ZyhgVXNpbmcgJHt0aGlzLmhvc3R9IGFzIHNlcnZlciBob3N0YCk7XG4gICAgbG9nLmRlYnVnKGBVc2luZyBwb3J0ICR7dGhpcy5wb3J0fWApO1xuICAgIGNvbnN0IGlzUG9ydEJ1c3kgPSBhc3luYyAoKSA9PiAoYXdhaXQgY2hlY2tQb3J0U3RhdHVzKHRoaXMucG9ydCwgdGhpcy5ob3N0KSkgPT09ICdvcGVuJztcbiAgICBpZiAoYXdhaXQgaXNQb3J0QnVzeSgpKSB7XG4gICAgICBsb2cud2FybihgVGhlIHBvcnQgIyR7dGhpcy5wb3J0fSBhdCAke3RoaXMuaG9zdH0gaXMgYnVzeS4gYCArXG4gICAgICAgIGBBc3N1bWluZyBpdCBpcyBhbiBvYnNvbGV0ZSBXREEgc2VydmVyIGluc3RhbmNlIGFuZCBgICtcbiAgICAgICAgYHRyeWluZyB0byB0ZXJtaW5hdGUgaXQgaW4gb3JkZXIgdG8gc3RhcnQgYSBuZXcgb25lYCk7XG4gICAgICBjb25zdCB0aW1lciA9IG5ldyB0aW1pbmcuVGltZXIoKS5zdGFydCgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgYXhpb3MuZGVsZXRlKGBodHRwOi8vJHt0aGlzLmhvc3R9OiR7dGhpcy5wb3J0fS9gLCB7XG4gICAgICAgICAgdGltZW91dDogNTAwMCxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEdpdmUgdGhlIHNlcnZlciBzb21lIHRpbWUgdG8gZmluaXNoIGFuZCBzdG9wIGxpc3RlbmluZ1xuICAgICAgICBhd2FpdCBCLmRlbGF5KDUwMCk7XG4gICAgICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4gIShhd2FpdCBpc1BvcnRCdXN5KCkpLCB7XG4gICAgICAgICAgd2FpdE1zOiAzMDAwLFxuICAgICAgICAgIGludGVydmFsTXM6IDEwMCxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZy53YXJuKGBEaWQgbm90IGtub3cgaG93IHRvIHRlcm1pbmF0ZSB0aGUgcHJvY2VzcyBhdCAke3RoaXMuaG9zdH06JHt0aGlzLnBvcnR9OiAke2UubWVzc2FnZX0uIGAgK1xuICAgICAgICAgIGBQZXJoYXBzLCBpdCBpcyBub3QgYSBXREEgc2VydmVyLCB3aGljaCBpcyBob2dnaW5nIHRoZSBwb3J0P2ApO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBwb3J0ICMke3RoaXMucG9ydH0gYXQgJHt0aGlzLmhvc3R9IGlzIGJ1c3kuIGAgK1xuICAgICAgICAgIGBDb25zaWRlciBzZXR0aW5nICdzeXN0ZW1Qb3J0JyBjYXBhYmlsaXR5IHRvIGFub3RoZXIgZnJlZSBwb3J0IG51bWJlciBhbmQvb3IgYCArXG4gICAgICAgICAgYG1ha2Ugc3VyZSBwcmV2aW91cyBkcml2ZXIgc2Vzc2lvbnMgaGF2ZSBiZWVuIGNsb3NlZCBwcm9wZXJseS5gKTtcbiAgICAgIH1cbiAgICAgIGxvZy5pbmZvKGBUaGUgcHJldmlvdXNseSBydW5uaW5nIFdEQSBzZXJ2ZXIgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHRlcm1pbmF0ZWQgYWZ0ZXIgYCArXG4gICAgICAgIGAke01hdGgucm91bmQodGltZXIuZ2V0RHVyYXRpb24oKS5hc01pbGxpU2Vjb25kcyl9bXNgKTtcbiAgICB9XG5cbiAgICBjb25zdCBhcmdzID0gW1xuICAgICAgJ2J1aWxkLWZvci10ZXN0aW5nJywgJ3Rlc3Qtd2l0aG91dC1idWlsZGluZycsXG4gICAgICAnLXByb2plY3QnLCBXREFfUFJPSkVDVCh0aGlzLmJvb3RzdHJhcFJvb3QpLFxuICAgICAgJy1zY2hlbWUnLCBSVU5ORVJfU0NIRU1FLFxuICAgICAgRElTQUJMRV9TVE9SRV9BUkcsXG4gICAgXTtcbiAgICBjb25zdCBlbnYgPSBPYmplY3QuYXNzaWduKHt9LCBwcm9jZXNzLmVudiwge1xuICAgICAgVVNFX1BPUlQ6IGAke3RoaXMucG9ydH1gLFxuICAgICAgVVNFX0hPU1Q6IHRoaXMuaG9zdCxcbiAgICB9KTtcbiAgICB0aGlzLnByb2MgPSBuZXcgU3ViUHJvY2Vzcyh4Y29kZWJ1aWxkLCBhcmdzLCB7XG4gICAgICBjd2Q6IHRoaXMuYm9vdHN0cmFwUm9vdCxcbiAgICAgIGVudixcbiAgICB9KTtcbiAgICBpZiAoIXRoaXMuc2hvd1NlcnZlckxvZ3MpIHtcbiAgICAgIGxvZy5pbmZvKGBNYWMyRHJpdmVyIGhvc3QgcHJvY2VzcyBsb2dnaW5nIGlzIGRpc2FibGVkLiBgICtcbiAgICAgICAgYEFsbCB0aGUgJHtYQ09ERUJVSUxEfSBvdXRwdXQgaXMgZ29pbmcgdG8gYmUgc3VwcHJlc3NlZC4gYCArXG4gICAgICAgIGBTZXQgdGhlICdzaG93U2VydmVyTG9ncycgY2FwYWJpbGl0eSB0byAndHJ1ZScgaWYgdGhpcyBpcyBhbiB1bmRlc2lyZWQgYmVoYXZpb3JgKTtcbiAgICB9XG4gICAgdGhpcy5wcm9jLm9uKCdvdXRwdXQnLCAoc3Rkb3V0LCBzdGRlcnIpID0+IHtcbiAgICAgIGlmICghdGhpcy5zaG93U2VydmVyTG9ncykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxpbmUgPSBfLnRyaW0oc3Rkb3V0IHx8IHN0ZGVycik7XG4gICAgICBpZiAobGluZSkge1xuICAgICAgICBsb2cuZGVidWcoYFske1hDT0RFQlVJTER9XSAke2xpbmV9YCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5wcm9jLm9uKCdleGl0JywgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgbG9nLmluZm8oYE1hYzJEcml2ZXIgaG9zdCBwcm9jZXNzIGhhcyBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX0sIHNpZ25hbCAke3NpZ25hbH1gKTtcbiAgICB9KTtcbiAgICBsb2cuaW5mbyhgU3RhcnRpbmcgTWFjMkRyaXZlciBob3N0IHByb2Nlc3M6ICR7WENPREVCVUlMRH0gJHt1dGlsLnF1b3RlKGFyZ3MpfWApO1xuICAgIGF3YWl0IHRoaXMucHJvYy5zdGFydCgwKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHN0b3AgKCkge1xuICAgIGlmICghdGhpcy5pc1J1bm5pbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZHJlblBpZHMgPSBhd2FpdCB0aGlzLmxpc3RDaGlsZHJlblBpZHMoKTtcbiAgICBpZiAoIV8uaXNFbXB0eShjaGlsZHJlblBpZHMpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBleGVjKCdraWxsJywgY2hpbGRyZW5QaWRzKTtcbiAgICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICB9XG4gICAgYXdhaXQgdGhpcy5wcm9jLnN0b3AoJ1NJR1RFUk0nLCAzMDAwKTtcbiAgfVxuXG4gIGFzeW5jIGtpbGwgKCkge1xuICAgIGlmICghdGhpcy5pc1J1bm5pbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZHJlblBpZHMgPSBhd2FpdCB0aGlzLmxpc3RDaGlsZHJlblBpZHMoKTtcbiAgICBpZiAoIV8uaXNFbXB0eShjaGlsZHJlblBpZHMpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBleGVjKCdraWxsJywgWyctOScsIC4uLmNoaWxkcmVuUGlkc10pO1xuICAgICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5wcm9jLnN0b3AoJ1NJR0tJTEwnKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gIH1cbn1cblxuY2xhc3MgV0RBTWFjU2VydmVyIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHRoaXMucHJvY2VzcyA9IG51bGw7XG4gICAgdGhpcy5zZXJ2ZXJTdGFydHVwVGltZW91dE1zID0gU1RBUlRVUF9USU1FT1VUX01TO1xuICAgIHRoaXMucHJveHkgPSBudWxsO1xuXG4gICAgLy8gVG8gaGFuZGxlIGlmIHRoZSBXREFNYWMgc2VydmVyIGlzIHByb3h5aW5nIHJlcXVlc3RzIHRvIGEgcmVtb3RlIFdEQU1hYyBhcHAgaW5zdGFuY2VcbiAgICB0aGlzLmlzUHJveHlpbmdUb1JlbW90ZVNlcnZlciA9IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgaXNQcm94eVJlYWR5ICh0aHJvd09uRXhpdCA9IHRydWUpIHtcbiAgICBpZiAoIXRoaXMucHJveHkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5wcm94eS5jb21tYW5kKCcvc3RhdHVzJywgJ0dFVCcpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodGhyb3dPbkV4aXQgJiYgdGhpcy5wcm94eS5kaWRQcm9jZXNzRXhpdCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyLm1lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmIHtPYmplY3R9IFByb3h5UHJvcGVydGllc1xuICAgKlxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gc2NoZW1lIC0gVGhlIHNjaGVtZSBwcm94eSB0by5cbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IGhvc3QgLSBUaGUgaG9zdCBuYW1lIHByb3h5IHRvLlxuICAgKiBAcHJvcGVydHkge251bWJlcn0gcG9ydCAtIFRoZSBwb3J0IG51bWJlciBwcm94eSB0by5cbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IHBhdGggLSBUaGUgcGF0aCBwcm94eSB0by5cbiAgICovXG5cbiAgLyoqXG4gICAqIFJldHVybnMgcHJveHkgaW5mb3JtYXRpb24gd2hlcmUgV0RBTWFjU2VydmVyIHByb3h5IHRvLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY2FwcyAtIFRoZSBjYXBhYmlsaXRpZXMgaW4gdGhlIHNlc3Npb24uXG4gICAqIEByZXR1cm4ge1Byb3h5UHJvcGVydGllc31cbiAgICogQHRocm93cyBFcnJvciBpZiAnd2ViRHJpdmVyQWdlbnRNYWNVcmwnIGhhZCBpbnZhbGlkIFVSTFxuICAgKi9cbiAgcGFyc2VQcm94eVByb3BlcnRpZXMgKGNhcHMpIHtcbiAgICBsZXQgc2NoZW1lID0gJ2h0dHAnO1xuICAgIGlmICghY2Fwcy53ZWJEcml2ZXJBZ2VudE1hY1VybCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2NoZW1lLFxuICAgICAgICBzZXJ2ZXI6ICh0aGlzLnByb2Nlc3M/Lmhvc3QgPz8gY2Fwcy5zeXN0ZW1Ib3N0KSA/PyBERUZBVUxUX1NZU1RFTV9IT1NULFxuICAgICAgICBwb3J0OiAodGhpcy5wcm9jZXNzPy5wb3J0ID8/IGNhcHMuc3lzdGVtUG9ydCkgPz8gREVGQVVMVF9TWVNURU1fUE9SVCxcbiAgICAgICAgcGF0aDogJydcbiAgICAgIH07XG4gICAgfVxuXG4gICAgbGV0IHBhcnNlZFVybDtcbiAgICB0cnkge1xuICAgICAgcGFyc2VkVXJsID0gbmV3IHVybC5VUkwoY2Fwcy53ZWJEcml2ZXJBZ2VudE1hY1VybCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB3ZWJEcml2ZXJBZ2VudE1hY1VybCwgJyR7Y2Fwcy53ZWJEcml2ZXJBZ2VudE1hY1VybH0nLCBgICtcbiAgICAgICAgYGluIHRoZSBjYXBhYmlsaXRpZXMgaXMgaW52YWxpZC4gJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBwcm90b2NvbCwgaG9zdG5hbWUsIHBvcnQsIHBhdGhuYW1lIH0gPSBwYXJzZWRVcmw7XG4gICAgaWYgKF8uaXNTdHJpbmcocHJvdG9jb2wpKSB7XG4gICAgICBzY2hlbWUgPSBwcm90b2NvbC5zcGxpdCgnOicpWzBdO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgc2NoZW1lLFxuICAgICAgc2VydmVyOiBob3N0bmFtZSA/PyBERUZBVUxUX1NZU1RFTV9IT1NULFxuICAgICAgcG9ydDogXy5pc0VtcHR5KHBvcnQpID8gREVGQVVMVF9TWVNURU1fUE9SVCA6IF8ucGFyc2VJbnQocG9ydCksXG4gICAgICBwYXRoOiBwYXRobmFtZSA9PT0gJy8nID8gJycgOiBwYXRobmFtZVxuICAgIH07XG4gIH1cblxuICBhc3luYyBzdGFydFNlc3Npb24gKGNhcHMpIHtcbiAgICB0aGlzLnNlcnZlclN0YXJ0dXBUaW1lb3V0TXMgPSBjYXBzLnNlcnZlclN0YXJ0dXBUaW1lb3V0ID8/IHRoaXMuc2VydmVyU3RhcnR1cFRpbWVvdXRNcztcblxuICAgIHRoaXMuaXNQcm94eWluZ1RvUmVtb3RlU2VydmVyID0gISFjYXBzLndlYkRyaXZlckFnZW50TWFjVXJsO1xuXG4gICAgbGV0IHdhc1Byb2Nlc3NJbml0TmVjZXNzYXJ5O1xuICAgIGlmICh0aGlzLmlzUHJveHlpbmdUb1JlbW90ZVNlcnZlcikge1xuICAgICAgaWYgKHRoaXMucHJvY2Vzcykge1xuICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3Mua2lsbCgpO1xuICAgICAgICBhd2FpdCBjbGVhbnVwT2Jzb2xldGVQcm9jZXNzZXMoKTtcbiAgICAgICAgdGhpcy5wcm9jZXNzID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgd2FzUHJvY2Vzc0luaXROZWNlc3NhcnkgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF0aGlzLnByb2Nlc3MpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzID0gbmV3IFdEQU1hY1Byb2Nlc3MoKTtcbiAgICAgIH1cbiAgICAgIHdhc1Byb2Nlc3NJbml0TmVjZXNzYXJ5ID0gYXdhaXQgdGhpcy5wcm9jZXNzLmluaXQoY2Fwcyk7XG4gICAgfVxuXG4gICAgaWYgKHdhc1Byb2Nlc3NJbml0TmVjZXNzYXJ5IHx8IHRoaXMuaXNQcm94eWluZ1RvUmVtb3RlU2VydmVyIHx8ICF0aGlzLnByb3h5KSB7XG4gICAgICBjb25zdCB7c2NoZW1lLCBzZXJ2ZXIsIHBvcnQsIHBhdGh9ID0gdGhpcy5wYXJzZVByb3h5UHJvcGVydGllcyhjYXBzKTtcbiAgICAgIHRoaXMucHJveHkgPSBuZXcgV0RBTWFjUHJveHkoe1xuICAgICAgICBzY2hlbWUsXG4gICAgICAgIHNlcnZlcixcbiAgICAgICAgcG9ydCxcbiAgICAgICAgYmFzZTogcGF0aCxcbiAgICAgICAga2VlcEFsaXZlOiB0cnVlLFxuICAgICAgfSk7XG4gICAgICB0aGlzLnByb3h5LmRpZFByb2Nlc3NFeGl0ID0gZmFsc2U7XG5cbiAgICAgIGlmICh0aGlzLnByb2Nlc3MpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzLnByb2Mub24oJ2V4aXQnLCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5wcm94eS5kaWRQcm9jZXNzRXhpdCA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0aW1lciA9IG5ldyB0aW1pbmcuVGltZXIoKS5zdGFydCgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbihhc3luYyAoKSA9PiBhd2FpdCB0aGlzLmlzUHJveHlSZWFkeSgpLCB7XG4gICAgICAgICAgd2FpdE1zOiB0aGlzLnNlcnZlclN0YXJ0dXBUaW1lb3V0TXMsXG4gICAgICAgICAgaW50ZXJ2YWxNczogMTAwMCxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmICh0aGlzLnByb2Nlc3M/LmlzUnVubmluZykge1xuICAgICAgICAgIC8vIGF2b2lkIFwiZnJvemVuXCIgcHJvY2Vzc2VzLFxuICAgICAgICAgIGF3YWl0IHRoaXMucHJvY2Vzcy5raWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKC9Db25kaXRpb24gdW5tZXQvLnRlc3QoZS5tZXNzYWdlKSkge1xuICAgICAgICAgIGNvbnN0IG1zZyA9IHRoaXMuaXNQcm94eWluZ1RvUmVtb3RlU2VydmVyXG4gICAgICAgICAgICA/IGBObyByZXNwb25zZSBmcm9tICcke3NjaGVtZX06Ly8ke3NlcnZlcn06JHtwb3J0fSR7cGF0aH0nIHdpdGhpbiAke3RoaXMuc2VydmVyU3RhcnR1cFRpbWVvdXRNc31tcyB0aW1lb3V0LmAgK1xuICAgICAgICAgICAgYFBsZWFzZSBtYWtlIHN1cmUgdGhlIHJlbW90ZSBzZXJ2ZXIgaXMgcnVubmluZyBhbmQgYWNjZXNzaWJsZSBieSBBcHBpdW1gXG4gICAgICAgICAgICA6IGBNYWMyRHJpdmVyIHNlcnZlciBpcyBub3QgbGlzdGVuaW5nIHdpdGhpbiAke3RoaXMuc2VydmVyU3RhcnR1cFRpbWVvdXRNc31tcyB0aW1lb3V0LiBgICtcbiAgICAgICAgICAgIGBUcnkgdG8gaW5jcmVhc2UgdGhlIHZhbHVlIG9mICdzZXJ2ZXJTdGFydHVwVGltZW91dCcgY2FwYWJpbGl0eSwgY2hlY2sgdGhlIHNlcnZlciBsb2dzIGAgK1xuICAgICAgICAgICAgYGFuZCBtYWtlIHN1cmUgdGhlICR7WENPREVCVUlMRH0gaG9zdCBwcm9jZXNzIGNvdWxkIGJlIHN0YXJ0ZWQgbWFudWFsbHkgZnJvbSBhIHRlcm1pbmFsYDtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5wcm9jZXNzKSB7XG4gICAgICAgIGNvbnN0IHBpZCA9IHRoaXMucHJvY2Vzcy5waWQ7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuUGlkcyA9IGF3YWl0IHRoaXMucHJvY2Vzcy5saXN0Q2hpbGRyZW5QaWRzKCk7XG4gICAgICAgIFJVTk5JTkdfUFJPQ0VTU19JRFMucHVzaCguLi5jaGlsZHJlblBpZHMsIHBpZCk7XG4gICAgICAgIHRoaXMucHJvY2Vzcy5wcm9jLm9uKCdleGl0JywgKCkgPT4gdm9pZCBfLnB1bGwoUlVOTklOR19QUk9DRVNTX0lEUywgcGlkKSk7XG4gICAgICAgIGxvZy5pbmZvKGBUaGUgaG9zdCBwcm9jZXNzIGlzIHJlYWR5IHdpdGhpbiAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsb2cuaW5mbygnVGhlIGhvc3QgcHJvY2VzcyBoYXMgYWxyZWFkeSBiZWVuIGxpc3RlbmluZy4gUHJvY2VlZGluZyB3aXRoIHNlc3Npb24gY3JlYXRpb24nKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnByb3h5LmNvbW1hbmQoJy9zZXNzaW9uJywgJ1BPU1QnLCB7XG4gICAgICBjYXBhYmlsaXRpZXM6IHtcbiAgICAgICAgZmlyc3RNYXRjaDogW3t9XSxcbiAgICAgICAgYWx3YXlzTWF0Y2g6IGNhcHMsXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzdG9wU2Vzc2lvbiAoKSB7XG4gICAgaWYgKCF0aGlzLmlzUHJveHlpbmdUb1JlbW90ZVNlcnZlciAmJiAhKHRoaXMucHJvY2Vzcz8uaXNSdW5uaW5nKSkge1xuICAgICAgbG9nLmluZm8oYE1hYzJEcml2ZXIgc2Vzc2lvbiBjYW5ub3QgYmUgc3RvcHBlZCwgYmVjYXVzZSB0aGUgc2VydmVyIGlzIG5vdCBydW5uaW5nYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJveHk/LnNlc3Npb25JZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcm94eS5jb21tYW5kKGAvc2Vzc2lvbi8ke3RoaXMucHJveHkuc2Vzc2lvbklkfWAsICdERUxFVEUnKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nLmluZm8oYE1hYzJEcml2ZXIgc2Vzc2lvbiBjYW5ub3QgYmUgZGVsZXRlZC4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5jb25zdCBXREFfTUFDX1NFUlZFUiA9IG5ldyBXREFNYWNTZXJ2ZXIoKTtcblxuZXhwb3J0IGRlZmF1bHQgV0RBX01BQ19TRVJWRVI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsSUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsTUFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksU0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUssT0FBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sUUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sVUFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsYUFBQSxHQUFBUixPQUFBO0FBQ0EsSUFBQVMsU0FBQSxHQUFBVCxPQUFBO0FBQ0EsSUFBQVUsWUFBQSxHQUFBVixPQUFBO0FBQ0EsSUFBQVcsY0FBQSxHQUFBWCxPQUFBO0FBQ0EsSUFBQVksTUFBQSxHQUFBWixPQUFBO0FBRUEsTUFBTWEsR0FBRyxHQUFHQyxlQUFNLENBQUNDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQztBQUVqRCxNQUFNQyxnQkFBZ0IsR0FBR0MsYUFBSSxDQUFDQyxPQUFPLENBQUMsSUFBQUMsb0JBQWEsRUFBQyxDQUFDLEVBQUUsbUJBQW1CLENBQUM7QUFDM0UsTUFBTUMsZ0JBQWdCLEdBQUcsNkJBQTZCO0FBQ3RELE1B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
|
|
387
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfcGF0aCIsIl91cmwiLCJfYXhpb3MiLCJfYmx1ZWJpcmQiLCJfZHJpdmVyIiwiX3N1cHBvcnQiLCJfc3Ryb25nYm94IiwiX3RlZW5fcHJvY2VzcyIsIl9hc3luY2JveCIsIl9wb3J0c2Nhbm5lciIsIl9jaGlsZF9wcm9jZXNzIiwiX3V0aWxzIiwibG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwiREVGQVVMVF9XREFfUk9PVCIsInBhdGgiLCJyZXNvbHZlIiwiZ2V0TW9kdWxlUm9vdCIsIldEQV9QUk9KRUNUX05BTUUiLCJXREFfUFJPSkVDVCIsIndkYVJvb3QiLCJSVU5ORVJfU0NIRU1FIiwiRElTQUJMRV9TVE9SRV9BUkciLCJYQ09ERUJVSUxEIiwiU1RBUlRVUF9USU1FT1VUX01TIiwiREVGQVVMVF9TWVNURU1fUE9SVCIsIkRFRkFVTFRfU1lTVEVNX0hPU1QiLCJERUZBVUxUX1NIT1dfU0VSVkVSX0xPR1MiLCJSVU5OSU5HX1BST0NFU1NfSURTIiwiUkVDRU5UX1VQR1JBREVfVElNRVNUQU1QX1BBVEgiLCJqb2luIiwiUkVDRU5UX01PRFVMRV9WRVJTSU9OX0lURU1fTkFNRSIsImNsZWFudXBPYnNvbGV0ZVByb2Nlc3NlcyIsIl8iLCJpc0VtcHR5IiwiZGVidWciLCJsZW5ndGgiLCJ1dGlsIiwicGx1cmFsaXplIiwiZXhlYyIsImlnbiIsInB1bGxBbGwiLCJwcm9jZXNzIiwib25jZSIsImV4ZWNTeW5jIiwiV0RBTWFjUHJveHkiLCJKV1Byb3h5IiwicHJveHlDb21tYW5kIiwidXJsIiwibWV0aG9kIiwiYm9keSIsImRpZFByb2Nlc3NFeGl0IiwiZXJyb3JzIiwiSW52YWxpZENvbnRleHRFcnJvciIsIldEQU1hY1Byb2Nlc3MiLCJjb25zdHJ1Y3RvciIsInNob3dTZXJ2ZXJMb2dzIiwicG9ydCIsImhvc3QiLCJib290c3RyYXBSb290IiwicHJvYyIsImlzUnVubmluZyIsIl90aGlzJHByb2MiLCJwaWQiLCJsaXN0Q2hpbGRyZW5QaWRzIiwibGlzdENoaWxkcmVuUHJvY2Vzc0lkcyIsImNsZWFudXBQcm9qZWN0SWZGcmVzaCIsInBhY2thZ2VJbmZvIiwiSlNPTiIsInBhcnNlIiwiZnMiLCJyZWFkRmlsZSIsImJveCIsInN0cm9uZ2JveCIsIm5hbWUiLCJib3hJdGVtIiwiZ2V0SXRlbSIsInRpbWVzdGFtcFBhdGgiLCJlbnYiLCJIT01FIiwiZXhpc3RzIiwiY3JlYXRlSXRlbVdpdGhDb250ZW50cyIsImUiLCJ3YXJuIiwibWVzc2FnZSIsImluZm8iLCJ2ZXJzaW9uIiwicmVjZW50TW9kdWxlVmVyc2lvbiIsInJlYWQiLCJjb2VyY2VWZXJzaW9uIiwid3JpdGUiLCJjb21wYXJlVmVyc2lvbnMiLCJhcmdzIiwiY3dkIiwic3RkZXJyIiwiaGFzU2FtZU9wdHMiLCJzeXN0ZW1Qb3J0Iiwic3lzdGVtSG9zdCIsImlzQm9vbGVhbiIsImlzTmlsIiwiaW5pdCIsIm9wdHMiLCJFcnJvciIsImtpbGwiLCJ4Y29kZWJ1aWxkIiwid2hpY2giLCJpc1BvcnRCdXN5IiwiY2hlY2tQb3J0U3RhdHVzIiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsInN0YXJ0IiwiYXhpb3MiLCJkZWxldGUiLCJ0aW1lb3V0IiwiQiIsImRlbGF5Iiwid2FpdEZvckNvbmRpdGlvbiIsIndhaXRNcyIsImludGVydmFsTXMiLCJNYXRoIiwicm91bmQiLCJnZXREdXJhdGlvbiIsImFzTWlsbGlTZWNvbmRzIiwiT2JqZWN0IiwiYXNzaWduIiwiVVNFX1BPUlQiLCJVU0VfSE9TVCIsIlN1YlByb2Nlc3MiLCJvbiIsInN0ZG91dCIsImxpbmUiLCJ0cmltIiwiY29kZSIsInNpZ25hbCIsInF1b3RlIiwic3RvcCIsImNoaWxkcmVuUGlkcyIsIldEQU1hY1NlcnZlciIsInNlcnZlclN0YXJ0dXBUaW1lb3V0TXMiLCJwcm94eSIsImlzUHJveHlpbmdUb1JlbW90ZVNlcnZlciIsImlzUHJveHlSZWFkeSIsInRocm93T25FeGl0IiwiY29tbWFuZCIsImVyciIsInBhcnNlUHJveHlQcm9wZXJ0aWVzIiwiY2FwcyIsInNjaGVtZSIsIndlYkRyaXZlckFnZW50TWFjVXJsIiwiX3RoaXMkcHJvY2VzcyIsIl90aGlzJHByb2Nlc3MyIiwic2VydmVyIiwicGFyc2VkVXJsIiwiVVJMIiwicHJvdG9jb2wiLCJob3N0bmFtZSIsInBhdGhuYW1lIiwiaXNTdHJpbmciLCJzcGxpdCIsInBhcnNlSW50Iiwic3RhcnRTZXNzaW9uIiwic2VydmVyU3RhcnR1cFRpbWVvdXQiLCJ3YXNQcm9jZXNzSW5pdE5lY2Vzc2FyeSIsImJhc2UiLCJrZWVwQWxpdmUiLCJfdGhpcyRwcm9jZXNzMyIsInRlc3QiLCJtc2ciLCJwdXNoIiwicHVsbCIsInRvRml4ZWQiLCJjYXBhYmlsaXRpZXMiLCJmaXJzdE1hdGNoIiwiYWx3YXlzTWF0Y2giLCJzdG9wU2Vzc2lvbiIsIl90aGlzJHByb2Nlc3M0IiwiX3RoaXMkcHJveHkiLCJzZXNzaW9uSWQiLCJXREFfTUFDX1NFUlZFUiIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi9saWIvd2RhLW1hYy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgdXJsIGZyb20gJ3VybCc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgSldQcm94eSwgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgeyBmcywgbG9nZ2VyLCB1dGlsLCB0aW1pbmcgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBzdHJvbmdib3ggfSBmcm9tICdAYXBwaXVtL3N0cm9uZ2JveCc7XG5pbXBvcnQgeyBTdWJQcm9jZXNzLCBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCB7IHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBjaGVja1BvcnRTdGF0dXMgfSBmcm9tICdwb3J0c2Nhbm5lcic7XG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgbGlzdENoaWxkcmVuUHJvY2Vzc0lkcywgZ2V0TW9kdWxlUm9vdCB9IGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBsb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdXZWJEcml2ZXJBZ2VudE1hYycpO1xuXG5jb25zdCBERUZBVUxUX1dEQV9ST09UID0gcGF0aC5yZXNvbHZlKGdldE1vZHVsZVJvb3QoKSwgJ1dlYkRyaXZlckFnZW50TWFjJyk7XG5jb25zdCBXREFfUFJPSkVDVF9OQU1FID0gJ1dlYkRyaXZlckFnZW50TWFjLnhjb2RlcHJvaic7XG5jb25zdCBXREFfUFJPSkVDVCA9ICh3ZGFSb290ID0gREVGQVVMVF9XREFfUk9PVCkgPT4gcGF0aC5yZXNvbHZlKHdkYVJvb3QsIFdEQV9QUk9KRUNUX05BTUUpO1xuY29uc3QgUlVOTkVSX1NDSEVNRSA9ICdXZWJEcml2ZXJBZ2VudFJ1bm5lcic7XG5jb25zdCBESVNBQkxFX1NUT1JFX0FSRyA9ICdDT01QSUxFUl9JTkRFWF9TVE9SRV9FTkFCTEU9Tk8nO1xuY29uc3QgWENPREVCVUlMRCA9ICd4Y29kZWJ1aWxkJztcbmNvbnN0IFNUQVJUVVBfVElNRU9VVF9NUyA9IDEyMDAwMDtcbmNvbnN0IERFRkFVTFRfU1lTVEVNX1BPUlQgPSAxMDEwMDtcbmNvbnN0IERFRkFVTFRfU1lTVEVNX0hPU1QgPSAnMTI3LjAuMC4xJztcbmNvbnN0IERFRkFVTFRfU0hPV19TRVJWRVJfTE9HUyA9IGZhbHNlO1xuY29uc3QgUlVOTklOR19QUk9DRVNTX0lEUyA9IFtdO1xuY29uc3QgUkVDRU5UX1VQR1JBREVfVElNRVNUQU1QX1BBVEggPSBwYXRoLmpvaW4oJy5hcHBpdW0nLCAnd2ViZHJpdmVyYWdlbnRfbWFjJywgJ3VwZ3JhZGUudGltZScpO1xuY29uc3QgUkVDRU5UX01PRFVMRV9WRVJTSU9OX0lURU1fTkFNRSA9ICdyZWNlbnRXZGFNb2R1bGVWZXJzaW9uJztcblxuXG5hc3luYyBmdW5jdGlvbiBjbGVhbnVwT2Jzb2xldGVQcm9jZXNzZXMgKCkge1xuICBpZiAoIV8uaXNFbXB0eShSVU5OSU5HX1BST0NFU1NfSURTKSkge1xuICAgIGxvZy5kZWJ1ZyhgQ2xlYW5pbmcgdXAgJHtSVU5OSU5HX1BST0NFU1NfSURTLmxlbmd0aH0gb2Jzb2xldGUgYCArXG4gICAgICB1dGlsLnBsdXJhbGl6ZSgncHJvY2VzcycsIFJVTk5JTkdfUFJPQ0VTU19JRFMubGVuZ3RoLCBmYWxzZSkpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBleGVjKCdraWxsJywgWyctOScsIC4uLlJVTk5JTkdfUFJPQ0VTU19JRFNdKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgXy5wdWxsQWxsKFJVTk5JTkdfUFJPQ0VTU19JRFMsIFJVTk5JTkdfUFJPQ0VTU19JRFMpO1xuICB9XG59XG5cbnByb2Nlc3Mub25jZSgnZXhpdCcsICgpID0+IHtcbiAgaWYgKCFfLmlzRW1wdHkoUlVOTklOR19QUk9DRVNTX0lEUykpIHtcbiAgICB0cnkge1xuICAgICAgZXhlY1N5bmMoYGtpbGwgLTkgJHtSVU5OSU5HX1BST0NFU1NfSURTLmpvaW4oJyAnKX1gKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgXy5wdWxsQWxsKFJVTk5JTkdfUFJPQ0VTU19JRFMsIFJVTk5JTkdfUFJPQ0VTU19JRFMpO1xuICB9XG59KTtcblxuXG5jbGFzcyBXREFNYWNQcm94eSBleHRlbmRzIEpXUHJveHkge1xuICBhc3luYyBwcm94eUNvbW1hbmQgKHVybCwgbWV0aG9kLCBib2R5ID0gbnVsbCkge1xuICAgIGlmICh0aGlzLmRpZFByb2Nlc3NFeGl0KSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRDb250ZXh0RXJyb3IoXG4gICAgICAgIGAnJHttZXRob2R9ICR7dXJsfScgY2Fubm90IGJlIHByb3hpZWQgdG8gTWFjMiBEcml2ZXIgc2VydmVyIGJlY2F1c2UgYCArXG4gICAgICAgICdpdHMgcHJvY2VzcyBpcyBub3QgcnVubmluZyAocHJvYmFibHkgY3Jhc2hlZCkuIENoZWNrIHRoZSBBcHBpdW0gbG9nIGZvciBtb3JlIGRldGFpbHMnKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLnByb3h5Q29tbWFuZCh1cmwsIG1ldGhvZCwgYm9keSk7XG4gIH1cbn1cblxuY2xhc3MgV0RBTWFjUHJvY2VzcyB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLnNob3dTZXJ2ZXJMb2dzID0gREVGQVVMVF9TSE9XX1NFUlZFUl9MT0dTO1xuICAgIHRoaXMucG9ydCA9IERFRkFVTFRfU1lTVEVNX1BPUlQ7XG4gICAgdGhpcy5ob3N0ID0gREVGQVVMVF9TWVNURU1fSE9TVDtcbiAgICB0aGlzLmJvb3RzdHJhcFJvb3QgPSBERUZBVUxUX1dEQV9ST09UO1xuICAgIHRoaXMucHJvYyA9IG51bGw7XG4gIH1cblxuICBnZXQgaXNSdW5uaW5nICgpIHtcbiAgICByZXR1cm4gISEodGhpcy5wcm9jPy5pc1J1bm5pbmcpO1xuICB9XG5cbiAgZ2V0IHBpZCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNSdW5uaW5nID8gdGhpcy5wcm9jLnBpZCA6IG51bGw7XG4gIH1cblxuICBhc3luYyBsaXN0Q2hpbGRyZW5QaWRzICgpIHtcbiAgICByZXR1cm4gdGhpcy5waWQgPyAoYXdhaXQgbGlzdENoaWxkcmVuUHJvY2Vzc0lkcyh0aGlzLnBpZCkpIDogW107XG4gIH1cblxuICBhc3luYyBjbGVhbnVwUHJvamVjdElmRnJlc2ggKCkge1xuICAgIGNvbnN0IHBhY2thZ2VJbmZvID0gSlNPTi5wYXJzZShhd2FpdCBmcy5yZWFkRmlsZShwYXRoLmpvaW4oZ2V0TW9kdWxlUm9vdCgpLCAncGFja2FnZS5qc29uJyksICd1dGY4JykpO1xuICAgIGNvbnN0IGJveCA9IHN0cm9uZ2JveChwYWNrYWdlSW5mby5uYW1lKTtcbiAgICBsZXQgYm94SXRlbSA9IGJveC5nZXRJdGVtKFJFQ0VOVF9NT0RVTEVfVkVSU0lPTl9JVEVNX05BTUUpO1xuICAgIGlmICghYm94SXRlbSkge1xuICAgICAgY29uc3QgdGltZXN0YW1wUGF0aCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmVudi5IT01FLCBSRUNFTlRfVVBHUkFERV9USU1FU1RBTVBfUEFUSCk7XG4gICAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKHRpbWVzdGFtcFBhdGgpKSB7XG4gICAgICAgIC8vIFRPRE86IEl0IGlzIHByb2JhYmx5IGEgYml0IHVnbHkgdG8gaGFyZGNvZGUgdGhlIHJlY2VudCB2ZXJzaW9uIHN0cmluZyxcbiAgICAgICAgLy8gVE9ETzogaG92ZXdlciBpdCBzaG91bGQgZG8gdGhlIGpvYiBhcyBhIHRlbXBvcmFyeSB0cmFuc2l0aW9uIHRyaWNrXG4gICAgICAgIC8vIFRPRE86IHRvIHN3aXRjaCBmcm9tIGEgaGFyZGNvZGVkIGZpbGUgcGF0aCB0byB0aGUgc3Ryb25nYm94IHVzYWdlLlxuICAgICAgICB0cnkge1xuICAgICAgICAgIGJveEl0ZW0gPSBhd2FpdCBib3guY3JlYXRlSXRlbVdpdGhDb250ZW50cyhSRUNFTlRfTU9EVUxFX1ZFUlNJT05fSVRFTV9OQU1FLCAnMS41LjQnKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGxvZy53YXJuKGBUaGUgYWN0dWFsIG1vZHVsZSB2ZXJzaW9uIGNhbm5vdCBiZSBwZXJzaXN0ZWQ6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmluZm8oJ1RoZXJlIGlzIG5vIG5lZWQgdG8gcGVyZm9ybSB0aGUgcHJvamVjdCBjbGVhbnVwLiBBIGZyZXNoIGluc3RhbGwgaGFzIGJlZW4gZGV0ZWN0ZWQnKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBib3guY3JlYXRlSXRlbVdpdGhDb250ZW50cyhSRUNFTlRfTU9EVUxFX1ZFUlNJT05fSVRFTV9OQU1FLCBwYWNrYWdlSW5mby52ZXJzaW9uKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGxvZy53YXJuKGBUaGUgYWN0dWFsIG1vZHVsZSB2ZXJzaW9uIGNhbm5vdCBiZSBwZXJzaXN0ZWQ6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcmVjZW50TW9kdWxlVmVyc2lvbiA9IGF3YWl0IGJveEl0ZW0ucmVhZCgpO1xuICAgIHRyeSB7XG4gICAgICByZWNlbnRNb2R1bGVWZXJzaW9uID0gdXRpbC5jb2VyY2VWZXJzaW9uKHJlY2VudE1vZHVsZVZlcnNpb24sIHRydWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy53YXJuKGBUaGUgcGVyc2lzdGVkIG1vZHVsZSB2ZXJzaW9uIHN0cmluZyBoYXMgYmVlbiBkYW1hZ2VkOiAke2UubWVzc2FnZX1gKTtcbiAgICAgIGxvZy5pbmZvKGBVcGRhdGluZyBpdCB0byAnJHtwYWNrYWdlSW5mby52ZXJzaW9ufScgYXNzdW1pbmcgdGhlIHByb2plY3QgY2xlbnVwIGlzIG5vdCBuZWVkZWRgKTtcbiAgICAgIGF3YWl0IGJveEl0ZW0ud3JpdGUocGFja2FnZUluZm8udmVyc2lvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHV0aWwuY29tcGFyZVZlcnNpb25zKHJlY2VudE1vZHVsZVZlcnNpb24sICc+PScsIHBhY2thZ2VJbmZvLnZlcnNpb24pKSB7XG4gICAgICBsb2cuaW5mbyhcbiAgICAgICAgYFdlYkRyaXZlckFnZW50IGRvZXMgbm90IG5lZWQgYSBjbGVhbnVwLiBUaGUgcHJvamVjdCBzb3VyY2VzIGFyZSB1cCB0byBkYXRlIGAgK1xuICAgICAgICBgKCR7cmVjZW50TW9kdWxlVmVyc2lvbn0gPj0gJHtwYWNrYWdlSW5mby52ZXJzaW9ufSlgXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBsb2cuaW5mbygnUGVyZm9ybWluZyBwcm9qZWN0IGNsZWFudXAnKTtcbiAgICAgIGNvbnN0IGFyZ3MgPSBbXG4gICAgICAgICdjbGVhbicsXG4gICAgICAgICctcHJvamVjdCcsIFdEQV9QUk9KRUNUKHRoaXMuYm9vdHN0cmFwUm9vdCksXG4gICAgICAgICctc2NoZW1lJywgUlVOTkVSX1NDSEVNRSxcbiAgICAgIF07XG4gICAgICBhd2FpdCBleGVjKFhDT0RFQlVJTEQsIGFyZ3MsIHtjd2Q6IHRoaXMuYm9vdHN0cmFwUm9vdH0pO1xuICAgICAgYXdhaXQgYm94SXRlbS53cml0ZShwYWNrYWdlSW5mby52ZXJzaW9uKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cud2FybihgQ2Fubm90IHBlcmZvcm0gcHJvamVjdCBjbGVhbnVwLiBPcmlnaW5hbCBlcnJvcjogJHtlLnN0ZGVyciB8fCBlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgaGFzU2FtZU9wdHMgKHsgc2hvd1NlcnZlckxvZ3MsIHN5c3RlbVBvcnQsIHN5c3RlbUhvc3QsIGJvb3RzdHJhcFJvb3QgfSkge1xuICAgIGlmIChfLmlzQm9vbGVhbihzaG93U2VydmVyTG9ncykgJiYgdGhpcy5zaG93U2VydmVyTG9ncyAhPT0gc2hvd1NlcnZlckxvZ3NcbiAgICAgIHx8IF8uaXNOaWwoc2hvd1NlcnZlckxvZ3MpICYmIHRoaXMuc2hvd1NlcnZlckxvZ3MgIT09IERFRkFVTFRfU0hPV19TRVJWRVJfTE9HUykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoc3lzdGVtUG9ydCAmJiB0aGlzLnBvcnQgIT09IHN5c3RlbVBvcnRcbiAgICAgIHx8ICFzeXN0ZW1Qb3J0ICYmIHRoaXMucG9ydCAhPT0gREVGQVVMVF9TWVNURU1fUE9SVCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoc3lzdGVtSG9zdCAmJiB0aGlzLmhvc3QgIT09IHN5c3RlbUhvc3RcbiAgICAgIHx8ICFzeXN0ZW1Ib3N0ICYmIHRoaXMuaG9zdCAhPT0gREVGQVVMVF9TWVNURU1fSE9TVCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoYm9vdHN0cmFwUm9vdCAmJiB0aGlzLmJvb3RzdHJhcFJvb3QgIT09IGJvb3RzdHJhcFJvb3RcbiAgICAgIHx8ICFib290c3RyYXBSb290ICYmIHRoaXMuYm9vdHN0cmFwUm9vdCAhPT0gREVGQVVMVF9XREFfUk9PVCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgaW5pdCAob3B0cyA9IHt9KSB7XG4gICAgaWYgKHRoaXMuaXNSdW5uaW5nICYmIHRoaXMuaGFzU2FtZU9wdHMob3B0cykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLnNob3dTZXJ2ZXJMb2dzID0gb3B0cy5zaG93U2VydmVyTG9ncyA/PyB0aGlzLnNob3dTZXJ2ZXJMb2dzO1xuICAgIHRoaXMucG9ydCA9IG9wdHMuc3lzdGVtUG9ydCA/PyB0aGlzLnBvcnQ7XG4gICAgdGhpcy5ob3N0ID0gb3B0cy5zeXN0ZW1Ib3N0ID8/IHRoaXMuaG9zdDtcbiAgICB0aGlzLmJvb3RzdHJhcFJvb3QgPSBvcHRzLmJvb3RzdHJhcFJvb3QgPz8gdGhpcy5ib290c3RyYXBSb290O1xuXG4gICAgbG9nLmRlYnVnKGBVc2luZyBib290c3RyYXAgcm9vdDogJHt0aGlzLmJvb3RzdHJhcFJvb3R9YCk7XG4gICAgaWYgKCFhd2FpdCBmcy5leGlzdHMoV0RBX1BST0pFQ1QodGhpcy5ib290c3RyYXBSb290KSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtXREFfUFJPSkVDVF9OQU1FfSBkb2VzIG5vdCBleGlzdCBhdCAnJHtXREFfUFJPSkVDVCh0aGlzLmJvb3RzdHJhcFJvb3QpfScuIGAgK1xuICAgICAgICBgV2FzICdib290c3RyYXBSb290JyBzZXQgdG8gYSBwcm9wZXIgdmFsdWU/YCk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5raWxsKCk7XG4gICAgYXdhaXQgY2xlYW51cE9ic29sZXRlUHJvY2Vzc2VzKCk7XG5cbiAgICBsZXQgeGNvZGVidWlsZDtcbiAgICB0cnkge1xuICAgICAgeGNvZGVidWlsZCA9IGF3YWl0IGZzLndoaWNoKFhDT0RFQlVJTEQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtYQ09ERUJVSUxEfSBiaW5hcnkgY2Fubm90IGJlIGZvdW5kIGluIFBBVEguIGAgK1xuICAgICAgICBgUGxlYXNlIG1ha2Ugc3VyZSB0aGF0IFhjb2RlIGlzIGluc3RhbGxlZCBvbiB5b3VyIHN5c3RlbWApO1xuICAgIH1cbiAgICBsb2cuZGVidWcoYFVzaW5nICR7WENPREVCVUlMRH0gYmluYXJ5IGF0ICcke3hjb2RlYnVpbGR9J2ApO1xuXG4gICAgYXdhaXQgdGhpcy5jbGVhbnVwUHJvamVjdElmRnJlc2goKTtcblxuICAgIGxvZy5kZWJ1ZyhgVXNpbmcgJHt0aGlzLmhvc3R9IGFzIHNlcnZlciBob3N0YCk7XG4gICAgbG9nLmRlYnVnKGBVc2luZyBwb3J0ICR7dGhpcy5wb3J0fWApO1xuICAgIGNvbnN0IGlzUG9ydEJ1c3kgPSBhc3luYyAoKSA9PiAoYXdhaXQgY2hlY2tQb3J0U3RhdHVzKHRoaXMucG9ydCwgdGhpcy5ob3N0KSkgPT09ICdvcGVuJztcbiAgICBpZiAoYXdhaXQgaXNQb3J0QnVzeSgpKSB7XG4gICAgICBsb2cud2FybihgVGhlIHBvcnQgIyR7dGhpcy5wb3J0fSBhdCAke3RoaXMuaG9zdH0gaXMgYnVzeS4gYCArXG4gICAgICAgIGBBc3N1bWluZyBpdCBpcyBhbiBvYnNvbGV0ZSBXREEgc2VydmVyIGluc3RhbmNlIGFuZCBgICtcbiAgICAgICAgYHRyeWluZyB0byB0ZXJtaW5hdGUgaXQgaW4gb3JkZXIgdG8gc3RhcnQgYSBuZXcgb25lYCk7XG4gICAgICBjb25zdCB0aW1lciA9IG5ldyB0aW1pbmcuVGltZXIoKS5zdGFydCgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgYXhpb3MuZGVsZXRlKGBodHRwOi8vJHt0aGlzLmhvc3R9OiR7dGhpcy5wb3J0fS9gLCB7XG4gICAgICAgICAgdGltZW91dDogNTAwMCxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEdpdmUgdGhlIHNlcnZlciBzb21lIHRpbWUgdG8gZmluaXNoIGFuZCBzdG9wIGxpc3RlbmluZ1xuICAgICAgICBhd2FpdCBCLmRlbGF5KDUwMCk7XG4gICAgICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4gIShhd2FpdCBpc1BvcnRCdXN5KCkpLCB7XG4gICAgICAgICAgd2FpdE1zOiAzMDAwLFxuICAgICAgICAgIGludGVydmFsTXM6IDEwMCxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZy53YXJuKGBEaWQgbm90IGtub3cgaG93IHRvIHRlcm1pbmF0ZSB0aGUgcHJvY2VzcyBhdCAke3RoaXMuaG9zdH06JHt0aGlzLnBvcnR9OiAke2UubWVzc2FnZX0uIGAgK1xuICAgICAgICAgIGBQZXJoYXBzLCBpdCBpcyBub3QgYSBXREEgc2VydmVyLCB3aGljaCBpcyBob2dnaW5nIHRoZSBwb3J0P2ApO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBwb3J0ICMke3RoaXMucG9ydH0gYXQgJHt0aGlzLmhvc3R9IGlzIGJ1c3kuIGAgK1xuICAgICAgICAgIGBDb25zaWRlciBzZXR0aW5nICdzeXN0ZW1Qb3J0JyBjYXBhYmlsaXR5IHRvIGFub3RoZXIgZnJlZSBwb3J0IG51bWJlciBhbmQvb3IgYCArXG4gICAgICAgICAgYG1ha2Ugc3VyZSBwcmV2aW91cyBkcml2ZXIgc2Vzc2lvbnMgaGF2ZSBiZWVuIGNsb3NlZCBwcm9wZXJseS5gKTtcbiAgICAgIH1cbiAgICAgIGxvZy5pbmZvKGBUaGUgcHJldmlvdXNseSBydW5uaW5nIFdEQSBzZXJ2ZXIgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHRlcm1pbmF0ZWQgYWZ0ZXIgYCArXG4gICAgICAgIGAke01hdGgucm91bmQodGltZXIuZ2V0RHVyYXRpb24oKS5hc01pbGxpU2Vjb25kcyl9bXNgKTtcbiAgICB9XG5cbiAgICBjb25zdCBhcmdzID0gW1xuICAgICAgJ2J1aWxkLWZvci10ZXN0aW5nJywgJ3Rlc3Qtd2l0aG91dC1idWlsZGluZycsXG4gICAgICAnLXByb2plY3QnLCBXREFfUFJPSkVDVCh0aGlzLmJvb3RzdHJhcFJvb3QpLFxuICAgICAgJy1zY2hlbWUnLCBSVU5ORVJfU0NIRU1FLFxuICAgICAgRElTQUJMRV9TVE9SRV9BUkcsXG4gICAgXTtcbiAgICBjb25zdCBlbnYgPSBPYmplY3QuYXNzaWduKHt9LCBwcm9jZXNzLmVudiwge1xuICAgICAgVVNFX1BPUlQ6IGAke3RoaXMucG9ydH1gLFxuICAgICAgVVNFX0hPU1Q6IHRoaXMuaG9zdCxcbiAgICB9KTtcbiAgICB0aGlzLnByb2MgPSBuZXcgU3ViUHJvY2Vzcyh4Y29kZWJ1aWxkLCBhcmdzLCB7XG4gICAgICBjd2Q6IHRoaXMuYm9vdHN0cmFwUm9vdCxcbiAgICAgIGVudixcbiAgICB9KTtcbiAgICBpZiAoIXRoaXMuc2hvd1NlcnZlckxvZ3MpIHtcbiAgICAgIGxvZy5pbmZvKGBNYWMyRHJpdmVyIGhvc3QgcHJvY2VzcyBsb2dnaW5nIGlzIGRpc2FibGVkLiBgICtcbiAgICAgICAgYEFsbCB0aGUgJHtYQ09ERUJVSUxEfSBvdXRwdXQgaXMgZ29pbmcgdG8gYmUgc3VwcHJlc3NlZC4gYCArXG4gICAgICAgIGBTZXQgdGhlICdzaG93U2VydmVyTG9ncycgY2FwYWJpbGl0eSB0byAndHJ1ZScgaWYgdGhpcyBpcyBhbiB1bmRlc2lyZWQgYmVoYXZpb3JgKTtcbiAgICB9XG4gICAgdGhpcy5wcm9jLm9uKCdvdXRwdXQnLCAoc3Rkb3V0LCBzdGRlcnIpID0+IHtcbiAgICAgIGlmICghdGhpcy5zaG93U2VydmVyTG9ncykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxpbmUgPSBfLnRyaW0oc3Rkb3V0IHx8IHN0ZGVycik7XG4gICAgICBpZiAobGluZSkge1xuICAgICAgICBsb2cuZGVidWcoYFske1hDT0RFQlVJTER9XSAke2xpbmV9YCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5wcm9jLm9uKCdleGl0JywgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgbG9nLmluZm8oYE1hYzJEcml2ZXIgaG9zdCBwcm9jZXNzIGhhcyBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX0sIHNpZ25hbCAke3NpZ25hbH1gKTtcbiAgICB9KTtcbiAgICBsb2cuaW5mbyhgU3RhcnRpbmcgTWFjMkRyaXZlciBob3N0IHByb2Nlc3M6ICR7WENPREVCVUlMRH0gJHt1dGlsLnF1b3RlKGFyZ3MpfWApO1xuICAgIGF3YWl0IHRoaXMucHJvYy5zdGFydCgwKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHN0b3AgKCkge1xuICAgIGlmICghdGhpcy5pc1J1bm5pbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZHJlblBpZHMgPSBhd2FpdCB0aGlzLmxpc3RDaGlsZHJlblBpZHMoKTtcbiAgICBpZiAoIV8uaXNFbXB0eShjaGlsZHJlblBpZHMpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBleGVjKCdraWxsJywgY2hpbGRyZW5QaWRzKTtcbiAgICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICB9XG4gICAgYXdhaXQgdGhpcy5wcm9jLnN0b3AoJ1NJR1RFUk0nLCAzMDAwKTtcbiAgfVxuXG4gIGFzeW5jIGtpbGwgKCkge1xuICAgIGlmICghdGhpcy5pc1J1bm5pbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZHJlblBpZHMgPSBhd2FpdCB0aGlzLmxpc3RDaGlsZHJlblBpZHMoKTtcbiAgICBpZiAoIV8uaXNFbXB0eShjaGlsZHJlblBpZHMpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBleGVjKCdraWxsJywgWyctOScsIC4uLmNoaWxkcmVuUGlkc10pO1xuICAgICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5wcm9jLnN0b3AoJ1NJR0tJTEwnKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gIH1cbn1cblxuY2xhc3MgV0RBTWFjU2VydmVyIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHRoaXMucHJvY2VzcyA9IG51bGw7XG4gICAgdGhpcy5zZXJ2ZXJTdGFydHVwVGltZW91dE1zID0gU1RBUlRVUF9USU1FT1VUX01TO1xuICAgIHRoaXMucHJveHkgPSBudWxsO1xuXG4gICAgLy8gVG8gaGFuZGxlIGlmIHRoZSBXREFNYWMgc2VydmVyIGlzIHByb3h5aW5nIHJlcXVlc3RzIHRvIGEgcmVtb3RlIFdEQU1hYyBhcHAgaW5zdGFuY2VcbiAgICB0aGlzLmlzUHJveHlpbmdUb1JlbW90ZVNlcnZlciA9IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgaXNQcm94eVJlYWR5ICh0aHJvd09uRXhpdCA9IHRydWUpIHtcbiAgICBpZiAoIXRoaXMucHJveHkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5wcm94eS5jb21tYW5kKCcvc3RhdHVzJywgJ0dFVCcpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodGhyb3dPbkV4aXQgJiYgdGhpcy5wcm94eS5kaWRQcm9jZXNzRXhpdCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyLm1lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmIHtPYmplY3R9IFByb3h5UHJvcGVydGllc1xuICAgKlxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gc2NoZW1lIC0gVGhlIHNjaGVtZSBwcm94eSB0by5cbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IGhvc3QgLSBUaGUgaG9zdCBuYW1lIHByb3h5IHRvLlxuICAgKiBAcHJvcGVydHkge251bWJlcn0gcG9ydCAtIFRoZSBwb3J0IG51bWJlciBwcm94eSB0by5cbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IHBhdGggLSBUaGUgcGF0aCBwcm94eSB0by5cbiAgICovXG5cbiAgLyoqXG4gICAqIFJldHVybnMgcHJveHkgaW5mb3JtYXRpb24gd2hlcmUgV0RBTWFjU2VydmVyIHByb3h5IHRvLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY2FwcyAtIFRoZSBjYXBhYmlsaXRpZXMgaW4gdGhlIHNlc3Npb24uXG4gICAqIEByZXR1cm4ge1Byb3h5UHJvcGVydGllc31cbiAgICogQHRocm93cyBFcnJvciBpZiAnd2ViRHJpdmVyQWdlbnRNYWNVcmwnIGhhZCBpbnZhbGlkIFVSTFxuICAgKi9cbiAgcGFyc2VQcm94eVByb3BlcnRpZXMgKGNhcHMpIHtcbiAgICBsZXQgc2NoZW1lID0gJ2h0dHAnO1xuICAgIGlmICghY2Fwcy53ZWJEcml2ZXJBZ2VudE1hY1VybCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2NoZW1lLFxuICAgICAgICBzZXJ2ZXI6ICh0aGlzLnByb2Nlc3M/Lmhvc3QgPz8gY2Fwcy5zeXN0ZW1Ib3N0KSA/PyBERUZBVUxUX1NZU1RFTV9IT1NULFxuICAgICAgICBwb3J0OiAodGhpcy5wcm9jZXNzPy5wb3J0ID8/IGNhcHMuc3lzdGVtUG9ydCkgPz8gREVGQVVMVF9TWVNURU1fUE9SVCxcbiAgICAgICAgcGF0aDogJydcbiAgICAgIH07XG4gICAgfVxuXG4gICAgbGV0IHBhcnNlZFVybDtcbiAgICB0cnkge1xuICAgICAgcGFyc2VkVXJsID0gbmV3IHVybC5VUkwoY2Fwcy53ZWJEcml2ZXJBZ2VudE1hY1VybCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB3ZWJEcml2ZXJBZ2VudE1hY1VybCwgJyR7Y2Fwcy53ZWJEcml2ZXJBZ2VudE1hY1VybH0nLCBgICtcbiAgICAgICAgYGluIHRoZSBjYXBhYmlsaXRpZXMgaXMgaW52YWxpZC4gJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBwcm90b2NvbCwgaG9zdG5hbWUsIHBvcnQsIHBhdGhuYW1lIH0gPSBwYXJzZWRVcmw7XG4gICAgaWYgKF8uaXNTdHJpbmcocHJvdG9jb2wpKSB7XG4gICAgICBzY2hlbWUgPSBwcm90b2NvbC5zcGxpdCgnOicpWzBdO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgc2NoZW1lLFxuICAgICAgc2VydmVyOiBob3N0bmFtZSA/PyBERUZBVUxUX1NZU1RFTV9IT1NULFxuICAgICAgcG9ydDogXy5pc0VtcHR5KHBvcnQpID8gREVGQVVMVF9TWVNURU1fUE9SVCA6IF8ucGFyc2VJbnQocG9ydCksXG4gICAgICBwYXRoOiBwYXRobmFtZSA9PT0gJy8nID8gJycgOiBwYXRobmFtZVxuICAgIH07XG4gIH1cblxuICBhc3luYyBzdGFydFNlc3Npb24gKGNhcHMpIHtcbiAgICB0aGlzLnNlcnZlclN0YXJ0dXBUaW1lb3V0TXMgPSBjYXBzLnNlcnZlclN0YXJ0dXBUaW1lb3V0ID8/IHRoaXMuc2VydmVyU3RhcnR1cFRpbWVvdXRNcztcblxuICAgIHRoaXMuaXNQcm94eWluZ1RvUmVtb3RlU2VydmVyID0gISFjYXBzLndlYkRyaXZlckFnZW50TWFjVXJsO1xuXG4gICAgbGV0IHdhc1Byb2Nlc3NJbml0TmVjZXNzYXJ5O1xuICAgIGlmICh0aGlzLmlzUHJveHlpbmdUb1JlbW90ZVNlcnZlcikge1xuICAgICAgaWYgKHRoaXMucHJvY2Vzcykge1xuICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3Mua2lsbCgpO1xuICAgICAgICBhd2FpdCBjbGVhbnVwT2Jzb2xldGVQcm9jZXNzZXMoKTtcbiAgICAgICAgdGhpcy5wcm9jZXNzID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgd2FzUHJvY2Vzc0luaXROZWNlc3NhcnkgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF0aGlzLnByb2Nlc3MpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzID0gbmV3IFdEQU1hY1Byb2Nlc3MoKTtcbiAgICAgIH1cbiAgICAgIHdhc1Byb2Nlc3NJbml0TmVjZXNzYXJ5ID0gYXdhaXQgdGhpcy5wcm9jZXNzLmluaXQoY2Fwcyk7XG4gICAgfVxuXG4gICAgaWYgKHdhc1Byb2Nlc3NJbml0TmVjZXNzYXJ5IHx8IHRoaXMuaXNQcm94eWluZ1RvUmVtb3RlU2VydmVyIHx8ICF0aGlzLnByb3h5KSB7XG4gICAgICBjb25zdCB7c2NoZW1lLCBzZXJ2ZXIsIHBvcnQsIHBhdGh9ID0gdGhpcy5wYXJzZVByb3h5UHJvcGVydGllcyhjYXBzKTtcbiAgICAgIHRoaXMucHJveHkgPSBuZXcgV0RBTWFjUHJveHkoe1xuICAgICAgICBzY2hlbWUsXG4gICAgICAgIHNlcnZlcixcbiAgICAgICAgcG9ydCxcbiAgICAgICAgYmFzZTogcGF0aCxcbiAgICAgICAga2VlcEFsaXZlOiB0cnVlLFxuICAgICAgfSk7XG4gICAgICB0aGlzLnByb3h5LmRpZFByb2Nlc3NFeGl0ID0gZmFsc2U7XG5cbiAgICAgIGlmICh0aGlzLnByb2Nlc3MpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzLnByb2Mub24oJ2V4aXQnLCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5wcm94eS5kaWRQcm9jZXNzRXhpdCA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0aW1lciA9IG5ldyB0aW1pbmcuVGltZXIoKS5zdGFydCgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbihhc3luYyAoKSA9PiBhd2FpdCB0aGlzLmlzUHJveHlSZWFkeSgpLCB7XG4gICAgICAgICAgd2FpdE1zOiB0aGlzLnNlcnZlclN0YXJ0dXBUaW1lb3V0TXMsXG4gICAgICAgICAgaW50ZXJ2YWxNczogMTAwMCxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmICh0aGlzLnByb2Nlc3M/LmlzUnVubmluZykge1xuICAgICAgICAgIC8vIGF2b2lkIFwiZnJvemVuXCIgcHJvY2Vzc2VzLFxuICAgICAgICAgIGF3YWl0IHRoaXMucHJvY2Vzcy5raWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKC9Db25kaXRpb24gdW5tZXQvLnRlc3QoZS5tZXNzYWdlKSkge1xuICAgICAgICAgIGNvbnN0IG1zZyA9IHRoaXMuaXNQcm94eWluZ1RvUmVtb3RlU2VydmVyXG4gICAgICAgICAgICA/IGBObyByZXNwb25zZSBmcm9tICcke3NjaGVtZX06Ly8ke3NlcnZlcn06JHtwb3J0fSR7cGF0aH0nIHdpdGhpbiAke3RoaXMuc2VydmVyU3RhcnR1cFRpbWVvdXRNc31tcyB0aW1lb3V0LmAgK1xuICAgICAgICAgICAgYFBsZWFzZSBtYWtlIHN1cmUgdGhlIHJlbW90ZSBzZXJ2ZXIgaXMgcnVubmluZyBhbmQgYWNjZXNzaWJsZSBieSBBcHBpdW1gXG4gICAgICAgICAgICA6IGBNYWMyRHJpdmVyIHNlcnZlciBpcyBub3QgbGlzdGVuaW5nIHdpdGhpbiAke3RoaXMuc2VydmVyU3RhcnR1cFRpbWVvdXRNc31tcyB0aW1lb3V0LiBgICtcbiAgICAgICAgICAgIGBUcnkgdG8gaW5jcmVhc2UgdGhlIHZhbHVlIG9mICdzZXJ2ZXJTdGFydHVwVGltZW91dCcgY2FwYWJpbGl0eSwgY2hlY2sgdGhlIHNlcnZlciBsb2dzIGAgK1xuICAgICAgICAgICAgYGFuZCBtYWtlIHN1cmUgdGhlICR7WENPREVCVUlMRH0gaG9zdCBwcm9jZXNzIGNvdWxkIGJlIHN0YXJ0ZWQgbWFudWFsbHkgZnJvbSBhIHRlcm1pbmFsYDtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5wcm9jZXNzKSB7XG4gICAgICAgIGNvbnN0IHBpZCA9IHRoaXMucHJvY2Vzcy5waWQ7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuUGlkcyA9IGF3YWl0IHRoaXMucHJvY2Vzcy5saXN0Q2hpbGRyZW5QaWRzKCk7XG4gICAgICAgIFJVTk5JTkdfUFJPQ0VTU19JRFMucHVzaCguLi5jaGlsZHJlblBpZHMsIHBpZCk7XG4gICAgICAgIHRoaXMucHJvY2Vzcy5wcm9jLm9uKCdleGl0JywgKCkgPT4gdm9pZCBfLnB1bGwoUlVOTklOR19QUk9DRVNTX0lEUywgcGlkKSk7XG4gICAgICAgIGxvZy5pbmZvKGBUaGUgaG9zdCBwcm9jZXNzIGlzIHJlYWR5IHdpdGhpbiAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsb2cuaW5mbygnVGhlIGhvc3QgcHJvY2VzcyBoYXMgYWxyZWFkeSBiZWVuIGxpc3RlbmluZy4gUHJvY2VlZGluZyB3aXRoIHNlc3Npb24gY3JlYXRpb24nKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnByb3h5LmNvbW1hbmQoJy9zZXNzaW9uJywgJ1BPU1QnLCB7XG4gICAgICBjYXBhYmlsaXRpZXM6IHtcbiAgICAgICAgZmlyc3RNYXRjaDogW3t9XSxcbiAgICAgICAgYWx3YXlzTWF0Y2g6IGNhcHMsXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzdG9wU2Vzc2lvbiAoKSB7XG4gICAgaWYgKCF0aGlzLmlzUHJveHlpbmdUb1JlbW90ZVNlcnZlciAmJiAhKHRoaXMucHJvY2Vzcz8uaXNSdW5uaW5nKSkge1xuICAgICAgbG9nLmluZm8oYE1hYzJEcml2ZXIgc2Vzc2lvbiBjYW5ub3QgYmUgc3RvcHBlZCwgYmVjYXVzZSB0aGUgc2VydmVyIGlzIG5vdCBydW5uaW5nYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJveHk/LnNlc3Npb25JZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcm94eS5jb21tYW5kKGAvc2Vzc2lvbi8ke3RoaXMucHJveHkuc2Vzc2lvbklkfWAsICdERUxFVEUnKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nLmluZm8oYE1hYzJEcml2ZXIgc2Vzc2lvbiBjYW5ub3QgYmUgZGVsZXRlZC4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5jb25zdCBXREFfTUFDX1NFUlZFUiA9IG5ldyBXREFNYWNTZXJ2ZXIoKTtcblxuZXhwb3J0IGRlZmF1bHQgV0RBX01BQ19TRVJWRVI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsSUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsTUFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksU0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUssT0FBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sUUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sVUFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsYUFBQSxHQUFBUixPQUFBO0FBQ0EsSUFBQVMsU0FBQSxHQUFBVCxPQUFBO0FBQ0EsSUFBQVUsWUFBQSxHQUFBVixPQUFBO0FBQ0EsSUFBQVcsY0FBQSxHQUFBWCxPQUFBO0FBQ0EsSUFBQVksTUFBQSxHQUFBWixPQUFBO0FBRUEsTUFBTWEsR0FBRyxHQUFHQyxlQUFNLENBQUNDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQztBQUVqRCxNQUFNQyxnQkFBZ0IsR0FBR0MsYUFBSSxDQUFDQyxPQUFPLENBQUMsSUFBQUMsb0JBQWEsRUFBQyxDQUFDLEVBQUUsbUJBQW1CLENBQUM7QUFDM0UsTUFBTUMsZ0JBQWdCLEdBQUcsNkJBQTZCO0FBQ3RELE1BQU1DLFdBQVcsR0FBR0EsQ0FBQ0MsT0FBTyxHQUFH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
|
package/build/lib/wda-mac.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wda-mac.js","names":["_lodash","_interopRequireDefault","require","_path","_url","_axios","_bluebird","_driver","_support","_strongbox","_teen_process","_asyncbox","_portscanner","_child_process","_utils","log","logger","getLogger","DEFAULT_WDA_ROOT","path","resolve","getModuleRoot","WDA_PROJECT_NAME","WDA_PROJECT","wdaRoot","RUNNER_SCHEME","DISABLE_STORE_ARG","XCODEBUILD","STARTUP_TIMEOUT_MS","DEFAULT_SYSTEM_PORT","DEFAULT_SYSTEM_HOST","DEFAULT_SHOW_SERVER_LOGS","RUNNING_PROCESS_IDS","RECENT_UPGRADE_TIMESTAMP_PATH","join","RECENT_MODULE_VERSION_ITEM_NAME","cleanupObsoleteProcesses","_","isEmpty","debug","length","util","pluralize","exec","ign","pullAll","process","once","execSync","WDAMacProxy","JWProxy","proxyCommand","url","method","body","didProcessExit","errors","InvalidContextError","WDAMacProcess","constructor","showServerLogs","port","host","bootstrapRoot","proc","isRunning","_this$proc","pid","listChildrenPids","listChildrenProcessIds","cleanupProjectIfFresh","packageInfo","JSON","parse","fs","readFile","box","strongbox","name","boxItem","getItem","timestampPath","env","HOME","exists","createItemWithContents","e","warn","message","info","version","recentModuleVersion","read","coerceVersion","write","compareVersions","args","cwd","stderr","hasSameOpts","systemPort","systemHost","isBoolean","isNil","init","opts","Error","kill","xcodebuild","which","isPortBusy","checkPortStatus","timer","timing","Timer","start","axios","delete","timeout","B","delay","waitForCondition","waitMs","intervalMs","Math","round","getDuration","asMilliSeconds","Object","assign","USE_PORT","USE_HOST","SubProcess","on","stdout","line","trim","code","signal","quote","stop","childrenPids","WDAMacServer","serverStartupTimeoutMs","proxy","isProxyingToRemoteServer","isProxyReady","throwOnExit","command","err","parseProxyProperties","caps","scheme","webDriverAgentMacUrl","_this$process","_this$process2","server","parsedUrl","URL","protocol","hostname","pathname","isString","split","parseInt","startSession","serverStartupTimeout","wasProcessInitNecessary","base","keepAlive","_this$process3","test","msg","push","pull","toFixed","capabilities","firstMatch","alwaysMatch","stopSession","_this$process4","_this$proxy","sessionId","WDA_MAC_SERVER","_default","exports","default"],"sources":["../../lib/wda-mac.js"],"sourcesContent":["import _ from 'lodash';\nimport path from 'path';\nimport url from 'url';\nimport axios from 'axios';\nimport B from 'bluebird';\nimport { JWProxy, errors } from 'appium/driver';\nimport { fs, logger, util, timing } from 'appium/support';\nimport { strongbox } from '@appium/strongbox';\nimport { SubProcess, exec } from 'teen_process';\nimport { waitForCondition } from 'asyncbox';\nimport { checkPortStatus } from 'portscanner';\nimport { execSync } from 'child_process';\nimport { listChildrenProcessIds, getModuleRoot } from './utils';\n\nconst log = logger.getLogger('WebDriverAgentMac');\n\nconst DEFAULT_WDA_ROOT = path.resolve(getModuleRoot(), 'WebDriverAgentMac');\nconst WDA_PROJECT_NAME = 'WebDriverAgentMac.xcodeproj';\nconst WDA_PROJECT = (wdaRoot = DEFAULT_WDA_ROOT) => path.resolve(wdaRoot, WDA_PROJECT_NAME);\nconst RUNNER_SCHEME = 'WebDriverAgentRunner';\nconst DISABLE_STORE_ARG = 'COMPILER_INDEX_STORE_ENABLE=NO';\nconst XCODEBUILD = 'xcodebuild';\nconst STARTUP_TIMEOUT_MS = 120000;\nconst DEFAULT_SYSTEM_PORT = 10100;\nconst DEFAULT_SYSTEM_HOST = '127.0.0.1';\nconst DEFAULT_SHOW_SERVER_LOGS = false;\nconst RUNNING_PROCESS_IDS = [];\nconst RECENT_UPGRADE_TIMESTAMP_PATH = path.join('.appium', 'webdriveragent_mac', 'upgrade.time');\nconst RECENT_MODULE_VERSION_ITEM_NAME = 'recentWdaModuleVersion';\n\n\nasync function cleanupObsoleteProcesses () {\n if (!_.isEmpty(RUNNING_PROCESS_IDS)) {\n log.debug(`Cleaning up ${RUNNING_PROCESS_IDS.length} obsolete ` +\n util.pluralize('process', RUNNING_PROCESS_IDS.length, false));\n try {\n await exec('kill', ['-9', ...RUNNING_PROCESS_IDS]);\n } catch (ign) {}\n _.pullAll(RUNNING_PROCESS_IDS, RUNNING_PROCESS_IDS);\n }\n}\n\nprocess.once('exit', () => {\n if (!_.isEmpty(RUNNING_PROCESS_IDS)) {\n try {\n execSync(`kill -9 ${RUNNING_PROCESS_IDS.join(' ')}`);\n } catch (ign) {}\n _.pullAll(RUNNING_PROCESS_IDS, RUNNING_PROCESS_IDS);\n }\n});\n\n\nclass WDAMacProxy 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 Mac2 Driver server because ` +\n 'its process is not running (probably crashed). Check the Appium log for more details');\n }\n return await super.proxyCommand(url, method, body);\n }\n}\n\nclass WDAMacProcess {\n constructor () {\n this.showServerLogs = DEFAULT_SHOW_SERVER_LOGS;\n this.port = DEFAULT_SYSTEM_PORT;\n this.host = DEFAULT_SYSTEM_HOST;\n this.bootstrapRoot = DEFAULT_WDA_ROOT;\n this.proc = null;\n }\n\n get isRunning () {\n return !!(this.proc?.isRunning);\n }\n\n get pid () {\n return this.isRunning ? this.proc.pid : null;\n }\n\n async listChildrenPids () {\n return this.pid ? (await listChildrenProcessIds(this.pid)) : [];\n }\n\n async cleanupProjectIfFresh () {\n const packageInfo = JSON.parse(await fs.readFile(path.join(getModuleRoot(), 'package.json'), 'utf8'));\n const box = strongbox(packageInfo.name);\n let boxItem = box.getItem(RECENT_MODULE_VERSION_ITEM_NAME);\n if (!boxItem) {\n const timestampPath = path.resolve(process.env.HOME, RECENT_UPGRADE_TIMESTAMP_PATH);\n if (await fs.exists(timestampPath)) {\n // TODO: It is probably a bit ugly to hardcode the recent version string,\n // TODO: hovewer it should do the job as a temporary transition trick\n // TODO: to switch from a hardcoded file path to the strongbox usage.\n try {\n boxItem = await box.createItemWithContents(RECENT_MODULE_VERSION_ITEM_NAME, '1.5.4');\n } catch (e) {\n this.log.warn(`The actual module version cannot be persisted: ${e.message}`);\n return;\n }\n } else {\n this.log.info('There is no need to perform the project cleanup. A fresh install has been detected');\n try {\n await box.createItemWithContents(RECENT_MODULE_VERSION_ITEM_NAME, packageInfo.version);\n } catch (e) {\n this.log.warn(`The actual module version cannot be persisted: ${e.message}`);\n }\n return;\n }\n }\n\n let recentModuleVersion = await boxItem.read();\n try {\n recentModuleVersion = util.coerceVersion(recentModuleVersion, true);\n } catch (e) {\n this.log.warn(`The persisted module version string has been damaged: ${e.message}`);\n this.log.info(`Updating it to '${packageInfo.version}' assuming the project clenup is not needed`);\n await boxItem.write(packageInfo.version);\n return;\n }\n\n if (util.compareVersions(recentModuleVersion, '>=', packageInfo.version)) {\n this.log.info(\n `WebDriverAgent does not need a cleanup. The project sources are up to date ` +\n `(${recentModuleVersion} >= ${packageInfo.version})`\n );\n return;\n }\n\n try {\n log.info('Performing project cleanup');\n const args = [\n 'clean',\n '-project', WDA_PROJECT(this.bootstrapRoot),\n '-scheme', RUNNER_SCHEME,\n ];\n await exec(XCODEBUILD, args, {cwd: this.bootstrapRoot});\n await boxItem.write(packageInfo.version);\n } catch (e) {\n log.warn(`Cannot perform project cleanup. Original error: ${e.stderr || e.message}`);\n }\n }\n\n hasSameOpts ({ showServerLogs, systemPort, systemHost, bootstrapRoot }) {\n if (_.isBoolean(showServerLogs) && this.showServerLogs !== showServerLogs\n || _.isNil(showServerLogs) && this.showServerLogs !== DEFAULT_SHOW_SERVER_LOGS) {\n return false;\n }\n if (systemPort && this.port !== systemPort\n || !systemPort && this.port !== DEFAULT_SYSTEM_PORT) {\n return false;\n }\n if (systemHost && this.host !== systemHost\n || !systemHost && this.host !== DEFAULT_SYSTEM_HOST) {\n return false;\n }\n if (bootstrapRoot && this.bootstrapRoot !== bootstrapRoot\n || !bootstrapRoot && this.bootstrapRoot !== DEFAULT_WDA_ROOT) {\n return false;\n }\n\n return true;\n }\n\n async init (opts = {}) {\n if (this.isRunning && this.hasSameOpts(opts)) {\n return false;\n }\n\n this.showServerLogs = opts.showServerLogs ?? this.showServerLogs;\n this.port = opts.systemPort ?? this.port;\n this.host = opts.systemHost ?? this.host;\n this.bootstrapRoot = opts.bootstrapRoot ?? this.bootstrapRoot;\n\n log.debug(`Using bootstrap root: ${this.bootstrapRoot}`);\n if (!await fs.exists(WDA_PROJECT(this.bootstrapRoot))) {\n throw new Error(`${WDA_PROJECT_NAME} does not exist at '${WDA_PROJECT(this.bootstrapRoot)}'. ` +\n `Was 'bootstrapRoot' set to a proper value?`);\n }\n\n await this.kill();\n await cleanupObsoleteProcesses();\n\n let xcodebuild;\n try {\n xcodebuild = await fs.which(XCODEBUILD);\n } catch (e) {\n throw new Error(`${XCODEBUILD} binary cannot be found in PATH. ` +\n `Please make sure that Xcode is installed on your system`);\n }\n log.debug(`Using ${XCODEBUILD} binary at '${xcodebuild}'`);\n\n await this.cleanupProjectIfFresh();\n\n log.debug(`Using ${this.host} as server host`);\n log.debug(`Using port ${this.port}`);\n const isPortBusy = async () => (await checkPortStatus(this.port, this.host)) === 'open';\n if (await isPortBusy()) {\n log.warn(`The port #${this.port} at ${this.host} is busy. ` +\n `Assuming it is an obsolete WDA server instance and ` +\n `trying to terminate it in order to start a new one`);\n const timer = new timing.Timer().start();\n try {\n await axios.delete(`http://${this.host}:${this.port}/`, {\n timeout: 5000,\n });\n // Give the server some time to finish and stop listening\n await B.delay(500);\n await waitForCondition(async () => !(await isPortBusy()), {\n waitMs: 3000,\n intervalMs: 100,\n });\n } catch (e) {\n log.warn(`Did not know how to terminate the process at ${this.host}:${this.port}: ${e.message}. ` +\n `Perhaps, it is not a WDA server, which is hogging the port?`);\n throw new Error(`The port #${this.port} at ${this.host} is busy. ` +\n `Consider setting 'systemPort' capability to another free port number and/or ` +\n `make sure previous driver sessions have been closed properly.`);\n }\n log.info(`The previously running WDA server has been successfully terminated after ` +\n `${Math.round(timer.getDuration().asMilliSeconds)}ms`);\n }\n\n const args = [\n 'build-for-testing', 'test-without-building',\n '-project', WDA_PROJECT(this.bootstrapRoot),\n '-scheme', RUNNER_SCHEME,\n DISABLE_STORE_ARG,\n ];\n const env = Object.assign({}, process.env, {\n USE_PORT: `${this.port}`,\n USE_HOST: this.host,\n });\n this.proc = new SubProcess(xcodebuild, args, {\n cwd: this.bootstrapRoot,\n env,\n });\n if (!this.showServerLogs) {\n log.info(`Mac2Driver host process logging is disabled. ` +\n `All the ${XCODEBUILD} output is going to be suppressed. ` +\n `Set the 'showServerLogs' capability to 'true' if this is an undesired behavior`);\n }\n this.proc.on('output', (stdout, stderr) => {\n if (!this.showServerLogs) {\n return;\n }\n\n const line = _.trim(stdout || stderr);\n if (line) {\n log.debug(`[${XCODEBUILD}] ${line}`);\n }\n });\n this.proc.on('exit', (code, signal) => {\n log.info(`Mac2Driver host process has exited with code ${code}, signal ${signal}`);\n });\n log.info(`Starting Mac2Driver host process: ${XCODEBUILD} ${util.quote(args)}`);\n await this.proc.start(0);\n return true;\n }\n\n async stop () {\n if (!this.isRunning) {\n return;\n }\n\n const childrenPids = await this.listChildrenPids();\n if (!_.isEmpty(childrenPids)) {\n try {\n await exec('kill', childrenPids);\n } catch (ign) {}\n }\n await this.proc.stop('SIGTERM', 3000);\n }\n\n async kill () {\n if (!this.isRunning) {\n return;\n }\n\n const childrenPids = await this.listChildrenPids();\n if (!_.isEmpty(childrenPids)) {\n try {\n await exec('kill', ['-9', ...childrenPids]);\n } catch (ign) {}\n }\n try {\n await this.proc.stop('SIGKILL');\n } catch (ign) {}\n }\n}\n\nclass WDAMacServer {\n constructor () {\n this.process = null;\n this.serverStartupTimeoutMs = STARTUP_TIMEOUT_MS;\n this.proxy = null;\n\n // To handle if the WDAMac server is proxying requests to a remote WDAMac app instance\n this.isProxyingToRemoteServer = false;\n }\n\n async isProxyReady (throwOnExit = true) {\n if (!this.proxy) {\n return false;\n }\n\n try {\n await this.proxy.command('/status', 'GET');\n return true;\n } catch (err) {\n if (throwOnExit && this.proxy.didProcessExit) {\n throw new Error(err.message);\n }\n return false;\n }\n }\n\n\n /**\n * @typedef {Object} ProxyProperties\n *\n * @property {string} scheme - The scheme proxy to.\n * @property {string} host - The host name proxy to.\n * @property {number} port - The port number proxy to.\n * @property {string} path - The path proxy to.\n */\n\n /**\n * Returns proxy information where WDAMacServer proxy to.\n *\n * @param {Object} caps - The capabilities in the session.\n * @return {ProxyProperties}\n * @throws Error if 'webDriverAgentMacUrl' had invalid URL\n */\n parseProxyProperties (caps) {\n let scheme = 'http';\n if (!caps.webDriverAgentMacUrl) {\n return {\n scheme,\n server: (this.process?.host ?? caps.systemHost) ?? DEFAULT_SYSTEM_HOST,\n port: (this.process?.port ?? caps.systemPort) ?? DEFAULT_SYSTEM_PORT,\n path: ''\n };\n }\n\n let parsedUrl;\n try {\n parsedUrl = new url.URL(caps.webDriverAgentMacUrl);\n } catch (e) {\n throw new Error(`webDriverAgentMacUrl, '${caps.webDriverAgentMacUrl}', ` +\n `in the capabilities is invalid. ${e.message}`);\n }\n\n const { protocol, hostname, port, pathname } = parsedUrl;\n if (_.isString(protocol)) {\n scheme = protocol.split(':')[0];\n }\n return {\n scheme,\n server: hostname ?? DEFAULT_SYSTEM_HOST,\n port: _.isEmpty(port) ? DEFAULT_SYSTEM_PORT : _.parseInt(port),\n path: pathname === '/' ? '' : pathname\n };\n }\n\n async startSession (caps) {\n this.serverStartupTimeoutMs = caps.serverStartupTimeout ?? this.serverStartupTimeoutMs;\n\n this.isProxyingToRemoteServer = !!caps.webDriverAgentMacUrl;\n\n let wasProcessInitNecessary;\n if (this.isProxyingToRemoteServer) {\n if (this.process) {\n await this.process.kill();\n await cleanupObsoleteProcesses();\n this.process = null;\n }\n\n wasProcessInitNecessary = false;\n } else {\n if (!this.process) {\n this.process = new WDAMacProcess();\n }\n wasProcessInitNecessary = await this.process.init(caps);\n }\n\n if (wasProcessInitNecessary || this.isProxyingToRemoteServer || !this.proxy) {\n const {scheme, server, port, path} = this.parseProxyProperties(caps);\n this.proxy = new WDAMacProxy({\n scheme,\n server,\n port,\n base: path,\n keepAlive: true,\n });\n this.proxy.didProcessExit = false;\n\n if (this.process) {\n this.process.proc.on('exit', () => {\n this.proxy.didProcessExit = true;\n });\n }\n\n const timer = new timing.Timer().start();\n try {\n await waitForCondition(async () => await this.isProxyReady(), {\n waitMs: this.serverStartupTimeoutMs,\n intervalMs: 1000,\n });\n } catch (e) {\n if (this.process?.isRunning) {\n // avoid \"frozen\" processes,\n await this.process.kill();\n }\n if (/Condition unmet/.test(e.message)) {\n const msg = this.isProxyingToRemoteServer\n ? `No response from '${scheme}://${server}:${port}${path}' within ${this.serverStartupTimeoutMs}ms timeout.` +\n `Please make sure the remote server is running and accessible by Appium`\n : `Mac2Driver server is not listening within ${this.serverStartupTimeoutMs}ms timeout. ` +\n `Try to increase the value of 'serverStartupTimeout' capability, check the server logs ` +\n `and make sure the ${XCODEBUILD} host process could be started manually from a terminal`;\n throw new Error(msg);\n }\n throw e;\n }\n\n if (this.process) {\n const pid = this.process.pid;\n const childrenPids = await this.process.listChildrenPids();\n RUNNING_PROCESS_IDS.push(...childrenPids, pid);\n this.process.proc.on('exit', () => void _.pull(RUNNING_PROCESS_IDS, pid));\n log.info(`The host process is ready within ${timer.getDuration().asMilliSeconds.toFixed(0)}ms`);\n }\n } else {\n log.info('The host process has already been listening. Proceeding with session creation');\n }\n\n await this.proxy.command('/session', 'POST', {\n capabilities: {\n firstMatch: [{}],\n alwaysMatch: caps,\n }\n });\n }\n\n async stopSession () {\n if (!this.isProxyingToRemoteServer && !(this.process?.isRunning)) {\n log.info(`Mac2Driver 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 log.info(`Mac2Driver session cannot be deleted. Original error: ${e.message}`);\n }\n }\n }\n}\n\nconst WDA_MAC_SERVER = new WDAMacServer();\n\nexport default WDA_MAC_SERVER;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wda-mac.js","names":["_lodash","_interopRequireDefault","require","_path","_url","_axios","_bluebird","_driver","_support","_strongbox","_teen_process","_asyncbox","_portscanner","_child_process","_utils","log","logger","getLogger","DEFAULT_WDA_ROOT","path","resolve","getModuleRoot","WDA_PROJECT_NAME","WDA_PROJECT","wdaRoot","RUNNER_SCHEME","DISABLE_STORE_ARG","XCODEBUILD","STARTUP_TIMEOUT_MS","DEFAULT_SYSTEM_PORT","DEFAULT_SYSTEM_HOST","DEFAULT_SHOW_SERVER_LOGS","RUNNING_PROCESS_IDS","RECENT_UPGRADE_TIMESTAMP_PATH","join","RECENT_MODULE_VERSION_ITEM_NAME","cleanupObsoleteProcesses","_","isEmpty","debug","length","util","pluralize","exec","ign","pullAll","process","once","execSync","WDAMacProxy","JWProxy","proxyCommand","url","method","body","didProcessExit","errors","InvalidContextError","WDAMacProcess","constructor","showServerLogs","port","host","bootstrapRoot","proc","isRunning","_this$proc","pid","listChildrenPids","listChildrenProcessIds","cleanupProjectIfFresh","packageInfo","JSON","parse","fs","readFile","box","strongbox","name","boxItem","getItem","timestampPath","env","HOME","exists","createItemWithContents","e","warn","message","info","version","recentModuleVersion","read","coerceVersion","write","compareVersions","args","cwd","stderr","hasSameOpts","systemPort","systemHost","isBoolean","isNil","init","opts","Error","kill","xcodebuild","which","isPortBusy","checkPortStatus","timer","timing","Timer","start","axios","delete","timeout","B","delay","waitForCondition","waitMs","intervalMs","Math","round","getDuration","asMilliSeconds","Object","assign","USE_PORT","USE_HOST","SubProcess","on","stdout","line","trim","code","signal","quote","stop","childrenPids","WDAMacServer","serverStartupTimeoutMs","proxy","isProxyingToRemoteServer","isProxyReady","throwOnExit","command","err","parseProxyProperties","caps","scheme","webDriverAgentMacUrl","_this$process","_this$process2","server","parsedUrl","URL","protocol","hostname","pathname","isString","split","parseInt","startSession","serverStartupTimeout","wasProcessInitNecessary","base","keepAlive","_this$process3","test","msg","push","pull","toFixed","capabilities","firstMatch","alwaysMatch","stopSession","_this$process4","_this$proxy","sessionId","WDA_MAC_SERVER","_default","exports","default"],"sources":["../../lib/wda-mac.js"],"sourcesContent":["import _ from 'lodash';\nimport path from 'path';\nimport url from 'url';\nimport axios from 'axios';\nimport B from 'bluebird';\nimport { JWProxy, errors } from 'appium/driver';\nimport { fs, logger, util, timing } from 'appium/support';\nimport { strongbox } from '@appium/strongbox';\nimport { SubProcess, exec } from 'teen_process';\nimport { waitForCondition } from 'asyncbox';\nimport { checkPortStatus } from 'portscanner';\nimport { execSync } from 'child_process';\nimport { listChildrenProcessIds, getModuleRoot } from './utils';\n\nconst log = logger.getLogger('WebDriverAgentMac');\n\nconst DEFAULT_WDA_ROOT = path.resolve(getModuleRoot(), 'WebDriverAgentMac');\nconst WDA_PROJECT_NAME = 'WebDriverAgentMac.xcodeproj';\nconst WDA_PROJECT = (wdaRoot = DEFAULT_WDA_ROOT) => path.resolve(wdaRoot, WDA_PROJECT_NAME);\nconst RUNNER_SCHEME = 'WebDriverAgentRunner';\nconst DISABLE_STORE_ARG = 'COMPILER_INDEX_STORE_ENABLE=NO';\nconst XCODEBUILD = 'xcodebuild';\nconst STARTUP_TIMEOUT_MS = 120000;\nconst DEFAULT_SYSTEM_PORT = 10100;\nconst DEFAULT_SYSTEM_HOST = '127.0.0.1';\nconst DEFAULT_SHOW_SERVER_LOGS = false;\nconst RUNNING_PROCESS_IDS = [];\nconst RECENT_UPGRADE_TIMESTAMP_PATH = path.join('.appium', 'webdriveragent_mac', 'upgrade.time');\nconst RECENT_MODULE_VERSION_ITEM_NAME = 'recentWdaModuleVersion';\n\n\nasync function cleanupObsoleteProcesses () {\n if (!_.isEmpty(RUNNING_PROCESS_IDS)) {\n log.debug(`Cleaning up ${RUNNING_PROCESS_IDS.length} obsolete ` +\n util.pluralize('process', RUNNING_PROCESS_IDS.length, false));\n try {\n await exec('kill', ['-9', ...RUNNING_PROCESS_IDS]);\n } catch (ign) {}\n _.pullAll(RUNNING_PROCESS_IDS, RUNNING_PROCESS_IDS);\n }\n}\n\nprocess.once('exit', () => {\n if (!_.isEmpty(RUNNING_PROCESS_IDS)) {\n try {\n execSync(`kill -9 ${RUNNING_PROCESS_IDS.join(' ')}`);\n } catch (ign) {}\n _.pullAll(RUNNING_PROCESS_IDS, RUNNING_PROCESS_IDS);\n }\n});\n\n\nclass WDAMacProxy 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 Mac2 Driver server because ` +\n 'its process is not running (probably crashed). Check the Appium log for more details');\n }\n return await super.proxyCommand(url, method, body);\n }\n}\n\nclass WDAMacProcess {\n constructor () {\n this.showServerLogs = DEFAULT_SHOW_SERVER_LOGS;\n this.port = DEFAULT_SYSTEM_PORT;\n this.host = DEFAULT_SYSTEM_HOST;\n this.bootstrapRoot = DEFAULT_WDA_ROOT;\n this.proc = null;\n }\n\n get isRunning () {\n return !!(this.proc?.isRunning);\n }\n\n get pid () {\n return this.isRunning ? this.proc.pid : null;\n }\n\n async listChildrenPids () {\n return this.pid ? (await listChildrenProcessIds(this.pid)) : [];\n }\n\n async cleanupProjectIfFresh () {\n const packageInfo = JSON.parse(await fs.readFile(path.join(getModuleRoot(), 'package.json'), 'utf8'));\n const box = strongbox(packageInfo.name);\n let boxItem = box.getItem(RECENT_MODULE_VERSION_ITEM_NAME);\n if (!boxItem) {\n const timestampPath = path.resolve(process.env.HOME, RECENT_UPGRADE_TIMESTAMP_PATH);\n if (await fs.exists(timestampPath)) {\n // TODO: It is probably a bit ugly to hardcode the recent version string,\n // TODO: hovewer it should do the job as a temporary transition trick\n // TODO: to switch from a hardcoded file path to the strongbox usage.\n try {\n boxItem = await box.createItemWithContents(RECENT_MODULE_VERSION_ITEM_NAME, '1.5.4');\n } catch (e) {\n log.warn(`The actual module version cannot be persisted: ${e.message}`);\n return;\n }\n } else {\n log.info('There is no need to perform the project cleanup. A fresh install has been detected');\n try {\n await box.createItemWithContents(RECENT_MODULE_VERSION_ITEM_NAME, packageInfo.version);\n } catch (e) {\n log.warn(`The actual module version cannot be persisted: ${e.message}`);\n }\n return;\n }\n }\n\n let recentModuleVersion = await boxItem.read();\n try {\n recentModuleVersion = util.coerceVersion(recentModuleVersion, true);\n } catch (e) {\n log.warn(`The persisted module version string has been damaged: ${e.message}`);\n log.info(`Updating it to '${packageInfo.version}' assuming the project clenup is not needed`);\n await boxItem.write(packageInfo.version);\n return;\n }\n\n if (util.compareVersions(recentModuleVersion, '>=', packageInfo.version)) {\n log.info(\n `WebDriverAgent does not need a cleanup. The project sources are up to date ` +\n `(${recentModuleVersion} >= ${packageInfo.version})`\n );\n return;\n }\n\n try {\n log.info('Performing project cleanup');\n const args = [\n 'clean',\n '-project', WDA_PROJECT(this.bootstrapRoot),\n '-scheme', RUNNER_SCHEME,\n ];\n await exec(XCODEBUILD, args, {cwd: this.bootstrapRoot});\n await boxItem.write(packageInfo.version);\n } catch (e) {\n log.warn(`Cannot perform project cleanup. Original error: ${e.stderr || e.message}`);\n }\n }\n\n hasSameOpts ({ showServerLogs, systemPort, systemHost, bootstrapRoot }) {\n if (_.isBoolean(showServerLogs) && this.showServerLogs !== showServerLogs\n || _.isNil(showServerLogs) && this.showServerLogs !== DEFAULT_SHOW_SERVER_LOGS) {\n return false;\n }\n if (systemPort && this.port !== systemPort\n || !systemPort && this.port !== DEFAULT_SYSTEM_PORT) {\n return false;\n }\n if (systemHost && this.host !== systemHost\n || !systemHost && this.host !== DEFAULT_SYSTEM_HOST) {\n return false;\n }\n if (bootstrapRoot && this.bootstrapRoot !== bootstrapRoot\n || !bootstrapRoot && this.bootstrapRoot !== DEFAULT_WDA_ROOT) {\n return false;\n }\n\n return true;\n }\n\n async init (opts = {}) {\n if (this.isRunning && this.hasSameOpts(opts)) {\n return false;\n }\n\n this.showServerLogs = opts.showServerLogs ?? this.showServerLogs;\n this.port = opts.systemPort ?? this.port;\n this.host = opts.systemHost ?? this.host;\n this.bootstrapRoot = opts.bootstrapRoot ?? this.bootstrapRoot;\n\n log.debug(`Using bootstrap root: ${this.bootstrapRoot}`);\n if (!await fs.exists(WDA_PROJECT(this.bootstrapRoot))) {\n throw new Error(`${WDA_PROJECT_NAME} does not exist at '${WDA_PROJECT(this.bootstrapRoot)}'. ` +\n `Was 'bootstrapRoot' set to a proper value?`);\n }\n\n await this.kill();\n await cleanupObsoleteProcesses();\n\n let xcodebuild;\n try {\n xcodebuild = await fs.which(XCODEBUILD);\n } catch (e) {\n throw new Error(`${XCODEBUILD} binary cannot be found in PATH. ` +\n `Please make sure that Xcode is installed on your system`);\n }\n log.debug(`Using ${XCODEBUILD} binary at '${xcodebuild}'`);\n\n await this.cleanupProjectIfFresh();\n\n log.debug(`Using ${this.host} as server host`);\n log.debug(`Using port ${this.port}`);\n const isPortBusy = async () => (await checkPortStatus(this.port, this.host)) === 'open';\n if (await isPortBusy()) {\n log.warn(`The port #${this.port} at ${this.host} is busy. ` +\n `Assuming it is an obsolete WDA server instance and ` +\n `trying to terminate it in order to start a new one`);\n const timer = new timing.Timer().start();\n try {\n await axios.delete(`http://${this.host}:${this.port}/`, {\n timeout: 5000,\n });\n // Give the server some time to finish and stop listening\n await B.delay(500);\n await waitForCondition(async () => !(await isPortBusy()), {\n waitMs: 3000,\n intervalMs: 100,\n });\n } catch (e) {\n log.warn(`Did not know how to terminate the process at ${this.host}:${this.port}: ${e.message}. ` +\n `Perhaps, it is not a WDA server, which is hogging the port?`);\n throw new Error(`The port #${this.port} at ${this.host} is busy. ` +\n `Consider setting 'systemPort' capability to another free port number and/or ` +\n `make sure previous driver sessions have been closed properly.`);\n }\n log.info(`The previously running WDA server has been successfully terminated after ` +\n `${Math.round(timer.getDuration().asMilliSeconds)}ms`);\n }\n\n const args = [\n 'build-for-testing', 'test-without-building',\n '-project', WDA_PROJECT(this.bootstrapRoot),\n '-scheme', RUNNER_SCHEME,\n DISABLE_STORE_ARG,\n ];\n const env = Object.assign({}, process.env, {\n USE_PORT: `${this.port}`,\n USE_HOST: this.host,\n });\n this.proc = new SubProcess(xcodebuild, args, {\n cwd: this.bootstrapRoot,\n env,\n });\n if (!this.showServerLogs) {\n log.info(`Mac2Driver host process logging is disabled. ` +\n `All the ${XCODEBUILD} output is going to be suppressed. ` +\n `Set the 'showServerLogs' capability to 'true' if this is an undesired behavior`);\n }\n this.proc.on('output', (stdout, stderr) => {\n if (!this.showServerLogs) {\n return;\n }\n\n const line = _.trim(stdout || stderr);\n if (line) {\n log.debug(`[${XCODEBUILD}] ${line}`);\n }\n });\n this.proc.on('exit', (code, signal) => {\n log.info(`Mac2Driver host process has exited with code ${code}, signal ${signal}`);\n });\n log.info(`Starting Mac2Driver host process: ${XCODEBUILD} ${util.quote(args)}`);\n await this.proc.start(0);\n return true;\n }\n\n async stop () {\n if (!this.isRunning) {\n return;\n }\n\n const childrenPids = await this.listChildrenPids();\n if (!_.isEmpty(childrenPids)) {\n try {\n await exec('kill', childrenPids);\n } catch (ign) {}\n }\n await this.proc.stop('SIGTERM', 3000);\n }\n\n async kill () {\n if (!this.isRunning) {\n return;\n }\n\n const childrenPids = await this.listChildrenPids();\n if (!_.isEmpty(childrenPids)) {\n try {\n await exec('kill', ['-9', ...childrenPids]);\n } catch (ign) {}\n }\n try {\n await this.proc.stop('SIGKILL');\n } catch (ign) {}\n }\n}\n\nclass WDAMacServer {\n constructor () {\n this.process = null;\n this.serverStartupTimeoutMs = STARTUP_TIMEOUT_MS;\n this.proxy = null;\n\n // To handle if the WDAMac server is proxying requests to a remote WDAMac app instance\n this.isProxyingToRemoteServer = false;\n }\n\n async isProxyReady (throwOnExit = true) {\n if (!this.proxy) {\n return false;\n }\n\n try {\n await this.proxy.command('/status', 'GET');\n return true;\n } catch (err) {\n if (throwOnExit && this.proxy.didProcessExit) {\n throw new Error(err.message);\n }\n return false;\n }\n }\n\n\n /**\n * @typedef {Object} ProxyProperties\n *\n * @property {string} scheme - The scheme proxy to.\n * @property {string} host - The host name proxy to.\n * @property {number} port - The port number proxy to.\n * @property {string} path - The path proxy to.\n */\n\n /**\n * Returns proxy information where WDAMacServer proxy to.\n *\n * @param {Object} caps - The capabilities in the session.\n * @return {ProxyProperties}\n * @throws Error if 'webDriverAgentMacUrl' had invalid URL\n */\n parseProxyProperties (caps) {\n let scheme = 'http';\n if (!caps.webDriverAgentMacUrl) {\n return {\n scheme,\n server: (this.process?.host ?? caps.systemHost) ?? DEFAULT_SYSTEM_HOST,\n port: (this.process?.port ?? caps.systemPort) ?? DEFAULT_SYSTEM_PORT,\n path: ''\n };\n }\n\n let parsedUrl;\n try {\n parsedUrl = new url.URL(caps.webDriverAgentMacUrl);\n } catch (e) {\n throw new Error(`webDriverAgentMacUrl, '${caps.webDriverAgentMacUrl}', ` +\n `in the capabilities is invalid. ${e.message}`);\n }\n\n const { protocol, hostname, port, pathname } = parsedUrl;\n if (_.isString(protocol)) {\n scheme = protocol.split(':')[0];\n }\n return {\n scheme,\n server: hostname ?? DEFAULT_SYSTEM_HOST,\n port: _.isEmpty(port) ? DEFAULT_SYSTEM_PORT : _.parseInt(port),\n path: pathname === '/' ? '' : pathname\n };\n }\n\n async startSession (caps) {\n this.serverStartupTimeoutMs = caps.serverStartupTimeout ?? this.serverStartupTimeoutMs;\n\n this.isProxyingToRemoteServer = !!caps.webDriverAgentMacUrl;\n\n let wasProcessInitNecessary;\n if (this.isProxyingToRemoteServer) {\n if (this.process) {\n await this.process.kill();\n await cleanupObsoleteProcesses();\n this.process = null;\n }\n\n wasProcessInitNecessary = false;\n } else {\n if (!this.process) {\n this.process = new WDAMacProcess();\n }\n wasProcessInitNecessary = await this.process.init(caps);\n }\n\n if (wasProcessInitNecessary || this.isProxyingToRemoteServer || !this.proxy) {\n const {scheme, server, port, path} = this.parseProxyProperties(caps);\n this.proxy = new WDAMacProxy({\n scheme,\n server,\n port,\n base: path,\n keepAlive: true,\n });\n this.proxy.didProcessExit = false;\n\n if (this.process) {\n this.process.proc.on('exit', () => {\n this.proxy.didProcessExit = true;\n });\n }\n\n const timer = new timing.Timer().start();\n try {\n await waitForCondition(async () => await this.isProxyReady(), {\n waitMs: this.serverStartupTimeoutMs,\n intervalMs: 1000,\n });\n } catch (e) {\n if (this.process?.isRunning) {\n // avoid \"frozen\" processes,\n await this.process.kill();\n }\n if (/Condition unmet/.test(e.message)) {\n const msg = this.isProxyingToRemoteServer\n ? `No response from '${scheme}://${server}:${port}${path}' within ${this.serverStartupTimeoutMs}ms timeout.` +\n `Please make sure the remote server is running and accessible by Appium`\n : `Mac2Driver server is not listening within ${this.serverStartupTimeoutMs}ms timeout. ` +\n `Try to increase the value of 'serverStartupTimeout' capability, check the server logs ` +\n `and make sure the ${XCODEBUILD} host process could be started manually from a terminal`;\n throw new Error(msg);\n }\n throw e;\n }\n\n if (this.process) {\n const pid = this.process.pid;\n const childrenPids = await this.process.listChildrenPids();\n RUNNING_PROCESS_IDS.push(...childrenPids, pid);\n this.process.proc.on('exit', () => void _.pull(RUNNING_PROCESS_IDS, pid));\n log.info(`The host process is ready within ${timer.getDuration().asMilliSeconds.toFixed(0)}ms`);\n }\n } else {\n log.info('The host process has already been listening. Proceeding with session creation');\n }\n\n await this.proxy.command('/session', 'POST', {\n capabilities: {\n firstMatch: [{}],\n alwaysMatch: caps,\n }\n });\n }\n\n async stopSession () {\n if (!this.isProxyingToRemoteServer && !(this.process?.isRunning)) {\n log.info(`Mac2Driver 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 log.info(`Mac2Driver session cannot be deleted. Original error: ${e.message}`);\n }\n }\n }\n}\n\nconst WDA_MAC_SERVER = new WDAMacServer();\n\nexport default WDA_MAC_SERVER;\n"],"mappings":"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"}
|
package/lib/wda-mac.js
CHANGED
|
@@ -95,15 +95,15 @@ class WDAMacProcess {
|
|
|
95
95
|
try {
|
|
96
96
|
boxItem = await box.createItemWithContents(RECENT_MODULE_VERSION_ITEM_NAME, '1.5.4');
|
|
97
97
|
} catch (e) {
|
|
98
|
-
|
|
98
|
+
log.warn(`The actual module version cannot be persisted: ${e.message}`);
|
|
99
99
|
return;
|
|
100
100
|
}
|
|
101
101
|
} else {
|
|
102
|
-
|
|
102
|
+
log.info('There is no need to perform the project cleanup. A fresh install has been detected');
|
|
103
103
|
try {
|
|
104
104
|
await box.createItemWithContents(RECENT_MODULE_VERSION_ITEM_NAME, packageInfo.version);
|
|
105
105
|
} catch (e) {
|
|
106
|
-
|
|
106
|
+
log.warn(`The actual module version cannot be persisted: ${e.message}`);
|
|
107
107
|
}
|
|
108
108
|
return;
|
|
109
109
|
}
|
|
@@ -113,14 +113,14 @@ class WDAMacProcess {
|
|
|
113
113
|
try {
|
|
114
114
|
recentModuleVersion = util.coerceVersion(recentModuleVersion, true);
|
|
115
115
|
} catch (e) {
|
|
116
|
-
|
|
117
|
-
|
|
116
|
+
log.warn(`The persisted module version string has been damaged: ${e.message}`);
|
|
117
|
+
log.info(`Updating it to '${packageInfo.version}' assuming the project clenup is not needed`);
|
|
118
118
|
await boxItem.write(packageInfo.version);
|
|
119
119
|
return;
|
|
120
120
|
}
|
|
121
121
|
|
|
122
122
|
if (util.compareVersions(recentModuleVersion, '>=', packageInfo.version)) {
|
|
123
|
-
|
|
123
|
+
log.info(
|
|
124
124
|
`WebDriverAgent does not need a cleanup. The project sources are up to date ` +
|
|
125
125
|
`(${recentModuleVersion} >= ${packageInfo.version})`
|
|
126
126
|
);
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "appium-mac2-driver",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.1",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "appium-mac2-driver",
|
|
9
|
-
"version": "1.6.
|
|
9
|
+
"version": "1.6.1",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@appium/strongbox": "^0.x",
|
|
@@ -937,7 +937,7 @@
|
|
|
937
937
|
}
|
|
938
938
|
},
|
|
939
939
|
"node_modules/@babel/plugin-proposal-private-property-in-object": {
|
|
940
|
-
"version": "7.21.
|
|
940
|
+
"version": "7.21.10",
|
|
941
941
|
"dev": true,
|
|
942
942
|
"license": "MIT",
|
|
943
943
|
"dependencies": {
|
|
@@ -2451,7 +2451,7 @@
|
|
|
2451
2451
|
}
|
|
2452
2452
|
},
|
|
2453
2453
|
"node_modules/@octokit/plugin-retry": {
|
|
2454
|
-
"version": "4.1.
|
|
2454
|
+
"version": "4.1.6",
|
|
2455
2455
|
"dev": true,
|
|
2456
2456
|
"license": "MIT",
|
|
2457
2457
|
"dependencies": {
|
|
@@ -2459,7 +2459,7 @@
|
|
|
2459
2459
|
"bottleneck": "^2.15.3"
|
|
2460
2460
|
},
|
|
2461
2461
|
"engines": {
|
|
2462
|
-
"node": ">=
|
|
2462
|
+
"node": ">= 14"
|
|
2463
2463
|
},
|
|
2464
2464
|
"peerDependencies": {
|
|
2465
2465
|
"@octokit/core": ">=3"
|
|
@@ -3004,7 +3004,7 @@
|
|
|
3004
3004
|
}
|
|
3005
3005
|
},
|
|
3006
3006
|
"node_modules/@sindresorhus/is": {
|
|
3007
|
-
"version": "5.4.
|
|
3007
|
+
"version": "5.4.1",
|
|
3008
3008
|
"dev": true,
|
|
3009
3009
|
"license": "MIT",
|
|
3010
3010
|
"engines": {
|
|
@@ -3381,13 +3381,13 @@
|
|
|
3381
3381
|
}
|
|
3382
3382
|
},
|
|
3383
3383
|
"node_modules/@wdio/config": {
|
|
3384
|
-
"version": "8.10.
|
|
3384
|
+
"version": "8.10.7",
|
|
3385
3385
|
"dev": true,
|
|
3386
3386
|
"license": "MIT",
|
|
3387
3387
|
"dependencies": {
|
|
3388
3388
|
"@wdio/logger": "8.10.6",
|
|
3389
3389
|
"@wdio/types": "8.10.4",
|
|
3390
|
-
"@wdio/utils": "8.10.
|
|
3390
|
+
"@wdio/utils": "8.10.7",
|
|
3391
3391
|
"decamelize": "^6.0.0",
|
|
3392
3392
|
"deepmerge-ts": "^5.0.0",
|
|
3393
3393
|
"glob": "^10.2.2",
|
|
@@ -3530,7 +3530,7 @@
|
|
|
3530
3530
|
}
|
|
3531
3531
|
},
|
|
3532
3532
|
"node_modules/@wdio/utils": {
|
|
3533
|
-
"version": "8.10.
|
|
3533
|
+
"version": "8.10.7",
|
|
3534
3534
|
"dev": true,
|
|
3535
3535
|
"license": "MIT",
|
|
3536
3536
|
"dependencies": {
|
|
@@ -4471,7 +4471,7 @@
|
|
|
4471
4471
|
}
|
|
4472
4472
|
},
|
|
4473
4473
|
"node_modules/caniuse-lite": {
|
|
4474
|
-
"version": "1.0.
|
|
4474
|
+
"version": "1.0.30001494",
|
|
4475
4475
|
"dev": true,
|
|
4476
4476
|
"funding": [
|
|
4477
4477
|
{
|
|
@@ -5100,7 +5100,7 @@
|
|
|
5100
5100
|
"license": "MIT"
|
|
5101
5101
|
},
|
|
5102
5102
|
"node_modules/cosmiconfig": {
|
|
5103
|
-
"version": "8.
|
|
5103
|
+
"version": "8.2.0",
|
|
5104
5104
|
"dev": true,
|
|
5105
5105
|
"license": "MIT",
|
|
5106
5106
|
"dependencies": {
|
|
@@ -5452,16 +5452,16 @@
|
|
|
5452
5452
|
}
|
|
5453
5453
|
},
|
|
5454
5454
|
"node_modules/devtools": {
|
|
5455
|
-
"version": "8.10.
|
|
5455
|
+
"version": "8.10.7",
|
|
5456
5456
|
"dev": true,
|
|
5457
5457
|
"license": "MIT",
|
|
5458
5458
|
"dependencies": {
|
|
5459
5459
|
"@types/node": "^20.1.0",
|
|
5460
|
-
"@wdio/config": "8.10.
|
|
5460
|
+
"@wdio/config": "8.10.7",
|
|
5461
5461
|
"@wdio/logger": "8.10.6",
|
|
5462
5462
|
"@wdio/protocols": "8.10.2",
|
|
5463
5463
|
"@wdio/types": "8.10.4",
|
|
5464
|
-
"@wdio/utils": "8.10.
|
|
5464
|
+
"@wdio/utils": "8.10.7",
|
|
5465
5465
|
"chrome-launcher": "^0.15.0",
|
|
5466
5466
|
"edge-paths": "^3.0.5",
|
|
5467
5467
|
"import-meta-resolve": "^3.0.0",
|
|
@@ -5610,7 +5610,7 @@
|
|
|
5610
5610
|
"peer": true
|
|
5611
5611
|
},
|
|
5612
5612
|
"node_modules/electron-to-chromium": {
|
|
5613
|
-
"version": "1.4.
|
|
5613
|
+
"version": "1.4.419",
|
|
5614
5614
|
"dev": true,
|
|
5615
5615
|
"license": "ISC"
|
|
5616
5616
|
},
|
|
@@ -15551,7 +15551,7 @@
|
|
|
15551
15551
|
}
|
|
15552
15552
|
},
|
|
15553
15553
|
"node_modules/tslib": {
|
|
15554
|
-
"version": "2.5.
|
|
15554
|
+
"version": "2.5.3",
|
|
15555
15555
|
"license": "0BSD"
|
|
15556
15556
|
},
|
|
15557
15557
|
"node_modules/tunnel-agent": {
|
|
@@ -15944,17 +15944,17 @@
|
|
|
15944
15944
|
}
|
|
15945
15945
|
},
|
|
15946
15946
|
"node_modules/webdriver": {
|
|
15947
|
-
"version": "8.10.
|
|
15947
|
+
"version": "8.10.7",
|
|
15948
15948
|
"dev": true,
|
|
15949
15949
|
"license": "MIT",
|
|
15950
15950
|
"dependencies": {
|
|
15951
15951
|
"@types/node": "^20.1.0",
|
|
15952
15952
|
"@types/ws": "^8.5.3",
|
|
15953
|
-
"@wdio/config": "8.10.
|
|
15953
|
+
"@wdio/config": "8.10.7",
|
|
15954
15954
|
"@wdio/logger": "8.10.6",
|
|
15955
15955
|
"@wdio/protocols": "8.10.2",
|
|
15956
15956
|
"@wdio/types": "8.10.4",
|
|
15957
|
-
"@wdio/utils": "8.10.
|
|
15957
|
+
"@wdio/utils": "8.10.7",
|
|
15958
15958
|
"deepmerge-ts": "^5.0.0",
|
|
15959
15959
|
"got": "^ 12.6.1",
|
|
15960
15960
|
"ky": "^0.33.0",
|
|
@@ -15965,22 +15965,22 @@
|
|
|
15965
15965
|
}
|
|
15966
15966
|
},
|
|
15967
15967
|
"node_modules/webdriverio": {
|
|
15968
|
-
"version": "8.10.
|
|
15968
|
+
"version": "8.10.7",
|
|
15969
15969
|
"dev": true,
|
|
15970
15970
|
"license": "MIT",
|
|
15971
15971
|
"dependencies": {
|
|
15972
15972
|
"@types/node": "^20.1.0",
|
|
15973
|
-
"@wdio/config": "8.10.
|
|
15973
|
+
"@wdio/config": "8.10.7",
|
|
15974
15974
|
"@wdio/logger": "8.10.6",
|
|
15975
15975
|
"@wdio/protocols": "8.10.2",
|
|
15976
15976
|
"@wdio/repl": "8.10.1",
|
|
15977
15977
|
"@wdio/types": "8.10.4",
|
|
15978
|
-
"@wdio/utils": "8.10.
|
|
15978
|
+
"@wdio/utils": "8.10.7",
|
|
15979
15979
|
"archiver": "^5.0.0",
|
|
15980
15980
|
"aria-query": "^5.0.0",
|
|
15981
15981
|
"css-shorthand-properties": "^1.1.1",
|
|
15982
15982
|
"css-value": "^0.0.1",
|
|
15983
|
-
"devtools": "8.10.
|
|
15983
|
+
"devtools": "8.10.7",
|
|
15984
15984
|
"devtools-protocol": "^0.0.1149535",
|
|
15985
15985
|
"grapheme-splitter": "^1.0.2",
|
|
15986
15986
|
"import-meta-resolve": "^3.0.0",
|
|
@@ -15993,7 +15993,7 @@
|
|
|
15993
15993
|
"resq": "^1.9.1",
|
|
15994
15994
|
"rgb2hex": "0.2.5",
|
|
15995
15995
|
"serialize-error": "^8.0.0",
|
|
15996
|
-
"webdriver": "8.10.
|
|
15996
|
+
"webdriver": "8.10.7"
|
|
15997
15997
|
},
|
|
15998
15998
|
"engines": {
|
|
15999
15999
|
"node": "^16.13 || >=18"
|