UNPKG

@gqlts/cli

Version:

Generate a client sdk from your GraphQl API

51 lines (46 loc) 1.47 kB
import { RenderContext } from '../common/RenderContext'; import { typeComment } from '../common/comment'; import { objectType } from './objectType'; import { GraphQLInterfaceType } from 'graphql'; export function interfaceType(type: GraphQLInterfaceType, ctx: RenderContext) { if (!ctx.schema) { throw new Error('schema is required to render unionType'); } const typeNames = ctx.schema.getPossibleTypes(type).map((t) => t.name); if (!typeNames.length) { objectType(type, ctx); } else { ctx.addCodeBlock( `${typeComment(type)}export type ${type.name} = (${typeNames.join(' | ')}) & { __isUnion?: true }`, ); } } // interface should produce an object like // export type Nameable = { // __interface:{ // name:string // }; // __resolve:{ // ['on_Card']: Card; // ['on_CardStack']: CardStack; // } // } // export const interfaceType = (type: GraphQLInterfaceType, ctx: RenderContext) => { // if (!ctx.schema) { // throw new Error('schema is req required to render unionType ') // } // const typeNames = ctx.schema.getPossibleTypes(type).map((t) => t.name) // let resolveContent = typeNames // .map((name) => `on_${name}?: ${name}`) // .join('\n ') // ctx.addCodeBlock( // `${typeComment(type)}export type ${type.name}={ // __interface: // ${typeNames.join('|')} // __resolve: { // ${resolveContent} // } // __typename?: string // }`, // ) // }