@liveblocks/emails
Version:
A set of functions and utilities to make sending emails based on Liveblocks notification events easy. Liveblocks is the all-in-one toolkit to build collaborative products like Figma, Notion, and more.
1 lines • 121 kB
Source Map (JSON)
{"version":3,"sources":["/home/runner/work/liveblocks/liveblocks/packages/liveblocks-emails/dist/index.cjs","../src/index.ts","../src/version.ts","../src/text-mention-notification.tsx","../src/lexical-editor.ts","../src/lib/utils.ts","../src/lib/batch-resolvers.ts","../src/lib/css-properties.ts","../src/tiptap-editor.ts","../src/liveblocks-text-editor.ts","../src/text-mention-content.tsx","../src/thread-notification.tsx","../src/comment-body.tsx","../src/comment-with-body.ts"],"names":["assertNever","isSerializedMentionNode","isSerializedGroupMentionNode","html","htmlSafe","MENTION_CHARACTER","jsxs","baseStyles","jsx","baseComponents"],"mappings":"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","file":"/home/runner/work/liveblocks/liveblocks/packages/liveblocks-emails/dist/index.cjs","sourcesContent":[null,"import { detectDupes } from \"@liveblocks/core\";\n\nimport { PKG_FORMAT, PKG_NAME, PKG_VERSION } from \"./version\";\n\ndetectDupes(PKG_NAME, PKG_VERSION, PKG_FORMAT);\n\nexport type { ResolveRoomInfoArgs } from \"./lib/types\";\nexport type {\n ConvertTextEditorNodesAsHtmlStyles,\n ConvertTextEditorNodesAsReactComponents,\n MentionEmailAsHtmlData,\n MentionEmailAsReactData,\n PrepareTextMentionNotificationEmailAsHtmlOptions,\n PrepareTextMentionNotificationEmailAsReactOptions,\n TextEditorContainerComponentProps,\n TextEditorMentionComponentProps,\n TextEditorTextComponentProps,\n TextMentionNotificationEmailDataAsHtml,\n TextMentionNotificationEmailDataAsReact,\n} from \"./text-mention-notification\";\nexport {\n prepareTextMentionNotificationEmailAsHtml,\n prepareTextMentionNotificationEmailAsReact,\n} from \"./text-mention-notification\";\nexport type {\n CommentBodyContainerComponentProps,\n CommentBodyLinkComponentProps,\n CommentBodyMentionComponentProps,\n CommentBodyParagraphComponentProps,\n CommentBodyTextComponentProps,\n CommentEmailAsHtmlData,\n CommentEmailAsReactData,\n ConvertCommentBodyAsHtmlStyles,\n ConvertCommentBodyAsReactComponents,\n PrepareThreadNotificationEmailAsHtmlOptions,\n PrepareThreadNotificationEmailAsReactOptions,\n ThreadNotificationEmailDataAsHtml,\n ThreadNotificationEmailDataAsReact,\n} from \"./thread-notification\";\nexport {\n prepareThreadNotificationEmailAsHtml,\n prepareThreadNotificationEmailAsReact,\n} from \"./thread-notification\";\nexport type { ResolveGroupsInfoArgs, ResolveUsersArgs } from \"@liveblocks/core\";\n","declare const __VERSION__: string;\ndeclare const TSUP_FORMAT: string;\n\nexport const PKG_NAME = \"@liveblocks/emails\";\nexport const PKG_VERSION = typeof __VERSION__ === \"string\" && __VERSION__;\nexport const PKG_FORMAT = typeof TSUP_FORMAT === \"string\" && TSUP_FORMAT;\n","import {\n type Awaitable,\n type BaseUserMeta,\n type DGI,\n type DRI,\n type DU,\n html,\n htmlSafe,\n MENTION_CHARACTER,\n type MentionData,\n type ResolveGroupsInfoArgs,\n type ResolveUsersArgs,\n} from \"@liveblocks/core\";\nimport type {\n Liveblocks,\n TextMentionNotificationEvent,\n} from \"@liveblocks/node\";\nimport type { ComponentType, ReactNode } from \"react\";\n\nimport type { LexicalMentionNodeWithContext } from \"./lexical-editor\";\nimport {\n findLexicalMentionNodeWithContext,\n getMentionDataFromLexicalNode,\n getSerializedLexicalState,\n} from \"./lexical-editor\";\nimport {\n createBatchGroupsInfoResolver,\n createBatchUsersResolver,\n getResolvedForId,\n} from \"./lib/batch-resolvers\";\nimport type { CSSProperties } from \"./lib/css-properties\";\nimport { toInlineCSSString } from \"./lib/css-properties\";\nimport type { ResolveRoomInfoArgs } from \"./lib/types\";\nimport type {\n LiveblocksTextEditorMentionNode,\n LiveblocksTextEditorNode,\n LiveblocksTextEditorTextNode,\n} from \"./liveblocks-text-editor\";\nimport { transformAsLiveblocksTextEditorNodes } from \"./liveblocks-text-editor\";\nimport {\n convertTextMentionContent,\n type ConvertTextMentionContentElements,\n} from \"./text-mention-content\";\nimport type { TiptapMentionNodeWithContext } from \"./tiptap-editor\";\nimport {\n findTiptapMentionNodeWithContext,\n getMentionDataFromTiptapNode,\n getSerializedTiptapState,\n} from \"./tiptap-editor\";\n\n/** @internal hidden types */\ntype RoomTextEditor = {\n type: \"lexical\" | \"tiptap\";\n rootKey: string[];\n};\n\nexport type TextMentionNotificationData = (\n | {\n editor: \"lexical\";\n mentionNodeWithContext: LexicalMentionNodeWithContext;\n }\n | {\n editor: \"tiptap\";\n mentionNodeWithContext: TiptapMentionNodeWithContext;\n }\n) & {\n createdAt: Date;\n createdBy: string;\n mentionData: MentionData;\n};\n\n/** @internal */\nexport const extractTextMentionNotificationData = async ({\n client,\n event,\n}: {\n client: Liveblocks;\n event: TextMentionNotificationEvent;\n}): Promise<TextMentionNotificationData | null> => {\n const { roomId, userId, inboxNotificationId } = event.data;\n\n const [room, inboxNotification] = await Promise.all([\n client.getRoom(roomId),\n client.getInboxNotification({ inboxNotificationId, userId }),\n ]);\n\n // Check for notification kind\n if (inboxNotification.kind !== \"textMention\") {\n console.warn('Inbox notification is not of kind \"textMention\"');\n return null;\n }\n\n // Aligned behaviors w/ `@liveblocks/react-ui`.\n const isUnread =\n inboxNotification.readAt === null ||\n inboxNotification.notifiedAt > inboxNotification.readAt;\n\n // Notification read so do nothing\n if (!isUnread) {\n return null;\n }\n\n // Do nothing if the room as no text editor associated.\n // We do not throw not to impact the final developer experience.\n // @ts-expect-error - Hidden property\n const textEditor = room.experimental_textEditor as RoomTextEditor | undefined;\n if (!textEditor) {\n console.warn(`Room \"${room.id}\" does not a text editor associated with it`);\n return null;\n }\n\n // For now we use the `notifiedAt` inbox notification data\n // to represent the creation date as we have currently\n // a 1 - 1 notification <> activity\n const mentionCreatedAt = inboxNotification.notifiedAt;\n // In context of a text mention notification `createdBy` is a user ID\n const mentionAuthorUserId = inboxNotification.createdBy;\n\n const buffer = await client.getYjsDocumentAsBinaryUpdate(roomId);\n const editorKey = textEditor.rootKey;\n // TODO: temporarily grab the first entrance, later we will handle multiple editors\n const key = Array.isArray(editorKey) ? editorKey[0]! : editorKey;\n\n switch (textEditor.type) {\n case \"lexical\": {\n const state = getSerializedLexicalState({ buffer, key });\n const mentionNodeWithContext = findLexicalMentionNodeWithContext({\n root: state,\n textMentionId: inboxNotification.mentionId,\n });\n\n // The mention node did not exists so we do not have to send an email.\n if (mentionNodeWithContext === null) {\n return null;\n }\n\n const mentionData = getMentionDataFromLexicalNode(\n mentionNodeWithContext.mention\n );\n\n return {\n editor: \"lexical\",\n mentionNodeWithContext,\n mentionData,\n createdAt: mentionCreatedAt,\n createdBy: mentionAuthorUserId,\n };\n }\n case \"tiptap\": {\n const state = getSerializedTiptapState({ buffer, key });\n const mentionNodeWithContext = findTiptapMentionNodeWithContext({\n root: state,\n textMentionId: inboxNotification.mentionId,\n });\n\n // The mention node did not exists so we do not have to send an email.\n if (mentionNodeWithContext === null) {\n return null;\n }\n\n const mentionData = getMentionDataFromTiptapNode(\n mentionNodeWithContext.mention\n );\n\n return {\n editor: \"tiptap\",\n mentionNodeWithContext,\n mentionData,\n createdAt: mentionCreatedAt,\n createdBy: mentionAuthorUserId,\n };\n }\n }\n};\n\nexport type MentionEmailData<\n ContentType,\n U extends BaseUserMeta = DU,\n> = MentionData & {\n textMentionId: string;\n roomId: string;\n author: U; // Author of the mention\n createdAt: Date;\n content: ContentType;\n};\n\nexport type MentionEmailAsHtmlData<U extends BaseUserMeta = DU> =\n MentionEmailData<string, U>;\n\nexport type MentionEmailAsReactData<U extends BaseUserMeta = DU> =\n MentionEmailData<ReactNode, U>;\n\nexport type TextMentionNotificationEmailData<\n ContentType,\n U extends BaseUserMeta = DU,\n M extends MentionEmailData<ContentType, U> = MentionEmailData<ContentType, U>,\n> = {\n mention: M;\n roomInfo: DRI;\n};\n\ntype PrepareTextMentionNotificationEmailOptions<U extends BaseUserMeta = DU> = {\n /**\n * A function that returns room info from room IDs.\n */\n resolveRoomInfo?: (args: ResolveRoomInfoArgs) => Awaitable<DRI | undefined>;\n\n /**\n * A function that returns user info from user IDs.\n * You should return a list of user objects of the same size, in the same order.\n */\n resolveUsers?: (\n args: ResolveUsersArgs\n ) => Awaitable<(U[\"info\"] | undefined)[] | undefined>;\n\n /**\n * A function that returns group info from group IDs.\n * You should return a list of group info objects of the same size, in the same order.\n */\n resolveGroupsInfo?: (\n args: ResolveGroupsInfoArgs\n ) => Awaitable<(DGI | undefined)[] | undefined>;\n};\n\n/**\n * @internal\n * exported for testing purposes.\n */\nexport async function prepareTextMentionNotificationEmail<\n ContentType,\n U extends BaseUserMeta = DU,\n>(\n client: Liveblocks,\n event: TextMentionNotificationEvent,\n options: PrepareTextMentionNotificationEmailOptions<U>,\n elements: ConvertTextMentionContentElements<ContentType, U>,\n callerName: string\n): Promise<TextMentionNotificationEmailData<ContentType, U> | null> {\n const { roomId, mentionId } = event.data;\n\n const data = await extractTextMentionNotificationData({ client, event });\n if (data === null) {\n return null;\n }\n\n const roomInfo = options.resolveRoomInfo\n ? await options.resolveRoomInfo({ roomId: event.data.roomId })\n : undefined;\n\n const resolvedRoomInfo: DRI = {\n ...roomInfo,\n name: roomInfo?.name ?? event.data.roomId,\n };\n\n const batchUsersResolver = createBatchUsersResolver<U>({\n resolveUsers: options.resolveUsers,\n callerName,\n });\n const batchGroupsInfoResolver = createBatchGroupsInfoResolver({\n resolveGroupsInfo: options.resolveGroupsInfo,\n callerName,\n });\n\n const authorsIds = [data.createdBy];\n const authorsInfoPromise = batchUsersResolver.get(authorsIds);\n\n let textEditorNodes: LiveblocksTextEditorNode[] = [];\n\n switch (data.editor) {\n case \"lexical\": {\n textEditorNodes = transformAsLiveblocksTextEditorNodes({\n editor: \"lexical\",\n mention: data.mentionNodeWithContext,\n });\n break;\n }\n case \"tiptap\": {\n textEditorNodes = transformAsLiveblocksTextEditorNodes({\n editor: \"tiptap\",\n mention: data.mentionNodeWithContext,\n });\n break;\n }\n }\n\n const contentPromise = convertTextMentionContent<ContentType, U>(\n textEditorNodes,\n {\n resolveUsers: ({ userIds }) => batchUsersResolver.get(userIds),\n resolveGroupsInfo: ({ groupIds }) =>\n batchGroupsInfoResolver.get(groupIds),\n elements,\n }\n );\n\n await batchUsersResolver.resolve();\n await batchGroupsInfoResolver.resolve();\n\n const [authorsInfo, content] = await Promise.all([\n authorsInfoPromise,\n contentPromise,\n ]);\n\n const authorInfo = getResolvedForId(data.createdBy, authorsIds, authorsInfo);\n\n return {\n mention: {\n ...data.mentionData,\n textMentionId: mentionId,\n roomId,\n author: {\n id: data.createdBy,\n info: authorInfo ?? { name: data.createdBy },\n } as U,\n content,\n createdAt: data.createdAt,\n },\n roomInfo: resolvedRoomInfo,\n };\n}\n\nexport type TextEditorContainerComponentProps = {\n /**\n * The nodes of the text editor\n */\n children: ReactNode;\n};\n\nexport type TextEditorMentionComponentProps<U extends BaseUserMeta = DU> = {\n /**\n * The mention element.\n */\n element: LiveblocksTextEditorMentionNode;\n\n /**\n * The mention's user info, if the mention is a user mention and the `resolvedUsers` option was provided.\n */\n user?: U[\"info\"];\n\n /**\n * The mention's group info, if the mention is a group mention and the `resolvedGroupsInfo` option was provided.\n */\n group?: DGI;\n};\n\nexport type TextEditorTextComponentProps = {\n /**\n * The text element.\n */\n element: LiveblocksTextEditorTextNode;\n};\n\nexport type ConvertTextEditorNodesAsReactComponents<\n U extends BaseUserMeta = DU,\n> = {\n /**\n *\n * The component used to act as a container to wrap text editor nodes,\n */\n Container: ComponentType<TextEditorContainerComponentProps>;\n\n /**\n * The component used to display mentions.\n */\n Mention: ComponentType<TextEditorMentionComponentProps<U>>;\n\n /**\n * The component used to display text nodes.\n */\n Text: ComponentType<TextEditorTextComponentProps>;\n};\n\nconst baseComponents: ConvertTextEditorNodesAsReactComponents<BaseUserMeta> = {\n Container: ({ children }) => <div>{children}</div>,\n Mention: ({ element, user, group }) => (\n <span data-mention>\n {MENTION_CHARACTER}\n {user?.name ?? group?.name ?? element.id}\n </span>\n ),\n Text: ({ element }) => {\n // Note: construction following the schema 👇\n // <code><s><em><strong>{element.text}</strong></s></em></code>\n let children: ReactNode = element.text;\n\n if (element.bold) {\n children = <strong>{children}</strong>;\n }\n\n if (element.italic) {\n children = <em>{children}</em>;\n }\n\n if (element.strikethrough) {\n children = <s>{children}</s>;\n }\n\n if (element.code) {\n children = <code>{children}</code>;\n }\n\n return <span>{children}</span>;\n },\n};\n\nexport type PrepareTextMentionNotificationEmailAsReactOptions<\n U extends BaseUserMeta = DU,\n> = PrepareTextMentionNotificationEmailOptions & {\n /**\n * The components used to customize the resulting React nodes. Each components has\n * priority over the base components inherited.\n */\n components?: Partial<ConvertTextEditorNodesAsReactComponents<U>>;\n};\n\nexport type TextMentionNotificationEmailDataAsReact<\n U extends BaseUserMeta = DU,\n> = TextMentionNotificationEmailData<ReactNode, U, MentionEmailAsReactData<U>>;\n\n/**\n * Prepares data from a `TextMentionNotificationEvent` and convert content as React nodes.\n *\n * @param client The `Liveblocks` node client\n * @param event The `TextMentionNotificationEvent` received in the webhook handler\n * @param options The optional options to provide to resolve users, resolve room info and customize comment bodies React components.\n *\n * It returns a `TextMentionNotificationEmailDataAsReact` or `null` if there are no existing text mention.\n *\n * @example\n * import { Liveblocks} from \"@liveblocks/node\"\n * import { prepareTextMentionNotificationEmailAsReact } from \"@liveblocks/emails\"\n *\n * const liveblocks = new Liveblocks({ secret: \"sk_...\" })\n * const emailData = prepareTextMentionNotificationEmailAsReact(\n * liveblocks,\n * event,\n * {\n * resolveUsers,\n * resolveRoomInfo,\n * components,\n * }\n * )\n */\nexport async function prepareTextMentionNotificationEmailAsReact(\n client: Liveblocks,\n event: TextMentionNotificationEvent,\n options: PrepareTextMentionNotificationEmailAsReactOptions<BaseUserMeta> = {}\n): Promise<TextMentionNotificationEmailDataAsReact | null> {\n const Components = { ...baseComponents, ...options.components };\n const data = await prepareTextMentionNotificationEmail<\n ReactNode,\n BaseUserMeta\n >(\n client,\n event,\n {\n resolveRoomInfo: options.resolveRoomInfo,\n resolveUsers: options.resolveUsers,\n },\n {\n container: ({ children }) => (\n <Components.Container key=\"lb-text-editor-container\">\n {children}\n </Components.Container>\n ),\n mention: ({ node, user }, index) => (\n <Components.Mention\n key={`lb-text-editor-mention-${index}`}\n element={node}\n user={user}\n />\n ),\n text: ({ node }, index) => (\n <Components.Text key={`lb-text-editor-text-${index}`} element={node} />\n ),\n },\n \"prepareTextMentionNotificationEmailAsReact\"\n );\n\n if (data === null) {\n return null;\n }\n\n return data;\n}\n\nexport type ConvertTextEditorNodesAsHtmlStyles = {\n /**\n * The default inline CSS styles used to display container element.\n */\n container: CSSProperties;\n /**\n * The default inline CSS styles used to display text `<strong />` elements.\n */\n strong: CSSProperties;\n /**\n * The default inline CSS styles used to display text `<code />` elements.\n */\n code: CSSProperties;\n /**\n * The default inline CSS styles used to display mentions.\n */\n mention: CSSProperties;\n};\n\nexport const baseStyles: ConvertTextEditorNodesAsHtmlStyles = {\n container: {\n fontSize: \"14px\",\n },\n strong: {\n fontWeight: 500,\n },\n code: {\n fontFamily:\n 'ui-monospace, Menlo, Monaco, \"Cascadia Mono\", \"Segoe UI Mono\", \"Roboto Mono\", \"Oxygen Mono\", \"Ubuntu Mono\", \"Source Code Pro\", \"Fira Mono\", \"Droid Sans Mono\", \"Consolas\", \"Courier New\", monospace',\n backgroundColor: \"rgba(0,0,0,0.05)\",\n border: \"solid 1px rgba(0,0,0,0.1)\",\n borderRadius: \"4px\",\n },\n mention: {\n color: \"blue\",\n },\n};\n\nexport type PrepareTextMentionNotificationEmailAsHtmlOptions =\n PrepareTextMentionNotificationEmailOptions & {\n /**\n * The styles used to customize the html elements in the resulting html safe string.\n * Each styles has priority over the base styles inherited.\n */\n styles?: Partial<ConvertTextEditorNodesAsHtmlStyles>;\n };\n\nexport type TextMentionNotificationEmailDataAsHtml<\n U extends BaseUserMeta = DU,\n> = TextMentionNotificationEmailData<string, U, MentionEmailAsHtmlData<U>>;\n\n/**\n * Prepares data from a `TextMentionNotificationEvent` and convert content as an html safe string.\n *\n * @param client The `Liveblocks` node client\n * @param event The `TextMentionNotificationEvent` received in the webhook handler\n * @param options The optional options to provide to resolve users, resolve room info and customize comment bodies React components.\n *\n * It returns a `TextMentionNotificationEmailDataAsReact` or `null` if there are no existing text mention.\n *\n * @example\n * import { Liveblocks} from \"@liveblocks/node\"\n * import { prepareTextMentionNotificationEmailAsHtml } from \"@liveblocks/emails\"\n *\n * const liveblocks = new Liveblocks({ secret: \"sk_...\" })\n * const emailData = prepareTextMentionNotificationEmailAsHtml(\n * liveblocks,\n * event,\n * {\n * resolveUsers,\n * resolveRoomInfo,\n * styles,\n * }\n * )\n */\nexport async function prepareTextMentionNotificationEmailAsHtml(\n client: Liveblocks,\n event: TextMentionNotificationEvent,\n options: PrepareTextMentionNotificationEmailAsHtmlOptions = {}\n): Promise<TextMentionNotificationEmailDataAsHtml | null> {\n const styles = { ...baseStyles, ...options.styles };\n const data = await prepareTextMentionNotificationEmail<string, BaseUserMeta>(\n client,\n event,\n {\n resolveRoomInfo: options.resolveRoomInfo,\n resolveUsers: options.resolveUsers,\n },\n {\n container: ({ children }) => {\n const content = [\n // prettier-ignore\n html`<div style=\"${toInlineCSSString(styles.container)}\">${htmlSafe(children.join(\"\"))}</div>`,\n ];\n\n return content.join(\"\\n\"); //NOTE: to represent a valid HTML string\n },\n mention: ({ node, user, group }) => {\n // prettier-ignore\n return html`<span data-mention style=\"${toInlineCSSString(styles.mention)}\">${MENTION_CHARACTER}${user?.name ? html`${user?.name}` : group?.name ? html`${group?.name}` : node.id}</span>`\n },\n text: ({ node }) => {\n // Note: construction following the schema 👇\n // <code><s><em><strong>{node.text}</strong></s></em></code>\n let children = node.text;\n if (!children) {\n return html`${children}`;\n }\n\n if (node.bold) {\n // prettier-ignore\n children = html`<strong style=\"${toInlineCSSString(styles.strong)}\">${children}</strong>`;\n }\n\n if (node.italic) {\n // prettier-ignore\n children = html`<em>${children}</em>`;\n }\n\n if (node.strikethrough) {\n // prettier-ignore\n children = html`<s>${children}</s>`;\n }\n\n if (node.code) {\n // prettier-ignore\n children = html`<code style=\"${toInlineCSSString(styles.code)}\">${children}</code>`;\n }\n\n return html`${children}`;\n },\n },\n \"prepareTextMentionNotificationEmailAsHtml\"\n );\n\n if (data === null) {\n return null;\n }\n\n return data;\n}\n","import type { Json, JsonObject, MentionData } from \"@liveblocks/core\";\nimport { assertNever } from \"@liveblocks/core\";\nimport * as Y from \"yjs\";\n\nimport { isMentionNodeAttributeId, isString } from \"./lib/utils\";\n\nexport interface SerializedBaseLexicalNode {\n type: string;\n attributes: JsonObject;\n}\n\nexport interface SerializedLexicalTextNode extends SerializedBaseLexicalNode {\n text: string;\n group: \"text\";\n}\n\nexport interface SerializedLexicalElementNode<\n T extends SerializedBaseLexicalNode,\n> extends SerializedBaseLexicalNode {\n children: Array<T>;\n group: \"element\";\n}\n\nexport interface SerializedLexicalDecoratorNode extends SerializedBaseLexicalNode {\n group: \"decorator\";\n}\n\nexport interface SerializedLexicalMentionNode extends SerializedLexicalDecoratorNode {\n type: \"lb-mention\";\n attributes: {\n __id: string;\n __type: \"lb-mention\";\n __userId: string;\n };\n}\n\nexport interface SerializedLexicalGroupMentionNode extends SerializedLexicalDecoratorNode {\n type: \"lb-group-mention\";\n attributes: {\n __id: string;\n __type: \"lb-group-mention\";\n __groupId: string;\n __userIds: string[] | undefined;\n };\n}\n\nexport interface SerializedLexicalLineBreakNode extends SerializedBaseLexicalNode {\n group: \"linebreak\";\n}\n\nexport type SerializedLexicalNode =\n | SerializedLexicalTextNode\n | SerializedLexicalLineBreakNode\n | SerializedLexicalDecoratorNode\n | SerializedLexicalElementNode<SerializedLexicalNode>;\n\nexport type SerializedLexicalRootNodeChildren = Array<\n Readonly<\n | SerializedLexicalElementNode<Readonly<SerializedLexicalNode>>\n | SerializedLexicalDecoratorNode\n | SerializedLexicalLineBreakNode\n >\n>;\n\nexport interface SerializedLexicalRootNode extends Readonly<SerializedBaseLexicalNode> {\n readonly type: \"root\";\n readonly children: SerializedLexicalRootNodeChildren;\n}\n\n/**\n * Create a serialized Lexical Map node.\n * Y.Map shared types are used to represent text nodes and line break nodes in Lexical.js\n */\nfunction createSerializedLexicalMapNode(\n item: Y.Map<Json>\n): SerializedLexicalTextNode | SerializedLexicalLineBreakNode {\n const type = item.get(\"__type\");\n if (typeof type !== \"string\") {\n throw new Error(\n `Expected ${item.constructor.name} to include type attribute`\n );\n }\n\n // Y.Map in Lexical stores all attributes defined in Lexical TextNode and LineBreakNode class.\n const attributes = Object.fromEntries(item.entries());\n if (type === \"linebreak\") {\n return {\n type,\n attributes,\n group: \"linebreak\",\n };\n }\n\n return {\n type,\n attributes,\n text: \"\",\n group: \"text\",\n };\n}\n\n/**\n * Create a serialized Lexical decorator node.\n * Y.XmlElement shared types are used to represent decorator nodes in Lexical.js\n */\nfunction createSerializedLexicalDecoratorNode(\n item: Y.XmlElement\n): SerializedLexicalDecoratorNode {\n const type = item.getAttribute(\"__type\");\n if (typeof type !== \"string\") {\n throw new Error(\n `Expected ${item.constructor.name} to include type attribute`\n );\n }\n const attributes = item.getAttributes();\n\n return {\n type,\n attributes,\n group: \"decorator\",\n };\n}\n\n/**\n * Create a serialized Lexical element node.\n * Y.XmlText shared types are used to represent element nodes (e.g. paragraph, blockquote) in Lexical.js\n */\nfunction createSerializedLexicalElementNode(\n item: Y.XmlText\n): SerializedLexicalElementNode<SerializedLexicalNode> {\n // Note: disabling eslint rule as `getAttribute` returns `any` by default on `Y.XmlText` items.\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const type = item.getAttribute(\"__type\");\n if (typeof type !== \"string\") {\n throw new Error(\n `Expected ${item.constructor.name} to include type attribute`\n );\n }\n const attributes = item.getAttributes();\n\n let start = item._start;\n const children: SerializedLexicalNode[] = [];\n while (start !== null) {\n // If the item is deleted, skip it.\n if (start.deleted) {\n start = start.right;\n continue;\n }\n\n if (start.content instanceof Y.ContentType) {\n const content = start.content.type as Y.AbstractType<Json>;\n if (content instanceof Y.XmlText) {\n children.push(createSerializedLexicalElementNode(content));\n } else if (content instanceof Y.Map) {\n children.push(createSerializedLexicalMapNode(content as Y.Map<Json>));\n } else if (content instanceof Y.XmlElement) {\n children.push(\n createSerializedLexicalDecoratorNode(content as Y.XmlElement)\n );\n }\n }\n // ContentString is used to store text content of a text node in the Y.js doc.\n else if (start.content instanceof Y.ContentString) {\n if (children.length > 0) {\n const last = children[children.length - 1];\n if (last && last.group === \"text\") {\n last.text += start.content.str;\n }\n }\n }\n\n start = start.right;\n }\n\n return {\n type,\n attributes,\n children,\n group: \"element\",\n };\n}\n\n/**\n * Create a serialized Lexical root node.\n */\nexport function createSerializedLexicalRootNode(\n root: Y.XmlText\n): SerializedLexicalRootNode {\n try {\n const children: Array<\n | SerializedLexicalElementNode<SerializedLexicalNode>\n