refactor: dedupe shared helpers

This commit is contained in:
Peter Steinberger
2026-04-24 08:26:26 +01:00
parent 661f11b947
commit 69196670b7
16 changed files with 293 additions and 509 deletions

View File

@@ -3,6 +3,10 @@
import fs from "node:fs";
import path from "node:path";
import { compile } from "@mdx-js/mdx";
import {
checkMintlifyAccordionIndentation,
MINTLIFY_ACCORDION_INDENT_MESSAGE,
} from "./lib/mintlify-accordion.mjs";
const MINTLIFY_LANGUAGE_CODES = new Set([
"en",
@@ -120,59 +124,13 @@ function formatMdxError(filePath, error) {
}
function checkMintlifyMdxStructure(filePath, raw) {
const errors = [];
const lines = stripFrontmatter(raw).split(/\r?\n/u);
const accordionStack = [];
let inCodeFence = false;
for (let index = 0; index < lines.length; index += 1) {
const line = lines[index];
if (/^\s*(```|~~~)/u.test(line)) {
inCodeFence = !inCodeFence;
continue;
}
if (inCodeFence) {
continue;
}
const openAccordion = line.match(/^(\s*)<Accordion\b/u);
if (openAccordion) {
accordionStack.push({
indent: openAccordion[1].length,
line: index + 1,
hasOutdentedListItem: false,
});
continue;
}
const listItem = line.match(/^(\s*)[-*+]\s+/u);
if (listItem) {
for (const accordion of accordionStack) {
if (listItem[1].length < accordion.indent) {
accordion.hasOutdentedListItem = true;
}
}
}
const closeAccordion = line.match(/^(\s*)<\/Accordion>/u);
if (!closeAccordion) {
continue;
}
const opening = accordionStack.pop();
if (opening && opening.hasOutdentedListItem && closeAccordion[1].length > opening.indent) {
errors.push({
type: "mintlify-mdx",
file: filePath,
line: index + 1,
column: closeAccordion[1].length + 1,
message:
"Accordion closing tag is indented deeper than its opening tag; Mintlify can parse following markdown as nested content.",
});
}
}
return errors;
return checkMintlifyAccordionIndentation(stripFrontmatter(raw)).map((error) => ({
type: "mintlify-mdx",
file: filePath,
line: error.line,
column: error.column,
message: MINTLIFY_ACCORDION_INDENT_MESSAGE,
}));
}
async function checkMdxFile(filePath) {