Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
> vp migrate --no-interactive # migration should check each package's peerDependencies
> vp migrate --no-interactive # migration should preserve vite peer contracts in workspace packages
◇ Migrated . to Vite+<repeat>
• Node <semver> pnpm <semver>
• 2 config updates applied, 1 file had imports rewritten

> cat packages/vite-plugin/src/index.ts # vite-plugin has vite in peerDeps: vite NOT rewritten, vitest rewritten
> cat packages/vite-plugin/src/index.ts # vite-plugin has vite in peerDeps: vite imports stay public, vitest rewrites
import { defineConfig, type Plugin } from 'vite';
import { describe, it, expect } from 'vite-plus/test';

Expand Down Expand Up @@ -38,10 +38,13 @@ export default defineConfig({
}
}

> cat packages/vite-plugin/package.json # has vite in peerDependencies
> cat packages/vite-plugin/package.json # vite peer range is preserved
{
"name": "my-vite-plugin",
"peerDependencies": {
"vite": "^6.0.0"
},
"devDependencies": {
"vite-plus": "catalog:"
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"commands": [
"vp migrate --no-interactive # migration should check each package's peerDependencies",
"cat packages/vite-plugin/src/index.ts # vite-plugin has vite in peerDeps: vite NOT rewritten, vitest rewritten",
"vp migrate --no-interactive # migration should preserve vite peer contracts in workspace packages",
"cat packages/vite-plugin/src/index.ts # vite-plugin has vite in peerDeps: vite imports stay public, vitest rewrites",
"cat package.json # check root package.json (no peerDependencies)",
"cat packages/vite-plugin/package.json # has vite in peerDependencies"
"cat packages/vite-plugin/package.json # vite peer range is preserved"
]
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
> vp migrate --no-interactive # migration should skip rewriting vite imports when vite is in peerDependencies
> vp migrate --no-interactive # migration should preserve vite peer contracts
◇ Migrated . to Vite+<repeat>
• Node <semver> pnpm <semver>
• 2 config updates applied, 1 file had imports rewritten

> cat src/index.ts # vite imports should NOT be rewritten, vitest imports SHOULD be rewritten
> cat src/index.ts # vite imports stay public, vitest imports rewrite
import { defineConfig, type Plugin } from 'vite';
import { describe, it, expect } from 'vite-plus/test';

Expand All @@ -26,7 +26,7 @@ export default defineConfig({
plugins: [myVitePlugin()],
});

> cat package.json # check package.json
> cat package.json # vite peer range is preserved
{
"name": "migration-skip-vite-peer-dependency",
"peerDependencies": {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"commands": [
"vp migrate --no-interactive # migration should skip rewriting vite imports when vite is in peerDependencies",
"cat src/index.ts # vite imports should NOT be rewritten, vitest imports SHOULD be rewritten",
"cat package.json # check package.json",
"vp migrate --no-interactive # migration should preserve vite peer contracts",
"cat src/index.ts # vite imports stay public, vitest imports rewrite",
"cat package.json # vite peer range is preserved",
"cat pnpm-workspace.yaml # check pnpm-workspace.yaml has overrides and catalog"
]
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ vi.mock('../../utils/constants.js', async (importOriginal) => {
};
});

const { rewriteMonorepo } = await import('../migrator.js');
const { rewriteMonorepo, rewritePackageJson } = await import('../migrator.js');

function makeWorkspaceInfo(rootDir: string, packageManager: PackageManager): WorkspaceInfo {
return {
Expand Down Expand Up @@ -86,4 +86,67 @@ describe('rewriteMonorepo bun catalog with file: protocol', () => {
'file:/tmp/tgz/voidzero-dev-vite-plus-test-0.0.0.tgz',
);
});

it('does not write file: paths into named catalogs', () => {
fs.writeFileSync(
path.join(tmpDir, 'package.json'),
JSON.stringify({
name: 'bun-monorepo',
workspaces: {
packages: ['packages/*'],
catalogs: {
build: {
vite: '^7.0.0',
vitest: '^4.0.0',
tsdown: '^0.1.0',
},
},
},
devDependencies: { vite: 'catalog:build' },
overrides: { vite: 'catalog:build' },
packageManager: 'bun@1.3.11',
}),
);

rewriteMonorepo(makeWorkspaceInfo(tmpDir, PackageManager.bun), true);

const pkg = readJson(path.join(tmpDir, 'package.json')) as {
workspaces: {
catalog: Record<string, string>;
catalogs: Record<string, Record<string, string>>;
};
overrides: Record<string, string>;
devDependencies: Record<string, string>;
};
expect(pkg.workspaces.catalog.vite).toBeUndefined();
expect(pkg.workspaces.catalog.vitest).toBeUndefined();
expect(pkg.workspaces.catalogs.build.vite).toBe('^7.0.0');
expect(pkg.workspaces.catalogs.build.vitest).toBe('^4.0.0');
expect(pkg.workspaces.catalogs.build.tsdown).toBeUndefined();
expect(pkg.overrides.vite).toBe('file:/tmp/tgz/voidzero-dev-vite-plus-core-0.0.0.tgz');
expect(pkg.devDependencies.vite).toBe('file:/tmp/tgz/voidzero-dev-vite-plus-core-0.0.0.tgz');
});

it('does not write file: paths into peer dependencies', () => {
const pkg = {
peerDependencies: {
vite: '^7.0.0',
vitest: 'catalog:test',
},
optionalDependencies: {
vite: '^7.0.0',
},
};

rewritePackageJson(pkg, PackageManager.pnpm, true);

expect(pkg.peerDependencies.vite).toBe('^7.0.0');
expect(pkg.peerDependencies.vitest).toBe('*');
expect(pkg.optionalDependencies.vite).toBe(
'file:/tmp/tgz/voidzero-dev-vite-plus-core-0.0.0.tgz',
);
expect(
(pkg as { devDependencies?: Record<string, string> }).devDependencies?.['vite-plus'],
).toBe('file:/tmp/tgz/vite-plus-0.0.0.tgz');
});
});
Loading
Loading