From 6b66923aef798d4be049ab4412790c0266ddc80f Mon Sep 17 00:00:00 2001 From: Jason Kuhrt Date: Thu, 24 Jan 2019 22:25:45 -0500 Subject: [PATCH] refactor(gg): share resolver return type renderer --- packages/graphqlgen/src/generators/common.ts | 3 +++ .../graphqlgen/src/generators/flow-generator.ts | 13 +++++++------ packages/graphqlgen/src/generators/ts-generator.ts | 4 +--- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/packages/graphqlgen/src/generators/common.ts b/packages/graphqlgen/src/generators/common.ts index cac971cd..3038f3ce 100644 --- a/packages/graphqlgen/src/generators/common.ts +++ b/packages/graphqlgen/src/generators/common.ts @@ -230,6 +230,9 @@ export const union = (types: string[]): string => { return types.join(' | ') } +export const resolverReturnType = (returnType: string): string => + union([returnType, `Promise<${returnType}>`]) + type FieldPrintOptions = { isReturn?: boolean } diff --git a/packages/graphqlgen/src/generators/flow-generator.ts b/packages/graphqlgen/src/generators/flow-generator.ts index 03002b3f..3a1559ff 100644 --- a/packages/graphqlgen/src/generators/flow-generator.ts +++ b/packages/graphqlgen/src/generators/flow-generator.ts @@ -23,6 +23,7 @@ import { UnionsMap, createInterfacesMap, createUnionsMap, + resolverReturnType, } from './common' import { renderTypeResolveTypeResolver } from './ts-generator' @@ -352,13 +353,15 @@ function renderResolverFunctionInterface( return ` export type ${resolverName} = {| subscribe: ${resolverDefinition} => AsyncIterator<${returnType}> | Promise>, - resolve?: ${resolverDefinition} => ${returnType} | Promise<${returnType}> + resolve?: ${resolverDefinition} => ${resolverReturnType(returnType)} |} ` } return ` - export type ${resolverName} = ${resolverDefinition} => ${returnType} | Promise<${returnType}> + export type ${resolverName} = ${resolverDefinition} => ${resolverReturnType( + returnType, + )} ` } @@ -416,14 +419,12 @@ function renderResolverTypeInterfaceFunction( return ` ${field.name}: {| subscribe: ${resolverDefinition} => AsyncIterator<${returnType}> | Promise>, - resolve?: ${resolverDefinition} => ${returnType} | Promise<${returnType}> + resolve?: ${resolverDefinition} => ${resolverReturnType(returnType)} |} ` } return ` - ${ - field.name - }: ${resolverDefinition} => ${returnType} | Promise<${returnType}>, + ${field.name}: ${resolverDefinition} => ${resolverReturnType(returnType)}, ` } diff --git a/packages/graphqlgen/src/generators/ts-generator.ts b/packages/graphqlgen/src/generators/ts-generator.ts index 15fcbfae..aa41eb04 100644 --- a/packages/graphqlgen/src/generators/ts-generator.ts +++ b/packages/graphqlgen/src/generators/ts-generator.ts @@ -24,6 +24,7 @@ import { createInterfacesMap, createUnionsMap, union, + resolverReturnType, } from './common' import { TypeAliasDefinition } from '../introspection/types' import { upperFirst } from '../utils' @@ -502,9 +503,6 @@ function renderResolverFunctionInterface( ` } -const resolverReturnType = (returnType: string): string => - union([returnType, `Promise<${returnType}>`]) - function renderResolverTypeInterface( type: GraphQLTypeObject | GraphQLInterfaceObject, modelMap: ModelMap,