graphql_server@1.0.0
This commit is contained in:
parent
b244335c92
commit
fdf7d21a76
4 changed files with 87 additions and 1 deletions
|
@ -1,3 +1,7 @@
|
||||||
|
# 1.0.0
|
||||||
|
* Finish testing.
|
||||||
|
* Add `package:pedantic` fixes.
|
||||||
|
|
||||||
# 1.0.0-rc.0
|
# 1.0.0-rc.0
|
||||||
* Get the Apollo support working with the latest version of `subscriptions-transport-ws`.
|
* Get the Apollo support working with the latest version of `subscriptions-transport-ws`.
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
# graphql_server
|
# graphql_server
|
||||||
|
[![Pub](https://img.shields.io/pub/v/graphql_server.svg)](https://pub.dartlang.org/packages/graphql_server)
|
||||||
|
[![build status](https://travis-ci.org/angel-dart/graphql.svg)](https://travis-ci.org/angel-dart/graphql)
|
||||||
|
|
||||||
Base package for implementing GraphQL servers.
|
Base package for implementing GraphQL servers.
|
||||||
You might prefer [`package:angel_graphql`](https://github.com/angel-dart/graphql),
|
You might prefer [`package:angel_graphql`](https://github.com/angel-dart/graphql),
|
||||||
the fastest way to implement GraphQL backends in Dart.
|
the fastest way to implement GraphQL backends in Dart.
|
||||||
|
@ -44,6 +47,34 @@ a `Stream`. Ultimately, the transport for relaying subscription
|
||||||
events to clients is not specified in the GraphQL spec, so it's
|
events to clients is not specified in the GraphQL spec, so it's
|
||||||
up to you.
|
up to you.
|
||||||
|
|
||||||
|
Note that in a schema like this:
|
||||||
|
|
||||||
|
```graphql
|
||||||
|
type TodoSubscription {
|
||||||
|
onTodo: TodoAdded!
|
||||||
|
}
|
||||||
|
|
||||||
|
type TodoAdded {
|
||||||
|
id: ID!
|
||||||
|
text: String!
|
||||||
|
isComplete: Bool
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Your Dart schema's resolver for `onTodo` should be
|
||||||
|
a `Map` *containing an `onTodo` key*:
|
||||||
|
|
||||||
|
```dart
|
||||||
|
field(
|
||||||
|
'onTodo',
|
||||||
|
todoAddedType,
|
||||||
|
resolve: (_, __) {
|
||||||
|
return someStreamOfTodos()
|
||||||
|
.map((todo) => {'onTodo': todo});
|
||||||
|
},
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
For the purposes of reusing existing tooling (i.e. JS clients, etc.),
|
For the purposes of reusing existing tooling (i.e. JS clients, etc.),
|
||||||
`package:graphql_server` rolls with an implementation of Apollo's
|
`package:graphql_server` rolls with an implementation of Apollo's
|
||||||
`subscriptions-transport-ws` spec.
|
`subscriptions-transport-ws` spec.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
name: graphql_server
|
name: graphql_server
|
||||||
version: 1.0.0-rc.0
|
version: 1.0.0
|
||||||
author: Tobe O <thosakwe@gmail.com>
|
author: Tobe O <thosakwe@gmail.com>
|
||||||
description: Base package for implementing GraphQL servers. You might prefer `package:angel_graphql`, the fastest way to implement GraphQL backends in Dart.
|
description: Base package for implementing GraphQL servers. You might prefer `package:angel_graphql`, the fastest way to implement GraphQL backends in Dart.
|
||||||
homepage: https://github.com/angel-dart/graphql
|
homepage: https://github.com/angel-dart/graphql
|
||||||
|
|
51
graphql_server/test/subscription_test.dart
Normal file
51
graphql_server/test/subscription_test.dart
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
import 'dart:async';
|
||||||
|
import 'package:graphql_schema/graphql_schema.dart';
|
||||||
|
import 'package:graphql_server/graphql_server.dart';
|
||||||
|
import 'package:test/test.dart';
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
var episodes = [
|
||||||
|
{'name': 'The Phantom Menace'},
|
||||||
|
{'name': 'Attack of the Clones'},
|
||||||
|
{'name': 'Attack of the Clones'}
|
||||||
|
];
|
||||||
|
var episodesAsData = episodes.map((ep) {
|
||||||
|
return {
|
||||||
|
'data': {'prequels': ep}
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
Stream<Map<String, dynamic>> resolveEpisodes(_, __) =>
|
||||||
|
Stream.fromIterable(episodes)
|
||||||
|
.map((ep) => {'prequels': ep, 'not_selected': 1337});
|
||||||
|
|
||||||
|
var episodeType = objectType('Episode', fields: [
|
||||||
|
field('name', graphQLString.nonNullable()),
|
||||||
|
field('not_selected', graphQLInt),
|
||||||
|
]);
|
||||||
|
|
||||||
|
var schema = graphQLSchema(
|
||||||
|
queryType: objectType('TestQuery', fields: [
|
||||||
|
field('episodes', graphQLInt, resolve: (_, __) => episodes),
|
||||||
|
]),
|
||||||
|
subscriptionType: objectType('TestSubscription', fields: [
|
||||||
|
field('prequels', episodeType, resolve: resolveEpisodes),
|
||||||
|
]),
|
||||||
|
);
|
||||||
|
|
||||||
|
var graphQL = GraphQL(schema);
|
||||||
|
|
||||||
|
test('subscribe with selection', () async {
|
||||||
|
var stream = await graphQL.parseAndExecute('''
|
||||||
|
subscription {
|
||||||
|
prequels {
|
||||||
|
name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
''') as Stream<Map<String, dynamic>>;
|
||||||
|
|
||||||
|
var asList = await stream.toList();
|
||||||
|
print(asList);
|
||||||
|
expect(asList, episodesAsData);
|
||||||
|
});
|
||||||
|
}
|
Loading…
Reference in a new issue