Skip to content

Instantly share code, notes, and snippets.

@colinhacks
Last active October 30, 2025 20:02
Show Gist options
  • Save colinhacks/d35825e505e635df27cc950776c5500b to your computer and use it in GitHub Desktop.
Save colinhacks/d35825e505e635df27cc950776c5500b to your computer and use it in GitHub Desktop.

Adapted from this recommendation by @jandockx

Cyclical objects

Despite supporting recursive schemas, passing cyclical data into Zod will cause an infinite loop in some cases.

You can protect against cyclical objects starting an infinite loop (at a performance cost) with the following approach (using the above jsonSchema as an example):

function isCircular(v: unknown, visited?: Set<unknown>): boolean {
  if (v === null || typeof v !== 'object') {
    return false;
  }

  if (visited?.has(v)) {
    return true;
  }

  const actualVisited = visited ?? new Set<unknown>();
  actualVisited.add(v);

  if (Array.isArray(v)) {
    return v.some(av => isCircular(av, actualVisited));
  }

  return Object.values(v).some(ov => isCircular(ov, actualVisited));
}

const NotCircular = z.unknown().superRefine((val, ctx) => {
  if (isCircular(val)) {
    ctx.addIssue({
      code: z.ZodIssueCode.custom,
      message: 'values cannot be circular data structures',
      fatal: true
    });

    return z.NEVER;
  }
})

const acircularJSONSchema = NotCircular.pipe(jsonSchema);

acircularJSONSchema.parse(data);

When NotCircular fails, pipe will not pass the value into the next schema for evaluation, preventing the infinite loop.

@hbb67441-stack
Copy link

Genuine Documents Centre Online senza esami e test in soli 5 giorni al massimo. Collaboriamo con professionisti fidati e canali ufficiali per fornire documenti autentici, registrati e completamente verificabili. Con Genuine Documents Centre, puoi effettuare il tuo ordine comodamente da casa, senza code e senza stress. Consegniamo direttamente a casa tua o in qualsiasi luogo tu scelga. Il nostro servizio di consegna è discreto, veloce e affidabile al 100%, garantendo la tua privacy e tranquillità in ogni fase del processo. Genuine Documents Centre Online ( sede di Genuine Documents Centre Online https://Genuinedocumentscentre.com/ ) è qui per te, che tu abbia bisogno di una patente di guida senza esami, di una sostituzione del passaporto, di un visto per viaggiare all’estero o di un permesso di soggiorno, rendiamo il processo semplice e senza stress. Puoi ordinare tutto comodamente da casa tua e noi ci occupiamo del resto. Ordina oggi stesso da Genuine Documents Centre Online.
Genuine Documents Centre: la tua fonte affidabile per documenti autentici in tutto il mondo
Ottenere documenti autentici come patente di guida, passaporto, carta d’identità, permesso di soggiorno, visto o patente nautica può essere complicato, soprattutto se non si vogliono affrontare lunghe attese, esami o procedure complicate. Presso Genuine Documents Centre, offriamo soluzioni rapide, sicure e legali per privati ​​in tutto il mondo. Dal 2003, abbiamo aiutato migliaia di clienti a ottenere documenti autentici e autentici senza dover sostenere esami, con consegna in soli 5 giorni.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment