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