diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_add_yarn4_with_workspace/snapshots/command_add_yarn4_with_workspace.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_add_yarn4_with_workspace/snapshots/command_add_yarn4_with_workspace.md index 18086d0307..c2fb74cbb6 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_add_yarn4_with_workspace/snapshots/command_add_yarn4_with_workspace.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_add_yarn4_with_workspace/snapshots/command_add_yarn4_with_workspace.md @@ -5,6 +5,7 @@ should add package to workspace root ``` +warn: yarn >=2 does not support --workspace-root. ➤ YN0000: · Yarn ➤ YN0000: ┌ Resolution step ➤ YN0085: │ + testnpm2@npm:1.0.1 @@ -46,6 +47,7 @@ should add package to workspace root should add @vite-plus-test/utils to workspace root ``` +warn: yarn >=2 does not support --workspace-root. warn: yarn does not support --workspace. ➤ YN0000: · Yarn ➤ YN0000: ┌ Resolution step diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_update_bun/snapshots.toml b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_update_bun/snapshots.toml index b8598ac1a2..3f776f7ccc 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_update_bun/snapshots.toml +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_update_bun/snapshots.toml @@ -4,7 +4,7 @@ vp = "global" skip-platforms = ["windows"] steps = [ { argv = ["vp", "update", "--help"], comment = "should show help", continue-on-failure = true }, - { argv = ["vp", "update", "testnpm2"], comment = "should update package within semver range" }, + { argv = ["vp", "update", "testnpm2", "--workspace-root"], comment = "warns about unsupported --workspace-root and updates within semver range" }, { argv = ["vpt", "print-file", "package.json"], continue-on-failure = true }, { argv = ["vp", "up", "testnpm2", "--latest"], comment = "should update to absolute latest version" }, { argv = ["vpt", "print-file", "package.json"], continue-on-failure = true }, diff --git a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_update_bun/snapshots/command_update_bun.md b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_update_bun/snapshots/command_update_bun.md index a6477b323a..41f16db801 100644 --- a/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_update_bun/snapshots/command_update_bun.md +++ b/crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_update_bun/snapshots/command_update_bun.md @@ -35,11 +35,12 @@ Options: Documentation: https://viteplus.dev/guide/install ``` -## `vp update testnpm2` +## `vp update testnpm2 --workspace-root` -should update package within semver range +warns about unsupported --workspace-root and updates within semver range ``` +warn: bun does not support --workspace-root. bun update () test-vite-plus-package@1.0.0 diff --git a/crates/vp_pm_cli/src/resolution/commands/add.rs b/crates/vp_pm_cli/src/resolution/commands/add.rs index a7c4f55e26..937f477031 100644 --- a/crates/vp_pm_cli/src/resolution/commands/add.rs +++ b/crates/vp_pm_cli/src/resolution/commands/add.rs @@ -36,7 +36,7 @@ pub struct AddArgs { pub(crate) filter: Vec, /// Add to workspace root - #[arg(short = 'w', long, not_supported(bun))] + #[arg(short = 'w', long, not_supported(yarn >= "2", bun))] pub(crate) workspace_root: bool, /// Only add if package exists in workspace (pnpm-specific) @@ -219,7 +219,7 @@ impl Resolve for Yarn { cmd.arg("workspaces").arg("foreach").arg("--all"); cmd.repeated("--include", args.filter.iter()); } - cmd.arg("add"); + cmd.arg("add").arg_if("-W", args.workspace_root && !self.is_berry()); match args.save_dependency.target() { Some(SaveDependencyTarget::Dev) => { cmd.arg("--dev"); @@ -481,7 +481,7 @@ mod tests { let command = expect_run(resolution.outcome); assert_eq!(command.program, "yarn"); - assert_eq!(command.args, vec!["add", "--dev", "typescript"]); + assert_eq!(command.args, vec!["add", "-W", "--dev", "typescript"]); assert!(resolution.diagnostics.is_empty()); } @@ -574,21 +574,19 @@ mod tests { } #[test] - fn yarn_drops_workspace_root_without_warning() { + fn yarn_berry_drops_unsupported_workspace_root() { let mut args = add_args(&["react"]); args.workspace_root = true; + let resolution = resolve(&yarn("4.1.0"), args); + let command = expect_run(resolution.outcome); - let classic = resolve(&yarn("1.22.22"), args.clone()); - let classic_command = expect_run(classic.outcome); - let berry = resolve(&yarn("4.1.0"), args); - let berry_command = expect_run(berry.outcome); - - assert_eq!(classic_command.program, "yarn"); - assert_eq!(classic_command.args, vec!["add", "react"]); - assert_eq!(berry_command.program, "yarn"); - assert_eq!(berry_command.args, vec!["add", "react"]); - assert!(classic.diagnostics.is_empty()); - assert!(berry.diagnostics.is_empty()); + assert_eq!(command.program, "yarn"); + assert_eq!(command.args, vec!["add", "react"]); + assert_eq!(resolution.diagnostics.len(), 1); + assert_eq!( + resolution.diagnostics[0].message, + "yarn >=2 does not support --workspace-root." + ); } #[test] diff --git a/crates/vp_pm_cli/src/resolution/commands/install.rs b/crates/vp_pm_cli/src/resolution/commands/install.rs index 59629e88f8..0f151049a1 100644 --- a/crates/vp_pm_cli/src/resolution/commands/install.rs +++ b/crates/vp_pm_cli/src/resolution/commands/install.rs @@ -74,7 +74,7 @@ pub struct InstallArgs { pub(crate) filter: Vec, /// Install in workspace root only - #[arg(short = 'w', long, not_supported(bun))] + #[arg(short = 'w', long, not_supported(yarn, bun))] pub(crate) workspace_root: bool, /// Save exact version (only when adding packages) @@ -228,7 +228,6 @@ impl Yarn { .arg_if("--ignore-scripts", args.ignore_scripts) .arg_if("--silent", args.silent) .arg_if("--no-lockfile", args.no_lockfile) - .arg_if("-W", args.workspace_root) .extend(args.pass_through_args.iter()); cmd.into() } diff --git a/crates/vp_pm_cli/src/resolution/commands/update.rs b/crates/vp_pm_cli/src/resolution/commands/update.rs index bf186d4a1d..ffabcd8010 100644 --- a/crates/vp_pm_cli/src/resolution/commands/update.rs +++ b/crates/vp_pm_cli/src/resolution/commands/update.rs @@ -37,7 +37,7 @@ pub struct UpdateArgs { pub(crate) filter: Vec, /// Include workspace root - #[arg(short = 'w', long)] + #[arg(short = 'w', long, not_supported(yarn, bun))] pub(crate) workspace_root: bool, /// Update only devDependencies diff --git a/crates/vp_pm_cli/src/resolution/commands/why.rs b/crates/vp_pm_cli/src/resolution/commands/why.rs index b92132829b..4db81c1e24 100644 --- a/crates/vp_pm_cli/src/resolution/commands/why.rs +++ b/crates/vp_pm_cli/src/resolution/commands/why.rs @@ -32,7 +32,7 @@ pub struct WhyArgs { pub(crate) filter: Vec, /// Check in workspace root - #[arg(short = 'w', long, not_supported(bun))] + #[arg(short = 'w', long, not_supported(yarn, bun))] pub(crate) workspace_root: bool, /// Only production dependencies