Skip to content

Commit 28b7a0d

Browse files
committed
Use input and output types in scalars
1 parent 36f068e commit 28b7a0d

File tree

1 file changed

+15
-13
lines changed

1 file changed

+15
-13
lines changed

src/type/definition.ts

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -584,8 +584,8 @@ export class GraphQLScalarType<TInternal = unknown, TExternal = TInternal> {
584584
name: string;
585585
description: Maybe<string>;
586586
specifiedByURL: Maybe<string>;
587-
serialize: GraphQLScalarSerializer<TExternal>;
588-
parseValue: GraphQLScalarValueParser<TInternal>;
587+
serialize: GraphQLScalarSerializer<TExternal, TInternal>;
588+
parseValue: GraphQLScalarValueParser<TInternal, TExternal>;
589589
parseLiteral: GraphQLScalarLiteralParser<TInternal>;
590590
extensions: Readonly<GraphQLScalarTypeExtensions>;
591591
astNode: Maybe<ScalarTypeDefinitionNode>;
@@ -594,17 +594,19 @@ export class GraphQLScalarType<TInternal = unknown, TExternal = TInternal> {
594594
constructor(config: Readonly<GraphQLScalarTypeConfig<TInternal, TExternal>>) {
595595
const parseValue =
596596
config.parseValue ??
597-
(identityFunc as GraphQLScalarValueParser<TInternal>);
597+
(identityFunc as GraphQLScalarValueParser<TInternal, TExternal>);
598598

599599
this.name = assertName(config.name);
600600
this.description = config.description;
601601
this.specifiedByURL = config.specifiedByURL;
602602
this.serialize =
603-
config.serialize ?? (identityFunc as GraphQLScalarSerializer<TExternal>);
603+
config.serialize ??
604+
(identityFunc as GraphQLScalarSerializer<TExternal, TInternal>);
604605
this.parseValue = parseValue;
605606
this.parseLiteral =
606607
config.parseLiteral ??
607-
((node, variables) => parseValue(valueFromASTUntyped(node, variables)));
608+
((node, variables) =>
609+
parseValue(valueFromASTUntyped(node, variables) as TExternal));
608610
this.extensions = toObjMap(config.extensions);
609611
this.astNode = config.astNode;
610612
this.extensionASTNodes = config.extensionASTNodes ?? [];
@@ -657,12 +659,12 @@ export class GraphQLScalarType<TInternal = unknown, TExternal = TInternal> {
657659
}
658660
}
659661

660-
export type GraphQLScalarSerializer<TExternal> = (
661-
outputValue: unknown,
662+
export type GraphQLScalarSerializer<TExternal, TInternal> = (
663+
outputValue: TInternal,
662664
) => TExternal;
663665

664-
export type GraphQLScalarValueParser<TInternal> = (
665-
inputValue: unknown,
666+
export type GraphQLScalarValueParser<TInternal, TExternal> = (
667+
inputValue: TExternal,
666668
) => TInternal;
667669

668670
export type GraphQLScalarLiteralParser<TInternal> = (
@@ -675,9 +677,9 @@ export interface GraphQLScalarTypeConfig<TInternal, TExternal> {
675677
description?: Maybe<string>;
676678
specifiedByURL?: Maybe<string>;
677679
/** Serializes an internal value to include in a response. */
678-
serialize?: GraphQLScalarSerializer<TExternal>;
680+
serialize?: GraphQLScalarSerializer<TExternal, TInternal>;
679681
/** Parses an externally provided value to use as an input. */
680-
parseValue?: GraphQLScalarValueParser<TInternal>;
682+
parseValue?: GraphQLScalarValueParser<TInternal, TExternal>;
681683
/** Parses an externally provided literal value to use as an input. */
682684
parseLiteral?: GraphQLScalarLiteralParser<TInternal>;
683685
extensions?: Maybe<Readonly<GraphQLScalarTypeExtensions>>;
@@ -687,8 +689,8 @@ export interface GraphQLScalarTypeConfig<TInternal, TExternal> {
687689

688690
interface GraphQLScalarTypeNormalizedConfig<TInternal, TExternal>
689691
extends GraphQLScalarTypeConfig<TInternal, TExternal> {
690-
serialize: GraphQLScalarSerializer<TExternal>;
691-
parseValue: GraphQLScalarValueParser<TInternal>;
692+
serialize: GraphQLScalarSerializer<TExternal, TInternal>;
693+
parseValue: GraphQLScalarValueParser<TInternal, TExternal>;
692694
parseLiteral: GraphQLScalarLiteralParser<TInternal>;
693695
extensions: Readonly<GraphQLScalarTypeExtensions>;
694696
extensionASTNodes: ReadonlyArray<ScalarTypeExtensionNode>;

0 commit comments

Comments
 (0)