Files
ttrpg-tools/src/markdown/index.ts
T
hypercross f33761e24f refactor(markdown): Make module CLI-importable
Drop the mermaid import from the markdown module. The extension only emits <pre class="mermaid">, so initialize mermaid in the app entry instead. Use explicit .js specifiers plus a bundler extensionAlias so both the NodeNext CLI build and the web build resolve the sources.
2026-09-12 16:38:03 +08:00

42 lines
1.1 KiB
TypeScript

import { Marked, type MarkedExtension } from "marked";
import { createDirectives, presetDirectiveConfigs } from "marked-directive";
import markedAlert from "marked-alert";
import markedMermaid from "./mermaid.js";
import { gfmHeadingId } from "marked-gfm-heading-id";
import markedColumns from "./columns.js";
import markedCodeBlockYamlTag from "./code-block-yaml-tag.js";
import { iconDirective, setIconBase } from "./icon.js";
import { cmdDirective } from "./cmd.js";
// 使用 marked-directive 来支持指令语法
const marked = new Marked()
.use(gfmHeadingId())
.use(markedAlert())
.use(markedMermaid())
.use(markedCodeBlockYamlTag())
.use(
createDirectives([
...presetDirectiveConfigs,
{
marker: "::::",
level: "container",
},
{
marker: ":::::",
level: "container",
},
iconDirective,
cmdDirective,
]),
{
extensions: [...markedColumns()],
},
);
export function parseMarkdown(content: string, basePath?: string): string {
setIconBase(basePath);
return marked.parse(content.trimStart()) as string;
}
export { marked };