polen
Version:
A framework for delightful GraphQL developer portals
56 lines (49 loc) • 1.9 kB
text/typescript
import type { GraphQLNamedType } from 'graphql'
import { TypeClassNameEnum, type TypeClassToName, typeClassToName } from './type-class-name.js'
export const TypeKindNameEnum = {
Scalar: `Scalar`,
Object: `Object`,
Interface: `Interface`,
Union: `Union`,
Enum: `Enum`,
InputObject: `InputObject`,
List: `List`,
NonNull: `NonNull`,
} as const
export namespace TypeKindName {
export type Enum = typeof TypeKindNameEnum.Enum
export type InputObject = typeof TypeKindNameEnum.InputObject
export type List = typeof TypeKindNameEnum.List
export type NonNull = typeof TypeKindNameEnum.NonNull
export type Object = typeof TypeKindNameEnum.Object
export type Interface = typeof TypeKindNameEnum.Interface
export type Union = typeof TypeKindNameEnum.Union
export type Scalar = typeof TypeKindNameEnum.Scalar
}
export type TypeKindName =
| TypeKindName.Enum
| TypeKindName.InputObject
| TypeKindName.List
| TypeKindName.NonNull
| TypeKindName.Object
| TypeKindName.Interface
| TypeKindName.Union
| TypeKindName.Scalar
export const typeKindFromClass = <$TypeClass extends GraphQLNamedType>(
typeClass: $TypeClass,
): TypeClassNameToKindMap[TypeClassToName<$TypeClass>] => {
const typeClassName = typeClassToName(typeClass)
const kindName = typeClassNameToKindMap[typeClassName]
return kindName
}
export const typeClassNameToKindMap = {
[TypeClassNameEnum.Scalar]: TypeKindNameEnum.Scalar,
[TypeClassNameEnum.Object]: TypeKindNameEnum.Object,
[TypeClassNameEnum.Interface]: TypeKindNameEnum.Interface,
[TypeClassNameEnum.Union]: TypeKindNameEnum.Union,
[TypeClassNameEnum.Enum]: TypeKindNameEnum.Enum,
[TypeClassNameEnum.InputObject]: TypeKindNameEnum.InputObject,
[TypeClassNameEnum.List]: TypeKindNameEnum.List,
[TypeClassNameEnum.NonNull]: TypeKindNameEnum.NonNull,
}
export type TypeClassNameToKindMap = typeof typeClassNameToKindMap