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

89 lines
2.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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