/** * Hot-swaps tsconfig files to work around vite limitations. * Based on idea from https://github.com/vitejs/vite/discussions/8483#discussioncomment-6830634 */ import nodeFs from 'node:fs/promises'; import nodePath from 'node:path'; import { execa } from 'execa'; const rootDir = nodePath.resolve(import.meta.dirname, '../'); const tsConfig = nodePath.resolve(rootDir, 'tsconfig.json'); const tsConfigBak = nodePath.resolve(rootDir, 'tsconfig.json.bak'); const tsConfigVue = nodePath.resolve(rootDir, 'tsconfig.vue.json'); console.log('Staging tsconfig.vue.json as tsconfig.json...'); await nodeFs.rename(tsConfig, tsConfigBak); await nodeFs.copyFile(tsConfigVue, tsConfig); try { console.log('Starting vitest...'); await execa( 'vitest', process.argv.slice(2), { stdout: process.stdout, stderr: process.stderr, }, ); } finally { console.log('Restoring original tsconfig.json...'); await nodeFs.rm(tsConfig); await nodeFs.rename(tsConfigBak, tsConfig); }