API Reference - @liveblocks/node-lexical

@liveblocks/node-lexical provides a Node.js package to export and modify Lexical documents on the server.

withLexicalDocument

withLexicalDocument is the main entry point to modifying a document on the server. It takes a room ID and a Liveblocks Node client, and returns a callback used to work with Lexical documents stored in Liveblocks.

import { Liveblocks } from "@liveblocks/node";import { withLexicalDocument } from "@liveblocks/node-lexical";
const liveblocks = new Liveblocks({ secret: "",});
await withLexicalDocument( { roomId: "your-room-id", client: liveblocks }, async (doc) => { // Modify your Lexical `doc` // ... });
Returns
  • returnsT

    Returns the value you return from the doc callback.

Options
  • roomIdstringRequired

    The ID of the room to use.

  • clientLiveblocksRequired

    The Liveblocks client to use.

  • nodesKlass<LexicalNode>[] | LexicalNodeReplacement[]

    Optional. The Lexical nodes used in the document. Will extend the default schema which uses Liveblocks mentions and Liveblocks comments.

Returning data

Get your editor’s text content by returning doc.getTextContent inside the callback.

const textContent = await withLexicalDocument(  { roomId: "my-room-id", client: liveblocks },  async (doc) => {    return doc.getTextContent();  });
// "My content"console.log(TextContent);

Custom nodes

If your Lexical document has custom nodes, they must be passed into the withLexicalDocument, similarly to with a front end Lexical client.

import { CodeNode } from "@lexical/code";
await withLexicalDocument( { roomId: "my-room-id", client: liveblocks, nodes: [CodeNode] }, async (doc) => { // Modify your Lexical `doc` // ... });

Lexical document API

You can easily modify your document with the Lexical document API.

doc.update

Liveblocks provides doc.update which is a callback function similar to Lexical’s editor.update. This makes it easy to use Lexical’s editor functions. Any edits will be persisted and appear in realtime to connected users as soon as the update promise resolves. Unlike Lexical’s editor.update, this change is always discrete. The callback can also be an async function.

await withLexicalDocument(  { roomId: "my-room-id", client: liveblocks },  async (doc) => {    await doc.update(() => {      // Make your modifications      // ...    });  });
Returns
Nothing
Arguments
  • callback() => void

    Callback function where you should handle your modifications.

Example usage

Here’s an example of some modifications to a Lexical document.

import { $getRoot } from "lexical";import { $createParagraphNode, $createTextNode } from "lexical/nodes";
await withLexicalDocument( { roomId: "my-room-id", client: liveblocks }, async (doc) => { await doc.update(() => { // Adding a paragraph node with contained text node const root = $getRoot(); const paragraphNode = $createParagraphNode(); const textNode = $createTextNode("Hello world"); paragraphNode.append(textNode); root.append(paragraphNode); }); });

doc.getTextContent

Returns the text content from the root node as a string.

const textContent = await withLexicalDocument(  { roomId: "my-room-id", client: liveblocks },  async (doc) => {    return doc.getTextContent();  });
Returns
  • contentstring

    Returns the text retrieved from the document.

Arguments
None

doc.getEditorState

Returns Lexical’s editorState.

const editorState = await withLexicalDocument(  { roomId: "my-room-id", client: liveblocks },  async (doc) => {    return doc.getEditorState();  });
Returns
  • editorStateEditorState

    Your editor’s Lexical state.

Arguments
None

doc.getLexicalEditor

Returns a headless Lexical editor. @lexical/headless.

const headlessEditor = await withLexicalDocument(  { roomId: "my-room-id", client: liveblocks },  async (doc) => {    return doc.getLexicalEditor();  });
Returns
  • headlessEditorLexicalEditor

    Your headless Lexical editor.

Arguments
None

doc.toJSON

Returns a serialized JSON object representation of your document. See Lexical’s Serialization & Deserialization page for more information.

const docAsJSON = await withLexicalDocument(  { roomId: "my-room-id", client: liveblocks },  async (doc) => {    return doc.toJson();  });
Returns
  • docAsJsonSerializedEditorState<SerializedLexicalNode>

    A serialized JSON object representation of your document.

Arguments
None

doc.toMarkdown

Returns a markdown string of your document. See Lexical’s @lexical/markdown page for more information.

const markdown = await withLexicalDocument(  { roomId: "my-room-id", client: liveblocks },  async (doc) => {    return doc.toMarkdown();  });
Returns
  • markdownstring

    Returns the markdown string.

Arguments
None

We use cookies to collect data to improve your experience on our site. Read our Privacy Policy to learn more.