diff --git a/packages/tsconfig-reference/scripts/tsconfig/generateMarkdown.ts b/packages/tsconfig-reference/scripts/tsconfig/generateMarkdown.ts index a72b51173444..77de2e7907fe 100644 --- a/packages/tsconfig-reference/scripts/tsconfig/generateMarkdown.ts +++ b/packages/tsconfig-reference/scripts/tsconfig/generateMarkdown.ts @@ -34,6 +34,7 @@ import { watchOptionCompilerOptNames, rootOptNames, parseMarkdown, + parseMarkdownToPlainText, } from "../tsconfigRules.js"; const options: CompilerOptionJSON[] = JSON.parse(readFileSync(join("data", "tsconfigOpts.json"), "utf8")); @@ -219,7 +220,7 @@ languages.forEach((lang) => { optionsSummary.push({ id: optionName, display: optionFile.data.display, - oneliner: String(parseMarkdown(optionFile.data.oneline)), + oneliner: parseMarkdownToPlainText(String(optionFile.data.oneline)), categoryID: categoryID, categoryDisplay: categoryName, }); diff --git a/packages/tsconfig-reference/scripts/tsconfigRules.ts b/packages/tsconfig-reference/scripts/tsconfigRules.ts index e710dea44e0f..f1093b1e0b40 100644 --- a/packages/tsconfig-reference/scripts/tsconfigRules.ts +++ b/packages/tsconfig-reference/scripts/tsconfigRules.ts @@ -473,3 +473,19 @@ export const parseMarkdown = (value: string | string[]): string => .use(remarkHTML) .processSync(String(value).replace(/^[-.0-9_a-z]+$/i, "`$&`")) .toString(); + +type MarkdownNode = { + type: string; + value?: unknown; + alt?: unknown; + children?: MarkdownNode[]; +}; + +const markdownNodeToPlainText = (node: MarkdownNode): string => { + if (node.type === "image" && typeof node.alt === "string") return node.alt; + if (typeof node.value === "string") return node.value; + return node.children?.map(markdownNodeToPlainText).join("") ?? ""; +}; + +export const parseMarkdownToPlainText = (value: string): string => + markdownNodeToPlainText(remark().parse(value) as MarkdownNode);