Skip to content

Commit bfa255c

Browse files
committed
feat: add more resolvers to zod
1 parent 27e1732 commit bfa255c

38 files changed

+1733
-404
lines changed

.changeset/two-worms-thank.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@hey-api/openapi-ts": patch
3+
---
4+
5+
**plugin(zod)**: provide more resolvers

packages/openapi-python/src/plugins/pydantic/v2/walker.ts

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ export function createVisitor(
6060
};
6161
},
6262
array(schema, ctx, walk) {
63-
const applyModifiers = (result: PydanticResult, opts?: { optional?: boolean }) =>
63+
const applyModifiers: Parameters<typeof arrayToType>[0]['applyModifiers'] = (result, opts) =>
6464
this.applyModifiers(result, ctx, opts) as PydanticFinal;
6565

6666
const { childResults, fieldConstraints, type } = arrayToType({
@@ -111,8 +111,10 @@ export function createVisitor(
111111
}
112112
},
113113
intersection(items, schemas, parentSchema, ctx) {
114-
const applyModifiers = (result: PydanticResult, opts?: { optional?: boolean }) =>
115-
this.applyModifiers(result, ctx, opts) as PydanticFinal;
114+
const applyModifiers: Parameters<typeof intersectionToType>[0]['applyModifiers'] = (
115+
result,
116+
opts,
117+
) => this.applyModifiers(result, ctx, opts) as PydanticFinal;
116118

117119
const result = intersectionToType({
118120
applyModifiers,
@@ -156,8 +158,10 @@ export function createVisitor(
156158
};
157159
},
158160
object(schema, ctx, walk) {
159-
const applyModifiers = (result: PydanticResult, opts?: { optional?: boolean }) =>
160-
this.applyModifiers(result, ctx, opts) as PydanticFinal;
161+
const applyModifiers: Parameters<typeof objectToFields>[0]['applyModifiers'] = (
162+
result,
163+
opts,
164+
) => this.applyModifiers(result, ctx, opts) as PydanticFinal;
161165

162166
const { childResults, fields, type } = objectToFields({
163167
applyModifiers,
@@ -203,7 +207,7 @@ export function createVisitor(
203207
};
204208
},
205209
tuple(schema, ctx, walk) {
206-
const applyModifiers = (result: PydanticResult, opts?: { optional?: boolean }) =>
210+
const applyModifiers: Parameters<typeof tupleToType>[0]['applyModifiers'] = (result, opts) =>
207211
this.applyModifiers(result, ctx, opts) as PydanticFinal;
208212

209213
const { childResults, fieldConstraints, type } = tupleToType({
@@ -232,7 +236,7 @@ export function createVisitor(
232236
};
233237
},
234238
union(items, schemas, parentSchema, ctx) {
235-
const applyModifiers = (result: PydanticResult, opts?: { optional?: boolean }) =>
239+
const applyModifiers: Parameters<typeof unionToType>[0]['applyModifiers'] = (result, opts) =>
236240
this.applyModifiers(result, ctx, opts) as PydanticFinal;
237241

238242
const result = unionToType({

packages/openapi-ts/src/plugins/valibot/resolvers.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -363,16 +363,6 @@ export interface UnknownResolverContext extends BaseContext {
363363
schema: SchemaWithType<'unknown'>;
364364
}
365365

366-
export interface VoidResolverContext extends BaseContext {
367-
/**
368-
* Nodes used to build different parts of the result.
369-
*/
370-
nodes: {
371-
base: (ctx: VoidResolverContext) => PipeResult;
372-
};
373-
schema: SchemaWithType<'void'>;
374-
}
375-
376366
export interface ValidatorResolverContext extends BaseContext {
377367
operation: IR.OperationObject;
378368
/**
@@ -382,3 +372,13 @@ export interface ValidatorResolverContext extends BaseContext {
382372
schema: Symbol;
383373
};
384374
}
375+
376+
export interface VoidResolverContext extends BaseContext {
377+
/**
378+
* Nodes used to build different parts of the result.
379+
*/
380+
nodes: {
381+
base: (ctx: VoidResolverContext) => PipeResult;
382+
};
383+
schema: SchemaWithType<'void'>;
384+
}

packages/openapi-ts/src/plugins/valibot/v1/toAst/union.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ function baseNode(ctx: UnionResolverContext): PipeResult {
1515
const nonNullItems: Array<ValibotResult> = [];
1616
childResults.forEach((item, index) => {
1717
const schema = schemas[index]!;
18-
if (schema.type !== 'null') {
18+
if (schema.type !== 'null' && schema.const !== null) {
1919
nonNullItems.push(item);
2020
}
2121
});
@@ -49,11 +49,11 @@ export function unionToPipes(ctx: {
4949
plugin: ValibotPlugin['Instance'];
5050
schemas: ReadonlyArray<IR.SchemaObject>;
5151
}): CompositeHandlerResult {
52-
const { childResults, parentSchema, plugin, schemas } = ctx;
52+
const { applyModifiers, childResults, parentSchema, plugin, schemas } = ctx;
5353

5454
const resolverCtx: UnionResolverContext = {
5555
$,
56-
applyModifiers: ctx.applyModifiers,
56+
applyModifiers,
5757
childResults,
5858
nodes: {
5959
base: baseNode,

packages/openapi-ts/src/plugins/valibot/v1/walker.ts

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ export function createVisitor(
8686
};
8787
},
8888
array(schema, ctx, walk) {
89-
const applyModifiers = (result: ValibotResult, opts?: { optional?: boolean }) =>
89+
const applyModifiers: Parameters<typeof arrayToPipes>[0]['applyModifiers'] = (result, opts) =>
9090
this.applyModifiers(result, ctx, opts) as ValibotFinal;
9191

9292
const { childResults, pipes } = arrayToPipes({
@@ -145,8 +145,10 @@ export function createVisitor(
145145
}
146146
},
147147
intersection(items, schemas, parentSchema, ctx) {
148-
const applyModifiers = (result: ValibotResult, opts?: { optional?: boolean }) =>
149-
this.applyModifiers(result, ctx, opts) as ValibotFinal;
148+
const applyModifiers: Parameters<typeof intersectionToPipes>[0]['applyModifiers'] = (
149+
result,
150+
opts,
151+
) => this.applyModifiers(result, ctx, opts) as ValibotFinal;
150152

151153
const { pipes } = intersectionToPipes({
152154
applyModifiers,
@@ -190,8 +192,10 @@ export function createVisitor(
190192
};
191193
},
192194
object(schema, ctx, walk) {
193-
const applyModifiers = (result: ValibotResult, opts: { optional?: boolean }) =>
194-
this.applyModifiers(result, ctx, opts) as ValibotFinal;
195+
const applyModifiers: Parameters<typeof objectToPipes>[0]['applyModifiers'] = (
196+
result,
197+
opts,
198+
) => this.applyModifiers(result, ctx, opts) as ValibotFinal;
195199

196200
const { childResults, pipes } = objectToPipes({
197201
applyModifiers,
@@ -267,7 +271,7 @@ export function createVisitor(
267271
};
268272
},
269273
tuple(schema, ctx, walk) {
270-
const applyModifiers = (result: ValibotResult, opts?: { optional?: boolean }) =>
274+
const applyModifiers: Parameters<typeof tupleToPipes>[0]['applyModifiers'] = (result, opts) =>
271275
this.applyModifiers(result, ctx, opts) as ValibotFinal;
272276

273277
const { childResults, pipes } = tupleToPipes({
@@ -295,7 +299,7 @@ export function createVisitor(
295299
};
296300
},
297301
union(items, schemas, parentSchema, ctx) {
298-
const applyModifiers = (result: ValibotResult, opts?: { optional?: boolean }) =>
302+
const applyModifiers: Parameters<typeof unionToPipes>[0]['applyModifiers'] = (result, opts) =>
299303
this.applyModifiers(result, ctx, opts) as ValibotFinal;
300304

301305
const hasNull = schemas.some((s) => s.type === 'null') || items.some((i) => i.meta.nullable);

0 commit comments

Comments
 (0)