ql_gen 0.1.0
ql_gen: ^0.1.0 copied to clipboard
A library for generating dart code from GraphQL schema.
QlGen #
QlGen is a library for generating dart code from GraphQL schema.
Features #
Given a GraphQL schema, QlGen generates dart code for the following:
- ✅ Types
- ✅ Queries
- ✅ Mutations
- [-] Subscriptions (not yet tested)
Getting started #
To use this package, add ql_gen as a dependency in your pubspec.yaml file.
Usage #
dart run .\bin\ql_gen.dart --help
-s, --source The source file
(defaults to "schema.gql")
-t, --target The target file
(defaults to "ql.dart")
-h, --help Prints this help message
dart run .\bin\ql_gen.dart -s static/test/schema.gql -t ql.dart
# schema.gql
type Author {
id: ID!
name: String!
books: [Book]
}
type Book {
id: ID!
title: String!
author: Author!
}
// ql.dart
// GENERATED CODE - DO NOT MODIFY BY HAND
class Author {
final String id;
final String name;
final List<Book?>? books;
const Author({
required this.id,
required this.name,
this.books,
});
factory Author.fromMap(Map<String, dynamic> data) {
return Author(
id: data['id'],
name: data['name'],
books: data['books'],
);
}
dynamic construct(dynamic data,
{dynamic Function(Map<String, dynamic>)? fromMap}) {
if (data is List) {
return data.map((e) => construct(e, fromMap: fromMap));
}
if (fromMap != null) {
return fromMap(data);
}
return data;
}
@override
String toString() {
StringBuffer output = StringBuffer();
output.writeln('{');
output.writeln('id: "$id"');
output.writeln('name: "$name"');
if (books != null) {
output.writeln('books: [');
output.writeln(books!.join(',\n'));
output.writeln(']');
}
output.writeln('}');
return output.toString();
}
}
class AuthorSelector {
final BookSelector? books;
const AuthorSelector({
this.books,
});
String select() {
StringBuffer output = StringBuffer();
output.writeln('{');
output.writeln('id');
output.writeln('name');
if (books != null) {
output.writeln('books ${books!.select()}');
}
output.writeln('}');
return output.toString();
}
}
class Book {
final String id;
final String title;
final Author author;
const Book({
required this.id,
required this.title,
required this.author,
});
factory Book.fromMap(Map<String, dynamic> data) {
return Book(
id: data['id'],
title: data['title'],
author: data['author'],
);
}
dynamic construct(dynamic data,
{dynamic Function(Map<String, dynamic>)? fromMap}) {
if (data is List) {
return data.map((e) => construct(e, fromMap: fromMap));
}
if (fromMap != null) {
return fromMap(data);
}
return data;
}
@override
String toString() {
StringBuffer output = StringBuffer();
output.writeln('{');
output.writeln('id: "$id"');
output.writeln('title: "$title"');
output.writeln('author: $author');
output.writeln('}');
return output.toString();
}
}
class BookSelector {
final AuthorSelector author;
const BookSelector({
this.author = const AuthorSelector(),
});
String select() {
StringBuffer output = StringBuffer();
output.writeln('{');
output.writeln('id');
output.writeln('title');
output.writeln('author ${author.select()}');
output.writeln('}');
return output.toString();
}
}