Skip to content

Commit c337665

Browse files
fix(migrate): integrate leftover tsdown config
1 parent 3fcce3f commit c337665

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
@@ -8796,6 +8796,7 @@ describe('existing Vite+ core migration finalization', () => {
87968796
scripts: true,
87978797
tsconfigTypes: true,
87988798
imports: true,
8799+
tsdownConfig: false,
87998800
});
88008801

88018802
const pkg = readJson(path.join(tmpDir, 'package.json')) as {
@@ -8850,6 +8851,46 @@ describe('existing Vite+ core migration finalization', () => {
88508851
};
88518852
expect(appPkg.scripts.dev).toBe('vp dev');
88528853
});
8854+
8855+
it('makes a leftover tsdown config discoverable in an existing Vite+ project', () => {
8856+
fs.writeFileSync(
8857+
path.join(tmpDir, 'package.json'),
8858+
JSON.stringify({ name: 'test', devDependencies: { 'vite-plus': 'latest' } }, null, 2),
8859+
);
8860+
fs.writeFileSync(
8861+
path.join(tmpDir, 'tsdown.config.ts'),
8862+
`import { defineConfig } from 'tsdown';
8863+
8864+
export default defineConfig({
8865+
entry: { index: 'src/index.ts', utils: 'src/utils.ts' },
8866+
});
8867+
`,
8868+
);
8869+
8870+
const workspaceInfo = makeWorkspaceInfo(tmpDir, PackageManager.pnpm);
8871+
expect(finalizeCoreMigrationForExistingVitePlus(workspaceInfo, true)).toEqual({
8872+
scripts: false,
8873+
tsconfigTypes: false,
8874+
imports: true,
8875+
tsdownConfig: true,
8876+
});
8877+
expect(fs.readFileSync(path.join(tmpDir, 'vite.config.ts'), 'utf8')).toContain(
8878+
"import tsdownConfig from './tsdown.config.js';",
8879+
);
8880+
expect(fs.readFileSync(path.join(tmpDir, 'vite.config.ts'), 'utf8')).toContain(
8881+
'pack: tsdownConfig',
8882+
);
8883+
expect(fs.readFileSync(path.join(tmpDir, 'tsdown.config.ts'), 'utf8')).toContain(
8884+
"from 'vite-plus/pack'",
8885+
);
8886+
8887+
expect(finalizeCoreMigrationForExistingVitePlus(workspaceInfo, true)).toEqual({
8888+
scripts: false,
8889+
tsconfigTypes: false,
8890+
imports: false,
8891+
tsdownConfig: false,
8892+
});
8893+
});
88538894
});
88548895

88558896
// 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)