Skip to content

Commit f381c40

Browse files
committed
Fixes to valueToLiteral
1 parent 0d2889c commit f381c40

File tree

5 files changed

+22
-12
lines changed

5 files changed

+22
-12
lines changed

src/type/definition.d.ts

+10
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import {
2323
FieldNode,
2424
FragmentDefinitionNode,
2525
ValueNode,
26+
ConstValueNode,
2627
ScalarTypeExtensionNode,
2728
UnionTypeExtensionNode,
2829
EnumTypeExtensionNode,
@@ -316,6 +317,7 @@ export class GraphQLScalarType {
316317
serialize: GraphQLScalarSerializer<unknown>;
317318
parseValue: GraphQLScalarValueParser<unknown>;
318319
parseLiteral: GraphQLScalarLiteralParser<unknown>;
320+
valueToLiteral: Maybe<GraphQLScalarValueToLiteral>;
319321
extensions: Maybe<Readonly<GraphQLScalarTypeExtensions>>;
320322
astNode: Maybe<ScalarTypeDefinitionNode>;
321323
extensionASTNodes: ReadonlyArray<ScalarTypeExtensionNode>;
@@ -327,6 +329,7 @@ export class GraphQLScalarType {
327329
serialize: GraphQLScalarSerializer<unknown>;
328330
parseValue: GraphQLScalarValueParser<unknown>;
329331
parseLiteral: GraphQLScalarLiteralParser<unknown>;
332+
valueToLiteral: Maybe<GraphQLScalarValueToLiteral>;
330333
extensions: Maybe<Readonly<GraphQLScalarTypeExtensions>>;
331334
extensionASTNodes: ReadonlyArray<ScalarTypeExtensionNode>;
332335
};
@@ -347,6 +350,10 @@ export type GraphQLScalarLiteralParser<TInternal> = (
347350
variables: Maybe<ObjMap<unknown>>,
348351
) => Maybe<TInternal>;
349352

353+
export type GraphQLScalarValueToLiteral = (
354+
inputValue: unknown,
355+
) => Maybe<ConstValueNode>;
356+
350357
export interface GraphQLScalarTypeConfig<TInternal, TExternal> {
351358
name: string;
352359
description?: Maybe<string>;
@@ -357,6 +364,8 @@ export interface GraphQLScalarTypeConfig<TInternal, TExternal> {
357364
parseValue?: GraphQLScalarValueParser<TInternal>;
358365
// Parses an externally provided literal value to use as an input.
359366
parseLiteral?: GraphQLScalarLiteralParser<TInternal>;
367+
// Translates an external input value to an external literal (AST).
368+
valueToLiteral?: Maybe<GraphQLScalarValueToLiteral>;
360369
extensions?: Maybe<Readonly<GraphQLScalarTypeExtensions>>;
361370
astNode?: Maybe<ScalarTypeDefinitionNode>;
362371
extensionASTNodes?: Maybe<ReadonlyArray<ScalarTypeExtensionNode>>;
@@ -786,6 +795,7 @@ export class GraphQLEnumType {
786795
valueNode: ValueNode,
787796
_variables: Maybe<ObjMap<unknown>>,
788797
): Maybe<any>;
798+
valueToLiteral(value: unknown): Maybe<ConstValueNode>;
789799

790800
toConfig(): GraphQLEnumTypeConfig & {
791801
extensions: Maybe<Readonly<GraphQLEnumTypeExtensions>>;

src/type/definition.js

+6-6
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ import type {
4242
FieldNode,
4343
FragmentDefinitionNode,
4444
ValueNode,
45+
ConstValueNode,
4546
} from '../language/ast';
4647

4748
import { valueFromASTUntyped } from '../utilities/valueFromASTUntyped';
@@ -647,7 +648,9 @@ export type GraphQLScalarLiteralParser<TInternal> = (
647648
variables: ?ObjMap<mixed>,
648649
) => ?TInternal;
649650
650-
export type GraphQLScalarValueToLiteral = (inputValue: mixed) => ?ValueNode;
651+
export type GraphQLScalarValueToLiteral = (
652+
inputValue: mixed,
653+
) => ?ConstValueNode;
651654
652655
export type GraphQLScalarTypeConfig<TInternal, TExternal> = {|
653656
name: string,
@@ -846,10 +849,7 @@ export function defineArguments(
846849
name: argName,
847850
description: argConfig.description,
848851
type: argConfig.type,
849-
defaultValue: uncoerceDefaultValue(
850-
argConfig.defaultValue,
851-
argConfig.type,
852-
),
852+
defaultValue: uncoerceDefaultValue(argConfig.defaultValue, argConfig.type),
853853
deprecationReason: argConfig.deprecationReason,
854854
extensions: argConfig.extensions && toObjMap(argConfig.extensions),
855855
astNode: argConfig.astNode,
@@ -1354,7 +1354,7 @@ export class GraphQLEnumType /* <T> */ {
13541354
return enumValue.value;
13551355
}
13561356

1357-
valueToLiteral(value: mixed): ?ValueNode {
1357+
valueToLiteral(value: mixed): ?ConstValueNode {
13581358
if (typeof value === 'string') {
13591359
// https://spec.graphql.org/draft/#Name
13601360
if (/^[_a-zA-Z][_a-zA-Z0-9]*$/.test(value)) {

src/type/scalars.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { inspect } from '../jsutils/inspect';
22
import { isObjectLike } from '../jsutils/isObjectLike';
33

4-
import type { ValueNode } from '../language/ast';
4+
import type { ConstValueNode } from '../language/ast';
55
import { Kind } from '../language/kinds';
66
import { print } from '../language/printer';
77

@@ -269,7 +269,7 @@ export const GraphQLID: GraphQLScalarType = new GraphQLScalarType({
269269
}
270270
return valueNode.value;
271271
},
272-
valueToLiteral(value: mixed): ?ValueNode {
272+
valueToLiteral(value: mixed): ?ConstValueNode {
273273
// ID types can use Int literals.
274274
if (typeof value === 'string') {
275275
if (/^-?(?:0|[1-9][0-9]*)$/.test(value)) {

src/utilities/valueToLiteral.d.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { ValueNode } from '../language/ast';
1+
import { ConstValueNode } from '../language/ast';
22
import { GraphQLInputType } from '../type/definition';
33

44
/**
@@ -25,4 +25,4 @@ import { GraphQLInputType } from '../type/definition';
2525
export function valueToLiteral(
2626
value: unknown,
2727
type?: GraphQLInputType,
28-
): ValueNode;
28+
): ConstValueNode;

src/utilities/valueToLiteral.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { inspect } from '../jsutils/inspect';
22
import { isIterableObject } from '../jsutils/isIterableObject';
33

4-
import type { ValueNode } from '../language/ast';
4+
import type { ConstValueNode } from '../language/ast';
55
import { Kind } from '../language/kinds';
66

77
import type { GraphQLInputType } from '../type/definition';
@@ -35,7 +35,7 @@ import {
3535
export function valueToLiteral(
3636
value: mixed,
3737
type?: GraphQLInputType,
38-
): ValueNode {
38+
): ConstValueNode {
3939
// Like JSON, a null literal is produced for null and undefined.
4040
if (value == null) {
4141
return { kind: Kind.NULL };

0 commit comments

Comments
 (0)