import { TypeMap } from '../render/typeMap/renderTypeMap' export interface LinkedArgMap { [arg: string]: [string, LinkedType] | undefined } export interface LinkedField { type: LinkedType args?: LinkedArgMap } export interface LinkedFieldMap { [field: string]: LinkedField | undefined } export interface LinkedType { name: string fields?: LinkedFieldMap scalar?: string[] } export interface LinkedTypeMap { [type: string]: LinkedType | undefined } export const linkTypeMap = (typeMap: TypeMap) => { const linkedTypeMap = JSON.parse(JSON.stringify(typeMap)) Object.keys(linkedTypeMap).forEach(t => { const type = linkedTypeMap[t] if (type.fields) { const fields = type.fields Object.keys(fields).forEach(f => { const field = fields[f] if (field.args) { const args = field.args Object.keys(args).forEach(key => { const arg = args[key] if (arg) { const [, typeName] = arg if (typeof typeName === 'string') { if (!linkedTypeMap[typeName]) { linkedTypeMap[typeName] = { name: typeName } } arg[1] = linkedTypeMap[typeName] } } }) } const typeName = field.type if (typeof typeName === 'string') { if (!linkedTypeMap[typeName]) { linkedTypeMap[typeName] = { name: typeName } } field.type = linkedTypeMap[typeName] } }) } }) return linkedTypeMap }