platform/example/visitor.dart

50 lines
1.1 KiB
Dart
Raw Normal View History

2017-07-04 19:27:47 +00:00
import 'package:graphql_parser/graphql_parser.dart';
import 'package:graphql_parser/visitor.dart';
const String QUERY = '''
{
foo,
baz: bar
}
''';
const Map<String, dynamic> DATA = const {
'foo': 'hello',
'bar': 'world',
'quux': 'extraneous'
};
main() {
// Highly-simplified querying example...
var result = new MapQuerier(DATA).execute(QUERY);
print(result); // { foo: hello, baz: world }
print(result['foo']); // hello
print(result['baz']); // world
}
class MapQuerier extends GraphQLVisitor {
final Map<String, dynamic> data;
final Map<String, dynamic> result = {};
MapQuerier(this.data);
Map<String, dynamic> execute(String query) {
var doc = new Parser(scan(query)).parseDocument();
visitDocument(doc);
return result;
}
@override
visitField(FieldContext ctx) {
String realName, alias;
if (ctx.fieldName.alias == null)
realName = alias = ctx.fieldName.name;
else {
realName = ctx.fieldName.alias.name;
alias = ctx.fieldName.alias.alias;
}
// Set output field...
result[alias] = data[realName];
}
}