nativescript 8.9.0-dev.0 → 8.9.0-dev.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/test-deps-versions-generated.json +1 -1
- package/lib/.d.ts +1 -0
- package/lib/android-tools-info.js +32 -9
- package/lib/base-package-manager.js +71 -47
- package/lib/bootstrap.js +6 -1
- package/lib/bun-package-manager.js +104 -65
- package/lib/color.js +5 -2
- package/lib/commands/add-platform.js +31 -14
- package/lib/commands/apple-login.js +30 -18
- package/lib/commands/appstore-list.js +46 -34
- package/lib/commands/appstore-upload.js +68 -52
- package/lib/commands/build.js +90 -57
- package/lib/commands/clean.js +197 -161
- package/lib/commands/command-base.js +28 -14
- package/lib/commands/config.js +71 -48
- package/lib/commands/create-project.js +235 -210
- package/lib/commands/debug.js +93 -66
- package/lib/commands/deploy.js +47 -30
- package/lib/commands/embedding/embed.js +59 -33
- package/lib/commands/extensibility/install-extension.js +17 -5
- package/lib/commands/extensibility/list-extensions.js +25 -13
- package/lib/commands/extensibility/uninstall-extension.js +16 -4
- package/lib/commands/fonts.js +42 -30
- package/lib/commands/generate-assets.js +29 -13
- package/lib/commands/generate-help.js +14 -2
- package/lib/commands/generate.js +70 -12
- package/lib/commands/info.js +14 -2
- package/lib/commands/install.js +50 -34
- package/lib/commands/list-platforms.js +26 -14
- package/lib/commands/migrate.js +27 -15
- package/lib/commands/native-add.js +51 -23
- package/lib/commands/platform-clean.js +33 -19
- package/lib/commands/plugin/add-plugin.js +26 -12
- package/lib/commands/plugin/build-plugin.js +45 -31
- package/lib/commands/plugin/create-plugin.js +138 -110
- package/lib/commands/plugin/list-plugins.js +34 -22
- package/lib/commands/plugin/remove-plugin.js +35 -20
- package/lib/commands/plugin/update-plugin.js +34 -20
- package/lib/commands/post-install.js +39 -20
- package/lib/commands/prepare.js +39 -22
- package/lib/commands/preview.js +64 -49
- package/lib/commands/remove-platform.js +19 -7
- package/lib/commands/resources/resources-update.js +28 -13
- package/lib/commands/run.js +77 -55
- package/lib/commands/setup.js +1 -0
- package/lib/commands/start.js +20 -6
- package/lib/commands/test-init.js +138 -123
- package/lib/commands/test.js +97 -67
- package/lib/commands/typings.js +143 -126
- package/lib/commands/update-platform.js +40 -22
- package/lib/commands/update.js +45 -30
- package/lib/commands/widget.js +767 -0
- package/lib/common/bootstrap.js +1 -0
- package/lib/common/child-process.js +75 -53
- package/lib/common/codeGeneration/code-entity.js +2 -1
- package/lib/common/codeGeneration/code-printer.js +2 -1
- package/lib/common/command-params.js +19 -7
- package/lib/common/commands/analytics.js +43 -27
- package/lib/common/commands/autocompletion.js +59 -39
- package/lib/common/commands/device/device-log-stream.js +24 -12
- package/lib/common/commands/device/get-file.js +35 -22
- package/lib/common/commands/device/list-applications.js +24 -12
- package/lib/common/commands/device/list-devices.js +90 -72
- package/lib/common/commands/device/list-files.js +36 -23
- package/lib/common/commands/device/put-file.js +35 -22
- package/lib/common/commands/device/run-application.js +26 -12
- package/lib/common/commands/device/stop-application.js +23 -11
- package/lib/common/commands/device/uninstall-application.js +18 -6
- package/lib/common/commands/doctor.js +3 -2
- package/lib/common/commands/generate-messages.js +29 -17
- package/lib/common/commands/help.js +34 -20
- package/lib/common/commands/package-manager-get.js +18 -6
- package/lib/common/commands/package-manager-set.js +21 -9
- package/lib/common/commands/post-install.js +14 -2
- package/lib/common/commands/preuninstall.js +48 -24
- package/lib/common/commands/proxy/proxy-base.js +23 -8
- package/lib/common/commands/proxy/proxy-clear.js +16 -4
- package/lib/common/commands/proxy/proxy-get.js +15 -3
- package/lib/common/commands/proxy/proxy-set.js +101 -87
- package/lib/common/common-lib.js +1 -0
- package/lib/common/constants.js +22 -11
- package/lib/common/decorators.js +70 -10
- package/lib/common/dispatchers.js +106 -80
- package/lib/common/errors.js +116 -91
- package/lib/common/file-system.js +141 -108
- package/lib/common/header.js +5 -1
- package/lib/common/helpers.js +267 -152
- package/lib/common/host-info.js +54 -37
- package/lib/common/http-client.js +128 -93
- package/lib/common/logger/appenders/cli-appender.js +6 -1
- package/lib/common/logger/appenders/emit-appender.js +6 -1
- package/lib/common/logger/layouts/cli-layout.js +3 -1
- package/lib/common/logger/logger.js +9 -4
- package/lib/common/messages/messages.js +6 -0
- package/lib/common/mobile/android/android-application-manager.js +162 -122
- package/lib/common/mobile/android/android-debug-bridge-result-handler.js +2 -1
- package/lib/common/mobile/android/android-debug-bridge.js +118 -87
- package/lib/common/mobile/android/android-device-file-system.js +135 -98
- package/lib/common/mobile/android/android-device-hash-service.js +78 -50
- package/lib/common/mobile/android/android-device.js +93 -68
- package/lib/common/mobile/android/android-emulator-services.js +131 -105
- package/lib/common/mobile/android/android-ini-file-parser.js +9 -0
- package/lib/common/mobile/android/android-log-filter.js +5 -1
- package/lib/common/mobile/android/android-virtual-device-service.js +123 -76
- package/lib/common/mobile/android/device-android-debug-bridge.js +30 -13
- package/lib/common/mobile/android/genymotion/genymotion-service.js +123 -91
- package/lib/common/mobile/android/genymotion/virtualbox-service.js +92 -64
- package/lib/common/mobile/android/logcat-helper.js +140 -108
- package/lib/common/mobile/application-manager-base.js +113 -84
- package/lib/common/mobile/device-emitter.js +4 -0
- package/lib/common/mobile/device-log-emitter.js +1 -0
- package/lib/common/mobile/device-log-provider-base.js +19 -7
- package/lib/common/mobile/device-log-provider.js +23 -0
- package/lib/common/mobile/device-platforms-constants.js +1 -0
- package/lib/common/mobile/emulator-helper.js +3 -0
- package/lib/common/mobile/ios/device/ios-application-manager.js +111 -79
- package/lib/common/mobile/ios/device/ios-device-file-system.js +106 -78
- package/lib/common/mobile/ios/device/ios-device-operations.js +146 -105
- package/lib/common/mobile/ios/device/ios-device.js +40 -20
- package/lib/common/mobile/ios/ios-device-base.js +82 -58
- package/lib/common/mobile/ios/ios-device-product-name-mapper.js +2 -0
- package/lib/common/mobile/ios/ios-log-filter.js +1 -0
- package/lib/common/mobile/ios/simulator/ios-emulator-services.js +96 -63
- package/lib/common/mobile/ios/simulator/ios-sim-resolver.js +2 -1
- package/lib/common/mobile/ios/simulator/ios-simulator-application-manager.js +95 -60
- package/lib/common/mobile/ios/simulator/ios-simulator-device.js +48 -27
- package/lib/common/mobile/ios/simulator/ios-simulator-file-system.js +63 -37
- package/lib/common/mobile/ios/simulator/ios-simulator-log-provider.js +36 -24
- package/lib/common/mobile/local-to-device-path-data-factory.js +1 -0
- package/lib/common/mobile/log-filter.js +2 -0
- package/lib/common/mobile/logging-levels.js +1 -0
- package/lib/common/mobile/mobile-core/android-device-discovery.js +64 -43
- package/lib/common/mobile/mobile-core/android-emulator-discovery.js +35 -21
- package/lib/common/mobile/mobile-core/android-process-service.js +214 -143
- package/lib/common/mobile/mobile-core/device-discovery.js +14 -2
- package/lib/common/mobile/mobile-core/devices-service.js +505 -386
- package/lib/common/mobile/mobile-core/ios-device-discovery.js +37 -24
- package/lib/common/mobile/mobile-core/ios-simulator-discovery.js +65 -47
- package/lib/common/mobile/mobile-helper.js +27 -15
- package/lib/common/mobile/wp8/wp8-emulator-services.js +53 -25
- package/lib/common/opener.js +3 -2
- package/lib/common/os-info.js +1 -0
- package/lib/common/plist-parser.js +1 -0
- package/lib/common/project-helper.js +1 -0
- package/lib/common/prompter.js +114 -91
- package/lib/common/queue.js +21 -9
- package/lib/common/resource-loader.js +1 -0
- package/lib/common/services/auto-completion-service.js +65 -40
- package/lib/common/services/cancellation.js +29 -17
- package/lib/common/services/commands-service.js +180 -146
- package/lib/common/services/help-service.js +166 -133
- package/lib/common/services/hooks-service.js +121 -93
- package/lib/common/services/ios-notification-service.js +35 -21
- package/lib/common/services/json-file-settings-service.js +77 -52
- package/lib/common/services/lock-service.js +58 -35
- package/lib/common/services/message-contract-generator.js +47 -35
- package/lib/common/services/messages-service.js +1 -0
- package/lib/common/services/micro-templating-service.js +21 -4
- package/lib/common/services/net-service.js +110 -90
- package/lib/common/services/project-files-manager.js +28 -10
- package/lib/common/services/project-files-provider-base.js +1 -0
- package/lib/common/services/proxy-service.js +25 -13
- package/lib/common/services/qr.js +25 -13
- package/lib/common/services/settings-service.js +2 -1
- package/lib/common/services/xcode-select-service.js +36 -20
- package/lib/common/utils.js +3 -2
- package/lib/common/validators/project-name-validator.js +2 -1
- package/lib/common/validators/validation-result.js +2 -1
- package/lib/common/verify-node-version.js +11 -3
- package/lib/common/yok.js +69 -35
- package/lib/config.js +72 -36
- package/lib/constants-provider.js +1 -0
- package/lib/constants.js +78 -25
- package/lib/controllers/build-controller.js +100 -82
- package/lib/controllers/debug-controller.js +133 -107
- package/lib/controllers/deploy-controller.js +24 -15
- package/lib/controllers/migrate-controller.js +884 -723
- package/lib/controllers/platform-controller.js +94 -71
- package/lib/controllers/prepare-controller.js +274 -232
- package/lib/controllers/run-controller.js +427 -397
- package/lib/controllers/update-controller-base.js +30 -16
- package/lib/controllers/update-controller.js +130 -94
- package/lib/data/build-data.js +1 -0
- package/lib/data/controller-data-base.js +1 -0
- package/lib/data/debug-data.js +1 -0
- package/lib/data/platform-data.js +1 -0
- package/lib/data/prepare-data.js +2 -4
- package/lib/data/run-data.js +1 -0
- package/lib/definitions/ios.d.ts +4 -2
- package/lib/definitions/project.d.ts +26 -0
- package/lib/detached-processes/cleanup-js-subprocess.js +20 -5
- package/lib/detached-processes/cleanup-process.js +43 -30
- package/lib/detached-processes/file-log-service.js +2 -1
- package/lib/device-path-provider.js +35 -23
- package/lib/device-sockets/ios/app-debug-socket-proxy-factory.js +171 -149
- package/lib/device-sockets/ios/notification.js +4 -1
- package/lib/device-sockets/ios/socket-request-executor.js +42 -24
- package/lib/helpers/android-bundle-validator-helper.js +3 -2
- package/lib/helpers/deploy-command-helper.js +50 -44
- package/lib/helpers/key-command-helper.js +17 -6
- package/lib/helpers/livesync-command-helper.js +155 -137
- package/lib/helpers/network-connectivity-validator.js +18 -6
- package/lib/helpers/options-track-helper.js +19 -7
- package/lib/helpers/package-path-helper.js +1 -0
- package/lib/helpers/platform-command-helper.js +127 -101
- package/lib/helpers/version-validator-helper.js +1 -0
- package/lib/key-commands/bootstrap.js +3 -2
- package/lib/key-commands/index.js +205 -154
- package/lib/nativescript-cli-lib-bootstrap.js +4 -0
- package/lib/nativescript-cli-lib.js +1 -0
- package/lib/nativescript-cli.js +24 -6
- package/lib/node/pbxproj-dom-xcode.js +1 -0
- package/lib/node/xcode.js +1 -0
- package/lib/node-package-manager.js +114 -81
- package/lib/options.js +156 -122
- package/lib/package-installation-manager.js +172 -130
- package/lib/package-manager.js +88 -63
- package/lib/platform-command-param.js +16 -4
- package/lib/pnpm-package-manager.js +81 -59
- package/lib/project-data.js +13 -1
- package/lib/providers/project-files-provider.js +2 -1
- package/lib/resolvers/livesync-service-resolver.js +1 -0
- package/lib/services/analytics/analytics-broker-process.js +32 -19
- package/lib/services/analytics/analytics-broker.js +31 -17
- package/lib/services/analytics/analytics-service.js +210 -170
- package/lib/services/analytics/google-analytics-provider.js +59 -43
- package/lib/services/analytics-settings-service.js +37 -15
- package/lib/services/android/android-bundle-tool-service.js +61 -43
- package/lib/services/android/gradle-build-args-service.js +23 -9
- package/lib/services/android/gradle-build-service.js +36 -22
- package/lib/services/android/gradle-command-service.js +36 -22
- package/lib/services/android-device-debug-service.js +123 -90
- package/lib/services/android-plugin-build-service.js +260 -205
- package/lib/services/android-project-service.js +241 -129
- package/lib/services/android-resources-migration-service.js +71 -51
- package/lib/services/apple-portal/apple-portal-application-service.js +64 -46
- package/lib/services/apple-portal/apple-portal-cookie-service.js +1 -0
- package/lib/services/apple-portal/apple-portal-session-service.js +218 -197
- package/lib/services/apple-portal/srp/srp-wrapper.js +61 -43
- package/lib/services/assets-generation/assets-generation-service.js +128 -103
- package/lib/services/build-artifacts-service.js +22 -10
- package/lib/services/build-data-service.js +1 -0
- package/lib/services/build-info-file-service.js +36 -20
- package/lib/services/cleanup-service.js +81 -48
- package/lib/services/cocoapods-platform-manager.js +9 -0
- package/lib/services/cocoapods-service.js +153 -112
- package/lib/services/debug-data-service.js +1 -0
- package/lib/services/debug-service-base.js +7 -0
- package/lib/services/device/device-install-app-service.js +72 -54
- package/lib/services/doctor-service.js +135 -101
- package/lib/services/extensibility-service.js +108 -81
- package/lib/services/files-hash-service.js +44 -26
- package/lib/services/hmr-status-service.js +3 -1
- package/lib/services/info-service.js +1 -0
- package/lib/services/initialize-service.js +54 -37
- package/lib/services/ios/export-options-plist-service.js +55 -38
- package/lib/services/ios/ios-signing-service.js +191 -168
- package/lib/services/ios/spm-service.js +73 -43
- package/lib/services/ios/xcodebuild-args-service.js +103 -77
- package/lib/services/ios/xcodebuild-command-service.js +26 -14
- package/lib/services/ios/xcodebuild-service.js +72 -52
- package/lib/services/ios-debugger-port-service.js +38 -24
- package/lib/services/ios-device-debug-service.js +103 -75
- package/lib/services/ios-entitlements-service.js +43 -31
- package/lib/services/ios-extensions-service.js +30 -18
- package/lib/services/ios-log-filter.js +20 -0
- package/lib/services/ios-native-target-service.js +6 -4
- package/lib/services/ios-project-service.js +605 -437
- package/lib/services/ios-provision-service.js +132 -108
- package/lib/services/ios-watch-app-service.js +33 -21
- package/lib/services/ip-service.js +55 -38
- package/lib/services/itmstransporter-service.js +153 -129
- package/lib/services/karma-execution.js +2 -0
- package/lib/services/livesync/android-device-livesync-service-base.js +49 -31
- package/lib/services/livesync/android-device-livesync-service.js +151 -120
- package/lib/services/livesync/android-device-livesync-sockets-service.js +155 -121
- package/lib/services/livesync/android-livesync-service.js +36 -14
- package/lib/services/livesync/android-livesync-tool.js +117 -90
- package/lib/services/livesync/device-livesync-service-base.js +30 -15
- package/lib/services/livesync/ios-device-livesync-service.js +150 -114
- package/lib/services/livesync/ios-livesync-service.js +60 -42
- package/lib/services/livesync/livesync-socket.js +1 -0
- package/lib/services/livesync/platform-livesync-service-base.js +124 -94
- package/lib/services/livesync-process-data-service.js +1 -0
- package/lib/services/log-parser-service.js +2 -1
- package/lib/services/log-source-map-service.js +56 -30
- package/lib/services/marking-mode-service.js +33 -17
- package/lib/services/metadata-filtering-service.js +1 -0
- package/lib/services/npm-config-service.js +5 -1
- package/lib/services/pacote-service.js +73 -51
- package/lib/services/performance-service.js +4 -2
- package/lib/services/platform/add-platform-service.js +119 -51
- package/lib/services/platform/platform-validation-service.js +34 -22
- package/lib/services/platform/prepare-native-platform-service.js +65 -49
- package/lib/services/platform-environment-requirements.js +43 -27
- package/lib/services/platform-project-service-base.js +1 -0
- package/lib/services/platforms-data-service.js +1 -0
- package/lib/services/plugins-service.js +168 -125
- package/lib/services/prepare-data-service.js +1 -0
- package/lib/services/project-backup-service.js +5 -1
- package/lib/services/project-changes-service.js +152 -124
- package/lib/services/project-cleanup-service.js +79 -64
- package/lib/services/project-config-service.js +111 -73
- package/lib/services/project-data-service.js +154 -108
- package/lib/services/project-name-service.js +44 -28
- package/lib/services/project-service.js +113 -84
- package/lib/services/project-templates-service.js +68 -52
- package/lib/services/qr-code-terminal-service.js +1 -0
- package/lib/services/require-service.js +1 -0
- package/lib/services/start-service.js +60 -41
- package/lib/services/temp-service.js +22 -8
- package/lib/services/terminal-spinner-service.js +28 -15
- package/lib/services/test-execution-service.js +79 -59
- package/lib/services/test-initialization-service.js +6 -2
- package/lib/services/timeline-profiler-service.js +2 -1
- package/lib/services/user-settings-service.js +1 -0
- package/lib/services/versions-service.js +140 -119
- package/lib/services/watch-ignore-list-service.js +1 -0
- package/lib/services/webpack/webpack-compiler-service.js +279 -215
- package/lib/services/xcconfig-service.js +21 -8
- package/lib/services/xcproj-service.js +1 -0
- package/lib/shared-event-bus.js +6 -0
- package/lib/sys-info.js +63 -45
- package/lib/tools/config-manipulation/config-transformer.js +21 -0
- package/lib/tools/node-modules/node-modules-builder.js +28 -16
- package/lib/tools/node-modules/node-modules-dependencies-builder.js +6 -0
- package/lib/yarn-package-manager.js +79 -59
- package/lib/yarn2-package-manager.js +82 -60
- package/node_modules/@npmcli/move-file/LICENSE.md +22 -0
- package/node_modules/@npmcli/move-file/README.md +69 -0
- package/node_modules/@npmcli/move-file/lib/index.js +185 -0
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/LICENSE +21 -0
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/bin/cmd.js +68 -0
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/index.js +31 -0
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/find-made.js +29 -0
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/mkdirp-manual.js +64 -0
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/mkdirp-native.js +39 -0
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/opts-arg.js +23 -0
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/path-arg.js +29 -0
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/use-native.js +10 -0
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/package.json +44 -0
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/readme.markdown +266 -0
- package/node_modules/@npmcli/move-file/package.json +47 -0
- package/node_modules/balanced-match/.github/FUNDING.yml +2 -0
- package/node_modules/balanced-match/LICENSE.md +21 -0
- package/node_modules/balanced-match/README.md +97 -0
- package/node_modules/balanced-match/index.js +62 -0
- package/node_modules/balanced-match/package.json +48 -0
- package/node_modules/concat-map/.travis.yml +4 -0
- package/node_modules/concat-map/LICENSE +18 -0
- package/node_modules/concat-map/README.markdown +62 -0
- package/node_modules/concat-map/example/map.js +6 -0
- package/node_modules/concat-map/index.js +13 -0
- package/node_modules/concat-map/package.json +43 -0
- package/node_modules/concat-map/test/map.js +39 -0
- package/node_modules/fs.realpath/LICENSE +43 -0
- package/node_modules/fs.realpath/README.md +33 -0
- package/node_modules/fs.realpath/index.js +66 -0
- package/node_modules/fs.realpath/old.js +303 -0
- package/node_modules/fs.realpath/package.json +26 -0
- package/node_modules/inflight/LICENSE +15 -0
- package/node_modules/inflight/README.md +37 -0
- package/node_modules/inflight/inflight.js +54 -0
- package/node_modules/inflight/package.json +29 -0
- package/node_modules/inherits/LICENSE +16 -0
- package/node_modules/inherits/README.md +42 -0
- package/node_modules/inherits/inherits.js +9 -0
- package/node_modules/inherits/inherits_browser.js +27 -0
- package/node_modules/inherits/package.json +29 -0
- package/node_modules/once/LICENSE +15 -0
- package/node_modules/once/README.md +79 -0
- package/node_modules/once/once.js +42 -0
- package/node_modules/once/package.json +33 -0
- package/node_modules/path-is-absolute/index.js +20 -0
- package/node_modules/path-is-absolute/license +21 -0
- package/node_modules/path-is-absolute/package.json +43 -0
- package/node_modules/path-is-absolute/readme.md +59 -0
- package/node_modules/rimraf/LICENSE +15 -0
- package/node_modules/rimraf/README.md +101 -0
- package/node_modules/rimraf/bin.js +68 -0
- package/node_modules/rimraf/node_modules/brace-expansion/LICENSE +21 -0
- package/node_modules/rimraf/node_modules/brace-expansion/README.md +129 -0
- package/node_modules/rimraf/node_modules/brace-expansion/index.js +201 -0
- package/node_modules/rimraf/node_modules/brace-expansion/package.json +47 -0
- package/node_modules/rimraf/node_modules/glob/LICENSE +21 -0
- package/node_modules/rimraf/node_modules/glob/README.md +378 -0
- package/node_modules/rimraf/node_modules/glob/common.js +238 -0
- package/node_modules/rimraf/node_modules/glob/glob.js +790 -0
- package/node_modules/rimraf/node_modules/glob/package.json +55 -0
- package/node_modules/rimraf/node_modules/glob/sync.js +486 -0
- package/node_modules/rimraf/node_modules/minimatch/LICENSE +15 -0
- package/node_modules/rimraf/node_modules/minimatch/README.md +230 -0
- package/node_modules/rimraf/node_modules/minimatch/minimatch.js +947 -0
- package/node_modules/rimraf/node_modules/minimatch/package.json +33 -0
- package/node_modules/rimraf/package.json +32 -0
- package/node_modules/rimraf/rimraf.js +360 -0
- package/node_modules/stringify-package/LICENSE +13 -0
- package/node_modules/stringify-package/README.md +55 -0
- package/node_modules/stringify-package/index.js +18 -0
- package/node_modules/stringify-package/package.json +38 -0
- package/node_modules/wrappy/LICENSE +15 -0
- package/node_modules/wrappy/README.md +36 -0
- package/node_modules/wrappy/package.json +29 -0
- package/node_modules/wrappy/wrappy.js +33 -0
- package/package.json +79 -64
|
@@ -5,6 +5,15 @@ 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
|
+
};
|
|
8
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
18
|
exports.RunController = void 0;
|
|
10
19
|
const constants_1 = require("../common/constants");
|
|
@@ -39,213 +48,233 @@ class RunController extends events_1.EventEmitter {
|
|
|
39
48
|
this.$projectDataService = $projectDataService;
|
|
40
49
|
this.prepareReadyEventHandler = null;
|
|
41
50
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
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
|
+
}
|
|
65
76
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
this.$prepareController.on(constants_2.PREPARE_READY_EVENT_NAME, this.prepareReadyEventHandler);
|
|
73
|
-
}
|
|
74
|
-
await this.syncInitialDataOnDevices(projectData, liveSyncInfo, deviceDescriptorsForInitialSync);
|
|
75
|
-
this.attachDeviceLostHandler();
|
|
76
|
-
}
|
|
77
|
-
async stop(data) {
|
|
78
|
-
const { projectDir, deviceIdentifiers, stopOptions } = data;
|
|
79
|
-
const liveSyncProcessInfo = this.$liveSyncProcessDataService.getPersistedData(projectDir);
|
|
80
|
-
if (liveSyncProcessInfo && !liveSyncProcessInfo.isStopped) {
|
|
81
|
-
const shouldAwaitPendingOperation = !stopOptions || stopOptions.shouldAwaitAllActions;
|
|
82
|
-
const deviceIdentifiersToRemove = deviceIdentifiers && deviceIdentifiers.length
|
|
83
|
-
? deviceIdentifiers
|
|
84
|
-
: _.map(liveSyncProcessInfo.deviceDescriptors, (d) => d.identifier);
|
|
85
|
-
const removedDeviceIdentifiers = _.remove(liveSyncProcessInfo.deviceDescriptors, (descriptor) => _.includes(deviceIdentifiersToRemove, descriptor.identifier)).map((descriptor) => descriptor.identifier);
|
|
86
|
-
for (let i = 0; i < liveSyncProcessInfo.platforms.length; i++) {
|
|
87
|
-
const platform = liveSyncProcessInfo.platforms[i];
|
|
88
|
-
const devices = this.$devicesService.getDevicesForPlatform(platform);
|
|
89
|
-
if (!devices || !devices.length) {
|
|
90
|
-
await this.$prepareController.stopWatchers(projectDir, platform);
|
|
91
|
-
}
|
|
77
|
+
else {
|
|
78
|
+
yield this.syncChangedDataOnDevices(data, projectData, liveSyncInfo);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
this.prepareReadyEventHandler = handler.bind(this);
|
|
82
|
+
this.$prepareController.on(constants_2.PREPARE_READY_EVENT_NAME, this.prepareReadyEventHandler);
|
|
92
83
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
84
|
+
yield this.syncInitialDataOnDevices(projectData, liveSyncInfo, deviceDescriptorsForInitialSync);
|
|
85
|
+
this.attachDeviceLostHandler();
|
|
86
|
+
});
|
|
87
|
+
}
|
|
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
|
+
}
|
|
102
107
|
}
|
|
103
|
-
|
|
104
|
-
if (
|
|
105
|
-
|
|
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
|
+
});
|
|
106
134
|
}
|
|
107
|
-
liveSyncProcessInfo.
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
this.prepareReadyEventHandler = null;
|
|
135
|
+
else if (liveSyncProcessInfo.currentSyncAction &&
|
|
136
|
+
shouldAwaitPendingOperation) {
|
|
137
|
+
yield liveSyncProcessInfo.currentSyncAction;
|
|
111
138
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
else if (liveSyncProcessInfo.currentSyncAction &&
|
|
120
|
-
shouldAwaitPendingOperation) {
|
|
121
|
-
await liveSyncProcessInfo.currentSyncAction;
|
|
122
|
-
}
|
|
123
|
-
_.each(removedDeviceIdentifiers, (deviceIdentifier) => {
|
|
124
|
-
this.emitCore(constants_2.RunOnDeviceEvents.runOnDeviceStopped, {
|
|
125
|
-
projectDir,
|
|
126
|
-
deviceIdentifier,
|
|
127
|
-
keepProcessAlive: stopOptions === null || stopOptions === void 0 ? void 0 : stopOptions.keepProcessAlive,
|
|
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
|
+
});
|
|
128
146
|
});
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
147
|
+
if (stopOptions === null || stopOptions === void 0 ? void 0 : stopOptions.keepProcessAlive) {
|
|
148
|
+
this.removeAllListeners(constants_2.RunOnDeviceEvents.runOnDeviceStopped);
|
|
149
|
+
}
|
|
132
150
|
}
|
|
133
|
-
}
|
|
151
|
+
});
|
|
134
152
|
}
|
|
135
153
|
getDeviceDescriptors(data) {
|
|
136
154
|
return this.$liveSyncProcessDataService.getDeviceDescriptors(data.projectDir);
|
|
137
155
|
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
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;
|
|
149
170
|
});
|
|
150
|
-
return result;
|
|
151
171
|
}
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
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;
|
|
159
187
|
});
|
|
160
|
-
debugOptions.start = !debugOptions.debugBrk;
|
|
161
|
-
debugOptions.forceDebuggerAttachedEvent = refreshInfo.didRestart;
|
|
162
|
-
await this.$debugController.enableDebuggingCoreWithoutWaitingCurrentAction(projectData.projectDir, deviceDescriptor.identifier, debugOptions);
|
|
163
|
-
return refreshInfo;
|
|
164
188
|
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
catch (err) {
|
|
195
|
-
this.$logger.info(`Error while trying to start application ${applicationIdentifier} on device ${liveSyncResultInfo.deviceAppData.device.deviceInfo.identifier}. Error is: ${err.message || err}`);
|
|
196
|
-
const msg = `Unable to start application ${applicationIdentifier} on device ${liveSyncResultInfo.deviceAppData.device.deviceInfo.identifier}. Try starting it manually.`;
|
|
197
|
-
this.$logger.warn(msg);
|
|
198
|
-
const device = liveSyncResultInfo.deviceAppData.device;
|
|
199
|
-
const deviceIdentifier = device.deviceInfo.identifier;
|
|
200
|
-
if (!settings || !settings.shouldSkipEmitLiveSyncNotification) {
|
|
201
|
-
this.emitCore(constants_2.RunOnDeviceEvents.runOnDeviceNotification, {
|
|
202
|
-
projectDir: projectData.projectDir,
|
|
203
|
-
deviceIdentifier: device.deviceInfo.identifier,
|
|
204
|
-
applicationIdentifier: projectData.projectIdentifiers[device.deviceInfo.platform.toLowerCase()],
|
|
205
|
-
notification: msg,
|
|
206
|
-
});
|
|
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
|
+
}
|
|
207
218
|
}
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
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
|
+
}
|
|
220
246
|
}
|
|
221
|
-
|
|
222
|
-
|
|
247
|
+
return result;
|
|
248
|
+
});
|
|
223
249
|
}
|
|
224
250
|
getDeviceDescriptorsForInitialSync(projectDir, deviceDescriptors) {
|
|
225
251
|
const currentRunData = this.$liveSyncProcessDataService.getPersistedData(projectDir);
|
|
226
252
|
const isAlreadyLiveSyncing = currentRunData && !currentRunData.isStopped;
|
|
253
|
+
// Prevent cases where liveSync is called consecutive times with the same device, for example [ A, B, C ] and then [ A, B, D ] - we want to execute initialSync only for D.
|
|
227
254
|
const deviceDescriptorsForInitialSync = isAlreadyLiveSyncing
|
|
228
255
|
? _.differenceBy(deviceDescriptors, currentRunData.deviceDescriptors, "identifier")
|
|
229
256
|
: deviceDescriptors;
|
|
230
257
|
return deviceDescriptorsForInitialSync;
|
|
231
258
|
}
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
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
269
|
}
|
|
241
270
|
attachDeviceLostHandler() {
|
|
242
|
-
this.$devicesService.on(constants_1.DeviceDiscoveryEventNames.DEVICE_LOST,
|
|
271
|
+
this.$devicesService.on(constants_1.DeviceDiscoveryEventNames.DEVICE_LOST, (device) => __awaiter(this, void 0, void 0, function* () {
|
|
243
272
|
this.$logger.trace(`Received ${constants_1.DeviceDiscoveryEventNames.DEVICE_LOST} event in LiveSync service for ${device.deviceInfo.identifier}. Will stop LiveSync operation for this device.`);
|
|
244
273
|
for (const projectDir in this.$liveSyncProcessDataService.getAllPersistedData()) {
|
|
245
274
|
try {
|
|
246
275
|
const deviceDescriptors = this.getDeviceDescriptors({ projectDir });
|
|
247
276
|
if (_.find(deviceDescriptors, (d) => d.identifier === device.deviceInfo.identifier)) {
|
|
248
|
-
|
|
277
|
+
yield this.stop({
|
|
249
278
|
projectDir,
|
|
250
279
|
deviceIdentifiers: [device.deviceInfo.identifier],
|
|
251
280
|
});
|
|
@@ -255,258 +284,259 @@ class RunController extends events_1.EventEmitter {
|
|
|
255
284
|
this.$logger.warn(`Unable to stop LiveSync operation for ${device.deviceInfo.identifier}.`, err);
|
|
256
285
|
}
|
|
257
286
|
}
|
|
258
|
-
});
|
|
287
|
+
}));
|
|
259
288
|
}
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
const
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
},
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
.isEmulator === device.isEmulator)) {
|
|
284
|
-
packageFilePath =
|
|
285
|
-
rebuiltInformation[platformData.platformNameLowerCase]
|
|
286
|
-
.packageFilePath;
|
|
287
|
-
await this.$deviceInstallAppService.installOnDevice(device, buildData, packageFilePath);
|
|
288
|
-
}
|
|
289
|
-
else {
|
|
290
|
-
const shouldBuild = prepareResultData.hasNativeChanges ||
|
|
291
|
-
buildData.nativePrepare.forceRebuildNativeApp ||
|
|
292
|
-
(await this.$buildController.shouldBuild(buildData));
|
|
293
|
-
if (shouldBuild) {
|
|
294
|
-
packageFilePath = await deviceDescriptor.buildAction();
|
|
295
|
-
rebuiltInformation[platformData.platformNameLowerCase] = {
|
|
296
|
-
isEmulator: device.isEmulator,
|
|
297
|
-
platform: platformData.platformNameLowerCase,
|
|
298
|
-
packageFilePath,
|
|
299
|
-
};
|
|
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);
|
|
300
312
|
}
|
|
301
313
|
else {
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
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);
|
|
307
333
|
}
|
|
308
|
-
|
|
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
|
+
});
|
|
351
|
+
}
|
|
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
|
+
});
|
|
309
366
|
}
|
|
310
|
-
const platformLiveSyncService = this.$liveSyncServiceResolver.resolveLiveSyncService(platformData.platformNameLowerCase);
|
|
311
|
-
const { force, useHotModuleReload, skipWatcher } = liveSyncInfo;
|
|
312
|
-
const liveSyncResultInfo = await platformLiveSyncService.fullSync({
|
|
313
|
-
force,
|
|
314
|
-
useHotModuleReload,
|
|
315
|
-
projectData,
|
|
316
|
-
device,
|
|
317
|
-
watch: !skipWatcher,
|
|
318
|
-
liveSyncDeviceData: deviceDescriptor,
|
|
319
|
-
});
|
|
320
|
-
await this.refreshApplication(projectData, liveSyncResultInfo, null, deviceDescriptor);
|
|
321
|
-
this.$logger.info(`Successfully synced application ${liveSyncResultInfo.deviceAppData.appIdentifier} on device ${liveSyncResultInfo.deviceAppData.device.deviceInfo.identifier}.`);
|
|
322
|
-
this.emitCore(constants_2.RunOnDeviceEvents.runOnDeviceStarted, {
|
|
323
|
-
projectDir: projectData.projectDir,
|
|
324
|
-
deviceIdentifier: device.deviceInfo.identifier,
|
|
325
|
-
applicationIdentifier: projectData.projectIdentifiers[device.deviceInfo.platform.toLowerCase()],
|
|
326
|
-
});
|
|
327
|
-
}
|
|
328
|
-
catch (err) {
|
|
329
|
-
this.$logger.warn(`Unable to apply changes on device: ${device.deviceInfo.identifier}. Error is: ${err.message}.`);
|
|
330
|
-
this.$logger.trace(err);
|
|
331
|
-
this.emitCore(constants_2.RunOnDeviceEvents.runOnDeviceError, {
|
|
332
|
-
projectDir: projectData.projectDir,
|
|
333
|
-
deviceIdentifier: device.deviceInfo.identifier,
|
|
334
|
-
applicationIdentifier: projectData.projectIdentifiers[device.deviceInfo.platform.toLowerCase()],
|
|
335
|
-
error: err,
|
|
336
|
-
});
|
|
337
|
-
await this.stop({
|
|
338
|
-
projectDir: projectData.projectDir,
|
|
339
|
-
deviceIdentifiers: [device.deviceInfo.identifier],
|
|
340
|
-
stopOptions: { shouldAwaitAllActions: false },
|
|
341
|
-
});
|
|
342
|
-
}
|
|
343
|
-
};
|
|
344
|
-
await this.addActionToChain(projectData.projectDir, () => this.$devicesService.execute(deviceAction, (device) => _.some(deviceDescriptors, (deviceDescriptor) => deviceDescriptor.identifier === device.deviceInfo.identifier)));
|
|
345
|
-
}
|
|
346
|
-
async syncChangedDataOnDevices(data, projectData, liveSyncInfo) {
|
|
347
|
-
const successfullySyncedMessageFormat = `Successfully synced application %s on device %s.`;
|
|
348
|
-
const rebuiltInformation = {};
|
|
349
|
-
const deviceAction = async (device) => {
|
|
350
|
-
var _a, _b;
|
|
351
|
-
const deviceDescriptors = this.$liveSyncProcessDataService.getDeviceDescriptors(projectData.projectDir);
|
|
352
|
-
const deviceDescriptor = _.find(deviceDescriptors, (dd) => dd.identifier === device.deviceInfo.identifier);
|
|
353
|
-
const platformData = this.$platformsDataService.getPlatformData(data.platform, projectData);
|
|
354
|
-
const prepareData = this.$prepareDataService.getPrepareData(liveSyncInfo.projectDir, device.deviceInfo.platform, {
|
|
355
|
-
...liveSyncInfo,
|
|
356
|
-
...deviceDescriptor.buildData,
|
|
357
|
-
nativePrepare: {
|
|
358
|
-
skipNativePrepare: !!deviceDescriptor.skipNativePrepare,
|
|
359
|
-
},
|
|
360
|
-
watch: !liveSyncInfo.skipWatcher,
|
|
361
367
|
});
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
const
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
}
|
|
395
|
-
await this.$deviceInstallAppService.installOnDevice(device, deviceDescriptor.buildData, rebuiltInformation[platformData.platformNameLowerCase]
|
|
396
|
-
.packageFilePath);
|
|
397
|
-
await platformLiveSyncService.syncAfterInstall(device, watchInfo);
|
|
398
|
-
await this.refreshApplication(projectData, {
|
|
399
|
-
deviceAppData,
|
|
400
|
-
modifiedFilesData: [],
|
|
401
|
-
isFullSync: false,
|
|
368
|
+
yield this.addActionToChain(projectData.projectDir, () => this.$devicesService.execute(deviceAction, (device) => _.some(deviceDescriptors, (deviceDescriptor) => deviceDescriptor.identifier === device.deviceInfo.identifier)));
|
|
369
|
+
});
|
|
370
|
+
}
|
|
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,
|
|
402
400
|
useHotModuleReload: liveSyncInfo.useHotModuleReload,
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
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));
|
|
412
429
|
}
|
|
413
|
-
|
|
414
|
-
const
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
|
|
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", {
|
|
422
465
|
liveSyncResultInfo,
|
|
423
466
|
filesToSync,
|
|
424
467
|
allAppFiles,
|
|
425
|
-
isInHMRMode,
|
|
426
468
|
filesChangedEvent: data,
|
|
427
|
-
|
|
469
|
+
isInHMRMode,
|
|
470
|
+
});
|
|
471
|
+
this.$logger.info(util.format(successfullySyncedMessageFormat, deviceAppData.appIdentifier, device.deviceInfo.identifier));
|
|
428
472
|
});
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
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}`);
|
|
436
482
|
}
|
|
437
483
|
}
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
allAppFiles,
|
|
442
|
-
filesChangedEvent: data,
|
|
443
|
-
isInHMRMode,
|
|
444
|
-
});
|
|
445
|
-
this.$logger.info(util.format(successfullySyncedMessageFormat, deviceAppData.appIdentifier, device.deviceInfo.identifier));
|
|
446
|
-
};
|
|
447
|
-
if (liveSyncInfo.useHotModuleReload) {
|
|
448
|
-
try {
|
|
449
|
-
this.$logger.trace("Try executing watch action without any preparation of files.");
|
|
450
|
-
await watchAction();
|
|
451
|
-
this.$logger.trace("Successfully executed watch action without any preparation of files.");
|
|
452
|
-
return;
|
|
453
|
-
}
|
|
454
|
-
catch (err) {
|
|
455
|
-
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}`);
|
|
456
|
-
}
|
|
484
|
+
yield this.$deviceInstallAppService.installOnDeviceIfNeeded(device, deviceDescriptor.buildData);
|
|
485
|
+
watchInfo.connectTimeout = null;
|
|
486
|
+
yield watchAction();
|
|
457
487
|
}
|
|
458
|
-
await this.$deviceInstallAppService.installOnDeviceIfNeeded(device, deviceDescriptor.buildData);
|
|
459
|
-
watchInfo.connectTimeout = null;
|
|
460
|
-
await watchAction();
|
|
461
488
|
}
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
});
|
|
476
|
-
}
|
|
477
|
-
};
|
|
478
|
-
await this.addActionToChain(projectData.projectDir, () => this.$devicesService.execute(deviceAction, (device) => {
|
|
479
|
-
const liveSyncProcessInfo = this.$liveSyncProcessDataService.getPersistedData(projectData.projectDir);
|
|
480
|
-
return (data.platform.toLowerCase() ===
|
|
481
|
-
device.deviceInfo.platform.toLowerCase() &&
|
|
482
|
-
liveSyncProcessInfo &&
|
|
483
|
-
_.some(liveSyncProcessInfo.deviceDescriptors, (deviceDescriptor) => deviceDescriptor.identifier === device.deviceInfo.identifier));
|
|
484
|
-
}));
|
|
485
|
-
}
|
|
486
|
-
async addActionToChain(projectDir, action) {
|
|
487
|
-
const liveSyncInfo = this.$liveSyncProcessDataService.getPersistedData(projectDir);
|
|
488
|
-
if (liveSyncInfo) {
|
|
489
|
-
liveSyncInfo.actionsChain = liveSyncInfo.actionsChain.then(async () => {
|
|
490
|
-
if (!liveSyncInfo.isStopped) {
|
|
491
|
-
liveSyncInfo.currentSyncAction = action();
|
|
492
|
-
const res = await liveSyncInfo.currentSyncAction;
|
|
493
|
-
return res;
|
|
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
|
+
});
|
|
494
502
|
}
|
|
495
503
|
});
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
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
|
+
});
|
|
499
528
|
}
|
|
500
529
|
emitCore(event, data) {
|
|
501
530
|
this.$logger.trace(`Will emit event ${event} with data`, data);
|
|
502
531
|
this.emit(event, data);
|
|
503
532
|
}
|
|
504
533
|
}
|
|
505
|
-
exports.RunController = RunController;
|
|
506
534
|
__decorate([
|
|
507
535
|
(0, decorators_1.performanceLog)()
|
|
508
536
|
], RunController.prototype, "refreshApplicationWithoutDebug", null);
|
|
509
537
|
__decorate([
|
|
510
538
|
(0, decorators_1.cache)()
|
|
511
539
|
], RunController.prototype, "attachDeviceLostHandler", null);
|
|
540
|
+
exports.RunController = RunController;
|
|
512
541
|
yok_1.injector.register("runController", RunController);
|
|
542
|
+
//# sourceMappingURL=run-controller.js.map
|