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Все сборки завершены.");
|
||||
70
scripts/nextjs.build.js
Normal file
70
scripts/nextjs.build.js
Normal file
@@ -0,0 +1,70 @@
|
||||
/**
|
||||
* Манифест сборки стайлгайда для Next.js.
|
||||
*
|
||||
* Ключ — путь файла в dist/ai/nextjs/.
|
||||
* Значение — путь исходника относительно src/.
|
||||
*
|
||||
* Скрипт только копирует. Никакой генерации.
|
||||
*/
|
||||
export default {
|
||||
name: "Next.js",
|
||||
|
||||
files: {
|
||||
// ── Точки входа ─────────────────────────────────────────────
|
||||
"DEVELOP.md": "nextjs/DEVELOP.md",
|
||||
|
||||
// ── Базовые правила ─────────────────────────────────────────
|
||||
"basics/architecture.md": "base/basics/architecture.md",
|
||||
"basics/code-style.md": "base/basics/code-style.md",
|
||||
"basics/documentation.md": "base/basics/documentation.md",
|
||||
"basics/getting-started.md": "base/basics/getting-started.md",
|
||||
"basics/naming.md": "base/basics/naming.md",
|
||||
"basics/tech-stack.md": "base/basics/tech-stack.md",
|
||||
"basics/typing.md": "base/basics/typing.md",
|
||||
|
||||
// ── Прикладные разделы ──────────────────────────────────────
|
||||
"applied/components.md": "base/applied/components.md",
|
||||
"applied/styles.md": "base/applied/styles.md",
|
||||
"applied/templates-generation.md": "base/applied/templates-generation.md",
|
||||
"applied/hooks.md": "base/applied/hooks.md",
|
||||
"applied/stores.md": "base/applied/stores.md",
|
||||
"applied/api.md": "base/applied/api.md",
|
||||
"applied/fonts.md": "base/applied/fonts.md",
|
||||
"applied/localization.md": "base/applied/localization.md",
|
||||
"applied/images-sprites.md": "base/applied/images-sprites.md",
|
||||
"applied/svg-sprites.md": "base/applied/svg-sprites.md",
|
||||
"applied/video.md": "base/applied/video.md",
|
||||
"applied/vscode.md": "base/applied/vscode.md",
|
||||
"applied/page-level.md": "nextjs/applied/page-level.md",
|
||||
"applied/project-structure.md": "nextjs/applied/project-structure.md",
|
||||
|
||||
// ── Триггеры: разработка / создание ─────────────────────────
|
||||
"triggers/develop/create-component.md": "base/triggers/develop/create-component.md",
|
||||
"triggers/develop/create-feature.md": "base/triggers/develop/create-feature.md",
|
||||
"triggers/develop/create-widget.md": "base/triggers/develop/create-widget.md",
|
||||
"triggers/develop/create-entity.md": "base/triggers/develop/create-entity.md",
|
||||
"triggers/develop/create-hook.md": "base/triggers/develop/create-hook.md",
|
||||
"triggers/develop/create-store.md": "base/triggers/develop/create-store.md",
|
||||
"triggers/develop/create-page.md": "nextjs/triggers/develop/create-page.md",
|
||||
"triggers/develop/create-layout.md": "nextjs/triggers/develop/create-layout.md",
|
||||
"triggers/develop/create-project.md": "nextjs/triggers/develop/create-project.md",
|
||||
"triggers/develop/generate-module.md": "base/triggers/develop/generate-module.md",
|
||||
|
||||
// ── Триггеры: разработка / стилизация и ресурсы ─────────────
|
||||
"triggers/develop/style-component.md": "base/triggers/develop/style-component.md",
|
||||
"triggers/develop/add-icon.md": "base/triggers/develop/add-icon.md",
|
||||
"triggers/develop/add-image.md": "base/triggers/develop/add-image.md",
|
||||
"triggers/develop/add-video.md": "base/triggers/develop/add-video.md",
|
||||
"triggers/develop/add-font.md": "base/triggers/develop/add-font.md",
|
||||
|
||||
// ── Триггеры: разработка / данные и состояние ───────────────
|
||||
"triggers/develop/add-api-request.md": "base/triggers/develop/add-api-request.md",
|
||||
"triggers/develop/connect-store.md": "base/triggers/develop/connect-store.md",
|
||||
"triggers/develop/add-server-data.md": "nextjs/triggers/develop/add-server-data.md",
|
||||
|
||||
// ── Триггеры: разработка / инфраструктура ───────────────────
|
||||
"triggers/develop/add-localization.md": "base/triggers/develop/add-localization.md",
|
||||
"triggers/develop/add-dependency.md": "base/triggers/develop/add-dependency.md",
|
||||
"triggers/develop/setup-vscode.md": "base/triggers/develop/setup-vscode.md",
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user