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.
Files changed (329) hide show
  1. package/lib/android-tools-info.js +12 -0
  2. package/lib/base-package-manager.js +7 -0
  3. package/lib/bootstrap.js +5 -1
  4. package/lib/bun-package-manager.js +14 -1
  5. package/lib/color.js +4 -0
  6. package/lib/commands/add-platform.js +1 -0
  7. package/lib/commands/apple-login.js +1 -0
  8. package/lib/commands/appstore-list.js +1 -0
  9. package/lib/commands/appstore-upload.js +3 -0
  10. package/lib/commands/build.js +3 -2
  11. package/lib/commands/clean.js +22 -1
  12. package/lib/commands/command-base.js +1 -0
  13. package/lib/commands/config.js +5 -0
  14. package/lib/commands/create-project.js +6 -0
  15. package/lib/commands/debug.js +6 -1
  16. package/lib/commands/deploy.js +3 -2
  17. package/lib/commands/embedding/embed.js +7 -0
  18. package/lib/commands/extensibility/install-extension.js +1 -0
  19. package/lib/commands/extensibility/list-extensions.js +1 -0
  20. package/lib/commands/extensibility/uninstall-extension.js +1 -0
  21. package/lib/commands/fonts.js +1 -0
  22. package/lib/commands/generate-assets.js +1 -0
  23. package/lib/commands/generate-help.js +1 -0
  24. package/lib/commands/generate.js +48 -1
  25. package/lib/commands/hooks/common.js +2 -1
  26. package/lib/commands/hooks/hooks-lock.js +1 -0
  27. package/lib/commands/hooks/hooks.js +1 -0
  28. package/lib/commands/info.js +1 -0
  29. package/lib/commands/install.js +1 -0
  30. package/lib/commands/list-platforms.js +1 -0
  31. package/lib/commands/migrate.js +1 -0
  32. package/lib/commands/native-add.js +5 -0
  33. package/lib/commands/platform-clean.js +1 -0
  34. package/lib/commands/plugin/add-plugin.js +1 -0
  35. package/lib/commands/plugin/build-plugin.js +1 -0
  36. package/lib/commands/plugin/create-plugin.js +5 -0
  37. package/lib/commands/plugin/list-plugins.js +1 -0
  38. package/lib/commands/plugin/remove-plugin.js +2 -0
  39. package/lib/commands/plugin/update-plugin.js +1 -0
  40. package/lib/commands/post-install.js +6 -0
  41. package/lib/commands/prepare.js +4 -3
  42. package/lib/commands/preview.js +2 -0
  43. package/lib/commands/remove-platform.js +1 -0
  44. package/lib/commands/resources/resources-update.js +2 -0
  45. package/lib/commands/run.js +1 -0
  46. package/lib/commands/setup.js +1 -0
  47. package/lib/commands/start.js +1 -0
  48. package/lib/commands/test-init.js +4 -0
  49. package/lib/commands/test.js +9 -2
  50. package/lib/commands/typings.js +2 -1
  51. package/lib/commands/update-platform.js +5 -0
  52. package/lib/commands/update.js +2 -0
  53. package/lib/commands/widget.js +20 -1
  54. package/lib/common/bootstrap.js +1 -0
  55. package/lib/common/child-process.js +3 -0
  56. package/lib/common/codeGeneration/code-entity.js +1 -0
  57. package/lib/common/codeGeneration/code-printer.js +1 -0
  58. package/lib/common/command-params.js +1 -0
  59. package/lib/common/commands/analytics.js +3 -0
  60. package/lib/common/commands/autocompletion.js +3 -0
  61. package/lib/common/commands/device/device-log-stream.js +1 -0
  62. package/lib/common/commands/device/get-file.js +2 -0
  63. package/lib/common/commands/device/list-applications.js +1 -0
  64. package/lib/common/commands/device/list-devices.js +3 -0
  65. package/lib/common/commands/device/list-files.js +2 -0
  66. package/lib/common/commands/device/put-file.js +2 -0
  67. package/lib/common/commands/device/run-application.js +1 -0
  68. package/lib/common/commands/device/stop-application.js +1 -0
  69. package/lib/common/commands/device/uninstall-application.js +1 -0
  70. package/lib/common/commands/doctor.js +3 -2
  71. package/lib/common/commands/generate-messages.js +1 -0
  72. package/lib/common/commands/help.js +1 -0
  73. package/lib/common/commands/package-manager-get.js +1 -0
  74. package/lib/common/commands/package-manager-set.js +1 -0
  75. package/lib/common/commands/post-install.js +1 -0
  76. package/lib/common/commands/preuninstall.js +11 -2
  77. package/lib/common/commands/proxy/proxy-base.js +4 -0
  78. package/lib/common/commands/proxy/proxy-clear.js +1 -0
  79. package/lib/common/commands/proxy/proxy-get.js +1 -0
  80. package/lib/common/commands/proxy/proxy-set.js +1 -0
  81. package/lib/common/common-lib.js +1 -0
  82. package/lib/common/constants.js +11 -0
  83. package/lib/common/decorators.js +48 -0
  84. package/lib/common/dispatchers.js +10 -1
  85. package/lib/common/errors.js +13 -3
  86. package/lib/common/file-system.js +13 -2
  87. package/lib/common/header.js +3 -0
  88. package/lib/common/helpers.js +89 -3
  89. package/lib/common/host-info.js +4 -0
  90. package/lib/common/http-client.js +20 -0
  91. package/lib/common/logger/appenders/cli-appender.js +4 -0
  92. package/lib/common/logger/appenders/emit-appender.js +4 -0
  93. package/lib/common/logger/layouts/cli-layout.js +1 -0
  94. package/lib/common/logger/logger.js +5 -0
  95. package/lib/common/messages/messages.js +6 -0
  96. package/lib/common/mobile/android/android-application-manager.js +20 -1
  97. package/lib/common/mobile/android/android-debug-bridge-result-handler.js +1 -0
  98. package/lib/common/mobile/android/android-debug-bridge.js +6 -0
  99. package/lib/common/mobile/android/android-device-file-system.js +4 -0
  100. package/lib/common/mobile/android/android-device-hash-service.js +3 -0
  101. package/lib/common/mobile/android/android-device.js +8 -0
  102. package/lib/common/mobile/android/android-emulator-services.js +2 -1
  103. package/lib/common/mobile/android/android-ini-file-parser.js +9 -0
  104. package/lib/common/mobile/android/android-log-filter.js +4 -0
  105. package/lib/common/mobile/android/android-virtual-device-service.js +26 -0
  106. package/lib/common/mobile/android/device-android-debug-bridge.js +1 -0
  107. package/lib/common/mobile/android/genymotion/genymotion-service.js +6 -1
  108. package/lib/common/mobile/android/genymotion/virtualbox-service.js +11 -0
  109. package/lib/common/mobile/android/logcat-helper.js +13 -0
  110. package/lib/common/mobile/application-manager-base.js +6 -0
  111. package/lib/common/mobile/device-emitter.js +4 -0
  112. package/lib/common/mobile/device-log-emitter.js +1 -0
  113. package/lib/common/mobile/device-log-provider-base.js +1 -0
  114. package/lib/common/mobile/device-log-provider.js +23 -0
  115. package/lib/common/mobile/device-platforms-constants.js +1 -0
  116. package/lib/common/mobile/emulator-helper.js +3 -0
  117. package/lib/common/mobile/ios/device/ios-application-manager.js +3 -0
  118. package/lib/common/mobile/ios/device/ios-device-file-system.js +1 -0
  119. package/lib/common/mobile/ios/device/ios-device-operations.js +4 -0
  120. package/lib/common/mobile/ios/device/ios-device.js +4 -0
  121. package/lib/common/mobile/ios/ios-device-base.js +1 -0
  122. package/lib/common/mobile/ios/ios-device-product-name-mapper.js +2 -0
  123. package/lib/common/mobile/ios/ios-log-filter.js +1 -0
  124. package/lib/common/mobile/ios/simulator/ios-emulator-services.js +4 -0
  125. package/lib/common/mobile/ios/simulator/ios-sim-resolver.js +1 -0
  126. package/lib/common/mobile/ios/simulator/ios-simulator-application-manager.js +6 -0
  127. package/lib/common/mobile/ios/simulator/ios-simulator-device.js +5 -0
  128. package/lib/common/mobile/ios/simulator/ios-simulator-file-system.js +1 -0
  129. package/lib/common/mobile/ios/simulator/ios-simulator-log-provider.js +1 -0
  130. package/lib/common/mobile/local-to-device-path-data-factory.js +1 -0
  131. package/lib/common/mobile/log-filter.js +2 -0
  132. package/lib/common/mobile/logging-levels.js +1 -0
  133. package/lib/common/mobile/mobile-core/android-device-discovery.js +2 -0
  134. package/lib/common/mobile/mobile-core/android-emulator-discovery.js +3 -0
  135. package/lib/common/mobile/mobile-core/android-process-service.js +32 -0
  136. package/lib/common/mobile/mobile-core/device-discovery.js +1 -0
  137. package/lib/common/mobile/mobile-core/devices-service.js +69 -0
  138. package/lib/common/mobile/mobile-core/ios-device-discovery.js +2 -0
  139. package/lib/common/mobile/mobile-core/ios-simulator-discovery.js +3 -0
  140. package/lib/common/mobile/mobile-helper.js +1 -0
  141. package/lib/common/mobile/wp8/wp8-emulator-services.js +1 -0
  142. package/lib/common/opener.js +1 -0
  143. package/lib/common/os-info.js +1 -0
  144. package/lib/common/plist-parser.js +1 -0
  145. package/lib/common/project-helper.js +1 -0
  146. package/lib/common/prompter.js +9 -1
  147. package/lib/common/queue.js +1 -0
  148. package/lib/common/resource-loader.js +1 -0
  149. package/lib/common/services/auto-completion-service.js +13 -1
  150. package/lib/common/services/cancellation.js +2 -1
  151. package/lib/common/services/commands-service.js +17 -6
  152. package/lib/common/services/help-service.js +11 -3
  153. package/lib/common/services/hooks-service.js +13 -0
  154. package/lib/common/services/ios-notification-service.js +1 -0
  155. package/lib/common/services/json-file-settings-service.js +6 -0
  156. package/lib/common/services/lock-service.js +6 -0
  157. package/lib/common/services/message-contract-generator.js +1 -0
  158. package/lib/common/services/messages-service.js +1 -0
  159. package/lib/common/services/micro-templating-service.js +6 -0
  160. package/lib/common/services/net-service.js +3 -0
  161. package/lib/common/services/project-files-manager.js +5 -0
  162. package/lib/common/services/project-files-provider-base.js +1 -0
  163. package/lib/common/services/proxy-service.js +1 -0
  164. package/lib/common/services/qr.js +1 -0
  165. package/lib/common/services/settings-service.js +1 -0
  166. package/lib/common/services/xcode-select-service.js +1 -0
  167. package/lib/common/utils.js +1 -0
  168. package/lib/common/validators/project-name-validator.js +1 -0
  169. package/lib/common/validators/validation-result.js +1 -0
  170. package/lib/common/verify-node-version.js +8 -1
  171. package/lib/common/yok.js +32 -11
  172. package/lib/config.js +22 -1
  173. package/lib/constants-provider.js +1 -0
  174. package/lib/constants.js +53 -0
  175. package/lib/controllers/build-controller.js +4 -3
  176. package/lib/controllers/debug-controller.js +8 -3
  177. package/lib/controllers/deploy-controller.js +1 -0
  178. package/lib/controllers/migrate-controller.js +90 -4
  179. package/lib/controllers/platform-controller.js +9 -1
  180. package/lib/controllers/prepare-controller.js +17 -4
  181. package/lib/controllers/run-controller.js +17 -1
  182. package/lib/controllers/update-controller-base.js +1 -0
  183. package/lib/controllers/update-controller.js +11 -0
  184. package/lib/data/build-data.js +1 -0
  185. package/lib/data/controller-data-base.js +1 -0
  186. package/lib/data/debug-data.js +1 -0
  187. package/lib/data/platform-data.js +1 -0
  188. package/lib/data/prepare-data.js +1 -0
  189. package/lib/data/run-data.js +1 -0
  190. package/lib/detached-processes/cleanup-js-subprocess.js +8 -2
  191. package/lib/detached-processes/cleanup-process.js +18 -14
  192. package/lib/detached-processes/file-log-service.js +2 -1
  193. package/lib/device-path-provider.js +1 -0
  194. package/lib/device-sockets/ios/app-debug-socket-proxy-factory.js +7 -0
  195. package/lib/device-sockets/ios/notification.js +3 -0
  196. package/lib/device-sockets/ios/socket-request-executor.js +3 -0
  197. package/lib/helpers/android-bundle-validator-helper.js +2 -1
  198. package/lib/helpers/deploy-command-helper.js +1 -0
  199. package/lib/helpers/key-command-helper.js +4 -2
  200. package/lib/helpers/livesync-command-helper.js +4 -1
  201. package/lib/helpers/network-connectivity-validator.js +1 -0
  202. package/lib/helpers/options-track-helper.js +3 -2
  203. package/lib/helpers/package-path-helper.js +1 -0
  204. package/lib/helpers/platform-command-helper.js +7 -2
  205. package/lib/helpers/version-validator-helper.js +1 -0
  206. package/lib/key-commands/bootstrap.js +3 -2
  207. package/lib/key-commands/index.js +5 -4
  208. package/lib/nativescript-cli-lib-bootstrap.js +4 -0
  209. package/lib/nativescript-cli-lib.js +1 -0
  210. package/lib/nativescript-cli.js +11 -1
  211. package/lib/node/pbxproj-dom-xcode.js +1 -0
  212. package/lib/node/xcode.js +1 -0
  213. package/lib/node-package-manager.js +11 -1
  214. package/lib/options.js +144 -119
  215. package/lib/package-installation-manager.js +8 -1
  216. package/lib/package-manager.js +2 -0
  217. package/lib/platform-command-param.js +1 -0
  218. package/lib/pnpm-package-manager.js +4 -1
  219. package/lib/project-data.js +12 -0
  220. package/lib/providers/project-files-provider.js +1 -0
  221. package/lib/resolvers/livesync-service-resolver.js +1 -0
  222. package/lib/services/analytics/analytics-broker-process.js +10 -6
  223. package/lib/services/analytics/analytics-broker.js +2 -1
  224. package/lib/services/analytics/analytics-service.js +29 -25
  225. package/lib/services/analytics/google-analytics-provider.js +13 -12
  226. package/lib/services/analytics-settings-service.js +5 -0
  227. package/lib/services/android/android-bundle-tool-service.js +1 -0
  228. package/lib/services/android/gradle-build-args-service.js +3 -0
  229. package/lib/services/android/gradle-build-service.js +1 -0
  230. package/lib/services/android/gradle-command-service.js +1 -0
  231. package/lib/services/android-device-debug-service.js +6 -0
  232. package/lib/services/android-plugin-build-service.js +31 -2
  233. package/lib/services/android-project-service.js +71 -4
  234. package/lib/services/android-resources-migration-service.js +7 -0
  235. package/lib/services/apple-portal/apple-portal-application-service.js +1 -0
  236. package/lib/services/apple-portal/apple-portal-cookie-service.js +1 -0
  237. package/lib/services/apple-portal/apple-portal-session-service.js +6 -4
  238. package/lib/services/apple-portal/srp/srp-wrapper.js +4 -1
  239. package/lib/services/assets-generation/assets-generation-service.js +10 -5
  240. package/lib/services/build-artifacts-service.js +2 -1
  241. package/lib/services/build-data-service.js +1 -0
  242. package/lib/services/build-info-file-service.js +1 -0
  243. package/lib/services/bundler/bundler-compiler-service.js +68 -1
  244. package/lib/services/bundler/bundler.js +1 -0
  245. package/lib/services/cleanup-service.js +13 -9
  246. package/lib/services/cocoapods-platform-manager.js +9 -0
  247. package/lib/services/cocoapods-service.js +21 -1
  248. package/lib/services/debug-data-service.js +1 -0
  249. package/lib/services/debug-service-base.js +7 -0
  250. package/lib/services/device/device-install-app-service.js +2 -1
  251. package/lib/services/doctor-service.js +21 -6
  252. package/lib/services/extensibility-service.js +8 -0
  253. package/lib/services/files-hash-service.js +1 -0
  254. package/lib/services/hmr-status-service.js +2 -0
  255. package/lib/services/info-service.js +1 -0
  256. package/lib/services/initialize-service.js +5 -1
  257. package/lib/services/ios/export-options-plist-service.js +4 -0
  258. package/lib/services/ios/ios-signing-service.js +4 -0
  259. package/lib/services/ios/spm-service.js +18 -0
  260. package/lib/services/ios/xcodebuild-args-service.js +16 -0
  261. package/lib/services/ios/xcodebuild-command-service.js +1 -0
  262. package/lib/services/ios/xcodebuild-service.js +2 -1
  263. package/lib/services/ios-debugger-port-service.js +1 -0
  264. package/lib/services/ios-device-debug-service.js +1 -0
  265. package/lib/services/ios-entitlements-service.js +1 -0
  266. package/lib/services/ios-extensions-service.js +1 -0
  267. package/lib/services/ios-log-filter.js +20 -0
  268. package/lib/services/ios-native-target-service.js +6 -4
  269. package/lib/services/ios-project-service.js +100 -1
  270. package/lib/services/ios-provision-service.js +3 -0
  271. package/lib/services/ios-watch-app-service.js +1 -0
  272. package/lib/services/ip-service.js +2 -0
  273. package/lib/services/itmstransporter-service.js +1 -0
  274. package/lib/services/karma-execution.js +2 -0
  275. package/lib/services/livesync/android-device-livesync-service-base.js +1 -0
  276. package/lib/services/livesync/android-device-livesync-service.js +2 -0
  277. package/lib/services/livesync/android-device-livesync-sockets-service.js +3 -0
  278. package/lib/services/livesync/android-livesync-service.js +1 -0
  279. package/lib/services/livesync/android-livesync-tool.js +4 -0
  280. package/lib/services/livesync/device-livesync-service-base.js +2 -0
  281. package/lib/services/livesync/ios-device-livesync-service.js +7 -0
  282. package/lib/services/livesync/ios-livesync-service.js +2 -0
  283. package/lib/services/livesync/livesync-socket.js +1 -0
  284. package/lib/services/livesync/platform-livesync-service-base.js +5 -0
  285. package/lib/services/livesync-process-data-service.js +1 -0
  286. package/lib/services/log-parser-service.js +1 -0
  287. package/lib/services/log-source-map-service.js +15 -0
  288. package/lib/services/marking-mode-service.js +8 -5
  289. package/lib/services/metadata-filtering-service.js +1 -0
  290. package/lib/services/npm-config-service.js +4 -0
  291. package/lib/services/pacote-service.js +7 -0
  292. package/lib/services/performance-service.js +3 -1
  293. package/lib/services/platform/add-platform-service.js +49 -2
  294. package/lib/services/platform/platform-validation-service.js +1 -0
  295. package/lib/services/platform/prepare-native-platform-service.js +5 -2
  296. package/lib/services/platform-environment-requirements.js +8 -3
  297. package/lib/services/platform-project-service-base.js +1 -0
  298. package/lib/services/platforms-data-service.js +1 -0
  299. package/lib/services/plugins-service.js +20 -2
  300. package/lib/services/prepare-data-service.js +1 -0
  301. package/lib/services/project-backup-service.js +4 -0
  302. package/lib/services/project-changes-service.js +14 -3
  303. package/lib/services/project-cleanup-service.js +2 -0
  304. package/lib/services/project-config-service.js +21 -2
  305. package/lib/services/project-data-service.js +36 -7
  306. package/lib/services/project-name-service.js +1 -0
  307. package/lib/services/project-service.js +10 -0
  308. package/lib/services/project-templates-service.js +3 -2
  309. package/lib/services/qr-code-terminal-service.js +1 -0
  310. package/lib/services/require-service.js +1 -0
  311. package/lib/services/start-service.js +1 -0
  312. package/lib/services/temp-service.js +3 -0
  313. package/lib/services/terminal-spinner-service.js +2 -0
  314. package/lib/services/test-execution-service.js +9 -2
  315. package/lib/services/test-initialization-service.js +4 -0
  316. package/lib/services/timeline-profiler-service.js +1 -0
  317. package/lib/services/user-settings-service.js +1 -0
  318. package/lib/services/versions-service.js +6 -4
  319. package/lib/services/watch-ignore-list-service.js +1 -0
  320. package/lib/services/xcconfig-service.js +2 -0
  321. package/lib/services/xcproj-service.js +1 -0
  322. package/lib/shared-event-bus.js +6 -0
  323. package/lib/sys-info.js +2 -1
  324. package/lib/tools/config-manipulation/config-transformer.js +12 -0
  325. package/lib/tools/node-modules/node-modules-builder.js +1 -0
  326. package/lib/tools/node-modules/node-modules-dependencies-builder.js +6 -0
  327. package/lib/yarn-package-manager.js +1 -0
  328. package/lib/yarn2-package-manager.js +3 -0
  329. 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, $projectConfigService) {
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
@@ -1,2 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=bundler.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
@@ -19,3 +19,4 @@ class DebugDataService {
19
19
  }
20
20
  exports.DebugDataService = DebugDataService;
21
21
  yok_1.injector.register("debugDataService", DebugDataService);
22
+ //# sourceMappingURL=debug-data-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