ql_gen 0.1.0 copy "ql_gen: ^0.1.0" to clipboard
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();
  }
}
2
likes
0
points
273
downloads

Publisher

unverified uploader

Weekly Downloads

A library for generating dart code from GraphQL schema.

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

args, http, tokenizer_parser

More

Packages that depend on ql_gen