Skip to main content

zod-generator

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

معلومات المصدر

المستودع
Redocly/redocly-cli
آخر نشاط في المصدر
٦ أكتوبر ٢٠٢٦ في ١٣:٥٢
لغة SKILL.md المكتشفة
الإنجليزية
النجوم
١٬٥٢٣
التفرعات
٢٣٠

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

عرض SKILL.md

SKILL.md
تعليمات المصدر · معاينة للقراءة فقط
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`.
عرض على GitHub