9
9
*/
10
10
11
11
import invariant from '../jsutils/invariant' ;
12
+ import isNullish from '../jsutils/isNullish' ;
12
13
import { ENUM } from '../language/kinds' ;
13
14
import { assertValidName } from '../utilities/assertValidName' ;
14
15
import type {
@@ -323,16 +324,28 @@ export class GraphQLScalarType {
323
324
return serializer ( value ) ;
324
325
}
325
326
327
+ // Determines if an internal value is valid for this type.
328
+ // Equivalent to checking for if the parsedValue is nullish.
329
+ isValidValue(value: mixed): boolean {
330
+ return ! isNullish ( this . parseValue ( value ) ) ;
331
+ }
332
+
326
333
// Parses an externally provided value to use as an input.
327
334
parseValue(value: mixed): mixed {
328
335
const parser = this . _scalarConfig . parseValue ;
329
- return parser ? parser ( value ) : null ;
336
+ return parser && ! isNullish ( value ) ? parser ( value ) : undefined ;
337
+ }
338
+
339
+ // Determines if an internal value is valid for this type.
340
+ // Equivalent to checking for if the parsedLiteral is nullish.
341
+ isValidLiteral(valueNode: ValueNode): boolean {
342
+ return ! isNullish ( this . parseLiteral ( valueNode ) ) ;
330
343
}
331
344
332
345
// Parses an externally provided literal value to use as an input.
333
346
parseLiteral(valueNode: ValueNode): mixed {
334
347
const parser = this . _scalarConfig . parseLiteral ;
335
- return parser ? parser ( valueNode ) : null ;
348
+ return parser ? parser ( valueNode ) : undefined ;
336
349
}
337
350
338
351
toString(): string {
@@ -896,6 +909,11 @@ export class GraphQLEnumType/* <T> */ {
896
909
return enumValue ? enumValue . name : null ;
897
910
}
898
911
912
+ isValidValue(value: mixed): boolean {
913
+ return typeof value === 'string' &&
914
+ this . _getNameLookup ( ) [ value ] !== undefined ;
915
+ }
916
+
899
917
parseValue(value: mixed): ?any/* T */ {
900
918
if ( typeof value === 'string' ) {
901
919
const enumValue = this . _getNameLookup ( ) [ value ] ;
@@ -905,6 +923,11 @@ export class GraphQLEnumType/* <T> */ {
905
923
}
906
924
}
907
925
926
+ isValidLiteral ( valueNode : ValueNode ) : boolean {
927
+ return valueNode . kind === ENUM &&
928
+ this . _getNameLookup ( ) [ valueNode . value ] !== undefined ;
929
+ }
930
+
908
931
parseLiteral(valueNode: ValueNode): ?any/* T */ {
909
932
if ( valueNode . kind === ENUM ) {
910
933
const enumValue = this . _getNameLookup ( ) [ valueNode . value ] ;
0 commit comments