EDlabsEDcheck

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 zod

La idea en 3 pasos

  1. 1

    Escribe tu schema con Zod

    Igual que siempre. Este archivo sí se puede usar en el navegador.

  2. 2

    En el servidor, pega las reglas

    Ahí usas createEDcheck y semantic(). Eso no va en el navegador.

  3. 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.

shared/user.ts
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.

server/user-semantic.ts
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.

app/api/user/route.ts
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: true si no hay un error grave
  • data: 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.