@riebeckite/plugin-mermaid 0.0.30 → 0.0.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/README_ja.md +2 -0
- package/dist/client.js +9 -4
- package/dist/index.js +35 -45
- package/dist/src/hast.d.ts +8 -7
- package/dist/src/init.d.ts +7 -1
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -6,6 +6,8 @@ Mermaid diagram rendering for ` ```mermaid ` code blocks.
|
|
|
6
6
|
|
|
7
7
|
[日本語](./README_ja.md)
|
|
8
8
|
|
|
9
|
+
For static SVG rendering without a headless browser, see [Mermaid (Pele)](../mermaid-pele/README.md).
|
|
10
|
+
|
|
9
11
|
## Overview
|
|
10
12
|
|
|
11
13
|
`mermaid()` replaces mermaid code blocks with a `<figure class="rr-mermaid">`
|
package/README_ja.md
CHANGED
package/dist/client.js
CHANGED
|
@@ -1,27 +1,32 @@
|
|
|
1
1
|
// src/init.ts
|
|
2
2
|
var DEFAULT_THEME = { light: "default", dark: "dark" };
|
|
3
3
|
var DEFAULT_SCRIPT_URL = "https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.min.js";
|
|
4
|
-
async function initMermaidDiagrams(
|
|
4
|
+
async function initMermaidDiagrams(context = {}) {
|
|
5
|
+
const options = context.config ?? {};
|
|
6
|
+
const root = context.root ?? document;
|
|
5
7
|
const mermaid = options.mermaid ?? await loadMermaid(options.scriptUrl);
|
|
6
8
|
if (!mermaid) return;
|
|
9
|
+
if (context.signal?.aborted) return;
|
|
7
10
|
mermaid.initialize({
|
|
8
11
|
startOnLoad: false,
|
|
9
12
|
securityLevel: "strict",
|
|
10
13
|
theme: selectTheme(options.theme ?? DEFAULT_THEME)
|
|
11
14
|
});
|
|
12
|
-
const diagrams =
|
|
15
|
+
const diagrams = root.querySelectorAll(
|
|
13
16
|
'.rr-mermaid[data-mermaid="pending"]'
|
|
14
17
|
);
|
|
15
18
|
for (const [index, diagram] of Array.from(diagrams).entries()) {
|
|
16
|
-
|
|
19
|
+
if (context.signal?.aborted || !diagram.isConnected) return;
|
|
20
|
+
await renderDiagram(mermaid, diagram, index, context.signal);
|
|
17
21
|
}
|
|
18
22
|
}
|
|
19
|
-
async function renderDiagram(mermaid, diagram, index) {
|
|
23
|
+
async function renderDiagram(mermaid, diagram, index, signal) {
|
|
20
24
|
const source = diagram.dataset.mermaidSource;
|
|
21
25
|
const canvas = diagram.querySelector(".rr-mermaid__canvas");
|
|
22
26
|
if (!source || !canvas) return;
|
|
23
27
|
try {
|
|
24
28
|
const { svg } = await mermaid.render(`rr-mermaid-client-${index}`, source);
|
|
29
|
+
if (signal?.aborted || !diagram.isConnected) return;
|
|
25
30
|
canvas.innerHTML = svg;
|
|
26
31
|
diagram.removeAttribute("data-mermaid");
|
|
27
32
|
} catch {
|
package/dist/index.js
CHANGED
|
@@ -14,52 +14,24 @@ var __export = (target, all) => {
|
|
|
14
14
|
};
|
|
15
15
|
|
|
16
16
|
// src/hast.ts
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
function element(tagName, properties = {}, children = []) {
|
|
29
|
-
return { type: "element", tagName, properties, children };
|
|
30
|
-
}
|
|
31
|
-
function text(value) {
|
|
32
|
-
return { type: "text", value };
|
|
33
|
-
}
|
|
34
|
-
function getTextContent(node) {
|
|
35
|
-
if (node.type === "text" && "value" in node && typeof node.value === "string") {
|
|
36
|
-
return node.value;
|
|
37
|
-
}
|
|
38
|
-
return getChildren(node).map(getTextContent).join("");
|
|
39
|
-
}
|
|
40
|
-
function getStringProperty(node, key) {
|
|
41
|
-
const value = node.properties?.[key];
|
|
42
|
-
if (typeof value === "string") return value;
|
|
43
|
-
if (Array.isArray(value)) return value.join(" ");
|
|
44
|
-
return null;
|
|
45
|
-
}
|
|
46
|
-
function hasClass(node, className) {
|
|
47
|
-
const value = node.properties?.className;
|
|
48
|
-
const classes = Array.isArray(value) ? value.map(String) : typeof value === "string" ? value.split(/\s+/) : [];
|
|
49
|
-
return classes.includes(className);
|
|
50
|
-
}
|
|
51
|
-
function isElementNode(node) {
|
|
52
|
-
return node.type === "element";
|
|
53
|
-
}
|
|
54
|
-
function hasChildren(node) {
|
|
55
|
-
return Array.isArray(node.children);
|
|
56
|
-
}
|
|
57
|
-
function getChildren(node) {
|
|
58
|
-
const children = node.children;
|
|
59
|
-
return Array.isArray(children) ? children : [];
|
|
60
|
-
}
|
|
17
|
+
import {
|
|
18
|
+
element as sharedElement,
|
|
19
|
+
getStringProperty as sharedGetStringProperty,
|
|
20
|
+
getTextContent as sharedGetTextContent,
|
|
21
|
+
hasClass as sharedHasClass,
|
|
22
|
+
mergeClassName as sharedMergeClassName,
|
|
23
|
+
text as sharedText,
|
|
24
|
+
visitElements as sharedVisitElements
|
|
25
|
+
} from "@riebeckite/diagram";
|
|
26
|
+
var element, text, getTextContent, getStringProperty, hasClass, visitElements;
|
|
61
27
|
var init_hast = __esm({
|
|
62
28
|
"src/hast.ts"() {
|
|
29
|
+
element = sharedElement;
|
|
30
|
+
text = sharedText;
|
|
31
|
+
getTextContent = sharedGetTextContent;
|
|
32
|
+
getStringProperty = sharedGetStringProperty;
|
|
33
|
+
hasClass = sharedHasClass;
|
|
34
|
+
visitElements = sharedVisitElements;
|
|
63
35
|
}
|
|
64
36
|
});
|
|
65
37
|
|
|
@@ -73,6 +45,7 @@ function rehypeMermaid(options = {}, session) {
|
|
|
73
45
|
const renderMode = options.render ?? "build";
|
|
74
46
|
const theme = options.theme ?? DEFAULT_THEME;
|
|
75
47
|
return async (tree, file) => {
|
|
48
|
+
assertNoPeleRenderer(tree);
|
|
76
49
|
const replacements = [];
|
|
77
50
|
visitElements(tree, (node, parent, index) => {
|
|
78
51
|
if (!parent || index === void 0 || !isMermaidCodeBlock(node)) return;
|
|
@@ -144,12 +117,26 @@ function buildFigure(input) {
|
|
|
144
117
|
"figure",
|
|
145
118
|
{
|
|
146
119
|
className: "rr-mermaid",
|
|
120
|
+
dataRiebeckiteMermaidRenderer: "mermaid",
|
|
147
121
|
dataMermaid: input.clientFallback && !input.staticSvg ? "pending" : void 0,
|
|
148
122
|
dataMermaidSource: input.clientFallback && !input.staticSvg ? input.source : void 0
|
|
149
123
|
},
|
|
150
124
|
children
|
|
151
125
|
);
|
|
152
126
|
}
|
|
127
|
+
function assertNoPeleRenderer(tree) {
|
|
128
|
+
let hasPeleRenderer = false;
|
|
129
|
+
visitElements(tree, (node) => {
|
|
130
|
+
if (node.properties?.dataRiebeckiteMermaidRenderer === "pele") {
|
|
131
|
+
hasPeleRenderer = true;
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
if (hasPeleRenderer) {
|
|
135
|
+
throw new Error(
|
|
136
|
+
"@riebeckite/plugin-mermaid and @riebeckite/plugin-mermaid-pele cannot be enabled together. Enable exactly one Mermaid renderer."
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
153
140
|
async function renderStaticSvg(id, source, theme, file, session) {
|
|
154
141
|
try {
|
|
155
142
|
const result = await session.render(
|
|
@@ -523,7 +510,10 @@ function mermaid(options = {}) {
|
|
|
523
510
|
createClientEntry(
|
|
524
511
|
"mermaid",
|
|
525
512
|
"@riebeckite/plugin-mermaid/client",
|
|
526
|
-
"initMermaidDiagrams"
|
|
513
|
+
"initMermaidDiagrams",
|
|
514
|
+
void 0,
|
|
515
|
+
void 0,
|
|
516
|
+
"context"
|
|
527
517
|
)
|
|
528
518
|
]
|
|
529
519
|
});
|
package/dist/src/hast.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { mergeClassName as sharedMergeClassName } from "@riebeckite/diagram";
|
|
1
2
|
import type { ElementNode, HastNode, ParentNode, TextNode } from "./types.js";
|
|
2
|
-
export declare
|
|
3
|
-
export declare
|
|
4
|
-
export declare
|
|
5
|
-
export declare
|
|
6
|
-
export declare
|
|
7
|
-
export declare
|
|
8
|
-
export declare
|
|
3
|
+
export declare const element: (tagName: string, properties?: Record<string, unknown>, children?: HastNode[]) => ElementNode;
|
|
4
|
+
export declare const text: (value: string) => TextNode;
|
|
5
|
+
export declare const getTextContent: (node: HastNode) => string;
|
|
6
|
+
export declare const getStringProperty: (node: ElementNode, key: string) => string | null;
|
|
7
|
+
export declare const hasClass: (node: ElementNode, className: string) => boolean;
|
|
8
|
+
export declare const visitElements: (node: HastNode, visitor: (node: ElementNode, parent?: ParentNode, index?: number) => void, parent?: ParentNode, index?: number) => void;
|
|
9
|
+
export declare const mergeClassName: typeof sharedMergeClassName;
|
package/dist/src/init.d.ts
CHANGED
|
@@ -1,2 +1,8 @@
|
|
|
1
1
|
import type { MermaidClientOptions } from "./types.js";
|
|
2
|
-
|
|
2
|
+
type ClientContext = {
|
|
3
|
+
root?: ParentNode;
|
|
4
|
+
signal?: AbortSignal;
|
|
5
|
+
config?: MermaidClientOptions;
|
|
6
|
+
};
|
|
7
|
+
export declare function initMermaidDiagrams(context?: ClientContext): Promise<void>;
|
|
8
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@riebeckite/plugin-mermaid",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.32",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -23,7 +23,8 @@
|
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"mermaid": "^11.12.2",
|
|
25
25
|
"puppeteer": "^25.11.0",
|
|
26
|
-
"@riebeckite/core": "0.0.
|
|
26
|
+
"@riebeckite/core": "0.0.32",
|
|
27
|
+
"@riebeckite/diagram": "0.0.32"
|
|
27
28
|
},
|
|
28
29
|
"publishConfig": {
|
|
29
30
|
"access": "public"
|