Spaces:
Running
Running
import type { Maybe } from '../jsutils/Maybe'; | |
import type { GraphQLError } from '../error/GraphQLError'; | |
import type { | |
ArgumentNode, | |
ConstArgumentNode, | |
ConstDirectiveNode, | |
ConstListValueNode, | |
ConstObjectFieldNode, | |
ConstObjectValueNode, | |
ConstValueNode, | |
DefinitionNode, | |
DirectiveDefinitionNode, | |
DirectiveNode, | |
DocumentNode, | |
EnumTypeDefinitionNode, | |
EnumTypeExtensionNode, | |
EnumValueDefinitionNode, | |
FieldDefinitionNode, | |
FieldNode, | |
FragmentDefinitionNode, | |
FragmentSpreadNode, | |
InlineFragmentNode, | |
InputObjectTypeDefinitionNode, | |
InputObjectTypeExtensionNode, | |
InputValueDefinitionNode, | |
InterfaceTypeDefinitionNode, | |
InterfaceTypeExtensionNode, | |
ListValueNode, | |
NamedTypeNode, | |
NameNode, | |
ObjectFieldNode, | |
ObjectTypeDefinitionNode, | |
ObjectTypeExtensionNode, | |
ObjectValueNode, | |
OperationDefinitionNode, | |
OperationTypeDefinitionNode, | |
ScalarTypeDefinitionNode, | |
ScalarTypeExtensionNode, | |
SchemaDefinitionNode, | |
SchemaExtensionNode, | |
SelectionNode, | |
SelectionSetNode, | |
StringValueNode, | |
Token, | |
TypeNode, | |
TypeSystemExtensionNode, | |
UnionTypeDefinitionNode, | |
UnionTypeExtensionNode, | |
ValueNode, | |
VariableDefinitionNode, | |
VariableNode, | |
} from './ast'; | |
import { Location, OperationTypeNode } from './ast'; | |
import { Lexer } from './lexer'; | |
import { Source } from './source'; | |
import { TokenKind } from './tokenKind'; | |
/** | |
* Configuration options to control parser behavior | |
*/ | |
export interface ParseOptions { | |
/** | |
* By default, the parser creates AST nodes that know the location | |
* in the source that they correspond to. This configuration flag | |
* disables that behavior for performance or testing. | |
*/ | |
noLocation?: boolean; | |
/** | |
* Parser CPU and memory usage is linear to the number of tokens in a document | |
* however in extreme cases it becomes quadratic due to memory exhaustion. | |
* Parsing happens before validation so even invalid queries can burn lots of | |
* CPU time and memory. | |
* To prevent this you can set a maximum number of tokens allowed within a document. | |
*/ | |
maxTokens?: number | undefined; | |
/** | |
* @deprecated will be removed in the v17.0.0 | |
* | |
* If enabled, the parser will understand and parse variable definitions | |
* contained in a fragment definition. They'll be represented in the | |
* `variableDefinitions` field of the FragmentDefinitionNode. | |
* | |
* The syntax is identical to normal, query-defined variables. For example: | |
* | |
* ```graphql | |
* fragment A($var: Boolean = false) on T { | |
* ... | |
* } | |
* ``` | |
*/ | |
allowLegacyFragmentVariables?: boolean; | |
} | |
/** | |
* Given a GraphQL source, parses it into a Document. | |
* Throws GraphQLError if a syntax error is encountered. | |
*/ | |
export declare function parse( | |
source: string | Source, | |
options?: ParseOptions | undefined, | |
): DocumentNode; | |
/** | |
* Given a string containing a GraphQL value (ex. `[42]`), parse the AST for | |
* that value. | |
* Throws GraphQLError if a syntax error is encountered. | |
* | |
* This is useful within tools that operate upon GraphQL Values directly and | |
* in isolation of complete GraphQL documents. | |
* | |
* Consider providing the results to the utility function: valueFromAST(). | |
*/ | |
export declare function parseValue( | |
source: string | Source, | |
options?: ParseOptions | undefined, | |
): ValueNode; | |
/** | |
* Similar to parseValue(), but raises a parse error if it encounters a | |
* variable. The return type will be a constant value. | |
*/ | |
export declare function parseConstValue( | |
source: string | Source, | |
options?: ParseOptions | undefined, | |
): ConstValueNode; | |
/** | |
* Given a string containing a GraphQL Type (ex. `[Int!]`), parse the AST for | |
* that type. | |
* Throws GraphQLError if a syntax error is encountered. | |
* | |
* This is useful within tools that operate upon GraphQL Types directly and | |
* in isolation of complete GraphQL documents. | |
* | |
* Consider providing the results to the utility function: typeFromAST(). | |
*/ | |
export declare function parseType( | |
source: string | Source, | |
options?: ParseOptions | undefined, | |
): TypeNode; | |
/** | |
* This class is exported only to assist people in implementing their own parsers | |
* without duplicating too much code and should be used only as last resort for cases | |
* such as experimental syntax or if certain features could not be contributed upstream. | |
* | |
* It is still part of the internal API and is versioned, so any changes to it are never | |
* considered breaking changes. If you still need to support multiple versions of the | |
* library, please use the `versionInfo` variable for version detection. | |
* | |
* @internal | |
*/ | |
export declare class Parser { | |
protected _options: ParseOptions; | |
protected _lexer: Lexer; | |
protected _tokenCounter: number; | |
constructor(source: string | Source, options?: ParseOptions); | |
get tokenCount(): number; | |
/** | |
* Converts a name lex token into a name parse node. | |
*/ | |
parseName(): NameNode; | |
/** | |
* Document : Definition+ | |
*/ | |
parseDocument(): DocumentNode; | |
/** | |
* Definition : | |
* - ExecutableDefinition | |
* - TypeSystemDefinition | |
* - TypeSystemExtension | |
* | |
* ExecutableDefinition : | |
* - OperationDefinition | |
* - FragmentDefinition | |
* | |
* TypeSystemDefinition : | |
* - SchemaDefinition | |
* - TypeDefinition | |
* - DirectiveDefinition | |
* | |
* TypeDefinition : | |
* - ScalarTypeDefinition | |
* - ObjectTypeDefinition | |
* - InterfaceTypeDefinition | |
* - UnionTypeDefinition | |
* - EnumTypeDefinition | |
* - InputObjectTypeDefinition | |
*/ | |
parseDefinition(): DefinitionNode; | |
/** | |
* OperationDefinition : | |
* - SelectionSet | |
* - OperationType Name? VariableDefinitions? Directives? SelectionSet | |
*/ | |
parseOperationDefinition(): OperationDefinitionNode; | |
/** | |
* OperationType : one of query mutation subscription | |
*/ | |
parseOperationType(): OperationTypeNode; | |
/** | |
* VariableDefinitions : ( VariableDefinition+ ) | |
*/ | |
parseVariableDefinitions(): Array<VariableDefinitionNode>; | |
/** | |
* VariableDefinition : Variable : Type DefaultValue? Directives[Const]? | |
*/ | |
parseVariableDefinition(): VariableDefinitionNode; | |
/** | |
* Variable : $ Name | |
*/ | |
parseVariable(): VariableNode; | |
/** | |
* ``` | |
* SelectionSet : { Selection+ } | |
* ``` | |
*/ | |
parseSelectionSet(): SelectionSetNode; | |
/** | |
* Selection : | |
* - Field | |
* - FragmentSpread | |
* - InlineFragment | |
*/ | |
parseSelection(): SelectionNode; | |
/** | |
* Field : Alias? Name Arguments? Directives? SelectionSet? | |
* | |
* Alias : Name : | |
*/ | |
parseField(): FieldNode; | |
/** | |
* Arguments[Const] : ( Argument[?Const]+ ) | |
*/ | |
parseArguments(isConst: true): Array<ConstArgumentNode>; | |
parseArguments(isConst: boolean): Array<ArgumentNode>; | |
/** | |
* Argument[Const] : Name : Value[?Const] | |
*/ | |
parseArgument(isConst: true): ConstArgumentNode; | |
parseArgument(isConst?: boolean): ArgumentNode; | |
parseConstArgument(): ConstArgumentNode; | |
/** | |
* Corresponds to both FragmentSpread and InlineFragment in the spec. | |
* | |
* FragmentSpread : ... FragmentName Directives? | |
* | |
* InlineFragment : ... TypeCondition? Directives? SelectionSet | |
*/ | |
parseFragment(): FragmentSpreadNode | InlineFragmentNode; | |
/** | |
* FragmentDefinition : | |
* - fragment FragmentName on TypeCondition Directives? SelectionSet | |
* | |
* TypeCondition : NamedType | |
*/ | |
parseFragmentDefinition(): FragmentDefinitionNode; | |
/** | |
* FragmentName : Name but not `on` | |
*/ | |
parseFragmentName(): NameNode; | |
/** | |
* Value[Const] : | |
* - [~Const] Variable | |
* - IntValue | |
* - FloatValue | |
* - StringValue | |
* - BooleanValue | |
* - NullValue | |
* - EnumValue | |
* - ListValue[?Const] | |
* - ObjectValue[?Const] | |
* | |
* BooleanValue : one of `true` `false` | |
* | |
* NullValue : `null` | |
* | |
* EnumValue : Name but not `true`, `false` or `null` | |
*/ | |
parseValueLiteral(isConst: true): ConstValueNode; | |
parseValueLiteral(isConst: boolean): ValueNode; | |
parseConstValueLiteral(): ConstValueNode; | |
parseStringLiteral(): StringValueNode; | |
/** | |
* ListValue[Const] : | |
* - [ ] | |
* - [ Value[?Const]+ ] | |
*/ | |
parseList(isConst: true): ConstListValueNode; | |
parseList(isConst: boolean): ListValueNode; | |
/** | |
* ``` | |
* ObjectValue[Const] : | |
* - { } | |
* - { ObjectField[?Const]+ } | |
* ``` | |
*/ | |
parseObject(isConst: true): ConstObjectValueNode; | |
parseObject(isConst: boolean): ObjectValueNode; | |
/** | |
* ObjectField[Const] : Name : Value[?Const] | |
*/ | |
parseObjectField(isConst: true): ConstObjectFieldNode; | |
parseObjectField(isConst: boolean): ObjectFieldNode; | |
/** | |
* Directives[Const] : Directive[?Const]+ | |
*/ | |
parseDirectives(isConst: true): Array<ConstDirectiveNode>; | |
parseDirectives(isConst: boolean): Array<DirectiveNode>; | |
parseConstDirectives(): Array<ConstDirectiveNode>; | |
/** | |
* ``` | |
* Directive[Const] : @ Name Arguments[?Const]? | |
* ``` | |
*/ | |
parseDirective(isConst: true): ConstDirectiveNode; | |
parseDirective(isConst: boolean): DirectiveNode; | |
/** | |
* Type : | |
* - NamedType | |
* - ListType | |
* - NonNullType | |
*/ | |
parseTypeReference(): TypeNode; | |
/** | |
* NamedType : Name | |
*/ | |
parseNamedType(): NamedTypeNode; | |
peekDescription(): boolean; | |
/** | |
* Description : StringValue | |
*/ | |
parseDescription(): undefined | StringValueNode; | |
/** | |
* ``` | |
* SchemaDefinition : Description? schema Directives[Const]? { OperationTypeDefinition+ } | |
* ``` | |
*/ | |
parseSchemaDefinition(): SchemaDefinitionNode; | |
/** | |
* OperationTypeDefinition : OperationType : NamedType | |
*/ | |
parseOperationTypeDefinition(): OperationTypeDefinitionNode; | |
/** | |
* ScalarTypeDefinition : Description? scalar Name Directives[Const]? | |
*/ | |
parseScalarTypeDefinition(): ScalarTypeDefinitionNode; | |
/** | |
* ObjectTypeDefinition : | |
* Description? | |
* type Name ImplementsInterfaces? Directives[Const]? FieldsDefinition? | |
*/ | |
parseObjectTypeDefinition(): ObjectTypeDefinitionNode; | |
/** | |
* ImplementsInterfaces : | |
* - implements `&`? NamedType | |
* - ImplementsInterfaces & NamedType | |
*/ | |
parseImplementsInterfaces(): Array<NamedTypeNode>; | |
/** | |
* ``` | |
* FieldsDefinition : { FieldDefinition+ } | |
* ``` | |
*/ | |
parseFieldsDefinition(): Array<FieldDefinitionNode>; | |
/** | |
* FieldDefinition : | |
* - Description? Name ArgumentsDefinition? : Type Directives[Const]? | |
*/ | |
parseFieldDefinition(): FieldDefinitionNode; | |
/** | |
* ArgumentsDefinition : ( InputValueDefinition+ ) | |
*/ | |
parseArgumentDefs(): Array<InputValueDefinitionNode>; | |
/** | |
* InputValueDefinition : | |
* - Description? Name : Type DefaultValue? Directives[Const]? | |
*/ | |
parseInputValueDef(): InputValueDefinitionNode; | |
/** | |
* InterfaceTypeDefinition : | |
* - Description? interface Name Directives[Const]? FieldsDefinition? | |
*/ | |
parseInterfaceTypeDefinition(): InterfaceTypeDefinitionNode; | |
/** | |
* UnionTypeDefinition : | |
* - Description? union Name Directives[Const]? UnionMemberTypes? | |
*/ | |
parseUnionTypeDefinition(): UnionTypeDefinitionNode; | |
/** | |
* UnionMemberTypes : | |
* - = `|`? NamedType | |
* - UnionMemberTypes | NamedType | |
*/ | |
parseUnionMemberTypes(): Array<NamedTypeNode>; | |
/** | |
* EnumTypeDefinition : | |
* - Description? enum Name Directives[Const]? EnumValuesDefinition? | |
*/ | |
parseEnumTypeDefinition(): EnumTypeDefinitionNode; | |
/** | |
* ``` | |
* EnumValuesDefinition : { EnumValueDefinition+ } | |
* ``` | |
*/ | |
parseEnumValuesDefinition(): Array<EnumValueDefinitionNode>; | |
/** | |
* EnumValueDefinition : Description? EnumValue Directives[Const]? | |
*/ | |
parseEnumValueDefinition(): EnumValueDefinitionNode; | |
/** | |
* EnumValue : Name but not `true`, `false` or `null` | |
*/ | |
parseEnumValueName(): NameNode; | |
/** | |
* InputObjectTypeDefinition : | |
* - Description? input Name Directives[Const]? InputFieldsDefinition? | |
*/ | |
parseInputObjectTypeDefinition(): InputObjectTypeDefinitionNode; | |
/** | |
* ``` | |
* InputFieldsDefinition : { InputValueDefinition+ } | |
* ``` | |
*/ | |
parseInputFieldsDefinition(): Array<InputValueDefinitionNode>; | |
/** | |
* TypeSystemExtension : | |
* - SchemaExtension | |
* - TypeExtension | |
* | |
* TypeExtension : | |
* - ScalarTypeExtension | |
* - ObjectTypeExtension | |
* - InterfaceTypeExtension | |
* - UnionTypeExtension | |
* - EnumTypeExtension | |
* - InputObjectTypeDefinition | |
*/ | |
parseTypeSystemExtension(): TypeSystemExtensionNode; | |
/** | |
* ``` | |
* SchemaExtension : | |
* - extend schema Directives[Const]? { OperationTypeDefinition+ } | |
* - extend schema Directives[Const] | |
* ``` | |
*/ | |
parseSchemaExtension(): SchemaExtensionNode; | |
/** | |
* ScalarTypeExtension : | |
* - extend scalar Name Directives[Const] | |
*/ | |
parseScalarTypeExtension(): ScalarTypeExtensionNode; | |
/** | |
* ObjectTypeExtension : | |
* - extend type Name ImplementsInterfaces? Directives[Const]? FieldsDefinition | |
* - extend type Name ImplementsInterfaces? Directives[Const] | |
* - extend type Name ImplementsInterfaces | |
*/ | |
parseObjectTypeExtension(): ObjectTypeExtensionNode; | |
/** | |
* InterfaceTypeExtension : | |
* - extend interface Name ImplementsInterfaces? Directives[Const]? FieldsDefinition | |
* - extend interface Name ImplementsInterfaces? Directives[Const] | |
* - extend interface Name ImplementsInterfaces | |
*/ | |
parseInterfaceTypeExtension(): InterfaceTypeExtensionNode; | |
/** | |
* UnionTypeExtension : | |
* - extend union Name Directives[Const]? UnionMemberTypes | |
* - extend union Name Directives[Const] | |
*/ | |
parseUnionTypeExtension(): UnionTypeExtensionNode; | |
/** | |
* EnumTypeExtension : | |
* - extend enum Name Directives[Const]? EnumValuesDefinition | |
* - extend enum Name Directives[Const] | |
*/ | |
parseEnumTypeExtension(): EnumTypeExtensionNode; | |
/** | |
* InputObjectTypeExtension : | |
* - extend input Name Directives[Const]? InputFieldsDefinition | |
* - extend input Name Directives[Const] | |
*/ | |
parseInputObjectTypeExtension(): InputObjectTypeExtensionNode; | |
/** | |
* ``` | |
* DirectiveDefinition : | |
* - Description? directive @ Name ArgumentsDefinition? `repeatable`? on DirectiveLocations | |
* ``` | |
*/ | |
parseDirectiveDefinition(): DirectiveDefinitionNode; | |
/** | |
* DirectiveLocations : | |
* - `|`? DirectiveLocation | |
* - DirectiveLocations | DirectiveLocation | |
*/ | |
parseDirectiveLocations(): Array<NameNode>; | |
parseDirectiveLocation(): NameNode; | |
/** | |
* Returns a node that, if configured to do so, sets a "loc" field as a | |
* location object, used to identify the place in the source that created a | |
* given parsed object. | |
*/ | |
node< | |
T extends { | |
loc?: Location; | |
}, | |
>(startToken: Token, node: T): T; | |
/** | |
* Determines if the next token is of a given kind | |
*/ | |
peek(kind: TokenKind): boolean; | |
/** | |
* If the next token is of the given kind, return that token after advancing the lexer. | |
* Otherwise, do not change the parser state and throw an error. | |
*/ | |
expectToken(kind: TokenKind): Token; | |
/** | |
* If the next token is of the given kind, return "true" after advancing the lexer. | |
* Otherwise, do not change the parser state and return "false". | |
*/ | |
expectOptionalToken(kind: TokenKind): boolean; | |
/** | |
* If the next token is a given keyword, advance the lexer. | |
* Otherwise, do not change the parser state and throw an error. | |
*/ | |
expectKeyword(value: string): void; | |
/** | |
* If the next token is a given keyword, return "true" after advancing the lexer. | |
* Otherwise, do not change the parser state and return "false". | |
*/ | |
expectOptionalKeyword(value: string): boolean; | |
/** | |
* Helper function for creating an error when an unexpected lexed token is encountered. | |
*/ | |
unexpected(atToken?: Maybe<Token>): GraphQLError; | |
/** | |
* Returns a possibly empty list of parse nodes, determined by the parseFn. | |
* This list begins with a lex token of openKind and ends with a lex token of closeKind. | |
* Advances the parser to the next lex token after the closing token. | |
*/ | |
any<T>(openKind: TokenKind, parseFn: () => T, closeKind: TokenKind): Array<T>; | |
/** | |
* Returns a list of parse nodes, determined by the parseFn. | |
* It can be empty only if open token is missing otherwise it will always return non-empty list | |
* that begins with a lex token of openKind and ends with a lex token of closeKind. | |
* Advances the parser to the next lex token after the closing token. | |
*/ | |
optionalMany<T>( | |
openKind: TokenKind, | |
parseFn: () => T, | |
closeKind: TokenKind, | |
): Array<T>; | |
/** | |
* Returns a non-empty list of parse nodes, determined by the parseFn. | |
* This list begins with a lex token of openKind and ends with a lex token of closeKind. | |
* Advances the parser to the next lex token after the closing token. | |
*/ | |
many<T>( | |
openKind: TokenKind, | |
parseFn: () => T, | |
closeKind: TokenKind, | |
): Array<T>; | |
/** | |
* Returns a non-empty list of parse nodes, determined by the parseFn. | |
* This list may begin with a lex token of delimiterKind followed by items separated by lex tokens of tokenKind. | |
* Advances the parser to the next lex token after last item in the list. | |
*/ | |
delimitedMany<T>(delimiterKind: TokenKind, parseFn: () => T): Array<T>; | |
advanceLexer(): void; | |
} | |