import { z } from "zod" import { BlocksEnums } from "../../../../types/blocksEnum" import { ContentEnum } from "../../../../types/content" import { alertSchema, transformAlertSchema } from "../alert" import { rawLinkUnionSchema, transformPageLink } from "../pageLinks" import { imageContainerSchema } from "./imageContainer" import { 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, alertSchema.merge( z.object({ __typename: z.literal(ContentEnum.blocks.Alert), }) ), ...rawLinkUnionSchema.options, ]) .transform((data) => { const link = transformPageLink(data) if (link) { return link } if (data.__typename === ContentEnum.blocks.Alert) { return { __typename: data.__typename, ...transformAlertSchema(data), } } return data }), }) ), }), }) .nullish(), }) .nullish() .transform((data) => { return data?.content }), })