remark-docx 0.3.22 → 0.3.23
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 +17 -0
- package/lib/index.cjs +78 -15
- package/lib/index.cjs.map +1 -1
- package/lib/index.js +79 -16
- package/lib/index.js.map +1 -1
- package/lib/plugins/image/index.cjs +26 -64
- package/lib/plugins/image/index.cjs.map +1 -1
- package/lib/plugins/image/index.d.ts +3 -3
- package/lib/plugins/image/index.js +26 -65
- package/lib/plugins/image/index.js.map +1 -1
- package/lib/plugins/mermaid/index.cjs +76 -0
- package/lib/plugins/mermaid/index.cjs.map +1 -0
- package/lib/plugins/mermaid/index.d.ts +5 -0
- package/lib/plugins/mermaid/index.js +74 -0
- package/lib/plugins/mermaid/index.js.map +1 -0
- package/lib/types.d.ts +31 -0
- package/package.json +5 -3
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var utils = require('../../utils-19qN-XsS.js');
|
|
4
|
+
var mermaid = require('mermaid');
|
|
5
|
+
var unistUtilVisit = require('unist-util-visit');
|
|
6
|
+
var imageSize = require('image-size');
|
|
7
|
+
var plugins_image_index = require('../image/index.cjs');
|
|
8
|
+
var docx = require('docx');
|
|
9
|
+
|
|
10
|
+
const browserRender = async (value) => {
|
|
11
|
+
const element = document.createElement("div");
|
|
12
|
+
element.style.visibility = "hidden";
|
|
13
|
+
document.body.appendChild(element);
|
|
14
|
+
try {
|
|
15
|
+
const result = await mermaid.render("mermaid", value, element);
|
|
16
|
+
return result.svg;
|
|
17
|
+
}
|
|
18
|
+
finally {
|
|
19
|
+
document.body.removeChild(element);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* A plugin to render Mermaid inside "code" nodes with "mermaid" language.
|
|
24
|
+
*/
|
|
25
|
+
const mermaidPlugin = () => {
|
|
26
|
+
const renderSvg = browserRender;
|
|
27
|
+
return async ({ root, images }) => {
|
|
28
|
+
const promises = [];
|
|
29
|
+
unistUtilVisit.visit(root, "code", ({ lang, value }) => {
|
|
30
|
+
if (lang === "mermaid") {
|
|
31
|
+
if (!images.has(value)) {
|
|
32
|
+
images.set(value, null);
|
|
33
|
+
promises.push((async () => {
|
|
34
|
+
try {
|
|
35
|
+
const svg = await renderSvg(value);
|
|
36
|
+
const data = new TextEncoder().encode(svg);
|
|
37
|
+
const { width, height } = imageSize.imageSize(data);
|
|
38
|
+
const pngBuffer = await plugins_image_index.browserSvgToPng({
|
|
39
|
+
buffer: data.buffer,
|
|
40
|
+
width,
|
|
41
|
+
height,
|
|
42
|
+
});
|
|
43
|
+
images.set(value, {
|
|
44
|
+
type: "png",
|
|
45
|
+
width,
|
|
46
|
+
height,
|
|
47
|
+
data: pngBuffer,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
catch (e) {
|
|
51
|
+
utils.warnOnce(String(e));
|
|
52
|
+
}
|
|
53
|
+
})());
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
await Promise.all(promises);
|
|
58
|
+
return {
|
|
59
|
+
code: ({ lang, value }, ctx) => {
|
|
60
|
+
if (lang !== "mermaid") {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
const image = ctx.images.get(value);
|
|
64
|
+
if (image == null) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
return new docx.Paragraph({
|
|
68
|
+
children: ctx.render([{ type: "image", url: value }]),
|
|
69
|
+
});
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
exports.mermaidPlugin = mermaidPlugin;
|
|
76
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/plugins/mermaid/index.ts"],"sourcesContent":["import type { RemarkDocxPlugin } from \"../../types\";\nimport { warnOnce } from \"../../utils\";\nimport mermaid from \"mermaid\";\nimport { visit } from \"unist-util-visit\";\nimport { imageSize } from \"image-size\";\nimport { browserSvgToPng } from \"../image\";\nimport { Paragraph } from \"docx\";\n\nconst browserRender = async (value: string): Promise<string> => {\n const element = document.createElement(\"div\");\n element.style.visibility = \"hidden\";\n document.body.appendChild(element);\n try {\n const result = await mermaid.render(\"mermaid\", value, element);\n return result.svg;\n } finally {\n document.body.removeChild(element);\n }\n};\n\n/**\n * A plugin to render Mermaid inside \"code\" nodes with \"mermaid\" language.\n */\nexport const mermaidPlugin = (): RemarkDocxPlugin => {\n const renderSvg = browserRender;\n\n return async ({ root, images }) => {\n const promises: Promise<void>[] = [];\n visit(root, \"code\", ({ lang, value }) => {\n if (lang === \"mermaid\") {\n if (!images.has(value)) {\n images.set(value, null);\n\n promises.push(\n (async () => {\n try {\n const svg = await renderSvg(value);\n const data = new TextEncoder().encode(svg);\n const { width, height } = imageSize(data);\n const pngBuffer = await browserSvgToPng({\n buffer: data.buffer,\n width,\n height,\n });\n\n images.set(value, {\n type: \"png\",\n width,\n height,\n data: pngBuffer,\n });\n } catch (e) {\n warnOnce(String(e));\n }\n })(),\n );\n }\n }\n });\n\n await Promise.all(promises);\n\n return {\n code: ({ lang, value }, ctx) => {\n if (lang !== \"mermaid\") {\n return null;\n }\n const image = ctx.images.get(value);\n if (image == null) {\n return null;\n }\n\n return new Paragraph({\n children: ctx.render([{ type: \"image\", url: value }]),\n });\n },\n };\n };\n};\n"],"names":["visit","imageSize","browserSvgToPng","warnOnce","Paragraph"],"mappings":";;;;;;;;;AAQA,MAAM,aAAa,GAAG,OAAO,KAAa,KAAqB;IAC7D,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC7C,IAAA,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ;AACnC,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AAClC,IAAA,IAAI;AACF,QAAA,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC;QAC9D,OAAO,MAAM,CAAC,GAAG;IACnB;YAAU;AACR,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;IACpC;AACF,CAAC;AAED;;AAEG;AACI,MAAM,aAAa,GAAG,MAAuB;IAClD,MAAM,SAAS,GAAG,aAAa;IAE/B,OAAO,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAI;QAChC,MAAM,QAAQ,GAAoB,EAAE;AACpC,QAAAA,oBAAK,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAI;AACtC,YAAA,IAAI,IAAI,KAAK,SAAS,EAAE;gBACtB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AACtB,oBAAA,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC;AAEvB,oBAAA,QAAQ,CAAC,IAAI,CACX,CAAC,YAAW;AACV,wBAAA,IAAI;AACF,4BAAA,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC;4BAClC,MAAM,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC;4BAC1C,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAGC,mBAAS,CAAC,IAAI,CAAC;AACzC,4BAAA,MAAM,SAAS,GAAG,MAAMC,mCAAe,CAAC;gCACtC,MAAM,EAAE,IAAI,CAAC,MAAM;gCACnB,KAAK;gCACL,MAAM;AACP,6BAAA,CAAC;AAEF,4BAAA,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE;AAChB,gCAAA,IAAI,EAAE,KAAK;gCACX,KAAK;gCACL,MAAM;AACN,gCAAA,IAAI,EAAE,SAAS;AAChB,6BAAA,CAAC;wBACJ;wBAAE,OAAO,CAAC,EAAE;AACV,4BAAAC,cAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;wBACrB;oBACF,CAAC,GAAG,CACL;gBACH;YACF;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;QAE3B,OAAO;YACL,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,GAAG,KAAI;AAC7B,gBAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACtB,oBAAA,OAAO,IAAI;gBACb;gBACA,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AACnC,gBAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,oBAAA,OAAO,IAAI;gBACb;gBAEA,OAAO,IAAIC,cAAS,CAAC;AACnB,oBAAA,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;AACtD,iBAAA,CAAC;YACJ,CAAC;SACF;AACH,IAAA,CAAC;AACH;;;;"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { w as warnOnce } from '../../utils-BWBt3EKb.js';
|
|
2
|
+
import mermaid from 'mermaid';
|
|
3
|
+
import { visit } from 'unist-util-visit';
|
|
4
|
+
import { imageSize } from 'image-size';
|
|
5
|
+
import { browserSvgToPng } from '../image/index.js';
|
|
6
|
+
import { Paragraph } from 'docx';
|
|
7
|
+
|
|
8
|
+
const browserRender = async (value) => {
|
|
9
|
+
const element = document.createElement("div");
|
|
10
|
+
element.style.visibility = "hidden";
|
|
11
|
+
document.body.appendChild(element);
|
|
12
|
+
try {
|
|
13
|
+
const result = await mermaid.render("mermaid", value, element);
|
|
14
|
+
return result.svg;
|
|
15
|
+
}
|
|
16
|
+
finally {
|
|
17
|
+
document.body.removeChild(element);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* A plugin to render Mermaid inside "code" nodes with "mermaid" language.
|
|
22
|
+
*/
|
|
23
|
+
const mermaidPlugin = () => {
|
|
24
|
+
const renderSvg = browserRender;
|
|
25
|
+
return async ({ root, images }) => {
|
|
26
|
+
const promises = [];
|
|
27
|
+
visit(root, "code", ({ lang, value }) => {
|
|
28
|
+
if (lang === "mermaid") {
|
|
29
|
+
if (!images.has(value)) {
|
|
30
|
+
images.set(value, null);
|
|
31
|
+
promises.push((async () => {
|
|
32
|
+
try {
|
|
33
|
+
const svg = await renderSvg(value);
|
|
34
|
+
const data = new TextEncoder().encode(svg);
|
|
35
|
+
const { width, height } = imageSize(data);
|
|
36
|
+
const pngBuffer = await browserSvgToPng({
|
|
37
|
+
buffer: data.buffer,
|
|
38
|
+
width,
|
|
39
|
+
height,
|
|
40
|
+
});
|
|
41
|
+
images.set(value, {
|
|
42
|
+
type: "png",
|
|
43
|
+
width,
|
|
44
|
+
height,
|
|
45
|
+
data: pngBuffer,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
catch (e) {
|
|
49
|
+
warnOnce(String(e));
|
|
50
|
+
}
|
|
51
|
+
})());
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
await Promise.all(promises);
|
|
56
|
+
return {
|
|
57
|
+
code: ({ lang, value }, ctx) => {
|
|
58
|
+
if (lang !== "mermaid") {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
const image = ctx.images.get(value);
|
|
62
|
+
if (image == null) {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
return new Paragraph({
|
|
66
|
+
children: ctx.render([{ type: "image", url: value }]),
|
|
67
|
+
});
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
export { mermaidPlugin };
|
|
74
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/plugins/mermaid/index.ts"],"sourcesContent":["import type { RemarkDocxPlugin } from \"../../types\";\nimport { warnOnce } from \"../../utils\";\nimport mermaid from \"mermaid\";\nimport { visit } from \"unist-util-visit\";\nimport { imageSize } from \"image-size\";\nimport { browserSvgToPng } from \"../image\";\nimport { Paragraph } from \"docx\";\n\nconst browserRender = async (value: string): Promise<string> => {\n const element = document.createElement(\"div\");\n element.style.visibility = \"hidden\";\n document.body.appendChild(element);\n try {\n const result = await mermaid.render(\"mermaid\", value, element);\n return result.svg;\n } finally {\n document.body.removeChild(element);\n }\n};\n\n/**\n * A plugin to render Mermaid inside \"code\" nodes with \"mermaid\" language.\n */\nexport const mermaidPlugin = (): RemarkDocxPlugin => {\n const renderSvg = browserRender;\n\n return async ({ root, images }) => {\n const promises: Promise<void>[] = [];\n visit(root, \"code\", ({ lang, value }) => {\n if (lang === \"mermaid\") {\n if (!images.has(value)) {\n images.set(value, null);\n\n promises.push(\n (async () => {\n try {\n const svg = await renderSvg(value);\n const data = new TextEncoder().encode(svg);\n const { width, height } = imageSize(data);\n const pngBuffer = await browserSvgToPng({\n buffer: data.buffer,\n width,\n height,\n });\n\n images.set(value, {\n type: \"png\",\n width,\n height,\n data: pngBuffer,\n });\n } catch (e) {\n warnOnce(String(e));\n }\n })(),\n );\n }\n }\n });\n\n await Promise.all(promises);\n\n return {\n code: ({ lang, value }, ctx) => {\n if (lang !== \"mermaid\") {\n return null;\n }\n const image = ctx.images.get(value);\n if (image == null) {\n return null;\n }\n\n return new Paragraph({\n children: ctx.render([{ type: \"image\", url: value }]),\n });\n },\n };\n };\n};\n"],"names":[],"mappings":";;;;;;;AAQA,MAAM,aAAa,GAAG,OAAO,KAAa,KAAqB;IAC7D,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC7C,IAAA,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ;AACnC,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AAClC,IAAA,IAAI;AACF,QAAA,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC;QAC9D,OAAO,MAAM,CAAC,GAAG;IACnB;YAAU;AACR,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;IACpC;AACF,CAAC;AAED;;AAEG;AACI,MAAM,aAAa,GAAG,MAAuB;IAClD,MAAM,SAAS,GAAG,aAAa;IAE/B,OAAO,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAI;QAChC,MAAM,QAAQ,GAAoB,EAAE;AACpC,QAAA,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAI;AACtC,YAAA,IAAI,IAAI,KAAK,SAAS,EAAE;gBACtB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AACtB,oBAAA,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC;AAEvB,oBAAA,QAAQ,CAAC,IAAI,CACX,CAAC,YAAW;AACV,wBAAA,IAAI;AACF,4BAAA,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC;4BAClC,MAAM,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC;4BAC1C,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC;AACzC,4BAAA,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC;gCACtC,MAAM,EAAE,IAAI,CAAC,MAAM;gCACnB,KAAK;gCACL,MAAM;AACP,6BAAA,CAAC;AAEF,4BAAA,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE;AAChB,gCAAA,IAAI,EAAE,KAAK;gCACX,KAAK;gCACL,MAAM;AACN,gCAAA,IAAI,EAAE,SAAS;AAChB,6BAAA,CAAC;wBACJ;wBAAE,OAAO,CAAC,EAAE;AACV,4BAAA,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;wBACrB;oBACF,CAAC,GAAG,CACL;gBACH;YACF;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;QAE3B,OAAO;YACL,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,GAAG,KAAI;AAC7B,gBAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACtB,oBAAA,OAAO,IAAI;gBACb;gBACA,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AACnC,gBAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,oBAAA,OAAO,IAAI;gBACb;gBAEA,OAAO,IAAI,SAAS,CAAC;AACnB,oBAAA,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;AACtD,iBAAA,CAAC;YACJ,CAAC;SACF;AACH,IAAA,CAAC;AACH;;;;"}
|
package/lib/types.d.ts
CHANGED
|
@@ -7,6 +7,26 @@ type KnownNodeType = mdast.RootContent["type"];
|
|
|
7
7
|
type MdastNode<T extends string> = T extends KnownNodeType ? Extract<mdast.RootContent, {
|
|
8
8
|
type: T;
|
|
9
9
|
}> : unknown;
|
|
10
|
+
declare const supportedTypes: readonly ["png", "jpg", "gif", "bmp", "svg"];
|
|
11
|
+
type SupportedImageType = (typeof supportedTypes)[number];
|
|
12
|
+
export declare const isSupportedType: (type: string | undefined) => type is SupportedImageType;
|
|
13
|
+
export type DocxImageData = Readonly<{
|
|
14
|
+
data: ArrayBuffer;
|
|
15
|
+
width: number;
|
|
16
|
+
height: number;
|
|
17
|
+
} & ({
|
|
18
|
+
type: Exclude<SupportedImageType, "svg">;
|
|
19
|
+
} | {
|
|
20
|
+
type: Extract<SupportedImageType, "svg">;
|
|
21
|
+
fallback: ArrayBuffer;
|
|
22
|
+
})>;
|
|
23
|
+
type StyleContext = Readonly<{
|
|
24
|
+
bold?: boolean;
|
|
25
|
+
italic?: boolean;
|
|
26
|
+
strike?: boolean;
|
|
27
|
+
inlineCode?: boolean;
|
|
28
|
+
link?: boolean;
|
|
29
|
+
}>;
|
|
10
30
|
export type ListContext = Readonly<{
|
|
11
31
|
level: number;
|
|
12
32
|
meta: Readonly<{
|
|
@@ -31,6 +51,16 @@ export type FootnoteRegistry = {
|
|
|
31
51
|
export type ThematicBreakType = "page" | "section" | "line";
|
|
32
52
|
export type Context = Readonly<{
|
|
33
53
|
render: (node: readonly mdast.RootContent[], ctx?: Context) => DocxContent[];
|
|
54
|
+
width: number;
|
|
55
|
+
style: StyleContext;
|
|
56
|
+
quote?: number;
|
|
57
|
+
list?: ListContext;
|
|
58
|
+
thematicBreak: ThematicBreakType;
|
|
59
|
+
rtl?: boolean;
|
|
60
|
+
definition: GetDefinition;
|
|
61
|
+
images: ReadonlyMap<string, DocxImageData | null>;
|
|
62
|
+
footnote: FootnoteRegistry;
|
|
63
|
+
orderedId: () => string;
|
|
34
64
|
}>;
|
|
35
65
|
export type NodeBuilder<T extends string> = (node: MdastNode<T>, ctx: Context) => DocxContent | DocxContent[] | null;
|
|
36
66
|
export type NodeBuilders = {
|
|
@@ -38,6 +68,7 @@ export type NodeBuilders = {
|
|
|
38
68
|
};
|
|
39
69
|
export type RemarkDocxPlugin = (ctx: Readonly<{
|
|
40
70
|
root: mdast.Root;
|
|
71
|
+
images: Map<string, DocxImageData | null>;
|
|
41
72
|
definition: GetDefinition;
|
|
42
73
|
}>) => Promise<NodeBuilders>;
|
|
43
74
|
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "remark-docx",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.23",
|
|
4
4
|
"description": "remark plugin to compile markdown to docx (Microsoft Word, Office Open XML).",
|
|
5
5
|
"main": "lib/index.cjs",
|
|
6
6
|
"module": "lib/index.js",
|
|
@@ -42,6 +42,7 @@
|
|
|
42
42
|
"image-size": "^2.0.2",
|
|
43
43
|
"mathml2omml": "^0.5.0",
|
|
44
44
|
"mdast-util-definitions": "^6.0.0",
|
|
45
|
+
"mermaid": "^11.12.2",
|
|
45
46
|
"shiki": "^3.19.0",
|
|
46
47
|
"unist-util-visit": "^5.0.0"
|
|
47
48
|
},
|
|
@@ -54,7 +55,7 @@
|
|
|
54
55
|
"@types/file-saver": "^2.0.7",
|
|
55
56
|
"@types/lodash.debounce": "^4.0.9",
|
|
56
57
|
"@types/mdast": "^4.0.3",
|
|
57
|
-
"@types/node": "^24.
|
|
58
|
+
"@types/node": "^24.10.4",
|
|
58
59
|
"@types/react": "^19.2.7",
|
|
59
60
|
"@types/react-dom": "^19.2.3",
|
|
60
61
|
"@types/unist": "^3.0.0",
|
|
@@ -98,7 +99,8 @@
|
|
|
98
99
|
"pandoc",
|
|
99
100
|
"highlight",
|
|
100
101
|
"latex",
|
|
101
|
-
"math"
|
|
102
|
+
"math",
|
|
103
|
+
"mermaid"
|
|
102
104
|
],
|
|
103
105
|
"author": "inokawa <stratoooo-taster@yahoo.co.jp> (https://github.com/inokawa/)",
|
|
104
106
|
"license": "MIT",
|