Files
test-repo/src/language-markdown/parse/parse-markdown.js
T

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

63 lines
2.0 KiB
JavaScript
Raw Normal View History

import { fromMarkdown as wikiLinkFromMarkdown } from "@braindb/mdast-util-wiki-link";
import { syntax as wikiLinkSyntax } from "@braindb/micromark-extension-wiki-link";
import { fromMarkdown } from "mdast-util-from-markdown";
import { mathFromMarkdown } from "mdast-util-math";
import { gfm as gfmSyntax } from "micromark-extension-gfm";
import { math as mathSyntax } from "micromark-extension-math";
import parseFrontMatter from "../../main/front-matter/parse.js";
import { gfmFromMarkdown } from "./micromark/mdast-util-gfm.js";
import { overrideHtmlTextSyntax } from "./micromark/micromark-extension-html-text.js";
import {
liquidFromMarkdown,
liquidSyntax,
} from "./micromark/micromark-extension-liquid.js";
let markdownParseOptions;
function getMarkdownParseOptions() {
return (markdownParseOptions ??= {
extensions: [
2026-07-28 07:29:52 +05:00
gfmSyntax({ singleTilde: false }),
mathSyntax(),
wikiLinkSyntax({
// We don't need support alias, use a fake string to bypass
// https://github.com/stereobooster/braindb/blob/66d6cf74d0bad43f20924a14e382a432ff81cdfa/packages/micromark-extension-wiki-link/src/syntax.ts#L81
// @ts-expect-error -- expected
aliasDivider: { charCodeAt: () => Number.NaN },
}),
liquidSyntax(),
overrideHtmlTextSyntax(),
],
mdastExtensions: [
gfmFromMarkdown(),
mathFromMarkdown(),
wikiLinkFromMarkdown(),
liquidFromMarkdown(),
],
});
}
function parseMarkdown(text) {
const { frontMatter, content } = parseFrontMatter(text);
const ast = fromMarkdown(content, getMarkdownParseOptions());
if (frontMatter) {
const [start, end] = [frontMatter.start, frontMatter.end].map(
({ line, column, index }) => ({
line,
column: column + 1,
offset: index,
}),
);
ast.children.unshift({
...frontMatter,
// @ts-expect-error -- Expected
type: "frontMatter",
position: { start, end },
});
}
return ast;
}
export { parseMarkdown };