@prismicio/client
Version:
The official JavaScript + TypeScript client library for Prismic
55 lines (48 loc) • 1.51 kB
text/typescript
import type { RichTextField } from "../types/value/richText"
import type { RichTextFunctionSerializer, TreeNode } from "./types"
import { asTree } from "./asTree"
/**
* Serializes a rich text field with a given serializer.
*
* @remarks
* This is a low-level helper mainly intended to be used by higher-level
* packages. Most users aren't expected to use this function directly.
*
* @typeParam SerializerReturnType - Return type of the serializer.
*
* @param richTextField - A rich text field from Prismic.
* @param serializer - A function serializer to apply.
*
* @returns An array of serialized nodes.
*
* @see Learn how to work with rich text fields: {@link https://prismic.io/docs/fields/rich-text}
*/
export const serialize = <SerializerReturnType>(
richTextField: RichTextField,
serializer: RichTextFunctionSerializer<SerializerReturnType>,
): SerializerReturnType[] => {
return serializeTreeNodes<SerializerReturnType>(
asTree(richTextField).children,
serializer,
)
}
const serializeTreeNodes = <T>(
nodes: TreeNode[],
serializer: RichTextFunctionSerializer<T>,
): T[] => {
const serializedTreeNodes: T[] = []
for (let i = 0; i < nodes.length; i++) {
const treeNode = nodes[i]
const serializedTreeNode = serializer(
treeNode.type,
treeNode.node,
treeNode.text,
serializeTreeNodes(treeNode.children, serializer),
treeNode.key,
)
if (serializedTreeNode != null) {
serializedTreeNodes.push(serializedTreeNode)
}
}
return serializedTreeNodes
}