graphql-language-service
Version:
The official, runtime independent Language Service for GraphQL
156 lines (141 loc) • 3.91 kB
text/typescript
import { Kind } from 'graphql';
import { Maybe } from '../types';
import CharacterStream from './CharacterStream';
export type ContextToken = {
start: number;
end: number;
string: string;
state: State;
style?: string;
};
export type ContextTokenForCodeMirror = {
start: number;
end: number;
string: string;
type: string | null;
state: State;
};
export type ContextTokenUnion = ContextToken | ContextTokenForCodeMirror;
export type RuleOrString = Rule | string;
export type ParseRule =
| RuleOrString[]
| ((token: Token, stream: CharacterStream) => string | null | void);
export type Token = {
kind: string;
value: string;
};
export type Rule = {
style?: string;
match?: (token: Token) => boolean;
update?: (state: State, token: Token) => void;
separator?: string | Rule;
isList?: boolean;
ofRule?: Rule | string;
};
export type State = {
level: number;
levels?: number[];
prevState: Maybe<State>;
rule: Maybe<ParseRule>;
kind: Maybe<RuleKind>;
name: Maybe<string>;
type: Maybe<string>;
step: number;
needsSeparator: boolean;
needsAdvance?: boolean;
indentLevel?: number;
inBlockstring?: boolean;
};
export const AdditionalRuleKinds: _AdditionalRuleKinds = {
ALIASED_FIELD: 'AliasedField',
ARGUMENTS: 'Arguments',
SHORT_QUERY: 'ShortQuery',
QUERY: 'Query',
MUTATION: 'Mutation',
SUBSCRIPTION: 'Subscription',
TYPE_CONDITION: 'TypeCondition',
INVALID: 'Invalid',
COMMENT: 'Comment',
SCHEMA_DEF: 'SchemaDef',
SCALAR_DEF: 'ScalarDef',
OBJECT_TYPE_DEF: 'ObjectTypeDef',
OBJECT_VALUE: 'ObjectValue',
LIST_VALUE: 'ListValue',
INTERFACE_DEF: 'InterfaceDef',
UNION_DEF: 'UnionDef',
ENUM_DEF: 'EnumDef',
ENUM_VALUE: 'EnumValue',
FIELD_DEF: 'FieldDef',
INPUT_DEF: 'InputDef',
INPUT_VALUE_DEF: 'InputValueDef',
ARGUMENTS_DEF: 'ArgumentsDef',
EXTEND_DEF: 'ExtendDef',
EXTENSION_DEFINITION: 'ExtensionDefinition',
DIRECTIVE_DEF: 'DirectiveDef',
IMPLEMENTS: 'Implements',
VARIABLE_DEFINITIONS: 'VariableDefinitions',
TYPE: 'Type',
VARIABLE: 'Variable',
};
export type _AdditionalRuleKinds = {
ALIASED_FIELD: 'AliasedField';
ARGUMENTS: 'Arguments';
SHORT_QUERY: 'ShortQuery';
QUERY: 'Query';
MUTATION: 'Mutation';
SUBSCRIPTION: 'Subscription';
TYPE_CONDITION: 'TypeCondition';
INVALID: 'Invalid';
COMMENT: 'Comment';
SCHEMA_DEF: 'SchemaDef';
SCALAR_DEF: 'ScalarDef';
OBJECT_TYPE_DEF: 'ObjectTypeDef';
OBJECT_VALUE: 'ObjectValue';
LIST_VALUE: 'ListValue';
INTERFACE_DEF: 'InterfaceDef';
UNION_DEF: 'UnionDef';
ENUM_DEF: 'EnumDef';
ENUM_VALUE: 'EnumValue';
FIELD_DEF: 'FieldDef';
INPUT_DEF: 'InputDef';
INPUT_VALUE_DEF: 'InputValueDef';
ARGUMENTS_DEF: 'ArgumentsDef';
EXTEND_DEF: 'ExtendDef';
EXTENSION_DEFINITION: 'ExtensionDefinition';
DIRECTIVE_DEF: 'DirectiveDef';
IMPLEMENTS: 'Implements';
VARIABLE_DEFINITIONS: 'VariableDefinitions';
TYPE: 'Type';
VARIABLE: 'Variable';
};
export const RuleKinds = {
...Kind,
...AdditionalRuleKinds,
};
export type _RuleKinds = Omit<typeof Kind, 'VARIABLE'> &
typeof AdditionalRuleKinds;
export type RuleKind = _RuleKinds[keyof _RuleKinds];
export type RuleKindEnum = RuleKind;
export type TokenPattern = string | ((char: string) => boolean) | RegExp;
export interface CharacterStreamInterface {
getStartOfToken: () => number;
getCurrentPosition: () => number;
eol: () => boolean;
sol: () => boolean;
peek: () => string | null;
next: () => string;
eat: (pattern: TokenPattern) => string | undefined;
eatWhile: (match: TokenPattern) => boolean;
eatSpace: () => boolean;
skipToEnd: () => void;
skipTo: (position: number) => void;
match: (
pattern: TokenPattern,
consume?: Maybe<boolean>,
caseFold?: Maybe<boolean>,
) => string[] | boolean;
backUp: (num: number) => void;
column: () => number;
indentation: () => number;
current: () => string;
}