import { z } from "zod/v4-mini"; export const idSchema = z.number(); export type Id = z.infer; export const entityLivingSchema = z.object({ id: idSchema, updatedAt: z.string(), deleted: z.optional(z.literal(false)), }); export type EntityLiving = z.infer; export const entityToombstoneSchema = z.object({ id: idSchema, updatedAt: z.string(), deleted: z.literal(true), }); export type EntityToombstone = z.infer; export const entitySchema = z.discriminatedUnion("deleted", [entityLivingSchema, entityToombstoneSchema]); export type Entity = z.infer; export type Living = Extract; export type Tombstone = Extract; export function defineEntity(fields: T) { return z.discriminatedUnion("deleted", [z.extend(entityLivingSchema, fields), entityToombstoneSchema]); }