Skip to content

Commit

Permalink
use private fields for transformers
Browse files Browse the repository at this point in the history
  • Loading branch information
AGalabov committed Apr 1, 2024
1 parent 6f2aaaa commit 201b6b1
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 14 deletions.
5 changes: 4 additions & 1 deletion src/openapi-generator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,10 +73,13 @@ export class OpenAPIGenerator {
component: OpenAPIComponentObject;
}[] = [];

private openApiTransformer: OpenApiTransformer;

constructor(
private definitions: (OpenAPIDefinitions | ZodTypeAny)[],
private versionSpecifics: OpenApiVersionSpecifics
) {
this.openApiTransformer = new OpenApiTransformer(versionSpecifics);
this.sortDefinitions();
}

Expand Down Expand Up @@ -634,7 +637,7 @@ export class OpenAPIGenerator {
isNullable: boolean,
defaultValue?: T
): SchemaObject | ReferenceObject {
return new OpenApiTransformer(this.versionSpecifics).transform(
return this.openApiTransformer.transform(
zodSchema,
isNullable,
_ => this.generateSchemaWithRef(_),
Expand Down
40 changes: 27 additions & 13 deletions src/transformers/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,20 @@ import { UnionTransformer } from './union';
import { OpenApiVersionSpecifics } from '../openapi-generator';

export class OpenApiTransformer {
private objectTransformer = new ObjectTransformer();
private stringTransformer = new StringTransformer();
private numberTransformer = new NumberTransformer();
private bigIntTransformer = new BigIntTransformer();
private literalTransformer = new LiteralTransformer();
private enumTransformer = new EnumTransformer();
private nativeEnumTransformer = new NativeEnumTransformer();
private arrayTransformer = new ArrayTransformer();
private tupleTransformer = new TupleTransformer();
private unionTransformer = new UnionTransformer();
private discriminatedUnionTransformer = new DiscriminatedUnionTransformer();
private intersectionTransformer = new IntersectionTransformer();
private recordTransformer = new RecordTransformer();

constructor(private versionSpecifics: OpenApiVersionSpecifics) {}

transform<T>(
Expand All @@ -42,7 +56,7 @@ export class OpenApiTransformer {
}

if (isZodType(zodSchema, 'ZodObject')) {
return new ObjectTransformer().transform(
return this.objectTransformer.transform(
zodSchema,
defaultValue as object, // verified on TS level from input
_ => this.versionSpecifics.mapNullableType(_, isNullable),
Expand Down Expand Up @@ -71,21 +85,21 @@ export class OpenApiTransformer {
}

if (isZodType(zodSchema, 'ZodString')) {
return new StringTransformer().transform(zodSchema, schema =>
return this.stringTransformer.transform(zodSchema, schema =>
this.versionSpecifics.mapNullableType(schema, isNullable)
);
}

if (isZodType(zodSchema, 'ZodNumber')) {
return new NumberTransformer().transform(
return this.numberTransformer.transform(
zodSchema,
schema => this.versionSpecifics.mapNullableType(schema, isNullable),
_ => this.versionSpecifics.getNumberChecks(_)
);
}

if (isZodType(zodSchema, 'ZodBigInt')) {
return new BigIntTransformer().transform(
return this.bigIntTransformer.transform(
zodSchema,
schema => this.versionSpecifics.mapNullableType(schema, isNullable),
_ => this.versionSpecifics.getNumberChecks(_)
Expand All @@ -97,49 +111,49 @@ export class OpenApiTransformer {
}

if (isZodType(zodSchema, 'ZodLiteral')) {
return new LiteralTransformer().transform(zodSchema, schema =>
return this.literalTransformer.transform(zodSchema, schema =>
this.versionSpecifics.mapNullableType(schema, isNullable)
);
}

if (isZodType(zodSchema, 'ZodEnum')) {
return new EnumTransformer().transform(zodSchema, schema =>
return this.enumTransformer.transform(zodSchema, schema =>
this.versionSpecifics.mapNullableType(schema, isNullable)
);
}

if (isZodType(zodSchema, 'ZodNativeEnum')) {
return new NativeEnumTransformer().transform(zodSchema, schema =>
return this.nativeEnumTransformer.transform(zodSchema, schema =>
this.versionSpecifics.mapNullableType(schema, isNullable)
);
}

if (isZodType(zodSchema, 'ZodArray')) {
return new ArrayTransformer().transform(
return this.arrayTransformer.transform(
zodSchema,
_ => this.versionSpecifics.mapNullableType(_, isNullable),
mapItem
);
}

if (isZodType(zodSchema, 'ZodTuple')) {
return new TupleTransformer().transform(
return this.tupleTransformer.transform(
zodSchema,
_ => this.versionSpecifics.mapNullableType(_, isNullable),
mapItem
);
}

if (isZodType(zodSchema, 'ZodUnion')) {
return new UnionTransformer().transform(
return this.unionTransformer.transform(
zodSchema,
_ => this.versionSpecifics.mapNullableOfArray(_, isNullable),
mapItem
);
}

if (isZodType(zodSchema, 'ZodDiscriminatedUnion')) {
return new DiscriminatedUnionTransformer().transform(
return this.discriminatedUnionTransformer.transform(
zodSchema,
isNullable,
_ => this.versionSpecifics.mapNullableOfArray(_, isNullable),
Expand All @@ -149,7 +163,7 @@ export class OpenApiTransformer {
}

if (isZodType(zodSchema, 'ZodIntersection')) {
return new IntersectionTransformer().transform(
return this.intersectionTransformer.transform(
zodSchema,
isNullable,
_ => this.versionSpecifics.mapNullableOfArray(_, isNullable),
Expand All @@ -158,7 +172,7 @@ export class OpenApiTransformer {
}

if (isZodType(zodSchema, 'ZodRecord')) {
return new RecordTransformer().transform(
return this.recordTransformer.transform(
zodSchema,
_ => this.versionSpecifics.mapNullableType(_, isNullable),
mapItem
Expand Down

0 comments on commit 201b6b1

Please sign in to comment.