@ohos-ports/nx 23.3.0-beta.2 → 24.0.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 (294) hide show
  1. package/README.md +3 -6
  2. package/dist/bin/nx.js +2 -2
  3. package/dist/bin/post-install.js +5 -3
  4. package/dist/nx-cloud-internals.d.ts +1 -0
  5. package/dist/nx-cloud-internals.js +7 -1
  6. package/dist/src/adapter/ngcli-adapter.js +2 -2
  7. package/dist/src/ai/clone-ai-config-repo.js +49 -12
  8. package/dist/src/command-line/add/add.d.ts +2 -0
  9. package/dist/src/command-line/add/add.js +23 -5
  10. package/dist/src/command-line/affected/affected.js +2 -2
  11. package/dist/src/command-line/configure-ai-agents/configure-ai-agents.js +0 -12
  12. package/dist/src/command-line/graph/graph.js +38 -10
  13. package/dist/src/command-line/init/command-object.js +0 -12
  14. package/dist/src/command-line/init/implementation/add-nx-to-nest.js +21 -62
  15. package/dist/src/command-line/init/init-v2.js +0 -2
  16. package/dist/src/command-line/migrate/agentic/close-agent-session.d.ts +1 -1
  17. package/dist/src/command-line/migrate/agentic/close-agent-session.js +4 -3
  18. package/dist/src/command-line/migrate/agentic/definitions.d.ts +1 -3
  19. package/dist/src/command-line/migrate/agentic/definitions.js +5 -97
  20. package/dist/src/command-line/migrate/agentic/handoff-gitignore.d.ts +7 -45
  21. package/dist/src/command-line/migrate/agentic/handoff-gitignore.js +9 -51
  22. package/dist/src/command-line/migrate/agentic/handoff.d.ts +1 -43
  23. package/dist/src/command-line/migrate/agentic/handoff.js +3 -119
  24. package/dist/src/command-line/migrate/agentic/instruction-files.d.ts +0 -21
  25. package/dist/src/command-line/migrate/agentic/instruction-files.js +6 -27
  26. package/dist/src/command-line/migrate/agentic/master/run-master-session.d.ts +19 -1
  27. package/dist/src/command-line/migrate/agentic/master/run-master-session.js +88 -49
  28. package/dist/src/command-line/migrate/agentic/master/spawn-master.d.ts +1 -0
  29. package/dist/src/command-line/migrate/agentic/master/spawn-master.js +86 -24
  30. package/dist/src/command-line/migrate/agentic/print-dropped-agent-context.d.ts +2 -2
  31. package/dist/src/command-line/migrate/agentic/print-dropped-agent-context.js +2 -2
  32. package/dist/src/command-line/migrate/agentic/prompts/fragments.d.ts +1 -12
  33. package/dist/src/command-line/migrate/agentic/prompts/fragments.js +8 -17
  34. package/dist/src/command-line/migrate/agentic/prompts/shared-rendering.d.ts +0 -15
  35. package/dist/src/command-line/migrate/agentic/prompts/shared-rendering.js +3 -100
  36. package/dist/src/command-line/migrate/agentic/select.d.ts +12 -6
  37. package/dist/src/command-line/migrate/agentic/select.js +38 -8
  38. package/dist/src/command-line/migrate/agentic/types.d.ts +9 -68
  39. package/dist/src/command-line/migrate/agentic/types.js +6 -8
  40. package/dist/src/command-line/migrate/command-object.js +6 -10
  41. package/dist/src/command-line/migrate/execute-migration.d.ts +6 -6
  42. package/dist/src/command-line/migrate/execute-migration.js +25 -15
  43. package/dist/src/command-line/migrate/migrate-analytics.d.ts +18 -1
  44. package/dist/src/command-line/migrate/migrate-analytics.js +38 -0
  45. package/dist/src/command-line/migrate/migrate-commits.d.ts +29 -17
  46. package/dist/src/command-line/migrate/migrate-commits.js +86 -32
  47. package/dist/src/command-line/migrate/migrate-config.d.ts +6 -6
  48. package/dist/src/command-line/migrate/migrate-config.js +12 -6
  49. package/dist/src/command-line/migrate/migrate-output.d.ts +1 -6
  50. package/dist/src/command-line/migrate/migrate-output.js +1 -10
  51. package/dist/src/command-line/migrate/migrate.d.ts +6 -30
  52. package/dist/src/command-line/migrate/migrate.js +257 -255
  53. package/dist/src/command-line/migrate/resolve-package-version.d.ts +2 -4
  54. package/dist/src/command-line/migrate/resolve-package-version.js +2 -35
  55. package/dist/src/command-line/migrate/run/agent-output.d.ts +2 -0
  56. package/dist/src/command-line/migrate/run/agent-output.js +9 -0
  57. package/dist/src/command-line/migrate/run/broker.d.ts +14 -5
  58. package/dist/src/command-line/migrate/run/broker.js +69 -21
  59. package/dist/src/command-line/migrate/run/clean-retry.js +4 -2
  60. package/dist/src/command-line/migrate/run/existing-run-report.d.ts +1 -1
  61. package/dist/src/command-line/migrate/run/existing-run-report.js +7 -5
  62. package/dist/src/command-line/migrate/run/give-up.d.ts +4 -3
  63. package/dist/src/command-line/migrate/run/give-up.js +8 -5
  64. package/dist/src/command-line/migrate/run/index.d.ts +7 -5
  65. package/dist/src/command-line/migrate/run/index.js +16 -1
  66. package/dist/src/command-line/migrate/run/issues.js +7 -2
  67. package/dist/src/command-line/migrate/run/orchestrator.d.ts +61 -4
  68. package/dist/src/command-line/migrate/run/orchestrator.js +397 -133
  69. package/dist/src/command-line/migrate/run/run-state.d.ts +17 -1
  70. package/dist/src/command-line/migrate/run/run-state.js +41 -2
  71. package/dist/src/command-line/migrate/run/runbook.d.ts +1 -0
  72. package/dist/src/command-line/migrate/run/runbook.js +115 -18
  73. package/dist/src/command-line/migrate/run/state-lock.d.ts +29 -4
  74. package/dist/src/command-line/migrate/run/state-lock.js +102 -10
  75. package/dist/src/command-line/migrate/run/state-machine.js +4 -1
  76. package/dist/src/command-line/migrate/run/util.d.ts +7 -2
  77. package/dist/src/command-line/migrate/run/util.js +30 -3
  78. package/dist/src/command-line/migrate/run/worker.d.ts +1 -1
  79. package/dist/src/command-line/migrate/run/worker.js +252 -250
  80. package/dist/src/command-line/migrate/sort-migrations.d.ts +1 -7
  81. package/dist/src/command-line/migrate/sort-migrations.js +1 -12
  82. package/dist/src/command-line/nx-cloud/connect/connect-to-nx-cloud.js +17 -12
  83. package/dist/src/command-line/release/changelog.js +9 -6
  84. package/dist/src/command-line/release/config/config.d.ts +1 -0
  85. package/dist/src/command-line/release/config/config.js +48 -9
  86. package/dist/src/command-line/release/release.js +2 -2
  87. package/dist/src/command-line/release/utils/git.js +8 -7
  88. package/dist/src/command-line/release/utils/interpolate-release-config.d.ts +6 -0
  89. package/dist/src/command-line/release/utils/interpolate-release-config.js +39 -0
  90. package/dist/src/command-line/release/utils/release-graph.d.ts +5 -0
  91. package/dist/src/command-line/release/utils/release-graph.js +1 -0
  92. package/dist/src/command-line/release/utils/remote-release-clients/github.js +5 -6
  93. package/dist/src/command-line/release/utils/remote-release-clients/gitlab.js +5 -6
  94. package/dist/src/command-line/release/utils/resolve-changelog-renderer.js +2 -2
  95. package/dist/src/command-line/release/utils/shared.js +10 -10
  96. package/dist/src/command-line/release/utils/version-plan-utils.d.ts +3 -12
  97. package/dist/src/command-line/release/utils/version-plan-utils.js +33 -55
  98. package/dist/src/command-line/release/version/version-actions.js +2 -1
  99. package/dist/src/command-line/release/version.js +5 -2
  100. package/dist/src/command-line/reset/reset.js +58 -62
  101. package/dist/src/command-line/run/executor-utils.js +1 -0
  102. package/dist/src/command-line/run/run-one.d.ts +20 -1
  103. package/dist/src/command-line/run/run-one.js +153 -5
  104. package/dist/src/command-line/run/run.js +2 -1
  105. package/dist/src/command-line/show/projects.js +5 -3
  106. package/dist/src/command-line/show/show-target/info.d.ts +10 -1
  107. package/dist/src/command-line/show/show-target/info.js +100 -15
  108. package/dist/src/command-line/show/show-target/inputs.js +10 -2
  109. package/dist/src/command-line/show/show-target/utils.js +1 -0
  110. package/dist/src/command-line/watch/command-object.js +3 -22
  111. package/dist/src/command-line/watch/watch.d.ts +0 -7
  112. package/dist/src/command-line/watch/watch.js +1 -1
  113. package/dist/src/command-line/yargs-utils/shared-options.js +1 -1
  114. package/dist/src/config/misc-interfaces.d.ts +18 -0
  115. package/dist/src/config/nx-json.d.ts +22 -11
  116. package/dist/src/config/task-graph.d.ts +1 -1
  117. package/dist/src/config/workspace-json-project-json.d.ts +88 -0
  118. package/dist/src/core/graph/main.js +1 -1
  119. package/dist/src/core/graph/runtime.js +1 -1
  120. package/dist/src/core/graph/styles.css +1 -1
  121. package/dist/src/core/graph/styles.js +1 -1
  122. package/dist/src/daemon/client/client.d.ts +15 -0
  123. package/dist/src/daemon/client/client.js +181 -71
  124. package/dist/src/daemon/client/daemon-socket-messenger.d.ts +1 -1
  125. package/dist/src/daemon/client/daemon-socket-messenger.js +2 -2
  126. package/dist/src/daemon/server/client-socket-context.js +1 -1
  127. package/dist/src/daemon/server/handle-process-in-background.js +21 -9
  128. package/dist/src/daemon/server/handle-select-affected-tasks.d.ts +2 -1
  129. package/dist/src/daemon/server/handle-select-affected-tasks.js +21 -13
  130. package/dist/src/daemon/server/native-js-loader.d.ts +1 -0
  131. package/dist/src/daemon/server/native-js-loader.js +21 -0
  132. package/dist/src/daemon/server/project-graph-incremental-recomputation.js +4 -8
  133. package/dist/src/daemon/server/server.d.ts +2 -1
  134. package/dist/src/daemon/server/server.js +17 -4
  135. package/dist/src/daemon/server/shutdown-utils.js +0 -3
  136. package/dist/src/daemon/server/start.d.ts +1 -0
  137. package/dist/src/daemon/server/start.js +2 -0
  138. package/dist/src/daemon/socket-utils.d.ts +11 -9
  139. package/dist/src/daemon/socket-utils.js +31 -61
  140. package/dist/src/daemon/tmp-dir.d.ts +19 -14
  141. package/dist/src/daemon/tmp-dir.js +142 -354
  142. package/dist/src/devkit-exports.d.ts +9 -1
  143. package/dist/src/devkit-exports.js +12 -1
  144. package/dist/src/devkit-internals.d.ts +6 -5
  145. package/dist/src/devkit-internals.js +13 -4
  146. package/dist/src/executors/run-commands/run-commands.impl.d.ts +4 -2
  147. package/dist/src/executors/run-commands/run-commands.impl.js +53 -27
  148. package/dist/src/executors/run-commands/running-tasks.d.ts +13 -4
  149. package/dist/src/executors/run-commands/running-tasks.js +148 -95
  150. package/dist/src/executors/run-commands/schema.json +1 -1
  151. package/dist/src/hasher/check-task-files.js +5 -8
  152. package/dist/src/hasher/file-hasher.js +9 -7
  153. package/dist/src/hasher/hash-task.js +4 -0
  154. package/dist/src/hasher/native-task-hasher-impl.js +3 -1
  155. package/dist/src/hasher/task-hasher.d.ts +2 -0
  156. package/dist/src/hasher/task-hasher.js +4 -1
  157. package/dist/src/migrations/update-23-2-0/set-cache-on-executor-target-defaults.d.ts +1 -2
  158. package/dist/src/migrations/update-23-2-0/set-cache-on-executor-target-defaults.js +6 -11
  159. package/dist/src/migrations/update-23-2-0/set-cache-on-executor-target-defaults.md +2 -2
  160. package/dist/src/migrations/update-24-0-0/enable-legacy-affected.d.ts +4 -0
  161. package/dist/src/migrations/update-24-0-0/enable-legacy-affected.js +15 -0
  162. package/dist/src/migrations/update-24-0-0/enable-legacy-affected.md +30 -0
  163. package/dist/src/migrations/update-24-0-0/find-custom-hashers.d.ts +3 -0
  164. package/dist/src/migrations/update-24-0-0/find-custom-hashers.js +100 -0
  165. package/dist/src/migrations/update-24-0-0/find-custom-hashers.md +63 -0
  166. package/dist/src/migrations/update-24-0-0/move-custom-hashers-to-inputs.md +146 -0
  167. package/dist/src/migrations/update-24-0-0/rename-ultracache-ignore-options.d.ts +3 -0
  168. package/dist/src/migrations/update-24-0-0/rename-ultracache-ignore-options.js +130 -0
  169. package/dist/src/migrations/update-24-0-0/rename-ultracache-ignore-options.md +62 -0
  170. package/dist/src/native/assert-supported-platform.js +1 -1
  171. package/dist/src/native/index.d.ts +238 -18
  172. package/dist/src/native/index.js +6 -1
  173. package/dist/src/native/native-bindings.js +15 -6
  174. package/dist/src/native/nx.openharmony-arm64.node +0 -0
  175. package/dist/src/native/nx.wasi-browser.js +1 -0
  176. package/dist/src/native/nx.wasi.cjs +1 -0
  177. package/dist/src/native/nx.wasm32-wasi.debug.wasm +0 -0
  178. package/dist/src/native/nx.wasm32-wasi.wasm +0 -0
  179. package/dist/src/nx-cloud/update-manager.d.ts +14 -0
  180. package/dist/src/nx-cloud/update-manager.js +237 -50
  181. package/dist/src/plugins/js/lock-file/pnpm-parser.js +3 -4
  182. package/dist/src/plugins/js/lock-file/pruned-output.d.ts +2 -2
  183. package/dist/src/plugins/js/lock-file/pruned-output.js +4 -4
  184. package/dist/src/plugins/js/utils/register.js +9 -4
  185. package/dist/src/project-graph/affected/affected-tasks.d.ts +9 -6
  186. package/dist/src/project-graph/affected/affected-tasks.js +31 -7
  187. package/dist/src/project-graph/plugins/isolation/isolated-plugin.js +7 -0
  188. package/dist/src/project-graph/plugins/loaded-nx-plugin.js +49 -6
  189. package/dist/src/project-graph/utils/project-configuration/target-merging.js +1 -1
  190. package/dist/src/project-graph/utils/project-configuration/target-normalization.js +12 -133
  191. package/dist/src/project-graph/utils/project-configuration-utils.js +2 -2
  192. package/dist/src/project-graph/utils/retrieve-workspace-files.js +27 -6
  193. package/dist/src/tasks-runner/create-task-graph.d.ts +8 -7
  194. package/dist/src/tasks-runner/create-task-graph.js +50 -27
  195. package/dist/src/tasks-runner/default-tasks-runner.js +1 -1
  196. package/dist/src/tasks-runner/init-tasks-runner.js +116 -59
  197. package/dist/src/tasks-runner/life-cycle.d.ts +4 -1
  198. package/dist/src/tasks-runner/life-cycle.js +7 -0
  199. package/dist/src/tasks-runner/life-cycles/performance-analysis.d.ts +5 -2
  200. package/dist/src/tasks-runner/life-cycles/performance-analysis.js +13 -7
  201. package/dist/src/tasks-runner/life-cycles/performance-life-cycle.d.ts +4 -3
  202. package/dist/src/tasks-runner/life-cycles/performance-life-cycle.js +9 -2
  203. package/dist/src/tasks-runner/life-cycles/static-run-many-terminal-output-life-cycle.js +5 -2
  204. package/dist/src/tasks-runner/life-cycles/static-run-one-terminal-output-life-cycle.js +4 -1
  205. package/dist/src/tasks-runner/life-cycles/summary-terminal-output-life-cycle.js +5 -1
  206. package/dist/src/tasks-runner/pseudo-ipc.d.ts +1 -0
  207. package/dist/src/tasks-runner/pseudo-ipc.js +4 -0
  208. package/dist/src/tasks-runner/pseudo-terminal.d.ts +1 -1
  209. package/dist/src/tasks-runner/pseudo-terminal.js +2 -2
  210. package/dist/src/tasks-runner/readiness/executor-ready-signal.d.ts +7 -0
  211. package/dist/src/tasks-runner/readiness/executor-ready-signal.js +43 -0
  212. package/dist/src/tasks-runner/readiness/probes.d.ts +14 -0
  213. package/dist/src/tasks-runner/readiness/probes.js +101 -0
  214. package/dist/src/tasks-runner/readiness/ready-signal-server.d.ts +18 -0
  215. package/dist/src/tasks-runner/readiness/ready-signal-server.js +72 -0
  216. package/dist/src/tasks-runner/readiness/ready-signal.d.ts +33 -0
  217. package/dist/src/tasks-runner/readiness/ready-signal.js +92 -0
  218. package/dist/src/tasks-runner/readiness/ready-when.d.ts +84 -0
  219. package/dist/src/tasks-runner/readiness/ready-when.js +371 -0
  220. package/dist/src/tasks-runner/readiness/startup-host.d.ts +1 -0
  221. package/dist/src/tasks-runner/readiness/startup-host.js +32 -0
  222. package/dist/src/tasks-runner/run-command.d.ts +6 -2
  223. package/dist/src/tasks-runner/run-command.js +21 -31
  224. package/dist/src/tasks-runner/run-outcome.d.ts +16 -0
  225. package/dist/src/tasks-runner/run-outcome.js +39 -0
  226. package/dist/src/tasks-runner/running-tasks/batch-process.js +6 -0
  227. package/dist/src/tasks-runner/running-tasks/node-child-process.js +5 -4
  228. package/dist/src/tasks-runner/running-tasks/running-task.d.ts +1 -1
  229. package/dist/src/tasks-runner/task-env.d.ts +10 -0
  230. package/dist/src/tasks-runner/task-env.js +37 -5
  231. package/dist/src/tasks-runner/task-graph-utils.d.ts +9 -6
  232. package/dist/src/tasks-runner/task-graph-utils.js +17 -12
  233. package/dist/src/tasks-runner/task-orchestrator.d.ts +62 -18
  234. package/dist/src/tasks-runner/task-orchestrator.js +750 -150
  235. package/dist/src/tasks-runner/tasks-runner.d.ts +1 -1
  236. package/dist/src/tasks-runner/tasks-schedule.d.ts +18 -1
  237. package/dist/src/tasks-runner/tasks-schedule.js +63 -6
  238. package/dist/src/tasks-runner/tokens.d.ts +54 -0
  239. package/dist/src/tasks-runner/tokens.js +161 -0
  240. package/dist/src/tasks-runner/utils.d.ts +35 -6
  241. package/dist/src/tasks-runner/utils.js +149 -68
  242. package/dist/src/ultracache/ci-status.d.ts +24 -0
  243. package/dist/src/ultracache/ci-status.js +87 -0
  244. package/dist/src/ultracache/config.d.ts +3 -3
  245. package/dist/src/ultracache/config.js +4 -4
  246. package/dist/src/ultracache/fetch.d.ts +2 -0
  247. package/dist/src/ultracache/fetch.js +1 -0
  248. package/dist/src/ultracache/overrides.js +4 -0
  249. package/dist/src/utils/acknowledge-build-scripts.d.ts +34 -1
  250. package/dist/src/utils/acknowledge-build-scripts.js +171 -32
  251. package/dist/src/utils/child-process.js +2 -1
  252. package/dist/src/utils/find-matching-projects.js +9 -6
  253. package/dist/src/utils/git-utils.d.ts +12 -5
  254. package/dist/src/utils/git-utils.js +69 -11
  255. package/dist/src/utils/long-running-target.d.ts +1 -3
  256. package/dist/src/utils/long-running-target.js +1 -3
  257. package/dist/src/utils/output.d.ts +4 -3
  258. package/dist/src/utils/output.js +4 -3
  259. package/dist/src/utils/owned-private-dir.d.ts +1 -17
  260. package/dist/src/utils/owned-private-dir.js +10 -62
  261. package/dist/src/utils/package-manager.d.ts +8 -0
  262. package/dist/src/utils/package-manager.js +65 -8
  263. package/dist/src/utils/perf-hooks.d.ts +1 -0
  264. package/dist/src/utils/plugins/core-plugins.js +5 -1
  265. package/dist/src/utils/progress-topics.d.ts +1 -0
  266. package/dist/src/utils/progress-topics.js +1 -0
  267. package/dist/src/utils/safe-spawn.js +1 -5
  268. package/dist/src/utils/shell-quoting.d.ts +8 -1
  269. package/dist/src/utils/shell-quoting.js +12 -1
  270. package/dist/src/utils/spawn-without-terminal.d.ts +27 -0
  271. package/dist/src/utils/spawn-without-terminal.js +110 -0
  272. package/dist/src/utils/string-similarity.d.ts +38 -0
  273. package/dist/src/utils/string-similarity.js +108 -0
  274. package/migrations.json +20 -6
  275. package/package.json +15 -24
  276. package/schemas/migrations-schema.json +11 -0
  277. package/schemas/nx-schema.json +133 -11
  278. package/schemas/project-schema.json +114 -4
  279. package/dist/src/command-line/migrate/agentic/prompts/generic-validation.d.ts +0 -56
  280. package/dist/src/command-line/migrate/agentic/prompts/generic-validation.js +0 -67
  281. package/dist/src/command-line/migrate/agentic/prompts/hybrid-prompt-migration.d.ts +0 -49
  282. package/dist/src/command-line/migrate/agentic/prompts/hybrid-prompt-migration.js +0 -53
  283. package/dist/src/command-line/migrate/agentic/prompts/prompt-migration.d.ts +0 -26
  284. package/dist/src/command-line/migrate/agentic/prompts/prompt-migration.js +0 -27
  285. package/dist/src/command-line/migrate/agentic/prompts/system-prompt.d.ts +0 -70
  286. package/dist/src/command-line/migrate/agentic/prompts/system-prompt.js +0 -113
  287. package/dist/src/command-line/migrate/agentic/run-step.d.ts +0 -68
  288. package/dist/src/command-line/migrate/agentic/run-step.js +0 -148
  289. package/dist/src/command-line/migrate/agentic/runner.d.ts +0 -21
  290. package/dist/src/command-line/migrate/agentic/runner.js +0 -262
  291. package/dist/src/migrations/update-23-0-0/consolidate-release-tag-config.d.ts +0 -9
  292. package/dist/src/migrations/update-23-0-0/consolidate-release-tag-config.js +0 -18
  293. package/dist/src/tasks-runner/legacy-depends-on-warning.d.ts +0 -18
  294. package/dist/src/tasks-runner/legacy-depends-on-warning.js +0 -109
@@ -3,43 +3,51 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.validateResolvedVersionPlansAgainstFilter = validateResolvedVersionPlansAgainstFilter;
4
4
  exports.getProjectsAffectedByVersionPlan = getProjectsAffectedByVersionPlan;
5
5
  exports.areAllVersionPlanProjectsFiltered = areAllVersionPlanProjectsFiltered;
6
- exports.getVersionPlanProjectsOutsideFilter = getVersionPlanProjectsOutsideFilter;
7
6
  /**
8
- * Validates that all projects in resolved version plans are included in the filtered projects.
9
- * This validation ensures that version plans don't contain projects that aren't being released.
7
+ * Validates that no version plan mixes projects being released with projects outside the release filter,
8
+ * as such a plan could neither be fully applied nor safely deleted.
10
9
  *
11
- * @param releaseGroups - The release groups to validate
10
+ * @param releaseGroups - All configured release groups, so that plans spanning groups outside the filter are caught
12
11
  * @param releaseGroupToFilteredProjects - Map of release groups to their filtered projects
13
12
  * @returns An error object if validation fails, null otherwise
14
13
  */
15
14
  function validateResolvedVersionPlansAgainstFilter(releaseGroups, releaseGroupToFilteredProjects) {
15
+ const projectsByPlanFile = new Map();
16
16
  for (const releaseGroup of releaseGroups) {
17
- if (releaseGroup.resolvedVersionPlans &&
18
- releaseGroup.resolvedVersionPlans.length > 0) {
19
- const filteredProjects = releaseGroupToFilteredProjects.get(releaseGroup);
20
- for (const plan of releaseGroup.resolvedVersionPlans) {
21
- // check if version plan applies to filtered projects
22
- if (!checkVersionPlanContainsFilteredProjects(plan, releaseGroup, filteredProjects)) {
23
- continue;
17
+ if (!releaseGroup.resolvedVersionPlans) {
18
+ continue;
19
+ }
20
+ const filteredProjects = releaseGroupToFilteredProjects.get(releaseGroup);
21
+ for (const plan of releaseGroup.resolvedVersionPlans) {
22
+ let projects = projectsByPlanFile.get(plan.fileName);
23
+ if (!projects) {
24
+ projects = { filtered: new Set(), outsideFilter: new Set() };
25
+ projectsByPlanFile.set(plan.fileName, projects);
26
+ }
27
+ for (const project of getProjectsAffectedByVersionPlan(plan, releaseGroup)) {
28
+ if (filteredProjects?.has(project)) {
29
+ projects.filtered.add(project);
24
30
  }
25
- // Check if version plan contains projects outside the filter
26
- const projectsOutsideFilter = getVersionPlanProjectsOutsideFilter(plan, releaseGroup, filteredProjects);
27
- if (projectsOutsideFilter.length > 0) {
28
- // Error if version plan contains projects not in the filter
29
- return {
30
- title: `Version plan contains projects not included in the release filter`,
31
- bodyLines: [
32
- `The following projects in the version plan are not being released:`,
33
- ...projectsOutsideFilter.map((p) => ` - ${p}`),
34
- '',
35
- `Either include all projects from the version plan in your release command,`,
36
- `or create separate version plans for different sets of projects.`,
37
- ],
38
- };
31
+ else {
32
+ projects.outsideFilter.add(project);
39
33
  }
40
34
  }
41
35
  }
42
36
  }
37
+ for (const [fileName, { filtered, outsideFilter }] of projectsByPlanFile) {
38
+ if (filtered.size > 0 && outsideFilter.size > 0) {
39
+ return {
40
+ title: `Version plan contains projects not included in the release filter`,
41
+ bodyLines: [
42
+ `The following projects in version plan '${fileName}' are not being released:`,
43
+ ...Array.from(outsideFilter).map((p) => ` - ${p}`),
44
+ '',
45
+ `Either include all projects from the version plan in your release command,`,
46
+ `or create separate version plans for different sets of projects.`,
47
+ ],
48
+ };
49
+ }
50
+ }
43
51
  return null;
44
52
  }
45
53
  /**
@@ -79,33 +87,3 @@ function areAllVersionPlanProjectsFiltered(plan, releaseGroup, filteredProjects)
79
87
  return (planProjects.size > 0 &&
80
88
  Array.from(planProjects).every((project) => filteredProjects.has(project)));
81
89
  }
82
- /**
83
- * Finds projects in a version plan that are NOT included in the filtered projects set.
84
- *
85
- * @param plan - The version plan to check
86
- * @param releaseGroup - The release group containing the version plan
87
- * @param filteredProjects - Set of projects that are being released (filtered)
88
- * @returns Array of project names that are in the version plan but not in the filter
89
- */
90
- function getVersionPlanProjectsOutsideFilter(plan, releaseGroup, filteredProjects) {
91
- if (!filteredProjects) {
92
- return [];
93
- }
94
- const planProjects = getProjectsAffectedByVersionPlan(plan, releaseGroup);
95
- return Array.from(planProjects).filter((project) => !filteredProjects.has(project));
96
- }
97
- /**
98
- * Checks whether the version plan contains any of the filtered projects.
99
- *
100
- * @param plan - The version plan to check.
101
- * @param releaseGroup - The release group associated with the version plan.
102
- * @param filteredProjects - Set of projects that are being released (filtered).
103
- * @returns Returns true if the version plan contains any of the filtered projects, or if no filtered projects are provided.
104
- */
105
- function checkVersionPlanContainsFilteredProjects(plan, releaseGroup, filteredProjects) {
106
- if (!filteredProjects) {
107
- return true;
108
- }
109
- const planProjects = getProjectsAffectedByVersionPlan(plan, releaseGroup);
110
- return Array.from(filteredProjects).some((project) => planProjects.has(project));
111
- }
@@ -5,6 +5,7 @@ exports.resolveVersionActionsForProject = resolveVersionActionsForProject;
5
5
  const node_path_1 = require("node:path");
6
6
  const register_1 = require("../../../plugins/js/utils/register");
7
7
  const utils_1 = require("../../../tasks-runner/utils");
8
+ const interpolate_release_config_1 = require("../utils/interpolate-release-config");
8
9
  const workspace_root_1 = require("../../../utils/workspace-root");
9
10
  const config_1 = require("../config/config");
10
11
  const semver_1 = require("../utils/semver");
@@ -123,7 +124,7 @@ class VersionActions {
123
124
  const interpolatedManifestRoots = this.finalConfigForProject.manifestRootsToUpdate.map((manifestRoot) => {
124
125
  return {
125
126
  ...manifestRoot,
126
- path: (0, utils_1.interpolate)(manifestRoot.path, {
127
+ path: (0, interpolate_release_config_1.interpolateReleaseConfig)(manifestRoot.path, {
127
128
  workspaceRoot: '',
128
129
  projectRoot: this.projectGraphNode.data.root,
129
130
  projectName: this.projectGraphNode.name,
@@ -47,6 +47,9 @@ function createAPI(overrideReleaseConfig, ignoreNxJsonConfig) {
47
47
  if (configError) {
48
48
  return await (0, config_1.handleNxReleaseConfigError)(configError);
49
49
  }
50
+ if (args.gitCommitMessage) {
51
+ (0, config_1.validateCommitMessageTokens)(args.gitCommitMessage);
52
+ }
50
53
  // --print-config exits directly as it is not designed to be combined with any other programmatic operations
51
54
  if (args.printConfig) {
52
55
  return (0, print_config_1.printConfigAndExit)({
@@ -96,9 +99,9 @@ function createAPI(overrideReleaseConfig, ignoreNxJsonConfig) {
96
99
  }
97
100
  if (!args.specifier) {
98
101
  const rawVersionPlans = await (0, version_plans_1.readRawVersionPlans)();
99
- await (0, version_plans_1.setResolvedVersionPlansOnGroups)(rawVersionPlans, releaseGraph.releaseGroups, Object.keys(projectGraph.nodes), args.verbose);
102
+ await (0, version_plans_1.setResolvedVersionPlansOnGroups)(rawVersionPlans, releaseGraph.allReleaseGroups, Object.keys(projectGraph.nodes), args.verbose);
100
103
  // Validate version plans against the filter after resolution
101
- const versionPlanValidationError = (0, version_plan_utils_1.validateResolvedVersionPlansAgainstFilter)(releaseGraph.releaseGroups, releaseGraph.releaseGroupToFilteredProjects);
104
+ const versionPlanValidationError = (0, version_plan_utils_1.validateResolvedVersionPlansAgainstFilter)(releaseGraph.allReleaseGroups, releaseGraph.releaseGroupToFilteredProjects);
102
105
  if (versionPlanValidationError) {
103
106
  output_1.output.error(versionPlanValidationError);
104
107
  process.exit(1);
@@ -6,6 +6,7 @@ const client_1 = require("../../daemon/client/client");
6
6
  const tmp_dir_1 = require("../../daemon/tmp-dir");
7
7
  const cache_directory_1 = require("../../utils/cache-directory");
8
8
  const output_1 = require("../../utils/output");
9
+ const spinner_1 = require("../../utils/spinner");
9
10
  const native_file_cache_location_1 = require("../../native/native-file-cache-location");
10
11
  const workspace_root_1 = require("../../utils/workspace-root");
11
12
  const client_2 = require("../../nx-cloud/utilities/client");
@@ -19,80 +20,63 @@ const INCREMENTAL_BACKOFF_MAX_DURATION = 5000;
19
20
  // If an operation fails, wait 100ms before first retry.
20
21
  const INCREMENTAL_BACKOFF_FIRST_DELAY = 100;
21
22
  async function resetHandler(args) {
22
- let errors = [];
23
+ const errors = [];
23
24
  const all = args.onlyDaemon === undefined &&
24
25
  args.onlyCache === undefined &&
25
26
  args.onlyWorkspaceData === undefined;
26
27
  const nxJson = (0, configuration_1.readNxJson)();
27
28
  const cloudEnabled = (0, nx_cloud_utils_1.isNxCloudUsed)(nxJson);
28
- const startupMessage = all
29
- ? 'Resetting the Nx cache and stopping the daemon.'
30
- : 'Resetting:';
31
- const bodyLines = [];
32
- if (!all) {
33
- if (args.onlyDaemon) {
34
- bodyLines.push('- Nx Daemon and its workspace data');
35
- }
36
- if (args.onlyCache) {
37
- bodyLines.push('- Cache directory');
38
- }
39
- if (args.onlyWorkspaceData) {
40
- bodyLines.push('- Workspace data directory');
41
- }
42
- if (args.onlyCloud && cloudEnabled) {
43
- bodyLines.push('- Nx Cloud Client');
44
- }
45
- }
46
- output_1.output.note({ title: startupMessage, bodyLines });
47
29
  if (all || args.onlyDaemon) {
48
- try {
49
- await killDaemon();
50
- }
51
- catch (e) {
52
- errors.push('Failed to stop the Nx Daemon.', e.toString());
53
- }
54
- try {
55
- await cleanupDaemonWorkspaceData();
56
- }
57
- catch (e) {
58
- errors.push('Failed to clean up the daemon workspace data directory.', e.toString());
59
- }
30
+ await runResetStep(errors, {
31
+ start: 'Stopping the Nx Daemon',
32
+ success: 'Stopped the Nx Daemon',
33
+ failure: 'Failed to stop the Nx Daemon.',
34
+ run: killDaemon,
35
+ });
36
+ await runResetStep(errors, {
37
+ start: 'Removing the Nx Daemon workspace data',
38
+ success: 'Removed the Nx Daemon workspace data',
39
+ failure: 'Failed to clean up the daemon workspace data directory.',
40
+ run: cleanupDaemonWorkspaceData,
41
+ });
60
42
  }
61
43
  if (all || args.onlyCache) {
62
- try {
63
- await cleanupCacheEntries();
64
- }
65
- catch (e) {
66
- errors.push('Failed to clean up the cache directory.', e.toString());
67
- }
44
+ await runResetStep(errors, {
45
+ start: 'Removing the cache directory',
46
+ success: 'Removed the cache directory',
47
+ failure: 'Failed to clean up the cache directory.',
48
+ run: cleanupCacheEntries,
49
+ });
68
50
  }
69
51
  if (all || args.onlyWorkspaceData) {
70
- try {
71
- await cleanupNativeFileCache();
72
- }
73
- catch {
74
- // ignore, deleting the native file cache is not critical and can fail if another process is locking the file
75
- }
76
- try {
77
- await cleanupWorkspaceData();
78
- }
79
- catch (e) {
80
- errors.push('Failed to clean up the workspace data directory.', e.toString());
81
- }
52
+ await runResetStep(errors, {
53
+ start: 'Removing the workspace data directory',
54
+ success: 'Removed the workspace data directory',
55
+ failure: 'Failed to clean up the workspace data directory.',
56
+ run: async () => {
57
+ try {
58
+ await cleanupNativeFileCache();
59
+ }
60
+ catch {
61
+ // ignore, deleting the native file cache is not critical and can fail if another process is locking the file
62
+ }
63
+ await cleanupWorkspaceData();
64
+ },
65
+ });
82
66
  }
83
67
  if ((cloudEnabled && all) || args.onlyCloud) {
84
- try {
85
- await resetCloudClient();
86
- }
87
- catch (e) {
88
- errors.push('Failed to clean up the Nx Cloud client.', e.toString());
89
- }
90
- try {
91
- await removeInstalledNxCloudClient();
92
- }
93
- catch (e) {
94
- errors.push('Failed to reset the Nx Cloud client.', e.toString());
95
- }
68
+ await runResetStep(errors, {
69
+ start: 'Cleaning up the Nx Cloud client',
70
+ success: 'Cleaned up the Nx Cloud client',
71
+ failure: 'Failed to clean up the Nx Cloud client.',
72
+ run: resetCloudClient,
73
+ });
74
+ await runResetStep(errors, {
75
+ start: 'Removing the installed Nx Cloud client',
76
+ success: 'Removed the installed Nx Cloud client',
77
+ failure: 'Failed to reset the Nx Cloud client.',
78
+ run: removeInstalledNxCloudClient,
79
+ });
96
80
  }
97
81
  if (errors.length > 0) {
98
82
  output_1.output.error({
@@ -107,6 +91,18 @@ async function resetHandler(args) {
107
91
  });
108
92
  }
109
93
  }
94
+ /** Records a failure in `errors` so the remaining steps still run. */
95
+ async function runResetStep(errors, step) {
96
+ spinner_1.globalSpinner.start(step.start);
97
+ try {
98
+ await step.run();
99
+ spinner_1.globalSpinner.succeed(step.success);
100
+ }
101
+ catch (e) {
102
+ spinner_1.globalSpinner.fail(step.failure);
103
+ errors.push(step.failure, e.toString());
104
+ }
105
+ }
110
106
  async function killDaemon() {
111
107
  if (client_1.daemonClient.enabled()) {
112
108
  return client_1.daemonClient.stop();
@@ -44,6 +44,7 @@ projects) {
44
44
  const batchImplementationFactory = executorConfig.batchImplementation
45
45
  ? (0, schema_utils_1.getImplementationFactory)(executorConfig.batchImplementation, executorsDir, nodeModule, projects)
46
46
  : null;
47
+ // TODO(v25): remove custom hasher support.
47
48
  const hasherFactory = executorConfig.hasher
48
49
  ? (0, schema_utils_1.getImplementationFactory)(executorConfig.hasher, executorsDir, nodeModule, projects)
49
50
  : null;
@@ -1,5 +1,5 @@
1
1
  import { NxJsonConfiguration } from '../../config/nx-json';
2
- import { ProjectGraph } from '../../config/project-graph';
2
+ import { ProjectGraph, ProjectGraphProjectNode } from '../../config/project-graph';
3
3
  import { TargetDependencyConfig } from '../../config/workspace-json-project-json';
4
4
  export declare function runOne(cwd: string, args: {
5
5
  [k: string]: any;
@@ -7,6 +7,25 @@ export declare function runOne(cwd: string, args: {
7
7
  excludeTaskDependencies: boolean;
8
8
  loadDotEnvFiles: boolean;
9
9
  }): Promise<void>;
10
+ /**
11
+ * Builds the error shown when the project itself can't be found. Matches the
12
+ * attempted `project:target[:configuration]` against every runnable task id so
13
+ * a project typo (e.g. `webpai:build`) still surfaces the intended task
14
+ * (`webapi:build`).
15
+ */
16
+ export declare function getCannotFindProjectError(projectGraph: ProjectGraph, projectName: string, target: string, configuration?: string): {
17
+ title: string;
18
+ bodyLines: string[];
19
+ };
20
+ /**
21
+ * Validates that `target` exists on the resolved project. When it does not,
22
+ * returns an error describing the available targets (and the closest match, if
23
+ * any) so the user can recover from a typo or discover what they can run.
24
+ */
25
+ export declare function getRunOneTargetError(project: ProjectGraphProjectNode, target: string, configuration?: string): {
26
+ title: string;
27
+ bodyLines: string[];
28
+ } | null;
10
29
  export declare function parseRunOneOptions(cwd: string, parsedArgs: {
11
30
  [k: string]: any;
12
31
  }, projectGraph: ProjectGraph, nxJson: NxJsonConfiguration): {
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.runOne = runOne;
4
+ exports.getCannotFindProjectError = getCannotFindProjectError;
5
+ exports.getRunOneTargetError = getRunOneTargetError;
4
6
  exports.parseRunOneOptions = parseRunOneOptions;
5
7
  const calculate_default_project_name_1 = require("../../config/calculate-default-project-name");
6
8
  const configuration_1 = require("../../config/configuration");
@@ -11,6 +13,7 @@ const command_line_utils_1 = require("../../utils/command-line-utils");
11
13
  const find_matching_projects_1 = require("../../utils/find-matching-projects");
12
14
  const output_1 = require("../../utils/output");
13
15
  const split_target_1 = require("../../utils/split-target");
16
+ const string_similarity_1 = require("../../utils/string-similarity");
14
17
  const workspace_root_1 = require("../../utils/workspace-root");
15
18
  const graph_1 = require("../graph/graph");
16
19
  const connect_to_nx_cloud_1 = require("../nx-cloud/connect/connect-to-nx-cloud");
@@ -28,7 +31,12 @@ async function runOne(cwd, args, extraTargetDependencies = {}, extraOptions = {
28
31
  configuration: opts.configuration,
29
32
  targets: [opts.target],
30
33
  }, 'run-one', { printWarnings: args.graph !== 'stdout' }, nxJson);
31
- const { projects, projectName } = getProjects(projectGraph, opts.project);
34
+ const { projects, projectName } = getProjects(projectGraph, opts.project, opts.target, opts.configuration);
35
+ const targetError = getRunOneTargetError(projects[0], opts.target, opts.configuration);
36
+ if (targetError) {
37
+ output_1.output.error(targetError);
38
+ process.exit(1);
39
+ }
32
40
  if (nxArgs.help) {
33
41
  await (await (0, handle_import_1.handleImport)('./run.js', __dirname)).printTargetRunHelp({
34
42
  ...opts,
@@ -59,7 +67,7 @@ async function runOne(cwd, args, extraTargetDependencies = {}, extraOptions = {
59
67
  process.exit(status);
60
68
  }
61
69
  }
62
- function getProjects(projectGraph, projectName) {
70
+ function getProjects(projectGraph, projectName, target, configuration) {
63
71
  if (projectGraph.nodes[projectName]) {
64
72
  return {
65
73
  projectName: projectName,
@@ -90,11 +98,151 @@ function getProjects(projectGraph, projectName) {
90
98
  process.exit(1);
91
99
  }
92
100
  }
93
- output_1.output.error({
94
- title: `Cannot find project '${projectName}'`,
95
- });
101
+ output_1.output.error(getCannotFindProjectError(projectGraph, projectName, target, configuration));
96
102
  process.exit(1);
97
103
  }
104
+ // Keep error output scannable: only show a handful of targets/suggestions.
105
+ const MAX_LISTED_TARGETS = 5;
106
+ const MAX_SUGGESTIONS = 3;
107
+ /**
108
+ * Builds the list of all runnable `project:target` task ids in the workspace,
109
+ * used to suggest the right invocation when a project or target can't be found.
110
+ */
111
+ function getProjectTargetIds(projectGraph) {
112
+ const ids = [];
113
+ for (const projectName of Object.keys(projectGraph.nodes)) {
114
+ const targets = projectGraph.nodes[projectName].data.targets ?? {};
115
+ for (const targetName of Object.keys(targets)) {
116
+ ids.push(`${projectName}:${targetName}`);
117
+ }
118
+ }
119
+ return ids;
120
+ }
121
+ /**
122
+ * A target (and even a configuration) name can legally contain ':'. When the
123
+ * user typos such a name, `splitTarget` splits on every ':' and parses the
124
+ * trailing segment(s) as separate parts (e.g. `nx:zzcustom:variantt` becomes
125
+ * project `nx`, target `zzcustom`, configuration `variantt`).
126
+ *
127
+ * To match the real name we therefore score the fully-rejoined specifier and
128
+ * every progressively shorter form, and keep whichever produced the closest
129
+ * candidate. Rejoining wins for colon-containing names, while the shorter forms
130
+ * keep matching genuine `target` + `configuration` typos (where the real target
131
+ * name does not carry the configuration suffix). Ties go to the longer form,
132
+ * which is the one that reproduces the name the user actually typed.
133
+ */
134
+ function findClosestSpecifier(parts, candidates, limit = 1) {
135
+ const present = parts.filter((part) => !!part);
136
+ let best = [];
137
+ for (let end = present.length; end >= 1; end--) {
138
+ const matches = (0, string_similarity_1.rankSuggestions)(present.slice(0, end).join(':'), candidates);
139
+ if (matches.length &&
140
+ (!best.length || matches[0].distance < best[0].distance)) {
141
+ best = matches;
142
+ }
143
+ }
144
+ return best.slice(0, limit).map(({ candidate }) => candidate);
145
+ }
146
+ /**
147
+ * Finds the closest available target to what the user typed, staying
148
+ * config-aware. When a configuration was parsed off the specifier, the rejoined
149
+ * `target:configuration` is scored too, so a colon-containing real target name
150
+ * (e.g. `zzcustom:variant`) still matches. Both forms are scored and the closest
151
+ * candidate wins, ties going to the rejoined form -- mirroring
152
+ * `findClosestSpecifier`'s preference order. The bare-`target` tier reuses the
153
+ * precomputed `ranked` list (its head, gated by the suggestion threshold)
154
+ * instead of recomputing distances.
155
+ */
156
+ function findClosestTarget(target, configuration, availableTargets, ranked) {
157
+ let best;
158
+ if (configuration) {
159
+ [best] = (0, string_similarity_1.rankSuggestions)(`${target}:${configuration}`, availableTargets);
160
+ }
161
+ const nearest = ranked[0];
162
+ if (nearest &&
163
+ (0, string_similarity_1.isWithinSuggestionThreshold)(target, nearest.candidate, nearest.distance) &&
164
+ (!best || nearest.distance < best.distance)) {
165
+ best = nearest;
166
+ }
167
+ return best?.candidate;
168
+ }
169
+ /**
170
+ * Lists up to `MAX_LISTED_TARGETS` targets from a list already ranked by how
171
+ * closely they resemble the target the user typed (closest first, ties broken
172
+ * alphabetically) so the most likely intended targets surface first.
173
+ * `closestMatch` is dropped because it is already surfaced separately as the
174
+ * "Did you mean" suggestion. Appends a "...and N more" line when the project has
175
+ * more targets than we show, and returns no lines at all when the suggestion was
176
+ * the project's only target -- a bare "Available targets:" header reads as "this
177
+ * project has none".
178
+ */
179
+ function formatAvailableTargets(ranked, closestMatch) {
180
+ const targets = ranked
181
+ .map(({ candidate }) => candidate)
182
+ .filter((candidate) => candidate !== closestMatch);
183
+ if (!targets.length) {
184
+ return [];
185
+ }
186
+ const shown = targets.slice(0, MAX_LISTED_TARGETS);
187
+ const lines = ['Available targets:', ...shown.map((t) => ` - ${t}`)];
188
+ if (targets.length > shown.length) {
189
+ lines.push(` ...and ${targets.length - shown.length} more`);
190
+ }
191
+ return lines;
192
+ }
193
+ /**
194
+ * Builds the error shown when the project itself can't be found. Matches the
195
+ * attempted `project:target[:configuration]` against every runnable task id so
196
+ * a project typo (e.g. `webpai:build`) still surfaces the intended task
197
+ * (`webapi:build`).
198
+ */
199
+ function getCannotFindProjectError(projectGraph, projectName, target, configuration) {
200
+ const bodyLines = [];
201
+ const suggestions = findClosestSpecifier([projectName, target, configuration], getProjectTargetIds(projectGraph), MAX_SUGGESTIONS);
202
+ if (suggestions.length) {
203
+ bodyLines.push('Did you mean one of these?', ...suggestions.map((id) => ` - ${id}`));
204
+ }
205
+ return {
206
+ title: `Cannot find project '${projectName}'`,
207
+ bodyLines,
208
+ };
209
+ }
210
+ /**
211
+ * Validates that `target` exists on the resolved project. When it does not,
212
+ * returns an error describing the available targets (and the closest match, if
213
+ * any) so the user can recover from a typo or discover what they can run.
214
+ */
215
+ function getRunOneTargetError(project, target, configuration) {
216
+ const availableTargets = Object.keys(project.data.targets ?? {});
217
+ if (availableTargets.includes(target)) {
218
+ return null;
219
+ }
220
+ const bodyLines = [];
221
+ // Rank the available targets by distance to the bare target ONCE. This drives
222
+ // the ordered "Available targets" block and doubles as the bare-target tier of
223
+ // the closest-match lookup, so distances are not computed twice.
224
+ const ranked = (0, string_similarity_1.rankByDistance)(target, availableTargets);
225
+ const closestMatch = findClosestTarget(target, configuration, availableTargets, ranked);
226
+ if (closestMatch) {
227
+ bodyLines.push(`Did you mean "${closestMatch}"?`);
228
+ }
229
+ if (!availableTargets.length) {
230
+ bodyLines.push(`The project "${project.name}" does not have any targets configured.`);
231
+ }
232
+ else {
233
+ const targetLines = formatAvailableTargets(ranked, closestMatch);
234
+ if (targetLines.length) {
235
+ if (bodyLines.length) {
236
+ bodyLines.push('');
237
+ }
238
+ bodyLines.push(...targetLines);
239
+ }
240
+ }
241
+ return {
242
+ title: `Cannot find target "${target}" for project "${project.name}"`,
243
+ bodyLines,
244
+ };
245
+ }
98
246
  const targetAliases = {
99
247
  b: 'build',
100
248
  e: 'e2e',
@@ -17,6 +17,7 @@ const configuration_1 = require("../../config/configuration");
17
17
  const async_iterator_1 = require("../../utils/async-iterator");
18
18
  const executor_utils_1 = require("./executor-utils");
19
19
  const pseudo_terminal_1 = require("../../tasks-runner/pseudo-terminal");
20
+ const executor_ready_signal_1 = require("../../tasks-runner/readiness/executor-ready-signal");
20
21
  const child_process_1 = require("child_process");
21
22
  function printRunHelp(opts, schema, plugin) {
22
23
  (0, print_help_1.printHelp)(`run ${opts.project}:${opts.target}`, schema, {
@@ -174,6 +175,6 @@ function run(cwd, root, targetDescription, overrides, isVerbose, taskGraph) {
174
175
  const projectGraph = (0, project_graph_1.readCachedProjectGraph)();
175
176
  return (0, handle_errors_1.handleErrors)(isVerbose, async () => {
176
177
  const projectsConfigurations = (0, project_graph_1.readProjectsConfigurationFromProjectGraph)(projectGraph);
177
- return iteratorToProcessStatusCode(await runExecutorInternal(targetDescription, overrides, root, cwd, projectsConfigurations, (0, configuration_1.readNxJson)(), projectGraph, taskGraph, isVerbose));
178
+ return iteratorToProcessStatusCode((0, executor_ready_signal_1.signalReadyAtBaseUrl)(await runExecutorInternal(targetDescription, overrides, root, cwd, projectsConfigurations, (0, configuration_1.readNxJson)(), projectGraph, taskGraph, isVerbose)));
178
179
  });
179
180
  }
@@ -21,12 +21,12 @@ async function showProjectsHandler(args) {
21
21
  printWarnings: false,
22
22
  }, nxJson);
23
23
  const explainsTasks = args.affected &&
24
- (0, affected_tasks_1.selectsAffectedTasks)() &&
24
+ (0, affected_tasks_1.selectsAffectedTasks)(nxJson) &&
25
25
  !!args.withTarget?.length &&
26
26
  !args.projects;
27
27
  if ((0, affected_reasons_1.isExplaining)(nxArgs.explain) && !explainsTasks) {
28
28
  throw new Error((0, affected_reasons_1.explainUnavailable)([
29
- !(0, affected_tasks_1.selectsAffectedTasks)() && 'NX_LEGACY_AFFECTED=false',
29
+ !(0, affected_tasks_1.selectsAffectedTasks)(nxJson) && (0, affected_tasks_1.taskGranularityRequirement)(),
30
30
  !args.affected && '--affected',
31
31
  !args.withTarget?.length && 'targets passed with --withTarget (-t)',
32
32
  ].filter(Boolean), args.projects ? ['--projects'] : []));
@@ -35,7 +35,9 @@ async function showProjectsHandler(args) {
35
35
  if (args.affected) {
36
36
  const touchedFiles = await getTouchedFiles(nxArgs);
37
37
  // With a target, list projects owning an affected task for it, matching `affected -t`.
38
- if ((0, affected_tasks_1.selectsAffectedTasks)() && args.withTarget?.length && !args.projects) {
38
+ if ((0, affected_tasks_1.selectsAffectedTasks)(nxJson) &&
39
+ args.withTarget?.length &&
40
+ !args.projects) {
39
41
  const affectedTasks = await (0, affected_tasks_1.computeAffectedTasks)({
40
42
  projectGraph: graph,
41
43
  nxJson,
@@ -1,4 +1,5 @@
1
- import type { InputDefinition } from '../../../config/workspace-json-project-json';
1
+ import type { InputDefinition, ReadyWhen } from '../../../config/workspace-json-project-json';
2
+ import { type UltracacheModeInCI } from '../../../ultracache/ci-status';
2
3
  import type { ShowTargetBaseOptions } from '../command-object';
3
4
  import { type ResolvedTarget } from './utils';
4
5
  export declare function showTargetInfoHandler(args: ShowTargetBaseOptions): Promise<void>;
@@ -13,9 +14,14 @@ declare function resolveTargetInfoData(t: ResolvedTarget): {
13
14
  customHasher?: boolean;
14
15
  dependsOn?: string[];
15
16
  _depSources?: number[];
17
+ _continuousDeps?: Record<string, {
18
+ inputsHashed: boolean;
19
+ waitsForReady: boolean;
20
+ }>;
16
21
  transitiveTasks?: string[];
17
22
  parallelism: boolean;
18
23
  continuous: boolean;
24
+ readyWhen?: ReadyWhen;
19
25
  cache: boolean;
20
26
  inputs?: (string | InputDefinition)[];
21
27
  _inputSources?: number[];
@@ -24,5 +30,8 @@ declare function resolveTargetInfoData(t: ResolvedTarget): {
24
30
  configurations?: string[];
25
31
  defaultConfiguration?: string;
26
32
  sourceMap?: Record<string, [file: string, plugin: string]>;
33
+ /** Set by the handler once Nx Cloud confirms the workspace is On. */
34
+ ultracacheInCI: UltracacheModeInCI | undefined;
35
+ ultracacheMode: UltracacheModeInCI;
27
36
  };
28
37
  export {};