Skip to content
This repository was archived by the owner on Dec 8, 2021. It is now read-only.

Commit 76254f4

Browse files
committed
refactor(gg): centralize resolver type rendering logic
1 parent 4fdb277 commit 76254f4

File tree

2 files changed

+33
-74
lines changed

2 files changed

+33
-74
lines changed

packages/graphqlgen/src/generators/common.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ const nullable = (type: string): string => {
211211
return `${type} | null`
212212
}
213213

214-
const kv = (
214+
export const kv = (
215215
key: string,
216216
value: string,
217217
isOptional: boolean = false,

packages/graphqlgen/src/generators/ts-generator.ts

Lines changed: 32 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -445,64 +445,20 @@ function renderResolverFunctionInterfaces(
445445
context?: ContextDefinition,
446446
): string {
447447
return type.fields
448-
.map(field =>
449-
renderResolverFunctionInterface(
450-
field,
451-
type,
452-
modelMap,
453-
interfacesMap,
454-
unionsMap,
455-
context,
456-
),
448+
.map(
449+
field =>
450+
`export type ${upperFirst(field.name)}Resolver = ${renderTypeResolver(
451+
field,
452+
type,
453+
modelMap,
454+
interfacesMap,
455+
unionsMap,
456+
context,
457+
)}`,
457458
)
458459
.join(os.EOL)
459460
}
460461

461-
// MARK
462-
function renderResolverFunctionInterface(
463-
field: GraphQLTypeField,
464-
type: GraphQLTypeObject,
465-
modelMap: ModelMap,
466-
interfacesMap: InterfacesMap,
467-
unionsMap: UnionsMap,
468-
context?: ContextDefinition,
469-
): string {
470-
const resolverName = `${upperFirst(field.name)}Resolver`
471-
const resolverDefinition = `
472-
(
473-
parent: ${getModelName(type.type as any, modelMap, 'undefined')},
474-
args: ${
475-
field.arguments.length > 0 ? `Args${upperFirst(field.name)}` : '{}'
476-
},
477-
ctx: ${getContextName(context)},
478-
info: GraphQLResolveInfo,
479-
)
480-
`
481-
482-
const returnType = printFieldLikeType(
483-
field,
484-
modelMap,
485-
interfacesMap,
486-
unionsMap,
487-
{ isReturn: true },
488-
)
489-
490-
if (type.name === 'Subscription') {
491-
return `
492-
export type ${resolverName} = {
493-
subscribe: ${resolverDefinition} => AsyncIterator<${returnType}> | Promise<AsyncIterator<${returnType}>>
494-
resolve?: ${resolverDefinition} => ${returnType} | Promise<${returnType}>
495-
}
496-
`
497-
}
498-
499-
return `
500-
export type ${resolverName} = ${resolverDefinition} => ${resolverReturnType(
501-
returnType,
502-
)}
503-
`
504-
}
505-
506462
function renderResolverTypeInterface(
507463
type: GraphQLTypeObject | GraphQLInterfaceObject,
508464
modelMap: ModelMap,
@@ -514,15 +470,16 @@ function renderResolverTypeInterface(
514470
return `
515471
export interface ${interfaceName} {
516472
${type.fields
517-
.map(field =>
518-
renderResolverTypeInterfaceFunction(
519-
field,
520-
type,
521-
modelMap,
522-
interfacesMap,
523-
unionsMap,
524-
context,
525-
),
473+
.map(
474+
field =>
475+
`${field.name}: ${renderTypeResolver(
476+
field,
477+
type,
478+
modelMap,
479+
interfacesMap,
480+
unionsMap,
481+
context,
482+
)}`,
526483
)
527484
.join(os.EOL)}
528485
${renderIsTypeOfFunctionInterface(
@@ -536,14 +493,14 @@ function renderResolverTypeInterface(
536493
`
537494
}
538495

539-
function renderResolverTypeInterfaceFunction(
496+
const renderTypeResolver = (
540497
field: GraphQLTypeField,
541498
type: GraphQLTypeObject | GraphQLInterfaceObject,
542499
modelMap: ModelMap,
543500
interfacesMap: InterfacesMap,
544501
unionsMap: UnionsMap,
545502
context?: ContextDefinition,
546-
): string {
503+
): string => {
547504
let parent: string
548505

549506
if (type.type.isInterface) {
@@ -556,7 +513,7 @@ function renderResolverTypeInterfaceFunction(
556513
parent = getModelName(type.type as any, modelMap, 'undefined')
557514
}
558515

559-
const resolverDefinition = `
516+
const params = `
560517
(
561518
parent: ${parent},
562519
args: ${
@@ -576,18 +533,20 @@ function renderResolverTypeInterfaceFunction(
576533

577534
if (type.name === 'Subscription') {
578535
return `
579-
${field.name}: {
580-
subscribe: ${resolverDefinition} => AsyncIterator<${returnType}> | Promise<AsyncIterator<${returnType}>>
581-
resolve?: ${resolverDefinition} => ${returnType} | Promise<${returnType}>
536+
{
537+
subscribe: ${params} => ${resolverReturnType(
538+
`AsyncIterator<${returnType}>`,
539+
)}
540+
resolve?: ${params} => ${resolverReturnType(returnType)}
582541
}
583542
`
584543
}
585544

586-
return `
587-
${
588-
field.name
589-
}: ${resolverDefinition} => ${returnType} | Promise<${returnType}>
545+
const func = `
546+
${params} => ${resolverReturnType(returnType)}
590547
`
548+
549+
return func
591550
}
592551

593552
function renderResolvers(args: GenerateArgs): string {

0 commit comments

Comments
 (0)