mirror of
https://github.com/oven-sh/bun
synced 2026-02-09 10:28:47 +00:00
@@ -4852,6 +4852,55 @@ it("should not override npm dependency by workspace with mismatched version", as
|
||||
}
|
||||
});
|
||||
|
||||
it("should override @scoped npm dependency by matching workspace", async () => {
|
||||
const urls: string[] = [];
|
||||
setHandler(dummyRegistry(urls));
|
||||
await writeFile(
|
||||
join(package_dir, "package.json"),
|
||||
JSON.stringify({
|
||||
name: "foo",
|
||||
workspaces: ["packages/*"],
|
||||
dependencies: {
|
||||
"@bar/baz": "^0.1",
|
||||
},
|
||||
}),
|
||||
);
|
||||
await mkdir(join(package_dir, "packages", "bar-baz"), { recursive: true });
|
||||
const baz_package = JSON.stringify({
|
||||
name: "@bar/baz",
|
||||
version: "0.1.2",
|
||||
});
|
||||
await writeFile(join(package_dir, "packages", "bar-baz", "package.json"), baz_package);
|
||||
const { stdout, stderr, exited } = spawn({
|
||||
cmd: [bunExe(), "install"],
|
||||
cwd: package_dir,
|
||||
stdout: null,
|
||||
stdin: "pipe",
|
||||
stderr: "pipe",
|
||||
env,
|
||||
});
|
||||
expect(stderr).toBeDefined();
|
||||
const err = await new Response(stderr).text();
|
||||
expect(err).toContain("Saved lockfile");
|
||||
expect(stdout).toBeDefined();
|
||||
const out = await new Response(stdout).text();
|
||||
expect(out.replace(/\s*\[[0-9\.]+m?s\]\s*$/, "").split(/\r?\n/)).toEqual([
|
||||
" + @bar/baz@workspace:packages/bar-baz",
|
||||
"",
|
||||
" 1 packages installed",
|
||||
]);
|
||||
expect(await exited).toBe(0);
|
||||
expect(urls.sort()).toBeEmpty();
|
||||
expect(requested).toBe(0);
|
||||
expect(await readdirSorted(join(package_dir, "node_modules"))).toEqual([".cache", "@bar"]);
|
||||
expect(await readdirSorted(join(package_dir, "node_modules", "@bar"))).toEqual(["baz"]);
|
||||
expect(await readlink(join(package_dir, "node_modules", "@bar", "baz"))).toBe(
|
||||
join("..", "..", "packages", "bar-baz"),
|
||||
);
|
||||
expect(await file(join(package_dir, "node_modules", "@bar", "baz", "package.json")).text()).toEqual(baz_package);
|
||||
await access(join(package_dir, "bun.lockb"));
|
||||
});
|
||||
|
||||
it("should override child npm dependency by matching workspace", async () => {
|
||||
const urls: string[] = [];
|
||||
setHandler(dummyRegistry(urls));
|
||||
@@ -4972,3 +5021,64 @@ it("should not override child npm dependency by workspace with mismatched versio
|
||||
});
|
||||
await access(join(package_dir, "bun.lockb"));
|
||||
});
|
||||
|
||||
it("should override @scoped child npm dependency by matching workspace", async () => {
|
||||
const urls: string[] = [];
|
||||
setHandler(dummyRegistry(urls));
|
||||
await writeFile(
|
||||
join(package_dir, "package.json"),
|
||||
JSON.stringify({
|
||||
name: "foo",
|
||||
workspaces: ["packages/*"],
|
||||
}),
|
||||
);
|
||||
await mkdir(join(package_dir, "packages", "moo-bar"), { recursive: true });
|
||||
const bar_package = JSON.stringify({
|
||||
name: "@moo/bar",
|
||||
version: "1.2.3",
|
||||
});
|
||||
await writeFile(join(package_dir, "packages", "moo-bar", "package.json"), bar_package);
|
||||
await mkdir(join(package_dir, "packages", "moo-baz"), { recursive: true });
|
||||
await writeFile(
|
||||
join(package_dir, "packages", "moo-baz", "package.json"),
|
||||
JSON.stringify({
|
||||
name: "@moo/baz",
|
||||
dependencies: {
|
||||
"@moo/bar": "1.x",
|
||||
},
|
||||
}),
|
||||
);
|
||||
const { stdout, stderr, exited } = spawn({
|
||||
cmd: [bunExe(), "install"],
|
||||
cwd: package_dir,
|
||||
stdout: null,
|
||||
stdin: "pipe",
|
||||
stderr: "pipe",
|
||||
env,
|
||||
});
|
||||
expect(stderr).toBeDefined();
|
||||
const err = await new Response(stderr).text();
|
||||
expect(err).toContain("Saved lockfile");
|
||||
expect(stdout).toBeDefined();
|
||||
const out = await new Response(stdout).text();
|
||||
expect(out.replace(/\s*\[[0-9\.]+m?s\]\s*$/, "").split(/\r?\n/)).toEqual([
|
||||
" + @moo/bar@workspace:packages/moo-bar",
|
||||
" + @moo/baz@workspace:packages/moo-baz",
|
||||
"",
|
||||
" 2 packages installed",
|
||||
]);
|
||||
expect(await exited).toBe(0);
|
||||
expect(urls.sort()).toBeEmpty();
|
||||
expect(requested).toBe(0);
|
||||
expect(await readdirSorted(join(package_dir, "node_modules"))).toEqual([".cache", "@moo"]);
|
||||
expect(await readdirSorted(join(package_dir, "node_modules", "@moo"))).toEqual(["bar", "baz"]);
|
||||
expect(await readlink(join(package_dir, "node_modules", "@moo", "bar"))).toBe(
|
||||
join("..", "..", "packages", "moo-bar"),
|
||||
);
|
||||
expect(await file(join(package_dir, "node_modules", "@moo", "bar", "package.json")).text()).toEqual(bar_package);
|
||||
expect(await readlink(join(package_dir, "node_modules", "@moo", "baz"))).toBe(
|
||||
join("..", "..", "packages", "moo-baz"),
|
||||
);
|
||||
expect(await readdirSorted(join(package_dir, "node_modules", "@moo", "baz"))).toEqual(["package.json"]);
|
||||
await access(join(package_dir, "bun.lockb"));
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user