mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-07-29 12:09:31 +08:00
39 lines
1.2 KiB
TypeScript
39 lines
1.2 KiB
TypeScript
/**
|
|
* MermaidTransformer - handles ```mermaid code blocks.
|
|
* Ported from Nimbalyst. Creates MermaidNode instead of CodeNode.
|
|
*/
|
|
|
|
/* oxlint-disable no-console */
|
|
|
|
import type { MultilineElementTransformer } from '@lexical/markdown';
|
|
import {
|
|
$createMermaidNode,
|
|
$isMermaidNode,
|
|
MermaidNode,
|
|
} from './mermaid-node';
|
|
|
|
const MERMAID_START_REGEX = /^[ \t]*```mermaid/;
|
|
const MERMAID_END_REGEX = /[ \t]*```$/;
|
|
|
|
export const MERMAID_TRANSFORMER: MultilineElementTransformer = {
|
|
dependencies: [MermaidNode],
|
|
export: (node) => {
|
|
if (!$isMermaidNode(node)) return null;
|
|
return '```mermaid\n' + node.getContent() + '\n```';
|
|
},
|
|
regExpStart: MERMAID_START_REGEX,
|
|
regExpEnd: { optional: true, regExp: MERMAID_END_REGEX },
|
|
replace: (rootNode, _children, _startMatch, _endMatch, linesInBetween) => {
|
|
const content = linesInBetween ? linesInBetween.join('\n').trim() : '';
|
|
console.log(
|
|
'[MermaidTransformer] Creating MermaidNode, content length:',
|
|
content.length,
|
|
'lines:',
|
|
linesInBetween?.length,
|
|
);
|
|
const mermaidNode = $createMermaidNode({ content });
|
|
rootNode.append(mermaidNode);
|
|
},
|
|
type: 'multiline-element',
|
|
};
|