Files
web/packages/trpc/lib/routers/contentstack/schemas/blocks/content.ts
Linus Flood 7bdcfc7681 Merged in feat/book-396-validationerror (pull request #2871)
feat(BOOK-396): city page validation error

* feat(BOOK-396): city page validation error

* feat(BOOK-396): city page validation error


Approved-by: Erik Tiekstra
Approved-by: Joakim Jäderberg
2025-09-26 10:51:19 +00:00

81 lines
2.0 KiB
TypeScript

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)
}),
})