All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Added new
ResolveWith
descriptor method. #1892 - Added support for local schema authentication and multi delegation.
- Added nullable detection with Required attribute.
- Added support for expression syntax on field selectors
descriptor.Field(t => t.Foo.Bar)
. #2157 - Added TimeSpan scalar.
- Added support for field-scoped services (services that only live for the duration of the field execution).
- Added new
ID
attribute to streamline global object identifiers. #2165 - Added bew
ID
descriptor to streamline global object identifiers. #2166
- Impoved the connection API for easier integration. #1887
- Unsealed AuthorizeAttribute. #1993
- Expose character-set in content-type.
- Use invariant culture when parsing numbers in AnyType #2134
- Changed behavior of
SubscribeAttribute
to align better with the behaviour of version 11. - Changed ID serializer to align better with the behaviour of version 11.
- Fixed ambiguous Nullable Attribute. #1982
- Fixed projection of __typename. #2009
- Fix stitching serialization invalid json. #2024 #1972 #2091
- Fixed the serialization formatter for decimals. #1940
- Fixed deprecation delegation for schema stitching.
- Fixed optional handling when deserializing input values. #2133 #2153 #2158
- Fixed compile error in templates.
- Fixed schema type discovery issues.
- Fixed field discovery for object type extensions.
- We now infer default values from parameters and properties. #1471
- Added support for un-ignore #1458
- Introduced new state attributes #1478
- Added new subscription pub/sub system API. #1480
- Added support for value task to the type discovery.
- Added DataLoader Base Classes #1505
- Added support for IQueryable Projections #1446
- Changed type member discovery #1502
- The context data on types now use less memory.
- Changed result serialization from Json.NET to System.Text.Json.
- Fixed issue where the backing type was rejected during deserialization.
- Fixed issue where nullable properties lead to errors in the sorting middleware #1419
- Fixed introspection issue where the
__type
field caused an error when the type specified in the argument did not exist. - Fixed the generation of not equal expression for
IComparable
types. - Fixed issue where the type dependencies of type extension where not correctly merged with the target type.
- Fixed
UUID
type serialization.
- Fixed handling of variables when delegating data fetching through the stitching context. #1390
- Fixed issue that caused errors when collecting fields on a directive context
- Fixed default hash provider dependency injection configuration #1363
- Fixed argument non-null validation.
- Fixed variable coercion.
- Fixed issue where input fields were no longer automatically converted.
- Fixed issue where the float was rounded when provided as variable.
- Fixed issue that private setters where not used during input deserialization.
- Infer non-nullability from C# ref types enhancement. #1236
- Descriptor Attributes. #1238
- Introduced Subscribe Resolver for IAsyncEnumerable #1262
- Added support for generic object type extensions. #1297
- Added authorize attribute. #1238
- Added paging attribute. #1306
- Added filter attribute. #1306
- Added sorting attribute. #1306
- Added initial support for
Optional<T>
. #1317 - Added support for immutable input types. #1317
- Stop adding the __typename field when it's in selection on schema stitching. #1248
- Improved Type Discovery. #1281
- Create a new service scope when cloning RequestContext in subscriptions. #1211
- Explicit binding of sorting types lead to errors. #1055
- Detect if an
IQueryable
already has a sorting. #1253 - Fixed issue with custom scalar types in delegated fields (schema stitching). #1221
- Fixed issue where the rented buffer was too early returned. #1277
- Fixed handling of rewritten non-null reference types. #1288
- Fixed clr type binding for issue with new type discovery. #1304
- Fixed parser error handling in middleware. #1028
- Fixed directive delegation (@skip/@include) in stitching. #937
- Added
Any
type. #1055 - Added non-generic
Type(Type type)
methods on field descriptors to allow for more dynamic schema generation. #1079 - Added
ArgumentKind(name)
to resolver context (#1134) - Added FilterInputType customization methods. (#1150)
- Made filter operation fields public and introduced interfaces.
- Use original operation name in stitched queries. #1124
- FilterTypes produce schema errors when filters properties are nullable. #1034
- MongoDB & Filter on
Boolean
property: the "_not" filter throws an exception. #1033 - Input object is not validated when given entirely as a variable #1074
- Variables parsing: Issue with nested
DateTime
fields in variables #1037 - DateTime Filters not working. #1036
- Date Filters not returning any result for equals filter #1035
- Subscription is not working with variables #1176
- Relay node field did not show in SDL #1175
- Filter issues and added more filter tests. #1170
- SelectionSetNode.AddSelections() did not add the new selections but duplicated the old ones. #1142
- The complecity middleware when multiplier where activated did only take the firs level into account. #1137
- Errors when attempting to filter on nullable types. #1121
- Distinguish between HTTP and remote schema errors with schema stitching. #1063
- Fixed issue with the request parser when requests are issued from relay-modern-http-transport. #1024
- Fixed Utf8GraphQLRequestParser handling of Apollo AQP signature query.
- Fixed Apollo Active Query Persistence Flow #1049
- Fixed scoped service handling. #1066
- Fixed Duplicate service registration. #1066
- Added support to infer if a field or enum value is deprecated. #826
- Added filter types. #861
- Added UTF-8 request parser. #869
- Added new syntax visitor API.
- Added Redis subscription provider #902
- Added support for batching over HTTP #933
- Added support for persisted queries and added a middleware to enable the active persisted query flow. #858
- Provide access to variables through IResolverContext. #958
- Added ability to control when the schem stitching will pull in the remote schemas. #964
- Added support to register class DataLoader with the standard dependency injection. #966
- Added support for ObsoleteAttribute. Fields & enum values that are annotated with ObsoleteAttribute become deprecated.
- Add Redis Provider for Subscriptions #902
- Added not authenticated error code.
- Added TryAddProperty, TryAddExtension and TryAddVariable to query request builder
- Added support for persisted queries with providers for the file system and Redis. #858
- Added support for middleware on introspection fields. #962
- Added default binding behavior option to schema options. #963
- Added support for directives on enum values with schema first #815
- Added DataLoader Dependency Injection Support. #966
- Added AddDocumentFromFile to SchemaBuilder. #974
- Added error filter ServiceCollection extensions #973
- Added schema validation rule that ensures that interfaces are implemented. #979
- Subscription now uses pipeline API to abstract sockets. #807
- Improved parser performance. #806
- Roles collection on authorization directive is now interpreted as OR.
- The type conversion API is now better integreated with dependency injection.
- The server is now more modularized and the various server middlewares can be added separably.
- context.Parent() converts now the result if the source object is not of the type of T
- Update GraphQL-Voyager to 1.0.0-rc.27 #972
- The parent method on the resolver context now uses the converters if the source object type does not align with the requested type.
- Aligned the deprecation handling with the GraphQL spec. #876
- Fixed the StateAttribute for resolvers. #887
- Order of types in a serialized schema is now consistent. #891
- Respect UseXmlDocumentation with Schema.Create #897
- Variables now work in lists and input objects #896
- Fixed url scalar now correctly detects url strings.
- Support directives declared stitched schemas #936
- Fixed issues with filters and variables. #960
- Fixed issues stitching lists. #946
- Fixed source link support. #943
- Fixed dead-lock issues with the DataLoader #942
- Fixed UrlType IsInstanceOfType method to correctly return true for a Url StringValueNode.
- Fixed Date and DateTime handling in the stitching layer.
- Fixed subscriptions with InputObject arguments #975
- Fixed Playground, GraphiQL and Voyager path logic in middleware options object. #984
- Exceptions are now correctly removed from the remote error data structure so that no exception information leaks.
- Fixed IResolverContext.CollectFields issue where the provided selection set was not passed to the underlying field collection algoritm. #994
- Fixed variable coercion so that we are now throwing GraphQL errors if the wrong type is passed. #991
- Fixed type rename issue in the stitching layer when types where nun-null types. #998
- Fixed paging flaws that in some cases lead to the connection type being registered twice. #842
- Fixed issues where the type initializer would swallow schema errors.
- Fixed issues with list input types.
- Better error message when failing TypeConvertion enhancement #819
- Fixed list argument conversion issue. #823
- Added new SchemaBuilder. #369
- Added code-first type extensions. #683
- Added support for schema description. spec
- Added resolver overloads to schema builder.
- Added new UTF-8 parser
- Added support for schema directives. spec
- Added two phase argument coercion.
- Added two phase field collection.
- Added GraphQL attributes support on parameters. 726
- Added support for directives on variable definitions spec
- Added support for directives on enum values spec
- Added support for directives on arguments spec
- Added support for XML documentation 715
- Added access to stitched http response headers (e.g. Set-Cookie) 679
- Added helper to add delegation paths to a field.
- It is now possible to bind .net types explicitly to schema types with SchemaBuilder.New().BindClrType<ClrType, SchemaType>(). 756
- Added support for schema-first bindings on the
SchemaBuilder
API. 781
- Replaced roslyn compiler with the expression compiler. This will reduce the memory footprint of the server.
- Changed how the server caches queries.
DiagnosticNames
is now public.- Reworked how input object arguments are cached #805
- Removed obsolete QueryDocument from IResolverContext.
- Removed obsolete CancellationToken from IResolverContext
- Includes directive definitions in serialized schema #717
- Field types are now validated. #713
- Variables in object values and lists are now correctly recognised #215 and #745.
- Fixed issue with input type arguments on the stitching layer
- Delegate Directive not being assigned correctly with ITypeRewriter. #766
- Format Exception when registering types. #787
- The schema factory does not throw an exception if an annotated directive is not correct. #619
- Temprarily fixed issues with type system directives. We will add a final patch with the next release.
- Fixed issues with external resolver overwrites.
- Fixed authorization directive validation issues #804
- Fixed schema initialization issues
- Fixed paging extension overloads #811
- Fixed null reference exception in Path.Equals #802
0.8.2 - 2019-04-10
- Some scalars did not work in stitched schemas and lead to a serialization exception.
- IntValueNode IValueNode.Equals was not implemented correctly and lead always to false. #681
0.8.1 - 2019-03-29
- Added operation start/stop event.
- Added error filter support for schema stitching.
- Default complexity calculation functions are now public.
- Diagnostic observers can now be defined as schema services.
- auto-stitching diagnostic call is now implemented in two phases.
- Custom diagnostic observer registration issue #629.
- Authorization argument coercion is now fixed. #624
- The request path is now compared correctly.
- IErrorFilter is not given the exception unless IncludeExceptionDetails is enabled. #637
- Parse and validation event tracked wrong duration.
- Schema-First descriptions are now correctly included into the schema. #647
- __type argument was named
type
instead ofname
. spec - The server template is now working again. #657
- Non-nullable types are now validated when query uses variables. #651
- Variable handling im middleware does not convert the DateTime value anymore. #664
- Directives are now correctly merged when declared in an extension file. #665
- Subscription is now optional in the 2-phase introspection call #668
0.8.0 - 2019-03-03
- The stitching layer now batches requests to the remote schemas.
- Introspection schema serializer.
- Introduced auto-stitching capabilities with the new
StitchingBuilder
. - GraphQL Voyager. Special thanks to @drowhunter who contributed the middleware.
- The authoization directive is now more aligned how the authorize attribute in ASP .Net works.
- Introspection default values are now serialized correctly.
- Added missing validation rule: https://facebook.github.io/graphql/June2018/#sec-All-Variable-Uses-Defined
- The non-null value violation is now propagated correctly. https://facebook.github.io/graphql/June2018/#sec-Errors
0.7.0 - 2019-02-03
- Query Middleware #338.
- Field Middleware #338.
- Implemented the relay cursor connections specification.
- Added another
ReportError
overload toIResolverContext
that takesIError
#359. - Added a schema endpoint that will let you download the server schema file #370.
- Added SyntaxRewriter and SyntaxWalker classes to enable developers to extend the execution pipeline more easily.
- Introduced a new execution builder which allows to fully customize the execution pipeline.
- Introduced exception filter #317.
- Integrated
RequestTimeoutMiddleware
into default pipeline #418. - Added support for repeatable directive. Spec.
- Apollo Tracing Support #352.
- Query complexity validation rules #80
- Added support for relay global object identification specification specification.
- Added Source Code Link for NuGet support.
- Added support for a executor scoped field middleware #482.
- Added schema stitching capabilities #341.
- Added generic interface type #546.
- Added directives support for input objects #548.
- Added optional totalCount field to the connection type #558.
- Added support for dynamic generated schema types #558.
- Added generic union type #552.
- Added options to AddStitchedSchema #556.
- Added scoped context data to the resolver context #537.
- Merged ASP.NET core and classic codebases #349.
- Made the type conversion API extendable and added more default type converter #384.
- Separated the schema config from the execution config #324
- Changed how max query depth is validated and configured.
- The DataLoader API is now offering a simpler interface.
- Extended Scalar Types must now be explicitly registered during schema configuration. #433
- Authorization directive is now repeatable and can use the default authorization policy #485
- UsePaging can now be used without specifying the clr type #558.
- The edge node type can now be any output type including list #558.
- Field merging of node fields did not work properly.
- DateTime is now parsed independent of the current culture #547.
- The
Schema.Execute...
extension methods are depricated and will be removed with the next version.
- Execution options from the schema options. They can now be configured with the
QueryExecutionBuilder
.
0.6.11 - 2018-12-06
- Improve
IObjectTypeDescriptor
interface #390.
0.6.10 - 2018-12-05
- Non-generic dataloader configration extensions.
0.6.9 - 2018-11-30
- Non-generic method to register a dataloader.
0.6.8 - 2018-11-29
- Non-generic register methods to schema configuration.
- Ignore on
InputObjectType
fields didn't work properly.
0.6.7 - 2018-11-25
- Non-nullable arguments are being inferred as nullable bug #360.
0.6.6 - 2018-11-23
- Middleware bug that prevented the result to be passed along the pipeline.
0.6.5 - 2018-11-20
- Support for
GraphQLNonNullAttribute
. - Support for
Include
on object type to merge a resolver type into the object type. - Support for
GraphQLResolverAttribute
andGraphQLResolverForAttribute
.
0.6.4 - 2018-11-20
- The type discoverer ignored a type if it was already discovered in another context #350.
0.6.3 - 2018-11-19
- Validation issues with
NameString
.
0.6.2 - 2018-11-19
- Fixed:
byte[]
cannot be defined as a custom scalar #345.
0.6.1 - 2018-11-15
DateTimeType
now serializes UTCDateTime
toyyyy-MM-ddTHH\:mm\:ss.fffZ
.
- List Variable Coercion Failed.
- InputTypes are now discovered correctly.
0.6.0 - 2018-11-12
- Separate package providing a GraphiQL middleware. The middleware can serve all of GraphiQL without needing to refer to CDNs making it useful even in closed networks. Moreover, we have configured GraphiQL to work with the GraphQL-ws protocol which is supported by Hot Chocolate.
- Initial Support for GraphQL subscriptions. We currently support the GraphQL-ws protocol over web sockets. There will be a lot of additional work in version 0.7.0 that will harden it.
- Authorization package for ASP .Net core which supports policy-base authorization on fields.
- Diagnostic source which can be used to track field execution times and other events.
- Implementing a directive middleware has now become much easier with this release. We have built the authorize-directive with these new APIs.