@@ -19,14 +19,31 @@ import {
1919} from 'graphql'
2020
2121import { Generator } from '../types'
22- import { generator as gcgenerator , renderMainMethodFields , renderMainSubscriptionMethodFields } from './graphcool-ts'
22+ import { generator as gcgenerator , renderFieldType , renderFieldName , renderTypeWrapper } from './graphcool-ts'
2323
2424export const generator : Generator = {
2525 ...gcgenerator ,
2626 Main : renderMainMethod ,
27+ RootType : renderRootType ,
28+ SubscriptionType : renderSubscriptionType ,
2729 Header : renderHeader ,
2830}
2931
32+ function renderSubscriptionType ( type : GraphQLObjectType ) : string {
33+ const fieldDefinition = Object . keys ( type . getFields ( ) )
34+ . map ( f => {
35+ const field = type . getFields ( ) [ f ]
36+ return ` ${ field . name } : (args: {${ field . args . length > 0 ? ' ' : '' } ${ field . args
37+ . map ( f => `${ renderFieldName ( f ) } : ${ renderFieldType ( f . type ) } ` )
38+ . join ( ', ' ) } ${
39+ field . args . length > 0 ? ' ' : ''
40+ } }, context: { [key: string]: any }, infoOrQuery?: GraphQLResolveInfo | string) => Promise<AsyncIterator<${ renderFieldType ( field . type ) } >>`
41+ } )
42+ . join ( '\n' )
43+
44+ return renderTypeWrapper ( type . name , type . description , fieldDefinition )
45+ }
46+
3047function renderHeader ( schema : string ) : string {
3148 return `import { Binding as BaseBinding, BindingOptions } from 'graphql-binding'
3249import { GraphQLResolveInfo } from 'graphql'`
@@ -51,4 +68,41 @@ ${renderMainMethodFields('mutation', mutationType.getFields())}
5168${ renderMainSubscriptionMethodFields ( subscriptionType . getFields ( ) ) }
5269 }` : '' }
5370}`
71+ }
72+
73+ function renderRootType ( type : GraphQLObjectType ) : string {
74+ const fieldDefinition = Object . keys ( type . getFields ( ) )
75+ . map ( f => {
76+ const field = type . getFields ( ) [ f ]
77+ return ` ${ field . name } : (args: {${ field . args . length > 0 ? ' ' : '' } ${ field . args
78+ . map ( f => `${ renderFieldName ( f ) } : ${ renderFieldType ( f . type ) } ` )
79+ . join ( ', ' ) } ${
80+ field . args . length > 0 ? ' ' : ''
81+ } }, context: { [key: string]: any }, info?: GraphQLResolveInfo | string) => Promise<${ renderFieldType ( field . type ) } ${
82+ ! isNonNullType ( field . type ) ? ' | null' : ''
83+ } >`
84+ } )
85+ . join ( '\n' )
86+
87+ return renderTypeWrapper ( type . name , type . description , fieldDefinition )
88+ }
89+
90+ export function renderMainMethodFields ( operation : string , fields : GraphQLFieldMap < any , any > ) : string {
91+ return Object . keys ( fields )
92+ . map ( f => {
93+ const field = fields [ f ]
94+ return ` ${ field . name } : (args, context, info): Promise<${ renderFieldType ( field . type ) } ${
95+ ! isNonNullType ( field . type ) ? ' | null' : ''
96+ } > => super.delegate('${ operation } ', '${ field . name } ', args, context, info)`
97+ } )
98+ . join ( ',\n' )
99+ }
100+
101+ export function renderMainSubscriptionMethodFields ( fields : GraphQLFieldMap < any , any > ) : string {
102+ return Object . keys ( fields )
103+ . map ( f => {
104+ const field = fields [ f ]
105+ return ` ${ field . name } : (args, context, infoOrQuery): Promise<AsyncIterator<${ renderFieldType ( field . type ) } >> => super.delegateSubscription('${ field . name } ', args, context, infoOrQuery)`
106+ } )
107+ . join ( ',\n' )
54108}
0 commit comments