From acbbcd69e007fe06d5df6fff8bf52d98a398e34b Mon Sep 17 00:00:00 2001 From: wan9chi Date: Sun, 21 Jun 2026 12:46:17 +0800 Subject: [PATCH] test(plan): cover duplicate dependsOn fields Motivation Cover object-form dependsOn when the same workspace package appears in both dependencies and devDependencies, and clarify the changelog example for the feature. Co-authored-by: GPT-5 Codex --- CHANGELOG.md | 2 +- .../package.json | 7 + .../packages/a/package.json | 10 ++ .../packages/a/vite-task.json | 12 ++ .../packages/b/package.json | 7 + .../pnpm-workspace.yaml | 2 + .../snapshots/task_graph.md | 128 ++++++++++++++++++ .../vite-task.json | 3 + 8 files changed, 170 insertions(+), 1 deletion(-) create mode 100644 crates/vite_task_plan/tests/plan_snapshots/fixtures/object_depends_on_duplicate_fields/package.json create mode 100644 crates/vite_task_plan/tests/plan_snapshots/fixtures/object_depends_on_duplicate_fields/packages/a/package.json create mode 100644 crates/vite_task_plan/tests/plan_snapshots/fixtures/object_depends_on_duplicate_fields/packages/a/vite-task.json create mode 100644 crates/vite_task_plan/tests/plan_snapshots/fixtures/object_depends_on_duplicate_fields/packages/b/package.json create mode 100644 crates/vite_task_plan/tests/plan_snapshots/fixtures/object_depends_on_duplicate_fields/pnpm-workspace.yaml create mode 100644 crates/vite_task_plan/tests/plan_snapshots/fixtures/object_depends_on_duplicate_fields/snapshots/task_graph.md create mode 100644 crates/vite_task_plan/tests/plan_snapshots/fixtures/object_depends_on_duplicate_fields/vite-task.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 19d0ebe7d..ca5d39ed8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ # Changelog - **Added** First-party support for caching `vite build` with zero cache config, giving Vite projects correct cache hits out of the box ([vitejs/vite#22453](https://github.com/vitejs/vite/pull/22453)). -- **Added** Object-form `dependsOn` entries for direct workspace dependencies ([#479](https://github.com/voidzero-dev/vite-task/pull/479)). +- **Added** Support for specifying tasks from dependency packages in `dependsOn`, such as `dependsOn: [{ "task": "build", "from": "dependencies" }]` ([#479](https://github.com/voidzero-dev/vite-task/pull/479)). - **Added** [`@voidzero-dev/vite-task-client`](https://npmx.dev/package/@voidzero-dev/vite-task-client), allowing tools to report cache information to Vite Task at runtime so users do not need to configure it manually ([#441](https://github.com/voidzero-dev/vite-task/pull/441), [#454](https://github.com/voidzero-dev/vite-task/pull/454), [#449](https://github.com/voidzero-dev/vite-task/pull/449), [#450](https://github.com/voidzero-dev/vite-task/pull/450), [#458](https://github.com/voidzero-dev/vite-task/pull/458), [#431](https://github.com/voidzero-dev/vite-task/pull/431), [#459](https://github.com/voidzero-dev/vite-task/pull/459), [#472](https://github.com/voidzero-dev/vite-task/pull/472)). - **Changed** Cached tasks now restore automatically tracked output files by default; use `output: []` to disable restoration ([#460](https://github.com/voidzero-dev/vite-task/pull/460), [#461](https://github.com/voidzero-dev/vite-task/pull/461)). - **Changed** Environment values in task cache fingerprints are now stored only as SHA-256 digests, and env-related cache miss details report names without values ([#455](https://github.com/voidzero-dev/vite-task/pull/455)). diff --git a/crates/vite_task_plan/tests/plan_snapshots/fixtures/object_depends_on_duplicate_fields/package.json b/crates/vite_task_plan/tests/plan_snapshots/fixtures/object_depends_on_duplicate_fields/package.json new file mode 100644 index 000000000..0c3aa8c37 --- /dev/null +++ b/crates/vite_task_plan/tests/plan_snapshots/fixtures/object_depends_on_duplicate_fields/package.json @@ -0,0 +1,7 @@ +{ + "name": "@test/object-depends-on-duplicate-fields", + "version": "1.0.0", + "workspaces": [ + "packages/*" + ] +} diff --git a/crates/vite_task_plan/tests/plan_snapshots/fixtures/object_depends_on_duplicate_fields/packages/a/package.json b/crates/vite_task_plan/tests/plan_snapshots/fixtures/object_depends_on_duplicate_fields/packages/a/package.json new file mode 100644 index 000000000..d0e3e47e9 --- /dev/null +++ b/crates/vite_task_plan/tests/plan_snapshots/fixtures/object_depends_on_duplicate_fields/packages/a/package.json @@ -0,0 +1,10 @@ +{ + "name": "@test/a", + "version": "1.0.0", + "dependencies": { + "@test/b": "workspace:*" + }, + "devDependencies": { + "@test/b": "workspace:*" + } +} diff --git a/crates/vite_task_plan/tests/plan_snapshots/fixtures/object_depends_on_duplicate_fields/packages/a/vite-task.json b/crates/vite_task_plan/tests/plan_snapshots/fixtures/object_depends_on_duplicate_fields/packages/a/vite-task.json new file mode 100644 index 000000000..041f208c9 --- /dev/null +++ b/crates/vite_task_plan/tests/plan_snapshots/fixtures/object_depends_on_duplicate_fields/packages/a/vite-task.json @@ -0,0 +1,12 @@ +{ + "tasks": { + "from_dependencies": { + "command": "vtt from dependencies", + "dependsOn": [{ "task": "build", "from": "dependencies" }] + }, + "from_dev_dependencies": { + "command": "vtt from devDependencies", + "dependsOn": [{ "task": "build", "from": "devDependencies" }] + } + } +} diff --git a/crates/vite_task_plan/tests/plan_snapshots/fixtures/object_depends_on_duplicate_fields/packages/b/package.json b/crates/vite_task_plan/tests/plan_snapshots/fixtures/object_depends_on_duplicate_fields/packages/b/package.json new file mode 100644 index 000000000..077fc3916 --- /dev/null +++ b/crates/vite_task_plan/tests/plan_snapshots/fixtures/object_depends_on_duplicate_fields/packages/b/package.json @@ -0,0 +1,7 @@ +{ + "name": "@test/b", + "version": "1.0.0", + "scripts": { + "build": "vtt build b" + } +} diff --git a/crates/vite_task_plan/tests/plan_snapshots/fixtures/object_depends_on_duplicate_fields/pnpm-workspace.yaml b/crates/vite_task_plan/tests/plan_snapshots/fixtures/object_depends_on_duplicate_fields/pnpm-workspace.yaml new file mode 100644 index 000000000..18ec407ef --- /dev/null +++ b/crates/vite_task_plan/tests/plan_snapshots/fixtures/object_depends_on_duplicate_fields/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +packages: + - 'packages/*' diff --git a/crates/vite_task_plan/tests/plan_snapshots/fixtures/object_depends_on_duplicate_fields/snapshots/task_graph.md b/crates/vite_task_plan/tests/plan_snapshots/fixtures/object_depends_on_duplicate_fields/snapshots/task_graph.md new file mode 100644 index 000000000..c8645f770 --- /dev/null +++ b/crates/vite_task_plan/tests/plan_snapshots/fixtures/object_depends_on_duplicate_fields/snapshots/task_graph.md @@ -0,0 +1,128 @@ +# task graph + +```mermaid +flowchart TD + task_0["/packages/a#from_dependencies"] + task_0 --> task_2 + task_1["/packages/a#from_dev_dependencies"] + task_1 --> task_2 + task_2["/packages/b#build"] +``` + +## `/packages/a#from_dependencies` + +```json +{ + "task_display": { + "package_name": "@test/a", + "task_name": "from_dependencies", + "package_path": "/packages/a" + }, + "resolved_config": { + "commands": [ + "vtt from dependencies" + ], + "resolved_options": { + "cwd": "/packages/a", + "cache_config": { + "env_config": { + "fingerprinted_envs": [], + "untracked_env": [ + "" + ] + }, + "input_config": { + "includes_auto": true, + "positive_globs": [], + "negative_globs": [] + }, + "output_config": { + "includes_auto": true, + "positive_globs": [], + "negative_globs": [] + } + } + } + }, + "source": "TaskConfig" +} +``` + +## `/packages/a#from_dev_dependencies` + +```json +{ + "task_display": { + "package_name": "@test/a", + "task_name": "from_dev_dependencies", + "package_path": "/packages/a" + }, + "resolved_config": { + "commands": [ + "vtt from devDependencies" + ], + "resolved_options": { + "cwd": "/packages/a", + "cache_config": { + "env_config": { + "fingerprinted_envs": [], + "untracked_env": [ + "" + ] + }, + "input_config": { + "includes_auto": true, + "positive_globs": [], + "negative_globs": [] + }, + "output_config": { + "includes_auto": true, + "positive_globs": [], + "negative_globs": [] + } + } + } + }, + "source": "TaskConfig" +} +``` + +## `/packages/b#build` + +```json +{ + "task_display": { + "package_name": "@test/b", + "task_name": "build", + "package_path": "/packages/b" + }, + "resolved_config": { + "commands": [ + "vtt build b" + ], + "resolved_options": { + "cwd": "/packages/b", + "cache_config": { + "env_config": { + "fingerprinted_envs": [], + "untracked_env": [ + "" + ] + }, + "input_config": { + "includes_auto": true, + "positive_globs": [], + "negative_globs": [] + }, + "output_config": { + "includes_auto": true, + "positive_globs": [], + "negative_globs": [] + } + } + } + }, + "source": "PackageJsonScript" +} +``` + diff --git a/crates/vite_task_plan/tests/plan_snapshots/fixtures/object_depends_on_duplicate_fields/vite-task.json b/crates/vite_task_plan/tests/plan_snapshots/fixtures/object_depends_on_duplicate_fields/vite-task.json new file mode 100644 index 000000000..d548edfac --- /dev/null +++ b/crates/vite_task_plan/tests/plan_snapshots/fixtures/object_depends_on_duplicate_fields/vite-task.json @@ -0,0 +1,3 @@ +{ + "cache": true +}