Skip to content

Commit eb05f42

Browse files
committed
Refactor schema building for field arguments
- Abstract the building of arguments schema block into `buildObjectTypeDefinitionArguments` method in `BaseSchemaVisitor` - Change visibility of `buildInputFields` method from private to protected - Update necessary imports in `schema_visitor.ts`
1 parent b57abca commit eb05f42

File tree

4 files changed

+20
-16
lines changed

4 files changed

+20
-16
lines changed

src/myzod/index.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,7 @@ export class MyZodSchemaVisitor extends BaseSchemaVisitor {
5858
this.importTypes.push(name);
5959

6060
// Building schema for field arguments.
61-
const argumentBlocks = visitor.buildArgumentsSchemaBlock(node, (typeName, field) => {
62-
this.importTypes.push(typeName);
63-
return this.buildInputFields(field.arguments ?? [], visitor, typeName);
64-
});
61+
const argumentBlocks = this.buildObjectTypeDefinitionArguments(node, visitor);
6562
const appendArguments = argumentBlocks ? '\n' + argumentBlocks : '';
6663

6764
// Building schema for fields.
@@ -176,7 +173,7 @@ export class MyZodSchemaVisitor extends BaseSchemaVisitor {
176173
};
177174
}
178175

179-
private buildInputFields(
176+
protected buildInputFields(
180177
fields: readonly (FieldDefinitionNode | InputValueDefinitionNode)[],
181178
visitor: Visitor,
182179
name: string

src/schema_visitor.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { GraphQLSchema } from 'graphql';
1+
import { FieldDefinitionNode, GraphQLSchema, InputValueDefinitionNode, ObjectTypeDefinitionNode } from 'graphql';
22

33
import { ValidationSchemaPluginConfig } from './config';
44
import { SchemaVisitor } from './types';
@@ -32,4 +32,17 @@ export abstract class BaseSchemaVisitor implements SchemaVisitor {
3232
createVisitor(scalarDirection: 'input' | 'output' | 'both'): Visitor {
3333
return new Visitor(scalarDirection, this.schema, this.config);
3434
}
35+
36+
protected abstract buildInputFields(
37+
fields: readonly (FieldDefinitionNode | InputValueDefinitionNode)[],
38+
visitor: Visitor,
39+
name: string
40+
): string;
41+
42+
protected buildObjectTypeDefinitionArguments(node: ObjectTypeDefinitionNode, visitor: Visitor) {
43+
return visitor.buildArgumentsSchemaBlock(node, (typeName, field) => {
44+
this.importTypes.push(typeName);
45+
return this.buildInputFields(field.arguments ?? [], visitor, typeName);
46+
});
47+
}
3548
}

src/yup/index.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,7 @@ export class YupSchemaVisitor extends BaseSchemaVisitor {
6464
this.importTypes.push(name);
6565

6666
// Building schema for field arguments.
67-
const argumentBlocks = visitor.buildArgumentsSchemaBlock(node, (typeName, field) => {
68-
this.importTypes.push(typeName);
69-
return this.buildInputFields(field.arguments ?? [], visitor, typeName);
70-
});
67+
const argumentBlocks = this.buildObjectTypeDefinitionArguments(node, visitor);
7168
const appendArguments = argumentBlocks ? '\n' + argumentBlocks : '';
7269

7370
// Building schema for fields.
@@ -201,7 +198,7 @@ export class YupSchemaVisitor extends BaseSchemaVisitor {
201198
};
202199
}
203200

204-
private buildInputFields(
201+
protected buildInputFields(
205202
fields: readonly (FieldDefinitionNode | InputValueDefinitionNode)[],
206203
visitor: Visitor,
207204
name: string

src/zod/index.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,7 @@ export class ZodSchemaVisitor extends BaseSchemaVisitor {
7474
this.importTypes.push(name);
7575

7676
// Building schema for field arguments.
77-
const argumentBlocks = visitor.buildArgumentsSchemaBlock(node, (typeName, field) => {
78-
this.importTypes.push(typeName);
79-
return this.buildInputFields(field.arguments ?? [], visitor, typeName);
80-
});
77+
const argumentBlocks = this.buildObjectTypeDefinitionArguments(node, visitor);
8178
const appendArguments = argumentBlocks ? '\n' + argumentBlocks : '';
8279

8380
// Building schema for fields.
@@ -189,7 +186,7 @@ export class ZodSchemaVisitor extends BaseSchemaVisitor {
189186
};
190187
}
191188

192-
private buildInputFields(
189+
protected buildInputFields(
193190
fields: readonly (FieldDefinitionNode | InputValueDefinitionNode)[],
194191
visitor: Visitor,
195192
name: string

0 commit comments

Comments
 (0)