Skip to content

Commit eba0620

Browse files
committed
Improve Typings
1 parent 375de5b commit eba0620

15 files changed

+515
-486
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
## Experimental Online Parser
2+
3+
This directory contains an experimental online parser based on JSON rules set. It is a state-full parser which parses a source string incrementally i.e. emits a token each time.
4+
5+
The parser is being migrated from graphiql to graphql-js and may have frequent breaking changes.
6+
7+
Example:
8+
9+
```js
10+
import { OnlineParser } from 'graphql/language/experimentalOnlineParser';
11+
12+
const source = `
13+
query SomeQuery {
14+
some_field {
15+
another_field
16+
}
17+
}
18+
`;
19+
20+
const parser = new OnlineParser(source);
21+
let token;
22+
23+
do {
24+
token = parser.parseToken();
25+
} while (token.kind !== '<EOF>' && token.kind !== 'Invalid');
26+
```
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
export interface GraphQLGrammarType {
2+
rules: GraphQLGrammarRules;
3+
}
4+
5+
export interface GraphQLGrammarRules {
6+
[name: string]: GraphQLGrammarRule;
7+
}
8+
9+
export declare type GraphQLGrammarRule =
10+
| GraphQLGrammarRuleName
11+
| GraphQLGrammarRuleConstraint
12+
| GraphQLGrammarConstraintsSet;
13+
14+
export declare type GraphQLGrammarRuleName = string;
15+
16+
export declare type GraphQLGrammarRuleConstraint =
17+
| GraphQLGrammarTokenConstraint
18+
| GraphQLGrammarOfTypeConstraint
19+
| GraphQLGrammarListOfTypeConstraint
20+
| GraphQLGrammarPeekConstraint;
21+
22+
export declare type GraphQLGrammarConstraintsSet = Array<
23+
GraphQLGrammarRuleName | GraphQLGrammarRuleConstraint
24+
>;
25+
26+
export interface GraphQLGrammarBaseRuleConstraint {
27+
butNot?: GraphQLGrammarTokenConstraint | Array<GraphQLGrammarTokenConstraint>;
28+
optional?: boolean;
29+
eatNextOnFail?: boolean;
30+
}
31+
32+
export interface GraphQLGrammarTokenConstraint
33+
extends GraphQLGrammarBaseRuleConstraint {
34+
token:
35+
| '!'
36+
| '$'
37+
| '&'
38+
| '('
39+
| ')'
40+
| '...'
41+
| ':'
42+
| '='
43+
| '@'
44+
| '['
45+
| ']'
46+
| '{'
47+
| '}'
48+
| '|'
49+
| 'Name'
50+
| 'Int'
51+
| 'Float'
52+
| 'String'
53+
| 'BlockString'
54+
| 'Comment';
55+
ofValue?: string;
56+
oneOf?: Array<string>;
57+
tokenName?: string;
58+
definitionName?: boolean;
59+
typeName?: boolean;
60+
}
61+
62+
export interface GraphQLGrammarOfTypeConstraint
63+
extends GraphQLGrammarBaseRuleConstraint {
64+
ofType: GraphQLGrammarRule;
65+
tokenName?: string;
66+
}
67+
68+
export interface GraphQLGrammarListOfTypeConstraint
69+
extends GraphQLGrammarBaseRuleConstraint {
70+
listOfType: GraphQLGrammarRuleName;
71+
}
72+
73+
export interface GraphQLGrammarPeekConstraint
74+
extends GraphQLGrammarBaseRuleConstraint {
75+
peek: Array<GraphQLGrammarPeekConstraintCondition>;
76+
}
77+
78+
export interface GraphQLGrammarPeekConstraintCondition {
79+
ifCondition: GraphQLGrammarTokenConstraint;
80+
expect: GraphQLGrammarRule;
81+
end?: boolean;
82+
}
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
// @flow
2+
3+
export type GraphQLGrammarType = {|
4+
rules: GraphQLGrammarRules,
5+
|};
6+
7+
export interface GraphQLGrammarRules {
8+
[name: string]: GraphQLGrammarRule;
9+
}
10+
export type GraphQLGrammarRuleName = string;
11+
export type GraphQLGrammarRuleConstraint =
12+
| GraphQLGrammarTokenConstraint
13+
| GraphQLGrammarOfTypeConstraint
14+
| GraphQLGrammarListOfTypeConstraint
15+
| GraphQLGrammarPeekConstraint;
16+
export type GraphQLGrammarConstraintsSet = Array<
17+
GraphQLGrammarRuleName | GraphQLGrammarRuleConstraint,
18+
>;
19+
export type GraphQLGrammarRule =
20+
| GraphQLGrammarRuleName
21+
| GraphQLGrammarRuleConstraint
22+
| GraphQLGrammarConstraintsSet;
23+
export interface GraphQLGrammarBaseRuleConstraint {
24+
butNot?:
25+
| ?GraphQLGrammarTokenConstraint
26+
| ?Array<GraphQLGrammarTokenConstraint>;
27+
optional?: boolean;
28+
eatNextOnFail?: boolean;
29+
}
30+
export interface GraphQLGrammarTokenConstraint
31+
extends GraphQLGrammarBaseRuleConstraint {
32+
token:
33+
| '!'
34+
| '$'
35+
| '&'
36+
| '('
37+
| ')'
38+
| '...'
39+
| ':'
40+
| '='
41+
| '@'
42+
| '['
43+
| ']'
44+
| '{'
45+
| '}'
46+
| '|'
47+
| 'Name'
48+
| 'Int'
49+
| 'Float'
50+
| 'String'
51+
| 'BlockString'
52+
| 'Comment';
53+
ofValue?: ?string;
54+
oneOf?: ?Array<string>;
55+
tokenName?: string;
56+
definitionName?: boolean;
57+
typeName?: boolean;
58+
}
59+
export interface GraphQLGrammarOfTypeConstraint
60+
extends GraphQLGrammarBaseRuleConstraint {
61+
ofType: GraphQLGrammarRule;
62+
tokenName?: string;
63+
}
64+
export interface GraphQLGrammarListOfTypeConstraint
65+
extends GraphQLGrammarBaseRuleConstraint {
66+
listOfType: GraphQLGrammarRuleName;
67+
}
68+
export interface GraphQLGrammarPeekConstraint
69+
extends GraphQLGrammarBaseRuleConstraint {
70+
peek: Array<GraphQLGrammarPeekConstraintCondition>;
71+
}
72+
export interface GraphQLGrammarPeekConstraintCondition {
73+
ifCondition: GraphQLGrammarTokenConstraint;
74+
expect: GraphQLGrammarRule;
75+
end?: boolean;
76+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { OnlineParser, RuleKind, TokenKind } from './onlineParser';
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { OnlineParser, RuleKind, TokenKind } from './onlineParser';
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
import { Lexer } from '../lexer';
2+
3+
import {
4+
GraphQLGrammarTokenConstraint,
5+
GraphQLGrammarOfTypeConstraint,
6+
GraphQLGrammarListOfTypeConstraint,
7+
GraphQLGrammarPeekConstraint,
8+
GraphQLGrammarConstraintsSet,
9+
} from './grammarTypes';
10+
11+
interface BaseOnlineParserRule {
12+
kind: string;
13+
name?: string;
14+
depth: number;
15+
step: number;
16+
expanded: boolean;
17+
state: string;
18+
optional?: boolean;
19+
eatNextOnFail?: boolean;
20+
}
21+
interface TokenOnlineParserRule
22+
extends BaseOnlineParserRule,
23+
GraphQLGrammarTokenConstraint {}
24+
interface OfTypeOnlineParserRule
25+
extends BaseOnlineParserRule,
26+
GraphQLGrammarOfTypeConstraint {}
27+
interface ListOfTypeOnlineParserRule
28+
extends BaseOnlineParserRule,
29+
GraphQLGrammarListOfTypeConstraint {}
30+
interface PeekOnlineParserRule
31+
extends BaseOnlineParserRule,
32+
GraphQLGrammarPeekConstraint {
33+
index: number;
34+
matched: boolean;
35+
}
36+
interface ConstraintsSetOnlineParserRule extends BaseOnlineParserRule {
37+
constraintsSet: boolean;
38+
constraints: GraphQLGrammarConstraintsSet;
39+
}
40+
41+
declare type OnlineParserRule =
42+
| TokenOnlineParserRule
43+
| OfTypeOnlineParserRule
44+
| ListOfTypeOnlineParserRule
45+
| PeekOnlineParserRule
46+
| ConstraintsSetOnlineParserRule;
47+
48+
declare interface OnlineParserState {
49+
rules: Array<OnlineParserRule>;
50+
kind: () => string;
51+
step: () => number;
52+
levels: Array<number>;
53+
indentLevel: number | undefined;
54+
name: string | null;
55+
type: string | null;
56+
}
57+
58+
declare interface Token {
59+
kind: string;
60+
value?: string;
61+
tokenName?: string | undefined;
62+
ruleName?: string | undefined;
63+
}
64+
65+
declare type OnlineParserConfig = {
66+
tabSize: number;
67+
};
68+
69+
declare type OnlineParserConfigOption = {
70+
tabSize?: number;
71+
};
72+
73+
export declare class OnlineParser {
74+
state: OnlineParserState;
75+
_lexer: Lexer;
76+
_config: OnlineParserConfig;
77+
constructor(
78+
source: string,
79+
state?: OnlineParserState,
80+
config?: OnlineParserConfigOption,
81+
);
82+
static startState(): OnlineParserState;
83+
static copyState(state: OnlineParserState): OnlineParserState;
84+
sol(): boolean;
85+
parseToken(): Token;
86+
indentation(): number;
87+
private readonly _parseTokenConstraint;
88+
private readonly _parseListOfTypeConstraint;
89+
private readonly _parseOfTypeConstraint;
90+
private readonly _parsePeekConstraint;
91+
private readonly _parseConstraintsSetRule;
92+
private readonly _matchToken;
93+
private readonly _butNot;
94+
private readonly _transformLexerToken;
95+
private readonly _getNextRule;
96+
private readonly _popMatchedRule;
97+
private readonly _rollbackRule;
98+
private readonly _pushRule;
99+
private readonly _getRuleKind;
100+
private readonly _advanceToken;
101+
private readonly _lookAhead;
102+
}
103+
104+
export declare const TokenKind: {
105+
NAME: string;
106+
INT: string;
107+
FLOAT: string;
108+
STRING: string;
109+
BLOCK_STRING: string;
110+
COMMENT: string;
111+
PUNCTUATION: string;
112+
EOF: string;
113+
INVALID: string;
114+
};
115+
116+
export declare const RuleKind: {
117+
TOKEN_CONSTRAINT: string;
118+
OF_TYPE_CONSTRAINT: string;
119+
LIST_OF_TYPE_CONSTRAINT: string;
120+
PEEK_CONSTRAINT: string;
121+
CONSTRAINTS_SET: string;
122+
CONSTRAINTS_SET_ROOT: string;
123+
RULE_NAME: string;
124+
INVALID: string;
125+
};

0 commit comments

Comments
 (0)