2
0
Files
bot/packages/lib/markdown/remark-slate/remarkTransformText.ts
Baptiste Arnaud ff9c4726cc 🚸 Rewrite the markdown deserializer to improve br… (#1198)
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

- **Refactor**
- Updated markdown handling and serialization libraries for improved
performance and accuracy in text formatting.
- **New Features**
- Enhanced rich text and markdown conversion capabilities, providing
users with more reliable and seamless text formatting options.
- **Documentation**
- Added detailed documentation for markdown to rich text conversion and
vice versa, ensuring easier understanding and implementation for
developers.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2024-01-31 08:03:13 +01:00

37 lines
1.0 KiB
TypeScript

import { TText, Value } from '@udecode/plate-common'
import { remarkDefaultTextRules } from './remarkDefaultTextRules'
import { MdastNode, RemarkPluginOptions } from './types'
export const remarkTransformText = <V extends Value>(
node: MdastNode,
options: RemarkPluginOptions<V>,
inheritedMarkProps: { [key: string]: boolean } = {}
): TText | TText[] => {
const { editor, textRules } = options
const { type, value, children } = node
const textRule = (textRules as any)[type!] || remarkDefaultTextRules.text
const { mark, transform = (text: string) => text } = textRule
const markProps = mark
? {
...inheritedMarkProps,
[mark({ editor })]: true,
}
: inheritedMarkProps
const childTextNodes =
children?.flatMap((child) =>
remarkTransformText(child, options, markProps)
) || []
const currentTextNodes =
value || childTextNodes.length === 0
? [{ text: transform(value || ''), ...markProps } as TText]
: []
return [...currentTextNodes, ...childTextNodes]
}