1
1
import { DeclarationBlock , indent } from '@graphql-codegen/visitor-plugin-common' ;
2
2
import type {
3
+ EnumTypeDefinitionNode ,
3
4
FieldDefinitionNode ,
4
5
GraphQLSchema ,
5
6
InputObjectTypeDefinitionNode ,
@@ -29,7 +30,11 @@ export class ValibotSchemaVisitor extends BaseSchemaVisitor {
29
30
}
30
31
31
32
initialEmit ( ) : string {
32
- return '' ;
33
+ return (
34
+ `\n${ [
35
+ ...this . enumDeclarations ,
36
+ ] . join ( '\n' ) } `
37
+ ) ;
33
38
}
34
39
35
40
get InputObjectTypeDefinition ( ) {
@@ -43,6 +48,25 @@ export class ValibotSchemaVisitor extends BaseSchemaVisitor {
43
48
} ;
44
49
}
45
50
51
+ get EnumTypeDefinition ( ) {
52
+ return {
53
+ leave : ( node : EnumTypeDefinitionNode ) => {
54
+ const visitor = this . createVisitor ( 'both' ) ;
55
+ const enumname = visitor . convertName ( node . name . value ) ;
56
+ this . importTypes . push ( enumname ) ;
57
+
58
+ // hoist enum declarations
59
+ this . enumDeclarations . push (
60
+ new DeclarationBlock ( { } )
61
+ . export ( )
62
+ . asKind ( 'const' )
63
+ . withName ( `${ enumname } Schema` )
64
+ . withContent ( `v.enum_(${ enumname } )` ) . string ,
65
+ ) ;
66
+ } ,
67
+ } ;
68
+ }
69
+
46
70
protected buildInputFields (
47
71
fields : readonly ( FieldDefinitionNode | InputValueDefinitionNode ) [ ] ,
48
72
visitor : Visitor ,
@@ -101,11 +125,12 @@ function generateNameNodeValibotSchema(config: ValidationSchemaPluginConfig, vis
101
125
const converter = visitor . getNameNodeConverter ( node ) ;
102
126
103
127
switch ( converter ?. targetKind ) {
128
+ case 'EnumTypeDefinition' :
129
+ return `${ converter . convertName ( ) } Schema` ;
104
130
case 'InterfaceTypeDefinition' :
105
131
case 'InputObjectTypeDefinition' :
106
132
case 'ObjectTypeDefinition' :
107
133
case 'UnionTypeDefinition' :
108
- case 'EnumTypeDefinition' :
109
134
case 'ScalarTypeDefinition' :
110
135
throw new Error ( 'not implemented' ) ;
111
136
default :
0 commit comments