nativescript 8.9.0-dev.2 → 8.9.0-dev.4

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 (345) hide show
  1. package/config/test-deps-versions-generated.json +1 -1
  2. package/docs/man_pages/project/configuration/widget-ios.md +24 -0
  3. package/docs/man_pages/project/configuration/widget.md +24 -0
  4. package/docs/man_pages/start.md +1 -1
  5. package/lib/android-tools-info.js +11 -22
  6. package/lib/base-package-manager.js +53 -70
  7. package/lib/bun-package-manager.js +75 -98
  8. package/lib/color.js +4 -4
  9. package/lib/commands/add-platform.js +14 -30
  10. package/lib/commands/apple-login.js +18 -29
  11. package/lib/commands/appstore-list.js +34 -45
  12. package/lib/commands/appstore-upload.js +54 -67
  13. package/lib/commands/build.js +55 -87
  14. package/lib/commands/clean.js +169 -184
  15. package/lib/commands/command-base.js +14 -27
  16. package/lib/commands/config.js +49 -68
  17. package/lib/commands/create-project.js +215 -234
  18. package/lib/commands/debug.js +66 -88
  19. package/lib/commands/deploy.js +28 -44
  20. package/lib/commands/embedding/embed.js +37 -56
  21. package/lib/commands/extensibility/install-extension.js +5 -16
  22. package/lib/commands/extensibility/list-extensions.js +13 -24
  23. package/lib/commands/extensibility/uninstall-extension.js +4 -15
  24. package/lib/commands/fonts.js +30 -41
  25. package/lib/commands/generate-assets.js +13 -28
  26. package/lib/commands/generate-help.js +2 -13
  27. package/lib/commands/generate.js +49 -60
  28. package/lib/commands/info.js +2 -13
  29. package/lib/commands/install.js +34 -49
  30. package/lib/commands/list-platforms.js +14 -25
  31. package/lib/commands/migrate.js +15 -26
  32. package/lib/commands/native-add.js +23 -46
  33. package/lib/commands/platform-clean.js +19 -32
  34. package/lib/commands/plugin/add-plugin.js +12 -25
  35. package/lib/commands/plugin/build-plugin.js +31 -44
  36. package/lib/commands/plugin/create-plugin.js +114 -137
  37. package/lib/commands/plugin/list-plugins.js +22 -33
  38. package/lib/commands/plugin/remove-plugin.js +21 -34
  39. package/lib/commands/plugin/update-plugin.js +20 -33
  40. package/lib/commands/post-install.js +25 -38
  41. package/lib/commands/prepare.js +19 -35
  42. package/lib/commands/preview.js +50 -63
  43. package/lib/commands/remove-platform.js +7 -18
  44. package/lib/commands/resources/resources-update.js +14 -27
  45. package/lib/commands/run.js +55 -76
  46. package/lib/commands/start.js +6 -19
  47. package/lib/commands/test-init.js +126 -137
  48. package/lib/commands/test.js +72 -95
  49. package/lib/commands/typings.js +126 -142
  50. package/lib/commands/update-platform.js +26 -39
  51. package/lib/commands/update.js +31 -44
  52. package/lib/commands/widget.js +408 -357
  53. package/lib/common/child-process.js +53 -72
  54. package/lib/common/codeGeneration/code-entity.js +1 -1
  55. package/lib/common/codeGeneration/code-printer.js +1 -1
  56. package/lib/common/command-params.js +7 -18
  57. package/lib/common/commands/analytics.js +29 -42
  58. package/lib/common/commands/autocompletion.js +41 -58
  59. package/lib/common/commands/device/device-log-stream.js +12 -23
  60. package/lib/common/commands/device/get-file.js +23 -34
  61. package/lib/common/commands/device/list-applications.js +12 -23
  62. package/lib/common/commands/device/list-devices.js +72 -87
  63. package/lib/common/commands/device/list-files.js +24 -35
  64. package/lib/common/commands/device/put-file.js +23 -34
  65. package/lib/common/commands/device/run-application.js +12 -25
  66. package/lib/common/commands/device/stop-application.js +11 -22
  67. package/lib/common/commands/device/uninstall-application.js +6 -17
  68. package/lib/common/commands/generate-messages.js +17 -28
  69. package/lib/common/commands/help.js +20 -33
  70. package/lib/common/commands/package-manager-get.js +6 -17
  71. package/lib/common/commands/package-manager-set.js +9 -20
  72. package/lib/common/commands/post-install.js +2 -13
  73. package/lib/common/commands/preuninstall.js +27 -42
  74. package/lib/common/commands/proxy/proxy-base.js +11 -22
  75. package/lib/common/commands/proxy/proxy-clear.js +4 -15
  76. package/lib/common/commands/proxy/proxy-get.js +3 -14
  77. package/lib/common/commands/proxy/proxy-set.js +87 -100
  78. package/lib/common/constants.js +11 -11
  79. package/lib/common/decorators.js +10 -22
  80. package/lib/common/dispatchers.js +84 -101
  81. package/lib/common/errors.js +92 -107
  82. package/lib/common/file-system.js +110 -132
  83. package/lib/common/header.js +1 -2
  84. package/lib/common/helpers.js +149 -178
  85. package/lib/common/host-info.js +40 -53
  86. package/lib/common/http-client.js +104 -119
  87. package/lib/common/logger/appenders/cli-appender.js +1 -2
  88. package/lib/common/logger/appenders/emit-appender.js +1 -2
  89. package/lib/common/logger/layouts/cli-layout.js +1 -2
  90. package/lib/common/logger/logger.js +4 -4
  91. package/lib/common/mobile/android/android-application-manager.js +138 -159
  92. package/lib/common/mobile/android/android-debug-bridge-result-handler.js +1 -1
  93. package/lib/common/mobile/android/android-debug-bridge.js +92 -117
  94. package/lib/common/mobile/android/android-device-file-system.js +101 -134
  95. package/lib/common/mobile/android/android-device-hash-service.js +52 -77
  96. package/lib/common/mobile/android/android-device.js +73 -90
  97. package/lib/common/mobile/android/android-emulator-services.js +105 -130
  98. package/lib/common/mobile/android/android-log-filter.js +1 -1
  99. package/lib/common/mobile/android/android-virtual-device-service.js +78 -99
  100. package/lib/common/mobile/android/device-android-debug-bridge.js +13 -29
  101. package/lib/common/mobile/android/genymotion/genymotion-service.js +94 -121
  102. package/lib/common/mobile/android/genymotion/virtualbox-service.js +74 -91
  103. package/lib/common/mobile/android/logcat-helper.js +114 -133
  104. package/lib/common/mobile/application-manager-base.js +89 -112
  105. package/lib/common/mobile/device-log-provider-base.js +7 -18
  106. package/lib/common/mobile/ios/device/ios-application-manager.js +79 -108
  107. package/lib/common/mobile/ios/device/ios-device-file-system.js +78 -105
  108. package/lib/common/mobile/ios/device/ios-device-operations.js +106 -143
  109. package/lib/common/mobile/ios/device/ios-device.js +20 -36
  110. package/lib/common/mobile/ios/ios-device-base.js +58 -81
  111. package/lib/common/mobile/ios/simulator/ios-emulator-services.js +66 -95
  112. package/lib/common/mobile/ios/simulator/ios-sim-resolver.js +1 -1
  113. package/lib/common/mobile/ios/simulator/ios-simulator-application-manager.js +61 -90
  114. package/lib/common/mobile/ios/simulator/ios-simulator-device.js +31 -47
  115. package/lib/common/mobile/ios/simulator/ios-simulator-file-system.js +37 -62
  116. package/lib/common/mobile/ios/simulator/ios-simulator-log-provider.js +24 -35
  117. package/lib/common/mobile/mobile-core/android-device-discovery.js +44 -63
  118. package/lib/common/mobile/mobile-core/android-emulator-discovery.js +23 -34
  119. package/lib/common/mobile/mobile-core/android-process-service.js +174 -213
  120. package/lib/common/mobile/mobile-core/device-discovery.js +2 -13
  121. package/lib/common/mobile/mobile-core/devices-service.js +400 -450
  122. package/lib/common/mobile/mobile-core/ios-device-discovery.js +25 -36
  123. package/lib/common/mobile/mobile-core/ios-simulator-discovery.js +49 -64
  124. package/lib/common/mobile/mobile-helper.js +15 -26
  125. package/lib/common/mobile/wp8/wp8-emulator-services.js +25 -52
  126. package/lib/common/opener.js +2 -2
  127. package/lib/common/prompter.js +91 -106
  128. package/lib/common/queue.js +9 -20
  129. package/lib/common/services/auto-completion-service.js +40 -53
  130. package/lib/common/services/cancellation.js +17 -28
  131. package/lib/common/services/commands-service.js +156 -179
  132. package/lib/common/services/help-service.js +130 -155
  133. package/lib/common/services/hooks-service.js +99 -114
  134. package/lib/common/services/ios-notification-service.js +21 -34
  135. package/lib/common/services/json-file-settings-service.js +56 -75
  136. package/lib/common/services/lock-service.js +35 -52
  137. package/lib/common/services/message-contract-generator.js +35 -46
  138. package/lib/common/services/micro-templating-service.js +6 -17
  139. package/lib/common/services/net-service.js +92 -109
  140. package/lib/common/services/project-files-manager.js +10 -23
  141. package/lib/common/services/proxy-service.js +13 -24
  142. package/lib/common/services/qr.js +13 -24
  143. package/lib/common/services/settings-service.js +1 -1
  144. package/lib/common/services/xcode-select-service.js +20 -35
  145. package/lib/common/utils.js +2 -2
  146. package/lib/common/validators/project-name-validator.js +1 -1
  147. package/lib/common/validators/validation-result.js +1 -1
  148. package/lib/common/verify-node-version.js +2 -3
  149. package/lib/common/yok.js +25 -38
  150. package/lib/config.js +41 -56
  151. package/lib/constants.js +24 -24
  152. package/lib/controllers/build-controller.js +82 -99
  153. package/lib/controllers/debug-controller.js +111 -132
  154. package/lib/controllers/deploy-controller.js +15 -23
  155. package/lib/controllers/migrate-controller.js +780 -853
  156. package/lib/controllers/platform-controller.js +74 -89
  157. package/lib/controllers/prepare-controller.js +241 -270
  158. package/lib/controllers/run-controller.js +411 -425
  159. package/lib/controllers/update-controller-base.js +16 -29
  160. package/lib/controllers/update-controller.js +101 -126
  161. package/lib/data/prepare-data.js +4 -1
  162. package/lib/definitions/project.d.ts +24 -24
  163. package/lib/detached-processes/cleanup-js-subprocess.js +3 -12
  164. package/lib/detached-processes/cleanup-process.js +16 -25
  165. package/lib/device-path-provider.js +23 -34
  166. package/lib/device-sockets/ios/app-debug-socket-proxy-factory.js +155 -170
  167. package/lib/device-sockets/ios/notification.js +1 -1
  168. package/lib/device-sockets/ios/socket-request-executor.js +26 -41
  169. package/lib/helpers/android-bundle-validator-helper.js +1 -1
  170. package/lib/helpers/deploy-command-helper.js +44 -49
  171. package/lib/helpers/key-command-helper.js +4 -13
  172. package/lib/helpers/livesync-command-helper.js +138 -153
  173. package/lib/helpers/network-connectivity-validator.js +6 -17
  174. package/lib/helpers/options-track-helper.js +6 -17
  175. package/lib/helpers/platform-command-helper.js +103 -124
  176. package/lib/key-commands/index.js +150 -200
  177. package/lib/nativescript-cli.js +5 -14
  178. package/lib/node-package-manager.js +90 -113
  179. package/lib/options.js +4 -13
  180. package/lib/package-installation-manager.js +132 -167
  181. package/lib/package-manager.js +64 -87
  182. package/lib/platform-command-param.js +4 -15
  183. package/lib/pnpm-package-manager.js +60 -79
  184. package/lib/project-data.js +1 -1
  185. package/lib/providers/project-files-provider.js +1 -1
  186. package/lib/services/analytics/analytics-broker-process.js +13 -22
  187. package/lib/services/analytics/analytics-broker.js +17 -30
  188. package/lib/services/analytics/analytics-service.js +165 -201
  189. package/lib/services/analytics/google-analytics-provider.js +41 -56
  190. package/lib/services/analytics-settings-service.js +15 -32
  191. package/lib/services/android/android-bundle-tool-service.js +43 -60
  192. package/lib/services/android/gradle-build-args-service.js +10 -21
  193. package/lib/services/android/gradle-build-service.js +22 -35
  194. package/lib/services/android/gradle-command-service.js +22 -35
  195. package/lib/services/android-device-debug-service.js +92 -119
  196. package/lib/services/android-plugin-build-service.js +219 -245
  197. package/lib/services/android-project-service.js +134 -179
  198. package/lib/services/android-resources-migration-service.js +57 -70
  199. package/lib/services/apple-portal/apple-portal-application-service.js +46 -63
  200. package/lib/services/apple-portal/apple-portal-session-service.js +196 -215
  201. package/lib/services/apple-portal/srp/srp-wrapper.js +45 -60
  202. package/lib/services/assets-generation/assets-generation-service.js +114 -128
  203. package/lib/services/build-artifacts-service.js +9 -20
  204. package/lib/services/build-info-file-service.js +20 -35
  205. package/lib/services/cleanup-service.js +47 -76
  206. package/lib/services/cocoapods-service.js +124 -145
  207. package/lib/services/device/device-install-app-service.js +54 -71
  208. package/lib/services/doctor-service.js +106 -125
  209. package/lib/services/extensibility-service.js +87 -106
  210. package/lib/services/files-hash-service.js +26 -43
  211. package/lib/services/hmr-status-service.js +1 -1
  212. package/lib/services/initialize-service.js +38 -51
  213. package/lib/services/ios/export-options-plist-service.js +41 -54
  214. package/lib/services/ios/ios-signing-service.js +171 -190
  215. package/lib/services/ios/spm-service.js +52 -65
  216. package/lib/services/ios/xcodebuild-args-service.js +77 -94
  217. package/lib/services/ios/xcodebuild-command-service.js +14 -25
  218. package/lib/services/ios/xcodebuild-service.js +52 -71
  219. package/lib/services/ios-debugger-port-service.js +24 -37
  220. package/lib/services/ios-device-debug-service.js +75 -102
  221. package/lib/services/ios-entitlements-service.js +31 -42
  222. package/lib/services/ios-extensions-service.js +18 -29
  223. package/lib/services/ios-project-service.js +530 -591
  224. package/lib/services/ios-provision-service.js +110 -131
  225. package/lib/services/ios-watch-app-service.js +21 -32
  226. package/lib/services/ip-service.js +39 -54
  227. package/lib/services/itmstransporter-service.js +129 -152
  228. package/lib/services/livesync/android-device-livesync-service-base.js +31 -48
  229. package/lib/services/livesync/android-device-livesync-service.js +121 -150
  230. package/lib/services/livesync/android-device-livesync-sockets-service.js +123 -154
  231. package/lib/services/livesync/android-livesync-service.js +14 -35
  232. package/lib/services/livesync/android-livesync-tool.js +90 -113
  233. package/lib/services/livesync/device-livesync-service-base.js +16 -29
  234. package/lib/services/livesync/ios-device-livesync-service.js +120 -149
  235. package/lib/services/livesync/ios-livesync-service.js +43 -59
  236. package/lib/services/livesync/platform-livesync-service-base.js +98 -123
  237. package/lib/services/log-parser-service.js +1 -1
  238. package/lib/services/log-source-map-service.js +31 -42
  239. package/lib/services/marking-mode-service.js +17 -30
  240. package/lib/services/npm-config-service.js +1 -1
  241. package/lib/services/pacote-service.js +54 -69
  242. package/lib/services/performance-service.js +1 -1
  243. package/lib/services/platform/add-platform-service.js +57 -78
  244. package/lib/services/platform/platform-validation-service.js +22 -33
  245. package/lib/services/platform/prepare-native-platform-service.js +51 -64
  246. package/lib/services/platform-environment-requirements.js +27 -38
  247. package/lib/services/plugins-service.js +126 -151
  248. package/lib/services/project-backup-service.js +1 -1
  249. package/lib/services/project-changes-service.js +126 -143
  250. package/lib/services/project-cleanup-service.js +65 -78
  251. package/lib/services/project-config-service.js +78 -88
  252. package/lib/services/project-data-service.js +112 -129
  253. package/lib/services/project-name-service.js +28 -43
  254. package/lib/services/project-service.js +90 -109
  255. package/lib/services/project-templates-service.js +52 -67
  256. package/lib/services/start-service.js +41 -59
  257. package/lib/services/temp-service.js +8 -21
  258. package/lib/services/terminal-spinner-service.js +15 -26
  259. package/lib/services/test-execution-service.js +64 -77
  260. package/lib/services/test-initialization-service.js +2 -2
  261. package/lib/services/timeline-profiler-service.js +1 -1
  262. package/lib/services/versions-service.js +120 -139
  263. package/lib/services/webpack/webpack-compiler-service.js +228 -251
  264. package/lib/services/xcconfig-service.js +8 -19
  265. package/lib/sys-info.js +45 -62
  266. package/lib/tools/node-modules/node-modules-builder.js +16 -27
  267. package/lib/yarn-package-manager.js +59 -78
  268. package/lib/yarn2-package-manager.js +62 -81
  269. package/package.json +67 -82
  270. package/node_modules/@npmcli/move-file/LICENSE.md +0 -22
  271. package/node_modules/@npmcli/move-file/README.md +0 -69
  272. package/node_modules/@npmcli/move-file/lib/index.js +0 -185
  273. package/node_modules/@npmcli/move-file/node_modules/mkdirp/LICENSE +0 -21
  274. package/node_modules/@npmcli/move-file/node_modules/mkdirp/bin/cmd.js +0 -68
  275. package/node_modules/@npmcli/move-file/node_modules/mkdirp/index.js +0 -31
  276. package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/find-made.js +0 -29
  277. package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/mkdirp-manual.js +0 -64
  278. package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/mkdirp-native.js +0 -39
  279. package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/opts-arg.js +0 -23
  280. package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/path-arg.js +0 -29
  281. package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/use-native.js +0 -10
  282. package/node_modules/@npmcli/move-file/node_modules/mkdirp/package.json +0 -44
  283. package/node_modules/@npmcli/move-file/node_modules/mkdirp/readme.markdown +0 -266
  284. package/node_modules/@npmcli/move-file/package.json +0 -47
  285. package/node_modules/balanced-match/.github/FUNDING.yml +0 -2
  286. package/node_modules/balanced-match/LICENSE.md +0 -21
  287. package/node_modules/balanced-match/README.md +0 -97
  288. package/node_modules/balanced-match/index.js +0 -62
  289. package/node_modules/balanced-match/package.json +0 -48
  290. package/node_modules/concat-map/.travis.yml +0 -4
  291. package/node_modules/concat-map/LICENSE +0 -18
  292. package/node_modules/concat-map/README.markdown +0 -62
  293. package/node_modules/concat-map/example/map.js +0 -6
  294. package/node_modules/concat-map/index.js +0 -13
  295. package/node_modules/concat-map/package.json +0 -43
  296. package/node_modules/concat-map/test/map.js +0 -39
  297. package/node_modules/fs.realpath/LICENSE +0 -43
  298. package/node_modules/fs.realpath/README.md +0 -33
  299. package/node_modules/fs.realpath/index.js +0 -66
  300. package/node_modules/fs.realpath/old.js +0 -303
  301. package/node_modules/fs.realpath/package.json +0 -26
  302. package/node_modules/inflight/LICENSE +0 -15
  303. package/node_modules/inflight/README.md +0 -37
  304. package/node_modules/inflight/inflight.js +0 -54
  305. package/node_modules/inflight/package.json +0 -29
  306. package/node_modules/inherits/LICENSE +0 -16
  307. package/node_modules/inherits/README.md +0 -42
  308. package/node_modules/inherits/inherits.js +0 -9
  309. package/node_modules/inherits/inherits_browser.js +0 -27
  310. package/node_modules/inherits/package.json +0 -29
  311. package/node_modules/once/LICENSE +0 -15
  312. package/node_modules/once/README.md +0 -79
  313. package/node_modules/once/once.js +0 -42
  314. package/node_modules/once/package.json +0 -33
  315. package/node_modules/path-is-absolute/index.js +0 -20
  316. package/node_modules/path-is-absolute/license +0 -21
  317. package/node_modules/path-is-absolute/package.json +0 -43
  318. package/node_modules/path-is-absolute/readme.md +0 -59
  319. package/node_modules/rimraf/LICENSE +0 -15
  320. package/node_modules/rimraf/README.md +0 -101
  321. package/node_modules/rimraf/bin.js +0 -68
  322. package/node_modules/rimraf/node_modules/brace-expansion/LICENSE +0 -21
  323. package/node_modules/rimraf/node_modules/brace-expansion/README.md +0 -129
  324. package/node_modules/rimraf/node_modules/brace-expansion/index.js +0 -201
  325. package/node_modules/rimraf/node_modules/brace-expansion/package.json +0 -47
  326. package/node_modules/rimraf/node_modules/glob/LICENSE +0 -21
  327. package/node_modules/rimraf/node_modules/glob/README.md +0 -378
  328. package/node_modules/rimraf/node_modules/glob/common.js +0 -238
  329. package/node_modules/rimraf/node_modules/glob/glob.js +0 -790
  330. package/node_modules/rimraf/node_modules/glob/package.json +0 -55
  331. package/node_modules/rimraf/node_modules/glob/sync.js +0 -486
  332. package/node_modules/rimraf/node_modules/minimatch/LICENSE +0 -15
  333. package/node_modules/rimraf/node_modules/minimatch/README.md +0 -230
  334. package/node_modules/rimraf/node_modules/minimatch/minimatch.js +0 -947
  335. package/node_modules/rimraf/node_modules/minimatch/package.json +0 -33
  336. package/node_modules/rimraf/package.json +0 -32
  337. package/node_modules/rimraf/rimraf.js +0 -360
  338. package/node_modules/stringify-package/LICENSE +0 -13
  339. package/node_modules/stringify-package/README.md +0 -55
  340. package/node_modules/stringify-package/index.js +0 -18
  341. package/node_modules/stringify-package/package.json +0 -38
  342. package/node_modules/wrappy/LICENSE +0 -15
  343. package/node_modules/wrappy/README.md +0 -36
  344. package/node_modules/wrappy/package.json +0 -29
  345. package/node_modules/wrappy/wrappy.js +0 -33
@@ -5,15 +5,6 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
5
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
6
  return c > 3 && r && Object.defineProperty(target, key, r), r;
7
7
  };
8
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
9
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
10
- return new (P || (P = Promise))(function (resolve, reject) {
11
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
12
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
13
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
14
- step((generator = generator.apply(thisArg, _arguments || [])).next());
15
- });
16
- };
17
8
  Object.defineProperty(exports, "__esModule", { value: true });
18
9
  exports.RunController = void 0;
19
10
  const constants_1 = require("../common/constants");
@@ -48,204 +39,194 @@ class RunController extends events_1.EventEmitter {
48
39
  this.$projectDataService = $projectDataService;
49
40
  this.prepareReadyEventHandler = null;
50
41
  }
51
- run(runData) {
52
- return __awaiter(this, void 0, void 0, function* () {
53
- const { liveSyncInfo, deviceDescriptors } = runData;
54
- const { projectDir } = liveSyncInfo;
55
- const projectData = this.$projectDataService.getProjectData(projectDir);
56
- yield this.initializeSetup(projectData);
57
- const deviceDescriptorsForInitialSync = this.getDeviceDescriptorsForInitialSync(projectDir, deviceDescriptors);
58
- const newPlatforms = this.$devicesService.getPlatformsFromDeviceDescriptors(deviceDescriptors);
59
- const oldPlatforms = this.$liveSyncProcessDataService.getPlatforms(projectDir);
60
- const platforms = _.uniq(_.concat(newPlatforms, oldPlatforms));
61
- this.$liveSyncProcessDataService.persistData(projectDir, deviceDescriptors, platforms);
62
- const shouldStartWatcher = !liveSyncInfo.skipWatcher &&
63
- this.$liveSyncProcessDataService.hasDeviceDescriptors(projectDir);
64
- if (shouldStartWatcher && liveSyncInfo.useHotModuleReload) {
65
- this.$hmrStatusService.attachToHmrStatusEvent();
66
- }
67
- if (!this.prepareReadyEventHandler) {
68
- const handler = (data) => __awaiter(this, void 0, void 0, function* () {
69
- if (data.hasNativeChanges) {
70
- const platformData = this.$platformsDataService.getPlatformData(data.platform, projectData);
71
- const prepareData = this.$prepareDataService.getPrepareData(liveSyncInfo.projectDir, data.platform, Object.assign(Object.assign({}, liveSyncInfo), { watch: !liveSyncInfo.skipWatcher }));
72
- const changesInfo = yield this.$projectChangesService.checkForChanges(platformData, projectData, prepareData);
73
- if (changesInfo.hasChanges) {
74
- yield this.syncChangedDataOnDevices(data, projectData, liveSyncInfo);
75
- }
76
- }
77
- else {
78
- yield this.syncChangedDataOnDevices(data, projectData, liveSyncInfo);
42
+ async run(runData) {
43
+ const { liveSyncInfo, deviceDescriptors } = runData;
44
+ const { projectDir } = liveSyncInfo;
45
+ const projectData = this.$projectDataService.getProjectData(projectDir);
46
+ await this.initializeSetup(projectData);
47
+ const deviceDescriptorsForInitialSync = this.getDeviceDescriptorsForInitialSync(projectDir, deviceDescriptors);
48
+ const newPlatforms = this.$devicesService.getPlatformsFromDeviceDescriptors(deviceDescriptors);
49
+ const oldPlatforms = this.$liveSyncProcessDataService.getPlatforms(projectDir);
50
+ const platforms = _.uniq(_.concat(newPlatforms, oldPlatforms));
51
+ this.$liveSyncProcessDataService.persistData(projectDir, deviceDescriptors, platforms);
52
+ const shouldStartWatcher = !liveSyncInfo.skipWatcher &&
53
+ this.$liveSyncProcessDataService.hasDeviceDescriptors(projectDir);
54
+ if (shouldStartWatcher && liveSyncInfo.useHotModuleReload) {
55
+ this.$hmrStatusService.attachToHmrStatusEvent();
56
+ }
57
+ if (!this.prepareReadyEventHandler) {
58
+ const handler = async (data) => {
59
+ if (data.hasNativeChanges) {
60
+ const platformData = this.$platformsDataService.getPlatformData(data.platform, projectData);
61
+ const prepareData = this.$prepareDataService.getPrepareData(liveSyncInfo.projectDir, data.platform, { ...liveSyncInfo, watch: !liveSyncInfo.skipWatcher });
62
+ const changesInfo = await this.$projectChangesService.checkForChanges(platformData, projectData, prepareData);
63
+ if (changesInfo.hasChanges) {
64
+ await this.syncChangedDataOnDevices(data, projectData, liveSyncInfo);
79
65
  }
80
- });
81
- this.prepareReadyEventHandler = handler.bind(this);
82
- this.$prepareController.on(constants_2.PREPARE_READY_EVENT_NAME, this.prepareReadyEventHandler);
83
- }
84
- yield this.syncInitialDataOnDevices(projectData, liveSyncInfo, deviceDescriptorsForInitialSync);
85
- this.attachDeviceLostHandler();
86
- });
66
+ }
67
+ else {
68
+ await this.syncChangedDataOnDevices(data, projectData, liveSyncInfo);
69
+ }
70
+ };
71
+ this.prepareReadyEventHandler = handler.bind(this);
72
+ this.$prepareController.on(constants_2.PREPARE_READY_EVENT_NAME, this.prepareReadyEventHandler);
73
+ }
74
+ await this.syncInitialDataOnDevices(projectData, liveSyncInfo, deviceDescriptorsForInitialSync);
75
+ this.attachDeviceLostHandler();
87
76
  }
88
- stop(data) {
89
- return __awaiter(this, void 0, void 0, function* () {
90
- const { projectDir, deviceIdentifiers, stopOptions } = data;
91
- const liveSyncProcessInfo = this.$liveSyncProcessDataService.getPersistedData(projectDir);
92
- if (liveSyncProcessInfo && !liveSyncProcessInfo.isStopped) {
93
- // In case we are coming from error during livesync, the current action is the one that erred (but we are still executing it),
94
- // so we cannot await it as this will cause infinite loop.
95
- const shouldAwaitPendingOperation = !stopOptions || stopOptions.shouldAwaitAllActions;
96
- const deviceIdentifiersToRemove = deviceIdentifiers && deviceIdentifiers.length
97
- ? deviceIdentifiers
98
- : _.map(liveSyncProcessInfo.deviceDescriptors, (d) => d.identifier);
99
- const removedDeviceIdentifiers = _.remove(liveSyncProcessInfo.deviceDescriptors, (descriptor) => _.includes(deviceIdentifiersToRemove, descriptor.identifier)).map((descriptor) => descriptor.identifier);
100
- // Handle the case when no more devices left for any of the persisted platforms
101
- for (let i = 0; i < liveSyncProcessInfo.platforms.length; i++) {
102
- const platform = liveSyncProcessInfo.platforms[i];
103
- const devices = this.$devicesService.getDevicesForPlatform(platform);
104
- if (!devices || !devices.length) {
105
- yield this.$prepareController.stopWatchers(projectDir, platform);
106
- }
77
+ async stop(data) {
78
+ const { projectDir, deviceIdentifiers, stopOptions } = data;
79
+ const liveSyncProcessInfo = this.$liveSyncProcessDataService.getPersistedData(projectDir);
80
+ if (liveSyncProcessInfo && !liveSyncProcessInfo.isStopped) {
81
+ // In case we are coming from error during livesync, the current action is the one that erred (but we are still executing it),
82
+ // so we cannot await it as this will cause infinite loop.
83
+ const shouldAwaitPendingOperation = !stopOptions || stopOptions.shouldAwaitAllActions;
84
+ const deviceIdentifiersToRemove = deviceIdentifiers && deviceIdentifiers.length
85
+ ? deviceIdentifiers
86
+ : _.map(liveSyncProcessInfo.deviceDescriptors, (d) => d.identifier);
87
+ const removedDeviceIdentifiers = _.remove(liveSyncProcessInfo.deviceDescriptors, (descriptor) => _.includes(deviceIdentifiersToRemove, descriptor.identifier)).map((descriptor) => descriptor.identifier);
88
+ // Handle the case when no more devices left for any of the persisted platforms
89
+ for (let i = 0; i < liveSyncProcessInfo.platforms.length; i++) {
90
+ const platform = liveSyncProcessInfo.platforms[i];
91
+ const devices = this.$devicesService.getDevicesForPlatform(platform);
92
+ if (!devices || !devices.length) {
93
+ await this.$prepareController.stopWatchers(projectDir, platform);
107
94
  }
108
- // In case deviceIdentifiers are not passed, we should stop the whole LiveSync.
109
- if (!deviceIdentifiers ||
110
- !deviceIdentifiers.length ||
111
- !liveSyncProcessInfo.deviceDescriptors ||
112
- !liveSyncProcessInfo.deviceDescriptors.length) {
113
- if (liveSyncProcessInfo.timer) {
114
- clearTimeout(liveSyncProcessInfo.timer);
115
- }
116
- for (let k = 0; k < liveSyncProcessInfo.platforms.length; k++) {
117
- yield this.$prepareController.stopWatchers(projectDir, liveSyncProcessInfo.platforms[k]);
118
- }
119
- liveSyncProcessInfo.isStopped = true;
120
- if (liveSyncProcessInfo.actionsChain && shouldAwaitPendingOperation) {
121
- yield liveSyncProcessInfo.actionsChain;
122
- }
123
- liveSyncProcessInfo.deviceDescriptors = [];
124
- if (this.prepareReadyEventHandler) {
125
- this.$prepareController.removeListener(constants_2.PREPARE_READY_EVENT_NAME, this.prepareReadyEventHandler);
126
- this.prepareReadyEventHandler = null;
127
- }
128
- const projectData = this.$projectDataService.getProjectData(projectDir);
129
- yield this.$hooksService.executeAfterHooks("watch", {
130
- hookArgs: {
131
- projectData,
132
- },
133
- });
95
+ }
96
+ // In case deviceIdentifiers are not passed, we should stop the whole LiveSync.
97
+ if (!deviceIdentifiers ||
98
+ !deviceIdentifiers.length ||
99
+ !liveSyncProcessInfo.deviceDescriptors ||
100
+ !liveSyncProcessInfo.deviceDescriptors.length) {
101
+ if (liveSyncProcessInfo.timer) {
102
+ clearTimeout(liveSyncProcessInfo.timer);
134
103
  }
135
- else if (liveSyncProcessInfo.currentSyncAction &&
136
- shouldAwaitPendingOperation) {
137
- yield liveSyncProcessInfo.currentSyncAction;
104
+ for (let k = 0; k < liveSyncProcessInfo.platforms.length; k++) {
105
+ await this.$prepareController.stopWatchers(projectDir, liveSyncProcessInfo.platforms[k]);
138
106
  }
139
- // Emit RunOnDevice stopped when we've really stopped.
140
- _.each(removedDeviceIdentifiers, (deviceIdentifier) => {
141
- this.emitCore(constants_2.RunOnDeviceEvents.runOnDeviceStopped, {
142
- projectDir,
143
- deviceIdentifier,
144
- keepProcessAlive: stopOptions === null || stopOptions === void 0 ? void 0 : stopOptions.keepProcessAlive,
145
- });
146
- });
147
- if (stopOptions === null || stopOptions === void 0 ? void 0 : stopOptions.keepProcessAlive) {
148
- this.removeAllListeners(constants_2.RunOnDeviceEvents.runOnDeviceStopped);
107
+ liveSyncProcessInfo.isStopped = true;
108
+ if (liveSyncProcessInfo.actionsChain && shouldAwaitPendingOperation) {
109
+ await liveSyncProcessInfo.actionsChain;
149
110
  }
111
+ liveSyncProcessInfo.deviceDescriptors = [];
112
+ if (this.prepareReadyEventHandler) {
113
+ this.$prepareController.removeListener(constants_2.PREPARE_READY_EVENT_NAME, this.prepareReadyEventHandler);
114
+ this.prepareReadyEventHandler = null;
115
+ }
116
+ const projectData = this.$projectDataService.getProjectData(projectDir);
117
+ await this.$hooksService.executeAfterHooks("watch", {
118
+ hookArgs: {
119
+ projectData,
120
+ },
121
+ });
150
122
  }
151
- });
123
+ else if (liveSyncProcessInfo.currentSyncAction &&
124
+ shouldAwaitPendingOperation) {
125
+ await liveSyncProcessInfo.currentSyncAction;
126
+ }
127
+ // Emit RunOnDevice stopped when we've really stopped.
128
+ _.each(removedDeviceIdentifiers, (deviceIdentifier) => {
129
+ this.emitCore(constants_2.RunOnDeviceEvents.runOnDeviceStopped, {
130
+ projectDir,
131
+ deviceIdentifier,
132
+ keepProcessAlive: stopOptions === null || stopOptions === void 0 ? void 0 : stopOptions.keepProcessAlive,
133
+ });
134
+ });
135
+ if (stopOptions === null || stopOptions === void 0 ? void 0 : stopOptions.keepProcessAlive) {
136
+ this.removeAllListeners(constants_2.RunOnDeviceEvents.runOnDeviceStopped);
137
+ }
138
+ }
152
139
  }
153
140
  getDeviceDescriptors(data) {
154
141
  return this.$liveSyncProcessDataService.getDeviceDescriptors(data.projectDir);
155
142
  }
156
- refreshApplication(projectData, liveSyncResultInfo, filesChangeEventData, deviceDescriptor, fullSyncAction) {
157
- return __awaiter(this, void 0, void 0, function* () {
158
- const result = deviceDescriptor.debuggingEnabled
159
- ? yield this.refreshApplicationWithDebug(projectData, liveSyncResultInfo, filesChangeEventData, deviceDescriptor)
160
- : yield this.refreshApplicationWithoutDebug(projectData, liveSyncResultInfo, filesChangeEventData, deviceDescriptor, undefined, fullSyncAction);
161
- const device = liveSyncResultInfo.deviceAppData.device;
162
- this.emitCore(constants_2.RunOnDeviceEvents.runOnDeviceExecuted, {
163
- projectDir: projectData.projectDir,
164
- deviceIdentifier: device.deviceInfo.identifier,
165
- applicationIdentifier: projectData.projectIdentifiers[device.deviceInfo.platform.toLowerCase()],
166
- syncedFiles: liveSyncResultInfo.modifiedFilesData.map((m) => m.getLocalPath()),
167
- isFullSync: liveSyncResultInfo.isFullSync,
168
- });
169
- return result;
143
+ async refreshApplication(projectData, liveSyncResultInfo, filesChangeEventData, deviceDescriptor, fullSyncAction) {
144
+ const result = deviceDescriptor.debuggingEnabled
145
+ ? await this.refreshApplicationWithDebug(projectData, liveSyncResultInfo, filesChangeEventData, deviceDescriptor)
146
+ : await this.refreshApplicationWithoutDebug(projectData, liveSyncResultInfo, filesChangeEventData, deviceDescriptor, undefined, fullSyncAction);
147
+ const device = liveSyncResultInfo.deviceAppData.device;
148
+ this.emitCore(constants_2.RunOnDeviceEvents.runOnDeviceExecuted, {
149
+ projectDir: projectData.projectDir,
150
+ deviceIdentifier: device.deviceInfo.identifier,
151
+ applicationIdentifier: projectData.projectIdentifiers[device.deviceInfo.platform.toLowerCase()],
152
+ syncedFiles: liveSyncResultInfo.modifiedFilesData.map((m) => m.getLocalPath()),
153
+ isFullSync: liveSyncResultInfo.isFullSync,
170
154
  });
155
+ return result;
171
156
  }
172
- refreshApplicationWithDebug(projectData, liveSyncResultInfo, filesChangeEventData, deviceDescriptor) {
173
- return __awaiter(this, void 0, void 0, function* () {
174
- const debugOptions = deviceDescriptor.debugOptions || {};
175
- liveSyncResultInfo.waitForDebugger = !!debugOptions.debugBrk;
176
- liveSyncResultInfo.forceRefreshWithSocket = true;
177
- const refreshInfo = yield this.refreshApplicationWithoutDebug(projectData, liveSyncResultInfo, filesChangeEventData, deviceDescriptor, {
178
- shouldSkipEmitLiveSyncNotification: true,
179
- shouldCheckDeveloperDiscImage: true,
180
- });
181
- // we do not stop the application when debugBrk is false, so we need to attach, instead of launch
182
- // if we try to send the launch request, the debugger port will not be printed and the command will timeout
183
- debugOptions.start = !debugOptions.debugBrk;
184
- debugOptions.forceDebuggerAttachedEvent = refreshInfo.didRestart;
185
- yield this.$debugController.enableDebuggingCoreWithoutWaitingCurrentAction(projectData.projectDir, deviceDescriptor.identifier, debugOptions);
186
- return refreshInfo;
157
+ async refreshApplicationWithDebug(projectData, liveSyncResultInfo, filesChangeEventData, deviceDescriptor) {
158
+ const debugOptions = deviceDescriptor.debugOptions || {};
159
+ liveSyncResultInfo.waitForDebugger = !!debugOptions.debugBrk;
160
+ liveSyncResultInfo.forceRefreshWithSocket = true;
161
+ const refreshInfo = await this.refreshApplicationWithoutDebug(projectData, liveSyncResultInfo, filesChangeEventData, deviceDescriptor, {
162
+ shouldSkipEmitLiveSyncNotification: true,
163
+ shouldCheckDeveloperDiscImage: true,
187
164
  });
165
+ // we do not stop the application when debugBrk is false, so we need to attach, instead of launch
166
+ // if we try to send the launch request, the debugger port will not be printed and the command will timeout
167
+ debugOptions.start = !debugOptions.debugBrk;
168
+ debugOptions.forceDebuggerAttachedEvent = refreshInfo.didRestart;
169
+ await this.$debugController.enableDebuggingCoreWithoutWaitingCurrentAction(projectData.projectDir, deviceDescriptor.identifier, debugOptions);
170
+ return refreshInfo;
188
171
  }
189
- refreshApplicationWithoutDebug(projectData, liveSyncResultInfo, filesChangeEventData, deviceDescriptor, settings, fullSyncAction) {
190
- return __awaiter(this, void 0, void 0, function* () {
191
- const result = { didRestart: false };
192
- const platform = liveSyncResultInfo.deviceAppData.platform;
193
- const applicationIdentifier = projectData.projectIdentifiers[platform.toLowerCase()];
194
- const platformLiveSyncService = this.$liveSyncServiceResolver.resolveLiveSyncService(platform);
195
- try {
196
- const isFullSync = filesChangeEventData &&
197
- (filesChangeEventData.hasNativeChanges ||
198
- !filesChangeEventData.hasOnlyHotUpdateFiles);
199
- let shouldRestart = isFullSync;
200
- if (!shouldRestart) {
201
- shouldRestart = yield platformLiveSyncService.shouldRestart(projectData, liveSyncResultInfo);
202
- }
203
- if (!shouldRestart) {
204
- shouldRestart = !(yield platformLiveSyncService.tryRefreshApplication(projectData, liveSyncResultInfo));
205
- }
206
- if (!isFullSync && shouldRestart && fullSyncAction) {
207
- this.$logger.trace(`Syncing all files as the current app state does not support hot updates.`);
208
- liveSyncResultInfo.didRecover = true;
209
- yield fullSyncAction();
210
- }
211
- if (shouldRestart) {
212
- this.emit(constants_2.DEBUGGER_DETACHED_EVENT_NAME, {
213
- deviceIdentifier: liveSyncResultInfo.deviceAppData.device.deviceInfo.identifier,
214
- });
215
- yield platformLiveSyncService.restartApplication(projectData, liveSyncResultInfo);
216
- result.didRestart = true;
217
- }
172
+ async refreshApplicationWithoutDebug(projectData, liveSyncResultInfo, filesChangeEventData, deviceDescriptor, settings, fullSyncAction) {
173
+ const result = { didRestart: false };
174
+ const platform = liveSyncResultInfo.deviceAppData.platform;
175
+ const applicationIdentifier = projectData.projectIdentifiers[platform.toLowerCase()];
176
+ const platformLiveSyncService = this.$liveSyncServiceResolver.resolveLiveSyncService(platform);
177
+ try {
178
+ const isFullSync = filesChangeEventData &&
179
+ (filesChangeEventData.hasNativeChanges ||
180
+ !filesChangeEventData.hasOnlyHotUpdateFiles);
181
+ let shouldRestart = isFullSync;
182
+ if (!shouldRestart) {
183
+ shouldRestart = await platformLiveSyncService.shouldRestart(projectData, liveSyncResultInfo);
218
184
  }
219
- catch (err) {
220
- this.$logger.info(`Error while trying to start application ${applicationIdentifier} on device ${liveSyncResultInfo.deviceAppData.device.deviceInfo.identifier}. Error is: ${err.message || err}`);
221
- const msg = `Unable to start application ${applicationIdentifier} on device ${liveSyncResultInfo.deviceAppData.device.deviceInfo.identifier}. Try starting it manually.`;
222
- this.$logger.warn(msg);
223
- const device = liveSyncResultInfo.deviceAppData.device;
224
- const deviceIdentifier = device.deviceInfo.identifier;
225
- if (!settings || !settings.shouldSkipEmitLiveSyncNotification) {
226
- this.emitCore(constants_2.RunOnDeviceEvents.runOnDeviceNotification, {
227
- projectDir: projectData.projectDir,
228
- deviceIdentifier: device.deviceInfo.identifier,
229
- applicationIdentifier: projectData.projectIdentifiers[device.deviceInfo.platform.toLowerCase()],
230
- notification: msg,
231
- });
232
- }
233
- if (settings &&
234
- settings.shouldCheckDeveloperDiscImage &&
235
- (err.message || err) === "Could not find developer disk image") {
236
- const attachDebuggerOptions = {
237
- platform: device.deviceInfo.platform,
238
- isEmulator: device.isEmulator,
239
- projectDir: projectData.projectDir,
240
- deviceIdentifier,
241
- debugOptions: deviceDescriptor.debugOptions,
242
- outputPath: deviceDescriptor.buildData.outputPath,
243
- };
244
- this.emit(constants_2.USER_INTERACTION_NEEDED_EVENT_NAME, attachDebuggerOptions);
245
- }
185
+ if (!shouldRestart) {
186
+ shouldRestart = !(await platformLiveSyncService.tryRefreshApplication(projectData, liveSyncResultInfo));
246
187
  }
247
- return result;
248
- });
188
+ if (!isFullSync && shouldRestart && fullSyncAction) {
189
+ this.$logger.trace(`Syncing all files as the current app state does not support hot updates.`);
190
+ liveSyncResultInfo.didRecover = true;
191
+ await fullSyncAction();
192
+ }
193
+ if (shouldRestart) {
194
+ this.emit(constants_2.DEBUGGER_DETACHED_EVENT_NAME, {
195
+ deviceIdentifier: liveSyncResultInfo.deviceAppData.device.deviceInfo.identifier,
196
+ });
197
+ await platformLiveSyncService.restartApplication(projectData, liveSyncResultInfo);
198
+ result.didRestart = true;
199
+ }
200
+ }
201
+ catch (err) {
202
+ this.$logger.info(`Error while trying to start application ${applicationIdentifier} on device ${liveSyncResultInfo.deviceAppData.device.deviceInfo.identifier}. Error is: ${err.message || err}`);
203
+ const msg = `Unable to start application ${applicationIdentifier} on device ${liveSyncResultInfo.deviceAppData.device.deviceInfo.identifier}. Try starting it manually.`;
204
+ this.$logger.warn(msg);
205
+ const device = liveSyncResultInfo.deviceAppData.device;
206
+ const deviceIdentifier = device.deviceInfo.identifier;
207
+ if (!settings || !settings.shouldSkipEmitLiveSyncNotification) {
208
+ this.emitCore(constants_2.RunOnDeviceEvents.runOnDeviceNotification, {
209
+ projectDir: projectData.projectDir,
210
+ deviceIdentifier: device.deviceInfo.identifier,
211
+ applicationIdentifier: projectData.projectIdentifiers[device.deviceInfo.platform.toLowerCase()],
212
+ notification: msg,
213
+ });
214
+ }
215
+ if (settings &&
216
+ settings.shouldCheckDeveloperDiscImage &&
217
+ (err.message || err) === "Could not find developer disk image") {
218
+ const attachDebuggerOptions = {
219
+ platform: device.deviceInfo.platform,
220
+ isEmulator: device.isEmulator,
221
+ projectDir: projectData.projectDir,
222
+ deviceIdentifier,
223
+ debugOptions: deviceDescriptor.debugOptions,
224
+ outputPath: deviceDescriptor.buildData.outputPath,
225
+ };
226
+ this.emit(constants_2.USER_INTERACTION_NEEDED_EVENT_NAME, attachDebuggerOptions);
227
+ }
228
+ }
229
+ return result;
249
230
  }
250
231
  getDeviceDescriptorsForInitialSync(projectDir, deviceDescriptors) {
251
232
  const currentRunData = this.$liveSyncProcessDataService.getPersistedData(projectDir);
@@ -256,25 +237,23 @@ class RunController extends events_1.EventEmitter {
256
237
  : deviceDescriptors;
257
238
  return deviceDescriptorsForInitialSync;
258
239
  }
259
- initializeSetup(projectData) {
260
- return __awaiter(this, void 0, void 0, function* () {
261
- try {
262
- yield this.$pluginsService.ensureAllDependenciesAreInstalled(projectData);
263
- }
264
- catch (err) {
265
- this.$logger.trace(err);
266
- this.$errors.fail(`Unable to install dependencies. Make sure your package.json is valid and all dependencies are correct. Error is: ${err.message}`);
267
- }
268
- });
240
+ async initializeSetup(projectData) {
241
+ try {
242
+ await this.$pluginsService.ensureAllDependenciesAreInstalled(projectData);
243
+ }
244
+ catch (err) {
245
+ this.$logger.trace(err);
246
+ this.$errors.fail(`Unable to install dependencies. Make sure your package.json is valid and all dependencies are correct. Error is: ${err.message}`);
247
+ }
269
248
  }
270
249
  attachDeviceLostHandler() {
271
- this.$devicesService.on(constants_1.DeviceDiscoveryEventNames.DEVICE_LOST, (device) => __awaiter(this, void 0, void 0, function* () {
250
+ this.$devicesService.on(constants_1.DeviceDiscoveryEventNames.DEVICE_LOST, async (device) => {
272
251
  this.$logger.trace(`Received ${constants_1.DeviceDiscoveryEventNames.DEVICE_LOST} event in LiveSync service for ${device.deviceInfo.identifier}. Will stop LiveSync operation for this device.`);
273
252
  for (const projectDir in this.$liveSyncProcessDataService.getAllPersistedData()) {
274
253
  try {
275
254
  const deviceDescriptors = this.getDeviceDescriptors({ projectDir });
276
255
  if (_.find(deviceDescriptors, (d) => d.identifier === device.deviceInfo.identifier)) {
277
- yield this.stop({
256
+ await this.stop({
278
257
  projectDir,
279
258
  deviceIdentifiers: [device.deviceInfo.identifier],
280
259
  });
@@ -284,259 +263,266 @@ class RunController extends events_1.EventEmitter {
284
263
  this.$logger.warn(`Unable to stop LiveSync operation for ${device.deviceInfo.identifier}.`, err);
285
264
  }
286
265
  }
287
- }));
266
+ });
288
267
  }
289
- syncInitialDataOnDevices(projectData, liveSyncInfo, deviceDescriptors) {
290
- return __awaiter(this, void 0, void 0, function* () {
291
- const rebuiltInformation = {};
292
- const deviceAction = (device) => __awaiter(this, void 0, void 0, function* () {
293
- const deviceDescriptor = _.find(deviceDescriptors, (dd) => dd.identifier === device.deviceInfo.identifier);
294
- const prepareData = this.$prepareDataService.getPrepareData(liveSyncInfo.projectDir, device.deviceInfo.platform, Object.assign(Object.assign(Object.assign({}, liveSyncInfo), deviceDescriptor.buildData), { nativePrepare: {
295
- skipNativePrepare: !!deviceDescriptor.skipNativePrepare,
296
- }, watch: !liveSyncInfo.skipWatcher }));
297
- const prepareResultData = yield this.$prepareController.prepare(prepareData);
298
- const buildData = Object.assign(Object.assign({}, deviceDescriptor.buildData), { buildForDevice: !device.isEmulator });
299
- const platformData = this.$platformsDataService.getPlatformData(device.deviceInfo.platform, projectData);
300
- try {
301
- let packageFilePath = null;
302
- // Case where we have three devices attached, a change that requires build is found,
303
- // we'll rebuild the app only for the first device, but we should install new package on all three devices.
304
- if (rebuiltInformation[platformData.platformNameLowerCase] &&
305
- (this.$mobileHelper.isAndroidPlatform(platformData.platformNameLowerCase) ||
306
- rebuiltInformation[platformData.platformNameLowerCase]
307
- .isEmulator === device.isEmulator)) {
308
- packageFilePath =
309
- rebuiltInformation[platformData.platformNameLowerCase]
310
- .packageFilePath;
311
- yield this.$deviceInstallAppService.installOnDevice(device, buildData, packageFilePath);
268
+ async syncInitialDataOnDevices(projectData, liveSyncInfo, deviceDescriptors) {
269
+ const rebuiltInformation = {};
270
+ const deviceAction = async (device) => {
271
+ const deviceDescriptor = _.find(deviceDescriptors, (dd) => dd.identifier === device.deviceInfo.identifier);
272
+ const prepareData = this.$prepareDataService.getPrepareData(liveSyncInfo.projectDir, device.deviceInfo.platform, {
273
+ ...liveSyncInfo,
274
+ ...deviceDescriptor.buildData,
275
+ nativePrepare: {
276
+ skipNativePrepare: !!deviceDescriptor.skipNativePrepare,
277
+ },
278
+ watch: !liveSyncInfo.skipWatcher,
279
+ });
280
+ const prepareResultData = await this.$prepareController.prepare(prepareData);
281
+ const buildData = {
282
+ ...deviceDescriptor.buildData,
283
+ buildForDevice: !device.isEmulator,
284
+ };
285
+ const platformData = this.$platformsDataService.getPlatformData(device.deviceInfo.platform, projectData);
286
+ try {
287
+ let packageFilePath = null;
288
+ // Case where we have three devices attached, a change that requires build is found,
289
+ // we'll rebuild the app only for the first device, but we should install new package on all three devices.
290
+ if (rebuiltInformation[platformData.platformNameLowerCase] &&
291
+ (this.$mobileHelper.isAndroidPlatform(platformData.platformNameLowerCase) ||
292
+ rebuiltInformation[platformData.platformNameLowerCase]
293
+ .isEmulator === device.isEmulator)) {
294
+ packageFilePath =
295
+ rebuiltInformation[platformData.platformNameLowerCase]
296
+ .packageFilePath;
297
+ await this.$deviceInstallAppService.installOnDevice(device, buildData, packageFilePath);
298
+ }
299
+ else {
300
+ const shouldBuild = prepareResultData.hasNativeChanges ||
301
+ buildData.nativePrepare.forceRebuildNativeApp ||
302
+ (await this.$buildController.shouldBuild(buildData));
303
+ if (shouldBuild) {
304
+ packageFilePath = await deviceDescriptor.buildAction();
305
+ rebuiltInformation[platformData.platformNameLowerCase] = {
306
+ isEmulator: device.isEmulator,
307
+ platform: platformData.platformNameLowerCase,
308
+ packageFilePath,
309
+ };
312
310
  }
313
311
  else {
314
- const shouldBuild = prepareResultData.hasNativeChanges ||
315
- buildData.nativePrepare.forceRebuildNativeApp ||
316
- (yield this.$buildController.shouldBuild(buildData));
317
- if (shouldBuild) {
318
- packageFilePath = yield deviceDescriptor.buildAction();
319
- rebuiltInformation[platformData.platformNameLowerCase] = {
320
- isEmulator: device.isEmulator,
321
- platform: platformData.platformNameLowerCase,
322
- packageFilePath,
323
- };
324
- }
325
- else {
326
- yield this.$analyticsService.trackEventActionInGoogleAnalytics({
327
- action: "LiveSync" /* TrackActionNames.LiveSync */,
328
- device,
329
- projectDir: projectData.projectDir,
330
- });
331
- }
332
- yield this.$deviceInstallAppService.installOnDeviceIfNeeded(device, buildData, packageFilePath);
312
+ await this.$analyticsService.trackEventActionInGoogleAnalytics({
313
+ action: "LiveSync" /* TrackActionNames.LiveSync */,
314
+ device,
315
+ projectDir: projectData.projectDir,
316
+ });
333
317
  }
334
- const platformLiveSyncService = this.$liveSyncServiceResolver.resolveLiveSyncService(platformData.platformNameLowerCase);
335
- const { force, useHotModuleReload, skipWatcher } = liveSyncInfo;
336
- const liveSyncResultInfo = yield platformLiveSyncService.fullSync({
337
- force,
338
- useHotModuleReload,
339
- projectData,
340
- device,
341
- watch: !skipWatcher,
342
- liveSyncDeviceData: deviceDescriptor,
343
- });
344
- yield this.refreshApplication(projectData, liveSyncResultInfo, null, deviceDescriptor);
345
- this.$logger.info(`Successfully synced application ${liveSyncResultInfo.deviceAppData.appIdentifier} on device ${liveSyncResultInfo.deviceAppData.device.deviceInfo.identifier}.`);
346
- this.emitCore(constants_2.RunOnDeviceEvents.runOnDeviceStarted, {
347
- projectDir: projectData.projectDir,
348
- deviceIdentifier: device.deviceInfo.identifier,
349
- applicationIdentifier: projectData.projectIdentifiers[device.deviceInfo.platform.toLowerCase()],
350
- });
318
+ await this.$deviceInstallAppService.installOnDeviceIfNeeded(device, buildData, packageFilePath);
351
319
  }
352
- catch (err) {
353
- this.$logger.warn(`Unable to apply changes on device: ${device.deviceInfo.identifier}. Error is: ${err.message}.`);
354
- this.$logger.trace(err);
355
- this.emitCore(constants_2.RunOnDeviceEvents.runOnDeviceError, {
356
- projectDir: projectData.projectDir,
357
- deviceIdentifier: device.deviceInfo.identifier,
358
- applicationIdentifier: projectData.projectIdentifiers[device.deviceInfo.platform.toLowerCase()],
359
- error: err,
360
- });
361
- yield this.stop({
362
- projectDir: projectData.projectDir,
363
- deviceIdentifiers: [device.deviceInfo.identifier],
364
- stopOptions: { shouldAwaitAllActions: false },
365
- });
366
- }
367
- });
368
- yield this.addActionToChain(projectData.projectDir, () => this.$devicesService.execute(deviceAction, (device) => _.some(deviceDescriptors, (deviceDescriptor) => deviceDescriptor.identifier === device.deviceInfo.identifier)));
369
- });
320
+ const platformLiveSyncService = this.$liveSyncServiceResolver.resolveLiveSyncService(platformData.platformNameLowerCase);
321
+ const { force, useHotModuleReload, skipWatcher } = liveSyncInfo;
322
+ const liveSyncResultInfo = await platformLiveSyncService.fullSync({
323
+ force,
324
+ useHotModuleReload,
325
+ projectData,
326
+ device,
327
+ watch: !skipWatcher,
328
+ liveSyncDeviceData: deviceDescriptor,
329
+ });
330
+ await this.refreshApplication(projectData, liveSyncResultInfo, null, deviceDescriptor);
331
+ this.$logger.info(`Successfully synced application ${liveSyncResultInfo.deviceAppData.appIdentifier} on device ${liveSyncResultInfo.deviceAppData.device.deviceInfo.identifier}.`);
332
+ this.emitCore(constants_2.RunOnDeviceEvents.runOnDeviceStarted, {
333
+ projectDir: projectData.projectDir,
334
+ deviceIdentifier: device.deviceInfo.identifier,
335
+ applicationIdentifier: projectData.projectIdentifiers[device.deviceInfo.platform.toLowerCase()],
336
+ });
337
+ }
338
+ catch (err) {
339
+ this.$logger.warn(`Unable to apply changes on device: ${device.deviceInfo.identifier}. Error is: ${err.message}.`);
340
+ this.$logger.trace(err);
341
+ this.emitCore(constants_2.RunOnDeviceEvents.runOnDeviceError, {
342
+ projectDir: projectData.projectDir,
343
+ deviceIdentifier: device.deviceInfo.identifier,
344
+ applicationIdentifier: projectData.projectIdentifiers[device.deviceInfo.platform.toLowerCase()],
345
+ error: err,
346
+ });
347
+ await this.stop({
348
+ projectDir: projectData.projectDir,
349
+ deviceIdentifiers: [device.deviceInfo.identifier],
350
+ stopOptions: { shouldAwaitAllActions: false },
351
+ });
352
+ }
353
+ };
354
+ await this.addActionToChain(projectData.projectDir, () => this.$devicesService.execute(deviceAction, (device) => _.some(deviceDescriptors, (deviceDescriptor) => deviceDescriptor.identifier === device.deviceInfo.identifier)));
370
355
  }
371
- syncChangedDataOnDevices(data, projectData, liveSyncInfo) {
372
- return __awaiter(this, void 0, void 0, function* () {
373
- const successfullySyncedMessageFormat = `Successfully synced application %s on device %s.`;
374
- const rebuiltInformation = {};
375
- const deviceAction = (device) => __awaiter(this, void 0, void 0, function* () {
376
- var _a, _b;
377
- const deviceDescriptors = this.$liveSyncProcessDataService.getDeviceDescriptors(projectData.projectDir);
378
- const deviceDescriptor = _.find(deviceDescriptors, (dd) => dd.identifier === device.deviceInfo.identifier);
379
- const platformData = this.$platformsDataService.getPlatformData(data.platform, projectData);
380
- const prepareData = this.$prepareDataService.getPrepareData(liveSyncInfo.projectDir, device.deviceInfo.platform, Object.assign(Object.assign(Object.assign({}, liveSyncInfo), deviceDescriptor.buildData), { nativePrepare: {
381
- skipNativePrepare: !!deviceDescriptor.skipNativePrepare,
382
- }, watch: !liveSyncInfo.skipWatcher }));
383
- try {
384
- const platformLiveSyncService = this.$liveSyncServiceResolver.resolveLiveSyncService(device.deviceInfo.platform);
385
- const allAppFiles = ((_b = (_a = data.hmrData) === null || _a === void 0 ? void 0 : _a.fallbackFiles) === null || _b === void 0 ? void 0 : _b.length)
386
- ? data.hmrData.fallbackFiles
387
- : data.files;
388
- const filesToSync = data.hasOnlyHotUpdateFiles
389
- ? data.files
390
- : allAppFiles;
391
- const watchInfo = {
392
- liveSyncDeviceData: deviceDescriptor,
393
- projectData,
394
- // todo: remove stale files once everything is stable
395
- // currently, watcher fires multiple times & may clean up unsynced files
396
- // filesToRemove: data.staleFiles ?? [],
397
- filesToRemove: [],
398
- filesToSync,
399
- hmrData: data.hmrData,
356
+ async syncChangedDataOnDevices(data, projectData, liveSyncInfo) {
357
+ const successfullySyncedMessageFormat = `Successfully synced application %s on device %s.`;
358
+ const rebuiltInformation = {};
359
+ const deviceAction = async (device) => {
360
+ var _a, _b;
361
+ const deviceDescriptors = this.$liveSyncProcessDataService.getDeviceDescriptors(projectData.projectDir);
362
+ const deviceDescriptor = _.find(deviceDescriptors, (dd) => dd.identifier === device.deviceInfo.identifier);
363
+ const platformData = this.$platformsDataService.getPlatformData(data.platform, projectData);
364
+ const prepareData = this.$prepareDataService.getPrepareData(liveSyncInfo.projectDir, device.deviceInfo.platform, {
365
+ ...liveSyncInfo,
366
+ ...deviceDescriptor.buildData,
367
+ nativePrepare: {
368
+ skipNativePrepare: !!deviceDescriptor.skipNativePrepare,
369
+ },
370
+ watch: !liveSyncInfo.skipWatcher,
371
+ });
372
+ try {
373
+ const platformLiveSyncService = this.$liveSyncServiceResolver.resolveLiveSyncService(device.deviceInfo.platform);
374
+ const allAppFiles = ((_b = (_a = data.hmrData) === null || _a === void 0 ? void 0 : _a.fallbackFiles) === null || _b === void 0 ? void 0 : _b.length)
375
+ ? data.hmrData.fallbackFiles
376
+ : data.files;
377
+ const filesToSync = data.hasOnlyHotUpdateFiles
378
+ ? data.files
379
+ : allAppFiles;
380
+ const watchInfo = {
381
+ liveSyncDeviceData: deviceDescriptor,
382
+ projectData,
383
+ // todo: remove stale files once everything is stable
384
+ // currently, watcher fires multiple times & may clean up unsynced files
385
+ // filesToRemove: data.staleFiles ?? [],
386
+ filesToRemove: [],
387
+ filesToSync,
388
+ hmrData: data.hmrData,
389
+ useHotModuleReload: liveSyncInfo.useHotModuleReload,
390
+ force: liveSyncInfo.force,
391
+ connectTimeout: 1000,
392
+ };
393
+ const deviceAppData = await platformLiveSyncService.getAppData(_.merge({ device, watch: true }, watchInfo));
394
+ if (data.hasNativeChanges) {
395
+ const rebuiltInfo = rebuiltInformation[platformData.platformNameLowerCase] &&
396
+ (this.$mobileHelper.isAndroidPlatform(platformData.platformNameLowerCase) ||
397
+ rebuiltInformation[platformData.platformNameLowerCase]
398
+ .isEmulator === device.isEmulator);
399
+ if (!rebuiltInfo) {
400
+ await this.$prepareNativePlatformService.prepareNativePlatform(platformData, projectData, prepareData);
401
+ await deviceDescriptor.buildAction();
402
+ rebuiltInformation[platformData.platformNameLowerCase] = {
403
+ isEmulator: device.isEmulator,
404
+ platform: platformData.platformNameLowerCase,
405
+ packageFilePath: null,
406
+ };
407
+ }
408
+ await this.$deviceInstallAppService.installOnDevice(device, deviceDescriptor.buildData, rebuiltInformation[platformData.platformNameLowerCase]
409
+ .packageFilePath);
410
+ await platformLiveSyncService.syncAfterInstall(device, watchInfo);
411
+ await this.refreshApplication(projectData, {
412
+ deviceAppData,
413
+ modifiedFilesData: [],
414
+ isFullSync: false,
400
415
  useHotModuleReload: liveSyncInfo.useHotModuleReload,
401
- force: liveSyncInfo.force,
402
- connectTimeout: 1000,
403
- };
404
- const deviceAppData = yield platformLiveSyncService.getAppData(_.merge({ device, watch: true }, watchInfo));
405
- if (data.hasNativeChanges) {
406
- const rebuiltInfo = rebuiltInformation[platformData.platformNameLowerCase] &&
407
- (this.$mobileHelper.isAndroidPlatform(platformData.platformNameLowerCase) ||
408
- rebuiltInformation[platformData.platformNameLowerCase]
409
- .isEmulator === device.isEmulator);
410
- if (!rebuiltInfo) {
411
- yield this.$prepareNativePlatformService.prepareNativePlatform(platformData, projectData, prepareData);
412
- yield deviceDescriptor.buildAction();
413
- rebuiltInformation[platformData.platformNameLowerCase] = {
414
- isEmulator: device.isEmulator,
415
- platform: platformData.platformNameLowerCase,
416
- packageFilePath: null,
417
- };
418
- }
419
- yield this.$deviceInstallAppService.installOnDevice(device, deviceDescriptor.buildData, rebuiltInformation[platformData.platformNameLowerCase]
420
- .packageFilePath);
421
- yield platformLiveSyncService.syncAfterInstall(device, watchInfo);
422
- yield this.refreshApplication(projectData, {
423
- deviceAppData,
424
- modifiedFilesData: [],
425
- isFullSync: false,
426
- useHotModuleReload: liveSyncInfo.useHotModuleReload,
427
- }, data, deviceDescriptor);
428
- this.$logger.info(util.format(successfullySyncedMessageFormat, deviceAppData.appIdentifier, device.deviceInfo.identifier));
416
+ }, data, deviceDescriptor);
417
+ this.$logger.info(util.format(successfullySyncedMessageFormat, deviceAppData.appIdentifier, device.deviceInfo.identifier));
418
+ }
419
+ else {
420
+ const isInHMRMode = liveSyncInfo.useHotModuleReload &&
421
+ data.hmrData &&
422
+ data.hmrData.hash;
423
+ if (isInHMRMode) {
424
+ this.$hmrStatusService.watchHmrStatus(device.deviceInfo.identifier, data.hmrData.hash);
429
425
  }
430
- else {
431
- const isInHMRMode = liveSyncInfo.useHotModuleReload &&
432
- data.hmrData &&
433
- data.hmrData.hash;
434
- if (isInHMRMode) {
435
- this.$hmrStatusService.watchHmrStatus(device.deviceInfo.identifier, data.hmrData.hash);
436
- }
437
- const watchAction = () => __awaiter(this, void 0, void 0, function* () {
438
- const liveSyncResultInfo = yield platformLiveSyncService.liveSyncWatchAction(device, watchInfo);
439
- const fullSyncAction = () => __awaiter(this, void 0, void 0, function* () {
440
- watchInfo.filesToSync = allAppFiles;
441
- const fullLiveSyncResultInfo = yield platformLiveSyncService.liveSyncWatchAction(device, watchInfo);
442
- // IMPORTANT: keep the same instance as we rely on side effects
443
- _.assign(liveSyncResultInfo, fullLiveSyncResultInfo);
444
- });
445
- yield this.$hooksService.executeBeforeHooks("watchAction", {
446
- hookArgs: {
447
- liveSyncResultInfo,
448
- filesToSync,
449
- allAppFiles,
450
- isInHMRMode,
451
- filesChangedEvent: data,
452
- },
453
- });
454
- yield this.refreshApplication(projectData, liveSyncResultInfo, data, deviceDescriptor, fullSyncAction);
455
- if (!liveSyncResultInfo.didRecover && isInHMRMode) {
456
- const status = yield this.$hmrStatusService.getHmrStatus(device.deviceInfo.identifier, data.hmrData.hash);
457
- // the timeout is assumed OK as the app could be blocked on a breakpoint
458
- if (status === constants_1.HmrConstants.HMR_ERROR_STATUS) {
459
- yield fullSyncAction();
460
- liveSyncResultInfo.isFullSync = true;
461
- yield this.refreshApplication(projectData, liveSyncResultInfo, data, deviceDescriptor);
462
- }
463
- }
464
- yield this.$hooksService.executeAfterHooks("watchAction", {
426
+ const watchAction = async () => {
427
+ const liveSyncResultInfo = await platformLiveSyncService.liveSyncWatchAction(device, watchInfo);
428
+ const fullSyncAction = async () => {
429
+ watchInfo.filesToSync = allAppFiles;
430
+ const fullLiveSyncResultInfo = await platformLiveSyncService.liveSyncWatchAction(device, watchInfo);
431
+ // IMPORTANT: keep the same instance as we rely on side effects
432
+ _.assign(liveSyncResultInfo, fullLiveSyncResultInfo);
433
+ };
434
+ await this.$hooksService.executeBeforeHooks("watchAction", {
435
+ hookArgs: {
465
436
  liveSyncResultInfo,
466
437
  filesToSync,
467
438
  allAppFiles,
468
- filesChangedEvent: data,
469
439
  isInHMRMode,
470
- });
471
- this.$logger.info(util.format(successfullySyncedMessageFormat, deviceAppData.appIdentifier, device.deviceInfo.identifier));
440
+ filesChangedEvent: data,
441
+ },
472
442
  });
473
- if (liveSyncInfo.useHotModuleReload) {
474
- try {
475
- this.$logger.trace("Try executing watch action without any preparation of files.");
476
- yield watchAction();
477
- this.$logger.trace("Successfully executed watch action without any preparation of files.");
478
- return;
479
- }
480
- catch (err) {
481
- this.$logger.trace(`Error while trying to execute fast sync. Now we'll check the state of the app and we'll try to resurrect from the error. The error is: ${err}`);
443
+ await this.refreshApplication(projectData, liveSyncResultInfo, data, deviceDescriptor, fullSyncAction);
444
+ if (!liveSyncResultInfo.didRecover && isInHMRMode) {
445
+ const status = await this.$hmrStatusService.getHmrStatus(device.deviceInfo.identifier, data.hmrData.hash);
446
+ // the timeout is assumed OK as the app could be blocked on a breakpoint
447
+ if (status === constants_1.HmrConstants.HMR_ERROR_STATUS) {
448
+ await fullSyncAction();
449
+ liveSyncResultInfo.isFullSync = true;
450
+ await this.refreshApplication(projectData, liveSyncResultInfo, data, deviceDescriptor);
482
451
  }
483
452
  }
484
- yield this.$deviceInstallAppService.installOnDeviceIfNeeded(device, deviceDescriptor.buildData);
485
- watchInfo.connectTimeout = null;
486
- yield watchAction();
453
+ await this.$hooksService.executeAfterHooks("watchAction", {
454
+ liveSyncResultInfo,
455
+ filesToSync,
456
+ allAppFiles,
457
+ filesChangedEvent: data,
458
+ isInHMRMode,
459
+ });
460
+ this.$logger.info(util.format(successfullySyncedMessageFormat, deviceAppData.appIdentifier, device.deviceInfo.identifier));
461
+ };
462
+ if (liveSyncInfo.useHotModuleReload) {
463
+ try {
464
+ this.$logger.trace("Try executing watch action without any preparation of files.");
465
+ await watchAction();
466
+ this.$logger.trace("Successfully executed watch action without any preparation of files.");
467
+ return;
468
+ }
469
+ catch (err) {
470
+ this.$logger.trace(`Error while trying to execute fast sync. Now we'll check the state of the app and we'll try to resurrect from the error. The error is: ${err}`);
471
+ }
487
472
  }
473
+ await this.$deviceInstallAppService.installOnDeviceIfNeeded(device, deviceDescriptor.buildData);
474
+ watchInfo.connectTimeout = null;
475
+ await watchAction();
488
476
  }
489
- catch (err) {
490
- this.$logger.warn(`Unable to apply changes for device: ${device.deviceInfo.identifier}. Error is: ${err && err.message}.`);
491
- this.emitCore(constants_2.RunOnDeviceEvents.runOnDeviceError, {
492
- projectDir: projectData.projectDir,
493
- deviceIdentifier: device.deviceInfo.identifier,
494
- applicationIdentifier: projectData.projectIdentifiers[device.deviceInfo.platform.toLowerCase()],
495
- error: err,
496
- });
497
- yield this.stop({
498
- projectDir: projectData.projectDir,
499
- deviceIdentifiers: [device.deviceInfo.identifier],
500
- stopOptions: { shouldAwaitAllActions: false },
501
- });
477
+ }
478
+ catch (err) {
479
+ this.$logger.warn(`Unable to apply changes for device: ${device.deviceInfo.identifier}. Error is: ${err && err.message}.`);
480
+ this.emitCore(constants_2.RunOnDeviceEvents.runOnDeviceError, {
481
+ projectDir: projectData.projectDir,
482
+ deviceIdentifier: device.deviceInfo.identifier,
483
+ applicationIdentifier: projectData.projectIdentifiers[device.deviceInfo.platform.toLowerCase()],
484
+ error: err,
485
+ });
486
+ await this.stop({
487
+ projectDir: projectData.projectDir,
488
+ deviceIdentifiers: [device.deviceInfo.identifier],
489
+ stopOptions: { shouldAwaitAllActions: false },
490
+ });
491
+ }
492
+ };
493
+ await this.addActionToChain(projectData.projectDir, () => this.$devicesService.execute(deviceAction, (device) => {
494
+ const liveSyncProcessInfo = this.$liveSyncProcessDataService.getPersistedData(projectData.projectDir);
495
+ return (data.platform.toLowerCase() ===
496
+ device.deviceInfo.platform.toLowerCase() &&
497
+ liveSyncProcessInfo &&
498
+ _.some(liveSyncProcessInfo.deviceDescriptors, (deviceDescriptor) => deviceDescriptor.identifier === device.deviceInfo.identifier));
499
+ }));
500
+ }
501
+ async addActionToChain(projectDir, action) {
502
+ const liveSyncInfo = this.$liveSyncProcessDataService.getPersistedData(projectDir);
503
+ if (liveSyncInfo) {
504
+ liveSyncInfo.actionsChain = liveSyncInfo.actionsChain.then(async () => {
505
+ if (!liveSyncInfo.isStopped) {
506
+ liveSyncInfo.currentSyncAction = action();
507
+ const res = await liveSyncInfo.currentSyncAction;
508
+ return res;
502
509
  }
503
510
  });
504
- yield this.addActionToChain(projectData.projectDir, () => this.$devicesService.execute(deviceAction, (device) => {
505
- const liveSyncProcessInfo = this.$liveSyncProcessDataService.getPersistedData(projectData.projectDir);
506
- return (data.platform.toLowerCase() ===
507
- device.deviceInfo.platform.toLowerCase() &&
508
- liveSyncProcessInfo &&
509
- _.some(liveSyncProcessInfo.deviceDescriptors, (deviceDescriptor) => deviceDescriptor.identifier === device.deviceInfo.identifier));
510
- }));
511
- });
512
- }
513
- addActionToChain(projectDir, action) {
514
- return __awaiter(this, void 0, void 0, function* () {
515
- const liveSyncInfo = this.$liveSyncProcessDataService.getPersistedData(projectDir);
516
- if (liveSyncInfo) {
517
- liveSyncInfo.actionsChain = liveSyncInfo.actionsChain.then(() => __awaiter(this, void 0, void 0, function* () {
518
- if (!liveSyncInfo.isStopped) {
519
- liveSyncInfo.currentSyncAction = action();
520
- const res = yield liveSyncInfo.currentSyncAction;
521
- return res;
522
- }
523
- }));
524
- const result = yield liveSyncInfo.actionsChain;
525
- return result;
526
- }
527
- });
511
+ const result = await liveSyncInfo.actionsChain;
512
+ return result;
513
+ }
528
514
  }
529
515
  emitCore(event, data) {
530
516
  this.$logger.trace(`Will emit event ${event} with data`, data);
531
517
  this.emit(event, data);
532
518
  }
533
519
  }
520
+ exports.RunController = RunController;
534
521
  __decorate([
535
522
  (0, decorators_1.performanceLog)()
536
523
  ], RunController.prototype, "refreshApplicationWithoutDebug", null);
537
524
  __decorate([
538
525
  (0, decorators_1.cache)()
539
526
  ], RunController.prototype, "attachDeviceLostHandler", null);
540
- exports.RunController = RunController;
541
527
  yok_1.injector.register("runController", RunController);
542
528
  //# sourceMappingURL=run-controller.js.map