Skip to main content

zod-generator

Design of the ejected Redocly `zod` client generator. Read it, and update it, before changing generators/zod/.

Informations de source

Dépôt
Redocly/redocly-cli
Dernière activité de la source
6 octobre 2026 à 13:52
Langue détectée de SKILL.md
anglais
Étoiles
1 523
Forks
230

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
name
zod-generator
description
Design of the ejected Redocly `zod` client generator. Read it, and update it, before changing generators/zod/.
# The `zod` generator — its skill This file is the DESIGN of your ejected `zod` generator (`generators/zod/`): **to change the generator, edit this skill first, then make the code match it** — a diff to `generators/zod/` that has no covering sentence here is incomplete. ## What it emits A standalone `<stem>.zod.ts`: one `export const <Name>Schema` per named IR schema, the `operationSchemas` request/response map, and a `zodValidation()` middleware. ## Design decisions that must hold - **The client stays dependency-free.** zod is the CONSUMER's peer dependency; the generated client never imports this module, and this module never imports the client. - **Output-mode-agnostic:** one module beside the client whatever the sdk's layout. - **Emits nothing** when the model has neither named schemas nor JSON operation bodies — an empty file is worse than no file. - Validation is opt-in at runtime (`use(zodValidation())`), never automatic. - **Only ERASABLE TypeScript.** The module must run under `node --experimental-strip-types` with no build step, so nothing that needs a transform is emitted: no `enum`, no `namespace`, and no constructor parameter properties. `ZodValidationError` therefore declares its fields and assigns them in the constructor body — `constructor(readonly operationId: string)` fails strip-only mode, which is how the generated CLI broke when it imported this module. ## The stage files `schemas.ts` holds the whole renderer — schema expressions, the `operationSchemas` map, and the module assembly; `index.ts` is the entry. Naming and literal escaping come from the TypeScript printer (`@redocly/client-generator/printers/typescript`). ## Ejecting it `redocly eject-generator zod` copies this generator's TypeScript source folder to `generators/zod/`, exactly as we wrote it, importing `@redocly/client-generator` and `@redocly/client-generator/printers/typescript`. Running a `.ts` generator uses Node's type stripping (Node 22.18, 23.6, or newer); newer built-in versions merge in per file with `--update`. Change the schema shapes, the naming, or what gets a schema at all, and regenerate. ## The modify loop 1. Edit this skill: state the new behavior or decision. 2. Make `generators/zod/` match it. 3. Run `redocly generate-client` and inspect the `git diff` of the generated output — generated files are never hand-edited. Newer built-in versions merge in with `redocly eject-generator zod --update`.
Voir sur GitHub