- generated/ и README_RU.md добавлены в .gitignore - README.md заменён на статичный с ссылками на документацию - генерация README убрана из concat-md.js - npm run docs добавлен в Dockerfile перед билдом
77 lines
2.4 KiB
JavaScript
77 lines
2.4 KiB
JavaScript
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");
|
||
};
|
||
|
||
// Собрать RULES.md с мета-якорями для каждого файла
|
||
const buildRules = (lang) => {
|
||
const srcDir = `./docs/${lang}`;
|
||
const outDir = `./generated/${lang}`;
|
||
const outFile = path.join(outDir, "RULES.md");
|
||
|
||
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");
|
||
console.log(`RULES.md (${lang}) создан: ${outFile}`);
|
||
};
|
||
|
||
// Собираем RULES.md для обоих языков
|
||
buildRules("ru");
|
||
buildRules("en");
|
||
|
||
|