import fs from "fs"; import path from "path"; import { pathToFileURL } from "url"; const SRC_DIR = "./src"; const DIST_DIR = "./dist/ai"; const SCRIPTS_DIR = "./scripts"; // --------------------------------------------------------------------------- // Сборка по манифесту // --------------------------------------------------------------------------- async function buildForFramework(framework) { const manifestPath = path.join(SCRIPTS_DIR, `${framework}.build.js`); if (!fs.existsSync(manifestPath)) { console.error(`Манифест не найден: ${manifestPath}`); process.exit(1); } const manifest = (await import(pathToFileURL(path.resolve(manifestPath)).href)).default; const outDir = path.join(DIST_DIR, framework); // Очищаем выходную директорию if (fs.existsSync(outDir)) { fs.rmSync(outDir, { recursive: true, force: true }); } console.log(`\nСборка: ${manifest.name} (${framework})`); console.log(`Выход: ${outDir}\n`); const errors = []; let count = 0; for (const [destRelative, srcRelative] of Object.entries(manifest.files)) { const srcPath = path.join(SRC_DIR, srcRelative); const destPath = path.join(outDir, destRelative); if (!fs.existsSync(srcPath)) { errors.push(` [!] Не найден: ${srcRelative}`); continue; } fs.mkdirSync(path.dirname(destPath), { recursive: true }); fs.copyFileSync(srcPath, destPath); console.log(` ${destRelative}`); count++; } if (errors.length > 0) { console.log(`\nОшибки:`); errors.forEach((e) => console.log(e)); } console.log(`\nГотово: ${outDir} (${count} файлов)`); } // --------------------------------------------------------------------------- // Определяем что собирать // --------------------------------------------------------------------------- let frameworks = fs .readdirSync(SCRIPTS_DIR) .filter((f) => f.endsWith(".build.js")) .map((f) => f.replace(".build.js", "")); if (frameworks.length === 0) { console.error("Не найдено ни одного манифеста *.build.js в scripts/"); process.exit(1); } // --framework=nextjs const fwArg = process.argv.find((a) => a.startsWith("--framework=")); if (fwArg) { const fw = fwArg.split("=")[1]; if (frameworks.includes(fw)) { frameworks = [fw]; } else { console.error(`Фреймворк "${fw}" не найден. Доступные: ${frameworks.join(", ")}`); process.exit(1); } } for (const fw of frameworks) { await buildForFramework(fw); } console.log("\nВсе сборки завершены.");