nexus
Version:
Scalable, strongly typed GraphQL schema development
29 lines (24 loc) • 900 B
text/typescript
import { isType } from 'graphql'
import { isNexusMeta } from './nexusMeta'
import { isNexusStruct, NexusListableTypes } from './wrapping'
import { NexusTypes, withNexusSymbol } from './_types'
export class NexusListDef<TypeName extends NexusListableTypes> {
// @ts-ignore
// Required field for TS to differentiate NonNull from Null from List
private _isNexusListDef: boolean = true
constructor(readonly ofNexusType: TypeName) {
/* istanbul ignore if */
if (
typeof ofNexusType !== 'string' &&
!isNexusStruct(ofNexusType) &&
!isNexusMeta(ofNexusType) &&
!isType(ofNexusType)
) {
throw new Error('Cannot wrap unknown types in list(). Saw ' + ofNexusType)
}
}
}
withNexusSymbol(NexusListDef, NexusTypes.List)
export function list<TypeName extends NexusListableTypes>(type: TypeName): NexusListDef<TypeName> {
return new NexusListDef(type)
}