@depup/nx 23.2.1-depup.7 → 23.3.0-depup.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 (350) hide show
  1. package/README.md +8 -19
  2. package/changes.json +10 -54
  3. package/dist/bin/init-local.js +7 -1
  4. package/dist/nx-cloud-internals.d.ts +1 -0
  5. package/dist/nx-cloud-internals.js +9 -0
  6. package/dist/plugins/package-json.js +1 -1
  7. package/dist/src/command-line/add/add.js +5 -1
  8. package/dist/src/command-line/affected/affected.js +70 -9
  9. package/dist/src/command-line/affected/command-object.js +1 -1
  10. package/dist/src/command-line/format/format.js +2 -18
  11. package/dist/src/command-line/graph/graph.d.ts +31 -0
  12. package/dist/src/command-line/graph/graph.js +113 -20
  13. package/dist/src/command-line/init/implementation/add-nx-to-monorepo.js +0 -3
  14. package/dist/src/command-line/init/implementation/add-nx-to-nest.js +0 -3
  15. package/dist/src/command-line/init/implementation/add-nx-to-npm-repo.js +0 -3
  16. package/dist/src/command-line/init/implementation/angular/index.js +0 -3
  17. package/dist/src/command-line/init/implementation/angular/legacy-angular-versions.js +0 -3
  18. package/dist/src/command-line/init/implementation/format.js +2 -3
  19. package/dist/src/command-line/init/implementation/utils.d.ts +0 -1
  20. package/dist/src/command-line/init/implementation/utils.js +6 -9
  21. package/dist/src/command-line/init/init-v2.js +0 -3
  22. package/dist/src/command-line/migrate/agentic/capture-generator-output.d.ts +25 -0
  23. package/dist/src/command-line/migrate/agentic/capture-generator-output.js +121 -5
  24. package/dist/src/command-line/migrate/agentic/close-agent-session.d.ts +21 -0
  25. package/dist/src/command-line/migrate/agentic/close-agent-session.js +126 -0
  26. package/dist/src/command-line/migrate/agentic/definitions.d.ts +24 -0
  27. package/dist/src/command-line/migrate/agentic/definitions.js +79 -20
  28. package/dist/src/command-line/migrate/agentic/format-command.d.ts +14 -0
  29. package/dist/src/command-line/migrate/agentic/format-command.js +44 -0
  30. package/dist/src/command-line/migrate/agentic/handoff-gitignore.d.ts +3 -3
  31. package/dist/src/command-line/migrate/agentic/handoff-gitignore.js +3 -3
  32. package/dist/src/command-line/migrate/agentic/handoff.d.ts +50 -17
  33. package/dist/src/command-line/migrate/agentic/handoff.js +166 -24
  34. package/dist/src/command-line/migrate/agentic/instruction-files.d.ts +23 -0
  35. package/dist/src/command-line/migrate/agentic/instruction-files.js +41 -0
  36. package/dist/src/command-line/migrate/agentic/master/invocations.d.ts +12 -0
  37. package/dist/src/command-line/migrate/agentic/master/invocations.js +54 -0
  38. package/dist/src/command-line/migrate/agentic/master/run-master-session.d.ts +16 -0
  39. package/dist/src/command-line/migrate/agentic/master/run-master-session.js +175 -0
  40. package/dist/src/command-line/migrate/agentic/master/spawn-master.d.ts +31 -0
  41. package/dist/src/command-line/migrate/agentic/master/spawn-master.js +222 -0
  42. package/dist/src/command-line/migrate/agentic/prompts/final-validation.d.ts +13 -0
  43. package/dist/src/command-line/migrate/agentic/prompts/final-validation.js +41 -0
  44. package/dist/src/command-line/migrate/agentic/prompts/fragments.d.ts +17 -0
  45. package/dist/src/command-line/migrate/agentic/prompts/fragments.js +90 -0
  46. package/dist/src/command-line/migrate/agentic/prompts/generic-validation.js +4 -3
  47. package/dist/src/command-line/migrate/agentic/prompts/system-prompt.d.ts +25 -1
  48. package/dist/src/command-line/migrate/agentic/prompts/system-prompt.js +57 -34
  49. package/dist/src/command-line/migrate/agentic/run-step.js +28 -4
  50. package/dist/src/command-line/migrate/agentic/runner.d.ts +3 -15
  51. package/dist/src/command-line/migrate/agentic/runner.js +57 -239
  52. package/dist/src/command-line/migrate/agentic/terminal-repair.d.ts +1 -0
  53. package/dist/src/command-line/migrate/agentic/terminal-repair.js +27 -0
  54. package/dist/src/command-line/migrate/agentic/types.d.ts +23 -8
  55. package/dist/src/command-line/migrate/agentic/types.js +10 -7
  56. package/dist/src/command-line/migrate/agentic/windows-cmd.d.ts +33 -0
  57. package/dist/src/command-line/migrate/agentic/windows-cmd.js +88 -0
  58. package/dist/src/command-line/migrate/command-object.d.ts +2 -0
  59. package/dist/src/command-line/migrate/command-object.js +11 -1
  60. package/dist/src/command-line/migrate/deferred-output.d.ts +44 -0
  61. package/dist/src/command-line/migrate/deferred-output.js +92 -0
  62. package/dist/src/command-line/migrate/execute-migration.d.ts +9 -3
  63. package/dist/src/command-line/migrate/execute-migration.js +53 -16
  64. package/dist/src/command-line/migrate/migrate-analytics.d.ts +34 -9
  65. package/dist/src/command-line/migrate/migrate-analytics.js +71 -10
  66. package/dist/src/command-line/migrate/migrate-commits.d.ts +5 -4
  67. package/dist/src/command-line/migrate/migrate-commits.js +16 -6
  68. package/dist/src/command-line/migrate/migrate-config.d.ts +5 -2
  69. package/dist/src/command-line/migrate/migrate-config.js +19 -11
  70. package/dist/src/command-line/migrate/migrate-output.d.ts +3 -7
  71. package/dist/src/command-line/migrate/migrate-output.js +3 -7
  72. package/dist/src/command-line/migrate/migrate.d.ts +3 -0
  73. package/dist/src/command-line/migrate/migrate.js +183 -46
  74. package/dist/src/command-line/migrate/resolve-package-version.js +2 -19
  75. package/dist/src/command-line/migrate/run/agent-output.d.ts +11 -0
  76. package/dist/src/command-line/migrate/run/agent-output.js +21 -2
  77. package/dist/src/command-line/migrate/run/agent-work-payload.d.ts +37 -0
  78. package/dist/src/command-line/migrate/run/agent-work-payload.js +156 -0
  79. package/dist/src/command-line/migrate/run/atomic-write.d.ts +8 -0
  80. package/dist/src/command-line/migrate/run/atomic-write.js +17 -0
  81. package/dist/src/command-line/migrate/run/broker.d.ts +150 -0
  82. package/dist/src/command-line/migrate/run/broker.js +568 -0
  83. package/dist/src/command-line/migrate/run/clean-retry.d.ts +12 -0
  84. package/dist/src/command-line/migrate/run/clean-retry.js +99 -0
  85. package/dist/src/command-line/migrate/run/existing-run-report.d.ts +55 -0
  86. package/dist/src/command-line/migrate/run/existing-run-report.js +227 -0
  87. package/dist/src/command-line/migrate/run/give-up.d.ts +41 -0
  88. package/dist/src/command-line/migrate/run/give-up.js +148 -0
  89. package/dist/src/command-line/migrate/run/index.d.ts +9 -6
  90. package/dist/src/command-line/migrate/run/index.js +21 -2
  91. package/dist/src/command-line/migrate/run/issues.d.ts +127 -0
  92. package/dist/src/command-line/migrate/run/issues.js +1121 -0
  93. package/dist/src/command-line/migrate/run/orchestrator.d.ts +59 -1
  94. package/dist/src/command-line/migrate/run/orchestrator.js +1529 -457
  95. package/dist/src/command-line/migrate/run/run-id.d.ts +0 -8
  96. package/dist/src/command-line/migrate/run/run-id.js +0 -30
  97. package/dist/src/command-line/migrate/run/run-state.d.ts +77 -17
  98. package/dist/src/command-line/migrate/run/run-state.js +263 -32
  99. package/dist/src/command-line/migrate/run/runbook.d.ts +18 -0
  100. package/dist/src/command-line/migrate/run/runbook.js +118 -0
  101. package/dist/src/command-line/migrate/run/state-lock.d.ts +33 -2
  102. package/dist/src/command-line/migrate/run/state-lock.js +128 -2
  103. package/dist/src/command-line/migrate/run/state-machine.d.ts +50 -1
  104. package/dist/src/command-line/migrate/run/state-machine.js +339 -26
  105. package/dist/src/command-line/migrate/run/util.d.ts +3 -1
  106. package/dist/src/command-line/migrate/run/util.js +24 -3
  107. package/dist/src/command-line/migrate/run/worker.js +290 -129
  108. package/dist/src/command-line/migrate/step-actions.d.ts +1 -1
  109. package/dist/src/command-line/migrate/step-actions.js +7 -1
  110. package/dist/src/command-line/migrate/text.d.ts +6 -0
  111. package/dist/src/command-line/migrate/text.js +25 -0
  112. package/dist/src/command-line/migrate/version-skew-guard.js +2 -0
  113. package/dist/src/command-line/nx-cloud/connect/connect-to-nx-cloud.js +5 -11
  114. package/dist/src/command-line/release/publish.js +11 -8
  115. package/dist/src/command-line/release/utils/get-touched-projects-for-group.js +3 -3
  116. package/dist/src/command-line/release/utils/release-graph.js +1 -1
  117. package/dist/src/command-line/release/utils/remote-release-clients/github.js +5 -8
  118. package/dist/src/command-line/release/utils/remote-release-clients/gitlab.js +3 -3
  119. package/dist/src/command-line/release/utils/remote-release-clients/remote-release-client.d.ts +4 -2
  120. package/dist/src/command-line/release/utils/remote-release-clients/remote-release-client.js +37 -3
  121. package/dist/src/command-line/release/version/version-actions.d.ts +3 -0
  122. package/dist/src/command-line/reset/reset.js +10 -4
  123. package/dist/src/command-line/run/run-one.js +5 -1
  124. package/dist/src/command-line/run-many/run-many.js +6 -12
  125. package/dist/src/command-line/show/command-object.js +1 -1
  126. package/dist/src/command-line/show/projects.js +52 -1
  127. package/dist/src/command-line/yargs-utils/shared-options.d.ts +5 -1
  128. package/dist/src/command-line/yargs-utils/shared-options.js +38 -4
  129. package/dist/src/config/task-graph.d.ts +1 -1
  130. package/dist/src/config/workspace-json-project-json.d.ts +23 -1
  131. package/dist/src/core/graph/main.js +1 -1
  132. package/dist/src/core/graph/runtime.js +1 -1
  133. package/dist/src/core/graph/styles.js +1 -1
  134. package/dist/src/daemon/client/client.d.ts +14 -8
  135. package/dist/src/daemon/client/client.js +41 -12
  136. package/dist/src/daemon/message-types/get-plugin-capabilities.d.ts +5 -0
  137. package/dist/src/daemon/message-types/get-plugin-capabilities.js +11 -0
  138. package/dist/src/daemon/message-types/run-tasks-execution-hooks.d.ts +3 -2
  139. package/dist/src/daemon/message-types/select-affected-tasks.d.ts +21 -0
  140. package/dist/src/daemon/message-types/select-affected-tasks.js +11 -0
  141. package/dist/src/daemon/message-types/ultracache-configuration-version.d.ts +8 -0
  142. package/dist/src/daemon/message-types/ultracache-configuration-version.js +2 -0
  143. package/dist/src/daemon/server/dotenv-graph-changes.d.ts +1 -1
  144. package/dist/src/daemon/server/dotenv-graph-changes.js +2 -2
  145. package/dist/src/daemon/server/handle-get-plugin-capabilities.d.ts +2 -0
  146. package/dist/src/daemon/server/handle-get-plugin-capabilities.js +13 -0
  147. package/dist/src/daemon/server/handle-hash-tasks.d.ts +10 -2
  148. package/dist/src/daemon/server/handle-hash-tasks.js +18 -3
  149. package/dist/src/daemon/server/handle-select-affected-tasks.d.ts +3 -0
  150. package/dist/src/daemon/server/handle-select-affected-tasks.js +26 -0
  151. package/dist/src/daemon/server/handle-tasks-execution-hooks.d.ts +3 -2
  152. package/dist/src/daemon/server/{handle-outputs-changes.d.ts → handle-watch-events.d.ts} +4 -4
  153. package/dist/src/daemon/server/{handle-outputs-changes.js → handle-watch-events.js} +36 -37
  154. package/dist/src/daemon/server/outputs-tracking.d.ts +7 -19
  155. package/dist/src/daemon/server/outputs-tracking.js +7 -107
  156. package/dist/src/daemon/server/planning-context.d.ts +8 -0
  157. package/dist/src/daemon/server/planning-context.js +18 -0
  158. package/dist/src/daemon/server/project-graph-incremental-recomputation.d.ts +22 -7
  159. package/dist/src/daemon/server/project-graph-incremental-recomputation.js +104 -74
  160. package/dist/src/daemon/server/restart-checks.d.ts +22 -0
  161. package/dist/src/daemon/server/restart-checks.js +77 -0
  162. package/dist/src/daemon/server/server.d.ts +1 -0
  163. package/dist/src/daemon/server/server.js +54 -30
  164. package/dist/src/daemon/server/shutdown-utils.d.ts +0 -5
  165. package/dist/src/daemon/server/shutdown-utils.js +3 -26
  166. package/dist/src/daemon/server/ultracache-configuration-state.d.ts +7 -0
  167. package/dist/src/daemon/server/ultracache-configuration-state.js +36 -0
  168. package/dist/src/devkit-internals.d.ts +3 -1
  169. package/dist/src/devkit-internals.js +8 -3
  170. package/dist/src/executors/run-commands/run-commands.impl.d.ts +2 -1
  171. package/dist/src/executors/run-commands/run-commands.impl.js +19 -5
  172. package/dist/src/executors/run-commands/running-tasks.d.ts +5 -4
  173. package/dist/src/executors/run-commands/running-tasks.js +13 -13
  174. package/dist/src/hasher/create-task-hasher.d.ts +8 -1
  175. package/dist/src/hasher/create-task-hasher.js +13 -3
  176. package/dist/src/hasher/hash-plan-inspector.js +2 -2
  177. package/dist/src/hasher/hash-task.d.ts +2 -2
  178. package/dist/src/hasher/hash-task.js +28 -17
  179. package/dist/src/hasher/native-task-hasher-impl.d.ts +20 -4
  180. package/dist/src/hasher/native-task-hasher-impl.js +75 -9
  181. package/dist/src/hasher/task-hasher.d.ts +24 -7
  182. package/dist/src/hasher/task-hasher.js +27 -8
  183. package/dist/src/hasher/task-planning-context.d.ts +13 -0
  184. package/dist/src/hasher/task-planning-context.js +12 -0
  185. package/dist/src/native/index.d.ts +582 -21
  186. package/dist/src/native/index.js +3 -3
  187. package/dist/src/native/native-bindings.js +13 -1
  188. package/dist/src/native/nx.wasm32-wasi.debug.wasm +0 -0
  189. package/dist/src/native/nx.wasm32-wasi.wasm +0 -0
  190. package/dist/src/native/transform-objects.d.ts +11 -2
  191. package/dist/src/native/transform-objects.js +46 -0
  192. package/dist/src/nx-cloud/generators/connect-to-nx-cloud/connect-to-nx-cloud.js +15 -8
  193. package/dist/src/nx-cloud/update-manager.d.ts +3 -0
  194. package/dist/src/nx-cloud/update-manager.js +19 -13
  195. package/dist/src/nx-cloud/utilities/client.d.ts +1 -1
  196. package/dist/src/nx-cloud/utilities/client.js +1 -1
  197. package/dist/src/nx-cloud/utilities/is-workspace-claimed.js +2 -1
  198. package/dist/src/nx-cloud/utilities/nx-cloud-http-client.d.ts +5 -0
  199. package/dist/src/nx-cloud/utilities/nx-cloud-http-client.js +16 -0
  200. package/dist/src/nx-cloud/utilities/url-shorten.js +17 -10
  201. package/dist/src/plugins/js/index.js +45 -64
  202. package/dist/src/plugins/js/lock-file/lock-file.d.ts +4 -4
  203. package/dist/src/plugins/js/lock-file/lock-file.js +6 -7
  204. package/dist/src/plugins/js/lock-file/pnpm-parser.js +1 -1
  205. package/dist/src/plugins/js/lock-file/utils/pnpm-normalizer.d.ts +2 -0
  206. package/dist/src/plugins/js/lock-file/utils/pnpm-normalizer.js +22 -0
  207. package/dist/src/plugins/js/project-graph/affected/lock-file-changes.d.ts +10 -2
  208. package/dist/src/plugins/js/project-graph/affected/lock-file-changes.js +51 -29
  209. package/dist/src/plugins/js/project-graph/affected/npm-packages.d.ts +10 -2
  210. package/dist/src/plugins/js/project-graph/affected/npm-packages.js +32 -11
  211. package/dist/src/plugins/js/project-graph/build-dependencies/target-project-locator.js +22 -18
  212. package/dist/src/plugins/js/utils/register.js +13 -4
  213. package/dist/src/plugins/package-json/create-nodes.d.ts +2 -2
  214. package/dist/src/plugins/package-json/create-nodes.js +13 -13
  215. package/dist/src/project-graph/affected/affected-project-graph-models.d.ts +14 -0
  216. package/dist/src/project-graph/affected/affected-project-graph.js +5 -18
  217. package/dist/src/project-graph/affected/affected-projects.d.ts +7 -0
  218. package/dist/src/project-graph/affected/affected-projects.js +42 -0
  219. package/dist/src/project-graph/affected/affected-reasons.d.ts +116 -0
  220. package/dist/src/project-graph/affected/affected-reasons.js +459 -0
  221. package/dist/src/project-graph/affected/affected-tasks.d.ts +103 -0
  222. package/dist/src/project-graph/affected/affected-tasks.js +386 -0
  223. package/dist/src/project-graph/affected/print-explanation.d.ts +11 -0
  224. package/dist/src/project-graph/affected/print-explanation.js +44 -0
  225. package/dist/src/project-graph/error-types.d.ts +5 -0
  226. package/dist/src/project-graph/error-types.js +44 -5
  227. package/dist/src/project-graph/file-utils.d.ts +2 -0
  228. package/dist/src/project-graph/file-utils.js +12 -3
  229. package/dist/src/project-graph/nx-deps-cache.d.ts +5 -2
  230. package/dist/src/project-graph/nx-deps-cache.js +4 -4
  231. package/dist/src/project-graph/plugins/get-plugins.d.ts +3 -1
  232. package/dist/src/project-graph/plugins/get-plugins.js +60 -82
  233. package/dist/src/project-graph/plugins/in-process-loader.d.ts +1 -1
  234. package/dist/src/project-graph/plugins/in-process-loader.js +1 -4
  235. package/dist/src/project-graph/plugins/isolation/index.d.ts +1 -1
  236. package/dist/src/project-graph/plugins/isolation/index.js +3 -1
  237. package/dist/src/project-graph/plugins/isolation/isolated-plugin.d.ts +8 -0
  238. package/dist/src/project-graph/plugins/isolation/isolated-plugin.js +42 -6
  239. package/dist/src/project-graph/plugins/isolation/load-isolated-plugin.d.ts +10 -1
  240. package/dist/src/project-graph/plugins/isolation/load-isolated-plugin.js +67 -17
  241. package/dist/src/project-graph/plugins/isolation/messaging.d.ts +3 -2
  242. package/dist/src/project-graph/plugins/isolation/plugin-worker.js +5 -1
  243. package/dist/src/project-graph/plugins/loaded-nx-plugin.d.ts +5 -2
  244. package/dist/src/project-graph/plugins/loaded-nx-plugin.js +14 -1
  245. package/dist/src/project-graph/plugins/nx-plugin-capabilities.d.ts +6 -0
  246. package/dist/src/project-graph/plugins/nx-plugin-capabilities.js +28 -0
  247. package/dist/src/project-graph/plugins/task-results-stub.d.ts +50 -0
  248. package/dist/src/project-graph/plugins/task-results-stub.js +111 -0
  249. package/dist/src/project-graph/plugins/tasks-execution-hooks.d.ts +3 -2
  250. package/dist/src/project-graph/plugins/tasks-execution-hooks.js +14 -1
  251. package/dist/src/project-graph/project-graph.js +43 -42
  252. package/dist/src/project-graph/utils/project-configuration/target-merging.js +67 -0
  253. package/dist/src/project-graph/utils/project-configuration/target-normalization.js +83 -0
  254. package/dist/src/project-graph/utils/project-configuration/utils.d.ts +1 -0
  255. package/dist/src/project-graph/utils/project-configuration/utils.js +1 -0
  256. package/dist/src/tasks-runner/batch/run-batch.js +15 -0
  257. package/dist/src/tasks-runner/cache.d.ts +37 -2
  258. package/dist/src/tasks-runner/cache.js +42 -1
  259. package/dist/src/tasks-runner/create-task-graph.d.ts +24 -1
  260. package/dist/src/tasks-runner/create-task-graph.js +57 -2
  261. package/dist/src/tasks-runner/default-tasks-runner.js +1 -1
  262. package/dist/src/tasks-runner/forked-process-task-runner.d.ts +1 -1
  263. package/dist/src/tasks-runner/forked-process-task-runner.js +11 -10
  264. package/dist/src/tasks-runner/init-tasks-runner.d.ts +7 -2
  265. package/dist/src/tasks-runner/init-tasks-runner.js +15 -7
  266. package/dist/src/tasks-runner/is-tui-enabled.js +4 -3
  267. package/dist/src/tasks-runner/life-cycle.d.ts +7 -0
  268. package/dist/src/tasks-runner/life-cycle.js +7 -0
  269. package/dist/src/tasks-runner/life-cycles/summary-terminal-output-life-cycle.d.ts +35 -0
  270. package/dist/src/tasks-runner/life-cycles/summary-terminal-output-life-cycle.js +146 -0
  271. package/dist/src/tasks-runner/prune-task-graph.d.ts +17 -0
  272. package/dist/src/tasks-runner/prune-task-graph.js +45 -0
  273. package/dist/src/tasks-runner/run-command.d.ts +41 -5
  274. package/dist/src/tasks-runner/run-command.js +98 -22
  275. package/dist/src/tasks-runner/running-tasks/batch-process.d.ts +93 -19
  276. package/dist/src/tasks-runner/running-tasks/batch-process.js +184 -88
  277. package/dist/src/tasks-runner/task-io-service.d.ts +11 -3
  278. package/dist/src/tasks-runner/task-io-service.js +14 -5
  279. package/dist/src/tasks-runner/task-orchestrator.d.ts +71 -4
  280. package/dist/src/tasks-runner/task-orchestrator.js +266 -66
  281. package/dist/src/tasks-runner/tasks-runner.d.ts +2 -0
  282. package/dist/src/tasks-runner/terminal-output-path.d.ts +11 -0
  283. package/dist/src/tasks-runner/terminal-output-path.js +18 -0
  284. package/dist/src/tasks-runner/utils.d.ts +5 -0
  285. package/dist/src/tasks-runner/utils.js +14 -2
  286. package/dist/src/ultracache/config.d.ts +21 -0
  287. package/dist/src/ultracache/config.js +29 -0
  288. package/dist/src/ultracache/fetch.d.ts +21 -0
  289. package/dist/src/ultracache/fetch.js +43 -0
  290. package/dist/src/ultracache/overrides.d.ts +17 -0
  291. package/dist/src/ultracache/overrides.js +61 -0
  292. package/dist/src/ultracache/report.d.ts +13 -0
  293. package/dist/src/ultracache/report.js +62 -0
  294. package/dist/src/ultracache/store.d.ts +41 -0
  295. package/dist/src/ultracache/store.js +158 -0
  296. package/dist/src/utils/ab-testing.d.ts +4 -1
  297. package/dist/src/utils/ab-testing.js +22 -19
  298. package/dist/src/utils/chunkify.d.ts +1 -7
  299. package/dist/src/utils/chunkify.js +2 -8
  300. package/dist/src/utils/command-line-utils.d.ts +20 -0
  301. package/dist/src/utils/command-line-utils.js +10 -3
  302. package/dist/src/utils/create-cli-options.d.ts +6 -0
  303. package/dist/src/utils/create-cli-options.js +29 -0
  304. package/dist/src/utils/db-connection.d.ts +2 -0
  305. package/dist/src/utils/db-connection.js +2 -0
  306. package/dist/src/utils/formatters/index.d.ts +6 -0
  307. package/dist/src/utils/formatters/index.js +5 -0
  308. package/dist/src/utils/formatters/prettier.d.ts +0 -8
  309. package/dist/src/utils/formatters/prettier.js +4 -26
  310. package/dist/src/utils/git-utils.d.ts +19 -0
  311. package/dist/src/utils/git-utils.js +97 -39
  312. package/dist/src/utils/handle-errors.js +5 -43
  313. package/dist/src/utils/http-client.d.ts +27 -0
  314. package/dist/src/utils/http-client.js +193 -0
  315. package/dist/src/utils/installed-nx-version.js +2 -48
  316. package/dist/src/utils/json-diff.d.ts +4 -2
  317. package/dist/src/utils/json-diff.js +6 -94
  318. package/dist/src/utils/min-release-age/packument.js +1 -1
  319. package/dist/src/utils/nx-cloud-utils.d.ts +2 -0
  320. package/dist/src/utils/nx-cloud-utils.js +6 -1
  321. package/dist/src/utils/output.d.ts +22 -3
  322. package/dist/src/utils/output.js +28 -5
  323. package/dist/src/utils/package-json.d.ts +25 -0
  324. package/dist/src/utils/package-json.js +49 -6
  325. package/dist/src/utils/package-manager.d.ts +6 -0
  326. package/dist/src/utils/package-manager.js +10 -0
  327. package/dist/src/utils/plugins/plugin-capabilities.js +7 -2
  328. package/dist/src/utils/project-graph-utils.d.ts +2 -0
  329. package/dist/src/utils/project-graph-utils.js +12 -0
  330. package/dist/src/utils/provenance.js +20 -4
  331. package/dist/src/utils/serialize-overrides-into-command-line.js +2 -4
  332. package/dist/src/utils/workspace-context.d.ts +51 -3
  333. package/dist/src/utils/workspace-context.js +174 -10
  334. package/package.json +38 -100
  335. package/schemas/nx-schema.json +38 -0
  336. package/schemas/project-schema.json +35 -0
  337. package/dist/src/daemon/server/file-watching/route-workspace-changes.d.ts +0 -9
  338. package/dist/src/daemon/server/file-watching/route-workspace-changes.js +0 -76
  339. package/dist/src/daemon/server/watcher.d.ts +0 -18
  340. package/dist/src/daemon/server/watcher.js +0 -126
  341. package/dist/src/nx-cloud/utilities/axios.d.ts +0 -4
  342. package/dist/src/nx-cloud/utilities/axios.js +0 -17
  343. package/dist/src/project-graph/affected/locators/project-glob-changes.d.ts +0 -2
  344. package/dist/src/project-graph/affected/locators/project-glob-changes.js +0 -47
  345. package/dist/src/project-graph/affected/locators/workspace-json-changes.d.ts +0 -4
  346. package/dist/src/project-graph/affected/locators/workspace-json-changes.js +0 -47
  347. package/dist/src/project-graph/affected/locators/workspace-projects.d.ts +0 -3
  348. package/dist/src/project-graph/affected/locators/workspace-projects.js +0 -74
  349. package/dist/src/utils/collapse-expanded-outputs.d.ts +0 -10
  350. package/dist/src/utils/collapse-expanded-outputs.js +0 -72
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generateGraph = generateGraph;
4
+ exports.selectedFor = selectedFor;
5
+ exports.taskGraphForSelection = taskGraphForSelection;
4
6
  exports.getExpandedTaskInputs = getExpandedTaskInputs;
5
7
  const tslib_1 = require("tslib");
6
8
  const crypto_1 = require("crypto");
@@ -22,6 +24,9 @@ const typescript_1 = require("../../plugins/js/utils/typescript");
22
24
  const operators_1 = require("../../project-graph/operators");
23
25
  const project_graph_1 = require("../../project-graph/project-graph");
24
26
  const create_task_graph_1 = require("../../tasks-runner/create-task-graph");
27
+ const utils_1 = require("../../tasks-runner/utils");
28
+ const run_command_1 = require("../../tasks-runner/run-command");
29
+ const project_graph_utils_1 = require("../../utils/project-graph-utils");
25
30
  const all_file_data_1 = require("../../utils/all-file-data");
26
31
  const command_line_utils_1 = require("../../utils/command-line-utils");
27
32
  const native_1 = require("../../native");
@@ -178,6 +183,17 @@ async function generateGraph(args, affectedProjects) {
178
183
  }
179
184
  }
180
185
  let prunedGraph = (0, operators_1.pruneExternalNodes)(rawGraph);
186
+ // `nx graph --targets` has no command to take a selection from, so it draws
187
+ // the projects' targets.
188
+ const jsonTaskSelection = () => args.targets?.length
189
+ ? (resolveSelection(args.taskSelection) ??
190
+ (0, run_command_1.selectTasksForProjects)(rawGraph, args.projects?.length
191
+ ? args.projects
192
+ : [...(0, project_graph_utils_1.runnableForTarget)(rawGraph.nodes, args.targets)], {
193
+ targets: args.targets,
194
+ configuration: args.configuration,
195
+ }, {}, {}, false))
196
+ : undefined;
181
197
  const projects = Object.values(prunedGraph.nodes);
182
198
  projects.sort((a, b) => {
183
199
  return a.name.localeCompare(b.name);
@@ -231,7 +247,7 @@ async function generateGraph(args, affectedProjects) {
231
247
  let html = (0, node_fs_1.readFileSync)((0, node_path_1.join)(__dirname, '../../core/graph/index.html'), 'utf-8');
232
248
  prunedGraph = filterGraph(prunedGraph, args.focus || null, excludePatterns);
233
249
  if (args.print || args.file === 'stdout') {
234
- console.log(JSON.stringify(await createJsonOutput(prunedGraph, rawGraph, args.projects, args.targets), null, 2));
250
+ console.log(JSON.stringify(await createJsonOutput(prunedGraph, rawGraph, jsonTaskSelection()), null, 2));
235
251
  await output_1.output.drain();
236
252
  await new Promise((res) => setImmediate(res));
237
253
  process.exit(0);
@@ -258,7 +274,7 @@ async function generateGraph(args, affectedProjects) {
258
274
  });
259
275
  const { projectGraphClientResponse } = await createProjectGraphAndSourceMapClientResponse(affectedProjects);
260
276
  const taskGraphClientResponse = args.targets
261
- ? await createTaskGraphForTargetsAndProjects(args.targets, args.projects)
277
+ ? await createTaskGraphForTargetsAndProjects(args.targets, args.projects, args.configuration, args.taskSelection)
262
278
  : await createTaskGraphClientResponse();
263
279
  const taskInputsReponse = await createExpandedTaskInputResponse(taskGraphClientResponse, projectGraphClientResponse);
264
280
  const environmentJs = buildEnvironmentJs(excludePatterns, args.watch, !!args.file && args.file.endsWith('html') ? 'build' : 'serve', projectGraphClientResponse, taskGraphClientResponse, taskInputsReponse, sourceMaps);
@@ -275,7 +291,7 @@ async function generateGraph(args, affectedProjects) {
275
291
  }
276
292
  else if (ext === '.json') {
277
293
  (0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(fullFilePath), { recursive: true });
278
- const json = await createJsonOutput(prunedGraph, rawGraph, args.projects, args.targets);
294
+ const json = await createJsonOutput(prunedGraph, rawGraph, jsonTaskSelection());
279
295
  (0, fileutils_1.writeJsonFile)(fullFilePath, json);
280
296
  output_1.output.success({
281
297
  title: `JSON output created in ${fileFolderPath}`,
@@ -297,7 +313,13 @@ async function generateGraph(args, affectedProjects) {
297
313
  let app;
298
314
  let url;
299
315
  try {
300
- const result = await startServer(html, environmentJs, args.host || '127.0.0.1', args.port || 4211, args.watch, affectedProjects, args.focus, args.groupByFolder, excludePatterns);
316
+ const result = await startServer(html, environmentJs, args.host || '127.0.0.1', args.port || 4211, args.watch, affectedProjects, args.focus, args.groupByFolder, excludePatterns, typeof args.taskSelection === 'object' && args.taskSelection.taskIds
317
+ ? {
318
+ targets: args.targets,
319
+ configuration: args.configuration,
320
+ taskIds: args.taskSelection.taskIds,
321
+ }
322
+ : undefined);
301
323
  app = result.app;
302
324
  url = result.url;
303
325
  }
@@ -383,7 +405,7 @@ function findAvailablePort(startPort, host = '127.0.0.1') {
383
405
  });
384
406
  });
385
407
  }
386
- async function startServer(html, environmentJs, host, port = 4211, watchForChanges = true, affected = [], focus = null, groupByFolder = false, exclude = []) {
408
+ async function startServer(html, environmentJs, host, port = 4211, watchForChanges = true, affected = [], focus = null, groupByFolder = false, exclude = [], selection) {
387
409
  let unregisterFileWatcher;
388
410
  if (watchForChanges && !client_1.daemonClient.enabled()) {
389
411
  output_1.output.warn({
@@ -427,14 +449,15 @@ async function startServer(html, environmentJs, host, port = 4211, watchForChang
427
449
  if (sanitizePath === 'task-graph.json') {
428
450
  const projectsParam = parsedUrl.searchParams.get('projects');
429
451
  const targetsParam = parsedUrl.searchParams.get('targets');
430
- const configuration = parsedUrl.searchParams.get('configuration');
452
+ const configuration = parsedUrl.searchParams.get('configuration') || undefined;
431
453
  res.writeHead(200, { 'Content-Type': 'application/json' });
432
454
  if (targetsParam) {
433
455
  const targetNames = targetsParam.split(' ').filter(Boolean);
434
456
  const projectNames = projectsParam
435
457
  ? projectsParam.split(' ').filter(Boolean)
436
458
  : undefined;
437
- return res.end(JSON.stringify(await createTaskGraphForTargetsAndProjects(targetNames, projectNames, configuration)));
459
+ const request = selectedFor(targetNames, configuration, selection);
460
+ return res.end(JSON.stringify(await createTaskGraphForTargetsAndProjects(targetNames, projectNames, request.configuration, { taskIds: request.taskIds })));
438
461
  }
439
462
  // load all task graphs if there's no targets specified
440
463
  return res.end(JSON.stringify(await createTaskGraphClientResponse()));
@@ -726,7 +749,7 @@ async function createTaskGraphClientResponse(pruneExternal = false) {
726
749
  try {
727
750
  const taskGraph = (0, create_task_graph_1.createTaskGraph)(graph, {}, projects, targets, undefined, {});
728
751
  node_perf_hooks_1.performance.mark('task graph generation:end');
729
- const planner = new native_1.HashPlanner(nxJson, (0, native_1.transferProjectGraph)((0, transform_objects_1.transformProjectGraphForRust)(graph)));
752
+ const planner = new native_1.HashPlanner(nxJson, (0, transform_objects_1.transformProjectGraphForRust)(graph));
730
753
  node_perf_hooks_1.performance.mark('task hash plan generation:start');
731
754
  const taskIds = Object.keys(taskGraph.tasks);
732
755
  const plans = taskIds.length > 0 ? planner.getPlans(taskIds, taskGraph) : {};
@@ -774,10 +797,40 @@ function clearTaskGraphCache() {
774
797
  expandedTaskInputsCache.clear();
775
798
  }
776
799
  /**
777
- * Creates a single task graph for multiple projects with multiple targets
778
- * If no projects specified, returns graph for all projects with the targets
800
+ * The selection applies only to a page asking for its exact targets with its configuration
801
+ * or none (the ids carry it); anything else would prune to nothing, so it is shown whole.
802
+ */
803
+ function selectedFor(targets, configuration, selection) {
804
+ const applies = selection &&
805
+ targets.length === selection.targets.length &&
806
+ targets.every((target) => selection.targets.includes(target)) &&
807
+ (configuration === undefined || configuration === selection.configuration);
808
+ return applies
809
+ ? { configuration: selection.configuration, taskIds: selection.taskIds }
810
+ : { configuration };
811
+ }
812
+ function resolveSelection(selection) {
813
+ return typeof selection === 'function' ? selection() : selection;
814
+ }
815
+ /**
816
+ * The task graph to draw: the selection's own when it has one, otherwise built
817
+ * and, given ids, pruned to them. The live graph rebuilds per request, so it
818
+ * passes only ids.
819
+ */
820
+ function taskGraphForSelection(build, selection) {
821
+ if (selection?.taskGraph) {
822
+ return selection.taskGraph;
823
+ }
824
+ const taskGraph = build();
825
+ return selection?.taskIds
826
+ ? (0, utils_1.pruneToSelectedTasks)(taskGraph, selection.taskIds)
827
+ : taskGraph;
828
+ }
829
+ /**
830
+ * The task graph client response for `targetNames`: `selection`'s graph when given,
831
+ * else built for `projectNames` (default: every project with one of the targets).
779
832
  */
780
- async function createTaskGraphForTargetsAndProjects(targetNames, projectNames, configuration) {
833
+ async function createTaskGraphForTargetsAndProjects(targetNames, projectNames, configuration, selection) {
781
834
  // Get project graph
782
835
  let graph;
783
836
  try {
@@ -801,10 +854,11 @@ async function createTaskGraphForTargetsAndProjects(targetNames, projectNames, c
801
854
  .map(([projectName]) => projectName);
802
855
  }
803
856
  try {
804
- // Create single task graph
805
- const taskGraph = (0, create_task_graph_1.createTaskGraph)(graph, {}, projectsToUse, targetNames, configuration, {});
857
+ const taskGraph = taskGraphForSelection(() => (0, create_task_graph_1.createTaskGraph)(graph, {}, projectsToUse, targetNames, configuration, {}),
858
+ // Built in here, so an error is reported in the page like any other.
859
+ resolveSelection(selection));
806
860
  node_perf_hooks_1.performance.mark(`task graph generation:end`);
807
- const planner = new native_1.HashPlanner(nxJson, (0, native_1.transferProjectGraph)((0, transform_objects_1.transformProjectGraphForRust)(graph)));
861
+ const planner = new native_1.HashPlanner(nxJson, (0, transform_objects_1.transformProjectGraphForRust)(graph));
808
862
  node_perf_hooks_1.performance.mark('task hash plan generation:start');
809
863
  const taskIds = Object.keys(taskGraph.tasks);
810
864
  const plans = taskIds.length > 0 ? planner.getPlans(taskIds, taskGraph) : {};
@@ -850,17 +904,51 @@ async function getExpandedTaskInputs(depGraphClientResponse, expandedTaskInputsC
850
904
  expandedTaskInputsCache.set(taskId, result);
851
905
  return result;
852
906
  }
907
+ // A brace group ({a,b}.json) carries commas, so a glob list joined with
908
+ // commas can only be split at brace depth zero.
909
+ function splitGlobGroup(group) {
910
+ const globs = [];
911
+ let current = '';
912
+ let depth = 0;
913
+ for (const char of group) {
914
+ if (char === '{') {
915
+ depth++;
916
+ }
917
+ else if (char === '}' && depth > 0) {
918
+ depth--;
919
+ }
920
+ if (char === ',' && depth === 0) {
921
+ globs.push(current);
922
+ current = '';
923
+ }
924
+ else {
925
+ current += char;
926
+ }
927
+ }
928
+ globs.push(current);
929
+ // An unbalanced `{` would swallow the rest of the list; a plain split is
930
+ // the better guess then.
931
+ return depth === 0 ? globs : group.split(',');
932
+ }
853
933
  function expandInputs(inputs, project, allWorkspaceFiles, depGraphClientResponse) {
854
934
  const projectNames = depGraphClientResponse.projects.map((p) => p.name);
855
935
  const workspaceRootInputs = [];
856
936
  const projectRootInputs = [];
857
937
  const externalInputs = [];
858
938
  const otherInputs = [];
939
+ const filesInputs = [];
859
940
  inputs.forEach((input) => {
860
941
  // grouped workspace inputs look like workspace:[pattern,otherPattern]
861
942
  if (input.startsWith('workspace:[')) {
862
- const inputs = input.substring(11, input.length - 1).split(',');
863
- workspaceRootInputs.push(...inputs);
943
+ workspaceRootInputs.push(...splitGlobGroup(input.substring(11, input.length - 1)));
944
+ return;
945
+ }
946
+ // Disk-backed groups look like files:[glob,!otherGlob]. They expand on
947
+ // disk, so they must be matched before the `:` catch-all below classifies
948
+ // them as external dependencies.
949
+ const diskBacked = /^files:\[(.*)\]$/.exec(input);
950
+ if (diskBacked) {
951
+ filesInputs.push(splitGlobGroup(diskBacked[1]));
864
952
  return;
865
953
  }
866
954
  const maybeProjectName = input.split(':')[0];
@@ -881,6 +969,7 @@ function expandInputs(inputs, project, allWorkspaceFiles, depGraphClientResponse
881
969
  }
882
970
  });
883
971
  const workspaceRootsExpanded = getExpandedWorkspaceRoots(workspaceRootInputs, allWorkspaceFiles);
972
+ const filesExpanded = filesInputs.flatMap((globs) => (0, native_1.expandFilesInput)(workspace_root_1.workspaceRoot, globs));
884
973
  const otherInputsExpanded = otherInputs.map((input) => {
885
974
  if (input === 'TsConfig') {
886
975
  return (0, node_path_1.relative)(workspace_root_1.workspaceRoot, (0, typescript_1.getRootTsConfigPath)());
@@ -908,7 +997,11 @@ function expandInputs(inputs, project, allWorkspaceFiles, depGraphClientResponse
908
997
  return acc;
909
998
  }, {});
910
999
  return {
911
- general: [...workspaceRootsExpanded, ...otherInputsExpanded],
1000
+ general: [
1001
+ ...workspaceRootsExpanded,
1002
+ ...filesExpanded,
1003
+ ...otherInputsExpanded,
1004
+ ],
912
1005
  ...projectRootsExpanded,
913
1006
  external: externalInputs,
914
1007
  };
@@ -943,12 +1036,12 @@ function getExpandedWorkspaceRoots(workspaceRootInputs, allWorkspaceFiles) {
943
1036
  workspaceRootsExpanded.sort();
944
1037
  return workspaceRootsExpanded;
945
1038
  }
946
- async function createJsonOutput(prunedGraph, rawGraph, projects, targets) {
1039
+ async function createJsonOutput(prunedGraph, rawGraph, taskSelection) {
947
1040
  const response = {
948
1041
  graph: prunedGraph,
949
1042
  };
950
- if (targets?.length) {
951
- const taskGraph = (0, create_task_graph_1.createTaskGraph)(rawGraph, {}, projects, targets, undefined, {});
1043
+ if (taskSelection) {
1044
+ const taskGraph = taskSelection.taskGraph;
952
1045
  const hasher = (0, create_task_hasher_1.createTaskHasher)(rawGraph, (0, configuration_1.readNxJson)());
953
1046
  let tasks = Object.values(taskGraph.tasks);
954
1047
  // Match the runtime path: each task is hashed against its own env so
@@ -65,9 +65,6 @@ async function addNxToMonorepo(options, guided = true) {
65
65
  output_1.output.log({ title: '🛠️ Setting up Nx Cloud' });
66
66
  await (0, utils_1.initCloud)('nx-init-monorepo');
67
67
  }
68
- else if (nxCloudChoice === 'never') {
69
- (0, utils_1.setNeverConnectToCloud)(repoRoot);
70
- }
71
68
  }
72
69
  // scanning package.json files
73
70
  function allProjectPackageJsonFiles(repoRoot) {
@@ -92,9 +92,6 @@ async function addNxToNest(options, packageJson) {
92
92
  output_1.output.log({ title: '🛠️ Setting up Nx Cloud' });
93
93
  await (0, utils_1.initCloud)('nx-init-nest');
94
94
  }
95
- else if (nxCloudChoice === 'never') {
96
- (0, utils_1.setNeverConnectToCloud)(repoRoot);
97
- }
98
95
  }
99
96
  function addNestPluginToPackageJson(repoRoot) {
100
97
  const path = (0, path_1.join)(repoRoot, `package.json`);
@@ -64,7 +64,4 @@ async function addNxToNpmRepo(options, guided = true) {
64
64
  output_1.output.log({ title: '🛠️ Setting up Nx Cloud' });
65
65
  await (0, utils_1.initCloud)('nx-init-npm-repo');
66
66
  }
67
- else if (nxCloudChoice === 'never') {
68
- (0, utils_1.setNeverConnectToCloud)(repoRoot);
69
- }
70
67
  }
@@ -56,9 +56,6 @@ async function addNxToAngularCliRepo(options) {
56
56
  output_1.output.log({ title: '🛠️ Setting up Nx Cloud' });
57
57
  await (0, utils_1.initCloud)('nx-init-angular');
58
58
  }
59
- else if (nxCloudChoice === 'never') {
60
- (0, utils_1.setNeverConnectToCloud)(repoRoot);
61
- }
62
59
  }
63
60
  async function collectCacheableOperations(options) {
64
61
  let cacheableOperations;
@@ -119,9 +119,6 @@ async function getLegacyMigrationFunctionIfApplicable(repoRoot, options) {
119
119
  output_1.output.log({ title: '🛠️ Setting up Nx Cloud' });
120
120
  await (0, utils_1.initCloud)('nx-init-angular');
121
121
  }
122
- else if (nxCloudChoice === 'never') {
123
- (0, utils_1.setNeverConnectToCloud)(repoRoot);
124
- }
125
122
  };
126
123
  }
127
124
  async function installDependencies(repoRoot, pkgInfo, pmc) {
@@ -72,8 +72,7 @@ command = 'nx init') {
72
72
  // already finished.
73
73
  //
74
74
  // Chunked as `nx format` chunks: the Angular flow records a `project.json`
75
- // per project. The prettier path is sized against its quoted length; oxfmt
76
- // goes through execFile and gets raw paths.
75
+ // per project.
77
76
  let formatter = null;
78
77
  try {
79
78
  formatter = (0, formatters_1.detectFormatter)(repoRoot);
@@ -93,7 +92,7 @@ command = 'nx init') {
93
92
  // batch, but exits 2 on one unsupported file, which would end a
94
93
  // successful init with a spurious warning and prettier's own stderr.
95
94
  const supported = await (0, prettier_1.filterToPrettierSupportedFiles)(files);
96
- for (const chunk of (0, chunkify_1.chunkify)(supported, undefined, (pattern) => (0, prettier_1.quoteForShell)(pattern).length)) {
95
+ for (const chunk of (0, chunkify_1.chunkify)(supported)) {
97
96
  if (chunk.length) {
98
97
  (0, prettier_1.writeWithPrettier)(chunk, repoRoot);
99
98
  }
@@ -24,7 +24,6 @@ export declare function toErrorString(error: unknown): string;
24
24
  export declare function readErrorStderr(error: unknown): string;
25
25
  export declare function extractErrorName(error: unknown, stderr: string): string;
26
26
  export declare function initCloud(installationSource: 'nx-init' | 'nx-init-angular' | 'nx-init-monorepo' | 'nx-init-nest' | 'nx-init-npm-repo' | 'nx-init-turborepo'): Promise<void>;
27
- export declare function setNeverConnectToCloud(repoRoot: string): void;
28
27
  export declare function addVsCodeRecommendedExtensions(repoRoot: string, extensions: string[]): void;
29
28
  export declare function markRootPackageJsonAsNxProjectLegacy(repoRoot: string, cacheableScripts: string[], pmc: PackageManagerCommands): void;
30
29
  export declare function markPackageJsonAsNxProject(packageJsonPath: string): void;
@@ -10,7 +10,6 @@ exports.toErrorString = toErrorString;
10
10
  exports.readErrorStderr = readErrorStderr;
11
11
  exports.extractErrorName = extractErrorName;
12
12
  exports.initCloud = initCloud;
13
- exports.setNeverConnectToCloud = setNeverConnectToCloud;
14
13
  exports.addVsCodeRecommendedExtensions = addVsCodeRecommendedExtensions;
15
14
  exports.markRootPackageJsonAsNxProjectLegacy = markRootPackageJsonAsNxProjectLegacy;
16
15
  exports.markPackageJsonAsNxProject = markPackageJsonAsNxProject;
@@ -253,13 +252,17 @@ function updateGitIgnore(root) {
253
252
  }
254
253
  function runInstall(repoRoot, packageManager = (0, package_manager_1.detectPackageManager)(repoRoot), pmc = (0, package_manager_1.getPackageManagerCommand)(packageManager)) {
255
254
  let command = pmc.install;
255
+ const env = { ...process.env };
256
256
  // Plugins added during init can pull build-script deps whose allowBuilds
257
257
  // entries are only recorded by their init generators after this install;
258
- // warn and skip for this one install, like pnpm 10 did.
258
+ // warn and skip for this one install, like pnpm 10 did. pnpm 12 gave
259
+ // `--config` a meaning of its own and takes the setting from the
260
+ // environment instead.
259
261
  if (packageManager === 'pnpm') {
260
262
  try {
261
263
  if ((0, semver_1.gte)((0, package_manager_1.getPackageManagerVersion)('pnpm', repoRoot), '11.0.0')) {
262
264
  command += ' --config.strictDepBuilds=false';
265
+ env.PNPM_CONFIG_STRICT_DEP_BUILDS = 'false';
263
266
  }
264
267
  }
265
268
  catch {
@@ -272,6 +275,7 @@ function runInstall(repoRoot, packageManager = (0, package_manager_1.detectPacka
272
275
  encoding: 'utf8',
273
276
  cwd: repoRoot,
274
277
  windowsHide: true,
278
+ env,
275
279
  });
276
280
  }
277
281
  catch (e) {
@@ -341,13 +345,6 @@ async function initCloud(installationSource) {
341
345
  });
342
346
  await (0, connect_to_nx_cloud_1.printSuccessMessage)(token, installationSource);
343
347
  }
344
- function setNeverConnectToCloud(repoRoot) {
345
- const nxJsonPath = (0, path_1.join)(repoRoot, 'nx.json');
346
- const nxJson = (0, fileutils_1.readJsonFile)(nxJsonPath);
347
- nxJson.neverConnectToCloud = true;
348
- (0, fileutils_1.writeJsonFile)(nxJsonPath, nxJson);
349
- (0, format_1.recordInitWrite)(nxJsonPath);
350
- }
351
348
  function addVsCodeRecommendedExtensions(repoRoot, extensions) {
352
349
  const vsCodeExtensionsPath = (0, path_1.join)(repoRoot, '.vscode/extensions.json');
353
350
  if ((0, fileutils_1.fileExists)(vsCodeExtensionsPath)) {
@@ -379,9 +379,6 @@ async function runInit(options, baseMeta) {
379
379
  if (nxCloudChoice === 'yes') {
380
380
  await (0, utils_1.initCloud)('nx-init');
381
381
  }
382
- else if (nxCloudChoice === 'never') {
383
- (0, utils_1.setNeverConnectToCloud)(repoRoot);
384
- }
385
382
  const analyticsPrompt = await (0, analytics_prompt_1.ensureAnalyticsPreferenceSet)(repoRoot, options.interactive);
386
383
  await (0, ab_testing_1.recordStat)({
387
384
  command: 'init',
@@ -3,11 +3,36 @@
3
3
  * preserving the original behavior. Does not intercept
4
4
  * `process.{stdout,stderr}.write` — those bypass `console` and would also
5
5
  * pick up unrelated framework output. Restoration is idempotent.
6
+ *
7
+ * `flush()` returns at most `MAX_GENERATOR_OUTPUT_BYTES`: up to the first
8
+ * `HEAD_BYTES` of output, a marker with the omitted byte count, and the most
9
+ * recent output. The terminal still receives everything through the tee.
6
10
  */
7
11
  export interface GeneratorOutputCapture {
8
12
  flush(): string;
9
13
  restore(): void;
10
14
  }
15
+ export declare const MAX_GENERATOR_OUTPUT_BYTES = 16384;
16
+ export declare const MARKER_BYTES: number;
17
+ export declare class BoundedOutput {
18
+ private readonly head;
19
+ private headBytes;
20
+ private headOpen;
21
+ private headSplit;
22
+ private readonly tail;
23
+ private tailBytes;
24
+ private omitted;
25
+ append(record: string): void;
26
+ render(): string;
27
+ }
28
+ export declare class BoundedChunks {
29
+ private head;
30
+ private headOpen;
31
+ private tail;
32
+ private omitted;
33
+ append(chunk: string): void;
34
+ render(): string;
35
+ }
11
36
  export declare function installGeneratorOutputCapture(): GeneratorOutputCapture;
12
37
  /**
13
38
  * Convenience wrapper that installs the capture, runs `fn`, restores on
@@ -1,9 +1,127 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BoundedChunks = exports.BoundedOutput = exports.MARKER_BYTES = exports.MAX_GENERATOR_OUTPUT_BYTES = void 0;
3
4
  exports.installGeneratorOutputCapture = installGeneratorOutputCapture;
4
5
  exports.withGeneratorOutputCapture = withGeneratorOutputCapture;
5
6
  const node_util_1 = require("node:util");
6
7
  const logger_1 = require("../../../utils/logger");
8
+ const handoff_1 = require("./handoff");
9
+ exports.MAX_GENERATOR_OUTPUT_BYTES = 16384;
10
+ const HEAD_BYTES = 4096;
11
+ const omittedMarker = (omitted) => `[nx migrate: ${omitted} bytes of output omitted]`;
12
+ // Reserved at the widest number spelling so a growing count cannot push a
13
+ // flush over the cap.
14
+ exports.MARKER_BYTES = Buffer.byteLength(`\n${omittedMarker(Number.MAX_VALUE)}\n`);
15
+ const TAIL_LIMIT = exports.MAX_GENERATOR_OUTPUT_BYTES - HEAD_BYTES - exports.MARKER_BYTES;
16
+ // Keeps the last `maxBytes` of `value`, cut on a code point.
17
+ function keepTailUtf8(value, maxBytes) {
18
+ let start = value.length;
19
+ let kept = 0;
20
+ while (start > 0) {
21
+ const low = value.charCodeAt(start - 1);
22
+ const high = start > 1 ? value.charCodeAt(start - 2) : 0;
23
+ const from = low >= 0xdc00 && low <= 0xdfff && high >= 0xd800 && high <= 0xdbff
24
+ ? start - 2
25
+ : start - 1;
26
+ const bytes = Buffer.byteLength(value.slice(from, start));
27
+ if (kept + bytes > maxBytes)
28
+ break;
29
+ kept += bytes;
30
+ start = from;
31
+ }
32
+ return value.slice(start);
33
+ }
34
+ // The head/marker/tail buffer behind `flush()` above.
35
+ class BoundedOutput {
36
+ constructor() {
37
+ this.head = [];
38
+ this.headBytes = 0;
39
+ this.headOpen = true;
40
+ // The head ends mid-record, so no newline separates it from the tail.
41
+ this.headSplit = false;
42
+ this.tail = [];
43
+ this.tailBytes = 0;
44
+ this.omitted = 0;
45
+ }
46
+ append(record) {
47
+ if (this.headOpen) {
48
+ const separator = this.head.length ? 1 : 0;
49
+ const bytes = Buffer.byteLength(record);
50
+ if (this.headBytes + separator + bytes <= HEAD_BYTES) {
51
+ this.head.push(record);
52
+ this.headBytes += separator + bytes;
53
+ return;
54
+ }
55
+ this.headOpen = false;
56
+ const prefix = (0, handoff_1.truncateUtf8)(record, HEAD_BYTES - this.headBytes - separator);
57
+ if (prefix) {
58
+ this.head.push(prefix);
59
+ this.headBytes += separator + Buffer.byteLength(prefix);
60
+ this.headSplit = true;
61
+ record = record.slice(prefix.length);
62
+ }
63
+ }
64
+ // Each tail record is charged its bytes plus a following newline; the last
65
+ // record's unused newline is one byte of slack at render time.
66
+ const cost = Buffer.byteLength(record) + 1;
67
+ this.tail.push({ text: record, cost });
68
+ this.tailBytes += cost;
69
+ while (this.tailBytes > TAIL_LIMIT && this.tail.length > 1) {
70
+ const dropped = this.tail.shift().cost;
71
+ this.tailBytes -= dropped;
72
+ this.omitted += dropped;
73
+ }
74
+ if (this.tailBytes > TAIL_LIMIT) {
75
+ const text = keepTailUtf8(this.tail[0].text, TAIL_LIMIT - 1);
76
+ const kept = Buffer.byteLength(text) + 1;
77
+ this.omitted += this.tailBytes - kept;
78
+ this.tail[0] = { text, cost: kept };
79
+ this.tailBytes = kept;
80
+ }
81
+ }
82
+ render() {
83
+ const head = this.head.join('\n');
84
+ const tail = this.tail.map((record) => record.text).join('\n');
85
+ if (this.omitted > 0) {
86
+ return `${head}\n${omittedMarker(this.omitted)}\n${tail}`;
87
+ }
88
+ if (!this.tail.length)
89
+ return head;
90
+ return this.headSplit ? head + tail : `${head}\n${tail}`;
91
+ }
92
+ }
93
+ exports.BoundedOutput = BoundedOutput;
94
+ // The same head/marker/tail bound over a byte stream: chunks carry no record
95
+ // boundary, so the cuts land on code points wherever the budgets run out and
96
+ // the result does not depend on how the stream was chunked.
97
+ class BoundedChunks {
98
+ constructor() {
99
+ this.head = '';
100
+ this.headOpen = true;
101
+ this.tail = '';
102
+ this.omitted = 0;
103
+ }
104
+ append(chunk) {
105
+ if (this.headOpen) {
106
+ const prefix = (0, handoff_1.truncateUtf8)(chunk, HEAD_BYTES - Buffer.byteLength(this.head));
107
+ this.head += prefix;
108
+ chunk = chunk.slice(prefix.length);
109
+ if (!chunk)
110
+ return;
111
+ this.headOpen = false;
112
+ }
113
+ const joined = this.tail + chunk;
114
+ this.tail = keepTailUtf8(joined, TAIL_LIMIT);
115
+ this.omitted += Buffer.byteLength(joined) - Buffer.byteLength(this.tail);
116
+ }
117
+ render() {
118
+ if (this.omitted > 0) {
119
+ return `${this.head}\n${omittedMarker(this.omitted)}\n${this.tail}`;
120
+ }
121
+ return this.head + this.tail;
122
+ }
123
+ }
124
+ exports.BoundedChunks = BoundedChunks;
7
125
  const CONSOLE_METHODS = [
8
126
  'log',
9
127
  'warn',
@@ -20,15 +138,13 @@ const NOOP_CAPTURE = {
20
138
  restore: () => { },
21
139
  };
22
140
  function installGeneratorOutputCapture() {
23
- // Refuse to layer if the previous install never restored. Returns a noop
24
- // handle so callers' `flush()` / `restore()` calls remain safe.
25
141
  for (const method of CONSOLE_METHODS) {
26
142
  if (console[method][CAPTURED_MARKER]) {
27
143
  logger_1.logger.verbose(`nx migrate: refusing to layer a second generator-output capture; the previous one was not restored. This typically means a caller skipped its \`try/finally\`. The inner caller's \`flush()\` will return empty, but its console output is still being captured by the outer install.`);
28
144
  return NOOP_CAPTURE;
29
145
  }
30
146
  }
31
- const buffer = [];
147
+ const buffer = new BoundedOutput();
32
148
  const originals = new Map();
33
149
  for (const method of CONSOLE_METHODS) {
34
150
  originals.set(method, console[method]);
@@ -36,7 +152,7 @@ function installGeneratorOutputCapture() {
36
152
  const wrapper = ((...args) => {
37
153
  original(...args);
38
154
  try {
39
- buffer.push((0, node_util_1.format)(...args));
155
+ buffer.append((0, node_util_1.format)(...args));
40
156
  }
41
157
  catch {
42
158
  // `format` is robust against the common pathologies but a user arg
@@ -55,7 +171,7 @@ function installGeneratorOutputCapture() {
55
171
  let restored = false;
56
172
  return {
57
173
  flush() {
58
- return buffer.join('\n');
174
+ return buffer.render();
59
175
  },
60
176
  restore() {
61
177
  if (restored)
@@ -0,0 +1,21 @@
1
+ import { type ChildProcess } from 'child_process';
2
+ export declare const AGENT_GRACEFUL_EXIT_MS = 5000;
3
+ export declare const FORCE_KILL_WAIT_MS = 500;
4
+ export interface ExitInfo {
5
+ code?: number | null;
6
+ signal?: NodeJS.Signals | null;
7
+ error?: Error;
8
+ }
9
+ export declare function waitForExit(child: ChildProcess): Promise<ExitInfo>;
10
+ /**
11
+ * Stops a running agent process.
12
+ *
13
+ * POSIX: SIGINT, then SIGKILL after a bounded wait. SIGTERM is skipped so a
14
+ * child that ignored the first graceful signal does not get a second one.
15
+ *
16
+ * Windows: `taskkill /T /F`. `child.kill` is a `TerminateProcess` call whatever
17
+ * the signal name, which on the `cmd.exe` shim path would kill the shim and
18
+ * orphan the agent. `taskkill` failures are swallowed.
19
+ */
20
+ export declare function closeAgentSession(child: ChildProcess, exitPromise: Promise<ExitInfo>, gracefulExitMs: number, forceKillWaitMs: number): Promise<void>;
21
+ export declare function raceWithTimeout(promise: Promise<unknown>, timeoutMs: number): Promise<void>;