Commit Graph

152 Commits

Author SHA1 Message Date
Sunli
83a0028085 Fix the bug that ʻExtension::prepare_request` cannot get the correct request data through the context.
Add test code for extension.
2020-10-18 11:24:16 +08:00
Koxiaet
12fe7445c7 Replace futures with futures_util 2020-10-16 07:49:22 +01:00
Koxiaet
ec8ec740be Avoid locking extensions mutex when possible 2020-10-16 06:52:52 +01:00
Koxiaet
1205d6e91e Remove itertools dependency 2020-10-16 06:37:48 +01:00
Sunli
c99e0b2e54 Add Schema::names function. 2020-10-15 19:36:54 +08:00
Koxiaet
93c886af07 Make imports consistent 2020-10-15 07:38:10 +01:00
Sunli
25af42ed81 Improve performance 2020-10-12 14:49:32 +08:00
Sunli
87ba51fdd0 Some improvements. 2020-10-10 16:28:07 +08:00
Sunli
6afac75ccf Merge branch 'master' into rework-errors 2020-10-01 09:39:47 +08:00
Sunli
97f0b0d419 Merge branch 'master' into rework-errors 2020-10-01 09:07:19 +08:00
Koxiaet
4b20a21783 Fix compilation and tests 2020-09-30 19:40:17 +01:00
Koxiaet
768b666acd Merge master 2020-09-30 18:24:24 +01:00
Sunli
a95a532857 Added Apollo persisted queries extension. #280 2020-09-30 11:37:12 +08:00
Sunli
35f886a7f8 Improve trait for GraphQL types. 2020-09-30 07:45:48 +08:00
Koxiaet
50009b66ce Rework errors
This completely overhauls the error system used in async-graphql.
- `Error` has been renamed to `ServerError` and `FieldError` has been
renamed to just `Error`. This is because `FieldError` is by far the most
common error that users will have to use so it makes sense to use the
most obvious error name. Also, the current name didn't make sense as it
was used for things other than field errors, such as the data callback
for websockets.
- `ServerError` has been made completely opaque. Before it was an enum
of all the possible errors, but now it just contains an error message,
the locations, the path and extensions. It is a shame that we lose
information, it makes more sense as _conceptually_ GraphQL does not
provide that information. It also frees us to change the internals of
async-graphql a lot more.
- The path of errors is no longer an opaque JSON value but a regular
type, `Vec<PathSegment>`. The type duplication of `PathSegment` and
`QueryPathSegment` is unfortunate, I plan to work on this in the future.
- Now that `ServerError` is opaque, `RuleError` has been removed from
the public API, making it simpler.
- Additionally `QueryError` has been completely removed. Instead the
error messages are constructed ad-hoc; I took care to never repeat an
error message.
- Instead of constructing field-not-found errors inside the
implementations of field resolvers they now return `Option`s, where a
`None` value is representative of the field not being found.
- As an unfortunate consequence of the last change, self-referential
types based on the output of a subscription resolver can no longer be
created. This does not mean anything for users, but causes lifetime
issues in the implementation of merged objects. I fixed it with a bit of
a hack, but this'll have to be looked into further.
- `InputValueError` now has a generic parameter - it's kind of weird but
it's necessary for ergonomics. It also improves error messages.
- The `ErrorExtensions` trait has been removed. I didn't think the
`extend` method was necessary since `From` impls exist. But the
ergonomics are still there with a new trait `ExtendError`, which
is implemented for both errors and results.
- `Response` now supports serializing multiple errors. This allows for
nice things like having multiple validation errors not be awkwardly
shoved into a single error.
- When an error occurs in execution, data is sent as `null`. This is
slightly more compliant with the spec but the algorithm described in
<https://spec.graphql.org/June2018/#sec-Errors-and-Non-Nullability> has
yet to be implemented.
2020-09-29 20:06:44 +01:00
Sunli
4e7bb1a59c Added context for Extension. 2020-09-29 20:47:37 +08:00
Sunli
4d019f1d6f Update schema.rs 2020-09-27 19:13:12 +08:00
Sunli
fae50062e0 Fix the problem when generating Federation SDL. #283 2020-09-27 18:49:04 +08:00
Sunli
b47d08c5b5 Invoke extensions for execute_schema. 2020-09-26 15:52:59 +08:00
Sunli
312b8f13d8 Add Schema::sdl method. #191 2020-09-23 14:14:22 +08:00
Koxiaet
6947d95030 Merge branch 'master' of github.com-koxiaet:async-graphql/async-graphql into master 2020-09-22 20:03:33 +01:00
Koxiaet
49462cf05f Move some validations to parser
This commit moves the single anonymous and duplicated operation name
validation rules into the parser, allowing for a nicer format to be
exposed by it. It also adds better error messages to the parser.
2020-09-22 19:59:48 +01:00
Sunli
47329b9458 Add Request::extension method. #271 2020-09-21 15:53:07 +08:00
Koxiaet
d52268523f Merge branch 'master' of github.com-koxiaet:async-graphql/async-graphql into master 2020-09-17 19:23:15 +01:00
Koxiaet
890b282dd9 Improve websockets 2020-09-17 19:22:54 +01:00
Sunli
76257403e2 Add support for batch queries. 2020-09-17 19:54:12 +08:00
Sunli
5bb705bdf3 2.0.0-alpha.5 2020-09-14 09:46:22 +08:00
Koxiaet
6e628031bf Rework subscriptions
The main change in this commit is changing the return type of
SubscriptionType::create_stream from
Future<Result<Stream<Result<Response>>>> to just Stream<Result<Json>>. I
also allowed the returned stream to borrow from self and context.
2020-09-13 18:52:36 +01:00
Koxiaet
dcc7d1be14 Replace http::GQLRequest with Request 2020-09-12 17:07:46 +01:00
Koxiaet
35e74a4e17 Create resolver_utils 2020-09-12 10:29:52 +01:00
Sunli
a4fdf6a38a Re-enable the test on websocket. 2020-09-11 16:41:56 +08:00
Sunli
049b652dd6 Add transports::websocket module. 2020-09-11 15:54:56 +08:00
Sunli
35f17a389c Remove unnecessary Result on Schema::execute_stream function. 2020-09-11 10:47:55 +08:00
Sunli
91c75ced2a Make all tests passed (async-graphql). 2020-09-10 19:35:48 +08:00
Sunli
f3c0d86f12 Continue to refactor. 2020-09-10 16:39:43 +08:00
Sunli
ce0683e1f9 Initial attempt. 2020-09-10 12:49:08 +08:00
Koxiaet
47259548c4 Support service parsing in async-graphql-parser
- Instead of adding a separate module `schema` like there was before,
since service parsing and executable parsing have a fair amount of
overlap I put them as two submodules `executable` and `service` in both
`parse` and `types`. Also, the grammar is unified under one `.pest`
file.
- Added const equivalents to `Value`, `Directive` etc
- Change the reexport `async_graphql::Value` from
`async_graphql_parser::types::Value` to
`async_graphql_parser::types::ConstValue` since in 99% of cases in this library
a const value is wanted instead of a value.
- Added consistent usage of executable/service instead of the ambiguous
query/schema.
- Some of the tests actually had invalid GraphQL so the new more correct
grammar made them fail, that was fixed.
- Added a `Name` newtype to refer to GraphQL names
(`[A-Za-z_][A-Za-z_0-9]*`) since they are used so frequently.
2020-09-08 09:21:27 +01:00
Koxiaet
1c26ff124f Merge branch 'master' into master 2020-09-06 07:20:18 +01:00
Koxiaet
c055736101 Rustfmt 2020-09-06 07:16:36 +01:00
Koxiaet
81d85c2535 Rewrite async-graphql-parser 2020-09-06 06:38:31 +01:00
Sunli
613549d9c6 Remove unnecessary memory allocation. 2020-09-02 14:27:04 +08:00
Sunli
6a38057a22 Implements Default for Schema. 2020-08-28 14:19:35 +08:00
Sunli
8431c3a3d8 Rename SubscriptionTransport to ConnectionTransport. #240 2020-08-15 08:47:45 +08:00
Sunli
47174966fb Add directive @ifdef 2020-08-06 14:52:54 +08:00
Sunli
2cf350a5c8 Removes code about streaming requests. 2020-07-31 10:10:03 +08:00
Sunli
909ae5e64d Fix input validator is ignored when using variable #207 2020-07-11 10:05:30 +08:00
Sunli
7630fe1f51 Extension::Logger now provides more comprehensive error information. 2020-06-13 22:14:47 +08:00
Sunli
13e31ac9b1 Add QueryBuilder::extension function. #87 2020-06-05 15:42:29 +08:00
Sunli
ddd35315c9 Add SchemaBuilder::enable_federation #136 2020-06-02 08:49:27 +08:00
sunli
1069461873 Logger extensions filter out introspection. #87 2020-05-27 20:47:22 +08:00
Sunli
69367dc65f Fix potential security issues with subscription connections. 2020-05-26 13:35:13 +08:00
Sunli
1461210df7 Add logger extension 2020-05-22 11:58:49 +08:00
Sunli
24af597f30 Add StreamResponse type 2020-05-21 11:36:44 +08:00
Sunli
326fac2799 Add @stream directive 2020-05-21 10:12:54 +08:00
sunli
374023748d Add @defer support for actix-web 2020-05-20 20:10:40 +08:00
sunli
fe4b98e0a8 Solve problem #99 2020-05-20 15:44:59 +08:00
sunli
6f924efcf4 Add defer tests 2020-05-20 13:42:55 +08:00
Sunli
75bfba057a Add Deferred type and @defer directive. #51 2020-05-19 20:53:29 +08:00
sunli
a811f48952 Update schema.rs 2020-05-19 00:03:15 +08:00
sunli
10a8b71adb Preserve field order for introspection. #89 2020-05-16 10:05:48 +08:00
Sunli
f74652e61a Modify some type names (internal types) 2020-05-15 10:08:37 +08:00
sunli
8299a54456 Improve GraphQL query parser performance. #76 2020-05-12 16:27:06 +08:00
sunli
dc7c8d5280 Merge branch 'parser'
Implement a new GraphQL query parser and remove the dependency on graphql-parser.
2020-05-09 17:55:04 +08:00
sunli
220cd1e775 Report subscription stream errors to the client. 2020-05-03 16:02:46 +08:00
sunli
d7df065528 Fixed a bug that caused the subscription request to fail to receive any messages. #45 2020-05-03 10:06:17 +08:00
sunli
c9fe0e9393 Add some test 2020-05-03 09:12:14 +08:00
sunli
d564ce27f1 Websocket transport creates context data from the connect_init.payload property 2020-04-23 14:52:22 +08:00
sunli
a4781523fb v1.9.11
Add context data for subscription
2020-04-23 10:26:16 +08:00
sunli
c11ed53c48 Add SchemaBuilder::register_type method 2020-04-21 20:47:48 +08:00
sunli
09d5e5f489 v1.9.0 2020-04-14 09:53:17 +08:00
sunli
0b6bfd4c33 Add GQLHttpRequest and IntoQueryBuilder trait 2020-04-11 17:36:05 +08:00
sunli
86bdb422b1 Add federation support 2020-04-09 22:03:09 +08:00
sunli
5c710ff744 Add SimpleBroker 2020-04-07 14:30:46 +08:00
sunli
7b85062c6e v1.7.6 2020-04-06 19:57:21 +08:00
sunli
ed85c85bf4 Add subscription test 2020-04-06 18:30:38 +08:00
sunli
b88ac80084 The subscription field now returns a stream 2020-04-06 13:49:39 +08:00
sunli
1b05724390 If the field name or parameter name is wrong, give suggestion 2020-04-03 13:57:24 +08:00
sunli
506e82895f Add Schema::execute 2020-04-02 12:53:53 +08:00
sunli
14860d9b88 Reimplement the error type and remove the dependency on the anyhow::Error 2020-04-02 10:21:04 +08:00
sunli
b373e1397d remove PreparedQuery 2020-04-01 16:53:49 +08:00
sunli
a13204273e v1.6.8
Add context data support
2020-03-31 11:19:18 +08:00
sunli
9cdd0c45a3 v1.6.4 2020-03-29 20:02:52 +08:00
sunli
bc0d6603c1 v1.6.0 2020-03-26 11:34:28 +08:00
sunli
bf7332378c v1.5.2 2020-03-25 15:07:16 +08:00
sunli
788a3b558b v1.4.2 2020-03-22 09:34:32 +08:00
sunli
99f4184f83 Clippy cleanup 2020-03-21 09:32:13 +08:00
sunli
62b4908ffe v1.3.2 2020-03-20 11:56:08 +08:00
sunli
724cb21258 add GraphQL Cursor Connections 2020-03-19 17:20:12 +08:00
sunli
60b0282a89 Support subscription 2020-03-17 17:26:59 +08:00
sunli
41d8d618cc Update schema.rs 2020-03-15 15:32:54 +08:00
sunli
abfe861749 Add support for multipart request 2020-03-14 11:46:20 +08:00
sunli
18185ed7a2 v0.10.4 2020-03-09 18:05:52 +08:00
sunli
d7692414ea add some validation code 2020-03-08 20:35:36 +08:00
sunli
ce9ca29c3d implemented union type 2020-03-08 09:21:29 +08:00
sunli
69b3dea88c implemented interface 2020-03-06 23:58:43 +08:00
sunli
2351e75f2c fix some bug
add starwars example
2020-03-05 21:34:31 +08:00
sunli
b3340680ba v0.8.0 2020-03-05 17:06:14 +08:00
sunli
b3974737fc implemented query fragment 2020-03-05 15:50:57 +08:00
sunli
cc96dba8d8 add actix-web example 2020-03-05 08:39:56 +08:00
sunli
92a95dbbf4 implemented directive (@include, @skip) 2020-03-04 14:24:44 +08:00