nativescript 9.0.4-dev.1 → 9.0.4-dev.3
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/lib/android-tools-info.js +12 -0
- package/lib/base-package-manager.js +7 -0
- package/lib/bootstrap.js +5 -1
- package/lib/bun-package-manager.js +14 -1
- package/lib/color.js +4 -0
- package/lib/commands/add-platform.js +1 -0
- package/lib/commands/apple-login.js +1 -0
- package/lib/commands/appstore-list.js +1 -0
- package/lib/commands/appstore-upload.js +3 -0
- package/lib/commands/build.js +3 -2
- package/lib/commands/clean.js +22 -1
- package/lib/commands/command-base.js +1 -0
- package/lib/commands/config.js +5 -0
- package/lib/commands/create-project.js +6 -0
- package/lib/commands/debug.js +6 -1
- package/lib/commands/deploy.js +3 -2
- package/lib/commands/embedding/embed.js +7 -0
- package/lib/commands/extensibility/install-extension.js +1 -0
- package/lib/commands/extensibility/list-extensions.js +1 -0
- package/lib/commands/extensibility/uninstall-extension.js +1 -0
- package/lib/commands/fonts.js +1 -0
- package/lib/commands/generate-assets.js +1 -0
- package/lib/commands/generate-help.js +1 -0
- package/lib/commands/generate.js +48 -1
- package/lib/commands/hooks/common.js +2 -1
- package/lib/commands/hooks/hooks-lock.js +1 -0
- package/lib/commands/hooks/hooks.js +1 -0
- package/lib/commands/info.js +1 -0
- package/lib/commands/install.js +1 -0
- package/lib/commands/list-platforms.js +1 -0
- package/lib/commands/migrate.js +1 -0
- package/lib/commands/native-add.js +5 -0
- package/lib/commands/platform-clean.js +1 -0
- package/lib/commands/plugin/add-plugin.js +1 -0
- package/lib/commands/plugin/build-plugin.js +1 -0
- package/lib/commands/plugin/create-plugin.js +5 -0
- package/lib/commands/plugin/list-plugins.js +1 -0
- package/lib/commands/plugin/remove-plugin.js +2 -0
- package/lib/commands/plugin/update-plugin.js +1 -0
- package/lib/commands/post-install.js +6 -0
- package/lib/commands/prepare.js +4 -3
- package/lib/commands/preview.js +2 -0
- package/lib/commands/remove-platform.js +1 -0
- package/lib/commands/resources/resources-update.js +2 -0
- package/lib/commands/run.js +1 -0
- package/lib/commands/setup.js +1 -0
- package/lib/commands/start.js +1 -0
- package/lib/commands/test-init.js +4 -0
- package/lib/commands/test.js +9 -2
- package/lib/commands/typings.js +2 -1
- package/lib/commands/update-platform.js +5 -0
- package/lib/commands/update.js +2 -0
- package/lib/commands/widget.js +20 -1
- package/lib/common/bootstrap.js +1 -0
- package/lib/common/child-process.js +3 -0
- package/lib/common/codeGeneration/code-entity.js +1 -0
- package/lib/common/codeGeneration/code-printer.js +1 -0
- package/lib/common/command-params.js +1 -0
- package/lib/common/commands/analytics.js +3 -0
- package/lib/common/commands/autocompletion.js +3 -0
- package/lib/common/commands/device/device-log-stream.js +1 -0
- package/lib/common/commands/device/get-file.js +2 -0
- package/lib/common/commands/device/list-applications.js +1 -0
- package/lib/common/commands/device/list-devices.js +3 -0
- package/lib/common/commands/device/list-files.js +2 -0
- package/lib/common/commands/device/put-file.js +2 -0
- package/lib/common/commands/device/run-application.js +1 -0
- package/lib/common/commands/device/stop-application.js +1 -0
- package/lib/common/commands/device/uninstall-application.js +1 -0
- package/lib/common/commands/doctor.js +3 -2
- package/lib/common/commands/generate-messages.js +1 -0
- package/lib/common/commands/help.js +1 -0
- package/lib/common/commands/package-manager-get.js +1 -0
- package/lib/common/commands/package-manager-set.js +1 -0
- package/lib/common/commands/post-install.js +1 -0
- package/lib/common/commands/preuninstall.js +11 -2
- package/lib/common/commands/proxy/proxy-base.js +4 -0
- package/lib/common/commands/proxy/proxy-clear.js +1 -0
- package/lib/common/commands/proxy/proxy-get.js +1 -0
- package/lib/common/commands/proxy/proxy-set.js +1 -0
- package/lib/common/common-lib.js +1 -0
- package/lib/common/constants.js +11 -0
- package/lib/common/decorators.js +48 -0
- package/lib/common/dispatchers.js +10 -1
- package/lib/common/errors.js +13 -3
- package/lib/common/file-system.js +13 -2
- package/lib/common/header.js +3 -0
- package/lib/common/helpers.js +89 -3
- package/lib/common/host-info.js +4 -0
- package/lib/common/http-client.js +20 -0
- package/lib/common/logger/appenders/cli-appender.js +4 -0
- package/lib/common/logger/appenders/emit-appender.js +4 -0
- package/lib/common/logger/layouts/cli-layout.js +1 -0
- package/lib/common/logger/logger.js +5 -0
- package/lib/common/messages/messages.js +6 -0
- package/lib/common/mobile/android/android-application-manager.js +20 -1
- package/lib/common/mobile/android/android-debug-bridge-result-handler.js +1 -0
- package/lib/common/mobile/android/android-debug-bridge.js +6 -0
- package/lib/common/mobile/android/android-device-file-system.js +4 -0
- package/lib/common/mobile/android/android-device-hash-service.js +3 -0
- package/lib/common/mobile/android/android-device.js +8 -0
- package/lib/common/mobile/android/android-emulator-services.js +2 -1
- package/lib/common/mobile/android/android-ini-file-parser.js +9 -0
- package/lib/common/mobile/android/android-log-filter.js +4 -0
- package/lib/common/mobile/android/android-virtual-device-service.js +26 -0
- package/lib/common/mobile/android/device-android-debug-bridge.js +1 -0
- package/lib/common/mobile/android/genymotion/genymotion-service.js +6 -1
- package/lib/common/mobile/android/genymotion/virtualbox-service.js +11 -0
- package/lib/common/mobile/android/logcat-helper.js +13 -0
- package/lib/common/mobile/application-manager-base.js +6 -0
- 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 +1 -0
- 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 +3 -0
- package/lib/common/mobile/ios/device/ios-device-file-system.js +1 -0
- package/lib/common/mobile/ios/device/ios-device-operations.js +4 -0
- package/lib/common/mobile/ios/device/ios-device.js +4 -0
- package/lib/common/mobile/ios/ios-device-base.js +1 -0
- 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 +4 -0
- package/lib/common/mobile/ios/simulator/ios-sim-resolver.js +1 -0
- package/lib/common/mobile/ios/simulator/ios-simulator-application-manager.js +6 -0
- package/lib/common/mobile/ios/simulator/ios-simulator-device.js +5 -0
- package/lib/common/mobile/ios/simulator/ios-simulator-file-system.js +1 -0
- package/lib/common/mobile/ios/simulator/ios-simulator-log-provider.js +1 -0
- 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 +2 -0
- package/lib/common/mobile/mobile-core/android-emulator-discovery.js +3 -0
- package/lib/common/mobile/mobile-core/android-process-service.js +32 -0
- package/lib/common/mobile/mobile-core/device-discovery.js +1 -0
- package/lib/common/mobile/mobile-core/devices-service.js +69 -0
- package/lib/common/mobile/mobile-core/ios-device-discovery.js +2 -0
- package/lib/common/mobile/mobile-core/ios-simulator-discovery.js +3 -0
- package/lib/common/mobile/mobile-helper.js +1 -0
- package/lib/common/mobile/wp8/wp8-emulator-services.js +1 -0
- package/lib/common/opener.js +1 -0
- 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 +9 -1
- package/lib/common/queue.js +1 -0
- package/lib/common/resource-loader.js +1 -0
- package/lib/common/services/auto-completion-service.js +13 -1
- package/lib/common/services/cancellation.js +2 -1
- package/lib/common/services/commands-service.js +17 -6
- package/lib/common/services/help-service.js +11 -3
- package/lib/common/services/hooks-service.js +13 -0
- package/lib/common/services/ios-notification-service.js +1 -0
- package/lib/common/services/json-file-settings-service.js +6 -0
- package/lib/common/services/lock-service.js +6 -0
- package/lib/common/services/message-contract-generator.js +1 -0
- package/lib/common/services/messages-service.js +1 -0
- package/lib/common/services/micro-templating-service.js +6 -0
- package/lib/common/services/net-service.js +3 -0
- package/lib/common/services/project-files-manager.js +5 -0
- package/lib/common/services/project-files-provider-base.js +1 -0
- package/lib/common/services/proxy-service.js +1 -0
- package/lib/common/services/qr.js +1 -0
- package/lib/common/services/settings-service.js +1 -0
- package/lib/common/services/xcode-select-service.js +1 -0
- package/lib/common/utils.js +1 -0
- package/lib/common/validators/project-name-validator.js +1 -0
- package/lib/common/validators/validation-result.js +1 -0
- package/lib/common/verify-node-version.js +8 -1
- package/lib/common/yok.js +32 -11
- package/lib/config.js +22 -1
- package/lib/constants-provider.js +1 -0
- package/lib/constants.js +53 -0
- package/lib/controllers/build-controller.js +4 -3
- package/lib/controllers/debug-controller.js +8 -3
- package/lib/controllers/deploy-controller.js +1 -0
- package/lib/controllers/migrate-controller.js +90 -4
- package/lib/controllers/platform-controller.js +9 -1
- package/lib/controllers/prepare-controller.js +17 -4
- package/lib/controllers/run-controller.js +17 -1
- package/lib/controllers/update-controller-base.js +1 -0
- package/lib/controllers/update-controller.js +11 -0
- 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 +1 -0
- package/lib/data/run-data.js +1 -0
- package/lib/detached-processes/cleanup-js-subprocess.js +8 -2
- package/lib/detached-processes/cleanup-process.js +18 -14
- package/lib/detached-processes/file-log-service.js +2 -1
- package/lib/device-path-provider.js +1 -0
- package/lib/device-sockets/ios/app-debug-socket-proxy-factory.js +7 -0
- package/lib/device-sockets/ios/notification.js +3 -0
- package/lib/device-sockets/ios/socket-request-executor.js +3 -0
- package/lib/helpers/android-bundle-validator-helper.js +2 -1
- package/lib/helpers/deploy-command-helper.js +1 -0
- package/lib/helpers/key-command-helper.js +4 -2
- package/lib/helpers/livesync-command-helper.js +4 -1
- package/lib/helpers/network-connectivity-validator.js +1 -0
- package/lib/helpers/options-track-helper.js +3 -2
- package/lib/helpers/package-path-helper.js +1 -0
- package/lib/helpers/platform-command-helper.js +7 -2
- package/lib/helpers/version-validator-helper.js +1 -0
- package/lib/key-commands/bootstrap.js +3 -2
- package/lib/key-commands/index.js +5 -4
- package/lib/nativescript-cli-lib-bootstrap.js +4 -0
- package/lib/nativescript-cli-lib.js +1 -0
- package/lib/nativescript-cli.js +11 -1
- package/lib/node/pbxproj-dom-xcode.js +1 -0
- package/lib/node/xcode.js +1 -0
- package/lib/node-package-manager.js +11 -1
- package/lib/options.js +144 -119
- package/lib/package-installation-manager.js +8 -1
- package/lib/package-manager.js +2 -0
- package/lib/platform-command-param.js +1 -0
- package/lib/pnpm-package-manager.js +4 -1
- package/lib/project-data.js +12 -0
- package/lib/providers/project-files-provider.js +1 -0
- package/lib/resolvers/livesync-service-resolver.js +1 -0
- package/lib/services/analytics/analytics-broker-process.js +10 -6
- package/lib/services/analytics/analytics-broker.js +2 -1
- package/lib/services/analytics/analytics-service.js +29 -25
- package/lib/services/analytics/google-analytics-provider.js +13 -12
- package/lib/services/analytics-settings-service.js +5 -0
- package/lib/services/android/android-bundle-tool-service.js +1 -0
- package/lib/services/android/gradle-build-args-service.js +3 -0
- package/lib/services/android/gradle-build-service.js +1 -0
- package/lib/services/android/gradle-command-service.js +1 -0
- package/lib/services/android-device-debug-service.js +6 -0
- package/lib/services/android-plugin-build-service.js +31 -2
- package/lib/services/android-project-service.js +71 -4
- package/lib/services/android-resources-migration-service.js +7 -0
- package/lib/services/apple-portal/apple-portal-application-service.js +1 -0
- package/lib/services/apple-portal/apple-portal-cookie-service.js +1 -0
- package/lib/services/apple-portal/apple-portal-session-service.js +6 -4
- package/lib/services/apple-portal/srp/srp-wrapper.js +4 -1
- package/lib/services/assets-generation/assets-generation-service.js +10 -5
- package/lib/services/build-artifacts-service.js +2 -1
- package/lib/services/build-data-service.js +1 -0
- package/lib/services/build-info-file-service.js +1 -0
- package/lib/services/bundler/bundler-compiler-service.js +68 -1
- package/lib/services/bundler/bundler.js +1 -0
- package/lib/services/cleanup-service.js +13 -9
- package/lib/services/cocoapods-platform-manager.js +9 -0
- package/lib/services/cocoapods-service.js +21 -1
- 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 +2 -1
- package/lib/services/doctor-service.js +21 -6
- package/lib/services/extensibility-service.js +8 -0
- package/lib/services/files-hash-service.js +1 -0
- package/lib/services/hmr-status-service.js +2 -0
- package/lib/services/info-service.js +1 -0
- package/lib/services/initialize-service.js +5 -1
- package/lib/services/ios/export-options-plist-service.js +4 -0
- package/lib/services/ios/ios-signing-service.js +4 -0
- package/lib/services/ios/spm-service.js +18 -0
- package/lib/services/ios/xcodebuild-args-service.js +16 -0
- package/lib/services/ios/xcodebuild-command-service.js +1 -0
- package/lib/services/ios/xcodebuild-service.js +2 -1
- package/lib/services/ios-debugger-port-service.js +1 -0
- package/lib/services/ios-device-debug-service.js +1 -0
- package/lib/services/ios-entitlements-service.js +1 -0
- package/lib/services/ios-extensions-service.js +1 -0
- 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 +100 -1
- package/lib/services/ios-provision-service.js +3 -0
- package/lib/services/ios-watch-app-service.js +1 -0
- package/lib/services/ip-service.js +2 -0
- package/lib/services/itmstransporter-service.js +1 -0
- package/lib/services/karma-execution.js +2 -0
- package/lib/services/livesync/android-device-livesync-service-base.js +1 -0
- package/lib/services/livesync/android-device-livesync-service.js +2 -0
- package/lib/services/livesync/android-device-livesync-sockets-service.js +3 -0
- package/lib/services/livesync/android-livesync-service.js +1 -0
- package/lib/services/livesync/android-livesync-tool.js +4 -0
- package/lib/services/livesync/device-livesync-service-base.js +2 -0
- package/lib/services/livesync/ios-device-livesync-service.js +7 -0
- package/lib/services/livesync/ios-livesync-service.js +2 -0
- package/lib/services/livesync/livesync-socket.js +1 -0
- package/lib/services/livesync/platform-livesync-service-base.js +5 -0
- package/lib/services/livesync-process-data-service.js +1 -0
- package/lib/services/log-parser-service.js +1 -0
- package/lib/services/log-source-map-service.js +15 -0
- package/lib/services/marking-mode-service.js +8 -5
- package/lib/services/metadata-filtering-service.js +1 -0
- package/lib/services/npm-config-service.js +4 -0
- package/lib/services/pacote-service.js +7 -0
- package/lib/services/performance-service.js +3 -1
- package/lib/services/platform/add-platform-service.js +49 -2
- package/lib/services/platform/platform-validation-service.js +1 -0
- package/lib/services/platform/prepare-native-platform-service.js +5 -2
- package/lib/services/platform-environment-requirements.js +8 -3
- 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 +20 -2
- package/lib/services/prepare-data-service.js +1 -0
- package/lib/services/project-backup-service.js +4 -0
- package/lib/services/project-changes-service.js +14 -3
- package/lib/services/project-cleanup-service.js +2 -0
- package/lib/services/project-config-service.js +21 -2
- package/lib/services/project-data-service.js +36 -7
- package/lib/services/project-name-service.js +1 -0
- package/lib/services/project-service.js +10 -0
- package/lib/services/project-templates-service.js +3 -2
- package/lib/services/qr-code-terminal-service.js +1 -0
- package/lib/services/require-service.js +1 -0
- package/lib/services/start-service.js +1 -0
- package/lib/services/temp-service.js +3 -0
- package/lib/services/terminal-spinner-service.js +2 -0
- package/lib/services/test-execution-service.js +9 -2
- package/lib/services/test-initialization-service.js +4 -0
- package/lib/services/timeline-profiler-service.js +1 -0
- package/lib/services/user-settings-service.js +1 -0
- package/lib/services/versions-service.js +6 -4
- package/lib/services/watch-ignore-list-service.js +1 -0
- package/lib/services/xcconfig-service.js +2 -0
- package/lib/services/xcproj-service.js +1 -0
- package/lib/shared-event-bus.js +6 -0
- package/lib/sys-info.js +2 -1
- package/lib/tools/config-manipulation/config-transformer.js +12 -0
- package/lib/tools/node-modules/node-modules-builder.js +1 -0
- package/lib/tools/node-modules/node-modules-dependencies-builder.js +6 -0
- package/lib/yarn-package-manager.js +1 -0
- package/lib/yarn2-package-manager.js +3 -0
- package/package.json +1 -1
|
@@ -15,9 +15,11 @@ const decorators_1 = require("../../common/decorators");
|
|
|
15
15
|
const constants_1 = require("../../constants");
|
|
16
16
|
const yok_1 = require("../../common/yok");
|
|
17
17
|
const package_path_helper_1 = require("../../helpers/package-path-helper");
|
|
18
|
+
/* for specific bundling debugging separate from logger */
|
|
18
19
|
const debugLog = false;
|
|
19
20
|
class BundlerCompilerService extends events_1.EventEmitter {
|
|
20
|
-
constructor($options, $errors, $childProcess, $fs, $hooksService, $hostInfo, $logger, $mobileHelper, $cleanupService, $packageManager, $packageInstallationManager, $
|
|
21
|
+
constructor($options, $errors, $childProcess, $fs, $hooksService, $hostInfo, $logger, $mobileHelper, $cleanupService, $packageManager, $packageInstallationManager, // private $sharedEventBus: ISharedEventBus
|
|
22
|
+
$projectConfigService) {
|
|
21
23
|
super();
|
|
22
24
|
this.$options = $options;
|
|
23
25
|
this.$errors = $errors;
|
|
@@ -44,6 +46,7 @@ class BundlerCompilerService extends events_1.EventEmitter {
|
|
|
44
46
|
prepareData.watch = true;
|
|
45
47
|
try {
|
|
46
48
|
const childProcess = await this.startBundleProcess(platformData, projectData, prepareData);
|
|
49
|
+
// Handle Vite differently from webpack
|
|
47
50
|
const isVite = this.getBundler() === "vite";
|
|
48
51
|
childProcess.stdout.on("data", function (data) {
|
|
49
52
|
process.stdout.write(data);
|
|
@@ -51,8 +54,11 @@ class BundlerCompilerService extends events_1.EventEmitter {
|
|
|
51
54
|
childProcess.stderr.on("data", function (data) {
|
|
52
55
|
process.stderr.write(data);
|
|
53
56
|
});
|
|
57
|
+
// For both Vite and webpack, we wait for the first build to complete
|
|
58
|
+
// Don't resolve immediately for Vite - wait for first IPC message
|
|
54
59
|
childProcess.on("message", (message) => {
|
|
55
60
|
this.$logger.trace(`Message from ${projectData.bundler}`, message);
|
|
61
|
+
// Handle Vite messages
|
|
56
62
|
if (isVite &&
|
|
57
63
|
message &&
|
|
58
64
|
message.emittedFiles) {
|
|
@@ -60,14 +66,17 @@ class BundlerCompilerService extends events_1.EventEmitter {
|
|
|
60
66
|
if (debugLog) {
|
|
61
67
|
console.log("Received Vite IPC message:", message);
|
|
62
68
|
}
|
|
69
|
+
// Copy Vite output files directly to platform destination
|
|
63
70
|
const distOutput = path.join(projectData.projectDir, ".ns-vite-build");
|
|
64
71
|
const destDir = path.join(platformData.appDestinationDirectoryPath, this.$options.hostProjectModuleName);
|
|
65
72
|
if (debugLog) {
|
|
66
73
|
console.log(`Copying from ${distOutput} to ${destDir}.`);
|
|
67
74
|
}
|
|
75
|
+
// Determine which files to copy based on build type and changes
|
|
68
76
|
if (message.buildType === "incremental" &&
|
|
69
77
|
message.emittedFiles &&
|
|
70
78
|
message.emittedFiles.length > 0) {
|
|
79
|
+
// Incremental builds: only copy files that are likely affected by the changes
|
|
71
80
|
const filesToCopy = this.getIncrementalFilesToCopy(message.emittedFiles);
|
|
72
81
|
if (debugLog) {
|
|
73
82
|
console.log("Incremental build - files to copy:", filesToCopy);
|
|
@@ -80,6 +89,7 @@ class BundlerCompilerService extends events_1.EventEmitter {
|
|
|
80
89
|
}
|
|
81
90
|
this.copyViteBundleToNative(distOutput, destDir);
|
|
82
91
|
}
|
|
92
|
+
// Resolve the promise on first build completion
|
|
83
93
|
if (isFirstBundlerWatchCompilation) {
|
|
84
94
|
isFirstBundlerWatchCompilation = false;
|
|
85
95
|
if (debugLog) {
|
|
@@ -87,6 +97,7 @@ class BundlerCompilerService extends events_1.EventEmitter {
|
|
|
87
97
|
}
|
|
88
98
|
resolve(childProcess);
|
|
89
99
|
}
|
|
100
|
+
// Transform Vite message to match webpack format
|
|
90
101
|
const files = message.emittedFiles.map((file) => path.join(platformData.appDestinationDirectoryPath, this.$options.hostProjectModuleName, file));
|
|
91
102
|
const data = {
|
|
92
103
|
files,
|
|
@@ -104,14 +115,23 @@ class BundlerCompilerService extends events_1.EventEmitter {
|
|
|
104
115
|
this.emit(constants_1.BUNDLER_COMPILATION_COMPLETE, data);
|
|
105
116
|
return;
|
|
106
117
|
}
|
|
118
|
+
// if we are on webpack5 - we handle HMR in a slightly different way
|
|
107
119
|
if (typeof message === "object" &&
|
|
108
120
|
"version" in message &&
|
|
109
121
|
"type" in message) {
|
|
122
|
+
// first compilation can be ignored because it will be synced regardless
|
|
123
|
+
// handling it here would trigger 2 syncs
|
|
110
124
|
if (isFirstBundlerWatchCompilation) {
|
|
111
125
|
isFirstBundlerWatchCompilation = false;
|
|
112
126
|
resolve(childProcess);
|
|
113
127
|
return;
|
|
114
128
|
}
|
|
129
|
+
// if ((message as IWebpackMessage).type === "hmr-status") {
|
|
130
|
+
// // we pass message through our event-bus to be handled wherever needed
|
|
131
|
+
// // in this case webpack-hmr-status-service listens for this event
|
|
132
|
+
// this.$sharedEventBus.emit("webpack:hmr-status", message);
|
|
133
|
+
// return;
|
|
134
|
+
// }
|
|
115
135
|
return this.handleHMRMessage(message, platformData, projectData, prepareData);
|
|
116
136
|
}
|
|
117
137
|
if (message ===
|
|
@@ -127,6 +147,7 @@ class BundlerCompilerService extends events_1.EventEmitter {
|
|
|
127
147
|
prepareData.hmr ? message.hash : "";
|
|
128
148
|
return;
|
|
129
149
|
}
|
|
150
|
+
// Persist the previousHash value before calling `this.getUpdatedEmittedFiles` as it will modify the expectedHashes object with the current hash
|
|
130
151
|
const previousHash = this.expectedHashes[platformData.platformNameLowerCase];
|
|
131
152
|
let result;
|
|
132
153
|
if (prepareData.hmr) {
|
|
@@ -151,6 +172,7 @@ class BundlerCompilerService extends events_1.EventEmitter {
|
|
|
151
172
|
platform: platformData.platformNameLowerCase,
|
|
152
173
|
};
|
|
153
174
|
this.$logger.trace(`Generated data from ${projectData.bundler} message:`, data);
|
|
175
|
+
// the hash of the compilation is the same as the previous one and there are only hot updates produced
|
|
154
176
|
if (data.hasOnlyHotUpdateFiles && previousHash === message.hash) {
|
|
155
177
|
return;
|
|
156
178
|
}
|
|
@@ -223,6 +245,9 @@ class BundlerCompilerService extends events_1.EventEmitter {
|
|
|
223
245
|
}
|
|
224
246
|
}
|
|
225
247
|
async shouldUsePreserveSymlinksOption() {
|
|
248
|
+
// pnpm does not require symlink (https://github.com/nodejs/node-eps/issues/46#issuecomment-277373566)
|
|
249
|
+
// and it also does not work in some cases.
|
|
250
|
+
// Check https://github.com/NativeScript/nativescript-cli/issues/5259 for more information
|
|
226
251
|
const currentPackageManager = await this.$packageManager.getPackageManagerName();
|
|
227
252
|
const res = currentPackageManager !== constants_1.PackageManagers.pnpm;
|
|
228
253
|
return res;
|
|
@@ -241,6 +266,7 @@ class BundlerCompilerService extends events_1.EventEmitter {
|
|
|
241
266
|
const envData = this.buildEnvData(platformData.platformNameLowerCase, projectData, prepareData);
|
|
242
267
|
const isVite = this.getBundler() === "vite";
|
|
243
268
|
const cliArgs = await this.buildEnvCommandLineParams(envData, platformData, projectData, prepareData);
|
|
269
|
+
// Note: With Vite, we need `--` to prevent vite cli from erroring on unknown options.
|
|
244
270
|
const envParams = isVite
|
|
245
271
|
? [
|
|
246
272
|
`--mode=${prepareData.release ? "production" : "development"}`,
|
|
@@ -308,16 +334,28 @@ class BundlerCompilerService extends events_1.EventEmitter {
|
|
|
308
334
|
});
|
|
309
335
|
envData.verbose = envData.verbose || this.$logger.isVerbose();
|
|
310
336
|
envData.production = envData.production || prepareData.release;
|
|
337
|
+
// add the config file name to the env data so the webpack process can read the
|
|
338
|
+
// correct config file when resolving the CLI lib and the config service
|
|
339
|
+
// we are explicitly setting it to false to force using the defaults
|
|
311
340
|
envData.config =
|
|
312
341
|
(_b = (_a = process.env.NATIVESCRIPT_CONFIG_NAME) !== null && _a !== void 0 ? _a : this.$options.config) !== null && _b !== void 0 ? _b : "false";
|
|
342
|
+
// explicitly set the env variable
|
|
313
343
|
process.env.NATIVESCRIPT_CONFIG_NAME = envData.config;
|
|
344
|
+
// The snapshot generation is wrongly located in the Webpack plugin.
|
|
345
|
+
// It should be moved in the Native Prepare of the CLI or a Gradle task in the Runtime.
|
|
346
|
+
// As a workaround, we skip the mksnapshot, xxd and android-ndk calls based on skipNativePrepare.
|
|
347
|
+
// In this way the plugin will prepare only the snapshot JS entry without any native prepare and
|
|
348
|
+
// we will able to execute cloud builds with snapshot without having any local snapshot or Docker setup.
|
|
349
|
+
// TODO: Remove this flag when we remove the native part from the plugin.
|
|
314
350
|
envData.skipSnapshotTools =
|
|
315
351
|
prepareData.nativePrepare && prepareData.nativePrepare.skipNativePrepare;
|
|
352
|
+
// only set sourceMap if not explicitly set through a flag
|
|
316
353
|
if (typeof ((_c = prepareData === null || prepareData === void 0 ? void 0 : prepareData.env) === null || _c === void 0 ? void 0 : _c.sourceMap) === "undefined") {
|
|
317
354
|
if (!prepareData.release) {
|
|
318
355
|
envData.sourceMap = true;
|
|
319
356
|
}
|
|
320
357
|
}
|
|
358
|
+
// convert string to boolean
|
|
321
359
|
if (envData.sourceMap === "true" || envData.sourceMap === "false") {
|
|
322
360
|
envData.sourceMap = envData.sourceMap === "true";
|
|
323
361
|
}
|
|
@@ -338,6 +376,7 @@ class BundlerCompilerService extends events_1.EventEmitter {
|
|
|
338
376
|
}
|
|
339
377
|
else if (this.$hostInfo.isWindows) {
|
|
340
378
|
if (projectData.bundler === "webpack") {
|
|
379
|
+
//TODO: check this use case for webpack5 WEBPACK_PLUGIN_NAME
|
|
341
380
|
const minWebpackPluginWithWinSnapshotsVersion = "1.3.0";
|
|
342
381
|
const installedWebpackPluginVersion = await this.$packageInstallationManager.getInstalledDependencyVersion(constants_1.WEBPACK_PLUGIN_NAME, projectData.projectDir);
|
|
343
382
|
const hasWebpackPluginWithWinSnapshotsSupport = !!installedWebpackPluginVersion
|
|
@@ -371,6 +410,15 @@ class BundlerCompilerService extends events_1.EventEmitter {
|
|
|
371
410
|
}
|
|
372
411
|
getUpdatedEmittedFiles(allEmittedFiles, chunkFiles, nextHash, platform) {
|
|
373
412
|
const currentHash = this.getCurrentHotUpdateHash(allEmittedFiles);
|
|
413
|
+
// This logic is needed as there are already cases when webpack doesn't emit any files physically.
|
|
414
|
+
// We've set noEmitOnErrors in webpack.config.js based on noEmitOnError from tsconfig.json,
|
|
415
|
+
// so webpack doesn't emit any files when noEmitOnErrors: true is set in webpack.config.js and
|
|
416
|
+
// there is a compilation error in the source code. On the other side, hmr generates new hot-update files
|
|
417
|
+
// on every change and the hash of the next hmr update is written inside hot-update.json file.
|
|
418
|
+
// Although webpack doesn't emit any files, hmr hash is still generated. The hash is generated per compilation no matter
|
|
419
|
+
// if files will be emitted or not. This way, the first successful compilation after fixing the compilation error generates
|
|
420
|
+
// a hash that is not the same as the one expected in the latest emitted hot-update.json file.
|
|
421
|
+
// As a result, the hmr chain is broken and the changes are not applied.
|
|
374
422
|
const isHashValid = nextHash
|
|
375
423
|
? this.expectedHashes[platform] === currentHash
|
|
376
424
|
: true;
|
|
@@ -389,6 +437,7 @@ class BundlerCompilerService extends events_1.EventEmitter {
|
|
|
389
437
|
let hotHash;
|
|
390
438
|
const hotUpdateScripts = emittedFiles.filter((x) => x.endsWith(".hot-update.js"));
|
|
391
439
|
if (hotUpdateScripts && hotUpdateScripts.length) {
|
|
440
|
+
// the hash is the same for each hot update in the current compilation
|
|
392
441
|
const hotUpdateName = hotUpdateScripts[0];
|
|
393
442
|
const matcher = /^(.+)\.(.+)\.hot-update/gm;
|
|
394
443
|
const matches = matcher.exec(hotUpdateName);
|
|
@@ -406,6 +455,7 @@ class BundlerCompilerService extends events_1.EventEmitter {
|
|
|
406
455
|
}
|
|
407
456
|
}
|
|
408
457
|
handleHMRMessage(message, platformData, projectData, prepareData) {
|
|
458
|
+
// handle new bundler hmr packets
|
|
409
459
|
this.$logger.trace(`Received message from ${projectData.bundler} process:`, message);
|
|
410
460
|
if (message.type !== "compilation") {
|
|
411
461
|
return;
|
|
@@ -413,6 +463,7 @@ class BundlerCompilerService extends events_1.EventEmitter {
|
|
|
413
463
|
this.$logger.trace(`${capitalizeFirstLetter(projectData.bundler)} build done!`);
|
|
414
464
|
const files = message.data.emittedAssets.map((asset) => path.join(platformData.appDestinationDirectoryPath, this.$options.hostProjectModuleName, asset));
|
|
415
465
|
const staleFiles = message.data.staleAssets.map((asset) => path.join(platformData.appDestinationDirectoryPath, this.$options.hostProjectModuleName, asset));
|
|
466
|
+
// extract last hash from emitted filenames
|
|
416
467
|
const lastHash = (() => {
|
|
417
468
|
const absoluteFileNameWithLastHash = files.find((fileName) => fileName.endsWith("hot-update.js"));
|
|
418
469
|
if (!absoluteFileNameWithLastHash) {
|
|
@@ -425,6 +476,7 @@ class BundlerCompilerService extends events_1.EventEmitter {
|
|
|
425
476
|
}
|
|
426
477
|
})();
|
|
427
478
|
if (!files.length) {
|
|
479
|
+
// ignore compilations if no new files are emitted
|
|
428
480
|
return;
|
|
429
481
|
}
|
|
430
482
|
this.emit(constants_1.BUNDLER_COMPILATION_COMPLETE, {
|
|
@@ -488,20 +540,25 @@ class BundlerCompilerService extends events_1.EventEmitter {
|
|
|
488
540
|
return this.$projectConfigService.getValue(`bundler`, "webpack");
|
|
489
541
|
}
|
|
490
542
|
copyViteBundleToNative(distOutput, destDir, specificFiles = null) {
|
|
543
|
+
// Clean and copy Vite output to native platform folder
|
|
491
544
|
if (debugLog) {
|
|
492
545
|
console.log(`Copying Vite bundle from "${distOutput}" to "${destDir}".`);
|
|
493
546
|
}
|
|
494
547
|
try {
|
|
495
548
|
if (specificFiles) {
|
|
549
|
+
// Selective mode: only copy specific files (incremental)
|
|
496
550
|
if (debugLog) {
|
|
497
551
|
console.log("Selective copy - copying specific files:", specificFiles);
|
|
498
552
|
}
|
|
553
|
+
// Ensure destination directory exists
|
|
499
554
|
this.$fs.createDirectory(destDir);
|
|
555
|
+
// Copy only the specified files
|
|
500
556
|
for (const file of specificFiles) {
|
|
501
557
|
const srcPath = path.join(distOutput, file);
|
|
502
558
|
const destPath = path.join(destDir, file);
|
|
503
559
|
if (!this.$fs.exists(srcPath))
|
|
504
560
|
continue;
|
|
561
|
+
// create parent dirs
|
|
505
562
|
this.$fs.createDirectory(path.dirname(destPath));
|
|
506
563
|
this.$fs.copyFile(srcPath, destPath);
|
|
507
564
|
if (debugLog) {
|
|
@@ -510,13 +567,16 @@ class BundlerCompilerService extends events_1.EventEmitter {
|
|
|
510
567
|
}
|
|
511
568
|
}
|
|
512
569
|
else {
|
|
570
|
+
// Full build mode: clean and copy everything
|
|
513
571
|
if (debugLog) {
|
|
514
572
|
console.log("Full build: Copying all files.");
|
|
515
573
|
}
|
|
574
|
+
// Clean destination directory
|
|
516
575
|
if (this.$fs.exists(destDir)) {
|
|
517
576
|
this.$fs.deleteDirectory(destDir);
|
|
518
577
|
}
|
|
519
578
|
this.$fs.createDirectory(destDir);
|
|
579
|
+
// Copy all files from dist to platform destination
|
|
520
580
|
if (this.$fs.exists(distOutput)) {
|
|
521
581
|
this.copyRecursiveSync(distOutput, destDir);
|
|
522
582
|
}
|
|
@@ -530,9 +590,12 @@ class BundlerCompilerService extends events_1.EventEmitter {
|
|
|
530
590
|
}
|
|
531
591
|
}
|
|
532
592
|
getIncrementalFilesToCopy(emittedFiles) {
|
|
593
|
+
// For incremental builds, we need to determine which emitted files are likely affected
|
|
594
|
+
// by the source file changes
|
|
533
595
|
const filesToCopy = [];
|
|
534
596
|
const bundleFiles = emittedFiles.filter((file) => file.endsWith(".mjs") || file.endsWith(".js") || file.endsWith(".map"));
|
|
535
597
|
filesToCopy.push(...bundleFiles);
|
|
598
|
+
// Only copy assets if there are explicit asset-related changes
|
|
536
599
|
const assetFiles = emittedFiles.filter((file) => file.includes("assets/") ||
|
|
537
600
|
file.includes("static/") ||
|
|
538
601
|
file.includes("fonts/") ||
|
|
@@ -540,9 +603,11 @@ class BundlerCompilerService extends events_1.EventEmitter {
|
|
|
540
603
|
if (assetFiles.length > 0) {
|
|
541
604
|
filesToCopy.push(...assetFiles);
|
|
542
605
|
}
|
|
606
|
+
// Remove duplicates and return
|
|
543
607
|
return [...new Set(filesToCopy)];
|
|
544
608
|
}
|
|
545
609
|
copyRecursiveSync(src, dest) {
|
|
610
|
+
// Ensure destination exists
|
|
546
611
|
this.$fs.createDirectory(dest);
|
|
547
612
|
const entries = this.$fs.readDirectory(src);
|
|
548
613
|
for (const name of entries) {
|
|
@@ -553,6 +618,7 @@ class BundlerCompilerService extends events_1.EventEmitter {
|
|
|
553
618
|
this.copyRecursiveSync(srcPath, destPath);
|
|
554
619
|
}
|
|
555
620
|
else if (lstats.isFile() || lstats.isSymbolicLink()) {
|
|
621
|
+
// create parent directory (copyFile will also ensure it, but keep explicit)
|
|
556
622
|
this.$fs.createDirectory(path.dirname(destPath));
|
|
557
623
|
this.$fs.copyFile(srcPath, destPath);
|
|
558
624
|
}
|
|
@@ -567,3 +633,4 @@ function capitalizeFirstLetter(val) {
|
|
|
567
633
|
return String(val).charAt(0).toUpperCase() + String(val).slice(1);
|
|
568
634
|
}
|
|
569
635
|
yok_1.injector.register("bundlerCompilerService", BundlerCompilerService);
|
|
636
|
+
//# sourceMappingURL=bundler-compiler-service.js.map
|
|
@@ -20,56 +20,56 @@ class CleanupService {
|
|
|
20
20
|
async addCleanupCommand(commandInfo) {
|
|
21
21
|
const cleanupProcess = await this.getCleanupProcess();
|
|
22
22
|
cleanupProcess.send({
|
|
23
|
-
messageType: "AddCleanCommand"
|
|
23
|
+
messageType: "AddCleanCommand" /* CleanupProcessMessage.AddCleanCommand */,
|
|
24
24
|
commandInfo,
|
|
25
25
|
});
|
|
26
26
|
}
|
|
27
27
|
async removeCleanupCommand(commandInfo) {
|
|
28
28
|
const cleanupProcess = await this.getCleanupProcess();
|
|
29
29
|
cleanupProcess.send({
|
|
30
|
-
messageType: "RemoveCleanCommand"
|
|
30
|
+
messageType: "RemoveCleanCommand" /* CleanupProcessMessage.RemoveCleanCommand */,
|
|
31
31
|
commandInfo,
|
|
32
32
|
});
|
|
33
33
|
}
|
|
34
34
|
async addRequest(requestInfo) {
|
|
35
35
|
const cleanupProcess = await this.getCleanupProcess();
|
|
36
36
|
cleanupProcess.send({
|
|
37
|
-
messageType: "AddRequest"
|
|
37
|
+
messageType: "AddRequest" /* CleanupProcessMessage.AddRequest */,
|
|
38
38
|
requestInfo,
|
|
39
39
|
});
|
|
40
40
|
}
|
|
41
41
|
async removeRequest(requestInfo) {
|
|
42
42
|
const cleanupProcess = await this.getCleanupProcess();
|
|
43
43
|
cleanupProcess.send({
|
|
44
|
-
messageType: "RemoveRequest"
|
|
44
|
+
messageType: "RemoveRequest" /* CleanupProcessMessage.RemoveRequest */,
|
|
45
45
|
requestInfo,
|
|
46
46
|
});
|
|
47
47
|
}
|
|
48
48
|
async addCleanupDeleteAction(filePath) {
|
|
49
49
|
const cleanupProcess = await this.getCleanupProcess();
|
|
50
50
|
cleanupProcess.send({
|
|
51
|
-
messageType: "AddDeleteFileAction"
|
|
51
|
+
messageType: "AddDeleteFileAction" /* CleanupProcessMessage.AddDeleteFileAction */,
|
|
52
52
|
filePath,
|
|
53
53
|
});
|
|
54
54
|
}
|
|
55
55
|
async removeCleanupDeleteAction(filePath) {
|
|
56
56
|
const cleanupProcess = await this.getCleanupProcess();
|
|
57
57
|
cleanupProcess.send({
|
|
58
|
-
messageType: "RemoveDeleteFileAction"
|
|
58
|
+
messageType: "RemoveDeleteFileAction" /* CleanupProcessMessage.RemoveDeleteFileAction */,
|
|
59
59
|
filePath,
|
|
60
60
|
});
|
|
61
61
|
}
|
|
62
62
|
async addCleanupJS(jsCommand) {
|
|
63
63
|
const cleanupProcess = await this.getCleanupProcess();
|
|
64
64
|
cleanupProcess.send({
|
|
65
|
-
messageType: "AddJSFileToRequire"
|
|
65
|
+
messageType: "AddJSFileToRequire" /* CleanupProcessMessage.AddJSFileToRequire */,
|
|
66
66
|
jsCommand,
|
|
67
67
|
});
|
|
68
68
|
}
|
|
69
69
|
async removeCleanupJS(jsCommand) {
|
|
70
70
|
const cleanupProcess = await this.getCleanupProcess();
|
|
71
71
|
cleanupProcess.send({
|
|
72
|
-
messageType: "RemoveJSFileToRequire"
|
|
72
|
+
messageType: "RemoveJSFileToRequire" /* CleanupProcessMessage.RemoveJSFileToRequire */,
|
|
73
73
|
jsCommand,
|
|
74
74
|
});
|
|
75
75
|
}
|
|
@@ -92,6 +92,8 @@ class CleanupService {
|
|
|
92
92
|
setShouldDispose(shouldDispose) {
|
|
93
93
|
this.shouldDispose = shouldDispose;
|
|
94
94
|
}
|
|
95
|
+
// TODO: Consider extracting this method to a separate service
|
|
96
|
+
// as it has the same logic as the one used in analytics-service
|
|
95
97
|
getCleanupProcess() {
|
|
96
98
|
return new Promise((resolve, reject) => {
|
|
97
99
|
const cleanupProcessArgs = this.getCleanupProcessArgs();
|
|
@@ -110,11 +112,12 @@ class CleanupService {
|
|
|
110
112
|
clearTimeout(timeoutId);
|
|
111
113
|
if (!isSettled) {
|
|
112
114
|
isSettled = true;
|
|
115
|
+
// In case we throw error here, CLI will break its execution.
|
|
113
116
|
reject(err);
|
|
114
117
|
}
|
|
115
118
|
});
|
|
116
119
|
cleanupProcess.on("message", (data) => {
|
|
117
|
-
if (data === "ProcessReadyToReceive") {
|
|
120
|
+
if (data === "ProcessReadyToReceive" /* DetachedProcessMessages.ProcessReadyToReceive */) {
|
|
118
121
|
clearTimeout(timeoutId);
|
|
119
122
|
if (!isSettled) {
|
|
120
123
|
isSettled = true;
|
|
@@ -163,3 +166,4 @@ __decorate([
|
|
|
163
166
|
(0, decorators_1.cache)()
|
|
164
167
|
], CleanupService.prototype, "getCleanupProcess", null);
|
|
165
168
|
yok_1.injector.register("cleanupService", CleanupService);
|
|
169
|
+
//# sourceMappingURL=cleanup-service.js.map
|
|
@@ -82,6 +82,7 @@ class CocoaPodsPlatformManager {
|
|
|
82
82
|
_.each(allPodfiles, (podfileContent) => {
|
|
83
83
|
const platformMatch = platformRowRegExp.exec(podfileContent);
|
|
84
84
|
const podfilePathMatch = podfilePathRegExp.exec(podfileContent) || [];
|
|
85
|
+
// platform without version -> select it with highest priority
|
|
85
86
|
if (platformMatch && platformMatch[0] && !platformMatch[2]) {
|
|
86
87
|
selectedPlatformData = {
|
|
87
88
|
version: null,
|
|
@@ -90,6 +91,7 @@ class CocoaPodsPlatformManager {
|
|
|
90
91
|
};
|
|
91
92
|
return false;
|
|
92
93
|
}
|
|
94
|
+
// platform with version
|
|
93
95
|
if (platformMatch && platformMatch[0] && platformMatch[2]) {
|
|
94
96
|
if (!selectedPlatformData ||
|
|
95
97
|
semver.gt(semver.coerce(platformMatch[2]), semver.coerce(selectedPlatformData.version))) {
|
|
@@ -104,6 +106,12 @@ class CocoaPodsPlatformManager {
|
|
|
104
106
|
return selectedPlatformData;
|
|
105
107
|
}
|
|
106
108
|
shouldReplacePlatformSection(projectData, oldPodfilePlatformData, currentPodfilePlatformData) {
|
|
109
|
+
// The selected platform should be replaced in the following cases:
|
|
110
|
+
// 1. When the pod file is from App_Resources and the selected platform is not from App_Resources
|
|
111
|
+
// 2. When the pod file is from App_Resources, the selected platform is also from App_Resources
|
|
112
|
+
// and the pod's version is greater than the selected one
|
|
113
|
+
// 3. When the pod file doesn't have platform's version -> `platform :ios`
|
|
114
|
+
// 4. When the pod file has a version greater than the selected platform's version
|
|
107
115
|
const appResourcesPodfilePath = path.join(projectData.getAppResourcesDirectoryPath(), "iOS", constants_1.PODFILE_NAME);
|
|
108
116
|
const isFromAppResources = oldPodfilePlatformData.path !== appResourcesPodfilePath &&
|
|
109
117
|
currentPodfilePlatformData.path === appResourcesPodfilePath;
|
|
@@ -135,3 +143,4 @@ class CocoaPodsPlatformManager {
|
|
|
135
143
|
}
|
|
136
144
|
exports.CocoaPodsPlatformManager = CocoaPodsPlatformManager;
|
|
137
145
|
yok_1.injector.register("cocoaPodsPlatformManager", CocoaPodsPlatformManager);
|
|
146
|
+
//# sourceMappingURL=cocoapods-platform-manager.js.map
|
|
@@ -34,6 +34,12 @@ class CocoaPodsService {
|
|
|
34
34
|
let podTool = this.$config.USE_POD_SANDBOX ? "sandbox-pod" : "pod";
|
|
35
35
|
const args = ["install"];
|
|
36
36
|
if (process.platform === "darwin" && process.arch === "arm64") {
|
|
37
|
+
// check if pod is installed as an x86_64 binary or a native arm64 one
|
|
38
|
+
// we run the following:
|
|
39
|
+
// arch -x86_64 pod --version
|
|
40
|
+
// if it's an arm64 binary, we'll get something like this as a result:
|
|
41
|
+
// arch: posix_spawnp: pod: Bad CPU type in executable
|
|
42
|
+
// in which case, we should run it natively.
|
|
37
43
|
const res = await this.$childProcess
|
|
38
44
|
.exec("arch -x86_64 pod --version", null, {
|
|
39
45
|
showStderr: true,
|
|
@@ -47,8 +53,11 @@ class CocoaPodsService {
|
|
|
47
53
|
podTool = "arch";
|
|
48
54
|
}
|
|
49
55
|
}
|
|
56
|
+
// cocoapods print a lot of non-error information on stderr. Pipe the `stderr` to `stdout`, so we won't polute CLI's stderr output.
|
|
50
57
|
const podInstallResult = await this.$childProcess.spawnFromEvent(podTool, args, "close", { cwd: projectRoot, stdio: ["pipe", process.stdout, process.stdout] }, { throwError: false });
|
|
51
58
|
if (podInstallResult.exitCode !== 0) {
|
|
59
|
+
// https://github.com/CocoaPods/CocoaPods/blob/92aaf0f1120d32f3487960b485fb69fcaf61486c/lib/cocoapods/resolver.rb#L498
|
|
60
|
+
// TODO add article
|
|
52
61
|
const versionResolutionHint = podInstallResult.exitCode === 31
|
|
53
62
|
? `For more information on resolving CocoaPod issues in NativeScript read.`
|
|
54
63
|
: "";
|
|
@@ -80,6 +89,7 @@ ${versionResolutionHint}`);
|
|
|
80
89
|
}
|
|
81
90
|
async applyPodfileArchExclusions(projectData, platformData) {
|
|
82
91
|
const xcodeVersionData = await this.$xcodeSelectService.getXcodeVersion();
|
|
92
|
+
// only apply EXCLUDED_ARCHS workaround on XCode 12
|
|
83
93
|
if (+xcodeVersionData.major !== 12) {
|
|
84
94
|
return;
|
|
85
95
|
}
|
|
@@ -98,6 +108,7 @@ end`.trim();
|
|
|
98
108
|
this.$fs.writeFile(exclusionsPodfile, exclusions);
|
|
99
109
|
}
|
|
100
110
|
await this.applyPodfileToProject("NativeScript-CLI-Architecture-Exclusions", exclusionsPodfile, projectData, platformData);
|
|
111
|
+
// clean up
|
|
101
112
|
this.$fs.deleteFile(exclusionsPodfile);
|
|
102
113
|
}
|
|
103
114
|
async applyPodfileFromExtensions(projectData, platformData) {
|
|
@@ -120,6 +131,7 @@ end`.trim();
|
|
|
120
131
|
podfilePath: path.join(extensionFolderPath, name, constants.PODFILE_NAME),
|
|
121
132
|
}));
|
|
122
133
|
extensionsPodfile.forEach(({ targetName, podfilePath }) => {
|
|
134
|
+
// Remove the data between #Begin Podfile and #EndPodfile
|
|
123
135
|
const regExpToRemove = new RegExp(`${this.getExtensionPodfileHeader(podfilePath, targetName)}[\\s\\S]*?${this.getExtensionPodfileEnd()}`, "mg");
|
|
124
136
|
projectPodFileContent = projectPodFileContent.replace(regExpToRemove, "");
|
|
125
137
|
if (this.$fs.exists(podfilePath)) {
|
|
@@ -146,6 +158,7 @@ end`.trim();
|
|
|
146
158
|
? this.$fs.readText(pathToProjectPodfile).trim()
|
|
147
159
|
: "";
|
|
148
160
|
if (projectPodfileContent.indexOf(podfileContent) === -1) {
|
|
161
|
+
// Remove old occurences of the plugin from the project's Podfile.
|
|
149
162
|
this.removePodfileFromProject(moduleName, podfilePath, projectData, nativeProjectPath);
|
|
150
163
|
let finalPodfileContent = this.$fs.exists(pathToProjectPodfile)
|
|
151
164
|
? this.getPodfileContentWithoutTarget(projectData, this.$fs.readText(pathToProjectPodfile))
|
|
@@ -163,6 +176,7 @@ end`.trim();
|
|
|
163
176
|
removePodfileFromProject(moduleName, podfilePath, projectData, projectRoot) {
|
|
164
177
|
if (this.$fs.exists(this.getProjectPodfilePath(projectRoot))) {
|
|
165
178
|
let projectPodFileContent = this.$fs.readText(this.getProjectPodfilePath(projectRoot));
|
|
179
|
+
// Remove the data between #Begin Podfile and #EndPodfile
|
|
166
180
|
const regExpToRemove = new RegExp(`${this.getPluginPodfileHeader(podfilePath)}[\\s\\S]*?${this.getPluginPodfileEnd()}`, "mg");
|
|
167
181
|
projectPodFileContent = projectPodFileContent.replace(regExpToRemove, "");
|
|
168
182
|
projectPodFileContent = this.removePostInstallHook(moduleName, projectPodFileContent);
|
|
@@ -183,7 +197,7 @@ end`.trim();
|
|
|
183
197
|
}
|
|
184
198
|
}
|
|
185
199
|
getPluginPodfilePath(pluginData) {
|
|
186
|
-
const pluginPlatformsFolderPath = pluginData.pluginPlatformsFolderPath("ios");
|
|
200
|
+
const pluginPlatformsFolderPath = pluginData.pluginPlatformsFolderPath("ios" /* PlatformTypes.ios */);
|
|
187
201
|
const pluginPodFilePath = path.join(pluginPlatformsFolderPath, constants_1.PODFILE_NAME);
|
|
188
202
|
return pluginPodFilePath;
|
|
189
203
|
}
|
|
@@ -219,6 +233,7 @@ end`.trim();
|
|
|
219
233
|
if (_.startsWith(projectPodfileContent, podFileHeader)) {
|
|
220
234
|
projectPodfileContent = projectPodfileContent.substr(podFileHeader.length);
|
|
221
235
|
const podFileFooter = this.getPodfileFooter();
|
|
236
|
+
// Only remove the final end in case the file starts with the podFileHeader
|
|
222
237
|
if (_.endsWith(projectPodfileContent, podFileFooter)) {
|
|
223
238
|
projectPodfileContent = projectPodfileContent.substr(0, projectPodfileContent.length - podFileFooter.length);
|
|
224
239
|
}
|
|
@@ -239,6 +254,8 @@ end`.trim();
|
|
|
239
254
|
return projectPodFileContent;
|
|
240
255
|
}
|
|
241
256
|
getHookBasicFuncNameForPlugin(hookName, pluginName) {
|
|
257
|
+
// nativescript-hook and nativescript_hook should have different names, so replace all _ with ___ first and then replace all special symbols with _
|
|
258
|
+
// This will lead to a clash in case plugins are called nativescript-hook and nativescript___hook
|
|
242
259
|
const replacedPluginName = pluginName
|
|
243
260
|
.replace(/_/g, "___")
|
|
244
261
|
.replace(/[^A-Za-z0-9_]/g, "_");
|
|
@@ -252,6 +269,7 @@ end`.trim();
|
|
|
252
269
|
const newFunctionName = `${this.getHookBasicFuncNameForPlugin(hookName, pluginName)}_${newFunctions.length}`;
|
|
253
270
|
let newDefinition = `def ${newFunctionName}`;
|
|
254
271
|
const rubyFunction = { functionName: newFunctionName };
|
|
272
|
+
// firstGroup is the block parameter, secondGroup is the block parameter name.
|
|
255
273
|
if (firstGroup && secondGroup) {
|
|
256
274
|
newDefinition = `${newDefinition} (${secondGroup})`;
|
|
257
275
|
rubyFunction.functionParameters = secondGroup;
|
|
@@ -262,6 +280,7 @@ end`.trim();
|
|
|
262
280
|
return { replacedContent, newFunctions };
|
|
263
281
|
}
|
|
264
282
|
getPluginPodfileHeader(pluginPodFilePath) {
|
|
283
|
+
// escape special + from the podfile path (pnpm)
|
|
265
284
|
pluginPodFilePath = pluginPodFilePath.replace(/\+/g, "\\+");
|
|
266
285
|
return `# Begin Podfile - ${pluginPodFilePath}`;
|
|
267
286
|
}
|
|
@@ -331,3 +350,4 @@ exports.CocoaPodsService = CocoaPodsService;
|
|
|
331
350
|
CocoaPodsService.PODFILE_POST_INSTALL_SECTION_NAME = "post_install";
|
|
332
351
|
CocoaPodsService.INSTALLER_BLOCK_PARAMETER_NAME = "installer";
|
|
333
352
|
yok_1.injector.register("cocoapodsService", CocoaPodsService);
|
|
353
|
+
//# sourceMappingURL=cocoapods-service.js.map
|
|
@@ -27,6 +27,12 @@ class DebugServiceBase extends events_1.EventEmitter {
|
|
|
27
27
|
};
|
|
28
28
|
}
|
|
29
29
|
getChromeDebugUrl(debugOptions, port) {
|
|
30
|
+
// corresponds to 55.0.2883 Chrome version
|
|
31
|
+
// SHA is taken from https://chromium.googlesource.com/chromium/src/+/55.0.2883.100
|
|
32
|
+
// This SHA is old and does not support debugging with HMR.
|
|
33
|
+
// In case we want to stick with concrete SHA, get it from one of the tags https://chromium.googlesource.com/chromium/src/
|
|
34
|
+
// IMPORTANT: When you get the SHA, ensure you are using the `parent` commit, not the actual one.
|
|
35
|
+
// Using the actual commit will result in 404 error in the remote serve.
|
|
30
36
|
const commitSHA = debugOptions.devToolsCommit || "02e6bde1bbe34e43b309d4ef774b1168d25fd024";
|
|
31
37
|
const devToolsProtocol = `devtools`;
|
|
32
38
|
let chromeDevToolsPrefix = `${devToolsProtocol}://devtools/remote/serve_file/@${commitSHA}`;
|
|
@@ -42,3 +48,4 @@ class DebugServiceBase extends events_1.EventEmitter {
|
|
|
42
48
|
}
|
|
43
49
|
}
|
|
44
50
|
exports.DebugServiceBase = DebugServiceBase;
|
|
51
|
+
//# sourceMappingURL=debug-service-base.js.map
|
|
@@ -21,7 +21,7 @@ class DeviceInstallAppService {
|
|
|
21
21
|
const projectData = this.$projectDataService.getProjectData(buildData.projectDir);
|
|
22
22
|
const platformData = this.$platformsDataService.getPlatformData(platform, projectData);
|
|
23
23
|
await this.$analyticsService.trackEventActionInGoogleAnalytics({
|
|
24
|
-
action: "Deploy"
|
|
24
|
+
action: "Deploy" /* TrackActionNames.Deploy */,
|
|
25
25
|
device,
|
|
26
26
|
projectDir: projectData.projectDir,
|
|
27
27
|
});
|
|
@@ -77,3 +77,4 @@ class DeviceInstallAppService {
|
|
|
77
77
|
}
|
|
78
78
|
exports.DeviceInstallAppService = DeviceInstallAppService;
|
|
79
79
|
yok_1.injector.register("deviceInstallAppService", DeviceInstallAppService);
|
|
80
|
+
//# sourceMappingURL=device-install-app-service.js.map
|
|
@@ -52,9 +52,13 @@ class DoctorService {
|
|
|
52
52
|
this.printPackageManagerTip();
|
|
53
53
|
}
|
|
54
54
|
if (!configOptions || configOptions.trackResult) {
|
|
55
|
+
// TODO(Analytics): Consider sending this information to Google Analytics
|
|
56
|
+
// await this.$analyticsService.track("DoctorEnvironmentSetup", hasWarnings ? "incorrect" : "correct");
|
|
55
57
|
}
|
|
56
58
|
if (hasWarnings) {
|
|
57
59
|
this.$logger.info("There seem to be issues with your configuration.");
|
|
60
|
+
// cleanup the cache file as there seems to be issues with the current config
|
|
61
|
+
// all projects need to be rechecked
|
|
58
62
|
this.$fs.deleteFile(this.jsonFileSettingsPath);
|
|
59
63
|
}
|
|
60
64
|
else {
|
|
@@ -68,6 +72,7 @@ class DoctorService {
|
|
|
68
72
|
catch (err) {
|
|
69
73
|
this.$logger.error("Cannot get the latest versions information from npm. Please try again later.");
|
|
70
74
|
}
|
|
75
|
+
// todo: check for deprecated imports from `tns-core-modules`
|
|
71
76
|
this.checkForDeprecatedShortImportsInAppDir(configOptions.projectDir);
|
|
72
77
|
await this.$injector
|
|
73
78
|
.resolve("platformEnvironmentRequirements")
|
|
@@ -80,12 +85,12 @@ class DoctorService {
|
|
|
80
85
|
}
|
|
81
86
|
async runSetupScript() {
|
|
82
87
|
await this.$analyticsService.trackEventActionInGoogleAnalytics({
|
|
83
|
-
action: "Run Setup Script"
|
|
88
|
+
action: "Run Setup Script" /* TrackActionNames.RunSetupScript */,
|
|
84
89
|
additionalData: "Starting",
|
|
85
90
|
});
|
|
86
91
|
if (this.$hostInfo.isLinux) {
|
|
87
92
|
await this.$analyticsService.trackEventActionInGoogleAnalytics({
|
|
88
|
-
action: "Run Setup Script"
|
|
93
|
+
action: "Run Setup Script" /* TrackActionNames.RunSetupScript */,
|
|
89
94
|
additionalData: "Skipped as OS is Linux",
|
|
90
95
|
});
|
|
91
96
|
return;
|
|
@@ -98,13 +103,13 @@ class DoctorService {
|
|
|
98
103
|
await this.runSetupScriptCore(DoctorService.WindowsSetupScriptExecutable, DoctorService.WindowsSetupScriptArguments);
|
|
99
104
|
}
|
|
100
105
|
await this.$analyticsService.trackEventActionInGoogleAnalytics({
|
|
101
|
-
action: "Run Setup Script"
|
|
106
|
+
action: "Run Setup Script" /* TrackActionNames.RunSetupScript */,
|
|
102
107
|
additionalData: "Finished",
|
|
103
108
|
});
|
|
104
109
|
}
|
|
105
110
|
async canExecuteLocalBuild(configuration) {
|
|
106
111
|
await this.$analyticsService.trackEventActionInGoogleAnalytics({
|
|
107
|
-
action: "Check Local Build Setup"
|
|
112
|
+
action: "Check Local Build Setup" /* TrackActionNames.CheckLocalBuildSetup */,
|
|
108
113
|
additionalData: "Starting",
|
|
109
114
|
});
|
|
110
115
|
const sysInfoConfig = {
|
|
@@ -116,9 +121,11 @@ class DoctorService {
|
|
|
116
121
|
const warnings = this.filterInfosByType(infos, doctor_1.constants.WARNING_TYPE_NAME);
|
|
117
122
|
const hasWarnings = warnings.length > 0;
|
|
118
123
|
if (hasWarnings) {
|
|
124
|
+
// cleanup the cache file as there seems to be issues with the current config
|
|
125
|
+
// all projects need to be rechecked
|
|
119
126
|
this.$fs.deleteFile(this.jsonFileSettingsPath);
|
|
120
127
|
await this.$analyticsService.trackEventActionInGoogleAnalytics({
|
|
121
|
-
action: "Check Local Build Setup"
|
|
128
|
+
action: "Check Local Build Setup" /* TrackActionNames.CheckLocalBuildSetup */,
|
|
122
129
|
additionalData: `Warnings:${warnings.map((w) => w.message).join("__")}`,
|
|
123
130
|
});
|
|
124
131
|
this.printInfosCore(infos);
|
|
@@ -128,7 +135,7 @@ class DoctorService {
|
|
|
128
135
|
await this.$jsonFileSettingsService.saveSetting(this.getKeyForConfiguration(sysInfoConfig), infos);
|
|
129
136
|
}
|
|
130
137
|
await this.$analyticsService.trackEventActionInGoogleAnalytics({
|
|
131
|
-
action: "Check Local Build Setup"
|
|
138
|
+
action: "Check Local Build Setup" /* TrackActionNames.CheckLocalBuildSetup */,
|
|
132
139
|
additionalData: `Finished: Is setup correct: ${!hasWarnings}`,
|
|
133
140
|
});
|
|
134
141
|
return !hasWarnings;
|
|
@@ -176,6 +183,13 @@ class DoctorService {
|
|
|
176
183
|
.getFsStats(path.join(pathToTnsCoreModules, entry))
|
|
177
184
|
.isDirectory());
|
|
178
185
|
const stringRegularExpressionsPerDir = coreModulesSubDirs.map((c) => {
|
|
186
|
+
// require("text");
|
|
187
|
+
// require("text/smth");
|
|
188
|
+
// require( "text/smth");
|
|
189
|
+
// require( "text/smth" );
|
|
190
|
+
// import * as text from "text";
|
|
191
|
+
// import { a } from "text";
|
|
192
|
+
// import {a } from "text/abc"
|
|
179
193
|
const subDirPart = `[\"\']${c}[\"\'/]`;
|
|
180
194
|
return `(\\brequire\\s*?\\(\\s*?${subDirPart})|(\\bimport\\b.*?from\\s*?${subDirPart})`;
|
|
181
195
|
});
|
|
@@ -273,3 +287,4 @@ __decorate([
|
|
|
273
287
|
(0, decorators_1.cache)()
|
|
274
288
|
], DoctorService.prototype, "$jsonFileSettingsService", null);
|
|
275
289
|
yok_1.injector.register("doctorService", DoctorService);
|
|
290
|
+
//# sourceMappingURL=doctor-service.js.map
|