feat: Progressive Disclosure документация
This commit is contained in:
88
scripts/build-ai.js
Normal file
88
scripts/build-ai.js
Normal file
@@ -0,0 +1,88 @@
|
||||
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Все сборки завершены.");
|
||||
Reference in New Issue
Block a user