UNPKG

graphql-request

Version:

Minimal GraphQL client supporting Node and browsers for scripts or simple apps.

63 lines (48 loc) 1.96 kB
import type { Values } from '../../lib/prelude.js' import type { TSError } from '../../lib/TSError.js' import type { Schema } from '../1_Schema/__.js' declare global { export namespace GraphQLRequestTypes { interface Schemas {} // Use this is for manual internal type testing. // interface SchemasAlwaysEmpty {} } } type SomeSchema = { index: Schema.Index customScalars: Record<string, Schema.Scalar.Scalar> featureOptions: { schemaErrors: boolean } } type ZeroSchema = { index: { name: never } featureOptions: { schemaErrors: false } } export type GlobalRegistry = Record<string, SomeSchema> export namespace GlobalRegistry { export type Schemas = GraphQLRequestTypes.Schemas export type IsEmpty = keyof Schemas extends never ? true : false export type SchemaList = IsEmpty extends true ? ZeroSchema : Values<Schemas> export type DefaultSchemaName = 'default' export type SchemaNames = keyof GraphQLRequestTypes.Schemas extends never ? TSError<'SchemaNames', 'No schemas have been registered. Did you run graphql-request generate?'> : keyof GraphQLRequestTypes.Schemas export type HasSchemaErrors<$Schema extends SchemaList> = $Schema['featureOptions']['schemaErrors'] export type HasSchemaErrorsViaName<$Name extends SchemaNames> = // todo use conditional types? // eslint-disable-next-line // @ts-ignore passes after generation GraphQLRequestTypes.Schemas[$Name]['featureOptions']['schemaErrors'] // eslint-disable-next-line // @ts-ignore passes after generation export type GetSchemaIndex<$Name extends SchemaNames> = GraphQLRequestTypes.Schemas[$Name]['index'] // eslint-disable-next-line // @ts-ignore passes after generation export type SchemaIndexDefault = GetSchemaIndex<DefaultSchemaName> export type GetSchemaIndexOrDefault<$Name extends SchemaNames | undefined> = $Name extends SchemaNames ? GetSchemaIndex<$Name> : SchemaIndexDefault }