diff --git a/packages/serializers/md/src/deserializer/createDeserializeMdPlugin.ts b/packages/serializers/md/src/deserializer/createDeserializeMdPlugin.ts index 1b1174d6a3..7fd457bcac 100644 --- a/packages/serializers/md/src/deserializer/createDeserializeMdPlugin.ts +++ b/packages/serializers/md/src/deserializer/createDeserializeMdPlugin.ts @@ -1,9 +1,11 @@ -import { createPluginFactory, isUrl } from '@udecode/plate-core'; +import { createPluginFactory, isUrl, Value } from '@udecode/plate-core'; import { deserializeMd } from './utils'; +import { DeserializeMdPlugin } from './types'; +import { remarkDefaultElementRules, remarkDefaultTextRules } from '../remark-slate'; export const KEY_DESERIALIZE_MD = 'deserializeMd'; -export const createDeserializeMdPlugin = createPluginFactory({ +export const createDeserializeMdPlugin = createPluginFactory({ key: KEY_DESERIALIZE_MD, then: (editor) => ({ editor: { @@ -22,8 +24,12 @@ export const createDeserializeMdPlugin = createPluginFactory({ } return true; }, - getFragment: ({ data }) => deserializeMd(editor, data), + getFragment: ({ data }) => deserializeMd(editor, data), }, }, }), + options: { + elementRules: remarkDefaultElementRules, + textRules: remarkDefaultTextRules, + }, }); diff --git a/packages/serializers/md/src/deserializer/types.ts b/packages/serializers/md/src/deserializer/types.ts new file mode 100644 index 0000000000..660310d199 --- /dev/null +++ b/packages/serializers/md/src/deserializer/types.ts @@ -0,0 +1,7 @@ +import { PlateEditor, Value } from '@udecode/plate-core'; +import { RemarkElementRules, RemarkTextRules } from '../remark-slate'; + +export interface DeserializeMdPlugin { + elementRules: RemarkElementRules; + textRules: RemarkTextRules; +} diff --git a/packages/serializers/md/src/deserializer/utils/deserializeMd.ts b/packages/serializers/md/src/deserializer/utils/deserializeMd.ts index c6af309745..ba24278a91 100644 --- a/packages/serializers/md/src/deserializer/utils/deserializeMd.ts +++ b/packages/serializers/md/src/deserializer/utils/deserializeMd.ts @@ -1,7 +1,9 @@ -import { PlateEditor, Value } from '@udecode/plate-core'; +import { getPluginOptions, PlateEditor, Value } from '@udecode/plate-core'; import markdown from 'remark-parse'; import unified from 'unified'; -import { remarkPlugin } from '../../remark-slate'; +import { remarkPlugin, RemarkPluginOptions } from '../../remark-slate'; +import { KEY_DESERIALIZE_MD } from '../createDeserializeMdPlugin'; +import { DeserializeMdPlugin } from '../types'; /** * Deserialize content from Markdown format to Slate format. @@ -11,9 +13,11 @@ export const deserializeMd = ( editor: PlateEditor, data: string ) => { + const { elementRules, textRules } = getPluginOptions(editor, KEY_DESERIALIZE_MD); + const tree: any = unified() .use(markdown) - .use(remarkPlugin, { editor }) + .use(remarkPlugin, { editor, elementRules, textRules } as RemarkPluginOptions) .processSync(data); return tree.result; diff --git a/packages/serializers/md/src/remark-slate/remarkTransformElement.ts b/packages/serializers/md/src/remark-slate/remarkTransformElement.ts index edd8f0a623..cc711c9d2e 100644 --- a/packages/serializers/md/src/remark-slate/remarkTransformElement.ts +++ b/packages/serializers/md/src/remark-slate/remarkTransformElement.ts @@ -1,12 +1,11 @@ import { TElement, Value } from '@udecode/plate-core'; -import { remarkDefaultElementRules } from './remarkDefaultElementRules'; import { MdastNode, RemarkPluginOptions } from './types'; export const remarkTransformElement = ( node: MdastNode, options: RemarkPluginOptions ): TElement | TElement[] => { - const { elementRules = remarkDefaultElementRules } = options; + const { elementRules } = options; const { type } = node; const elementRule = elementRules[type!]; diff --git a/packages/serializers/md/src/remark-slate/remarkTransformText.ts b/packages/serializers/md/src/remark-slate/remarkTransformText.ts index 32cf512df0..f7ddd1944f 100644 --- a/packages/serializers/md/src/remark-slate/remarkTransformText.ts +++ b/packages/serializers/md/src/remark-slate/remarkTransformText.ts @@ -7,7 +7,7 @@ export const remarkTransformText = ( options: RemarkPluginOptions, inheritedMarkProps: { [key: string]: boolean } = {} ): TText | TText[] => { - const { editor, textRules = remarkDefaultTextRules } = options; + const { editor, textRules } = options; const { type, value, children } = node; const textRule = textRules[type!] || remarkDefaultTextRules.text; diff --git a/packages/serializers/md/src/remark-slate/types.ts b/packages/serializers/md/src/remark-slate/types.ts index 28123018af..5bb6416efd 100644 --- a/packages/serializers/md/src/remark-slate/types.ts +++ b/packages/serializers/md/src/remark-slate/types.ts @@ -60,6 +60,6 @@ export type RemarkTextRules = { export type RemarkPluginOptions = { editor: PlateEditor; - elementRules?: RemarkElementRules; - textRules?: RemarkTextRules; + elementRules: RemarkElementRules; + textRules: RemarkTextRules; };