Skip to content

Commit dc06910

Browse files
fix(migrate): integrate leftover tsdown config
1 parent a211e03 commit dc06910

4 files changed

Lines changed: 63 additions & 5 deletions

File tree

packages/cli/src/migration/__tests__/migrator.spec.ts

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8747,6 +8747,7 @@ describe('existing Vite+ core migration finalization', () => {
87478747
scripts: true,
87488748
tsconfigTypes: true,
87498749
imports: true,
8750+
tsdownConfig: false,
87508751
});
87518752

87528753
const pkg = readJson(path.join(tmpDir, 'package.json')) as {
@@ -8801,6 +8802,46 @@ describe('existing Vite+ core migration finalization', () => {
88018802
};
88028803
expect(appPkg.scripts.dev).toBe('vp dev');
88038804
});
8805+
8806+
it('makes a leftover tsdown config discoverable in an existing Vite+ project', () => {
8807+
fs.writeFileSync(
8808+
path.join(tmpDir, 'package.json'),
8809+
JSON.stringify({ name: 'test', devDependencies: { 'vite-plus': 'latest' } }, null, 2),
8810+
);
8811+
fs.writeFileSync(
8812+
path.join(tmpDir, 'tsdown.config.ts'),
8813+
`import { defineConfig } from 'tsdown';
8814+
8815+
export default defineConfig({
8816+
entry: { index: 'src/index.ts', utils: 'src/utils.ts' },
8817+
});
8818+
`,
8819+
);
8820+
8821+
const workspaceInfo = makeWorkspaceInfo(tmpDir, PackageManager.pnpm);
8822+
expect(finalizeCoreMigrationForExistingVitePlus(workspaceInfo, true)).toEqual({
8823+
scripts: false,
8824+
tsconfigTypes: false,
8825+
imports: true,
8826+
tsdownConfig: true,
8827+
});
8828+
expect(fs.readFileSync(path.join(tmpDir, 'vite.config.ts'), 'utf8')).toContain(
8829+
"import tsdownConfig from './tsdown.config.js';",
8830+
);
8831+
expect(fs.readFileSync(path.join(tmpDir, 'vite.config.ts'), 'utf8')).toContain(
8832+
'pack: tsdownConfig',
8833+
);
8834+
expect(fs.readFileSync(path.join(tmpDir, 'tsdown.config.ts'), 'utf8')).toContain(
8835+
"from 'vite-plus/pack'",
8836+
);
8837+
8838+
expect(finalizeCoreMigrationForExistingVitePlus(workspaceInfo, true)).toEqual({
8839+
scripts: false,
8840+
tsconfigTypes: false,
8841+
imports: false,
8842+
tsdownConfig: false,
8843+
});
8844+
});
88048845
});
88058846

88068847
// Regression: templates such as `create-fate` ship a populated vite.config.ts

packages/cli/src/migration/bin.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1114,7 +1114,8 @@ async function main() {
11141114
if (
11151115
coreMigrationResult.scripts ||
11161116
coreMigrationResult.tsconfigTypes ||
1117-
coreMigrationResult.imports
1117+
coreMigrationResult.imports ||
1118+
coreMigrationResult.tsdownConfig
11181119
) {
11191120
didMigrate = true;
11201121
}

packages/cli/src/migration/migrator/core-finalization.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,12 @@ import { rewriteScripts } from '../../../binding/index.js';
55
import { type WorkspacePackage } from '../../types/index.ts';
66
import { editJsonFile, readJsonFile } from '../../utils/json.ts';
77
import { rulesDir } from '../../utils/path.ts';
8-
import { hasTsconfigTypesToRewrite, rewriteAllImports, rewriteTsconfigTypes } from '../migrator.ts';
8+
import {
9+
hasTsconfigTypesToRewrite,
10+
mergeTsdownConfigFile,
11+
rewriteAllImports,
12+
rewriteTsconfigTypes,
13+
} from '../migrator.ts';
914
import { type MigrationReport } from '../report.ts';
1015

1116
const RULES_YAML_PATH = path.join(rulesDir, 'vite-tools.yml');
@@ -76,6 +81,7 @@ export type CoreMigrationFinalizationResult = {
7681
scripts: boolean;
7782
tsconfigTypes: boolean;
7883
imports: boolean;
84+
tsdownConfig: boolean;
7985
};
8086

8187
function getCoreMigrationProjectPaths(workspaceInfo: CoreMigrationWorkspace): string[] {
@@ -140,6 +146,7 @@ export function finalizeCoreMigrationForExistingVitePlus(
140146
scripts: false,
141147
tsconfigTypes: false,
142148
imports: false,
149+
tsdownConfig: false,
143150
};
144151

145152
if (pending.scripts) {
@@ -157,5 +164,12 @@ export function finalizeCoreMigrationForExistingVitePlus(
157164

158165
result.imports = rewriteAllImports(workspaceInfo.rootDir, silent, report, true);
159166

167+
// Partial migrations can already have a Vite+ dependency while leaving
168+
// tsdown.config.* undiscoverable by vp pack. Finalize those configs on the
169+
// existing-Vite+ path just as the fresh migration path does.
170+
for (const projectPath of projectPaths) {
171+
result.tsdownConfig = mergeTsdownConfigFile(projectPath, silent, report) || result.tsdownConfig;
172+
}
173+
160174
return result;
161175
}

packages/cli/src/migration/migrator/vite-config.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -174,11 +174,12 @@ export function mergeTsdownConfigFile(
174174
projectPath: string,
175175
silent = false,
176176
report?: MigrationReport,
177-
): void {
177+
): boolean {
178178
const configs = detectConfigs(projectPath);
179179
if (!configs.tsdownConfig) {
180-
return;
180+
return false;
181181
}
182+
const createdViteConfig = !configs.viteConfig;
182183
const viteConfig = ensureViteConfig(projectPath, configs, silent, report);
183184

184185
const fullViteConfigPath = path.join(projectPath, viteConfig);
@@ -187,7 +188,7 @@ export function mergeTsdownConfigFile(
187188
// For JSON files, merge content directly and delete the file
188189
if (configs.tsdownConfig.endsWith('.json')) {
189190
mergeAndRemoveJsonConfig(projectPath, viteConfig, configs.tsdownConfig, 'pack', silent, report);
190-
return;
191+
return createdViteConfig || !fs.existsSync(fullTsdownConfigPath);
191192
}
192193

193194
// For TS/JS files, import the config file
@@ -209,6 +210,7 @@ export function mergeTsdownConfigFile(
209210
`Please manually merge ${displayRelative(fullTsdownConfigPath)} into ${displayRelative(fullViteConfigPath)}, see https://viteplus.dev/guide/migrate#tsdown`,
210211
report,
211212
);
213+
return createdViteConfig || result.updated;
212214
}
213215

214216
/**

0 commit comments

Comments
 (0)