mirror of
https://github.com/oven-sh/bun
synced 2026-02-02 15:08:46 +00:00
### What does this PR do? Two things: - we weren't adding the root package to the `pkg_map`. - `link:` dependency paths in `"snapshots"` weren't being joined with the top level dir. ### How did you verify your code works? Manually and added a test.
170 lines
4.9 KiB
TypeScript
170 lines
4.9 KiB
TypeScript
import { file, spawn } from "bun";
|
|
import { afterAll, beforeAll, describe, expect, test } from "bun:test";
|
|
import { bunExe, bunEnv as env, nodeModulesPackages, tempDir, VerdaccioRegistry } from "harness.js";
|
|
import { join } from "path";
|
|
|
|
let verdaccio = new VerdaccioRegistry();
|
|
|
|
beforeAll(async () => {
|
|
await verdaccio.start();
|
|
});
|
|
|
|
afterAll(() => {
|
|
verdaccio.stop();
|
|
});
|
|
|
|
test("basic", async () => {
|
|
const { packageDir } = await verdaccio.createTestDir({ files: join(import.meta.dir, "pnpm/basic") });
|
|
|
|
let proc = spawn({
|
|
cmd: [bunExe(), "install"],
|
|
cwd: packageDir,
|
|
env,
|
|
stdout: "pipe",
|
|
stderr: "pipe",
|
|
});
|
|
|
|
let [out, err, exitCode] = await Promise.all([proc.stdout.text(), proc.stderr.text(), proc.exited]);
|
|
|
|
expect(exitCode).toBe(0);
|
|
expect(err).toContain("Saved lockfile");
|
|
|
|
expect(nodeModulesPackages(packageDir)).toMatchInlineSnapshot(`
|
|
"node_modules/a-dep-b/a-dep-b@1.0.0
|
|
node_modules/a-dep/a-dep@1.0.1
|
|
node_modules/b-dep-a/b-dep-a@1.0.0
|
|
node_modules/no-deps/no-deps@1.0.1"
|
|
`);
|
|
|
|
expect(
|
|
(await file(join(packageDir, "bun.lock")).text()).replaceAll(/localhost:\d+/g, "localhost:1234"),
|
|
).toMatchSnapshot("bun.lock");
|
|
|
|
proc = spawn({
|
|
cmd: [bunExe(), "install"],
|
|
cwd: packageDir,
|
|
env,
|
|
stdout: "pipe",
|
|
stderr: "pipe",
|
|
});
|
|
|
|
[out, err, exitCode] = await Promise.all([proc.stdout.text(), proc.stderr.text(), proc.exited]);
|
|
|
|
expect(exitCode).toBe(0);
|
|
expect(err).not.toContain("Saved lockfile");
|
|
});
|
|
|
|
describe.todo("bin", () => {
|
|
test("manifests are fetched for bins", async () => {
|
|
const { packageDir, packageJson } = await verdaccio.createTestDir({
|
|
files: join(import.meta.dir, "pnpm/bin-manifest-fetching"),
|
|
});
|
|
});
|
|
});
|
|
|
|
describe.todo("peers", () => {
|
|
test("peers basic", async () => {
|
|
const { packageDir, packageJson } = await verdaccio.createTestDir({
|
|
files: join(import.meta.dir, "pnpm/peers-basic"),
|
|
});
|
|
});
|
|
test("workspaces with peers", async () => {
|
|
const { packageDir, packageJson } = await verdaccio.createTestDir({
|
|
files: join(import.meta.dir, "pnpm/peers-workspaces"),
|
|
});
|
|
});
|
|
});
|
|
|
|
describe.todo("patched packages", () => {
|
|
test("patches are detected and migrated correctly", async () => {
|
|
const { packageDir, packageJson } = await verdaccio.createTestDir({
|
|
files: join(import.meta.dir, "pnpm/patched-packages"),
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("folder dependencies", () => {
|
|
test.todo("basic", async () => {
|
|
const { packageDir, packageJson } = await verdaccio.createTestDir({
|
|
files: join(import.meta.dir, "pnpm/folder-dependencies-basic"),
|
|
});
|
|
});
|
|
test("links to the root package are resolved correctly", async () => {
|
|
const { packageDir, packageJson } = await verdaccio.createTestDir({
|
|
files: join(import.meta.dir, "pnpm/root-package-link-resolution"),
|
|
});
|
|
|
|
let proc = spawn({
|
|
cmd: [bunExe(), "install"],
|
|
cwd: packageDir,
|
|
env,
|
|
stdout: "pipe",
|
|
stderr: "pipe",
|
|
});
|
|
|
|
const [out, err, exitCode] = await Promise.all([proc.stdout.text(), proc.stderr.text(), proc.exited]);
|
|
|
|
expect(exitCode).toBe(0);
|
|
expect(err).toContain("Saved lockfile");
|
|
|
|
expect(
|
|
await Promise.all([
|
|
file(join(packageDir, "node_modules", "two-range-deps", "package.json")).json(),
|
|
file(join(packageDir, "node_modules", "no-deps", "package.json")).json(),
|
|
]),
|
|
).toMatchInlineSnapshot(`
|
|
[
|
|
{
|
|
"dependencies": {
|
|
"@types/is-number": ">=1.0.0",
|
|
"no-deps": "^1.0.0",
|
|
},
|
|
"name": "two-range-deps",
|
|
"version": "1.0.0",
|
|
},
|
|
{
|
|
"dependencies": {
|
|
"two-range-deps": "1.0.0",
|
|
},
|
|
"name": "transitive-root-link-pkg",
|
|
},
|
|
]
|
|
`);
|
|
});
|
|
});
|
|
|
|
describe.todo("overrides", () => {
|
|
test("basic", async () => {
|
|
const { packageDir, packageJson } = await verdaccio.createTestDir({
|
|
files: join(import.meta.dir, "pnpm/overrides-basic"),
|
|
});
|
|
});
|
|
test("accross workspaces", async () => {
|
|
const { packageDir, packageJson } = await verdaccio.createTestDir({
|
|
files: join(import.meta.dir, "pnpm/overrides-workspaces"),
|
|
});
|
|
});
|
|
});
|
|
|
|
test.todo("from npm", async () => {
|
|
using testDir = tempDir("pnpm-migration-from-npm-registry", join(import.meta.dir, "pnpm/from-npm"));
|
|
});
|
|
|
|
describe.todo("workspaces", async () => {
|
|
test("basic", async () => {
|
|
const { packageDir, packageJson } = await verdaccio.createTestDir({
|
|
files: join(import.meta.dir, "pnpm/workspaces-basic"),
|
|
});
|
|
});
|
|
test("workspace dependencies", async () => {
|
|
const { packageDir, packageJson } = await verdaccio.createTestDir({
|
|
files: join(import.meta.dir, "pnpm/workspaces-dependencies"),
|
|
});
|
|
});
|
|
test("catalogs, peers, and workspaces", async () => {
|
|
const { packageDir, packageJson } = await verdaccio.createTestDir({
|
|
files: join(import.meta.dir, "pnpm/workspaces-catalogs-peers"),
|
|
});
|
|
});
|
|
});
|