nativescript 8.9.0-dev.0 → 8.9.0-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 (405) hide show
  1. package/config/test-deps-versions-generated.json +1 -1
  2. package/lib/.d.ts +1 -0
  3. package/lib/android-tools-info.js +32 -9
  4. package/lib/base-package-manager.js +71 -47
  5. package/lib/bootstrap.js +6 -1
  6. package/lib/bun-package-manager.js +104 -65
  7. package/lib/color.js +5 -2
  8. package/lib/commands/add-platform.js +31 -14
  9. package/lib/commands/apple-login.js +30 -18
  10. package/lib/commands/appstore-list.js +46 -34
  11. package/lib/commands/appstore-upload.js +68 -52
  12. package/lib/commands/build.js +90 -57
  13. package/lib/commands/clean.js +197 -161
  14. package/lib/commands/command-base.js +28 -14
  15. package/lib/commands/config.js +71 -48
  16. package/lib/commands/create-project.js +235 -210
  17. package/lib/commands/debug.js +93 -66
  18. package/lib/commands/deploy.js +47 -30
  19. package/lib/commands/embedding/embed.js +59 -33
  20. package/lib/commands/extensibility/install-extension.js +17 -5
  21. package/lib/commands/extensibility/list-extensions.js +25 -13
  22. package/lib/commands/extensibility/uninstall-extension.js +16 -4
  23. package/lib/commands/fonts.js +42 -30
  24. package/lib/commands/generate-assets.js +29 -13
  25. package/lib/commands/generate-help.js +14 -2
  26. package/lib/commands/generate.js +70 -12
  27. package/lib/commands/info.js +14 -2
  28. package/lib/commands/install.js +50 -34
  29. package/lib/commands/list-platforms.js +26 -14
  30. package/lib/commands/migrate.js +27 -15
  31. package/lib/commands/native-add.js +51 -23
  32. package/lib/commands/platform-clean.js +33 -19
  33. package/lib/commands/plugin/add-plugin.js +26 -12
  34. package/lib/commands/plugin/build-plugin.js +45 -31
  35. package/lib/commands/plugin/create-plugin.js +138 -110
  36. package/lib/commands/plugin/list-plugins.js +34 -22
  37. package/lib/commands/plugin/remove-plugin.js +35 -20
  38. package/lib/commands/plugin/update-plugin.js +34 -20
  39. package/lib/commands/post-install.js +39 -20
  40. package/lib/commands/prepare.js +39 -22
  41. package/lib/commands/preview.js +64 -49
  42. package/lib/commands/remove-platform.js +19 -7
  43. package/lib/commands/resources/resources-update.js +28 -13
  44. package/lib/commands/run.js +77 -55
  45. package/lib/commands/setup.js +1 -0
  46. package/lib/commands/start.js +20 -6
  47. package/lib/commands/test-init.js +138 -123
  48. package/lib/commands/test.js +97 -67
  49. package/lib/commands/typings.js +143 -126
  50. package/lib/commands/update-platform.js +40 -22
  51. package/lib/commands/update.js +45 -30
  52. package/lib/commands/widget.js +767 -0
  53. package/lib/common/bootstrap.js +1 -0
  54. package/lib/common/child-process.js +75 -53
  55. package/lib/common/codeGeneration/code-entity.js +2 -1
  56. package/lib/common/codeGeneration/code-printer.js +2 -1
  57. package/lib/common/command-params.js +19 -7
  58. package/lib/common/commands/analytics.js +43 -27
  59. package/lib/common/commands/autocompletion.js +59 -39
  60. package/lib/common/commands/device/device-log-stream.js +24 -12
  61. package/lib/common/commands/device/get-file.js +35 -22
  62. package/lib/common/commands/device/list-applications.js +24 -12
  63. package/lib/common/commands/device/list-devices.js +90 -72
  64. package/lib/common/commands/device/list-files.js +36 -23
  65. package/lib/common/commands/device/put-file.js +35 -22
  66. package/lib/common/commands/device/run-application.js +26 -12
  67. package/lib/common/commands/device/stop-application.js +23 -11
  68. package/lib/common/commands/device/uninstall-application.js +18 -6
  69. package/lib/common/commands/doctor.js +3 -2
  70. package/lib/common/commands/generate-messages.js +29 -17
  71. package/lib/common/commands/help.js +34 -20
  72. package/lib/common/commands/package-manager-get.js +18 -6
  73. package/lib/common/commands/package-manager-set.js +21 -9
  74. package/lib/common/commands/post-install.js +14 -2
  75. package/lib/common/commands/preuninstall.js +48 -24
  76. package/lib/common/commands/proxy/proxy-base.js +23 -8
  77. package/lib/common/commands/proxy/proxy-clear.js +16 -4
  78. package/lib/common/commands/proxy/proxy-get.js +15 -3
  79. package/lib/common/commands/proxy/proxy-set.js +101 -87
  80. package/lib/common/common-lib.js +1 -0
  81. package/lib/common/constants.js +22 -11
  82. package/lib/common/decorators.js +70 -10
  83. package/lib/common/dispatchers.js +106 -80
  84. package/lib/common/errors.js +116 -91
  85. package/lib/common/file-system.js +141 -108
  86. package/lib/common/header.js +5 -1
  87. package/lib/common/helpers.js +267 -152
  88. package/lib/common/host-info.js +54 -37
  89. package/lib/common/http-client.js +128 -93
  90. package/lib/common/logger/appenders/cli-appender.js +6 -1
  91. package/lib/common/logger/appenders/emit-appender.js +6 -1
  92. package/lib/common/logger/layouts/cli-layout.js +3 -1
  93. package/lib/common/logger/logger.js +9 -4
  94. package/lib/common/messages/messages.js +6 -0
  95. package/lib/common/mobile/android/android-application-manager.js +162 -122
  96. package/lib/common/mobile/android/android-debug-bridge-result-handler.js +2 -1
  97. package/lib/common/mobile/android/android-debug-bridge.js +118 -87
  98. package/lib/common/mobile/android/android-device-file-system.js +135 -98
  99. package/lib/common/mobile/android/android-device-hash-service.js +78 -50
  100. package/lib/common/mobile/android/android-device.js +93 -68
  101. package/lib/common/mobile/android/android-emulator-services.js +131 -105
  102. package/lib/common/mobile/android/android-ini-file-parser.js +9 -0
  103. package/lib/common/mobile/android/android-log-filter.js +5 -1
  104. package/lib/common/mobile/android/android-virtual-device-service.js +123 -76
  105. package/lib/common/mobile/android/device-android-debug-bridge.js +30 -13
  106. package/lib/common/mobile/android/genymotion/genymotion-service.js +123 -91
  107. package/lib/common/mobile/android/genymotion/virtualbox-service.js +92 -64
  108. package/lib/common/mobile/android/logcat-helper.js +140 -108
  109. package/lib/common/mobile/application-manager-base.js +113 -84
  110. package/lib/common/mobile/device-emitter.js +4 -0
  111. package/lib/common/mobile/device-log-emitter.js +1 -0
  112. package/lib/common/mobile/device-log-provider-base.js +19 -7
  113. package/lib/common/mobile/device-log-provider.js +23 -0
  114. package/lib/common/mobile/device-platforms-constants.js +1 -0
  115. package/lib/common/mobile/emulator-helper.js +3 -0
  116. package/lib/common/mobile/ios/device/ios-application-manager.js +111 -79
  117. package/lib/common/mobile/ios/device/ios-device-file-system.js +106 -78
  118. package/lib/common/mobile/ios/device/ios-device-operations.js +146 -105
  119. package/lib/common/mobile/ios/device/ios-device.js +40 -20
  120. package/lib/common/mobile/ios/ios-device-base.js +82 -58
  121. package/lib/common/mobile/ios/ios-device-product-name-mapper.js +2 -0
  122. package/lib/common/mobile/ios/ios-log-filter.js +1 -0
  123. package/lib/common/mobile/ios/simulator/ios-emulator-services.js +96 -63
  124. package/lib/common/mobile/ios/simulator/ios-sim-resolver.js +2 -1
  125. package/lib/common/mobile/ios/simulator/ios-simulator-application-manager.js +95 -60
  126. package/lib/common/mobile/ios/simulator/ios-simulator-device.js +48 -27
  127. package/lib/common/mobile/ios/simulator/ios-simulator-file-system.js +63 -37
  128. package/lib/common/mobile/ios/simulator/ios-simulator-log-provider.js +36 -24
  129. package/lib/common/mobile/local-to-device-path-data-factory.js +1 -0
  130. package/lib/common/mobile/log-filter.js +2 -0
  131. package/lib/common/mobile/logging-levels.js +1 -0
  132. package/lib/common/mobile/mobile-core/android-device-discovery.js +64 -43
  133. package/lib/common/mobile/mobile-core/android-emulator-discovery.js +35 -21
  134. package/lib/common/mobile/mobile-core/android-process-service.js +214 -143
  135. package/lib/common/mobile/mobile-core/device-discovery.js +14 -2
  136. package/lib/common/mobile/mobile-core/devices-service.js +505 -386
  137. package/lib/common/mobile/mobile-core/ios-device-discovery.js +37 -24
  138. package/lib/common/mobile/mobile-core/ios-simulator-discovery.js +65 -47
  139. package/lib/common/mobile/mobile-helper.js +27 -15
  140. package/lib/common/mobile/wp8/wp8-emulator-services.js +53 -25
  141. package/lib/common/opener.js +3 -2
  142. package/lib/common/os-info.js +1 -0
  143. package/lib/common/plist-parser.js +1 -0
  144. package/lib/common/project-helper.js +1 -0
  145. package/lib/common/prompter.js +114 -91
  146. package/lib/common/queue.js +21 -9
  147. package/lib/common/resource-loader.js +1 -0
  148. package/lib/common/services/auto-completion-service.js +65 -40
  149. package/lib/common/services/cancellation.js +29 -17
  150. package/lib/common/services/commands-service.js +180 -146
  151. package/lib/common/services/help-service.js +166 -133
  152. package/lib/common/services/hooks-service.js +121 -93
  153. package/lib/common/services/ios-notification-service.js +35 -21
  154. package/lib/common/services/json-file-settings-service.js +77 -52
  155. package/lib/common/services/lock-service.js +58 -35
  156. package/lib/common/services/message-contract-generator.js +47 -35
  157. package/lib/common/services/messages-service.js +1 -0
  158. package/lib/common/services/micro-templating-service.js +21 -4
  159. package/lib/common/services/net-service.js +110 -90
  160. package/lib/common/services/project-files-manager.js +28 -10
  161. package/lib/common/services/project-files-provider-base.js +1 -0
  162. package/lib/common/services/proxy-service.js +25 -13
  163. package/lib/common/services/qr.js +25 -13
  164. package/lib/common/services/settings-service.js +2 -1
  165. package/lib/common/services/xcode-select-service.js +36 -20
  166. package/lib/common/utils.js +3 -2
  167. package/lib/common/validators/project-name-validator.js +2 -1
  168. package/lib/common/validators/validation-result.js +2 -1
  169. package/lib/common/verify-node-version.js +11 -3
  170. package/lib/common/yok.js +69 -35
  171. package/lib/config.js +72 -36
  172. package/lib/constants-provider.js +1 -0
  173. package/lib/constants.js +78 -25
  174. package/lib/controllers/build-controller.js +100 -82
  175. package/lib/controllers/debug-controller.js +133 -107
  176. package/lib/controllers/deploy-controller.js +24 -15
  177. package/lib/controllers/migrate-controller.js +884 -723
  178. package/lib/controllers/platform-controller.js +94 -71
  179. package/lib/controllers/prepare-controller.js +274 -232
  180. package/lib/controllers/run-controller.js +427 -397
  181. package/lib/controllers/update-controller-base.js +30 -16
  182. package/lib/controllers/update-controller.js +130 -94
  183. package/lib/data/build-data.js +1 -0
  184. package/lib/data/controller-data-base.js +1 -0
  185. package/lib/data/debug-data.js +1 -0
  186. package/lib/data/platform-data.js +1 -0
  187. package/lib/data/prepare-data.js +2 -4
  188. package/lib/data/run-data.js +1 -0
  189. package/lib/definitions/ios.d.ts +4 -2
  190. package/lib/definitions/project.d.ts +26 -0
  191. package/lib/detached-processes/cleanup-js-subprocess.js +20 -5
  192. package/lib/detached-processes/cleanup-process.js +43 -30
  193. package/lib/detached-processes/file-log-service.js +2 -1
  194. package/lib/device-path-provider.js +35 -23
  195. package/lib/device-sockets/ios/app-debug-socket-proxy-factory.js +171 -149
  196. package/lib/device-sockets/ios/notification.js +4 -1
  197. package/lib/device-sockets/ios/socket-request-executor.js +42 -24
  198. package/lib/helpers/android-bundle-validator-helper.js +3 -2
  199. package/lib/helpers/deploy-command-helper.js +50 -44
  200. package/lib/helpers/key-command-helper.js +17 -6
  201. package/lib/helpers/livesync-command-helper.js +155 -137
  202. package/lib/helpers/network-connectivity-validator.js +18 -6
  203. package/lib/helpers/options-track-helper.js +19 -7
  204. package/lib/helpers/package-path-helper.js +1 -0
  205. package/lib/helpers/platform-command-helper.js +127 -101
  206. package/lib/helpers/version-validator-helper.js +1 -0
  207. package/lib/key-commands/bootstrap.js +3 -2
  208. package/lib/key-commands/index.js +205 -154
  209. package/lib/nativescript-cli-lib-bootstrap.js +4 -0
  210. package/lib/nativescript-cli-lib.js +1 -0
  211. package/lib/nativescript-cli.js +24 -6
  212. package/lib/node/pbxproj-dom-xcode.js +1 -0
  213. package/lib/node/xcode.js +1 -0
  214. package/lib/node-package-manager.js +114 -81
  215. package/lib/options.js +156 -122
  216. package/lib/package-installation-manager.js +172 -130
  217. package/lib/package-manager.js +88 -63
  218. package/lib/platform-command-param.js +16 -4
  219. package/lib/pnpm-package-manager.js +81 -59
  220. package/lib/project-data.js +13 -1
  221. package/lib/providers/project-files-provider.js +2 -1
  222. package/lib/resolvers/livesync-service-resolver.js +1 -0
  223. package/lib/services/analytics/analytics-broker-process.js +32 -19
  224. package/lib/services/analytics/analytics-broker.js +31 -17
  225. package/lib/services/analytics/analytics-service.js +210 -170
  226. package/lib/services/analytics/google-analytics-provider.js +59 -43
  227. package/lib/services/analytics-settings-service.js +37 -15
  228. package/lib/services/android/android-bundle-tool-service.js +61 -43
  229. package/lib/services/android/gradle-build-args-service.js +23 -9
  230. package/lib/services/android/gradle-build-service.js +36 -22
  231. package/lib/services/android/gradle-command-service.js +36 -22
  232. package/lib/services/android-device-debug-service.js +123 -90
  233. package/lib/services/android-plugin-build-service.js +260 -205
  234. package/lib/services/android-project-service.js +241 -129
  235. package/lib/services/android-resources-migration-service.js +71 -51
  236. package/lib/services/apple-portal/apple-portal-application-service.js +64 -46
  237. package/lib/services/apple-portal/apple-portal-cookie-service.js +1 -0
  238. package/lib/services/apple-portal/apple-portal-session-service.js +218 -197
  239. package/lib/services/apple-portal/srp/srp-wrapper.js +61 -43
  240. package/lib/services/assets-generation/assets-generation-service.js +128 -103
  241. package/lib/services/build-artifacts-service.js +22 -10
  242. package/lib/services/build-data-service.js +1 -0
  243. package/lib/services/build-info-file-service.js +36 -20
  244. package/lib/services/cleanup-service.js +81 -48
  245. package/lib/services/cocoapods-platform-manager.js +9 -0
  246. package/lib/services/cocoapods-service.js +153 -112
  247. package/lib/services/debug-data-service.js +1 -0
  248. package/lib/services/debug-service-base.js +7 -0
  249. package/lib/services/device/device-install-app-service.js +72 -54
  250. package/lib/services/doctor-service.js +135 -101
  251. package/lib/services/extensibility-service.js +108 -81
  252. package/lib/services/files-hash-service.js +44 -26
  253. package/lib/services/hmr-status-service.js +3 -1
  254. package/lib/services/info-service.js +1 -0
  255. package/lib/services/initialize-service.js +54 -37
  256. package/lib/services/ios/export-options-plist-service.js +55 -38
  257. package/lib/services/ios/ios-signing-service.js +191 -168
  258. package/lib/services/ios/spm-service.js +73 -43
  259. package/lib/services/ios/xcodebuild-args-service.js +103 -77
  260. package/lib/services/ios/xcodebuild-command-service.js +26 -14
  261. package/lib/services/ios/xcodebuild-service.js +72 -52
  262. package/lib/services/ios-debugger-port-service.js +38 -24
  263. package/lib/services/ios-device-debug-service.js +103 -75
  264. package/lib/services/ios-entitlements-service.js +43 -31
  265. package/lib/services/ios-extensions-service.js +30 -18
  266. package/lib/services/ios-log-filter.js +20 -0
  267. package/lib/services/ios-native-target-service.js +6 -4
  268. package/lib/services/ios-project-service.js +605 -437
  269. package/lib/services/ios-provision-service.js +132 -108
  270. package/lib/services/ios-watch-app-service.js +33 -21
  271. package/lib/services/ip-service.js +55 -38
  272. package/lib/services/itmstransporter-service.js +153 -129
  273. package/lib/services/karma-execution.js +2 -0
  274. package/lib/services/livesync/android-device-livesync-service-base.js +49 -31
  275. package/lib/services/livesync/android-device-livesync-service.js +151 -120
  276. package/lib/services/livesync/android-device-livesync-sockets-service.js +155 -121
  277. package/lib/services/livesync/android-livesync-service.js +36 -14
  278. package/lib/services/livesync/android-livesync-tool.js +117 -90
  279. package/lib/services/livesync/device-livesync-service-base.js +30 -15
  280. package/lib/services/livesync/ios-device-livesync-service.js +150 -114
  281. package/lib/services/livesync/ios-livesync-service.js +60 -42
  282. package/lib/services/livesync/livesync-socket.js +1 -0
  283. package/lib/services/livesync/platform-livesync-service-base.js +124 -94
  284. package/lib/services/livesync-process-data-service.js +1 -0
  285. package/lib/services/log-parser-service.js +2 -1
  286. package/lib/services/log-source-map-service.js +56 -30
  287. package/lib/services/marking-mode-service.js +33 -17
  288. package/lib/services/metadata-filtering-service.js +1 -0
  289. package/lib/services/npm-config-service.js +5 -1
  290. package/lib/services/pacote-service.js +73 -51
  291. package/lib/services/performance-service.js +4 -2
  292. package/lib/services/platform/add-platform-service.js +119 -51
  293. package/lib/services/platform/platform-validation-service.js +34 -22
  294. package/lib/services/platform/prepare-native-platform-service.js +65 -49
  295. package/lib/services/platform-environment-requirements.js +43 -27
  296. package/lib/services/platform-project-service-base.js +1 -0
  297. package/lib/services/platforms-data-service.js +1 -0
  298. package/lib/services/plugins-service.js +168 -125
  299. package/lib/services/prepare-data-service.js +1 -0
  300. package/lib/services/project-backup-service.js +5 -1
  301. package/lib/services/project-changes-service.js +152 -124
  302. package/lib/services/project-cleanup-service.js +79 -64
  303. package/lib/services/project-config-service.js +111 -73
  304. package/lib/services/project-data-service.js +154 -108
  305. package/lib/services/project-name-service.js +44 -28
  306. package/lib/services/project-service.js +113 -84
  307. package/lib/services/project-templates-service.js +68 -52
  308. package/lib/services/qr-code-terminal-service.js +1 -0
  309. package/lib/services/require-service.js +1 -0
  310. package/lib/services/start-service.js +60 -41
  311. package/lib/services/temp-service.js +22 -8
  312. package/lib/services/terminal-spinner-service.js +28 -15
  313. package/lib/services/test-execution-service.js +79 -59
  314. package/lib/services/test-initialization-service.js +6 -2
  315. package/lib/services/timeline-profiler-service.js +2 -1
  316. package/lib/services/user-settings-service.js +1 -0
  317. package/lib/services/versions-service.js +140 -119
  318. package/lib/services/watch-ignore-list-service.js +1 -0
  319. package/lib/services/webpack/webpack-compiler-service.js +279 -215
  320. package/lib/services/xcconfig-service.js +21 -8
  321. package/lib/services/xcproj-service.js +1 -0
  322. package/lib/shared-event-bus.js +6 -0
  323. package/lib/sys-info.js +63 -45
  324. package/lib/tools/config-manipulation/config-transformer.js +21 -0
  325. package/lib/tools/node-modules/node-modules-builder.js +28 -16
  326. package/lib/tools/node-modules/node-modules-dependencies-builder.js +6 -0
  327. package/lib/yarn-package-manager.js +79 -59
  328. package/lib/yarn2-package-manager.js +82 -60
  329. package/node_modules/@npmcli/move-file/LICENSE.md +22 -0
  330. package/node_modules/@npmcli/move-file/README.md +69 -0
  331. package/node_modules/@npmcli/move-file/lib/index.js +185 -0
  332. package/node_modules/@npmcli/move-file/node_modules/mkdirp/LICENSE +21 -0
  333. package/node_modules/@npmcli/move-file/node_modules/mkdirp/bin/cmd.js +68 -0
  334. package/node_modules/@npmcli/move-file/node_modules/mkdirp/index.js +31 -0
  335. package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/find-made.js +29 -0
  336. package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/mkdirp-manual.js +64 -0
  337. package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/mkdirp-native.js +39 -0
  338. package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/opts-arg.js +23 -0
  339. package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/path-arg.js +29 -0
  340. package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/use-native.js +10 -0
  341. package/node_modules/@npmcli/move-file/node_modules/mkdirp/package.json +44 -0
  342. package/node_modules/@npmcli/move-file/node_modules/mkdirp/readme.markdown +266 -0
  343. package/node_modules/@npmcli/move-file/package.json +47 -0
  344. package/node_modules/balanced-match/.github/FUNDING.yml +2 -0
  345. package/node_modules/balanced-match/LICENSE.md +21 -0
  346. package/node_modules/balanced-match/README.md +97 -0
  347. package/node_modules/balanced-match/index.js +62 -0
  348. package/node_modules/balanced-match/package.json +48 -0
  349. package/node_modules/concat-map/.travis.yml +4 -0
  350. package/node_modules/concat-map/LICENSE +18 -0
  351. package/node_modules/concat-map/README.markdown +62 -0
  352. package/node_modules/concat-map/example/map.js +6 -0
  353. package/node_modules/concat-map/index.js +13 -0
  354. package/node_modules/concat-map/package.json +43 -0
  355. package/node_modules/concat-map/test/map.js +39 -0
  356. package/node_modules/fs.realpath/LICENSE +43 -0
  357. package/node_modules/fs.realpath/README.md +33 -0
  358. package/node_modules/fs.realpath/index.js +66 -0
  359. package/node_modules/fs.realpath/old.js +303 -0
  360. package/node_modules/fs.realpath/package.json +26 -0
  361. package/node_modules/inflight/LICENSE +15 -0
  362. package/node_modules/inflight/README.md +37 -0
  363. package/node_modules/inflight/inflight.js +54 -0
  364. package/node_modules/inflight/package.json +29 -0
  365. package/node_modules/inherits/LICENSE +16 -0
  366. package/node_modules/inherits/README.md +42 -0
  367. package/node_modules/inherits/inherits.js +9 -0
  368. package/node_modules/inherits/inherits_browser.js +27 -0
  369. package/node_modules/inherits/package.json +29 -0
  370. package/node_modules/once/LICENSE +15 -0
  371. package/node_modules/once/README.md +79 -0
  372. package/node_modules/once/once.js +42 -0
  373. package/node_modules/once/package.json +33 -0
  374. package/node_modules/path-is-absolute/index.js +20 -0
  375. package/node_modules/path-is-absolute/license +21 -0
  376. package/node_modules/path-is-absolute/package.json +43 -0
  377. package/node_modules/path-is-absolute/readme.md +59 -0
  378. package/node_modules/rimraf/LICENSE +15 -0
  379. package/node_modules/rimraf/README.md +101 -0
  380. package/node_modules/rimraf/bin.js +68 -0
  381. package/node_modules/rimraf/node_modules/brace-expansion/LICENSE +21 -0
  382. package/node_modules/rimraf/node_modules/brace-expansion/README.md +129 -0
  383. package/node_modules/rimraf/node_modules/brace-expansion/index.js +201 -0
  384. package/node_modules/rimraf/node_modules/brace-expansion/package.json +47 -0
  385. package/node_modules/rimraf/node_modules/glob/LICENSE +21 -0
  386. package/node_modules/rimraf/node_modules/glob/README.md +378 -0
  387. package/node_modules/rimraf/node_modules/glob/common.js +238 -0
  388. package/node_modules/rimraf/node_modules/glob/glob.js +790 -0
  389. package/node_modules/rimraf/node_modules/glob/package.json +55 -0
  390. package/node_modules/rimraf/node_modules/glob/sync.js +486 -0
  391. package/node_modules/rimraf/node_modules/minimatch/LICENSE +15 -0
  392. package/node_modules/rimraf/node_modules/minimatch/README.md +230 -0
  393. package/node_modules/rimraf/node_modules/minimatch/minimatch.js +947 -0
  394. package/node_modules/rimraf/node_modules/minimatch/package.json +33 -0
  395. package/node_modules/rimraf/package.json +32 -0
  396. package/node_modules/rimraf/rimraf.js +360 -0
  397. package/node_modules/stringify-package/LICENSE +13 -0
  398. package/node_modules/stringify-package/README.md +55 -0
  399. package/node_modules/stringify-package/index.js +18 -0
  400. package/node_modules/stringify-package/package.json +38 -0
  401. package/node_modules/wrappy/LICENSE +15 -0
  402. package/node_modules/wrappy/README.md +36 -0
  403. package/node_modules/wrappy/package.json +29 -0
  404. package/node_modules/wrappy/wrappy.js +33 -0
  405. package/package.json +79 -64
@@ -1,4 +1,13 @@
1
1
  "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
2
11
  Object.defineProperty(exports, "__esModule", { value: true });
3
12
  exports.HelpService = void 0;
4
13
  const path = require("path");
@@ -35,134 +44,155 @@ class HelpService {
35
44
  this.pathToHtmlPages = this.$staticConfig.HTML_PAGES_DIR;
36
45
  this.pathToManPages = this.$staticConfig.MAN_PAGES_DIR;
37
46
  }
38
- async openHelpForCommandInBrowser(commandData) {
39
- const { commandName } = commandData;
40
- const htmlPage = (await this.convertCommandNameToFileName(commandData)) +
41
- HelpService.HTML_FILE_EXTENSION;
42
- this.$logger.trace("Opening help for command '%s'. FileName is '%s'.", commandName, htmlPage);
43
- this.$fs.ensureDirectoryExists(this.pathToHtmlPages);
44
- if (!this.tryOpeningSelectedPage(htmlPage)) {
45
- this.$logger.trace("Required HTML file '%s' is missing. Let's try generating HTML files and see if we'll find it.", htmlPage);
46
- await this.generateHtmlPages();
47
+ openHelpForCommandInBrowser(commandData) {
48
+ return __awaiter(this, void 0, void 0, function* () {
49
+ const { commandName } = commandData;
50
+ const htmlPage = (yield this.convertCommandNameToFileName(commandData)) +
51
+ HelpService.HTML_FILE_EXTENSION;
52
+ this.$logger.trace("Opening help for command '%s'. FileName is '%s'.", commandName, htmlPage);
53
+ this.$fs.ensureDirectoryExists(this.pathToHtmlPages);
47
54
  if (!this.tryOpeningSelectedPage(htmlPage)) {
48
- this.$errors.fail("Unable to find help for '%s'", commandName);
55
+ // HTML pages may have been skipped on post-install, lets generate them.
56
+ this.$logger.trace("Required HTML file '%s' is missing. Let's try generating HTML files and see if we'll find it.", htmlPage);
57
+ yield this.generateHtmlPages();
58
+ if (!this.tryOpeningSelectedPage(htmlPage)) {
59
+ this.$errors.fail("Unable to find help for '%s'", commandName);
60
+ }
49
61
  }
50
- }
62
+ });
51
63
  }
52
- async generateHtmlPages() {
53
- const mdFiles = this.$fs.enumerateFilesInDirectorySync(this.pathToManPages);
54
- const basicHtmlPage = this.$fs.readText(this.pathToBasicPage);
55
- await Promise.all(_.map(mdFiles, (markdownFile) => {
56
- const htmlPageGenerationData = {
57
- basicHtmlPage,
58
- pathToMdFile: markdownFile,
59
- pathToMdPages: this.pathToManPages,
60
- pathToHtmlPages: this.pathToHtmlPages,
61
- };
62
- return this.createHtmlPage(htmlPageGenerationData);
63
- }));
64
- const installedExtensionsData = this.$extensibilityService.getInstalledExtensionsData();
65
- const basicHtmlPageForExtensions = this.$fs.readText(this.pathToBasicPageForExtensions);
66
- for (const extensionData of installedExtensionsData) {
67
- const docsDir = extensionData.docs;
68
- if (docsDir) {
69
- this.$logger.trace(`Start generation of html help content for extension ${extensionData.extensionName}`);
70
- if (!this.$fs.exists(docsDir)) {
71
- this.$logger.warn(`Unable to generate html help pages for extension ${extensionData.extensionName} as the docs directory ${docsDir} does not exist.`);
72
- continue;
73
- }
74
- const htmlDirFullPath = HelpService.getHtmlDirFullPath(docsDir);
75
- this.$fs.ensureDirectoryExists(htmlDirFullPath);
76
- const extensionMdFiles = this.$fs.enumerateFilesInDirectorySync(docsDir);
77
- try {
78
- await Promise.all(_.map(extensionMdFiles, (markdownFile) => {
79
- const htmlPageGenerationData = {
80
- basicHtmlPage: basicHtmlPageForExtensions,
81
- pathToMdFile: markdownFile,
82
- pathToMdPages: docsDir,
83
- pathToHtmlPages: htmlDirFullPath,
84
- extensionName: extensionData.extensionName,
85
- };
86
- return this.createHtmlPage(htmlPageGenerationData);
87
- }));
64
+ generateHtmlPages() {
65
+ return __awaiter(this, void 0, void 0, function* () {
66
+ const mdFiles = this.$fs.enumerateFilesInDirectorySync(this.pathToManPages);
67
+ const basicHtmlPage = this.$fs.readText(this.pathToBasicPage);
68
+ yield Promise.all(_.map(mdFiles, (markdownFile) => {
69
+ const htmlPageGenerationData = {
70
+ basicHtmlPage,
71
+ pathToMdFile: markdownFile,
72
+ pathToMdPages: this.pathToManPages,
73
+ pathToHtmlPages: this.pathToHtmlPages,
74
+ };
75
+ return this.createHtmlPage(htmlPageGenerationData);
76
+ }));
77
+ const installedExtensionsData = this.$extensibilityService.getInstalledExtensionsData();
78
+ const basicHtmlPageForExtensions = this.$fs.readText(this.pathToBasicPageForExtensions);
79
+ for (const extensionData of installedExtensionsData) {
80
+ const docsDir = extensionData.docs;
81
+ if (docsDir) {
82
+ this.$logger.trace(`Start generation of html help content for extension ${extensionData.extensionName}`);
83
+ if (!this.$fs.exists(docsDir)) {
84
+ this.$logger.warn(`Unable to generate html help pages for extension ${extensionData.extensionName} as the docs directory ${docsDir} does not exist.`);
85
+ continue;
86
+ }
87
+ const htmlDirFullPath = HelpService.getHtmlDirFullPath(docsDir);
88
+ this.$fs.ensureDirectoryExists(htmlDirFullPath);
89
+ const extensionMdFiles = this.$fs.enumerateFilesInDirectorySync(docsDir);
90
+ try {
91
+ yield Promise.all(_.map(extensionMdFiles, (markdownFile) => {
92
+ const htmlPageGenerationData = {
93
+ basicHtmlPage: basicHtmlPageForExtensions,
94
+ pathToMdFile: markdownFile,
95
+ pathToMdPages: docsDir,
96
+ pathToHtmlPages: htmlDirFullPath,
97
+ extensionName: extensionData.extensionName,
98
+ };
99
+ return this.createHtmlPage(htmlPageGenerationData);
100
+ }));
101
+ }
102
+ catch (err) {
103
+ this.$logger.warn(`Unable to generate html help for extension ${extensionData.extensionName}. Error is: ${err.message}`);
104
+ }
105
+ this.$logger.trace(`Finished generation of html help content for extension ${extensionData.extensionName}`);
88
106
  }
89
- catch (err) {
90
- this.$logger.warn(`Unable to generate html help for extension ${extensionData.extensionName}. Error is: ${err.message}`);
91
- }
92
- this.$logger.trace(`Finished generation of html help content for extension ${extensionData.extensionName}`);
93
107
  }
94
- }
95
- this.$logger.trace("Finished generating HTML files.");
96
- }
97
- async showCommandLineHelp(commandData) {
98
- const help = await this.getCommandLineHelpForCommand(commandData);
99
- this.$logger.printMarkdown(help);
100
- }
101
- async getCommandLineHelpForCommand(commandData) {
102
- const helpText = await this.readMdFileForCommand(commandData);
103
- const commandLineHelp = (await this.$microTemplateService.parseContent(helpText, { isHtml: false }))
104
- .replace(/ /g, " ")
105
- .replace(HelpService.MARKDOWN_LINK_REGEX, "$1")
106
- .replace(HelpService.SPAN_REGEX, (matchingSubstring, textBeforeSpan, textInsideSpan, index, fullString) => {
107
- return textBeforeSpan + textInsideSpan.replace(this.newLineRegex, "");
108
- })
109
- .replace(HelpService.NEW_LINE_REGEX, os_1.EOL);
110
- return commandLineHelp;
111
- }
112
- async createHtmlPage(htmlPageGenerationData) {
113
- const { basicHtmlPage, pathToMdFile, pathToMdPages, pathToHtmlPages, extensionName, } = htmlPageGenerationData;
114
- const mdFileName = path.basename(pathToMdFile);
115
- const htmlFileName = mdFileName.replace(HelpService.MARKDOWN_FILE_EXTENSION, HelpService.HTML_FILE_EXTENSION);
116
- this.$logger.trace("Generating '%s' help topic.", htmlFileName);
117
- const helpText = this.$fs.readText(pathToMdFile);
118
- const outputText = await this.$microTemplateService.parseContent(helpText, {
119
- isHtml: true,
108
+ this.$logger.trace("Finished generating HTML files.");
109
+ });
110
+ }
111
+ showCommandLineHelp(commandData) {
112
+ return __awaiter(this, void 0, void 0, function* () {
113
+ const help = yield this.getCommandLineHelpForCommand(commandData);
114
+ this.$logger.printMarkdown(help);
115
+ });
116
+ }
117
+ /**
118
+ * Gets the help content for a specific command that should be shown on the terminal.
119
+ * @param {string} commandName Name of the command for which to read the help.
120
+ * @returns {Promise<string>} Help content of the command parsed with all terminal rules applied (stripped content that should be shown only for html help).
121
+ */
122
+ getCommandLineHelpForCommand(commandData) {
123
+ return __awaiter(this, void 0, void 0, function* () {
124
+ const helpText = yield this.readMdFileForCommand(commandData);
125
+ const commandLineHelp = (yield this.$microTemplateService.parseContent(helpText, { isHtml: false }))
126
+ .replace(/&nbsp;/g, " ")
127
+ .replace(HelpService.MARKDOWN_LINK_REGEX, "$1")
128
+ .replace(HelpService.SPAN_REGEX, (matchingSubstring, textBeforeSpan, textInsideSpan, index, fullString) => {
129
+ return textBeforeSpan + textInsideSpan.replace(this.newLineRegex, "");
130
+ })
131
+ .replace(HelpService.NEW_LINE_REGEX, os_1.EOL);
132
+ return commandLineHelp;
133
+ });
134
+ }
135
+ // This method should return Promise in order to generate all html pages simultaneously.
136
+ createHtmlPage(htmlPageGenerationData) {
137
+ return __awaiter(this, void 0, void 0, function* () {
138
+ const { basicHtmlPage, pathToMdFile, pathToMdPages, pathToHtmlPages, extensionName, } = htmlPageGenerationData;
139
+ const mdFileName = path.basename(pathToMdFile);
140
+ const htmlFileName = mdFileName.replace(HelpService.MARKDOWN_FILE_EXTENSION, HelpService.HTML_FILE_EXTENSION);
141
+ this.$logger.trace("Generating '%s' help topic.", htmlFileName);
142
+ const helpText = this.$fs.readText(pathToMdFile);
143
+ const outputText = yield this.$microTemplateService.parseContent(helpText, {
144
+ isHtml: true,
145
+ });
146
+ const htmlText = (0, marked_1.marked)(outputText);
147
+ const filePath = pathToMdFile
148
+ .replace(path.basename(pathToMdPages), path.basename(pathToHtmlPages))
149
+ .replace(mdFileName, htmlFileName);
150
+ this.$logger.trace("HTML file path for '%s' man page is: '%s'.", mdFileName, filePath);
151
+ let outputHtml = basicHtmlPage
152
+ .replace(HelpService.MAN_PAGE_NAME_REGEX, mdFileName.replace(HelpService.MARKDOWN_FILE_EXTENSION, ""))
153
+ .replace(HelpService.HTML_COMMAND_HELP_REGEX, htmlText)
154
+ .replace(HelpService.RELATIVE_PATH_TO_STYLES_CSS_REGEX, path.relative(path.dirname(filePath), this.pathToStylesCss))
155
+ .replace(HelpService.RELATIVE_PATH_TO_IMAGES_REGEX, path.relative(path.dirname(filePath), this.pathToImages))
156
+ .replace(HelpService.RELATIVE_PATH_TO_INDEX_REGEX, path.relative(path.dirname(filePath), this.pathToIndexHtml));
157
+ if (extensionName) {
158
+ outputHtml = outputHtml.replace(HelpService.EXTENSION_NAME_REGEX, extensionName);
159
+ }
160
+ this.$fs.writeFile(filePath, outputHtml);
161
+ this.$logger.trace("Finished writing file '%s'.", filePath);
162
+ });
163
+ }
164
+ convertCommandNameToFileName(commandData) {
165
+ return __awaiter(this, void 0, void 0, function* () {
166
+ let { commandName } = commandData;
167
+ const defaultCommandMatch = commandName && commandName.match(/([\w-]+?)\|\*/);
168
+ if (defaultCommandMatch) {
169
+ this.$logger.trace("Default command found. Replace current command name '%s' with '%s'.", commandName, defaultCommandMatch[1]);
170
+ commandName = defaultCommandMatch[1];
171
+ }
172
+ const availableCommands = this.$injector
173
+ .getRegisteredCommandsNames(true)
174
+ .sort();
175
+ this.$logger.trace("List of registered commands: %s", availableCommands.join(", "));
176
+ if (commandName && !_.includes(availableCommands, commandName)) {
177
+ yield this.throwMissingCommandError(commandData);
178
+ }
179
+ return (commandName && commandName.replace(/\|/g, "-")) || "start";
180
+ });
181
+ }
182
+ throwMissingCommandError(commandData) {
183
+ return __awaiter(this, void 0, void 0, function* () {
184
+ const commandName = commandData.commandName;
185
+ const commandInfo = {
186
+ inputStrings: [commandName, ...commandData.commandArguments],
187
+ commandDelimiter: "|" /* CommandsDelimiters.HierarchicalCommand */,
188
+ defaultCommandDelimiter: "|*" /* CommandsDelimiters.DefaultHierarchicalCommand */,
189
+ };
190
+ const extensionData = yield this.$extensibilityService.getExtensionNameWhereCommandIsRegistered(commandInfo);
191
+ if (extensionData) {
192
+ this.$errors.fail(extensionData.installationMessage);
193
+ }
194
+ this.$errors.fail("Unknown command '%s'. Try '$ %s help' for a full list of supported commands.", commandName, this.$staticConfig.CLIENT_NAME.toLowerCase());
120
195
  });
121
- const htmlText = await (0, marked_1.marked)(outputText);
122
- const filePath = pathToMdFile
123
- .replace(path.basename(pathToMdPages), path.basename(pathToHtmlPages))
124
- .replace(mdFileName, htmlFileName);
125
- this.$logger.trace("HTML file path for '%s' man page is: '%s'.", mdFileName, filePath);
126
- let outputHtml = basicHtmlPage
127
- .replace(HelpService.MAN_PAGE_NAME_REGEX, mdFileName.replace(HelpService.MARKDOWN_FILE_EXTENSION, ""))
128
- .replace(HelpService.HTML_COMMAND_HELP_REGEX, htmlText)
129
- .replace(HelpService.RELATIVE_PATH_TO_STYLES_CSS_REGEX, path.relative(path.dirname(filePath), this.pathToStylesCss))
130
- .replace(HelpService.RELATIVE_PATH_TO_IMAGES_REGEX, path.relative(path.dirname(filePath), this.pathToImages))
131
- .replace(HelpService.RELATIVE_PATH_TO_INDEX_REGEX, path.relative(path.dirname(filePath), this.pathToIndexHtml));
132
- if (extensionName) {
133
- outputHtml = outputHtml.replace(HelpService.EXTENSION_NAME_REGEX, extensionName);
134
- }
135
- this.$fs.writeFile(filePath, outputHtml);
136
- this.$logger.trace("Finished writing file '%s'.", filePath);
137
- }
138
- async convertCommandNameToFileName(commandData) {
139
- let { commandName } = commandData;
140
- const defaultCommandMatch = commandName && commandName.match(/([\w-]+?)\|\*/);
141
- if (defaultCommandMatch) {
142
- this.$logger.trace("Default command found. Replace current command name '%s' with '%s'.", commandName, defaultCommandMatch[1]);
143
- commandName = defaultCommandMatch[1];
144
- }
145
- const availableCommands = this.$injector
146
- .getRegisteredCommandsNames(true)
147
- .sort();
148
- this.$logger.trace("List of registered commands: %s", availableCommands.join(", "));
149
- if (commandName && !_.includes(availableCommands, commandName)) {
150
- await this.throwMissingCommandError(commandData);
151
- }
152
- return (commandName && commandName.replace(/\|/g, "-")) || "start";
153
- }
154
- async throwMissingCommandError(commandData) {
155
- const commandName = commandData.commandName;
156
- const commandInfo = {
157
- inputStrings: [commandName, ...commandData.commandArguments],
158
- commandDelimiter: "|",
159
- defaultCommandDelimiter: "|*",
160
- };
161
- const extensionData = await this.$extensibilityService.getExtensionNameWhereCommandIsRegistered(commandInfo);
162
- if (extensionData) {
163
- this.$errors.fail(extensionData.installationMessage);
164
- }
165
- this.$errors.fail("Unknown command '%s'. Try '$ %s help' for a full list of supported commands.", commandName, this.$staticConfig.CLIENT_NAME.toLowerCase());
166
196
  }
167
197
  static getHtmlDirFullPath(docsDir) {
168
198
  return path.join(path.dirname(docsDir), "html");
@@ -201,18 +231,19 @@ class HelpService {
201
231
  this.$logger.trace("Unable to find file: '%s'", htmlPage);
202
232
  return false;
203
233
  }
204
- async readMdFileForCommand(commandData) {
205
- const mdFileName = (await this.convertCommandNameToFileName(commandData)) +
206
- HelpService.MARKDOWN_FILE_EXTENSION;
207
- this.$logger.trace("Reading help for command '%s'. FileName is '%s'.", commandData.commandName, mdFileName);
208
- const markdownFile = this.getHelpFile(mdFileName, this.pathToManPages);
209
- if (markdownFile) {
210
- return this.$fs.readText(markdownFile);
211
- }
212
- await this.throwMissingCommandError(commandData);
234
+ readMdFileForCommand(commandData) {
235
+ return __awaiter(this, void 0, void 0, function* () {
236
+ const mdFileName = (yield this.convertCommandNameToFileName(commandData)) +
237
+ HelpService.MARKDOWN_FILE_EXTENSION;
238
+ this.$logger.trace("Reading help for command '%s'. FileName is '%s'.", commandData.commandName, mdFileName);
239
+ const markdownFile = this.getHelpFile(mdFileName, this.pathToManPages);
240
+ if (markdownFile) {
241
+ return this.$fs.readText(markdownFile);
242
+ }
243
+ yield this.throwMissingCommandError(commandData);
244
+ });
213
245
  }
214
246
  }
215
- exports.HelpService = HelpService;
216
247
  HelpService.MARKDOWN_FILE_EXTENSION = ".md";
217
248
  HelpService.HTML_FILE_EXTENSION = ".html";
218
249
  HelpService.MAN_PAGE_NAME_REGEX = /@MAN_PAGE_NAME@/g;
@@ -223,5 +254,7 @@ HelpService.RELATIVE_PATH_TO_INDEX_REGEX = /@RELATIVE_PATH_TO_INDEX@/g;
223
254
  HelpService.EXTENSION_NAME_REGEX = /@EXTENSION_NAME@/g;
224
255
  HelpService.MARKDOWN_LINK_REGEX = /\[([\w \-\`\<\>\*\:\\]+?)\]\([\s\S]+?\)/g;
225
256
  HelpService.SPAN_REGEX = /([\s\S]*?)(?:\r?\n)?<span.*?>([\s\S]*?)<\/span>(?:\r?\n)*/g;
226
- HelpService.NEW_LINE_REGEX = /<\/?\s*?br\s*?\/?>/g;
257
+ HelpService.NEW_LINE_REGEX = /<\/?\s*?br\s*?\/?>/g; // <br>, <br > <br/> <br />
258
+ exports.HelpService = HelpService;
227
259
  yok_1.injector.register("helpService", HelpService);
260
+ //# sourceMappingURL=help-service.js.map
@@ -5,6 +5,15 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
5
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
6
  return c > 3 && r && Object.defineProperty(target, key, r), r;
7
7
  };
8
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
9
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
10
+ return new (P || (P = Promise))(function (resolve, reject) {
11
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
12
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
13
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
14
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
15
+ });
16
+ };
8
17
  Object.defineProperty(exports, "__esModule", { value: true });
9
18
  exports.HooksService = void 0;
10
19
  const path = require("path");
@@ -52,6 +61,7 @@ class HooksService {
52
61
  }
53
62
  }
54
63
  static formatHookName(commandName) {
64
+ // Remove everything after | (including the pipe)
55
65
  return commandName.replace(/\|[\s\S]*$/, "");
56
66
  }
57
67
  executeBeforeHooks(commandName, hookArguments) {
@@ -64,111 +74,123 @@ class HooksService {
64
74
  const traceMessage = `AfterHookName for command ${commandName} is ${afterHookName}`;
65
75
  return this.executeHooks(afterHookName, traceMessage, hookArguments);
66
76
  }
67
- async executeHooks(hookName, traceMessage, hookArguments) {
68
- if (this.$config.DISABLE_HOOKS || !this.$options.hooks) {
69
- return;
70
- }
71
- const hookArgs = hookArguments && hookArguments[this.hookArgsName];
72
- let projectDir = hookArgs && hookArgs.projectDir;
73
- if (!projectDir && hookArgs) {
74
- const candidate = (0, helpers_1.getValueFromNestedObject)(hookArgs, "projectDir");
75
- projectDir = candidate && candidate.projectDir;
76
- }
77
- this.$logger.trace(`Project dir from hooksArgs is: ${projectDir}.`);
78
- this.initialize(projectDir);
79
- this.$logger.trace(traceMessage);
80
- const results = [];
81
- try {
82
- for (const hooksDirectory of this.hooksDirectories) {
83
- results.push(await this.executeHooksInDirectory(hooksDirectory, hookName, hookArguments));
77
+ executeHooks(hookName, traceMessage, hookArguments) {
78
+ return __awaiter(this, void 0, void 0, function* () {
79
+ if (this.$config.DISABLE_HOOKS || !this.$options.hooks) {
80
+ return;
84
81
  }
85
- const customHooks = this.getCustomHooksByName(hookName);
86
- for (const hook of customHooks) {
87
- results.push(await this.executeHook(this.$projectHelper.projectDir, hookName, hook, hookArguments));
82
+ const hookArgs = hookArguments && hookArguments[this.hookArgsName];
83
+ let projectDir = hookArgs && hookArgs.projectDir;
84
+ if (!projectDir && hookArgs) {
85
+ const candidate = (0, helpers_1.getValueFromNestedObject)(hookArgs, "projectDir");
86
+ projectDir = candidate && candidate.projectDir;
88
87
  }
89
- }
90
- catch (err) {
91
- this.$logger.trace(`Failed during hook execution ${hookName}.`);
92
- this.$errors.fail(err.message || err);
93
- }
94
- return _.flatten(results);
95
- }
96
- async executeHook(directoryPath, hookName, hook, hookArguments) {
97
- hookArguments = hookArguments || {};
98
- let result;
99
- const relativePath = path.relative(directoryPath, hook.fullPath);
100
- const trackId = relativePath.replace(new RegExp("\\" + path.sep, "g"), constants_1.AnalyticsEventLabelDelimiter);
101
- let command = this.getSheBangInterpreter(hook);
102
- let inProc = false;
103
- if (!command) {
104
- command = hook.fullPath;
105
- if (path.extname(hook.fullPath).toLowerCase() === ".js") {
106
- command = process.argv[0];
107
- inProc = this.shouldExecuteInProcess(this.$fs.readText(hook.fullPath));
88
+ this.$logger.trace(`Project dir from hooksArgs is: ${projectDir}.`);
89
+ this.initialize(projectDir);
90
+ this.$logger.trace(traceMessage);
91
+ const results = [];
92
+ try {
93
+ for (const hooksDirectory of this.hooksDirectories) {
94
+ results.push(yield this.executeHooksInDirectory(hooksDirectory, hookName, hookArguments));
95
+ }
96
+ const customHooks = this.getCustomHooksByName(hookName);
97
+ for (const hook of customHooks) {
98
+ results.push(yield this.executeHook(this.$projectHelper.projectDir, hookName, hook, hookArguments));
99
+ }
108
100
  }
109
- }
110
- const startTime = this.$performanceService.now();
111
- if (inProc) {
112
- this.$logger.trace("Executing %s hook at location %s in-process", hookName, hook.fullPath);
113
- const hookEntryPoint = require(hook.fullPath);
114
- this.$logger.trace(`Validating ${hookName} arguments.`);
115
- const invalidArguments = this.validateHookArguments(hookEntryPoint, hook.fullPath);
116
- if (invalidArguments.length) {
117
- this.$logger.warn(`${hook.fullPath} will NOT be executed because it has invalid arguments - ${color_1.color.grey(invalidArguments.join(", "))}.`);
118
- return;
101
+ catch (err) {
102
+ this.$logger.trace(`Failed during hook execution ${hookName}.`);
103
+ this.$errors.fail(err.message || err);
119
104
  }
120
- const projectDataHookArg = hookArguments["hookArgs"] && hookArguments["hookArgs"]["projectData"];
121
- if (projectDataHookArg) {
122
- hookArguments["projectData"] = hookArguments["$projectData"] = projectDataHookArg;
105
+ return _.flatten(results);
106
+ });
107
+ }
108
+ executeHook(directoryPath, hookName, hook, hookArguments) {
109
+ return __awaiter(this, void 0, void 0, function* () {
110
+ hookArguments = hookArguments || {};
111
+ let result;
112
+ const relativePath = path.relative(directoryPath, hook.fullPath);
113
+ const trackId = relativePath.replace(new RegExp("\\" + path.sep, "g"), constants_1.AnalyticsEventLabelDelimiter);
114
+ let command = this.getSheBangInterpreter(hook);
115
+ let inProc = false;
116
+ if (!command) {
117
+ command = hook.fullPath;
118
+ if (path.extname(hook.fullPath).toLowerCase() === ".js") {
119
+ command = process.argv[0];
120
+ inProc = this.shouldExecuteInProcess(this.$fs.readText(hook.fullPath));
121
+ }
123
122
  }
124
- const maybePromise = this.$injector.resolve(hookEntryPoint, hookArguments);
125
- if (maybePromise) {
126
- this.$logger.trace("Hook promises to signal completion");
127
- try {
128
- result = await maybePromise;
123
+ const startTime = this.$performanceService.now();
124
+ if (inProc) {
125
+ this.$logger.trace("Executing %s hook at location %s in-process", hookName, hook.fullPath);
126
+ const hookEntryPoint = require(hook.fullPath);
127
+ this.$logger.trace(`Validating ${hookName} arguments.`);
128
+ const invalidArguments = this.validateHookArguments(hookEntryPoint, hook.fullPath);
129
+ if (invalidArguments.length) {
130
+ this.$logger.warn(`${hook.fullPath} will NOT be executed because it has invalid arguments - ${color_1.color.grey(invalidArguments.join(", "))}.`);
131
+ return;
129
132
  }
130
- catch (err) {
131
- if (err &&
132
- _.isBoolean(err.stopExecution) &&
133
- err.errorAsWarning === true) {
134
- this.$logger.warn(err.message || err);
133
+ // HACK for backwards compatibility:
134
+ // In case $projectData wasn't resolved by the time we got here (most likely we got here without running a command but through a service directly)
135
+ // then it is probably passed as a hookArg
136
+ // if that is the case then pass it directly to the hook instead of trying to resolve $projectData via injector
137
+ // This helps make hooks stateless
138
+ const projectDataHookArg = hookArguments["hookArgs"] && hookArguments["hookArgs"]["projectData"];
139
+ if (projectDataHookArg) {
140
+ hookArguments["projectData"] = hookArguments["$projectData"] = projectDataHookArg;
141
+ }
142
+ const maybePromise = this.$injector.resolve(hookEntryPoint, hookArguments);
143
+ if (maybePromise) {
144
+ this.$logger.trace("Hook promises to signal completion");
145
+ try {
146
+ result = yield maybePromise;
135
147
  }
136
- else {
137
- this.$logger.error(err);
138
- throw err || new Error(`Failed to execute hook: ${hook.fullPath}.`);
148
+ catch (err) {
149
+ if (err &&
150
+ _.isBoolean(err.stopExecution) &&
151
+ err.errorAsWarning === true) {
152
+ this.$logger.warn(err.message || err);
153
+ }
154
+ else {
155
+ // Print the actual error with its callstack, so it is easy to find out which hooks is causing troubles.
156
+ this.$logger.error(err);
157
+ throw err || new Error(`Failed to execute hook: ${hook.fullPath}.`);
158
+ }
139
159
  }
160
+ this.$logger.trace("Hook completed");
140
161
  }
141
- this.$logger.trace("Hook completed");
142
162
  }
143
- }
144
- else {
145
- const environment = this.prepareEnvironment(hook.fullPath);
146
- this.$logger.trace("Executing %s hook at location %s with environment ", hookName, hook.fullPath, environment);
147
- const output = await this.$childProcess.spawnFromEvent(command, [hook.fullPath], "close", environment, { throwError: false });
148
- result = output;
149
- if (output.exitCode !== 0) {
150
- throw new Error(output.stdout + output.stderr);
163
+ else {
164
+ const environment = this.prepareEnvironment(hook.fullPath);
165
+ this.$logger.trace("Executing %s hook at location %s with environment ", hookName, hook.fullPath, environment);
166
+ const output = yield this.$childProcess.spawnFromEvent(command, [hook.fullPath], "close", environment, { throwError: false });
167
+ result = output;
168
+ if (output.exitCode !== 0) {
169
+ throw new Error(output.stdout + output.stderr);
170
+ }
171
+ this.$logger.trace("Finished executing %s hook at location %s with environment ", hookName, hook.fullPath, environment);
151
172
  }
152
- this.$logger.trace("Finished executing %s hook at location %s with environment ", hookName, hook.fullPath, environment);
153
- }
154
- const endTime = this.$performanceService.now();
155
- this.$performanceService.processExecutionData(trackId, startTime, endTime, [
156
- hookArguments,
157
- ]);
158
- return result;
173
+ const endTime = this.$performanceService.now();
174
+ this.$performanceService.processExecutionData(trackId, startTime, endTime, [
175
+ hookArguments,
176
+ ]);
177
+ return result;
178
+ });
159
179
  }
160
- async executeHooksInDirectory(directoryPath, hookName, hookArguments) {
161
- hookArguments = hookArguments || {};
162
- const results = [];
163
- const hooks = this.getHooksByName(directoryPath, hookName);
164
- for (let i = 0; i < hooks.length; ++i) {
165
- const hook = hooks[i];
166
- const result = await this.executeHook(directoryPath, hookName, hook, hookArguments);
167
- if (result) {
168
- results.push(result);
180
+ executeHooksInDirectory(directoryPath, hookName, hookArguments) {
181
+ return __awaiter(this, void 0, void 0, function* () {
182
+ hookArguments = hookArguments || {};
183
+ const results = [];
184
+ const hooks = this.getHooksByName(directoryPath, hookName);
185
+ for (let i = 0; i < hooks.length; ++i) {
186
+ const hook = hooks[i];
187
+ const result = yield this.executeHook(directoryPath, hookName, hook, hookArguments);
188
+ if (result) {
189
+ results.push(result);
190
+ }
169
191
  }
170
- }
171
- return results;
192
+ return results;
193
+ });
172
194
  }
173
195
  getCustomHooksByName(hookName) {
174
196
  const hooks = [];
@@ -236,6 +258,7 @@ class HooksService {
236
258
  interpreter = sheBangMatch[1];
237
259
  }
238
260
  if (interpreter) {
261
+ // Likewise, make /usr/bin/bash work like "bash".
239
262
  shMatch = interpreter.match(/bin\/((?:ba)?sh)$/);
240
263
  }
241
264
  if (shMatch) {
@@ -276,6 +299,7 @@ class HooksService {
276
299
  }
277
300
  validateHookArguments(hookConstructor, hookFullPath) {
278
301
  const invalidArguments = [];
302
+ // We need to annotate the hook in order to have the arguments of the constructor.
279
303
  (0, helpers_1.annotate)(hookConstructor);
280
304
  _.each(hookConstructor.$inject.args, (argument) => {
281
305
  try {
@@ -291,13 +315,17 @@ class HooksService {
291
315
  return invalidArguments;
292
316
  }
293
317
  }
294
- exports.HooksService = HooksService;
295
318
  HooksService.HOOKS_DIRECTORY_NAME = "hooks";
296
319
  __decorate([
297
320
  (0, decorators_1.memoize)({
298
321
  shouldCache() {
322
+ // only cache if we have hooks directories, the only case to
323
+ // not have hooks directories is when the project dir is
324
+ // not set yet, ie. when creating a project.
299
325
  return !!this.hooksDirectories.length;
300
326
  },
301
327
  })
302
328
  ], HooksService.prototype, "initialize", null);
329
+ exports.HooksService = HooksService;
303
330
  yok_1.injector.register("hooksService", HooksService);
331
+ //# sourceMappingURL=hooks-service.js.map