/** * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @flow strict */ import type { LexicalEditor, LexicalNode, ElementNode, TextFormatType, TextNode, } from 'lexical'; export type Transformer = | ElementTransformer | MultilineElementTransformer | TextFormatTransformer | TextMatchTransformer; export type ElementTransformer = { dependencies: Array>, export: ( node: LexicalNode, traverseChildren: (node: ElementNode) => string, ) => string | null, regExp: RegExp, replace: ( parentNode: ElementNode, children: Array, match: Array, isImport: boolean, ) => boolean | void, type: 'element', }; export type MultilineElementTransformer = { dependencies: Array>; export?: ( node: LexicalNode, traverseChildren: (node: ElementNode) => string, ) => string | null; handleImportAfterStartMatch?: (args: { lines: Array; rootNode: ElementNode; startLineIndex: number; startMatch: RegExp$matchResult; transformer: MultilineElementTransformer; }) => [boolean, number] | null | void; regExpStart: RegExp; regExpEnd?: | RegExp | { optional?: true; regExp: RegExp; }; replace: ( rootNode: ElementNode, children: Array | null, startMatch: Array, endMatch: Array | null, linesInBetween: Array | null, isImport: boolean, ) => boolean | void; type: 'multiline-element'; }; export type TextFormatTransformer = $ReadOnly<{ format: $ReadOnlyArray, tag: string, intraword?: boolean, type: 'text-format', }>; export type TextMatchTransformer = $ReadOnly<{ dependencies: Array>, export?: ( node: LexicalNode, exportChildren: (node: ElementNode) => string, exportFormat: (node: TextNode, textContent: string) => string, ) => string | null, getEndIndex?: (node: TextNode, match: RegExp$matchResult) => number | false; importRegExp?: RegExp, regExp: RegExp, replace?: (node: TextNode, match: RegExp$matchResult) => void | TextNode, trigger?: string, type: 'text-match', }>; declare export function registerMarkdownShortcuts( editor: LexicalEditor, transformers?: Array, ): () => void; declare export function $convertFromMarkdownString( markdown: string, transformers?: Array, node?: ElementNode, shouldPreserveNewLines?: boolean, shouldMergeAdjacentLines?: boolean, ): void; declare export function $convertToMarkdownString( transformers?: Array, node?: ElementNode, shouldPreserveNewLines?: boolean, ): string; declare export var INLINE_CODE: TextFormatTransformer; declare export var HIGHLIGHT: TextFormatTransformer; declare export var BOLD_ITALIC_STAR: TextFormatTransformer; declare export var BOLD_ITALIC_UNDERSCORE: TextFormatTransformer; declare export var BOLD_STAR: TextFormatTransformer; declare export var BOLD_UNDERSCORE: TextFormatTransformer; declare export var STRIKETHROUGH: TextFormatTransformer; declare export var ITALIC_STAR: TextFormatTransformer; declare export var ITALIC_UNDERSCORE: TextFormatTransformer; declare export var HEADING: ElementTransformer; declare export var QUOTE: ElementTransformer; declare export var CODE: MultilineElementTransformer; declare export var UNORDERED_LIST: ElementTransformer; declare export var CHECK_LIST: ElementTransformer; declare export var ORDERED_LIST: ElementTransformer; declare export var LINK: TextMatchTransformer; declare export var TRANSFORMERS: Array; declare export var ELEMENT_TRANSFORMERS: Array; declare export var MULTILINE_ELEMENT_TRANSFORMERS: Array; declare export var TEXT_FORMAT_TRANSFORMERS: Array; declare export var TEXT_MATCH_TRANSFORMERS: Array;