mirror of
https://github.com/oven-sh/bun
synced 2026-02-14 04:49:06 +00:00
### What does this PR do? fixes #7157, fixes #14662 migrates pnpm-workspace.yaml data to package.json & converts pnpm-lock.yml to bun.lock --- ### How did you verify your code works? manually, tests and real world examples --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Dylan Conway <dylan.conway567@gmail.com>
134 lines
4.0 KiB
TypeScript
134 lines
4.0 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.todo("folder dependencies", () => {
|
|
test("basic", async () => {
|
|
const { packageDir, packageJson } = await verdaccio.createTestDir({
|
|
files: join(import.meta.dir, "pnpm/folder-dependencies-basic"),
|
|
});
|
|
});
|
|
test("links are resolved correctly", async () => {
|
|
// link:
|
|
const { packageDir, packageJson } = await verdaccio.createTestDir({
|
|
files: join(import.meta.dir, "pnpm/folder-dependencies-links"),
|
|
});
|
|
});
|
|
});
|
|
|
|
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"),
|
|
});
|
|
});
|
|
});
|