From 3d8bad942f78d3edde4605db0846ff41126cfa98 Mon Sep 17 00:00:00 2001 From: Lubos Date: Thu, 12 Mar 2026 01:52:59 +0100 Subject: [PATCH] feat: add export flag to zod processor --- .../openapi-ts/src/plugins/zod/mini/processor.ts | 15 ++++++++++----- .../src/plugins/zod/shared/processor.ts | 15 +++++++-------- .../openapi-ts/src/plugins/zod/v3/processor.ts | 15 ++++++++++----- .../openapi-ts/src/plugins/zod/v4/processor.ts | 15 ++++++++++----- 4 files changed, 37 insertions(+), 23 deletions(-) diff --git a/packages/openapi-ts/src/plugins/zod/mini/processor.ts b/packages/openapi-ts/src/plugins/zod/mini/processor.ts index 1f75c75b7..b2fdb66ee 100644 --- a/packages/openapi-ts/src/plugins/zod/mini/processor.ts +++ b/packages/openapi-ts/src/plugins/zod/mini/processor.ts @@ -33,13 +33,13 @@ export function createProcessor(plugin: ZodPlugin['Instance']): ProcessorResult return ctx.schema; } - function process(ctx: ProcessorContext): void { + function process(ctx: ProcessorContext): ZodFinal | void { if (!processor.markEmitted(ctx.path)) return; + const shouldExport = ctx.export !== false; + return processor.withContext({ anchor: ctx.namingAnchor, tags: ctx.tags }, () => { - const visitor = createVisitor({ - schemaExtractor: extractor, - }); + const visitor = createVisitor({ schemaExtractor: extractor }); const walk = createSchemaWalker(visitor); const result = walk(ctx.schema, { @@ -52,7 +52,12 @@ export function createProcessor(plugin: ZodPlugin['Instance']): ProcessorResult plugin, }) as ZodFinal; - exportAst({ ...ctx, final, plugin }); + if (shouldExport) { + exportAst({ ...ctx, final, plugin }); + return; + } + + return final; }); } diff --git a/packages/openapi-ts/src/plugins/zod/shared/processor.ts b/packages/openapi-ts/src/plugins/zod/shared/processor.ts index 8eba69261..04963a14e 100644 --- a/packages/openapi-ts/src/plugins/zod/shared/processor.ts +++ b/packages/openapi-ts/src/plugins/zod/shared/processor.ts @@ -1,18 +1,17 @@ -import type { - IR, - NamingConfig, - SchemaProcessorContext, - SchemaProcessorResult, -} from '@hey-api/shared'; +import type { IR, NamingConfig, SchemaProcessorContext } from '@hey-api/shared'; import type { ZodPlugin } from '../types'; -import type { TypeOptions } from './types'; +import type { TypeOptions, ZodFinal } from './types'; export type ProcessorContext = SchemaProcessorContext & { + /** Whether to export the result (default: true) */ + export?: boolean; naming: NamingConfig & TypeOptions; /** The plugin instance. */ plugin: ZodPlugin['Instance']; schema: IR.SchemaObject; }; -export type ProcessorResult = SchemaProcessorResult; +export type ProcessorResult = { + process: (ctx: ProcessorContext) => ZodFinal | void; +}; diff --git a/packages/openapi-ts/src/plugins/zod/v3/processor.ts b/packages/openapi-ts/src/plugins/zod/v3/processor.ts index 1f75c75b7..b2fdb66ee 100644 --- a/packages/openapi-ts/src/plugins/zod/v3/processor.ts +++ b/packages/openapi-ts/src/plugins/zod/v3/processor.ts @@ -33,13 +33,13 @@ export function createProcessor(plugin: ZodPlugin['Instance']): ProcessorResult return ctx.schema; } - function process(ctx: ProcessorContext): void { + function process(ctx: ProcessorContext): ZodFinal | void { if (!processor.markEmitted(ctx.path)) return; + const shouldExport = ctx.export !== false; + return processor.withContext({ anchor: ctx.namingAnchor, tags: ctx.tags }, () => { - const visitor = createVisitor({ - schemaExtractor: extractor, - }); + const visitor = createVisitor({ schemaExtractor: extractor }); const walk = createSchemaWalker(visitor); const result = walk(ctx.schema, { @@ -52,7 +52,12 @@ export function createProcessor(plugin: ZodPlugin['Instance']): ProcessorResult plugin, }) as ZodFinal; - exportAst({ ...ctx, final, plugin }); + if (shouldExport) { + exportAst({ ...ctx, final, plugin }); + return; + } + + return final; }); } diff --git a/packages/openapi-ts/src/plugins/zod/v4/processor.ts b/packages/openapi-ts/src/plugins/zod/v4/processor.ts index 1f75c75b7..b2fdb66ee 100644 --- a/packages/openapi-ts/src/plugins/zod/v4/processor.ts +++ b/packages/openapi-ts/src/plugins/zod/v4/processor.ts @@ -33,13 +33,13 @@ export function createProcessor(plugin: ZodPlugin['Instance']): ProcessorResult return ctx.schema; } - function process(ctx: ProcessorContext): void { + function process(ctx: ProcessorContext): ZodFinal | void { if (!processor.markEmitted(ctx.path)) return; + const shouldExport = ctx.export !== false; + return processor.withContext({ anchor: ctx.namingAnchor, tags: ctx.tags }, () => { - const visitor = createVisitor({ - schemaExtractor: extractor, - }); + const visitor = createVisitor({ schemaExtractor: extractor }); const walk = createSchemaWalker(visitor); const result = walk(ctx.schema, { @@ -52,7 +52,12 @@ export function createProcessor(plugin: ZodPlugin['Instance']): ProcessorResult plugin, }) as ZodFinal; - exportAst({ ...ctx, final, plugin }); + if (shouldExport) { + exportAst({ ...ctx, final, plugin }); + return; + } + + return final; }); } -- 2.51.2