import { build, loadConfigFromFile, mergeConfig, UserConfig } from 'vite';
import path from 'path';
import fs from 'fs-extra';

const packagesDir = path.resolve(__dirname, '../packages');
const outputDir = path.resolve(__dirname, '../dist/packages');

// 清空 dist 目录
fs.emptyDirSync(outputDir);

// 获取所有包目录
const packageDirs = fs.readdirSync(packagesDir).filter(name => {
    const packagePath = path.join(packagesDir, name);
    return fs.statSync(packagePath).isDirectory();
});

// 构建每一个包
async function buildPackages() {
    for (const packageName of packageDirs) {
        const packageDir = path.join(packagesDir, packageName);
        const configFile = path.resolve(__dirname, '../vite.config.ts');
        const config = await loadConfigFromFile(
            { command: 'build', mode: 'production' },
            configFile
        );
        const resolved = mergeConfig(config?.config ?? {}, {
            build: {
                lib: {
                    entry: path.join(packageDir, 'src/index.ts'),
                    name: packageName,
                    formats: ['es'],
                    fileName: format => `${packageName}.${format}.js`
                },
                outDir: path.join(outputDir, packageName),
                sourcemap: true,
                emptyOutDir: true,
                rollupOptions: {
                    external: [/node_modules/, /^@motajs\/.*/]
                }
            }
        } satisfies UserConfig);

        await build(resolved);
        console.log(`✅ Package ${packageName} built successfully.`);
    }
}

buildPackages().catch(e => {
    console.error(e);
    process.exit(1);
});