Skip to content

Commit 62fac26

Browse files
committed
[Experimental] Subscription queries
This simply adds `subscription` as an operation kind to the parser and AST. No semantics or implementations are added here. This should unlock those who are beginning experimentation with GraphQL subscriptions.
1 parent f9a2877 commit 62fac26

File tree

3 files changed

+13
-2
lines changed

3 files changed

+13
-2
lines changed

src/language/__tests__/parser.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,14 @@ fragment ${fragmentName} on Type {
168168
});
169169
});
170170

171+
it('parses experimental subscription feature', () => {
172+
expect(() => parse(`
173+
subscription Foo {
174+
subscriptionField
175+
}
176+
`)).to.not.throw();
177+
});
178+
171179
it('parse creates ast', () => {
172180

173181
var source = new Source(`{

src/language/ast.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,8 @@ export type Definition = OperationDefinition
8181
export type OperationDefinition = {
8282
kind: 'OperationDefinition';
8383
loc?: ?Location;
84-
operation: 'query' | 'mutation';
84+
// Note: subscription is an experimental non-spec addition.
85+
operation: 'query' | 'mutation' | 'subscription';
8586
name?: ?Name;
8687
variableDefinitions?: ?Array<VariableDefinition>;
8788
directives?: ?Array<Directive>;

src/language/parser.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,9 @@ function parseDefinition(parser): Definition {
191191
if (peek(parser, TokenKind.NAME)) {
192192
switch (parser.token.value) {
193193
case 'query':
194-
case 'mutation': return parseOperationDefinition(parser);
194+
case 'mutation':
195+
// Note: subscription is an experimental non-spec addition.
196+
case 'subscription': return parseOperationDefinition(parser);
195197

196198
case 'fragment': return parseFragmentDefinition(parser);
197199

0 commit comments

Comments
 (0)