appium-xcuitest-driver 4.20.0 → 4.21.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.
Files changed (298) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +7 -9
  3. package/build/index.js +7 -16
  4. package/build/lib/app-utils.d.ts +58 -0
  5. package/build/lib/app-utils.d.ts.map +1 -0
  6. package/build/lib/app-utils.js +196 -155
  7. package/build/lib/app-utils.js.map +1 -1
  8. package/build/lib/commands/activeAppInfo.d.ts +12 -0
  9. package/build/lib/commands/activeAppInfo.d.ts.map +1 -0
  10. package/build/lib/commands/activeAppInfo.js +13 -15
  11. package/build/lib/commands/activeAppInfo.js.map +1 -1
  12. package/build/lib/commands/alert.d.ts +29 -0
  13. package/build/lib/commands/alert.d.ts.map +1 -0
  14. package/build/lib/commands/alert.js +57 -44
  15. package/build/lib/commands/alert.js.map +1 -1
  16. package/build/lib/commands/app-management.d.ts +89 -0
  17. package/build/lib/commands/app-management.d.ts.map +1 -0
  18. package/build/lib/commands/app-management.js +174 -125
  19. package/build/lib/commands/app-management.js.map +1 -1
  20. package/build/lib/commands/appearance.d.ts +35 -0
  21. package/build/lib/commands/appearance.d.ts.map +1 -0
  22. package/build/lib/commands/appearance.js +79 -57
  23. package/build/lib/commands/appearance.js.map +1 -1
  24. package/build/lib/commands/battery.d.ts +27 -0
  25. package/build/lib/commands/battery.d.ts.map +1 -0
  26. package/build/lib/commands/battery.js +24 -15
  27. package/build/lib/commands/battery.js.map +1 -1
  28. package/build/lib/commands/biometric.d.ts +46 -0
  29. package/build/lib/commands/biometric.d.ts.map +1 -0
  30. package/build/lib/commands/biometric.js +54 -36
  31. package/build/lib/commands/biometric.js.map +1 -1
  32. package/build/lib/commands/certificate.d.ts +66 -0
  33. package/build/lib/commands/certificate.d.ts.map +1 -0
  34. package/build/lib/commands/certificate.js +407 -322
  35. package/build/lib/commands/certificate.js.map +1 -1
  36. package/build/lib/commands/clipboard.d.ts +24 -0
  37. package/build/lib/commands/clipboard.d.ts.map +1 -0
  38. package/build/lib/commands/clipboard.js +34 -23
  39. package/build/lib/commands/clipboard.js.map +1 -1
  40. package/build/lib/commands/condition.d.ts +86 -0
  41. package/build/lib/commands/condition.d.ts.map +1 -0
  42. package/build/lib/commands/condition.js +123 -66
  43. package/build/lib/commands/condition.js.map +1 -1
  44. package/build/lib/commands/context.d.ts +118 -0
  45. package/build/lib/commands/context.d.ts.map +1 -0
  46. package/build/lib/commands/context.js +549 -413
  47. package/build/lib/commands/context.js.map +1 -1
  48. package/build/lib/commands/deviceInfo.d.ts +12 -0
  49. package/build/lib/commands/deviceInfo.d.ts.map +1 -0
  50. package/build/lib/commands/deviceInfo.js +19 -26
  51. package/build/lib/commands/deviceInfo.js.map +1 -1
  52. package/build/lib/commands/element.d.ts +81 -0
  53. package/build/lib/commands/element.d.ts.map +1 -0
  54. package/build/lib/commands/element.js +323 -246
  55. package/build/lib/commands/element.js.map +1 -1
  56. package/build/lib/commands/execute.d.ts +106 -0
  57. package/build/lib/commands/execute.d.ts.map +1 -0
  58. package/build/lib/commands/execute.js +94 -56
  59. package/build/lib/commands/execute.js.map +1 -1
  60. package/build/lib/commands/file-movement.d.ts +148 -0
  61. package/build/lib/commands/file-movement.d.ts.map +1 -0
  62. package/build/lib/commands/file-movement.js +453 -238
  63. package/build/lib/commands/file-movement.js.map +1 -1
  64. package/build/lib/commands/find.d.ts +21 -0
  65. package/build/lib/commands/find.d.ts.map +1 -0
  66. package/build/lib/commands/find.js +179 -130
  67. package/build/lib/commands/find.js.map +1 -1
  68. package/build/lib/commands/general.d.ts +147 -0
  69. package/build/lib/commands/general.d.ts.map +1 -0
  70. package/build/lib/commands/general.js +333 -257
  71. package/build/lib/commands/general.js.map +1 -1
  72. package/build/lib/commands/geolocation.d.ts +45 -0
  73. package/build/lib/commands/geolocation.d.ts.map +1 -0
  74. package/build/lib/commands/geolocation.js +37 -20
  75. package/build/lib/commands/geolocation.js.map +1 -1
  76. package/build/lib/commands/gesture.d.ts +112 -0
  77. package/build/lib/commands/gesture.d.ts.map +1 -0
  78. package/build/lib/commands/gesture.js +474 -394
  79. package/build/lib/commands/gesture.js.map +1 -1
  80. package/build/lib/commands/index.d.ts +80 -0
  81. package/build/lib/commands/index.d.ts.map +1 -0
  82. package/build/lib/commands/index.js +83 -51
  83. package/build/lib/commands/index.js.map +1 -1
  84. package/build/lib/commands/iohid.d.ts +34 -0
  85. package/build/lib/commands/iohid.d.ts.map +1 -0
  86. package/build/lib/commands/iohid.js +40 -30
  87. package/build/lib/commands/iohid.js.map +1 -1
  88. package/build/lib/commands/keychains.d.ts +12 -0
  89. package/build/lib/commands/keychains.d.ts.map +1 -0
  90. package/build/lib/commands/keychains.js +17 -21
  91. package/build/lib/commands/keychains.js.map +1 -1
  92. package/build/lib/commands/localization.d.ts +48 -0
  93. package/build/lib/commands/localization.d.ts.map +1 -0
  94. package/build/lib/commands/localization.js +39 -25
  95. package/build/lib/commands/localization.js.map +1 -1
  96. package/build/lib/commands/location.d.ts +54 -0
  97. package/build/lib/commands/location.d.ts.map +1 -0
  98. package/build/lib/commands/location.js +90 -63
  99. package/build/lib/commands/location.js.map +1 -1
  100. package/build/lib/commands/lock.d.ts +19 -0
  101. package/build/lib/commands/lock.d.ts.map +1 -0
  102. package/build/lib/commands/lock.js +38 -29
  103. package/build/lib/commands/lock.js.map +1 -1
  104. package/build/lib/commands/log.d.ts +74 -0
  105. package/build/lib/commands/log.d.ts.map +1 -0
  106. package/build/lib/commands/log.js +189 -154
  107. package/build/lib/commands/log.js.map +1 -1
  108. package/build/lib/commands/navigation.d.ts +40 -0
  109. package/build/lib/commands/navigation.d.ts.map +1 -0
  110. package/build/lib/commands/navigation.js +106 -77
  111. package/build/lib/commands/navigation.js.map +1 -1
  112. package/build/lib/commands/notifications.d.ts +57 -0
  113. package/build/lib/commands/notifications.d.ts.map +1 -0
  114. package/build/lib/commands/notifications.js +79 -45
  115. package/build/lib/commands/notifications.js.map +1 -1
  116. package/build/lib/commands/pasteboard.d.ts +13 -0
  117. package/build/lib/commands/pasteboard.d.ts.map +1 -0
  118. package/build/lib/commands/pasteboard.js +28 -29
  119. package/build/lib/commands/pasteboard.js.map +1 -1
  120. package/build/lib/commands/pcap.d.ts +50 -0
  121. package/build/lib/commands/pcap.d.ts.map +1 -0
  122. package/build/lib/commands/pcap.js +151 -118
  123. package/build/lib/commands/pcap.js.map +1 -1
  124. package/build/lib/commands/performance.d.ts +94 -0
  125. package/build/lib/commands/performance.d.ts.map +1 -0
  126. package/build/lib/commands/performance.js +318 -238
  127. package/build/lib/commands/performance.js.map +1 -1
  128. package/build/lib/commands/permissions.d.ts +81 -0
  129. package/build/lib/commands/permissions.d.ts.map +1 -0
  130. package/build/lib/commands/permissions.js +136 -83
  131. package/build/lib/commands/permissions.js.map +1 -1
  132. package/build/lib/commands/proxy-helper.d.ts +15 -0
  133. package/build/lib/commands/proxy-helper.d.ts.map +1 -0
  134. package/build/lib/commands/proxy-helper.js +121 -105
  135. package/build/lib/commands/proxy-helper.js.map +1 -1
  136. package/build/lib/commands/record-audio.d.ts +75 -0
  137. package/build/lib/commands/record-audio.d.ts.map +1 -0
  138. package/build/lib/commands/record-audio.js +226 -167
  139. package/build/lib/commands/record-audio.js.map +1 -1
  140. package/build/lib/commands/recordscreen.d.ts +171 -0
  141. package/build/lib/commands/recordscreen.d.ts.map +1 -0
  142. package/build/lib/commands/recordscreen.js +318 -227
  143. package/build/lib/commands/recordscreen.js.map +1 -1
  144. package/build/lib/commands/screenshots.d.ts +17 -0
  145. package/build/lib/commands/screenshots.d.ts.map +1 -0
  146. package/build/lib/commands/screenshots.js +86 -70
  147. package/build/lib/commands/screenshots.js.map +1 -1
  148. package/build/lib/commands/source.d.ts +17 -0
  149. package/build/lib/commands/source.d.ts.map +1 -0
  150. package/build/lib/commands/source.js +119 -95
  151. package/build/lib/commands/source.js.map +1 -1
  152. package/build/lib/commands/timeouts.d.ts +33 -0
  153. package/build/lib/commands/timeouts.d.ts.map +1 -0
  154. package/build/lib/commands/timeouts.js +57 -40
  155. package/build/lib/commands/timeouts.js.map +1 -1
  156. package/build/lib/commands/web.d.ts +178 -0
  157. package/build/lib/commands/web.d.ts.map +1 -0
  158. package/build/lib/commands/web.js +737 -537
  159. package/build/lib/commands/web.js.map +1 -1
  160. package/build/lib/commands/xctest.d.ts +161 -0
  161. package/build/lib/commands/xctest.d.ts.map +1 -0
  162. package/build/lib/commands/xctest.js +270 -169
  163. package/build/lib/commands/xctest.js.map +1 -1
  164. package/build/lib/cookies.d.ts +15 -0
  165. package/build/lib/cookies.d.ts.map +1 -0
  166. package/build/lib/cookies.js +79 -51
  167. package/build/lib/cookies.js.map +1 -1
  168. package/build/lib/css-converter.d.ts +80 -0
  169. package/build/lib/css-converter.d.ts.map +1 -0
  170. package/build/lib/css-converter.js +253 -158
  171. package/build/lib/css-converter.js.map +1 -1
  172. package/build/lib/desired-caps.d.ts +437 -0
  173. package/build/lib/desired-caps.d.ts.map +1 -0
  174. package/build/lib/desired-caps.js +341 -336
  175. package/build/lib/desired-caps.js.map +1 -1
  176. package/build/lib/device-connections-factory.d.ts +13 -0
  177. package/build/lib/device-connections-factory.d.ts.map +1 -0
  178. package/build/lib/device-connections-factory.js +221 -204
  179. package/build/lib/device-connections-factory.js.map +1 -1
  180. package/build/lib/device-log/ios-crash-log.d.ts +33 -0
  181. package/build/lib/device-log/ios-crash-log.d.ts.map +1 -0
  182. package/build/lib/device-log/ios-crash-log.js +110 -99
  183. package/build/lib/device-log/ios-crash-log.js.map +1 -1
  184. package/build/lib/device-log/ios-device-log.d.ts +12 -0
  185. package/build/lib/device-log/ios-device-log.d.ts.map +1 -0
  186. package/build/lib/device-log/ios-device-log.js +35 -40
  187. package/build/lib/device-log/ios-device-log.js.map +1 -1
  188. package/build/lib/device-log/ios-log.d.ts +15 -0
  189. package/build/lib/device-log/ios-log.d.ts.map +1 -0
  190. package/build/lib/device-log/ios-log.js +49 -53
  191. package/build/lib/device-log/ios-log.js.map +1 -1
  192. package/build/lib/device-log/ios-performance-log.d.ts +13 -0
  193. package/build/lib/device-log/ios-performance-log.d.ts.map +1 -0
  194. package/build/lib/device-log/ios-performance-log.js +42 -43
  195. package/build/lib/device-log/ios-performance-log.js.map +1 -1
  196. package/build/lib/device-log/ios-simulator-log.d.ts +20 -0
  197. package/build/lib/device-log/ios-simulator-log.d.ts.map +1 -0
  198. package/build/lib/device-log/ios-simulator-log.js +115 -111
  199. package/build/lib/device-log/ios-simulator-log.js.map +1 -1
  200. package/build/lib/device-log/rotating-log.d.ts +18 -0
  201. package/build/lib/device-log/rotating-log.d.ts.map +1 -0
  202. package/build/lib/device-log/rotating-log.js +50 -49
  203. package/build/lib/device-log/rotating-log.js.map +1 -1
  204. package/build/lib/device-log/safari-console-log.d.ts +8 -0
  205. package/build/lib/device-log/safari-console-log.d.ts.map +1 -0
  206. package/build/lib/device-log/safari-console-log.js +87 -54
  207. package/build/lib/device-log/safari-console-log.js.map +1 -1
  208. package/build/lib/device-log/safari-network-log.d.ts +10 -0
  209. package/build/lib/device-log/safari-network-log.d.ts.map +1 -0
  210. package/build/lib/device-log/safari-network-log.js +156 -135
  211. package/build/lib/device-log/safari-network-log.js.map +1 -1
  212. package/build/lib/driver.d.ts +1448 -0
  213. package/build/lib/driver.d.ts.map +1 -0
  214. package/build/lib/driver.js +1611 -1088
  215. package/build/lib/driver.js.map +1 -1
  216. package/build/lib/ios-deploy.d.ts +34 -0
  217. package/build/lib/ios-deploy.d.ts.map +1 -0
  218. package/build/lib/ios-deploy.js +199 -173
  219. package/build/lib/ios-deploy.js.map +1 -1
  220. package/build/lib/ios-fs-helpers.d.ts +55 -0
  221. package/build/lib/ios-fs-helpers.d.ts.map +1 -0
  222. package/build/lib/ios-fs-helpers.js +260 -189
  223. package/build/lib/ios-fs-helpers.js.map +1 -1
  224. package/build/lib/ios-generic-simulators.d.ts +6 -0
  225. package/build/lib/ios-generic-simulators.d.ts.map +1 -0
  226. package/build/lib/ios-generic-simulators.js +12 -11
  227. package/build/lib/ios-generic-simulators.js.map +1 -1
  228. package/build/lib/logger.d.ts +3 -0
  229. package/build/lib/logger.d.ts.map +1 -0
  230. package/build/lib/logger.js +5 -11
  231. package/build/lib/logger.js.map +1 -1
  232. package/build/lib/method-map.d.ts +213 -0
  233. package/build/lib/method-map.d.ts.map +1 -0
  234. package/build/lib/method-map.js +117 -219
  235. package/build/lib/method-map.js.map +1 -1
  236. package/build/lib/py-ios-device-client.d.ts +19 -0
  237. package/build/lib/py-ios-device-client.d.ts.map +1 -0
  238. package/build/lib/py-ios-device-client.js +98 -112
  239. package/build/lib/py-ios-device-client.js.map +1 -1
  240. package/build/lib/real-device-management.d.ts +34 -0
  241. package/build/lib/real-device-management.d.ts.map +1 -0
  242. package/build/lib/real-device-management.js +77 -70
  243. package/build/lib/real-device-management.js.map +1 -1
  244. package/build/lib/simulator-management.d.ts +84 -0
  245. package/build/lib/simulator-management.d.ts.map +1 -0
  246. package/build/lib/simulator-management.js +250 -202
  247. package/build/lib/simulator-management.js.map +1 -1
  248. package/build/lib/utils.d.ts +114 -0
  249. package/build/lib/utils.d.ts.map +1 -0
  250. package/build/lib/utils.js +369 -289
  251. package/build/lib/utils.js.map +1 -1
  252. package/lib/commands/activeAppInfo.js +11 -14
  253. package/lib/commands/alert.js +53 -37
  254. package/lib/commands/app-management.js +180 -129
  255. package/lib/commands/appearance.js +65 -74
  256. package/lib/commands/battery.js +13 -16
  257. package/lib/commands/biometric.js +48 -52
  258. package/lib/commands/certificate.js +259 -222
  259. package/lib/commands/clipboard.js +30 -30
  260. package/lib/commands/condition.js +114 -103
  261. package/lib/commands/context.js +579 -494
  262. package/lib/commands/deviceInfo.js +17 -21
  263. package/lib/commands/element.js +305 -247
  264. package/lib/commands/execute.js +82 -58
  265. package/lib/commands/file-movement.js +242 -208
  266. package/lib/commands/find.js +156 -146
  267. package/lib/commands/general.js +333 -282
  268. package/lib/commands/gesture.js +501 -390
  269. package/lib/commands/index.js +41 -18
  270. package/lib/commands/iohid.js +34 -36
  271. package/lib/commands/keychains.js +13 -16
  272. package/lib/commands/localization.js +26 -28
  273. package/lib/commands/location.js +86 -72
  274. package/lib/commands/lock.js +33 -23
  275. package/lib/commands/log.js +154 -134
  276. package/lib/commands/navigation.js +96 -75
  277. package/lib/commands/notifications.js +71 -60
  278. package/lib/commands/pasteboard.js +26 -19
  279. package/lib/commands/pcap.js +119 -107
  280. package/lib/commands/performance.js +201 -176
  281. package/lib/commands/permissions.js +59 -75
  282. package/lib/commands/proxy-helper.js +69 -52
  283. package/lib/commands/record-audio.js +173 -140
  284. package/lib/commands/recordscreen.js +230 -198
  285. package/lib/commands/screenshots.js +82 -69
  286. package/lib/commands/source.js +59 -52
  287. package/lib/commands/timeouts.js +56 -36
  288. package/lib/commands/web.js +356 -186
  289. package/lib/commands/xctest.js +168 -146
  290. package/lib/driver.js +739 -219
  291. package/lib/py-ios-device-client.js +1 -1
  292. package/lib/utils.js +1 -1
  293. package/npm-shrinkwrap.json +928 -1495
  294. package/package.json +27 -15
  295. package/scripts/build-docs.js +28 -30
  296. package/build/lib/commands/cookies.js +0 -66
  297. package/build/lib/commands/cookies.js.map +0 -1
  298. package/lib/commands/cookies.js +0 -67
package/CHANGELOG.md CHANGED
@@ -1,3 +1,35 @@
1
+ ## [4.21.0](https://github.com/appium/appium-xcuitest-driver/compare/v4.20.1...v4.21.0) (2023-03-29)
2
+
3
+
4
+ ### Features
5
+
6
+ * build docs with typedoc ([ab354a5](https://github.com/appium/appium-xcuitest-driver/commit/ab354a57d8677b639949959f8a7112cb11cd9848))
7
+ * refactor to support automatic command docs ([9b9e6fa](https://github.com/appium/appium-xcuitest-driver/commit/9b9e6fa860425f3ed2a9130d088889c05e3e10a9))
8
+
9
+
10
+ ### Bug Fixes
11
+
12
+ * **driver:** use correct method name ([45330bb](https://github.com/appium/appium-xcuitest-driver/commit/45330bbbdc8b1d28a3dd43ba8628e80a9f278160))
13
+ * **execute:** better validation of "mobile commands" ([0b9b9cb](https://github.com/appium/appium-xcuitest-driver/commit/0b9b9cb697d3c18e1d65a122ac5029ad6452c916))
14
+
15
+
16
+ ### Miscellaneous Chores
17
+
18
+ * add wallaby config ([1915292](https://github.com/appium/appium-xcuitest-driver/commit/1915292b830d8f60a98af1b211f83d3982bfba7b))
19
+ * fixup ([4fb1e8a](https://github.com/appium/appium-xcuitest-driver/commit/4fb1e8a1d31f807c92550f0677bf4e36fefd9076))
20
+ * rename method installXCTestBundle => mobileInstallXCTestBundle for consistency ([11349cb](https://github.com/appium/appium-xcuitest-driver/commit/11349cb52bea66ee4b2d7f48aa81d8891e69641d))
21
+ * rename runXCTest => mobileRunXCTest ([621ef8c](https://github.com/appium/appium-xcuitest-driver/commit/621ef8c6020c67bbc95bb7a44bbdf8a32a1a61e2))
22
+ * try to skip problem tests ([3cfea5d](https://github.com/appium/appium-xcuitest-driver/commit/3cfea5d72984035c6ee84a06b019c4151017e34f))
23
+ * upgrade appium ([fb6ed96](https://github.com/appium/appium-xcuitest-driver/commit/fb6ed9664246e63b8a49c35f2ab8a3231627bfd9))
24
+ * use random port for phony https server ([382d296](https://github.com/appium/appium-xcuitest-driver/commit/382d2966d5043fe93e3646f88e7b0416f6e4d6f3))
25
+
26
+ ## [4.20.1](https://github.com/appium/appium-xcuitest-driver/compare/v4.20.0...v4.20.1) (2023-03-29)
27
+
28
+
29
+ ### Bug Fixes
30
+
31
+ * Add missing --name option to removeProfile ([#1530](https://github.com/appium/appium-xcuitest-driver/issues/1530)) ([a930762](https://github.com/appium/appium-xcuitest-driver/commit/a930762933a7008caab4fe1549e64e4d340b6ede))
32
+
1
33
  ## [4.20.0](https://github.com/appium/appium-xcuitest-driver/compare/v4.19.1...v4.20.0) (2023-03-28)
2
34
 
3
35
 
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # appium-xcuitest-driver
2
2
 
3
- [![NPM version](http://img.shields.io/npm/v/appium-xcuitest-driver.svg)](https://npmjs.org/package/appium-xcuitest-driver)
3
+ [![npm version](http://img.shields.io/npm/v/appium-xcuitest-driver.svg)](https://npmjs.org/package/appium-xcuitest-driver)
4
4
  [![Downloads](http://img.shields.io/npm/dm/appium-xcuitest-driver.svg)](https://npmjs.org/package/appium-xcuitest-driver)
5
5
 
6
6
  [![Release](https://github.com/appium/appium-xcuitest-driver/actions/workflows/publish.js.yml/badge.svg)](https://github.com/appium/appium-xcuitest-driver/actions/workflows/publish.js.yml)
@@ -19,23 +19,23 @@ The [Documentation](https://appium.github.io/appium-xcuitest-driver) is hosted s
19
19
 
20
20
  ## Contributing & Development
21
21
 
22
- To install the project check it out from GitHub and run:
22
+ Clone this project from GitHub and run:
23
23
 
24
- ```
24
+ ```bash
25
25
  npm install
26
26
  ```
27
27
 
28
28
  To watch changes during the development:
29
29
 
30
- ```
30
+ ```bash
31
31
  npm run watch
32
32
  ```
33
33
 
34
34
  To run unit/functional tests:
35
35
 
36
- ```
37
- npm test
38
- npm e2e-test
36
+ ```bash
37
+ npm test # unit
38
+ npm run e2e-test # functional
39
39
  ```
40
40
 
41
41
  There are also a number of environment variables that can be used when running
@@ -49,5 +49,3 @@ the tests locally. These include:
49
49
  the root directory of the repo with the extension "xcconfig")
50
50
  * `UICATALOG_REAL_DEVICE` - path to the real device build of UICatalog, in case
51
51
  the npm installed one is not built for real device
52
-
53
-
package/build/index.js CHANGED
@@ -1,17 +1,8 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- Object.defineProperty(exports, "XCUITestDriver", {
7
- enumerable: true,
8
- get: function () {
9
- return _driver.XCUITestDriver;
10
- }
11
- });
12
- exports.default = void 0;
13
- require("source-map-support/register");
14
- var _driver = require("./lib/driver");
15
- var _default = _driver.XCUITestDriver;
16
- exports.default = _default;
17
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZHJpdmVyIiwicmVxdWlyZSIsIl9kZWZhdWx0IiwiWENVSVRlc3REcml2ZXIiLCJleHBvcnRzIiwiZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIHRyYW5zcGlsZTptYWluXG5pbXBvcnQgeyBYQ1VJVGVzdERyaXZlciB9IGZyb20gJy4vbGliL2RyaXZlcic7XG5cbmV4cG9ydCB7IFhDVUlUZXN0RHJpdmVyIH07XG5leHBvcnQgZGVmYXVsdCBYQ1VJVGVzdERyaXZlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUNBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUE4QyxJQUFBQyxRQUFBLEdBRy9CQyxzQkFBYztBQUFBQyxPQUFBLENBQUFDLE9BQUEsR0FBQUgsUUFBQSJ9
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.XCUITestDriver = void 0;
4
+ // transpile:main
5
+ const driver_1 = require("./lib/driver");
6
+ Object.defineProperty(exports, "XCUITestDriver", { enumerable: true, get: function () { return driver_1.XCUITestDriver; } });
7
+ exports.default = driver_1.XCUITestDriver;
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,58 @@
1
+ export type PlatformOpts = {
2
+ /**
3
+ * - Whether the destination platform is a Simulator
4
+ */
5
+ isSimulator: boolean;
6
+ /**
7
+ * - Whether the destination platform is a Simulator
8
+ */
9
+ isTvOS: boolean;
10
+ };
11
+ export function extractBundleId(app: any): Promise<any>;
12
+ /**
13
+ * @typedef {Object} PlatformOpts
14
+ *
15
+ * @property {boolean} isSimulator - Whether the destination platform is a Simulator
16
+ * @property {boolean} isTvOS - Whether the destination platform is a Simulator
17
+ */
18
+ /**
19
+ * Verify whether the given application is compatible to the
20
+ * platform where it is going to be installed and tested.
21
+ *
22
+ * @param {string} app - The actual path to the application bundle
23
+ * @param {PlatformOpts} expectedPlatform
24
+ * @throws {Error} If bundle architecture does not match the expected device architecture.
25
+ */
26
+ export function verifyApplicationPlatform(app: string, expectedPlatform: PlatformOpts): Promise<void>;
27
+ export function parseLocalizableStrings(opts: any): Promise<{}>;
28
+ export const SAFARI_BUNDLE_ID: "com.apple.mobilesafari";
29
+ export function fetchSupportedAppPlatforms(app: any): Promise<any[]>;
30
+ export const APP_EXT: ".app";
31
+ export const IPA_EXT: ".ipa";
32
+ /**
33
+ * Check whether the given path on the file system points to the .app bundle root
34
+ *
35
+ * @param {string} appPath Possible .app bundle root
36
+ * @returns {boolean} Whether the given path points to an .app bundle
37
+ */
38
+ export function isAppBundle(appPath: string): boolean;
39
+ /**
40
+ * Extract the given archive and looks for items with given extensions in it
41
+ *
42
+ * @param {string} archivePath Full path to a .zip archive
43
+ * @param {Array<string>} appExtensions List of matching item extensions
44
+ * @returns {Promise<[string, string[]]>} Tuple, where the first element points to
45
+ * a temporary folder root where the archive has been extracted and the second item
46
+ * contains a list of relative paths to matched items
47
+ */
48
+ export function findApps(archivePath: string, appExtensions: Array<string>): Promise<[string, string[]]>;
49
+ /**
50
+ * Moves the application bundle to a newly created temporary folder
51
+ *
52
+ * @param {string} appRoot Full path to the .app bundle
53
+ * @returns {Promise<string>} The new path to the app bundle.
54
+ * The name of the app bundle remains though
55
+ */
56
+ export function isolateAppBundle(appRoot: string): Promise<string>;
57
+ export function extractBundleVersion(app: any): Promise<any>;
58
+ //# sourceMappingURL=app-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-utils.d.ts","sourceRoot":"","sources":["../../lib/app-utils.js"],"names":[],"mappings":";;;;iBA8Ec,OAAO;;;;YACP,OAAO;;AA9BrB,wDAIC;AAsBD;;;;;GAKG;AAEH;;;;;;;GAOG;AACH,+CAJW,MAAM,oBACN,YAAY,iBAoBtB;AAWD,gEA+EC;AA9LD,wDAAkD;AAoDlD,qEAcC;AAjED,6BAAuB;AACvB,6BAAuB;AA8LvB;;;;;GAKG;AACH,qCAHW,MAAM,GACJ,OAAO,CAMnB;AAED;;;;;;;;GAQG;AACH,sCANW,MAAM,iBACN,MAAM,MAAM,CAAC,GACX,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAgBvC;AAED;;;;;;GAMG;AACH,0CAJW,MAAM,GACJ,QAAQ,MAAM,CAAC,CAQ3B;AA/LD,6DAEC"}
@@ -1,23 +1,13 @@
1
1
  "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.SAFARI_BUNDLE_ID = exports.IPA_EXT = exports.APP_EXT = void 0;
8
- exports.extractBundleId = extractBundleId;
9
- exports.extractBundleVersion = extractBundleVersion;
10
- exports.fetchSupportedAppPlatforms = fetchSupportedAppPlatforms;
11
- exports.findApps = findApps;
12
- exports.isAppBundle = isAppBundle;
13
- exports.isolateAppBundle = isolateAppBundle;
14
- exports.parseLocalizableStrings = parseLocalizableStrings;
15
- exports.verifyApplicationPlatform = verifyApplicationPlatform;
16
- require("source-map-support/register");
17
- var _lodash = _interopRequireDefault(require("lodash"));
18
- var _path = _interopRequireDefault(require("path"));
19
- var _support = require("appium/support");
20
- var _logger = _interopRequireDefault(require("./logger.js"));
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.extractBundleVersion = exports.isolateAppBundle = exports.findApps = exports.isAppBundle = exports.IPA_EXT = exports.APP_EXT = exports.fetchSupportedAppPlatforms = exports.SAFARI_BUNDLE_ID = exports.parseLocalizableStrings = exports.verifyApplicationPlatform = exports.extractBundleId = void 0;
7
+ const lodash_1 = __importDefault(require("lodash"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const support_1 = require("appium/support");
10
+ const logger_js_1 = __importDefault(require("./logger.js"));
21
11
  const STRINGSDICT_RESOURCE = '.stringsdict';
22
12
  const STRINGS_RESOURCE = '.strings';
23
13
  const SAFARI_BUNDLE_ID = 'com.apple.mobilesafari';
@@ -27,168 +17,219 @@ exports.APP_EXT = APP_EXT;
27
17
  const IPA_EXT = '.ipa';
28
18
  exports.IPA_EXT = IPA_EXT;
29
19
  const PLIST_CACHE = new WeakMap();
20
+ /**
21
+ * Retrieves the value of the given entry name from the application's Info.plist.
22
+ *
23
+ * @this {Object} Optinal instance used for caching. Ususally the driver instance.
24
+ * @param {string} app Full path to the app bundle root.
25
+ * @param {string} entryName Key name in the plist.
26
+ * @returns {Promise<Any | undefined>} Either the extracted value or undefined if no such key has been found in the plist.
27
+ * @throws {Error} If the application's Info.plist cannot be parsed.
28
+ */
30
29
  async function extractPlistEntry(app, entryName) {
31
- const plistPath = _path.default.resolve(app, 'Info.plist');
32
- const parseFile = async () => {
33
- try {
34
- return await _support.plist.parsePlistFile(plistPath);
35
- } catch (err) {
36
- throw new Error(`Could not extract Info.plist from '${_path.default.basename(app)}': ${err.message}`);
30
+ const plistPath = path_1.default.resolve(app, 'Info.plist');
31
+ const parseFile = async () => {
32
+ try {
33
+ return await support_1.plist.parsePlistFile(plistPath);
34
+ }
35
+ catch (err) {
36
+ throw new Error(`Could not extract Info.plist from '${path_1.default.basename(app)}': ${err.message}`);
37
+ }
38
+ };
39
+ let plistObj;
40
+ if (lodash_1.default.isNil(this)) {
41
+ plistObj = await parseFile();
37
42
  }
38
- };
39
- let plistObj;
40
- if (_lodash.default.isNil(this)) {
41
- plistObj = await parseFile();
42
- } else {
43
- var _PLIST_CACHE$get;
44
- plistObj = (_PLIST_CACHE$get = PLIST_CACHE.get(this)) === null || _PLIST_CACHE$get === void 0 ? void 0 : _PLIST_CACHE$get[app];
45
- if (!plistObj) {
46
- plistObj = await parseFile();
47
- PLIST_CACHE.set(this, {
48
- ...(PLIST_CACHE.get(this) || {}),
49
- [app]: plistObj
50
- });
43
+ else {
44
+ plistObj = PLIST_CACHE.get(this)?.[app];
45
+ if (!plistObj) {
46
+ plistObj = await parseFile();
47
+ PLIST_CACHE.set(this, {
48
+ ...(PLIST_CACHE.get(this) || {}),
49
+ [app]: plistObj,
50
+ });
51
+ }
51
52
  }
52
- }
53
- return plistObj[entryName];
53
+ return plistObj[entryName];
54
54
  }
55
55
  async function extractBundleId(app) {
56
- const bundleId = await extractPlistEntry.bind(this)(app, 'CFBundleIdentifier');
57
- _logger.default.debug(`Getting bundle ID from app '${app}': '${bundleId}'`);
58
- return bundleId;
56
+ const bundleId = await extractPlistEntry.bind(this)(app, 'CFBundleIdentifier');
57
+ logger_js_1.default.debug(`Getting bundle ID from app '${app}': '${bundleId}'`);
58
+ return bundleId;
59
59
  }
60
+ exports.extractBundleId = extractBundleId;
60
61
  async function extractBundleVersion(app) {
61
- return await extractPlistEntry.bind(this)(app, 'CFBundleVersion');
62
+ return await extractPlistEntry.bind(this)(app, 'CFBundleVersion');
62
63
  }
64
+ exports.extractBundleVersion = extractBundleVersion;
63
65
  async function fetchSupportedAppPlatforms(app) {
64
- try {
65
- const result = await extractPlistEntry.bind(this)(app, 'CFBundleSupportedPlatforms');
66
- if (!_lodash.default.isArray(result)) {
67
- _logger.default.warn(`${_path.default.basename(app)}': CFBundleSupportedPlatforms is not a valid list`);
68
- return [];
66
+ try {
67
+ const result = await extractPlistEntry.bind(this)(app, 'CFBundleSupportedPlatforms');
68
+ if (!lodash_1.default.isArray(result)) {
69
+ logger_js_1.default.warn(`${path_1.default.basename(app)}': CFBundleSupportedPlatforms is not a valid list`);
70
+ return [];
71
+ }
72
+ return result;
73
+ }
74
+ catch (err) {
75
+ logger_js_1.default.warn(`Cannot extract the list of supported platforms from '${path_1.default.basename(app)}': ${err.message}`);
76
+ return [];
69
77
  }
70
- return result;
71
- } catch (err) {
72
- _logger.default.warn(`Cannot extract the list of supported platforms from '${_path.default.basename(app)}': ${err.message}`);
73
- return [];
74
- }
75
78
  }
79
+ exports.fetchSupportedAppPlatforms = fetchSupportedAppPlatforms;
80
+ /**
81
+ * @typedef {Object} PlatformOpts
82
+ *
83
+ * @property {boolean} isSimulator - Whether the destination platform is a Simulator
84
+ * @property {boolean} isTvOS - Whether the destination platform is a Simulator
85
+ */
86
+ /**
87
+ * Verify whether the given application is compatible to the
88
+ * platform where it is going to be installed and tested.
89
+ *
90
+ * @param {string} app - The actual path to the application bundle
91
+ * @param {PlatformOpts} expectedPlatform
92
+ * @throws {Error} If bundle architecture does not match the expected device architecture.
93
+ */
76
94
  async function verifyApplicationPlatform(app, expectedPlatform) {
77
- _logger.default.debug('Verifying application platform');
78
- const supportedPlatforms = await fetchSupportedAppPlatforms.bind(this)(app);
79
- _logger.default.debug(`CFBundleSupportedPlatforms: ${JSON.stringify(supportedPlatforms)}`);
80
- const {
81
- isSimulator,
82
- isTvOS
83
- } = expectedPlatform;
84
- const prefix = isTvOS ? 'AppleTV' : 'iPhone';
85
- const suffix = isSimulator ? 'Simulator' : 'OS';
86
- const dstPlatform = `${prefix}${suffix}`;
87
- if (!supportedPlatforms.includes(dstPlatform)) {
88
- throw new Error(`${isSimulator ? 'Simulator' : 'Real device'} architecture is unsupported by the '${app}' application. ` + `Make sure the correct deployment target has been selected for its compilation in Xcode.`);
89
- }
95
+ logger_js_1.default.debug('Verifying application platform');
96
+ const supportedPlatforms = await fetchSupportedAppPlatforms.bind(this)(app);
97
+ logger_js_1.default.debug(`CFBundleSupportedPlatforms: ${JSON.stringify(supportedPlatforms)}`);
98
+ const { isSimulator, isTvOS, } = expectedPlatform;
99
+ const prefix = isTvOS ? 'AppleTV' : 'iPhone';
100
+ const suffix = isSimulator ? 'Simulator' : 'OS';
101
+ const dstPlatform = `${prefix}${suffix}`;
102
+ if (!supportedPlatforms.includes(dstPlatform)) {
103
+ throw new Error(`${isSimulator ? 'Simulator' : 'Real device'} architecture is unsupported by the '${app}' application. ` +
104
+ `Make sure the correct deployment target has been selected for its compilation in Xcode.`);
105
+ }
90
106
  }
107
+ exports.verifyApplicationPlatform = verifyApplicationPlatform;
91
108
  async function readResource(resourcePath) {
92
- const data = await _support.plist.parsePlistFile(resourcePath);
93
- const result = {};
94
- for (const [key, value] of _lodash.default.toPairs(data)) {
95
- result[key] = _lodash.default.isString(value) ? value : JSON.stringify(value);
96
- }
97
- return result;
109
+ const data = await support_1.plist.parsePlistFile(resourcePath);
110
+ const result = {};
111
+ for (const [key, value] of lodash_1.default.toPairs(data)) {
112
+ result[key] = lodash_1.default.isString(value) ? value : JSON.stringify(value);
113
+ }
114
+ return result;
98
115
  }
99
116
  async function parseLocalizableStrings(opts) {
100
- const {
101
- app,
102
- language = 'en',
103
- localizableStringsDir,
104
- stringFile,
105
- strictMode
106
- } = opts;
107
- if (!app) {
108
- const message = `Strings extraction is not supported if 'app' capability is not set`;
109
- if (strictMode) {
110
- throw new Error(message);
117
+ const { app, language = 'en', localizableStringsDir, stringFile, strictMode, } = opts;
118
+ if (!app) {
119
+ const message = `Strings extraction is not supported if 'app' capability is not set`;
120
+ if (strictMode) {
121
+ throw new Error(message);
122
+ }
123
+ logger_js_1.default.info(message);
124
+ return {};
111
125
  }
112
- _logger.default.info(message);
113
- return {};
114
- }
115
- let lprojRoot;
116
- for (const subfolder of [`${language}.lproj`, localizableStringsDir, '']) {
117
- lprojRoot = _path.default.resolve(app, subfolder);
118
- if (await _support.fs.exists(lprojRoot)) {
119
- break;
126
+ let lprojRoot;
127
+ for (const subfolder of [`${language}.lproj`, localizableStringsDir, '']) {
128
+ lprojRoot = path_1.default.resolve(app, subfolder);
129
+ if (await support_1.fs.exists(lprojRoot)) {
130
+ break;
131
+ }
132
+ const message = `No '${lprojRoot}' resources folder has been found`;
133
+ if (strictMode) {
134
+ throw new Error(message);
135
+ }
136
+ logger_js_1.default.debug(message);
120
137
  }
121
- const message = `No '${lprojRoot}' resources folder has been found`;
122
- if (strictMode) {
123
- throw new Error(message);
138
+ logger_js_1.default.info(`Will extract resource strings from '${lprojRoot}'`);
139
+ const resourcePaths = [];
140
+ if (stringFile) {
141
+ const dstPath = path_1.default.resolve(lprojRoot, stringFile);
142
+ if (await support_1.fs.exists(dstPath)) {
143
+ resourcePaths.push(dstPath);
144
+ }
145
+ else {
146
+ const message = `No '${dstPath}' resource file has been found for '${app}'`;
147
+ if (strictMode) {
148
+ throw new Error(message);
149
+ }
150
+ logger_js_1.default.info(message);
151
+ logger_js_1.default.info(`Getting all the available strings from '${lprojRoot}'`);
152
+ }
124
153
  }
125
- _logger.default.debug(message);
126
- }
127
- _logger.default.info(`Will extract resource strings from '${lprojRoot}'`);
128
- const resourcePaths = [];
129
- if (stringFile) {
130
- const dstPath = _path.default.resolve(lprojRoot, stringFile);
131
- if (await _support.fs.exists(dstPath)) {
132
- resourcePaths.push(dstPath);
133
- } else {
134
- const message = `No '${dstPath}' resource file has been found for '${app}'`;
135
- if (strictMode) {
136
- throw new Error(message);
137
- }
138
- _logger.default.info(message);
139
- _logger.default.info(`Getting all the available strings from '${lprojRoot}'`);
154
+ if (lodash_1.default.isEmpty(resourcePaths) && await support_1.fs.exists(lprojRoot)) {
155
+ const resourceFiles = (await support_1.fs.readdir(lprojRoot))
156
+ .filter((name) => lodash_1.default.some([STRINGS_RESOURCE, STRINGSDICT_RESOURCE], (x) => name.endsWith(x)))
157
+ .map((name) => path_1.default.resolve(lprojRoot, name));
158
+ resourcePaths.push(...resourceFiles);
140
159
  }
141
- }
142
- if (_lodash.default.isEmpty(resourcePaths) && (await _support.fs.exists(lprojRoot))) {
143
- const resourceFiles = (await _support.fs.readdir(lprojRoot)).filter(name => _lodash.default.some([STRINGS_RESOURCE, STRINGSDICT_RESOURCE], x => name.endsWith(x))).map(name => _path.default.resolve(lprojRoot, name));
144
- resourcePaths.push(...resourceFiles);
145
- }
146
- _logger.default.info(`Got ${resourcePaths.length} resource file(s) in '${lprojRoot}'`);
147
- if (_lodash.default.isEmpty(resourcePaths)) {
148
- return {};
149
- }
150
- const resultStrings = {};
151
- const toAbsolutePath = function (p) {
152
- return _path.default.isAbsolute(p) ? p : _path.default.resolve(process.cwd(), p);
153
- };
154
- for (const resourcePath of resourcePaths) {
155
- if (!_support.util.isSubPath(toAbsolutePath(resourcePath), toAbsolutePath(app))) {
156
- throw new Error(`'${resourcePath}' is expected to be located under '${app}'`);
160
+ logger_js_1.default.info(`Got ${resourcePaths.length} resource file(s) in '${lprojRoot}'`);
161
+ if (lodash_1.default.isEmpty(resourcePaths)) {
162
+ return {};
157
163
  }
158
- try {
159
- const data = await readResource(resourcePath);
160
- _logger.default.debug(`Parsed ${_lodash.default.keys(data).length} string(s) from '${resourcePath}'`);
161
- _lodash.default.merge(resultStrings, data);
162
- } catch (e) {
163
- _logger.default.warn(`Cannot parse '${resourcePath}' resource. Original error: ${e.message}`);
164
+ const resultStrings = {};
165
+ const toAbsolutePath = function (p) {
166
+ return path_1.default.isAbsolute(p) ? p : path_1.default.resolve(process.cwd(), p);
167
+ };
168
+ for (const resourcePath of resourcePaths) {
169
+ if (!support_1.util.isSubPath(toAbsolutePath(resourcePath), toAbsolutePath(app))) {
170
+ // security precaution
171
+ throw new Error(`'${resourcePath}' is expected to be located under '${app}'`);
172
+ }
173
+ try {
174
+ const data = await readResource(resourcePath);
175
+ logger_js_1.default.debug(`Parsed ${lodash_1.default.keys(data).length} string(s) from '${resourcePath}'`);
176
+ lodash_1.default.merge(resultStrings, data);
177
+ }
178
+ catch (e) {
179
+ logger_js_1.default.warn(`Cannot parse '${resourcePath}' resource. Original error: ${e.message}`);
180
+ }
164
181
  }
165
- }
166
- _logger.default.info(`Got ${_lodash.default.keys(resultStrings).length} string(s) from '${lprojRoot}'`);
167
- return resultStrings;
182
+ logger_js_1.default.info(`Got ${lodash_1.default.keys(resultStrings).length} string(s) from '${lprojRoot}'`);
183
+ return resultStrings;
168
184
  }
185
+ exports.parseLocalizableStrings = parseLocalizableStrings;
186
+ /**
187
+ * Check whether the given path on the file system points to the .app bundle root
188
+ *
189
+ * @param {string} appPath Possible .app bundle root
190
+ * @returns {boolean} Whether the given path points to an .app bundle
191
+ */
169
192
  async function isAppBundle(appPath) {
170
- return _lodash.default.endsWith(_lodash.default.toLower(appPath), APP_EXT) && (await _support.fs.stat(appPath)).isDirectory() && (await _support.fs.exists(_path.default.join(appPath, 'Info.plist')));
193
+ return lodash_1.default.endsWith(lodash_1.default.toLower(appPath), APP_EXT)
194
+ && (await support_1.fs.stat(appPath)).isDirectory()
195
+ && await support_1.fs.exists(path_1.default.join(appPath, 'Info.plist'));
171
196
  }
197
+ exports.isAppBundle = isAppBundle;
198
+ /**
199
+ * Extract the given archive and looks for items with given extensions in it
200
+ *
201
+ * @param {string} archivePath Full path to a .zip archive
202
+ * @param {Array<string>} appExtensions List of matching item extensions
203
+ * @returns {Promise<[string, string[]]>} Tuple, where the first element points to
204
+ * a temporary folder root where the archive has been extracted and the second item
205
+ * contains a list of relative paths to matched items
206
+ */
172
207
  async function findApps(archivePath, appExtensions) {
173
- const useSystemUnzipEnv = process.env.APPIUM_PREFER_SYSTEM_UNZIP;
174
- const useSystemUnzip = _lodash.default.isEmpty(useSystemUnzipEnv) || !['0', 'false'].includes(_lodash.default.toLower(useSystemUnzipEnv));
175
- const tmpRoot = await _support.tempDir.openDir();
176
- await _support.zip.extractAllTo(archivePath, tmpRoot, {
177
- useSystemUnzip
178
- });
179
- const globPattern = `**/*.+(${appExtensions.map(ext => ext.replace(/^\./, '')).join('|')})`;
180
- const sortedBundleItems = (await _support.fs.glob(globPattern, {
181
- cwd: tmpRoot,
182
- strict: false
183
- })).sort((a, b) => a.split(_path.default.sep).length - b.split(_path.default.sep).length);
184
- return [tmpRoot, sortedBundleItems];
208
+ const useSystemUnzipEnv = process.env.APPIUM_PREFER_SYSTEM_UNZIP;
209
+ const useSystemUnzip = lodash_1.default.isEmpty(useSystemUnzipEnv)
210
+ || !['0', 'false'].includes(lodash_1.default.toLower(useSystemUnzipEnv));
211
+ const tmpRoot = await support_1.tempDir.openDir();
212
+ await support_1.zip.extractAllTo(archivePath, tmpRoot, { useSystemUnzip });
213
+ const globPattern = `**/*.+(${appExtensions.map((ext) => ext.replace(/^\./, '')).join('|')})`;
214
+ const sortedBundleItems = (await support_1.fs.glob(globPattern, {
215
+ cwd: tmpRoot,
216
+ strict: false,
217
+ })).sort((a, b) => a.split(path_1.default.sep).length - b.split(path_1.default.sep).length);
218
+ return [tmpRoot, sortedBundleItems];
185
219
  }
220
+ exports.findApps = findApps;
221
+ /**
222
+ * Moves the application bundle to a newly created temporary folder
223
+ *
224
+ * @param {string} appRoot Full path to the .app bundle
225
+ * @returns {Promise<string>} The new path to the app bundle.
226
+ * The name of the app bundle remains though
227
+ */
186
228
  async function isolateAppBundle(appRoot) {
187
- const tmpRoot = await _support.tempDir.openDir();
188
- const dstRoot = _path.default.join(tmpRoot, _path.default.basename(appRoot));
189
- await _support.fs.mv(appRoot, dstRoot, {
190
- mkdirp: true
191
- });
192
- return dstRoot;
229
+ const tmpRoot = await support_1.tempDir.openDir();
230
+ const dstRoot = path_1.default.join(tmpRoot, path_1.default.basename(appRoot));
231
+ await support_1.fs.mv(appRoot, dstRoot, { mkdirp: true });
232
+ return dstRoot;
193
233
  }
194
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfcGF0aCIsIl9zdXBwb3J0IiwiX2xvZ2dlciIsIlNUUklOR1NESUNUX1JFU09VUkNFIiwiU1RSSU5HU19SRVNPVVJDRSIsIlNBRkFSSV9CVU5ETEVfSUQiLCJleHBvcnRzIiwiQVBQX0VYVCIsIklQQV9FWFQiLCJQTElTVF9DQUNIRSIsIldlYWtNYXAiLCJleHRyYWN0UGxpc3RFbnRyeSIsImFwcCIsImVudHJ5TmFtZSIsInBsaXN0UGF0aCIsInBhdGgiLCJyZXNvbHZlIiwicGFyc2VGaWxlIiwicGxpc3QiLCJwYXJzZVBsaXN0RmlsZSIsImVyciIsIkVycm9yIiwiYmFzZW5hbWUiLCJtZXNzYWdlIiwicGxpc3RPYmoiLCJfIiwiaXNOaWwiLCJfUExJU1RfQ0FDSEUkZ2V0IiwiZ2V0Iiwic2V0IiwiZXh0cmFjdEJ1bmRsZUlkIiwiYnVuZGxlSWQiLCJiaW5kIiwibG9nIiwiZGVidWciLCJleHRyYWN0QnVuZGxlVmVyc2lvbiIsImZldGNoU3VwcG9ydGVkQXBwUGxhdGZvcm1zIiwicmVzdWx0IiwiaXNBcnJheSIsIndhcm4iLCJ2ZXJpZnlBcHBsaWNhdGlvblBsYXRmb3JtIiwiZXhwZWN0ZWRQbGF0Zm9ybSIsInN1cHBvcnRlZFBsYXRmb3JtcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJpc1NpbXVsYXRvciIsImlzVHZPUyIsInByZWZpeCIsInN1ZmZpeCIsImRzdFBsYXRmb3JtIiwiaW5jbHVkZXMiLCJyZWFkUmVzb3VyY2UiLCJyZXNvdXJjZVBhdGgiLCJkYXRhIiwia2V5IiwidmFsdWUiLCJ0b1BhaXJzIiwiaXNTdHJpbmciLCJwYXJzZUxvY2FsaXphYmxlU3RyaW5ncyIsIm9wdHMiLCJsYW5ndWFnZSIsImxvY2FsaXphYmxlU3RyaW5nc0RpciIsInN0cmluZ0ZpbGUiLCJzdHJpY3RNb2RlIiwiaW5mbyIsImxwcm9qUm9vdCIsInN1YmZvbGRlciIsImZzIiwiZXhpc3RzIiwicmVzb3VyY2VQYXRocyIsImRzdFBhdGgiLCJwdXNoIiwiaXNFbXB0eSIsInJlc291cmNlRmlsZXMiLCJyZWFkZGlyIiwiZmlsdGVyIiwibmFtZSIsInNvbWUiLCJ4IiwiZW5kc1dpdGgiLCJtYXAiLCJsZW5ndGgiLCJyZXN1bHRTdHJpbmdzIiwidG9BYnNvbHV0ZVBhdGgiLCJwIiwiaXNBYnNvbHV0ZSIsInByb2Nlc3MiLCJjd2QiLCJ1dGlsIiwiaXNTdWJQYXRoIiwia2V5cyIsIm1lcmdlIiwiZSIsImlzQXBwQnVuZGxlIiwiYXBwUGF0aCIsInRvTG93ZXIiLCJzdGF0IiwiaXNEaXJlY3RvcnkiLCJqb2luIiwiZmluZEFwcHMiLCJhcmNoaXZlUGF0aCIsImFwcEV4dGVuc2lvbnMiLCJ1c2VTeXN0ZW1VbnppcEVudiIsImVudiIsIkFQUElVTV9QUkVGRVJfU1lTVEVNX1VOWklQIiwidXNlU3lzdGVtVW56aXAiLCJ0bXBSb290IiwidGVtcERpciIsIm9wZW5EaXIiLCJ6aXAiLCJleHRyYWN0QWxsVG8iLCJnbG9iUGF0dGVybiIsImV4dCIsInJlcGxhY2UiLCJzb3J0ZWRCdW5kbGVJdGVtcyIsImdsb2IiLCJzdHJpY3QiLCJzb3J0IiwiYSIsImIiLCJzcGxpdCIsInNlcCIsImlzb2xhdGVBcHBCdW5kbGUiLCJhcHBSb290IiwiZHN0Um9vdCIsIm12IiwibWtkaXJwIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2FwcC11dGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBwbGlzdCwgZnMsIHV0aWwsIHRlbXBEaXIsIHppcCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXIuanMnO1xuXG5jb25zdCBTVFJJTkdTRElDVF9SRVNPVVJDRSA9ICcuc3RyaW5nc2RpY3QnO1xuY29uc3QgU1RSSU5HU19SRVNPVVJDRSA9ICcuc3RyaW5ncyc7XG5jb25zdCBTQUZBUklfQlVORExFX0lEID0gJ2NvbS5hcHBsZS5tb2JpbGVzYWZhcmknO1xuY29uc3QgQVBQX0VYVCA9ICcuYXBwJztcbmNvbnN0IElQQV9FWFQgPSAnLmlwYSc7XG5jb25zdCBQTElTVF9DQUNIRSA9IG5ldyBXZWFrTWFwKCk7XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gZW50cnkgbmFtZSBmcm9tIHRoZSBhcHBsaWNhdGlvbidzIEluZm8ucGxpc3QuXG4gKlxuICogQHRoaXMge09iamVjdH0gT3B0aW5hbCBpbnN0YW5jZSB1c2VkIGZvciBjYWNoaW5nLiBVc3VzYWxseSB0aGUgZHJpdmVyIGluc3RhbmNlLlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcCBGdWxsIHBhdGggdG8gdGhlIGFwcCBidW5kbGUgcm9vdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBlbnRyeU5hbWUgS2V5IG5hbWUgaW4gdGhlIHBsaXN0LlxuICogQHJldHVybnMge1Byb21pc2U8QW55IHwgdW5kZWZpbmVkPn0gRWl0aGVyIHRoZSBleHRyYWN0ZWQgdmFsdWUgb3IgdW5kZWZpbmVkIGlmIG5vIHN1Y2gga2V5IGhhcyBiZWVuIGZvdW5kIGluIHRoZSBwbGlzdC5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgYXBwbGljYXRpb24ncyBJbmZvLnBsaXN0IGNhbm5vdCBiZSBwYXJzZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RQbGlzdEVudHJ5IChhcHAsIGVudHJ5TmFtZSkge1xuICBjb25zdCBwbGlzdFBhdGggPSBwYXRoLnJlc29sdmUoYXBwLCAnSW5mby5wbGlzdCcpO1xuXG4gIGNvbnN0IHBhcnNlRmlsZSA9IGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHBsaXN0LnBhcnNlUGxpc3RGaWxlKHBsaXN0UGF0aCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBleHRyYWN0IEluZm8ucGxpc3QgZnJvbSAnJHtwYXRoLmJhc2VuYW1lKGFwcCl9JzogJHtlcnIubWVzc2FnZX1gKTtcbiAgICB9XG4gIH07XG5cbiAgbGV0IHBsaXN0T2JqO1xuICBpZiAoXy5pc05pbCh0aGlzKSkge1xuICAgIHBsaXN0T2JqID0gYXdhaXQgcGFyc2VGaWxlKCk7XG4gIH0gZWxzZSB7XG4gICAgcGxpc3RPYmogPSBQTElTVF9DQUNIRS5nZXQodGhpcyk/LlthcHBdO1xuICAgIGlmICghcGxpc3RPYmopIHtcbiAgICAgIHBsaXN0T2JqID0gYXdhaXQgcGFyc2VGaWxlKCk7XG4gICAgICBQTElTVF9DQUNIRS5zZXQodGhpcywge1xuICAgICAgICAuLi4oUExJU1RfQ0FDSEUuZ2V0KHRoaXMpIHx8IHt9KSxcbiAgICAgICAgW2FwcF06IHBsaXN0T2JqLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBsaXN0T2JqW2VudHJ5TmFtZV07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RCdW5kbGVJZCAoYXBwKSB7XG4gIGNvbnN0IGJ1bmRsZUlkID0gYXdhaXQgZXh0cmFjdFBsaXN0RW50cnkuYmluZCh0aGlzKShhcHAsICdDRkJ1bmRsZUlkZW50aWZpZXInKTtcbiAgbG9nLmRlYnVnKGBHZXR0aW5nIGJ1bmRsZSBJRCBmcm9tIGFwcCAnJHthcHB9JzogJyR7YnVuZGxlSWR9J2ApO1xuICByZXR1cm4gYnVuZGxlSWQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RCdW5kbGVWZXJzaW9uIChhcHApIHtcbiAgcmV0dXJuIGF3YWl0IGV4dHJhY3RQbGlzdEVudHJ5LmJpbmQodGhpcykoYXBwLCAnQ0ZCdW5kbGVWZXJzaW9uJyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoU3VwcG9ydGVkQXBwUGxhdGZvcm1zIChhcHApIHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBleHRyYWN0UGxpc3RFbnRyeS5iaW5kKHRoaXMpKGFwcCwgJ0NGQnVuZGxlU3VwcG9ydGVkUGxhdGZvcm1zJyk7XG4gICAgaWYgKCFfLmlzQXJyYXkocmVzdWx0KSkge1xuICAgICAgbG9nLndhcm4oYCR7cGF0aC5iYXNlbmFtZShhcHApfSc6IENGQnVuZGxlU3VwcG9ydGVkUGxhdGZvcm1zIGlzIG5vdCBhIHZhbGlkIGxpc3RgKTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLndhcm4oXG4gICAgICBgQ2Fubm90IGV4dHJhY3QgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIHBsYXRmb3JtcyBmcm9tICcke3BhdGguYmFzZW5hbWUoYXBwKX0nOiAke2Vyci5tZXNzYWdlfWBcbiAgICApO1xuICAgIHJldHVybiBbXTtcbiAgfVxufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFBsYXRmb3JtT3B0c1xuICpcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNTaW11bGF0b3IgLSBXaGV0aGVyIHRoZSBkZXN0aW5hdGlvbiBwbGF0Zm9ybSBpcyBhIFNpbXVsYXRvclxuICogQHByb3BlcnR5IHtib29sZWFufSBpc1R2T1MgLSBXaGV0aGVyIHRoZSBkZXN0aW5hdGlvbiBwbGF0Zm9ybSBpcyBhIFNpbXVsYXRvclxuICovXG5cbi8qKlxuICogVmVyaWZ5IHdoZXRoZXIgdGhlIGdpdmVuIGFwcGxpY2F0aW9uIGlzIGNvbXBhdGlibGUgdG8gdGhlXG4gKiBwbGF0Zm9ybSB3aGVyZSBpdCBpcyBnb2luZyB0byBiZSBpbnN0YWxsZWQgYW5kIHRlc3RlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwIC0gVGhlIGFjdHVhbCBwYXRoIHRvIHRoZSBhcHBsaWNhdGlvbiBidW5kbGVcbiAqIEBwYXJhbSB7UGxhdGZvcm1PcHRzfSBleHBlY3RlZFBsYXRmb3JtXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgYnVuZGxlIGFyY2hpdGVjdHVyZSBkb2VzIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgZGV2aWNlIGFyY2hpdGVjdHVyZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gdmVyaWZ5QXBwbGljYXRpb25QbGF0Zm9ybSAoYXBwLCBleHBlY3RlZFBsYXRmb3JtKSB7XG4gIGxvZy5kZWJ1ZygnVmVyaWZ5aW5nIGFwcGxpY2F0aW9uIHBsYXRmb3JtJyk7XG5cbiAgY29uc3Qgc3VwcG9ydGVkUGxhdGZvcm1zID0gYXdhaXQgZmV0Y2hTdXBwb3J0ZWRBcHBQbGF0Zm9ybXMuYmluZCh0aGlzKShhcHApO1xuICBsb2cuZGVidWcoYENGQnVuZGxlU3VwcG9ydGVkUGxhdGZvcm1zOiAke0pTT04uc3RyaW5naWZ5KHN1cHBvcnRlZFBsYXRmb3Jtcyl9YCk7XG5cbiAgY29uc3Qge1xuICAgIGlzU2ltdWxhdG9yLFxuICAgIGlzVHZPUyxcbiAgfSA9IGV4cGVjdGVkUGxhdGZvcm07XG4gIGNvbnN0IHByZWZpeCA9IGlzVHZPUyA/ICdBcHBsZVRWJyA6ICdpUGhvbmUnO1xuICBjb25zdCBzdWZmaXggPSBpc1NpbXVsYXRvciA/ICdTaW11bGF0b3InIDogJ09TJztcbiAgY29uc3QgZHN0UGxhdGZvcm0gPSBgJHtwcmVmaXh9JHtzdWZmaXh9YDtcbiAgaWYgKCFzdXBwb3J0ZWRQbGF0Zm9ybXMuaW5jbHVkZXMoZHN0UGxhdGZvcm0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke2lzU2ltdWxhdG9yID8gJ1NpbXVsYXRvcicgOiAnUmVhbCBkZXZpY2UnfSBhcmNoaXRlY3R1cmUgaXMgdW5zdXBwb3J0ZWQgYnkgdGhlICcke2FwcH0nIGFwcGxpY2F0aW9uLiBgICtcbiAgICAgIGBNYWtlIHN1cmUgdGhlIGNvcnJlY3QgZGVwbG95bWVudCB0YXJnZXQgaGFzIGJlZW4gc2VsZWN0ZWQgZm9yIGl0cyBjb21waWxhdGlvbiBpbiBYY29kZS5gKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkUmVzb3VyY2UgKHJlc291cmNlUGF0aCkge1xuICBjb25zdCBkYXRhID0gYXdhaXQgcGxpc3QucGFyc2VQbGlzdEZpbGUocmVzb3VyY2VQYXRoKTtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIF8udG9QYWlycyhkYXRhKSkge1xuICAgIHJlc3VsdFtrZXldID0gXy5pc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZSA6IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5hc3luYyBmdW5jdGlvbiBwYXJzZUxvY2FsaXphYmxlU3RyaW5ncyAob3B0cykge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGxhbmd1YWdlID0gJ2VuJyxcbiAgICBsb2NhbGl6YWJsZVN0cmluZ3NEaXIsXG4gICAgc3RyaW5nRmlsZSxcbiAgICBzdHJpY3RNb2RlLFxuICB9ID0gb3B0cztcblxuICBpZiAoIWFwcCkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBgU3RyaW5ncyBleHRyYWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgaWYgJ2FwcCcgY2FwYWJpbGl0eSBpcyBub3Qgc2V0YDtcbiAgICBpZiAoc3RyaWN0TW9kZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICBsb2cuaW5mbyhtZXNzYWdlKTtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBsZXQgbHByb2pSb290O1xuICBmb3IgKGNvbnN0IHN1YmZvbGRlciBvZiBbYCR7bGFuZ3VhZ2V9Lmxwcm9qYCwgbG9jYWxpemFibGVTdHJpbmdzRGlyLCAnJ10pIHtcbiAgICBscHJvalJvb3QgPSBwYXRoLnJlc29sdmUoYXBwLCBzdWJmb2xkZXIpO1xuICAgIGlmIChhd2FpdCBmcy5leGlzdHMobHByb2pSb290KSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnN0IG1lc3NhZ2UgPSBgTm8gJyR7bHByb2pSb290fScgcmVzb3VyY2VzIGZvbGRlciBoYXMgYmVlbiBmb3VuZGA7XG4gICAgaWYgKHN0cmljdE1vZGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgbG9nLmRlYnVnKG1lc3NhZ2UpO1xuICB9XG4gIGxvZy5pbmZvKGBXaWxsIGV4dHJhY3QgcmVzb3VyY2Ugc3RyaW5ncyBmcm9tICcke2xwcm9qUm9vdH0nYCk7XG5cbiAgY29uc3QgcmVzb3VyY2VQYXRocyA9IFtdO1xuICBpZiAoc3RyaW5nRmlsZSkge1xuICAgIGNvbnN0IGRzdFBhdGggPSBwYXRoLnJlc29sdmUobHByb2pSb290LCBzdHJpbmdGaWxlKTtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKGRzdFBhdGgpKSB7XG4gICAgICByZXNvdXJjZVBhdGhzLnB1c2goZHN0UGF0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgTm8gJyR7ZHN0UGF0aH0nIHJlc291cmNlIGZpbGUgaGFzIGJlZW4gZm91bmQgZm9yICcke2FwcH0nYDtcbiAgICAgIGlmIChzdHJpY3RNb2RlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIGxvZy5pbmZvKG1lc3NhZ2UpO1xuICAgICAgbG9nLmluZm8oYEdldHRpbmcgYWxsIHRoZSBhdmFpbGFibGUgc3RyaW5ncyBmcm9tICcke2xwcm9qUm9vdH0nYCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKF8uaXNFbXB0eShyZXNvdXJjZVBhdGhzKSAmJiBhd2FpdCBmcy5leGlzdHMobHByb2pSb290KSkge1xuICAgIGNvbnN0IHJlc291cmNlRmlsZXMgPSAoYXdhaXQgZnMucmVhZGRpcihscHJvalJvb3QpKVxuICAgICAgLmZpbHRlcigobmFtZSkgPT4gXy5zb21lKFtTVFJJTkdTX1JFU09VUkNFLCBTVFJJTkdTRElDVF9SRVNPVVJDRV0sICh4KSA9PiBuYW1lLmVuZHNXaXRoKHgpKSlcbiAgICAgIC5tYXAoKG5hbWUpID0+IHBhdGgucmVzb2x2ZShscHJvalJvb3QsIG5hbWUpKTtcbiAgICByZXNvdXJjZVBhdGhzLnB1c2goLi4ucmVzb3VyY2VGaWxlcyk7XG4gIH1cbiAgbG9nLmluZm8oYEdvdCAke3Jlc291cmNlUGF0aHMubGVuZ3RofSByZXNvdXJjZSBmaWxlKHMpIGluICcke2xwcm9qUm9vdH0nYCk7XG5cbiAgaWYgKF8uaXNFbXB0eShyZXNvdXJjZVBhdGhzKSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdFN0cmluZ3MgPSB7fTtcbiAgY29uc3QgdG9BYnNvbHV0ZVBhdGggPSBmdW5jdGlvbiAocCkge1xuICAgIHJldHVybiBwYXRoLmlzQWJzb2x1dGUocCkgPyBwIDogcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHApO1xuICB9O1xuICBmb3IgKGNvbnN0IHJlc291cmNlUGF0aCBvZiByZXNvdXJjZVBhdGhzKSB7XG4gICAgaWYgKCF1dGlsLmlzU3ViUGF0aCh0b0Fic29sdXRlUGF0aChyZXNvdXJjZVBhdGgpLCB0b0Fic29sdXRlUGF0aChhcHApKSkge1xuICAgICAgLy8gc2VjdXJpdHkgcHJlY2F1dGlvblxuICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtyZXNvdXJjZVBhdGh9JyBpcyBleHBlY3RlZCB0byBiZSBsb2NhdGVkIHVuZGVyICcke2FwcH0nYCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVhZFJlc291cmNlKHJlc291cmNlUGF0aCk7XG4gICAgICBsb2cuZGVidWcoYFBhcnNlZCAke18ua2V5cyhkYXRhKS5sZW5ndGh9IHN0cmluZyhzKSBmcm9tICcke3Jlc291cmNlUGF0aH0nYCk7XG4gICAgICBfLm1lcmdlKHJlc3VsdFN0cmluZ3MsIGRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy53YXJuKGBDYW5ub3QgcGFyc2UgJyR7cmVzb3VyY2VQYXRofScgcmVzb3VyY2UuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBsb2cuaW5mbyhgR290ICR7Xy5rZXlzKHJlc3VsdFN0cmluZ3MpLmxlbmd0aH0gc3RyaW5nKHMpIGZyb20gJyR7bHByb2pSb290fSdgKTtcbiAgcmV0dXJuIHJlc3VsdFN0cmluZ3M7XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gcGF0aCBvbiB0aGUgZmlsZSBzeXN0ZW0gcG9pbnRzIHRvIHRoZSAuYXBwIGJ1bmRsZSByb290XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcFBhdGggUG9zc2libGUgLmFwcCBidW5kbGUgcm9vdFxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGdpdmVuIHBhdGggcG9pbnRzIHRvIGFuIC5hcHAgYnVuZGxlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGlzQXBwQnVuZGxlIChhcHBQYXRoKSB7XG4gIHJldHVybiBfLmVuZHNXaXRoKF8udG9Mb3dlcihhcHBQYXRoKSwgQVBQX0VYVClcbiAgICAmJiAoYXdhaXQgZnMuc3RhdChhcHBQYXRoKSkuaXNEaXJlY3RvcnkoKVxuICAgICYmIGF3YWl0IGZzLmV4aXN0cyhwYXRoLmpvaW4oYXBwUGF0aCwgJ0luZm8ucGxpc3QnKSk7XG59XG5cbi8qKlxuICogRXh0cmFjdCB0aGUgZ2l2ZW4gYXJjaGl2ZSBhbmQgbG9va3MgZm9yIGl0ZW1zIHdpdGggZ2l2ZW4gZXh0ZW5zaW9ucyBpbiBpdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmNoaXZlUGF0aCBGdWxsIHBhdGggdG8gYSAuemlwIGFyY2hpdmVcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gYXBwRXh0ZW5zaW9ucyBMaXN0IG9mIG1hdGNoaW5nIGl0ZW0gZXh0ZW5zaW9uc1xuICogQHJldHVybnMge1Byb21pc2U8W3N0cmluZywgc3RyaW5nW11dPn0gVHVwbGUsIHdoZXJlIHRoZSBmaXJzdCBlbGVtZW50IHBvaW50cyB0b1xuICogYSB0ZW1wb3JhcnkgZm9sZGVyIHJvb3Qgd2hlcmUgdGhlIGFyY2hpdmUgaGFzIGJlZW4gZXh0cmFjdGVkIGFuZCB0aGUgc2Vjb25kIGl0ZW1cbiAqIGNvbnRhaW5zIGEgbGlzdCBvZiByZWxhdGl2ZSBwYXRocyB0byBtYXRjaGVkIGl0ZW1zXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZpbmRBcHBzIChhcmNoaXZlUGF0aCwgYXBwRXh0ZW5zaW9ucykge1xuICBjb25zdCB1c2VTeXN0ZW1VbnppcEVudiA9IHByb2Nlc3MuZW52LkFQUElVTV9QUkVGRVJfU1lTVEVNX1VOWklQO1xuICBjb25zdCB1c2VTeXN0ZW1VbnppcCA9IF8uaXNFbXB0eSh1c2VTeXN0ZW1VbnppcEVudilcbiAgICB8fCAhWycwJywgJ2ZhbHNlJ10uaW5jbHVkZXMoXy50b0xvd2VyKHVzZVN5c3RlbVVuemlwRW52KSk7XG4gIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgYXdhaXQgemlwLmV4dHJhY3RBbGxUbyhhcmNoaXZlUGF0aCwgdG1wUm9vdCwge3VzZVN5c3RlbVVuemlwfSk7XG4gIGNvbnN0IGdsb2JQYXR0ZXJuID0gYCoqLyouKygke2FwcEV4dGVuc2lvbnMubWFwKChleHQpID0+IGV4dC5yZXBsYWNlKC9eXFwuLywgJycpKS5qb2luKCd8Jyl9KWA7XG4gIGNvbnN0IHNvcnRlZEJ1bmRsZUl0ZW1zID0gKGF3YWl0IGZzLmdsb2IoZ2xvYlBhdHRlcm4sIHtcbiAgICBjd2Q6IHRtcFJvb3QsXG4gICAgc3RyaWN0OiBmYWxzZSxcbiAgfSkpLnNvcnQoKGEsIGIpID0+IGEuc3BsaXQocGF0aC5zZXApLmxlbmd0aCAtIGIuc3BsaXQocGF0aC5zZXApLmxlbmd0aCk7XG4gIHJldHVybiBbdG1wUm9vdCwgc29ydGVkQnVuZGxlSXRlbXNdO1xufVxuXG4vKipcbiAqIE1vdmVzIHRoZSBhcHBsaWNhdGlvbiBidW5kbGUgdG8gYSBuZXdseSBjcmVhdGVkIHRlbXBvcmFyeSBmb2xkZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwUm9vdCBGdWxsIHBhdGggdG8gdGhlIC5hcHAgYnVuZGxlXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fSBUaGUgbmV3IHBhdGggdG8gdGhlIGFwcCBidW5kbGUuXG4gKiBUaGUgbmFtZSBvZiB0aGUgYXBwIGJ1bmRsZSByZW1haW5zIHRob3VnaFxuICovXG5hc3luYyBmdW5jdGlvbiBpc29sYXRlQXBwQnVuZGxlIChhcHBSb290KSB7XG4gIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgY29uc3QgZHN0Um9vdCA9IHBhdGguam9pbih0bXBSb290LCBwYXRoLmJhc2VuYW1lKGFwcFJvb3QpKTtcbiAgYXdhaXQgZnMubXYoYXBwUm9vdCwgZHN0Um9vdCwge21rZGlycDogdHJ1ZX0pO1xuICByZXR1cm4gZHN0Um9vdDtcbn1cblxuZXhwb3J0IHtcbiAgZXh0cmFjdEJ1bmRsZUlkLCB2ZXJpZnlBcHBsaWNhdGlvblBsYXRmb3JtLCBwYXJzZUxvY2FsaXphYmxlU3RyaW5ncyxcbiAgU0FGQVJJX0JVTkRMRV9JRCwgZmV0Y2hTdXBwb3J0ZWRBcHBQbGF0Zm9ybXMsIEFQUF9FWFQsIElQQV9FWFQsXG4gIGlzQXBwQnVuZGxlLCBmaW5kQXBwcywgaXNvbGF0ZUFwcEJ1bmRsZSwgZXh0cmFjdEJ1bmRsZVZlcnNpb24sXG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsUUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsT0FBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBRUEsTUFBTUksb0JBQW9CLEdBQUcsY0FBYztBQUMzQyxNQUFNQyxnQkFBZ0IsR0FBRyxVQUFVO0FBQ25DLE1BQU1DLGdCQUFnQixHQUFHLHdCQUF3QjtBQUFDQyxPQUFBLENBQUFELGdCQUFBLEdBQUFBLGdCQUFBO0FBQ2xELE1BQU1FLE9BQU8sR0FBRyxNQUFNO0FBQUNELE9BQUEsQ0FBQUMsT0FBQSxHQUFBQSxPQUFBO0FBQ3ZCLE1BQU1DLE9BQU8sR0FBRyxNQUFNO0FBQUNGLE9BQUEsQ0FBQUUsT0FBQSxHQUFBQSxPQUFBO0FBQ3ZCLE1BQU1DLFdBQVcsR0FBRyxJQUFJQyxP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
234
+ exports.isolateAppBundle = isolateAppBundle;
235
+ //# sourceMappingURL=app-utils.js.map