File tree 4 files changed +25
-12
lines changed
4 files changed +25
-12
lines changed Original file line number Diff line number Diff line change @@ -212,9 +212,8 @@ const generateFieldTypeMyZodSchema = (
212
212
}
213
213
const appliedDirectivesGen = applyDirectives ( config , field , gen ) ;
214
214
if ( isNonNullType ( parentType ) ) {
215
- if ( config . notAllowEmptyString === true ) {
216
- const tsType = visitor . getScalarType ( type . name . value ) ;
217
- if ( tsType === 'string' ) return `${ gen } .min(1)` ;
215
+ if ( visitor . shouldEmitAsNotAllowEmptyString ( type . name . value ) ) {
216
+ return `${ gen } .min(1)` ;
218
217
}
219
218
return appliedDirectivesGen ;
220
219
}
Original file line number Diff line number Diff line change 1
1
import { TsVisitor } from '@graphql-codegen/typescript' ;
2
- import { GraphQLSchema , NameNode } from 'graphql' ;
2
+ import { GraphQLSchema , NameNode , specifiedScalarTypes } from 'graphql' ;
3
3
4
4
import { ValidationSchemaPluginConfig } from './config' ;
5
5
6
6
export class Visitor extends TsVisitor {
7
7
constructor (
8
8
private scalarDirection : 'input' | 'output' | 'both' ,
9
9
private schema : GraphQLSchema ,
10
- config : ValidationSchemaPluginConfig
10
+ private pluginConfig : ValidationSchemaPluginConfig
11
11
) {
12
- super ( schema , config ) ;
12
+ super ( schema , pluginConfig ) ;
13
+ }
14
+
15
+ private isSpecifiedScalarName ( scalarName : string ) {
16
+ return specifiedScalarTypes . some ( ( { name } ) => name === scalarName ) ;
13
17
}
14
18
15
19
public getType ( name : string ) {
@@ -34,4 +38,16 @@ export class Visitor extends TsVisitor {
34
38
}
35
39
return this . scalars [ scalarName ] [ this . scalarDirection ] ;
36
40
}
41
+
42
+ public shouldEmitAsNotAllowEmptyString ( name : string ) : boolean {
43
+ if ( this . pluginConfig . notAllowEmptyString !== true ) {
44
+ return false ;
45
+ }
46
+ const typ = this . getType ( name ) ;
47
+ if ( typ ?. astNode ?. kind !== 'ScalarTypeDefinition' && ! this . isSpecifiedScalarName ( name ) ) {
48
+ return false ;
49
+ }
50
+ const tsType = this . getScalarType ( name ) ;
51
+ return tsType === 'string' ;
52
+ }
37
53
}
Original file line number Diff line number Diff line change @@ -262,9 +262,8 @@ const generateFieldTypeYupSchema = (
262
262
if ( isNamedType ( type ) ) {
263
263
const gen = generateNameNodeYupSchema ( config , visitor , type . name ) ;
264
264
if ( isNonNullType ( parentType ) ) {
265
- if ( config . notAllowEmptyString === true ) {
266
- const tsType = visitor . getScalarType ( type . name . value ) ;
267
- if ( tsType === 'string' ) return `${ gen } .required()` ;
265
+ if ( visitor . shouldEmitAsNotAllowEmptyString ( type . name . value ) ) {
266
+ return `${ gen } .required()` ;
268
267
}
269
268
return `${ gen } .nonNullable()` ;
270
269
}
Original file line number Diff line number Diff line change @@ -222,9 +222,8 @@ const generateFieldTypeZodSchema = (
222
222
}
223
223
const appliedDirectivesGen = applyDirectives ( config , field , gen ) ;
224
224
if ( isNonNullType ( parentType ) ) {
225
- if ( config . notAllowEmptyString === true ) {
226
- const tsType = visitor . getScalarType ( type . name . value ) ;
227
- if ( tsType === 'string' ) return `${ appliedDirectivesGen } .min(1)` ;
225
+ if ( visitor . shouldEmitAsNotAllowEmptyString ( type . name . value ) ) {
226
+ return `${ appliedDirectivesGen } .min(1)` ;
228
227
}
229
228
return appliedDirectivesGen ;
230
229
}
You can’t perform that action at this time.
0 commit comments