platform/lib/src/language/ast/operation_definition.dart
2017-07-04 15:27:47 -04:00

37 lines
1.1 KiB
Dart

import '../token.dart';
import 'definition.dart';
import 'directive.dart';
import 'package:source_span/src/span.dart';
import 'selection_set.dart';
import 'variable_definitions.dart';
class OperationDefinitionContext extends DefinitionContext {
final Token TYPE, NAME;
final VariableDefinitionsContext variableDefinitions;
final List<DirectiveContext> directives = [];
final SelectionSetContext selectionSet;
bool get isMutation => TYPE?.text == 'mutation';
bool get isQuery => TYPE?.text == 'query';
String get name => NAME?.text;
OperationDefinitionContext(
this.TYPE, this.NAME, this.variableDefinitions, this.selectionSet) {
assert(TYPE == null || TYPE.text == 'query' || TYPE.text == 'mutation');
}
@override
SourceSpan get span {
if (TYPE == null) return selectionSet.span;
return new SourceSpan(TYPE.span?.start, selectionSet.end, toSource());
}
@override
String toSource() {
if (TYPE == null) return selectionSet.toSource();
return '${TYPE.text} ${NAME.text} ${variableDefinitions.toSource()} ' +
directives.map((d) => d.toSource()).join() +
' ${selectionSet.toSource()}';
}
}