Files
wp-headless/wp-content/themes/moonshine/app/utils/acf-media.ts
Pascal Martineau b89f02955d
All checks were successful
Deployment / wordpress (push) Successful in 6s
Deployment / nuxt (push) Successful in 58s
feat: Replace eslint => oxlint + oxfmt
2026-02-01 22:00:54 -05:00

29 lines
721 B
TypeScript

import type { AcfMediaFragment } from "#graphql/operations";
import * as z from "zod";
export const acfImageSchema = z.object({
src: z.url(),
alt: z.string(),
mediaDetails: z.object({
width: z.number(),
height: z.number(),
}),
objectPosition: z.string().optional().default("center"),
});
export const acfMediaSchema = z.object({
image: z.object({
node: acfImageSchema,
}),
aspectRatio: z.enum(["square", "video", "portrait", "auto"]).optional().default("auto"),
objectFit: z.enum(["cover", "contain"]).optional().default("cover"),
});
export function parseAcfMedia(data?: Partial<AcfMediaFragment>) {
try {
return acfMediaSchema.parse(data);
} catch {
return undefined;
}
}