@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.
- package/README.md +8 -19
- package/changes.json +10 -54
- package/dist/bin/init-local.js +7 -1
- package/dist/nx-cloud-internals.d.ts +1 -0
- package/dist/nx-cloud-internals.js +9 -0
- package/dist/plugins/package-json.js +1 -1
- package/dist/src/command-line/add/add.js +5 -1
- package/dist/src/command-line/affected/affected.js +70 -9
- package/dist/src/command-line/affected/command-object.js +1 -1
- package/dist/src/command-line/format/format.js +2 -18
- package/dist/src/command-line/graph/graph.d.ts +31 -0
- package/dist/src/command-line/graph/graph.js +113 -20
- package/dist/src/command-line/init/implementation/add-nx-to-monorepo.js +0 -3
- package/dist/src/command-line/init/implementation/add-nx-to-nest.js +0 -3
- package/dist/src/command-line/init/implementation/add-nx-to-npm-repo.js +0 -3
- package/dist/src/command-line/init/implementation/angular/index.js +0 -3
- package/dist/src/command-line/init/implementation/angular/legacy-angular-versions.js +0 -3
- package/dist/src/command-line/init/implementation/format.js +2 -3
- package/dist/src/command-line/init/implementation/utils.d.ts +0 -1
- package/dist/src/command-line/init/implementation/utils.js +6 -9
- package/dist/src/command-line/init/init-v2.js +0 -3
- package/dist/src/command-line/migrate/agentic/capture-generator-output.d.ts +25 -0
- package/dist/src/command-line/migrate/agentic/capture-generator-output.js +121 -5
- package/dist/src/command-line/migrate/agentic/close-agent-session.d.ts +21 -0
- package/dist/src/command-line/migrate/agentic/close-agent-session.js +126 -0
- package/dist/src/command-line/migrate/agentic/definitions.d.ts +24 -0
- package/dist/src/command-line/migrate/agentic/definitions.js +79 -20
- package/dist/src/command-line/migrate/agentic/format-command.d.ts +14 -0
- package/dist/src/command-line/migrate/agentic/format-command.js +44 -0
- package/dist/src/command-line/migrate/agentic/handoff-gitignore.d.ts +3 -3
- package/dist/src/command-line/migrate/agentic/handoff-gitignore.js +3 -3
- package/dist/src/command-line/migrate/agentic/handoff.d.ts +50 -17
- package/dist/src/command-line/migrate/agentic/handoff.js +166 -24
- package/dist/src/command-line/migrate/agentic/instruction-files.d.ts +23 -0
- package/dist/src/command-line/migrate/agentic/instruction-files.js +41 -0
- package/dist/src/command-line/migrate/agentic/master/invocations.d.ts +12 -0
- package/dist/src/command-line/migrate/agentic/master/invocations.js +54 -0
- package/dist/src/command-line/migrate/agentic/master/run-master-session.d.ts +16 -0
- package/dist/src/command-line/migrate/agentic/master/run-master-session.js +175 -0
- package/dist/src/command-line/migrate/agentic/master/spawn-master.d.ts +31 -0
- package/dist/src/command-line/migrate/agentic/master/spawn-master.js +222 -0
- package/dist/src/command-line/migrate/agentic/prompts/final-validation.d.ts +13 -0
- package/dist/src/command-line/migrate/agentic/prompts/final-validation.js +41 -0
- package/dist/src/command-line/migrate/agentic/prompts/fragments.d.ts +17 -0
- package/dist/src/command-line/migrate/agentic/prompts/fragments.js +90 -0
- package/dist/src/command-line/migrate/agentic/prompts/generic-validation.js +4 -3
- package/dist/src/command-line/migrate/agentic/prompts/system-prompt.d.ts +25 -1
- package/dist/src/command-line/migrate/agentic/prompts/system-prompt.js +57 -34
- package/dist/src/command-line/migrate/agentic/run-step.js +28 -4
- package/dist/src/command-line/migrate/agentic/runner.d.ts +3 -15
- package/dist/src/command-line/migrate/agentic/runner.js +57 -239
- package/dist/src/command-line/migrate/agentic/terminal-repair.d.ts +1 -0
- package/dist/src/command-line/migrate/agentic/terminal-repair.js +27 -0
- package/dist/src/command-line/migrate/agentic/types.d.ts +23 -8
- package/dist/src/command-line/migrate/agentic/types.js +10 -7
- package/dist/src/command-line/migrate/agentic/windows-cmd.d.ts +33 -0
- package/dist/src/command-line/migrate/agentic/windows-cmd.js +88 -0
- package/dist/src/command-line/migrate/command-object.d.ts +2 -0
- package/dist/src/command-line/migrate/command-object.js +11 -1
- package/dist/src/command-line/migrate/deferred-output.d.ts +44 -0
- package/dist/src/command-line/migrate/deferred-output.js +92 -0
- package/dist/src/command-line/migrate/execute-migration.d.ts +9 -3
- package/dist/src/command-line/migrate/execute-migration.js +53 -16
- package/dist/src/command-line/migrate/migrate-analytics.d.ts +34 -9
- package/dist/src/command-line/migrate/migrate-analytics.js +71 -10
- package/dist/src/command-line/migrate/migrate-commits.d.ts +5 -4
- package/dist/src/command-line/migrate/migrate-commits.js +16 -6
- package/dist/src/command-line/migrate/migrate-config.d.ts +5 -2
- package/dist/src/command-line/migrate/migrate-config.js +19 -11
- package/dist/src/command-line/migrate/migrate-output.d.ts +3 -7
- package/dist/src/command-line/migrate/migrate-output.js +3 -7
- package/dist/src/command-line/migrate/migrate.d.ts +3 -0
- package/dist/src/command-line/migrate/migrate.js +183 -46
- package/dist/src/command-line/migrate/resolve-package-version.js +2 -19
- package/dist/src/command-line/migrate/run/agent-output.d.ts +11 -0
- package/dist/src/command-line/migrate/run/agent-output.js +21 -2
- package/dist/src/command-line/migrate/run/agent-work-payload.d.ts +37 -0
- package/dist/src/command-line/migrate/run/agent-work-payload.js +156 -0
- package/dist/src/command-line/migrate/run/atomic-write.d.ts +8 -0
- package/dist/src/command-line/migrate/run/atomic-write.js +17 -0
- package/dist/src/command-line/migrate/run/broker.d.ts +150 -0
- package/dist/src/command-line/migrate/run/broker.js +568 -0
- package/dist/src/command-line/migrate/run/clean-retry.d.ts +12 -0
- package/dist/src/command-line/migrate/run/clean-retry.js +99 -0
- package/dist/src/command-line/migrate/run/existing-run-report.d.ts +55 -0
- package/dist/src/command-line/migrate/run/existing-run-report.js +227 -0
- package/dist/src/command-line/migrate/run/give-up.d.ts +41 -0
- package/dist/src/command-line/migrate/run/give-up.js +148 -0
- package/dist/src/command-line/migrate/run/index.d.ts +9 -6
- package/dist/src/command-line/migrate/run/index.js +21 -2
- package/dist/src/command-line/migrate/run/issues.d.ts +127 -0
- package/dist/src/command-line/migrate/run/issues.js +1121 -0
- package/dist/src/command-line/migrate/run/orchestrator.d.ts +59 -1
- package/dist/src/command-line/migrate/run/orchestrator.js +1529 -457
- package/dist/src/command-line/migrate/run/run-id.d.ts +0 -8
- package/dist/src/command-line/migrate/run/run-id.js +0 -30
- package/dist/src/command-line/migrate/run/run-state.d.ts +77 -17
- package/dist/src/command-line/migrate/run/run-state.js +263 -32
- package/dist/src/command-line/migrate/run/runbook.d.ts +18 -0
- package/dist/src/command-line/migrate/run/runbook.js +118 -0
- package/dist/src/command-line/migrate/run/state-lock.d.ts +33 -2
- package/dist/src/command-line/migrate/run/state-lock.js +128 -2
- package/dist/src/command-line/migrate/run/state-machine.d.ts +50 -1
- package/dist/src/command-line/migrate/run/state-machine.js +339 -26
- package/dist/src/command-line/migrate/run/util.d.ts +3 -1
- package/dist/src/command-line/migrate/run/util.js +24 -3
- package/dist/src/command-line/migrate/run/worker.js +290 -129
- package/dist/src/command-line/migrate/step-actions.d.ts +1 -1
- package/dist/src/command-line/migrate/step-actions.js +7 -1
- package/dist/src/command-line/migrate/text.d.ts +6 -0
- package/dist/src/command-line/migrate/text.js +25 -0
- package/dist/src/command-line/migrate/version-skew-guard.js +2 -0
- package/dist/src/command-line/nx-cloud/connect/connect-to-nx-cloud.js +5 -11
- package/dist/src/command-line/release/publish.js +11 -8
- package/dist/src/command-line/release/utils/get-touched-projects-for-group.js +3 -3
- package/dist/src/command-line/release/utils/release-graph.js +1 -1
- package/dist/src/command-line/release/utils/remote-release-clients/github.js +5 -8
- package/dist/src/command-line/release/utils/remote-release-clients/gitlab.js +3 -3
- package/dist/src/command-line/release/utils/remote-release-clients/remote-release-client.d.ts +4 -2
- package/dist/src/command-line/release/utils/remote-release-clients/remote-release-client.js +37 -3
- package/dist/src/command-line/release/version/version-actions.d.ts +3 -0
- package/dist/src/command-line/reset/reset.js +10 -4
- package/dist/src/command-line/run/run-one.js +5 -1
- package/dist/src/command-line/run-many/run-many.js +6 -12
- package/dist/src/command-line/show/command-object.js +1 -1
- package/dist/src/command-line/show/projects.js +52 -1
- package/dist/src/command-line/yargs-utils/shared-options.d.ts +5 -1
- package/dist/src/command-line/yargs-utils/shared-options.js +38 -4
- package/dist/src/config/task-graph.d.ts +1 -1
- package/dist/src/config/workspace-json-project-json.d.ts +23 -1
- package/dist/src/core/graph/main.js +1 -1
- package/dist/src/core/graph/runtime.js +1 -1
- package/dist/src/core/graph/styles.js +1 -1
- package/dist/src/daemon/client/client.d.ts +14 -8
- package/dist/src/daemon/client/client.js +41 -12
- package/dist/src/daemon/message-types/get-plugin-capabilities.d.ts +5 -0
- package/dist/src/daemon/message-types/get-plugin-capabilities.js +11 -0
- package/dist/src/daemon/message-types/run-tasks-execution-hooks.d.ts +3 -2
- package/dist/src/daemon/message-types/select-affected-tasks.d.ts +21 -0
- package/dist/src/daemon/message-types/select-affected-tasks.js +11 -0
- package/dist/src/daemon/message-types/ultracache-configuration-version.d.ts +8 -0
- package/dist/src/daemon/message-types/ultracache-configuration-version.js +2 -0
- package/dist/src/daemon/server/dotenv-graph-changes.d.ts +1 -1
- package/dist/src/daemon/server/dotenv-graph-changes.js +2 -2
- package/dist/src/daemon/server/handle-get-plugin-capabilities.d.ts +2 -0
- package/dist/src/daemon/server/handle-get-plugin-capabilities.js +13 -0
- package/dist/src/daemon/server/handle-hash-tasks.d.ts +10 -2
- package/dist/src/daemon/server/handle-hash-tasks.js +18 -3
- package/dist/src/daemon/server/handle-select-affected-tasks.d.ts +3 -0
- package/dist/src/daemon/server/handle-select-affected-tasks.js +26 -0
- package/dist/src/daemon/server/handle-tasks-execution-hooks.d.ts +3 -2
- package/dist/src/daemon/server/{handle-outputs-changes.d.ts → handle-watch-events.d.ts} +4 -4
- package/dist/src/daemon/server/{handle-outputs-changes.js → handle-watch-events.js} +36 -37
- package/dist/src/daemon/server/outputs-tracking.d.ts +7 -19
- package/dist/src/daemon/server/outputs-tracking.js +7 -107
- package/dist/src/daemon/server/planning-context.d.ts +8 -0
- package/dist/src/daemon/server/planning-context.js +18 -0
- package/dist/src/daemon/server/project-graph-incremental-recomputation.d.ts +22 -7
- package/dist/src/daemon/server/project-graph-incremental-recomputation.js +104 -74
- package/dist/src/daemon/server/restart-checks.d.ts +22 -0
- package/dist/src/daemon/server/restart-checks.js +77 -0
- package/dist/src/daemon/server/server.d.ts +1 -0
- package/dist/src/daemon/server/server.js +54 -30
- package/dist/src/daemon/server/shutdown-utils.d.ts +0 -5
- package/dist/src/daemon/server/shutdown-utils.js +3 -26
- package/dist/src/daemon/server/ultracache-configuration-state.d.ts +7 -0
- package/dist/src/daemon/server/ultracache-configuration-state.js +36 -0
- package/dist/src/devkit-internals.d.ts +3 -1
- package/dist/src/devkit-internals.js +8 -3
- package/dist/src/executors/run-commands/run-commands.impl.d.ts +2 -1
- package/dist/src/executors/run-commands/run-commands.impl.js +19 -5
- package/dist/src/executors/run-commands/running-tasks.d.ts +5 -4
- package/dist/src/executors/run-commands/running-tasks.js +13 -13
- package/dist/src/hasher/create-task-hasher.d.ts +8 -1
- package/dist/src/hasher/create-task-hasher.js +13 -3
- package/dist/src/hasher/hash-plan-inspector.js +2 -2
- package/dist/src/hasher/hash-task.d.ts +2 -2
- package/dist/src/hasher/hash-task.js +28 -17
- package/dist/src/hasher/native-task-hasher-impl.d.ts +20 -4
- package/dist/src/hasher/native-task-hasher-impl.js +75 -9
- package/dist/src/hasher/task-hasher.d.ts +24 -7
- package/dist/src/hasher/task-hasher.js +27 -8
- package/dist/src/hasher/task-planning-context.d.ts +13 -0
- package/dist/src/hasher/task-planning-context.js +12 -0
- package/dist/src/native/index.d.ts +582 -21
- package/dist/src/native/index.js +3 -3
- package/dist/src/native/native-bindings.js +13 -1
- package/dist/src/native/nx.wasm32-wasi.debug.wasm +0 -0
- package/dist/src/native/nx.wasm32-wasi.wasm +0 -0
- package/dist/src/native/transform-objects.d.ts +11 -2
- package/dist/src/native/transform-objects.js +46 -0
- package/dist/src/nx-cloud/generators/connect-to-nx-cloud/connect-to-nx-cloud.js +15 -8
- package/dist/src/nx-cloud/update-manager.d.ts +3 -0
- package/dist/src/nx-cloud/update-manager.js +19 -13
- package/dist/src/nx-cloud/utilities/client.d.ts +1 -1
- package/dist/src/nx-cloud/utilities/client.js +1 -1
- package/dist/src/nx-cloud/utilities/is-workspace-claimed.js +2 -1
- package/dist/src/nx-cloud/utilities/nx-cloud-http-client.d.ts +5 -0
- package/dist/src/nx-cloud/utilities/nx-cloud-http-client.js +16 -0
- package/dist/src/nx-cloud/utilities/url-shorten.js +17 -10
- package/dist/src/plugins/js/index.js +45 -64
- package/dist/src/plugins/js/lock-file/lock-file.d.ts +4 -4
- package/dist/src/plugins/js/lock-file/lock-file.js +6 -7
- package/dist/src/plugins/js/lock-file/pnpm-parser.js +1 -1
- package/dist/src/plugins/js/lock-file/utils/pnpm-normalizer.d.ts +2 -0
- package/dist/src/plugins/js/lock-file/utils/pnpm-normalizer.js +22 -0
- package/dist/src/plugins/js/project-graph/affected/lock-file-changes.d.ts +10 -2
- package/dist/src/plugins/js/project-graph/affected/lock-file-changes.js +51 -29
- package/dist/src/plugins/js/project-graph/affected/npm-packages.d.ts +10 -2
- package/dist/src/plugins/js/project-graph/affected/npm-packages.js +32 -11
- package/dist/src/plugins/js/project-graph/build-dependencies/target-project-locator.js +22 -18
- package/dist/src/plugins/js/utils/register.js +13 -4
- package/dist/src/plugins/package-json/create-nodes.d.ts +2 -2
- package/dist/src/plugins/package-json/create-nodes.js +13 -13
- package/dist/src/project-graph/affected/affected-project-graph-models.d.ts +14 -0
- package/dist/src/project-graph/affected/affected-project-graph.js +5 -18
- package/dist/src/project-graph/affected/affected-projects.d.ts +7 -0
- package/dist/src/project-graph/affected/affected-projects.js +42 -0
- package/dist/src/project-graph/affected/affected-reasons.d.ts +116 -0
- package/dist/src/project-graph/affected/affected-reasons.js +459 -0
- package/dist/src/project-graph/affected/affected-tasks.d.ts +103 -0
- package/dist/src/project-graph/affected/affected-tasks.js +386 -0
- package/dist/src/project-graph/affected/print-explanation.d.ts +11 -0
- package/dist/src/project-graph/affected/print-explanation.js +44 -0
- package/dist/src/project-graph/error-types.d.ts +5 -0
- package/dist/src/project-graph/error-types.js +44 -5
- package/dist/src/project-graph/file-utils.d.ts +2 -0
- package/dist/src/project-graph/file-utils.js +12 -3
- package/dist/src/project-graph/nx-deps-cache.d.ts +5 -2
- package/dist/src/project-graph/nx-deps-cache.js +4 -4
- package/dist/src/project-graph/plugins/get-plugins.d.ts +3 -1
- package/dist/src/project-graph/plugins/get-plugins.js +60 -82
- package/dist/src/project-graph/plugins/in-process-loader.d.ts +1 -1
- package/dist/src/project-graph/plugins/in-process-loader.js +1 -4
- package/dist/src/project-graph/plugins/isolation/index.d.ts +1 -1
- package/dist/src/project-graph/plugins/isolation/index.js +3 -1
- package/dist/src/project-graph/plugins/isolation/isolated-plugin.d.ts +8 -0
- package/dist/src/project-graph/plugins/isolation/isolated-plugin.js +42 -6
- package/dist/src/project-graph/plugins/isolation/load-isolated-plugin.d.ts +10 -1
- package/dist/src/project-graph/plugins/isolation/load-isolated-plugin.js +67 -17
- package/dist/src/project-graph/plugins/isolation/messaging.d.ts +3 -2
- package/dist/src/project-graph/plugins/isolation/plugin-worker.js +5 -1
- package/dist/src/project-graph/plugins/loaded-nx-plugin.d.ts +5 -2
- package/dist/src/project-graph/plugins/loaded-nx-plugin.js +14 -1
- package/dist/src/project-graph/plugins/nx-plugin-capabilities.d.ts +6 -0
- package/dist/src/project-graph/plugins/nx-plugin-capabilities.js +28 -0
- package/dist/src/project-graph/plugins/task-results-stub.d.ts +50 -0
- package/dist/src/project-graph/plugins/task-results-stub.js +111 -0
- package/dist/src/project-graph/plugins/tasks-execution-hooks.d.ts +3 -2
- package/dist/src/project-graph/plugins/tasks-execution-hooks.js +14 -1
- package/dist/src/project-graph/project-graph.js +43 -42
- package/dist/src/project-graph/utils/project-configuration/target-merging.js +67 -0
- package/dist/src/project-graph/utils/project-configuration/target-normalization.js +83 -0
- package/dist/src/project-graph/utils/project-configuration/utils.d.ts +1 -0
- package/dist/src/project-graph/utils/project-configuration/utils.js +1 -0
- package/dist/src/tasks-runner/batch/run-batch.js +15 -0
- package/dist/src/tasks-runner/cache.d.ts +37 -2
- package/dist/src/tasks-runner/cache.js +42 -1
- package/dist/src/tasks-runner/create-task-graph.d.ts +24 -1
- package/dist/src/tasks-runner/create-task-graph.js +57 -2
- package/dist/src/tasks-runner/default-tasks-runner.js +1 -1
- package/dist/src/tasks-runner/forked-process-task-runner.d.ts +1 -1
- package/dist/src/tasks-runner/forked-process-task-runner.js +11 -10
- package/dist/src/tasks-runner/init-tasks-runner.d.ts +7 -2
- package/dist/src/tasks-runner/init-tasks-runner.js +15 -7
- package/dist/src/tasks-runner/is-tui-enabled.js +4 -3
- package/dist/src/tasks-runner/life-cycle.d.ts +7 -0
- package/dist/src/tasks-runner/life-cycle.js +7 -0
- package/dist/src/tasks-runner/life-cycles/summary-terminal-output-life-cycle.d.ts +35 -0
- package/dist/src/tasks-runner/life-cycles/summary-terminal-output-life-cycle.js +146 -0
- package/dist/src/tasks-runner/prune-task-graph.d.ts +17 -0
- package/dist/src/tasks-runner/prune-task-graph.js +45 -0
- package/dist/src/tasks-runner/run-command.d.ts +41 -5
- package/dist/src/tasks-runner/run-command.js +98 -22
- package/dist/src/tasks-runner/running-tasks/batch-process.d.ts +93 -19
- package/dist/src/tasks-runner/running-tasks/batch-process.js +184 -88
- package/dist/src/tasks-runner/task-io-service.d.ts +11 -3
- package/dist/src/tasks-runner/task-io-service.js +14 -5
- package/dist/src/tasks-runner/task-orchestrator.d.ts +71 -4
- package/dist/src/tasks-runner/task-orchestrator.js +266 -66
- package/dist/src/tasks-runner/tasks-runner.d.ts +2 -0
- package/dist/src/tasks-runner/terminal-output-path.d.ts +11 -0
- package/dist/src/tasks-runner/terminal-output-path.js +18 -0
- package/dist/src/tasks-runner/utils.d.ts +5 -0
- package/dist/src/tasks-runner/utils.js +14 -2
- package/dist/src/ultracache/config.d.ts +21 -0
- package/dist/src/ultracache/config.js +29 -0
- package/dist/src/ultracache/fetch.d.ts +21 -0
- package/dist/src/ultracache/fetch.js +43 -0
- package/dist/src/ultracache/overrides.d.ts +17 -0
- package/dist/src/ultracache/overrides.js +61 -0
- package/dist/src/ultracache/report.d.ts +13 -0
- package/dist/src/ultracache/report.js +62 -0
- package/dist/src/ultracache/store.d.ts +41 -0
- package/dist/src/ultracache/store.js +158 -0
- package/dist/src/utils/ab-testing.d.ts +4 -1
- package/dist/src/utils/ab-testing.js +22 -19
- package/dist/src/utils/chunkify.d.ts +1 -7
- package/dist/src/utils/chunkify.js +2 -8
- package/dist/src/utils/command-line-utils.d.ts +20 -0
- package/dist/src/utils/command-line-utils.js +10 -3
- package/dist/src/utils/create-cli-options.d.ts +6 -0
- package/dist/src/utils/create-cli-options.js +29 -0
- package/dist/src/utils/db-connection.d.ts +2 -0
- package/dist/src/utils/db-connection.js +2 -0
- package/dist/src/utils/formatters/index.d.ts +6 -0
- package/dist/src/utils/formatters/index.js +5 -0
- package/dist/src/utils/formatters/prettier.d.ts +0 -8
- package/dist/src/utils/formatters/prettier.js +4 -26
- package/dist/src/utils/git-utils.d.ts +19 -0
- package/dist/src/utils/git-utils.js +97 -39
- package/dist/src/utils/handle-errors.js +5 -43
- package/dist/src/utils/http-client.d.ts +27 -0
- package/dist/src/utils/http-client.js +193 -0
- package/dist/src/utils/installed-nx-version.js +2 -48
- package/dist/src/utils/json-diff.d.ts +4 -2
- package/dist/src/utils/json-diff.js +6 -94
- package/dist/src/utils/min-release-age/packument.js +1 -1
- package/dist/src/utils/nx-cloud-utils.d.ts +2 -0
- package/dist/src/utils/nx-cloud-utils.js +6 -1
- package/dist/src/utils/output.d.ts +22 -3
- package/dist/src/utils/output.js +28 -5
- package/dist/src/utils/package-json.d.ts +25 -0
- package/dist/src/utils/package-json.js +49 -6
- package/dist/src/utils/package-manager.d.ts +6 -0
- package/dist/src/utils/package-manager.js +10 -0
- package/dist/src/utils/plugins/plugin-capabilities.js +7 -2
- package/dist/src/utils/project-graph-utils.d.ts +2 -0
- package/dist/src/utils/project-graph-utils.js +12 -0
- package/dist/src/utils/provenance.js +20 -4
- package/dist/src/utils/serialize-overrides-into-command-line.js +2 -4
- package/dist/src/utils/workspace-context.d.ts +51 -3
- package/dist/src/utils/workspace-context.js +174 -10
- package/package.json +38 -100
- package/schemas/nx-schema.json +38 -0
- package/schemas/project-schema.json +35 -0
- package/dist/src/daemon/server/file-watching/route-workspace-changes.d.ts +0 -9
- package/dist/src/daemon/server/file-watching/route-workspace-changes.js +0 -76
- package/dist/src/daemon/server/watcher.d.ts +0 -18
- package/dist/src/daemon/server/watcher.js +0 -126
- package/dist/src/nx-cloud/utilities/axios.d.ts +0 -4
- package/dist/src/nx-cloud/utilities/axios.js +0 -17
- package/dist/src/project-graph/affected/locators/project-glob-changes.d.ts +0 -2
- package/dist/src/project-graph/affected/locators/project-glob-changes.js +0 -47
- package/dist/src/project-graph/affected/locators/workspace-json-changes.d.ts +0 -4
- package/dist/src/project-graph/affected/locators/workspace-json-changes.js +0 -47
- package/dist/src/project-graph/affected/locators/workspace-projects.d.ts +0 -3
- package/dist/src/project-graph/affected/locators/workspace-projects.js +0 -74
- package/dist/src/utils/collapse-expanded-outputs.d.ts +0 -10
- 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,
|
|
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,
|
|
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
|
-
|
|
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,
|
|
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
|
-
*
|
|
778
|
-
*
|
|
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
|
-
|
|
805
|
-
|
|
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,
|
|
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
|
-
|
|
863
|
-
|
|
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: [
|
|
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,
|
|
1039
|
+
async function createJsonOutput(prunedGraph, rawGraph, taskSelection) {
|
|
947
1040
|
const response = {
|
|
948
1041
|
graph: prunedGraph,
|
|
949
1042
|
};
|
|
950
|
-
if (
|
|
951
|
-
const taskGraph =
|
|
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.
|
|
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
|
|
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.
|
|
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.
|
|
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>;
|