You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
209 lines
5.0 KiB
209 lines
5.0 KiB
5 months ago
|
/**
|
||
|
* Contains a range of UTF-8 character offsets and token references that
|
||
|
* identify the region of the source from which the AST derived.
|
||
|
*/
|
||
|
export class Location {
|
||
|
/**
|
||
|
* The character offset at which this Node begins.
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* The character offset at which this Node ends.
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* The Token at which this Node begins.
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* The Token at which this Node ends.
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* The Source document the AST represents.
|
||
|
*/
|
||
|
constructor(startToken, endToken, source) {
|
||
|
this.start = startToken.start;
|
||
|
this.end = endToken.end;
|
||
|
this.startToken = startToken;
|
||
|
this.endToken = endToken;
|
||
|
this.source = source;
|
||
|
}
|
||
|
|
||
|
get [Symbol.toStringTag]() {
|
||
|
return 'Location';
|
||
|
}
|
||
|
|
||
|
toJSON() {
|
||
|
return {
|
||
|
start: this.start,
|
||
|
end: this.end,
|
||
|
};
|
||
|
}
|
||
|
}
|
||
|
/**
|
||
|
* Represents a range of characters represented by a lexical token
|
||
|
* within a Source.
|
||
|
*/
|
||
|
|
||
|
export class Token {
|
||
|
/**
|
||
|
* The kind of Token.
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* The character offset at which this Node begins.
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* The character offset at which this Node ends.
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* The 1-indexed line number on which this Token appears.
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* The 1-indexed column number at which this Token begins.
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* For non-punctuation tokens, represents the interpreted value of the token.
|
||
|
*
|
||
|
* Note: is undefined for punctuation tokens, but typed as string for
|
||
|
* convenience in the parser.
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Tokens exist as nodes in a double-linked-list amongst all tokens
|
||
|
* including ignored tokens. <SOF> is always the first node and <EOF>
|
||
|
* the last.
|
||
|
*/
|
||
|
constructor(kind, start, end, line, column, value) {
|
||
|
this.kind = kind;
|
||
|
this.start = start;
|
||
|
this.end = end;
|
||
|
this.line = line;
|
||
|
this.column = column; // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
||
|
|
||
|
this.value = value;
|
||
|
this.prev = null;
|
||
|
this.next = null;
|
||
|
}
|
||
|
|
||
|
get [Symbol.toStringTag]() {
|
||
|
return 'Token';
|
||
|
}
|
||
|
|
||
|
toJSON() {
|
||
|
return {
|
||
|
kind: this.kind,
|
||
|
value: this.value,
|
||
|
line: this.line,
|
||
|
column: this.column,
|
||
|
};
|
||
|
}
|
||
|
}
|
||
|
/**
|
||
|
* The list of all possible AST node types.
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* @internal
|
||
|
*/
|
||
|
export const QueryDocumentKeys = {
|
||
|
Name: [],
|
||
|
Document: ['definitions'],
|
||
|
OperationDefinition: [
|
||
|
'name',
|
||
|
'variableDefinitions',
|
||
|
'directives',
|
||
|
'selectionSet',
|
||
|
],
|
||
|
VariableDefinition: ['variable', 'type', 'defaultValue', 'directives'],
|
||
|
Variable: ['name'],
|
||
|
SelectionSet: ['selections'],
|
||
|
Field: ['alias', 'name', 'arguments', 'directives', 'selectionSet'],
|
||
|
Argument: ['name', 'value'],
|
||
|
FragmentSpread: ['name', 'directives'],
|
||
|
InlineFragment: ['typeCondition', 'directives', 'selectionSet'],
|
||
|
FragmentDefinition: [
|
||
|
'name', // Note: fragment variable definitions are deprecated and will removed in v17.0.0
|
||
|
'variableDefinitions',
|
||
|
'typeCondition',
|
||
|
'directives',
|
||
|
'selectionSet',
|
||
|
],
|
||
|
IntValue: [],
|
||
|
FloatValue: [],
|
||
|
StringValue: [],
|
||
|
BooleanValue: [],
|
||
|
NullValue: [],
|
||
|
EnumValue: [],
|
||
|
ListValue: ['values'],
|
||
|
ObjectValue: ['fields'],
|
||
|
ObjectField: ['name', 'value'],
|
||
|
Directive: ['name', 'arguments'],
|
||
|
NamedType: ['name'],
|
||
|
ListType: ['type'],
|
||
|
NonNullType: ['type'],
|
||
|
SchemaDefinition: ['description', 'directives', 'operationTypes'],
|
||
|
OperationTypeDefinition: ['type'],
|
||
|
ScalarTypeDefinition: ['description', 'name', 'directives'],
|
||
|
ObjectTypeDefinition: [
|
||
|
'description',
|
||
|
'name',
|
||
|
'interfaces',
|
||
|
'directives',
|
||
|
'fields',
|
||
|
],
|
||
|
FieldDefinition: ['description', 'name', 'arguments', 'type', 'directives'],
|
||
|
InputValueDefinition: [
|
||
|
'description',
|
||
|
'name',
|
||
|
'type',
|
||
|
'defaultValue',
|
||
|
'directives',
|
||
|
],
|
||
|
InterfaceTypeDefinition: [
|
||
|
'description',
|
||
|
'name',
|
||
|
'interfaces',
|
||
|
'directives',
|
||
|
'fields',
|
||
|
],
|
||
|
UnionTypeDefinition: ['description', 'name', 'directives', 'types'],
|
||
|
EnumTypeDefinition: ['description', 'name', 'directives', 'values'],
|
||
|
EnumValueDefinition: ['description', 'name', 'directives'],
|
||
|
InputObjectTypeDefinition: ['description', 'name', 'directives', 'fields'],
|
||
|
DirectiveDefinition: ['description', 'name', 'arguments', 'locations'],
|
||
|
SchemaExtension: ['directives', 'operationTypes'],
|
||
|
ScalarTypeExtension: ['name', 'directives'],
|
||
|
ObjectTypeExtension: ['name', 'interfaces', 'directives', 'fields'],
|
||
|
InterfaceTypeExtension: ['name', 'interfaces', 'directives', 'fields'],
|
||
|
UnionTypeExtension: ['name', 'directives', 'types'],
|
||
|
EnumTypeExtension: ['name', 'directives', 'values'],
|
||
|
InputObjectTypeExtension: ['name', 'directives', 'fields'],
|
||
|
};
|
||
|
const kindValues = new Set(Object.keys(QueryDocumentKeys));
|
||
|
/**
|
||
|
* @internal
|
||
|
*/
|
||
|
|
||
|
export function isNode(maybeNode) {
|
||
|
const maybeKind =
|
||
|
maybeNode === null || maybeNode === void 0 ? void 0 : maybeNode.kind;
|
||
|
return typeof maybeKind === 'string' && kindValues.has(maybeKind);
|
||
|
}
|
||
|
/** Name */
|
||
|
|
||
|
var OperationTypeNode;
|
||
|
|
||
|
(function (OperationTypeNode) {
|
||
|
OperationTypeNode['QUERY'] = 'query';
|
||
|
OperationTypeNode['MUTATION'] = 'mutation';
|
||
|
OperationTypeNode['SUBSCRIPTION'] = 'subscription';
|
||
|
})(OperationTypeNode || (OperationTypeNode = {}));
|
||
|
|
||
|
export { OperationTypeNode };
|