ast.d.ts 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537
  1. import type { Kind } from './kinds';
  2. import type { Source } from './source';
  3. import type { TokenKind } from './tokenKind';
  4. /**
  5. * Contains a range of UTF-8 character offsets and token references that
  6. * identify the region of the source from which the AST derived.
  7. */
  8. export declare class Location {
  9. /**
  10. * The character offset at which this Node begins.
  11. */
  12. readonly start: number;
  13. /**
  14. * The character offset at which this Node ends.
  15. */
  16. readonly end: number;
  17. /**
  18. * The Token at which this Node begins.
  19. */
  20. readonly startToken: Token;
  21. /**
  22. * The Token at which this Node ends.
  23. */
  24. readonly endToken: Token;
  25. /**
  26. * The Source document the AST represents.
  27. */
  28. readonly source: Source;
  29. constructor(startToken: Token, endToken: Token, source: Source);
  30. get [Symbol.toStringTag](): string;
  31. toJSON(): {
  32. start: number;
  33. end: number;
  34. };
  35. }
  36. /**
  37. * Represents a range of characters represented by a lexical token
  38. * within a Source.
  39. */
  40. export declare class Token {
  41. /**
  42. * The kind of Token.
  43. */
  44. readonly kind: TokenKind;
  45. /**
  46. * The character offset at which this Node begins.
  47. */
  48. readonly start: number;
  49. /**
  50. * The character offset at which this Node ends.
  51. */
  52. readonly end: number;
  53. /**
  54. * The 1-indexed line number on which this Token appears.
  55. */
  56. readonly line: number;
  57. /**
  58. * The 1-indexed column number at which this Token begins.
  59. */
  60. readonly column: number;
  61. /**
  62. * For non-punctuation tokens, represents the interpreted value of the token.
  63. *
  64. * Note: is undefined for punctuation tokens, but typed as string for
  65. * convenience in the parser.
  66. */
  67. readonly value: string;
  68. /**
  69. * Tokens exist as nodes in a double-linked-list amongst all tokens
  70. * including ignored tokens. <SOF> is always the first node and <EOF>
  71. * the last.
  72. */
  73. readonly prev: Token | null;
  74. readonly next: Token | null;
  75. constructor(
  76. kind: TokenKind,
  77. start: number,
  78. end: number,
  79. line: number,
  80. column: number,
  81. value?: string,
  82. );
  83. get [Symbol.toStringTag](): string;
  84. toJSON(): {
  85. kind: TokenKind;
  86. value?: string;
  87. line: number;
  88. column: number;
  89. };
  90. }
  91. /**
  92. * The list of all possible AST node types.
  93. */
  94. export declare type ASTNode =
  95. | NameNode
  96. | DocumentNode
  97. | OperationDefinitionNode
  98. | VariableDefinitionNode
  99. | VariableNode
  100. | SelectionSetNode
  101. | FieldNode
  102. | ArgumentNode
  103. | FragmentSpreadNode
  104. | InlineFragmentNode
  105. | FragmentDefinitionNode
  106. | IntValueNode
  107. | FloatValueNode
  108. | StringValueNode
  109. | BooleanValueNode
  110. | NullValueNode
  111. | EnumValueNode
  112. | ListValueNode
  113. | ObjectValueNode
  114. | ObjectFieldNode
  115. | DirectiveNode
  116. | NamedTypeNode
  117. | ListTypeNode
  118. | NonNullTypeNode
  119. | SchemaDefinitionNode
  120. | OperationTypeDefinitionNode
  121. | ScalarTypeDefinitionNode
  122. | ObjectTypeDefinitionNode
  123. | FieldDefinitionNode
  124. | InputValueDefinitionNode
  125. | InterfaceTypeDefinitionNode
  126. | UnionTypeDefinitionNode
  127. | EnumTypeDefinitionNode
  128. | EnumValueDefinitionNode
  129. | InputObjectTypeDefinitionNode
  130. | DirectiveDefinitionNode
  131. | SchemaExtensionNode
  132. | ScalarTypeExtensionNode
  133. | ObjectTypeExtensionNode
  134. | InterfaceTypeExtensionNode
  135. | UnionTypeExtensionNode
  136. | EnumTypeExtensionNode
  137. | InputObjectTypeExtensionNode;
  138. /**
  139. * Utility type listing all nodes indexed by their kind.
  140. */
  141. export declare type ASTKindToNode = {
  142. [NodeT in ASTNode as NodeT['kind']]: NodeT;
  143. };
  144. /**
  145. * @internal
  146. */
  147. export declare const QueryDocumentKeys: {
  148. [NodeT in ASTNode as NodeT['kind']]: ReadonlyArray<keyof NodeT>;
  149. };
  150. /**
  151. * @internal
  152. */
  153. export declare function isNode(maybeNode: any): maybeNode is ASTNode;
  154. /** Name */
  155. export interface NameNode {
  156. readonly kind: Kind.NAME;
  157. readonly loc?: Location;
  158. readonly value: string;
  159. }
  160. /** Document */
  161. export interface DocumentNode {
  162. readonly kind: Kind.DOCUMENT;
  163. readonly loc?: Location;
  164. readonly definitions: ReadonlyArray<DefinitionNode>;
  165. }
  166. export declare type DefinitionNode =
  167. | ExecutableDefinitionNode
  168. | TypeSystemDefinitionNode
  169. | TypeSystemExtensionNode;
  170. export declare type ExecutableDefinitionNode =
  171. | OperationDefinitionNode
  172. | FragmentDefinitionNode;
  173. export interface OperationDefinitionNode {
  174. readonly kind: Kind.OPERATION_DEFINITION;
  175. readonly loc?: Location;
  176. readonly operation: OperationTypeNode;
  177. readonly name?: NameNode;
  178. readonly variableDefinitions?: ReadonlyArray<VariableDefinitionNode>;
  179. readonly directives?: ReadonlyArray<DirectiveNode>;
  180. readonly selectionSet: SelectionSetNode;
  181. }
  182. declare enum OperationTypeNode {
  183. QUERY = 'query',
  184. MUTATION = 'mutation',
  185. SUBSCRIPTION = 'subscription',
  186. }
  187. export { OperationTypeNode };
  188. export interface VariableDefinitionNode {
  189. readonly kind: Kind.VARIABLE_DEFINITION;
  190. readonly loc?: Location;
  191. readonly variable: VariableNode;
  192. readonly type: TypeNode;
  193. readonly defaultValue?: ConstValueNode;
  194. readonly directives?: ReadonlyArray<ConstDirectiveNode>;
  195. }
  196. export interface VariableNode {
  197. readonly kind: Kind.VARIABLE;
  198. readonly loc?: Location;
  199. readonly name: NameNode;
  200. }
  201. export interface SelectionSetNode {
  202. kind: Kind.SELECTION_SET;
  203. loc?: Location;
  204. selections: ReadonlyArray<SelectionNode>;
  205. }
  206. export declare type SelectionNode =
  207. | FieldNode
  208. | FragmentSpreadNode
  209. | InlineFragmentNode;
  210. export interface FieldNode {
  211. readonly kind: Kind.FIELD;
  212. readonly loc?: Location;
  213. readonly alias?: NameNode;
  214. readonly name: NameNode;
  215. readonly arguments?: ReadonlyArray<ArgumentNode>;
  216. readonly directives?: ReadonlyArray<DirectiveNode>;
  217. readonly selectionSet?: SelectionSetNode;
  218. }
  219. export interface ArgumentNode {
  220. readonly kind: Kind.ARGUMENT;
  221. readonly loc?: Location;
  222. readonly name: NameNode;
  223. readonly value: ValueNode;
  224. }
  225. export interface ConstArgumentNode {
  226. readonly kind: Kind.ARGUMENT;
  227. readonly loc?: Location;
  228. readonly name: NameNode;
  229. readonly value: ConstValueNode;
  230. }
  231. /** Fragments */
  232. export interface FragmentSpreadNode {
  233. readonly kind: Kind.FRAGMENT_SPREAD;
  234. readonly loc?: Location;
  235. readonly name: NameNode;
  236. readonly directives?: ReadonlyArray<DirectiveNode>;
  237. }
  238. export interface InlineFragmentNode {
  239. readonly kind: Kind.INLINE_FRAGMENT;
  240. readonly loc?: Location;
  241. readonly typeCondition?: NamedTypeNode;
  242. readonly directives?: ReadonlyArray<DirectiveNode>;
  243. readonly selectionSet: SelectionSetNode;
  244. }
  245. export interface FragmentDefinitionNode {
  246. readonly kind: Kind.FRAGMENT_DEFINITION;
  247. readonly loc?: Location;
  248. readonly name: NameNode;
  249. /** @deprecated variableDefinitions will be removed in v17.0.0 */
  250. readonly variableDefinitions?: ReadonlyArray<VariableDefinitionNode>;
  251. readonly typeCondition: NamedTypeNode;
  252. readonly directives?: ReadonlyArray<DirectiveNode>;
  253. readonly selectionSet: SelectionSetNode;
  254. }
  255. /** Values */
  256. export declare type ValueNode =
  257. | VariableNode
  258. | IntValueNode
  259. | FloatValueNode
  260. | StringValueNode
  261. | BooleanValueNode
  262. | NullValueNode
  263. | EnumValueNode
  264. | ListValueNode
  265. | ObjectValueNode;
  266. export declare type ConstValueNode =
  267. | IntValueNode
  268. | FloatValueNode
  269. | StringValueNode
  270. | BooleanValueNode
  271. | NullValueNode
  272. | EnumValueNode
  273. | ConstListValueNode
  274. | ConstObjectValueNode;
  275. export interface IntValueNode {
  276. readonly kind: Kind.INT;
  277. readonly loc?: Location;
  278. readonly value: string;
  279. }
  280. export interface FloatValueNode {
  281. readonly kind: Kind.FLOAT;
  282. readonly loc?: Location;
  283. readonly value: string;
  284. }
  285. export interface StringValueNode {
  286. readonly kind: Kind.STRING;
  287. readonly loc?: Location;
  288. readonly value: string;
  289. readonly block?: boolean;
  290. }
  291. export interface BooleanValueNode {
  292. readonly kind: Kind.BOOLEAN;
  293. readonly loc?: Location;
  294. readonly value: boolean;
  295. }
  296. export interface NullValueNode {
  297. readonly kind: Kind.NULL;
  298. readonly loc?: Location;
  299. }
  300. export interface EnumValueNode {
  301. readonly kind: Kind.ENUM;
  302. readonly loc?: Location;
  303. readonly value: string;
  304. }
  305. export interface ListValueNode {
  306. readonly kind: Kind.LIST;
  307. readonly loc?: Location;
  308. readonly values: ReadonlyArray<ValueNode>;
  309. }
  310. export interface ConstListValueNode {
  311. readonly kind: Kind.LIST;
  312. readonly loc?: Location;
  313. readonly values: ReadonlyArray<ConstValueNode>;
  314. }
  315. export interface ObjectValueNode {
  316. readonly kind: Kind.OBJECT;
  317. readonly loc?: Location;
  318. readonly fields: ReadonlyArray<ObjectFieldNode>;
  319. }
  320. export interface ConstObjectValueNode {
  321. readonly kind: Kind.OBJECT;
  322. readonly loc?: Location;
  323. readonly fields: ReadonlyArray<ConstObjectFieldNode>;
  324. }
  325. export interface ObjectFieldNode {
  326. readonly kind: Kind.OBJECT_FIELD;
  327. readonly loc?: Location;
  328. readonly name: NameNode;
  329. readonly value: ValueNode;
  330. }
  331. export interface ConstObjectFieldNode {
  332. readonly kind: Kind.OBJECT_FIELD;
  333. readonly loc?: Location;
  334. readonly name: NameNode;
  335. readonly value: ConstValueNode;
  336. }
  337. /** Directives */
  338. export interface DirectiveNode {
  339. readonly kind: Kind.DIRECTIVE;
  340. readonly loc?: Location;
  341. readonly name: NameNode;
  342. readonly arguments?: ReadonlyArray<ArgumentNode>;
  343. }
  344. export interface ConstDirectiveNode {
  345. readonly kind: Kind.DIRECTIVE;
  346. readonly loc?: Location;
  347. readonly name: NameNode;
  348. readonly arguments?: ReadonlyArray<ConstArgumentNode>;
  349. }
  350. /** Type Reference */
  351. export declare type TypeNode = NamedTypeNode | ListTypeNode | NonNullTypeNode;
  352. export interface NamedTypeNode {
  353. readonly kind: Kind.NAMED_TYPE;
  354. readonly loc?: Location;
  355. readonly name: NameNode;
  356. }
  357. export interface ListTypeNode {
  358. readonly kind: Kind.LIST_TYPE;
  359. readonly loc?: Location;
  360. readonly type: TypeNode;
  361. }
  362. export interface NonNullTypeNode {
  363. readonly kind: Kind.NON_NULL_TYPE;
  364. readonly loc?: Location;
  365. readonly type: NamedTypeNode | ListTypeNode;
  366. }
  367. /** Type System Definition */
  368. export declare type TypeSystemDefinitionNode =
  369. | SchemaDefinitionNode
  370. | TypeDefinitionNode
  371. | DirectiveDefinitionNode;
  372. export interface SchemaDefinitionNode {
  373. readonly kind: Kind.SCHEMA_DEFINITION;
  374. readonly loc?: Location;
  375. readonly description?: StringValueNode;
  376. readonly directives?: ReadonlyArray<ConstDirectiveNode>;
  377. readonly operationTypes: ReadonlyArray<OperationTypeDefinitionNode>;
  378. }
  379. export interface OperationTypeDefinitionNode {
  380. readonly kind: Kind.OPERATION_TYPE_DEFINITION;
  381. readonly loc?: Location;
  382. readonly operation: OperationTypeNode;
  383. readonly type: NamedTypeNode;
  384. }
  385. /** Type Definition */
  386. export declare type TypeDefinitionNode =
  387. | ScalarTypeDefinitionNode
  388. | ObjectTypeDefinitionNode
  389. | InterfaceTypeDefinitionNode
  390. | UnionTypeDefinitionNode
  391. | EnumTypeDefinitionNode
  392. | InputObjectTypeDefinitionNode;
  393. export interface ScalarTypeDefinitionNode {
  394. readonly kind: Kind.SCALAR_TYPE_DEFINITION;
  395. readonly loc?: Location;
  396. readonly description?: StringValueNode;
  397. readonly name: NameNode;
  398. readonly directives?: ReadonlyArray<ConstDirectiveNode>;
  399. }
  400. export interface ObjectTypeDefinitionNode {
  401. readonly kind: Kind.OBJECT_TYPE_DEFINITION;
  402. readonly loc?: Location;
  403. readonly description?: StringValueNode;
  404. readonly name: NameNode;
  405. readonly interfaces?: ReadonlyArray<NamedTypeNode>;
  406. readonly directives?: ReadonlyArray<ConstDirectiveNode>;
  407. readonly fields?: ReadonlyArray<FieldDefinitionNode>;
  408. }
  409. export interface FieldDefinitionNode {
  410. readonly kind: Kind.FIELD_DEFINITION;
  411. readonly loc?: Location;
  412. readonly description?: StringValueNode;
  413. readonly name: NameNode;
  414. readonly arguments?: ReadonlyArray<InputValueDefinitionNode>;
  415. readonly type: TypeNode;
  416. readonly directives?: ReadonlyArray<ConstDirectiveNode>;
  417. }
  418. export interface InputValueDefinitionNode {
  419. readonly kind: Kind.INPUT_VALUE_DEFINITION;
  420. readonly loc?: Location;
  421. readonly description?: StringValueNode;
  422. readonly name: NameNode;
  423. readonly type: TypeNode;
  424. readonly defaultValue?: ConstValueNode;
  425. readonly directives?: ReadonlyArray<ConstDirectiveNode>;
  426. }
  427. export interface InterfaceTypeDefinitionNode {
  428. readonly kind: Kind.INTERFACE_TYPE_DEFINITION;
  429. readonly loc?: Location;
  430. readonly description?: StringValueNode;
  431. readonly name: NameNode;
  432. readonly interfaces?: ReadonlyArray<NamedTypeNode>;
  433. readonly directives?: ReadonlyArray<ConstDirectiveNode>;
  434. readonly fields?: ReadonlyArray<FieldDefinitionNode>;
  435. }
  436. export interface UnionTypeDefinitionNode {
  437. readonly kind: Kind.UNION_TYPE_DEFINITION;
  438. readonly loc?: Location;
  439. readonly description?: StringValueNode;
  440. readonly name: NameNode;
  441. readonly directives?: ReadonlyArray<ConstDirectiveNode>;
  442. readonly types?: ReadonlyArray<NamedTypeNode>;
  443. }
  444. export interface EnumTypeDefinitionNode {
  445. readonly kind: Kind.ENUM_TYPE_DEFINITION;
  446. readonly loc?: Location;
  447. readonly description?: StringValueNode;
  448. readonly name: NameNode;
  449. readonly directives?: ReadonlyArray<ConstDirectiveNode>;
  450. readonly values?: ReadonlyArray<EnumValueDefinitionNode>;
  451. }
  452. export interface EnumValueDefinitionNode {
  453. readonly kind: Kind.ENUM_VALUE_DEFINITION;
  454. readonly loc?: Location;
  455. readonly description?: StringValueNode;
  456. readonly name: NameNode;
  457. readonly directives?: ReadonlyArray<ConstDirectiveNode>;
  458. }
  459. export interface InputObjectTypeDefinitionNode {
  460. readonly kind: Kind.INPUT_OBJECT_TYPE_DEFINITION;
  461. readonly loc?: Location;
  462. readonly description?: StringValueNode;
  463. readonly name: NameNode;
  464. readonly directives?: ReadonlyArray<ConstDirectiveNode>;
  465. readonly fields?: ReadonlyArray<InputValueDefinitionNode>;
  466. }
  467. /** Directive Definitions */
  468. export interface DirectiveDefinitionNode {
  469. readonly kind: Kind.DIRECTIVE_DEFINITION;
  470. readonly loc?: Location;
  471. readonly description?: StringValueNode;
  472. readonly name: NameNode;
  473. readonly arguments?: ReadonlyArray<InputValueDefinitionNode>;
  474. readonly repeatable: boolean;
  475. readonly locations: ReadonlyArray<NameNode>;
  476. }
  477. /** Type System Extensions */
  478. export declare type TypeSystemExtensionNode =
  479. | SchemaExtensionNode
  480. | TypeExtensionNode;
  481. export interface SchemaExtensionNode {
  482. readonly kind: Kind.SCHEMA_EXTENSION;
  483. readonly loc?: Location;
  484. readonly directives?: ReadonlyArray<ConstDirectiveNode>;
  485. readonly operationTypes?: ReadonlyArray<OperationTypeDefinitionNode>;
  486. }
  487. /** Type Extensions */
  488. export declare type TypeExtensionNode =
  489. | ScalarTypeExtensionNode
  490. | ObjectTypeExtensionNode
  491. | InterfaceTypeExtensionNode
  492. | UnionTypeExtensionNode
  493. | EnumTypeExtensionNode
  494. | InputObjectTypeExtensionNode;
  495. export interface ScalarTypeExtensionNode {
  496. readonly kind: Kind.SCALAR_TYPE_EXTENSION;
  497. readonly loc?: Location;
  498. readonly name: NameNode;
  499. readonly directives?: ReadonlyArray<ConstDirectiveNode>;
  500. }
  501. export interface ObjectTypeExtensionNode {
  502. readonly kind: Kind.OBJECT_TYPE_EXTENSION;
  503. readonly loc?: Location;
  504. readonly name: NameNode;
  505. readonly interfaces?: ReadonlyArray<NamedTypeNode>;
  506. readonly directives?: ReadonlyArray<ConstDirectiveNode>;
  507. readonly fields?: ReadonlyArray<FieldDefinitionNode>;
  508. }
  509. export interface InterfaceTypeExtensionNode {
  510. readonly kind: Kind.INTERFACE_TYPE_EXTENSION;
  511. readonly loc?: Location;
  512. readonly name: NameNode;
  513. readonly interfaces?: ReadonlyArray<NamedTypeNode>;
  514. readonly directives?: ReadonlyArray<ConstDirectiveNode>;
  515. readonly fields?: ReadonlyArray<FieldDefinitionNode>;
  516. }
  517. export interface UnionTypeExtensionNode {
  518. readonly kind: Kind.UNION_TYPE_EXTENSION;
  519. readonly loc?: Location;
  520. readonly name: NameNode;
  521. readonly directives?: ReadonlyArray<ConstDirectiveNode>;
  522. readonly types?: ReadonlyArray<NamedTypeNode>;
  523. }
  524. export interface EnumTypeExtensionNode {
  525. readonly kind: Kind.ENUM_TYPE_EXTENSION;
  526. readonly loc?: Location;
  527. readonly name: NameNode;
  528. readonly directives?: ReadonlyArray<ConstDirectiveNode>;
  529. readonly values?: ReadonlyArray<EnumValueDefinitionNode>;
  530. }
  531. export interface InputObjectTypeExtensionNode {
  532. readonly kind: Kind.INPUT_OBJECT_TYPE_EXTENSION;
  533. readonly loc?: Location;
  534. readonly name: NameNode;
  535. readonly directives?: ReadonlyArray<ConstDirectiveNode>;
  536. readonly fields?: ReadonlyArray<InputValueDefinitionNode>;
  537. }