@ohos-ports/nx 17.3.2-beta.0

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 (671) hide show
  1. package/.eslintrc.json +106 -0
  2. package/LICENSE +22 -0
  3. package/README.md +66 -0
  4. package/bin/init-local.d.ts +8 -0
  5. package/bin/init-local.js +175 -0
  6. package/bin/nx-cloud.d.ts +2 -0
  7. package/bin/nx-cloud.js +55 -0
  8. package/bin/nx.d.ts +2 -0
  9. package/bin/nx.js +230 -0
  10. package/bin/post-install.d.ts +1 -0
  11. package/bin/post-install.js +55 -0
  12. package/bin/run-executor.d.ts +1 -0
  13. package/bin/run-executor.js +66 -0
  14. package/executors.json +19 -0
  15. package/generators.json +10 -0
  16. package/migrations.json +87 -0
  17. package/package.json +186 -0
  18. package/plugins/package-json.d.ts +1 -0
  19. package/plugins/package-json.js +12 -0
  20. package/presets/core.json +1 -0
  21. package/presets/npm.json +7 -0
  22. package/release/changelog-renderer/index.d.ts +56 -0
  23. package/release/changelog-renderer/index.js +238 -0
  24. package/release/index.d.ts +4 -0
  25. package/release/index.js +11 -0
  26. package/schemas/nx-schema.json +623 -0
  27. package/schemas/project-schema.json +244 -0
  28. package/schemas/workspace-schema.json +185 -0
  29. package/src/adapter/angular-json.d.ts +9 -0
  30. package/src/adapter/angular-json.js +127 -0
  31. package/src/adapter/compat.d.ts +2 -0
  32. package/src/adapter/compat.js +136 -0
  33. package/src/adapter/decorate-cli.d.ts +1 -0
  34. package/src/adapter/decorate-cli.js +25 -0
  35. package/src/adapter/ngcli-adapter.d.ts +90 -0
  36. package/src/adapter/ngcli-adapter.js +848 -0
  37. package/src/adapter/rxjs-for-await.d.ts +109 -0
  38. package/src/adapter/rxjs-for-await.js +362 -0
  39. package/src/command-line/add/add.d.ts +2 -0
  40. package/src/command-line/add/add.js +165 -0
  41. package/src/command-line/add/command-object.d.ts +7 -0
  42. package/src/command-line/add/command-object.js +24 -0
  43. package/src/command-line/affected/affected.d.ts +7 -0
  44. package/src/command-line/affected/affected.js +105 -0
  45. package/src/command-line/affected/command-object.d.ts +16 -0
  46. package/src/command-line/affected/command-object.js +93 -0
  47. package/src/command-line/affected/print-affected.d.ts +11 -0
  48. package/src/command-line/affected/print-affected.js +108 -0
  49. package/src/command-line/connect/command-object.d.ts +3 -0
  50. package/src/command-line/connect/command-object.js +19 -0
  51. package/src/command-line/connect/connect-to-nx-cloud.d.ts +8 -0
  52. package/src/command-line/connect/connect-to-nx-cloud.js +96 -0
  53. package/src/command-line/connect/view-logs.d.ts +1 -0
  54. package/src/command-line/connect/view-logs.js +53 -0
  55. package/src/command-line/daemon/command-object.d.ts +2 -0
  56. package/src/command-line/daemon/command-object.js +21 -0
  57. package/src/command-line/daemon/daemon.d.ts +2 -0
  58. package/src/command-line/daemon/daemon.js +27 -0
  59. package/src/command-line/examples.d.ts +5 -0
  60. package/src/command-line/examples.js +347 -0
  61. package/src/command-line/exec/command-object.d.ts +2 -0
  62. package/src/command-line/exec/command-object.js +19 -0
  63. package/src/command-line/exec/exec.d.ts +1 -0
  64. package/src/command-line/exec/exec.js +141 -0
  65. package/src/command-line/format/command-object.d.ts +3 -0
  66. package/src/command-line/format/command-object.js +46 -0
  67. package/src/command-line/format/format.d.ts +2 -0
  68. package/src/command-line/format/format.js +155 -0
  69. package/src/command-line/generate/command-object.d.ts +2 -0
  70. package/src/command-line/generate/command-object.js +70 -0
  71. package/src/command-line/generate/generate.d.ts +21 -0
  72. package/src/command-line/generate/generate.js +266 -0
  73. package/src/command-line/generate/generator-utils.d.ts +17 -0
  74. package/src/command-line/generate/generator-utils.js +87 -0
  75. package/src/command-line/graph/command-object.d.ts +2 -0
  76. package/src/command-line/graph/command-object.js +21 -0
  77. package/src/command-line/graph/graph.d.ts +39 -0
  78. package/src/command-line/graph/graph.js +661 -0
  79. package/src/command-line/init/command-object.d.ts +2 -0
  80. package/src/command-line/init/command-object.js +81 -0
  81. package/src/command-line/init/implementation/add-nx-to-monorepo.d.ts +4 -0
  82. package/src/command-line/init/implementation/add-nx-to-monorepo.js +133 -0
  83. package/src/command-line/init/implementation/add-nx-to-nest.d.ts +5 -0
  84. package/src/command-line/init/implementation/add-nx-to-nest.js +346 -0
  85. package/src/command-line/init/implementation/add-nx-to-npm-repo.d.ts +4 -0
  86. package/src/command-line/init/implementation/add-nx-to-npm-repo.js +66 -0
  87. package/src/command-line/init/implementation/angular/index.d.ts +2 -0
  88. package/src/command-line/init/implementation/angular/index.js +128 -0
  89. package/src/command-line/init/implementation/angular/integrated-workspace.d.ts +1 -0
  90. package/src/command-line/init/implementation/angular/integrated-workspace.js +10 -0
  91. package/src/command-line/init/implementation/angular/legacy-angular-versions.d.ts +2 -0
  92. package/src/command-line/init/implementation/angular/legacy-angular-versions.js +125 -0
  93. package/src/command-line/init/implementation/angular/standalone-workspace.d.ts +1 -0
  94. package/src/command-line/init/implementation/angular/standalone-workspace.js +178 -0
  95. package/src/command-line/init/implementation/angular/types.d.ts +20 -0
  96. package/src/command-line/init/implementation/angular/types.js +2 -0
  97. package/src/command-line/init/implementation/dot-nx/add-nx-scripts.d.ts +7 -0
  98. package/src/command-line/init/implementation/dot-nx/add-nx-scripts.js +91 -0
  99. package/src/command-line/init/implementation/dot-nx/nxw.d.ts +1 -0
  100. package/src/command-line/init/implementation/dot-nx/nxw.js +116 -0
  101. package/src/command-line/init/implementation/react/add-craco-commands-to-package-scripts.d.ts +1 -0
  102. package/src/command-line/init/implementation/react/add-craco-commands-to-package-scripts.js +22 -0
  103. package/src/command-line/init/implementation/react/add-vite-commands-to-package-scripts.d.ts +1 -0
  104. package/src/command-line/init/implementation/react/add-vite-commands-to-package-scripts.js +19 -0
  105. package/src/command-line/init/implementation/react/check-for-custom-webpack-setup.d.ts +1 -0
  106. package/src/command-line/init/implementation/react/check-for-custom-webpack-setup.js +18 -0
  107. package/src/command-line/init/implementation/react/check-for-uncommitted-changes.d.ts +1 -0
  108. package/src/command-line/init/implementation/react/check-for-uncommitted-changes.js +16 -0
  109. package/src/command-line/init/implementation/react/clean-up-files.d.ts +1 -0
  110. package/src/command-line/init/implementation/react/clean-up-files.js +31 -0
  111. package/src/command-line/init/implementation/react/index.d.ts +4 -0
  112. package/src/command-line/init/implementation/react/index.js +230 -0
  113. package/src/command-line/init/implementation/react/read-name-from-package-json.d.ts +1 -0
  114. package/src/command-line/init/implementation/react/read-name-from-package-json.js +17 -0
  115. package/src/command-line/init/implementation/react/rename-js-to-jsx.d.ts +1 -0
  116. package/src/command-line/init/implementation/react/rename-js-to-jsx.js +23 -0
  117. package/src/command-line/init/implementation/react/tsconfig-setup.d.ts +1 -0
  118. package/src/command-line/init/implementation/react/tsconfig-setup.js +109 -0
  119. package/src/command-line/init/implementation/react/write-craco-config.d.ts +1 -0
  120. package/src/command-line/init/implementation/react/write-craco-config.js +62 -0
  121. package/src/command-line/init/implementation/react/write-vite-config.d.ts +1 -0
  122. package/src/command-line/init/implementation/react/write-vite-config.js +38 -0
  123. package/src/command-line/init/implementation/react/write-vite-index-html.d.ts +1 -0
  124. package/src/command-line/init/implementation/react/write-vite-index-html.js +25 -0
  125. package/src/command-line/init/implementation/utils.d.ts +16 -0
  126. package/src/command-line/init/implementation/utils.js +176 -0
  127. package/src/command-line/init/init-v1.d.ts +11 -0
  128. package/src/command-line/init/init-v1.js +118 -0
  129. package/src/command-line/init/init-v2.d.ts +7 -0
  130. package/src/command-line/init/init-v2.js +165 -0
  131. package/src/command-line/list/command-object.d.ts +2 -0
  132. package/src/command-line/list/command-object.js +15 -0
  133. package/src/command-line/list/list.d.ts +13 -0
  134. package/src/command-line/list/list.js +47 -0
  135. package/src/command-line/migrate/command-object.d.ts +3 -0
  136. package/src/command-line/migrate/command-object.js +150 -0
  137. package/src/command-line/migrate/migrate.d.ts +114 -0
  138. package/src/command-line/migrate/migrate.js +1115 -0
  139. package/src/command-line/new/command-object.d.ts +2 -0
  140. package/src/command-line/new/command-object.js +25 -0
  141. package/src/command-line/new/new.d.ts +3 -0
  142. package/src/command-line/new/new.js +30 -0
  143. package/src/command-line/nx-commands.d.ts +10 -0
  144. package/src/command-line/nx-commands.js +77 -0
  145. package/src/command-line/release/changelog.d.ts +8 -0
  146. package/src/command-line/release/changelog.js +696 -0
  147. package/src/command-line/release/command-object.d.ts +45 -0
  148. package/src/command-line/release/command-object.js +237 -0
  149. package/src/command-line/release/config/config.d.ts +56 -0
  150. package/src/command-line/release/config/config.js +501 -0
  151. package/src/command-line/release/config/filter-release-groups.d.ts +13 -0
  152. package/src/command-line/release/config/filter-release-groups.js +150 -0
  153. package/src/command-line/release/index.d.ts +16 -0
  154. package/src/command-line/release/index.js +23 -0
  155. package/src/command-line/release/publish.d.ts +8 -0
  156. package/src/command-line/release/publish.js +149 -0
  157. package/src/command-line/release/release.d.ts +4 -0
  158. package/src/command-line/release/release.js +124 -0
  159. package/src/command-line/release/utils/batch-projects-by-generator-config.d.ts +7 -0
  160. package/src/command-line/release/utils/batch-projects-by-generator-config.js +37 -0
  161. package/src/command-line/release/utils/exec-command.d.ts +1 -0
  162. package/src/command-line/release/utils/exec-command.js +34 -0
  163. package/src/command-line/release/utils/git.d.ts +55 -0
  164. package/src/command-line/release/utils/git.js +261 -0
  165. package/src/command-line/release/utils/github.d.ts +27 -0
  166. package/src/command-line/release/utils/github.js +229 -0
  167. package/src/command-line/release/utils/launch-editor.d.ts +1 -0
  168. package/src/command-line/release/utils/launch-editor.js +42 -0
  169. package/src/command-line/release/utils/markdown.d.ts +6 -0
  170. package/src/command-line/release/utils/markdown.js +29 -0
  171. package/src/command-line/release/utils/print-changes.d.ts +7 -0
  172. package/src/command-line/release/utils/print-changes.js +60 -0
  173. package/src/command-line/release/utils/resolve-nx-json-error-message.d.ts +1 -0
  174. package/src/command-line/release/utils/resolve-nx-json-error-message.js +52 -0
  175. package/src/command-line/release/utils/resolve-semver-specifier.d.ts +3 -0
  176. package/src/command-line/release/utils/resolve-semver-specifier.js +69 -0
  177. package/src/command-line/release/utils/semver.d.ts +17 -0
  178. package/src/command-line/release/utils/semver.js +56 -0
  179. package/src/command-line/release/utils/shared.d.ts +34 -0
  180. package/src/command-line/release/utils/shared.js +211 -0
  181. package/src/command-line/release/version.d.ts +42 -0
  182. package/src/command-line/release/version.js +347 -0
  183. package/src/command-line/repair/command-object.d.ts +2 -0
  184. package/src/command-line/repair/command-object.js +22 -0
  185. package/src/command-line/repair/repair.d.ts +3 -0
  186. package/src/command-line/repair/repair.js +37 -0
  187. package/src/command-line/repair.d.ts +4 -0
  188. package/src/command-line/repair.js +7 -0
  189. package/src/command-line/report/command-object.d.ts +2 -0
  190. package/src/command-line/report/command-object.js +11 -0
  191. package/src/command-line/report/report.d.ts +48 -0
  192. package/src/command-line/report/report.js +232 -0
  193. package/src/command-line/reset/command-object.d.ts +2 -0
  194. package/src/command-line/reset/command-object.js +9 -0
  195. package/src/command-line/reset/reset.d.ts +1 -0
  196. package/src/command-line/reset/reset.js +23 -0
  197. package/src/command-line/run/command-object.d.ts +6 -0
  198. package/src/command-line/run/command-object.js +25 -0
  199. package/src/command-line/run/executor-utils.d.ts +7 -0
  200. package/src/command-line/run/executor-utils.js +73 -0
  201. package/src/command-line/run/run-one.d.ts +7 -0
  202. package/src/command-line/run/run-one.js +117 -0
  203. package/src/command-line/run/run.d.ts +51 -0
  204. package/src/command-line/run/run.js +172 -0
  205. package/src/command-line/run-many/command-object.d.ts +2 -0
  206. package/src/command-line/run-many/command-object.js +11 -0
  207. package/src/command-line/run-many/run-many.d.ts +10 -0
  208. package/src/command-line/run-many/run-many.js +90 -0
  209. package/src/command-line/run-many.d.ts +4 -0
  210. package/src/command-line/run-many.js +7 -0
  211. package/src/command-line/run-one.d.ts +4 -0
  212. package/src/command-line/run-one.js +7 -0
  213. package/src/command-line/run.d.ts +4 -0
  214. package/src/command-line/run.js +7 -0
  215. package/src/command-line/show/command-object.d.ts +22 -0
  216. package/src/command-line/show/command-object.js +84 -0
  217. package/src/command-line/show/show.d.ts +3 -0
  218. package/src/command-line/show/show.js +126 -0
  219. package/src/command-line/watch/command-object.d.ts +2 -0
  220. package/src/command-line/watch/command-object.js +64 -0
  221. package/src/command-line/watch/watch.d.ts +23 -0
  222. package/src/command-line/watch/watch.js +169 -0
  223. package/src/command-line/watch.d.ts +4 -0
  224. package/src/command-line/watch.js +7 -0
  225. package/src/command-line/yargs-utils/documentation.d.ts +2 -0
  226. package/src/command-line/yargs-utils/documentation.js +12 -0
  227. package/src/command-line/yargs-utils/shared-options.d.ts +89 -0
  228. package/src/command-line/yargs-utils/shared-options.js +284 -0
  229. package/src/commands-runner/command-graph.d.ts +13 -0
  230. package/src/commands-runner/command-graph.js +2 -0
  231. package/src/commands-runner/create-command-graph.d.ts +4 -0
  232. package/src/commands-runner/create-command-graph.js +44 -0
  233. package/src/commands-runner/get-command-projects.d.ts +3 -0
  234. package/src/commands-runner/get-command-projects.js +19 -0
  235. package/src/config/calculate-default-project-name.d.ts +4 -0
  236. package/src/config/calculate-default-project-name.js +42 -0
  237. package/src/config/configuration.d.ts +8 -0
  238. package/src/config/configuration.js +17 -0
  239. package/src/config/misc-interfaces.d.ts +199 -0
  240. package/src/config/misc-interfaces.js +2 -0
  241. package/src/config/nx-json.d.ts +372 -0
  242. package/src/config/nx-json.js +40 -0
  243. package/src/config/project-graph.d.ts +137 -0
  244. package/src/config/project-graph.js +37 -0
  245. package/src/config/schema-utils.d.ts +15 -0
  246. package/src/config/schema-utils.js +59 -0
  247. package/src/config/task-graph.d.ts +100 -0
  248. package/src/config/task-graph.js +2 -0
  249. package/src/config/workspace-json-project-json.d.ts +189 -0
  250. package/src/config/workspace-json-project-json.js +2 -0
  251. package/src/config/workspaces.d.ts +18 -0
  252. package/src/config/workspaces.js +35 -0
  253. package/src/core/graph/3rdpartylicenses.txt +833 -0
  254. package/src/core/graph/environment.js +1 -0
  255. package/src/core/graph/favicon.ico +0 -0
  256. package/src/core/graph/index.html +31 -0
  257. package/src/core/graph/main.js +1 -0
  258. package/src/core/graph/polyfills.js +1 -0
  259. package/src/core/graph/runtime.js +1 -0
  260. package/src/core/graph/styles.css +3 -0
  261. package/src/core/graph/styles.js +1 -0
  262. package/src/daemon/cache.d.ts +9 -0
  263. package/src/daemon/cache.js +52 -0
  264. package/src/daemon/client/client.d.ts +56 -0
  265. package/src/daemon/client/client.js +359 -0
  266. package/src/daemon/client/daemon-socket-messenger.d.ts +13 -0
  267. package/src/daemon/client/daemon-socket-messenger.js +26 -0
  268. package/src/daemon/client/exec-is-server-available.d.ts +1 -0
  269. package/src/daemon/client/exec-is-server-available.js +11 -0
  270. package/src/daemon/client/generate-help-output.d.ts +1 -0
  271. package/src/daemon/client/generate-help-output.js +26 -0
  272. package/src/daemon/server/file-watching/changed-projects.d.ts +10 -0
  273. package/src/daemon/server/file-watching/changed-projects.js +45 -0
  274. package/src/daemon/server/file-watching/file-watcher-sockets.d.ts +13 -0
  275. package/src/daemon/server/file-watching/file-watcher-sockets.js +66 -0
  276. package/src/daemon/server/handle-hash-tasks.d.ts +10 -0
  277. package/src/daemon/server/handle-hash-tasks.js +26 -0
  278. package/src/daemon/server/handle-outputs-tracking.d.ts +15 -0
  279. package/src/daemon/server/handle-outputs-tracking.js +36 -0
  280. package/src/daemon/server/handle-process-in-background.d.ts +6 -0
  281. package/src/daemon/server/handle-process-in-background.js +33 -0
  282. package/src/daemon/server/handle-request-file-data.d.ts +4 -0
  283. package/src/daemon/server/handle-request-file-data.js +13 -0
  284. package/src/daemon/server/handle-request-project-graph.d.ts +2 -0
  285. package/src/daemon/server/handle-request-project-graph.js +37 -0
  286. package/src/daemon/server/handle-request-shutdown.d.ts +6 -0
  287. package/src/daemon/server/handle-request-shutdown.js +26 -0
  288. package/src/daemon/server/logger.d.ts +18 -0
  289. package/src/daemon/server/logger.js +37 -0
  290. package/src/daemon/server/outputs-tracking.d.ts +8 -0
  291. package/src/daemon/server/outputs-tracking.js +94 -0
  292. package/src/daemon/server/project-graph-incremental-recomputation.d.ts +22 -0
  293. package/src/daemon/server/project-graph-incremental-recomputation.js +227 -0
  294. package/src/daemon/server/server.d.ts +9 -0
  295. package/src/daemon/server/server.js +303 -0
  296. package/src/daemon/server/shutdown-utils.d.ts +17 -0
  297. package/src/daemon/server/shutdown-utils.js +77 -0
  298. package/src/daemon/server/start.d.ts +1 -0
  299. package/src/daemon/server/start.js +17 -0
  300. package/src/daemon/server/watcher.d.ts +12 -0
  301. package/src/daemon/server/watcher.js +96 -0
  302. package/src/daemon/socket-utils.d.ts +11 -0
  303. package/src/daemon/socket-utils.js +42 -0
  304. package/src/daemon/tmp-dir.d.ts +8 -0
  305. package/src/daemon/tmp-dir.js +68 -0
  306. package/src/devkit-exports.d.ts +135 -0
  307. package/src/devkit-exports.js +140 -0
  308. package/src/devkit-internals.d.ts +19 -0
  309. package/src/devkit-internals.js +37 -0
  310. package/src/devkit-testing-exports.d.ts +2 -0
  311. package/src/devkit-testing-exports.js +8 -0
  312. package/src/executors/noop/noop.impl.d.ts +3 -0
  313. package/src/executors/noop/noop.impl.js +6 -0
  314. package/src/executors/noop/schema.json +10 -0
  315. package/src/executors/run-commands/run-commands.impl.d.ts +42 -0
  316. package/src/executors/run-commands/run-commands.impl.js +247 -0
  317. package/src/executors/run-commands/schema.json +150 -0
  318. package/src/executors/run-script/run-script.impl.d.ts +8 -0
  319. package/src/executors/run-script/run-script.impl.js +56 -0
  320. package/src/executors/run-script/schema.json +28 -0
  321. package/src/executors/utils/convert-nx-executor.d.ts +10 -0
  322. package/src/executors/utils/convert-nx-executor.js +82 -0
  323. package/src/generators/internal-utils/format-changed-files-with-prettier-if-available.d.ts +8 -0
  324. package/src/generators/internal-utils/format-changed-files-with-prettier-if-available.js +49 -0
  325. package/src/generators/testing-utils/create-tree-with-empty-workspace.d.ts +11 -0
  326. package/src/generators/testing-utils/create-tree-with-empty-workspace.js +46 -0
  327. package/src/generators/testing-utils/create-tree.d.ts +5 -0
  328. package/src/generators/testing-utils/create-tree.js +11 -0
  329. package/src/generators/tree.d.ts +128 -0
  330. package/src/generators/tree.js +309 -0
  331. package/src/generators/utils/glob.d.ts +11 -0
  332. package/src/generators/utils/glob.js +35 -0
  333. package/src/generators/utils/json.d.ts +28 -0
  334. package/src/generators/utils/json.js +48 -0
  335. package/src/generators/utils/nx-json.d.ts +11 -0
  336. package/src/generators/utils/nx-json.js +59 -0
  337. package/src/generators/utils/project-configuration.d.ts +42 -0
  338. package/src/generators/utils/project-configuration.js +239 -0
  339. package/src/hasher/create-task-hasher.d.ts +4 -0
  340. package/src/hasher/create-task-hasher.js +16 -0
  341. package/src/hasher/file-hasher.d.ts +2 -0
  342. package/src/hasher/file-hasher.js +19 -0
  343. package/src/hasher/hash-task.d.ts +7 -0
  344. package/src/hasher/hash-task.js +54 -0
  345. package/src/hasher/native-task-hasher-impl.d.ts +19 -0
  346. package/src/hasher/native-task-hasher-impl.js +37 -0
  347. package/src/hasher/node-task-hasher-impl.d.ts +49 -0
  348. package/src/hasher/node-task-hasher-impl.js +431 -0
  349. package/src/hasher/task-hasher.d.ts +129 -0
  350. package/src/hasher/task-hasher.js +266 -0
  351. package/src/index.d.ts +1 -0
  352. package/src/index.js +5 -0
  353. package/src/migrations/update-15-0-0/migrate-to-inputs.d.ts +2 -0
  354. package/src/migrations/update-15-0-0/migrate-to-inputs.js +102 -0
  355. package/src/migrations/update-15-0-0/prefix-outputs.d.ts +2 -0
  356. package/src/migrations/update-15-0-0/prefix-outputs.js +64 -0
  357. package/src/migrations/update-15-1-0/set-project-names.d.ts +2 -0
  358. package/src/migrations/update-15-1-0/set-project-names.js +32 -0
  359. package/src/migrations/update-15-8-2/update-nxw.d.ts +2 -0
  360. package/src/migrations/update-15-8-2/update-nxw.js +7 -0
  361. package/src/migrations/update-16-0-0/remove-nrwl-cli.d.ts +2 -0
  362. package/src/migrations/update-16-0-0/remove-nrwl-cli.js +16 -0
  363. package/src/migrations/update-16-0-0/update-depends-on-to-tokens.d.ts +2 -0
  364. package/src/migrations/update-16-0-0/update-depends-on-to-tokens.js +97 -0
  365. package/src/migrations/update-16-0-0/update-nx-cloud-runner.d.ts +2 -0
  366. package/src/migrations/update-16-0-0/update-nx-cloud-runner.js +27 -0
  367. package/src/migrations/update-16-2-0/remove-run-commands-output-path.d.ts +2 -0
  368. package/src/migrations/update-16-2-0/remove-run-commands-output-path.js +45 -0
  369. package/src/migrations/update-16-8-0/escape-dollar-sign-env-variables.d.ts +12 -0
  370. package/src/migrations/update-16-8-0/escape-dollar-sign-env-variables.js +60 -0
  371. package/src/migrations/update-16-9-0/remove-project-name-and-root-format.d.ts +2 -0
  372. package/src/migrations/update-16-9-0/remove-project-name-and-root-format.js +21 -0
  373. package/src/migrations/update-17-0-0/move-cache-directory.d.ts +2 -0
  374. package/src/migrations/update-17-0-0/move-cache-directory.js +35 -0
  375. package/src/migrations/update-17-0-0/rm-default-collection-npm-scope.d.ts +2 -0
  376. package/src/migrations/update-17-0-0/rm-default-collection-npm-scope.js +72 -0
  377. package/src/migrations/update-17-0-0/use-minimal-config-for-tasks-runner-options.d.ts +2 -0
  378. package/src/migrations/update-17-0-0/use-minimal-config-for-tasks-runner-options.js +122 -0
  379. package/src/migrations/update-17-3-0/nx-release-path.d.ts +3 -0
  380. package/src/migrations/update-17-3-0/nx-release-path.js +49 -0
  381. package/src/migrations/update-17-3-0/update-nxw.d.ts +2 -0
  382. package/src/migrations/update-17-3-0/update-nxw.js +7 -0
  383. package/src/native/assert-supported-platform.d.ts +1 -0
  384. package/src/native/assert-supported-platform.js +39 -0
  385. package/src/native/index.d.ts +192 -0
  386. package/src/native/index.js +289 -0
  387. package/src/native/transform-objects.d.ts +3 -0
  388. package/src/native/transform-objects.js +50 -0
  389. package/src/nx-cloud/debug-logger.d.ts +1 -0
  390. package/src/nx-cloud/debug-logger.js +9 -0
  391. package/src/nx-cloud/generators/connect-to-nx-cloud/connect-to-nx-cloud.d.ts +8 -0
  392. package/src/nx-cloud/generators/connect-to-nx-cloud/connect-to-nx-cloud.js +107 -0
  393. package/src/nx-cloud/generators/connect-to-nx-cloud/schema.json +27 -0
  394. package/src/nx-cloud/nx-cloud-tasks-runner-shell.d.ts +15 -0
  395. package/src/nx-cloud/nx-cloud-tasks-runner-shell.js +41 -0
  396. package/src/nx-cloud/resolution-helpers.d.ts +1 -0
  397. package/src/nx-cloud/resolution-helpers.js +20 -0
  398. package/src/nx-cloud/update-manager.d.ts +17 -0
  399. package/src/nx-cloud/update-manager.js +240 -0
  400. package/src/nx-cloud/utilities/axios.d.ts +2 -0
  401. package/src/nx-cloud/utilities/axios.js +24 -0
  402. package/src/nx-cloud/utilities/environment.d.ts +3 -0
  403. package/src/nx-cloud/utilities/environment.js +47 -0
  404. package/src/nx-cloud/utilities/get-cloud-options.d.ts +2 -0
  405. package/src/nx-cloud/utilities/get-cloud-options.js +11 -0
  406. package/src/plugins/js/hasher/hasher.d.ts +5 -0
  407. package/src/plugins/js/hasher/hasher.js +52 -0
  408. package/src/plugins/js/index.d.ts +4 -0
  409. package/src/plugins/js/index.js +96 -0
  410. package/src/plugins/js/lock-file/lock-file.d.ts +34 -0
  411. package/src/plugins/js/lock-file/lock-file.js +169 -0
  412. package/src/plugins/js/lock-file/npm-parser.d.ts +7 -0
  413. package/src/plugins/js/lock-file/npm-parser.js +463 -0
  414. package/src/plugins/js/lock-file/pnpm-parser.d.ts +7 -0
  415. package/src/plugins/js/lock-file/pnpm-parser.js +294 -0
  416. package/src/plugins/js/lock-file/project-graph-pruning.d.ts +7 -0
  417. package/src/plugins/js/lock-file/project-graph-pruning.js +155 -0
  418. package/src/plugins/js/lock-file/utils/package-json.d.ts +10 -0
  419. package/src/plugins/js/lock-file/utils/package-json.js +34 -0
  420. package/src/plugins/js/lock-file/utils/pnpm-normalizer.d.ts +38 -0
  421. package/src/plugins/js/lock-file/utils/pnpm-normalizer.js +575 -0
  422. package/src/plugins/js/lock-file/yarn-parser.d.ts +7 -0
  423. package/src/plugins/js/lock-file/yarn-parser.js +437 -0
  424. package/src/plugins/js/package-json/create-package-json.d.ts +27 -0
  425. package/src/plugins/js/package-json/create-package-json.js +207 -0
  426. package/src/plugins/js/project-graph/affected/lock-file-changes.d.ts +4 -0
  427. package/src/plugins/js/project-graph/affected/lock-file-changes.js +16 -0
  428. package/src/plugins/js/project-graph/affected/npm-packages.d.ts +4 -0
  429. package/src/plugins/js/project-graph/affected/npm-packages.js +56 -0
  430. package/src/plugins/js/project-graph/affected/touched-projects.d.ts +2 -0
  431. package/src/plugins/js/project-graph/affected/touched-projects.js +18 -0
  432. package/src/plugins/js/project-graph/affected/tsconfig-json-changes.d.ts +4 -0
  433. package/src/plugins/js/project-graph/affected/tsconfig-json-changes.js +63 -0
  434. package/src/plugins/js/project-graph/build-dependencies/build-dependencies.d.ts +6 -0
  435. package/src/plugins/js/project-graph/build-dependencies/build-dependencies.js +33 -0
  436. package/src/plugins/js/project-graph/build-dependencies/explicit-package-json-dependencies.d.ts +3 -0
  437. package/src/plugins/js/project-graph/build-dependencies/explicit-package-json-dependencies.js +82 -0
  438. package/src/plugins/js/project-graph/build-dependencies/explicit-project-dependencies.d.ts +3 -0
  439. package/src/plugins/js/project-graph/build-dependencies/explicit-project-dependencies.js +94 -0
  440. package/src/plugins/js/project-graph/build-dependencies/strip-source-code.d.ts +7 -0
  441. package/src/plugins/js/project-graph/build-dependencies/strip-source-code.js +156 -0
  442. package/src/plugins/js/project-graph/build-dependencies/target-project-locator.d.ts +32 -0
  443. package/src/plugins/js/project-graph/build-dependencies/target-project-locator.js +183 -0
  444. package/src/plugins/js/project-graph/build-dependencies/typescript-import-locator.d.ts +16 -0
  445. package/src/plugins/js/project-graph/build-dependencies/typescript-import-locator.js +120 -0
  446. package/src/plugins/js/project-graph/build-nodes/build-npm-package-nodes.d.ts +2 -0
  447. package/src/plugins/js/project-graph/build-nodes/build-npm-package-nodes.js +32 -0
  448. package/src/plugins/js/utils/config.d.ts +2 -0
  449. package/src/plugins/js/utils/config.js +65 -0
  450. package/src/plugins/js/utils/register.d.ts +151 -0
  451. package/src/plugins/js/utils/register.js +215 -0
  452. package/src/plugins/js/utils/typescript.d.ts +14 -0
  453. package/src/plugins/js/utils/typescript.js +98 -0
  454. package/src/plugins/js/versions.d.ts +1 -0
  455. package/src/plugins/js/versions.js +4 -0
  456. package/src/plugins/package-json-workspaces/create-nodes.d.ts +19 -0
  457. package/src/plugins/package-json-workspaces/create-nodes.js +130 -0
  458. package/src/plugins/package-json-workspaces/index.d.ts +1 -0
  459. package/src/plugins/package-json-workspaces/index.js +4 -0
  460. package/src/plugins/project-json/build-nodes/package-json-next-to-project-json.d.ts +2 -0
  461. package/src/plugins/project-json/build-nodes/package-json-next-to-project-json.js +47 -0
  462. package/src/plugins/project-json/build-nodes/project-json.d.ts +4 -0
  463. package/src/plugins/project-json/build-nodes/project-json.js +29 -0
  464. package/src/plugins/target-defaults/target-defaults-plugin.d.ts +8 -0
  465. package/src/plugins/target-defaults/target-defaults-plugin.js +103 -0
  466. package/src/project-graph/affected/affected-project-graph-models.d.ts +11 -0
  467. package/src/project-graph/affected/affected-project-graph-models.js +2 -0
  468. package/src/project-graph/affected/affected-project-graph.d.ts +4 -0
  469. package/src/project-graph/affected/affected-project-graph.js +83 -0
  470. package/src/project-graph/affected/locators/project-glob-changes.d.ts +2 -0
  471. package/src/project-graph/affected/locators/project-glob-changes.js +31 -0
  472. package/src/project-graph/affected/locators/workspace-json-changes.d.ts +4 -0
  473. package/src/project-graph/affected/locators/workspace-json-changes.js +47 -0
  474. package/src/project-graph/affected/locators/workspace-projects.d.ts +5 -0
  475. package/src/project-graph/affected/locators/workspace-projects.js +85 -0
  476. package/src/project-graph/build-project-graph.d.ts +14 -0
  477. package/src/project-graph/build-project-graph.js +219 -0
  478. package/src/project-graph/file-map-utils.d.ts +15 -0
  479. package/src/project-graph/file-map-utils.js +63 -0
  480. package/src/project-graph/file-utils.d.ts +31 -0
  481. package/src/project-graph/file-utils.js +181 -0
  482. package/src/project-graph/nx-deps-cache.d.ts +48 -0
  483. package/src/project-graph/nx-deps-cache.js +228 -0
  484. package/src/project-graph/operators.d.ts +12 -0
  485. package/src/project-graph/operators.js +114 -0
  486. package/src/project-graph/project-graph-builder.d.ts +133 -0
  487. package/src/project-graph/project-graph-builder.js +379 -0
  488. package/src/project-graph/project-graph.d.ts +48 -0
  489. package/src/project-graph/project-graph.js +188 -0
  490. package/src/project-graph/utils/build-all-workspace-files.d.ts +2 -0
  491. package/src/project-graph/utils/build-all-workspace-files.js +15 -0
  492. package/src/project-graph/utils/find-project-for-path.d.ts +20 -0
  493. package/src/project-graph/utils/find-project-for-path.js +57 -0
  494. package/src/project-graph/utils/implicit-project-dependencies.d.ts +3 -0
  495. package/src/project-graph/utils/implicit-project-dependencies.js +19 -0
  496. package/src/project-graph/utils/normalize-project-nodes.d.ts +10 -0
  497. package/src/project-graph/utils/normalize-project-nodes.js +92 -0
  498. package/src/project-graph/utils/project-configuration-utils.d.ts +53 -0
  499. package/src/project-graph/utils/project-configuration-utils.js +456 -0
  500. package/src/project-graph/utils/retrieve-workspace-files.d.ts +37 -0
  501. package/src/project-graph/utils/retrieve-workspace-files.js +109 -0
  502. package/src/tasks-runner/batch/batch-messages.d.ts +33 -0
  503. package/src/tasks-runner/batch/batch-messages.js +9 -0
  504. package/src/tasks-runner/batch/run-batch.d.ts +1 -0
  505. package/src/tasks-runner/batch/run-batch.js +77 -0
  506. package/src/tasks-runner/cache.d.ts +36 -0
  507. package/src/tasks-runner/cache.js +236 -0
  508. package/src/tasks-runner/create-task-graph.d.ts +25 -0
  509. package/src/tasks-runner/create-task-graph.js +225 -0
  510. package/src/tasks-runner/default-tasks-runner.d.ts +20 -0
  511. package/src/tasks-runner/default-tasks-runner.js +29 -0
  512. package/src/tasks-runner/fork.d.ts +1 -0
  513. package/src/tasks-runner/fork.js +23 -0
  514. package/src/tasks-runner/forked-process-task-runner.d.ts +44 -0
  515. package/src/tasks-runner/forked-process-task-runner.js +396 -0
  516. package/src/tasks-runner/init-tasks-runner.d.ts +11 -0
  517. package/src/tasks-runner/init-tasks-runner.js +57 -0
  518. package/src/tasks-runner/life-cycle.d.ts +43 -0
  519. package/src/tasks-runner/life-cycle.js +71 -0
  520. package/src/tasks-runner/life-cycles/dynamic-run-many-terminal-output-life-cycle.d.ts +25 -0
  521. package/src/tasks-runner/life-cycles/dynamic-run-many-terminal-output-life-cycle.js +345 -0
  522. package/src/tasks-runner/life-cycles/dynamic-run-one-terminal-output-life-cycle.d.ts +24 -0
  523. package/src/tasks-runner/life-cycles/dynamic-run-one-terminal-output-life-cycle.js +224 -0
  524. package/src/tasks-runner/life-cycles/empty-terminal-output-life-cycle.d.ts +5 -0
  525. package/src/tasks-runner/life-cycles/empty-terminal-output-life-cycle.js +16 -0
  526. package/src/tasks-runner/life-cycles/formatting-utils.d.ts +3 -0
  527. package/src/tasks-runner/life-cycles/formatting-utils.js +44 -0
  528. package/src/tasks-runner/life-cycles/invoke-runner-terminal-output-life-cycle.d.ts +17 -0
  529. package/src/tasks-runner/life-cycles/invoke-runner-terminal-output-life-cycle.js +67 -0
  530. package/src/tasks-runner/life-cycles/pretty-time.d.ts +4 -0
  531. package/src/tasks-runner/life-cycles/pretty-time.js +74 -0
  532. package/src/tasks-runner/life-cycles/static-run-many-terminal-output-life-cycle.d.ts +33 -0
  533. package/src/tasks-runner/life-cycles/static-run-many-terminal-output-life-cycle.js +99 -0
  534. package/src/tasks-runner/life-cycles/static-run-one-terminal-output-life-cycle.d.ts +31 -0
  535. package/src/tasks-runner/life-cycles/static-run-one-terminal-output-life-cycle.js +89 -0
  536. package/src/tasks-runner/life-cycles/store-run-information-life-cycle.d.ts +22 -0
  537. package/src/tasks-runner/life-cycles/store-run-information-life-cycle.js +87 -0
  538. package/src/tasks-runner/life-cycles/task-profiling-life-cycle.d.ts +19 -0
  539. package/src/tasks-runner/life-cycles/task-profiling-life-cycle.js +73 -0
  540. package/src/tasks-runner/life-cycles/task-timings-life-cycle.d.ts +13 -0
  541. package/src/tasks-runner/life-cycles/task-timings-life-cycle.js +39 -0
  542. package/src/tasks-runner/life-cycles/view-logs-utils.d.ts +1 -0
  543. package/src/tasks-runner/life-cycles/view-logs-utils.js +16 -0
  544. package/src/tasks-runner/psuedo-ipc.d.ts +49 -0
  545. package/src/tasks-runner/psuedo-ipc.js +140 -0
  546. package/src/tasks-runner/remove-old-cache-records.d.ts +1 -0
  547. package/src/tasks-runner/remove-old-cache-records.js +61 -0
  548. package/src/tasks-runner/run-command.d.ts +28 -0
  549. package/src/tasks-runner/run-command.js +353 -0
  550. package/src/tasks-runner/task-env.d.ts +8 -0
  551. package/src/tasks-runner/task-env.js +144 -0
  552. package/src/tasks-runner/task-graph-utils.d.ts +7 -0
  553. package/src/tasks-runner/task-graph-utils.js +55 -0
  554. package/src/tasks-runner/task-orchestrator.d.ts +50 -0
  555. package/src/tasks-runner/task-orchestrator.js +375 -0
  556. package/src/tasks-runner/tasks-runner.d.ts +23 -0
  557. package/src/tasks-runner/tasks-runner.js +2 -0
  558. package/src/tasks-runner/tasks-schedule.d.ts +36 -0
  559. package/src/tasks-runner/tasks-schedule.js +142 -0
  560. package/src/tasks-runner/utils.d.ts +51 -0
  561. package/src/tasks-runner/utils.js +293 -0
  562. package/src/utils/ab-testing.d.ts +51 -0
  563. package/src/utils/ab-testing.js +91 -0
  564. package/src/utils/all-file-data.d.ts +2 -0
  565. package/src/utils/all-file-data.js +15 -0
  566. package/src/utils/app-root.d.ts +8 -0
  567. package/src/utils/app-root.js +12 -0
  568. package/src/utils/assert-workspace-validity.d.ts +3 -0
  569. package/src/utils/assert-workspace-validity.js +84 -0
  570. package/src/utils/async-iterator.d.ts +2 -0
  571. package/src/utils/async-iterator.js +17 -0
  572. package/src/utils/cache-directory.d.ts +6 -0
  573. package/src/utils/cache-directory.js +60 -0
  574. package/src/utils/child-process.d.ts +19 -0
  575. package/src/utils/child-process.js +117 -0
  576. package/src/utils/chunkify.d.ts +1 -0
  577. package/src/utils/chunkify.js +38 -0
  578. package/src/utils/code-frames.d.ts +14 -0
  579. package/src/utils/code-frames.js +119 -0
  580. package/src/utils/collapse-expanded-outputs.d.ts +1 -0
  581. package/src/utils/collapse-expanded-outputs.js +41 -0
  582. package/src/utils/command-line-utils.d.ts +48 -0
  583. package/src/utils/command-line-utils.js +254 -0
  584. package/src/utils/consume-messages-from-socket.d.ts +1 -0
  585. package/src/utils/consume-messages-from-socket.js +22 -0
  586. package/src/utils/default-base.d.ts +1 -0
  587. package/src/utils/default-base.js +15 -0
  588. package/src/utils/exit-codes.d.ts +6 -0
  589. package/src/utils/exit-codes.js +20 -0
  590. package/src/utils/fileutils.d.ts +69 -0
  591. package/src/utils/fileutils.js +135 -0
  592. package/src/utils/find-matching-projects.d.ts +10 -0
  593. package/src/utils/find-matching-projects.js +198 -0
  594. package/src/utils/find-workspace-root.d.ts +11 -0
  595. package/src/utils/find-workspace-root.js +34 -0
  596. package/src/utils/globs.d.ts +1 -0
  597. package/src/utils/globs.js +8 -0
  598. package/src/utils/ignore.d.ts +8 -0
  599. package/src/utils/ignore.js +68 -0
  600. package/src/utils/installation-directory.d.ts +2 -0
  601. package/src/utils/installation-directory.js +13 -0
  602. package/src/utils/is-ci.d.ts +1 -0
  603. package/src/utils/is-ci.js +20 -0
  604. package/src/utils/json-diff.d.ts +18 -0
  605. package/src/utils/json-diff.js +112 -0
  606. package/src/utils/json.d.ts +44 -0
  607. package/src/utils/json.js +60 -0
  608. package/src/utils/logger.d.ts +11 -0
  609. package/src/utils/logger.js +47 -0
  610. package/src/utils/nx-cloud-utils.d.ts +4 -0
  611. package/src/utils/nx-cloud-utils.js +27 -0
  612. package/src/utils/nx-plugin.d.ts +119 -0
  613. package/src/utils/nx-plugin.deprecated.d.ts +31 -0
  614. package/src/utils/nx-plugin.deprecated.js +25 -0
  615. package/src/utils/nx-plugin.js +293 -0
  616. package/src/utils/object-sort.d.ts +1 -0
  617. package/src/utils/object-sort.js +10 -0
  618. package/src/utils/output.d.ts +72 -0
  619. package/src/utils/output.js +239 -0
  620. package/src/utils/package-json.d.ts +98 -0
  621. package/src/utils/package-json.js +134 -0
  622. package/src/utils/package-manager.d.ts +93 -0
  623. package/src/utils/package-manager.js +300 -0
  624. package/src/utils/params.d.ts +138 -0
  625. package/src/utils/params.js +684 -0
  626. package/src/utils/path.d.ts +19 -0
  627. package/src/utils/path.js +38 -0
  628. package/src/utils/perf-logging.d.ts +1 -0
  629. package/src/utils/perf-logging.js +11 -0
  630. package/src/utils/plugins/community-plugins.d.ts +2 -0
  631. package/src/utils/plugins/community-plugins.js +29 -0
  632. package/src/utils/plugins/core-plugins.d.ts +3 -0
  633. package/src/utils/plugins/core-plugins.js +114 -0
  634. package/src/utils/plugins/index.d.ts +4 -0
  635. package/src/utils/plugins/index.js +14 -0
  636. package/src/utils/plugins/installed-plugins.d.ts +6 -0
  637. package/src/utils/plugins/installed-plugins.js +104 -0
  638. package/src/utils/plugins/local-plugins.d.ts +5 -0
  639. package/src/utils/plugins/local-plugins.js +58 -0
  640. package/src/utils/plugins/models.d.ts +22 -0
  641. package/src/utils/plugins/models.js +2 -0
  642. package/src/utils/plugins/plugin-capabilities.d.ts +4 -0
  643. package/src/utils/plugins/plugin-capabilities.js +124 -0
  644. package/src/utils/plugins/shared.d.ts +1 -0
  645. package/src/utils/plugins/shared.js +8 -0
  646. package/src/utils/print-help.d.ts +11 -0
  647. package/src/utils/print-help.js +265 -0
  648. package/src/utils/project-graph-utils.d.ts +13 -0
  649. package/src/utils/project-graph-utils.js +74 -0
  650. package/src/utils/promised-based-queue.d.ts +6 -0
  651. package/src/utils/promised-based-queue.js +43 -0
  652. package/src/utils/serialize-overrides-into-command-line.d.ts +3 -0
  653. package/src/utils/serialize-overrides-into-command-line.js +43 -0
  654. package/src/utils/split-target.d.ts +3 -0
  655. package/src/utils/split-target.js +49 -0
  656. package/src/utils/strip-indents.d.ts +14 -0
  657. package/src/utils/strip-indents.js +24 -0
  658. package/src/utils/typescript.d.ts +1 -0
  659. package/src/utils/typescript.js +5 -0
  660. package/src/utils/update-nxw.d.ts +2 -0
  661. package/src/utils/update-nxw.js +12 -0
  662. package/src/utils/versions.d.ts +1 -0
  663. package/src/utils/versions.js +4 -0
  664. package/src/utils/workspace-configuration-check.d.ts +1 -0
  665. package/src/utils/workspace-configuration-check.js +37 -0
  666. package/src/utils/workspace-context.d.ts +10 -0
  667. package/src/utils/workspace-context.js +56 -0
  668. package/src/utils/workspace-root.d.ts +6 -0
  669. package/src/utils/workspace-root.js +39 -0
  670. package/tasks-runners/default.d.ts +1 -0
  671. package/tasks-runners/default.js +5 -0
@@ -0,0 +1,696 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.releaseChangelog = exports.releaseChangelogCLIHandler = void 0;
4
+ const chalk = require("chalk");
5
+ const node_fs_1 = require("node:fs");
6
+ const semver_1 = require("semver");
7
+ const tmp_1 = require("tmp");
8
+ const nx_json_1 = require("../../config/nx-json");
9
+ const tree_1 = require("../../generators/tree");
10
+ const register_1 = require("../../plugins/js/utils/register");
11
+ const project_graph_1 = require("../../project-graph/project-graph");
12
+ const utils_1 = require("../../tasks-runner/utils");
13
+ const logger_1 = require("../../utils/logger");
14
+ const output_1 = require("../../utils/output");
15
+ const params_1 = require("../../utils/params");
16
+ const path_1 = require("../../utils/path");
17
+ const typescript_1 = require("../../utils/typescript");
18
+ const workspace_root_1 = require("../../utils/workspace-root");
19
+ const config_1 = require("./config/config");
20
+ const filter_release_groups_1 = require("./config/filter-release-groups");
21
+ const git_1 = require("./utils/git");
22
+ const github_1 = require("./utils/github");
23
+ const launch_editor_1 = require("./utils/launch-editor");
24
+ const markdown_1 = require("./utils/markdown");
25
+ const print_changes_1 = require("./utils/print-changes");
26
+ const resolve_nx_json_error_message_1 = require("./utils/resolve-nx-json-error-message");
27
+ const shared_1 = require("./utils/shared");
28
+ const releaseChangelogCLIHandler = (args) => (0, params_1.handleErrors)(args.verbose, () => releaseChangelog(args));
29
+ exports.releaseChangelogCLIHandler = releaseChangelogCLIHandler;
30
+ /**
31
+ * NOTE: This function is also exported for programmatic usage and forms part of the public API
32
+ * of Nx. We intentionally do not wrap the implementation with handleErrors because users need
33
+ * to have control over their own error handling when using the API.
34
+ */
35
+ async function releaseChangelog(args) {
36
+ const projectGraph = await (0, project_graph_1.createProjectGraphAsync)({ exitOnError: true });
37
+ const nxJson = (0, nx_json_1.readNxJson)();
38
+ if (args.verbose) {
39
+ process.env.NX_VERBOSE_LOGGING = 'true';
40
+ }
41
+ // Apply default configuration to any optional user configuration
42
+ const { error: configError, nxReleaseConfig } = await (0, config_1.createNxReleaseConfig)(projectGraph, nxJson.release);
43
+ if (configError) {
44
+ return await (0, config_1.handleNxReleaseConfigError)(configError);
45
+ }
46
+ // The nx release top level command will always override these three git args. This is how we can tell
47
+ // if the top level release command was used or if the user is using the changelog subcommand.
48
+ // If the user explicitly overrides these args, then it doesn't matter if the top level config is set,
49
+ // as all of the git options would be overridden anyway.
50
+ if ((args.gitCommit === undefined ||
51
+ args.gitTag === undefined ||
52
+ args.stageChanges === undefined) &&
53
+ nxJson.release?.git) {
54
+ const nxJsonMessage = await (0, resolve_nx_json_error_message_1.resolveNxJsonConfigErrorMessage)([
55
+ 'release',
56
+ 'git',
57
+ ]);
58
+ output_1.output.error({
59
+ title: `The "release.git" property in nx.json may not be used with the "nx release changelog" subcommand or programmatic API. Instead, configure git options for subcommands directly with "release.version.git" and "release.changelog.git".`,
60
+ bodyLines: [nxJsonMessage],
61
+ });
62
+ process.exit(1);
63
+ }
64
+ const { error: filterError, releaseGroups, releaseGroupToFilteredProjects, } = (0, filter_release_groups_1.filterReleaseGroups)(projectGraph, nxReleaseConfig, args.projects, args.groups);
65
+ if (filterError) {
66
+ output_1.output.error(filterError);
67
+ process.exit(1);
68
+ }
69
+ const changelogGenerationEnabled = !!nxReleaseConfig.changelog.workspaceChangelog ||
70
+ Object.values(nxReleaseConfig.groups).some((g) => g.changelog);
71
+ if (!changelogGenerationEnabled) {
72
+ output_1.output.warn({
73
+ title: `Changelogs are disabled. No changelog entries will be generated`,
74
+ bodyLines: [
75
+ `To explicitly enable changelog generation, configure "release.changelog.workspaceChangelog" or "release.changelog.projectChangelogs" in nx.json.`,
76
+ ],
77
+ });
78
+ return 0;
79
+ }
80
+ const useAutomaticFromRef = nxReleaseConfig.changelog?.automaticFromRef || args.firstRelease;
81
+ /**
82
+ * For determining the versions to use within changelog files, there are a few different possibilities:
83
+ * - the user is using the nx CLI, and therefore passes a single --version argument which represents the version for any and all changelog
84
+ * files which will be generated (i.e. both the workspace changelog, and all project changelogs, depending on which of those has been enabled)
85
+ * - the user is using the nxReleaseChangelog API programmatically, and:
86
+ * - passes only a version property
87
+ * - this works in the same way as described above for the CLI
88
+ * - passes only a versionData object
89
+ * - this is a special case where the user is providing a version for each project, and therefore the version argument is not needed
90
+ * - NOTE: it is not possible to generate a workspace level changelog with only a versionData object, and this will produce an error
91
+ * - passes both a version and a versionData object
92
+ * - in this case, the version property will be used as the reference for the workspace changelog, and the versionData object will be used
93
+ * to generate project changelogs
94
+ */
95
+ const { workspaceChangelogVersion, projectsVersionData } = resolveChangelogVersions(args, releaseGroups, releaseGroupToFilteredProjects);
96
+ const to = args.to || 'HEAD';
97
+ const toSHA = await (0, git_1.getCommitHash)(to);
98
+ const headSHA = to === 'HEAD' ? toSHA : await (0, git_1.getCommitHash)('HEAD');
99
+ /**
100
+ * Protect the user against attempting to create a new commit when recreating an old release changelog,
101
+ * this seems like it would always be unintentional.
102
+ */
103
+ const autoCommitEnabled = args.gitCommit ?? nxReleaseConfig.changelog.git.commit;
104
+ if (autoCommitEnabled && headSHA !== toSHA) {
105
+ throw new Error(`You are attempting to recreate the changelog for an old release, but you have enabled auto-commit mode. Please disable auto-commit mode by updating your nx.json, or passing --git-commit=false`);
106
+ }
107
+ const tree = new tree_1.FsTree(workspace_root_1.workspaceRoot, args.verbose);
108
+ const commitMessage = args.gitCommitMessage || nxReleaseConfig.changelog.git.commitMessage;
109
+ const commitMessageValues = (0, shared_1.createCommitMessageValues)(releaseGroups, releaseGroupToFilteredProjects, projectsVersionData, commitMessage);
110
+ // Resolve any git tags as early as possible so that we can hard error in case of any duplicates before reaching the actual git command
111
+ const gitTagValues = args.gitTag ?? nxReleaseConfig.changelog.git.tag
112
+ ? (0, shared_1.createGitTagValues)(releaseGroups, releaseGroupToFilteredProjects, projectsVersionData)
113
+ : [];
114
+ (0, shared_1.handleDuplicateGitTags)(gitTagValues);
115
+ const postGitTasks = [];
116
+ let workspaceChangelogFromRef = args.from ||
117
+ (await (0, git_1.getLatestGitTagForPattern)(nxReleaseConfig.releaseTagPattern))?.tag;
118
+ if (!workspaceChangelogFromRef) {
119
+ if (useAutomaticFromRef) {
120
+ workspaceChangelogFromRef = await (0, git_1.getFirstGitCommit)();
121
+ if (args.verbose) {
122
+ console.log(`Determined workspace --from ref from the first commit in workspace: ${workspaceChangelogFromRef}`);
123
+ }
124
+ }
125
+ else {
126
+ throw new Error(`Unable to determine the previous git tag. If this is the first release of your workspace, use the --first-release option or set the "release.changelog.automaticFromRef" config property in nx.json to generate a changelog from the first commit. Otherwise, be sure to configure the "release.releaseTagPattern" property in nx.json to match the structure of your repository's git tags.`);
127
+ }
128
+ }
129
+ // Make sure that the fromRef is actually resolvable
130
+ const workspaceChangelogFromSHA = await (0, git_1.getCommitHash)(workspaceChangelogFromRef);
131
+ const workspaceChangelogCommits = await getCommits(workspaceChangelogFromSHA, toSHA);
132
+ await generateChangelogForWorkspace(tree, args, projectGraph, nxReleaseConfig, workspaceChangelogVersion, workspaceChangelogCommits, postGitTasks);
133
+ for (const releaseGroup of releaseGroups) {
134
+ const config = releaseGroup.changelog;
135
+ // The entire feature is disabled at the release group level, exit early
136
+ if (config === false) {
137
+ continue;
138
+ }
139
+ const projects = args.projects?.length
140
+ ? // If the user has passed a list of projects, we need to use the filtered list of projects within the release group
141
+ Array.from(releaseGroupToFilteredProjects.get(releaseGroup))
142
+ : // Otherwise, we use the full list of projects within the release group
143
+ releaseGroup.projects;
144
+ const projectNodes = projects.map((name) => projectGraph.nodes[name]);
145
+ if (releaseGroup.projectsRelationship === 'independent') {
146
+ for (const project of projectNodes) {
147
+ let fromRef = args.from ||
148
+ (await (0, git_1.getLatestGitTagForPattern)(releaseGroup.releaseTagPattern, {
149
+ projectName: project.name,
150
+ }))?.tag;
151
+ let commits = null;
152
+ if (!fromRef && useAutomaticFromRef) {
153
+ const firstCommit = await (0, git_1.getFirstGitCommit)();
154
+ const allCommits = await getCommits(firstCommit, toSHA);
155
+ const commitsForProject = allCommits.filter((c) => c.affectedFiles.find((f) => f.startsWith(project.data.root)));
156
+ fromRef = commitsForProject[0]?.shortHash;
157
+ if (args.verbose) {
158
+ console.log(`Determined --from ref for ${project.name} from the first commit in which it exists: ${fromRef}`);
159
+ }
160
+ commits = commitsForProject;
161
+ }
162
+ if (!fromRef && !commits) {
163
+ throw new Error(`Unable to determine the previous git tag. If this is the first release of your workspace, use the --first-release option or set the "release.changelog.automaticFromRef" config property in nx.json to generate a changelog from the first commit. Otherwise, be sure to configure the "release.releaseTagPattern" property in nx.json to match the structure of your repository's git tags.`);
164
+ }
165
+ if (!commits) {
166
+ commits = await getCommits(fromRef, toSHA);
167
+ }
168
+ await generateChangelogForProjects(tree, args, projectGraph, commits, projectsVersionData, postGitTasks, releaseGroup, [project]);
169
+ }
170
+ }
171
+ else {
172
+ const fromRef = args.from ||
173
+ (await (0, git_1.getLatestGitTagForPattern)(releaseGroup.releaseTagPattern))?.tag;
174
+ if (!fromRef) {
175
+ throw new Error(`Unable to determine the previous git tag, please provide an explicit git reference using --from`);
176
+ }
177
+ // Make sure that the fromRef is actually resolvable
178
+ const fromSHA = await (0, git_1.getCommitHash)(fromRef);
179
+ const commits = await getCommits(fromSHA, toSHA);
180
+ await generateChangelogForProjects(tree, args, projectGraph, commits, projectsVersionData, postGitTasks, releaseGroup, projectNodes);
181
+ }
182
+ }
183
+ return await applyChangesAndExit(args, nxReleaseConfig, tree, toSHA, postGitTasks, commitMessageValues, gitTagValues);
184
+ }
185
+ exports.releaseChangelog = releaseChangelog;
186
+ function resolveChangelogVersions(args, releaseGroups, releaseGroupToFilteredProjects) {
187
+ if (!args.version && !args.versionData) {
188
+ throw new Error(`You must provide a version string and/or a versionData object.`);
189
+ }
190
+ /**
191
+ * TODO: revaluate this assumption holistically in a dedicated PR when we add support for calver
192
+ * (e.g. the Release class also uses semver utils to check if prerelease).
193
+ *
194
+ * Right now, the given version must be valid semver in order to proceed
195
+ */
196
+ if (args.version && !(0, semver_1.valid)(args.version)) {
197
+ throw new Error(`The given version "${args.version}" is not a valid semver version. Please provide your version in the format "1.0.0", "1.0.0-beta.1" etc`);
198
+ }
199
+ const versionData = releaseGroups.reduce((versionData, releaseGroup) => {
200
+ const releaseGroupProjectNames = Array.from(releaseGroupToFilteredProjects.get(releaseGroup));
201
+ for (const projectName of releaseGroupProjectNames) {
202
+ if (!args.versionData) {
203
+ versionData[projectName] = {
204
+ newVersion: args.version,
205
+ currentVersion: '', // not relevant within changelog/commit generation
206
+ dependentProjects: [], // not relevant within changelog/commit generation
207
+ };
208
+ continue;
209
+ }
210
+ /**
211
+ * In the case where a versionData object was provided, we need to make sure all projects are present,
212
+ * otherwise it suggests a filtering mismatch between the version and changelog command invocations.
213
+ */
214
+ if (!args.versionData[projectName]) {
215
+ throw new Error(`The provided versionData object does not contain a version for project "${projectName}". This suggests a filtering mismatch between the version and changelog command invocations.`);
216
+ }
217
+ }
218
+ return versionData;
219
+ }, args.versionData || {});
220
+ return {
221
+ workspaceChangelogVersion: args.version,
222
+ projectsVersionData: versionData,
223
+ };
224
+ }
225
+ async function applyChangesAndExit(args, nxReleaseConfig, tree, toSHA, postGitTasks, commitMessageValues, gitTagValues) {
226
+ let latestCommit = toSHA;
227
+ const changes = tree.listChanges();
228
+ /**
229
+ * In the case where we are expecting changelog file updates, but there is nothing
230
+ * to flush from the tree, we exit early. This could happen we using conventional
231
+ * commits, for example.
232
+ */
233
+ const changelogFilesEnabled = checkChangelogFilesEnabled(nxReleaseConfig);
234
+ if (changelogFilesEnabled && !changes.length) {
235
+ output_1.output.warn({
236
+ title: `No changes detected for changelogs`,
237
+ bodyLines: [
238
+ `No changes were detected for any changelog files, so no changelog entries will be generated.`,
239
+ ],
240
+ });
241
+ return 0;
242
+ }
243
+ // Generate a new commit for the changes, if configured to do so
244
+ if (args.gitCommit ?? nxReleaseConfig.changelog.git.commit) {
245
+ await (0, shared_1.commitChanges)(changes.map((f) => f.path), !!args.dryRun, !!args.verbose, commitMessageValues, args.gitCommitArgs || nxReleaseConfig.changelog.git.commitArgs);
246
+ // Resolve the commit we just made
247
+ latestCommit = await (0, git_1.getCommitHash)('HEAD');
248
+ }
249
+ else if ((args.stageChanges ?? nxReleaseConfig.changelog.git.stageChanges) &&
250
+ changes.length) {
251
+ output_1.output.logSingleLine(`Staging changed files with git`);
252
+ await (0, git_1.gitAdd)({
253
+ changedFiles: changes.map((f) => f.path),
254
+ dryRun: args.dryRun,
255
+ verbose: args.verbose,
256
+ });
257
+ }
258
+ // Generate a one or more git tags for the changes, if configured to do so
259
+ if (args.gitTag ?? nxReleaseConfig.changelog.git.tag) {
260
+ output_1.output.logSingleLine(`Tagging commit with git`);
261
+ for (const tag of gitTagValues) {
262
+ await (0, git_1.gitTag)({
263
+ tag,
264
+ message: args.gitTagMessage || nxReleaseConfig.changelog.git.tagMessage,
265
+ additionalArgs: args.gitTagArgs || nxReleaseConfig.changelog.git.tagArgs,
266
+ dryRun: args.dryRun,
267
+ verbose: args.verbose,
268
+ });
269
+ }
270
+ }
271
+ // Run any post-git tasks in series
272
+ for (const postGitTask of postGitTasks) {
273
+ await postGitTask(latestCommit);
274
+ }
275
+ if (args.dryRun) {
276
+ logger_1.logger.warn(`\nNOTE: The "dryRun" flag means no changelogs were actually created.`);
277
+ }
278
+ return 0;
279
+ }
280
+ function resolveChangelogRenderer(changelogRendererPath) {
281
+ // Try and load the provided (or default) changelog renderer
282
+ let changelogRenderer;
283
+ let cleanupTranspiler = () => { };
284
+ try {
285
+ const rootTsconfigPath = (0, typescript_1.getRootTsConfigPath)();
286
+ if (rootTsconfigPath) {
287
+ cleanupTranspiler = (0, register_1.registerTsProject)(rootTsconfigPath);
288
+ }
289
+ const r = require(changelogRendererPath);
290
+ changelogRenderer = r.default || r;
291
+ }
292
+ catch {
293
+ }
294
+ finally {
295
+ cleanupTranspiler();
296
+ }
297
+ return changelogRenderer;
298
+ }
299
+ async function generateChangelogForWorkspace(tree, args, projectGraph, nxReleaseConfig, workspaceChangelogVersion, commits, postGitTasks) {
300
+ const config = nxReleaseConfig.changelog.workspaceChangelog;
301
+ // The entire feature is disabled at the workspace level, exit early
302
+ if (config === false) {
303
+ return;
304
+ }
305
+ // If explicitly null it must mean that no changes were detected (e.g. when using conventional commits), so do nothing
306
+ if (workspaceChangelogVersion === null) {
307
+ return;
308
+ }
309
+ // The user explicitly passed workspaceChangelog=true but does not have a workspace changelog config in nx.json
310
+ if (!config) {
311
+ throw new Error(`Workspace changelog is enabled but no configuration was provided. Please provide a workspaceChangelog object in your nx.json`);
312
+ }
313
+ if (Object.entries(nxReleaseConfig.groups).length > 1) {
314
+ output_1.output.warn({
315
+ title: `Workspace changelog is enabled, but you have multiple release groups configured. This is not supported, so workspace changelog will be disabled.`,
316
+ bodyLines: [
317
+ `A single workspace version cannot be determined when defining multiple release groups because versions differ between each group.`,
318
+ `Project level changelogs can be enabled with the "release.changelog.projectChangelogs" property.`,
319
+ ],
320
+ });
321
+ return;
322
+ }
323
+ if (Object.values(nxReleaseConfig.groups)[0].projectsRelationship ===
324
+ 'independent') {
325
+ output_1.output.warn({
326
+ title: `Workspace changelog is enabled, but you have configured an independent projects relationship. This is not supported, so workspace changelog will be disabled.`,
327
+ bodyLines: [
328
+ `A single workspace version cannot be determined when using independent projects because versions differ between each project.`,
329
+ `Project level changelogs can be enabled with the "release.changelog.projectChangelogs" property.`,
330
+ ],
331
+ });
332
+ return;
333
+ }
334
+ // Only trigger interactive mode for the workspace changelog if the user explicitly requested it via "all" or "workspace"
335
+ const interactive = args.interactive === 'all' || args.interactive === 'workspace';
336
+ const dryRun = !!args.dryRun;
337
+ const gitRemote = args.gitRemote;
338
+ const changelogRenderer = resolveChangelogRenderer(config.renderer);
339
+ let interpolatedTreePath = config.file || '';
340
+ if (interpolatedTreePath) {
341
+ interpolatedTreePath = (0, utils_1.interpolate)(interpolatedTreePath, {
342
+ projectName: '', // n/a for the workspace changelog
343
+ projectRoot: '', // n/a for the workspace changelog
344
+ workspaceRoot: '', // within the tree, workspaceRoot is the root
345
+ });
346
+ }
347
+ const releaseVersion = new shared_1.ReleaseVersion({
348
+ version: workspaceChangelogVersion,
349
+ releaseTagPattern: nxReleaseConfig.releaseTagPattern,
350
+ });
351
+ // We are either creating/previewing a changelog file, a GitHub release, or both
352
+ let logTitle = dryRun ? 'Previewing a' : 'Generating a';
353
+ switch (true) {
354
+ case interpolatedTreePath && config.createRelease === 'github':
355
+ logTitle += ` GitHub release and an entry in ${interpolatedTreePath} for ${chalk.white(releaseVersion.gitTag)}`;
356
+ break;
357
+ case !!interpolatedTreePath:
358
+ logTitle += `n entry in ${interpolatedTreePath} for ${chalk.white(releaseVersion.gitTag)}`;
359
+ break;
360
+ case config.createRelease === 'github':
361
+ logTitle += ` GitHub release for ${chalk.white(releaseVersion.gitTag)}`;
362
+ }
363
+ output_1.output.log({
364
+ title: logTitle,
365
+ });
366
+ const githubRepoSlug = (0, github_1.getGitHubRepoSlug)(gitRemote);
367
+ let contents = await changelogRenderer({
368
+ projectGraph,
369
+ commits,
370
+ releaseVersion: releaseVersion.rawVersion,
371
+ project: null,
372
+ repoSlug: githubRepoSlug,
373
+ entryWhenNoChanges: config.entryWhenNoChanges,
374
+ changelogRenderOptions: config.renderOptions,
375
+ });
376
+ /**
377
+ * If interactive mode, make the changelog contents available for the user to modify in their editor of choice,
378
+ * in a similar style to git interactive rebases/merges.
379
+ */
380
+ if (interactive) {
381
+ const tmpDir = (0, tmp_1.dirSync)().name;
382
+ const changelogPath = (0, path_1.joinPathFragments)(tmpDir,
383
+ // Include the tree path in the name so that it is easier to identify which changelog file is being edited
384
+ `PREVIEW__${interpolatedTreePath.replace(/\//g, '_')}`);
385
+ (0, node_fs_1.writeFileSync)(changelogPath, contents);
386
+ await (0, launch_editor_1.launchEditor)(changelogPath);
387
+ contents = (0, node_fs_1.readFileSync)(changelogPath, 'utf-8');
388
+ }
389
+ /**
390
+ * The exact logic we use for printing the summary/diff to the user is dependent upon whether they are creating
391
+ * a changelog file, a GitHub release, or both.
392
+ */
393
+ let printSummary = () => { };
394
+ const noDiffInChangelogMessage = chalk.yellow(`NOTE: There was no diff detected for the changelog entry. Maybe you intended to pass alternative git references via --from and --to?`);
395
+ if (interpolatedTreePath) {
396
+ let rootChangelogContents = tree.exists(interpolatedTreePath)
397
+ ? tree.read(interpolatedTreePath).toString()
398
+ : '';
399
+ if (rootChangelogContents) {
400
+ // NOTE: right now existing releases are always expected to be in markdown format, but in the future we could potentially support others via a custom parser option
401
+ const changelogReleases = (0, markdown_1.parseChangelogMarkdown)(rootChangelogContents).releases;
402
+ const existingVersionToUpdate = changelogReleases.find((r) => r.version === releaseVersion.rawVersion);
403
+ if (existingVersionToUpdate) {
404
+ rootChangelogContents = rootChangelogContents.replace(`## ${releaseVersion.rawVersion}\n\n\n${existingVersionToUpdate.body}`, contents);
405
+ }
406
+ else {
407
+ // No existing version, simply prepend the new release to the top of the file
408
+ rootChangelogContents = `${contents}\n\n${rootChangelogContents}`;
409
+ }
410
+ }
411
+ else {
412
+ // No existing changelog contents, simply create a new one using the generated contents
413
+ rootChangelogContents = contents;
414
+ }
415
+ tree.write(interpolatedTreePath, rootChangelogContents);
416
+ printSummary = () => (0, print_changes_1.printAndFlushChanges)(tree, !!dryRun, 3, false, noDiffInChangelogMessage);
417
+ }
418
+ if (config.createRelease === 'github') {
419
+ if (!githubRepoSlug) {
420
+ output_1.output.error({
421
+ title: `Unable to create a GitHub release because the GitHub repo slug could not be determined.`,
422
+ bodyLines: [
423
+ `Please ensure you have a valid GitHub remote configured. You can run \`git remote -v\` to list your current remotes.`,
424
+ ],
425
+ });
426
+ process.exit(1);
427
+ }
428
+ const token = await (0, github_1.resolveGithubToken)();
429
+ const githubRequestConfig = {
430
+ repo: githubRepoSlug,
431
+ token,
432
+ };
433
+ let existingGithubReleaseForVersion;
434
+ try {
435
+ existingGithubReleaseForVersion = await (0, github_1.getGithubReleaseByTag)(githubRequestConfig, releaseVersion.gitTag);
436
+ }
437
+ catch (err) {
438
+ if (err.response?.status === 401) {
439
+ output_1.output.error({
440
+ title: `Unable to resolve data via the GitHub API. You can use any of the following options to resolve this:`,
441
+ bodyLines: [
442
+ '- Set the `GITHUB_TOKEN` or `GH_TOKEN` environment variable to a valid GitHub token with `repo` scope',
443
+ '- Have an active session via the official gh CLI tool (https://cli.github.com) in your current terminal',
444
+ ],
445
+ });
446
+ process.exit(1);
447
+ }
448
+ if (err.response?.status === 404) {
449
+ // No existing release found, this is fine
450
+ }
451
+ else {
452
+ // Rethrow unknown errors for now
453
+ throw err;
454
+ }
455
+ }
456
+ let existingPrintSummaryFn = printSummary;
457
+ printSummary = () => {
458
+ const logTitle = `https://github.com/${githubRepoSlug}/releases/tag/${releaseVersion.gitTag}`;
459
+ if (existingGithubReleaseForVersion) {
460
+ console.error(`${chalk.white('UPDATE')} ${logTitle}${dryRun ? chalk.keyword('orange')(' [dry-run]') : ''}`);
461
+ }
462
+ else {
463
+ console.error(`${chalk.green('CREATE')} ${logTitle}${dryRun ? chalk.keyword('orange')(' [dry-run]') : ''}`);
464
+ }
465
+ // Only print the diff here if we are not already going to be printing changes from the Tree
466
+ if (!interpolatedTreePath) {
467
+ console.log('');
468
+ (0, print_changes_1.printDiff)(existingGithubReleaseForVersion
469
+ ? existingGithubReleaseForVersion.body
470
+ : '', contents, 3, noDiffInChangelogMessage);
471
+ }
472
+ existingPrintSummaryFn();
473
+ };
474
+ // Only schedule the actual GitHub update when not in dry-run mode
475
+ if (!dryRun) {
476
+ postGitTasks.push(async (latestCommit) => {
477
+ // Before we can create/update the release we need to ensure the commit exists on the remote
478
+ await (0, git_1.gitPush)();
479
+ await (0, github_1.createOrUpdateGithubRelease)(githubRequestConfig, {
480
+ version: releaseVersion.gitTag,
481
+ prerelease: releaseVersion.isPrerelease,
482
+ body: contents,
483
+ commit: latestCommit,
484
+ }, existingGithubReleaseForVersion);
485
+ });
486
+ }
487
+ }
488
+ printSummary();
489
+ }
490
+ async function generateChangelogForProjects(tree, args, projectGraph, commits, projectsVersionData, postGitTasks, releaseGroup, projects) {
491
+ const config = releaseGroup.changelog;
492
+ // The entire feature is disabled at the release group level, exit early
493
+ if (config === false) {
494
+ return;
495
+ }
496
+ // Only trigger interactive mode for the project changelog if the user explicitly requested it via "all" or "projects"
497
+ const interactive = args.interactive === 'all' || args.interactive === 'projects';
498
+ const dryRun = !!args.dryRun;
499
+ const gitRemote = args.gitRemote;
500
+ const changelogRenderer = resolveChangelogRenderer(config.renderer);
501
+ for (const project of projects) {
502
+ let interpolatedTreePath = config.file || '';
503
+ if (interpolatedTreePath) {
504
+ interpolatedTreePath = (0, utils_1.interpolate)(interpolatedTreePath, {
505
+ projectName: project.name,
506
+ projectRoot: project.data.root,
507
+ workspaceRoot: '', // within the tree, workspaceRoot is the root
508
+ });
509
+ }
510
+ /**
511
+ * newVersion will be null in the case that no changes were detected (e.g. in conventional commits mode),
512
+ * no changelog entry is relevant in that case.
513
+ */
514
+ if (projectsVersionData[project.name].newVersion === null) {
515
+ continue;
516
+ }
517
+ const releaseVersion = new shared_1.ReleaseVersion({
518
+ version: projectsVersionData[project.name].newVersion,
519
+ releaseTagPattern: releaseGroup.releaseTagPattern,
520
+ projectName: project.name,
521
+ });
522
+ // We are either creating/previewing a changelog file, a GitHub release, or both
523
+ let logTitle = dryRun ? 'Previewing a' : 'Generating a';
524
+ switch (true) {
525
+ case interpolatedTreePath && config.createRelease === 'github':
526
+ logTitle += ` GitHub release and an entry in ${interpolatedTreePath} for ${chalk.white(releaseVersion.gitTag)}`;
527
+ break;
528
+ case !!interpolatedTreePath:
529
+ logTitle += `n entry in ${interpolatedTreePath} for ${chalk.white(releaseVersion.gitTag)}`;
530
+ break;
531
+ case config.createRelease === 'github':
532
+ logTitle += ` GitHub release for ${chalk.white(releaseVersion.gitTag)}`;
533
+ }
534
+ output_1.output.log({
535
+ title: logTitle,
536
+ });
537
+ const githubRepoSlug = config.createRelease === 'github'
538
+ ? (0, github_1.getGitHubRepoSlug)(gitRemote)
539
+ : undefined;
540
+ let contents = await changelogRenderer({
541
+ projectGraph,
542
+ commits,
543
+ releaseVersion: releaseVersion.rawVersion,
544
+ project: project.name,
545
+ repoSlug: githubRepoSlug,
546
+ entryWhenNoChanges: typeof config.entryWhenNoChanges === 'string'
547
+ ? (0, utils_1.interpolate)(config.entryWhenNoChanges, {
548
+ projectName: project.name,
549
+ projectRoot: project.data.root,
550
+ workspaceRoot: '', // within the tree, workspaceRoot is the root
551
+ })
552
+ : false,
553
+ changelogRenderOptions: config.renderOptions,
554
+ });
555
+ /**
556
+ * If interactive mode, make the changelog contents available for the user to modify in their editor of choice,
557
+ * in a similar style to git interactive rebases/merges.
558
+ */
559
+ if (interactive) {
560
+ const tmpDir = (0, tmp_1.dirSync)().name;
561
+ const changelogPath = (0, path_1.joinPathFragments)(tmpDir,
562
+ // Include the tree path in the name so that it is easier to identify which changelog file is being edited
563
+ `PREVIEW__${interpolatedTreePath.replace(/\//g, '_')}`);
564
+ (0, node_fs_1.writeFileSync)(changelogPath, contents);
565
+ await (0, launch_editor_1.launchEditor)(changelogPath);
566
+ contents = (0, node_fs_1.readFileSync)(changelogPath, 'utf-8');
567
+ }
568
+ /**
569
+ * The exact logic we use for printing the summary/diff to the user is dependent upon whether they are creating
570
+ * a changelog file, a GitHub release, or both.
571
+ */
572
+ let printSummary = () => { };
573
+ const noDiffInChangelogMessage = chalk.yellow(`NOTE: There was no diff detected for the changelog entry. Maybe you intended to pass alternative git references via --from and --to?`);
574
+ if (interpolatedTreePath) {
575
+ let changelogContents = tree.exists(interpolatedTreePath)
576
+ ? tree.read(interpolatedTreePath).toString()
577
+ : '';
578
+ if (changelogContents) {
579
+ // NOTE: right now existing releases are always expected to be in markdown format, but in the future we could potentially support others via a custom parser option
580
+ const changelogReleases = (0, markdown_1.parseChangelogMarkdown)(changelogContents).releases;
581
+ const existingVersionToUpdate = changelogReleases.find((r) => r.version === releaseVersion.rawVersion);
582
+ if (existingVersionToUpdate) {
583
+ changelogContents = changelogContents.replace(`## ${releaseVersion.rawVersion}\n\n\n${existingVersionToUpdate.body}`, contents);
584
+ }
585
+ else {
586
+ // No existing version, simply prepend the new release to the top of the file
587
+ changelogContents = `${contents}\n\n${changelogContents}`;
588
+ }
589
+ }
590
+ else {
591
+ // No existing changelog contents, simply create a new one using the generated contents
592
+ changelogContents = contents;
593
+ }
594
+ tree.write(interpolatedTreePath, changelogContents);
595
+ printSummary = () => (0, print_changes_1.printAndFlushChanges)(tree, !!dryRun, 3, false, noDiffInChangelogMessage,
596
+ // Only print the change for the current changelog file at this point
597
+ (f) => f.path === interpolatedTreePath);
598
+ }
599
+ if (config.createRelease === 'github') {
600
+ if (!githubRepoSlug) {
601
+ output_1.output.error({
602
+ title: `Unable to create a GitHub release because the GitHub repo slug could not be determined.`,
603
+ bodyLines: [
604
+ `Please ensure you have a valid GitHub remote configured. You can run \`git remote -v\` to list your current remotes.`,
605
+ ],
606
+ });
607
+ process.exit(1);
608
+ }
609
+ const token = await (0, github_1.resolveGithubToken)();
610
+ const githubRequestConfig = {
611
+ repo: githubRepoSlug,
612
+ token,
613
+ };
614
+ let existingGithubReleaseForVersion;
615
+ try {
616
+ existingGithubReleaseForVersion = await (0, github_1.getGithubReleaseByTag)(githubRequestConfig, releaseVersion.gitTag);
617
+ }
618
+ catch (err) {
619
+ if (err.response?.status === 401) {
620
+ output_1.output.error({
621
+ title: `Unable to resolve data via the GitHub API. You can use any of the following options to resolve this:`,
622
+ bodyLines: [
623
+ '- Set the `GITHUB_TOKEN` or `GH_TOKEN` environment variable to a valid GitHub token with `repo` scope',
624
+ '- Have an active session via the official gh CLI tool (https://cli.github.com) in your current terminal',
625
+ ],
626
+ });
627
+ process.exit(1);
628
+ }
629
+ if (err.response?.status === 404) {
630
+ // No existing release found, this is fine
631
+ }
632
+ else {
633
+ // Rethrow unknown errors for now
634
+ throw err;
635
+ }
636
+ }
637
+ let existingPrintSummaryFn = printSummary;
638
+ printSummary = () => {
639
+ const logTitle = `https://github.com/${githubRepoSlug}/releases/tag/${releaseVersion.gitTag}`;
640
+ if (existingGithubReleaseForVersion) {
641
+ console.error(`${chalk.white('UPDATE')} ${logTitle}${dryRun ? chalk.keyword('orange')(' [dry-run]') : ''}`);
642
+ }
643
+ else {
644
+ console.error(`${chalk.green('CREATE')} ${logTitle}${dryRun ? chalk.keyword('orange')(' [dry-run]') : ''}`);
645
+ }
646
+ // Only print the diff here if we are not already going to be printing changes from the Tree
647
+ if (!interpolatedTreePath) {
648
+ console.log('');
649
+ (0, print_changes_1.printDiff)(existingGithubReleaseForVersion
650
+ ? existingGithubReleaseForVersion.body
651
+ : '', contents, 3, noDiffInChangelogMessage);
652
+ }
653
+ existingPrintSummaryFn();
654
+ };
655
+ // Only schedule the actual GitHub update when not in dry-run mode
656
+ if (!dryRun) {
657
+ postGitTasks.push(async (latestCommit) => {
658
+ // Before we can create/update the release we need to ensure the commit exists on the remote
659
+ await (0, git_1.gitPush)(gitRemote);
660
+ await (0, github_1.createOrUpdateGithubRelease)(githubRequestConfig, {
661
+ version: releaseVersion.gitTag,
662
+ prerelease: releaseVersion.isPrerelease,
663
+ body: contents,
664
+ commit: latestCommit,
665
+ }, existingGithubReleaseForVersion);
666
+ });
667
+ }
668
+ }
669
+ printSummary();
670
+ }
671
+ }
672
+ function checkChangelogFilesEnabled(nxReleaseConfig) {
673
+ if (nxReleaseConfig.changelog.workspaceChangelog &&
674
+ nxReleaseConfig.changelog.workspaceChangelog.file) {
675
+ return true;
676
+ }
677
+ for (const releaseGroup of Object.values(nxReleaseConfig.groups)) {
678
+ if (releaseGroup.changelog && releaseGroup.changelog.file) {
679
+ return true;
680
+ }
681
+ }
682
+ return false;
683
+ }
684
+ async function getCommits(fromSHA, toSHA) {
685
+ const rawCommits = await (0, git_1.getGitDiff)(fromSHA, toSHA);
686
+ // Parse as conventional commits
687
+ return (0, git_1.parseCommits)(rawCommits).filter((c) => {
688
+ const type = c.type;
689
+ // Always ignore non user-facing commits for now
690
+ // TODO: allow this filter to be configurable via config in a future release
691
+ if (type === 'feat' || type === 'fix' || type === 'perf') {
692
+ return true;
693
+ }
694
+ return false;
695
+ });
696
+ }