Files
nextjs-style-guide/scripts/build-ai.js

89 lines
2.6 KiB
JavaScript
Raw Normal View History

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Все сборки завершены.");