import { GraphQLSchema } from 'graphql' import { chainTypeName } from '../chain/objectType' import { RenderContext } from '../common/RenderContext' import { requestTypeName } from '../requestTypes/requestTypeName' const packageJson = require('../../../package.json') export const renderClientDefinition = (schema: GraphQLSchema, ctx: RenderContext) => { const types = [] const imports = [] const queryType = schema.getQueryType() const mutationType = schema.getMutationType() const subscriptionType = schema.getSubscriptionType() if (queryType) { types.push(requestTypeName(queryType), chainTypeName(queryType, 'Promise'), queryType.name) imports.push(requestTypeName(queryType), chainTypeName(queryType, 'Promise'), queryType.name) } else { types.push('never', 'never', 'never') } if (mutationType) { types.push(requestTypeName(mutationType), chainTypeName(mutationType, 'Promise'), mutationType.name) imports.push(requestTypeName(mutationType), chainTypeName(mutationType, 'Promise'), mutationType.name) } else { types.push('never', 'never', 'never') } if (subscriptionType) { types.push(requestTypeName(subscriptionType), chainTypeName(subscriptionType, 'Observable'), subscriptionType.name) imports.push(requestTypeName(subscriptionType), chainTypeName(subscriptionType, 'Observable'), subscriptionType.name) } else { types.push('never', 'never', 'never') } ctx.addCodeBlock(` import { Client, ClientOptions } from '${packageJson.name}' ${imports.length > 0 ? `import {${imports.join(',')}} from './schema'` : ''} export declare const createClient:(options:ClientOptions)=>Client<${types.join(',')}> `) }