Mirror: The spec-compliant minimum of client-side GraphQL.

feat: Extend local AST types with graphql’s types (#10)

* Build AST types that are always extending graphql’s types

* Replace entire type when possible

* Apply lint

* Add optional graphql peer dependency

+9 -1
package.json
···
"main": "./dist/graphql.web",
"module": "./dist/graphql.web.mjs",
"types": "./dist/graphql.web.d.ts",
+
"sideEffects": false,
"files": [
"LICENSE",
"README.md",
···
},
"./package.json": "./package.json"
},
-
"sideEffects": false,
+
"peerDependencies": {
+
"graphql": "^14.0.0 || ^15.0.0 || ^16.0.0"
+
},
+
"peerDependenciesMeta": {
+
"graphql": {
+
"optional": true
+
}
+
},
"public": true,
"keywords": [
"graphql",
+11 -1
scripts/rollup.config.mjs
···
output: {
dir: './dist',
entryFileNames: '[name].d.ts',
-
format: 'es'
+
format: 'es',
+
plugins: [
+
{
+
renderChunk(code, chunk) {
+
if (chunk.fileName.endsWith('d.ts')) {
+
const gqlImportRe = /(import\s+(?:[*\s{}\w\d]+)\s*from\s*'graphql';?)/g;
+
return code.replace(gqlImportRe, x => '/*!@ts-ignore*/\n' + x);
+
}
+
},
+
},
+
],
},
};
+283 -182
src/ast.ts
···
+
import type * as GraphQL from 'graphql';
+
import type { Kind, OperationTypeNode } from './kind';
-
import type { Location } from './types';
+
import type { Or, Location } from './types';
import type {
TypeSystemDefinitionNode,
···
InputObjectTypeExtensionNode,
} from './schemaAst';
-
export type ASTNode =
+
export type ASTNode = Or<
+
GraphQL.ASTNode,
| NameNode
| DocumentNode
| OperationDefinitionNode
···
| InterfaceTypeExtensionNode
| UnionTypeExtensionNode
| EnumTypeExtensionNode
-
| InputObjectTypeExtensionNode;
+
| InputObjectTypeExtensionNode
+
>;
-
export interface NameNode {
-
readonly kind: Kind.NAME;
-
readonly value: string;
-
readonly loc?: Location;
-
}
+
export type NameNode = Or<
+
GraphQL.NameNode,
+
{
+
readonly kind: Kind.NAME;
+
readonly value: string;
+
readonly loc?: Location;
+
}
+
>;
-
export interface DocumentNode {
-
readonly kind: Kind.DOCUMENT;
-
readonly definitions: ReadonlyArray<DefinitionNode>;
-
readonly loc?: Location;
-
}
+
export type DocumentNode = Or<
+
GraphQL.DocumentNode,
+
{
+
readonly kind: Kind.DOCUMENT;
+
readonly definitions: ReadonlyArray<DefinitionNode>;
+
readonly loc?: Location;
+
}
+
>;
-
export type DefinitionNode =
-
| ExecutableDefinitionNode
-
| TypeSystemDefinitionNode
-
| TypeSystemExtensionNode;
+
export type DefinitionNode = Or<
+
GraphQL.DefinitionNode,
+
ExecutableDefinitionNode | TypeSystemDefinitionNode | TypeSystemExtensionNode
+
>;
-
export type ExecutableDefinitionNode = OperationDefinitionNode | FragmentDefinitionNode;
+
export type ExecutableDefinitionNode = Or<
+
GraphQL.ExecutableDefinitionNode,
+
OperationDefinitionNode | FragmentDefinitionNode
+
>;
-
export interface OperationDefinitionNode {
-
readonly kind: Kind.OPERATION_DEFINITION;
-
readonly operation: OperationTypeNode;
-
readonly name?: NameNode;
-
readonly variableDefinitions?: ReadonlyArray<VariableDefinitionNode>;
-
readonly directives?: ReadonlyArray<DirectiveNode>;
-
readonly selectionSet: SelectionSetNode;
-
readonly loc?: Location;
-
}
+
export type OperationDefinitionNode = Or<
+
GraphQL.OperationDefinitionNode,
+
{
+
readonly kind: Kind.OPERATION_DEFINITION;
+
readonly operation: OperationTypeNode;
+
readonly name?: NameNode;
+
readonly variableDefinitions?: ReadonlyArray<VariableDefinitionNode>;
+
readonly directives?: ReadonlyArray<DirectiveNode>;
+
readonly selectionSet: SelectionSetNode;
+
readonly loc?: Location;
+
}
+
>;
-
export interface VariableDefinitionNode {
-
readonly kind: Kind.VARIABLE_DEFINITION;
-
readonly variable: VariableNode;
-
readonly type: TypeNode;
-
readonly defaultValue?: ConstValueNode;
-
readonly directives?: ReadonlyArray<ConstDirectiveNode>;
-
readonly loc?: Location;
-
}
+
export type VariableDefinitionNode = Or<
+
GraphQL.VariableDefinitionNode,
+
{
+
readonly kind: Kind.VARIABLE_DEFINITION;
+
readonly variable: VariableNode;
+
readonly type: TypeNode;
+
readonly defaultValue?: ConstValueNode;
+
readonly directives?: ReadonlyArray<ConstDirectiveNode>;
+
readonly loc?: Location;
+
}
+
>;
-
export interface VariableNode {
-
readonly kind: Kind.VARIABLE;
-
readonly name: NameNode;
-
readonly loc?: Location;
-
}
+
export type VariableNode = Or<
+
GraphQL.VariableNode,
+
{
+
readonly kind: Kind.VARIABLE;
+
readonly name: NameNode;
+
readonly loc?: Location;
+
}
+
>;
-
export interface SelectionSetNode {
-
readonly kind: Kind.SELECTION_SET;
-
readonly selections: ReadonlyArray<SelectionNode>;
-
readonly loc?: Location;
-
}
+
export type SelectionSetNode = Or<
+
GraphQL.SelectionSetNode,
+
{
+
readonly kind: Kind.SELECTION_SET;
+
readonly selections: ReadonlyArray<SelectionNode>;
+
readonly loc?: Location;
+
}
+
>;
-
export declare type SelectionNode = FieldNode | FragmentSpreadNode | InlineFragmentNode;
+
export declare type SelectionNode = Or<
+
GraphQL.SelectionNode,
+
FieldNode | FragmentSpreadNode | InlineFragmentNode
+
>;
-
export interface FieldNode {
-
readonly kind: Kind.FIELD;
-
readonly alias?: NameNode;
-
readonly name: NameNode;
-
readonly arguments?: ReadonlyArray<ArgumentNode>;
-
readonly directives?: ReadonlyArray<DirectiveNode>;
-
readonly selectionSet?: SelectionSetNode;
-
readonly loc?: Location;
-
}
+
export type FieldNode = Or<
+
GraphQL.FieldNode,
+
{
+
readonly kind: Kind.FIELD;
+
readonly alias?: NameNode;
+
readonly name: NameNode;
+
readonly arguments?: ReadonlyArray<ArgumentNode>;
+
readonly directives?: ReadonlyArray<DirectiveNode>;
+
readonly selectionSet?: SelectionSetNode;
+
readonly loc?: Location;
+
}
+
>;
-
export interface ArgumentNode {
-
readonly kind: Kind.ARGUMENT;
-
readonly name: NameNode;
-
readonly value: ValueNode;
-
readonly loc?: Location;
-
}
+
export type ArgumentNode = Or<
+
GraphQL.ArgumentNode,
+
{
+
readonly kind: Kind.ARGUMENT;
+
readonly name: NameNode;
+
readonly value: ValueNode;
+
readonly loc?: Location;
+
}
+
>;
-
export interface ConstArgumentNode {
-
readonly kind: Kind.ARGUMENT;
-
readonly name: NameNode;
-
readonly value: ConstValueNode;
-
readonly loc?: Location;
-
}
+
export type ConstArgumentNode = Or<
+
GraphQL.ConstArgumentNode,
+
{
+
readonly kind: Kind.ARGUMENT;
+
readonly name: NameNode;
+
readonly value: ConstValueNode;
+
readonly loc?: Location;
+
}
+
>;
-
export interface FragmentSpreadNode {
-
readonly kind: Kind.FRAGMENT_SPREAD;
-
readonly name: NameNode;
-
readonly directives?: ReadonlyArray<DirectiveNode>;
-
readonly loc?: Location;
-
}
+
export type FragmentSpreadNode = Or<
+
GraphQL.FragmentSpreadNode,
+
{
+
readonly kind: Kind.FRAGMENT_SPREAD;
+
readonly name: NameNode;
+
readonly directives?: ReadonlyArray<DirectiveNode>;
+
readonly loc?: Location;
+
}
+
>;
-
export interface InlineFragmentNode {
-
readonly kind: Kind.INLINE_FRAGMENT;
-
readonly typeCondition?: NamedTypeNode;
-
readonly directives?: ReadonlyArray<DirectiveNode>;
-
readonly selectionSet: SelectionSetNode;
-
readonly loc?: Location;
-
}
+
export type InlineFragmentNode = Or<
+
GraphQL.InlineFragmentNode,
+
{
+
readonly kind: Kind.INLINE_FRAGMENT;
+
readonly typeCondition?: NamedTypeNode;
+
readonly directives?: ReadonlyArray<DirectiveNode>;
+
readonly selectionSet: SelectionSetNode;
+
readonly loc?: Location;
+
}
+
>;
-
export interface FragmentDefinitionNode {
-
readonly kind: Kind.FRAGMENT_DEFINITION;
-
readonly name: NameNode;
-
readonly typeCondition: NamedTypeNode;
-
readonly directives?: ReadonlyArray<DirectiveNode>;
-
readonly selectionSet: SelectionSetNode;
-
readonly loc?: Location;
-
}
+
export type FragmentDefinitionNode = Or<
+
GraphQL.FragmentDefinitionNode,
+
{
+
readonly kind: Kind.FRAGMENT_DEFINITION;
+
readonly name: NameNode;
+
readonly typeCondition: NamedTypeNode;
+
readonly directives?: ReadonlyArray<DirectiveNode>;
+
readonly selectionSet: SelectionSetNode;
+
readonly loc?: Location;
+
}
+
>;
-
export type ValueNode =
+
export type ValueNode = Or<
+
GraphQL.ValueNode,
| VariableNode
| IntValueNode
| FloatValueNode
···
| NullValueNode
| EnumValueNode
| ListValueNode
-
| ObjectValueNode;
+
| ObjectValueNode
+
>;
-
export type ConstValueNode =
+
export type ConstValueNode = Or<
+
GraphQL.ConstValueNode,
| IntValueNode
| FloatValueNode
| StringValueNode
···
| NullValueNode
| EnumValueNode
| ConstListValueNode
-
| ConstObjectValueNode;
+
| ConstObjectValueNode
+
>;
-
export interface IntValueNode {
-
readonly kind: Kind.INT;
-
readonly value: string;
-
readonly loc?: Location;
-
}
+
export type IntValueNode = Or<
+
GraphQL.IntValueNode,
+
{
+
readonly kind: Kind.INT;
+
readonly value: string;
+
readonly loc?: Location;
+
}
+
>;
-
export interface FloatValueNode {
-
readonly kind: Kind.FLOAT;
-
readonly value: string;
-
readonly loc?: Location;
-
}
+
export type FloatValueNode = Or<
+
GraphQL.FloatValueNode,
+
{
+
readonly kind: Kind.FLOAT;
+
readonly value: string;
+
readonly loc?: Location;
+
}
+
>;
-
export interface StringValueNode {
-
readonly kind: Kind.STRING;
-
readonly value: string;
-
readonly block?: boolean;
-
readonly loc?: Location;
-
}
+
export type StringValueNode = Or<
+
GraphQL.FloatValueNode,
+
{
+
readonly kind: Kind.STRING;
+
readonly value: string;
+
readonly block?: boolean;
+
readonly loc?: Location;
+
}
+
>;
-
export interface BooleanValueNode {
-
readonly kind: Kind.BOOLEAN;
-
readonly value: boolean;
-
readonly loc?: Location;
-
}
+
export type BooleanValueNode = Or<
+
GraphQL.BooleanValueNode,
+
{
+
readonly kind: Kind.BOOLEAN;
+
readonly value: boolean;
+
readonly loc?: Location;
+
}
+
>;
-
export interface NullValueNode {
-
readonly kind: Kind.NULL;
-
readonly loc?: Location;
-
}
+
export type NullValueNode = Or<
+
GraphQL.NullValueNode,
+
{
+
readonly kind: Kind.NULL;
+
readonly loc?: Location;
+
}
+
>;
-
export interface EnumValueNode {
-
readonly kind: Kind.ENUM;
-
readonly value: string;
-
readonly loc?: Location;
-
}
+
export type EnumValueNode = Or<
+
GraphQL.EnumValueNode,
+
{
+
readonly kind: Kind.ENUM;
+
readonly value: string;
+
readonly loc?: Location;
+
}
+
>;
-
export interface ListValueNode {
-
readonly kind: Kind.LIST;
-
readonly values: ReadonlyArray<ValueNode>;
-
readonly loc?: Location;
-
}
+
export type ListValueNode = Or<
+
GraphQL.ListValueNode,
+
{
+
readonly kind: Kind.LIST;
+
readonly values: ReadonlyArray<ValueNode>;
+
readonly loc?: Location;
+
}
+
>;
-
export interface ConstListValueNode {
-
readonly kind: Kind.LIST;
-
readonly values: ReadonlyArray<ConstValueNode>;
-
readonly loc?: Location;
-
}
+
export type ConstListValueNode = Or<
+
GraphQL.ConstListValueNode,
+
{
+
readonly kind: Kind.LIST;
+
readonly values: ReadonlyArray<ConstValueNode>;
+
readonly loc?: Location;
+
}
+
>;
-
export interface ObjectValueNode {
-
readonly kind: Kind.OBJECT;
-
readonly fields: ReadonlyArray<ObjectFieldNode>;
-
readonly loc?: Location;
-
}
+
export type ObjectValueNode = Or<
+
GraphQL.ObjectValueNode,
+
{
+
readonly kind: Kind.OBJECT;
+
readonly fields: ReadonlyArray<ObjectFieldNode>;
+
readonly loc?: Location;
+
}
+
>;
-
export interface ConstObjectValueNode {
-
readonly kind: Kind.OBJECT;
-
readonly fields: ReadonlyArray<ConstObjectFieldNode>;
-
readonly loc?: Location;
-
}
+
export type ConstObjectValueNode = Or<
+
GraphQL.ConstObjectValueNode,
+
{
+
readonly kind: Kind.OBJECT;
+
readonly fields: ReadonlyArray<ConstObjectFieldNode>;
+
readonly loc?: Location;
+
}
+
>;
-
export interface ObjectFieldNode {
-
readonly kind: Kind.OBJECT_FIELD;
-
readonly name: NameNode;
-
readonly value: ValueNode;
-
readonly loc?: Location;
-
}
+
export type ObjectFieldNode = Or<
+
GraphQL.ObjectFieldNode,
+
{
+
readonly kind: Kind.OBJECT_FIELD;
+
readonly name: NameNode;
+
readonly value: ValueNode;
+
readonly loc?: Location;
+
}
+
>;
-
export interface ConstObjectFieldNode {
-
readonly kind: Kind.OBJECT_FIELD;
-
readonly name: NameNode;
-
readonly value: ConstValueNode;
-
readonly loc?: Location;
-
}
+
export type ConstObjectFieldNode = Or<
+
GraphQL.ConstObjectFieldNode,
+
{
+
readonly kind: Kind.OBJECT_FIELD;
+
readonly name: NameNode;
+
readonly value: ConstValueNode;
+
readonly loc?: Location;
+
}
+
>;
-
export interface DirectiveNode {
-
readonly kind: Kind.DIRECTIVE;
-
readonly name: NameNode;
-
readonly arguments?: ReadonlyArray<ArgumentNode>;
-
readonly loc?: Location;
-
}
+
export type DirectiveNode = Or<
+
GraphQL.DirectiveNode,
+
{
+
readonly kind: Kind.DIRECTIVE;
+
readonly name: NameNode;
+
readonly arguments?: ReadonlyArray<ArgumentNode>;
+
readonly loc?: Location;
+
}
+
>;
-
export interface ConstDirectiveNode {
-
readonly kind: Kind.DIRECTIVE;
-
readonly name: NameNode;
-
readonly arguments?: ReadonlyArray<ConstArgumentNode>;
-
readonly loc?: Location;
-
}
+
export type ConstDirectiveNode = Or<
+
GraphQL.ConstDirectiveNode,
+
{
+
readonly kind: Kind.DIRECTIVE;
+
readonly name: NameNode;
+
readonly arguments?: ReadonlyArray<ConstArgumentNode>;
+
readonly loc?: Location;
+
}
+
>;
-
export declare type TypeNode = NamedTypeNode | ListTypeNode | NonNullTypeNode;
+
export type TypeNode = Or<GraphQL.TypeNode, NamedTypeNode | ListTypeNode | NonNullTypeNode>;
-
export interface NamedTypeNode {
-
readonly kind: Kind.NAMED_TYPE;
-
readonly name: NameNode;
-
readonly loc?: Location;
-
}
+
export type NamedTypeNode = Or<
+
GraphQL.NamedTypeNode,
+
{
+
readonly kind: Kind.NAMED_TYPE;
+
readonly name: NameNode;
+
readonly loc?: Location;
+
}
+
>;
-
export interface ListTypeNode {
-
readonly kind: Kind.LIST_TYPE;
-
readonly type: TypeNode;
-
readonly loc?: Location;
-
}
+
export type ListTypeNode = Or<
+
GraphQL.ListTypeNode,
+
{
+
readonly kind: Kind.LIST_TYPE;
+
readonly type: TypeNode;
+
readonly loc?: Location;
+
}
+
>;
-
export interface NonNullTypeNode {
-
readonly kind: Kind.NON_NULL_TYPE;
-
readonly type: NamedTypeNode | ListTypeNode;
-
readonly loc?: Location;
-
}
+
export type NonNullTypeNode = Or<
+
GraphQL.NonNullTypeNode,
+
{
+
readonly kind: Kind.NON_NULL_TYPE;
+
readonly type: NamedTypeNode | ListTypeNode;
+
readonly loc?: Location;
+
}
+
>;
+1 -1
src/printer.ts
···
};
export function print(node: ASTNode): string {
-
return nodes[node.kind] ? nodes[node.kind]!(node as any) : '';
+
return nodes[node.kind] ? (nodes as any)[node.kind]!(node) : '';
}
+226 -158
src/schemaAst.ts
···
-
import type { Location } from './types';
+
import type * as GraphQL from 'graphql';
+
+
import type { Or, Location } from './types';
import type { Kind, OperationTypeNode } from './kind';
import type {
···
} from './ast';
/** Type System Definition */
-
export declare type TypeSystemDefinitionNode =
-
| SchemaDefinitionNode
-
| TypeDefinitionNode
-
| DirectiveDefinitionNode;
+
export declare type TypeSystemDefinitionNode = Or<
+
GraphQL.TypeSystemDefinitionNode,
+
SchemaDefinitionNode | TypeDefinitionNode | DirectiveDefinitionNode
+
>;
-
export interface SchemaDefinitionNode {
-
readonly kind: Kind.SCHEMA_DEFINITION;
-
readonly loc?: Location;
-
readonly description?: StringValueNode;
-
readonly directives?: ReadonlyArray<ConstDirectiveNode>;
-
readonly operationTypes: ReadonlyArray<OperationTypeDefinitionNode>;
-
}
+
export type SchemaDefinitionNode = Or<
+
GraphQL.SchemaDefinitionNode,
+
{
+
readonly kind: Kind.SCHEMA_DEFINITION;
+
readonly loc?: Location;
+
readonly description?: StringValueNode;
+
readonly directives?: ReadonlyArray<ConstDirectiveNode>;
+
readonly operationTypes: ReadonlyArray<OperationTypeDefinitionNode>;
+
}
+
>;
-
export interface OperationTypeDefinitionNode {
-
readonly kind: Kind.OPERATION_TYPE_DEFINITION;
-
readonly loc?: Location;
-
readonly operation: OperationTypeNode;
-
readonly type: NamedTypeNode;
-
}
+
export type OperationTypeDefinitionNode = Or<
+
GraphQL.OperationTypeDefinitionNode,
+
{
+
readonly kind: Kind.OPERATION_TYPE_DEFINITION;
+
readonly loc?: Location;
+
readonly operation: OperationTypeNode;
+
readonly type: NamedTypeNode;
+
}
+
>;
/** Type Definition */
-
export declare type TypeDefinitionNode =
+
export declare type TypeDefinitionNode = Or<
+
GraphQL.TypeDefinitionNode,
| ScalarTypeDefinitionNode
| ObjectTypeDefinitionNode
| InterfaceTypeDefinitionNode
| UnionTypeDefinitionNode
| EnumTypeDefinitionNode
-
| InputObjectTypeDefinitionNode;
+
| InputObjectTypeDefinitionNode
+
>;
-
export interface ScalarTypeDefinitionNode {
-
readonly kind: Kind.SCALAR_TYPE_DEFINITION;
-
readonly loc?: Location;
-
readonly description?: StringValueNode;
-
readonly name: NameNode;
-
readonly directives?: ReadonlyArray<ConstDirectiveNode>;
-
}
+
export type ScalarTypeDefinitionNode = Or<
+
GraphQL.ScalarTypeDefinitionNode,
+
{
+
readonly kind: Kind.SCALAR_TYPE_DEFINITION;
+
readonly loc?: Location;
+
readonly description?: StringValueNode;
+
readonly name: NameNode;
+
readonly directives?: ReadonlyArray<ConstDirectiveNode>;
+
}
+
>;
-
export interface ObjectTypeDefinitionNode {
-
readonly kind: Kind.OBJECT_TYPE_DEFINITION;
-
readonly loc?: Location;
-
readonly description?: StringValueNode;
-
readonly name: NameNode;
-
readonly interfaces?: ReadonlyArray<NamedTypeNode>;
-
readonly directives?: ReadonlyArray<ConstDirectiveNode>;
-
readonly fields?: ReadonlyArray<FieldDefinitionNode>;
-
}
+
export type ObjectTypeDefinitionNode = Or<
+
GraphQL.ObjectTypeDefinitionNode,
+
{
+
readonly kind: Kind.OBJECT_TYPE_DEFINITION;
+
readonly loc?: Location;
+
readonly description?: StringValueNode;
+
readonly name: NameNode;
+
readonly interfaces?: ReadonlyArray<NamedTypeNode>;
+
readonly directives?: ReadonlyArray<ConstDirectiveNode>;
+
readonly fields?: ReadonlyArray<FieldDefinitionNode>;
+
}
+
>;
-
export interface FieldDefinitionNode {
-
readonly kind: Kind.FIELD_DEFINITION;
-
readonly loc?: Location;
-
readonly description?: StringValueNode;
-
readonly name: NameNode;
-
readonly arguments?: ReadonlyArray<InputValueDefinitionNode>;
-
readonly type: TypeNode;
-
readonly directives?: ReadonlyArray<ConstDirectiveNode>;
-
}
+
export type FieldDefinitionNode = Or<
+
GraphQL.FieldDefinitionNode,
+
{
+
readonly kind: Kind.FIELD_DEFINITION;
+
readonly loc?: Location;
+
readonly description?: StringValueNode;
+
readonly name: NameNode;
+
readonly arguments?: ReadonlyArray<InputValueDefinitionNode>;
+
readonly type: TypeNode;
+
readonly directives?: ReadonlyArray<ConstDirectiveNode>;
+
}
+
>;
-
export interface InputValueDefinitionNode {
-
readonly kind: Kind.INPUT_VALUE_DEFINITION;
-
readonly loc?: Location;
-
readonly description?: StringValueNode;
-
readonly name: NameNode;
-
readonly type: TypeNode;
-
readonly defaultValue?: ConstValueNode;
-
readonly directives?: ReadonlyArray<ConstDirectiveNode>;
-
}
+
export type InputValueDefinitionNode = Or<
+
GraphQL.InputValueDefinitionNode,
+
{
+
readonly kind: Kind.INPUT_VALUE_DEFINITION;
+
readonly loc?: Location;
+
readonly description?: StringValueNode;
+
readonly name: NameNode;
+
readonly type: TypeNode;
+
readonly defaultValue?: ConstValueNode;
+
readonly directives?: ReadonlyArray<ConstDirectiveNode>;
+
}
+
>;
-
export interface InterfaceTypeDefinitionNode {
-
readonly kind: Kind.INTERFACE_TYPE_DEFINITION;
-
readonly loc?: Location;
-
readonly description?: StringValueNode;
-
readonly name: NameNode;
-
readonly interfaces?: ReadonlyArray<NamedTypeNode>;
-
readonly directives?: ReadonlyArray<ConstDirectiveNode>;
-
readonly fields?: ReadonlyArray<FieldDefinitionNode>;
-
}
+
export type InterfaceTypeDefinitionNode = Or<
+
GraphQL.InterfaceTypeDefinitionNode,
+
{
+
readonly kind: Kind.INTERFACE_TYPE_DEFINITION;
+
readonly loc?: Location;
+
readonly description?: StringValueNode;
+
readonly name: NameNode;
+
readonly interfaces?: ReadonlyArray<NamedTypeNode>;
+
readonly directives?: ReadonlyArray<ConstDirectiveNode>;
+
readonly fields?: ReadonlyArray<FieldDefinitionNode>;
+
}
+
>;
-
export interface UnionTypeDefinitionNode {
-
readonly kind: Kind.UNION_TYPE_DEFINITION;
-
readonly loc?: Location;
-
readonly description?: StringValueNode;
-
readonly name: NameNode;
-
readonly directives?: ReadonlyArray<ConstDirectiveNode>;
-
readonly types?: ReadonlyArray<NamedTypeNode>;
-
}
+
export type UnionTypeDefinitionNode = Or<
+
GraphQL.UnionTypeDefinitionNode,
+
{
+
readonly kind: Kind.UNION_TYPE_DEFINITION;
+
readonly loc?: Location;
+
readonly description?: StringValueNode;
+
readonly name: NameNode;
+
readonly directives?: ReadonlyArray<ConstDirectiveNode>;
+
readonly types?: ReadonlyArray<NamedTypeNode>;
+
}
+
>;
-
export interface EnumTypeDefinitionNode {
-
readonly kind: Kind.ENUM_TYPE_DEFINITION;
-
readonly loc?: Location;
-
readonly description?: StringValueNode;
-
readonly name: NameNode;
-
readonly directives?: ReadonlyArray<ConstDirectiveNode>;
-
readonly values?: ReadonlyArray<EnumValueDefinitionNode>;
-
}
+
export type EnumTypeDefinitionNode = Or<
+
GraphQL.EnumTypeDefinitionNode,
+
{
+
readonly kind: Kind.ENUM_TYPE_DEFINITION;
+
readonly loc?: Location;
+
readonly description?: StringValueNode;
+
readonly name: NameNode;
+
readonly directives?: ReadonlyArray<ConstDirectiveNode>;
+
readonly values?: ReadonlyArray<EnumValueDefinitionNode>;
+
}
+
>;
-
export interface EnumValueDefinitionNode {
-
readonly kind: Kind.ENUM_VALUE_DEFINITION;
-
readonly loc?: Location;
-
readonly description?: StringValueNode;
-
readonly name: NameNode;
-
readonly directives?: ReadonlyArray<ConstDirectiveNode>;
-
}
+
export type EnumValueDefinitionNode = Or<
+
GraphQL.EnumValueDefinitionNode,
+
{
+
readonly kind: Kind.ENUM_VALUE_DEFINITION;
+
readonly loc?: Location;
+
readonly description?: StringValueNode;
+
readonly name: NameNode;
+
readonly directives?: ReadonlyArray<ConstDirectiveNode>;
+
}
+
>;
-
export interface InputObjectTypeDefinitionNode {
-
readonly kind: Kind.INPUT_OBJECT_TYPE_DEFINITION;
-
readonly loc?: Location;
-
readonly description?: StringValueNode;
-
readonly name: NameNode;
-
readonly directives?: ReadonlyArray<ConstDirectiveNode>;
-
readonly fields?: ReadonlyArray<InputValueDefinitionNode>;
-
}
-
/** Directive Definitions */
-
export interface DirectiveDefinitionNode {
-
readonly kind: Kind.DIRECTIVE_DEFINITION;
-
readonly loc?: Location;
-
readonly description?: StringValueNode;
-
readonly name: NameNode;
-
readonly arguments?: ReadonlyArray<InputValueDefinitionNode>;
-
readonly repeatable: boolean;
-
readonly locations: ReadonlyArray<NameNode>;
-
}
-
/** Type System Extensions */
-
export declare type TypeSystemExtensionNode = SchemaExtensionNode | TypeExtensionNode;
-
export interface SchemaExtensionNode {
-
readonly kind: Kind.SCHEMA_EXTENSION;
-
readonly loc?: Location;
-
readonly directives?: ReadonlyArray<ConstDirectiveNode>;
-
readonly operationTypes?: ReadonlyArray<OperationTypeDefinitionNode>;
-
}
-
/** Type Extensions */
-
export declare type TypeExtensionNode =
+
export type InputObjectTypeDefinitionNode = Or<
+
GraphQL.InputObjectTypeDefinitionNode,
+
{
+
readonly kind: Kind.INPUT_OBJECT_TYPE_DEFINITION;
+
readonly loc?: Location;
+
readonly description?: StringValueNode;
+
readonly name: NameNode;
+
readonly directives?: ReadonlyArray<ConstDirectiveNode>;
+
readonly fields?: ReadonlyArray<InputValueDefinitionNode>;
+
}
+
>;
+
+
export type DirectiveDefinitionNode = Or<
+
GraphQL.DirectiveDefinitionNode,
+
{
+
readonly kind: Kind.DIRECTIVE_DEFINITION;
+
readonly loc?: Location;
+
readonly description?: StringValueNode;
+
readonly name: NameNode;
+
readonly arguments?: ReadonlyArray<InputValueDefinitionNode>;
+
readonly repeatable: boolean;
+
readonly locations: ReadonlyArray<NameNode>;
+
}
+
>;
+
+
export type TypeSystemExtensionNode = Or<
+
GraphQL.TypeSystemExtensionNode,
+
SchemaExtensionNode | TypeExtensionNode
+
>;
+
+
export type SchemaExtensionNode = Or<
+
GraphQL.SchemaExtensionNode,
+
{
+
readonly kind: Kind.SCHEMA_EXTENSION;
+
readonly loc?: Location;
+
readonly directives?: ReadonlyArray<ConstDirectiveNode>;
+
readonly operationTypes?: ReadonlyArray<OperationTypeDefinitionNode>;
+
}
+
>;
+
+
export declare type TypeExtensionNode = Or<
+
GraphQL.TypeExtensionNode,
| ScalarTypeExtensionNode
| ObjectTypeExtensionNode
| InterfaceTypeExtensionNode
| UnionTypeExtensionNode
| EnumTypeExtensionNode
-
| InputObjectTypeExtensionNode;
-
export interface ScalarTypeExtensionNode {
-
readonly kind: Kind.SCALAR_TYPE_EXTENSION;
-
readonly loc?: Location;
-
readonly name: NameNode;
-
readonly directives?: ReadonlyArray<ConstDirectiveNode>;
-
}
+
| InputObjectTypeExtensionNode
+
>;
-
export interface ObjectTypeExtensionNode {
-
readonly kind: Kind.OBJECT_TYPE_EXTENSION;
-
readonly loc?: Location;
-
readonly name: NameNode;
-
readonly interfaces?: ReadonlyArray<NamedTypeNode>;
-
readonly directives?: ReadonlyArray<ConstDirectiveNode>;
-
readonly fields?: ReadonlyArray<FieldDefinitionNode>;
-
}
+
export type ScalarTypeExtensionNode = Or<
+
GraphQL.ScalarTypeExtensionNode,
+
{
+
readonly kind: Kind.SCALAR_TYPE_EXTENSION;
+
readonly loc?: Location;
+
readonly name: NameNode;
+
readonly directives?: ReadonlyArray<ConstDirectiveNode>;
+
}
+
>;
-
export interface InterfaceTypeExtensionNode {
-
readonly kind: Kind.INTERFACE_TYPE_EXTENSION;
-
readonly loc?: Location;
-
readonly name: NameNode;
-
readonly interfaces?: ReadonlyArray<NamedTypeNode>;
-
readonly directives?: ReadonlyArray<ConstDirectiveNode>;
-
readonly fields?: ReadonlyArray<FieldDefinitionNode>;
-
}
+
export type ObjectTypeExtensionNode = Or<
+
GraphQL.ObjectTypeExtensionNode,
+
{
+
readonly kind: Kind.OBJECT_TYPE_EXTENSION;
+
readonly loc?: Location;
+
readonly name: NameNode;
+
readonly interfaces?: ReadonlyArray<NamedTypeNode>;
+
readonly directives?: ReadonlyArray<ConstDirectiveNode>;
+
readonly fields?: ReadonlyArray<FieldDefinitionNode>;
+
}
+
>;
-
export interface UnionTypeExtensionNode {
-
readonly kind: Kind.UNION_TYPE_EXTENSION;
-
readonly loc?: Location;
-
readonly name: NameNode;
-
readonly directives?: ReadonlyArray<ConstDirectiveNode>;
-
readonly types?: ReadonlyArray<NamedTypeNode>;
-
}
+
export type InterfaceTypeExtensionNode = Or<
+
GraphQL.InterfaceTypeExtensionNode,
+
{
+
readonly kind: Kind.INTERFACE_TYPE_EXTENSION;
+
readonly loc?: Location;
+
readonly name: NameNode;
+
readonly interfaces?: ReadonlyArray<NamedTypeNode>;
+
readonly directives?: ReadonlyArray<ConstDirectiveNode>;
+
readonly fields?: ReadonlyArray<FieldDefinitionNode>;
+
}
+
>;
-
export interface EnumTypeExtensionNode {
-
readonly kind: Kind.ENUM_TYPE_EXTENSION;
-
readonly loc?: Location;
-
readonly name: NameNode;
-
readonly directives?: ReadonlyArray<ConstDirectiveNode>;
-
readonly values?: ReadonlyArray<EnumValueDefinitionNode>;
-
}
+
export type UnionTypeExtensionNode = Or<
+
GraphQL.UnionTypeExtensionNode,
+
{
+
readonly kind: Kind.UNION_TYPE_EXTENSION;
+
readonly loc?: Location;
+
readonly name: NameNode;
+
readonly directives?: ReadonlyArray<ConstDirectiveNode>;
+
readonly types?: ReadonlyArray<NamedTypeNode>;
+
}
+
>;
-
export interface InputObjectTypeExtensionNode {
-
readonly kind: Kind.INPUT_OBJECT_TYPE_EXTENSION;
-
readonly loc?: Location;
-
readonly name: NameNode;
-
readonly directives?: ReadonlyArray<ConstDirectiveNode>;
-
readonly fields?: ReadonlyArray<InputValueDefinitionNode>;
-
}
+
export type EnumTypeExtensionNode = Or<
+
GraphQL.EnumTypeExtensionNode,
+
{
+
readonly kind: Kind.ENUM_TYPE_EXTENSION;
+
readonly loc?: Location;
+
readonly name: NameNode;
+
readonly directives?: ReadonlyArray<ConstDirectiveNode>;
+
readonly values?: ReadonlyArray<EnumValueDefinitionNode>;
+
}
+
>;
+
+
export type InputObjectTypeExtensionNode = Or<
+
GraphQL.InputObjectTypeExtensionNode,
+
{
+
readonly kind: Kind.INPUT_OBJECT_TYPE_EXTENSION;
+
readonly loc?: Location;
+
readonly name: NameNode;
+
readonly directives?: ReadonlyArray<ConstDirectiveNode>;
+
readonly fields?: ReadonlyArray<InputValueDefinitionNode>;
+
}
+
>;
+2
src/types.ts
···
+
export type Or<T, U> = 0 extends 1 & T ? U : T;
+
export type Maybe<T> = T | undefined | null;
export interface Extensions {