Skip to content

Commit

Permalink
Fixes to valueToLiteral
Browse files Browse the repository at this point in the history
  • Loading branch information
leebyron committed May 6, 2021
1 parent 0d2889c commit f381c40
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 12 deletions.
10 changes: 10 additions & 0 deletions src/type/definition.d.ts
Expand Up @@ -23,6 +23,7 @@ import {
FieldNode,
FragmentDefinitionNode,
ValueNode,
ConstValueNode,
ScalarTypeExtensionNode,
UnionTypeExtensionNode,
EnumTypeExtensionNode,
Expand Down Expand Up @@ -316,6 +317,7 @@ export class GraphQLScalarType {
serialize: GraphQLScalarSerializer<unknown>;
parseValue: GraphQLScalarValueParser<unknown>;
parseLiteral: GraphQLScalarLiteralParser<unknown>;
valueToLiteral: Maybe<GraphQLScalarValueToLiteral>;
extensions: Maybe<Readonly<GraphQLScalarTypeExtensions>>;
astNode: Maybe<ScalarTypeDefinitionNode>;
extensionASTNodes: ReadonlyArray<ScalarTypeExtensionNode>;
Expand All @@ -327,6 +329,7 @@ export class GraphQLScalarType {
serialize: GraphQLScalarSerializer<unknown>;
parseValue: GraphQLScalarValueParser<unknown>;
parseLiteral: GraphQLScalarLiteralParser<unknown>;
valueToLiteral: Maybe<GraphQLScalarValueToLiteral>;
extensions: Maybe<Readonly<GraphQLScalarTypeExtensions>>;
extensionASTNodes: ReadonlyArray<ScalarTypeExtensionNode>;
};
Expand All @@ -347,6 +350,10 @@ export type GraphQLScalarLiteralParser<TInternal> = (
variables: Maybe<ObjMap<unknown>>,
) => Maybe<TInternal>;

export type GraphQLScalarValueToLiteral = (
inputValue: unknown,
) => Maybe<ConstValueNode>;

export interface GraphQLScalarTypeConfig<TInternal, TExternal> {
name: string;
description?: Maybe<string>;
Expand All @@ -357,6 +364,8 @@ export interface GraphQLScalarTypeConfig<TInternal, TExternal> {
parseValue?: GraphQLScalarValueParser<TInternal>;
// Parses an externally provided literal value to use as an input.
parseLiteral?: GraphQLScalarLiteralParser<TInternal>;
// Translates an external input value to an external literal (AST).
valueToLiteral?: Maybe<GraphQLScalarValueToLiteral>;
extensions?: Maybe<Readonly<GraphQLScalarTypeExtensions>>;
astNode?: Maybe<ScalarTypeDefinitionNode>;
extensionASTNodes?: Maybe<ReadonlyArray<ScalarTypeExtensionNode>>;
Expand Down Expand Up @@ -786,6 +795,7 @@ export class GraphQLEnumType {
valueNode: ValueNode,
_variables: Maybe<ObjMap<unknown>>,
): Maybe<any>;
valueToLiteral(value: unknown): Maybe<ConstValueNode>;

toConfig(): GraphQLEnumTypeConfig & {
extensions: Maybe<Readonly<GraphQLEnumTypeExtensions>>;
Expand Down
12 changes: 6 additions & 6 deletions src/type/definition.js
Expand Up @@ -42,6 +42,7 @@ import type {
FieldNode,
FragmentDefinitionNode,
ValueNode,
ConstValueNode,
} from '../language/ast';

import { valueFromASTUntyped } from '../utilities/valueFromASTUntyped';
Expand Down Expand Up @@ -647,7 +648,9 @@ export type GraphQLScalarLiteralParser<TInternal> = (
variables: ?ObjMap<mixed>,
) => ?TInternal;

export type GraphQLScalarValueToLiteral = (inputValue: mixed) => ?ValueNode;
export type GraphQLScalarValueToLiteral = (
inputValue: mixed,
) => ?ConstValueNode;

export type GraphQLScalarTypeConfig<TInternal, TExternal> = {|
name: string,
Expand Down Expand Up @@ -846,10 +849,7 @@ export function defineArguments(
name: argName,
description: argConfig.description,
type: argConfig.type,
defaultValue: uncoerceDefaultValue(
argConfig.defaultValue,
argConfig.type,
),
defaultValue: uncoerceDefaultValue(argConfig.defaultValue, argConfig.type),
deprecationReason: argConfig.deprecationReason,
extensions: argConfig.extensions && toObjMap(argConfig.extensions),
astNode: argConfig.astNode,
Expand Down Expand Up @@ -1354,7 +1354,7 @@ export class GraphQLEnumType /* <T> */ {
return enumValue.value;
}

valueToLiteral(value: mixed): ?ValueNode {
valueToLiteral(value: mixed): ?ConstValueNode {
if (typeof value === 'string') {
// https://spec.graphql.org/draft/#Name
if (/^[_a-zA-Z][_a-zA-Z0-9]*$/.test(value)) {
Expand Down
4 changes: 2 additions & 2 deletions src/type/scalars.js
@@ -1,7 +1,7 @@
import { inspect } from '../jsutils/inspect';
import { isObjectLike } from '../jsutils/isObjectLike';

import type { ValueNode } from '../language/ast';
import type { ConstValueNode } from '../language/ast';
import { Kind } from '../language/kinds';
import { print } from '../language/printer';

Expand Down Expand Up @@ -269,7 +269,7 @@ export const GraphQLID: GraphQLScalarType = new GraphQLScalarType({
}
return valueNode.value;
},
valueToLiteral(value: mixed): ?ValueNode {
valueToLiteral(value: mixed): ?ConstValueNode {
// ID types can use Int literals.
if (typeof value === 'string') {
if (/^-?(?:0|[1-9][0-9]*)$/.test(value)) {
Expand Down
4 changes: 2 additions & 2 deletions src/utilities/valueToLiteral.d.ts
@@ -1,4 +1,4 @@
import { ValueNode } from '../language/ast';
import { ConstValueNode } from '../language/ast';
import { GraphQLInputType } from '../type/definition';

/**
Expand All @@ -25,4 +25,4 @@ import { GraphQLInputType } from '../type/definition';
export function valueToLiteral(
value: unknown,
type?: GraphQLInputType,
): ValueNode;
): ConstValueNode;
4 changes: 2 additions & 2 deletions src/utilities/valueToLiteral.js
@@ -1,7 +1,7 @@
import { inspect } from '../jsutils/inspect';
import { isIterableObject } from '../jsutils/isIterableObject';

import type { ValueNode } from '../language/ast';
import type { ConstValueNode } from '../language/ast';
import { Kind } from '../language/kinds';

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

0 comments on commit f381c40

Please sign in to comment.