import { z } from "zod" import { BlocksEnums } from "../../../../types/blocksEnum" import { ContentEnum } from "../../../../types/content" import { linkRefsUnionSchema, linkUnionSchema, transformPageLink, } from "../pageLinks" import { imageContainerRefsSchema, imageContainerSchema, } from "./imageContainer" import { sysAssetRefsSchema, sysAssetSchema } from "./sysAsset" export const contentSchema = z.object({ typename: z .literal(BlocksEnums.block.Content) .optional() .default(BlocksEnums.block.Content), content: z .object({ content: z.object({ json: z.any(), // JSON embedded_itemsConnection: z.object({ edges: z.array( z.object({ node: z .discriminatedUnion("__typename", [ imageContainerSchema, sysAssetSchema, ...linkUnionSchema.options, ]) .transform((data) => { const link = transformPageLink(data) if (link) { return link } return data }), }) ), }), }), }) .nullish() .transform((data) => { return data?.content }), }) export const contentRefsSchema = z.object({ content: z .object({ content: z.object({ embedded_itemsConnection: z.object({ edges: z.array( z.object({ node: z.discriminatedUnion("__typename", [ sysAssetRefsSchema, imageContainerRefsSchema, ...linkRefsUnionSchema.options, ]), }) ), }), }), }) .transform((data) => { return data.content.embedded_itemsConnection.edges .filter(({ node }) => node.__typename !== ContentEnum.blocks.SysAsset) .map(({ node }) => { if ("system" in node) { return node.system } return null }) .filter((node) => !!node) }), })