Skip to content

Commit ed955a5

Browse files
committed
fix(pm): correct workspace-root handling for Yarn and Bun
1 parent e3220cc commit ed955a5

7 files changed

Lines changed: 22 additions & 22 deletions

File tree

crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_add_yarn4_with_workspace/snapshots/command_add_yarn4_with_workspace.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
should add package to workspace root
66

77
```
8+
warn: yarn >=2 does not support --workspace-root.
89
➤ YN0000: · Yarn <version>
910
➤ YN0000: ┌ Resolution step
1011
➤ YN0085: │ + testnpm2@npm:1.0.1
@@ -46,6 +47,7 @@ should add package to workspace root
4647
should add @vite-plus-test/utils to workspace root
4748

4849
```
50+
warn: yarn >=2 does not support --workspace-root.
4951
warn: yarn does not support --workspace.
5052
➤ YN0000: · Yarn <version>
5153
➤ YN0000: ┌ Resolution step

crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_update_bun/snapshots.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ vp = "global"
44
skip-platforms = ["windows"]
55
steps = [
66
{ argv = ["vp", "update", "--help"], comment = "should show help", continue-on-failure = true },
7-
{ argv = ["vp", "update", "testnpm2"], comment = "should update package within semver range" },
7+
{ argv = ["vp", "update", "testnpm2", "--workspace-root"], comment = "warns about unsupported --workspace-root and updates within semver range" },
88
{ argv = ["vpt", "print-file", "package.json"], continue-on-failure = true },
99
{ argv = ["vp", "up", "testnpm2", "--latest"], comment = "should update to absolute latest version" },
1010
{ argv = ["vpt", "print-file", "package.json"], continue-on-failure = true },

crates/vp_cli_snapshots/tests/cli_snapshots/fixtures/command_update_bun/snapshots/command_update_bun.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,12 @@ Options:
3535
Documentation: https://viteplus.dev/guide/install
3636
```
3737

38-
## `vp update testnpm2`
38+
## `vp update testnpm2 --workspace-root`
3939

40-
should update package within semver range
40+
warns about unsupported --workspace-root and updates within semver range
4141

4242
```
43+
warn: bun does not support --workspace-root.
4344
bun update <version> (<hash>)
4445
4546
test-vite-plus-package@1.0.0

crates/vp_pm_cli/src/resolution/commands/add.rs

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ pub struct AddArgs {
3636
pub(crate) filter: Vec<String>,
3737

3838
/// Add to workspace root
39-
#[arg(short = 'w', long, not_supported(bun))]
39+
#[arg(short = 'w', long, not_supported(yarn >= "2", bun))]
4040
pub(crate) workspace_root: bool,
4141

4242
/// Only add if package exists in workspace (pnpm-specific)
@@ -219,7 +219,7 @@ impl Resolve<AddArgs> for Yarn {
219219
cmd.arg("workspaces").arg("foreach").arg("--all");
220220
cmd.repeated("--include", args.filter.iter());
221221
}
222-
cmd.arg("add");
222+
cmd.arg("add").arg_if("-W", args.workspace_root && !self.is_berry());
223223
match args.save_dependency.target() {
224224
Some(SaveDependencyTarget::Dev) => {
225225
cmd.arg("--dev");
@@ -481,7 +481,7 @@ mod tests {
481481
let command = expect_run(resolution.outcome);
482482

483483
assert_eq!(command.program, "yarn");
484-
assert_eq!(command.args, vec!["add", "--dev", "typescript"]);
484+
assert_eq!(command.args, vec!["add", "-W", "--dev", "typescript"]);
485485
assert!(resolution.diagnostics.is_empty());
486486
}
487487

@@ -574,21 +574,19 @@ mod tests {
574574
}
575575

576576
#[test]
577-
fn yarn_drops_workspace_root_without_warning() {
577+
fn yarn_berry_drops_unsupported_workspace_root() {
578578
let mut args = add_args(&["react"]);
579579
args.workspace_root = true;
580+
let resolution = resolve(&yarn("4.1.0"), args);
581+
let command = expect_run(resolution.outcome);
580582

581-
let classic = resolve(&yarn("1.22.22"), args.clone());
582-
let classic_command = expect_run(classic.outcome);
583-
let berry = resolve(&yarn("4.1.0"), args);
584-
let berry_command = expect_run(berry.outcome);
585-
586-
assert_eq!(classic_command.program, "yarn");
587-
assert_eq!(classic_command.args, vec!["add", "react"]);
588-
assert_eq!(berry_command.program, "yarn");
589-
assert_eq!(berry_command.args, vec!["add", "react"]);
590-
assert!(classic.diagnostics.is_empty());
591-
assert!(berry.diagnostics.is_empty());
583+
assert_eq!(command.program, "yarn");
584+
assert_eq!(command.args, vec!["add", "react"]);
585+
assert_eq!(resolution.diagnostics.len(), 1);
586+
assert_eq!(
587+
resolution.diagnostics[0].message,
588+
"yarn >=2 does not support --workspace-root."
589+
);
592590
}
593591

594592
#[test]

crates/vp_pm_cli/src/resolution/commands/install.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ pub struct InstallArgs {
7474
pub(crate) filter: Vec<String>,
7575

7676
/// Install in workspace root only
77-
#[arg(short = 'w', long, not_supported(bun))]
77+
#[arg(short = 'w', long, not_supported(yarn, bun))]
7878
pub(crate) workspace_root: bool,
7979

8080
/// Save exact version (only when adding packages)
@@ -228,7 +228,6 @@ impl Yarn {
228228
.arg_if("--ignore-scripts", args.ignore_scripts)
229229
.arg_if("--silent", args.silent)
230230
.arg_if("--no-lockfile", args.no_lockfile)
231-
.arg_if("-W", args.workspace_root)
232231
.extend(args.pass_through_args.iter());
233232
cmd.into()
234233
}

crates/vp_pm_cli/src/resolution/commands/update.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ pub struct UpdateArgs {
3737
pub(crate) filter: Vec<String>,
3838

3939
/// Include workspace root
40-
#[arg(short = 'w', long)]
40+
#[arg(short = 'w', long, not_supported(yarn, bun))]
4141
pub(crate) workspace_root: bool,
4242

4343
/// Update only devDependencies

crates/vp_pm_cli/src/resolution/commands/why.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ pub struct WhyArgs {
3232
pub(crate) filter: Vec<String>,
3333

3434
/// Check in workspace root
35-
#[arg(short = 'w', long, not_supported(bun))]
35+
#[arg(short = 'w', long, not_supported(yarn, bun))]
3636
pub(crate) workspace_root: bool,
3737

3838
/// Only production dependencies

0 commit comments

Comments
 (0)