nx 17.0.3 → 17.0.5

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 (320) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +9 -4
  3. package/bin/init-local.js +10 -60
  4. package/bin/nx-cloud.js +6 -0
  5. package/bin/nx.js +1 -9
  6. package/bin/post-install.js +5 -1
  7. package/bin/run-executor.js +1 -1
  8. package/migrations.json +18 -0
  9. package/package.json +21 -18
  10. package/plugins/package-json.js +1 -1
  11. package/{changelog-renderer → release/changelog-renderer}/index.d.ts +18 -3
  12. package/{changelog-renderer → release/changelog-renderer}/index.js +78 -34
  13. package/release/index.d.ts +4 -0
  14. package/release/index.js +11 -0
  15. package/schemas/nx-schema.json +203 -19
  16. package/schemas/project-schema.json +20 -0
  17. package/src/adapter/angular-json.js +28 -18
  18. package/src/adapter/compat.d.ts +2 -2
  19. package/src/adapter/compat.js +6 -1
  20. package/src/adapter/ngcli-adapter.d.ts +16 -4
  21. package/src/adapter/ngcli-adapter.js +85 -28
  22. package/src/command-line/add/add.d.ts +2 -0
  23. package/src/command-line/add/add.js +169 -0
  24. package/src/command-line/add/command-object.d.ts +7 -0
  25. package/src/command-line/add/command-object.js +24 -0
  26. package/src/command-line/affected/affected.js +0 -3
  27. package/src/command-line/affected/command-object.d.ts +4 -4
  28. package/src/command-line/affected/command-object.js +53 -26
  29. package/src/command-line/affected/print-affected.js +10 -1
  30. package/src/command-line/connect/command-object.d.ts +1 -2
  31. package/src/command-line/connect/command-object.js +3 -7
  32. package/src/command-line/connect/connect-to-nx-cloud.d.ts +4 -5
  33. package/src/command-line/connect/connect-to-nx-cloud.js +43 -31
  34. package/src/command-line/connect/view-logs.js +5 -21
  35. package/src/command-line/examples.js +18 -0
  36. package/src/command-line/exec/command-object.js +2 -1
  37. package/src/command-line/exec/exec.d.ts +1 -1
  38. package/src/command-line/exec/exec.js +78 -35
  39. package/src/command-line/format/format.js +13 -4
  40. package/src/command-line/generate/generate.js +9 -9
  41. package/src/command-line/generate/generator-utils.d.ts +3 -2
  42. package/src/command-line/generate/generator-utils.js +5 -5
  43. package/src/command-line/graph/graph.d.ts +1 -1
  44. package/src/command-line/graph/graph.js +82 -37
  45. package/src/command-line/init/command-object.js +70 -43
  46. package/src/command-line/init/implementation/add-nx-to-monorepo.d.ts +4 -2
  47. package/src/command-line/init/implementation/add-nx-to-monorepo.js +11 -2
  48. package/src/command-line/init/implementation/add-nx-to-nest.d.ts +1 -1
  49. package/src/command-line/init/implementation/add-nx-to-nest.js +9 -6
  50. package/src/command-line/init/implementation/add-nx-to-npm-repo.d.ts +4 -2
  51. package/src/command-line/init/implementation/add-nx-to-npm-repo.js +14 -4
  52. package/src/command-line/init/implementation/angular/index.js +4 -1
  53. package/src/command-line/init/implementation/angular/legacy-angular-versions.js +10 -5
  54. package/src/command-line/init/implementation/angular/standalone-workspace.js +1 -1
  55. package/src/command-line/init/implementation/angular/types.d.ts +1 -1
  56. package/src/command-line/init/implementation/dot-nx/nxw.js +47 -16
  57. package/src/command-line/init/implementation/react/index.d.ts +1 -1
  58. package/src/command-line/init/implementation/react/index.js +4 -2
  59. package/src/command-line/init/implementation/react/rename-js-to-jsx.js +4 -2
  60. package/src/command-line/init/implementation/utils.d.ts +5 -5
  61. package/src/command-line/init/implementation/utils.js +46 -44
  62. package/src/command-line/init/{init.js → init-v1.js} +5 -13
  63. package/src/command-line/init/init-v2.d.ts +7 -0
  64. package/src/command-line/init/init-v2.js +201 -0
  65. package/src/command-line/list/list.js +6 -5
  66. package/src/command-line/migrate/command-object.js +19 -4
  67. package/src/command-line/migrate/migrate.js +21 -17
  68. package/src/command-line/new/new.js +1 -1
  69. package/src/command-line/nx-commands.js +4 -1
  70. package/src/command-line/release/changelog.d.ts +22 -1
  71. package/src/command-line/release/changelog.js +459 -257
  72. package/src/command-line/release/command-object.d.ts +29 -7
  73. package/src/command-line/release/command-object.js +120 -20
  74. package/src/command-line/release/config/config.d.ts +26 -21
  75. package/src/command-line/release/config/config.js +416 -59
  76. package/src/command-line/release/config/conventional-commits.d.ts +2 -0
  77. package/src/command-line/release/config/conventional-commits.js +98 -0
  78. package/src/command-line/release/config/filter-release-groups.d.ts +1 -2
  79. package/src/command-line/release/config/filter-release-groups.js +38 -1
  80. package/src/command-line/release/index.d.ts +16 -0
  81. package/src/command-line/release/index.js +23 -0
  82. package/src/command-line/release/publish.d.ts +7 -3
  83. package/src/command-line/release/publish.js +89 -37
  84. package/src/command-line/release/release.d.ts +4 -0
  85. package/src/command-line/release/release.js +176 -0
  86. package/src/command-line/release/utils/batch-projects-by-generator-config.d.ts +7 -0
  87. package/src/command-line/release/utils/batch-projects-by-generator-config.js +37 -0
  88. package/src/command-line/release/utils/exec-command.d.ts +1 -0
  89. package/src/command-line/release/utils/exec-command.js +34 -0
  90. package/src/command-line/release/utils/git.d.ts +34 -1
  91. package/src/command-line/release/utils/git.js +238 -34
  92. package/src/command-line/release/utils/github.d.ts +5 -5
  93. package/src/command-line/release/utils/github.js +155 -8
  94. package/src/command-line/release/utils/markdown.js +6 -1
  95. package/src/command-line/release/utils/print-changes.d.ts +1 -1
  96. package/src/command-line/release/utils/print-changes.js +3 -3
  97. package/src/command-line/release/utils/resolve-nx-json-error-message.js +4 -1
  98. package/src/command-line/release/utils/resolve-semver-specifier.d.ts +4 -0
  99. package/src/command-line/release/utils/resolve-semver-specifier.js +58 -0
  100. package/src/command-line/release/utils/semver.d.ts +8 -0
  101. package/src/command-line/release/utils/semver.js +30 -1
  102. package/src/command-line/release/utils/shared.d.ts +39 -0
  103. package/src/command-line/release/utils/shared.js +213 -0
  104. package/src/command-line/release/version.d.ts +37 -3
  105. package/src/command-line/release/version.js +312 -117
  106. package/src/command-line/repair/repair.js +13 -9
  107. package/src/command-line/report/report.d.ts +3 -0
  108. package/src/command-line/report/report.js +22 -5
  109. package/src/command-line/run/command-object.d.ts +4 -0
  110. package/src/command-line/run/command-object.js +18 -2
  111. package/src/command-line/run/executor-utils.d.ts +2 -1
  112. package/src/command-line/run/executor-utils.js +4 -4
  113. package/src/command-line/run/run-one.js +3 -6
  114. package/src/command-line/run/run.js +34 -9
  115. package/src/command-line/run-many/command-object.js +4 -1
  116. package/src/command-line/run-many/run-many.js +0 -3
  117. package/src/command-line/show/command-object.d.ts +3 -0
  118. package/src/command-line/show/command-object.js +29 -2
  119. package/src/command-line/show/show.js +9 -0
  120. package/src/command-line/yargs-utils/shared-options.d.ts +4 -1
  121. package/src/command-line/yargs-utils/shared-options.js +23 -9
  122. package/src/commands-runner/command-graph.d.ts +13 -0
  123. package/src/commands-runner/command-graph.js +2 -0
  124. package/src/commands-runner/create-command-graph.d.ts +4 -0
  125. package/src/commands-runner/create-command-graph.js +44 -0
  126. package/src/commands-runner/get-command-projects.d.ts +3 -0
  127. package/src/commands-runner/get-command-projects.js +19 -0
  128. package/src/config/nx-json.d.ts +160 -25
  129. package/src/config/project-graph.d.ts +3 -3
  130. package/src/config/workspace-json-project-json.d.ts +23 -1
  131. package/src/config/workspaces.d.ts +1 -1
  132. package/src/config/workspaces.js +4 -6
  133. package/src/core/graph/3rdpartylicenses.txt +144 -74
  134. package/src/core/graph/environment.js +1 -1
  135. package/src/core/graph/index.html +4 -6
  136. package/src/core/graph/main.js +1 -1
  137. package/src/core/graph/runtime.js +1 -1
  138. package/src/core/graph/styles.css +3 -3
  139. package/src/core/graph/styles.js +1 -1
  140. package/src/daemon/client/client.d.ts +5 -1
  141. package/src/daemon/client/client.js +27 -8
  142. package/src/daemon/client/{socket-messenger.d.ts → daemon-socket-messenger.d.ts} +1 -1
  143. package/src/daemon/client/{socket-messenger.js → daemon-socket-messenger.js} +3 -3
  144. package/src/daemon/daemon-project-graph-error.d.ts +8 -0
  145. package/src/daemon/daemon-project-graph-error.js +13 -0
  146. package/src/daemon/server/handle-hash-tasks.js +12 -2
  147. package/src/daemon/server/handle-request-project-graph.js +1 -1
  148. package/src/daemon/server/project-graph-incremental-recomputation.d.ts +14 -13
  149. package/src/daemon/server/project-graph-incremental-recomputation.js +98 -33
  150. package/src/daemon/server/shutdown-utils.js +2 -4
  151. package/src/daemon/server/watcher.js +0 -3
  152. package/src/daemon/socket-utils.d.ts +2 -1
  153. package/src/daemon/socket-utils.js +15 -4
  154. package/src/daemon/tmp-dir.d.ts +1 -0
  155. package/src/daemon/tmp-dir.js +4 -4
  156. package/src/devkit-exports.d.ts +2 -2
  157. package/src/devkit-exports.js +3 -2
  158. package/src/devkit-internals.d.ts +3 -0
  159. package/src/devkit-internals.js +7 -1
  160. package/src/executors/noop/schema.json +1 -1
  161. package/src/executors/run-commands/run-commands.impl.d.ts +10 -2
  162. package/src/executors/run-commands/run-commands.impl.js +152 -48
  163. package/src/executors/run-commands/schema.json +11 -1
  164. package/src/executors/run-script/run-script.impl.js +43 -11
  165. package/src/executors/utils/convert-nx-executor.js +1 -1
  166. package/src/generators/internal-utils/format-changed-files-with-prettier-if-available.d.ts +3 -1
  167. package/src/generators/internal-utils/format-changed-files-with-prettier-if-available.js +4 -2
  168. package/src/generators/testing-utils/create-tree-with-empty-workspace.js +0 -6
  169. package/src/generators/tree.d.ts +1 -0
  170. package/src/generators/utils/glob.js +2 -2
  171. package/src/generators/utils/project-configuration.js +28 -9
  172. package/src/hasher/create-task-hasher.d.ts +4 -0
  173. package/src/hasher/create-task-hasher.js +16 -0
  174. package/src/hasher/hash-task.js +9 -3
  175. package/src/hasher/native-task-hasher-impl.d.ts +19 -0
  176. package/src/hasher/native-task-hasher-impl.js +37 -0
  177. package/src/hasher/node-task-hasher-impl.d.ts +49 -0
  178. package/src/hasher/node-task-hasher-impl.js +431 -0
  179. package/src/hasher/task-hasher.d.ts +33 -21
  180. package/src/hasher/task-hasher.js +30 -428
  181. package/src/migrations/update-15-0-0/migrate-to-inputs.js +5 -5
  182. package/src/migrations/update-15-1-0/set-project-names.js +2 -1
  183. package/src/migrations/update-15-8-2/update-nxw.js +2 -6
  184. package/src/migrations/update-17-0-0/rm-default-collection-npm-scope.js +3 -3
  185. package/src/migrations/update-17-0-0/use-minimal-config-for-tasks-runner-options.js +49 -13
  186. package/src/migrations/update-17-2-0/move-default-base.d.ts +5 -0
  187. package/src/migrations/update-17-2-0/move-default-base.js +21 -0
  188. package/src/migrations/update-17-3-0/nx-release-path.d.ts +3 -0
  189. package/src/migrations/update-17-3-0/nx-release-path.js +48 -0
  190. package/src/migrations/update-17-3-0/update-nxw.d.ts +2 -0
  191. package/src/migrations/update-17-3-0/update-nxw.js +7 -0
  192. package/src/migrations/update-18-0-0/disable-crystal-for-existing-workspaces.d.ts +2 -0
  193. package/src/migrations/update-18-0-0/disable-crystal-for-existing-workspaces.js +9 -0
  194. package/src/native/index.d.ts +65 -15
  195. package/src/native/index.js +6 -2
  196. package/src/native/transform-objects.js +2 -0
  197. package/src/nx-cloud/generators/connect-to-nx-cloud/connect-to-nx-cloud.d.ts +1 -0
  198. package/src/nx-cloud/generators/connect-to-nx-cloud/connect-to-nx-cloud.js +13 -12
  199. package/src/nx-cloud/generators/connect-to-nx-cloud/schema.json +6 -1
  200. package/src/nx-cloud/update-manager.js +2 -1
  201. package/src/plugins/js/index.d.ts +1 -1
  202. package/src/plugins/js/index.js +3 -3
  203. package/src/plugins/js/lock-file/lock-file.d.ts +2 -2
  204. package/src/plugins/js/lock-file/lock-file.js +15 -3
  205. package/src/plugins/js/package-json/create-package-json.js +1 -1
  206. package/src/plugins/js/project-graph/build-dependencies/strip-source-code.d.ts +1 -1
  207. package/src/plugins/js/project-graph/build-dependencies/strip-source-code.js +1 -1
  208. package/src/plugins/js/project-graph/build-dependencies/typescript-import-locator.d.ts +1 -1
  209. package/src/plugins/js/project-graph/build-dependencies/typescript-import-locator.js +1 -1
  210. package/src/plugins/js/utils/register.d.ts +1 -1
  211. package/src/plugins/js/utils/register.js +28 -8
  212. package/src/plugins/js/versions.d.ts +1 -1
  213. package/src/plugins/js/versions.js +1 -1
  214. package/{plugins/package-json-workspaces.d.ts → src/plugins/package-json-workspaces/create-nodes.d.ts} +4 -4
  215. package/{plugins/package-json-workspaces.js → src/plugins/package-json-workspaces/create-nodes.js} +34 -12
  216. package/src/plugins/package-json-workspaces/index.d.ts +1 -0
  217. package/src/plugins/package-json-workspaces/index.js +4 -0
  218. package/src/plugins/project-json/build-nodes/package-json-next-to-project-json.d.ts +2 -0
  219. package/src/plugins/project-json/build-nodes/package-json-next-to-project-json.js +47 -0
  220. package/src/plugins/project-json/build-nodes/project-json.d.ts +2 -5
  221. package/src/plugins/project-json/build-nodes/project-json.js +6 -44
  222. package/src/plugins/target-defaults/target-defaults-plugin.d.ts +66 -0
  223. package/src/plugins/target-defaults/target-defaults-plugin.js +182 -0
  224. package/src/project-graph/affected/locators/project-glob-changes.js +3 -3
  225. package/src/project-graph/affected/locators/workspace-projects.d.ts +0 -2
  226. package/src/project-graph/affected/locators/workspace-projects.js +16 -29
  227. package/src/project-graph/build-project-graph.d.ts +20 -1
  228. package/src/project-graph/build-project-graph.js +91 -33
  229. package/src/project-graph/file-map-utils.d.ts +9 -5
  230. package/src/project-graph/file-map-utils.js +16 -63
  231. package/src/project-graph/file-utils.d.ts +1 -1
  232. package/src/project-graph/file-utils.js +44 -2
  233. package/src/project-graph/nx-deps-cache.js +1 -1
  234. package/src/project-graph/project-graph-builder.d.ts +1 -1
  235. package/src/project-graph/project-graph-builder.js +1 -1
  236. package/src/project-graph/project-graph.d.ts +32 -1
  237. package/src/project-graph/project-graph.js +147 -23
  238. package/src/project-graph/utils/build-all-workspace-files.d.ts +2 -0
  239. package/src/project-graph/utils/build-all-workspace-files.js +15 -0
  240. package/src/project-graph/utils/normalize-project-nodes.d.ts +2 -3
  241. package/src/project-graph/utils/normalize-project-nodes.js +7 -33
  242. package/src/project-graph/utils/project-configuration-utils.d.ts +66 -4
  243. package/src/project-graph/utils/project-configuration-utils.js +509 -62
  244. package/src/project-graph/utils/retrieve-workspace-files.d.ts +12 -31
  245. package/src/project-graph/utils/retrieve-workspace-files.js +27 -90
  246. package/src/tasks-runner/batch/run-batch.js +3 -3
  247. package/src/tasks-runner/cache.js +6 -3
  248. package/src/tasks-runner/create-task-graph.js +1 -1
  249. package/src/tasks-runner/fork.d.ts +1 -0
  250. package/src/tasks-runner/fork.js +23 -0
  251. package/src/tasks-runner/forked-process-task-runner.d.ts +13 -5
  252. package/src/tasks-runner/forked-process-task-runner.js +112 -21
  253. package/src/tasks-runner/init-tasks-runner.js +1 -1
  254. package/src/tasks-runner/life-cycles/dynamic-run-many-terminal-output-life-cycle.js +28 -28
  255. package/src/tasks-runner/life-cycles/dynamic-run-one-terminal-output-life-cycle.js +19 -22
  256. package/src/tasks-runner/life-cycles/empty-terminal-output-life-cycle.js +1 -3
  257. package/src/tasks-runner/life-cycles/invoke-runner-terminal-output-life-cycle.js +1 -3
  258. package/src/tasks-runner/life-cycles/static-run-many-terminal-output-life-cycle.js +2 -4
  259. package/src/tasks-runner/life-cycles/static-run-one-terminal-output-life-cycle.d.ts +1 -0
  260. package/src/tasks-runner/life-cycles/static-run-one-terminal-output-life-cycle.js +11 -5
  261. package/src/tasks-runner/life-cycles/view-logs-utils.js +1 -1
  262. package/src/tasks-runner/pseudo-ipc.d.ts +49 -0
  263. package/src/tasks-runner/pseudo-ipc.js +140 -0
  264. package/src/tasks-runner/pseudo-terminal.d.ts +43 -0
  265. package/src/tasks-runner/pseudo-terminal.js +159 -0
  266. package/src/tasks-runner/run-command.d.ts +1 -1
  267. package/src/tasks-runner/run-command.js +13 -19
  268. package/src/tasks-runner/task-env.js +1 -2
  269. package/src/tasks-runner/task-graph-utils.d.ts +7 -3
  270. package/src/tasks-runner/task-graph-utils.js +15 -15
  271. package/src/tasks-runner/task-orchestrator.js +68 -12
  272. package/src/tasks-runner/tasks-schedule.js +3 -3
  273. package/src/tasks-runner/utils.d.ts +16 -7
  274. package/src/tasks-runner/utils.js +30 -16
  275. package/src/utils/ab-testing.d.ts +36 -2
  276. package/src/utils/ab-testing.js +34 -16
  277. package/src/utils/assert-workspace-validity.js +1 -1
  278. package/src/utils/cache-directory.d.ts +1 -0
  279. package/src/utils/cache-directory.js +5 -1
  280. package/src/utils/child-process.d.ts +15 -1
  281. package/src/utils/child-process.js +91 -1
  282. package/src/utils/command-line-utils.js +2 -1
  283. package/src/utils/exit-codes.d.ts +6 -0
  284. package/src/utils/exit-codes.js +20 -0
  285. package/src/utils/fileutils.d.ts +1 -0
  286. package/src/utils/find-matching-projects.js +5 -5
  287. package/src/utils/find-workspace-root.js +1 -0
  288. package/src/utils/ignore.js +8 -1
  289. package/src/utils/json-diff.d.ts +1 -0
  290. package/src/utils/json-diff.js +2 -1
  291. package/src/utils/json.js +3 -1
  292. package/src/utils/logger.js +1 -1
  293. package/src/utils/nx-cloud-utils.d.ts +1 -1
  294. package/src/utils/nx-cloud-utils.js +9 -4
  295. package/src/utils/nx-plugin.d.ts +32 -15
  296. package/src/utils/nx-plugin.deprecated.d.ts +10 -5
  297. package/src/utils/nx-plugin.deprecated.js +23 -0
  298. package/src/utils/nx-plugin.js +71 -80
  299. package/src/utils/output.d.ts +4 -2
  300. package/src/utils/output.js +44 -9
  301. package/src/utils/package-json.d.ts +4 -4
  302. package/src/utils/package-json.js +18 -12
  303. package/src/utils/package-manager.d.ts +7 -0
  304. package/src/utils/package-manager.js +24 -4
  305. package/src/utils/params.d.ts +12 -4
  306. package/src/utils/params.js +37 -4
  307. package/src/utils/plugins/core-plugins.js +8 -0
  308. package/src/utils/plugins/installed-plugins.d.ts +2 -1
  309. package/src/utils/plugins/installed-plugins.js +2 -2
  310. package/src/utils/plugins/local-plugins.js +1 -1
  311. package/src/utils/plugins/plugin-capabilities.d.ts +3 -2
  312. package/src/utils/plugins/plugin-capabilities.js +7 -7
  313. package/src/utils/typescript.js +1 -1
  314. package/src/utils/update-nxw.d.ts +2 -0
  315. package/src/utils/update-nxw.js +12 -0
  316. package/src/utils/workspace-configuration-check.js +1 -1
  317. package/src/utils/workspace-context.d.ts +6 -4
  318. package/src/utils/workspace-context.js +19 -9
  319. package/src/core/graph/polyfills.js +0 -1
  320. /package/src/command-line/init/{init.d.ts → init-v1.d.ts} +0 -0
@@ -1,25 +1,47 @@
1
1
  import { CommandModule } from 'yargs';
2
- import { RunManyOptions } from '../yargs-utils/shared-options';
2
+ import { OutputStyle, RunManyOptions } from '../yargs-utils/shared-options';
3
+ import { VersionData } from './utils/shared';
3
4
  export interface NxReleaseArgs {
4
5
  groups?: string[];
5
6
  projects?: string[];
6
7
  dryRun?: boolean;
7
8
  verbose?: boolean;
9
+ firstRelease?: boolean;
8
10
  }
9
- export type VersionOptions = NxReleaseArgs & {
11
+ interface GitCommitAndTagOptions {
12
+ stageChanges?: boolean;
13
+ gitCommit?: boolean;
14
+ gitCommitMessage?: string;
15
+ gitCommitArgs?: string;
16
+ gitTag?: boolean;
17
+ gitTagMessage?: string;
18
+ gitTagArgs?: string;
19
+ }
20
+ export type VersionOptions = NxReleaseArgs & GitCommitAndTagOptions & {
10
21
  specifier?: string;
11
22
  preid?: string;
23
+ stageChanges?: boolean;
24
+ generatorOptionsOverrides?: Record<string, unknown>;
12
25
  };
13
- export type ChangelogOptions = NxReleaseArgs & {
14
- version: string;
15
- to: string;
26
+ export type ChangelogOptions = NxReleaseArgs & GitCommitAndTagOptions & {
27
+ version?: string | null;
28
+ versionData?: VersionData;
29
+ to?: string;
16
30
  from?: string;
17
31
  interactive?: string;
18
32
  gitRemote?: string;
19
- tagVersionPrefix?: string;
33
+ createRelease?: false | 'github';
20
34
  };
21
- export type PublishOptions = NxReleaseArgs & RunManyOptions & {
35
+ export type PublishOptions = NxReleaseArgs & Partial<RunManyOptions> & {
36
+ outputStyle?: OutputStyle;
37
+ } & {
22
38
  registry?: string;
23
39
  tag?: string;
40
+ otp?: number;
41
+ };
42
+ export type ReleaseOptions = NxReleaseArgs & {
43
+ yes?: boolean;
44
+ skipPublish?: boolean;
24
45
  };
25
46
  export declare const yargsReleaseCommand: CommandModule<Record<string, unknown>, NxReleaseArgs>;
47
+ export {};
@@ -3,15 +3,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.yargsReleaseCommand = void 0;
4
4
  const yargs_1 = require("yargs");
5
5
  const file_utils_1 = require("../../project-graph/file-utils");
6
+ const logger_1 = require("../../utils/logger");
6
7
  const shared_options_1 = require("../yargs-utils/shared-options");
7
8
  exports.yargsReleaseCommand = {
8
9
  command: 'release',
9
- describe: '**ALPHA**: Orchestrate versioning and publishing of applications and libraries',
10
+ describe: 'Orchestrate versioning and publishing of applications and libraries',
10
11
  builder: (yargs) => yargs
12
+ .command(releaseCommand)
11
13
  .command(versionCommand)
12
14
  .command(changelogCommand)
13
15
  .command(publishCommand)
14
16
  .demandCommand()
17
+ // Error on typos/mistyped CLI args, there is no reason to support arbitrary unknown args for these commands
18
+ .strictOptions()
15
19
  .option('groups', {
16
20
  description: 'One or more release groups to target with the current command.',
17
21
  type: 'string',
@@ -24,7 +28,7 @@ exports.yargsReleaseCommand = {
24
28
  coerce: shared_options_1.parseCSV,
25
29
  describe: 'Projects to run. (comma/space delimited project names and/or patterns)',
26
30
  })
27
- .option('dryRun', {
31
+ .option('dry-run', {
28
32
  describe: 'Preview the changes without updating files/creating releases',
29
33
  alias: 'd',
30
34
  type: 'boolean',
@@ -33,6 +37,10 @@ exports.yargsReleaseCommand = {
33
37
  .option('verbose', {
34
38
  type: 'boolean',
35
39
  describe: 'Prints additional information about the commands (e.g., stack traces)',
40
+ })
41
+ .option('first-release', {
42
+ type: 'boolean',
43
+ description: 'Indicates that this is the first release for the selected release group. If the current version cannot be determined as usual, the version on disk will be used as a fallback. This is useful when using git or the registry to determine the current version of packages, since those sources are only available after the first release. Also indicates that changelog generation should not assume a previous git tag exists and that publishing should not check for the existence of the package before running.',
36
44
  })
37
45
  .check((argv) => {
38
46
  if (argv.groups && argv.projects) {
@@ -47,17 +55,52 @@ exports.yargsReleaseCommand = {
47
55
  }
48
56
  }
49
57
  return true;
50
- }),
58
+ }), // the type: 'string' and coerce: parseCSV combo isn't enough to produce the string[] type for projects and groups
51
59
  handler: async () => {
52
60
  (0, yargs_1.showHelp)();
53
61
  process.exit(1);
54
62
  },
55
63
  };
64
+ const releaseCommand = {
65
+ command: '$0 [specifier]',
66
+ describe: 'Create a version and release for the workspace, generate a changelog, and optionally publish the packages',
67
+ builder: (yargs) => yargs
68
+ .positional('specifier', {
69
+ type: 'string',
70
+ describe: 'Exact version or semver keyword to apply to the selected release group.',
71
+ })
72
+ .option('yes', {
73
+ type: 'boolean',
74
+ alias: 'y',
75
+ description: 'Automatically answer yes to the confirmation prompt for publishing',
76
+ })
77
+ .option('skip-publish', {
78
+ type: 'boolean',
79
+ description: 'Skip publishing by automatically answering no to the confirmation prompt for publishing',
80
+ })
81
+ .check((argv) => {
82
+ if (argv.yes !== undefined && argv.skipPublish !== undefined) {
83
+ throw new Error('The --yes and --skip-publish options are mutually exclusive, please use one or the other.');
84
+ }
85
+ return true;
86
+ }),
87
+ handler: async (args) => {
88
+ const release = await Promise.resolve().then(() => require('./release'));
89
+ const result = await release.releaseCLIHandler(args);
90
+ if (args.dryRun) {
91
+ logger_1.logger.warn(`\nNOTE: The "dryRun" flag means no changes were made.`);
92
+ }
93
+ if (typeof result === 'number') {
94
+ process.exit(result);
95
+ }
96
+ process.exit(0);
97
+ },
98
+ };
56
99
  const versionCommand = {
57
100
  command: 'version [specifier]',
58
101
  aliases: ['v'],
59
102
  describe: 'Create a version and release for one or more applications and libraries',
60
- builder: (yargs) => yargs
103
+ builder: (yargs) => withGitCommitAndGitTagOptions(yargs
61
104
  .positional('specifier', {
62
105
  type: 'string',
63
106
  describe: 'Exact version or semver keyword to apply to the selected release group.',
@@ -66,14 +109,28 @@ const versionCommand = {
66
109
  type: 'string',
67
110
  describe: 'The optional prerelease identifier to apply to the version, in the case that specifier has been set to prerelease.',
68
111
  default: '',
69
- }),
70
- handler: (args) => Promise.resolve().then(() => require('./version')).then((m) => m.versionHandler(args)),
112
+ })
113
+ .option('stage-changes', {
114
+ type: 'boolean',
115
+ describe: 'Whether or not to stage the changes made by this command. Useful when combining this command with changelog generation.',
116
+ })),
117
+ handler: async (args) => {
118
+ const release = await Promise.resolve().then(() => require('./version'));
119
+ const result = await release.releaseVersionCLIHandler(args);
120
+ if (args.dryRun) {
121
+ logger_1.logger.warn(`\nNOTE: The "dryRun" flag means no changes were made.`);
122
+ }
123
+ if (typeof result === 'number') {
124
+ process.exit(result);
125
+ }
126
+ process.exit(0);
127
+ },
71
128
  };
72
129
  const changelogCommand = {
73
130
  command: 'changelog [version]',
74
131
  aliases: ['c'],
75
132
  describe: 'Generate a changelog for one or more projects, and optionally push to Github',
76
- builder: (yargs) => yargs
133
+ builder: (yargs) => withGitCommitAndGitTagOptions(yargs
77
134
  // Disable default meaning of yargs version for this command
78
135
  .version(false)
79
136
  .positional('version', {
@@ -95,26 +152,28 @@ const changelogCommand = {
95
152
  description: 'Interactively modify changelog markdown contents in your code editor before applying the changes. You can set it to be interactive for all changelogs, or only the workspace level, or only the project level',
96
153
  choices: ['all', 'workspace', 'projects'],
97
154
  })
98
- .option('gitRemote', {
155
+ .option('git-remote', {
99
156
  type: 'string',
100
157
  description: 'Alternate git remote in the form {user}/{repo} on which to create the Github release (useful for testing)',
101
158
  default: 'origin',
102
- })
103
- .option('tagVersionPrefix', {
104
- type: 'string',
105
- description: 'Prefix to apply to the version when creating the Github release tag',
106
- default: 'v',
107
159
  })
108
160
  .check((argv) => {
109
161
  if (!argv.version) {
110
- throw new Error('A target version must be specified');
111
- }
112
- if (argv.file === false && argv.createRelease !== 'github') {
113
- throw new Error('The --file option can only be set to false when --create-release is set to github.');
162
+ throw new Error('An explicit target version must be specified when using the changelog command directly');
114
163
  }
115
164
  return true;
116
- }),
117
- handler: (args) => Promise.resolve().then(() => require('./changelog')).then((m) => m.changelogHandler(args)),
165
+ })),
166
+ handler: async (args) => {
167
+ const release = await Promise.resolve().then(() => require('./changelog'));
168
+ const result = await release.releaseChangelogCLIHandler(args);
169
+ if (args.dryRun) {
170
+ logger_1.logger.warn(`\nNOTE: The "dryRun" flag means no changes were made.`);
171
+ }
172
+ if (typeof result === 'number') {
173
+ process.exit(result);
174
+ }
175
+ process.exit(0);
176
+ },
118
177
  };
119
178
  const publishCommand = {
120
179
  command: 'publish',
@@ -128,8 +187,18 @@ const publishCommand = {
128
187
  .option('tag', {
129
188
  type: 'string',
130
189
  description: 'The distribution tag to apply to the published package',
190
+ })
191
+ .option('otp', {
192
+ type: 'number',
193
+ description: 'A one-time password for publishing to a registry that requires 2FA',
131
194
  }),
132
- handler: (args) => Promise.resolve().then(() => require('./publish')).then((m) => m.publishHandler(coerceParallelOption((0, shared_options_1.withOverrides)(args, 2)))),
195
+ handler: async (args) => {
196
+ const status = await (await Promise.resolve().then(() => require('./publish'))).releasePublishCLIHandler(coerceParallelOption((0, shared_options_1.withOverrides)(args, 2)));
197
+ if (args.dryRun) {
198
+ logger_1.logger.warn(`\nNOTE: The "dryRun" flag means no changes were made.`);
199
+ }
200
+ process.exit(status);
201
+ },
133
202
  };
134
203
  function coerceParallelOption(args) {
135
204
  if (args['parallel'] === 'false' || args['parallel'] === false) {
@@ -154,3 +223,34 @@ function coerceParallelOption(args) {
154
223
  }
155
224
  return args;
156
225
  }
226
+ function withGitCommitAndGitTagOptions(yargs) {
227
+ return yargs
228
+ .option('git-commit', {
229
+ describe: 'Whether or not to automatically commit the changes made by this command',
230
+ type: 'boolean',
231
+ })
232
+ .option('git-commit-message', {
233
+ describe: 'Custom git commit message to use when committing the changes made by this command. {version} will be dynamically interpolated when performing fixed releases, interpolated tags will be appended to the commit body when performing independent releases.',
234
+ type: 'string',
235
+ })
236
+ .option('git-commit-args', {
237
+ describe: 'Additional arguments (added after the --message argument, which may or may not be customized with --git-commit-message) to pass to the `git commit` command invoked behind the scenes',
238
+ type: 'string',
239
+ })
240
+ .option('git-tag', {
241
+ describe: 'Whether or not to automatically tag the changes made by this command',
242
+ type: 'boolean',
243
+ })
244
+ .option('git-tag-message', {
245
+ describe: 'Custom git tag message to use when tagging the changes made by this command. This defaults to be the same value as the tag itself.',
246
+ type: 'string',
247
+ })
248
+ .option('git-tag-args', {
249
+ describe: 'Additional arguments to pass to the `git tag` command invoked behind the scenes',
250
+ type: 'string',
251
+ })
252
+ .option('stage-changes', {
253
+ describe: 'Whether or not to stage the changes made by this command. Always treated as true if git-commit is true.',
254
+ type: 'boolean',
255
+ });
256
+ }
@@ -1,18 +1,5 @@
1
- /**
2
- * `nx release` is a powerful feature which spans many possible use cases. The possible variations
3
- * of configuration are therefore quite complex, particularly when you consider release groups.
4
- *
5
- * We want to provide the best possible DX for users so that they can harness the power of `nx release`
6
- * most effectively, therefore we need to both provide sensible defaults for common scenarios (to avoid
7
- * verbose nx.json files wherever possible), and proactively handle potential sources of config issues
8
- * in more complex use-cases.
9
- *
10
- * This file is the source of truth for all `nx release` configuration reconciliation, including sensible
11
- * defaults and user overrides, as well as handling common errors, up front to produce a single, consistent,
12
- * and easy to consume config object for all the `nx release` command implementations.
13
- */
14
1
  import { NxJsonConfiguration } from '../../../config/nx-json';
15
- import { type ProjectGraph } from '../../../devkit-exports';
2
+ import { ProjectFileMap, ProjectGraph } from '../../../config/project-graph';
16
3
  type DeepRequired<T> = Required<{
17
4
  [K in keyof T]: T[K] extends Required<T[K]> ? T[K] : DeepRequired<T[K]>;
18
5
  }>;
@@ -23,7 +10,21 @@ type EnsureProjectsArray<T> = {
23
10
  projects: string[];
24
11
  } : T[K];
25
12
  };
26
- export declare const CATCH_ALL_RELEASE_GROUP = "__default__";
13
+ type RemoveTrueFromType<T> = T extends true ? never : T;
14
+ type RemoveTrueFromProperties<T, K extends keyof T> = {
15
+ [P in keyof T]: P extends K ? RemoveTrueFromType<T[P]> : T[P];
16
+ };
17
+ type RemoveTrueFromPropertiesOnEach<T, K extends keyof T[keyof T]> = {
18
+ [U in keyof T]: RemoveTrueFromProperties<T[U], K>;
19
+ };
20
+ type RemoveBooleanFromType<T> = T extends boolean ? never : T;
21
+ type RemoveBooleanFromProperties<T, K extends keyof T> = {
22
+ [P in keyof T]: P extends K ? RemoveBooleanFromType<T[P]> : T[P];
23
+ };
24
+ type RemoveBooleanFromPropertiesOnEach<T, K extends keyof T[keyof T]> = {
25
+ [U in keyof T]: RemoveBooleanFromProperties<T[U], K>;
26
+ };
27
+ export declare const IMPLICIT_DEFAULT_RELEASE_GROUP = "__default__";
27
28
  /**
28
29
  * Our source of truth is a deeply required variant of the user-facing config interface, so that command
29
30
  * implementations can be sure that properties will exist and do not need to repeat the same checks over
@@ -33,16 +34,20 @@ export declare const CATCH_ALL_RELEASE_GROUP = "__default__";
33
34
  * it easier to work with (the user could be specifying a single string, and they can also use any valid matcher
34
35
  * pattern such as directories and globs).
35
36
  */
36
- export type NxReleaseConfig = DeepRequired<NxJsonConfiguration['release'] & {
37
- groups: DeepRequired<EnsureProjectsArray<NxJsonConfiguration['release']['groups']>>;
38
- }>;
37
+ export type NxReleaseConfig = Omit<DeepRequired<NxJsonConfiguration['release'] & {
38
+ groups: DeepRequired<RemoveTrueFromPropertiesOnEach<EnsureProjectsArray<NxJsonConfiguration['release']['groups']>, 'changelog'>>;
39
+ changelog: RemoveTrueFromProperties<DeepRequired<NxJsonConfiguration['release']['changelog']>, 'workspaceChangelog' | 'projectChangelogs'>;
40
+ conventionalCommits: {
41
+ types: RemoveBooleanFromPropertiesOnEach<DeepRequired<RemoveBooleanFromProperties<DeepRequired<NxJsonConfiguration['release']['conventionalCommits']['types']>, string>>, 'changelog'>;
42
+ };
43
+ }>, 'projects'>;
39
44
  export interface CreateNxReleaseConfigError {
40
- code: 'RELEASE_GROUP_MATCHES_NO_PROJECTS' | 'PROJECT_MATCHES_MULTIPLE_GROUPS' | 'PROJECTS_MISSING_TARGET';
45
+ code: 'PROJECTS_AND_GROUPS_DEFINED' | 'RELEASE_GROUP_MATCHES_NO_PROJECTS' | 'RELEASE_GROUP_RELEASE_TAG_PATTERN_VERSION_PLACEHOLDER_MISSING_OR_EXCESSIVE' | 'PROJECT_MATCHES_MULTIPLE_GROUPS' | 'CONVENTIONAL_COMMITS_SHORTHAND_MIXED_WITH_OVERLAPPING_GENERATOR_OPTIONS' | 'GLOBAL_GIT_CONFIG_MIXED_WITH_GRANULAR_GIT_CONFIG';
41
46
  data: Record<string, string | string[]>;
42
47
  }
43
- export declare function createNxReleaseConfig(projectGraph: ProjectGraph, userConfig?: NxJsonConfiguration['release'], requiredTargetName?: 'nx-release-publish'): Promise<{
48
+ export declare function createNxReleaseConfig(projectGraph: ProjectGraph, projectFileMap: ProjectFileMap, userConfig?: NxJsonConfiguration['release']): Promise<{
44
49
  error: null | CreateNxReleaseConfigError;
45
50
  nxReleaseConfig: NxReleaseConfig | null;
46
51
  }>;
47
- export declare function handleNxReleaseConfigError(error: CreateNxReleaseConfigError): Promise<void>;
52
+ export declare function handleNxReleaseConfigError(error: CreateNxReleaseConfigError): Promise<never>;
48
53
  export {};