docs: переработать архитектуру SLM Design
- переписана главная страница: преимущества, происхождение, принципы, структура проекта
- переработан справочник слоёв: business/infrastructure/ui вместо features/entities, группы слоёв (композиция/ядро/фундамент), параллельные layouts и screens, направление зависимостей, группировка при масштабировании
- заполнен справочник модулей: определение, модуль vs компонент, структура, публичный API, фабрика (DI), жизненный цикл
- заполнен справочник сегментов: 10 сегментов включая ui/, parts/, mappers/
- удалены заглушки guides/ и examples/, обновлён сайдбар и concat-md.js
- добавлена фильтрация rules-link при генерации RULES.md
2026-04-18 22:12:05 +03:00
|
|
|
|
import path from "path";
|
|
|
|
|
|
import fs from "fs";
|
|
|
|
|
|
|
|
|
|
|
|
// Явный порядок файлов внутри каждого языка
|
|
|
|
|
|
const fileOrder = [
|
|
|
|
|
|
"index.md",
|
|
|
|
|
|
// reference
|
|
|
|
|
|
"reference/layers.md",
|
|
|
|
|
|
"reference/modules.md",
|
|
|
|
|
|
"reference/segments.md",
|
|
|
|
|
|
|
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
|
|
// Удалить frontmatter из содержимого md-файла
|
|
|
|
|
|
const stripFrontmatter = (content) =>
|
|
|
|
|
|
content.replace(/^---[\s\S]*?---\n*/m, "");
|
|
|
|
|
|
|
|
|
|
|
|
// Удалить блоки между маркерами <!-- rules-link --> и <!-- /rules-link -->
|
|
|
|
|
|
const stripRulesLink = (content) =>
|
|
|
|
|
|
content.replace(/<!-- rules-link -->[\s\S]*?<!-- \/rules-link -->\n*/g, "");
|
|
|
|
|
|
|
|
|
|
|
|
// Сдвинуть уровень заголовков на 1 вниз (h1→h2, h2→h3, ...)
|
|
|
|
|
|
// Не трогает заголовки внутри блоков кода
|
|
|
|
|
|
const shiftHeadings = (content) => {
|
|
|
|
|
|
const lines = content.split("\n");
|
|
|
|
|
|
let inCodeBlock = false;
|
|
|
|
|
|
|
|
|
|
|
|
return lines
|
|
|
|
|
|
.map((line) => {
|
|
|
|
|
|
if (line.startsWith("```")) inCodeBlock = !inCodeBlock;
|
|
|
|
|
|
if (inCodeBlock) return line;
|
|
|
|
|
|
if (/^#{1,5}\s/.test(line)) return "#" + line;
|
|
|
|
|
|
return line;
|
|
|
|
|
|
})
|
|
|
|
|
|
.join("\n");
|
|
|
|
|
|
};
|
|
|
|
|
|
|
2026-04-19 00:52:10 +03:00
|
|
|
|
// Собрать ARCHITECTURE.md с мета-якорями для каждого файла
|
docs: переработать архитектуру SLM Design
- переписана главная страница: преимущества, происхождение, принципы, структура проекта
- переработан справочник слоёв: business/infrastructure/ui вместо features/entities, группы слоёв (композиция/ядро/фундамент), параллельные layouts и screens, направление зависимостей, группировка при масштабировании
- заполнен справочник модулей: определение, модуль vs компонент, структура, публичный API, фабрика (DI), жизненный цикл
- заполнен справочник сегментов: 10 сегментов включая ui/, parts/, mappers/
- удалены заглушки guides/ и examples/, обновлён сайдбар и concat-md.js
- добавлена фильтрация rules-link при генерации RULES.md
2026-04-18 22:12:05 +03:00
|
|
|
|
const buildRules = (lang) => {
|
|
|
|
|
|
const srcDir = `./docs/${lang}`;
|
|
|
|
|
|
const outDir = `./generated/${lang}`;
|
2026-04-19 00:52:10 +03:00
|
|
|
|
const outFile = path.join(outDir, "ARCHITECTURE.md");
|
docs: переработать архитектуру SLM Design
- переписана главная страница: преимущества, происхождение, принципы, структура проекта
- переработан справочник слоёв: business/infrastructure/ui вместо features/entities, группы слоёв (композиция/ядро/фундамент), параллельные layouts и screens, направление зависимостей, группировка при масштабировании
- заполнен справочник модулей: определение, модуль vs компонент, структура, публичный API, фабрика (DI), жизненный цикл
- заполнен справочник сегментов: 10 сегментов включая ui/, parts/, mappers/
- удалены заглушки guides/ и examples/, обновлён сайдбар и concat-md.js
- добавлена фильтрация rules-link при генерации RULES.md
2026-04-18 22:12:05 +03:00
|
|
|
|
|
|
|
|
|
|
if (!fs.existsSync(srcDir)) {
|
|
|
|
|
|
console.log(`Пропуск ${lang}: папка ${srcDir} не найдена`);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
fs.mkdirSync(outDir, { recursive: true });
|
|
|
|
|
|
|
|
|
|
|
|
const parts = [];
|
|
|
|
|
|
|
|
|
|
|
|
for (const file of fileOrder) {
|
|
|
|
|
|
const filePath = path.join(srcDir, file);
|
|
|
|
|
|
if (!fs.existsSync(filePath)) continue;
|
|
|
|
|
|
|
|
|
|
|
|
const raw = fs.readFileSync(filePath, "utf8");
|
|
|
|
|
|
const content = stripRulesLink(stripFrontmatter(raw)).trim();
|
|
|
|
|
|
if (!content) continue;
|
|
|
|
|
|
|
|
|
|
|
|
// Мета-якорь: путь VitePress без расширения
|
|
|
|
|
|
const route = "/" + file.replace(/\.md$/, "");
|
|
|
|
|
|
// index.md остаётся без сдвига (его h1 — главный заголовок документа)
|
|
|
|
|
|
const processed = file === "index.md" ? content : shiftHeadings(content);
|
|
|
|
|
|
parts.push(`<!-- ${route} -->\n${processed}`);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
fs.writeFileSync(outFile, parts.join("\n\n"), "utf8");
|
2026-04-19 00:52:10 +03:00
|
|
|
|
console.log(`ARCHITECTURE.md (${lang}) создан: ${outFile}`);
|
docs: переработать архитектуру SLM Design
- переписана главная страница: преимущества, происхождение, принципы, структура проекта
- переработан справочник слоёв: business/infrastructure/ui вместо features/entities, группы слоёв (композиция/ядро/фундамент), параллельные layouts и screens, направление зависимостей, группировка при масштабировании
- заполнен справочник модулей: определение, модуль vs компонент, структура, публичный API, фабрика (DI), жизненный цикл
- заполнен справочник сегментов: 10 сегментов включая ui/, parts/, mappers/
- удалены заглушки guides/ и examples/, обновлён сайдбар и concat-md.js
- добавлена фильтрация rules-link при генерации RULES.md
2026-04-18 22:12:05 +03:00
|
|
|
|
};
|
|
|
|
|
|
|
2026-04-19 00:52:10 +03:00
|
|
|
|
// Собираем ARCHITECTURE.md для обоих языков
|
docs: переработать архитектуру SLM Design
- переписана главная страница: преимущества, происхождение, принципы, структура проекта
- переработан справочник слоёв: business/infrastructure/ui вместо features/entities, группы слоёв (композиция/ядро/фундамент), параллельные layouts и screens, направление зависимостей, группировка при масштабировании
- заполнен справочник модулей: определение, модуль vs компонент, структура, публичный API, фабрика (DI), жизненный цикл
- заполнен справочник сегментов: 10 сегментов включая ui/, parts/, mappers/
- удалены заглушки guides/ и examples/, обновлён сайдбар и concat-md.js
- добавлена фильтрация rules-link при генерации RULES.md
2026-04-18 22:12:05 +03:00
|
|
|
|
buildRules("ru");
|
|
|
|
|
|
buildRules("en");
|
|
|
|
|
|
|
2026-04-19 01:59:10 +03:00
|
|
|
|
// Версия из package.json
|
|
|
|
|
|
const pkg = JSON.parse(fs.readFileSync("./package.json", "utf8"));
|
|
|
|
|
|
const version = `v${pkg.version}`;
|
|
|
|
|
|
|
|
|
|
|
|
// Подставить версию в ссылки
|
|
|
|
|
|
const replaceVersion = (content) =>
|
|
|
|
|
|
content.replace(/raw\/branch\/main/g, `raw/tag/${version}`);
|
|
|
|
|
|
|
2026-04-19 07:48:57 +03:00
|
|
|
|
|
|
|
|
|
|
|
2026-04-19 01:24:13 +03:00
|
|
|
|
// Генерируем README из index.md
|
|
|
|
|
|
const buildReadme = (lang, outFile) => {
|
|
|
|
|
|
const indexPath = `./docs/${lang}/index.md`;
|
|
|
|
|
|
|
|
|
|
|
|
if (!fs.existsSync(indexPath)) {
|
|
|
|
|
|
console.log(`Пропуск README (${lang}): ${indexPath} не найден`);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-04-19 01:59:10 +03:00
|
|
|
|
const content = replaceVersion(stripFrontmatter(fs.readFileSync(indexPath, "utf8")));
|
2026-04-19 01:24:13 +03:00
|
|
|
|
fs.writeFileSync(outFile, content, "utf8");
|
2026-04-19 01:59:10 +03:00
|
|
|
|
console.log(`${outFile} создан из ${indexPath} (${version})`);
|
2026-04-19 01:24:13 +03:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
buildReadme("ru", "./README_RU.md");
|
|
|
|
|
|
|
docs: переработать архитектуру SLM Design
- переписана главная страница: преимущества, происхождение, принципы, структура проекта
- переработан справочник слоёв: business/infrastructure/ui вместо features/entities, группы слоёв (композиция/ядро/фундамент), параллельные layouts и screens, направление зависимостей, группировка при масштабировании
- заполнен справочник модулей: определение, модуль vs компонент, структура, публичный API, фабрика (DI), жизненный цикл
- заполнен справочник сегментов: 10 сегментов включая ui/, parts/, mappers/
- удалены заглушки guides/ и examples/, обновлён сайдбар и concat-md.js
- добавлена фильтрация rules-link при генерации RULES.md
2026-04-18 22:12:05 +03:00
|
|
|
|
|