@ohos-ports/nx 23.3.0-beta.2 → 24.0.2-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -6
- package/dist/bin/nx.js +2 -2
- package/dist/bin/post-install.js +5 -3
- package/dist/nx-cloud-internals.d.ts +1 -0
- package/dist/nx-cloud-internals.js +7 -1
- package/dist/src/adapter/ngcli-adapter.js +2 -2
- package/dist/src/ai/clone-ai-config-repo.js +49 -12
- package/dist/src/command-line/add/add.d.ts +2 -0
- package/dist/src/command-line/add/add.js +23 -5
- package/dist/src/command-line/affected/affected.js +2 -2
- package/dist/src/command-line/configure-ai-agents/configure-ai-agents.js +0 -12
- package/dist/src/command-line/graph/graph.js +38 -10
- package/dist/src/command-line/init/command-object.js +0 -12
- package/dist/src/command-line/init/implementation/add-nx-to-nest.js +21 -62
- package/dist/src/command-line/init/init-v2.js +0 -2
- package/dist/src/command-line/migrate/agentic/close-agent-session.d.ts +1 -1
- package/dist/src/command-line/migrate/agentic/close-agent-session.js +4 -3
- package/dist/src/command-line/migrate/agentic/definitions.d.ts +1 -3
- package/dist/src/command-line/migrate/agentic/definitions.js +5 -97
- package/dist/src/command-line/migrate/agentic/handoff-gitignore.d.ts +7 -45
- package/dist/src/command-line/migrate/agentic/handoff-gitignore.js +9 -51
- package/dist/src/command-line/migrate/agentic/handoff.d.ts +1 -43
- package/dist/src/command-line/migrate/agentic/handoff.js +3 -119
- package/dist/src/command-line/migrate/agentic/instruction-files.d.ts +0 -21
- package/dist/src/command-line/migrate/agentic/instruction-files.js +6 -27
- package/dist/src/command-line/migrate/agentic/master/run-master-session.d.ts +19 -1
- package/dist/src/command-line/migrate/agentic/master/run-master-session.js +88 -49
- package/dist/src/command-line/migrate/agentic/master/spawn-master.d.ts +1 -0
- package/dist/src/command-line/migrate/agentic/master/spawn-master.js +86 -24
- package/dist/src/command-line/migrate/agentic/print-dropped-agent-context.d.ts +2 -2
- package/dist/src/command-line/migrate/agentic/print-dropped-agent-context.js +2 -2
- package/dist/src/command-line/migrate/agentic/prompts/fragments.d.ts +1 -12
- package/dist/src/command-line/migrate/agentic/prompts/fragments.js +8 -17
- package/dist/src/command-line/migrate/agentic/prompts/shared-rendering.d.ts +0 -15
- package/dist/src/command-line/migrate/agentic/prompts/shared-rendering.js +3 -100
- package/dist/src/command-line/migrate/agentic/select.d.ts +12 -6
- package/dist/src/command-line/migrate/agentic/select.js +38 -8
- package/dist/src/command-line/migrate/agentic/types.d.ts +9 -68
- package/dist/src/command-line/migrate/agentic/types.js +6 -8
- package/dist/src/command-line/migrate/command-object.js +6 -10
- package/dist/src/command-line/migrate/execute-migration.d.ts +6 -6
- package/dist/src/command-line/migrate/execute-migration.js +25 -15
- package/dist/src/command-line/migrate/migrate-analytics.d.ts +18 -1
- package/dist/src/command-line/migrate/migrate-analytics.js +38 -0
- package/dist/src/command-line/migrate/migrate-commits.d.ts +29 -17
- package/dist/src/command-line/migrate/migrate-commits.js +86 -32
- package/dist/src/command-line/migrate/migrate-config.d.ts +6 -6
- package/dist/src/command-line/migrate/migrate-config.js +12 -6
- package/dist/src/command-line/migrate/migrate-output.d.ts +1 -6
- package/dist/src/command-line/migrate/migrate-output.js +1 -10
- package/dist/src/command-line/migrate/migrate.d.ts +6 -30
- package/dist/src/command-line/migrate/migrate.js +257 -255
- package/dist/src/command-line/migrate/resolve-package-version.d.ts +2 -4
- package/dist/src/command-line/migrate/resolve-package-version.js +2 -35
- package/dist/src/command-line/migrate/run/agent-output.d.ts +2 -0
- package/dist/src/command-line/migrate/run/agent-output.js +9 -0
- package/dist/src/command-line/migrate/run/broker.d.ts +14 -5
- package/dist/src/command-line/migrate/run/broker.js +69 -21
- package/dist/src/command-line/migrate/run/clean-retry.js +4 -2
- package/dist/src/command-line/migrate/run/existing-run-report.d.ts +1 -1
- package/dist/src/command-line/migrate/run/existing-run-report.js +7 -5
- package/dist/src/command-line/migrate/run/give-up.d.ts +4 -3
- package/dist/src/command-line/migrate/run/give-up.js +8 -5
- package/dist/src/command-line/migrate/run/index.d.ts +7 -5
- package/dist/src/command-line/migrate/run/index.js +16 -1
- package/dist/src/command-line/migrate/run/issues.js +7 -2
- package/dist/src/command-line/migrate/run/orchestrator.d.ts +61 -4
- package/dist/src/command-line/migrate/run/orchestrator.js +397 -133
- package/dist/src/command-line/migrate/run/run-state.d.ts +17 -1
- package/dist/src/command-line/migrate/run/run-state.js +41 -2
- package/dist/src/command-line/migrate/run/runbook.d.ts +1 -0
- package/dist/src/command-line/migrate/run/runbook.js +115 -18
- package/dist/src/command-line/migrate/run/state-lock.d.ts +29 -4
- package/dist/src/command-line/migrate/run/state-lock.js +102 -10
- package/dist/src/command-line/migrate/run/state-machine.js +4 -1
- package/dist/src/command-line/migrate/run/util.d.ts +7 -2
- package/dist/src/command-line/migrate/run/util.js +30 -3
- package/dist/src/command-line/migrate/run/worker.d.ts +1 -1
- package/dist/src/command-line/migrate/run/worker.js +252 -250
- package/dist/src/command-line/migrate/sort-migrations.d.ts +1 -7
- package/dist/src/command-line/migrate/sort-migrations.js +1 -12
- package/dist/src/command-line/nx-cloud/connect/connect-to-nx-cloud.js +17 -12
- package/dist/src/command-line/release/changelog.js +9 -6
- package/dist/src/command-line/release/config/config.d.ts +1 -0
- package/dist/src/command-line/release/config/config.js +48 -9
- package/dist/src/command-line/release/release.js +2 -2
- package/dist/src/command-line/release/utils/git.js +8 -7
- package/dist/src/command-line/release/utils/interpolate-release-config.d.ts +6 -0
- package/dist/src/command-line/release/utils/interpolate-release-config.js +39 -0
- package/dist/src/command-line/release/utils/release-graph.d.ts +5 -0
- package/dist/src/command-line/release/utils/release-graph.js +1 -0
- package/dist/src/command-line/release/utils/remote-release-clients/github.js +5 -6
- package/dist/src/command-line/release/utils/remote-release-clients/gitlab.js +5 -6
- package/dist/src/command-line/release/utils/resolve-changelog-renderer.js +2 -2
- package/dist/src/command-line/release/utils/shared.js +10 -10
- package/dist/src/command-line/release/utils/version-plan-utils.d.ts +3 -12
- package/dist/src/command-line/release/utils/version-plan-utils.js +33 -55
- package/dist/src/command-line/release/version/version-actions.js +2 -1
- package/dist/src/command-line/release/version.js +5 -2
- package/dist/src/command-line/reset/reset.js +58 -62
- package/dist/src/command-line/run/executor-utils.js +1 -0
- package/dist/src/command-line/run/run-one.d.ts +20 -1
- package/dist/src/command-line/run/run-one.js +153 -5
- package/dist/src/command-line/run/run.js +2 -1
- package/dist/src/command-line/show/projects.js +5 -3
- package/dist/src/command-line/show/show-target/info.d.ts +10 -1
- package/dist/src/command-line/show/show-target/info.js +100 -15
- package/dist/src/command-line/show/show-target/inputs.js +10 -2
- package/dist/src/command-line/show/show-target/utils.js +1 -0
- package/dist/src/command-line/watch/command-object.js +3 -22
- package/dist/src/command-line/watch/watch.d.ts +0 -7
- package/dist/src/command-line/watch/watch.js +1 -1
- package/dist/src/command-line/yargs-utils/shared-options.js +1 -1
- package/dist/src/config/misc-interfaces.d.ts +18 -0
- package/dist/src/config/nx-json.d.ts +22 -11
- package/dist/src/config/task-graph.d.ts +1 -1
- package/dist/src/config/workspace-json-project-json.d.ts +88 -0
- package/dist/src/core/graph/main.js +1 -1
- package/dist/src/core/graph/runtime.js +1 -1
- package/dist/src/core/graph/styles.css +1 -1
- package/dist/src/core/graph/styles.js +1 -1
- package/dist/src/daemon/client/client.d.ts +15 -0
- package/dist/src/daemon/client/client.js +181 -71
- package/dist/src/daemon/client/daemon-socket-messenger.d.ts +1 -1
- package/dist/src/daemon/client/daemon-socket-messenger.js +2 -2
- package/dist/src/daemon/server/client-socket-context.js +1 -1
- package/dist/src/daemon/server/handle-process-in-background.js +21 -9
- package/dist/src/daemon/server/handle-select-affected-tasks.d.ts +2 -1
- package/dist/src/daemon/server/handle-select-affected-tasks.js +21 -13
- package/dist/src/daemon/server/native-js-loader.d.ts +1 -0
- package/dist/src/daemon/server/native-js-loader.js +21 -0
- package/dist/src/daemon/server/project-graph-incremental-recomputation.js +4 -8
- package/dist/src/daemon/server/server.d.ts +2 -1
- package/dist/src/daemon/server/server.js +17 -4
- package/dist/src/daemon/server/shutdown-utils.js +0 -3
- package/dist/src/daemon/server/start.d.ts +1 -0
- package/dist/src/daemon/server/start.js +2 -0
- package/dist/src/daemon/socket-utils.d.ts +11 -9
- package/dist/src/daemon/socket-utils.js +31 -61
- package/dist/src/daemon/tmp-dir.d.ts +19 -14
- package/dist/src/daemon/tmp-dir.js +142 -354
- package/dist/src/devkit-exports.d.ts +9 -1
- package/dist/src/devkit-exports.js +12 -1
- package/dist/src/devkit-internals.d.ts +6 -5
- package/dist/src/devkit-internals.js +13 -4
- package/dist/src/executors/run-commands/run-commands.impl.d.ts +4 -2
- package/dist/src/executors/run-commands/run-commands.impl.js +53 -27
- package/dist/src/executors/run-commands/running-tasks.d.ts +13 -4
- package/dist/src/executors/run-commands/running-tasks.js +148 -95
- package/dist/src/executors/run-commands/schema.json +1 -1
- package/dist/src/hasher/check-task-files.js +5 -8
- package/dist/src/hasher/file-hasher.js +9 -7
- package/dist/src/hasher/hash-task.js +4 -0
- package/dist/src/hasher/native-task-hasher-impl.js +3 -1
- package/dist/src/hasher/task-hasher.d.ts +2 -0
- package/dist/src/hasher/task-hasher.js +4 -1
- package/dist/src/migrations/update-23-2-0/set-cache-on-executor-target-defaults.d.ts +1 -2
- package/dist/src/migrations/update-23-2-0/set-cache-on-executor-target-defaults.js +6 -11
- package/dist/src/migrations/update-23-2-0/set-cache-on-executor-target-defaults.md +2 -2
- package/dist/src/migrations/update-24-0-0/enable-legacy-affected.d.ts +4 -0
- package/dist/src/migrations/update-24-0-0/enable-legacy-affected.js +15 -0
- package/dist/src/migrations/update-24-0-0/enable-legacy-affected.md +30 -0
- package/dist/src/migrations/update-24-0-0/find-custom-hashers.d.ts +3 -0
- package/dist/src/migrations/update-24-0-0/find-custom-hashers.js +100 -0
- package/dist/src/migrations/update-24-0-0/find-custom-hashers.md +63 -0
- package/dist/src/migrations/update-24-0-0/move-custom-hashers-to-inputs.md +146 -0
- package/dist/src/migrations/update-24-0-0/rename-ultracache-ignore-options.d.ts +3 -0
- package/dist/src/migrations/update-24-0-0/rename-ultracache-ignore-options.js +130 -0
- package/dist/src/migrations/update-24-0-0/rename-ultracache-ignore-options.md +62 -0
- package/dist/src/native/assert-supported-platform.js +1 -1
- package/dist/src/native/index.d.ts +238 -18
- package/dist/src/native/index.js +6 -1
- package/dist/src/native/native-bindings.js +15 -6
- package/dist/src/native/nx.openharmony-arm64.node +0 -0
- package/dist/src/native/nx.wasi-browser.js +1 -0
- package/dist/src/native/nx.wasi.cjs +1 -0
- package/dist/src/native/nx.wasm32-wasi.debug.wasm +0 -0
- package/dist/src/native/nx.wasm32-wasi.wasm +0 -0
- package/dist/src/nx-cloud/update-manager.d.ts +14 -0
- package/dist/src/nx-cloud/update-manager.js +237 -50
- package/dist/src/plugins/js/lock-file/pnpm-parser.js +3 -4
- package/dist/src/plugins/js/lock-file/pruned-output.d.ts +2 -2
- package/dist/src/plugins/js/lock-file/pruned-output.js +4 -4
- package/dist/src/plugins/js/utils/register.js +9 -4
- package/dist/src/project-graph/affected/affected-tasks.d.ts +9 -6
- package/dist/src/project-graph/affected/affected-tasks.js +31 -7
- package/dist/src/project-graph/plugins/isolation/isolated-plugin.js +7 -0
- package/dist/src/project-graph/plugins/loaded-nx-plugin.js +49 -6
- package/dist/src/project-graph/utils/project-configuration/target-merging.js +1 -1
- package/dist/src/project-graph/utils/project-configuration/target-normalization.js +12 -133
- package/dist/src/project-graph/utils/project-configuration-utils.js +2 -2
- package/dist/src/project-graph/utils/retrieve-workspace-files.js +27 -6
- package/dist/src/tasks-runner/create-task-graph.d.ts +8 -7
- package/dist/src/tasks-runner/create-task-graph.js +50 -27
- package/dist/src/tasks-runner/default-tasks-runner.js +1 -1
- package/dist/src/tasks-runner/init-tasks-runner.js +116 -59
- package/dist/src/tasks-runner/life-cycle.d.ts +4 -1
- package/dist/src/tasks-runner/life-cycle.js +7 -0
- package/dist/src/tasks-runner/life-cycles/performance-analysis.d.ts +5 -2
- package/dist/src/tasks-runner/life-cycles/performance-analysis.js +13 -7
- package/dist/src/tasks-runner/life-cycles/performance-life-cycle.d.ts +4 -3
- package/dist/src/tasks-runner/life-cycles/performance-life-cycle.js +9 -2
- package/dist/src/tasks-runner/life-cycles/static-run-many-terminal-output-life-cycle.js +5 -2
- package/dist/src/tasks-runner/life-cycles/static-run-one-terminal-output-life-cycle.js +4 -1
- package/dist/src/tasks-runner/life-cycles/summary-terminal-output-life-cycle.js +5 -1
- package/dist/src/tasks-runner/pseudo-ipc.d.ts +1 -0
- package/dist/src/tasks-runner/pseudo-ipc.js +4 -0
- package/dist/src/tasks-runner/pseudo-terminal.d.ts +1 -1
- package/dist/src/tasks-runner/pseudo-terminal.js +2 -2
- package/dist/src/tasks-runner/readiness/executor-ready-signal.d.ts +7 -0
- package/dist/src/tasks-runner/readiness/executor-ready-signal.js +43 -0
- package/dist/src/tasks-runner/readiness/probes.d.ts +14 -0
- package/dist/src/tasks-runner/readiness/probes.js +101 -0
- package/dist/src/tasks-runner/readiness/ready-signal-server.d.ts +18 -0
- package/dist/src/tasks-runner/readiness/ready-signal-server.js +72 -0
- package/dist/src/tasks-runner/readiness/ready-signal.d.ts +33 -0
- package/dist/src/tasks-runner/readiness/ready-signal.js +92 -0
- package/dist/src/tasks-runner/readiness/ready-when.d.ts +84 -0
- package/dist/src/tasks-runner/readiness/ready-when.js +371 -0
- package/dist/src/tasks-runner/readiness/startup-host.d.ts +1 -0
- package/dist/src/tasks-runner/readiness/startup-host.js +32 -0
- package/dist/src/tasks-runner/run-command.d.ts +6 -2
- package/dist/src/tasks-runner/run-command.js +21 -31
- package/dist/src/tasks-runner/run-outcome.d.ts +16 -0
- package/dist/src/tasks-runner/run-outcome.js +39 -0
- package/dist/src/tasks-runner/running-tasks/batch-process.js +6 -0
- package/dist/src/tasks-runner/running-tasks/node-child-process.js +5 -4
- package/dist/src/tasks-runner/running-tasks/running-task.d.ts +1 -1
- package/dist/src/tasks-runner/task-env.d.ts +10 -0
- package/dist/src/tasks-runner/task-env.js +37 -5
- package/dist/src/tasks-runner/task-graph-utils.d.ts +9 -6
- package/dist/src/tasks-runner/task-graph-utils.js +17 -12
- package/dist/src/tasks-runner/task-orchestrator.d.ts +62 -18
- package/dist/src/tasks-runner/task-orchestrator.js +750 -150
- package/dist/src/tasks-runner/tasks-runner.d.ts +1 -1
- package/dist/src/tasks-runner/tasks-schedule.d.ts +18 -1
- package/dist/src/tasks-runner/tasks-schedule.js +63 -6
- package/dist/src/tasks-runner/tokens.d.ts +54 -0
- package/dist/src/tasks-runner/tokens.js +161 -0
- package/dist/src/tasks-runner/utils.d.ts +35 -6
- package/dist/src/tasks-runner/utils.js +149 -68
- package/dist/src/ultracache/ci-status.d.ts +24 -0
- package/dist/src/ultracache/ci-status.js +87 -0
- package/dist/src/ultracache/config.d.ts +3 -3
- package/dist/src/ultracache/config.js +4 -4
- package/dist/src/ultracache/fetch.d.ts +2 -0
- package/dist/src/ultracache/fetch.js +1 -0
- package/dist/src/ultracache/overrides.js +4 -0
- package/dist/src/utils/acknowledge-build-scripts.d.ts +34 -1
- package/dist/src/utils/acknowledge-build-scripts.js +171 -32
- package/dist/src/utils/child-process.js +2 -1
- package/dist/src/utils/find-matching-projects.js +9 -6
- package/dist/src/utils/git-utils.d.ts +12 -5
- package/dist/src/utils/git-utils.js +69 -11
- package/dist/src/utils/long-running-target.d.ts +1 -3
- package/dist/src/utils/long-running-target.js +1 -3
- package/dist/src/utils/output.d.ts +4 -3
- package/dist/src/utils/output.js +4 -3
- package/dist/src/utils/owned-private-dir.d.ts +1 -17
- package/dist/src/utils/owned-private-dir.js +10 -62
- package/dist/src/utils/package-manager.d.ts +8 -0
- package/dist/src/utils/package-manager.js +65 -8
- package/dist/src/utils/perf-hooks.d.ts +1 -0
- package/dist/src/utils/plugins/core-plugins.js +5 -1
- package/dist/src/utils/progress-topics.d.ts +1 -0
- package/dist/src/utils/progress-topics.js +1 -0
- package/dist/src/utils/safe-spawn.js +1 -5
- package/dist/src/utils/shell-quoting.d.ts +8 -1
- package/dist/src/utils/shell-quoting.js +12 -1
- package/dist/src/utils/spawn-without-terminal.d.ts +27 -0
- package/dist/src/utils/spawn-without-terminal.js +110 -0
- package/dist/src/utils/string-similarity.d.ts +38 -0
- package/dist/src/utils/string-similarity.js +108 -0
- package/migrations.json +20 -6
- package/package.json +15 -24
- package/schemas/migrations-schema.json +11 -0
- package/schemas/nx-schema.json +133 -11
- package/schemas/project-schema.json +114 -4
- package/dist/src/command-line/migrate/agentic/prompts/generic-validation.d.ts +0 -56
- package/dist/src/command-line/migrate/agentic/prompts/generic-validation.js +0 -67
- package/dist/src/command-line/migrate/agentic/prompts/hybrid-prompt-migration.d.ts +0 -49
- package/dist/src/command-line/migrate/agentic/prompts/hybrid-prompt-migration.js +0 -53
- package/dist/src/command-line/migrate/agentic/prompts/prompt-migration.d.ts +0 -26
- package/dist/src/command-line/migrate/agentic/prompts/prompt-migration.js +0 -27
- package/dist/src/command-line/migrate/agentic/prompts/system-prompt.d.ts +0 -70
- package/dist/src/command-line/migrate/agentic/prompts/system-prompt.js +0 -113
- package/dist/src/command-line/migrate/agentic/run-step.d.ts +0 -68
- package/dist/src/command-line/migrate/agentic/run-step.js +0 -148
- package/dist/src/command-line/migrate/agentic/runner.d.ts +0 -21
- package/dist/src/command-line/migrate/agentic/runner.js +0 -262
- package/dist/src/migrations/update-23-0-0/consolidate-release-tag-config.d.ts +0 -9
- package/dist/src/migrations/update-23-0-0/consolidate-release-tag-config.js +0 -18
- package/dist/src/tasks-runner/legacy-depends-on-warning.d.ts +0 -18
- package/dist/src/tasks-runner/legacy-depends-on-warning.js +0 -109
|
@@ -20,7 +20,7 @@ export type TasksRunner<T = unknown> = (tasks: Task[], options: T, context?: {
|
|
|
20
20
|
hasher?: TaskHasher;
|
|
21
21
|
daemon?: DaemonClient;
|
|
22
22
|
/** Tasks hashed only once the tasks they read outputs from have run. */
|
|
23
|
-
|
|
23
|
+
hashingDeferredTaskIds?: ReadonlySet<string>;
|
|
24
24
|
}) => any | Promise<{
|
|
25
25
|
[id: string]: TaskStatus;
|
|
26
26
|
}>;
|
|
@@ -2,16 +2,23 @@ import { DefaultTasksRunnerOptions } from './default-tasks-runner';
|
|
|
2
2
|
import { Task, TaskGraph } from '../config/task-graph';
|
|
3
3
|
import { ProjectGraph } from '../config/project-graph';
|
|
4
4
|
import { ProjectConfiguration } from '../config/workspace-json-project-json';
|
|
5
|
+
import { TaskReadiness } from '../native';
|
|
5
6
|
export interface Batch {
|
|
6
7
|
id: string;
|
|
7
8
|
executorName: string;
|
|
8
9
|
taskGraph: TaskGraph;
|
|
9
10
|
}
|
|
11
|
+
export interface TasksScheduleHooks {
|
|
12
|
+
readinessElsewhere?: (producerId: string) => TaskReadiness | null;
|
|
13
|
+
onReadinessHold?: (producerId: string) => void;
|
|
14
|
+
}
|
|
10
15
|
export declare class TasksSchedule {
|
|
11
16
|
private readonly projectGraph;
|
|
12
17
|
private readonly projects;
|
|
13
18
|
private readonly taskGraph;
|
|
14
19
|
private readonly options;
|
|
20
|
+
private readonly fullTaskGraph;
|
|
21
|
+
private readonly hooks;
|
|
15
22
|
private notScheduledTaskGraph;
|
|
16
23
|
private reverseTaskDeps;
|
|
17
24
|
private reverseProjectGraph;
|
|
@@ -19,14 +26,21 @@ export declare class TasksSchedule {
|
|
|
19
26
|
private scheduledBatches;
|
|
20
27
|
private scheduledTasks;
|
|
21
28
|
private runningTasks;
|
|
29
|
+
private pendingStart;
|
|
22
30
|
private completedTasks;
|
|
31
|
+
private readiness;
|
|
32
|
+
private probedProducers;
|
|
23
33
|
private scheduleRequestsExecutionChain;
|
|
24
34
|
private estimatedTaskTimings;
|
|
25
35
|
private projectDependencies;
|
|
26
36
|
private batchCounters;
|
|
27
|
-
constructor(projectGraph: ProjectGraph, projects: Record<string, ProjectConfiguration>, taskGraph: TaskGraph, options: DefaultTasksRunnerOptions);
|
|
37
|
+
constructor(projectGraph: ProjectGraph, projects: Record<string, ProjectConfiguration>, taskGraph: TaskGraph, options: DefaultTasksRunnerOptions, fullTaskGraph?: TaskGraph, hooks?: TasksScheduleHooks);
|
|
28
38
|
init(): Promise<void>;
|
|
29
39
|
scheduleNextTasks(): Promise<void>;
|
|
40
|
+
markContinuousTaskStarted(taskId: string): void;
|
|
41
|
+
markReady(taskId: string): void;
|
|
42
|
+
markReadinessFailed(taskId: string): void;
|
|
43
|
+
markReadinessPending(taskId: string): void;
|
|
30
44
|
hasTasks(): boolean;
|
|
31
45
|
complete(taskIds: string[]): void;
|
|
32
46
|
getAllScheduledTasks(): {
|
|
@@ -42,7 +56,10 @@ export declare class TasksSchedule {
|
|
|
42
56
|
private scheduleBatches;
|
|
43
57
|
private scheduleBatch;
|
|
44
58
|
private processTaskForBatches;
|
|
59
|
+
private probedProducersOf;
|
|
60
|
+
private isProducerReady;
|
|
45
61
|
private canBatchTaskBeScheduled;
|
|
62
|
+
private areContinuousDependenciesReady;
|
|
46
63
|
private canBeScheduled;
|
|
47
64
|
getEstimatedTaskTimings(): Record<string, number>;
|
|
48
65
|
}
|
|
@@ -5,12 +5,15 @@ const utils_1 = require("./utils");
|
|
|
5
5
|
const project_graph_utils_1 = require("../utils/project-graph-utils");
|
|
6
6
|
const operators_1 = require("../project-graph/operators");
|
|
7
7
|
const task_history_1 = require("../utils/task-history");
|
|
8
|
+
const ready_when_1 = require("./readiness/ready-when");
|
|
8
9
|
class TasksSchedule {
|
|
9
|
-
constructor(projectGraph, projects, taskGraph, options) {
|
|
10
|
+
constructor(projectGraph, projects, taskGraph, options, fullTaskGraph = taskGraph, hooks = {}) {
|
|
10
11
|
this.projectGraph = projectGraph;
|
|
11
12
|
this.projects = projects;
|
|
12
13
|
this.taskGraph = taskGraph;
|
|
13
14
|
this.options = options;
|
|
15
|
+
this.fullTaskGraph = fullTaskGraph;
|
|
16
|
+
this.hooks = hooks;
|
|
14
17
|
this.notScheduledTaskGraph = this.taskGraph;
|
|
15
18
|
this.reverseTaskDeps = (0, utils_1.calculateReverseDeps)(this.taskGraph);
|
|
16
19
|
this.reverseProjectGraph = (0, operators_1.reverse)(this.projectGraph);
|
|
@@ -18,7 +21,13 @@ class TasksSchedule {
|
|
|
18
21
|
this.scheduledBatches = [];
|
|
19
22
|
this.scheduledTasks = [];
|
|
20
23
|
this.runningTasks = new Set();
|
|
24
|
+
// Continuous tasks with ready edges, queued but not spawned; their
|
|
25
|
+
// dependents stay unreleased
|
|
26
|
+
this.pendingStart = new Set();
|
|
21
27
|
this.completedTasks = new Set();
|
|
28
|
+
this.readiness = new Map();
|
|
29
|
+
// Read from the full graph: an agent worker's own graph has no edges
|
|
30
|
+
this.probedProducers = (0, ready_when_1.getReadyDependencies)(this.fullTaskGraph, this.projectGraph);
|
|
22
31
|
this.scheduleRequestsExecutionChain = Promise.resolve();
|
|
23
32
|
this.estimatedTaskTimings = {};
|
|
24
33
|
this.projectDependencies = {};
|
|
@@ -38,6 +47,18 @@ class TasksSchedule {
|
|
|
38
47
|
this.scheduleRequestsExecutionChain.then(() => this.scheduleTasks());
|
|
39
48
|
await this.scheduleRequestsExecutionChain;
|
|
40
49
|
}
|
|
50
|
+
markContinuousTaskStarted(taskId) {
|
|
51
|
+
this.pendingStart.delete(taskId);
|
|
52
|
+
}
|
|
53
|
+
markReady(taskId) {
|
|
54
|
+
this.readiness.set(taskId, 'ready');
|
|
55
|
+
}
|
|
56
|
+
markReadinessFailed(taskId) {
|
|
57
|
+
this.readiness.set(taskId, 'failed');
|
|
58
|
+
}
|
|
59
|
+
markReadinessPending(taskId) {
|
|
60
|
+
this.readiness.delete(taskId);
|
|
61
|
+
}
|
|
41
62
|
hasTasks() {
|
|
42
63
|
return (this.scheduledBatches.length +
|
|
43
64
|
this.scheduledTasks.length +
|
|
@@ -116,6 +137,10 @@ class TasksSchedule {
|
|
|
116
137
|
for (const taskId of taskIds) {
|
|
117
138
|
this.scheduledTasks.push(taskId);
|
|
118
139
|
this.runningTasks.add(taskId);
|
|
140
|
+
const task = this.taskGraph.tasks[taskId];
|
|
141
|
+
if (task.continuous && this.probedProducersOf(task).length > 0) {
|
|
142
|
+
this.pendingStart.add(taskId);
|
|
143
|
+
}
|
|
119
144
|
}
|
|
120
145
|
this.sortScheduledTasks();
|
|
121
146
|
}
|
|
@@ -182,6 +207,15 @@ class TasksSchedule {
|
|
|
182
207
|
if (!this.canBatchTaskBeScheduled(task, batches[rootExecutorName])) {
|
|
183
208
|
return;
|
|
184
209
|
}
|
|
210
|
+
// A batch never waits, so a task joins one once its probed producers are
|
|
211
|
+
// ready. A continuous task that something waits on, or that declares a
|
|
212
|
+
// probe, runs alone: only that path records its start and readiness
|
|
213
|
+
if ((task.continuous &&
|
|
214
|
+
(this.reverseTaskDeps[task.id].length > 0 ||
|
|
215
|
+
(0, ready_when_1.getReadyWhenConfig)(task, this.projectGraph) != null)) ||
|
|
216
|
+
this.probedProducersOf(task).some((id) => !this.isProducerReady(id))) {
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
185
219
|
const { batchImplementationFactory, preferBatch } = (0, utils_1.getExecutorForTask)(task, this.projects);
|
|
186
220
|
const executorName = (0, utils_1.getExecutorNameForTask)(task, this.projectGraph);
|
|
187
221
|
if (rootExecutorName !== executorName) {
|
|
@@ -222,17 +256,40 @@ class TasksSchedule {
|
|
|
222
256
|
await this.processTaskForBatches(batches, depTask, rootExecutorName, false, visitedInBatch);
|
|
223
257
|
}
|
|
224
258
|
}
|
|
259
|
+
probedProducersOf(task) {
|
|
260
|
+
return this.probedProducers[task.id] ?? [];
|
|
261
|
+
}
|
|
262
|
+
isProducerReady(producerId) {
|
|
263
|
+
if (this.taskGraph.tasks[producerId]) {
|
|
264
|
+
return this.readiness.get(producerId) === 'ready';
|
|
265
|
+
}
|
|
266
|
+
return this.hooks.readinessElsewhere?.(producerId) === 1 /* TaskReadiness.Ready */;
|
|
267
|
+
}
|
|
225
268
|
canBatchTaskBeScheduled(task, batchTaskGraph) {
|
|
226
269
|
// task self needs to support parallelism (undefined defaults to parallel)
|
|
227
|
-
// all deps have either completed or belong to the same batch
|
|
270
|
+
// all deps have either completed or belong to the same batch, and every
|
|
271
|
+
// continuous dep has started, and is ready where the edge asks for it
|
|
228
272
|
return (task.parallelism !== false &&
|
|
229
|
-
this.taskGraph.dependencies[task.id].every((id) => this.completedTasks.has(id) || !!batchTaskGraph?.tasks[id])
|
|
273
|
+
this.taskGraph.dependencies[task.id].every(({ id }) => this.completedTasks.has(id) || !!batchTaskGraph?.tasks[id]) &&
|
|
274
|
+
this.areContinuousDependenciesReady(task.id));
|
|
275
|
+
}
|
|
276
|
+
// A producer outside this task graph is polled by the task itself
|
|
277
|
+
areContinuousDependenciesReady(taskId) {
|
|
278
|
+
const started = this.taskGraph.continuousDependencies[taskId].every(({ id }) => this.runningTasks.has(id) && !this.pendingStart.has(id));
|
|
279
|
+
if (!started) {
|
|
280
|
+
return false;
|
|
281
|
+
}
|
|
282
|
+
const pendingProducers = this.probedProducersOf(this.taskGraph.tasks[taskId]).filter((id) => this.taskGraph.tasks[id] && !this.readiness.has(id));
|
|
283
|
+
for (const producerId of pendingProducers) {
|
|
284
|
+
this.hooks.onReadinessHold?.(producerId);
|
|
285
|
+
}
|
|
286
|
+
return pendingProducers.length === 0;
|
|
230
287
|
}
|
|
231
288
|
canBeScheduled(taskId) {
|
|
232
|
-
const hasDependenciesCompleted = this.taskGraph.dependencies[taskId].every((id) => this.completedTasks.has(id));
|
|
233
|
-
const
|
|
289
|
+
const hasDependenciesCompleted = this.taskGraph.dependencies[taskId].every(({ id }) => this.completedTasks.has(id));
|
|
290
|
+
const continuousDependenciesReady = this.areContinuousDependenciesReady(taskId);
|
|
234
291
|
// if dependencies have not completed, cannot schedule
|
|
235
|
-
if (!hasDependenciesCompleted || !
|
|
292
|
+
if (!hasDependenciesCompleted || !continuousDependenciesReady) {
|
|
236
293
|
return false;
|
|
237
294
|
}
|
|
238
295
|
// if there are no running tasks, can schedule anything
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nx tokens are `{name}` or `{name.path}`, optionally followed by `??`
|
|
3
|
+
* fallbacks that resolve left to right: `{options.port ?? env.PORT ?? 4200}`.
|
|
4
|
+
* Only the last part can be a literal, and the literal can contain tokens.
|
|
5
|
+
* Braces that don't start with a token are text, so `${VAR}` or
|
|
6
|
+
* `{{.State.Health.Status}}` stay as written.
|
|
7
|
+
*/
|
|
8
|
+
export type TokenNode = {
|
|
9
|
+
kind: 'text';
|
|
10
|
+
text: string;
|
|
11
|
+
} | Token;
|
|
12
|
+
export interface Token {
|
|
13
|
+
kind: 'token';
|
|
14
|
+
raw: string;
|
|
15
|
+
parts: TokenPart[];
|
|
16
|
+
}
|
|
17
|
+
export type TokenPart = Reference | {
|
|
18
|
+
kind: 'literal';
|
|
19
|
+
nodes: TokenNode[];
|
|
20
|
+
};
|
|
21
|
+
interface Reference {
|
|
22
|
+
kind: 'reference';
|
|
23
|
+
name: string;
|
|
24
|
+
path: string | undefined;
|
|
25
|
+
}
|
|
26
|
+
export interface TokenScope {
|
|
27
|
+
/** Whether `{name}` or `{name.path}` is a token. An `env.` fallback skips this check */
|
|
28
|
+
isToken(name: string, path: string | undefined): boolean;
|
|
29
|
+
/** The value of `{name}` or `{name.path}` */
|
|
30
|
+
read(name: string, path: string | undefined): unknown;
|
|
31
|
+
/**
|
|
32
|
+
* Where `env.` references read from. When absent, `env.` is not a token, so
|
|
33
|
+
* `{env.X}` stays text and a fallback `env.X` is a literal.
|
|
34
|
+
*/
|
|
35
|
+
env?: {
|
|
36
|
+
read: () => NodeJS.ProcessEnv;
|
|
37
|
+
} | {
|
|
38
|
+
reject: () => Error;
|
|
39
|
+
};
|
|
40
|
+
/** The text of a token with no value and no literal fallback */
|
|
41
|
+
noValue(token: string): string;
|
|
42
|
+
/** Whether a value counts as unset, as `undefined`, `null` and `''` always do */
|
|
43
|
+
isUnset?(value: unknown): boolean;
|
|
44
|
+
/** The text of a value; defaults to `String(value)` */
|
|
45
|
+
toText?(value: unknown, token: string): string;
|
|
46
|
+
}
|
|
47
|
+
export declare function parseTokens(template: string, scope: TokenScope): TokenNode[];
|
|
48
|
+
export declare function resolveTokens(template: string, scope: TokenScope): string;
|
|
49
|
+
export declare function renderTokens(nodes: TokenNode[], scope: TokenScope): string;
|
|
50
|
+
export declare function resolveToken(token: Token, scope: TokenScope, renderLiteral: (nodes: TokenNode[]) => string): string;
|
|
51
|
+
/** Walks a dotted path; a missing step yields `undefined` */
|
|
52
|
+
export declare function readPath(value: unknown, path: string | undefined): unknown;
|
|
53
|
+
export declare function readEnv(env: NodeJS.ProcessEnv, name: string): string | undefined;
|
|
54
|
+
export {};
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseTokens = parseTokens;
|
|
4
|
+
exports.resolveTokens = resolveTokens;
|
|
5
|
+
exports.renderTokens = renderTokens;
|
|
6
|
+
exports.resolveToken = resolveToken;
|
|
7
|
+
exports.readPath = readPath;
|
|
8
|
+
exports.readEnv = readEnv;
|
|
9
|
+
function parseTokens(template, scope) {
|
|
10
|
+
const nodes = [];
|
|
11
|
+
let text = '';
|
|
12
|
+
let index = 0;
|
|
13
|
+
let open;
|
|
14
|
+
while ((open = template.indexOf('{', index)) !== -1) {
|
|
15
|
+
const close = findClosingBrace(template, open);
|
|
16
|
+
const node = close === -1 ? null : parseToken(template.slice(open, close + 1), scope);
|
|
17
|
+
if (!node) {
|
|
18
|
+
// Not a token, but a token can still sit inside it: `{a,{projectRoot}}`
|
|
19
|
+
text += template.slice(index, open + 1);
|
|
20
|
+
index = open + 1;
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
text += template.slice(index, open);
|
|
24
|
+
if (text) {
|
|
25
|
+
nodes.push({ kind: 'text', text });
|
|
26
|
+
}
|
|
27
|
+
text = '';
|
|
28
|
+
nodes.push(node);
|
|
29
|
+
index = close + 1;
|
|
30
|
+
}
|
|
31
|
+
text += template.slice(index);
|
|
32
|
+
if (text) {
|
|
33
|
+
nodes.push({ kind: 'text', text });
|
|
34
|
+
}
|
|
35
|
+
return nodes;
|
|
36
|
+
}
|
|
37
|
+
function resolveTokens(template, scope) {
|
|
38
|
+
return renderTokens(parseTokens(template, scope), scope);
|
|
39
|
+
}
|
|
40
|
+
function renderTokens(nodes, scope) {
|
|
41
|
+
return nodes
|
|
42
|
+
.map((node) => node.kind === 'text'
|
|
43
|
+
? node.text
|
|
44
|
+
: resolveToken(node, scope, (literal) => renderTokens(literal, scope)))
|
|
45
|
+
.join('');
|
|
46
|
+
}
|
|
47
|
+
function resolveToken(token, scope, renderLiteral) {
|
|
48
|
+
for (const part of token.parts) {
|
|
49
|
+
if (part.kind === 'literal') {
|
|
50
|
+
return renderLiteral(part.nodes);
|
|
51
|
+
}
|
|
52
|
+
const value = part.name === 'env' && scope.env && 'read' in scope.env
|
|
53
|
+
? readEnv(scope.env.read(), part.path)
|
|
54
|
+
: scope.read(part.name, part.path);
|
|
55
|
+
if (value !== undefined &&
|
|
56
|
+
value !== null &&
|
|
57
|
+
value !== '' &&
|
|
58
|
+
!scope.isUnset?.(value)) {
|
|
59
|
+
return scope.toText ? scope.toText(value, token.raw) : String(value);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return scope.noValue(token.raw);
|
|
63
|
+
}
|
|
64
|
+
/** Walks a dotted path; a missing step yields `undefined` */
|
|
65
|
+
function readPath(value, path) {
|
|
66
|
+
if (path === undefined) {
|
|
67
|
+
return value;
|
|
68
|
+
}
|
|
69
|
+
for (const key of path.split('.')) {
|
|
70
|
+
if (value === undefined ||
|
|
71
|
+
value === null ||
|
|
72
|
+
!Object.hasOwn(value, key)) {
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
value = value[key];
|
|
76
|
+
}
|
|
77
|
+
return value;
|
|
78
|
+
}
|
|
79
|
+
function parseToken(raw, scope) {
|
|
80
|
+
const sources = splitFallbacks(raw.slice(1, -1));
|
|
81
|
+
if (!parseReference(sources[0], scope, true)) {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
const parts = sources.map((source, i) => {
|
|
85
|
+
const reference = parseReference(source, scope, i === 0);
|
|
86
|
+
if (reference) {
|
|
87
|
+
return reference;
|
|
88
|
+
}
|
|
89
|
+
if (i < sources.length - 1) {
|
|
90
|
+
throw new Error(`"${raw}" has a fallback after the literal "${source}" that can never be used`);
|
|
91
|
+
}
|
|
92
|
+
return { kind: 'literal', nodes: parseTokens(source, scope) };
|
|
93
|
+
});
|
|
94
|
+
if (scope.env && 'reject' in scope.env && readsEnv(parts)) {
|
|
95
|
+
throw scope.env.reject();
|
|
96
|
+
}
|
|
97
|
+
return { kind: 'token', raw, parts };
|
|
98
|
+
}
|
|
99
|
+
function readsEnv(parts) {
|
|
100
|
+
return parts.some((p) => p.kind === 'reference' && p.name === 'env');
|
|
101
|
+
}
|
|
102
|
+
// The names an env file can define, plus parentheses for Windows names such as
|
|
103
|
+
// `ProgramFiles(x86)`. A glob such as `{env.ts,env.d.ts}` stays text
|
|
104
|
+
const ENV_NAME = /^[\w.()-]+$/;
|
|
105
|
+
function parseReference(source, scope, first) {
|
|
106
|
+
const dot = source.indexOf('.');
|
|
107
|
+
const name = dot === -1 ? source : source.slice(0, dot);
|
|
108
|
+
const path = dot === -1 ? undefined : source.slice(dot + 1);
|
|
109
|
+
const isReference = name === 'env'
|
|
110
|
+
? scope.env !== undefined &&
|
|
111
|
+
path !== undefined &&
|
|
112
|
+
ENV_NAME.test(path) &&
|
|
113
|
+
(!first || scope.isToken(name, path))
|
|
114
|
+
: scope.isToken(name, path);
|
|
115
|
+
return isReference ? { kind: 'reference', name, path } : null;
|
|
116
|
+
}
|
|
117
|
+
function findClosingBrace(template, open) {
|
|
118
|
+
let depth = 0;
|
|
119
|
+
for (let i = open; i < template.length; i++) {
|
|
120
|
+
if (template[i] === '{') {
|
|
121
|
+
depth++;
|
|
122
|
+
}
|
|
123
|
+
else if (template[i] === '}' && --depth === 0) {
|
|
124
|
+
return i;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return -1;
|
|
128
|
+
}
|
|
129
|
+
function splitFallbacks(expression) {
|
|
130
|
+
const parts = [];
|
|
131
|
+
let depth = 0;
|
|
132
|
+
let start = 0;
|
|
133
|
+
for (let i = 0; i < expression.length; i++) {
|
|
134
|
+
if (expression[i] === '{') {
|
|
135
|
+
depth++;
|
|
136
|
+
}
|
|
137
|
+
else if (expression[i] === '}') {
|
|
138
|
+
depth--;
|
|
139
|
+
}
|
|
140
|
+
else if (depth === 0 && expression.startsWith('??', i)) {
|
|
141
|
+
parts.push(expression.slice(start, i));
|
|
142
|
+
start = i + 2;
|
|
143
|
+
i++;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
parts.push(expression.slice(start));
|
|
147
|
+
return parts.map((part) => part.trim());
|
|
148
|
+
}
|
|
149
|
+
// Windows env names are case-insensitive, but a copied env object keeps the
|
|
150
|
+
// spelling Windows reported (`Path`, not `PATH`)
|
|
151
|
+
function readEnv(env, name) {
|
|
152
|
+
if (Object.hasOwn(env, name)) {
|
|
153
|
+
return env[name];
|
|
154
|
+
}
|
|
155
|
+
if (process.platform !== 'win32') {
|
|
156
|
+
return undefined;
|
|
157
|
+
}
|
|
158
|
+
const upperName = name.toUpperCase();
|
|
159
|
+
const key = Object.keys(env).find((k) => k.toUpperCase() === upperName);
|
|
160
|
+
return key === undefined ? undefined : env[key];
|
|
161
|
+
}
|
|
@@ -2,7 +2,6 @@ import { CustomHasher, ExecutorConfig } from '../config/misc-interfaces';
|
|
|
2
2
|
import { ProjectGraph, ProjectGraphProjectNode } from '../config/project-graph';
|
|
3
3
|
import { Task, TaskGraph } from '../config/task-graph';
|
|
4
4
|
import { ProjectConfiguration, TargetConfiguration, TargetDependencyConfig } from '../config/workspace-json-project-json';
|
|
5
|
-
import { LegacyDependsOnLocation } from './legacy-depends-on-warning';
|
|
6
5
|
export type NormalizedTargetDependencyConfig = TargetDependencyConfig & {
|
|
7
6
|
projects: string[];
|
|
8
7
|
};
|
|
@@ -10,9 +9,8 @@ export declare function getDependencyConfigs({ project, target }: {
|
|
|
10
9
|
project: string;
|
|
11
10
|
target: string;
|
|
12
11
|
}, extraTargetDependencies: Record<string, (TargetDependencyConfig | string)[]>, projectGraph: ProjectGraph, allTargetNames: string[]): NormalizedTargetDependencyConfig[] | undefined;
|
|
13
|
-
export
|
|
14
|
-
export declare function
|
|
15
|
-
export declare function normalizeDependencyConfigProjects(dependencyConfig: TargetDependencyConfig, currentProject: string, graph: ProjectGraph, location?: DependsOnEntryLocation): NormalizedTargetDependencyConfig;
|
|
12
|
+
export declare function normalizeDependencyConfigDefinition(definition: string | TargetDependencyConfig, currentProject: string, graph: ProjectGraph, allTargetNames: string[]): NormalizedTargetDependencyConfig[];
|
|
13
|
+
export declare function normalizeDependencyConfigProjects(dependencyConfig: TargetDependencyConfig, currentProject: string, graph: ProjectGraph): NormalizedTargetDependencyConfig;
|
|
16
14
|
export declare function expandDependencyConfigSyntaxSugar(dependencyConfigString: string | TargetDependencyConfig, graph: ProjectGraph, currentProject?: string): TargetDependencyConfig;
|
|
17
15
|
export declare function expandWildcardTargetConfiguration(dependencyConfig: NormalizedTargetDependencyConfig, allTargetNames: string[]): NormalizedTargetDependencyConfig[];
|
|
18
16
|
export declare function readProjectAndTargetFromTargetString(targetString: string, projects: Record<string, ProjectGraphProjectNode>, currentProject?: string): {
|
|
@@ -20,7 +18,7 @@ export declare function readProjectAndTargetFromTargetString(targetString: strin
|
|
|
20
18
|
target: string;
|
|
21
19
|
};
|
|
22
20
|
export declare function getOutputs(p: Record<string, ProjectGraphProjectNode>, target: Task['target'], overrides: Task['overrides']): string[];
|
|
23
|
-
export declare function normalizeTargetDependencyWithStringProjects(dependencyConfig: TargetDependencyConfig
|
|
21
|
+
export declare function normalizeTargetDependencyWithStringProjects(dependencyConfig: TargetDependencyConfig): Omit<TargetDependencyConfig, 'projects'> & {
|
|
24
22
|
projects?: string[];
|
|
25
23
|
};
|
|
26
24
|
export declare function validateOutputs(outputs: string[]): void;
|
|
@@ -30,7 +28,21 @@ export declare function transformLegacyOutputs(projectRoot: string, outputs: str
|
|
|
30
28
|
*/
|
|
31
29
|
export declare function getOutputsForTargetAndConfiguration(task: Task, node: ProjectGraphProjectNode): string[];
|
|
32
30
|
export declare function getOutputsForTargetAndConfiguration(target: Task['target'] | Task, overrides: Task['overrides'] | ProjectGraphProjectNode, node: ProjectGraphProjectNode): string[];
|
|
33
|
-
|
|
31
|
+
/**
|
|
32
|
+
* Resolves the tokens in a configured output, without its leading `!`. A token
|
|
33
|
+
* with no value stays as written.
|
|
34
|
+
*/
|
|
35
|
+
export declare function interpolateOutput(output: string, node: ProjectGraphProjectNode, options: Record<string, unknown>): string;
|
|
36
|
+
/**
|
|
37
|
+
* Resolves Nx tokens in a path, where each token names a key of `data`
|
|
38
|
+
* (`{projectRoot}/dist`, `{options.outputPath ?? dist/{projectRoot}}`).
|
|
39
|
+
* Paths starting with `/` are returned as written. A token with no value
|
|
40
|
+
* stays as written. `env.` is text, unless `envNotAllowed` is given: then it
|
|
41
|
+
* throws with that message.
|
|
42
|
+
*/
|
|
43
|
+
export declare function interpolate(template: string, data: any, options?: {
|
|
44
|
+
envNotAllowed?: (template: string) => string;
|
|
45
|
+
}): string;
|
|
34
46
|
export declare function getTargetConfigurationForTask(task: Task, projectGraph: ProjectGraph): TargetConfiguration | undefined;
|
|
35
47
|
export declare function getExecutorNameForTask(task: Task, projectGraph: ProjectGraph): string;
|
|
36
48
|
/**
|
|
@@ -49,6 +61,8 @@ export declare function getExecutorForTask(task: Task, projects: Record<string,
|
|
|
49
61
|
isNxExecutor: boolean;
|
|
50
62
|
};
|
|
51
63
|
export declare function getCustomHasher(task: Task, projects: Record<string, ProjectConfiguration>): CustomHasher | null;
|
|
64
|
+
/** Test-only: forget which executors have been warned about. */
|
|
65
|
+
export declare function resetCustomHasherDeprecationWarnings(): void;
|
|
52
66
|
/**
|
|
53
67
|
* `taskGraph` pruned to `required`, which must already hold its dependencies.
|
|
54
68
|
* Unknown ids are ignored: a sync generator can remove a task after selection.
|
|
@@ -64,3 +78,18 @@ export declare function shouldStreamOutput(task: Task, initiatingProject: string
|
|
|
64
78
|
export declare function isCacheableTask(task: Task): boolean;
|
|
65
79
|
export declare function unparse(options: Object): string[];
|
|
66
80
|
export declare function createTaskId(project: string, target: string, configuration: string | undefined): string;
|
|
81
|
+
/**
|
|
82
|
+
* Distinguishes two invocations of the same task for the recursive invocation
|
|
83
|
+
* detector. The task id alone would report `nx run app:build --flag` invoked
|
|
84
|
+
* from within `app:build` as a loop, so the detector pairs the id with this
|
|
85
|
+
* hash and only treats an exact repeat as an immediate loop.
|
|
86
|
+
*
|
|
87
|
+
* The hash cannot decide recursion on its own. Arguments that accumulate
|
|
88
|
+
* through forwarding (`app:build` -> `app:build hello` -> `app:build hello
|
|
89
|
+
* hello`) hash differently on every hop, so the tracker also bounds how many
|
|
90
|
+
* ancestors may be running one task id.
|
|
91
|
+
*
|
|
92
|
+
* `__overrides_unparsed__` is dropped, matching how the task hasher treats it:
|
|
93
|
+
* it restates the other keys as raw argv, down to flag order and spelling.
|
|
94
|
+
*/
|
|
95
|
+
export declare function hashTaskOverrides(task: Task): string;
|