Empezar
Instala EDcheck y valida tu primer formulario en tres pasos simples.
EDcheck revisa si tus datos tienen sentido. No solo si tienen la forma correcta.
Zod te dice: “esto es un texto de 8 letras”. Eso está bien. Pero Zod también acepta asdfasdf como si fuera un nombre. EDcheck te dice: “eso no parece el nombre de una persona”.
Qué necesitas
- Node 20 o más nuevo
- Zod 4 (lo instalas junto con EDcheck si aún no lo tienes)
- Una API key de TypeSafe, o de Vercel AI Gateway
Instalar
yarn add @edteam/edcheck zodLa idea en 3 pasos
- 1
Escribe tu schema con Zod
Igual que siempre. Este archivo sí se puede usar en el navegador.
- 2
En el servidor, pega las reglas
Ahí usas
createEDcheckysemantic(). Eso no va en el navegador. - 3
Llama a `safeParse`
Te devuelve si pasó, los datos limpios y la lista de problemas.
Paso 1. El schema de Zod
Este archivo solo tiene Zod. No importes @edteam/edcheck aquí. Así puedes usarlo en el cliente y en el servidor.
import { z } from "zod"; export const User = z.object({ fullName: z.string().min(2).max(100), bio: z.string().min(10).optional(),});Paso 2. Las reglas en el servidor
Aquí creas EDcheck, le das un proveedor (quién habla con la IA) y unes las reglas a tu schema.
import { createEDcheck, semantic, typesafeProvider } from "@edteam/edcheck"; import { User } from "../shared/user"; const edcheck = createEDcheck({ provider: typesafeProvider({ apiKey: process.env.TYPESAFE_API_KEY!, }),}); export const UserSemantic = edcheck.define(User, { rules: { fullName: semantic("Un nombre completo creíble de una persona real"), bio: semantic({ intent: "Una biografía profesional que diga algo de verdad", valid: "Describe el trabajo o el fondo de la persona", invalid: "Texto sin sentido o que no tiene nada que ver", severity: "warning", }), },});semantic("un texto") es la forma más corta. Es una pregunta de sí o no: ¿este valor cumple eso?
Paso 3. Validar los datos
En tu API (por ejemplo una ruta de Next.js) recibes el JSON y llamas a safeParse.
import { UserSemantic } from "../../../server/user-semantic"; export async function POST(request: Request): Promise<Response> { const input = await request.json(); const result = await UserSemantic.safeParse(input, { signal: request.signal, }); return Response.json(result);}result siempre se ve así:
success:truesi no hay un error gravedata: los datos ya limpios por Zod, si la forma pasóissues: la lista de problemas (primero los de Zod, después los de EDcheck)
Solo corre en el servidor
Si llamas a createEDcheck o a safeParse en el navegador, EDcheck lanza EDcheckEnvironmentError. Eso es a propósito: la clave de la IA no debe ir al cliente.
En el navegador sigue usando Zod. En el servidor usas Zod + EDcheck.
Qué sigue
Ya tienes el ejemplo mínimo. En la siguiente página vemos, con calma, qué hace cada parte.