nativescript 9.0.4-dev.1 → 9.0.4-dev.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 +11 -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
@@ -69,6 +69,9 @@ class AndroidVirtualDeviceService {
69
69
  get pathToEmulatorExecutable() {
70
70
  const emulatorExecutableName = "emulator";
71
71
  if (this.androidHome) {
72
+ // Check https://developer.android.com/studio/releases/sdk-tools.html (25.3.0)
73
+ // Since this version of SDK tools, the emulator is a separate package.
74
+ // However the emulator executable still exists in the "tools" dir.
72
75
  const pathToEmulatorFromAndroidStudio = path.join(this.androidHome, emulatorExecutableName, emulatorExecutableName);
73
76
  const realFilePath = this.$hostInfo.isWindows
74
77
  ? `${pathToEmulatorFromAndroidStudio}.exe`
@@ -108,6 +111,17 @@ class AndroidVirtualDeviceService {
108
111
  client.on("data", (data) => {
109
112
  output += data.toString();
110
113
  const imageIdentifier = this.getImageIdentifierFromClientOutput(output);
114
+ // old output should look like:
115
+ // Android Console: type 'help' for a list of commands
116
+ // OK
117
+ // <Name of image>
118
+ // OK
119
+ // new output should look like:
120
+ // Android Console: type 'help' for a list of commands
121
+ // OK
122
+ // a\u001b[K\u001b[Dav\u001b[K\u001b[D\u001b[Davd\u001b...
123
+ // <Name of image>
124
+ // OK
111
125
  if (imageIdentifier && !isResolved) {
112
126
  this.mapEmulatorIdToImageIdentifier[emulatorId] = imageIdentifier;
113
127
  this.clearNetConnection(client, timer);
@@ -159,6 +173,8 @@ class AndroidVirtualDeviceService {
159
173
  if (this.pathToAvdManagerExecutable &&
160
174
  this.$fs.exists(this.pathToAvdManagerExecutable)) {
161
175
  if (process.env.JAVA_HOME) {
176
+ // In case JAVA_HOME is set, but it points to incorrect directory (i.e. there's no java in $JAVA_HOME/bin/java), avdmanager will fail
177
+ // no matter if you have correct java in PATH.
162
178
  canExecute = !!(await this.$sysInfo.getJavaVersionFromJavaHome());
163
179
  }
164
180
  else {
@@ -230,6 +246,13 @@ class AndroidVirtualDeviceService {
230
246
  const avdOutput = output.split(constants_1.AndroidVirtualDevice.AVAILABLE_AVDS_MESSAGE);
231
247
  const availableDevices = avdOutput && avdOutput[1] && avdOutput[1].trim();
232
248
  if (availableDevices) {
249
+ // In some cases `avdmanager list avds` command prints:
250
+ // `The following Android Virtual Devices could not be loaded:
251
+ // Name: Pixel_2_XL_API_28
252
+ // Path: /Users/<username>/.android/avd/Pixel_2_XL_API_28.avd
253
+ // Error: Google pixel_2_xl no longer exists as a device`
254
+ // These devices sometimes are valid so try to parse them.
255
+ // Also these devices are printed at the end of the output and are separated with 2 new lines from the valid devices output.
233
256
  const parts = availableDevices.split(/(?:\r?\n){2}/);
234
257
  const items = [parts[0], parts[1]].filter((item) => !!item);
235
258
  for (const item of items) {
@@ -246,6 +269,7 @@ class AndroidVirtualDeviceService {
246
269
  }
247
270
  getAvdManagerDeviceInfo(output) {
248
271
  const avdManagerDeviceInfo = Object.create(null);
272
+ // Split by `\n`, not EOL as the avdmanager and android executables print results with `\n` only even on Windows
249
273
  _.reduce(output.split("\n"), (result, row) => {
250
274
  const [key, value] = row.split(": ").map((part) => part.trim());
251
275
  switch (key) {
@@ -292,6 +316,7 @@ class AndroidVirtualDeviceService {
292
316
  };
293
317
  }
294
318
  getImageIdentifierFromClientOutput(output) {
319
+ // The lines should be trimmed after the split because the output has \r\n and when using split(EOL) on mac each line ends with \r.
295
320
  const lines = _.map(output.split(os_1.EOL), (line) => line.trim());
296
321
  const firstIndexOfOk = _.indexOf(lines, "OK");
297
322
  if (firstIndexOfOk < 0) {
@@ -340,3 +365,4 @@ __decorate([
340
365
  (0, decorators_1.cache)()
341
366
  ], AndroidVirtualDeviceService.prototype, "getConfigurationError", null);
342
367
  yok_1.injector.register("androidVirtualDeviceService", AndroidVirtualDeviceService);
368
+ //# sourceMappingURL=android-virtual-device-service.js.map
@@ -30,3 +30,4 @@ class DeviceAndroidDebugBridge extends android_debug_bridge_1.AndroidDebugBridge
30
30
  }
31
31
  }
32
32
  exports.DeviceAndroidDebugBridge = DeviceAndroidDebugBridge;
33
+ //# sourceMappingURL=device-android-debug-bridge.js.map
@@ -42,6 +42,7 @@ class AndroidGenymotionService {
42
42
  .map(async (row) => {
43
43
  const match = row.match(/^(.+?)\s+device$/);
44
44
  if (match && match[1]) {
45
+ // possible genymotion emulator
45
46
  const emulatorId = match[1];
46
47
  const result = (await this.isGenymotionEmulator(emulatorId))
47
48
  ? emulatorId
@@ -92,6 +93,7 @@ class AndroidGenymotionService {
92
93
  this.$emulatorHelper.setRunningAndroidEmulatorProperties(runningEmulatorId, runningEmulator);
93
94
  return runningEmulator;
94
95
  }
96
+ // https://wiki.appcelerator.org/display/guides2/Installing+Genymotion
95
97
  get playerSearchPaths() {
96
98
  return {
97
99
  darwin: [
@@ -133,13 +135,14 @@ class AndroidGenymotionService {
133
135
  vendor: constants_1.AndroidVirtualDevice.GENYMOTION_VENDOR_NAME,
134
136
  status: constants_1.NOT_RUNNING_EMULATOR_STATUS,
135
137
  errorHelp: [configurationError, error].filter((item) => !!item).join(os_1.EOL) || null,
136
- isTablet: false,
138
+ isTablet: false, //TODO: Consider how to populate this correctly when the device is not running
137
139
  type: constants_1.DeviceTypes.Emulator,
138
140
  connectionTypes: [constants_2.DeviceConnectionType.Local],
139
141
  platform: this.$devicePlatformsConstants.Android,
140
142
  };
141
143
  }
142
144
  getSdkVersion(output) {
145
+ // Example -> Name: android_version, value: 6.0.0, timestamp: 1530090506102029000, flags:
143
146
  const androidApiLevelRow = output
144
147
  .split("\n")
145
148
  .filter((row) => !!row)
@@ -165,6 +168,7 @@ In case you have installed Genymotion in a different location, please add the pa
165
168
  }
166
169
  async getConfigurationError() {
167
170
  const result = await this.$childProcess.trySpawnFromCloseEvent(this.pathToEmulatorExecutable, [], {}, { throwError: false });
171
+ // When player is spawned, it always prints message on stderr.
168
172
  if (result &&
169
173
  result.stderr &&
170
174
  result.stderr.indexOf(constants_1.AndroidVirtualDevice.GENYMOTION_DEFAULT_STDERR_STRING) === -1) {
@@ -182,3 +186,4 @@ __decorate([
182
186
  (0, decorators_1.cache)()
183
187
  ], AndroidGenymotionService.prototype, "getConfigurationError", null);
184
188
  yok_1.injector.register("androidGenymotionService", AndroidGenymotionService);
189
+ //# sourceMappingURL=genymotion-service.js.map
@@ -34,6 +34,7 @@ class VirtualBoxService {
34
34
  .split(os_1.EOL)
35
35
  .filter((row) => !!row)
36
36
  .map((row) => {
37
+ // Example row: "Google Nexus 4 - 5.0.0 - API 21 - 768x1280" {9d9beef2-cc60-4a54-bcc0-cc1dbf89811f}
37
38
  const [rawName, rawId] = row.split('" ');
38
39
  const id = rawId.substr(1, rawId.length - 2);
39
40
  const name = rawName.substr(1, rawName.length - 1);
@@ -70,6 +71,15 @@ class VirtualBoxService {
70
71
  if (this.$hostInfo.isWindows) {
71
72
  let searchPath = null;
72
73
  try {
74
+ /* This can be used as interface!!!!
75
+ arch:null
76
+ hive:"HKLM"
77
+ host:""
78
+ key:"\Software\Oracle\VirtualBox"
79
+ name:"InstallDir"
80
+ type:"REG_SZ"
81
+ value:"C:\Program Files\Oracle\VirtualBox\"
82
+ */
73
83
  const result = await (0, helpers_1.getWinRegPropertyValue)("\\Software\\Oracle\\VirtualBox", "InstallDir");
74
84
  searchPath = result && result.value ? result.value : null;
75
85
  }
@@ -102,3 +112,4 @@ __decorate([
102
112
  (0, decorators_1.cache)()
103
113
  ], VirtualBoxService.prototype, "getvBoxManagePath", null);
104
114
  yok_1.injector.register("virtualBoxService", VirtualBoxService);
115
+ //# sourceMappingURL=virtualbox-service.js.map
@@ -40,6 +40,7 @@ class LogcatHelper {
40
40
  }
41
41
  }
42
42
  catch (err) {
43
+ // Ignore the error, the process is dead.
43
44
  }
44
45
  });
45
46
  lineStream.on("data", (lineBuffer) => {
@@ -60,6 +61,7 @@ class LogcatHelper {
60
61
  return;
61
62
  const lines = (lineBuffer.toString() || "").split("\n");
62
63
  for (let line of lines) {
64
+ // 2024-06-26 16:43:22.286 630-659 ActivityManager system_server I Start proc 8854:org.nativescript.uitestsapp/u0a190 for next-top-activity {org.nativescript.uitestsapp/com.tns.NativeScriptActivity}
63
65
  const startProc = /Start proc (?<pid>[0-9]+):(?<appId>.+?)\//.exec(line);
64
66
  if (startProc &&
65
67
  ((_b = startProc.groups) === null || _b === void 0 ? void 0 : _b.appId) === options.appId &&
@@ -86,6 +88,9 @@ class LogcatHelper {
86
88
  lineStream.removeAllListeners();
87
89
  });
88
90
  }
91
+ /**
92
+ * Stops the logcat process for the specified device if keepSingleProcess is not passed on start
93
+ */
89
94
  stop(deviceIdentifier) {
90
95
  if (this.mapDevicesLoggingData[deviceIdentifier] &&
91
96
  !this.mapDevicesLoggingData[deviceIdentifier].keepSingleProcess) {
@@ -102,6 +107,9 @@ class LogcatHelper {
102
107
  (_e = loggingData.lineStream) === null || _e === void 0 ? void 0 : _e.removeAllListeners();
103
108
  delete this.mapDevicesLoggingData[deviceIdentifier];
104
109
  }
110
+ /**
111
+ * @deprecated - we likely don't need this anymore, and can simplify the code...
112
+ */
105
113
  async isLogcatPidSupported(deviceIdentifier) {
106
114
  const device = await this.$devicesService.getDevice(deviceIdentifier);
107
115
  const minAndroidWithLogcatPidSupport = "7.0.0";
@@ -111,6 +119,7 @@ class LogcatHelper {
111
119
  async getLogcatStream(deviceIdentifier, pid) {
112
120
  const isLogcatPidSupported = await this.isLogcatPidSupported(deviceIdentifier);
113
121
  const adb = this.$injector.resolve(device_android_debug_bridge_1.DeviceAndroidDebugBridge, { identifier: deviceIdentifier });
122
+ // -T 1 - shows only new logs after starting adb logcat
114
123
  const logcatCommand = ["logcat", "-T", "1"];
115
124
  const acceptedTags = [
116
125
  "chromium",
@@ -123,6 +132,7 @@ class LogcatHelper {
123
132
  if (pid && isLogcatPidSupported) {
124
133
  logcatCommand.push(`--pid=${pid}`);
125
134
  acceptedTags.forEach((tag) => {
135
+ // -s <tag> - shows only logs with the specified tag
126
136
  logcatCommand.push("-s", tag);
127
137
  });
128
138
  }
@@ -133,6 +143,8 @@ class LogcatHelper {
133
143
  }
134
144
  async getAppStartTrackingLogcatStream(deviceIdentifier, appId) {
135
145
  const adb = this.$injector.resolve(device_android_debug_bridge_1.DeviceAndroidDebugBridge, { identifier: deviceIdentifier });
146
+ // -b system - shows the system buffer/logs only
147
+ // -T 1 - shows only new logs after starting adb logcat
136
148
  const logcatCommand = [
137
149
  `logcat`,
138
150
  `-b`,
@@ -153,3 +165,4 @@ class LogcatHelper {
153
165
  }
154
166
  exports.LogcatHelper = LogcatHelper;
155
167
  yok_1.injector.register("logcatHelper", LogcatHelper);
168
+ //# sourceMappingURL=logcat-helper.js.map
@@ -36,6 +36,9 @@ class ApplicationManagerBase extends events_1.EventEmitter {
36
36
  if (!this.checkForApplicationUpdatesPromise) {
37
37
  this.checkForApplicationUpdatesPromise = new Promise(async (resolve, reject) => {
38
38
  let isFulfilled = false;
39
+ // As this method is called on 500ms, but it's execution may last much longer
40
+ // use locking, so the next executions will not get into the body, while the first one is still working.
41
+ // In case we do not break the next executions, we'll report each app as newly installed several times.
39
42
  try {
40
43
  const currentlyInstalledAppIdentifiers = await this.getInstalledApplications();
41
44
  const previouslyInstalledAppIdentifiers = this.lastInstalledAppIdentifiers || [];
@@ -80,6 +83,7 @@ class ApplicationManagerBase extends events_1.EventEmitter {
80
83
  _.each(notAvailableAppsForDebugging, (appInfo) => {
81
84
  this.emit("debuggableAppLost", appInfo);
82
85
  if (_.has(this.lastAvailableDebuggableAppViews, appInfo.appIdentifier)) {
86
+ // Prevent emitting debuggableViewLost when application cannot be debugged anymore.
83
87
  delete this.lastAvailableDebuggableAppViews[appInfo.appIdentifier];
84
88
  }
85
89
  });
@@ -98,6 +102,7 @@ class ApplicationManagerBase extends events_1.EventEmitter {
98
102
  _.each(newAvailableViews, (debugWebViewInfo) => {
99
103
  this.emit("debuggableViewFound", appIdentifier, debugWebViewInfo);
100
104
  });
105
+ // Determine which of the views had changed since last check and raise debuggableViewChanged event for them:
101
106
  const keptViews = _.differenceBy(currentlyAvailableViews, newAvailableViews, "id");
102
107
  _.each(keptViews, (view) => {
103
108
  const previousTimeViewInfo = _.find(previouslyAvailableViews, (previousView) => previousView.id === view.id);
@@ -111,3 +116,4 @@ class ApplicationManagerBase extends events_1.EventEmitter {
111
116
  }
112
117
  }
113
118
  exports.ApplicationManagerBase = ApplicationManagerBase;
119
+ //# sourceMappingURL=application-manager-base.js.map
@@ -15,7 +15,10 @@ class DeviceEmitter extends events_1.EventEmitter {
15
15
  this.$devicesService.on(constants_1.DeviceDiscoveryEventNames.DEVICE_FOUND, (device) => {
16
16
  this.emit(constants_1.DeviceDiscoveryEventNames.DEVICE_FOUND, device.deviceInfo);
17
17
  this.attachApplicationChangedHandlers(device);
18
+ // await: Do not await as this will require to mark the lambda with async keyword, but there's no way to await the lambda itself.
19
+ /* tslint:disable:no-floating-promises */
18
20
  device.openDeviceLogStream();
21
+ /* tslint:enable:no-floating-promises */
19
22
  });
20
23
  this.$devicesService.on(constants_1.DeviceDiscoveryEventNames.DEVICE_LOST, (device) => {
21
24
  this.emit(constants_1.DeviceDiscoveryEventNames.DEVICE_LOST, device.deviceInfo);
@@ -59,3 +62,4 @@ class DeviceEmitter extends events_1.EventEmitter {
59
62
  }
60
63
  exports.DeviceEmitter = DeviceEmitter;
61
64
  yok_1.injector.register("deviceEmitter", DeviceEmitter);
65
+ //# sourceMappingURL=device-emitter.js.map
@@ -38,3 +38,4 @@ class DeviceLogEmitter extends device_log_provider_base_1.DeviceLogProviderBase
38
38
  }
39
39
  exports.DeviceLogEmitter = DeviceLogEmitter;
40
40
  yok_1.injector.register("deviceLogProvider", DeviceLogEmitter);
41
+ //# sourceMappingURL=device-log-emitter.js.map
@@ -63,3 +63,4 @@ class DeviceLogProviderBase extends events_1.EventEmitter {
63
63
  }
64
64
  }
65
65
  exports.DeviceLogProviderBase = DeviceLogProviderBase;
66
+ //# sourceMappingURL=device-log-provider-base.js.map
@@ -35,6 +35,7 @@ class DeviceLogProvider extends device_log_provider_base_1.DeviceLogProviderBase
35
35
  this.colorPoolIndex = 0;
36
36
  }
37
37
  logData(lineText, platform, deviceIdentifier) {
38
+ // console.log(lineText)
38
39
  const loggingOptions = this.getDeviceLogOptionsForDevice(deviceIdentifier);
39
40
  let data = this.$logFilter.filterData(platform, lineText, loggingOptions);
40
41
  data = this.$logSourceMapService.replaceWithOriginalFileLocations(platform, data, loggingOptions);
@@ -52,6 +53,7 @@ class DeviceLogProvider extends device_log_provider_base_1.DeviceLogProviderBase
52
53
  return this.deviceColorMap.get(deviceIdentifier);
53
54
  }
54
55
  const color = this.colorPool[this.colorPoolIndex];
56
+ // wrap around if we have no more colors in the pool
55
57
  this.colorPoolIndex =
56
58
  this.colorPoolIndex === this.colorPool.length - 1
57
59
  ? 0
@@ -61,10 +63,13 @@ class DeviceLogProvider extends device_log_provider_base_1.DeviceLogProviderBase
61
63
  }
62
64
  logDataCore(data, deviceIdentifier) {
63
65
  var _a, _b, _c;
66
+ // todo: use config to set logger - --env.classicLogs is temporary!
64
67
  if ("classicLogs" in ((_a = this.$options.env) !== null && _a !== void 0 ? _a : {})) {
68
+ // legacy logging
65
69
  this.$logger.info(data, { [constants_2.LoggerConfigData.skipNewLine]: true });
66
70
  return;
67
71
  }
72
+ // todo: extract into an injectable printer/logger service
68
73
  let shouldPrepend = false;
69
74
  let splitIndexes = [];
70
75
  const lines = data
@@ -119,7 +124,25 @@ class DeviceLogProvider extends device_log_provider_base_1.DeviceLogProviderBase
119
124
  printLine(prefix, ...parts) {
120
125
  const fullLine = parts.join(" ");
121
126
  console.log(prefix, fullLine);
127
+ /**
128
+ * Note: Disabled
129
+ *
130
+ * This splits the output into lines that fit within the current
131
+ * terminal width, however this makes copying json objects that
132
+ * span across multiple lines difficult, as it introduces
133
+ * whitespace & line breaks
134
+ */
135
+ // const maxWidth = process.stdout.columns - 2;
136
+ // if (!maxWidth || maxWidth < 10 || fullLine.length < maxWidth) {
137
+ // console.log(prefix, fullLine);
138
+ // } else {
139
+ // for (let i = 0; i < fullLine.length; i += maxWidth) {
140
+ // const part = fullLine.substring(i, i + maxWidth);
141
+ // console.log(prefix, part);
142
+ // }
143
+ // }
122
144
  }
123
145
  }
124
146
  exports.DeviceLogProvider = DeviceLogProvider;
125
147
  yok_1.injector.register("deviceLogProvider", DeviceLogProvider);
148
+ //# sourceMappingURL=device-log-provider.js.map
@@ -20,3 +20,4 @@ class DevicePlatformsConstants {
20
20
  }
21
21
  exports.DevicePlatformsConstants = DevicePlatformsConstants;
22
22
  yok_1.injector.register("devicePlatformsConstants", DevicePlatformsConstants);
23
+ //# sourceMappingURL=device-platforms-constants.js.map
@@ -6,6 +6,7 @@ const _ = require("lodash");
6
6
  const yok_1 = require("../yok");
7
7
  class EmulatorHelper {
8
8
  constructor() {
9
+ // https://developer.android.com/guide/topics/manifest/uses-sdk-element
9
10
  this.mapAndroidApiLevelToVersion = {
10
11
  "android-36": "16.0.0",
11
12
  "android-35": "15.0.0",
@@ -80,7 +81,9 @@ class EmulatorHelper {
80
81
  emulator.identifier = emulatorId;
81
82
  emulator.status = constants_1.RUNNING_EMULATOR_STATUS;
82
83
  emulator.type = constants_1.DeviceTypes.Device;
84
+ //emulator.isTablet; // TODO: consider to do this here!!!
83
85
  }
84
86
  }
85
87
  exports.EmulatorHelper = EmulatorHelper;
86
88
  yok_1.injector.register("emulatorHelper", EmulatorHelper);
89
+ //# sourceMappingURL=emulator-helper.js.map
@@ -115,9 +115,11 @@ class IOSApplicationManager extends application_manager_base_1.ApplicationManage
115
115
  await this.device.openDeviceLogStream();
116
116
  }
117
117
  getDebuggableApps() {
118
+ // Implement when we can find debuggable applications for iOS.
118
119
  return Promise.resolve([]);
119
120
  }
120
121
  getDebuggableAppViews(appIdentifiers) {
122
+ // Implement when we can find debuggable applications for iOS.
121
123
  return Promise.resolve(null);
122
124
  }
123
125
  }
@@ -128,3 +130,4 @@ __decorate([
128
130
  __decorate([
129
131
  (0, decorators_1.cache)()
130
132
  ], IOSApplicationManager.prototype, "startDeviceLog", null);
133
+ //# sourceMappingURL=ios-application-manager.js.map
@@ -104,3 +104,4 @@ class IOSDeviceFileSystem {
104
104
  }
105
105
  exports.IOSDeviceFileSystem = IOSDeviceFileSystem;
106
106
  IOSDeviceFileSystem.AFC_DELETE_FILE_NOT_FOUND_ERROR = 8;
107
+ //# sourceMappingURL=ios-device-file-system.js.map
@@ -44,6 +44,7 @@ class IOSDeviceOperations extends events_1.EventEmitter {
44
44
  if (options && options.shouldReturnImmediateResult) {
45
45
  return;
46
46
  }
47
+ // We need this because we need to make sure that we have devices.
47
48
  await new Promise((resolve, reject) => {
48
49
  let iterationsCount = 0;
49
50
  const maxIterationsCount = 3;
@@ -125,6 +126,8 @@ class IOSDeviceOperations extends events_1.EventEmitter {
125
126
  return this.getMultipleResults(() => this.deviceLib.stop(stopArray), errorHandler);
126
127
  }
127
128
  dispose(signal) {
129
+ // We need to check if we should dispose the device lib.
130
+ // For example we do not want to dispose it when we start printing the device logs.
128
131
  if (this.shouldDispose && this.deviceLib) {
129
132
  this.deviceLib.removeAllListeners();
130
133
  this.deviceLib.dispose(signal);
@@ -195,3 +198,4 @@ __decorate([
195
198
  (0, decorators_1.cache)()
196
199
  ], IOSDeviceOperations.prototype, "attacheDeviceLogDataHandler", null);
197
200
  yok_1.injector.register("iosDeviceOperations", IOSDeviceOperations);
201
+ //# sourceMappingURL=ios-device-operations.js.map
@@ -106,6 +106,7 @@ class IOSDevice extends ios_device_base_1.IOSDeviceBase {
106
106
  const majorVersionAsString = productType.match(/.*?(\d+)\,(\d+)/)[1];
107
107
  const majorVersion = parseInt(majorVersionAsString);
108
108
  let isArm64Architecture = false;
109
+ //https://en.wikipedia.org/wiki/List_of_iOS_devices
109
110
  if (_.startsWith(productType, "iphone")) {
110
111
  isArm64Architecture = majorVersion >= 6;
111
112
  }
@@ -116,6 +117,7 @@ class IOSDevice extends ios_device_base_1.IOSDeviceBase {
116
117
  isArm64Architecture = majorVersion >= 7;
117
118
  }
118
119
  else if (_.startsWith(productType, "realitydevice")) {
120
+ // visionos
119
121
  isArm64Architecture = true;
120
122
  }
121
123
  activeArchitecture = isArm64Architecture ? "arm64" : "armv7";
@@ -125,6 +127,7 @@ class IOSDevice extends ios_device_base_1.IOSDeviceBase {
125
127
  getPlatform(productType) {
126
128
  productType = productType.toLowerCase().trim();
127
129
  if (_.startsWith(productType, "realitydevice")) {
130
+ // visionos
128
131
  return this.$devicePlatformsConstants.visionOS;
129
132
  }
130
133
  return this.$devicePlatformsConstants.iOS;
@@ -135,3 +138,4 @@ __decorate([
135
138
  (0, decorators_1.cache)()
136
139
  ], IOSDevice.prototype, "openDeviceLogStream", null);
137
140
  yok_1.injector.register("iOSDevice", IOSDevice);
141
+ //# sourceMappingURL=ios-device.js.map
@@ -83,3 +83,4 @@ exports.IOSDeviceBase = IOSDeviceBase;
83
83
  __decorate([
84
84
  (0, decorators_1.performanceLog)()
85
85
  ], IOSDeviceBase.prototype, "getDebugSocket", null);
86
+ //# sourceMappingURL=ios-device-base.js.map
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const yok_1 = require("../../yok");
4
4
  class IosDeviceProductNameMapper {
5
5
  constructor() {
6
+ // http://support.hockeyapp.net/kb/client-integration-ios-mac-os-x/ios-device-types
6
7
  this.map = {
7
8
  "iPhone1,1": "iPhone",
8
9
  "iPhone1,2": "iPhone 3G",
@@ -63,3 +64,4 @@ class IosDeviceProductNameMapper {
63
64
  }
64
65
  }
65
66
  yok_1.injector.register("iOSDeviceProductNameMapper", IosDeviceProductNameMapper);
67
+ //# sourceMappingURL=ios-device-product-name-mapper.js.map
@@ -22,3 +22,4 @@ class IOSLogFilter {
22
22
  }
23
23
  exports.IOSLogFilter = IOSLogFilter;
24
24
  yok_1.injector.register("iOSLogFilter", IOSLogFilter);
25
+ //# sourceMappingURL=ios-log-filter.js.map
@@ -18,6 +18,7 @@ class IosEmulatorServices {
18
18
  try {
19
19
  if (options.platform === this.$devicePlatformsConstants.visionOS &&
20
20
  !options.emulatorIdOrName) {
21
+ // find first available visionOS simulator (for now).
21
22
  const { devices } = await this.tryGetiOSSimDevices();
22
23
  options.emulatorIdOrName = (_a = devices.find((device) => device.platform === this.$devicePlatformsConstants.visionOS)) === null || _a === void 0 ? void 0 : _a.id;
23
24
  }
@@ -51,6 +52,8 @@ class IosEmulatorServices {
51
52
  }
52
53
  async connectToPort(data) {
53
54
  try {
55
+ // node v17+ resolves localhost to ::1 (ipv6) instead of 127.0.0.1 (ipv4)
56
+ // so we explicitly pass ipv4
54
57
  const socket = net.connect(data.port, "127.0.0.1");
55
58
  return socket;
56
59
  }
@@ -108,3 +111,4 @@ class IosEmulatorServices {
108
111
  }
109
112
  }
110
113
  yok_1.injector.register("iOSEmulatorServices", IosEmulatorServices);
114
+ //# sourceMappingURL=ios-emulator-services.js.map
@@ -21,3 +21,4 @@ exports.IOSSimResolver = IOSSimResolver;
21
21
  IOSSimResolver.iOSSimName = "ios-sim-portable";
22
22
  IOSSimResolver.iOSStandaloneExecutableName = "ios-sim-standalone.js";
23
23
  yok_1.injector.register("iOSSimResolver", IOSSimResolver);
24
+ //# sourceMappingURL=ios-sim-resolver.js.map
@@ -73,8 +73,13 @@ class IOSSimulatorApplicationManager extends application_manager_base_1.Applicat
73
73
  return [];
74
74
  }
75
75
  async getDebuggableAppViews(appIdentifiers) {
76
+ // Implement when we can find debuggable applications for iOS.
76
77
  return Promise.resolve(null);
77
78
  }
79
+ // iOS will kill the app if we freeze it in the NativeScript Runtime and wait for debug-brk.
80
+ // In order to avoid that, we are attaching lldb and passing it "process continue".
81
+ // In this way, iOS will not kill the app because it has a native debugger attached
82
+ // and the users will be able to attach a debug session using the debug-brk flag.
78
83
  attachNativeDebugger(appId, pid) {
79
84
  this._lldbProcesses[appId] = this.$childProcess.spawn("lldb", ["-p", pid]);
80
85
  if (log4js.levels.TRACE.isGreaterThanOrEqualTo(this.$logger.getLevel())) {
@@ -116,3 +121,4 @@ __decorate([
116
121
  __decorate([
117
122
  (0, decorators_1.cache)()
118
123
  ], IOSSimulatorApplicationManager.prototype, "startDeviceLog", null);
124
+ //# sourceMappingURL=ios-simulator-application-manager.js.map
@@ -65,11 +65,15 @@ class IOSSimulator extends ios_device_base_1.IOSDeviceBase {
65
65
  let socket;
66
66
  const attachRequestMessage = this.$iOSNotification.getAttachRequest(appId, this.deviceInfo.identifier);
67
67
  await this.$iOSEmulatorServices.postDarwinNotification(attachRequestMessage, this.deviceInfo.identifier);
68
+ // Retry posting the notification every five seconds, in case the AttachRequest
69
+ // event handler wasn't registered when the first one was sent
68
70
  const postNotificationRetryInterval = setInterval(() => {
69
71
  this.$iOSEmulatorServices
70
72
  .postDarwinNotification(attachRequestMessage, this.deviceInfo.identifier)
71
73
  .catch((e) => this.$logger.error(e));
72
74
  }, 5e3);
75
+ // the internal retry-mechanism of getDebuggerPort will ensure the above
76
+ // interval has a chance to execute multiple times
73
77
  const port = await super.getDebuggerPort(appId).finally(() => {
74
78
  clearInterval(postNotificationRetryInterval);
75
79
  });
@@ -88,3 +92,4 @@ exports.IOSSimulator = IOSSimulator;
88
92
  __decorate([
89
93
  (0, decorators_1.cache)()
90
94
  ], IOSSimulator.prototype, "openDeviceLogStream", null);
95
+ //# sourceMappingURL=ios-simulator-device.js.map
@@ -54,3 +54,4 @@ class IOSSimulatorFileSystem {
54
54
  }
55
55
  }
56
56
  exports.IOSSimulatorFileSystem = IOSSimulatorFileSystem;
57
+ //# sourceMappingURL=ios-simulator-file-system.js.map
@@ -56,3 +56,4 @@ class IOSSimulatorLogProvider extends events_1.EventEmitter {
56
56
  }
57
57
  exports.IOSSimulatorLogProvider = IOSSimulatorLogProvider;
58
58
  yok_1.injector.register("iOSSimulatorLogProvider", IOSSimulatorLogProvider);
59
+ //# sourceMappingURL=ios-simulator-log-provider.js.map
@@ -35,3 +35,4 @@ class LocalToDevicePathDataFactory {
35
35
  }
36
36
  exports.LocalToDevicePathDataFactory = LocalToDevicePathDataFactory;
37
37
  yok_1.injector.register("localToDevicePathDataFactory", LocalToDevicePathDataFactory);
38
+ //# sourceMappingURL=local-to-device-path-data-factory.js.map
@@ -24,6 +24,7 @@ class LogFilter {
24
24
  if (deviceLogFilter) {
25
25
  return deviceLogFilter.filterData(data, loggingOptions);
26
26
  }
27
+ // In case the platform is not valid, just return the data without filtering.
27
28
  return data;
28
29
  }
29
30
  getDeviceLogFilterInstance(platform) {
@@ -49,3 +50,4 @@ class LogFilter {
49
50
  }
50
51
  exports.LogFilter = LogFilter;
51
52
  yok_1.injector.register("logFilter", LogFilter);
53
+ //# sourceMappingURL=log-filter.js.map
@@ -10,3 +10,4 @@ class LoggingLevels {
10
10
  }
11
11
  exports.LoggingLevels = LoggingLevels;
12
12
  yok_1.injector.register("loggingLevels", LoggingLevels);
13
+ //# sourceMappingURL=logging-levels.js.map
@@ -38,6 +38,7 @@ class AndroidDeviceDiscovery extends device_discovery_1.DeviceDiscovery {
38
38
  }
39
39
  async checkCurrentData(result) {
40
40
  const currentDevices = result.map((element) => {
41
+ // http://developer.android.com/tools/help/adb.html#devicestatus
41
42
  const data = element.split("\t");
42
43
  const identifier = data[0];
43
44
  const status = data[1];
@@ -70,3 +71,4 @@ class AndroidDeviceDiscovery extends device_discovery_1.DeviceDiscovery {
70
71
  }
71
72
  exports.AndroidDeviceDiscovery = AndroidDeviceDiscovery;
72
73
  yok_1.injector.register("androidDeviceDiscovery", AndroidDeviceDiscovery);
74
+ //# sourceMappingURL=android-device-discovery.js.map
@@ -21,9 +21,11 @@ class AndroidEmulatorDiscovery extends events_1.EventEmitter {
21
21
  const availableEmulatorsOutput = await this.$androidEmulatorServices.getEmulatorImages();
22
22
  const currentEmulators = availableEmulatorsOutput.devices;
23
23
  const cachedEmulators = _.values(this._emulators);
24
+ // Remove old emulators
24
25
  const lostEmulators = _(cachedEmulators)
25
26
  .reject((e) => _.some(currentEmulators, (emulator) => emulator && e && emulator.imageIdentifier === e.imageIdentifier))
26
27
  .value();
28
+ // Add new emulators
27
29
  const foundEmulators = _(currentEmulators)
28
30
  .reject((e) => _.some(cachedEmulators, (emulator) => emulator && e && emulator.imageIdentifier === e.imageIdentifier))
29
31
  .value();
@@ -52,3 +54,4 @@ class AndroidEmulatorDiscovery extends events_1.EventEmitter {
52
54
  }
53
55
  exports.AndroidEmulatorDiscovery = AndroidEmulatorDiscovery;
54
56
  yok_1.injector.register("androidEmulatorDiscovery", AndroidEmulatorDiscovery);
57
+ //# sourceMappingURL=android-emulator-discovery.js.map