@akylas/nativescript-cli 8.7.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 (531) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +385 -0
  3. package/bin/nativescript +3 -0
  4. package/bin/nativescript.js +3 -0
  5. package/bin/ns +3 -0
  6. package/bin/nsc +3 -0
  7. package/bin/nsc.js +3 -0
  8. package/bin/tns +12 -0
  9. package/bin/tns.cmd +1 -0
  10. package/config/config.json +8 -0
  11. package/config/test-dependencies.json +58 -0
  12. package/config/test-deps-versions-generated.json +1 -0
  13. package/docs/build-jekyll-md.sh +7 -0
  14. package/docs/helpers/favicon.ico +0 -0
  15. package/docs/helpers/logo.png +0 -0
  16. package/docs/man_pages/cloud/cloud-setup.md +29 -0
  17. package/docs/man_pages/device/device-android.md +32 -0
  18. package/docs/man_pages/device/device-ios.md +40 -0
  19. package/docs/man_pages/device/device-list-applications.md +37 -0
  20. package/docs/man_pages/device/device-log.md +37 -0
  21. package/docs/man_pages/device/device-run.md +55 -0
  22. package/docs/man_pages/device/device.md +46 -0
  23. package/docs/man_pages/env-configuration/setup.md +22 -0
  24. package/docs/man_pages/general/autocomplete-disable.md +37 -0
  25. package/docs/man_pages/general/autocomplete-enable.md +37 -0
  26. package/docs/man_pages/general/autocomplete-status.md +35 -0
  27. package/docs/man_pages/general/autocomplete.md +46 -0
  28. package/docs/man_pages/general/clean.md +22 -0
  29. package/docs/man_pages/general/doctor.md +33 -0
  30. package/docs/man_pages/general/error-reporting.md +41 -0
  31. package/docs/man_pages/general/extension-install.md +45 -0
  32. package/docs/man_pages/general/extension-uninstall.md +41 -0
  33. package/docs/man_pages/general/extension.md +35 -0
  34. package/docs/man_pages/general/help.md +39 -0
  35. package/docs/man_pages/general/info.md +33 -0
  36. package/docs/man_pages/general/migrate.md +79 -0
  37. package/docs/man_pages/general/package-manager-get.md +26 -0
  38. package/docs/man_pages/general/package-manager-set.md +29 -0
  39. package/docs/man_pages/general/package-manager.md +25 -0
  40. package/docs/man_pages/general/proxy-clear.md +26 -0
  41. package/docs/man_pages/general/proxy-set.md +45 -0
  42. package/docs/man_pages/general/proxy.md +31 -0
  43. package/docs/man_pages/general/update.md +40 -0
  44. package/docs/man_pages/general/usage-reporting.md +41 -0
  45. package/docs/man_pages/index.html +3 -0
  46. package/docs/man_pages/lib-management/plugin-add.md +42 -0
  47. package/docs/man_pages/lib-management/plugin-build.md +32 -0
  48. package/docs/man_pages/lib-management/plugin-create.md +48 -0
  49. package/docs/man_pages/lib-management/plugin-install.md +42 -0
  50. package/docs/man_pages/lib-management/plugin-remove.md +31 -0
  51. package/docs/man_pages/lib-management/plugin-update.md +41 -0
  52. package/docs/man_pages/lib-management/plugin.md +39 -0
  53. package/docs/man_pages/project/configuration/generate.md +36 -0
  54. package/docs/man_pages/project/configuration/install.md +43 -0
  55. package/docs/man_pages/project/configuration/open-android.md +27 -0
  56. package/docs/man_pages/project/configuration/open-ios.md +31 -0
  57. package/docs/man_pages/project/configuration/open.md +36 -0
  58. package/docs/man_pages/project/configuration/platform-add.md +46 -0
  59. package/docs/man_pages/project/configuration/platform-clean.md +41 -0
  60. package/docs/man_pages/project/configuration/platform-remove.md +41 -0
  61. package/docs/man_pages/project/configuration/platform-update.md +45 -0
  62. package/docs/man_pages/project/configuration/platform.md +29 -0
  63. package/docs/man_pages/project/configuration/prepare.md +49 -0
  64. package/docs/man_pages/project/configuration/resources/resources-generate-icons.md +39 -0
  65. package/docs/man_pages/project/configuration/resources/resources-generate-splashes.md +39 -0
  66. package/docs/man_pages/project/configuration/resources/resources-update.md +35 -0
  67. package/docs/man_pages/project/configuration/resources/resources.md +14 -0
  68. package/docs/man_pages/project/creation/create.md +64 -0
  69. package/docs/man_pages/project/testing/build-android.md +62 -0
  70. package/docs/man_pages/project/testing/build-ios.md +65 -0
  71. package/docs/man_pages/project/testing/build.md +66 -0
  72. package/docs/man_pages/project/testing/debug-android.md +64 -0
  73. package/docs/man_pages/project/testing/debug-ios.md +65 -0
  74. package/docs/man_pages/project/testing/debug.md +67 -0
  75. package/docs/man_pages/project/testing/deploy.md +72 -0
  76. package/docs/man_pages/project/testing/dev-test-android.md +31 -0
  77. package/docs/man_pages/project/testing/dev-test-ios.md +36 -0
  78. package/docs/man_pages/project/testing/preview.md +35 -0
  79. package/docs/man_pages/project/testing/run-android.md +79 -0
  80. package/docs/man_pages/project/testing/run-ios.md +83 -0
  81. package/docs/man_pages/project/testing/run.md +92 -0
  82. package/docs/man_pages/project/testing/test-android.md +46 -0
  83. package/docs/man_pages/project/testing/test-init.md +34 -0
  84. package/docs/man_pages/project/testing/test-ios.md +48 -0
  85. package/docs/man_pages/project/testing/test.md +48 -0
  86. package/docs/man_pages/project/testing/typings.md +52 -0
  87. package/docs/man_pages/publishing/apple-login.md +35 -0
  88. package/docs/man_pages/publishing/appstore-upload.md +52 -0
  89. package/docs/man_pages/publishing/appstore.md +42 -0
  90. package/docs/man_pages/publishing/publish-ios.md +55 -0
  91. package/docs/man_pages/publishing/publish.md +38 -0
  92. package/docs/man_pages/start.md +81 -0
  93. package/lib/.d.ts +494 -0
  94. package/lib/android-tools-info.js +135 -0
  95. package/lib/base-package-manager.js +129 -0
  96. package/lib/bash-scripts/terminateProcess.sh +12 -0
  97. package/lib/bootstrap.js +203 -0
  98. package/lib/bun-package-manager.js +135 -0
  99. package/lib/color.js +10 -0
  100. package/lib/commands/add-platform.js +49 -0
  101. package/lib/commands/apple-login.js +52 -0
  102. package/lib/commands/appstore-list.js +75 -0
  103. package/lib/commands/appstore-upload.js +106 -0
  104. package/lib/commands/build.js +161 -0
  105. package/lib/commands/clean.js +253 -0
  106. package/lib/commands/command-base.js +46 -0
  107. package/lib/commands/config.js +135 -0
  108. package/lib/commands/create-project.js +431 -0
  109. package/lib/commands/debug.js +191 -0
  110. package/lib/commands/deploy.js +78 -0
  111. package/lib/commands/extensibility/install-extension.js +33 -0
  112. package/lib/commands/extensibility/list-extensions.js +40 -0
  113. package/lib/commands/extensibility/uninstall-extension.js +32 -0
  114. package/lib/commands/fonts.js +64 -0
  115. package/lib/commands/generate-assets.js +71 -0
  116. package/lib/commands/generate-help.js +26 -0
  117. package/lib/commands/generate.js +78 -0
  118. package/lib/commands/info.js +26 -0
  119. package/lib/commands/install.js +80 -0
  120. package/lib/commands/list-platforms.js +45 -0
  121. package/lib/commands/migrate.js +44 -0
  122. package/lib/commands/platform-clean.js +54 -0
  123. package/lib/commands/plugin/add-plugin.js +43 -0
  124. package/lib/commands/plugin/build-plugin.js +70 -0
  125. package/lib/commands/plugin/create-plugin.js +175 -0
  126. package/lib/commands/plugin/list-plugins.js +54 -0
  127. package/lib/commands/plugin/remove-plugin.js +52 -0
  128. package/lib/commands/plugin/update-plugin.js +52 -0
  129. package/lib/commands/post-install.js +57 -0
  130. package/lib/commands/prepare.js +63 -0
  131. package/lib/commands/preview.js +93 -0
  132. package/lib/commands/remove-platform.js +40 -0
  133. package/lib/commands/resources/resources-update.js +45 -0
  134. package/lib/commands/run.js +177 -0
  135. package/lib/commands/setup.js +15 -0
  136. package/lib/commands/start.js +33 -0
  137. package/lib/commands/test-init.js +167 -0
  138. package/lib/commands/test.js +146 -0
  139. package/lib/commands/typings.js +180 -0
  140. package/lib/commands/update-platform.js +57 -0
  141. package/lib/commands/update.js +70 -0
  142. package/lib/common/LICENSE +201 -0
  143. package/lib/common/README.md +1084 -0
  144. package/lib/common/bin/common-lib.js +5 -0
  145. package/lib/common/bootstrap.js +97 -0
  146. package/lib/common/child-process.js +217 -0
  147. package/lib/common/codeGeneration/code-entity.js +47 -0
  148. package/lib/common/codeGeneration/code-generation.d.ts +47 -0
  149. package/lib/common/codeGeneration/code-printer.js +48 -0
  150. package/lib/common/command-params.js +45 -0
  151. package/lib/common/commands/analytics.js +81 -0
  152. package/lib/common/commands/autocompletion.js +110 -0
  153. package/lib/common/commands/device/device-log-stream.js +44 -0
  154. package/lib/common/commands/device/get-file.js +54 -0
  155. package/lib/common/commands/device/list-applications.js +42 -0
  156. package/lib/common/commands/device/list-devices.js +150 -0
  157. package/lib/common/commands/device/list-files.js +55 -0
  158. package/lib/common/commands/device/put-file.js +55 -0
  159. package/lib/common/commands/device/run-application.js +46 -0
  160. package/lib/common/commands/device/stop-application.js +42 -0
  161. package/lib/common/commands/device/uninstall-application.js +33 -0
  162. package/lib/common/commands/doctor.js +54 -0
  163. package/lib/common/commands/generate-messages.js +45 -0
  164. package/lib/common/commands/help.js +51 -0
  165. package/lib/common/commands/package-manager-get.js +32 -0
  166. package/lib/common/commands/package-manager-set.js +37 -0
  167. package/lib/common/commands/post-install.js +27 -0
  168. package/lib/common/commands/preuninstall.js +61 -0
  169. package/lib/common/commands/proxy/proxy-base.js +34 -0
  170. package/lib/common/commands/proxy/proxy-clear.js +32 -0
  171. package/lib/common/commands/proxy/proxy-get.js +31 -0
  172. package/lib/common/commands/proxy/proxy-set.js +150 -0
  173. package/lib/common/common-lib.js +5 -0
  174. package/lib/common/constants.js +122 -0
  175. package/lib/common/declarations.d.ts +1713 -0
  176. package/lib/common/decorators.js +201 -0
  177. package/lib/common/definitions/cli-global.d.ts +22 -0
  178. package/lib/common/definitions/commands-service.d.ts +27 -0
  179. package/lib/common/definitions/commands.d.ts +51 -0
  180. package/lib/common/definitions/config.d.ts +33 -0
  181. package/lib/common/definitions/extensibility.d.ts +147 -0
  182. package/lib/common/definitions/google-analytics.d.ts +109 -0
  183. package/lib/common/definitions/json-file-settings-service.d.ts +24 -0
  184. package/lib/common/definitions/key-commands.d.ts +62 -0
  185. package/lib/common/definitions/logger.d.ts +41 -0
  186. package/lib/common/definitions/mobile.d.ts +1499 -0
  187. package/lib/common/definitions/validator.d.ts +8 -0
  188. package/lib/common/definitions/yok.d.ts +56 -0
  189. package/lib/common/dispatchers.js +151 -0
  190. package/lib/common/docs/helpers/basic-extensions-page.html +15 -0
  191. package/lib/common/docs/helpers/basic-page.html +14 -0
  192. package/lib/common/docs/helpers/styles.css +365 -0
  193. package/lib/common/doctor.d.ts +6 -0
  194. package/lib/common/errors.js +206 -0
  195. package/lib/common/file-system.js +441 -0
  196. package/lib/common/header.js +30 -0
  197. package/lib/common/helpers.js +658 -0
  198. package/lib/common/host-info.js +133 -0
  199. package/lib/common/http-client.js +173 -0
  200. package/lib/common/logger/appenders/cli-appender.js +24 -0
  201. package/lib/common/logger/appenders/emit-appender.js +30 -0
  202. package/lib/common/logger/layouts/cli-layout.js +33 -0
  203. package/lib/common/logger/logger.js +199 -0
  204. package/lib/common/messages/messages.interface.d.ts +10 -0
  205. package/lib/common/messages/messages.js +15 -0
  206. package/lib/common/mobile/android/android-application-manager.js +228 -0
  207. package/lib/common/mobile/android/android-debug-bridge-result-handler.js +332 -0
  208. package/lib/common/mobile/android/android-debug-bridge.js +167 -0
  209. package/lib/common/mobile/android/android-device-file-system.js +176 -0
  210. package/lib/common/mobile/android/android-device-hash-service.js +133 -0
  211. package/lib/common/mobile/android/android-device.js +164 -0
  212. package/lib/common/mobile/android/android-emulator-services.js +205 -0
  213. package/lib/common/mobile/android/android-ini-file-parser.js +77 -0
  214. package/lib/common/mobile/android/android-log-filter.js +42 -0
  215. package/lib/common/mobile/android/android-virtual-device-service.js +360 -0
  216. package/lib/common/mobile/android/device-android-debug-bridge.js +48 -0
  217. package/lib/common/mobile/android/genymotion/genymotion-service.js +211 -0
  218. package/lib/common/mobile/android/genymotion/virtualbox-service.js +121 -0
  219. package/lib/common/mobile/android/logcat-helper.js +165 -0
  220. package/lib/common/mobile/application-manager-base.js +136 -0
  221. package/lib/common/mobile/device-emitter.js +61 -0
  222. package/lib/common/mobile/device-log-emitter.js +40 -0
  223. package/lib/common/mobile/device-log-provider-base.js +76 -0
  224. package/lib/common/mobile/device-log-provider.js +126 -0
  225. package/lib/common/mobile/device-platforms-constants.js +22 -0
  226. package/lib/common/mobile/emulator-helper.js +84 -0
  227. package/lib/common/mobile/ios/device/ios-application-manager.js +159 -0
  228. package/lib/common/mobile/ios/device/ios-device-file-system.js +133 -0
  229. package/lib/common/mobile/ios/device/ios-device-operations.js +234 -0
  230. package/lib/common/mobile/ios/device/ios-device.js +153 -0
  231. package/lib/common/mobile/ios/ios-device-base.js +108 -0
  232. package/lib/common/mobile/ios/ios-device-product-name-mapper.js +65 -0
  233. package/lib/common/mobile/ios/ios-log-filter.js +24 -0
  234. package/lib/common/mobile/ios/simulator/ios-emulator-services.js +139 -0
  235. package/lib/common/mobile/ios/simulator/ios-sim-resolver.js +23 -0
  236. package/lib/common/mobile/ios/simulator/ios-simulator-application-manager.js +147 -0
  237. package/lib/common/mobile/ios/simulator/ios-simulator-device.js +106 -0
  238. package/lib/common/mobile/ios/simulator/ios-simulator-file-system.js +81 -0
  239. package/lib/common/mobile/ios/simulator/ios-simulator-log-provider.js +69 -0
  240. package/lib/common/mobile/local-to-device-path-data-factory.js +37 -0
  241. package/lib/common/mobile/log-filter.js +51 -0
  242. package/lib/common/mobile/logging-levels.js +12 -0
  243. package/lib/common/mobile/mobile-core/android-device-discovery.js +91 -0
  244. package/lib/common/mobile/mobile-core/android-emulator-discovery.js +65 -0
  245. package/lib/common/mobile/mobile-core/android-process-service.js +259 -0
  246. package/lib/common/mobile/mobile-core/device-discovery.js +64 -0
  247. package/lib/common/mobile/mobile-core/devices-service.js +854 -0
  248. package/lib/common/mobile/mobile-core/ios-device-discovery.js +63 -0
  249. package/lib/common/mobile/mobile-core/ios-simulator-discovery.js +109 -0
  250. package/lib/common/mobile/mobile-helper.js +102 -0
  251. package/lib/common/mobile/wp8/wp8-emulator-services.js +82 -0
  252. package/lib/common/old.npmignore +12 -0
  253. package/lib/common/opener.js +16 -0
  254. package/lib/common/os-info.js +21 -0
  255. package/lib/common/plist-parser.js +24 -0
  256. package/lib/common/project-helper.js +70 -0
  257. package/lib/common/prompter.js +191 -0
  258. package/lib/common/queue.js +37 -0
  259. package/lib/common/resource-loader.js +25 -0
  260. package/lib/common/resources/messages/errorMessages.json +7 -0
  261. package/lib/common/resources/platform-tools/android/darwin/NOTICE.txt +3407 -0
  262. package/lib/common/resources/platform-tools/android/darwin/adb +0 -0
  263. package/lib/common/resources/platform-tools/android/linux/NOTICE.txt +4451 -0
  264. package/lib/common/resources/platform-tools/android/linux/adb +0 -0
  265. package/lib/common/resources/platform-tools/android/win32/AdbWinApi.dll +0 -0
  266. package/lib/common/resources/platform-tools/android/win32/AdbWinUsbApi.dll +0 -0
  267. package/lib/common/resources/platform-tools/android/win32/NOTICE.txt +4451 -0
  268. package/lib/common/resources/platform-tools/android/win32/adb.exe +0 -0
  269. package/lib/common/resources/platform-tools/android/win32/fastboot.exe +0 -0
  270. package/lib/common/resources/platform-tools/unzip/win32/unzip.exe +0 -0
  271. package/lib/common/services/analytics/google-analytics-custom-dimensions.d.ts +16 -0
  272. package/lib/common/services/auto-completion-service.js +265 -0
  273. package/lib/common/services/cancellation.js +67 -0
  274. package/lib/common/services/commands-service.js +268 -0
  275. package/lib/common/services/help-service.js +252 -0
  276. package/lib/common/services/hooks-service.js +318 -0
  277. package/lib/common/services/ios-notification-service.js +49 -0
  278. package/lib/common/services/json-file-settings-service.js +133 -0
  279. package/lib/common/services/lock-service.js +129 -0
  280. package/lib/common/services/message-contract-generator.js +83 -0
  281. package/lib/common/services/messages-service.js +77 -0
  282. package/lib/common/services/micro-templating-service.js +49 -0
  283. package/lib/common/services/net-service.js +137 -0
  284. package/lib/common/services/project-files-manager.js +100 -0
  285. package/lib/common/services/project-files-provider-base.js +54 -0
  286. package/lib/common/services/proxy-service.js +64 -0
  287. package/lib/common/services/qr.js +39 -0
  288. package/lib/common/services/settings-service.js +42 -0
  289. package/lib/common/services/xcode-select-service.js +62 -0
  290. package/lib/common/utils.js +31 -0
  291. package/lib/common/validators/project-name-validator.js +88 -0
  292. package/lib/common/validators/validation-result.js +16 -0
  293. package/lib/common/vendor/License.txt +4 -0
  294. package/lib/common/vendor/jaro-winkler_distance.js +111 -0
  295. package/lib/common/verify-node-version.js +78 -0
  296. package/lib/common/yok.js +426 -0
  297. package/lib/config.js +137 -0
  298. package/lib/constants-provider.js +12 -0
  299. package/lib/constants.js +350 -0
  300. package/lib/controllers/build-controller.js +133 -0
  301. package/lib/controllers/debug-controller.js +235 -0
  302. package/lib/controllers/deploy-controller.js +38 -0
  303. package/lib/controllers/migrate-controller.js +1114 -0
  304. package/lib/controllers/platform-controller.js +127 -0
  305. package/lib/controllers/prepare-controller.js +353 -0
  306. package/lib/controllers/run-controller.js +525 -0
  307. package/lib/controllers/update-controller-base.js +84 -0
  308. package/lib/controllers/update-controller.js +188 -0
  309. package/lib/data/build-data.js +44 -0
  310. package/lib/data/controller-data-base.js +11 -0
  311. package/lib/data/debug-data.js +6 -0
  312. package/lib/data/platform-data.js +13 -0
  313. package/lib/data/prepare-data.js +46 -0
  314. package/lib/data/run-data.js +11 -0
  315. package/lib/declarations.d.ts +1256 -0
  316. package/lib/definitions/android-bundle-tool-service.d.ts +17 -0
  317. package/lib/definitions/android-plugin-migrator.d.ts +52 -0
  318. package/lib/definitions/build.d.ts +92 -0
  319. package/lib/definitions/cleanup-service.d.ts +79 -0
  320. package/lib/definitions/data.d.ts +7 -0
  321. package/lib/definitions/debug.d.ts +166 -0
  322. package/lib/definitions/deploy.d.ts +3 -0
  323. package/lib/definitions/file-log-service.d.ts +19 -0
  324. package/lib/definitions/files-hash-service.d.ts +35 -0
  325. package/lib/definitions/gradle.d.ts +33 -0
  326. package/lib/definitions/hmr-status-service.d.ts +5 -0
  327. package/lib/definitions/initialize-service.d.ts +11 -0
  328. package/lib/definitions/ios-debugger-port-service.d.ts +29 -0
  329. package/lib/definitions/ios.d.ts +97 -0
  330. package/lib/definitions/ip-service.d.ts +10 -0
  331. package/lib/definitions/livesync-global.d.ts +7 -0
  332. package/lib/definitions/livesync.d.ts +601 -0
  333. package/lib/definitions/lock-service.d.ts +43 -0
  334. package/lib/definitions/log-parser-service.d.ts +14 -0
  335. package/lib/definitions/marking-mode-service.d.ts +11 -0
  336. package/lib/definitions/metadata-filtering-service.d.ts +48 -0
  337. package/lib/definitions/migrate.d.ts +46 -0
  338. package/lib/definitions/nativescript-dev-xcode.d.ts +87 -0
  339. package/lib/definitions/pacote-service.d.ts +50 -0
  340. package/lib/definitions/platform.d.ts +146 -0
  341. package/lib/definitions/plugins.d.ts +75 -0
  342. package/lib/definitions/prepare.d.ts +51 -0
  343. package/lib/definitions/project-changes.d.ts +34 -0
  344. package/lib/definitions/project.d.ts +858 -0
  345. package/lib/definitions/prompter.d.ts +27 -0
  346. package/lib/definitions/qr-code.d.ts +3 -0
  347. package/lib/definitions/require.d.ts +11 -0
  348. package/lib/definitions/run.d.ts +45 -0
  349. package/lib/definitions/start-service.d.ts +15 -0
  350. package/lib/definitions/subscription-service.d.ts +11 -0
  351. package/lib/definitions/system-warnings.d.ts +4 -0
  352. package/lib/definitions/temp-service.d.ts +9 -0
  353. package/lib/definitions/terminal-spinner-service.d.ts +12 -0
  354. package/lib/definitions/update.d.ts +16 -0
  355. package/lib/definitions/xcode.d.ts +12 -0
  356. package/lib/detached-processes/cleanup-js-subprocess.js +62 -0
  357. package/lib/detached-processes/cleanup-process-definitions.d.ts +70 -0
  358. package/lib/detached-processes/cleanup-process.js +281 -0
  359. package/lib/detached-processes/detached-process-enums.d.ts +70 -0
  360. package/lib/detached-processes/file-log-service.js +20 -0
  361. package/lib/device-path-provider.js +60 -0
  362. package/lib/device-sockets/ios/app-debug-socket-proxy-factory.js +217 -0
  363. package/lib/device-sockets/ios/notification.js +30 -0
  364. package/lib/device-sockets/ios/socket-request-executor.js +56 -0
  365. package/lib/helpers/android-bundle-validator-helper.js +52 -0
  366. package/lib/helpers/deploy-command-helper.js +70 -0
  367. package/lib/helpers/key-command-helper.js +124 -0
  368. package/lib/helpers/livesync-command-helper.js +220 -0
  369. package/lib/helpers/network-connectivity-validator.js +47 -0
  370. package/lib/helpers/options-track-helper.js +88 -0
  371. package/lib/helpers/package-path-helper.js +6 -0
  372. package/lib/helpers/platform-command-helper.js +192 -0
  373. package/lib/helpers/version-validator-helper.js +25 -0
  374. package/lib/key-commands/bootstrap.js +21 -0
  375. package/lib/key-commands/index.js +456 -0
  376. package/lib/nativescript-cli-lib-bootstrap.js +8 -0
  377. package/lib/nativescript-cli-lib.js +5 -0
  378. package/lib/nativescript-cli.js +55 -0
  379. package/lib/node/pbxproj-dom-xcode.js +5 -0
  380. package/lib/node/xcode.js +7 -0
  381. package/lib/node-package-manager.js +156 -0
  382. package/lib/options.js +393 -0
  383. package/lib/package-installation-manager.js +221 -0
  384. package/lib/package-manager.js +184 -0
  385. package/lib/platform-command-param.js +29 -0
  386. package/lib/pnpm-package-manager.js +136 -0
  387. package/lib/project-data.js +237 -0
  388. package/lib/providers/project-files-provider.js +46 -0
  389. package/lib/resolvers/livesync-service-resolver.js +22 -0
  390. package/lib/services/analytics/analytics-broker-process.js +77 -0
  391. package/lib/services/analytics/analytics-broker.js +53 -0
  392. package/lib/services/analytics/analytics-service.js +366 -0
  393. package/lib/services/analytics/analytics.d.ts +55 -0
  394. package/lib/services/analytics/google-analytics-cross-client-custom-dimensions.d.ts +6 -0
  395. package/lib/services/analytics/google-analytics-provider.js +152 -0
  396. package/lib/services/analytics-settings-service.js +104 -0
  397. package/lib/services/android/android-bundle-tool-service.js +81 -0
  398. package/lib/services/android/gradle-build-args-service.js +87 -0
  399. package/lib/services/android/gradle-build-service.js +68 -0
  400. package/lib/services/android/gradle-command-service.js +49 -0
  401. package/lib/services/android-device-debug-service.js +173 -0
  402. package/lib/services/android-plugin-build-service.js +527 -0
  403. package/lib/services/android-project-service.js +600 -0
  404. package/lib/services/android-resources-migration-service.js +104 -0
  405. package/lib/services/apple-portal/apple-portal-application-service.js +82 -0
  406. package/lib/services/apple-portal/apple-portal-cookie-service.js +53 -0
  407. package/lib/services/apple-portal/apple-portal-session-service.js +277 -0
  408. package/lib/services/apple-portal/definitions.d.ts +87 -0
  409. package/lib/services/assets-generation/assets-generation-service.js +178 -0
  410. package/lib/services/build-artifacts-service.js +113 -0
  411. package/lib/services/build-data-service.js +20 -0
  412. package/lib/services/build-info-file-service.js +79 -0
  413. package/lib/services/cleanup-service.js +194 -0
  414. package/lib/services/cocoapods-platform-manager.js +137 -0
  415. package/lib/services/cocoapods-service.js +354 -0
  416. package/lib/services/debug-data-service.js +21 -0
  417. package/lib/services/debug-service-base.js +44 -0
  418. package/lib/services/device/device-install-app-service.js +118 -0
  419. package/lib/services/doctor-service.js +294 -0
  420. package/lib/services/extensibility-service.js +220 -0
  421. package/lib/services/files-hash-service.js +79 -0
  422. package/lib/services/hmr-status-service.js +128 -0
  423. package/lib/services/info-service.js +14 -0
  424. package/lib/services/initialize-service.js +70 -0
  425. package/lib/services/ios/export-options-plist-service.js +131 -0
  426. package/lib/services/ios/ios-signing-service.js +265 -0
  427. package/lib/services/ios/spm-service.js +78 -0
  428. package/lib/services/ios/xcodebuild-args-service.js +163 -0
  429. package/lib/services/ios/xcodebuild-command-service.js +40 -0
  430. package/lib/services/ios/xcodebuild-service.js +93 -0
  431. package/lib/services/ios-debugger-port-service.js +140 -0
  432. package/lib/services/ios-device-debug-service.js +167 -0
  433. package/lib/services/ios-entitlements-service.js +78 -0
  434. package/lib/services/ios-extensions-service.js +63 -0
  435. package/lib/services/ios-log-filter.js +70 -0
  436. package/lib/services/ios-native-target-service.js +108 -0
  437. package/lib/services/ios-project-service.js +851 -0
  438. package/lib/services/ios-provision-service.js +173 -0
  439. package/lib/services/ios-watch-app-service.js +76 -0
  440. package/lib/services/ip-service.js +78 -0
  441. package/lib/services/itmstransporter-service.js +216 -0
  442. package/lib/services/karma-execution.js +16 -0
  443. package/lib/services/livesync/android-device-livesync-service-base.js +68 -0
  444. package/lib/services/livesync/android-device-livesync-service.js +203 -0
  445. package/lib/services/livesync/android-device-livesync-sockets-service.js +198 -0
  446. package/lib/services/livesync/android-livesync-service.js +76 -0
  447. package/lib/services/livesync/android-livesync-tool.js +427 -0
  448. package/lib/services/livesync/android-livesync-tool.md +211 -0
  449. package/lib/services/livesync/device-livesync-service-base.js +69 -0
  450. package/lib/services/livesync/ios-device-livesync-service.js +218 -0
  451. package/lib/services/livesync/ios-livesync-service.js +95 -0
  452. package/lib/services/livesync/livesync-socket.js +14 -0
  453. package/lib/services/livesync/platform-livesync-service-base.js +180 -0
  454. package/lib/services/livesync-process-data-service.js +43 -0
  455. package/lib/services/log-parser-service.js +52 -0
  456. package/lib/services/log-source-map-service.js +235 -0
  457. package/lib/services/marking-mode-service.js +56 -0
  458. package/lib/services/metadata-filtering-service.js +105 -0
  459. package/lib/services/npm-config-service.js +39 -0
  460. package/lib/services/pacote-service.js +109 -0
  461. package/lib/services/performance-service.js +92 -0
  462. package/lib/services/platform/add-platform-service.js +119 -0
  463. package/lib/services/platform/platform-validation-service.js +85 -0
  464. package/lib/services/platform/prepare-native-platform-service.js +87 -0
  465. package/lib/services/platform-environment-requirements.js +87 -0
  466. package/lib/services/platform-project-service-base.js +32 -0
  467. package/lib/services/platforms-data-service.js +31 -0
  468. package/lib/services/plugins-service.js +477 -0
  469. package/lib/services/prepare-data-service.js +21 -0
  470. package/lib/services/project-backup-service.js +114 -0
  471. package/lib/services/project-changes-service.js +274 -0
  472. package/lib/services/project-cleanup-service.js +102 -0
  473. package/lib/services/project-config-service.js +335 -0
  474. package/lib/services/project-data-service.js +478 -0
  475. package/lib/services/project-name-service.js +67 -0
  476. package/lib/services/project-service.js +204 -0
  477. package/lib/services/project-templates-service.js +114 -0
  478. package/lib/services/qr-code-terminal-service.js +20 -0
  479. package/lib/services/require-service.js +11 -0
  480. package/lib/services/start-service.js +116 -0
  481. package/lib/services/temp-service.js +36 -0
  482. package/lib/services/terminal-spinner-service.js +38 -0
  483. package/lib/services/test-execution-service.js +154 -0
  484. package/lib/services/test-initialization-service.js +54 -0
  485. package/lib/services/timeline-profiler-service.js +108 -0
  486. package/lib/services/user-settings-service.js +34 -0
  487. package/lib/services/versions-service.js +196 -0
  488. package/lib/services/watch-ignore-list-service.js +20 -0
  489. package/lib/services/webpack/webpack-compiler-service.js +405 -0
  490. package/lib/services/webpack/webpack.d.ts +227 -0
  491. package/lib/services/xcconfig-service.js +76 -0
  492. package/lib/services/xcproj-service.js +11 -0
  493. package/lib/shared-event-bus.js +7 -0
  494. package/lib/sys-info.js +120 -0
  495. package/lib/tools/config-manipulation/config-transformer.js +201 -0
  496. package/lib/tools/node-modules/node-modules-builder.js +42 -0
  497. package/lib/tools/node-modules/node-modules-dependencies-builder.js +100 -0
  498. package/lib/yarn-package-manager.js +134 -0
  499. package/lib/yarn2-package-manager.js +143 -0
  500. package/package.json +192 -0
  501. package/postinstall.js +10 -0
  502. package/preuninstall.js +14 -0
  503. package/resources/assets/image-definitions.json +655 -0
  504. package/resources/test/example.jasmine.js +6 -0
  505. package/resources/test/example.jasmine.ts +6 -0
  506. package/resources/test/example.mocha.js +9 -0
  507. package/resources/test/example.mocha.ts +9 -0
  508. package/resources/test/example.qunit.js +7 -0
  509. package/resources/test/example.qunit.ts +7 -0
  510. package/resources/test/karma.conf.js +93 -0
  511. package/resources/test/test-main.js +9 -0
  512. package/resources/test/test-main.ts +11 -0
  513. package/resources/test/tsconfig.spec.json +9 -0
  514. package/setup/mac-startup-shell-script.sh +2 -0
  515. package/vendor/aab-tool/LICENSE +202 -0
  516. package/vendor/aab-tool/README.txt +1 -0
  517. package/vendor/aab-tool/bundletool.jar +0 -0
  518. package/vendor/gradle-app/app/build.gradle +1054 -0
  519. package/vendor/gradle-app/app/gradle-helpers/AnalyticsCollector.gradle +48 -0
  520. package/vendor/gradle-app/app/gradle-helpers/BuildToolTask.gradle +50 -0
  521. package/vendor/gradle-app/app/gradle-helpers/CustomExecutionLogger.gradle +52 -0
  522. package/vendor/gradle-app/build.gradle +170 -0
  523. package/vendor/gradle-app/settings.gradle +78 -0
  524. package/vendor/gradle-plugin/LICENSE +995 -0
  525. package/vendor/gradle-plugin/build.gradle +363 -0
  526. package/vendor/gradle-plugin/gradle/wrapper/gradle-wrapper.jar +0 -0
  527. package/vendor/gradle-plugin/gradle/wrapper/gradle-wrapper.properties +6 -0
  528. package/vendor/gradle-plugin/gradle.properties +6 -0
  529. package/vendor/gradle-plugin/gradlew +172 -0
  530. package/vendor/gradle-plugin/gradlew.bat +84 -0
  531. package/vendor/gradle-plugin/settings.gradle +45 -0
@@ -0,0 +1,1084 @@
1
+ mobile-cli-lib
2
+ ==============
3
+
4
+ Provides an easy way for working with devices.
5
+ Contains common infrastructure for CLIs - mainly AppBuilder and NativeScript.
6
+
7
+ Installation
8
+ ===
9
+
10
+ Latest version: 0.22.0
11
+
12
+ Release date: 2016, December 15
13
+
14
+ ### System Requirements
15
+
16
+ Before installing the `mobile-cli-lib`, verify that your system meets the following requirements.
17
+
18
+ #### Windows Systems
19
+
20
+ **Minimum Software Requirements**
21
+
22
+ * Windows 7 or later
23
+ * .NET 4.0 or later
24
+ * Node.js
25
+ * (Windows 7 systems): Node.js 0.10.26 or a later stable official release except 0.10.34<br/>A [known issue](https://github.com/joyent/node/issues/8894) prevents the `mobile-cli-lib` from working properly with Node.js 0.10.34.
26
+ * (Windows 8 and later systems): Node.js 0.12.0 or a later stable official release<br/>A [known issue](https://github.com/SBoudrias/Inquirer.js/issues/235) in Inquirer.js prevents the interactive prompts from working properly in `cmd` shells on Windows 8 or later systems with Node.js 0.10.x.
27
+
28
+ **Additional Software Requirements for iOS On-Device Deployment**
29
+
30
+ * iTunes (latest official)
31
+ * Node.js
32
+
33
+ > The bitness of Node.js and iTunes must match.
34
+
35
+ **Additional Software Requirements for Android On-Device Deployment**
36
+
37
+ * Device drivers required by your system to recognize the connected Android device
38
+ * For testing in the native emulators
39
+ * JDK 8 or later
40
+ * Android SDK 19 or later
41
+ * (Optional) Genymotion
42
+
43
+ **Additional Software Requirements for Windows Phone On-Device Deployment**
44
+
45
+ > In this version of the `mobile-cli-lib`, you cannot deploy and LiveSync to connected Windows Phone devices from the command line.
46
+
47
+ #### OS X Systems
48
+
49
+ **Minimum Software Requirements**
50
+
51
+ * OS X Mavericks
52
+ * Node.js 0.10.26 or a later stable official release except 0.10.34<br/>A [known issue](http://docs.telerik.com/platform/appbuilder/troubleshooting/known-issues/known-issues-cli-and-sp#the-appbuilder-command-line-interface-and-appbuilder-package-for-sublime-text-27-have-introduced-the-following-known-issues) prevents the `mobile-cli-lib` from working properly with Node.js 0.10.34.
53
+ * Mono 3.12 or later
54
+
55
+ **Additional Software Requirements for iOS On-Device Deployment**
56
+
57
+ * iTunes (latest official)
58
+ * For testing in the native emulator
59
+ * Xcode
60
+
61
+ **Additional Software Requirements for Android On-Device Deployment**
62
+
63
+ * Device drivers required by your system to recognize the connected Android device
64
+ * For testing in the native emulators
65
+ * JDK 8 or later
66
+ * Android SDK 19 or later
67
+ * (Optional) Genymotion
68
+
69
+ **Additional Software Requirements for Windows Phone On-Device Deployment**
70
+
71
+ > In this version of the `mobile-cli-lib`, you cannot deploy and LiveSync to connected Windows Phone devices from the command line.
72
+
73
+ #### Linux Systems
74
+
75
+ **Minimum Software Requirements**
76
+
77
+ * Ubuntu 14.04 LTS<br/>The `mobile-cli-lib` is tested and verified to run on Ubuntu 14.04 LTS. You might be able to run the `mobile-cli-lib` on other Linux distributions.
78
+ * Node.js 0.10.26 or a later stable official release except 0.10.34<br/>A [known issue](http://docs.telerik.com/platform/appbuilder/troubleshooting/known-issues/known-issues-cli-and-sp#the-appbuilder-command-line-interface-and-appbuilder-package-for-sublime-text-27-have-introduced-the-following-known-issues) prevents the `mobile-cli-lib` from working properly with Node.js 0.10.34.
79
+
80
+ > **TIP:** You can follow the instructions provided [here](https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager) to install Node.js on your system.
81
+
82
+ * An Internet browser (latest official release)
83
+ * (64-bit systems) The runtime libraries for the ia32/i386 architecture
84
+ * In the terminal, run the following command.
85
+
86
+ ```
87
+ sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0 libstdc++6:i386
88
+ ```
89
+
90
+ **Additional Software Requirements for iOS On-Device Deployment**
91
+
92
+ > In this version of the `mobile-cli-lib`, you cannot deploy and LiveSync on connected iOS devices from the command line. You need to manually deploy the application package using iTunes.
93
+
94
+ **Additional Software Requirements for Android On-Device Deployment**
95
+
96
+ * Device drivers required by your system to recognize the connected Android device
97
+ * G++ compiler
98
+ * In the terminal, run `sudo apt-get install g++`
99
+ * For testing in the native emulators
100
+ * JDK 8 or later
101
+ * Android SDK 19 or later
102
+ * (Optional) Genymotion
103
+
104
+ **Additional Software Requirements for Windows Phone On-Device Deployment**
105
+
106
+ > In this version of the `mobile-cli-lib`, you cannot deploy and LiveSync to connected Windows Phone devices from the command line.
107
+
108
+ ### Install the mobile-cli-lib
109
+
110
+ The `mobile-cli-lib` should be added as dependency in your project's `package.json`.
111
+
112
+ Usage
113
+ ==
114
+
115
+ In order to use mobile-cli-lib, just add a reference to it in your package.json:
116
+ ```JSON
117
+ dependencies: {
118
+ "mobile-cli-lib": "0.4.0"
119
+ }
120
+ ```
121
+
122
+ After that execute `npm install` in the directory, where your `package.json` is located. This command will install all your dependencies in `node_modules` directory. Now you are ready to use `mobile-cli-lib` in your project:
123
+
124
+ ```JavaScript
125
+ var common = require("mobile-cli-lib");
126
+ common.fs.getFileSize("D:\\Work\\t.txt")
127
+ .then(function (result) {
128
+ console.log("File size is: " + result);
129
+ return result;
130
+ }, function (err) {
131
+ console.log("Error happened:");
132
+ console.log(err);
133
+ });
134
+ ```
135
+
136
+ ### Sample application
137
+
138
+ You can find a sample application [here](https://gist.github.com/rosen-vladimirov/f9d9919ba9a413679af7). Just download the zip file and execute `npm install` in the project directory.
139
+ After that you can execute `node index.js` in your terminal. In case you have file `D:\Work\t.txt`, the application will show you its size. In case you do not have such file, the application will show an error.
140
+ You can change the filename in `index.js`.
141
+
142
+ Public API
143
+ ==
144
+
145
+ This section contains information about each public method.
146
+
147
+ Device related public API, exposes `IDeviceInfo` data, that contains the following information:
148
+ ```TypeScript
149
+ /**
150
+ * Describes available information for a device.
151
+ */
152
+ interface IDeviceInfo {
153
+ /**
154
+ * Unique identifier of the device.
155
+ */
156
+ identifier: string;
157
+
158
+ /**
159
+ * The name of the device.
160
+ * For Android this is the value of device's 'ro.product.name' property.
161
+ * For iOS this is the value of device's 'DeviceName' property.
162
+ */
163
+ displayName: string;
164
+
165
+ /**
166
+ * Device model.
167
+ * For Android this is the value of device's 'ro.product.model' property.
168
+ * For iOS this is the value of device's 'ProductType' property.
169
+ */
170
+ model: string;
171
+
172
+ /**
173
+ * Version of the OS.
174
+ * For Android this is the value of device's 'ro.build.version.release' property.
175
+ * For iOS this is the value of device's 'ProductVersion' property.
176
+ */
177
+ version: string;
178
+
179
+ /**
180
+ * Vendor of the device.
181
+ * For Android this is the value of device's 'ro.product.brand' property.
182
+ * For iOS the value is always "Apple".
183
+ */
184
+ vendor: string;
185
+
186
+ /**
187
+ * Device's platform.
188
+ * Can be Android or iOS.
189
+ */
190
+ platform: string;
191
+
192
+ /**
193
+ * Status of device describing if you can work with this device or there's communication error.
194
+ * Can be Connected or Unreachable.
195
+ */
196
+ status: string;
197
+
198
+ /**
199
+ * Additional information for errors that prevents working with this device.
200
+ * It will be null when status is Connected.
201
+ */
202
+ errorHelp: string;
203
+
204
+ /**
205
+ * Defines if the device is tablet or not.
206
+ * For Android the value will be true when device's 'ro.build.characteristics' property contains "tablet" word or when the 'ro.build.version.release' is 3.x
207
+ * For iOS the value will be true when device's 'ProductType' property contains "ipad" word.
208
+ */
209
+ isTablet: boolean;
210
+
211
+ /**
212
+ * Optional property describing the color of the device.
213
+ * Available for iOS only - the value of device's 'DeviceColor' property.
214
+ */
215
+ color?: string;
216
+
217
+ /**
218
+ * Optional property describing the architecture of the device
219
+ * Available for iOS only - can be "armv7" or "arm64"
220
+ */
221
+ activeArchitecture?: string;
222
+ }
223
+ ```
224
+
225
+ ### Module companionAppsService
226
+ > Stability 2 - Stable
227
+
228
+ `companionAppsService` gives access to companion apps identifiers.
229
+
230
+ * `getAllCompanionAppIdentifiers`: returns all companion app identifiers in a JSON object, where the top level keys are frameworks (cordova and nativescript) and inner keys are platforms (android, ios, wp8).
231
+ Sample usage:
232
+ ```JavaScript
233
+ var companionAppIdentifiers = require("mobile-cli-lib").companionAppsService.getAllCompanionAppIdentifiers();
234
+ ```
235
+ Result object is something like:
236
+ ```JSON
237
+ {
238
+ 'cordova': {
239
+ 'android': 'android.cordova.companion.app.identifier',
240
+ 'ios': 'ios.cordova.companion.app.identifier',
241
+ 'wp8': 'wp8.cordova.companion.app.identifier'
242
+ },
243
+ 'nativescript': {
244
+ 'android': 'android.nativescript.companion.app.identifier',
245
+ 'ios': 'ios.nativescript.companion.app.identifier',
246
+ 'wp8': null
247
+ }
248
+ }
249
+ ```
250
+
251
+ * `getCompanionAppIdentifier(framework: string, platform: string): string` - returns companion app identifier for specified framework and platform.
252
+ Sample usage:
253
+ ```JavaScript
254
+ var companionAppIdentifiers = require("mobile-cli-lib").companionAppsService.getCompanionAppIdentifier("cordova", "android");
255
+ ```
256
+
257
+ ### Module deviceEmitter
258
+ > Stability 2 - Stable
259
+
260
+ `deviceEmitter` module is used to emit different events related to devices attached to the system.
261
+ You can use `deviceEmitter` to add handles for the following events:
262
+
263
+ * `deviceFound` - Raised when a new device is attached to the system. The callback function will receive one argument - deviceInfoData.
264
+ Sample usage:
265
+ ```JavaScript
266
+ require("mobile-cli-lib").deviceEmitter.on("deviceFound", function(deviceInfoData) {
267
+ console.log("Found device with identifier: " + deviceInfoData.identifier);
268
+ });
269
+ ```
270
+
271
+ * `deviceLost` - Raised when a device is detached from the system. The callback function will receive one argument - deviceInfoData.
272
+ Sample usage:
273
+ ```JavaScript
274
+ require("mobile-cli-lib").deviceEmitter.on("deviceLost", function(deviceInfoData) {
275
+ console.log("Detached device with identifier: " + deviceInfoData.identifier);
276
+ });
277
+ ```
278
+
279
+ * `deviceLogData` - Raised when attached device reports any information. This is the output of `adb logcat` for Android devices. For iOS this is the `iOS SysLog`.
280
+ The event is raised for any device that reports data. The callback function has two arguments - `deviceIdentifier` and `reportedData`. <br/><br/>
281
+ Sample usage:
282
+ ```JavaScript
283
+ require("mobile-cli-lib").deviceEmitter.on("deviceLogData", function(identifier, reportedData) {
284
+ console.log("Device " + identifier + " reports: " + reportedData);
285
+ });
286
+ ```
287
+
288
+ * `applicationInstalled` - Raised when application is installed on a device. The callback has two arguments - `deviceIdentifier` and `applicationIdentifier`. <br/><br/>
289
+ Sample usage:
290
+ ```JavaScript
291
+ require("mobile-cli-lib").deviceEmitter.on("applicationInstalled", function(identifier, applicationIdentifier) {
292
+ console.log("Application " + applicationIdentifier + " has been installed on device with id: " + identifier);
293
+ });
294
+ ```
295
+
296
+ * `applicationUninstalled` - Raised when application is removed from device. The callback has two arguments - `deviceIdentifier` and `applicationIdentifier`. <br/><br/>
297
+ Sample usage:
298
+ ```JavaScript
299
+ require("mobile-cli-lib").deviceEmitter.on("applicationUninstalled", function(identifier, applicationIdentifier) {
300
+ console.log("Application " + applicationIdentifier + " has been uninstalled from device with id: " + identifier);
301
+ });
302
+ ```
303
+
304
+ * `debuggableAppFound` - Raised when application on a device becomes available for debugging. The callback has one argument - `applicationInfo`. <br/><br/>
305
+ Sample usage:
306
+ ```JavaScript
307
+ require("mobile-cli-lib").deviceEmitter.on("debuggableAppFound", function(applicationInfo) {
308
+ console.log("Application " + applicationInfo.appIdentifier + " is available for debugging on device with id: " + applicationInfo.deviceIdentifier);
309
+ });
310
+ ```
311
+ Sample result for `applicationInfo` will be:
312
+ ```JSON
313
+ {
314
+ "deviceIdentifier": "4df18f307d8a8f1b",
315
+ "appIdentifier": "com.telerik.Fitness",
316
+ "framework": "NativeScript",
317
+ "title": "NativeScript Application"
318
+ }
319
+ ```
320
+
321
+ * `debuggableAppLost` - Raised when application on a device is not available for debugging anymore. The callback has one argument - `applicationInfo`. <br/><br/>
322
+ Sample usage:
323
+ ```JavaScript
324
+ require("mobile-cli-lib").deviceEmitter.on("debuggableAppLost", function(applicationInfo) {
325
+ console.log("Application " + applicationInfo.appIdentifier + " is not available for debugging anymore on device with id: " + applicationInfo.deviceIdentifier);
326
+ });
327
+ ```
328
+ Sample result for `applicationInfo` will be:
329
+ ```JSON
330
+ {
331
+ "deviceIdentifier": "4df18f307d8a8f1b",
332
+ "appIdentifier": "com.telerik.Fitness",
333
+ "framework": "NativeScript",
334
+ "title": "NativeScript Application"
335
+ }
336
+ ```
337
+
338
+ * `debuggableViewFound` - Raised when a new debuggable WebView is found. The callback has three arguments - `deviceIdentifier`, `appIdentifier` and `webViewInfo`.
339
+
340
+ Sample usage:
341
+ ```JavaScript
342
+ require("mobile-cli-lib")
343
+ .deviceEmitter.on("debuggableViewFound", function(deviceIdentifier, appIdentifier, debuggableViewInfo) {
344
+ console.log("On device " + deviceIdentifier + " the application " + appIdentifier + " now has new WebView: " + debuggableViewInfo);
345
+ });
346
+ ```
347
+ Sample result for `debuggableViewInfo` will be:
348
+ ```JSON
349
+ {
350
+ "description": "",
351
+ "devtoolsFrontendUrl": "http://chrome-devtools-frontend.appspot.com/serve_rev/@211d45a5b74b06d12bb016f3c4d54095faf2646f/inspector.html?ws=127.0.0.1:53213/devtools/page/4050",
352
+ "id": "4050",
353
+ "title": "New tab",
354
+ "type": "page",
355
+ "url": "chrome-native://newtab/",
356
+ "webSocketDebuggerUrl": "ws://127.0.0.1:53213/devtools/page/4050"
357
+ }
358
+ ```
359
+
360
+ * `debuggableViewLost` - Raised when a debuggable WebView is lost. The callback has three arguments - `deviceIdentifier`, `appIdentifier` and `webViewInfo`.
361
+
362
+ Sample usage:
363
+ ```JavaScript
364
+ require("mobile-cli-lib")
365
+ .deviceEmitter.on("debuggableViewLost", function(deviceIdentifier, appIdentifier, debuggableViewInfo) {
366
+ console.log("On device " + deviceIdentifier + " the application " + appIdentifier + " now cannot debug WebView: " + debuggableViewInfo);
367
+ });
368
+ ```
369
+ Sample result for `debuggableViewInfo` will be:
370
+ ```JSON
371
+ {
372
+ "description": "",
373
+ "devtoolsFrontendUrl": "http://chrome-devtools-frontend.appspot.com/serve_rev/@211d45a5b74b06d12bb016f3c4d54095faf2646f/inspector.html?ws=127.0.0.1:53213/devtools/page/4050",
374
+ "id": "4050",
375
+ "title": "New tab",
376
+ "type": "page",
377
+ "url": "chrome-native://newtab/",
378
+ "webSocketDebuggerUrl": "ws://127.0.0.1:53213/devtools/page/4050"
379
+ }
380
+ ```
381
+
382
+ * `debuggableViewChanged` - Raised when a property of debuggable WebView is changed, for example it's title. The callback has three arguments - `deviceIdentifier`, `appIdentifier` and `webViewInfo`.
383
+
384
+ Sample usage:
385
+ ```JavaScript
386
+ require("mobile-cli-lib")
387
+ .deviceEmitter.on("debuggableViewChanged", function(deviceIdentifier, appIdentifier, debuggableViewInfo) {
388
+ console.log("On device " + deviceIdentifier + " the application " + appIdentifier + " has changes in WebView: " + debuggableViewInfo);
389
+ });
390
+ ```
391
+ Sample result for `debuggableViewInfo` will be:
392
+ ```JSON
393
+ {
394
+ "description": "",
395
+ "devtoolsFrontendUrl": "http://chrome-devtools-frontend.appspot.com/serve_rev/@211d45a5b74b06d12bb016f3c4d54095faf2646f/inspector.html?ws=127.0.0.1:53213/devtools/page/4050",
396
+ "id": "4050",
397
+ "title": "New tab 2",
398
+ "type": "page",
399
+ "url": "chrome-native://newtab/",
400
+ "webSocketDebuggerUrl": "ws://127.0.0.1:53213/devtools/page/4050"
401
+ }
402
+ ```
403
+
404
+ * `companionAppInstalled` - Raised when application is removed from device. The callback has two arguments - `deviceIdentifier` and `framwork`. <br/><br/>
405
+ Sample usage:
406
+ ```JavaScript
407
+ require("mobile-cli-lib").deviceEmitter.on("companionAppInstalled", function(identifier, framwework) {
408
+ console.log("Companion app for " + framework + " has been installed on device with id: " + identifier);
409
+ });
410
+ ```
411
+
412
+ * `companionAppUninstalled` - Raised when application is removed from device. The callback has two arguments - `deviceIdentifier` and `framwork`. <br/><br/>
413
+ Sample usage:
414
+ ```JavaScript
415
+ require("mobile-cli-lib").deviceEmitter.on("companionAppUninstalled", function(identifier, framwework) {
416
+ console.log("Companion app for " + framework + " has been uninstalled from device with id: " + identifier);
417
+ });
418
+ ```
419
+
420
+ ### Module devicesService
421
+ > Stability: 2 - Stable
422
+
423
+ This module allows interaction with devices. You can get a list of the attached devices or deploy on specific devices.
424
+
425
+ * `getDevices()` - This function returns array of all connected devices. For each of them the following information is provided:
426
+ Sample usage:
427
+ ```JavaScript
428
+ var devices = require("mobile-cli-lib").devicesService.getDevices();
429
+ devices.forEach(function(device) {
430
+ console.log("Device " + device.identifier + " is connected.");
431
+ });
432
+ ```
433
+
434
+ * `deployOnDevices(deviceIdentifiers: string[], packageFile: string, appId: string, projectName: string)` - Deploys the specified package to the specified devices.
435
+ Returns array of Promises. Each of them will be rejected in case the file cannot be deployed on the device or in case there's no device with such identifier.
436
+ The function accepts three arguments:
437
+ * `deviceIdentifiers` - array of the unique identifiers of the devices where the application will be deployed.
438
+ * `packageFile` - path to the specified package (`.apk` or `.ipa`);
439
+ * `appId` - the identifier of the package. This corresponds to id from `package.json`.
440
+ * `projectName` - the project name, this is usually the dir name of the project
441
+
442
+ Sample usage:
443
+ ```JavaScript
444
+ Promise.all(require("mobile-cli-lib")
445
+ .devicesService
446
+ .deployOnDevices(["129604ab96a4d0053023b4bf5b288cf34a9ed5fa", "153544fa45f4a5646543b5bf1b221fe31a8fa6bc"], "./app.ipa", "com.telerik.testApp", "Test App"))
447
+ .then(function(data) {
448
+ console.log(data);
449
+ }, function(err) {
450
+ console.log(err);
451
+ });
452
+ ```
453
+
454
+ * `setLogLevel(logLevel: string, deviceIdentifier?: string)` - Sets the logging level for device(s) to `INFO` or `FULL`.
455
+ The method has two parameters, only the first one is mandatory. When only `logLevel` is passed, it's value is used for all currently connected devices and all devices that will be connected in the future.
456
+ By default the logging level is set to `INFO`. For example when there are two devices attached and this method is called in the following way:
457
+ ```JavaScript
458
+ require("mobile-cli-lib").devicesService.setLogLevel("FULL");
459
+ ```
460
+ Everything that the devices report will be raised in `deviceEmitter.deviceLogData` event. When a new device is attached, all of the information that it reports will also be send.
461
+ When the `deviceIdentifier` is passed, the value of the log level will be used only for this device. For example when all devices report all of their logs (`FULL`) level, you may call:
462
+ ```JavaScript
463
+ require("mobile-cli-lib").devicesService.setLogLevel("INFO", "129604ab96a4d0053023b4bf5b288cf34a9ed5fa");
464
+ ```
465
+ This will set the logging level to `INFO` only for device with identifier `129604ab96a4d0053023b4bf5b288cf34a9ed5fa`.
466
+
467
+
468
+ * `isAppInstalledOnDevices(deviceIdentifiers: string[], appIdentifier: string, framework: string): Promise<IAppInstalledInfo>[]` - checks if the specified application is installed on each of the specified devices and is LiveSync supported for this application.
469
+ The returned type for each device is `IAppInstalledInfo`:
470
+ ```JavaScript
471
+ /**
472
+ * Describes if LiveSync is supported for specific device and application.
473
+ */
474
+ interface IAppInstalledInfo extends ILiveSyncSupportedInfo {
475
+ /**
476
+ * Unique identifier of the device.
477
+ */
478
+ deviceIdentifier: string;
479
+
480
+ /**
481
+ * Application identifier.
482
+ */
483
+ appIdentifier: string;
484
+
485
+ /**
486
+ * Defines if application is installed on device.
487
+ */
488
+ isInstalled: boolean;
489
+
490
+ /**
491
+ * Result, indicating is livesync supported for specified device and specified application.
492
+ * `true` in case livesync is supported and false otherwise.
493
+ */
494
+ isLiveSyncSupported: boolean;
495
+ }
496
+ ```
497
+
498
+ > NOTE: This method will try to start the application on each device in order to understand is LiveSync supported.
499
+ Sample usage:
500
+ ```JavaScript
501
+ Promise.all(require("mobile-cli-lib")
502
+ .devicesService
503
+ .isAppInstalledOnDevices(devicesFound, "com.telerik.myApp", "cordova"))
504
+ .then(function(data) {
505
+ console.log(data);
506
+ }, function(err) {
507
+ console.log(err);
508
+ });
509
+ ```
510
+ Sample result will be:
511
+ ```JSON
512
+ [{
513
+ "deviceIdentifier": "deviceId1",
514
+ "appIdentifier": "appId",
515
+ "isInstalled": true,
516
+ "isLiveSyncSupported": true
517
+ }, {
518
+ "deviceIdentifier": "deviceId2",
519
+ "appIdentifier": "appId",
520
+ "isInstalled": false,
521
+ "isLiveSyncSupported": false
522
+ }]
523
+ ```
524
+
525
+ * `isCompanionAppInstalledOnDevices(deviceIdentifiers: string[], framework: string): Promise<IAppInstalledInfo>[]` - checks if the companion application is installed on each of the specified devices and is LiveSync supported for this application.
526
+ The returned type for each device is `IAppInstalledInfo` (check above for full description of the interface).
527
+ Sample usage:
528
+ ```JavaScript
529
+ Promise.all(require("mobile-cli-lib")
530
+ .devicesService
531
+ .isCompanionAppInstalledOnDevices(devicesFound, "cordova"))
532
+ .then(function(data) {
533
+ console.log(data);
534
+ }, function(err) {
535
+ console.log(err);
536
+ });
537
+ ```
538
+ Sample result will be:
539
+ ```JSON
540
+ [{
541
+ "deviceIdentifier": "deviceId1",
542
+ "appIdentifier": "com.telerik.AppBuilder",
543
+ "isInstalled": true,
544
+ "isLiveSyncSupported": true
545
+ }, {
546
+ "deviceIdentifier": "deviceId2",
547
+ "appIdentifier": "com.telerik.AppBuilder",
548
+ "isInstalled": false,
549
+ "isLiveSyncSupported": false
550
+ }]
551
+ ```
552
+
553
+
554
+ * `mapAbstractToTcpPort(deviceIdentifier: string, appIdentifier: string, framework: string): Promise<string>` - This function forwards the abstract port of the web view on the device to available tcp port on the host and returns the tcp port.
555
+
556
+ Sample usage:
557
+ ```JavaScript
558
+ require("mobile-cli-lib").devicesService.mapAbstractToTcpPort("4df18f307d8a8f1b", "com.telerik.test", "Cordova")
559
+ .then(function(port) {
560
+ console.log(port);
561
+ }, function(err) {
562
+ console.log(err);
563
+ });
564
+ ```
565
+
566
+ * `getDebuggableApps(deviceIdentifiers: string[]): Promise<IDeviceApplicationInformation[]>[]` - This function checks the proc/net/unix file of each device from the deviceIdentifiers argument for web views connected to abstract ports and returns information about the applications.
567
+ ```JavaScript
568
+ /**
569
+ * Describes basic information about application on device.
570
+ */
571
+ interface IDeviceApplicationInformation {
572
+ /**
573
+ * The device identifier.
574
+ */
575
+ deviceIdentifier: string;
576
+
577
+ /**
578
+ * The application identifier.
579
+ */
580
+ appIdentifier: string;
581
+
582
+ /**
583
+ * The framework of the project (Cordova or NativeScript).
584
+ */
585
+ framework: string;
586
+ }
587
+ ```
588
+
589
+ Sample usage:
590
+ ```JavaScript
591
+ Promise.all(require("mobile-cli-lib").devicesService.getDebuggableApps(["4df18f307d8a8f1b", "JJY5KBTW75TCHQUK"]))
592
+ .then(function(data) {
593
+ data.forEach(function(apps) {
594
+ console.log(apps);
595
+ });
596
+ }, function(err) {
597
+ console.log(err);
598
+ });
599
+ ```
600
+ Sample result will be:
601
+ ```JSON
602
+ [[{
603
+ "deviceIdentifier": "4df18f307d8a8f1b",
604
+ "appIdentifier": "com.telerik.Fitness",
605
+ "framework": "NativeScript"
606
+ }, {
607
+ "deviceIdentifier": "4df18f307d8a8f1b",
608
+ "appIdentifier": "com.telerik.livesynctest",
609
+ "framework": "Cordova"
610
+ }], [{
611
+ "deviceIdentifier": "JJY5KBTW75TCHQUK",
612
+ "appIdentifier": "com.telerik.PhotoAlbum",
613
+ "framework": "NativeScript"
614
+ }]]
615
+ ```
616
+
617
+ * `getDebuggableApps(deviceIdentifiers: string[]): Promise<IDeviceApplicationInformation[]>[]` - This function checks the proc/net/unix file of each device from the deviceIdentifiers argument for web views connected to abstract ports and returns information about the applications.
618
+ ```JavaScript
619
+ /**
620
+ * Describes basic information about application on device.
621
+ */
622
+ interface IDeviceApplicationInformation {
623
+ /**
624
+ * The device identifier.
625
+ */
626
+ deviceIdentifier: string;
627
+
628
+ /**
629
+ * The application identifier.
630
+ */
631
+ appIdentifier: string;
632
+
633
+ /**
634
+ * The framework of the project (Cordova or NativeScript).
635
+ */
636
+ framework: string;
637
+ }
638
+ ```
639
+
640
+ Sample usage:
641
+ ```JavaScript
642
+ Promise.all(require("mobile-cli-lib").devicesService.getDebuggableApps(["4df18f307d8a8f1b", "JJY5KBTW75TCHQUK"]))
643
+ .then(function(data) {
644
+ data.forEach(function(apps) {
645
+ console.log(apps);
646
+ });
647
+ }, function(err) {
648
+ console.log(err);
649
+ });
650
+ ```
651
+ Sample result will be:
652
+ ```JSON
653
+ [[{
654
+ "deviceIdentifier": "4df18f307d8a8f1b",
655
+ "appIdentifier": "com.telerik.Fitness",
656
+ "framework": "NativeScript"
657
+ }, {
658
+ "deviceIdentifier": "4df18f307d8a8f1b",
659
+ "appIdentifier": "com.telerik.livesynctest",
660
+ "framework": "Cordova"
661
+ }], [{
662
+ "deviceIdentifier": "JJY5KBTW75TCHQUK",
663
+ "appIdentifier": "com.telerik.PhotoAlbum",
664
+ "framework": "NativeScript"
665
+ }]]
666
+ ```
667
+
668
+ * `getDebuggableViews(deviceIdentifier: string, appIdentifier: string): Promise<IDebugWebViewInfo[]>` - This function returns WebViews that can be debugged for specified application on specified device.
669
+ > NOTE: This method works only for Cordova based applications. DO NOT pass appIdentifier of NativeScript application.
670
+
671
+ ```JavaScript
672
+ /**
673
+ * Describes information for WebView that can be debugged.
674
+ */
675
+ interface IDebugWebViewInfo {
676
+ /**
677
+ * Short description of the view.
678
+ */
679
+ description: string;
680
+
681
+ /**
682
+ * Url to the devtools.
683
+ * @example http://chrome-devtools-frontend.appspot.com/serve_rev/@211d45a5b74b06d12bb016f3c4d54095faf2646f/inspector.html?ws=127.0.0.1:53213/devtools/page/4024
684
+ */
685
+ devtoolsFrontendUrl: string;
686
+
687
+ /**
688
+ * Unique identifier of the web view. Could be number or GUID.
689
+ * @example 4027
690
+ */
691
+ id: string;
692
+
693
+ /**
694
+ * Title of the WebView.
695
+ * @example https://bit.ly/12345V is not available
696
+ */
697
+ title: string;
698
+
699
+ /**
700
+ * Type of the WebView.
701
+ * @example page
702
+ */
703
+ type: string;
704
+
705
+ /**
706
+ * URL loaded in the view.
707
+ * @example https://bit.ly/12345V
708
+ */
709
+ url: string;
710
+
711
+ /**
712
+ * Debugger URL.
713
+ * @example ws://127.0.0.1:53213/devtools/page/4027
714
+ */
715
+ webSocketDebuggerUrl: string;
716
+ }
717
+ ```
718
+
719
+ Sample usage:
720
+ ```JavaScript
721
+ require("mobile-cli-lib")
722
+ .devicesService
723
+ .getDebuggableViews("4df18f307d8a8f1b", "com.telerik.cordovaApp")
724
+ .then(function(data) {
725
+ console.log(data);
726
+ }, function(err) {
727
+ console.log(err);
728
+ });
729
+ ```
730
+
731
+ Sample result will be:
732
+ ```JSON
733
+ [{
734
+ "description": "",
735
+ "devtoolsFrontendUrl": "http://chrome-devtools-frontend.appspot.com/serve_rev/@211d45a5b74b06d12bb016f3c4d54095faf2646f/inspector.html?ws=127.0.0.1:53213/devtools/page/4050",
736
+ "id": "4050",
737
+ "title": "New tab",
738
+ "type": "page",
739
+ "url": "chrome-native://newtab/",
740
+ "webSocketDebuggerUrl": "ws://127.0.0.1:53213/devtools/page/4050"
741
+ },
742
+
743
+ {
744
+ "description": "",
745
+ "devtoolsFrontendUrl": "http://chrome-devtools-frontend.appspot.com/serve_rev/@211d45a5b74b06d12bb016f3c4d54095faf2646f/inspector.html?ws=127.0.0.1:53213/devtools/page/4032",
746
+ "id": "4032",
747
+ "title": "New tab",
748
+ "type": "page",
749
+ "url": "chrome-native://newtab/",
750
+ "webSocketDebuggerUrl": "ws://127.0.0.1:53213/devtools/page/4032"
751
+ }
752
+ ]
753
+ ```
754
+
755
+ * `getInstalledApplications(deviceIdentifier: string): Promise<string[]>` - returns information about applications installed on specified device. The method will reject the resulting Promise in case the passed `deviceIdentifier` is not found (i.e. there's no currently attached device with this identifier).
756
+
757
+ Sample usage:
758
+ ```JavaScript
759
+ require("mobile-cli-lib").devicesService.getInstalledApplications("4df18f307d8a8f1b")
760
+ .then(function(appIdentifiers) {
761
+ console.log("Installed applications are: ", appIdentifiers);
762
+ }, function(err) {
763
+ console.log(err);
764
+ });
765
+ ```
766
+ Sample result of the method call is:
767
+ ```JSON
768
+ ["com.telerik.app1", "org.nativescript.app1"]
769
+ ```
770
+
771
+ ### Module liveSyncService
772
+ > Stability: 1 - Could be changed due to some new requirments.
773
+
774
+ This module allows LiveSync applications on different devices.
775
+
776
+ The following types are used:
777
+ ```TypeScript
778
+ /**
779
+ * Describes the result of a single livesync operation started by Proton.
780
+ */
781
+ interface ILiveSyncOperationResult {
782
+ /**
783
+ * Defines if the operation is successful (set to true) or not (value is false).
784
+ */
785
+ isResolved: boolean;
786
+
787
+ /**
788
+ * Error when livesync operation fails. If `isResolved` is true, error will be undefined.
789
+ */
790
+ error?: Error;
791
+ }
792
+
793
+ /**
794
+ * Describes result of all LiveSync operations per device.
795
+ */
796
+ interface IDeviceLiveSyncResult {
797
+ /**
798
+ * Identifier of the device.
799
+ */
800
+ deviceIdentifier: string;
801
+
802
+ /**
803
+ * Result of LiveSync operation for application.
804
+ */
805
+ liveSyncToApp?: ILiveSyncOperationResult;
806
+
807
+ /**
808
+ * Result of LiveSync operation to companion app.
809
+ */
810
+ liveSyncToCompanion?: ILiveSyncOperationResult;
811
+ }
812
+ ```
813
+ * `livesync(devicesInfo: IDeviceLiveSyncInfo[], projectDir: string, filePaths?: string[]): Promise<IDeviceLiveSyncResult>[]` - LiveSync changes on the specified devices.
814
+ In case filePaths are not specified, the whole project directory will be synced.
815
+ The `devicesInfo` array describes livesync operations for each device. Each object should be described with the following properties:
816
+ ```TypeScript
817
+ /**
818
+ * Describes device's LiveSync information.
819
+ */
820
+ interface IDeviceLiveSyncInfo {
821
+ /**
822
+ * Unique identifier of the device.
823
+ */
824
+ deviceIdentifier: string;
825
+
826
+ /**
827
+ * Defines if changes have to be synced to installed application.
828
+ */
829
+ syncToApp: boolean;
830
+
831
+ /**
832
+ * Defines if changes have to be synced to companion app.
833
+ */
834
+ syncToCompanion: boolean;
835
+ }
836
+ ```
837
+
838
+ Sample usage:
839
+ ```JavaScript
840
+ var deviceInfos = [{"deviceIdentifier": "129604ab96a4d0053023b4bf5b288cf34a9ed5fa", "syncToApp": true, "syncToCompanion": false},
841
+ {"deviceIdentifier": "153544fa45f4a5646543b5bf1b221fe31a8fa6bc", "syncToApp": true, "syncToCompanion": false}];
842
+ // Full Sync - the whole project dir will be synced
843
+ Promise.all(require("mobile-cli-lib").liveSyncService.livesync(deviceInfos, projectDir))
844
+ .then(function(result) {
845
+ console.log("Finished with full sync, result is: ", result);
846
+ }).catch(function(err) {
847
+ console.log("Error while livesyncing: ", err);
848
+ });
849
+
850
+ // Or use livesync only for some files:
851
+ var filesToSync = [path.join(projectDir,"app","components", "homeView", "homeView.xml"),
852
+ path.join(projectDir,"app","components", "addressView", "addressView.xml")]
853
+ Promise.all(require("mobile-cli-lib").liveSyncService.livesync(deviceInfos, projectDir, filesToSync))
854
+ .then(function(result) {
855
+ console.log("Finished with partial sync, result is: ", result);
856
+ }).catch(function(err) {
857
+ console.log("Error while livesyncing: ", err);
858
+ });
859
+ ```
860
+
861
+ * `deleteFiles(devicesInfo: IDeviceLiveSyncInfo[], projectDir: string, filePaths: string[]): Promise<IDeviceLiveSyncResult>[]` - Deletes specified files from devices's livesync directories.
862
+ The `devicesInfo` array describes livesync operations for each device. Check `livesync` method above fore more information.
863
+
864
+ Sample usage:
865
+ ```JavaScript
866
+ var deviceInfos = [{"deviceIdentifier": "129604ab96a4d0053023b4bf5b288cf34a9ed5fa", "syncToApp": true, "syncToCompanion": false},
867
+ {"deviceIdentifier": "153544fa45f4a5646543b5bf1b221fe31a8fa6bc", "syncToApp": true, "syncToCompanion": false}];
868
+
869
+ var filesToSync = [path.join(projectDir,"app","components", "homeView", "homeView.xml"),
870
+ path.join(projectDir,"app","components", "addressView", "addressView.xml")]
871
+ Promise.all(require("mobile-cli-lib").liveSyncService.deleteFiles(deviceInfos, projectDir, filesToSync))
872
+ .then(function(result) {
873
+ console.log("Finished with deleting files, result is: ", result);
874
+ }).catch(function(err) {
875
+ console.log("Error while deleting files: ", err);
876
+ });
877
+ ```
878
+
879
+ ### Module npmService
880
+ > Stability: 1 - Could be changed due to some new requirments.
881
+
882
+ This module is used to install or uninstall packages from npm.
883
+
884
+ The following types are used:
885
+ ```TypeScript
886
+ /**
887
+ * Describes information for single npm dependency that has to be installed.
888
+ */
889
+ interface INpmDependency {
890
+ /**
891
+ * Name of the dependency.
892
+ */
893
+ name: string;
894
+
895
+ /**
896
+ * @optional The version of the dependency that has to be installed.
897
+ */
898
+ version?: string;
899
+
900
+ /**
901
+ * Defines if @types/<name> should be installed as well.
902
+ */
903
+ installTypes: boolean;
904
+ }
905
+
906
+ /**
907
+ * Describes the result of npm install command.
908
+ */
909
+ interface INpmInstallResult {
910
+ /**
911
+ * The result of installing a single dependency.
912
+ */
913
+ result?: INpmInstallDependencyResult,
914
+
915
+ /**
916
+ * The error that occurred during the operation.
917
+ */
918
+ error?: Error;
919
+ }
920
+ ```
921
+
922
+ * `install(packageName: string, pathToSave: string, config: IDictionary<string | boolean>): Promise<INpmInstallResult>` - Installs everything from package.json or specified dependency.
923
+ In case there's information which dependency to install, the method will check it and install only this dependency and possibly its @types.
924
+
925
+ Note that the last argument - `config` can be used to pass flags to the `npm install` opration like `save`, `save-dev`, `ignore-scripts` and so on.
926
+
927
+ Sample usage:
928
+ ```JavaScript
929
+ // Install all dependencies from package.json.
930
+ require("mobile-cli-lib").npmService.install("lodash@3.x", "D:\\test\\project", { save: true, "save-exact": true })
931
+ .then(function(result) {
932
+ console.log("The npm result is: ", result);
933
+ }).catch(function(err) {
934
+ console.log("Error while installing packages from npm: ", err);
935
+ });
936
+ ```
937
+
938
+ Sample result will be:
939
+ ```JSON
940
+ {}
941
+ ```
942
+
943
+ ```JavaScript
944
+ // Install specific dependency from npm.
945
+ var dependency = {
946
+ name: "lodash",
947
+ version: "4.15.0",
948
+ installTypes: true
949
+ };
950
+
951
+ require("mobile-cli-lib").npmService.install("D:\\test\\project", dependency)
952
+ .then(function(result) {
953
+ console.log("The npm result is: ", result);
954
+ }).catch(function(err) {
955
+ console.log("Error while installing packages from npm: ", err);
956
+ });
957
+ ```
958
+
959
+ Sample result will be:
960
+ ```JSON
961
+ {
962
+ "result": {
963
+ "isInstalled": true,
964
+ "isTypesInstalled": true
965
+ }
966
+ }
967
+ ```
968
+
969
+ * `uninstall(projectDir: string, dependency: string): Promise` - Uninstalls the dependency and the @types/<dependency> devDependency.
970
+ The method will remove them from package.json and from node_modules dir.
971
+
972
+ Sample usage:
973
+ ```JavaScript
974
+ require("mobile-cli-lib").npmService.uninstall("D:\\test\\project", "lodash")
975
+ .then(function() {
976
+ console.log("The dependency is uninstalled.");
977
+ }).catch(function(err) {
978
+ console.log("Error while uninstalling packages from npm: ", err);
979
+ });
980
+ ```
981
+
982
+ Technical details
983
+ ==
984
+
985
+ ### Injector
986
+ Similar to `AngularJS`, `mobile-cli-lib` is using `$injector` to retrive object instances, instantiate types and load modules. Each module must be registered in the `$injector`, so when another module depends on it, the `$injector` will create a new instance of the dependency or reuse already created one.
987
+
988
+ #### How to add new module
989
+ * Add a new file with kebab-case ([spinal-case](http://en.wikipedia.org/wiki/Letter_case#Special_case_styles)) name. For example when the class that you'll add is called `DeviceService`, it is good practice to call the file `device-service.ts`.
990
+
991
+ * Add your class in the file. The class name should be in <a href="https://msdn.microsoft.com/en-us/library/x2dbyw72(v=vs.71).aspx">Pascal case</a>
992
+
993
+ ```TypeScript
994
+ class DeviceService {
995
+ }
996
+ ```
997
+ > NOTE: The reference path at the top must point the the root of the project, where `.d.ts` file is created by `grunt`.
998
+
999
+ * Register the class in the injector with the name that all other modules will use when they want instance of the `DeviceService`. The name should be in <a href="https://msdn.microsoft.com/en-us/library/x2dbyw72(v=vs.71).aspx">Camel case</a>:
1000
+ ```TypeScript
1001
+ class DeviceService {
1002
+ }
1003
+ $injector.register("deviceService", DeviceService);
1004
+ ```
1005
+
1006
+ * Add the methods you need in your implementation:
1007
+ ```TypeScript
1008
+ class DeviceService {
1009
+ public listDevices(): void {
1010
+ // implementation is here
1011
+ }
1012
+ }
1013
+ $injector.register("deviceService", DeviceService);
1014
+ ```
1015
+
1016
+ * If your class depends on other modules, registered in the `$injector`, you can access them by adding them as parameters of the constructor:
1017
+ ```TypeScript
1018
+ class DeviceService {
1019
+ constructor(private $fs: IFileSystem) { }
1020
+ }
1021
+ $injector.register("deviceService", DeviceService);
1022
+ ```
1023
+
1024
+ > NOTE: In case you do not place access modifier (`private`, `protected` or `public`, you'll be able to use the dependant module only in the constructor.
1025
+
1026
+ > NOTE: The name of the module must be exactly the same as the one used for registering in the `$injector`, in this case this is `fs` module. The preceding dollar symbol `$` is mandatory.
1027
+ Now you can access `fs` methods by using `this.$fs.<method>`.
1028
+
1029
+ * The last step is to add your module to `bootstrap.ts`:
1030
+ ```TypeScript
1031
+ $injector.require("deviceService", "./device-service");
1032
+ ```
1033
+ This line tells the `$injector` to look for module called "deviceService" in a file `device-service` located at the root of the `mobile-cli-lib`.
1034
+ > NOTE: The name of the module must be the same as the one used in `$injector.register` call.
1035
+ `$injector.require` will not load the file. It will be loaded by `$injector` when someone asks for module "deviceService".
1036
+
1037
+ ### How to make a method public
1038
+ In order to expose public API, we use TypeScript decorators and some "magic" in our bootstrapping. When you want to expose method `B` from class `A`, you have to do the following:
1039
+ * In `bootstrap.ts` make sure to use `requirePublic` method of the `$injector` when requiring the file:
1040
+
1041
+ ```TypeScript
1042
+ $injector.requirePublic("deviceService", "./device-service")
1043
+ ```
1044
+
1045
+ * Add the exported decorator on the method which you want to expose: `@decorators.exported('deviceService')`, where decorators are imported from the root of the project: `import decorators = require("./decorators");`
1046
+
1047
+ > IMPORTANT: `exported` decorator requires one parameter which MUST be the first parameter passed to `requirePublic` method. This is the name of the module that will be publicly exposed.
1048
+
1049
+ After you have executed these two steps, you can start using your publicly available method:
1050
+
1051
+ ```JavaScript
1052
+ var common = require("mobile-cli-lib");
1053
+ common.deviceService.listDevices() /* NOTE: here we are not using the class name DeviceService, but the module name - deviceService */
1054
+ .then(function (a) {
1055
+ console.log("After promise had returned.");
1056
+ return a;
1057
+ })
1058
+ .catch(function (err) {
1059
+ console.log("Error happened:");
1060
+ console.log(err);
1061
+ });
1062
+ ```
1063
+
1064
+ #### Behind the scenes of generating public API
1065
+ `requirePublic` method of the `injector` is doing some "magic" in order to support lazy loading, correct dependency resolving and exposing only some of the methods, not the whole power of the common lib.
1066
+ When you require `mobile-cli-lib` module, you receive $injector's publicApi - it is the "exported one". `requirePublic` method defines getter for each module that is passed, for example when you say:
1067
+ ```TypeScript
1068
+ $injector.requirePublic("deviceService", "./device-service")
1069
+ ```
1070
+ a new property is added to publicApi - `deviceService` and a getter is added for it. When you try to access this module, `require("mobile-cli-lib").deviceService.listDevices()`, the getter is called. It resolves the module, by parsing the provided file (`./device-service`)
1071
+ and that's the time when decorators are executed. For each decorated method, a new entry in `$injector.publicApi.__modules__` is created. This is not the same method that you've decorated - it's entirely new method, that returns a Promise.
1072
+ The new method will be used in the publicApi, while original implementation will still be used in all other places in the code. The promisified method will call the original one (in a separate Fiber) and will resolve the Promise with the result of the method.
1073
+
1074
+
1075
+ Issues
1076
+ ==
1077
+
1078
+ ### Missing dependencies
1079
+
1080
+ Some of our modules must be added: staticConfig, config, analyticsService, etc.
1081
+
1082
+ ### Tests for injector
1083
+
1084
+ Add more tests for yok and for register decorator.