@akylas/nativescript-cli 8.7.2 → 8.8.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 (295) hide show
  1. package/config/test-deps-versions-generated.json +1 -1
  2. package/docs/man_pages/project/configuration/native/native-add-java.md +32 -0
  3. package/docs/man_pages/project/configuration/native/native-add-kotlin.md +34 -0
  4. package/docs/man_pages/project/configuration/native/native-add-objective-c.md +34 -0
  5. package/docs/man_pages/project/configuration/native/native-add-swift.md +32 -0
  6. package/docs/man_pages/project/configuration/native/native-add.md +31 -0
  7. package/docs/man_pages/project/configuration/native/native.md +31 -0
  8. package/lib/.d.ts +2 -0
  9. package/lib/android-tools-info.js +9 -20
  10. package/lib/base-package-manager.js +47 -64
  11. package/lib/bootstrap.js +8 -0
  12. package/lib/bun-package-manager.js +65 -88
  13. package/lib/color.js +2 -2
  14. package/lib/commands/add-platform.js +14 -30
  15. package/lib/commands/apple-login.js +18 -29
  16. package/lib/commands/appstore-list.js +34 -45
  17. package/lib/commands/appstore-upload.js +55 -68
  18. package/lib/commands/build.js +57 -86
  19. package/lib/commands/clean.js +161 -176
  20. package/lib/commands/command-base.js +14 -27
  21. package/lib/commands/config.js +51 -70
  22. package/lib/commands/create-project.js +210 -229
  23. package/lib/commands/debug.js +66 -88
  24. package/lib/commands/deploy.js +28 -44
  25. package/lib/commands/embedding/embed.js +72 -0
  26. package/lib/commands/extensibility/install-extension.js +5 -16
  27. package/lib/commands/extensibility/list-extensions.js +13 -24
  28. package/lib/commands/extensibility/uninstall-extension.js +4 -15
  29. package/lib/commands/fonts.js +30 -41
  30. package/lib/commands/generate-assets.js +13 -28
  31. package/lib/commands/generate-help.js +2 -13
  32. package/lib/commands/generate.js +17 -26
  33. package/lib/commands/info.js +2 -13
  34. package/lib/commands/install.js +34 -49
  35. package/lib/commands/list-platforms.js +14 -25
  36. package/lib/commands/migrate.js +15 -26
  37. package/lib/commands/native-add.js +277 -0
  38. package/lib/commands/platform-clean.js +19 -32
  39. package/lib/commands/plugin/add-plugin.js +12 -25
  40. package/lib/commands/plugin/build-plugin.js +34 -45
  41. package/lib/commands/plugin/create-plugin.js +110 -133
  42. package/lib/commands/plugin/list-plugins.js +22 -33
  43. package/lib/commands/plugin/remove-plugin.js +20 -33
  44. package/lib/commands/plugin/update-plugin.js +20 -33
  45. package/lib/commands/post-install.js +20 -33
  46. package/lib/commands/prepare.js +28 -35
  47. package/lib/commands/preview.js +49 -62
  48. package/lib/commands/remove-platform.js +7 -18
  49. package/lib/commands/resources/resources-update.js +13 -26
  50. package/lib/commands/run.js +55 -76
  51. package/lib/commands/start.js +6 -19
  52. package/lib/commands/test-init.js +123 -134
  53. package/lib/commands/test.js +66 -89
  54. package/lib/commands/typings.js +126 -142
  55. package/lib/commands/update-platform.js +22 -35
  56. package/lib/commands/update.js +30 -43
  57. package/lib/common/child-process.js +53 -72
  58. package/lib/common/codeGeneration/code-entity.js +1 -1
  59. package/lib/common/codeGeneration/code-printer.js +1 -1
  60. package/lib/common/command-params.js +7 -18
  61. package/lib/common/commands/analytics.js +27 -40
  62. package/lib/common/commands/autocompletion.js +39 -56
  63. package/lib/common/commands/device/device-log-stream.js +12 -23
  64. package/lib/common/commands/device/get-file.js +22 -33
  65. package/lib/common/commands/device/list-applications.js +12 -23
  66. package/lib/common/commands/device/list-devices.js +72 -87
  67. package/lib/common/commands/device/list-files.js +23 -34
  68. package/lib/common/commands/device/put-file.js +22 -33
  69. package/lib/common/commands/device/run-application.js +12 -25
  70. package/lib/common/commands/device/stop-application.js +11 -22
  71. package/lib/common/commands/device/uninstall-application.js +6 -17
  72. package/lib/common/commands/generate-messages.js +17 -28
  73. package/lib/common/commands/help.js +20 -33
  74. package/lib/common/commands/package-manager-get.js +6 -17
  75. package/lib/common/commands/package-manager-set.js +9 -20
  76. package/lib/common/commands/post-install.js +2 -13
  77. package/lib/common/commands/preuninstall.js +23 -38
  78. package/lib/common/commands/proxy/proxy-base.js +8 -19
  79. package/lib/common/commands/proxy/proxy-clear.js +4 -15
  80. package/lib/common/commands/proxy/proxy-get.js +3 -14
  81. package/lib/common/commands/proxy/proxy-set.js +87 -100
  82. package/lib/common/constants.js +11 -11
  83. package/lib/common/decorators.js +10 -22
  84. package/lib/common/dispatchers.js +79 -96
  85. package/lib/common/errors.js +89 -104
  86. package/lib/common/file-system.js +106 -127
  87. package/lib/common/header.js +1 -2
  88. package/lib/common/helpers.js +149 -178
  89. package/lib/common/host-info.js +37 -50
  90. package/lib/common/http-client.js +93 -108
  91. package/lib/common/logger/appenders/cli-appender.js +1 -2
  92. package/lib/common/logger/appenders/emit-appender.js +1 -2
  93. package/lib/common/logger/layouts/cli-layout.js +1 -2
  94. package/lib/common/logger/logger.js +1 -1
  95. package/lib/common/mobile/android/android-application-manager.js +121 -142
  96. package/lib/common/mobile/android/android-debug-bridge-result-handler.js +1 -1
  97. package/lib/common/mobile/android/android-debug-bridge.js +87 -112
  98. package/lib/common/mobile/android/android-device-file-system.js +98 -131
  99. package/lib/common/mobile/android/android-device-hash-service.js +50 -75
  100. package/lib/common/mobile/android/android-device.js +74 -91
  101. package/lib/common/mobile/android/android-emulator-services.js +105 -130
  102. package/lib/common/mobile/android/android-log-filter.js +1 -1
  103. package/lib/common/mobile/android/android-virtual-device-service.js +76 -94
  104. package/lib/common/mobile/android/device-android-debug-bridge.js +13 -29
  105. package/lib/common/mobile/android/genymotion/genymotion-service.js +91 -118
  106. package/lib/common/mobile/android/genymotion/virtualbox-service.js +64 -81
  107. package/lib/common/mobile/android/logcat-helper.js +108 -118
  108. package/lib/common/mobile/application-manager-base.js +84 -107
  109. package/lib/common/mobile/device-log-provider-base.js +7 -18
  110. package/lib/common/mobile/emulator-helper.js +1 -0
  111. package/lib/common/mobile/ios/device/ios-application-manager.js +79 -108
  112. package/lib/common/mobile/ios/device/ios-device-file-system.js +78 -105
  113. package/lib/common/mobile/ios/device/ios-device-operations.js +105 -142
  114. package/lib/common/mobile/ios/device/ios-device.js +20 -36
  115. package/lib/common/mobile/ios/ios-device-base.js +58 -81
  116. package/lib/common/mobile/ios/simulator/ios-emulator-services.js +63 -92
  117. package/lib/common/mobile/ios/simulator/ios-sim-resolver.js +1 -1
  118. package/lib/common/mobile/ios/simulator/ios-simulator-application-manager.js +60 -89
  119. package/lib/common/mobile/ios/simulator/ios-simulator-device.js +27 -43
  120. package/lib/common/mobile/ios/simulator/ios-simulator-file-system.js +37 -62
  121. package/lib/common/mobile/ios/simulator/ios-simulator-log-provider.js +24 -35
  122. package/lib/common/mobile/mobile-core/android-device-discovery.js +43 -62
  123. package/lib/common/mobile/mobile-core/android-emulator-discovery.js +21 -32
  124. package/lib/common/mobile/mobile-core/android-process-service.js +143 -182
  125. package/lib/common/mobile/mobile-core/device-discovery.js +2 -13
  126. package/lib/common/mobile/mobile-core/devices-service.js +385 -436
  127. package/lib/common/mobile/mobile-core/ios-device-discovery.js +24 -35
  128. package/lib/common/mobile/mobile-core/ios-simulator-discovery.js +47 -62
  129. package/lib/common/mobile/mobile-helper.js +15 -26
  130. package/lib/common/mobile/wp8/wp8-emulator-services.js +25 -52
  131. package/lib/common/opener.js +2 -2
  132. package/lib/common/plist-parser.js +2 -2
  133. package/lib/common/prompter.js +90 -105
  134. package/lib/common/queue.js +9 -20
  135. package/lib/common/services/auto-completion-service.js +39 -52
  136. package/lib/common/services/cancellation.js +17 -28
  137. package/lib/common/services/commands-service.js +146 -169
  138. package/lib/common/services/help-service.js +132 -157
  139. package/lib/common/services/hooks-service.js +93 -108
  140. package/lib/common/services/ios-notification-service.js +21 -34
  141. package/lib/common/services/json-file-settings-service.js +52 -71
  142. package/lib/common/services/lock-service.js +35 -52
  143. package/lib/common/services/message-contract-generator.js +35 -46
  144. package/lib/common/services/micro-templating-service.js +4 -15
  145. package/lib/common/services/net-service.js +90 -107
  146. package/lib/common/services/project-files-manager.js +10 -23
  147. package/lib/common/services/proxy-service.js +13 -24
  148. package/lib/common/services/qr.js +13 -24
  149. package/lib/common/services/settings-service.js +1 -1
  150. package/lib/common/services/xcode-select-service.js +20 -35
  151. package/lib/common/utils.js +7 -0
  152. package/lib/common/validators/project-name-validator.js +1 -1
  153. package/lib/common/validators/validation-result.js +1 -1
  154. package/lib/common/verify-node-version.js +2 -3
  155. package/lib/common/yok.js +23 -36
  156. package/lib/config.js +7 -58
  157. package/lib/constants.js +24 -24
  158. package/lib/controllers/build-controller.js +82 -99
  159. package/lib/controllers/debug-controller.js +107 -128
  160. package/lib/controllers/deploy-controller.js +17 -22
  161. package/lib/controllers/migrate-controller.js +727 -800
  162. package/lib/controllers/platform-controller.js +72 -83
  163. package/lib/controllers/prepare-controller.js +264 -250
  164. package/lib/controllers/run-controller.js +392 -406
  165. package/lib/controllers/update-controller-base.js +16 -29
  166. package/lib/controllers/update-controller.js +94 -119
  167. package/lib/data/build-data.js +2 -0
  168. package/lib/data/prepare-data.js +5 -1
  169. package/lib/declarations.d.ts +14 -3
  170. package/lib/definitions/android-plugin-migrator.d.ts +1 -0
  171. package/lib/definitions/ios-debugger-port-service.d.ts +1 -1
  172. package/lib/definitions/livesync.d.ts +1 -1
  173. package/lib/definitions/platform.d.ts +1 -0
  174. package/lib/definitions/prepare.d.ts +3 -0
  175. package/lib/definitions/project.d.ts +5 -0
  176. package/lib/detached-processes/cleanup-js-subprocess.js +3 -12
  177. package/lib/detached-processes/cleanup-process.js +16 -25
  178. package/lib/device-path-provider.js +23 -34
  179. package/lib/device-sockets/ios/app-debug-socket-proxy-factory.js +149 -164
  180. package/lib/device-sockets/ios/notification.js +1 -1
  181. package/lib/device-sockets/ios/socket-request-executor.js +24 -39
  182. package/lib/helpers/android-bundle-validator-helper.js +1 -1
  183. package/lib/helpers/deploy-command-helper.js +45 -49
  184. package/lib/helpers/key-command-helper.js +4 -13
  185. package/lib/helpers/livesync-command-helper.js +137 -152
  186. package/lib/helpers/network-connectivity-validator.js +6 -17
  187. package/lib/helpers/options-track-helper.js +6 -17
  188. package/lib/helpers/platform-command-helper.js +102 -114
  189. package/lib/key-commands/index.js +161 -211
  190. package/lib/nativescript-cli.js +5 -14
  191. package/lib/node-package-manager.js +81 -104
  192. package/lib/options.js +12 -14
  193. package/lib/package-installation-manager.js +130 -165
  194. package/lib/package-manager.js +63 -86
  195. package/lib/platform-command-param.js +4 -15
  196. package/lib/pnpm-package-manager.js +59 -78
  197. package/lib/project-data.js +5 -2
  198. package/lib/providers/project-files-provider.js +2 -2
  199. package/lib/services/analytics/analytics-broker-process.js +13 -22
  200. package/lib/services/analytics/analytics-broker.js +17 -30
  201. package/lib/services/analytics/analytics-service.js +161 -198
  202. package/lib/services/analytics/google-analytics-provider.js +41 -56
  203. package/lib/services/analytics-settings-service.js +15 -32
  204. package/lib/services/android/android-bundle-tool-service.js +43 -60
  205. package/lib/services/android/gradle-build-args-service.js +13 -23
  206. package/lib/services/android/gradle-build-service.js +34 -47
  207. package/lib/services/android/gradle-command-service.js +23 -32
  208. package/lib/services/android-device-debug-service.js +90 -117
  209. package/lib/services/android-plugin-build-service.js +233 -247
  210. package/lib/services/android-project-service.js +180 -219
  211. package/lib/services/android-resources-migration-service.js +51 -64
  212. package/lib/services/apple-portal/apple-portal-application-service.js +46 -63
  213. package/lib/services/apple-portal/apple-portal-session-service.js +171 -188
  214. package/lib/services/assets-generation/assets-generation-service.js +100 -113
  215. package/lib/services/build-artifacts-service.js +9 -20
  216. package/lib/services/build-info-file-service.js +20 -35
  217. package/lib/services/cleanup-service.js +47 -76
  218. package/lib/services/cocoapods-service.js +118 -133
  219. package/lib/services/device/device-install-app-service.js +73 -90
  220. package/lib/services/doctor-service.js +99 -118
  221. package/lib/services/extensibility-service.js +81 -100
  222. package/lib/services/files-hash-service.js +28 -44
  223. package/lib/services/hmr-status-service.js +1 -1
  224. package/lib/services/initialize-service.js +37 -50
  225. package/lib/services/ios/export-options-plist-service.js +38 -51
  226. package/lib/services/ios/ios-signing-service.js +161 -180
  227. package/lib/services/ios/spm-service.js +40 -53
  228. package/lib/services/ios/xcodebuild-args-service.js +77 -94
  229. package/lib/services/ios/xcodebuild-command-service.js +14 -25
  230. package/lib/services/ios/xcodebuild-service.js +50 -69
  231. package/lib/services/ios-debugger-port-service.js +23 -36
  232. package/lib/services/ios-device-debug-service.js +75 -102
  233. package/lib/services/ios-entitlements-service.js +31 -42
  234. package/lib/services/ios-extensions-service.js +18 -29
  235. package/lib/services/ios-project-service.js +418 -440
  236. package/lib/services/ios-provision-service.js +108 -129
  237. package/lib/services/ios-watch-app-service.js +21 -32
  238. package/lib/services/ip-service.js +38 -53
  239. package/lib/services/itmstransporter-service.js +129 -152
  240. package/lib/services/livesync/android-device-livesync-service-base.js +31 -48
  241. package/lib/services/livesync/android-device-livesync-service.js +120 -149
  242. package/lib/services/livesync/android-device-livesync-sockets-service.js +123 -155
  243. package/lib/services/livesync/android-livesync-service.js +16 -37
  244. package/lib/services/livesync/android-livesync-tool.js +89 -112
  245. package/lib/services/livesync/device-livesync-service-base.js +15 -28
  246. package/lib/services/livesync/ios-device-livesync-service.js +114 -143
  247. package/lib/services/livesync/ios-livesync-service.js +44 -60
  248. package/lib/services/livesync/platform-livesync-service-base.js +96 -120
  249. package/lib/services/log-parser-service.js +1 -1
  250. package/lib/services/log-source-map-service.js +33 -43
  251. package/lib/services/marking-mode-service.js +15 -28
  252. package/lib/services/npm-config-service.js +1 -1
  253. package/lib/services/pacote-service.js +49 -64
  254. package/lib/services/performance-service.js +1 -1
  255. package/lib/services/platform/add-platform-service.js +53 -69
  256. package/lib/services/platform/platform-validation-service.js +22 -33
  257. package/lib/services/platform/prepare-native-platform-service.js +50 -60
  258. package/lib/services/platform-environment-requirements.js +29 -38
  259. package/lib/services/plugins-service.js +128 -147
  260. package/lib/services/project-backup-service.js +1 -1
  261. package/lib/services/project-changes-service.js +129 -139
  262. package/lib/services/project-cleanup-service.js +64 -77
  263. package/lib/services/project-config-service.js +71 -80
  264. package/lib/services/project-data-service.js +116 -139
  265. package/lib/services/project-name-service.js +28 -43
  266. package/lib/services/project-service.js +84 -103
  267. package/lib/services/project-templates-service.js +52 -67
  268. package/lib/services/start-service.js +41 -59
  269. package/lib/services/temp-service.js +8 -21
  270. package/lib/services/terminal-spinner-service.js +13 -24
  271. package/lib/services/test-execution-service.js +59 -72
  272. package/lib/services/test-initialization-service.js +2 -2
  273. package/lib/services/timeline-profiler-service.js +1 -1
  274. package/lib/services/versions-service.js +119 -138
  275. package/lib/services/webpack/webpack-compiler-service.js +212 -224
  276. package/lib/services/xcconfig-service.js +8 -19
  277. package/lib/services/xcproj-service.js +12 -0
  278. package/lib/sys-info.js +45 -62
  279. package/lib/tools/node-modules/node-modules-builder.js +16 -27
  280. package/lib/yarn-package-manager.js +59 -78
  281. package/lib/yarn2-package-manager.js +60 -79
  282. package/package.json +59 -57
  283. package/vendor/aab-tool/README.txt +1 -1
  284. package/vendor/aab-tool/bundletool.jar +0 -0
  285. package/vendor/gradle-app/app/build.gradle +12 -4
  286. package/vendor/gradle-plugin/build.gradle +12 -4
  287. package/lib/common/resources/platform-tools/android/darwin/NOTICE.txt +0 -3407
  288. package/lib/common/resources/platform-tools/android/darwin/adb +0 -0
  289. package/lib/common/resources/platform-tools/android/linux/NOTICE.txt +0 -4451
  290. package/lib/common/resources/platform-tools/android/linux/adb +0 -0
  291. package/lib/common/resources/platform-tools/android/win32/AdbWinApi.dll +0 -0
  292. package/lib/common/resources/platform-tools/android/win32/AdbWinUsbApi.dll +0 -0
  293. package/lib/common/resources/platform-tools/android/win32/NOTICE.txt +0 -4451
  294. package/lib/common/resources/platform-tools/android/win32/adb.exe +0 -0
  295. package/lib/common/resources/platform-tools/android/win32/fastboot.exe +0 -0
@@ -5,15 +5,6 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
5
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
6
  return c > 3 && r && Object.defineProperty(target, key, r), r;
7
7
  };
8
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
9
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
10
- return new (P || (P = Promise))(function (resolve, reject) {
11
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
12
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
13
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
14
- step((generator = generator.apply(thisArg, _arguments || [])).next());
15
- });
16
- };
17
8
  Object.defineProperty(exports, "__esModule", { value: true });
18
9
  exports.WebpackCompilerService = void 0;
19
10
  const path = require("path");
@@ -41,187 +32,188 @@ class WebpackCompilerService extends events_1.EventEmitter {
41
32
  this.webpackProcesses = {};
42
33
  this.expectedHashes = {};
43
34
  }
44
- compileWithWatch(platformData, projectData, prepareData) {
45
- return __awaiter(this, void 0, void 0, function* () {
46
- return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
47
- if (this.webpackProcesses[platformData.platformNameLowerCase]) {
48
- resolve(void 0);
49
- return;
50
- }
51
- let isFirstWebpackWatchCompilation = true;
52
- prepareData.watch = true;
53
- try {
54
- const childProcess = yield this.startWebpackProcess(platformData, projectData, prepareData);
55
- childProcess.stdout.on("data", function (data) {
56
- process.stdout.write(data);
57
- });
58
- childProcess.stderr.on("data", function (data) {
59
- process.stderr.write(data);
60
- });
61
- childProcess.on("message", (message) => {
62
- this.$logger.trace("Message from webpack", message);
63
- if (typeof message === "object" &&
64
- "version" in message &&
65
- "type" in message) {
66
- if (isFirstWebpackWatchCompilation) {
67
- isFirstWebpackWatchCompilation = false;
68
- resolve(childProcess);
69
- return;
70
- }
71
- return this.handleHMRMessage(message, platformData, projectData, prepareData);
72
- }
73
- if (message === "Webpack compilation complete.") {
74
- this.$logger.info("Webpack build done!");
35
+ async compileWithWatch(platformData, projectData, prepareData) {
36
+ return new Promise(async (resolve, reject) => {
37
+ if (this.webpackProcesses[platformData.platformNameLowerCase]) {
38
+ resolve(void 0);
39
+ return;
40
+ }
41
+ let isFirstWebpackWatchCompilation = true;
42
+ prepareData.watch = true;
43
+ try {
44
+ const childProcess = await this.startWebpackProcess(platformData, projectData, prepareData);
45
+ childProcess.stdout.on("data", function (data) {
46
+ process.stdout.write(data);
47
+ });
48
+ childProcess.stderr.on("data", function (data) {
49
+ process.stderr.write(data);
50
+ });
51
+ childProcess.on("message", (message) => {
52
+ this.$logger.trace("Message from webpack", message);
53
+ if (typeof message === "object" &&
54
+ "version" in message &&
55
+ "type" in message) {
56
+ if (isFirstWebpackWatchCompilation) {
57
+ isFirstWebpackWatchCompilation = false;
75
58
  resolve(childProcess);
59
+ return;
76
60
  }
77
- message = message;
78
- if (message.emittedFiles) {
79
- if (isFirstWebpackWatchCompilation) {
80
- isFirstWebpackWatchCompilation = false;
81
- this.expectedHashes[platformData.platformNameLowerCase] =
82
- prepareData.hmr ? message.hash : "";
83
- return;
84
- }
85
- const previousHash = this.expectedHashes[platformData.platformNameLowerCase];
86
- let result;
87
- if (prepareData.hmr) {
88
- result = this.getUpdatedEmittedFiles(message.emittedFiles, message.chunkFiles, message.hash, platformData.platformNameLowerCase);
89
- }
90
- else {
91
- result = {
92
- emittedFiles: message.emittedFiles,
93
- fallbackFiles: [],
94
- hash: "",
95
- };
96
- }
97
- const files = result.emittedFiles.map((file) => path.join(platformData.appDestinationDirectoryPath, "app", file));
98
- const fallbackFiles = result.fallbackFiles.map((file) => path.join(platformData.appDestinationDirectoryPath, "app", file));
99
- const data = {
100
- files,
101
- hasOnlyHotUpdateFiles: files.every((f) => f.indexOf("hot-update") > -1),
102
- hmrData: {
103
- hash: result.hash,
104
- fallbackFiles,
105
- },
106
- platform: platformData.platformNameLowerCase,
107
- };
108
- this.$logger.trace("Generated data from webpack message:", data);
109
- if (data.hasOnlyHotUpdateFiles && previousHash === message.hash) {
110
- return;
111
- }
112
- if (data.files.length) {
113
- this.emit(constants_1.WEBPACK_COMPILATION_COMPLETE, data);
114
- }
61
+ return this.handleHMRMessage(message, platformData, projectData, prepareData);
62
+ }
63
+ if (message === "Webpack compilation complete.") {
64
+ this.$logger.info("Webpack build done!");
65
+ resolve(childProcess);
66
+ }
67
+ message = message;
68
+ if (message.emittedFiles) {
69
+ if (isFirstWebpackWatchCompilation) {
70
+ isFirstWebpackWatchCompilation = false;
71
+ this.expectedHashes[platformData.platformNameLowerCase] =
72
+ prepareData.hmr ? message.hash : "";
73
+ return;
115
74
  }
116
- });
117
- childProcess.on("error", (err) => {
118
- this.$logger.trace(`Unable to start webpack process in watch mode. Error is: ${err}`);
119
- delete this.webpackProcesses[platformData.platformNameLowerCase];
120
- reject(err);
121
- });
122
- childProcess.on("close", (arg) => __awaiter(this, void 0, void 0, function* () {
123
- yield this.$cleanupService.removeKillProcess(childProcess.pid.toString());
124
- const exitCode = typeof arg === "number" ? arg : arg && arg.code;
125
- this.$logger.trace(`Webpack process exited with code ${exitCode} when we expected it to be long living with watch.`);
126
- const error = new Error(`Executing webpack failed with exit code ${exitCode}.`);
127
- error.code = exitCode;
128
- delete this.webpackProcesses[platformData.platformNameLowerCase];
129
- reject(error);
130
- }));
131
- }
132
- catch (err) {
133
- reject(err);
134
- }
135
- }));
136
- });
137
- }
138
- compileWithoutWatch(platformData, projectData, prepareData) {
139
- return __awaiter(this, void 0, void 0, function* () {
140
- return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
141
- if (this.webpackProcesses[platformData.platformNameLowerCase]) {
142
- resolve();
143
- return;
144
- }
145
- try {
146
- const childProcess = yield this.startWebpackProcess(platformData, projectData, prepareData);
147
- childProcess.on("error", (err) => {
148
- this.$logger.trace(`Unable to start webpack process in non-watch mode. Error is: ${err}`);
149
- delete this.webpackProcesses[platformData.platformNameLowerCase];
150
- reject(err);
151
- });
152
- childProcess.on("close", (arg) => __awaiter(this, void 0, void 0, function* () {
153
- yield this.$cleanupService.removeKillProcess(childProcess.pid.toString());
154
- delete this.webpackProcesses[platformData.platformNameLowerCase];
155
- const exitCode = typeof arg === "number" ? arg : arg && arg.code;
156
- if (exitCode === 0) {
157
- resolve();
75
+ const previousHash = this.expectedHashes[platformData.platformNameLowerCase];
76
+ let result;
77
+ if (prepareData.hmr) {
78
+ result = this.getUpdatedEmittedFiles(message.emittedFiles, message.chunkFiles, message.hash, platformData.platformNameLowerCase);
158
79
  }
159
80
  else {
160
- const error = new Error(`Executing webpack failed with exit code ${exitCode}.`);
161
- error.code = exitCode;
162
- reject(error);
81
+ result = {
82
+ emittedFiles: message.emittedFiles,
83
+ fallbackFiles: [],
84
+ hash: "",
85
+ };
163
86
  }
164
- }));
165
- }
166
- catch (err) {
87
+ const files = result.emittedFiles.map((file) => path.join(platformData.appDestinationDirectoryPath, this.$options.hostProjectModuleName, file));
88
+ const fallbackFiles = result.fallbackFiles.map((file) => path.join(platformData.appDestinationDirectoryPath, this.$options.hostProjectModuleName, file));
89
+ const data = {
90
+ files,
91
+ hasOnlyHotUpdateFiles: files.every((f) => f.indexOf("hot-update") > -1),
92
+ hmrData: {
93
+ hash: result.hash,
94
+ fallbackFiles,
95
+ },
96
+ platform: platformData.platformNameLowerCase,
97
+ };
98
+ this.$logger.trace("Generated data from webpack message:", data);
99
+ if (data.hasOnlyHotUpdateFiles && previousHash === message.hash) {
100
+ return;
101
+ }
102
+ if (data.files.length) {
103
+ this.emit(constants_1.WEBPACK_COMPILATION_COMPLETE, data);
104
+ }
105
+ }
106
+ });
107
+ childProcess.on("error", (err) => {
108
+ this.$logger.trace(`Unable to start webpack process in watch mode. Error is: ${err}`);
109
+ delete this.webpackProcesses[platformData.platformNameLowerCase];
167
110
  reject(err);
168
- }
169
- }));
170
- });
171
- }
172
- stopWebpackCompiler(platform) {
173
- return __awaiter(this, void 0, void 0, function* () {
174
- if (platform) {
175
- yield this.stopWebpackForPlatform(platform);
111
+ });
112
+ childProcess.on("close", async (arg) => {
113
+ await this.$cleanupService.removeKillProcess(childProcess.pid.toString());
114
+ const exitCode = typeof arg === "number" ? arg : arg && arg.code;
115
+ this.$logger.trace(`Webpack process exited with code ${exitCode} when we expected it to be long living with watch.`);
116
+ const error = new Error(`Executing webpack failed with exit code ${exitCode}.`);
117
+ error.code = exitCode;
118
+ delete this.webpackProcesses[platformData.platformNameLowerCase];
119
+ reject(error);
120
+ });
176
121
  }
177
- else {
178
- const webpackedPlatforms = Object.keys(this.webpackProcesses);
179
- for (let i = 0; i < webpackedPlatforms.length; i++) {
180
- yield this.stopWebpackForPlatform(webpackedPlatforms[i]);
181
- }
122
+ catch (err) {
123
+ reject(err);
182
124
  }
183
125
  });
184
126
  }
185
- shouldUsePreserveSymlinksOption() {
186
- return __awaiter(this, void 0, void 0, function* () {
187
- const currentPackageManager = yield this.$packageManager.getPackageManagerName();
188
- const res = currentPackageManager !== constants_1.PackageManagers.pnpm;
189
- return res;
190
- });
191
- }
192
- startWebpackProcess(platformData, projectData, prepareData) {
193
- return __awaiter(this, void 0, void 0, function* () {
194
- if (!this.$fs.exists(projectData.webpackConfigPath)) {
195
- this.$errors.fail(`The webpack configuration file ${projectData.webpackConfigPath} does not exist. Ensure the file exists, or update the path in ${constants_1.CONFIG_FILE_NAME_DISPLAY}.`);
127
+ async compileWithoutWatch(platformData, projectData, prepareData) {
128
+ return new Promise(async (resolve, reject) => {
129
+ if (this.webpackProcesses[platformData.platformNameLowerCase]) {
130
+ resolve();
131
+ return;
196
132
  }
197
- const envData = this.buildEnvData(platformData.platformNameLowerCase, projectData, prepareData);
198
- const envParams = yield this.buildEnvCommandLineParams(envData, platformData, projectData, prepareData);
199
- const additionalNodeArgs = semver.major(process.version) <= 8 ? ["--harmony"] : [];
200
- if (yield this.shouldUsePreserveSymlinksOption()) {
201
- additionalNodeArgs.push("--preserve-symlinks");
133
+ try {
134
+ const childProcess = await this.startWebpackProcess(platformData, projectData, prepareData);
135
+ childProcess.on("error", (err) => {
136
+ this.$logger.trace(`Unable to start webpack process in non-watch mode. Error is: ${err}`);
137
+ delete this.webpackProcesses[platformData.platformNameLowerCase];
138
+ reject(err);
139
+ });
140
+ childProcess.on("close", async (arg) => {
141
+ await this.$cleanupService.removeKillProcess(childProcess.pid.toString());
142
+ delete this.webpackProcesses[platformData.platformNameLowerCase];
143
+ const exitCode = typeof arg === "number" ? arg : arg && arg.code;
144
+ if (exitCode === 0) {
145
+ resolve();
146
+ }
147
+ else {
148
+ const error = new Error(`Executing webpack failed with exit code ${exitCode}.`);
149
+ error.code = exitCode;
150
+ reject(error);
151
+ }
152
+ });
202
153
  }
203
- if (process.arch === "x64") {
204
- additionalNodeArgs.unshift("--max_old_space_size=4096");
154
+ catch (err) {
155
+ reject(err);
205
156
  }
206
- const args = [
207
- ...additionalNodeArgs,
208
- this.getWebpackExecutablePath(projectData),
209
- this.isWebpack5(projectData) ? `build` : null,
210
- `--config=${projectData.webpackConfigPath}`,
211
- ...envParams,
212
- ].filter(Boolean);
213
- if (prepareData.watch) {
214
- args.push("--watch");
157
+ });
158
+ }
159
+ async stopWebpackCompiler(platform) {
160
+ if (platform) {
161
+ await this.stopWebpackForPlatform(platform);
162
+ }
163
+ else {
164
+ const webpackedPlatforms = Object.keys(this.webpackProcesses);
165
+ for (let i = 0; i < webpackedPlatforms.length; i++) {
166
+ await this.stopWebpackForPlatform(webpackedPlatforms[i]);
215
167
  }
216
- const stdio = prepareData.watch ? ["ipc"] : "inherit";
217
- const childProcess = this.$childProcess.spawn(process.execPath, args, {
218
- cwd: projectData.projectDir,
219
- stdio,
168
+ }
169
+ }
170
+ async shouldUsePreserveSymlinksOption() {
171
+ const currentPackageManager = await this.$packageManager.getPackageManagerName();
172
+ const res = currentPackageManager !== constants_1.PackageManagers.pnpm;
173
+ return res;
174
+ }
175
+ async startWebpackProcess(platformData, projectData, prepareData) {
176
+ if (!this.$fs.exists(projectData.webpackConfigPath)) {
177
+ this.$errors.fail(`The webpack configuration file ${projectData.webpackConfigPath} does not exist. Ensure the file exists, or update the path in ${constants_1.CONFIG_FILE_NAME_DISPLAY}.`);
178
+ }
179
+ const envData = this.buildEnvData(platformData.platformNameLowerCase, projectData, prepareData);
180
+ const envParams = await this.buildEnvCommandLineParams(envData, platformData, projectData, prepareData);
181
+ const additionalNodeArgs = semver.major(process.version) <= 8 ? ["--harmony"] : [];
182
+ if (await this.shouldUsePreserveSymlinksOption()) {
183
+ additionalNodeArgs.push("--preserve-symlinks");
184
+ }
185
+ if (process.arch === "x64") {
186
+ additionalNodeArgs.unshift("--max_old_space_size=4096");
187
+ }
188
+ const args = [
189
+ ...additionalNodeArgs,
190
+ this.getWebpackExecutablePath(projectData),
191
+ this.isWebpack5(projectData) ? `build` : null,
192
+ `--config=${projectData.webpackConfigPath}`,
193
+ ...envParams,
194
+ ].filter(Boolean);
195
+ if (prepareData.watch) {
196
+ args.push("--watch");
197
+ }
198
+ const stdio = prepareData.watch ? ["ipc"] : "inherit";
199
+ const options = {
200
+ cwd: projectData.projectDir,
201
+ stdio,
202
+ };
203
+ options.env = {
204
+ NATIVESCRIPT_WEBPACK_ENV: JSON.stringify(envData)
205
+ };
206
+ if (this.$options.hostProjectPath) {
207
+ Object.assign(options.env, {
208
+ USER_PROJECT_PLATFORMS_ANDROID: this.$options.hostProjectPath,
209
+ USER_PROJECT_PLATFORMS_ANDROID_MODULE: this.$options.hostProjectModuleName,
210
+ USER_PROJECT_PLATFORMS_IOS: this.$options.hostProjectPath,
220
211
  });
221
- this.webpackProcesses[platformData.platformNameLowerCase] = childProcess;
222
- yield this.$cleanupService.addKillProcess(childProcess.pid.toString());
223
- return childProcess;
224
- });
212
+ }
213
+ const childProcess = this.$childProcess.spawn(process.execPath, args, options);
214
+ this.webpackProcesses[platformData.platformNameLowerCase] = childProcess;
215
+ await this.$cleanupService.addKillProcess(childProcess.pid.toString());
216
+ return childProcess;
225
217
  }
226
218
  buildEnvData(platform, projectData, prepareData) {
227
219
  var _a, _b, _c;
@@ -251,48 +243,46 @@ class WebpackCompilerService extends events_1.EventEmitter {
251
243
  }
252
244
  return envData;
253
245
  }
254
- buildEnvCommandLineParams(envData, platformData, projectData, prepareData) {
255
- return __awaiter(this, void 0, void 0, function* () {
256
- const envFlagNames = Object.keys(envData);
257
- const canSnapshot = prepareData.release &&
258
- this.$mobileHelper.isAndroidPlatform(platformData.normalizedPlatformName);
259
- if (envData && envData.snapshot) {
260
- if (!canSnapshot) {
261
- this.$logger.warn("Stripping the snapshot flag. " +
262
- "Bear in mind that snapshot is only available in Android release builds.");
263
- envFlagNames.splice(envFlagNames.indexOf("snapshot"), 1);
264
- }
265
- else if (this.$hostInfo.isWindows) {
266
- const minWebpackPluginWithWinSnapshotsVersion = "1.3.0";
267
- const installedWebpackPluginVersion = yield this.$packageInstallationManager.getInstalledDependencyVersion(constants_1.WEBPACK_PLUGIN_NAME, projectData.projectDir);
268
- const hasWebpackPluginWithWinSnapshotsSupport = !!installedWebpackPluginVersion
269
- ? semver.gte(semver.coerce(installedWebpackPluginVersion), minWebpackPluginWithWinSnapshotsVersion)
270
- : true;
271
- if (!hasWebpackPluginWithWinSnapshotsSupport) {
272
- this.$errors.fail(`In order to generate Snapshots on Windows, please upgrade your Webpack plugin version (npm i ${constants_1.WEBPACK_PLUGIN_NAME}@latest).`);
273
- }
274
- }
246
+ async buildEnvCommandLineParams(envData, platformData, projectData, prepareData) {
247
+ const envFlagNames = Object.keys(envData);
248
+ const canSnapshot = prepareData.release &&
249
+ this.$mobileHelper.isAndroidPlatform(platformData.normalizedPlatformName);
250
+ if (envData && envData.snapshot) {
251
+ if (!canSnapshot) {
252
+ this.$logger.warn("Stripping the snapshot flag. " +
253
+ "Bear in mind that snapshot is only available in Android release builds.");
254
+ envFlagNames.splice(envFlagNames.indexOf("snapshot"), 1);
275
255
  }
276
- const args = [];
277
- envFlagNames.map((item) => {
278
- let envValue = envData[item];
279
- if (typeof envValue === "undefined") {
280
- return;
256
+ else if (this.$hostInfo.isWindows) {
257
+ const minWebpackPluginWithWinSnapshotsVersion = "1.3.0";
258
+ const installedWebpackPluginVersion = await this.$packageInstallationManager.getInstalledDependencyVersion(constants_1.WEBPACK_PLUGIN_NAME, projectData.projectDir);
259
+ const hasWebpackPluginWithWinSnapshotsSupport = !!installedWebpackPluginVersion
260
+ ? semver.gte(semver.coerce(installedWebpackPluginVersion), minWebpackPluginWithWinSnapshotsVersion)
261
+ : true;
262
+ if (!hasWebpackPluginWithWinSnapshotsSupport) {
263
+ this.$errors.fail(`In order to generate Snapshots on Windows, please upgrade your Webpack plugin version (npm i ${constants_1.WEBPACK_PLUGIN_NAME}@latest).`);
281
264
  }
282
- if (typeof envValue === "boolean") {
283
- if (envValue) {
284
- args.push(`--env.${item}`);
285
- }
265
+ }
266
+ }
267
+ const args = [];
268
+ envFlagNames.map((item) => {
269
+ let envValue = envData[item];
270
+ if (typeof envValue === "undefined") {
271
+ return;
272
+ }
273
+ if (typeof envValue === "boolean") {
274
+ if (envValue) {
275
+ args.push(`--env.${item}`);
286
276
  }
287
- else {
288
- if (!Array.isArray(envValue)) {
289
- envValue = [envValue];
290
- }
291
- envValue.map((value) => args.push(`--env.${item}=${value}`));
277
+ }
278
+ else {
279
+ if (!Array.isArray(envValue)) {
280
+ envValue = [envValue];
292
281
  }
293
- });
294
- return args;
282
+ envValue.map((value) => args.push(`--env.${item}=${value}`));
283
+ }
295
284
  });
285
+ return args;
296
286
  }
297
287
  getUpdatedEmittedFiles(allEmittedFiles, chunkFiles, nextHash, platform) {
298
288
  const currentHash = this.getCurrentHotUpdateHash(allEmittedFiles);
@@ -321,16 +311,14 @@ class WebpackCompilerService extends events_1.EventEmitter {
321
311
  }
322
312
  return hotHash || "";
323
313
  }
324
- stopWebpackForPlatform(platform) {
325
- return __awaiter(this, void 0, void 0, function* () {
326
- this.$logger.trace(`Stopping webpack watch for platform ${platform}.`);
327
- const webpackProcess = this.webpackProcesses[platform];
328
- yield this.$cleanupService.removeKillProcess(webpackProcess.pid.toString());
329
- if (webpackProcess) {
330
- webpackProcess.kill("SIGINT");
331
- delete this.webpackProcesses[platform];
332
- }
333
- });
314
+ async stopWebpackForPlatform(platform) {
315
+ this.$logger.trace(`Stopping webpack watch for platform ${platform}.`);
316
+ const webpackProcess = this.webpackProcesses[platform];
317
+ await this.$cleanupService.removeKillProcess(webpackProcess.pid.toString());
318
+ if (webpackProcess) {
319
+ webpackProcess.kill("SIGINT");
320
+ delete this.webpackProcesses[platform];
321
+ }
334
322
  }
335
323
  handleHMRMessage(message, platformData, projectData, prepareData) {
336
324
  this.$logger.trace("Received message from webpack process:", message);
@@ -338,8 +326,8 @@ class WebpackCompilerService extends events_1.EventEmitter {
338
326
  return;
339
327
  }
340
328
  this.$logger.trace("Webpack build done!");
341
- const files = message.data.emittedAssets.map((asset) => path.join(platformData.appDestinationDirectoryPath, "app", asset));
342
- const staleFiles = message.data.staleAssets.map((asset) => path.join(platformData.appDestinationDirectoryPath, "app", asset));
329
+ const files = message.data.emittedAssets.map((asset) => path.join(platformData.appDestinationDirectoryPath, this.$options.hostProjectModuleName, asset));
330
+ const staleFiles = message.data.staleAssets.map((asset) => path.join(platformData.appDestinationDirectoryPath, this.$options.hostProjectModuleName, asset));
343
331
  const lastHash = (() => {
344
332
  const absoluteFileNameWithLastHash = files.find((fileName) => fileName.endsWith("hot-update.js"));
345
333
  if (!absoluteFileNameWithLastHash) {
@@ -398,8 +386,8 @@ class WebpackCompilerService extends events_1.EventEmitter {
398
386
  return false;
399
387
  }
400
388
  }
389
+ exports.WebpackCompilerService = WebpackCompilerService;
401
390
  __decorate([
402
391
  (0, decorators_1.performanceLog)()
403
392
  ], WebpackCompilerService.prototype, "startWebpackProcess", null);
404
- exports.WebpackCompilerService = WebpackCompilerService;
405
393
  yok_1.injector.register("webpackCompilerService", WebpackCompilerService);
@@ -1,13 +1,4 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
2
  Object.defineProperty(exports, "__esModule", { value: true });
12
3
  exports.XcconfigService = void 0;
13
4
  const path = require("path");
@@ -30,22 +21,20 @@ class XcconfigService {
30
21
  getPluginsReleaseXcconfigFilePath(projectRoot) {
31
22
  return path.join(projectRoot, "plugins-release.xcconfig");
32
23
  }
33
- mergeFiles(sourceFile, destinationFile) {
34
- return __awaiter(this, void 0, void 0, function* () {
35
- if (!this.$fs.exists(destinationFile)) {
36
- this.$fs.writeFile(destinationFile, "");
37
- }
38
- const escapedDestinationFile = destinationFile.replace(/'/g, "\\'");
39
- const escapedSourceFile = sourceFile.replace(/'/g, "\\'");
40
- const mergeScript = `require 'xcodeproj';
24
+ async mergeFiles(sourceFile, destinationFile) {
25
+ if (!this.$fs.exists(destinationFile)) {
26
+ this.$fs.writeFile(destinationFile, "");
27
+ }
28
+ const escapedDestinationFile = destinationFile.replace(/'/g, "\\'");
29
+ const escapedSourceFile = sourceFile.replace(/'/g, "\\'");
30
+ const mergeScript = `require 'xcodeproj';
41
31
  userConfig = Xcodeproj::Config.new('${escapedDestinationFile}')
42
32
  existingConfig = Xcodeproj::Config.new('${escapedSourceFile}')
43
33
  userConfig.attributes.each do |key,|
44
34
  existingConfig.attributes.delete(key) if (userConfig.attributes.key?(key) && existingConfig.attributes.key?(key))
45
35
  end
46
36
  userConfig.merge(existingConfig).save_as(Pathname.new('${escapedDestinationFile}'))`;
47
- yield this.$childProcess.exec(`ruby -e "${mergeScript}"`);
48
- });
37
+ await this.$childProcess.exec(`ruby -e "${mergeScript}"`);
49
38
  }
50
39
  readPropertyValue(xcconfigFilePath, propertyName) {
51
40
  if (this.$fs.exists(xcconfigFilePath)) {
@@ -1,11 +1,23 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const path = require("path");
4
+ const fs = require("fs");
4
5
  const constants_1 = require("../constants");
5
6
  const yok_1 = require("../common/yok");
6
7
  class XcprojService {
7
8
  getXcodeprojPath(projectData, projectRoot) {
8
9
  return path.join(projectRoot, projectData.projectName + constants_1.IosProjectConstants.XcodeProjExtName);
9
10
  }
11
+ findXcodeProject(dir) {
12
+ const filesAndDirs = fs.readdirSync(dir);
13
+ for (let i = 0; i < filesAndDirs.length; i++) {
14
+ const fullPath = path.join(dir, filesAndDirs[i]);
15
+ if (fs.statSync(fullPath).isDirectory() &&
16
+ filesAndDirs[i].endsWith(".xcodeproj")) {
17
+ return fullPath;
18
+ }
19
+ }
20
+ return null;
21
+ }
10
22
  }
11
23
  yok_1.injector.register("xcprojService", XcprojService);