225 lines
5.4 KiB
JavaScript
225 lines
5.4 KiB
JavaScript
'use strict';
|
|
|
|
Object.defineProperty(exports, '__esModule', {
|
|
value: true,
|
|
});
|
|
exports.Token =
|
|
exports.QueryDocumentKeys =
|
|
exports.OperationTypeNode =
|
|
exports.Location =
|
|
void 0;
|
|
exports.isNode = isNode;
|
|
|
|
/**
|
|
* Contains a range of UTF-8 character offsets and token references that
|
|
* identify the region of the source from which the AST derived.
|
|
*/
|
|
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.
|
|
*/
|
|
|
|
exports.Location = Location;
|
|
|
|
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.
|
|
*/
|
|
|
|
exports.Token = Token;
|
|
|
|
/**
|
|
* @internal
|
|
*/
|
|
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'],
|
|
};
|
|
exports.QueryDocumentKeys = QueryDocumentKeys;
|
|
const kindValues = new Set(Object.keys(QueryDocumentKeys));
|
|
/**
|
|
* @internal
|
|
*/
|
|
|
|
function isNode(maybeNode) {
|
|
const maybeKind =
|
|
maybeNode === null || maybeNode === void 0 ? void 0 : maybeNode.kind;
|
|
return typeof maybeKind === 'string' && kindValues.has(maybeKind);
|
|
}
|
|
/** Name */
|
|
|
|
var OperationTypeNode;
|
|
exports.OperationTypeNode = OperationTypeNode;
|
|
|
|
(function (OperationTypeNode) {
|
|
OperationTypeNode['QUERY'] = 'query';
|
|
OperationTypeNode['MUTATION'] = 'mutation';
|
|
OperationTypeNode['SUBSCRIPTION'] = 'subscription';
|
|
})(OperationTypeNode || (exports.OperationTypeNode = OperationTypeNode = {}));
|