Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/true-walls-design.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@0no-co/graphql.web': patch
---

Fix regression on using `Kind` without `graphql` types resolving
75 changes: 70 additions & 5 deletions src/kind.d.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,76 @@
import type * as GraphQL from 'graphql';

type GraphQLKind<
Key extends string,
Fallback extends string,
> = Key extends keyof typeof GraphQL.Kind ? (typeof GraphQL.Kind)[Key] : Fallback;
// When `graphql` isn't installed, `typeof GraphQL.Kind` resolves to `any`. That would make
// `keyof typeof GraphQL.Kind` match every `Key` and collapse `GraphQLKind` and the `Kind` value
// itself to `any`, breaking discriminated unions on AST `kind` fields. `IsGraphQLAny` detects that
// case so we fall back to the literal string kinds instead.
type IsGraphQLAny = 0 extends 1 & typeof GraphQL.Kind ? true : false;

export declare const Kind: typeof GraphQL.Kind & {
type GraphQLKind<Key extends string, Fallback extends string> = IsGraphQLAny extends true
? Fallback
: Key extends keyof typeof GraphQL.Kind
? (typeof GraphQL.Kind)[Key]
: Fallback;

export declare const Kind: (IsGraphQLAny extends true ? {} : typeof GraphQL.Kind) & {
readonly NAME: GraphQLKind<'NAME', 'Name'>;
readonly DOCUMENT: GraphQLKind<'DOCUMENT', 'Document'>;
readonly OPERATION_DEFINITION: GraphQLKind<'OPERATION_DEFINITION', 'OperationDefinition'>;
readonly VARIABLE_DEFINITION: GraphQLKind<'VARIABLE_DEFINITION', 'VariableDefinition'>;
readonly SELECTION_SET: GraphQLKind<'SELECTION_SET', 'SelectionSet'>;
readonly FIELD: GraphQLKind<'FIELD', 'Field'>;
readonly ARGUMENT: GraphQLKind<'ARGUMENT', 'Argument'>;
readonly FRAGMENT_SPREAD: GraphQLKind<'FRAGMENT_SPREAD', 'FragmentSpread'>;
readonly INLINE_FRAGMENT: GraphQLKind<'INLINE_FRAGMENT', 'InlineFragment'>;
readonly FRAGMENT_DEFINITION: GraphQLKind<'FRAGMENT_DEFINITION', 'FragmentDefinition'>;
readonly VARIABLE: GraphQLKind<'VARIABLE', 'Variable'>;
readonly INT: GraphQLKind<'INT', 'IntValue'>;
readonly FLOAT: GraphQLKind<'FLOAT', 'FloatValue'>;
readonly STRING: GraphQLKind<'STRING', 'StringValue'>;
readonly BOOLEAN: GraphQLKind<'BOOLEAN', 'BooleanValue'>;
readonly NULL: GraphQLKind<'NULL', 'NullValue'>;
readonly ENUM: GraphQLKind<'ENUM', 'EnumValue'>;
readonly LIST: GraphQLKind<'LIST', 'ListValue'>;
readonly OBJECT: GraphQLKind<'OBJECT', 'ObjectValue'>;
readonly OBJECT_FIELD: GraphQLKind<'OBJECT_FIELD', 'ObjectField'>;
readonly DIRECTIVE: GraphQLKind<'DIRECTIVE', 'Directive'>;
readonly NAMED_TYPE: GraphQLKind<'NAMED_TYPE', 'NamedType'>;
readonly LIST_TYPE: GraphQLKind<'LIST_TYPE', 'ListType'>;
readonly NON_NULL_TYPE: GraphQLKind<'NON_NULL_TYPE', 'NonNullType'>;
readonly SCHEMA_DEFINITION: GraphQLKind<'SCHEMA_DEFINITION', 'SchemaDefinition'>;
readonly OPERATION_TYPE_DEFINITION: GraphQLKind<
'OPERATION_TYPE_DEFINITION',
'OperationTypeDefinition'
>;
readonly SCALAR_TYPE_DEFINITION: GraphQLKind<'SCALAR_TYPE_DEFINITION', 'ScalarTypeDefinition'>;
readonly OBJECT_TYPE_DEFINITION: GraphQLKind<'OBJECT_TYPE_DEFINITION', 'ObjectTypeDefinition'>;
readonly FIELD_DEFINITION: GraphQLKind<'FIELD_DEFINITION', 'FieldDefinition'>;
readonly INPUT_VALUE_DEFINITION: GraphQLKind<'INPUT_VALUE_DEFINITION', 'InputValueDefinition'>;
readonly INTERFACE_TYPE_DEFINITION: GraphQLKind<
'INTERFACE_TYPE_DEFINITION',
'InterfaceTypeDefinition'
>;
readonly UNION_TYPE_DEFINITION: GraphQLKind<'UNION_TYPE_DEFINITION', 'UnionTypeDefinition'>;
readonly ENUM_TYPE_DEFINITION: GraphQLKind<'ENUM_TYPE_DEFINITION', 'EnumTypeDefinition'>;
readonly ENUM_VALUE_DEFINITION: GraphQLKind<'ENUM_VALUE_DEFINITION', 'EnumValueDefinition'>;
readonly INPUT_OBJECT_TYPE_DEFINITION: GraphQLKind<
'INPUT_OBJECT_TYPE_DEFINITION',
'InputObjectTypeDefinition'
>;
readonly DIRECTIVE_DEFINITION: GraphQLKind<'DIRECTIVE_DEFINITION', 'DirectiveDefinition'>;
readonly SCHEMA_EXTENSION: GraphQLKind<'SCHEMA_EXTENSION', 'SchemaExtension'>;
readonly SCALAR_TYPE_EXTENSION: GraphQLKind<'SCALAR_TYPE_EXTENSION', 'ScalarTypeExtension'>;
readonly OBJECT_TYPE_EXTENSION: GraphQLKind<'OBJECT_TYPE_EXTENSION', 'ObjectTypeExtension'>;
readonly INTERFACE_TYPE_EXTENSION: GraphQLKind<
'INTERFACE_TYPE_EXTENSION',
'InterfaceTypeExtension'
>;
readonly UNION_TYPE_EXTENSION: GraphQLKind<'UNION_TYPE_EXTENSION', 'UnionTypeExtension'>;
readonly ENUM_TYPE_EXTENSION: GraphQLKind<'ENUM_TYPE_EXTENSION', 'EnumTypeExtension'>;
readonly INPUT_OBJECT_TYPE_EXTENSION: GraphQLKind<
'INPUT_OBJECT_TYPE_EXTENSION',
'InputObjectTypeExtension'
>;
/** Coordinates */
readonly TYPE_COORDINATE: GraphQLKind<'TYPE_COORDINATE', 'TypeCoordinate'>;
readonly MEMBER_COORDINATE: GraphQLKind<'MEMBER_COORDINATE', 'MemberCoordinate'>;
Expand Down
Loading