Mirror: The spec-compliant minimum of client-side GraphQL.
1import type { Kind } from './kind';
2
3export interface Location {
4 readonly start: number;
5 readonly end: number;
6 readonly source: Source;
7}
8
9export interface Source {
10 body: string;
11 name: string;
12 locationOffset: {
13 line: number;
14 column: number;
15 };
16}
17
18export declare type ASTNode =
19 | NameNode
20 | DocumentNode
21 | OperationDefinitionNode
22 | VariableDefinitionNode
23 | VariableNode
24 | SelectionSetNode
25 | FieldNode
26 | ArgumentNode
27 | FragmentSpreadNode
28 | InlineFragmentNode
29 | FragmentDefinitionNode
30 | IntValueNode
31 | FloatValueNode
32 | StringValueNode
33 | BooleanValueNode
34 | NullValueNode
35 | EnumValueNode
36 | ListValueNode
37 | ObjectValueNode
38 | ObjectFieldNode
39 | DirectiveNode
40 | NamedTypeNode
41 | ListTypeNode
42 | NonNullTypeNode;
43
44export interface NameNode {
45 readonly kind: Kind.NAME;
46 readonly value: string;
47}
48
49export interface DocumentNode {
50 readonly kind: Kind.DOCUMENT;
51 readonly definitions: ReadonlyArray<ExecutableDefinitionNode>;
52 readonly loc?: Location;
53}
54
55export type DefinitionNode =
56 | OperationDefinitionNode
57 | FragmentDefinitionNode;
58export type ExecutableDefinitionNode =
59 | OperationDefinitionNode
60 | FragmentDefinitionNode;
61
62export interface OperationDefinitionNode {
63 readonly kind: Kind.OPERATION_DEFINITION;
64 readonly operation: OperationTypeNode;
65 readonly name?: NameNode;
66 readonly variableDefinitions?: ReadonlyArray<VariableDefinitionNode>;
67 readonly directives?: ReadonlyArray<DirectiveNode>;
68 readonly selectionSet: SelectionSetNode;
69}
70
71export const enum OperationTypeNode {
72 QUERY = 'query',
73 MUTATION = 'mutation',
74 SUBSCRIPTION = 'subscription',
75}
76
77export interface VariableDefinitionNode {
78 readonly kind: Kind.VARIABLE_DEFINITION;
79 readonly variable: VariableNode;
80 readonly type: TypeNode;
81 readonly defaultValue?: ConstValueNode;
82 readonly directives?: ReadonlyArray<ConstDirectiveNode>;
83}
84
85export interface VariableNode {
86 readonly kind: Kind.VARIABLE;
87 readonly name: NameNode;
88}
89
90export interface SelectionSetNode {
91 kind: Kind.SELECTION_SET;
92 selections: ReadonlyArray<SelectionNode>;
93}
94
95export declare type SelectionNode =
96 | FieldNode
97 | FragmentSpreadNode
98 | InlineFragmentNode;
99
100export interface FieldNode {
101 readonly kind: Kind.FIELD;
102 readonly alias?: NameNode;
103 readonly name: NameNode;
104 readonly arguments?: ReadonlyArray<ArgumentNode>;
105 readonly directives?: ReadonlyArray<DirectiveNode>;
106 readonly selectionSet?: SelectionSetNode;
107}
108
109export interface ArgumentNode {
110 readonly kind: Kind.ARGUMENT;
111 readonly name: NameNode;
112 readonly value: ValueNode;
113}
114
115export interface ConstArgumentNode {
116 readonly kind: Kind.ARGUMENT;
117 readonly name: NameNode;
118 readonly value: ConstValueNode;
119}
120
121export interface FragmentSpreadNode {
122 readonly kind: Kind.FRAGMENT_SPREAD;
123 readonly name: NameNode;
124 readonly directives?: ReadonlyArray<DirectiveNode>;
125}
126
127export interface InlineFragmentNode {
128 readonly kind: Kind.INLINE_FRAGMENT;
129 readonly typeCondition?: NamedTypeNode;
130 readonly directives?: ReadonlyArray<DirectiveNode>;
131 readonly selectionSet: SelectionSetNode;
132}
133
134export interface FragmentDefinitionNode {
135 readonly kind: Kind.FRAGMENT_DEFINITION;
136 readonly name: NameNode;
137 readonly typeCondition: NamedTypeNode;
138 readonly directives?: ReadonlyArray<DirectiveNode>;
139 readonly selectionSet: SelectionSetNode;
140}
141
142export type ValueNode =
143 | VariableNode
144 | IntValueNode
145 | FloatValueNode
146 | StringValueNode
147 | BooleanValueNode
148 | NullValueNode
149 | EnumValueNode
150 | ListValueNode
151 | ObjectValueNode;
152
153export type ConstValueNode =
154 | IntValueNode
155 | FloatValueNode
156 | StringValueNode
157 | BooleanValueNode
158 | NullValueNode
159 | EnumValueNode
160 | ConstListValueNode
161 | ConstObjectValueNode;
162
163export interface IntValueNode {
164 readonly kind: Kind.INT;
165 readonly value: string;
166}
167
168export interface FloatValueNode {
169 readonly kind: Kind.FLOAT;
170 readonly value: string;
171}
172export interface StringValueNode {
173 readonly kind: Kind.STRING;
174 readonly value: string;
175 readonly block?: boolean;
176}
177
178export interface BooleanValueNode {
179 readonly kind: Kind.BOOLEAN;
180 readonly value: boolean;
181}
182
183export interface NullValueNode {
184 readonly kind: Kind.NULL;
185}
186
187export interface EnumValueNode {
188 readonly kind: Kind.ENUM;
189 readonly value: string;
190}
191
192export interface ListValueNode {
193 readonly kind: Kind.LIST;
194 readonly values: ReadonlyArray<ValueNode>;
195}
196
197export interface ConstListValueNode {
198 readonly kind: Kind.LIST;
199 readonly values: ReadonlyArray<ConstValueNode>;
200}
201
202export interface ObjectValueNode {
203 readonly kind: Kind.OBJECT;
204 readonly fields: ReadonlyArray<ObjectFieldNode>;
205}
206
207export interface ConstObjectValueNode {
208 readonly kind: Kind.OBJECT;
209 readonly fields: ReadonlyArray<ConstObjectFieldNode>;
210}
211
212export interface ObjectFieldNode {
213 readonly kind: Kind.OBJECT_FIELD;
214 readonly name: NameNode;
215 readonly value: ValueNode;
216}
217
218export interface ConstObjectFieldNode {
219 readonly kind: Kind.OBJECT_FIELD;
220 readonly name: NameNode;
221 readonly value: ConstValueNode;
222}
223
224export interface DirectiveNode {
225 readonly kind: Kind.DIRECTIVE;
226 readonly name: NameNode;
227 readonly arguments?: ReadonlyArray<ArgumentNode>;
228}
229
230export interface ConstDirectiveNode {
231 readonly kind: Kind.DIRECTIVE;
232 readonly name: NameNode;
233 readonly arguments?: ReadonlyArray<ConstArgumentNode>;
234}
235
236export declare type TypeNode = NamedTypeNode | ListTypeNode | NonNullTypeNode;
237
238export interface NamedTypeNode {
239 readonly kind: Kind.NAMED_TYPE;
240 readonly name: NameNode;
241}
242
243export interface ListTypeNode {
244 readonly kind: Kind.LIST_TYPE;
245 readonly type: TypeNode;
246}
247
248export interface NonNullTypeNode {
249 readonly kind: Kind.NON_NULL_TYPE;
250 readonly type: NamedTypeNode | ListTypeNode;
251}