appium-espresso-driver 2.18.1 → 2.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/README.md +7 -0
- package/build/lib/commands/execute.js +2 -1
- package/build/lib/commands/execute.js.map +1 -1
- package/build/lib/commands/idling-resources.js +4 -1
- package/build/lib/commands/idling-resources.js.map +1 -1
- package/build/lib/server-builder.js +2 -2
- package/build/lib/server-builder.js.map +1 -1
- package/espresso-server/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk +0 -0
- package/espresso-server/app/build.gradle.kts +6 -5
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/UIThreadSynchronizer.kt +36 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/http/Router.kt +2 -0
- package/lib/commands/execute.js +1 -0
- package/lib/commands/idling-resources.js +7 -0
- package/lib/server-builder.js +1 -0
- package/npm-shrinkwrap.json +40 -44
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
## [2.20.0](https://github.com/appium/appium-espresso-driver/compare/v2.19.0...v2.20.0) (2023-03-29)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* add ability to customize espresso version ([#866](https://github.com/appium/appium-espresso-driver/issues/866)) ([8b62ecb](https://github.com/appium/appium-espresso-driver/commit/8b62ecbf2be804b3fa4a41ecfa30c3d38e3942f3))
|
|
7
|
+
|
|
8
|
+
## [2.19.0](https://github.com/appium/appium-espresso-driver/compare/v2.18.1...v2.19.0) (2023-03-26)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* Expose API to Wait For UI Thread ([#864](https://github.com/appium/appium-espresso-driver/issues/864)) ([18d71f6](https://github.com/appium/appium-espresso-driver/commit/18d71f60f4c55be608f5e80ebf69e615a900e9f5))
|
|
14
|
+
|
|
1
15
|
## [2.18.1](https://github.com/appium/appium-espresso-driver/compare/v2.18.0...v2.18.1) (2023-03-22)
|
|
2
16
|
|
|
3
17
|
|
package/README.md
CHANGED
|
@@ -247,6 +247,7 @@ minSdk | Minimum Android SDK version to compile the server for. By default the v
|
|
|
247
247
|
targetSdk | Target Android SDK version to compile the server for. By default the version from the app [build.gradle.kts](https://github.com/appium/appium-espresso-driver/blob/master/espresso-server/app/build.gradle.kts) is used | 28
|
|
248
248
|
kotlin | Kotlin version to compile the server for. By default the version from the [build.gradle.kts](https://github.com/appium/appium-espresso-driver/blob/master/espresso-server/build.gradle.kts) is used | '1.3.72'
|
|
249
249
|
composeVersion | The version for the Jetpack Compose dependencies to use for Espresso server building. By default the version from the [build.gradle.kts](https://github.com/appium/appium-espresso-driver/blob/master/espresso-server/build.gradle.kts) is used | '1.1.1'
|
|
250
|
+
espressoVersion | The version for the Espresso dependencies to use for Espresso server building. By default the version from the [build.gradle.kts](https://github.com/appium/appium-espresso-driver/blob/master/espresso-server/build.gradle.kts) is used | '3.5.0'
|
|
250
251
|
sourceCompatibility | The minimum version of JVM the project sources are compatible with. The default value is `VERSION_1_8` | VERSION_12
|
|
251
252
|
targetCompatibility | The target version of JVM the project sources are compatible with. The default value is `VERSION_1_8` | VERSION_12
|
|
252
253
|
jvmTarget | Target version of the generated JVM bytecode as a string. The default value is `1_8` | `1_10`
|
|
@@ -1121,6 +1122,12 @@ Lists all the previously registered [idling resources](https://developer.android
|
|
|
1121
1122
|
|
|
1122
1123
|
List of fully qualified class names of currently registered idling resources or an empty list if no resources have been registered yet.
|
|
1123
1124
|
|
|
1125
|
+
### mobile: waitForUIThread
|
|
1126
|
+
|
|
1127
|
+
- Wait for the UI thread to become idle, in other words, wait for the APP to become idle(https://developer.android.com/reference/androidx/test/espresso/UiController#loopMainThreadUntilIdle()).
|
|
1128
|
+
- Use case: On compose and native combination screens, it's possible for the Espresso API to block the UI thread, which can cause the app to freeze. To resolve this issue, it's recommended to explicitly call the `mobile:waitForUIThread` API, which can help to unfreeze the UI thread.
|
|
1129
|
+
|
|
1130
|
+
|
|
1124
1131
|
### mobile: unlock
|
|
1125
1132
|
|
|
1126
1133
|
Unlocks the device if it is locked. Noop if the device's screen is not locked.
|
|
@@ -57,6 +57,7 @@ extensions.executeMobile = async function executeMobile(mobileCommand, opts = {}
|
|
|
57
57
|
registerIdlingResources: 'mobileRegisterIdlingResources',
|
|
58
58
|
unregisterIdlingResources: 'mobileUnregisterIdlingResources',
|
|
59
59
|
listIdlingResources: 'mobileListIdlingResources',
|
|
60
|
+
waitForUIThread: 'mobileWaitForUIThread',
|
|
60
61
|
unlock: 'mobileUnlock',
|
|
61
62
|
refreshGpsCache: 'mobileRefreshGpsCache',
|
|
62
63
|
startMediaProjectionRecording: 'mobileStartMediaProjectionRecording',
|
|
@@ -70,4 +71,4 @@ extensions.executeMobile = async function executeMobile(mobileCommand, opts = {}
|
|
|
70
71
|
};
|
|
71
72
|
var _default = extensions;
|
|
72
73
|
exports.default = _default;
|
|
73
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
74
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZHJpdmVyIiwiZXh0ZW5zaW9ucyIsImV4ZWN1dGVNb2JpbGUiLCJtb2JpbGVDb21tYW5kIiwib3B0cyIsIm1vYmlsZUNvbW1hbmRzTWFwcGluZyIsInNoZWxsIiwiZXhlY0VtdUNvbnNvbGVDb21tYW5kIiwicGVyZm9ybUVkaXRvckFjdGlvbiIsImNoYW5nZVBlcm1pc3Npb25zIiwiZ2V0UGVybWlzc2lvbnMiLCJzdGFydFNjcmVlblN0cmVhbWluZyIsInN0b3BTY3JlZW5TdHJlYW1pbmciLCJzd2lwZSIsInNjcm9sbFRvUGFnZSIsIm5hdmlnYXRlVG8iLCJjbGlja0FjdGlvbiIsImRldmljZUluZm8iLCJpc1RvYXN0VmlzaWJsZSIsIm9wZW5EcmF3ZXIiLCJjbG9zZURyYXdlciIsInNldERhdGUiLCJzZXRUaW1lIiwiZ2V0RGV2aWNlVGltZSIsImJhY2tkb29yIiwiZmxhc2hFbGVtZW50IiwidWlhdXRvbWF0b3IiLCJ1aWF1dG9tYXRvclBhZ2VTb3VyY2UiLCJ3ZWJBdG9tcyIsImdldENvbnRleHRzIiwiZGlzbWlzc0F1dG9maWxsIiwiZ2V0Tm90aWZpY2F0aW9ucyIsImxpc3RTbXMiLCJzZW5zb3JTZXQiLCJwdXNoRmlsZSIsInB1bGxGaWxlIiwicHVsbEZvbGRlciIsImRlbGV0ZUZpbGUiLCJpc0FwcEluc3RhbGxlZCIsInF1ZXJ5QXBwU3RhdGUiLCJhY3RpdmF0ZUFwcCIsInJlbW92ZUFwcCIsInRlcm1pbmF0ZUFwcCIsImluc3RhbGxBcHAiLCJjbGVhckFwcCIsInN0YXJ0QWN0aXZpdHkiLCJzdGFydFNlcnZpY2UiLCJzdG9wU2VydmljZSIsImJyb2FkY2FzdCIsInJlZ2lzdGVySWRsaW5nUmVzb3VyY2VzIiwidW5yZWdpc3RlcklkbGluZ1Jlc291cmNlcyIsImxpc3RJZGxpbmdSZXNvdXJjZXMiLCJ3YWl0Rm9yVUlUaHJlYWQiLCJ1bmxvY2siLCJyZWZyZXNoR3BzQ2FjaGUiLCJzdGFydE1lZGlhUHJvamVjdGlvblJlY29yZGluZyIsImlzTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nUnVubmluZyIsInN0b3BNZWRpYVByb2plY3Rpb25SZWNvcmRpbmciLCJfIiwiaGFzIiwiZXJyb3JzIiwiVW5rbm93bkNvbW1hbmRFcnJvciIsImtleXMiLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2V4ZWN1dGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGVycm9ycyB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuXG5jb25zdCBleHRlbnNpb25zID0ge307XG5cbmV4dGVuc2lvbnMuZXhlY3V0ZU1vYmlsZSA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVNb2JpbGUgKG1vYmlsZUNvbW1hbmQsIG9wdHMgPSB7fSkge1xuICBjb25zdCBtb2JpbGVDb21tYW5kc01hcHBpbmcgPSB7XG4gICAgc2hlbGw6ICdtb2JpbGVTaGVsbCcsXG5cbiAgICBleGVjRW11Q29uc29sZUNvbW1hbmQ6ICdtb2JpbGVFeGVjRW11Q29uc29sZUNvbW1hbmQnLFxuXG4gICAgcGVyZm9ybUVkaXRvckFjdGlvbjogJ21vYmlsZVBlcmZvcm1FZGl0b3JBY3Rpb24nLFxuXG4gICAgY2hhbmdlUGVybWlzc2lvbnM6ICdtb2JpbGVDaGFuZ2VQZXJtaXNzaW9ucycsXG4gICAgZ2V0UGVybWlzc2lvbnM6ICdtb2JpbGVHZXRQZXJtaXNzaW9ucycsXG5cbiAgICBzdGFydFNjcmVlblN0cmVhbWluZzogJ21vYmlsZVN0YXJ0U2NyZWVuU3RyZWFtaW5nJyxcbiAgICBzdG9wU2NyZWVuU3RyZWFtaW5nOiAnbW9iaWxlU3RvcFNjcmVlblN0cmVhbWluZycsXG5cbiAgICBzd2lwZTogJ21vYmlsZVN3aXBlJyxcbiAgICBzY3JvbGxUb1BhZ2U6ICdtb2JpbGVTY3JvbGxUb1BhZ2UnLFxuICAgIG5hdmlnYXRlVG86ICdtb2JpbGVOYXZpZ2F0ZVRvJyxcbiAgICBjbGlja0FjdGlvbjogJ21vYmlsZUNsaWNrQWN0aW9uJyxcblxuICAgIGRldmljZUluZm86ICdtb2JpbGVHZXREZXZpY2VJbmZvJyxcblxuICAgIGlzVG9hc3RWaXNpYmxlOiAnbW9iaWxlSXNUb2FzdFZpc2libGUnLFxuXG4gICAgb3BlbkRyYXdlcjogJ21vYmlsZU9wZW5EcmF3ZXInLFxuICAgIGNsb3NlRHJhd2VyOiAnbW9iaWxlQ2xvc2VEcmF3ZXInLFxuXG4gICAgc2V0RGF0ZTogJ21vYmlsZVNldERhdGUnLFxuICAgIHNldFRpbWU6ICdtb2JpbGVTZXRUaW1lJyxcblxuICAgIGdldERldmljZVRpbWU6ICdtb2JpbGVHZXREZXZpY2VUaW1lJyxcblxuICAgIGJhY2tkb29yOiAnbW9iaWxlQmFja2Rvb3InLFxuXG4gICAgZmxhc2hFbGVtZW50OiAnbW9iaWxlRmxhc2hFbGVtZW50JyxcblxuICAgIHVpYXV0b21hdG9yOiAnbW9iaWxlVWlhdXRvbWF0b3InLFxuICAgIHVpYXV0b21hdG9yUGFnZVNvdXJjZTogJ21vYmlsZVVpYXV0b21hdG9yUGFnZVNvdXJjZScsXG5cbiAgICB3ZWJBdG9tczogJ21vYmlsZVdlYkF0b21zJyxcbiAgICBnZXRDb250ZXh0czogJ21vYmlsZUdldENvbnRleHRzJyxcblxuICAgIGRpc21pc3NBdXRvZmlsbDogJ21vYmlsZURpc21pc3NBdXRvZmlsbCcsXG5cbiAgICBnZXROb3RpZmljYXRpb25zOiAnbW9iaWxlR2V0Tm90aWZpY2F0aW9ucycsXG5cbiAgICBsaXN0U21zOiAnbW9iaWxlTGlzdFNtcycsXG5cbiAgICBzZW5zb3JTZXQ6ICdzZW5zb3JTZXQnLFxuXG4gICAgcHVzaEZpbGU6ICdtb2JpbGVQdXNoRmlsZScsXG4gICAgcHVsbEZpbGU6ICdtb2JpbGVQdWxsRmlsZScsXG4gICAgcHVsbEZvbGRlcjogJ21vYmlsZVB1bGxGb2xkZXInLFxuICAgIGRlbGV0ZUZpbGU6ICdtb2JpbGVEZWxldGVGaWxlJyxcblxuICAgIGlzQXBwSW5zdGFsbGVkOiAnbW9iaWxlSXNBcHBJbnN0YWxsZWQnLFxuICAgIHF1ZXJ5QXBwU3RhdGU6ICdtb2JpbGVRdWVyeUFwcFN0YXRlJyxcbiAgICBhY3RpdmF0ZUFwcDogJ21vYmlsZUFjdGl2YXRlQXBwJyxcbiAgICByZW1vdmVBcHA6ICdtb2JpbGVSZW1vdmVBcHAnLFxuICAgIHRlcm1pbmF0ZUFwcDogJ21vYmlsZVRlcm1pbmF0ZUFwcCcsXG4gICAgaW5zdGFsbEFwcDogJ21vYmlsZUluc3RhbGxBcHAnLFxuICAgIGNsZWFyQXBwOiAnbW9iaWxlQ2xlYXJBcHAnLFxuXG4gICAgc3RhcnRBY3Rpdml0eTogJ21vYmlsZVN0YXJ0QWN0aXZpdHknLFxuICAgIHN0YXJ0U2VydmljZTogJ21vYmlsZVN0YXJ0U2VydmljZScsXG4gICAgc3RvcFNlcnZpY2U6ICdtb2JpbGVTdG9wU2VydmljZScsXG4gICAgYnJvYWRjYXN0OiAnbW9iaWxlQnJvYWRjYXN0JyxcblxuICAgIHJlZ2lzdGVySWRsaW5nUmVzb3VyY2VzOiAnbW9iaWxlUmVnaXN0ZXJJZGxpbmdSZXNvdXJjZXMnLFxuICAgIHVucmVnaXN0ZXJJZGxpbmdSZXNvdXJjZXM6ICdtb2JpbGVVbnJlZ2lzdGVySWRsaW5nUmVzb3VyY2VzJyxcbiAgICBsaXN0SWRsaW5nUmVzb3VyY2VzOiAnbW9iaWxlTGlzdElkbGluZ1Jlc291cmNlcycsXG4gICAgd2FpdEZvclVJVGhyZWFkOiAnbW9iaWxlV2FpdEZvclVJVGhyZWFkJyxcblxuICAgIHVubG9jazogJ21vYmlsZVVubG9jaycsXG5cbiAgICByZWZyZXNoR3BzQ2FjaGU6ICdtb2JpbGVSZWZyZXNoR3BzQ2FjaGUnLFxuXG4gICAgc3RhcnRNZWRpYVByb2plY3Rpb25SZWNvcmRpbmc6ICdtb2JpbGVTdGFydE1lZGlhUHJvamVjdGlvblJlY29yZGluZycsXG4gICAgaXNNZWRpYVByb2plY3Rpb25SZWNvcmRpbmdSdW5uaW5nOiAnbW9iaWxlSXNNZWRpYVByb2plY3Rpb25SZWNvcmRpbmdSdW5uaW5nJyxcbiAgICBzdG9wTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nOiAnbW9iaWxlU3RvcE1lZGlhUHJvamVjdGlvblJlY29yZGluZycsXG4gIH07XG5cbiAgaWYgKCFfLmhhcyhtb2JpbGVDb21tYW5kc01hcHBpbmcsIG1vYmlsZUNvbW1hbmQpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Vbmtub3duQ29tbWFuZEVycm9yKGBVbmtub3duIG1vYmlsZSBjb21tYW5kIFwiJHttb2JpbGVDb21tYW5kfVwiLiBgICtcbiAgICAgIGBPbmx5ICR7Xy5rZXlzKG1vYmlsZUNvbW1hbmRzTWFwcGluZyl9IGNvbW1hbmRzIGFyZSBzdXBwb3J0ZWQuYCk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHRoaXNbbW9iaWxlQ29tbWFuZHNNYXBwaW5nW21vYmlsZUNvbW1hbmRdXShvcHRzKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBRUEsTUFBTUUsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUVyQkEsVUFBVSxDQUFDQyxhQUFhLEdBQUcsZUFBZUEsYUFBYUEsQ0FBRUMsYUFBYSxFQUFFQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDakYsTUFBTUMscUJBQXFCLEdBQUc7SUFDNUJDLEtBQUssRUFBRSxhQUFhO0lBRXBCQyxxQkFBcUIsRUFBRSw2QkFBNkI7SUFFcERDLG1CQUFtQixFQUFFLDJCQUEyQjtJQUVoREMsaUJBQWlCLEVBQUUseUJBQXlCO0lBQzVDQyxjQUFjLEVBQUUsc0JBQXNCO0lBRXRDQyxvQkFBb0IsRUFBRSw0QkFBNEI7SUFDbERDLG1CQUFtQixFQUFFLDJCQUEyQjtJQUVoREMsS0FBSyxFQUFFLGFBQWE7SUFDcEJDLFlBQVksRUFBRSxvQkFBb0I7SUFDbENDLFVBQVUsRUFBRSxrQkFBa0I7SUFDOUJDLFdBQVcsRUFBRSxtQkFBbUI7SUFFaENDLFVBQVUsRUFBRSxxQkFBcUI7SUFFakNDLGNBQWMsRUFBRSxzQkFBc0I7SUFFdENDLFVBQVUsRUFBRSxrQkFBa0I7SUFDOUJDLFdBQVcsRUFBRSxtQkFBbUI7SUFFaENDLE9BQU8sRUFBRSxlQUFlO0lBQ3hCQyxPQUFPLEVBQUUsZUFBZTtJQUV4QkMsYUFBYSxFQUFFLHFCQUFxQjtJQUVwQ0MsUUFBUSxFQUFFLGdCQUFnQjtJQUUxQkMsWUFBWSxFQUFFLG9CQUFvQjtJQUVsQ0MsV0FBVyxFQUFFLG1CQUFtQjtJQUNoQ0MscUJBQXFCLEVBQUUsNkJBQTZCO0lBRXBEQyxRQUFRLEVBQUUsZ0JBQWdCO0lBQzFCQyxXQUFXLEVBQUUsbUJBQW1CO0lBRWhDQyxlQUFlLEVBQUUsdUJBQXVCO0lBRXhDQyxnQkFBZ0IsRUFBRSx3QkFBd0I7SUFFMUNDLE9BQU8sRUFBRSxlQUFlO0lBRXhCQyxTQUFTLEVBQUUsV0FBVztJQUV0QkMsUUFBUSxFQUFFLGdCQUFnQjtJQUMxQkMsUUFBUSxFQUFFLGdCQUFnQjtJQUMxQkMsVUFBVSxFQUFFLGtCQUFrQjtJQUM5QkMsVUFBVSxFQUFFLGtCQUFrQjtJQUU5QkMsY0FBYyxFQUFFLHNCQUFzQjtJQUN0Q0MsYUFBYSxFQUFFLHFCQUFxQjtJQUNwQ0MsV0FBVyxFQUFFLG1CQUFtQjtJQUNoQ0MsU0FBUyxFQUFFLGlCQUFpQjtJQUM1QkMsWUFBWSxFQUFFLG9CQUFvQjtJQUNsQ0MsVUFBVSxFQUFFLGtCQUFrQjtJQUM5QkMsUUFBUSxFQUFFLGdCQUFnQjtJQUUxQkMsYUFBYSxFQUFFLHFCQUFxQjtJQUNwQ0MsWUFBWSxFQUFFLG9CQUFvQjtJQUNsQ0MsV0FBVyxFQUFFLG1CQUFtQjtJQUNoQ0MsU0FBUyxFQUFFLGlCQUFpQjtJQUU1QkMsdUJBQXVCLEVBQUUsK0JBQStCO0lBQ3hEQyx5QkFBeUIsRUFBRSxpQ0FBaUM7SUFDNURDLG1CQUFtQixFQUFFLDJCQUEyQjtJQUNoREMsZUFBZSxFQUFFLHVCQUF1QjtJQUV4Q0MsTUFBTSxFQUFFLGNBQWM7SUFFdEJDLGVBQWUsRUFBRSx1QkFBdUI7SUFFeENDLDZCQUE2QixFQUFFLHFDQUFxQztJQUNwRUMsaUNBQWlDLEVBQUUseUNBQXlDO0lBQzVFQyw0QkFBNEIsRUFBRTtFQUNoQyxDQUFDO0VBRUQsSUFBSSxDQUFDQyxlQUFDLENBQUNDLEdBQUcsQ0FBQ3RELHFCQUFxQixFQUFFRixhQUFhLENBQUMsRUFBRTtJQUNoRCxNQUFNLElBQUl5RCxjQUFNLENBQUNDLG1CQUFtQixDQUFFLDJCQUEwQjFELGFBQWMsS0FBSSxHQUMvRSxRQUFPdUQsZUFBQyxDQUFDSSxJQUFJLENBQUN6RCxxQkFBcUIsQ0FBRSwwQkFBeUIsQ0FBQztFQUNwRTtFQUNBLE9BQU8sTUFBTSxJQUFJLENBQUNBLHFCQUFxQixDQUFDRixhQUFhLENBQUMsQ0FBQyxDQUFDQyxJQUFJLENBQUM7QUFDL0QsQ0FBQztBQUFDLElBQUEyRCxRQUFBLEdBRWE5RCxVQUFVO0FBQUErRCxPQUFBLENBQUFDLE9BQUEsR0FBQUYsUUFBQSJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.js","names":["_lodash","_interopRequireDefault","require","_driver","extensions","executeMobile","mobileCommand","opts","mobileCommandsMapping","shell","execEmuConsoleCommand","performEditorAction","changePermissions","getPermissions","startScreenStreaming","stopScreenStreaming","swipe","scrollToPage","navigateTo","clickAction","deviceInfo","isToastVisible","openDrawer","closeDrawer","setDate","setTime","getDeviceTime","backdoor","flashElement","uiautomator","uiautomatorPageSource","webAtoms","getContexts","dismissAutofill","getNotifications","listSms","sensorSet","pushFile","pullFile","pullFolder","deleteFile","isAppInstalled","queryAppState","activateApp","removeApp","terminateApp","installApp","clearApp","startActivity","startService","stopService","broadcast","registerIdlingResources","unregisterIdlingResources","listIdlingResources","unlock","refreshGpsCache","startMediaProjectionRecording","isMediaProjectionRecordingRunning","stopMediaProjectionRecording","_","has","errors","UnknownCommandError","keys","_default","exports","default"],"sources":["../../../lib/commands/execute.js"],"sourcesContent":["import _ from 'lodash';\nimport { errors } from 'appium/driver';\n\nconst extensions = {};\n\nextensions.executeMobile = async function executeMobile (mobileCommand, opts = {}) {\n const mobileCommandsMapping = {\n shell: 'mobileShell',\n\n execEmuConsoleCommand: 'mobileExecEmuConsoleCommand',\n\n performEditorAction: 'mobilePerformEditorAction',\n\n changePermissions: 'mobileChangePermissions',\n getPermissions: 'mobileGetPermissions',\n\n startScreenStreaming: 'mobileStartScreenStreaming',\n stopScreenStreaming: 'mobileStopScreenStreaming',\n\n swipe: 'mobileSwipe',\n scrollToPage: 'mobileScrollToPage',\n navigateTo: 'mobileNavigateTo',\n clickAction: 'mobileClickAction',\n\n deviceInfo: 'mobileGetDeviceInfo',\n\n isToastVisible: 'mobileIsToastVisible',\n\n openDrawer: 'mobileOpenDrawer',\n closeDrawer: 'mobileCloseDrawer',\n\n setDate: 'mobileSetDate',\n setTime: 'mobileSetTime',\n\n getDeviceTime: 'mobileGetDeviceTime',\n\n backdoor: 'mobileBackdoor',\n\n flashElement: 'mobileFlashElement',\n\n uiautomator: 'mobileUiautomator',\n uiautomatorPageSource: 'mobileUiautomatorPageSource',\n\n webAtoms: 'mobileWebAtoms',\n getContexts: 'mobileGetContexts',\n\n dismissAutofill: 'mobileDismissAutofill',\n\n getNotifications: 'mobileGetNotifications',\n\n listSms: 'mobileListSms',\n\n sensorSet: 'sensorSet',\n\n pushFile: 'mobilePushFile',\n pullFile: 'mobilePullFile',\n pullFolder: 'mobilePullFolder',\n deleteFile: 'mobileDeleteFile',\n\n isAppInstalled: 'mobileIsAppInstalled',\n queryAppState: 'mobileQueryAppState',\n activateApp: 'mobileActivateApp',\n removeApp: 'mobileRemoveApp',\n terminateApp: 'mobileTerminateApp',\n installApp: 'mobileInstallApp',\n clearApp: 'mobileClearApp',\n\n startActivity: 'mobileStartActivity',\n startService: 'mobileStartService',\n stopService: 'mobileStopService',\n broadcast: 'mobileBroadcast',\n\n registerIdlingResources: 'mobileRegisterIdlingResources',\n unregisterIdlingResources: 'mobileUnregisterIdlingResources',\n listIdlingResources: 'mobileListIdlingResources',\n\n unlock: 'mobileUnlock',\n\n refreshGpsCache: 'mobileRefreshGpsCache',\n\n startMediaProjectionRecording: 'mobileStartMediaProjectionRecording',\n isMediaProjectionRecordingRunning: 'mobileIsMediaProjectionRecordingRunning',\n stopMediaProjectionRecording: 'mobileStopMediaProjectionRecording',\n };\n\n if (!_.has(mobileCommandsMapping, mobileCommand)) {\n throw new errors.UnknownCommandError(`Unknown mobile command \"${mobileCommand}\". ` +\n `Only ${_.keys(mobileCommandsMapping)} commands are supported.`);\n }\n return await this[mobileCommandsMapping[mobileCommand]](opts);\n};\n\nexport default extensions;\n"],"mappings":";;;;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AAEA,MAAME,UAAU,GAAG,CAAC,CAAC;AAErBA,UAAU,CAACC,aAAa,GAAG,eAAeA,aAAaA,CAAEC,aAAa,EAAEC,IAAI,GAAG,CAAC,CAAC,EAAE;EACjF,MAAMC,qBAAqB,GAAG;IAC5BC,KAAK,EAAE,aAAa;IAEpBC,qBAAqB,EAAE,6BAA6B;IAEpDC,mBAAmB,EAAE,2BAA2B;IAEhDC,iBAAiB,EAAE,yBAAyB;IAC5CC,cAAc,EAAE,sBAAsB;IAEtCC,oBAAoB,EAAE,4BAA4B;IAClDC,mBAAmB,EAAE,2BAA2B;IAEhDC,KAAK,EAAE,aAAa;IACpBC,YAAY,EAAE,oBAAoB;IAClCC,UAAU,EAAE,kBAAkB;IAC9BC,WAAW,EAAE,mBAAmB;IAEhCC,UAAU,EAAE,qBAAqB;IAEjCC,cAAc,EAAE,sBAAsB;IAEtCC,UAAU,EAAE,kBAAkB;IAC9BC,WAAW,EAAE,mBAAmB;IAEhCC,OAAO,EAAE,eAAe;IACxBC,OAAO,EAAE,eAAe;IAExBC,aAAa,EAAE,qBAAqB;IAEpCC,QAAQ,EAAE,gBAAgB;IAE1BC,YAAY,EAAE,oBAAoB;IAElCC,WAAW,EAAE,mBAAmB;IAChCC,qBAAqB,EAAE,6BAA6B;IAEpDC,QAAQ,EAAE,gBAAgB;IAC1BC,WAAW,EAAE,mBAAmB;IAEhCC,eAAe,EAAE,uBAAuB;IAExCC,gBAAgB,EAAE,wBAAwB;IAE1CC,OAAO,EAAE,eAAe;IAExBC,SAAS,EAAE,WAAW;IAEtBC,QAAQ,EAAE,gBAAgB;IAC1BC,QAAQ,EAAE,gBAAgB;IAC1BC,UAAU,EAAE,kBAAkB;IAC9BC,UAAU,EAAE,kBAAkB;IAE9BC,cAAc,EAAE,sBAAsB;IACtCC,aAAa,EAAE,qBAAqB;IACpCC,WAAW,EAAE,mBAAmB;IAChCC,SAAS,EAAE,iBAAiB;IAC5BC,YAAY,EAAE,oBAAoB;IAClCC,UAAU,EAAE,kBAAkB;IAC9BC,QAAQ,EAAE,gBAAgB;IAE1BC,aAAa,EAAE,qBAAqB;IACpCC,YAAY,EAAE,oBAAoB;IAClCC,WAAW,EAAE,mBAAmB;IAChCC,SAAS,EAAE,iBAAiB;IAE5BC,uBAAuB,EAAE,+BAA+B;IACxDC,yBAAyB,EAAE,iCAAiC;IAC5DC,mBAAmB,EAAE,2BAA2B;
|
|
1
|
+
{"version":3,"file":"execute.js","names":["_lodash","_interopRequireDefault","require","_driver","extensions","executeMobile","mobileCommand","opts","mobileCommandsMapping","shell","execEmuConsoleCommand","performEditorAction","changePermissions","getPermissions","startScreenStreaming","stopScreenStreaming","swipe","scrollToPage","navigateTo","clickAction","deviceInfo","isToastVisible","openDrawer","closeDrawer","setDate","setTime","getDeviceTime","backdoor","flashElement","uiautomator","uiautomatorPageSource","webAtoms","getContexts","dismissAutofill","getNotifications","listSms","sensorSet","pushFile","pullFile","pullFolder","deleteFile","isAppInstalled","queryAppState","activateApp","removeApp","terminateApp","installApp","clearApp","startActivity","startService","stopService","broadcast","registerIdlingResources","unregisterIdlingResources","listIdlingResources","waitForUIThread","unlock","refreshGpsCache","startMediaProjectionRecording","isMediaProjectionRecordingRunning","stopMediaProjectionRecording","_","has","errors","UnknownCommandError","keys","_default","exports","default"],"sources":["../../../lib/commands/execute.js"],"sourcesContent":["import _ from 'lodash';\nimport { errors } from 'appium/driver';\n\nconst extensions = {};\n\nextensions.executeMobile = async function executeMobile (mobileCommand, opts = {}) {\n const mobileCommandsMapping = {\n shell: 'mobileShell',\n\n execEmuConsoleCommand: 'mobileExecEmuConsoleCommand',\n\n performEditorAction: 'mobilePerformEditorAction',\n\n changePermissions: 'mobileChangePermissions',\n getPermissions: 'mobileGetPermissions',\n\n startScreenStreaming: 'mobileStartScreenStreaming',\n stopScreenStreaming: 'mobileStopScreenStreaming',\n\n swipe: 'mobileSwipe',\n scrollToPage: 'mobileScrollToPage',\n navigateTo: 'mobileNavigateTo',\n clickAction: 'mobileClickAction',\n\n deviceInfo: 'mobileGetDeviceInfo',\n\n isToastVisible: 'mobileIsToastVisible',\n\n openDrawer: 'mobileOpenDrawer',\n closeDrawer: 'mobileCloseDrawer',\n\n setDate: 'mobileSetDate',\n setTime: 'mobileSetTime',\n\n getDeviceTime: 'mobileGetDeviceTime',\n\n backdoor: 'mobileBackdoor',\n\n flashElement: 'mobileFlashElement',\n\n uiautomator: 'mobileUiautomator',\n uiautomatorPageSource: 'mobileUiautomatorPageSource',\n\n webAtoms: 'mobileWebAtoms',\n getContexts: 'mobileGetContexts',\n\n dismissAutofill: 'mobileDismissAutofill',\n\n getNotifications: 'mobileGetNotifications',\n\n listSms: 'mobileListSms',\n\n sensorSet: 'sensorSet',\n\n pushFile: 'mobilePushFile',\n pullFile: 'mobilePullFile',\n pullFolder: 'mobilePullFolder',\n deleteFile: 'mobileDeleteFile',\n\n isAppInstalled: 'mobileIsAppInstalled',\n queryAppState: 'mobileQueryAppState',\n activateApp: 'mobileActivateApp',\n removeApp: 'mobileRemoveApp',\n terminateApp: 'mobileTerminateApp',\n installApp: 'mobileInstallApp',\n clearApp: 'mobileClearApp',\n\n startActivity: 'mobileStartActivity',\n startService: 'mobileStartService',\n stopService: 'mobileStopService',\n broadcast: 'mobileBroadcast',\n\n registerIdlingResources: 'mobileRegisterIdlingResources',\n unregisterIdlingResources: 'mobileUnregisterIdlingResources',\n listIdlingResources: 'mobileListIdlingResources',\n waitForUIThread: 'mobileWaitForUIThread',\n\n unlock: 'mobileUnlock',\n\n refreshGpsCache: 'mobileRefreshGpsCache',\n\n startMediaProjectionRecording: 'mobileStartMediaProjectionRecording',\n isMediaProjectionRecordingRunning: 'mobileIsMediaProjectionRecordingRunning',\n stopMediaProjectionRecording: 'mobileStopMediaProjectionRecording',\n };\n\n if (!_.has(mobileCommandsMapping, mobileCommand)) {\n throw new errors.UnknownCommandError(`Unknown mobile command \"${mobileCommand}\". ` +\n `Only ${_.keys(mobileCommandsMapping)} commands are supported.`);\n }\n return await this[mobileCommandsMapping[mobileCommand]](opts);\n};\n\nexport default extensions;\n"],"mappings":";;;;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AAEA,MAAME,UAAU,GAAG,CAAC,CAAC;AAErBA,UAAU,CAACC,aAAa,GAAG,eAAeA,aAAaA,CAAEC,aAAa,EAAEC,IAAI,GAAG,CAAC,CAAC,EAAE;EACjF,MAAMC,qBAAqB,GAAG;IAC5BC,KAAK,EAAE,aAAa;IAEpBC,qBAAqB,EAAE,6BAA6B;IAEpDC,mBAAmB,EAAE,2BAA2B;IAEhDC,iBAAiB,EAAE,yBAAyB;IAC5CC,cAAc,EAAE,sBAAsB;IAEtCC,oBAAoB,EAAE,4BAA4B;IAClDC,mBAAmB,EAAE,2BAA2B;IAEhDC,KAAK,EAAE,aAAa;IACpBC,YAAY,EAAE,oBAAoB;IAClCC,UAAU,EAAE,kBAAkB;IAC9BC,WAAW,EAAE,mBAAmB;IAEhCC,UAAU,EAAE,qBAAqB;IAEjCC,cAAc,EAAE,sBAAsB;IAEtCC,UAAU,EAAE,kBAAkB;IAC9BC,WAAW,EAAE,mBAAmB;IAEhCC,OAAO,EAAE,eAAe;IACxBC,OAAO,EAAE,eAAe;IAExBC,aAAa,EAAE,qBAAqB;IAEpCC,QAAQ,EAAE,gBAAgB;IAE1BC,YAAY,EAAE,oBAAoB;IAElCC,WAAW,EAAE,mBAAmB;IAChCC,qBAAqB,EAAE,6BAA6B;IAEpDC,QAAQ,EAAE,gBAAgB;IAC1BC,WAAW,EAAE,mBAAmB;IAEhCC,eAAe,EAAE,uBAAuB;IAExCC,gBAAgB,EAAE,wBAAwB;IAE1CC,OAAO,EAAE,eAAe;IAExBC,SAAS,EAAE,WAAW;IAEtBC,QAAQ,EAAE,gBAAgB;IAC1BC,QAAQ,EAAE,gBAAgB;IAC1BC,UAAU,EAAE,kBAAkB;IAC9BC,UAAU,EAAE,kBAAkB;IAE9BC,cAAc,EAAE,sBAAsB;IACtCC,aAAa,EAAE,qBAAqB;IACpCC,WAAW,EAAE,mBAAmB;IAChCC,SAAS,EAAE,iBAAiB;IAC5BC,YAAY,EAAE,oBAAoB;IAClCC,UAAU,EAAE,kBAAkB;IAC9BC,QAAQ,EAAE,gBAAgB;IAE1BC,aAAa,EAAE,qBAAqB;IACpCC,YAAY,EAAE,oBAAoB;IAClCC,WAAW,EAAE,mBAAmB;IAChCC,SAAS,EAAE,iBAAiB;IAE5BC,uBAAuB,EAAE,+BAA+B;IACxDC,yBAAyB,EAAE,iCAAiC;IAC5DC,mBAAmB,EAAE,2BAA2B;IAChDC,eAAe,EAAE,uBAAuB;IAExCC,MAAM,EAAE,cAAc;IAEtBC,eAAe,EAAE,uBAAuB;IAExCC,6BAA6B,EAAE,qCAAqC;IACpEC,iCAAiC,EAAE,yCAAyC;IAC5EC,4BAA4B,EAAE;EAChC,CAAC;EAED,IAAI,CAACC,eAAC,CAACC,GAAG,CAACtD,qBAAqB,EAAEF,aAAa,CAAC,EAAE;IAChD,MAAM,IAAIyD,cAAM,CAACC,mBAAmB,CAAE,2BAA0B1D,aAAc,KAAI,GAC/E,QAAOuD,eAAC,CAACI,IAAI,CAACzD,qBAAqB,CAAE,0BAAyB,CAAC;EACpE;EACA,OAAO,MAAM,IAAI,CAACA,qBAAqB,CAACF,aAAa,CAAC,CAAC,CAACC,IAAI,CAAC;AAC/D,CAAC;AAAC,IAAA2D,QAAA,GAEa9D,UAAU;AAAA+D,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
|
|
@@ -17,6 +17,9 @@ commands.mobileUnregisterIdlingResources = async function mobileUnregisterIdling
|
|
|
17
17
|
commands.mobileListIdlingResources = async function mobileListIdlingResources() {
|
|
18
18
|
return await this.espresso.jwproxy.command('/appium/execute_mobile/list_idling_resources', 'GET');
|
|
19
19
|
};
|
|
20
|
+
commands.mobileWaitForUIThread = async function mobileWaitForUIThread() {
|
|
21
|
+
return await this.espresso.jwproxy.command('/appium/execute_mobile/ui_thread_sync', 'POST');
|
|
22
|
+
};
|
|
20
23
|
var _default = commands;
|
|
21
24
|
exports.default = _default;
|
|
22
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
25
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdXRpbHMiLCJyZXF1aXJlIiwiY29tbWFuZHMiLCJleHBvcnRzIiwibW9iaWxlUmVnaXN0ZXJJZGxpbmdSZXNvdXJjZXMiLCJvcHRzIiwiZXNwcmVzc28iLCJqd3Byb3h5IiwiY29tbWFuZCIsInJlcXVpcmVPcHRpb25zIiwibW9iaWxlVW5yZWdpc3RlcklkbGluZ1Jlc291cmNlcyIsIm1vYmlsZUxpc3RJZGxpbmdSZXNvdXJjZXMiLCJtb2JpbGVXYWl0Rm9yVUlUaHJlYWQiLCJfZGVmYXVsdCIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvaWRsaW5nLXJlc291cmNlcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZXF1aXJlT3B0aW9ucyB9IGZyb20gJy4uL3V0aWxzJztcblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBJZGxpbmdSZXNvdXJjZXNPcHRpb25zXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IGNsYXNzTmFtZXMgLSBUaGUgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgaWRsaW5nIHJlc291cmNlcyBjbGFzcyBuYW1lcy5cbiAqIEVhY2ggbmFtZSBtdXN0IGJlIGEgZnVsbC1xdWFsaWZpZWQgamF2YSBjbGFzcyBuYW1lLCBsaWtlIGBpby5hcHBpdW0uZXNwcmVzc29zZXJ2ZXIubGliLk15SWRsaW5nUmVzb3VyY2VgLlxuICogRWFjaCBjbGFzcyBpbiB0aGUgYXBwIHNvdXJjZSBtdXN0IGltcGxlbWVudCBhIHNpbmdsZXRvbiBwYXR0ZXJuIGFuZCBoYXZlIGEgc3RhdGljIGBnZXRJbnN0YW5jZSgpYFxuICogbWV0aG9kIHJldHVybmluZyB0aGUgY2xhc3MgaW5zdGFuY2UsIHdoaWNoIGltcGxlbWVudHMgYGFuZHJvaWR4LnRlc3QuZXNwcmVzc28uSWRsaW5nUmVzb3VyY2VgXG4gKiBpbnRlcmZhY2UuIFJlYWRcbiAqIC0gaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vdHJhaW5pbmcvdGVzdGluZy9lc3ByZXNzby9pZGxpbmctcmVzb3VyY2VcbiAqIC0gaHR0cHM6Ly9hbmRyb2lkLmpsZWxzZS5ldS9pbnRlZ3JhdGUtZXNwcmVzc28taWRsaW5nLXJlc291cmNlcy1pbi15b3VyLWFwcC10by1idWlsZC1mbGV4aWJsZS11aS10ZXN0cy1jNzc5ZTI0ZjUwNTdcbiAqIGZvciBtb3JlIGRldGFpbHMgb24gaG93IHRvIGRlc2lnbiBhbmQgdXNlIGlkbGluZyByZXNvdXJjZXMgY29uY2VwdCBpbiBFc3ByZXNzby5cbiAqL1xuXG4vKipcbiAqIFJlZ2lzdGVycyBvbmUgb3IgbW9yZSBpZGxpbmcgcmVzb3VyY2VzXG4gKlxuICogQHBhcmFtIHtJZGxpbmdSZXNvdXJjZXNPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGEgZmFpbHVyZSB3aGlsZSBwYXJzaW5nIG9wdGlvbnMgb3IgcmVnaXN0ZXJpbmdcbiAqIHRoZSBhY3R1YWwgaW5zdGFuY2VzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVJlZ2lzdGVySWRsaW5nUmVzb3VyY2VzID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlUmVnaXN0ZXJJZGxpbmdSZXNvdXJjZXMgKG9wdHMgPSB7fSkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvcmVnaXN0ZXJfaWRsaW5nX3Jlc291cmNlcycsICdQT1NUJyxcbiAgICByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2NsYXNzTmFtZXMnXSkpO1xufTtcblxuLyoqXG4gKiBVbnJlZ2lzdGVycyBvbmUgb3IgbW9yZSBpZGxpbmcgcmVzb3VyY2VzXG4gKlxuICogQHBhcmFtIHtJZGxpbmdSZXNvdXJjZXNPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGEgZmFpbHVyZSB3aGlsZSBwYXJzaW5nIG9wdGlvbnMgb3IgdW5yZWdpc3RlcmluZ1xuICogdGhlIGFjdHVhbCBpbnN0YW5jZXNcbiAqL1xuY29tbWFuZHMubW9iaWxlVW5yZWdpc3RlcklkbGluZ1Jlc291cmNlcyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVVucmVnaXN0ZXJJZGxpbmdSZXNvdXJjZXMgKG9wdHMgPSB7fSkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvdW5yZWdpc3Rlcl9pZGxpbmdfcmVzb3VyY2VzJywgJ1BPU1QnLFxuICAgIHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnY2xhc3NOYW1lcyddKSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBsaXN0IG9mIGN1cnJlbnRseSByZWdpc3RlcmVkIGlkbGluZyByZXNvdXJjZXNcbiAqIG9yIGFuIGVtcHR5IGxpc3QgaWYgbm8gcmVzb3VyY2VzIGhhdmUgYmVlbiByZWdpc3RlcmVkIHlldC5cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nPn0gVGhlIGxpc3Qgb2YgZnVsbHkgcXVhbGlmaWVkIGNsYXNzIG5hbWVzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUxpc3RJZGxpbmdSZXNvdXJjZXMgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVMaXN0SWRsaW5nUmVzb3VyY2VzICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlL2xpc3RfaWRsaW5nX3Jlc291cmNlcycsICdHRVQnKTtcbn07XG5cbi8qKlxuICogV2FpdCBmb3IgVUkgdGhyZWFkIHRvIGJlIGlkbGUuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVdhaXRGb3JVSVRocmVhZCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVdhaXRGb3JVSVRocmVhZCAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9leGVjdXRlX21vYmlsZS91aV90aHJlYWRfc3luYycsICdQT1NUJyk7XG59O1xuXG5leHBvcnQgeyBjb21tYW5kcyB9O1xuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFFQSxNQUFNQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQUNDLE9BQUEsQ0FBQUQsUUFBQSxHQUFBQSxRQUFBO0FBcUJwQkEsUUFBUSxDQUFDRSw2QkFBNkIsR0FBRyxlQUFlQSw2QkFBNkJBLENBQUVDLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRTtFQUNoRyxPQUFPLE1BQU0sSUFBSSxDQUFDQyxRQUFRLENBQUNDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLGtEQUFrRCxFQUFFLE1BQU0sRUFDbkcsSUFBQUMscUJBQWMsRUFBQ0osSUFBSSxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBU0RILFFBQVEsQ0FBQ1EsK0JBQStCLEdBQUcsZUFBZUEsK0JBQStCQSxDQUFFTCxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDcEcsT0FBTyxNQUFNLElBQUksQ0FBQ0MsUUFBUSxDQUFDQyxPQUFPLENBQUNDLE9BQU8sQ0FBQyxvREFBb0QsRUFBRSxNQUFNLEVBQ3JHLElBQUFDLHFCQUFjLEVBQUNKLElBQUksRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7QUFDekMsQ0FBQztBQVFESCxRQUFRLENBQUNTLHlCQUF5QixHQUFHLGVBQWVBLHlCQUF5QkEsQ0FBQSxFQUFJO0VBQy9FLE9BQU8sTUFBTSxJQUFJLENBQUNMLFFBQVEsQ0FBQ0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsOENBQThDLEVBQUUsS0FBSyxDQUFDO0FBQ25HLENBQUM7QUFLRE4sUUFBUSxDQUFDVSxxQkFBcUIsR0FBRyxlQUFlQSxxQkFBcUJBLENBQUEsRUFBSTtFQUN2RSxPQUFPLE1BQU0sSUFBSSxDQUFDTixRQUFRLENBQUNDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLHVDQUF1QyxFQUFFLE1BQU0sQ0FBQztBQUM3RixDQUFDO0FBQUMsSUFBQUssUUFBQSxHQUdhWCxRQUFRO0FBQUFDLE9BQUEsQ0FBQVcsT0FBQSxHQUFBRCxRQUFBIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idling-resources.js","names":["_utils","require","commands","exports","mobileRegisterIdlingResources","opts","espresso","jwproxy","command","requireOptions","mobileUnregisterIdlingResources","mobileListIdlingResources","_default","default"],"sources":["../../../lib/commands/idling-resources.js"],"sourcesContent":["import { requireOptions } from '../utils';\n\nconst commands = {};\n\n/**\n * @typedef {Object} IdlingResourcesOptions\n * @property {!string} classNames - The comma-separated list of idling resources class names.\n * Each name must be a full-qualified java class name, like `io.appium.espressoserver.lib.MyIdlingResource`.\n * Each class in the app source must implement a singleton pattern and have a static `getInstance()`\n * method returning the class instance, which implements `androidx.test.espresso.IdlingResource`\n * interface. Read\n * - https://developer.android.com/training/testing/espresso/idling-resource\n * - https://android.jlelse.eu/integrate-espresso-idling-resources-in-your-app-to-build-flexible-ui-tests-c779e24f5057\n * for more details on how to design and use idling resources concept in Espresso.\n */\n\n/**\n * Registers one or more idling resources\n *\n * @param {IdlingResourcesOptions} opts\n * @throws {Error} If there was a failure while parsing options or registering\n * the actual instances\n */\ncommands.mobileRegisterIdlingResources = async function mobileRegisterIdlingResources (opts = {}) {\n return await this.espresso.jwproxy.command('/appium/execute_mobile/register_idling_resources', 'POST',\n requireOptions(opts, ['classNames']));\n};\n\n/**\n * Unregisters one or more idling resources\n *\n * @param {IdlingResourcesOptions} opts\n * @throws {Error} If there was a failure while parsing options or unregistering\n * the actual instances\n */\ncommands.mobileUnregisterIdlingResources = async function mobileUnregisterIdlingResources (opts = {}) {\n return await this.espresso.jwproxy.command('/appium/execute_mobile/unregister_idling_resources', 'POST',\n requireOptions(opts, ['classNames']));\n};\n\n/**\n * Returns a list of currently registered idling resources\n * or an empty list if no resources have been registered yet.\n *\n * @returns {Array<string>} The list of fully qualified class names\n */\ncommands.mobileListIdlingResources = async function mobileListIdlingResources () {\n return await this.espresso.jwproxy.command('/appium/execute_mobile/list_idling_resources', 'GET');\n};\n\nexport { commands };\nexport default commands;\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA,MAAMC,QAAQ,GAAG,CAAC,CAAC;AAACC,OAAA,CAAAD,QAAA,GAAAA,QAAA;AAqBpBA,QAAQ,CAACE,6BAA6B,GAAG,eAAeA,6BAA6BA,CAAEC,IAAI,GAAG,CAAC,CAAC,EAAE;EAChG,OAAO,MAAM,IAAI,CAACC,QAAQ,CAACC,OAAO,CAACC,OAAO,CAAC,kDAAkD,EAAE,MAAM,EACnG,IAAAC,qBAAc,EAACJ,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;AACzC,CAAC;AASDH,QAAQ,CAACQ,+BAA+B,GAAG,eAAeA,+BAA+BA,CAAEL,IAAI,GAAG,CAAC,CAAC,EAAE;EACpG,OAAO,MAAM,IAAI,CAACC,QAAQ,CAACC,OAAO,CAACC,OAAO,CAAC,oDAAoD,EAAE,MAAM,EACrG,IAAAC,qBAAc,EAACJ,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;AACzC,CAAC;AAQDH,QAAQ,CAACS,yBAAyB,GAAG,eAAeA,yBAAyBA,CAAA,EAAI;EAC/E,OAAO,MAAM,IAAI,CAACL,QAAQ,CAACC,OAAO,CAACC,OAAO,CAAC,8CAA8C,EAAE,KAAK,CAAC;AACnG,CAAC;AAAC,
|
|
1
|
+
{"version":3,"file":"idling-resources.js","names":["_utils","require","commands","exports","mobileRegisterIdlingResources","opts","espresso","jwproxy","command","requireOptions","mobileUnregisterIdlingResources","mobileListIdlingResources","mobileWaitForUIThread","_default","default"],"sources":["../../../lib/commands/idling-resources.js"],"sourcesContent":["import { requireOptions } from '../utils';\n\nconst commands = {};\n\n/**\n * @typedef {Object} IdlingResourcesOptions\n * @property {!string} classNames - The comma-separated list of idling resources class names.\n * Each name must be a full-qualified java class name, like `io.appium.espressoserver.lib.MyIdlingResource`.\n * Each class in the app source must implement a singleton pattern and have a static `getInstance()`\n * method returning the class instance, which implements `androidx.test.espresso.IdlingResource`\n * interface. Read\n * - https://developer.android.com/training/testing/espresso/idling-resource\n * - https://android.jlelse.eu/integrate-espresso-idling-resources-in-your-app-to-build-flexible-ui-tests-c779e24f5057\n * for more details on how to design and use idling resources concept in Espresso.\n */\n\n/**\n * Registers one or more idling resources\n *\n * @param {IdlingResourcesOptions} opts\n * @throws {Error} If there was a failure while parsing options or registering\n * the actual instances\n */\ncommands.mobileRegisterIdlingResources = async function mobileRegisterIdlingResources (opts = {}) {\n return await this.espresso.jwproxy.command('/appium/execute_mobile/register_idling_resources', 'POST',\n requireOptions(opts, ['classNames']));\n};\n\n/**\n * Unregisters one or more idling resources\n *\n * @param {IdlingResourcesOptions} opts\n * @throws {Error} If there was a failure while parsing options or unregistering\n * the actual instances\n */\ncommands.mobileUnregisterIdlingResources = async function mobileUnregisterIdlingResources (opts = {}) {\n return await this.espresso.jwproxy.command('/appium/execute_mobile/unregister_idling_resources', 'POST',\n requireOptions(opts, ['classNames']));\n};\n\n/**\n * Returns a list of currently registered idling resources\n * or an empty list if no resources have been registered yet.\n *\n * @returns {Array<string>} The list of fully qualified class names\n */\ncommands.mobileListIdlingResources = async function mobileListIdlingResources () {\n return await this.espresso.jwproxy.command('/appium/execute_mobile/list_idling_resources', 'GET');\n};\n\n/**\n * Wait for UI thread to be idle.\n */\ncommands.mobileWaitForUIThread = async function mobileWaitForUIThread () {\n return await this.espresso.jwproxy.command('/appium/execute_mobile/ui_thread_sync', 'POST');\n};\n\nexport { commands };\nexport default commands;\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA,MAAMC,QAAQ,GAAG,CAAC,CAAC;AAACC,OAAA,CAAAD,QAAA,GAAAA,QAAA;AAqBpBA,QAAQ,CAACE,6BAA6B,GAAG,eAAeA,6BAA6BA,CAAEC,IAAI,GAAG,CAAC,CAAC,EAAE;EAChG,OAAO,MAAM,IAAI,CAACC,QAAQ,CAACC,OAAO,CAACC,OAAO,CAAC,kDAAkD,EAAE,MAAM,EACnG,IAAAC,qBAAc,EAACJ,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;AACzC,CAAC;AASDH,QAAQ,CAACQ,+BAA+B,GAAG,eAAeA,+BAA+BA,CAAEL,IAAI,GAAG,CAAC,CAAC,EAAE;EACpG,OAAO,MAAM,IAAI,CAACC,QAAQ,CAACC,OAAO,CAACC,OAAO,CAAC,oDAAoD,EAAE,MAAM,EACrG,IAAAC,qBAAc,EAACJ,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;AACzC,CAAC;AAQDH,QAAQ,CAACS,yBAAyB,GAAG,eAAeA,yBAAyBA,CAAA,EAAI;EAC/E,OAAO,MAAM,IAAI,CAACL,QAAQ,CAACC,OAAO,CAACC,OAAO,CAAC,8CAA8C,EAAE,KAAK,CAAC;AACnG,CAAC;AAKDN,QAAQ,CAACU,qBAAqB,GAAG,eAAeA,qBAAqBA,CAAA,EAAI;EACvE,OAAO,MAAM,IAAI,CAACN,QAAQ,CAACC,OAAO,CAACC,OAAO,CAAC,uCAAuC,EAAE,MAAM,CAAC;AAC7F,CAAC;AAAC,IAAAK,QAAA,GAGaX,QAAQ;AAAAC,OAAA,CAAAW,OAAA,GAAAD,QAAA"}
|
|
@@ -20,7 +20,7 @@ const GRADLE_URL_TEMPLATE = 'https\\://services.gradle.org/distributions/gradle-
|
|
|
20
20
|
exports.GRADLE_URL_TEMPLATE = GRADLE_URL_TEMPLATE;
|
|
21
21
|
const GRADLE_MAX_ERROR_LOG_LINES = 15;
|
|
22
22
|
const DEPENDENCY_PROP_NAMES = ['additionalAppDependencies', 'additionalAndroidTestDependencies'];
|
|
23
|
-
const VERSION_KEYS = [GRADLE_VERSION_KEY, 'androidGradlePlugin', 'compileSdk', 'buildTools', 'minSdk', 'targetSdk', 'kotlin', 'sourceCompatibility', 'targetCompatibility', 'jvmTarget', 'composeVersion', 'annotationVersion'];
|
|
23
|
+
const VERSION_KEYS = [GRADLE_VERSION_KEY, 'androidGradlePlugin', 'compileSdk', 'buildTools', 'minSdk', 'targetSdk', 'kotlin', 'sourceCompatibility', 'targetCompatibility', 'jvmTarget', 'composeVersion', 'espressoVersion', 'annotationVersion'];
|
|
24
24
|
exports.VERSION_KEYS = VERSION_KEYS;
|
|
25
25
|
function buildServerSigningConfig(args) {
|
|
26
26
|
return {
|
|
@@ -159,4 +159,4 @@ class ServerBuilder {
|
|
|
159
159
|
exports.ServerBuilder = ServerBuilder;
|
|
160
160
|
var _default = ServerBuilder;
|
|
161
161
|
exports.default = _default;
|
|
162
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdGVlbl9wcm9jZXNzIiwicmVxdWlyZSIsIl9zdXBwb3J0IiwiX2xvZGFzaCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcGF0aCIsIl9vcyIsIl91dGlscyIsIkdSQURMRV9WRVJTSU9OX0tFWSIsIkdSQURMRV9VUkxfUFJFRklYIiwiR1JBRExFX1VSTF9URU1QTEFURSIsImV4cG9ydHMiLCJHUkFETEVfTUFYX0VSUk9SX0xPR19MSU5FUyIsIkRFUEVOREVOQ1lfUFJPUF9OQU1FUyIsIlZFUlNJT05fS0VZUyIsImJ1aWxkU2VydmVyU2lnbmluZ0NvbmZpZyIsImFyZ3MiLCJ6aXBBbGlnbiIsImtleXN0b3JlRmlsZSIsImtleXN0b3JlUGFzc3dvcmQiLCJrZXlBbGlhcyIsImtleVBhc3N3b3JkIiwiU2VydmVyQnVpbGRlciIsImNvbnN0cnVjdG9yIiwibG9nIiwic2VydmVyUGF0aCIsInNob3dHcmFkbGVMb2ciLCJidWlsZENvbmZpZ3VyYXRpb24iLCJ2ZXJzaW9uQ29uZmlndXJhdGlvbiIsInRvb2xzVmVyc2lvbnMiLCJzZXJ2ZXJWZXJzaW9ucyIsIl8iLCJyZWR1Y2UiLCJhY2MiLCJ2YWx1ZSIsImtleSIsImluY2x1ZGVzIiwid2FybiIsInRlc3RBcHBQYWNrYWdlIiwic2lnbmluZ0NvbmZpZyIsInByb3BOYW1lIiwiYnVpbGQiLCJzZXRHcmFkbGVXcmFwcGVyVmVyc2lvbiIsImluc2VydEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMiLCJydW5CdWlsZFByb2Nlc3MiLCJnZXRDb21tYW5kIiwiY21kIiwic3lzdGVtIiwiaXNXaW5kb3dzIiwicGF0aCIsInJlc29sdmUiLCJidWlsZFByb3BlcnR5IiwiZmlsdGVyIiwibWFwIiwic2VydmVyVmVyc2lvbiIsImdyYWRsZVByb3BlcnR5IiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJzbGljZSIsIkJvb2xlYW4iLCJwdXNoIiwia2V5cyIsInVwcGVyRmlyc3QiLCJrIiwidiIsInZlcnNpb24iLCJwcm9wZXJ0aWVzUGF0aCIsIm9yaWdpbmFsUHJvcGVydGllcyIsImZzIiwicmVhZEZpbGUiLCJuZXdQcm9wZXJ0aWVzIiwidXBkYXRlR3JhZGxlRGlzdFVybCIsIndyaXRlRmlsZSIsInByb3BlcnRpZXNDb250ZW50IiwicmVwbGFjZSIsIlJlZ0V4cCIsImVzY2FwZVJlZ0V4cCIsImhhc0FkZGl0aW9uYWxEZXBzIiwiaXNBcnJheSIsIkVycm9yIiwiaXNFbXB0eSIsImxpbmUiLCJ0cmltIiwiZGVwIiwidGVzdCIsImJ1aWxkUGF0aCIsImNvbmZpZ3VyYXRpb24iLCJwcmVmaXgiLCJkZXBzIiwiaW5mbyIsInVwZGF0ZURlcGVuZGVuY3lMaW5lcyIsImRlYnVnIiwiam9pbiIsImdyYWRsZWJ1aWxkIiwiU3ViUHJvY2VzcyIsImN3ZCIsInN0ZGlvIiwid2luZG93c1ZlcmJhdGltQXJndW1lbnRzIiwiYnVpbGRMYXN0TGluZXMiLCJsb2dNc2ciLCJvbiIsInN0YXJ0c1dpdGgiLCJFT0wiLCJsZW5ndGgiLCJzdGFydCIsImVyciIsIm1zZyIsIm1lc3NhZ2UiLCJlcnJvckFuZFRocm93IiwiX2RlZmF1bHQiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vbGliL3NlcnZlci1idWlsZGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1YlByb2Nlc3MgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgZnMsIHN5c3RlbSB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IEVPTCB9IGZyb20gJ29zJztcbmltcG9ydCB7IHVwZGF0ZURlcGVuZGVuY3lMaW5lcyB9IGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBHUkFETEVfVkVSU0lPTl9LRVkgPSAnZ3JhZGxlJztcbmNvbnN0IEdSQURMRV9VUkxfUFJFRklYID0gJ2Rpc3RyaWJ1dGlvblVybD0nO1xuY29uc3QgR1JBRExFX1VSTF9URU1QTEFURSA9ICdodHRwc1xcXFw6Ly9zZXJ2aWNlcy5ncmFkbGUub3JnL2Rpc3RyaWJ1dGlvbnMvZ3JhZGxlLVZFUlNJT04tYWxsLnppcCc7XG5jb25zdCBHUkFETEVfTUFYX0VSUk9SX0xPR19MSU5FUyA9IDE1O1xuY29uc3QgREVQRU5ERU5DWV9QUk9QX05BTUVTID0gWydhZGRpdGlvbmFsQXBwRGVwZW5kZW5jaWVzJywgJ2FkZGl0aW9uYWxBbmRyb2lkVGVzdERlcGVuZGVuY2llcyddO1xuXG5jb25zdCBWRVJTSU9OX0tFWVMgPSBbXG4gIEdSQURMRV9WRVJTSU9OX0tFWSxcbiAgJ2FuZHJvaWRHcmFkbGVQbHVnaW4nLFxuICAnY29tcGlsZVNkaycsXG4gICdidWlsZFRvb2xzJyxcbiAgJ21pblNkaycsXG4gICd0YXJnZXRTZGsnLFxuICAna290bGluJyxcbiAgJ3NvdXJjZUNvbXBhdGliaWxpdHknLFxuICAndGFyZ2V0Q29tcGF0aWJpbGl0eScsXG4gICdqdm1UYXJnZXQnLFxuICAnY29tcG9zZVZlcnNpb24nLFxuICAnYW5ub3RhdGlvblZlcnNpb24nXG5dO1xuXG5mdW5jdGlvbiBidWlsZFNlcnZlclNpZ25pbmdDb25maWcgKGFyZ3MpIHtcbiAgcmV0dXJuIHtcbiAgICB6aXBBbGlnbjogdHJ1ZSxcbiAgICBrZXlzdG9yZUZpbGU6IGFyZ3Mua2V5c3RvcmVGaWxlLFxuICAgIGtleXN0b3JlUGFzc3dvcmQ6IGFyZ3Mua2V5c3RvcmVQYXNzd29yZCxcbiAgICBrZXlBbGlhczogYXJncy5rZXlBbGlhcyxcbiAgICBrZXlQYXNzd29yZDogYXJncy5rZXlQYXNzd29yZFxuICB9O1xufVxuXG5jbGFzcyBTZXJ2ZXJCdWlsZGVyIHtcbiAgY29uc3RydWN0b3IgKGxvZywgYXJncyA9IHt9KSB7XG4gICAgdGhpcy5sb2cgPSBsb2c7XG4gICAgdGhpcy5zZXJ2ZXJQYXRoID0gYXJncy5zZXJ2ZXJQYXRoO1xuICAgIHRoaXMuc2hvd0dyYWRsZUxvZyA9IGFyZ3Muc2hvd0dyYWRsZUxvZztcblxuICAgIGNvbnN0IGJ1aWxkQ29uZmlndXJhdGlvbiA9IGFyZ3MuYnVpbGRDb25maWd1cmF0aW9uIHx8IHt9O1xuXG4gICAgY29uc3QgdmVyc2lvbkNvbmZpZ3VyYXRpb24gPSBidWlsZENvbmZpZ3VyYXRpb24udG9vbHNWZXJzaW9ucyB8fCB7fTtcbiAgICB0aGlzLnNlcnZlclZlcnNpb25zID0gXy5yZWR1Y2UodmVyc2lvbkNvbmZpZ3VyYXRpb24sIChhY2MsIHZhbHVlLCBrZXkpID0+IHtcbiAgICAgIGlmIChWRVJTSU9OX0tFWVMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICBhY2Nba2V5XSA9IHZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLndhcm4oYEdvdCB1bmV4cGVjdGVkICcke2tleX0nIGluIHRvb2xzVmVyc2lvbiBibG9jayBvZiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbmApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG5cbiAgICB0aGlzLnRlc3RBcHBQYWNrYWdlID0gYXJncy50ZXN0QXBwUGFja2FnZTtcbiAgICB0aGlzLnNpZ25pbmdDb25maWcgPSBhcmdzLnNpZ25pbmdDb25maWc7XG5cbiAgICBmb3IgKGNvbnN0IHByb3BOYW1lIG9mIERFUEVOREVOQ1lfUFJPUF9OQU1FUykge1xuICAgICAgdGhpc1twcm9wTmFtZV0gPSBidWlsZENvbmZpZ3VyYXRpb25bcHJvcE5hbWVdIHx8IFtdO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGJ1aWxkICgpIHtcbiAgICBpZiAodGhpcy5zZXJ2ZXJWZXJzaW9uc1tHUkFETEVfVkVSU0lPTl9LRVldKSB7XG4gICAgICBhd2FpdCB0aGlzLnNldEdyYWRsZVdyYXBwZXJWZXJzaW9uKHRoaXMuc2VydmVyVmVyc2lvbnNbR1JBRExFX1ZFUlNJT05fS0VZXSk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5pbnNlcnRBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKCk7XG5cbiAgICBhd2FpdCB0aGlzLnJ1bkJ1aWxkUHJvY2VzcygpO1xuICB9XG5cbiAgZ2V0Q29tbWFuZCAoKSB7XG4gICAgY29uc3QgY21kID0gc3lzdGVtLmlzV2luZG93cygpID8gJ2dyYWRsZXcuYmF0JyA6IHBhdGgucmVzb2x2ZSh0aGlzLnNlcnZlclBhdGgsICdncmFkbGV3Jyk7XG4gICAgY29uc3QgYnVpbGRQcm9wZXJ0eSA9IChrZXksIHZhbHVlKSA9PiB2YWx1ZSA/IGAtUCR7a2V5fT0ke3ZhbHVlfWAgOiBudWxsO1xuICAgIGxldCBhcmdzID0gVkVSU0lPTl9LRVlTXG4gICAgICAuZmlsdGVyKChrZXkpID0+IGtleSAhPT0gR1JBRExFX1ZFUlNJT05fS0VZKVxuICAgICAgLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IHNlcnZlclZlcnNpb24gPSB0aGlzLnNlcnZlclZlcnNpb25zW2tleV07XG4gICAgICAgIGNvbnN0IGdyYWRsZVByb3BlcnR5ID0gYGFwcGl1bSR7a2V5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpfSR7a2V5LnNsaWNlKDEpfWA7XG4gICAgICAgIHJldHVybiBidWlsZFByb3BlcnR5KGdyYWRsZVByb3BlcnR5LCBzZXJ2ZXJWZXJzaW9uKTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pO1xuXG4gICAgaWYgKHRoaXMuc2lnbmluZ0NvbmZpZykge1xuICAgICAgYXJncy5wdXNoKC4uLihcbiAgICAgICAgXy5rZXlzKHRoaXMuc2lnbmluZ0NvbmZpZylcbiAgICAgICAgLm1hcCgoa2V5KSA9PiBbYGFwcGl1bSR7Xy51cHBlckZpcnN0KGtleSl9YCwgdGhpcy5zaWduaW5nQ29uZmlnW2tleV1dKVxuICAgICAgICAubWFwKChbaywgdl0pID0+IGJ1aWxkUHJvcGVydHkoaywgdikpXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRlc3RBcHBQYWNrYWdlKSB7XG4gICAgICBhcmdzLnB1c2goYnVpbGRQcm9wZXJ0eSgnYXBwaXVtVGFyZ2V0UGFja2FnZScsIHRoaXMudGVzdEFwcFBhY2thZ2UpKTtcbiAgICB9XG4gICAgYXJncy5wdXNoKCdhcHA6YXNzZW1ibGVBbmRyb2lkVGVzdCcpO1xuXG4gICAgcmV0dXJuIHtjbWQsIGFyZ3N9O1xuICB9XG5cbiAgYXN5bmMgc2V0R3JhZGxlV3JhcHBlclZlcnNpb24gKHZlcnNpb24pIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzUGF0aCA9IHBhdGgucmVzb2x2ZSh0aGlzLnNlcnZlclBhdGgsICdncmFkbGUnLCAnd3JhcHBlcicsICdncmFkbGUtd3JhcHBlci5wcm9wZXJ0aWVzJyk7XG4gICAgY29uc3Qgb3JpZ2luYWxQcm9wZXJ0aWVzID0gYXdhaXQgZnMucmVhZEZpbGUocHJvcGVydGllc1BhdGgsICd1dGY4Jyk7XG4gICAgY29uc3QgbmV3UHJvcGVydGllcyA9IHRoaXMudXBkYXRlR3JhZGxlRGlzdFVybChvcmlnaW5hbFByb3BlcnRpZXMsIHZlcnNpb24pO1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShwcm9wZXJ0aWVzUGF0aCwgbmV3UHJvcGVydGllcywgJ3V0ZjgnKTtcbiAgfVxuXG4gIHVwZGF0ZUdyYWRsZURpc3RVcmwgKHByb3BlcnRpZXNDb250ZW50LCB2ZXJzaW9uKSB7XG4gICAgcmV0dXJuIHByb3BlcnRpZXNDb250ZW50LnJlcGxhY2UoXG4gICAgICBuZXcgUmVnRXhwKGBeKCR7Xy5lc2NhcGVSZWdFeHAoR1JBRExFX1VSTF9QUkVGSVgpfSkuKyRgLCAnZ20nKSxcbiAgICAgIGAkMSR7R1JBRExFX1VSTF9URU1QTEFURS5yZXBsYWNlKCdWRVJTSU9OJywgdmVyc2lvbil9YFxuICAgICk7XG4gIH1cblxuICBhc3luYyBpbnNlcnRBZGRpdGlvbmFsRGVwZW5kZW5jaWVzICgpIHtcbiAgICBsZXQgaGFzQWRkaXRpb25hbERlcHMgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IHByb3BOYW1lIG9mIERFUEVOREVOQ1lfUFJPUF9OQU1FUykge1xuICAgICAgaWYgKCFfLmlzQXJyYXkodGhpc1twcm9wTmFtZV0pKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7cHJvcE5hbWV9JyBtdXN0IGJlIGFuIGFycmF5YCk7XG4gICAgICB9XG4gICAgICBpZiAoXy5pc0VtcHR5KHRoaXNbcHJvcE5hbWVdLmZpbHRlcigobGluZSkgPT4gXy50cmltKGxpbmUpKSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZGVwIG9mIHRoaXNbcHJvcE5hbWVdKSB7XG4gICAgICAgIGlmICgvW1xccydcXFxcJF0vLnRlc3QoZGVwKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2luZ2xlIHF1b3RlcywgZG9sbGFyIGNoYXJhY3RlcnMgYW5kIHdoaXRlc3BhY2UgY2hhcmFjdGVycycgK1xuICAgICAgICAgICAgYCBhcmUgZGlzYWxsb3dlZCBpbiBhZGRpdGlvbmFsIGRlcGVuZGVuY2llczogJHtkZXB9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGhhc0FkZGl0aW9uYWxEZXBzID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFoYXNBZGRpdGlvbmFsRGVwcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1aWxkUGF0aCA9IHBhdGgucmVzb2x2ZSh0aGlzLnNlcnZlclBhdGgsICdhcHAnLCAnYnVpbGQuZ3JhZGxlLmt0cycpO1xuICAgIGxldCBjb25maWd1cmF0aW9uID0gYXdhaXQgZnMucmVhZEZpbGUoYnVpbGRQYXRoLCAndXRmOCcpO1xuICAgIGZvciAoY29uc3QgcHJvcE5hbWUgb2YgREVQRU5ERU5DWV9QUk9QX05BTUVTKSB7XG4gICAgICBjb25zdCBwcmVmaXggPSBwcm9wTmFtZSA9PT0gREVQRU5ERU5DWV9QUk9QX05BTUVTWzBdXG4gICAgICAgID8gJ2ltcGxlbWVudGF0aW9uJ1xuICAgICAgICA6ICdhbmRyb2lkVGVzdEltcGxlbWVudGF0aW9uJztcbiAgICAgIGNvbnN0IGRlcHMgPSB0aGlzW3Byb3BOYW1lXVxuICAgICAgICAuZmlsdGVyKChsaW5lKSA9PiBfLnRyaW0obGluZSkpXG4gICAgICAgIC5tYXAoKGxpbmUpID0+IGAke3ByZWZpeH0oXCIke2xpbmV9XCIpYCk7XG4gICAgICBpZiAoXy5pc0VtcHR5KGRlcHMpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxvZy5pbmZvKGBBZGRpbmcgdGhlIGZvbGxvd2luZyAke3Byb3BOYW1lfSB0byBidWlsZC5ncmFkbGUua3RzOiAke2RlcHN9YCk7XG4gICAgICBjb25maWd1cmF0aW9uID0gdXBkYXRlRGVwZW5kZW5jeUxpbmVzKGNvbmZpZ3VyYXRpb24sIHByb3BOYW1lLCBkZXBzKTtcbiAgICB9XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKGJ1aWxkUGF0aCwgY29uZmlndXJhdGlvbiwgJ3V0ZjgnKTtcbiAgfVxuXG4gIGFzeW5jIHJ1bkJ1aWxkUHJvY2VzcyAoKSB7XG4gICAgY29uc3Qge2NtZCwgYXJnc30gPSB0aGlzLmdldENvbW1hbmQoKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgQmVnaW5uaW5nIGJ1aWxkIHdpdGggY29tbWFuZCAnJHtjbWR9ICR7YXJncy5qb2luKCcgJyl9JyBgICtcbiAgICAgIGBpbiBkaXJlY3RvcnkgJyR7dGhpcy5zZXJ2ZXJQYXRofSdgKTtcbiAgICBjb25zdCBncmFkbGVidWlsZCA9IG5ldyBTdWJQcm9jZXNzKGNtZCwgYXJncywge1xuICAgICAgY3dkOiB0aGlzLnNlcnZlclBhdGgsXG4gICAgICBzdGRpbzogWydpZ25vcmUnLCAncGlwZScsICdwaXBlJ10sXG4gICAgICB3aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHM6IHRydWVcbiAgICB9KTtcbiAgICBsZXQgYnVpbGRMYXN0TGluZXMgPSBbXTtcblxuICAgIGNvbnN0IGxvZ01zZyA9IGBPdXRwdXQgZnJvbSBHcmFkbGUgJHt0aGlzLnNob3dHcmFkbGVMb2cgPyAnd2lsbCcgOiAnd2lsbCBub3QnfSBiZSBsb2dnZWRgO1xuICAgIHRoaXMubG9nLmRlYnVnKGAke2xvZ01zZ30uIFRvIGNoYW5nZSB0aGlzLCB1c2UgJ3Nob3dHcmFkbGVMb2cnIGRlc2lyZWQgY2FwYWJpbGl0eWApO1xuICAgIGdyYWRsZWJ1aWxkLm9uKCdzdHJlYW0tbGluZScsIChsaW5lKSA9PiB7XG4gICAgICBpZiAodGhpcy5zaG93R3JhZGxlTG9nKSB7XG4gICAgICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoJ1tTVERFUlJdJykpIHtcbiAgICAgICAgICB0aGlzLmxvZy53YXJuKGBbR3JhZGxlXSAke2xpbmV9YCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2cuaW5mbyhgW0dyYWRsZV0gJHtsaW5lfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBidWlsZExhc3RMaW5lcy5wdXNoKGAke0VPTH0ke2xpbmV9YCk7XG4gICAgICBpZiAoYnVpbGRMYXN0TGluZXMubGVuZ3RoID4gR1JBRExFX01BWF9FUlJPUl9MT0dfTElORVMpIHtcbiAgICAgICAgYnVpbGRMYXN0TGluZXMgPSBidWlsZExhc3RMaW5lcy5zbGljZSgtR1JBRExFX01BWF9FUlJPUl9MT0dfTElORVMpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGdyYWRsZWJ1aWxkLnN0YXJ0KCk7XG4gICAgICBhd2FpdCBncmFkbGVidWlsZC5qb2luKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsZXQgbXNnID0gYFVuYWJsZSB0byBidWlsZCBFc3ByZXNzbyBzZXJ2ZXIgLSAke2Vyci5tZXNzYWdlfVxcbmAgK1xuICAgICAgICBgR3JhZGxlIGVycm9yIG1lc3NhZ2U6JHtFT0x9JHtidWlsZExhc3RMaW5lc31gO1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhtc2cpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgeyBTZXJ2ZXJCdWlsZGVyLCBWRVJTSU9OX0tFWVMsIEdSQURMRV9VUkxfVEVNUExBVEUsIGJ1aWxkU2VydmVyU2lnbmluZ0NvbmZpZyB9O1xuZXhwb3J0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
|
|
162
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdGVlbl9wcm9jZXNzIiwicmVxdWlyZSIsIl9zdXBwb3J0IiwiX2xvZGFzaCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcGF0aCIsIl9vcyIsIl91dGlscyIsIkdSQURMRV9WRVJTSU9OX0tFWSIsIkdSQURMRV9VUkxfUFJFRklYIiwiR1JBRExFX1VSTF9URU1QTEFURSIsImV4cG9ydHMiLCJHUkFETEVfTUFYX0VSUk9SX0xPR19MSU5FUyIsIkRFUEVOREVOQ1lfUFJPUF9OQU1FUyIsIlZFUlNJT05fS0VZUyIsImJ1aWxkU2VydmVyU2lnbmluZ0NvbmZpZyIsImFyZ3MiLCJ6aXBBbGlnbiIsImtleXN0b3JlRmlsZSIsImtleXN0b3JlUGFzc3dvcmQiLCJrZXlBbGlhcyIsImtleVBhc3N3b3JkIiwiU2VydmVyQnVpbGRlciIsImNvbnN0cnVjdG9yIiwibG9nIiwic2VydmVyUGF0aCIsInNob3dHcmFkbGVMb2ciLCJidWlsZENvbmZpZ3VyYXRpb24iLCJ2ZXJzaW9uQ29uZmlndXJhdGlvbiIsInRvb2xzVmVyc2lvbnMiLCJzZXJ2ZXJWZXJzaW9ucyIsIl8iLCJyZWR1Y2UiLCJhY2MiLCJ2YWx1ZSIsImtleSIsImluY2x1ZGVzIiwid2FybiIsInRlc3RBcHBQYWNrYWdlIiwic2lnbmluZ0NvbmZpZyIsInByb3BOYW1lIiwiYnVpbGQiLCJzZXRHcmFkbGVXcmFwcGVyVmVyc2lvbiIsImluc2VydEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMiLCJydW5CdWlsZFByb2Nlc3MiLCJnZXRDb21tYW5kIiwiY21kIiwic3lzdGVtIiwiaXNXaW5kb3dzIiwicGF0aCIsInJlc29sdmUiLCJidWlsZFByb3BlcnR5IiwiZmlsdGVyIiwibWFwIiwic2VydmVyVmVyc2lvbiIsImdyYWRsZVByb3BlcnR5IiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJzbGljZSIsIkJvb2xlYW4iLCJwdXNoIiwia2V5cyIsInVwcGVyRmlyc3QiLCJrIiwidiIsInZlcnNpb24iLCJwcm9wZXJ0aWVzUGF0aCIsIm9yaWdpbmFsUHJvcGVydGllcyIsImZzIiwicmVhZEZpbGUiLCJuZXdQcm9wZXJ0aWVzIiwidXBkYXRlR3JhZGxlRGlzdFVybCIsIndyaXRlRmlsZSIsInByb3BlcnRpZXNDb250ZW50IiwicmVwbGFjZSIsIlJlZ0V4cCIsImVzY2FwZVJlZ0V4cCIsImhhc0FkZGl0aW9uYWxEZXBzIiwiaXNBcnJheSIsIkVycm9yIiwiaXNFbXB0eSIsImxpbmUiLCJ0cmltIiwiZGVwIiwidGVzdCIsImJ1aWxkUGF0aCIsImNvbmZpZ3VyYXRpb24iLCJwcmVmaXgiLCJkZXBzIiwiaW5mbyIsInVwZGF0ZURlcGVuZGVuY3lMaW5lcyIsImRlYnVnIiwiam9pbiIsImdyYWRsZWJ1aWxkIiwiU3ViUHJvY2VzcyIsImN3ZCIsInN0ZGlvIiwid2luZG93c1ZlcmJhdGltQXJndW1lbnRzIiwiYnVpbGRMYXN0TGluZXMiLCJsb2dNc2ciLCJvbiIsInN0YXJ0c1dpdGgiLCJFT0wiLCJsZW5ndGgiLCJzdGFydCIsImVyciIsIm1zZyIsIm1lc3NhZ2UiLCJlcnJvckFuZFRocm93IiwiX2RlZmF1bHQiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vbGliL3NlcnZlci1idWlsZGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1YlByb2Nlc3MgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgZnMsIHN5c3RlbSB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IEVPTCB9IGZyb20gJ29zJztcbmltcG9ydCB7IHVwZGF0ZURlcGVuZGVuY3lMaW5lcyB9IGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBHUkFETEVfVkVSU0lPTl9LRVkgPSAnZ3JhZGxlJztcbmNvbnN0IEdSQURMRV9VUkxfUFJFRklYID0gJ2Rpc3RyaWJ1dGlvblVybD0nO1xuY29uc3QgR1JBRExFX1VSTF9URU1QTEFURSA9ICdodHRwc1xcXFw6Ly9zZXJ2aWNlcy5ncmFkbGUub3JnL2Rpc3RyaWJ1dGlvbnMvZ3JhZGxlLVZFUlNJT04tYWxsLnppcCc7XG5jb25zdCBHUkFETEVfTUFYX0VSUk9SX0xPR19MSU5FUyA9IDE1O1xuY29uc3QgREVQRU5ERU5DWV9QUk9QX05BTUVTID0gWydhZGRpdGlvbmFsQXBwRGVwZW5kZW5jaWVzJywgJ2FkZGl0aW9uYWxBbmRyb2lkVGVzdERlcGVuZGVuY2llcyddO1xuXG5jb25zdCBWRVJTSU9OX0tFWVMgPSBbXG4gIEdSQURMRV9WRVJTSU9OX0tFWSxcbiAgJ2FuZHJvaWRHcmFkbGVQbHVnaW4nLFxuICAnY29tcGlsZVNkaycsXG4gICdidWlsZFRvb2xzJyxcbiAgJ21pblNkaycsXG4gICd0YXJnZXRTZGsnLFxuICAna290bGluJyxcbiAgJ3NvdXJjZUNvbXBhdGliaWxpdHknLFxuICAndGFyZ2V0Q29tcGF0aWJpbGl0eScsXG4gICdqdm1UYXJnZXQnLFxuICAnY29tcG9zZVZlcnNpb24nLFxuICAnZXNwcmVzc29WZXJzaW9uJyxcbiAgJ2Fubm90YXRpb25WZXJzaW9uJ1xuXTtcblxuZnVuY3Rpb24gYnVpbGRTZXJ2ZXJTaWduaW5nQ29uZmlnIChhcmdzKSB7XG4gIHJldHVybiB7XG4gICAgemlwQWxpZ246IHRydWUsXG4gICAga2V5c3RvcmVGaWxlOiBhcmdzLmtleXN0b3JlRmlsZSxcbiAgICBrZXlzdG9yZVBhc3N3b3JkOiBhcmdzLmtleXN0b3JlUGFzc3dvcmQsXG4gICAga2V5QWxpYXM6IGFyZ3Mua2V5QWxpYXMsXG4gICAga2V5UGFzc3dvcmQ6IGFyZ3Mua2V5UGFzc3dvcmRcbiAgfTtcbn1cblxuY2xhc3MgU2VydmVyQnVpbGRlciB7XG4gIGNvbnN0cnVjdG9yIChsb2csIGFyZ3MgPSB7fSkge1xuICAgIHRoaXMubG9nID0gbG9nO1xuICAgIHRoaXMuc2VydmVyUGF0aCA9IGFyZ3Muc2VydmVyUGF0aDtcbiAgICB0aGlzLnNob3dHcmFkbGVMb2cgPSBhcmdzLnNob3dHcmFkbGVMb2c7XG5cbiAgICBjb25zdCBidWlsZENvbmZpZ3VyYXRpb24gPSBhcmdzLmJ1aWxkQ29uZmlndXJhdGlvbiB8fCB7fTtcblxuICAgIGNvbnN0IHZlcnNpb25Db25maWd1cmF0aW9uID0gYnVpbGRDb25maWd1cmF0aW9uLnRvb2xzVmVyc2lvbnMgfHwge307XG4gICAgdGhpcy5zZXJ2ZXJWZXJzaW9ucyA9IF8ucmVkdWNlKHZlcnNpb25Db25maWd1cmF0aW9uLCAoYWNjLCB2YWx1ZSwga2V5KSA9PiB7XG4gICAgICBpZiAoVkVSU0lPTl9LRVlTLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgYWNjW2tleV0gPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZy53YXJuKGBHb3QgdW5leHBlY3RlZCAnJHtrZXl9JyBpbiB0b29sc1ZlcnNpb24gYmxvY2sgb2YgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuXG4gICAgdGhpcy50ZXN0QXBwUGFja2FnZSA9IGFyZ3MudGVzdEFwcFBhY2thZ2U7XG4gICAgdGhpcy5zaWduaW5nQ29uZmlnID0gYXJncy5zaWduaW5nQ29uZmlnO1xuXG4gICAgZm9yIChjb25zdCBwcm9wTmFtZSBvZiBERVBFTkRFTkNZX1BST1BfTkFNRVMpIHtcbiAgICAgIHRoaXNbcHJvcE5hbWVdID0gYnVpbGRDb25maWd1cmF0aW9uW3Byb3BOYW1lXSB8fCBbXTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBidWlsZCAoKSB7XG4gICAgaWYgKHRoaXMuc2VydmVyVmVyc2lvbnNbR1JBRExFX1ZFUlNJT05fS0VZXSkge1xuICAgICAgYXdhaXQgdGhpcy5zZXRHcmFkbGVXcmFwcGVyVmVyc2lvbih0aGlzLnNlcnZlclZlcnNpb25zW0dSQURMRV9WRVJTSU9OX0tFWV0pO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuaW5zZXJ0QWRkaXRpb25hbERlcGVuZGVuY2llcygpO1xuXG4gICAgYXdhaXQgdGhpcy5ydW5CdWlsZFByb2Nlc3MoKTtcbiAgfVxuXG4gIGdldENvbW1hbmQgKCkge1xuICAgIGNvbnN0IGNtZCA9IHN5c3RlbS5pc1dpbmRvd3MoKSA/ICdncmFkbGV3LmJhdCcgOiBwYXRoLnJlc29sdmUodGhpcy5zZXJ2ZXJQYXRoLCAnZ3JhZGxldycpO1xuICAgIGNvbnN0IGJ1aWxkUHJvcGVydHkgPSAoa2V5LCB2YWx1ZSkgPT4gdmFsdWUgPyBgLVAke2tleX09JHt2YWx1ZX1gIDogbnVsbDtcbiAgICBsZXQgYXJncyA9IFZFUlNJT05fS0VZU1xuICAgICAgLmZpbHRlcigoa2V5KSA9PiBrZXkgIT09IEdSQURMRV9WRVJTSU9OX0tFWSlcbiAgICAgIC5tYXAoKGtleSkgPT4ge1xuICAgICAgICBjb25zdCBzZXJ2ZXJWZXJzaW9uID0gdGhpcy5zZXJ2ZXJWZXJzaW9uc1trZXldO1xuICAgICAgICBjb25zdCBncmFkbGVQcm9wZXJ0eSA9IGBhcHBpdW0ke2tleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKX0ke2tleS5zbGljZSgxKX1gO1xuICAgICAgICByZXR1cm4gYnVpbGRQcm9wZXJ0eShncmFkbGVQcm9wZXJ0eSwgc2VydmVyVmVyc2lvbik7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcihCb29sZWFuKTtcblxuICAgIGlmICh0aGlzLnNpZ25pbmdDb25maWcpIHtcbiAgICAgIGFyZ3MucHVzaCguLi4oXG4gICAgICAgIF8ua2V5cyh0aGlzLnNpZ25pbmdDb25maWcpXG4gICAgICAgIC5tYXAoKGtleSkgPT4gW2BhcHBpdW0ke18udXBwZXJGaXJzdChrZXkpfWAsIHRoaXMuc2lnbmluZ0NvbmZpZ1trZXldXSlcbiAgICAgICAgLm1hcCgoW2ssIHZdKSA9PiBidWlsZFByb3BlcnR5KGssIHYpKVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICApKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50ZXN0QXBwUGFja2FnZSkge1xuICAgICAgYXJncy5wdXNoKGJ1aWxkUHJvcGVydHkoJ2FwcGl1bVRhcmdldFBhY2thZ2UnLCB0aGlzLnRlc3RBcHBQYWNrYWdlKSk7XG4gICAgfVxuICAgIGFyZ3MucHVzaCgnYXBwOmFzc2VtYmxlQW5kcm9pZFRlc3QnKTtcblxuICAgIHJldHVybiB7Y21kLCBhcmdzfTtcbiAgfVxuXG4gIGFzeW5jIHNldEdyYWRsZVdyYXBwZXJWZXJzaW9uICh2ZXJzaW9uKSB7XG4gICAgY29uc3QgcHJvcGVydGllc1BhdGggPSBwYXRoLnJlc29sdmUodGhpcy5zZXJ2ZXJQYXRoLCAnZ3JhZGxlJywgJ3dyYXBwZXInLCAnZ3JhZGxlLXdyYXBwZXIucHJvcGVydGllcycpO1xuICAgIGNvbnN0IG9yaWdpbmFsUHJvcGVydGllcyA9IGF3YWl0IGZzLnJlYWRGaWxlKHByb3BlcnRpZXNQYXRoLCAndXRmOCcpO1xuICAgIGNvbnN0IG5ld1Byb3BlcnRpZXMgPSB0aGlzLnVwZGF0ZUdyYWRsZURpc3RVcmwob3JpZ2luYWxQcm9wZXJ0aWVzLCB2ZXJzaW9uKTtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUocHJvcGVydGllc1BhdGgsIG5ld1Byb3BlcnRpZXMsICd1dGY4Jyk7XG4gIH1cblxuICB1cGRhdGVHcmFkbGVEaXN0VXJsIChwcm9wZXJ0aWVzQ29udGVudCwgdmVyc2lvbikge1xuICAgIHJldHVybiBwcm9wZXJ0aWVzQ29udGVudC5yZXBsYWNlKFxuICAgICAgbmV3IFJlZ0V4cChgXigke18uZXNjYXBlUmVnRXhwKEdSQURMRV9VUkxfUFJFRklYKX0pLiskYCwgJ2dtJyksXG4gICAgICBgJDEke0dSQURMRV9VUkxfVEVNUExBVEUucmVwbGFjZSgnVkVSU0lPTicsIHZlcnNpb24pfWBcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgaW5zZXJ0QWRkaXRpb25hbERlcGVuZGVuY2llcyAoKSB7XG4gICAgbGV0IGhhc0FkZGl0aW9uYWxEZXBzID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBwcm9wTmFtZSBvZiBERVBFTkRFTkNZX1BST1BfTkFNRVMpIHtcbiAgICAgIGlmICghXy5pc0FycmF5KHRoaXNbcHJvcE5hbWVdKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke3Byb3BOYW1lfScgbXVzdCBiZSBhbiBhcnJheWApO1xuICAgICAgfVxuICAgICAgaWYgKF8uaXNFbXB0eSh0aGlzW3Byb3BOYW1lXS5maWx0ZXIoKGxpbmUpID0+IF8udHJpbShsaW5lKSkpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGRlcCBvZiB0aGlzW3Byb3BOYW1lXSkge1xuICAgICAgICBpZiAoL1tcXHMnXFxcXCRdLy50ZXN0KGRlcCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NpbmdsZSBxdW90ZXMsIGRvbGxhciBjaGFyYWN0ZXJzIGFuZCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMnICtcbiAgICAgICAgICAgIGAgYXJlIGRpc2FsbG93ZWQgaW4gYWRkaXRpb25hbCBkZXBlbmRlbmNpZXM6ICR7ZGVwfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBoYXNBZGRpdGlvbmFsRGVwcyA9IHRydWU7XG4gICAgfVxuICAgIGlmICghaGFzQWRkaXRpb25hbERlcHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBidWlsZFBhdGggPSBwYXRoLnJlc29sdmUodGhpcy5zZXJ2ZXJQYXRoLCAnYXBwJywgJ2J1aWxkLmdyYWRsZS5rdHMnKTtcbiAgICBsZXQgY29uZmlndXJhdGlvbiA9IGF3YWl0IGZzLnJlYWRGaWxlKGJ1aWxkUGF0aCwgJ3V0ZjgnKTtcbiAgICBmb3IgKGNvbnN0IHByb3BOYW1lIG9mIERFUEVOREVOQ1lfUFJPUF9OQU1FUykge1xuICAgICAgY29uc3QgcHJlZml4ID0gcHJvcE5hbWUgPT09IERFUEVOREVOQ1lfUFJPUF9OQU1FU1swXVxuICAgICAgICA/ICdpbXBsZW1lbnRhdGlvbidcbiAgICAgICAgOiAnYW5kcm9pZFRlc3RJbXBsZW1lbnRhdGlvbic7XG4gICAgICBjb25zdCBkZXBzID0gdGhpc1twcm9wTmFtZV1cbiAgICAgICAgLmZpbHRlcigobGluZSkgPT4gXy50cmltKGxpbmUpKVxuICAgICAgICAubWFwKChsaW5lKSA9PiBgJHtwcmVmaXh9KFwiJHtsaW5lfVwiKWApO1xuICAgICAgaWYgKF8uaXNFbXB0eShkZXBzKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2cuaW5mbyhgQWRkaW5nIHRoZSBmb2xsb3dpbmcgJHtwcm9wTmFtZX0gdG8gYnVpbGQuZ3JhZGxlLmt0czogJHtkZXBzfWApO1xuICAgICAgY29uZmlndXJhdGlvbiA9IHVwZGF0ZURlcGVuZGVuY3lMaW5lcyhjb25maWd1cmF0aW9uLCBwcm9wTmFtZSwgZGVwcyk7XG4gICAgfVxuICAgIGF3YWl0IGZzLndyaXRlRmlsZShidWlsZFBhdGgsIGNvbmZpZ3VyYXRpb24sICd1dGY4Jyk7XG4gIH1cblxuICBhc3luYyBydW5CdWlsZFByb2Nlc3MgKCkge1xuICAgIGNvbnN0IHtjbWQsIGFyZ3N9ID0gdGhpcy5nZXRDb21tYW5kKCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYEJlZ2lubmluZyBidWlsZCB3aXRoIGNvbW1hbmQgJyR7Y21kfSAke2FyZ3Muam9pbignICcpfScgYCArXG4gICAgICBgaW4gZGlyZWN0b3J5ICcke3RoaXMuc2VydmVyUGF0aH0nYCk7XG4gICAgY29uc3QgZ3JhZGxlYnVpbGQgPSBuZXcgU3ViUHJvY2VzcyhjbWQsIGFyZ3MsIHtcbiAgICAgIGN3ZDogdGhpcy5zZXJ2ZXJQYXRoLFxuICAgICAgc3RkaW86IFsnaWdub3JlJywgJ3BpcGUnLCAncGlwZSddLFxuICAgICAgd2luZG93c1ZlcmJhdGltQXJndW1lbnRzOiB0cnVlXG4gICAgfSk7XG4gICAgbGV0IGJ1aWxkTGFzdExpbmVzID0gW107XG5cbiAgICBjb25zdCBsb2dNc2cgPSBgT3V0cHV0IGZyb20gR3JhZGxlICR7dGhpcy5zaG93R3JhZGxlTG9nID8gJ3dpbGwnIDogJ3dpbGwgbm90J30gYmUgbG9nZ2VkYDtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgJHtsb2dNc2d9LiBUbyBjaGFuZ2UgdGhpcywgdXNlICdzaG93R3JhZGxlTG9nJyBkZXNpcmVkIGNhcGFiaWxpdHlgKTtcbiAgICBncmFkbGVidWlsZC5vbignc3RyZWFtLWxpbmUnLCAobGluZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuc2hvd0dyYWRsZUxvZykge1xuICAgICAgICBpZiAobGluZS5zdGFydHNXaXRoKCdbU1RERVJSXScpKSB7XG4gICAgICAgICAgdGhpcy5sb2cud2FybihgW0dyYWRsZV0gJHtsaW5lfWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubG9nLmluZm8oYFtHcmFkbGVdICR7bGluZX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnVpbGRMYXN0TGluZXMucHVzaChgJHtFT0x9JHtsaW5lfWApO1xuICAgICAgaWYgKGJ1aWxkTGFzdExpbmVzLmxlbmd0aCA+IEdSQURMRV9NQVhfRVJST1JfTE9HX0xJTkVTKSB7XG4gICAgICAgIGJ1aWxkTGFzdExpbmVzID0gYnVpbGRMYXN0TGluZXMuc2xpY2UoLUdSQURMRV9NQVhfRVJST1JfTE9HX0xJTkVTKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBncmFkbGVidWlsZC5zdGFydCgpO1xuICAgICAgYXdhaXQgZ3JhZGxlYnVpbGQuam9pbigpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbGV0IG1zZyA9IGBVbmFibGUgdG8gYnVpbGQgRXNwcmVzc28gc2VydmVyIC0gJHtlcnIubWVzc2FnZX1cXG5gICtcbiAgICAgICAgYEdyYWRsZSBlcnJvciBtZXNzYWdlOiR7RU9MfSR7YnVpbGRMYXN0TGluZXN9YDtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3cobXNnKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHsgU2VydmVyQnVpbGRlciwgVkVSU0lPTl9LRVlTLCBHUkFETEVfVVJMX1RFTVBMQVRFLCBidWlsZFNlcnZlclNpZ25pbmdDb25maWcgfTtcbmV4cG9ydCBkZWZhdWx0IFNlcnZlckJ1aWxkZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxhQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxRQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSSxLQUFBLEdBQUFELHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSyxHQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxNQUFBLEdBQUFOLE9BQUE7QUFFQSxNQUFNTyxrQkFBa0IsR0FBRyxRQUFRO0FBQ25DLE1BQU1DLGlCQUFpQixHQUFHLGtCQUFrQjtBQUM1QyxNQUFNQyxtQkFBbUIsR0FBRyxvRUFBb0U7QUFBQ0MsT0FBQSxDQUFBRCxtQkFBQSxHQUFBQSxtQkFBQTtBQUNqRyxNQUFNRSwwQkFBMEIsR0FBRyxFQUFFO0FBQ3JDLE1BQU1DLHFCQUFxQixHQUFHLENBQUMsMkJBQTJCLEVBQUUsbUNBQW1DLENBQUM7QUFFaEcsTUFBTUMsWUFBWSxHQUFHLENBQ25CTixrQkFBa0IsRUFDbEIscUJBQXFCLEVBQ3JCLFlBQVksRUFDWixZQUFZLEVBQ1osUUFBUSxFQUNSLFdBQVcsRUFDWCxRQUFRLEVBQ1IscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQixXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixtQkFBbUIsQ0FDcEI7QUFBQ0csT0FBQSxDQUFBRyxZQUFBLEdBQUFBLFlBQUE7QUFFRixTQUFTQyx3QkFBd0JBLENBQUVDLElBQUksRUFBRTtFQUN2QyxPQUFPO0lBQ0xDLFFBQVEsRUFBRSxJQUFJO0lBQ2RDLFlBQVksRUFBRUYsSUFBSSxDQUFDRSxZQUFZO0lBQy9CQyxnQkFBZ0IsRUFBRUgsSUFBSSxDQUFDRyxnQkFBZ0I7SUFDdkNDLFFBQVEsRUFBRUosSUFBSSxDQUFDSSxRQUFRO0lBQ3ZCQyxXQUFXLEVBQUVMLElBQUksQ0FBQ0s7RUFDcEIsQ0FBQztBQUNIO0FBRUEsTUFBTUMsYUFBYSxDQUFDO0VBQ2xCQyxXQUFXQSxDQUFFQyxHQUFHLEVBQUVSLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRTtJQUMzQixJQUFJLENBQUNRLEdBQUcsR0FBR0EsR0FBRztJQUNkLElBQUksQ0FBQ0MsVUFBVSxHQUFHVCxJQUFJLENBQUNTLFVBQVU7SUFDakMsSUFBSSxDQUFDQyxhQUFhLEdBQUdWLElBQUksQ0FBQ1UsYUFBYTtJQUV2QyxNQUFNQyxrQkFBa0IsR0FBR1gsSUFBSSxDQUFDVyxrQkFBa0IsSUFBSSxDQUFDLENBQUM7SUFFeEQsTUFBTUMsb0JBQW9CLEdBQUdELGtCQUFrQixDQUFDRSxhQUFhLElBQUksQ0FBQyxDQUFDO0lBQ25FLElBQUksQ0FBQ0MsY0FBYyxHQUFHQyxlQUFDLENBQUNDLE1BQU0sQ0FBQ0osb0JBQW9CLEVBQUUsQ0FBQ0ssR0FBRyxFQUFFQyxLQUFLLEVBQUVDLEdBQUcsS0FBSztNQUN4RSxJQUFJckIsWUFBWSxDQUFDc0IsUUFBUSxDQUFDRCxHQUFHLENBQUMsRUFBRTtRQUM5QkYsR0FBRyxDQUFDRSxHQUFHLENBQUMsR0FBR0QsS0FBSztNQUNsQixDQUFDLE1BQU07UUFDTFYsR0FBRyxDQUFDYSxJQUFJLENBQUUsbUJBQWtCRixHQUFJLG9EQUFtRCxDQUFDO01BQ3RGO01BQ0EsT0FBT0YsR0FBRztJQUNaLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUVOLElBQUksQ0FBQ0ssY0FBYyxHQUFHdEIsSUFBSSxDQUFDc0IsY0FBYztJQUN6QyxJQUFJLENBQUNDLGFBQWEsR0FBR3ZCLElBQUksQ0FBQ3VCLGFBQWE7SUFFdkMsS0FBSyxNQUFNQyxRQUFRLElBQUkzQixxQkFBcUIsRUFBRTtNQUM1QyxJQUFJLENBQUMyQixRQUFRLENBQUMsR0FBR2Isa0JBQWtCLENBQUNhLFFBQVEsQ0FBQyxJQUFJLEVBQUU7SUFDckQ7RUFDRjtFQUVBLE1BQU1DLEtBQUtBLENBQUEsRUFBSTtJQUNiLElBQUksSUFBSSxDQUFDWCxjQUFjLENBQUN0QixrQkFBa0IsQ0FBQyxFQUFFO01BQzNDLE1BQU0sSUFBSSxDQUFDa0MsdUJBQXVCLENBQUMsSUFBSSxDQUFDWixjQUFjLENBQUN0QixrQkFBa0IsQ0FBQyxDQUFDO0lBQzdFO0lBRUEsTUFBTSxJQUFJLENBQUNtQyw0QkFBNEIsRUFBRTtJQUV6QyxNQUFNLElBQUksQ0FBQ0MsZUFBZSxFQUFFO0VBQzlCO0VBRUFDLFVBQVVBLENBQUEsRUFBSTtJQUNaLE1BQU1DLEdBQUcsR0FBR0MsZUFBTSxDQUFDQyxTQUFTLEVBQUUsR0FBRyxhQUFhLEdBQUdDLGFBQUksQ0FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBQ3pCLFVBQVUsRUFBRSxTQUFTLENBQUM7SUFDekYsTUFBTTBCLGFBQWEsR0FBR0EsQ0FBQ2hCLEdBQUcsRUFBRUQsS0FBSyxLQUFLQSxLQUFLLEdBQUksS0FBSUMsR0FBSSxJQUFHRCxLQUFNLEVBQUMsR0FBRyxJQUFJO0lBQ3hFLElBQUlsQixJQUFJLEdBQUdGLFlBQVksQ0FDcEJzQyxNQUFNLENBQUVqQixHQUFHLElBQUtBLEdBQUcsS0FBSzNCLGtCQUFrQixDQUFDLENBQzNDNkMsR0FBRyxDQUFFbEIsR0FBRyxJQUFLO01BQ1osTUFBTW1CLGFBQWEsR0FBRyxJQUFJLENBQUN4QixjQUFjLENBQUNLLEdBQUcsQ0FBQztNQUM5QyxNQUFNb0IsY0FBYyxHQUFJLFNBQVFwQixHQUFHLENBQUNxQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUNDLFdBQVcsRUFBRyxHQUFFdEIsR0FBRyxDQUFDdUIsS0FBSyxDQUFDLENBQUMsQ0FBRSxFQUFDO01BQzVFLE9BQU9QLGFBQWEsQ0FBQ0ksY0FBYyxFQUFFRCxhQUFhLENBQUM7SUFDckQsQ0FBQyxDQUFDLENBQ0RGLE1BQU0sQ0FBQ08sT0FBTyxDQUFDO0lBRWxCLElBQUksSUFBSSxDQUFDcEIsYUFBYSxFQUFFO01BQ3RCdkIsSUFBSSxDQUFDNEMsSUFBSSxDQUFDLEdBQ1I3QixlQUFDLENBQUM4QixJQUFJLENBQUMsSUFBSSxDQUFDdEIsYUFBYSxDQUFDLENBQ3pCYyxHQUFHLENBQUVsQixHQUFHLElBQUssQ0FBRSxTQUFRSixlQUFDLENBQUMrQixVQUFVLENBQUMzQixHQUFHLENBQUUsRUFBQyxFQUFFLElBQUksQ0FBQ0ksYUFBYSxDQUFDSixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQ3JFa0IsR0FBRyxDQUFDLENBQUMsQ0FBQ1UsQ0FBQyxFQUFFQyxDQUFDLENBQUMsS0FBS2IsYUFBYSxDQUFDWSxDQUFDLEVBQUVDLENBQUMsQ0FBQyxDQUFDLENBQ3BDWixNQUFNLENBQUNPLE9BQU8sQ0FDaEIsQ0FBQztJQUNKO0lBRUEsSUFBSSxJQUFJLENBQUNyQixjQUFjLEVBQUU7TUFDdkJ0QixJQUFJLENBQUM0QyxJQUFJLENBQUNULGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUNiLGNBQWMsQ0FBQyxDQUFDO0lBQ3RFO0lBQ0F0QixJQUFJLENBQUM0QyxJQUFJLENBQUMseUJBQXlCLENBQUM7SUFFcEMsT0FBTztNQUFDZCxHQUFHO01BQUU5QjtJQUFJLENBQUM7RUFDcEI7RUFFQSxNQUFNMEIsdUJBQXVCQSxDQUFFdUIsT0FBTyxFQUFFO0lBQ3RDLE1BQU1DLGNBQWMsR0FBR2pCLGFBQUksQ0FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBQ3pCLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLDJCQUEyQixDQUFDO0lBQ3RHLE1BQU0wQyxrQkFBa0IsR0FBRyxNQUFNQyxXQUFFLENBQUNDLFFBQVEsQ0FBQ0gsY0FBYyxFQUFFLE1BQU0sQ0FBQztJQUNwRSxNQUFNSSxhQUFhLEdBQUcsSUFBSSxDQUFDQyxtQkFBbUIsQ0FBQ0osa0JBQWtCLEVBQUVGLE9BQU8sQ0FBQztJQUMzRSxNQUFNRyxXQUFFLENBQUNJLFNBQVMsQ0FBQ04sY0FBYyxFQUFFSSxhQUFhLEVBQUUsTUFBTSxDQUFDO0VBQzNEO0VBRUFDLG1CQUFtQkEsQ0FBRUUsaUJBQWlCLEVBQUVSLE9BQU8sRUFBRTtJQUMvQyxPQUFPUSxpQkFBaUIsQ0FBQ0MsT0FBTyxDQUM5QixJQUFJQyxNQUFNLENBQUUsS0FBSTVDLGVBQUMsQ0FBQzZDLFlBQVksQ0FBQ25FLGlCQUFpQixDQUFFLE1BQUssRUFBRSxJQUFJLENBQUMsRUFDN0QsS0FBSUMsbUJBQW1CLENBQUNnRSxPQUFPLENBQUMsU0FBUyxFQUFFVCxPQUFPLENBQUUsRUFBQyxDQUN2RDtFQUNIO0VBRUEsTUFBTXRCLDRCQUE0QkEsQ0FBQSxFQUFJO0lBQ3BDLElBQUlrQyxpQkFBaUIsR0FBRyxLQUFLO0lBQzdCLEtBQUssTUFBTXJDLFFBQVEsSUFBSTNCLHFCQUFxQixFQUFFO01BQzVDLElBQUksQ0FBQ2tCLGVBQUMsQ0FBQytDLE9BQU8sQ0FBQyxJQUFJLENBQUN0QyxRQUFRLENBQUMsQ0FBQyxFQUFFO1FBQzlCLE1BQU0sSUFBSXVDLEtBQUssQ0FBRSxJQUFHdkMsUUFBUyxvQkFBbUIsQ0FBQztNQUNuRDtNQUNBLElBQUlULGVBQUMsQ0FBQ2lELE9BQU8sQ0FBQyxJQUFJLENBQUN4QyxRQUFRLENBQUMsQ0FBQ1ksTUFBTSxDQUFFNkIsSUFBSSxJQUFLbEQsZUFBQyxDQUFDbUQsSUFBSSxDQUFDRCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDNUQ7TUFDRjtNQUVBLEtBQUssTUFBTUUsR0FBRyxJQUFJLElBQUksQ0FBQzNDLFFBQVEsQ0FBQyxFQUFFO1FBQ2hDLElBQUksVUFBVSxDQUFDNEMsSUFBSSxDQUFDRCxHQUFHLENBQUMsRUFBRTtVQUN4QixNQUFNLElBQUlKLEtBQUssQ0FBQyw0REFBNEQsR0FDekUsK0NBQThDSSxHQUFJLEVBQUMsQ0FBQztRQUN6RDtNQUNGO01BQ0FOLGlCQUFpQixHQUFHLElBQUk7SUFDMUI7SUFDQSxJQUFJLENBQUNBLGlCQUFpQixFQUFFO01BQ3RCO0lBQ0Y7SUFFQSxNQUFNUSxTQUFTLEdBQUdwQyxhQUFJLENBQUNDLE9BQU8sQ0FBQyxJQUFJLENBQUN6QixVQUFVLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixDQUFDO0lBQzFFLElBQUk2RCxhQUFhLEdBQUcsTUFBTWxCLFdBQUUsQ0FBQ0MsUUFBUSxDQUFDZ0IsU0FBUyxFQUFFLE1BQU0sQ0FBQztJQUN4RCxLQUFLLE1BQU03QyxRQUFRLElBQUkzQixxQkFBcUIsRUFBRTtNQUM1QyxNQUFNMEUsTUFBTSxHQUFHL0MsUUFBUSxLQUFLM0IscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEdBQ2hELGdCQUFnQixHQUNoQiwyQkFBMkI7TUFDL0IsTUFBTTJFLElBQUksR0FBRyxJQUFJLENBQUNoRCxRQUFRLENBQUMsQ0FDeEJZLE1BQU0sQ0FBRTZCLElBQUksSUFBS2xELGVBQUMsQ0FBQ21ELElBQUksQ0FBQ0QsSUFBSSxDQUFDLENBQUMsQ0FDOUI1QixHQUFHLENBQUU0QixJQUFJLElBQU0sR0FBRU0sTUFBTyxLQUFJTixJQUFLLElBQUcsQ0FBQztNQUN4QyxJQUFJbEQsZUFBQyxDQUFDaUQsT0FBTyxDQUFDUSxJQUFJLENBQUMsRUFBRTtRQUNuQjtNQUNGO01BRUEsSUFBSSxDQUFDaEUsR0FBRyxDQUFDaUUsSUFBSSxDQUFFLHdCQUF1QmpELFFBQVMseUJBQXdCZ0QsSUFBSyxFQUFDLENBQUM7TUFDOUVGLGFBQWEsR0FBRyxJQUFBSSw0QkFBcUIsRUFBQ0osYUFBYSxFQUFFOUMsUUFBUSxFQUFFZ0QsSUFBSSxDQUFDO0lBQ3RFO0lBQ0EsTUFBTXBCLFdBQUUsQ0FBQ0ksU0FBUyxDQUFDYSxTQUFTLEVBQUVDLGFBQWEsRUFBRSxNQUFNLENBQUM7RUFDdEQ7RUFFQSxNQUFNMUMsZUFBZUEsQ0FBQSxFQUFJO0lBQ3ZCLE1BQU07TUFBQ0UsR0FBRztNQUFFOUI7SUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDNkIsVUFBVSxFQUFFO0lBQ3JDLElBQUksQ0FBQ3JCLEdBQUcsQ0FBQ21FLEtBQUssQ0FBRSxpQ0FBZ0M3QyxHQUFJLElBQUc5QixJQUFJLENBQUM0RSxJQUFJLENBQUMsR0FBRyxDQUFFLElBQUcsR0FDdEUsaUJBQWdCLElBQUksQ0FBQ25FLFVBQVcsR0FBRSxDQUFDO0lBQ3RDLE1BQU1vRSxXQUFXLEdBQUcsSUFBSUMsd0JBQVUsQ0FBQ2hELEdBQUcsRUFBRTlCLElBQUksRUFBRTtNQUM1QytFLEdBQUcsRUFBRSxJQUFJLENBQUN0RSxVQUFVO01BQ3BCdUUsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7TUFDakNDLHdCQUF3QixFQUFFO0lBQzVCLENBQUMsQ0FBQztJQUNGLElBQUlDLGNBQWMsR0FBRyxFQUFFO0lBRXZCLE1BQU1DLE1BQU0sR0FBSSxzQkFBcUIsSUFBSSxDQUFDekUsYUFBYSxHQUFHLE1BQU0sR0FBRyxVQUFXLFlBQVc7SUFDekYsSUFBSSxDQUFDRixHQUFHLENBQUNtRSxLQUFLLENBQUUsR0FBRVEsTUFBTywwREFBeUQsQ0FBQztJQUNuRk4sV0FBVyxDQUFDTyxFQUFFLENBQUMsYUFBYSxFQUFHbkIsSUFBSSxJQUFLO01BQ3RDLElBQUksSUFBSSxDQUFDdkQsYUFBYSxFQUFFO1FBQ3RCLElBQUl1RCxJQUFJLENBQUNvQixVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUU7VUFDL0IsSUFBSSxDQUFDN0UsR0FBRyxDQUFDYSxJQUFJLENBQUUsWUFBVzRDLElBQUssRUFBQyxDQUFDO1FBQ25DLENBQUMsTUFBTTtVQUNMLElBQUksQ0FBQ3pELEdBQUcsQ0FBQ2lFLElBQUksQ0FBRSxZQUFXUixJQUFLLEVBQUMsQ0FBQztRQUNuQztNQUNGO01BQ0FpQixjQUFjLENBQUN0QyxJQUFJLENBQUUsR0FBRTBDLE9BQUksR0FBRXJCLElBQUssRUFBQyxDQUFDO01BQ3BDLElBQUlpQixjQUFjLENBQUNLLE1BQU0sR0FBRzNGLDBCQUEwQixFQUFFO1FBQ3REc0YsY0FBYyxHQUFHQSxjQUFjLENBQUN4QyxLQUFLLENBQUMsQ0FBQzlDLDBCQUEwQixDQUFDO01BQ3BFO0lBQ0YsQ0FBQyxDQUFDO0lBRUYsSUFBSTtNQUNGLE1BQU1pRixXQUFXLENBQUNXLEtBQUssRUFBRTtNQUN6QixNQUFNWCxXQUFXLENBQUNELElBQUksRUFBRTtJQUMxQixDQUFDLENBQUMsT0FBT2EsR0FBRyxFQUFFO01BQ1osSUFBSUMsR0FBRyxHQUFJLHFDQUFvQ0QsR0FBRyxDQUFDRSxPQUFRLElBQUcsR0FDM0Qsd0JBQXVCTCxPQUFJLEdBQUVKLGNBQWUsRUFBQztNQUNoRCxJQUFJLENBQUMxRSxHQUFHLENBQUNvRixhQUFhLENBQUNGLEdBQUcsQ0FBQztJQUM3QjtFQUNGO0FBQ0Y7QUFBQy9GLE9BQUEsQ0FBQVcsYUFBQSxHQUFBQSxhQUFBO0FBQUEsSUFBQXVGLFFBQUEsR0FHY3ZGLGFBQWE7QUFBQVgsT0FBQSxDQUFBbUcsT0FBQSxHQUFBRCxRQUFBIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-builder.js","names":["_teen_process","require","_support","_lodash","_interopRequireDefault","_path","_os","_utils","GRADLE_VERSION_KEY","GRADLE_URL_PREFIX","GRADLE_URL_TEMPLATE","exports","GRADLE_MAX_ERROR_LOG_LINES","DEPENDENCY_PROP_NAMES","VERSION_KEYS","buildServerSigningConfig","args","zipAlign","keystoreFile","keystorePassword","keyAlias","keyPassword","ServerBuilder","constructor","log","serverPath","showGradleLog","buildConfiguration","versionConfiguration","toolsVersions","serverVersions","_","reduce","acc","value","key","includes","warn","testAppPackage","signingConfig","propName","build","setGradleWrapperVersion","insertAdditionalDependencies","runBuildProcess","getCommand","cmd","system","isWindows","path","resolve","buildProperty","filter","map","serverVersion","gradleProperty","charAt","toUpperCase","slice","Boolean","push","keys","upperFirst","k","v","version","propertiesPath","originalProperties","fs","readFile","newProperties","updateGradleDistUrl","writeFile","propertiesContent","replace","RegExp","escapeRegExp","hasAdditionalDeps","isArray","Error","isEmpty","line","trim","dep","test","buildPath","configuration","prefix","deps","info","updateDependencyLines","debug","join","gradlebuild","SubProcess","cwd","stdio","windowsVerbatimArguments","buildLastLines","logMsg","on","startsWith","EOL","length","start","err","msg","message","errorAndThrow","_default","default"],"sources":["../../lib/server-builder.js"],"sourcesContent":["import { SubProcess } from 'teen_process';\nimport { fs, system } from 'appium/support';\nimport _ from 'lodash';\nimport path from 'path';\nimport { EOL } from 'os';\nimport { updateDependencyLines } from './utils';\n\nconst GRADLE_VERSION_KEY = 'gradle';\nconst GRADLE_URL_PREFIX = 'distributionUrl=';\nconst GRADLE_URL_TEMPLATE = 'https\\\\://services.gradle.org/distributions/gradle-VERSION-all.zip';\nconst GRADLE_MAX_ERROR_LOG_LINES = 15;\nconst DEPENDENCY_PROP_NAMES = ['additionalAppDependencies', 'additionalAndroidTestDependencies'];\n\nconst VERSION_KEYS = [\n GRADLE_VERSION_KEY,\n 'androidGradlePlugin',\n 'compileSdk',\n 'buildTools',\n 'minSdk',\n 'targetSdk',\n 'kotlin',\n 'sourceCompatibility',\n 'targetCompatibility',\n 'jvmTarget',\n 'composeVersion',\n 'annotationVersion'\n];\n\nfunction buildServerSigningConfig (args) {\n return {\n zipAlign: true,\n keystoreFile: args.keystoreFile,\n keystorePassword: args.keystorePassword,\n keyAlias: args.keyAlias,\n keyPassword: args.keyPassword\n };\n}\n\nclass ServerBuilder {\n constructor (log, args = {}) {\n this.log = log;\n this.serverPath = args.serverPath;\n this.showGradleLog = args.showGradleLog;\n\n const buildConfiguration = args.buildConfiguration || {};\n\n const versionConfiguration = buildConfiguration.toolsVersions || {};\n this.serverVersions = _.reduce(versionConfiguration, (acc, value, key) => {\n if (VERSION_KEYS.includes(key)) {\n acc[key] = value;\n } else {\n log.warn(`Got unexpected '${key}' in toolsVersion block of the build configuration`);\n }\n return acc;\n }, {});\n\n this.testAppPackage = args.testAppPackage;\n this.signingConfig = args.signingConfig;\n\n for (const propName of DEPENDENCY_PROP_NAMES) {\n this[propName] = buildConfiguration[propName] || [];\n }\n }\n\n async build () {\n if (this.serverVersions[GRADLE_VERSION_KEY]) {\n await this.setGradleWrapperVersion(this.serverVersions[GRADLE_VERSION_KEY]);\n }\n\n await this.insertAdditionalDependencies();\n\n await this.runBuildProcess();\n }\n\n getCommand () {\n const cmd = system.isWindows() ? 'gradlew.bat' : path.resolve(this.serverPath, 'gradlew');\n const buildProperty = (key, value) => value ? `-P${key}=${value}` : null;\n let args = VERSION_KEYS\n .filter((key) => key !== GRADLE_VERSION_KEY)\n .map((key) => {\n const serverVersion = this.serverVersions[key];\n const gradleProperty = `appium${key.charAt(0).toUpperCase()}${key.slice(1)}`;\n return buildProperty(gradleProperty, serverVersion);\n })\n .filter(Boolean);\n\n if (this.signingConfig) {\n args.push(...(\n _.keys(this.signingConfig)\n .map((key) => [`appium${_.upperFirst(key)}`, this.signingConfig[key]])\n .map(([k, v]) => buildProperty(k, v))\n .filter(Boolean)\n ));\n }\n\n if (this.testAppPackage) {\n args.push(buildProperty('appiumTargetPackage', this.testAppPackage));\n }\n args.push('app:assembleAndroidTest');\n\n return {cmd, args};\n }\n\n async setGradleWrapperVersion (version) {\n const propertiesPath = path.resolve(this.serverPath, 'gradle', 'wrapper', 'gradle-wrapper.properties');\n const originalProperties = await fs.readFile(propertiesPath, 'utf8');\n const newProperties = this.updateGradleDistUrl(originalProperties, version);\n await fs.writeFile(propertiesPath, newProperties, 'utf8');\n }\n\n updateGradleDistUrl (propertiesContent, version) {\n return propertiesContent.replace(\n new RegExp(`^(${_.escapeRegExp(GRADLE_URL_PREFIX)}).+$`, 'gm'),\n `$1${GRADLE_URL_TEMPLATE.replace('VERSION', version)}`\n );\n }\n\n async insertAdditionalDependencies () {\n let hasAdditionalDeps = false;\n for (const propName of DEPENDENCY_PROP_NAMES) {\n if (!_.isArray(this[propName])) {\n throw new Error(`'${propName}' must be an array`);\n }\n if (_.isEmpty(this[propName].filter((line) => _.trim(line)))) {\n continue;\n }\n\n for (const dep of this[propName]) {\n if (/[\\s'\\\\$]/.test(dep)) {\n throw new Error('Single quotes, dollar characters and whitespace characters' +\n ` are disallowed in additional dependencies: ${dep}`);\n }\n }\n hasAdditionalDeps = true;\n }\n if (!hasAdditionalDeps) {\n return;\n }\n\n const buildPath = path.resolve(this.serverPath, 'app', 'build.gradle.kts');\n let configuration = await fs.readFile(buildPath, 'utf8');\n for (const propName of DEPENDENCY_PROP_NAMES) {\n const prefix = propName === DEPENDENCY_PROP_NAMES[0]\n ? 'implementation'\n : 'androidTestImplementation';\n const deps = this[propName]\n .filter((line) => _.trim(line))\n .map((line) => `${prefix}(\"${line}\")`);\n if (_.isEmpty(deps)) {\n continue;\n }\n\n this.log.info(`Adding the following ${propName} to build.gradle.kts: ${deps}`);\n configuration = updateDependencyLines(configuration, propName, deps);\n }\n await fs.writeFile(buildPath, configuration, 'utf8');\n }\n\n async runBuildProcess () {\n const {cmd, args} = this.getCommand();\n this.log.debug(`Beginning build with command '${cmd} ${args.join(' ')}' ` +\n `in directory '${this.serverPath}'`);\n const gradlebuild = new SubProcess(cmd, args, {\n cwd: this.serverPath,\n stdio: ['ignore', 'pipe', 'pipe'],\n windowsVerbatimArguments: true\n });\n let buildLastLines = [];\n\n const logMsg = `Output from Gradle ${this.showGradleLog ? 'will' : 'will not'} be logged`;\n this.log.debug(`${logMsg}. To change this, use 'showGradleLog' desired capability`);\n gradlebuild.on('stream-line', (line) => {\n if (this.showGradleLog) {\n if (line.startsWith('[STDERR]')) {\n this.log.warn(`[Gradle] ${line}`);\n } else {\n this.log.info(`[Gradle] ${line}`);\n }\n }\n buildLastLines.push(`${EOL}${line}`);\n if (buildLastLines.length > GRADLE_MAX_ERROR_LOG_LINES) {\n buildLastLines = buildLastLines.slice(-GRADLE_MAX_ERROR_LOG_LINES);\n }\n });\n\n try {\n await gradlebuild.start();\n await gradlebuild.join();\n } catch (err) {\n let msg = `Unable to build Espresso server - ${err.message}\\n` +\n `Gradle error message:${EOL}${buildLastLines}`;\n this.log.errorAndThrow(msg);\n }\n }\n}\n\nexport { ServerBuilder, VERSION_KEYS, GRADLE_URL_TEMPLATE, buildServerSigningConfig };\nexport default ServerBuilder;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server-builder.js","names":["_teen_process","require","_support","_lodash","_interopRequireDefault","_path","_os","_utils","GRADLE_VERSION_KEY","GRADLE_URL_PREFIX","GRADLE_URL_TEMPLATE","exports","GRADLE_MAX_ERROR_LOG_LINES","DEPENDENCY_PROP_NAMES","VERSION_KEYS","buildServerSigningConfig","args","zipAlign","keystoreFile","keystorePassword","keyAlias","keyPassword","ServerBuilder","constructor","log","serverPath","showGradleLog","buildConfiguration","versionConfiguration","toolsVersions","serverVersions","_","reduce","acc","value","key","includes","warn","testAppPackage","signingConfig","propName","build","setGradleWrapperVersion","insertAdditionalDependencies","runBuildProcess","getCommand","cmd","system","isWindows","path","resolve","buildProperty","filter","map","serverVersion","gradleProperty","charAt","toUpperCase","slice","Boolean","push","keys","upperFirst","k","v","version","propertiesPath","originalProperties","fs","readFile","newProperties","updateGradleDistUrl","writeFile","propertiesContent","replace","RegExp","escapeRegExp","hasAdditionalDeps","isArray","Error","isEmpty","line","trim","dep","test","buildPath","configuration","prefix","deps","info","updateDependencyLines","debug","join","gradlebuild","SubProcess","cwd","stdio","windowsVerbatimArguments","buildLastLines","logMsg","on","startsWith","EOL","length","start","err","msg","message","errorAndThrow","_default","default"],"sources":["../../lib/server-builder.js"],"sourcesContent":["import { SubProcess } from 'teen_process';\nimport { fs, system } from 'appium/support';\nimport _ from 'lodash';\nimport path from 'path';\nimport { EOL } from 'os';\nimport { updateDependencyLines } from './utils';\n\nconst GRADLE_VERSION_KEY = 'gradle';\nconst GRADLE_URL_PREFIX = 'distributionUrl=';\nconst GRADLE_URL_TEMPLATE = 'https\\\\://services.gradle.org/distributions/gradle-VERSION-all.zip';\nconst GRADLE_MAX_ERROR_LOG_LINES = 15;\nconst DEPENDENCY_PROP_NAMES = ['additionalAppDependencies', 'additionalAndroidTestDependencies'];\n\nconst VERSION_KEYS = [\n GRADLE_VERSION_KEY,\n 'androidGradlePlugin',\n 'compileSdk',\n 'buildTools',\n 'minSdk',\n 'targetSdk',\n 'kotlin',\n 'sourceCompatibility',\n 'targetCompatibility',\n 'jvmTarget',\n 'composeVersion',\n 'espressoVersion',\n 'annotationVersion'\n];\n\nfunction buildServerSigningConfig (args) {\n return {\n zipAlign: true,\n keystoreFile: args.keystoreFile,\n keystorePassword: args.keystorePassword,\n keyAlias: args.keyAlias,\n keyPassword: args.keyPassword\n };\n}\n\nclass ServerBuilder {\n constructor (log, args = {}) {\n this.log = log;\n this.serverPath = args.serverPath;\n this.showGradleLog = args.showGradleLog;\n\n const buildConfiguration = args.buildConfiguration || {};\n\n const versionConfiguration = buildConfiguration.toolsVersions || {};\n this.serverVersions = _.reduce(versionConfiguration, (acc, value, key) => {\n if (VERSION_KEYS.includes(key)) {\n acc[key] = value;\n } else {\n log.warn(`Got unexpected '${key}' in toolsVersion block of the build configuration`);\n }\n return acc;\n }, {});\n\n this.testAppPackage = args.testAppPackage;\n this.signingConfig = args.signingConfig;\n\n for (const propName of DEPENDENCY_PROP_NAMES) {\n this[propName] = buildConfiguration[propName] || [];\n }\n }\n\n async build () {\n if (this.serverVersions[GRADLE_VERSION_KEY]) {\n await this.setGradleWrapperVersion(this.serverVersions[GRADLE_VERSION_KEY]);\n }\n\n await this.insertAdditionalDependencies();\n\n await this.runBuildProcess();\n }\n\n getCommand () {\n const cmd = system.isWindows() ? 'gradlew.bat' : path.resolve(this.serverPath, 'gradlew');\n const buildProperty = (key, value) => value ? `-P${key}=${value}` : null;\n let args = VERSION_KEYS\n .filter((key) => key !== GRADLE_VERSION_KEY)\n .map((key) => {\n const serverVersion = this.serverVersions[key];\n const gradleProperty = `appium${key.charAt(0).toUpperCase()}${key.slice(1)}`;\n return buildProperty(gradleProperty, serverVersion);\n })\n .filter(Boolean);\n\n if (this.signingConfig) {\n args.push(...(\n _.keys(this.signingConfig)\n .map((key) => [`appium${_.upperFirst(key)}`, this.signingConfig[key]])\n .map(([k, v]) => buildProperty(k, v))\n .filter(Boolean)\n ));\n }\n\n if (this.testAppPackage) {\n args.push(buildProperty('appiumTargetPackage', this.testAppPackage));\n }\n args.push('app:assembleAndroidTest');\n\n return {cmd, args};\n }\n\n async setGradleWrapperVersion (version) {\n const propertiesPath = path.resolve(this.serverPath, 'gradle', 'wrapper', 'gradle-wrapper.properties');\n const originalProperties = await fs.readFile(propertiesPath, 'utf8');\n const newProperties = this.updateGradleDistUrl(originalProperties, version);\n await fs.writeFile(propertiesPath, newProperties, 'utf8');\n }\n\n updateGradleDistUrl (propertiesContent, version) {\n return propertiesContent.replace(\n new RegExp(`^(${_.escapeRegExp(GRADLE_URL_PREFIX)}).+$`, 'gm'),\n `$1${GRADLE_URL_TEMPLATE.replace('VERSION', version)}`\n );\n }\n\n async insertAdditionalDependencies () {\n let hasAdditionalDeps = false;\n for (const propName of DEPENDENCY_PROP_NAMES) {\n if (!_.isArray(this[propName])) {\n throw new Error(`'${propName}' must be an array`);\n }\n if (_.isEmpty(this[propName].filter((line) => _.trim(line)))) {\n continue;\n }\n\n for (const dep of this[propName]) {\n if (/[\\s'\\\\$]/.test(dep)) {\n throw new Error('Single quotes, dollar characters and whitespace characters' +\n ` are disallowed in additional dependencies: ${dep}`);\n }\n }\n hasAdditionalDeps = true;\n }\n if (!hasAdditionalDeps) {\n return;\n }\n\n const buildPath = path.resolve(this.serverPath, 'app', 'build.gradle.kts');\n let configuration = await fs.readFile(buildPath, 'utf8');\n for (const propName of DEPENDENCY_PROP_NAMES) {\n const prefix = propName === DEPENDENCY_PROP_NAMES[0]\n ? 'implementation'\n : 'androidTestImplementation';\n const deps = this[propName]\n .filter((line) => _.trim(line))\n .map((line) => `${prefix}(\"${line}\")`);\n if (_.isEmpty(deps)) {\n continue;\n }\n\n this.log.info(`Adding the following ${propName} to build.gradle.kts: ${deps}`);\n configuration = updateDependencyLines(configuration, propName, deps);\n }\n await fs.writeFile(buildPath, configuration, 'utf8');\n }\n\n async runBuildProcess () {\n const {cmd, args} = this.getCommand();\n this.log.debug(`Beginning build with command '${cmd} ${args.join(' ')}' ` +\n `in directory '${this.serverPath}'`);\n const gradlebuild = new SubProcess(cmd, args, {\n cwd: this.serverPath,\n stdio: ['ignore', 'pipe', 'pipe'],\n windowsVerbatimArguments: true\n });\n let buildLastLines = [];\n\n const logMsg = `Output from Gradle ${this.showGradleLog ? 'will' : 'will not'} be logged`;\n this.log.debug(`${logMsg}. To change this, use 'showGradleLog' desired capability`);\n gradlebuild.on('stream-line', (line) => {\n if (this.showGradleLog) {\n if (line.startsWith('[STDERR]')) {\n this.log.warn(`[Gradle] ${line}`);\n } else {\n this.log.info(`[Gradle] ${line}`);\n }\n }\n buildLastLines.push(`${EOL}${line}`);\n if (buildLastLines.length > GRADLE_MAX_ERROR_LOG_LINES) {\n buildLastLines = buildLastLines.slice(-GRADLE_MAX_ERROR_LOG_LINES);\n }\n });\n\n try {\n await gradlebuild.start();\n await gradlebuild.join();\n } catch (err) {\n let msg = `Unable to build Espresso server - ${err.message}\\n` +\n `Gradle error message:${EOL}${buildLastLines}`;\n this.log.errorAndThrow(msg);\n }\n }\n}\n\nexport { ServerBuilder, VERSION_KEYS, GRADLE_URL_TEMPLATE, buildServerSigningConfig };\nexport default ServerBuilder;\n"],"mappings":"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"}
|
|
Binary file
|
|
@@ -86,6 +86,7 @@ android {
|
|
|
86
86
|
|
|
87
87
|
val kotlinVersion = rootProject.extra["appiumKotlin"]
|
|
88
88
|
val composeVersion = getStringProperty("appiumComposeVersion", Version.compose)
|
|
89
|
+
val espressoVersion = getStringProperty("appiumEspressoVersion", Version.espresso)
|
|
89
90
|
val annotationVersion = getStringProperty("appiumAnnotationVersion", Version.annotation)
|
|
90
91
|
|
|
91
92
|
dependencies {
|
|
@@ -97,9 +98,9 @@ dependencies {
|
|
|
97
98
|
testImplementation("org.powermock:powermock-module-junit4-rule:${Version.mocklib}")
|
|
98
99
|
testImplementation("org.powermock:powermock-module-junit4:${Version.mocklib}")
|
|
99
100
|
testImplementation("androidx.annotation:annotation:${annotationVersion}")
|
|
100
|
-
testImplementation("androidx.test.espresso:espresso-contrib:${
|
|
101
|
-
testImplementation("androidx.test.espresso:espresso-core:${
|
|
102
|
-
testImplementation("androidx.test.espresso:espresso-web:${
|
|
101
|
+
testImplementation("androidx.test.espresso:espresso-contrib:${espressoVersion}")
|
|
102
|
+
testImplementation("androidx.test.espresso:espresso-core:${espressoVersion}")
|
|
103
|
+
testImplementation("androidx.test.espresso:espresso-web:${espressoVersion}")
|
|
103
104
|
testImplementation("androidx.test.uiautomator:uiautomator:${Version.uia}")
|
|
104
105
|
testImplementation("androidx.test:core:${Version.testlib}")
|
|
105
106
|
testImplementation("androidx.test:runner:${Version.testlib}")
|
|
@@ -116,12 +117,12 @@ dependencies {
|
|
|
116
117
|
testImplementation("androidx.compose.ui:ui-test-junit4:${composeVersion}")
|
|
117
118
|
|
|
118
119
|
androidTestImplementation("androidx.annotation:annotation:${annotationVersion}")
|
|
119
|
-
androidTestImplementation("androidx.test.espresso:espresso-contrib:${
|
|
120
|
+
androidTestImplementation("androidx.test.espresso:espresso-contrib:${espressoVersion}") {
|
|
120
121
|
// Exclude transitive dependencies to limit conflicts with AndroidX libraries from AUT.
|
|
121
122
|
// Link to PR with fix and discussion https://github.com/appium/appium-espresso-driver/pull/596
|
|
122
123
|
isTransitive = false
|
|
123
124
|
}
|
|
124
|
-
androidTestImplementation("androidx.test.espresso:espresso-web:${
|
|
125
|
+
androidTestImplementation("androidx.test.espresso:espresso-web:${espressoVersion}") {
|
|
125
126
|
because("Espresso Web Atoms support (mobile: webAtoms)")
|
|
126
127
|
}
|
|
127
128
|
androidTestImplementation("androidx.test.uiautomator:uiautomator:${Version.uia}") {
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
|
+
* you may not use this file except in compliance with the License.
|
|
4
|
+
* See the NOTICE file distributed with this work for additional
|
|
5
|
+
* information regarding copyright ownership.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
package io.appium.espressoserver.lib.handlers
|
|
18
|
+
|
|
19
|
+
import androidx.test.espresso.UiController
|
|
20
|
+
import io.appium.espressoserver.lib.handlers.exceptions.AppiumException
|
|
21
|
+
import io.appium.espressoserver.lib.model.AppiumParams
|
|
22
|
+
import io.appium.espressoserver.lib.viewaction.UiControllerPerformer
|
|
23
|
+
import io.appium.espressoserver.lib.viewaction.UiControllerRunnable
|
|
24
|
+
|
|
25
|
+
class UIThreadSynchronizer : RequestHandler<AppiumParams, Void?> {
|
|
26
|
+
override fun handleInternal(params: AppiumParams): Void? {
|
|
27
|
+
val runnable = object : UiControllerRunnable<Void?> {
|
|
28
|
+
override fun run(uiController: UiController): Void? {
|
|
29
|
+
uiController.loopMainThreadUntilIdle()
|
|
30
|
+
return null
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return UiControllerPerformer(runnable).run()
|
|
35
|
+
}
|
|
36
|
+
}
|
package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/http/Router.kt
CHANGED
|
@@ -143,6 +143,8 @@ internal class Router {
|
|
|
143
143
|
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/appium/execute_mobile/register_idling_resources", RegisterIdlingResources(), IdlingResourcesParams::class.java))
|
|
144
144
|
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/appium/execute_mobile/unregister_idling_resources", UnregisterIdlingResources(), IdlingResourcesParams::class.java))
|
|
145
145
|
routeMap.addRoute(RouteDefinition(Method.GET, "/session/:sessionId/appium/execute_mobile/list_idling_resources", ListIdlingResources(), AppiumParams::class.java))
|
|
146
|
+
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/appium/execute_mobile/ui_thread_sync", UIThreadSynchronizer(), AppiumParams::class.java))
|
|
147
|
+
|
|
146
148
|
|
|
147
149
|
// Not implemented
|
|
148
150
|
routeMap.addRoute(RouteDefinition(Method.POST, "/session/:sessionId/touch/flick", NotYetImplemented(), AppiumParams::class.java))
|
package/lib/commands/execute.js
CHANGED
|
@@ -73,6 +73,7 @@ extensions.executeMobile = async function executeMobile (mobileCommand, opts = {
|
|
|
73
73
|
registerIdlingResources: 'mobileRegisterIdlingResources',
|
|
74
74
|
unregisterIdlingResources: 'mobileUnregisterIdlingResources',
|
|
75
75
|
listIdlingResources: 'mobileListIdlingResources',
|
|
76
|
+
waitForUIThread: 'mobileWaitForUIThread',
|
|
76
77
|
|
|
77
78
|
unlock: 'mobileUnlock',
|
|
78
79
|
|
|
@@ -48,5 +48,12 @@ commands.mobileListIdlingResources = async function mobileListIdlingResources ()
|
|
|
48
48
|
return await this.espresso.jwproxy.command('/appium/execute_mobile/list_idling_resources', 'GET');
|
|
49
49
|
};
|
|
50
50
|
|
|
51
|
+
/**
|
|
52
|
+
* Wait for UI thread to be idle.
|
|
53
|
+
*/
|
|
54
|
+
commands.mobileWaitForUIThread = async function mobileWaitForUIThread () {
|
|
55
|
+
return await this.espresso.jwproxy.command('/appium/execute_mobile/ui_thread_sync', 'POST');
|
|
56
|
+
};
|
|
57
|
+
|
|
51
58
|
export { commands };
|
|
52
59
|
export default commands;
|
package/lib/server-builder.js
CHANGED
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "appium-espresso-driver",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.20.0",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "appium-espresso-driver",
|
|
9
|
-
"version": "2.
|
|
9
|
+
"version": "2.20.0",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@babel/runtime": "^7.4.3",
|
|
@@ -61,11 +61,11 @@
|
|
|
61
61
|
}
|
|
62
62
|
},
|
|
63
63
|
"node_modules/@appium/base-driver": {
|
|
64
|
-
"version": "9.3.
|
|
64
|
+
"version": "9.3.4",
|
|
65
65
|
"license": "Apache-2.0",
|
|
66
66
|
"dependencies": {
|
|
67
|
-
"@appium/support": "^3.1.
|
|
68
|
-
"@appium/types": "^0.10.
|
|
67
|
+
"@appium/support": "^3.1.8",
|
|
68
|
+
"@appium/types": "^0.10.2",
|
|
69
69
|
"@colors/colors": "1.5.0",
|
|
70
70
|
"@types/async-lock": "1.4.0",
|
|
71
71
|
"@types/bluebird": "3.5.38",
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
"morgan": "1.10.0",
|
|
87
87
|
"serve-favicon": "2.5.0",
|
|
88
88
|
"source-map-support": "0.5.21",
|
|
89
|
-
"type-fest": "3.
|
|
89
|
+
"type-fest": "3.7.1",
|
|
90
90
|
"validate.js": "0.13.1"
|
|
91
91
|
},
|
|
92
92
|
"engines": {
|
|
@@ -102,12 +102,12 @@
|
|
|
102
102
|
}
|
|
103
103
|
},
|
|
104
104
|
"node_modules/@appium/base-plugin": {
|
|
105
|
-
"version": "2.2.
|
|
105
|
+
"version": "2.2.4",
|
|
106
106
|
"extraneous": true,
|
|
107
107
|
"license": "Apache-2.0",
|
|
108
108
|
"dependencies": {
|
|
109
|
-
"@appium/base-driver": "^9.3.
|
|
110
|
-
"@appium/support": "^3.1.
|
|
109
|
+
"@appium/base-driver": "^9.3.4",
|
|
110
|
+
"@appium/support": "^3.1.8"
|
|
111
111
|
},
|
|
112
112
|
"engines": {
|
|
113
113
|
"node": "^14.17.0 || ^16.13.0 || >=18.0.0",
|
|
@@ -115,13 +115,13 @@
|
|
|
115
115
|
}
|
|
116
116
|
},
|
|
117
117
|
"node_modules/@appium/docutils": {
|
|
118
|
-
"version": "0.3.
|
|
118
|
+
"version": "0.3.1",
|
|
119
119
|
"extraneous": true,
|
|
120
120
|
"license": "Apache-2.0",
|
|
121
121
|
"dependencies": {
|
|
122
|
-
"@appium/support": "^3.1.
|
|
122
|
+
"@appium/support": "^3.1.8",
|
|
123
123
|
"@appium/tsconfig": "^0.2.4",
|
|
124
|
-
"@appium/typedoc-plugin-appium": "^0.5.
|
|
124
|
+
"@appium/typedoc-plugin-appium": "^0.5.2",
|
|
125
125
|
"@sliphua/lilconfig-ts-loader": "3.2.2",
|
|
126
126
|
"chalk": "4.1.2",
|
|
127
127
|
"consola": "2.15.3",
|
|
@@ -137,8 +137,8 @@
|
|
|
137
137
|
"semver": "7.3.8",
|
|
138
138
|
"source-map-support": "0.5.21",
|
|
139
139
|
"teen_process": "2.0.2",
|
|
140
|
-
"type-fest": "3.
|
|
141
|
-
"typedoc": "0.23.
|
|
140
|
+
"type-fest": "3.7.1",
|
|
141
|
+
"typedoc": "0.23.28",
|
|
142
142
|
"typedoc-plugin-markdown": "3.14.0",
|
|
143
143
|
"typedoc-plugin-resolve-crossmodule-references": "0.3.3",
|
|
144
144
|
"typescript": "4.9.5",
|
|
@@ -254,13 +254,13 @@
|
|
|
254
254
|
}
|
|
255
255
|
},
|
|
256
256
|
"node_modules/@appium/support": {
|
|
257
|
-
"version": "3.1.
|
|
257
|
+
"version": "3.1.8",
|
|
258
258
|
"license": "Apache-2.0",
|
|
259
259
|
"dependencies": {
|
|
260
260
|
"@appium/tsconfig": "^0.2.4",
|
|
261
|
-
"@appium/types": "^0.10.
|
|
261
|
+
"@appium/types": "^0.10.2",
|
|
262
262
|
"@colors/colors": "1.5.0",
|
|
263
|
-
"@types/archiver": "5.3.
|
|
263
|
+
"@types/archiver": "5.3.2",
|
|
264
264
|
"@types/base64-stream": "1.0.2",
|
|
265
265
|
"@types/find-root": "1.1.2",
|
|
266
266
|
"@types/glob": "8.1.0",
|
|
@@ -311,7 +311,7 @@
|
|
|
311
311
|
"source-map-support": "0.5.21",
|
|
312
312
|
"supports-color": "8.1.1",
|
|
313
313
|
"teen_process": "2.0.2",
|
|
314
|
-
"type-fest": "3.
|
|
314
|
+
"type-fest": "3.7.1",
|
|
315
315
|
"uuid": "9.0.0",
|
|
316
316
|
"which": "3.0.0",
|
|
317
317
|
"yauzl": "2.10.0"
|
|
@@ -443,14 +443,14 @@
|
|
|
443
443
|
}
|
|
444
444
|
},
|
|
445
445
|
"node_modules/@appium/typedoc-plugin-appium": {
|
|
446
|
-
"version": "0.5.
|
|
446
|
+
"version": "0.5.2",
|
|
447
447
|
"extraneous": true,
|
|
448
448
|
"license": "Apache-2.0",
|
|
449
449
|
"dependencies": {
|
|
450
450
|
"handlebars": "4.7.7",
|
|
451
451
|
"lodash": "4.17.21",
|
|
452
452
|
"pluralize": "8.0.0",
|
|
453
|
-
"type-fest": "3.
|
|
453
|
+
"type-fest": "3.7.1"
|
|
454
454
|
},
|
|
455
455
|
"engines": {
|
|
456
456
|
"node": "^14.17.0 || ^16.13.0 || >=18.0.0",
|
|
@@ -465,7 +465,7 @@
|
|
|
465
465
|
}
|
|
466
466
|
},
|
|
467
467
|
"node_modules/@appium/types": {
|
|
468
|
-
"version": "0.10.
|
|
468
|
+
"version": "0.10.2",
|
|
469
469
|
"license": "Apache-2.0",
|
|
470
470
|
"dependencies": {
|
|
471
471
|
"@appium/schema": "^0.2.6",
|
|
@@ -473,7 +473,7 @@
|
|
|
473
473
|
"@types/express": "4.17.17",
|
|
474
474
|
"@types/npmlog": "4.1.4",
|
|
475
475
|
"@types/ws": "8.5.4",
|
|
476
|
-
"type-fest": "3.
|
|
476
|
+
"type-fest": "3.7.1"
|
|
477
477
|
},
|
|
478
478
|
"engines": {
|
|
479
479
|
"node": "^14.17.0 || ^16.13.0 || >=18.0.0",
|
|
@@ -998,10 +998,10 @@
|
|
|
998
998
|
"license": "MIT"
|
|
999
999
|
},
|
|
1000
1000
|
"node_modules/@types/archiver": {
|
|
1001
|
-
"version": "5.3.
|
|
1001
|
+
"version": "5.3.2",
|
|
1002
1002
|
"license": "MIT",
|
|
1003
1003
|
"dependencies": {
|
|
1004
|
-
"@types/glob": "*"
|
|
1004
|
+
"@types/readdir-glob": "*"
|
|
1005
1005
|
}
|
|
1006
1006
|
},
|
|
1007
1007
|
"node_modules/@types/argparse": {
|
|
@@ -1124,7 +1124,7 @@
|
|
|
1124
1124
|
}
|
|
1125
1125
|
},
|
|
1126
1126
|
"node_modules/@types/node": {
|
|
1127
|
-
"version": "18.15.
|
|
1127
|
+
"version": "18.15.11",
|
|
1128
1128
|
"license": "MIT"
|
|
1129
1129
|
},
|
|
1130
1130
|
"node_modules/@types/normalize-package-data": {
|
|
@@ -1154,6 +1154,13 @@
|
|
|
1154
1154
|
"version": "1.2.4",
|
|
1155
1155
|
"license": "MIT"
|
|
1156
1156
|
},
|
|
1157
|
+
"node_modules/@types/readdir-glob": {
|
|
1158
|
+
"version": "1.1.1",
|
|
1159
|
+
"license": "MIT",
|
|
1160
|
+
"dependencies": {
|
|
1161
|
+
"@types/node": "*"
|
|
1162
|
+
}
|
|
1163
|
+
},
|
|
1157
1164
|
"node_modules/@types/rimraf": {
|
|
1158
1165
|
"version": "3.0.2",
|
|
1159
1166
|
"license": "MIT",
|
|
@@ -1379,7 +1386,7 @@
|
|
|
1379
1386
|
"license": "ISC"
|
|
1380
1387
|
},
|
|
1381
1388
|
"node_modules/appium-android-driver": {
|
|
1382
|
-
"version": "5.8.
|
|
1389
|
+
"version": "5.8.12",
|
|
1383
1390
|
"license": "Apache-2.0",
|
|
1384
1391
|
"dependencies": {
|
|
1385
1392
|
"@babel/runtime": "^7.0.0",
|
|
@@ -1445,7 +1452,7 @@
|
|
|
1445
1452
|
"license": "ISC"
|
|
1446
1453
|
},
|
|
1447
1454
|
"node_modules/appium-chromedriver": {
|
|
1448
|
-
"version": "5.3.
|
|
1455
|
+
"version": "5.3.2",
|
|
1449
1456
|
"hasInstallScript": true,
|
|
1450
1457
|
"license": "Apache-2.0",
|
|
1451
1458
|
"dependencies": {
|
|
@@ -3119,17 +3126,6 @@
|
|
|
3119
3126
|
"triple-beam": "^1.3.0"
|
|
3120
3127
|
}
|
|
3121
3128
|
},
|
|
3122
|
-
"node_modules/longjohn": {
|
|
3123
|
-
"version": "0.2.12",
|
|
3124
|
-
"extraneous": true,
|
|
3125
|
-
"license": "MIT",
|
|
3126
|
-
"dependencies": {
|
|
3127
|
-
"source-map-support": "0.3.2 - 1.0.0"
|
|
3128
|
-
},
|
|
3129
|
-
"engines": {
|
|
3130
|
-
"node": ">= 0.9.3"
|
|
3131
|
-
}
|
|
3132
|
-
},
|
|
3133
3129
|
"node_modules/lunr": {
|
|
3134
3130
|
"version": "2.3.9",
|
|
3135
3131
|
"extraneous": true,
|
|
@@ -3252,7 +3248,7 @@
|
|
|
3252
3248
|
}
|
|
3253
3249
|
},
|
|
3254
3250
|
"node_modules/mkdirp": {
|
|
3255
|
-
"version": "2.1.
|
|
3251
|
+
"version": "2.1.6",
|
|
3256
3252
|
"license": "MIT",
|
|
3257
3253
|
"bin": {
|
|
3258
3254
|
"mkdirp": "dist/cjs/src/bin.js"
|
|
@@ -3272,7 +3268,7 @@
|
|
|
3272
3268
|
}
|
|
3273
3269
|
},
|
|
3274
3270
|
"node_modules/moment-timezone": {
|
|
3275
|
-
"version": "0.5.
|
|
3271
|
+
"version": "0.5.42",
|
|
3276
3272
|
"license": "MIT",
|
|
3277
3273
|
"dependencies": {
|
|
3278
3274
|
"moment": "^2.29.4"
|
|
@@ -4501,7 +4497,7 @@
|
|
|
4501
4497
|
"license": "0BSD"
|
|
4502
4498
|
},
|
|
4503
4499
|
"node_modules/type-fest": {
|
|
4504
|
-
"version": "3.
|
|
4500
|
+
"version": "3.7.1",
|
|
4505
4501
|
"license": "(MIT OR CC0-1.0)",
|
|
4506
4502
|
"engines": {
|
|
4507
4503
|
"node": ">=14.16"
|
|
@@ -4522,7 +4518,7 @@
|
|
|
4522
4518
|
}
|
|
4523
4519
|
},
|
|
4524
4520
|
"node_modules/typedoc": {
|
|
4525
|
-
"version": "0.23.
|
|
4521
|
+
"version": "0.23.28",
|
|
4526
4522
|
"extraneous": true,
|
|
4527
4523
|
"license": "Apache-2.0",
|
|
4528
4524
|
"dependencies": {
|
|
@@ -4538,7 +4534,7 @@
|
|
|
4538
4534
|
"node": ">= 14.14"
|
|
4539
4535
|
},
|
|
4540
4536
|
"peerDependencies": {
|
|
4541
|
-
"typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x"
|
|
4537
|
+
"typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x"
|
|
4542
4538
|
}
|
|
4543
4539
|
},
|
|
4544
4540
|
"node_modules/typedoc-plugin-markdown": {
|
|
@@ -4575,7 +4571,7 @@
|
|
|
4575
4571
|
}
|
|
4576
4572
|
},
|
|
4577
4573
|
"node_modules/typedoc/node_modules/minimatch": {
|
|
4578
|
-
"version": "7.4.
|
|
4574
|
+
"version": "7.4.3",
|
|
4579
4575
|
"extraneous": true,
|
|
4580
4576
|
"license": "ISC",
|
|
4581
4577
|
"dependencies": {
|