nx 23.2.0-beta.0 → 23.2.0-beta.10

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 (374) hide show
  1. package/dist/bin/init-local.js +3 -5
  2. package/dist/bin/nx.js +3 -1
  3. package/dist/release/changelog-renderer/index.js +4 -5
  4. package/dist/release/index.d.ts +1 -1
  5. package/dist/src/adapter/ngcli-adapter.js +60 -1
  6. package/dist/src/ai/set-up-ai-agents/set-up-ai-agents.js +35 -15
  7. package/dist/src/analytics/analytics.d.ts +6 -0
  8. package/dist/src/analytics/analytics.js +16 -10
  9. package/dist/src/analytics/index.d.ts +1 -1
  10. package/dist/src/analytics/index.js +2 -1
  11. package/dist/src/command-line/add/add.js +5 -0
  12. package/dist/src/command-line/affected/affected.js +1 -0
  13. package/dist/src/command-line/completion/command-object.js +7 -12
  14. package/dist/src/command-line/configure-ai-agents/configure-ai-agents.js +19 -25
  15. package/dist/src/command-line/format/format.js +84 -101
  16. package/dist/src/command-line/generate/generate.js +35 -35
  17. package/dist/src/command-line/graph/graph.d.ts +1 -0
  18. package/dist/src/command-line/graph/graph.js +15 -6
  19. package/dist/src/command-line/import/import.js +30 -40
  20. package/dist/src/command-line/init/ai-agent-prompts.d.ts +1 -1
  21. package/dist/src/command-line/init/ai-agent-prompts.js +12 -17
  22. package/dist/src/command-line/init/command-object.js +14 -4
  23. package/dist/src/command-line/init/configure-plugins.js +4 -1
  24. package/dist/src/command-line/init/implementation/add-nx-to-monorepo.js +12 -32
  25. package/dist/src/command-line/init/implementation/add-nx-to-nest.js +17 -21
  26. package/dist/src/command-line/init/implementation/add-nx-to-npm-repo.js +8 -21
  27. package/dist/src/command-line/init/implementation/add-nx-to-turborepo.js +3 -17
  28. package/dist/src/command-line/init/implementation/angular/index.js +10 -15
  29. package/dist/src/command-line/init/implementation/angular/integrated-workspace.js +2 -5
  30. package/dist/src/command-line/init/implementation/angular/legacy-angular-versions.js +5 -0
  31. package/dist/src/command-line/init/implementation/angular/standalone-workspace.js +8 -2
  32. package/dist/src/command-line/init/implementation/check-compatible-with-plugins.js +2 -0
  33. package/dist/src/command-line/init/implementation/dot-nx/add-nx-scripts.js +9 -1
  34. package/dist/src/command-line/init/implementation/format.d.ts +18 -0
  35. package/dist/src/command-line/init/implementation/format.js +114 -0
  36. package/dist/src/command-line/init/implementation/utils.js +8 -0
  37. package/dist/src/command-line/init/init-v1.js +15 -18
  38. package/dist/src/command-line/init/init-v2.js +40 -57
  39. package/dist/src/command-line/migrate/agentic/definitions.js +36 -9
  40. package/dist/src/command-line/migrate/agentic/handoff-gitignore.d.ts +37 -22
  41. package/dist/src/command-line/migrate/agentic/handoff-gitignore.js +30 -39
  42. package/dist/src/command-line/migrate/agentic/handoff.d.ts +7 -7
  43. package/dist/src/command-line/migrate/agentic/handoff.js +13 -10
  44. package/dist/src/command-line/migrate/agentic/print-dropped-agent-context.d.ts +7 -12
  45. package/dist/src/command-line/migrate/agentic/print-dropped-agent-context.js +7 -0
  46. package/dist/src/command-line/migrate/agentic/run-step.d.ts +10 -0
  47. package/dist/src/command-line/migrate/agentic/run-step.js +1 -0
  48. package/dist/src/command-line/migrate/agentic/runner.js +24 -24
  49. package/dist/src/command-line/migrate/agentic/select.d.ts +10 -2
  50. package/dist/src/command-line/migrate/agentic/select.js +30 -32
  51. package/dist/src/command-line/migrate/agentic/types.d.ts +33 -3
  52. package/dist/src/command-line/migrate/agentic/types.js +35 -0
  53. package/dist/src/command-line/migrate/command-object.d.ts +6 -0
  54. package/dist/src/command-line/migrate/command-object.js +19 -1
  55. package/dist/src/command-line/migrate/execute-migration.d.ts +91 -0
  56. package/dist/src/command-line/migrate/execute-migration.js +474 -0
  57. package/dist/src/command-line/migrate/migrate-analytics.d.ts +35 -0
  58. package/dist/src/command-line/migrate/migrate-analytics.js +64 -0
  59. package/dist/src/command-line/migrate/migrate-commits.d.ts +38 -8
  60. package/dist/src/command-line/migrate/migrate-commits.js +130 -15
  61. package/dist/src/command-line/migrate/migrate-config.d.ts +13 -12
  62. package/dist/src/command-line/migrate/migrate-config.js +22 -14
  63. package/dist/src/command-line/migrate/migrate-output.d.ts +45 -7
  64. package/dist/src/command-line/migrate/migrate-output.js +52 -8
  65. package/dist/src/command-line/migrate/migrate-ui-api.d.ts +2 -1
  66. package/dist/src/command-line/migrate/migrate-ui-api.js +33 -19
  67. package/dist/src/command-line/migrate/migrate.d.ts +29 -113
  68. package/dist/src/command-line/migrate/migrate.js +666 -664
  69. package/dist/src/command-line/migrate/migration-shape.d.ts +8 -0
  70. package/dist/src/command-line/migrate/multi-major.js +7 -10
  71. package/dist/src/command-line/migrate/resolve-package-version.js +4 -8
  72. package/dist/src/command-line/migrate/run/agent-output.d.ts +20 -0
  73. package/dist/src/command-line/migrate/run/agent-output.js +65 -0
  74. package/dist/src/command-line/migrate/run/index.d.ts +9 -0
  75. package/dist/src/command-line/migrate/run/index.js +23 -0
  76. package/dist/src/command-line/migrate/run/orchestrator.d.ts +20 -0
  77. package/dist/src/command-line/migrate/run/orchestrator.js +1200 -0
  78. package/dist/src/command-line/migrate/run/run-id.d.ts +16 -0
  79. package/dist/src/command-line/migrate/run/run-id.js +56 -0
  80. package/dist/src/command-line/migrate/run/run-state.d.ts +157 -0
  81. package/dist/src/command-line/migrate/run/run-state.js +438 -0
  82. package/dist/src/command-line/migrate/run/state-lock.d.ts +25 -0
  83. package/dist/src/command-line/migrate/run/state-lock.js +76 -0
  84. package/dist/src/command-line/migrate/run/state-machine.d.ts +84 -0
  85. package/dist/src/command-line/migrate/run/state-machine.js +315 -0
  86. package/dist/src/command-line/migrate/run/util.d.ts +59 -0
  87. package/dist/src/command-line/migrate/run/util.js +148 -0
  88. package/dist/src/command-line/migrate/run/worker.d.ts +16 -0
  89. package/dist/src/command-line/migrate/run/worker.js +682 -0
  90. package/dist/src/command-line/migrate/run-migration-process.js +6 -5
  91. package/dist/src/command-line/migrate/safe-prompt.d.ts +14 -26
  92. package/dist/src/command-line/migrate/safe-prompt.js +32 -43
  93. package/dist/src/command-line/migrate/sort-migrations.d.ts +16 -0
  94. package/dist/src/command-line/migrate/sort-migrations.js +32 -0
  95. package/dist/src/command-line/migrate/step-actions.d.ts +5 -0
  96. package/dist/src/command-line/migrate/step-actions.js +12 -0
  97. package/dist/src/command-line/migrate/text.d.ts +18 -0
  98. package/dist/src/command-line/migrate/text.js +26 -0
  99. package/dist/src/command-line/migrate/version-skew-guard.d.ts +60 -0
  100. package/dist/src/command-line/migrate/version-skew-guard.js +175 -0
  101. package/dist/src/command-line/nx-cloud/connect/connect-to-nx-cloud.js +17 -21
  102. package/dist/src/command-line/nx-cloud/connect/view-logs.js +2 -0
  103. package/dist/src/command-line/nx-cloud/start-nx-agents/command-object.d.ts +2 -0
  104. package/dist/src/command-line/nx-cloud/start-nx-agents/command-object.js +16 -0
  105. package/dist/src/command-line/nx-cloud/start-nx-agents/start-nx-agents.d.ts +4 -0
  106. package/dist/src/command-line/nx-cloud/start-nx-agents/start-nx-agents.js +13 -0
  107. package/dist/src/command-line/nx-commands.js +26 -24
  108. package/dist/src/command-line/release/changelog.js +11 -17
  109. package/dist/src/command-line/release/index.d.ts +1 -1
  110. package/dist/src/command-line/release/plan.js +15 -28
  111. package/dist/src/command-line/release/publish.js +5 -0
  112. package/dist/src/command-line/release/release.js +6 -17
  113. package/dist/src/command-line/release/utils/git.js +1 -1
  114. package/dist/src/command-line/release/utils/release-graph.d.ts +20 -2
  115. package/dist/src/command-line/release/utils/release-graph.js +81 -21
  116. package/dist/src/command-line/release/utils/remote-release-clients/github.js +17 -23
  117. package/dist/src/command-line/release/utils/remote-release-clients/gitlab.js +14 -23
  118. package/dist/src/command-line/release/utils/resolve-semver-specifier.js +19 -41
  119. package/dist/src/command-line/release/utils/shared.d.ts +2 -2
  120. package/dist/src/command-line/release/version/release-group-processor.d.ts +24 -0
  121. package/dist/src/command-line/release/version/release-group-processor.js +80 -6
  122. package/dist/src/command-line/release/version/resolve-current-version.js +7 -10
  123. package/dist/src/command-line/release/version/version-actions.d.ts +27 -2
  124. package/dist/src/command-line/release/version/version-actions.js +9 -1
  125. package/dist/src/command-line/release/version.js +10 -6
  126. package/dist/src/command-line/reset/reset.js +6 -1
  127. package/dist/src/command-line/run/run-one.js +1 -0
  128. package/dist/src/command-line/run-many/run-many.js +1 -0
  129. package/dist/src/command-line/show/show-target/inputs.js +50 -153
  130. package/dist/src/command-line/show/show-target/outputs.js +48 -173
  131. package/dist/src/command-line/show/show-target/utils.d.ts +28 -0
  132. package/dist/src/command-line/show/show-target/utils.js +83 -3
  133. package/dist/src/command-line/watch/watch.js +13 -0
  134. package/dist/src/command-line/yargs-utils/shared-options.d.ts +2 -2
  135. package/dist/src/command-line/yargs-utils/shared-options.js +3 -1
  136. package/dist/src/commands-runner/create-command-graph.js +5 -0
  137. package/dist/src/config/misc-interfaces.d.ts +19 -7
  138. package/dist/src/config/nx-json.d.ts +5 -3
  139. package/dist/src/core/graph/main.js +1 -1
  140. package/dist/src/core/graph/styles.js +1 -1
  141. package/dist/src/daemon/client/client.d.ts +52 -1
  142. package/dist/src/daemon/client/client.js +160 -36
  143. package/dist/src/daemon/client/daemon-environment.d.ts +17 -0
  144. package/dist/src/daemon/client/daemon-environment.js +110 -2
  145. package/dist/src/daemon/client/daemon-socket-messenger.js +4 -0
  146. package/dist/src/daemon/message-types/daemon-message.d.ts +32 -0
  147. package/dist/src/daemon/message-types/daemon-message.js +25 -0
  148. package/dist/src/daemon/server/file-watching/file-watcher-sockets.d.ts +5 -0
  149. package/dist/src/daemon/server/file-watching/file-watcher-sockets.js +16 -0
  150. package/dist/src/daemon/server/handle-tasks-execution-hooks.d.ts +1 -1
  151. package/dist/src/daemon/server/latest-nx.js +5 -2
  152. package/dist/src/daemon/server/server.js +31 -4
  153. package/dist/src/daemon/server/shutdown-utils.d.ts +5 -0
  154. package/dist/src/daemon/server/shutdown-utils.js +11 -4
  155. package/dist/src/daemon/socket-utils.d.ts +1 -0
  156. package/dist/src/daemon/socket-utils.js +24 -3
  157. package/dist/src/daemon/tmp-dir.d.ts +43 -3
  158. package/dist/src/daemon/tmp-dir.js +437 -15
  159. package/dist/src/devkit-internals.d.ts +105 -8
  160. package/dist/src/devkit-internals.js +223 -7
  161. package/dist/src/executors/run-commands/running-tasks.js +46 -29
  162. package/dist/src/generators/internal-utils/format-changed-files.d.ts +24 -0
  163. package/dist/src/generators/internal-utils/format-changed-files.js +163 -0
  164. package/dist/src/generators/testing-utils/create-tree-with-empty-workspace.d.ts +15 -0
  165. package/dist/src/generators/testing-utils/create-tree-with-empty-workspace.js +21 -3
  166. package/dist/src/generators/tree.d.ts +4 -2
  167. package/dist/src/generators/utils/nx-json.js +13 -3
  168. package/dist/src/hasher/check-task-files.d.ts +86 -0
  169. package/dist/src/hasher/check-task-files.js +378 -0
  170. package/dist/src/migrations/update-15-0-0/prefix-outputs.js +2 -2
  171. package/dist/src/migrations/update-16-0-0/remove-nrwl-cli.js +2 -2
  172. package/dist/src/migrations/update-16-0-0/update-depends-on-to-tokens.js +2 -2
  173. package/dist/src/migrations/update-16-0-0/update-nx-cloud-runner.js +2 -2
  174. package/dist/src/migrations/update-16-2-0/remove-run-commands-output-path.js +2 -2
  175. package/dist/src/migrations/update-17-0-0/rm-default-collection-npm-scope.js +2 -2
  176. package/dist/src/migrations/update-17-0-0/use-minimal-config-for-tasks-runner-options.js +2 -2
  177. package/dist/src/migrations/update-17-2-0/move-default-base.js +2 -2
  178. package/dist/src/migrations/update-18-0-0/disable-crystal-for-existing-workspaces.js +2 -2
  179. package/dist/src/migrations/update-19-2-4/set-project-name.js +2 -2
  180. package/dist/src/migrations/update-20-0-0/move-use-daemon-process.js +2 -2
  181. package/dist/src/migrations/update-20-0-1/use-legacy-cache.js +2 -2
  182. package/dist/src/migrations/update-21-0-0/release-changelog-config-changes.js +2 -2
  183. package/dist/src/migrations/update-21-0-0/release-version-config-changes.js +2 -2
  184. package/dist/src/migrations/update-21-0-0/remove-custom-tasks-runner.js +2 -2
  185. package/dist/src/migrations/update-21-0-0/remove-legacy-cache.js +2 -2
  186. package/dist/src/migrations/update-22-0-0/consolidate-release-tag-config.js +2 -2
  187. package/dist/src/migrations/update-22-0-0/release-version-config-changes.js +2 -2
  188. package/dist/src/migrations/update-22-2-0/add-self-healing-to-gitignore.js +2 -2
  189. package/dist/src/migrations/update-22-6-0/add-claude-settings-local-to-git-ignore.js +2 -2
  190. package/dist/src/migrations/update-22-6-0/add-claude-worktrees-to-git-ignore.js +2 -2
  191. package/dist/src/migrations/update-22-7-0/add-polygraph-to-git-ignore.js +2 -2
  192. package/dist/src/migrations/update-23-0-0/add-migrate-runs-to-git-ignore.js +2 -2
  193. package/dist/src/migrations/update-23-2-0/set-cache-on-executor-target-defaults.d.ts +12 -0
  194. package/dist/src/migrations/update-23-2-0/set-cache-on-executor-target-defaults.js +250 -0
  195. package/dist/src/migrations/update-23-2-0/set-cache-on-executor-target-defaults.md +50 -0
  196. package/dist/src/native/index.d.ts +37 -4
  197. package/dist/src/native/index.js +71 -28
  198. package/dist/src/native/native-bindings.js +3 -0
  199. package/dist/src/native/native-file-cache-location.d.ts +17 -1
  200. package/dist/src/native/native-file-cache-location.js +86 -12
  201. package/dist/src/native/nx.wasm32-wasi.debug.wasm +0 -0
  202. package/dist/src/native/nx.wasm32-wasi.wasm +0 -0
  203. package/dist/src/nx-cloud/generators/connect-to-nx-cloud/connect-to-nx-cloud.js +3 -3
  204. package/dist/src/nx-cloud/utilities/get-cloud-options.js +5 -2
  205. package/dist/src/nx-cloud/utilities/onboarding.js +5 -2
  206. package/dist/src/nx-cloud/utilities/url-shorten.d.ts +1 -4
  207. package/dist/src/nx-cloud/utilities/url-shorten.js +9 -8
  208. package/dist/src/plugins/js/lock-file/bun-parser.js +43 -10
  209. package/dist/src/plugins/js/lock-file/lock-file.d.ts +46 -4
  210. package/dist/src/plugins/js/lock-file/lock-file.js +192 -15
  211. package/dist/src/plugins/js/lock-file/pnpm-parser.js +420 -64
  212. package/dist/src/plugins/js/lock-file/project-graph-pruning.d.ts +25 -1
  213. package/dist/src/plugins/js/lock-file/project-graph-pruning.js +92 -12
  214. package/dist/src/plugins/js/lock-file/pruned-output.d.ts +330 -0
  215. package/dist/src/plugins/js/lock-file/pruned-output.js +1441 -0
  216. package/dist/src/plugins/js/lock-file/utils/pnpm-normalizer.d.ts +1 -0
  217. package/dist/src/plugins/js/lock-file/utils/pnpm-normalizer.js +9 -5
  218. package/dist/src/plugins/js/project-graph/affected/npm-packages.js +51 -20
  219. package/dist/src/plugins/js/project-graph/build-dependencies/target-project-locator.js +14 -4
  220. package/dist/src/project-graph/affected/affected-project-graph-models.d.ts +1 -1
  221. package/dist/src/project-graph/affected/affected-project-graph.d.ts +1 -1
  222. package/dist/src/project-graph/affected/affected-project-graph.js +2 -2
  223. package/dist/src/project-graph/affected/locators/project-glob-changes.js +5 -2
  224. package/dist/src/project-graph/build-project-graph.js +7 -1
  225. package/dist/src/project-graph/error-types.d.ts +12 -1
  226. package/dist/src/project-graph/error-types.js +27 -2
  227. package/dist/src/project-graph/file-utils.js +6 -1
  228. package/dist/src/project-graph/plugins/isolation/isolated-plugin.d.ts +1 -0
  229. package/dist/src/project-graph/plugins/isolation/isolated-plugin.js +18 -1
  230. package/dist/src/project-graph/plugins/isolation/messaging.d.ts +16 -3
  231. package/dist/src/project-graph/plugins/isolation/messaging.js +3 -0
  232. package/dist/src/project-graph/plugins/isolation/plugin-worker.js +58 -8
  233. package/dist/src/project-graph/plugins/loaded-nx-plugin.js +1 -0
  234. package/dist/src/project-graph/project-graph.js +23 -0
  235. package/dist/src/project-graph/utils/project-configuration/name-substitution-manager.d.ts +1 -0
  236. package/dist/src/project-graph/utils/project-configuration/name-substitution-manager.js +16 -2
  237. package/dist/src/project-graph/utils/project-configuration/project-nodes-manager.d.ts +12 -8
  238. package/dist/src/project-graph/utils/project-configuration/project-nodes-manager.js +30 -21
  239. package/dist/src/project-graph/utils/project-configuration/source-maps.d.ts +12 -5
  240. package/dist/src/project-graph/utils/project-configuration/source-maps.js +21 -7
  241. package/dist/src/project-graph/utils/project-configuration/target-defaults.d.ts +1 -1
  242. package/dist/src/project-graph/utils/project-configuration/target-defaults.js +26 -27
  243. package/dist/src/project-graph/utils/project-configuration/target-merging.js +50 -8
  244. package/dist/src/project-graph/utils/project-configuration/target-normalization.js +149 -6
  245. package/dist/src/project-graph/utils/project-configuration/utils.d.ts +15 -0
  246. package/dist/src/project-graph/utils/project-configuration/utils.js +42 -6
  247. package/dist/src/project-graph/utils/project-configuration-utils.d.ts +15 -12
  248. package/dist/src/project-graph/utils/project-configuration-utils.js +79 -99
  249. package/dist/src/tasks-runner/is-tui-enabled.js +3 -1
  250. package/dist/src/tasks-runner/life-cycle.d.ts +2 -2
  251. package/dist/src/tasks-runner/life-cycle.js +2 -2
  252. package/dist/src/tasks-runner/life-cycles/performance-analysis.d.ts +9 -4
  253. package/dist/src/tasks-runner/life-cycles/performance-life-cycle.js +5 -4
  254. package/dist/src/tasks-runner/life-cycles/performance-report.d.ts +28 -8
  255. package/dist/src/tasks-runner/life-cycles/performance-report.js +117 -30
  256. package/dist/src/tasks-runner/life-cycles/static-run-many-terminal-output-life-cycle.d.ts +26 -1
  257. package/dist/src/tasks-runner/life-cycles/static-run-many-terminal-output-life-cycle.js +99 -5
  258. package/dist/src/tasks-runner/life-cycles/static-run-one-terminal-output-life-cycle.d.ts +26 -0
  259. package/dist/src/tasks-runner/life-cycles/static-run-one-terminal-output-life-cycle.js +113 -17
  260. package/dist/src/tasks-runner/pseudo-terminal.d.ts +17 -3
  261. package/dist/src/tasks-runner/pseudo-terminal.js +22 -10
  262. package/dist/src/tasks-runner/run-command.js +28 -35
  263. package/dist/src/tasks-runner/running-tasks/batch-process.d.ts +55 -0
  264. package/dist/src/tasks-runner/running-tasks/batch-process.js +161 -8
  265. package/dist/src/tasks-runner/task-env.d.ts +9 -0
  266. package/dist/src/tasks-runner/task-env.js +31 -4
  267. package/dist/src/tasks-runner/task-orchestrator.d.ts +72 -1
  268. package/dist/src/tasks-runner/task-orchestrator.js +182 -18
  269. package/dist/src/tasks-runner/utils.js +2 -6
  270. package/dist/src/utils/acknowledge-build-scripts.js +7 -5
  271. package/dist/src/utils/analytics-enabled.d.ts +7 -0
  272. package/dist/src/utils/analytics-enabled.js +11 -0
  273. package/dist/src/utils/analytics-prompt.d.ts +0 -6
  274. package/dist/src/utils/analytics-prompt.js +4 -58
  275. package/dist/src/utils/assert-workspace-validity.js +7 -2
  276. package/dist/src/utils/catalog/bun-manager-utils.d.ts +8 -0
  277. package/dist/src/utils/catalog/bun-manager-utils.js +174 -0
  278. package/dist/src/utils/catalog/bun-manager.d.ts +28 -0
  279. package/dist/src/utils/catalog/bun-manager.js +130 -0
  280. package/dist/src/utils/catalog/index.d.ts +1 -1
  281. package/dist/src/utils/catalog/index.js +1 -1
  282. package/dist/src/utils/catalog/manager-factory.js +3 -0
  283. package/dist/src/utils/catalog/manager-utils.d.ts +8 -1
  284. package/dist/src/utils/catalog/manager-utils.js +9 -4
  285. package/dist/src/utils/catalog/manager.d.ts +13 -1
  286. package/dist/src/utils/catalog/manager.js +30 -0
  287. package/dist/src/utils/catalog/pnpm-manager.d.ts +2 -1
  288. package/dist/src/utils/catalog/pnpm-manager.js +3 -0
  289. package/dist/src/utils/catalog/types.d.ts +4 -0
  290. package/dist/src/utils/catalog/yarn-manager.d.ts +6 -2
  291. package/dist/src/utils/catalog/yarn-manager.js +23 -32
  292. package/dist/src/utils/child-process.d.ts +31 -1
  293. package/dist/src/utils/child-process.js +103 -0
  294. package/dist/src/utils/chunkify.d.ts +7 -1
  295. package/dist/src/utils/chunkify.js +10 -3
  296. package/dist/src/utils/command-line-utils.js +30 -20
  297. package/dist/src/utils/exit-codes.d.ts +9 -0
  298. package/dist/src/utils/exit-codes.js +19 -0
  299. package/dist/src/utils/fileutils.d.ts +5 -0
  300. package/dist/src/utils/fileutils.js +7 -2
  301. package/dist/src/utils/formatters/index.d.ts +13 -0
  302. package/dist/src/utils/formatters/index.js +74 -0
  303. package/dist/src/utils/formatters/oxfmt.d.ts +32 -0
  304. package/dist/src/utils/formatters/oxfmt.js +764 -0
  305. package/dist/src/utils/formatters/prettier.d.ts +26 -0
  306. package/dist/src/utils/formatters/prettier.js +201 -0
  307. package/dist/src/utils/formatters/shared.d.ts +5 -0
  308. package/dist/src/utils/formatters/shared.js +8 -0
  309. package/dist/src/utils/git-revision.d.ts +12 -0
  310. package/dist/src/utils/git-revision.js +25 -0
  311. package/dist/src/utils/git-utils.d.ts +48 -2
  312. package/dist/src/utils/git-utils.js +220 -14
  313. package/dist/src/utils/git-worktrees.d.ts +30 -0
  314. package/dist/src/utils/git-worktrees.js +212 -0
  315. package/dist/src/utils/ignore.d.ts +170 -1
  316. package/dist/src/utils/ignore.js +263 -11
  317. package/dist/src/utils/long-running-target.d.ts +10 -0
  318. package/dist/src/utils/long-running-target.js +19 -0
  319. package/dist/src/utils/min-release-age/behavior/bun.js +7 -11
  320. package/dist/src/utils/min-release-age/behavior/npm.js +5 -2
  321. package/dist/src/utils/min-release-age/packument.js +1 -1
  322. package/dist/src/utils/nx-console-prompt.js +3 -6
  323. package/dist/src/utils/nx-tmp-dir.d.ts +18 -0
  324. package/dist/src/utils/nx-tmp-dir.js +40 -0
  325. package/dist/src/utils/output.d.ts +153 -0
  326. package/dist/src/utils/output.js +289 -5
  327. package/dist/src/utils/owned-private-dir.d.ts +132 -0
  328. package/dist/src/utils/owned-private-dir.js +323 -0
  329. package/dist/src/utils/package-json.d.ts +2 -0
  330. package/dist/src/utils/package-json.js +11 -7
  331. package/dist/src/utils/package-manager-config/bunfig.d.ts +14 -0
  332. package/dist/src/utils/package-manager-config/bunfig.js +49 -0
  333. package/dist/src/utils/package-manager-config/npmrc.d.ts +23 -0
  334. package/dist/src/utils/package-manager-config/npmrc.js +124 -0
  335. package/dist/src/utils/package-manager-config/pnpm-config.d.ts +17 -0
  336. package/dist/src/utils/package-manager-config/pnpm-config.js +60 -0
  337. package/dist/src/utils/package-manager.d.ts +23 -2
  338. package/dist/src/utils/package-manager.js +268 -44
  339. package/dist/src/utils/params.d.ts +7 -1
  340. package/dist/src/utils/params.js +64 -6
  341. package/dist/src/utils/plugins/core-plugins.js +4 -0
  342. package/dist/src/utils/prompt-helpers.d.ts +53 -0
  343. package/dist/src/utils/prompt-helpers.js +111 -0
  344. package/dist/src/utils/provenance.js +6 -14
  345. package/dist/src/utils/registry-config/bun.d.ts +2 -0
  346. package/dist/src/utils/registry-config/bun.js +257 -0
  347. package/dist/src/utils/registry-config/index.d.ts +13 -0
  348. package/dist/src/utils/registry-config/index.js +102 -0
  349. package/dist/src/utils/registry-config/pnpm.d.ts +2 -0
  350. package/dist/src/utils/registry-config/pnpm.js +1551 -0
  351. package/dist/src/utils/registry-config/utils.d.ts +195 -0
  352. package/dist/src/utils/registry-config/utils.js +496 -0
  353. package/dist/src/utils/registry-config/yarn-berry.d.ts +2 -0
  354. package/dist/src/utils/registry-config/yarn-berry.js +612 -0
  355. package/dist/src/utils/registry-config/yarn-classic.d.ts +2 -0
  356. package/dist/src/utils/registry-config/yarn-classic.js +1001 -0
  357. package/dist/src/utils/safe-spawn.d.ts +24 -0
  358. package/dist/src/utils/safe-spawn.js +104 -0
  359. package/dist/src/utils/shell-quoting.d.ts +15 -0
  360. package/dist/src/utils/shell-quoting.js +35 -0
  361. package/dist/src/utils/wait-for-socket-connection.d.ts +11 -0
  362. package/dist/src/utils/wait-for-socket-connection.js +14 -8
  363. package/dist/src/utils/workspace-id.d.ts +20 -0
  364. package/dist/src/utils/workspace-id.js +54 -0
  365. package/dist/src/utils/write-formatted-json-file.d.ts +3 -2
  366. package/dist/src/utils/write-formatted-json-file.js +5 -4
  367. package/migrations.json +6 -0
  368. package/package.json +29 -19
  369. package/dist/src/generators/internal-utils/format-changed-files-with-prettier-if-available.d.ts +0 -19
  370. package/dist/src/generators/internal-utils/format-changed-files-with-prettier-if-available.js +0 -81
  371. package/dist/src/utils/is-using-prettier.d.ts +0 -3
  372. package/dist/src/utils/is-using-prettier.js +0 -62
  373. package/dist/src/utils/min-release-age/npmrc.d.ts +0 -15
  374. package/dist/src/utils/min-release-age/npmrc.js +0 -45
@@ -1,35 +1,30 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.determineAiAgents = determineAiAgents;
4
- const tslib_1 = require("tslib");
5
- const enquirer_1 = require("enquirer");
4
+ const prompt_helpers_1 = require("../../utils/prompt-helpers");
6
5
  const is_ci_1 = require("../../utils/is-ci");
7
6
  const utils_1 = require("../../ai/utils");
8
7
  const detect_ai_agent_1 = require("../../ai/detect-ai-agent");
9
- const pc = tslib_1.__importStar(require("picocolors"));
10
8
  async function determineAiAgents(aiAgents, interactive) {
11
- if (interactive === false || (0, is_ci_1.isCI)()) {
12
- if (aiAgents) {
13
- return aiAgents;
9
+ if (aiAgents) {
10
+ const filtered = aiAgents.filter((a) => a !== 'none');
11
+ if (filtered.length > 0) {
12
+ return filtered;
14
13
  }
14
+ return [];
15
+ }
16
+ if (interactive === false || (0, is_ci_1.isCI)()) {
15
17
  const detected = (0, detect_ai_agent_1.detectAiAgent)();
16
18
  return detected ? [detected] : [];
17
19
  }
18
- if (aiAgents) {
19
- return aiAgents;
20
- }
21
20
  return await aiAgentsPrompt();
22
21
  }
23
22
  async function aiAgentsPrompt() {
24
- const promptConfig = {
25
- name: 'agents',
23
+ return (0, prompt_helpers_1.multiselectPrompt)({
26
24
  message: 'Which AI agents, if any, would you like to set up?',
27
- type: 'multiselect',
28
25
  choices: utils_1.supportedAgents.map((a) => ({
29
- name: a,
30
- message: utils_1.agentDisplayMap[a],
26
+ value: a,
27
+ label: utils_1.agentDisplayMap[a],
31
28
  })),
32
- footer: () => pc.dim('Multiple selections possible. <Space> to select. <Enter> to confirm.'),
33
- };
34
- return (await (0, enquirer_1.prompt)([promptConfig])).agents;
29
+ });
35
30
  }
@@ -17,8 +17,10 @@ exports.yargsInitCommand = {
17
17
  return withInitOptions(yargs);
18
18
  },
19
19
  handler: async (args) => {
20
- // Node 24 has stricter readline behavior, and enquirer is not checking for closed state
21
- // when invoking operations, thus you get an ERR_USE_AFTER_CLOSE error.
20
+ // Node 24's stricter readline throws ERR_USE_AFTER_CLOSE when a prompt
21
+ // library operates on a closed interface. Added for enquirer, which nx no
22
+ // longer uses; verify against Node 24 before removing.
23
+ // TODO(v24): drop if @clack/prompts proves not to need it.
22
24
  process.on('uncaughtException', (error) => {
23
25
  if (error &&
24
26
  typeof error === 'object' &&
@@ -64,8 +66,16 @@ async function withInitOptions(yargs) {
64
66
  .option('aiAgents', {
65
67
  type: 'array',
66
68
  string: true,
67
- description: 'List of AI agents to set up.',
68
- choices: ['claude', 'codex', 'copilot', 'cursor', 'gemini', 'opencode'],
69
+ description: 'List of AI agents to set up. Use "none" to skip.',
70
+ choices: [
71
+ 'claude',
72
+ 'codex',
73
+ 'copilot',
74
+ 'cursor',
75
+ 'gemini',
76
+ 'opencode',
77
+ 'none',
78
+ ],
69
79
  })
70
80
  .option('plugins', {
71
81
  type: 'string',
@@ -19,6 +19,7 @@ const configuration_1 = require("../../config/configuration");
19
19
  const versions_1 = require("../../utils/versions");
20
20
  const child_process_1 = require("../../utils/child-process");
21
21
  const fileutils_1 = require("../../utils/fileutils");
22
+ const format_1 = require("./implementation/format");
22
23
  const spinner_1 = require("../../utils/spinner");
23
24
  function installPluginPackages(repoRoot, pmc = (0, package_manager_1.getPackageManagerCommand)(), plugins) {
24
25
  if (plugins.length === 0) {
@@ -35,7 +36,9 @@ function installPluginPackages(repoRoot, pmc = (0, package_manager_1.getPackageM
35
36
  for (const plugin of plugins) {
36
37
  nxJson.installation.plugins[plugin] = versions_1.nxVersion;
37
38
  }
38
- (0, fileutils_1.writeJsonFile)((0, path_1.join)(repoRoot, 'nx.json'), nxJson);
39
+ const nxJsonPath = (0, path_1.join)(repoRoot, 'nx.json');
40
+ (0, fileutils_1.writeJsonFile)(nxJsonPath, nxJson);
41
+ (0, format_1.recordInitWrite)(nxJsonPath);
39
42
  try {
40
43
  (0, child_process_1.runNxSync)('--version', { stdio: 'pipe' });
41
44
  }
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.addNxToMonorepo = addNxToMonorepo;
4
- const enquirer_1 = require("enquirer");
4
+ const prompt_helpers_1 = require("../../../utils/prompt-helpers");
5
5
  const fs_1 = require("fs");
6
6
  const ignore = require("ignore");
7
7
  const path_1 = require("path");
@@ -23,38 +23,18 @@ async function addNxToMonorepo(options, guided = true) {
23
23
  output_1.output.log({
24
24
  title: '🧑‍🔧 Please answer the following questions about the scripts found in your workspace in order to generate task runner configuration',
25
25
  });
26
- targetDefaults = (await (0, enquirer_1.prompt)([
27
- {
28
- type: 'multiselect',
29
- name: 'targetDefaults',
30
- message: 'Which scripts need to be run in order? (e.g. before building a project, dependent projects must be built)',
31
- choices: scripts,
32
- /**
33
- * limit is missing from the interface but it limits the amount of options shown
34
- */
35
- limit: process.stdout.rows - 4, // 4 leaves room for the header above, the prompt and some whitespace
36
- },
37
- ])).targetDefaults;
38
- cacheableOperations = (await (0, enquirer_1.prompt)([
39
- {
40
- type: 'multiselect',
41
- name: 'cacheableOperations',
42
- message: 'Which scripts are cacheable? (Produce the same output given the same input, e.g. build, test and lint usually are, serve and start are not)',
43
- choices: scripts,
44
- /**
45
- * limit is missing from the interface but it limits the amount of options shown
46
- */
47
- limit: process.stdout.rows - 4, // 4 leaves room for the header above, the prompt and some whitespace
48
- },
49
- ])).cacheableOperations;
26
+ targetDefaults = await (0, prompt_helpers_1.multiselectPrompt)({
27
+ message: 'Which scripts need to be run in order? (e.g. before building a project, dependent projects must be built)',
28
+ choices: scripts,
29
+ });
30
+ cacheableOperations = await (0, prompt_helpers_1.multiselectPrompt)({
31
+ message: 'Which scripts are cacheable? (Produce the same output given the same input, e.g. build, test and lint usually are, serve and start are not)',
32
+ choices: scripts,
33
+ });
50
34
  for (const scriptName of cacheableOperations) {
51
- scriptOutputs[scriptName] = (await (0, enquirer_1.prompt)([
52
- {
53
- type: 'input',
54
- name: scriptName,
55
- message: `Does the "${scriptName}" script create any outputs? If not, leave blank, otherwise provide a path relative to a project root (e.g. dist, lib, build, coverage)`,
56
- },
57
- ]))[scriptName];
35
+ scriptOutputs[scriptName] = await (0, prompt_helpers_1.textPrompt)({
36
+ message: `Does the "${scriptName}" script create any outputs? If not, leave blank, otherwise provide a path relative to a project root (e.g. dist, lib, build, coverage)`,
37
+ });
58
38
  }
59
39
  nxCloudChoice =
60
40
  options.nxCloud === true
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.addNxToNest = addNxToNest;
4
- const tslib_1 = require("tslib");
5
- const enquirer = tslib_1.__importStar(require("enquirer"));
4
+ const prompt_helpers_1 = require("../../../utils/prompt-helpers");
6
5
  const node_fs_1 = require("node:fs");
7
6
  const path_1 = require("path");
7
+ const format_1 = require("./format");
8
8
  const fileutils_1 = require("../../../utils/fileutils");
9
9
  const output_1 = require("../../../utils/output");
10
10
  const package_manager_1 = require("../../../utils/package-manager");
@@ -46,26 +46,14 @@ async function addNxToNest(options, packageJson) {
46
46
  output_1.output.log({
47
47
  title: '🧑‍🔧 Please answer the following questions about the scripts found in your package.json in order to generate task runner configuration',
48
48
  });
49
- cacheableOperations = (await enquirer.prompt([
50
- {
51
- type: 'multiselect',
52
- name: 'cacheableOperations',
53
- message: 'Which of the following scripts are cacheable? (Produce the same output given the same input, e.g. build, test and lint usually are, serve and start are not)',
54
- choices: scripts,
55
- /**
56
- * limit is missing from the interface but it limits the amount of options shown
57
- */
58
- limit: process.stdout.rows - 4, // 4 leaves room for the header above, the prompt and some whitespace
59
- },
60
- ])).cacheableOperations;
49
+ cacheableOperations = await (0, prompt_helpers_1.multiselectPrompt)({
50
+ message: 'Which of the following scripts are cacheable? (Produce the same output given the same input, e.g. build, test and lint usually are, serve and start are not)',
51
+ choices: scripts,
52
+ });
61
53
  for (const scriptName of cacheableOperations) {
62
- scriptOutputs[scriptName] = (await enquirer.prompt([
63
- {
64
- type: 'input',
65
- name: scriptName,
66
- message: `Does the "${scriptName}" script create any outputs? If not, leave blank, otherwise provide a path (e.g. dist, lib, build, coverage)`,
67
- },
68
- ]))[scriptName];
54
+ scriptOutputs[scriptName] = await (0, prompt_helpers_1.textPrompt)({
55
+ message: `Does the "${scriptName}" script create any outputs? If not, leave blank, otherwise provide a path (e.g. dist, lib, build, coverage)`,
56
+ });
69
57
  }
70
58
  nxCloudChoice =
71
59
  options.nxCloud === true
@@ -114,6 +102,7 @@ function addNestPluginToPackageJson(repoRoot) {
114
102
  json.devDependencies['@nx/nest'] = versions_1.nxVersion;
115
103
  json.devDependencies['@nx/jest'] = versions_1.nxVersion;
116
104
  (0, fileutils_1.writeJsonFile)(path, json);
105
+ (0, format_1.recordInitWrite)(path);
117
106
  }
118
107
  function createProjectJson(repoRoot, packageJson, nestCLIOptions) {
119
108
  const packageName = packageJson.name;
@@ -194,6 +183,7 @@ function createProjectJson(repoRoot, packageJson, nestCLIOptions) {
194
183
  addJestTargets(repoRoot, packageName, json, packageJson);
195
184
  }
196
185
  (0, fileutils_1.writeJsonFile)(path, json);
186
+ (0, format_1.recordInitWrite)(path);
197
187
  }
198
188
  function getJestOptions(isE2E, repoRoot, packageName, existingOptions) {
199
189
  // try get the e2e json if we find it
@@ -230,6 +220,7 @@ function tryCreateJestPreset(repoRoot) {
230
220
  const nxPreset = require('@nx/jest/preset').default;
231
221
  module.exports = {...nxPreset};
232
222
  `, 'utf8');
223
+ (0, format_1.recordInitWrite)(jestPresetPath);
233
224
  return true;
234
225
  }
235
226
  return false;
@@ -244,7 +235,9 @@ function addJestTargets(repoRoot, packageName, projectJson, packageJson) {
244
235
  unitTestOptions['preset'] = e2eTestOptions['preset'] = './jest.preset.js';
245
236
  }
246
237
  (0, node_fs_1.writeFileSync)(unitTestConfigPath, `export default ${JSON.stringify(unitTestOptions, null, 2)}`, 'utf8');
238
+ (0, format_1.recordInitWrite)(unitTestConfigPath);
247
239
  (0, node_fs_1.writeFileSync)(e2eTestConfigPath, `export default ${JSON.stringify(e2eTestOptions, null, 2)}`, 'utf8');
240
+ (0, format_1.recordInitWrite)(e2eTestConfigPath);
248
241
  projectJson.targets['test'] = {
249
242
  executor: '@nx/jest:jest',
250
243
  outputs: [`{workspaceRoot}/coverage/${packageName}`],
@@ -274,6 +267,7 @@ function addNrwlJsPluginsConfig(repoRoot) {
274
267
  };
275
268
  }
276
269
  (0, fileutils_1.writeJsonFile)(path, json);
270
+ (0, format_1.recordInitWrite)(path);
277
271
  }
278
272
  function updatePackageJsonScripts(repoRoot, isJS) {
279
273
  const path = (0, path_1.join)(repoRoot, `package.json`);
@@ -310,6 +304,7 @@ function updatePackageJsonScripts(repoRoot, isJS) {
310
304
  }
311
305
  }
312
306
  (0, fileutils_1.writeJsonFile)(path, json);
307
+ (0, format_1.recordInitWrite)(path);
313
308
  }
314
309
  function updateTsConfig(repoRoot, sourceRoot) {
315
310
  const path = (0, path_1.join)(repoRoot, `tsconfig.build.json`);
@@ -321,6 +316,7 @@ function updateTsConfig(repoRoot, sourceRoot) {
321
316
  json.include = [];
322
317
  json.include.push(`${sourceRoot}/**/*.ts`);
323
318
  (0, fileutils_1.writeJsonFile)(path, json);
319
+ (0, format_1.recordInitWrite)(path);
324
320
  }
325
321
  function removeFile(repoRoot, file) {
326
322
  const path = (0, path_1.join)(repoRoot, file);
@@ -1,8 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.addNxToNpmRepo = addNxToNpmRepo;
4
- const tslib_1 = require("tslib");
5
- const enquirer = tslib_1.__importStar(require("enquirer"));
4
+ const prompt_helpers_1 = require("../../../utils/prompt-helpers");
6
5
  const path_1 = require("path");
7
6
  const fileutils_1 = require("../../../utils/fileutils");
8
7
  const output_1 = require("../../../utils/output");
@@ -21,26 +20,14 @@ async function addNxToNpmRepo(options, guided = true) {
21
20
  output_1.output.log({
22
21
  title: '🧑‍🔧 Please answer the following questions about the scripts found in your package.json in order to generate task runner configuration',
23
22
  });
24
- cacheableOperations = (await enquirer.prompt([
25
- {
26
- type: 'multiselect',
27
- name: 'cacheableOperations',
28
- message: 'Which of the following scripts are cacheable? (Produce the same output given the same input, e.g. build, test and lint usually are, serve and start are not). You can use spacebar to select one or more scripts.',
29
- choices: scripts,
30
- /**
31
- * limit is missing from the interface but it limits the amount of options shown
32
- */
33
- limit: process.stdout.rows - 4, // 4 leaves room for the header above, the prompt and some whitespace
34
- },
35
- ])).cacheableOperations;
23
+ cacheableOperations = await (0, prompt_helpers_1.multiselectPrompt)({
24
+ message: 'Which of the following scripts are cacheable? (Produce the same output given the same input, e.g. build, test and lint usually are, serve and start are not). You can use spacebar to select one or more scripts.',
25
+ choices: scripts,
26
+ });
36
27
  for (const scriptName of cacheableOperations) {
37
- scriptOutputs[scriptName] = (await enquirer.prompt([
38
- {
39
- type: 'input',
40
- name: scriptName,
41
- message: `Does the "${scriptName}" script create any outputs? If not, leave blank, otherwise provide a path (e.g. dist, lib, build, coverage)`,
42
- },
43
- ]))[scriptName];
28
+ scriptOutputs[scriptName] = await (0, prompt_helpers_1.textPrompt)({
29
+ message: `Does the "${scriptName}" script create any outputs? If not, leave blank, otherwise provide a path (e.g. dist, lib, build, coverage)`,
30
+ });
44
31
  }
45
32
  nxCloudChoice =
46
33
  options.nxCloud === true
@@ -1,12 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.addNxToTurborepo = addNxToTurborepo;
4
- const node_fs_1 = require("node:fs");
5
4
  const node_path_1 = require("node:path");
6
5
  const fileutils_1 = require("../../../utils/fileutils");
7
- const handle_import_1 = require("../../../utils/handle-import");
8
6
  const output_1 = require("../../../utils/output");
9
7
  const package_manager_1 = require("../../../utils/package-manager");
8
+ const format_1 = require("./format");
10
9
  const utils_1 = require("./utils");
11
10
  async function addNxToTurborepo(_options) {
12
11
  const repoRoot = process.cwd();
@@ -27,21 +26,8 @@ async function addNxToTurborepo(_options) {
27
26
  });
28
27
  let nxJson = (0, utils_1.createNxJsonFromTurboJson)((0, fileutils_1.readJsonFile)('turbo.json'));
29
28
  const nxJsonPath = (0, node_path_1.join)(repoRoot, 'nx.json');
30
- // Turborepo workspaces usually have prettier installed, so try and match the formatting before writing the file
31
- try {
32
- const prettier = await (0, handle_import_1.handleImport)('prettier');
33
- const config = await prettier.resolveConfig(repoRoot);
34
- (0, node_fs_1.writeFileSync)(nxJsonPath,
35
- // @ts-ignore - Always await prettier.format, in modern versions it's async
36
- await prettier.format(JSON.stringify(nxJson, null, 2), {
37
- ...(config ?? {}),
38
- parser: 'json',
39
- }));
40
- }
41
- catch (err) {
42
- // Apply fallback JSON write
43
- (0, fileutils_1.writeJsonFile)(nxJsonPath, nxJson);
44
- }
29
+ (0, fileutils_1.writeJsonFile)(nxJsonPath, nxJson);
30
+ (0, format_1.recordInitWrite)(nxJsonPath);
45
31
  const packageManager = (0, package_manager_1.detectPackageManager)(repoRoot);
46
32
  const pmc = (0, package_manager_1.getPackageManagerCommand)(packageManager);
47
33
  (0, utils_1.updateGitIgnore)(repoRoot);
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.addNxToAngularCliRepo = addNxToAngularCliRepo;
4
- const enquirer_1 = require("enquirer");
4
+ const prompt_helpers_1 = require("../../../../utils/prompt-helpers");
5
5
  const path_1 = require("path");
6
6
  const fileutils_1 = require("../../../../utils/fileutils");
7
7
  const versions_1 = require("../../../../utils/versions");
@@ -14,6 +14,7 @@ const integrated_workspace_1 = require("./integrated-workspace");
14
14
  const legacy_angular_versions_1 = require("./legacy-angular-versions");
15
15
  const standalone_workspace_1 = require("./standalone-workspace");
16
16
  const connect_to_nx_cloud_1 = require("../../../nx-cloud/connect/connect-to-nx-cloud");
17
+ const format_1 = require("../format");
17
18
  const defaultCacheableOperations = [
18
19
  'build',
19
20
  'server',
@@ -29,6 +30,8 @@ async function addNxToAngularCliRepo(options) {
29
30
  if (legacyMigrationFn) {
30
31
  output_1.output.log({ title: '💽 Running migration for a legacy Angular version' });
31
32
  await legacyMigrationFn();
33
+ // The exit skips the caller's drain, so format the recorded writes here.
34
+ await (0, format_1.formatInitWrites)(repoRoot);
32
35
  process.exit(0);
33
36
  }
34
37
  output_1.output.success({
@@ -65,20 +68,11 @@ async function collectCacheableOperations(options) {
65
68
  output_1.output.log({
66
69
  title: '🧑‍🔧 Please answer the following questions about the targets found in your angular.json in order to generate task runner configuration',
67
70
  });
68
- cacheableOperations = (await (0, enquirer_1.prompt)([
69
- {
70
- type: 'multiselect',
71
- name: 'cacheableOperations',
72
- initial: defaultCacheableTargetsInWorkspace,
73
- message: 'Which of the following targets are cacheable? (Produce the same output given the same input, e.g. build, test and lint usually are, serve and start are not)',
74
- // enquirer mutates the array below, create a new one to avoid it
75
- choices: [...workspaceTargets],
76
- /**
77
- * limit is missing from the interface but it limits the amount of options shown
78
- */
79
- limit: process.stdout.rows - 4, // 4 leaves room for the header above, the prompt and some whitespace
80
- },
81
- ])).cacheableOperations;
71
+ cacheableOperations = await (0, prompt_helpers_1.multiselectPrompt)({
72
+ message: 'Which of the following targets are cacheable? (Produce the same output given the same input, e.g. build, test and lint usually are, serve and start are not)',
73
+ choices: workspaceTargets,
74
+ initialValues: defaultCacheableTargetsInWorkspace,
75
+ });
82
76
  }
83
77
  else {
84
78
  cacheableOperations =
@@ -113,6 +107,7 @@ function addPluginDependencies() {
113
107
  }
114
108
  packageJson.devDependencies = (0, object_sort_1.sortObjectByKeys)(packageJson.devDependencies);
115
109
  (0, fileutils_1.writeJsonFile)(packageJsonPath, packageJson);
110
+ (0, format_1.recordInitWrite)(packageJsonPath);
116
111
  }
117
112
  async function setupWorkspace(cacheableOperations, isIntegratedMigration) {
118
113
  (0, utils_1.updateGitIgnore)(repoRoot);
@@ -1,12 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.setupIntegratedWorkspace = setupIntegratedWorkspace;
4
- const child_process_1 = require("child_process");
5
- const package_manager_1 = require("../../../../utils/package-manager");
4
+ const child_process_1 = require("../../../../utils/child-process");
6
5
  function setupIntegratedWorkspace() {
7
- const pmc = (0, package_manager_1.getPackageManagerCommand)();
8
- (0, child_process_1.execSync)(`${pmc.exec} nx g @nx/angular:ng-add`, {
6
+ (0, child_process_1.runNxSync)(`g @nx/angular:ng-add`, {
9
7
  stdio: [0, 1, 2],
10
- windowsHide: true,
11
8
  });
12
9
  }
@@ -12,6 +12,7 @@ const package_json_1 = require("../../../../utils/package-json");
12
12
  const package_manager_1 = require("../../../../utils/package-manager");
13
13
  const connect_to_nx_cloud_1 = require("../../../nx-cloud/connect/connect-to-nx-cloud");
14
14
  const utils_1 = require("../utils");
15
+ const format_1 = require("../format");
15
16
  // map of Angular major versions to Nx versions to use for legacy `nx init` migrations,
16
17
  // key is major Angular version and value is Nx version to use
17
18
  const nxAngularLegacyVersionMap = {
@@ -107,6 +108,9 @@ async function getLegacyMigrationFunctionIfApplicable(repoRoot, options) {
107
108
  unscopedPkgName,
108
109
  }, pmc);
109
110
  output_1.output.log({ title: '📝 Setting up workspace' });
111
+ // Intentionally not runNxSync: legacyMigrationCommand is either the Angular
112
+ // CLI (`ng g ...:ng-add`) or a version-pinned `nx@<version> init`, neither
113
+ // of which is the local nx that runNxSync would resolve.
110
114
  (0, child_process_1.execSync)(`${pmc.exec} ${legacyMigrationCommand}`, {
111
115
  stdio: [0, 1, 2],
112
116
  windowsHide: true,
@@ -138,6 +142,7 @@ async function installDependencies(repoRoot, pkgInfo, pmc) {
138
142
  json.dependencies = (0, object_sort_1.sortObjectByKeys)(json.dependencies);
139
143
  }
140
144
  (0, fileutils_1.writeJsonFile)(`package.json`, json);
145
+ (0, format_1.recordInitWrite)('package.json');
141
146
  (0, child_process_1.execSync)(pmc.install, { stdio: [0, 1, 2], windowsHide: true });
142
147
  }
143
148
  async function resolvePackageVersion(packageName, version) {
@@ -7,6 +7,7 @@ const angular_json_1 = require("../../../../adapter/angular-json");
7
7
  const fileutils_1 = require("../../../../utils/fileutils");
8
8
  const path_1 = require("../../../../utils/path");
9
9
  const utils_1 = require("../utils");
10
+ const format_1 = require("../format");
10
11
  async function setupStandaloneWorkspace(repoRoot, cacheableOperations, workspaceTargets) {
11
12
  const angularJsonPath = (0, node_path_1.join)(repoRoot, 'angular.json');
12
13
  const angularJson = (0, fileutils_1.readJsonFile)(angularJsonPath);
@@ -25,12 +26,14 @@ async function setupStandaloneWorkspace(repoRoot, cacheableOperations, workspace
25
26
  const projects = (0, angular_json_1.toNewFormat)(angularJson).projects;
26
27
  for (const [projectName, project] of Object.entries(projects ?? {})) {
27
28
  updateProjectOutputs(repoRoot, projectName, project, cacheableOperations);
28
- (0, fileutils_1.writeJsonFile)((0, node_path_1.join)(project.root, 'project.json'), {
29
+ const projectJsonPath = (0, node_path_1.join)(project.root, 'project.json');
30
+ (0, fileutils_1.writeJsonFile)(projectJsonPath, {
29
31
  $schema: (0, path_1.normalizePath)((0, node_path_1.relative)((0, node_path_1.join)(repoRoot, project.root), (0, node_path_1.join)(repoRoot, 'node_modules/nx/schemas/project-schema.json'))),
30
32
  name: projectName,
31
33
  ...project,
32
34
  root: undefined,
33
35
  });
36
+ (0, format_1.recordInitWrite)(projectJsonPath);
34
37
  }
35
38
  (0, fs_1.unlinkSync)(angularJsonPath);
36
39
  }
@@ -91,7 +94,9 @@ function createNxJson(repoRoot, angularJson, cacheableOperations, { eslintProjec
91
94
  if (Object.keys(defaults).length > 0) {
92
95
  nxJson.targetDefaults = defaults;
93
96
  }
94
- (0, fileutils_1.writeJsonFile)((0, node_path_1.join)(repoRoot, 'nx.json'), nxJson);
97
+ const nxJsonPath = (0, node_path_1.join)(repoRoot, 'nx.json');
98
+ (0, fileutils_1.writeJsonFile)(nxJsonPath, nxJson);
99
+ (0, format_1.recordInitWrite)(nxJsonPath);
95
100
  }
96
101
  function updateProjectOutputs(repoRoot, projectName, project, cacheableOperations) {
97
102
  Object.entries(project.targets ?? {}).forEach(([targetName, target]) => {
@@ -195,4 +200,5 @@ function replaceNgWithNxInPackageJsonScripts(repoRoot) {
195
200
  .replace(/ ng /g, ' nx ');
196
201
  });
197
202
  (0, fileutils_1.writeJsonFile)(packageJsonPath, packageJson);
203
+ (0, format_1.recordInitWrite)(packageJsonPath);
198
204
  }
@@ -8,6 +8,7 @@ const picocolors_1 = require("picocolors");
8
8
  const error_types_1 = require("../../../project-graph/error-types");
9
9
  const workspace_root_1 = require("../../../utils/workspace-root");
10
10
  const fileutils_1 = require("../../../utils/fileutils");
11
+ const format_1 = require("./format");
11
12
  const output_1 = require("../../../utils/output");
12
13
  const project_graph_1 = require("../../../project-graph/project-graph");
13
14
  /**
@@ -131,4 +132,5 @@ function updatePluginsInNxJson(root = workspace_root_1.workspaceRoot, pluginToEx
131
132
  nxJson.plugins[pluginIndex] = plugin;
132
133
  });
133
134
  (0, fileutils_1.writeJsonFile)(nxJsonPath, nxJson);
135
+ (0, format_1.recordInitWrite)(nxJsonPath);
134
136
  }
@@ -12,6 +12,7 @@ exports.getBatchScriptContents = getBatchScriptContents;
12
12
  exports.sanitizeWrapperScript = sanitizeWrapperScript;
13
13
  const tslib_1 = require("tslib");
14
14
  const child_process_1 = require("child_process");
15
+ const format_1 = require("../format");
15
16
  const fs_1 = require("fs");
16
17
  const path = tslib_1.__importStar(require("path"));
17
18
  const semver_1 = require("semver");
@@ -69,7 +70,10 @@ function generateDotNxSetup(version) {
69
70
  (0, tree_1.flushChanges)(host.root, changes);
70
71
  // Ensure that the dot-nx installation is available.
71
72
  // This is needed when using a global nx with dot-nx, otherwise running any nx command using global command will fail due to missing modules.
72
- // Pipe stderr so failures surface in telemetry instead of bare "Command failed: ./nx --version".
73
+ // Intentionally not runNxSync: when the repo has a package.json it would run
74
+ // `<pm> exec nx` instead of the wrapper, but this call must run the
75
+ // just-written wrapper itself so it bootstraps .nx/installation.
76
+ // Pipe stderr so failures surface in telemetry instead of bare "Command failed".
73
77
  try {
74
78
  (0, child_process_1.execSync)(getDotNxWrapperVersionCommand(), {
75
79
  stdio: ['ignore', 'ignore', 'pipe'],
@@ -98,6 +102,10 @@ function writeMinimalNxJson(host, version) {
98
102
  version: normalizeVersionForNxJson('nx', version),
99
103
  },
100
104
  });
105
+ (0, format_1.recordInitWrite)('nx.json');
106
+ // Only this file. The wrapper scripts written by `generateDotNxSetup`
107
+ // above (`.nx/nxw.js`, `nx`, `nx.bat`) are deliberately left out: they are
108
+ // vendored artifacts, and two of them have no formatter at all.
101
109
  }
102
110
  }
103
111
  function updateGitIgnore(host) {
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Records a file for `formatInitWrites`. Only for files a formatter handles -
3
+ * `.gitignore` and the vendored `.nx` scripts are left out rather than
4
+ * filtered later.
5
+ *
6
+ * Two recording helpers are shared with `nx import`, which drains before each
7
+ * commit amend; draining after one would leave the formatting uncommitted.
8
+ * The drain is a no-op when empty.
9
+ */
10
+ export declare function recordInitWrite(filePath: string): void;
11
+ /**
12
+ * Formats what init just wrote and nothing else: an existing repo's other
13
+ * files are not init's to reformat.
14
+ *
15
+ * Never fatal - the repo is already initialised, so a formatter that cannot
16
+ * run costs a `nx format` the user can run themselves, not their setup.
17
+ */
18
+ export declare function formatInitWrites(repoRoot: string, command?: string): Promise<void>;