nativescript 8.9.0-dev.1 → 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/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 +70 -46
- 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 +71 -49
- 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.DevicesService = void 0;
|
|
10
19
|
const assert = require("assert");
|
|
@@ -54,101 +63,111 @@ class DevicesService extends events_1.EventEmitter {
|
|
|
54
63
|
this.$iOSSimulatorDiscovery,
|
|
55
64
|
];
|
|
56
65
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
if (options.deviceId) {
|
|
62
|
-
const device = await this.getDevice(options.deviceId);
|
|
63
|
-
return device;
|
|
64
|
-
}
|
|
65
|
-
const availableDevicesAndEmulators = this.getDeviceInstances().filter((d) => d.deviceInfo.status === constants_2.CONNECTED_STATUS &&
|
|
66
|
-
(!this.platform ||
|
|
67
|
-
d.deviceInfo.platform.toLowerCase() === this.platform.toLowerCase()));
|
|
68
|
-
const selectedDevices = availableDevicesAndEmulators.filter((d) => options.onlyEmulators
|
|
69
|
-
? d.isEmulator
|
|
70
|
-
: options.onlyDevices
|
|
71
|
-
? !d.isEmulator
|
|
72
|
-
: true);
|
|
73
|
-
if (selectedDevices.length > 1) {
|
|
74
|
-
if ((0, helpers_1.isInteractive)()) {
|
|
75
|
-
const choices = selectedDevices.map((e) => `${e.deviceInfo.identifier} - ${e.deviceInfo.displayName}`);
|
|
76
|
-
const selectedDeviceString = await this.$prompter.promptForChoice("Select device for debugging", choices);
|
|
77
|
-
const selectedDevice = _.find(selectedDevices, (d) => `${d.deviceInfo.identifier} - ${d.deviceInfo.displayName}` ===
|
|
78
|
-
selectedDeviceString);
|
|
79
|
-
return selectedDevice;
|
|
66
|
+
pickSingleDevice(options) {
|
|
67
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
68
|
+
if (options.onlyDevices && options.onlyEmulators) {
|
|
69
|
+
this.$errors.fail(constants_1.DebugCommandErrors.UNABLE_TO_USE_FOR_DEVICE_AND_EMULATOR);
|
|
80
70
|
}
|
|
81
|
-
|
|
82
|
-
const
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
71
|
+
if (options.deviceId) {
|
|
72
|
+
const device = yield this.getDevice(options.deviceId);
|
|
73
|
+
return device;
|
|
74
|
+
}
|
|
75
|
+
// Now let's take data for each device:
|
|
76
|
+
const availableDevicesAndEmulators = this.getDeviceInstances().filter((d) => d.deviceInfo.status === constants_2.CONNECTED_STATUS &&
|
|
77
|
+
(!this.platform ||
|
|
78
|
+
d.deviceInfo.platform.toLowerCase() === this.platform.toLowerCase()));
|
|
79
|
+
const selectedDevices = availableDevicesAndEmulators.filter((d) => options.onlyEmulators
|
|
80
|
+
? d.isEmulator
|
|
81
|
+
: options.onlyDevices
|
|
82
|
+
? !d.isEmulator
|
|
83
|
+
: true);
|
|
84
|
+
if (selectedDevices.length > 1) {
|
|
85
|
+
if ((0, helpers_1.isInteractive)()) {
|
|
86
|
+
const choices = selectedDevices.map((e) => `${e.deviceInfo.identifier} - ${e.deviceInfo.displayName}`);
|
|
87
|
+
const selectedDeviceString = yield this.$prompter.promptForChoice("Select device for debugging", choices);
|
|
88
|
+
const selectedDevice = _.find(selectedDevices, (d) => `${d.deviceInfo.identifier} - ${d.deviceInfo.displayName}` ===
|
|
89
|
+
selectedDeviceString);
|
|
90
|
+
return selectedDevice;
|
|
88
91
|
}
|
|
89
92
|
else {
|
|
90
|
-
|
|
91
|
-
|
|
93
|
+
const sortedInstances = _.sortBy(selectedDevices, (e) => e.deviceInfo.version);
|
|
94
|
+
const emulators = sortedInstances.filter((e) => e.isEmulator);
|
|
95
|
+
const devices = sortedInstances.filter((d) => !d.isEmulator);
|
|
96
|
+
let selectedInstance;
|
|
97
|
+
if (options.onlyEmulators || options.onlyDevices) {
|
|
98
|
+
// When --emulator or --forDevice is passed, the instances are already filtered
|
|
99
|
+
// So we are sure we have exactly the type we need and we can safely return the last one (highest OS version).
|
|
100
|
+
selectedInstance = _.last(sortedInstances);
|
|
92
101
|
}
|
|
93
102
|
else {
|
|
94
|
-
|
|
103
|
+
if (emulators.length) {
|
|
104
|
+
selectedInstance = _.last(emulators);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
selectedInstance = _.last(devices);
|
|
108
|
+
}
|
|
95
109
|
}
|
|
110
|
+
this.$logger.warn(`Multiple devices/emulators found. Starting debugger on ${selectedInstance.deviceInfo.identifier}. ` +
|
|
111
|
+
"If you want to debug on specific device/emulator, you can specify it with --device option.");
|
|
112
|
+
return selectedInstance;
|
|
96
113
|
}
|
|
97
|
-
this.$logger.warn(`Multiple devices/emulators found. Starting debugger on ${selectedInstance.deviceInfo.identifier}. ` +
|
|
98
|
-
"If you want to debug on specific device/emulator, you can specify it with --device option.");
|
|
99
|
-
return selectedInstance;
|
|
100
114
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
115
|
+
else if (selectedDevices.length === 1) {
|
|
116
|
+
return _.head(selectedDevices);
|
|
117
|
+
}
|
|
118
|
+
this.$errors.fail(constants_1.DebugCommandErrors.NO_DEVICES_EMULATORS_FOUND_FOR_OPTIONS);
|
|
119
|
+
});
|
|
106
120
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
(
|
|
121
|
+
getEmulatorImages(options) {
|
|
122
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
123
|
+
const result = Object.create(null);
|
|
124
|
+
if (this.$hostInfo.isDarwin &&
|
|
125
|
+
(!options ||
|
|
126
|
+
!options.platform ||
|
|
127
|
+
this.$mobileHelper.isiOSPlatform(options.platform))) {
|
|
128
|
+
result.ios = yield this.$iOSEmulatorServices.getEmulatorImages();
|
|
129
|
+
}
|
|
130
|
+
if (!options ||
|
|
111
131
|
!options.platform ||
|
|
112
|
-
this.$mobileHelper.
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
this.$mobileHelper.isAndroidPlatform(options.platform)) {
|
|
118
|
-
result.android = await this.$androidEmulatorServices.getEmulatorImages();
|
|
119
|
-
}
|
|
120
|
-
return result;
|
|
132
|
+
this.$mobileHelper.isAndroidPlatform(options.platform)) {
|
|
133
|
+
result.android = yield this.$androidEmulatorServices.getEmulatorImages();
|
|
134
|
+
}
|
|
135
|
+
return result;
|
|
136
|
+
});
|
|
121
137
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
138
|
+
startEmulator(options) {
|
|
139
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
140
|
+
if (!options || (!options.imageIdentifier && !options.emulatorIdOrName)) {
|
|
141
|
+
return ["Missing mandatory image identifier or name option."];
|
|
142
|
+
}
|
|
143
|
+
const availableEmulatorsOutput = yield this.getEmulatorImages({
|
|
144
|
+
platform: options.platform,
|
|
145
|
+
});
|
|
146
|
+
const emulators = this.$emulatorHelper.getEmulatorsFromAvailableEmulatorsOutput(availableEmulatorsOutput);
|
|
147
|
+
const errors = this.$emulatorHelper.getErrorsFromAvailableEmulatorsOutput(availableEmulatorsOutput);
|
|
148
|
+
let emulator = null;
|
|
149
|
+
if (options.imageIdentifier) {
|
|
150
|
+
emulator = this.$emulatorHelper.getEmulatorByImageIdentifier(options.imageIdentifier, emulators);
|
|
151
|
+
}
|
|
152
|
+
else if (options.emulatorIdOrName) {
|
|
153
|
+
emulator = this.$emulatorHelper.getEmulatorByIdOrName(options.emulatorIdOrName, emulators);
|
|
154
|
+
}
|
|
155
|
+
if (!emulator) {
|
|
156
|
+
const additionalErrors = errors && errors.length ? errors : [];
|
|
157
|
+
return [
|
|
158
|
+
`Unable to find emulator with provided options: ${options}`,
|
|
159
|
+
...additionalErrors,
|
|
160
|
+
];
|
|
161
|
+
}
|
|
162
|
+
// emulator is already running
|
|
163
|
+
if (emulator.status === constants.RUNNING_EMULATOR_STATUS) {
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
options.emulator = emulator;
|
|
167
|
+
const emulatorService = this.resolveEmulatorServices(emulator.platform);
|
|
168
|
+
const result = yield emulatorService.startEmulator(options);
|
|
169
|
+
return result.errors && result.errors.length ? result.errors : null;
|
|
128
170
|
});
|
|
129
|
-
const emulators = this.$emulatorHelper.getEmulatorsFromAvailableEmulatorsOutput(availableEmulatorsOutput);
|
|
130
|
-
const errors = this.$emulatorHelper.getErrorsFromAvailableEmulatorsOutput(availableEmulatorsOutput);
|
|
131
|
-
let emulator = null;
|
|
132
|
-
if (options.imageIdentifier) {
|
|
133
|
-
emulator = this.$emulatorHelper.getEmulatorByImageIdentifier(options.imageIdentifier, emulators);
|
|
134
|
-
}
|
|
135
|
-
else if (options.emulatorIdOrName) {
|
|
136
|
-
emulator = this.$emulatorHelper.getEmulatorByIdOrName(options.emulatorIdOrName, emulators);
|
|
137
|
-
}
|
|
138
|
-
if (!emulator) {
|
|
139
|
-
const additionalErrors = errors && errors.length ? errors : [];
|
|
140
|
-
return [
|
|
141
|
-
`Unable to find emulator with provided options: ${options}`,
|
|
142
|
-
...additionalErrors,
|
|
143
|
-
];
|
|
144
|
-
}
|
|
145
|
-
if (emulator.status === constants.RUNNING_EMULATOR_STATUS) {
|
|
146
|
-
return null;
|
|
147
|
-
}
|
|
148
|
-
options.emulator = emulator;
|
|
149
|
-
const emulatorService = this.resolveEmulatorServices(emulator.platform);
|
|
150
|
-
const result = await emulatorService.startEmulator(options);
|
|
151
|
-
return result.errors && result.errors.length ? result.errors : null;
|
|
152
171
|
}
|
|
153
172
|
get platform() {
|
|
154
173
|
return this._platform;
|
|
@@ -173,9 +192,11 @@ class DevicesService extends events_1.EventEmitter {
|
|
|
173
192
|
return !!(this.$mobileHelper.isiOSPlatform(device.deviceInfo.platform) &&
|
|
174
193
|
device.isEmulator);
|
|
175
194
|
}
|
|
195
|
+
/* tslint:disable:no-unused-variable */
|
|
176
196
|
setLogLevel(logLevel, deviceIdentifier) {
|
|
177
197
|
this.$deviceLogProvider.setLogLevel(logLevel, deviceIdentifier);
|
|
178
198
|
}
|
|
199
|
+
/* tslint:enable:no-unused-variable */
|
|
179
200
|
isAppInstalledOnDevices(deviceIdentifiers, appId, projectName, projectDir) {
|
|
180
201
|
this.$logger.trace(`Called isInstalledOnDevices for identifiers ${deviceIdentifiers}. AppIdentifier is ${appId}.`);
|
|
181
202
|
return _.map(deviceIdentifiers, (deviceIdentifier) => this.isApplicationInstalledOnDevice(deviceIdentifier, {
|
|
@@ -192,9 +213,11 @@ class DevicesService extends events_1.EventEmitter {
|
|
|
192
213
|
return device;
|
|
193
214
|
});
|
|
194
215
|
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
216
|
+
getInstalledApplications(deviceIdentifier) {
|
|
217
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
218
|
+
const device = yield this.getDevice(deviceIdentifier);
|
|
219
|
+
return device.applicationManager.getInstalledApplications();
|
|
220
|
+
});
|
|
198
221
|
}
|
|
199
222
|
addDeviceDiscovery(deviceDiscovery) {
|
|
200
223
|
this._otherDeviceDiscoveries.push(deviceDiscovery);
|
|
@@ -247,62 +270,69 @@ class DevicesService extends events_1.EventEmitter {
|
|
|
247
270
|
delete this._availableEmulators[emulator.imageIdentifier];
|
|
248
271
|
this.emit(constants.EmulatorDiscoveryNames.EMULATOR_IMAGE_LOST, emulator);
|
|
249
272
|
}
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
273
|
+
/**
|
|
274
|
+
* Starts looking for devices. Any found devices are pushed to "_devices" variable.
|
|
275
|
+
*/
|
|
276
|
+
detectCurrentlyAttachedDevices(deviceInitOpts) {
|
|
277
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
278
|
+
const options = this.getDeviceLookingOptions(deviceInitOpts);
|
|
279
|
+
for (const deviceDiscovery of this._allDeviceDiscoveries) {
|
|
280
|
+
try {
|
|
281
|
+
yield deviceDiscovery.startLookingForDevices(options);
|
|
282
|
+
}
|
|
283
|
+
catch (err) {
|
|
284
|
+
this.$logger.trace("Error while checking for devices.", err);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
detectCurrentlyAvailableEmulators() {
|
|
290
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
253
291
|
try {
|
|
254
|
-
|
|
292
|
+
yield this.$androidEmulatorDiscovery.startLookingForDevices();
|
|
255
293
|
}
|
|
256
294
|
catch (err) {
|
|
257
|
-
this.$logger.trace(
|
|
295
|
+
this.$logger.trace(`Error while checking for Android emulators. ${err}`);
|
|
258
296
|
}
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
this.$logger.trace(`Error while checking for Android emulators. ${err}`);
|
|
267
|
-
}
|
|
268
|
-
try {
|
|
269
|
-
await this.$iOSSimulatorDiscovery.checkForAvailableSimulators();
|
|
270
|
-
}
|
|
271
|
-
catch (err) {
|
|
272
|
-
this.$logger.trace(`Error while checking for iOS simulators. ${err}`);
|
|
273
|
-
}
|
|
297
|
+
try {
|
|
298
|
+
yield this.$iOSSimulatorDiscovery.checkForAvailableSimulators();
|
|
299
|
+
}
|
|
300
|
+
catch (err) {
|
|
301
|
+
this.$logger.trace(`Error while checking for iOS simulators. ${err}`);
|
|
302
|
+
}
|
|
303
|
+
});
|
|
274
304
|
}
|
|
275
305
|
startDeviceDetectionInterval(deviceInitOpts = {}) {
|
|
276
306
|
if (!this.deviceDetectionInterval) {
|
|
277
307
|
let isDeviceDetectionIntervalInProgress = false;
|
|
278
|
-
this.deviceDetectionInterval = setInterval(
|
|
308
|
+
this.deviceDetectionInterval = setInterval(() => __awaiter(this, void 0, void 0, function* () {
|
|
279
309
|
if (isDeviceDetectionIntervalInProgress) {
|
|
280
310
|
return;
|
|
281
311
|
}
|
|
282
312
|
isDeviceDetectionIntervalInProgress = true;
|
|
283
|
-
|
|
313
|
+
yield this.detectCurrentlyAttachedDevices(deviceInitOpts);
|
|
284
314
|
try {
|
|
285
315
|
const trustedDevices = _.filter(this._devices, (device) => device.deviceInfo.status === constants.CONNECTED_STATUS);
|
|
286
|
-
|
|
316
|
+
yield (0, helpers_1.settlePromises)(_.map(trustedDevices, (device) => device.applicationManager.checkForApplicationUpdates()));
|
|
287
317
|
}
|
|
288
318
|
catch (err) {
|
|
289
319
|
this.$logger.trace("Error checking for application updates on devices.", err);
|
|
290
320
|
}
|
|
291
321
|
isDeviceDetectionIntervalInProgress = false;
|
|
292
|
-
}, deviceInitOpts.detectionInterval || DevicesService.DEVICE_LOOKING_INTERVAL);
|
|
322
|
+
}), deviceInitOpts.detectionInterval || DevicesService.DEVICE_LOOKING_INTERVAL);
|
|
293
323
|
this.deviceDetectionInterval.unref();
|
|
294
324
|
}
|
|
295
325
|
}
|
|
296
326
|
startEmulatorDetectionInterval(opts = {}) {
|
|
297
327
|
let isEmulatorDetectionIntervalRunning = false;
|
|
298
|
-
this.emulatorDetectionInterval = setInterval(
|
|
328
|
+
this.emulatorDetectionInterval = setInterval(() => __awaiter(this, void 0, void 0, function* () {
|
|
299
329
|
if (isEmulatorDetectionIntervalRunning) {
|
|
300
330
|
return;
|
|
301
331
|
}
|
|
302
332
|
isEmulatorDetectionIntervalRunning = true;
|
|
303
|
-
|
|
333
|
+
yield this.detectCurrentlyAvailableEmulators();
|
|
304
334
|
isEmulatorDetectionIntervalRunning = false;
|
|
305
|
-
}, opts.detectionInterval || DevicesService.EMULATOR_IMAGES_DETECTION_INTERVAL);
|
|
335
|
+
}), opts.detectionInterval || DevicesService.EMULATOR_IMAGES_DETECTION_INTERVAL);
|
|
306
336
|
this.emulatorDetectionInterval.unref();
|
|
307
337
|
}
|
|
308
338
|
stopDeviceDetectionInterval() {
|
|
@@ -315,6 +345,11 @@ class DevicesService extends events_1.EventEmitter {
|
|
|
315
345
|
clearInterval(this.emulatorDetectionInterval);
|
|
316
346
|
}
|
|
317
347
|
}
|
|
348
|
+
/**
|
|
349
|
+
* Returns device that matches an identifier.
|
|
350
|
+
* The identifier is expected to be the same as the running device declares it (emulator-5554 for android or GUID for ios).
|
|
351
|
+
* @param identifier running emulator or device identifier
|
|
352
|
+
*/
|
|
318
353
|
getDeviceByIdentifier(identifier) {
|
|
319
354
|
const searchedDevice = _.find(this.getDeviceInstances(), (device) => {
|
|
320
355
|
if (this.$mobileHelper.isApplePlatform(device.deviceInfo.platform) &&
|
|
@@ -330,81 +365,112 @@ class DevicesService extends events_1.EventEmitter {
|
|
|
330
365
|
}
|
|
331
366
|
return searchedDevice;
|
|
332
367
|
}
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
368
|
+
/**
|
|
369
|
+
* Starts looking for running devices. All found devices are pushed to _devices variable.
|
|
370
|
+
*/
|
|
371
|
+
startLookingForDevices(deviceInitOpts) {
|
|
372
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
373
|
+
this.$logger.trace("startLookingForDevices; platform is %s", this._platform);
|
|
374
|
+
if (this._platform) {
|
|
375
|
+
return this.detectCurrentlyAttachedDevices(deviceInitOpts);
|
|
376
|
+
}
|
|
377
|
+
yield this.detectCurrentlyAttachedDevices(deviceInitOpts);
|
|
378
|
+
yield this.detectCurrentlyAvailableEmulators();
|
|
379
|
+
yield this.startDeviceDetectionInterval(deviceInitOpts);
|
|
380
|
+
});
|
|
341
381
|
}
|
|
382
|
+
/**
|
|
383
|
+
* Returns device depending on the passed index.
|
|
384
|
+
* The index refers to assigned number to listed devices by tns device command.
|
|
385
|
+
* @param index assigned device number
|
|
386
|
+
*/
|
|
342
387
|
getDeviceByIndex(index) {
|
|
343
388
|
this.validateIndex(index - 1);
|
|
344
389
|
return this.getDeviceInstances()[index - 1];
|
|
345
390
|
}
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
391
|
+
/**
|
|
392
|
+
* Returns running device for specified --device <DeviceId>.
|
|
393
|
+
* Method expects running devices.
|
|
394
|
+
* @param deviceOption parameter passed by the user to --device flag. Can be name, identifier or imageIdentifier.
|
|
395
|
+
*/
|
|
396
|
+
getDevice(deviceOption) {
|
|
397
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
398
|
+
let device = null;
|
|
399
|
+
if (!device) {
|
|
400
|
+
device = _.find(this.getDeviceInstances(), (d) => (d.deviceInfo.identifier &&
|
|
401
|
+
d.deviceInfo.identifier === deviceOption) ||
|
|
402
|
+
(d.deviceInfo.displayName &&
|
|
403
|
+
d.deviceInfo.displayName === deviceOption) ||
|
|
404
|
+
(d.deviceInfo.imageIdentifier &&
|
|
405
|
+
d.deviceInfo.imageIdentifier === deviceOption));
|
|
406
|
+
}
|
|
407
|
+
if (!device && helpers.isNumberWithoutExponent(deviceOption)) {
|
|
408
|
+
device = this.getDeviceByIndex(parseInt(deviceOption, 10));
|
|
409
|
+
}
|
|
410
|
+
if (!device) {
|
|
411
|
+
this.$errors.fail(this.$messages.Devices
|
|
412
|
+
.NotFoundDeviceByIdentifierErrorMessageWithIdentifier, deviceOption, this.$staticConfig.CLIENT_NAME.toLowerCase());
|
|
413
|
+
}
|
|
414
|
+
return device;
|
|
415
|
+
});
|
|
364
416
|
}
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
417
|
+
/**
|
|
418
|
+
* Method runs action for a --device (value), specified by the user.
|
|
419
|
+
* @param action action to be executed if canExecute returns true
|
|
420
|
+
* @param canExecute predicate to decide whether the command can be ran
|
|
421
|
+
*/
|
|
422
|
+
executeOnDevice(action, canExecute) {
|
|
423
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
424
|
+
if (!canExecute || canExecute(this._device)) {
|
|
425
|
+
return {
|
|
426
|
+
deviceIdentifier: this._device.deviceInfo.identifier,
|
|
427
|
+
result: yield action(this._device),
|
|
428
|
+
};
|
|
429
|
+
}
|
|
430
|
+
});
|
|
372
431
|
}
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
432
|
+
/**
|
|
433
|
+
* Executes passed action for each found device.
|
|
434
|
+
* @param action action to be executed if canExecute returns true
|
|
435
|
+
* @param canExecute predicate to decide whether the command can be ran
|
|
436
|
+
*/
|
|
437
|
+
executeOnAllConnectedDevices(action, canExecute) {
|
|
438
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
439
|
+
const devices = this.filterDevicesByPlatform();
|
|
440
|
+
const sortedDevices = _.sortBy(devices, (device) => device.deviceInfo.platform);
|
|
441
|
+
const result = [];
|
|
442
|
+
const errors = [];
|
|
443
|
+
for (const device of sortedDevices) {
|
|
444
|
+
try {
|
|
445
|
+
if (!canExecute || canExecute(device)) {
|
|
446
|
+
result.push({
|
|
447
|
+
deviceIdentifier: device.deviceInfo.identifier,
|
|
448
|
+
result: yield action(device),
|
|
449
|
+
});
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
catch (err) {
|
|
453
|
+
err.deviceIdentifier = device.deviceInfo.identifier;
|
|
454
|
+
this.$logger.trace(`Error while executing action on device ${device.deviceInfo.identifier}. The error is`, err);
|
|
455
|
+
errors.push(err);
|
|
385
456
|
}
|
|
386
457
|
}
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
458
|
+
if (errors.length) {
|
|
459
|
+
let preErrorMsg = "";
|
|
460
|
+
if (errors.length > 1) {
|
|
461
|
+
preErrorMsg = "Multiple errors were thrown:" + os_1.EOL;
|
|
462
|
+
}
|
|
463
|
+
const errorMessage = `${preErrorMsg}${errors
|
|
464
|
+
.map((e) => e.message || e)
|
|
465
|
+
.join(os_1.EOL)}`;
|
|
466
|
+
this.$errors.fail(errorMessage);
|
|
391
467
|
}
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
let preErrorMsg = "";
|
|
395
|
-
if (errors.length > 1) {
|
|
396
|
-
preErrorMsg = "Multiple errors were thrown:" + os_1.EOL;
|
|
397
|
-
}
|
|
398
|
-
const errorMessage = `${preErrorMsg}${errors
|
|
399
|
-
.map((e) => e.message || e)
|
|
400
|
-
.join(os_1.EOL)}`;
|
|
401
|
-
this.$errors.fail(errorMessage);
|
|
402
|
-
}
|
|
403
|
-
return result;
|
|
468
|
+
return result;
|
|
469
|
+
});
|
|
404
470
|
}
|
|
405
471
|
deployOnDevices(deviceIdentifiers, packagePath, appId, projectName, projectDir) {
|
|
406
472
|
this.$logger.trace(`Called deployOnDevices for identifiers ${deviceIdentifiers} for packageFile: ${packagePath}. Application identifier is ${appId}. Project Name is: ${projectName}`);
|
|
407
|
-
return _.map(deviceIdentifiers,
|
|
473
|
+
return _.map(deviceIdentifiers, (deviceIdentifier) => __awaiter(this, void 0, void 0, function* () {
|
|
408
474
|
const device = this.getDeviceByIdentifier(deviceIdentifier);
|
|
409
475
|
let identifier;
|
|
410
476
|
if (typeof appId === "string") {
|
|
@@ -419,110 +485,141 @@ class DevicesService extends events_1.EventEmitter {
|
|
|
419
485
|
projectName,
|
|
420
486
|
projectDir,
|
|
421
487
|
});
|
|
422
|
-
});
|
|
488
|
+
}));
|
|
423
489
|
}
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
490
|
+
/**
|
|
491
|
+
* Runs the passed action if the predicate "canExecute" returns true
|
|
492
|
+
* @param action action to be executed if canExecute returns true.
|
|
493
|
+
* @param canExecute predicate to decide whether the command can be ran
|
|
494
|
+
* @param options all possible options that can be passed to the command.
|
|
495
|
+
*/
|
|
496
|
+
execute(action, canExecute, options) {
|
|
497
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
498
|
+
assert.ok(this._isInitialized, "Devices services not initialized!");
|
|
499
|
+
if (this.hasDevices) {
|
|
500
|
+
if (this.$hostInfo.isDarwin &&
|
|
501
|
+
this._platform &&
|
|
502
|
+
this.$mobileHelper.isiOSPlatform(this._platform) &&
|
|
503
|
+
this.$options.emulator &&
|
|
504
|
+
!this.isOnlyiOSSimultorRunning()) {
|
|
505
|
+
// Executes the command only on iOS simulator
|
|
506
|
+
const originalCanExecute = canExecute;
|
|
507
|
+
canExecute = (dev) => this.isiOSSimulator(dev) &&
|
|
508
|
+
(!originalCanExecute || !!originalCanExecute(dev));
|
|
509
|
+
}
|
|
510
|
+
return this.executeCore(action, canExecute);
|
|
442
511
|
}
|
|
443
512
|
else {
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
this.$
|
|
447
|
-
this.$errors.fail(message);
|
|
513
|
+
const message = constants.ERROR_NO_DEVICES;
|
|
514
|
+
if (options && options.allowNoDevices) {
|
|
515
|
+
this.$logger.info(message);
|
|
448
516
|
}
|
|
449
517
|
else {
|
|
450
|
-
|
|
518
|
+
if (!this.$hostInfo.isDarwin &&
|
|
519
|
+
this._platform &&
|
|
520
|
+
this.$mobileHelper.isiOSPlatform(this._platform)) {
|
|
521
|
+
this.$errors.fail(message);
|
|
522
|
+
}
|
|
523
|
+
else {
|
|
524
|
+
return this.executeCore(action, canExecute);
|
|
525
|
+
}
|
|
451
526
|
}
|
|
452
527
|
}
|
|
453
|
-
}
|
|
528
|
+
});
|
|
454
529
|
}
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
530
|
+
/**
|
|
531
|
+
* Starts emulator or simulator if necessary depending on --device or --emulator flags.
|
|
532
|
+
* If no options are passed runs default emulator/simulator if no devices are connected.
|
|
533
|
+
* @param deviceInitOpts mainly contains information about --emulator and --deviceId flags.
|
|
534
|
+
*/
|
|
535
|
+
startEmulatorIfNecessary(deviceInitOpts) {
|
|
536
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
537
|
+
if (deviceInitOpts && deviceInitOpts.deviceId && deviceInitOpts.emulator) {
|
|
538
|
+
this.$errors.fail(`--device and --emulator are incompatible options.
|
|
458
539
|
If you are trying to run on specific emulator, use "${this.$staticConfig.CLIENT_NAME} run --device <DeviceID>`);
|
|
459
|
-
}
|
|
460
|
-
if (deviceInitOpts &&
|
|
461
|
-
deviceInitOpts.platform &&
|
|
462
|
-
!deviceInitOpts.skipEmulatorStart) {
|
|
463
|
-
this._platform = deviceInitOpts.platform;
|
|
464
|
-
try {
|
|
465
|
-
await this.startLookingForDevices(deviceInitOpts);
|
|
466
540
|
}
|
|
467
|
-
|
|
468
|
-
|
|
541
|
+
if (deviceInitOpts &&
|
|
542
|
+
deviceInitOpts.platform &&
|
|
543
|
+
!deviceInitOpts.skipEmulatorStart) {
|
|
544
|
+
// are there any running devices
|
|
545
|
+
this._platform = deviceInitOpts.platform;
|
|
546
|
+
try {
|
|
547
|
+
yield this.startLookingForDevices(deviceInitOpts);
|
|
548
|
+
}
|
|
549
|
+
catch (err) {
|
|
550
|
+
this.$logger.trace("Error while checking for devices.", err);
|
|
551
|
+
}
|
|
552
|
+
const deviceInstances = this.getDeviceInstances();
|
|
553
|
+
if (!deviceInitOpts.deviceId && _.isEmpty(deviceInstances)) {
|
|
554
|
+
if (!this.$hostInfo.isDarwin &&
|
|
555
|
+
this.$mobileHelper.isApplePlatform(deviceInitOpts.platform)) {
|
|
556
|
+
this.$errors.fail(constants.ERROR_NO_DEVICES_CANT_USE_IOS_SIMULATOR);
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
try {
|
|
560
|
+
yield this._startEmulatorIfNecessary(deviceInitOpts);
|
|
561
|
+
}
|
|
562
|
+
catch (err) {
|
|
563
|
+
const errorMessage = this.getEmulatorError(err, deviceInitOpts.platform);
|
|
564
|
+
this.$errors.fail(errorMessage);
|
|
565
|
+
}
|
|
469
566
|
}
|
|
567
|
+
});
|
|
568
|
+
}
|
|
569
|
+
_startEmulatorIfNecessary(data) {
|
|
570
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
470
571
|
const deviceInstances = this.getDeviceInstances();
|
|
471
|
-
if
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
this.$errors.fail(constants.ERROR_NO_DEVICES_CANT_USE_IOS_SIMULATOR);
|
|
475
|
-
}
|
|
572
|
+
//if no --device is passed and no devices are found, the default emulator is started
|
|
573
|
+
if (!data.deviceId && _.isEmpty(deviceInstances)) {
|
|
574
|
+
return this.startEmulatorCore(data);
|
|
476
575
|
}
|
|
477
|
-
|
|
478
|
-
|
|
576
|
+
//check if --device(value) is running, if it's not or it's not the same as is specified, start with name from --device(value)
|
|
577
|
+
if (data.deviceId) {
|
|
578
|
+
if (!helpers.isNumberWithoutExponent(data.deviceId)) {
|
|
579
|
+
const activeDeviceInstance = _.find(deviceInstances, (device) => device.deviceInfo.identifier === data.deviceId);
|
|
580
|
+
if (!activeDeviceInstance) {
|
|
581
|
+
return this.startEmulatorCore(data);
|
|
582
|
+
}
|
|
583
|
+
}
|
|
479
584
|
}
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
585
|
+
// make sure if the target platform is visionOS we don't try to run it on an already running iOS simulator...
|
|
586
|
+
if (data.platform === this.$devicePlatformsConstants.visionOS &&
|
|
587
|
+
deviceInstances.length) {
|
|
588
|
+
const runningDeviceInstance = deviceInstances.find((device) => device.deviceInfo.platform === this.$devicePlatformsConstants.visionOS);
|
|
589
|
+
if (!runningDeviceInstance) {
|
|
590
|
+
return this.startEmulatorCore(data);
|
|
591
|
+
}
|
|
483
592
|
}
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
if (!data.deviceId && _.isEmpty(deviceInstances)) {
|
|
489
|
-
return this.startEmulatorCore(data);
|
|
490
|
-
}
|
|
491
|
-
if (data.deviceId) {
|
|
492
|
-
if (!helpers.isNumberWithoutExponent(data.deviceId)) {
|
|
493
|
-
const activeDeviceInstance = _.find(deviceInstances, (device) => device.deviceInfo.identifier === data.deviceId);
|
|
494
|
-
if (!activeDeviceInstance) {
|
|
593
|
+
// if only emulator flag is passed and no other emulators are running, start default emulator
|
|
594
|
+
if (data.emulator && deviceInstances.length) {
|
|
595
|
+
const runningDeviceInstance = _.some(deviceInstances, (value) => value.isEmulator);
|
|
596
|
+
if (!runningDeviceInstance) {
|
|
495
597
|
return this.startEmulatorCore(data);
|
|
496
598
|
}
|
|
497
599
|
}
|
|
498
|
-
}
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
600
|
+
});
|
|
601
|
+
}
|
|
602
|
+
/**
|
|
603
|
+
* Takes care of gathering information about all running devices.
|
|
604
|
+
* Sets "_isInitialized" to true after infomation is present.
|
|
605
|
+
* Method expects running devices.
|
|
606
|
+
* @param data mainly contains information about --emulator and --deviceId flags.
|
|
607
|
+
*/
|
|
608
|
+
initialize(data) {
|
|
609
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
610
|
+
if (!this._deviceInitializePromise) {
|
|
611
|
+
this._deviceInitializePromise = this.initializeCore(data);
|
|
505
612
|
}
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
const runningDeviceInstance = _.some(deviceInstances, (value) => value.isEmulator);
|
|
509
|
-
if (!runningDeviceInstance) {
|
|
510
|
-
return this.startEmulatorCore(data);
|
|
613
|
+
try {
|
|
614
|
+
yield this._deviceInitializePromise;
|
|
511
615
|
}
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
await this._deviceInitializePromise;
|
|
520
|
-
}
|
|
521
|
-
catch (err) {
|
|
522
|
-
this.$logger.trace(`Error while initializing devicesService: ${err}`);
|
|
523
|
-
this._deviceInitializePromise = null;
|
|
524
|
-
throw err;
|
|
525
|
-
}
|
|
616
|
+
catch (err) {
|
|
617
|
+
// In case the initalization fails, we want to allow calling `initlialize` again with other arguments for example, so remove the cached promise value.
|
|
618
|
+
this.$logger.trace(`Error while initializing devicesService: ${err}`);
|
|
619
|
+
this._deviceInitializePromise = null;
|
|
620
|
+
throw err;
|
|
621
|
+
}
|
|
622
|
+
});
|
|
526
623
|
}
|
|
527
624
|
getPlatformsFromDeviceDescriptors(deviceDescriptors) {
|
|
528
625
|
const platforms = _(deviceDescriptors)
|
|
@@ -532,89 +629,93 @@ class DevicesService extends events_1.EventEmitter {
|
|
|
532
629
|
.value();
|
|
533
630
|
return platforms;
|
|
534
631
|
}
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
this.$
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
this
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
}
|
|
565
|
-
else if (!platform && deviceOption) {
|
|
566
|
-
await this.startLookingForDevices(deviceLookingOptions);
|
|
567
|
-
this._device = await this.getDevice(deviceOption);
|
|
568
|
-
this._platform = this._device.deviceInfo.platform;
|
|
569
|
-
}
|
|
570
|
-
else if (platform && !deviceOption) {
|
|
571
|
-
this._platform = this.$mobileHelper.validatePlatformName(platform);
|
|
572
|
-
await this.startLookingForDevices(deviceLookingOptions);
|
|
573
|
-
}
|
|
574
|
-
else {
|
|
575
|
-
if (deviceInitOpts.skipInferPlatform) {
|
|
576
|
-
if (deviceInitOpts.skipDeviceDetectionInterval) {
|
|
577
|
-
await this.detectCurrentlyAttachedDevices(deviceLookingOptions);
|
|
578
|
-
}
|
|
579
|
-
else {
|
|
580
|
-
deviceInitOpts.shouldReturnImmediateResult = true;
|
|
581
|
-
await this.startLookingForDevices(deviceLookingOptions);
|
|
632
|
+
initializeCore(deviceInitOpts) {
|
|
633
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
634
|
+
if (this._isInitialized) {
|
|
635
|
+
return;
|
|
636
|
+
}
|
|
637
|
+
if (!this.$options.json) {
|
|
638
|
+
this.$logger.info("Searching for devices...");
|
|
639
|
+
}
|
|
640
|
+
deviceInitOpts = deviceInitOpts || {};
|
|
641
|
+
this._data = deviceInitOpts;
|
|
642
|
+
if (!deviceInitOpts.skipEmulatorStart) {
|
|
643
|
+
// TODO: Remove from here as it calls startLookingForDevices, so we double the calls to specific device detection services
|
|
644
|
+
yield this.startEmulatorIfNecessary(deviceInitOpts);
|
|
645
|
+
}
|
|
646
|
+
const platform = deviceInitOpts.platform;
|
|
647
|
+
const deviceOption = deviceInitOpts.deviceId;
|
|
648
|
+
const deviceLookingOptions = {
|
|
649
|
+
emulator: deviceInitOpts.emulator,
|
|
650
|
+
platform: deviceInitOpts.platform,
|
|
651
|
+
shouldReturnImmediateResult: deviceInitOpts.shouldReturnImmediateResult,
|
|
652
|
+
detectionInterval: deviceInitOpts.detectionInterval,
|
|
653
|
+
fullDiscovery: deviceInitOpts.fullDiscovery,
|
|
654
|
+
};
|
|
655
|
+
if (platform && deviceOption) {
|
|
656
|
+
this._platform = this.$mobileHelper.validatePlatformName(deviceInitOpts.platform);
|
|
657
|
+
yield this.startLookingForDevices(deviceLookingOptions);
|
|
658
|
+
this._device = yield this.getDevice(deviceOption);
|
|
659
|
+
if (this._device.deviceInfo.platform !== this._platform) {
|
|
660
|
+
this.$errors.fail(constants.ERROR_CANNOT_RESOLVE_DEVICE);
|
|
582
661
|
}
|
|
662
|
+
this.$logger.warn("Your application will be deployed only on the device specified by the provided index or identifier.");
|
|
663
|
+
}
|
|
664
|
+
else if (!platform && deviceOption) {
|
|
665
|
+
yield this.startLookingForDevices(deviceLookingOptions);
|
|
666
|
+
this._device = yield this.getDevice(deviceOption);
|
|
667
|
+
this._platform = this._device.deviceInfo.platform;
|
|
668
|
+
}
|
|
669
|
+
else if (platform && !deviceOption) {
|
|
670
|
+
this._platform = this.$mobileHelper.validatePlatformName(platform);
|
|
671
|
+
yield this.startLookingForDevices(deviceLookingOptions);
|
|
583
672
|
}
|
|
584
673
|
else {
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
.filter((pl) => {
|
|
590
|
-
try {
|
|
591
|
-
return !!this.$mobileHelper.validatePlatformName(pl);
|
|
674
|
+
// platform and deviceId are not specified
|
|
675
|
+
if (deviceInitOpts.skipInferPlatform) {
|
|
676
|
+
if (deviceInitOpts.skipDeviceDetectionInterval) {
|
|
677
|
+
yield this.detectCurrentlyAttachedDevices(deviceLookingOptions);
|
|
592
678
|
}
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
679
|
+
else {
|
|
680
|
+
deviceInitOpts.shouldReturnImmediateResult = true;
|
|
681
|
+
yield this.startLookingForDevices(deviceLookingOptions);
|
|
596
682
|
}
|
|
597
|
-
})
|
|
598
|
-
.uniq()
|
|
599
|
-
.value();
|
|
600
|
-
if (platforms.length === 1) {
|
|
601
|
-
this._platform = platforms[0];
|
|
602
|
-
}
|
|
603
|
-
else if (platforms.length === 0) {
|
|
604
|
-
this.$errors.fail(constants.ERROR_NO_DEVICES);
|
|
605
683
|
}
|
|
606
684
|
else {
|
|
607
|
-
this
|
|
685
|
+
yield this.startLookingForDevices(deviceLookingOptions);
|
|
686
|
+
const devices = this.getDeviceInstances();
|
|
687
|
+
const platforms = _(devices)
|
|
688
|
+
.map((device) => device.deviceInfo.platform)
|
|
689
|
+
.filter((pl) => {
|
|
690
|
+
try {
|
|
691
|
+
return !!this.$mobileHelper.validatePlatformName(pl);
|
|
692
|
+
}
|
|
693
|
+
catch (err) {
|
|
694
|
+
this.$logger.warn(err.message);
|
|
695
|
+
return null;
|
|
696
|
+
}
|
|
697
|
+
})
|
|
698
|
+
.uniq()
|
|
699
|
+
.value();
|
|
700
|
+
if (platforms.length === 1) {
|
|
701
|
+
this._platform = platforms[0];
|
|
702
|
+
}
|
|
703
|
+
else if (platforms.length === 0) {
|
|
704
|
+
this.$errors.fail(constants.ERROR_NO_DEVICES);
|
|
705
|
+
}
|
|
706
|
+
else {
|
|
707
|
+
this.$errors.fail("Multiple device platforms detected (%s). Specify platform or device on command line.", helpers.formatListOfNames(platforms, "and"));
|
|
708
|
+
}
|
|
608
709
|
}
|
|
609
710
|
}
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
711
|
+
if (!this.$hostInfo.isDarwin &&
|
|
712
|
+
this._platform &&
|
|
713
|
+
this.$mobileHelper.isiOSPlatform(this._platform) &&
|
|
714
|
+
this.$options.emulator) {
|
|
715
|
+
this.$errors.fail(constants.ERROR_CANT_USE_SIMULATOR);
|
|
716
|
+
}
|
|
717
|
+
this._isInitialized = true;
|
|
718
|
+
});
|
|
618
719
|
}
|
|
619
720
|
get hasDevices() {
|
|
620
721
|
if (!this._platform) {
|
|
@@ -634,24 +735,30 @@ class DevicesService extends events_1.EventEmitter {
|
|
|
634
735
|
getDeviceByDeviceOption() {
|
|
635
736
|
return this._device;
|
|
636
737
|
}
|
|
637
|
-
|
|
638
|
-
return this
|
|
738
|
+
mapAbstractToTcpPort(deviceIdentifier, appIdentifier, framework) {
|
|
739
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
740
|
+
return this.$androidProcessService.mapAbstractToTcpPort(deviceIdentifier, appIdentifier, framework);
|
|
741
|
+
});
|
|
639
742
|
}
|
|
640
743
|
getDebuggableApps(deviceIdentifiers) {
|
|
641
744
|
return _.map(deviceIdentifiers, (deviceIdentifier) => this.getDebuggableAppsCore(deviceIdentifier));
|
|
642
745
|
}
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
746
|
+
getDebuggableViews(deviceIdentifier, appIdentifier) {
|
|
747
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
748
|
+
const device = this.getDeviceByIdentifier(deviceIdentifier), debuggableViewsPerApp = yield device.applicationManager.getDebuggableAppViews([appIdentifier]);
|
|
749
|
+
return debuggableViewsPerApp && debuggableViewsPerApp[appIdentifier];
|
|
750
|
+
});
|
|
646
751
|
}
|
|
647
752
|
getDebuggableAppsCore(deviceIdentifier) {
|
|
648
753
|
const device = this.getDeviceByIdentifier(deviceIdentifier);
|
|
649
754
|
return device.applicationManager.getDebuggableApps();
|
|
650
755
|
}
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
756
|
+
deployOnDevice(device, appData) {
|
|
757
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
758
|
+
yield device.applicationManager.reinstallApplication(appData.appId, appData.packagePath);
|
|
759
|
+
this.$logger.info(`Successfully deployed on device with identifier '${device.deviceInfo.identifier}'.`);
|
|
760
|
+
yield device.applicationManager.tryStartApplication(appData);
|
|
761
|
+
});
|
|
655
762
|
}
|
|
656
763
|
filterDevicesByPlatform() {
|
|
657
764
|
return _.filter(this.getDeviceInstances(), (device) => {
|
|
@@ -679,52 +786,63 @@ class DevicesService extends events_1.EventEmitter {
|
|
|
679
786
|
}
|
|
680
787
|
return null;
|
|
681
788
|
}
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
789
|
+
/**
|
|
790
|
+
* Starts emulator for platform and makes sure started devices/emulators/simulators are in _devices array before finishing.
|
|
791
|
+
* @param platform (optional) platform to start emulator/simulator for
|
|
792
|
+
* @param emulatorIdOrName (optional) emulator/simulator image identifier or name
|
|
793
|
+
*/
|
|
794
|
+
startEmulatorCore(deviceInitOpts = {}) {
|
|
795
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
796
|
+
const { deviceId } = deviceInitOpts;
|
|
797
|
+
const platform = deviceInitOpts.platform || this._platform;
|
|
798
|
+
const emulatorServices = this.resolveEmulatorServices(platform);
|
|
799
|
+
if (!emulatorServices) {
|
|
800
|
+
this.$errors.fail("Unable to detect platform for which to start emulator.");
|
|
801
|
+
}
|
|
802
|
+
const result = yield emulatorServices.startEmulator({
|
|
803
|
+
emulatorIdOrName: deviceId,
|
|
804
|
+
imageIdentifier: deviceId,
|
|
805
|
+
platform: platform,
|
|
806
|
+
sdk: this._data && this._data.sdk,
|
|
807
|
+
});
|
|
808
|
+
if (result && result.errors && result.errors.length) {
|
|
809
|
+
this.$errors.fail(result.errors.join("\n"));
|
|
810
|
+
}
|
|
811
|
+
const deviceLookingOptions = this.getDeviceLookingOptions(deviceInitOpts);
|
|
812
|
+
if (this.$mobileHelper.isAndroidPlatform(platform)) {
|
|
813
|
+
yield this.$androidDeviceDiscovery.startLookingForDevices(deviceLookingOptions);
|
|
814
|
+
}
|
|
815
|
+
else if (this.$mobileHelper.isiOSPlatform(platform) &&
|
|
816
|
+
this.$hostInfo.isDarwin) {
|
|
817
|
+
yield this.$iOSSimulatorDiscovery.startLookingForDevices(deviceLookingOptions);
|
|
818
|
+
}
|
|
694
819
|
});
|
|
695
|
-
if (result && result.errors && result.errors.length) {
|
|
696
|
-
this.$errors.fail(result.errors.join("\n"));
|
|
697
|
-
}
|
|
698
|
-
const deviceLookingOptions = this.getDeviceLookingOptions(deviceInitOpts);
|
|
699
|
-
if (this.$mobileHelper.isAndroidPlatform(platform)) {
|
|
700
|
-
await this.$androidDeviceDiscovery.startLookingForDevices(deviceLookingOptions);
|
|
701
|
-
}
|
|
702
|
-
else if (this.$mobileHelper.isiOSPlatform(platform) &&
|
|
703
|
-
this.$hostInfo.isDarwin) {
|
|
704
|
-
await this.$iOSSimulatorDiscovery.startLookingForDevices(deviceLookingOptions);
|
|
705
|
-
}
|
|
706
820
|
}
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
821
|
+
executeCore(action, canExecute) {
|
|
822
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
823
|
+
if (this._device) {
|
|
824
|
+
return [yield this.executeOnDevice(action, canExecute)];
|
|
825
|
+
}
|
|
826
|
+
return this.executeOnAllConnectedDevices(action, canExecute);
|
|
827
|
+
});
|
|
712
828
|
}
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
829
|
+
isApplicationInstalledOnDevice(deviceIdentifier, appData) {
|
|
830
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
831
|
+
let isInstalled = false;
|
|
832
|
+
const device = this.getDeviceByIdentifier(deviceIdentifier);
|
|
833
|
+
try {
|
|
834
|
+
isInstalled = yield device.applicationManager.isApplicationInstalled(appData.appId);
|
|
835
|
+
yield device.applicationManager.tryStartApplication(appData);
|
|
836
|
+
}
|
|
837
|
+
catch (err) {
|
|
838
|
+
this.$logger.trace("Error while checking is application installed. Error is: ", err);
|
|
839
|
+
}
|
|
840
|
+
return {
|
|
841
|
+
appIdentifier: appData.appId,
|
|
842
|
+
deviceIdentifier,
|
|
843
|
+
isInstalled,
|
|
844
|
+
};
|
|
845
|
+
});
|
|
728
846
|
}
|
|
729
847
|
getDeviceLookingOptions(deviceInitOpts = {}) {
|
|
730
848
|
const { shouldReturnImmediateResult, emulator } = deviceInitOpts;
|
|
@@ -747,7 +865,6 @@ class DevicesService extends events_1.EventEmitter {
|
|
|
747
865
|
`To list available ${emulatorName.toLowerCase()} images, run '${this.$staticConfig.CLIENT_NAME.toLowerCase()} device <Platform> --available-devices'.`);
|
|
748
866
|
}
|
|
749
867
|
}
|
|
750
|
-
exports.DevicesService = DevicesService;
|
|
751
868
|
DevicesService.DEVICE_LOOKING_INTERVAL = 200;
|
|
752
869
|
DevicesService.EMULATOR_IMAGES_DETECTION_INTERVAL = 60 * 1000;
|
|
753
870
|
__decorate([
|
|
@@ -801,4 +918,6 @@ __decorate([
|
|
|
801
918
|
__decorate([
|
|
802
919
|
(0, decorators_1.exported)("devicesService")
|
|
803
920
|
], DevicesService.prototype, "getDebuggableViews", null);
|
|
921
|
+
exports.DevicesService = DevicesService;
|
|
804
922
|
yok_1.injector.register("devicesService", DevicesService);
|
|
923
|
+
//# sourceMappingURL=devices-service.js.map
|