- Initial release
- Introduced intermediate representation of GraphQL operation execution.
- Introduced ability to convert GraphQL query to LINQ.
- Replaced current asynchronous API resolver internals.
- Ability to use records as complex input variables.
- Minor bugfixes and performance optimizations.
- Introduced a sample for GraphQL over WebSocket Protocol
- Introduced support for Stream and Defer directives
- Minor bugfixes.
- Introduced support for middlewares in the execution pipeline.
- Introduced new package, named FSharp.Data.GraphQL.Server.Middleware, with generic, built-in middlewares.
- Introduced QueryWeightMiddleware, a generic execution middleware to measure query complexity and optionally block query execution with a threshold.
- Introduced ObjectListFilterMiddleware, a generic schema compile middleware to add filter options to list fields of specific objects.
- Changed GQLResponse object to be a Record, which supports a Metadata bag object, that can be used to hold custom information per query request.
- Changed FieldDef interface to be able to support a Metadata bag object, that can be used to hold custom information per field.
- ISchema TypeMap is now a mutable object, to ease schema customization through schema compile middlewares.
- Fixing many minor errors when deferring or streaming results with Union and Enum types (especially when queried using fragments).
- Deferred and streamed error results now are handled.
- Added support for nested deferred and streamed results (currently does have a maximum degree of two nested operations).
- Fix package dependency versions
- Upgraded dependencies on Newtonsoft.Json to the latest version.
- Changing subscription field definitions to have a generic output type - the output is not required to be a GraphQL type anymore.
- Implemented experimental support for @live directive, through a subscription system.
- Fixed a bug that caused an exception when ToString function is called on an empty NameValueLookup.
- Added support for asynchronous subscription field definitions.
- Fixes for introspection query
- Use string identifier to publish to subscription
- Breaking Change: Async Pub/Sub methods for subscription and live directive handler interfaces
- Add Long Scalar definition
- Add subscription field to introspection schema
- Add subscription field to introspection schema
- Fixed a bug where output def of a subscription field was not reachable for introspection.
- Deferred and Streamed results now return their fields in the direct result as well. The value of those fields will be an empty list or null.
- Live results now send the immediate result in the direct result, instead of the deferred result.
- Deferred and Streamed results fixes for GQL interfaces.
- Deferred and Streamed results fixes for GQL interfaces when at the top-level of query.
- Breaking Change The
ISubscriptionProviderinterface now has additional methods to publish to subscriptions by tag. - Breaking Change Renamed interface methods in
ISubscriptionProviderfrom XxAsync to AsyncXx to reserve the former for TPL extensions. - Fixes for stream and defer execution.
- Execute deferred results in parallel.
- Fix dispose of deferred/stream responses.
- Breaking Change New type provider API! see samples/client-provider for details.
- Fixes for #216 enum as a variable.
- Upgraded paket and dependencies.
- Breaking Change GraphQLProvider now makes Nullable GraphQL inputs optional method arguments instead of options
- Breaking Change GraphQLProvider uses the operation name as the generated operation type's names. if no operation name is specified it uses "Operation" + the query string's hash
- Make the type provider cross-targeting
- Breaking Change Add postcompile phase to middleware interface
- Breaking Change GraphQLProvider record types constructors now receive option arguments as optional arguments
- Revision on scalar types parsing - fixed some wrong behaviors such as parsing ints as floats
- Fixing a bug when converting variable types to variables json in a query
- Fixing a bug when parsing json objects with no fields in serialization
- Changing constructors of provided types to have overloads instead of optional parameters (needed because of a limitation of the Type Provider SDK)
- Adding support for field aliases
- Operation result errors and custom data now are provided as their respective types instead of options (
Operation Error []andMap<string, obj>)
- Minor bug fixes
- Fixing an error on overload constructor definition
- Performance improvements
- Fixing dependency issue on Server component
- Fixing a wrong cast for System.Uri type
- Adding support for file uploads through GraphQL Multipart Request Spec
- Changing variable parameters of Run/AsyncRun methods to work as overloaded methods instead of one having optional parameters
- Minor bug fixes
- Changing the internal client of the Type provider (
System.Net.Http.HttpClient) - Fixing several minor bugs of the file upload system in the client provider
- Limiting the upload type of the client provider to be a scalar type (provider fails if it is not)
- If an upload type is specified and it is not used in a query, client provider defaults to standard HTTP protocol instead of the multipart request
- Implementing a validation system for queries based on the GraphQL Spec
- Making validation mandatory on the server component
- Implemented a cache system for query validation on both server and client components
- Client component can optionally disable query validation
- Updating parser to support unnamed operations alongside shorthand queries
- Adding null value support for the AST Input Values (it was previously parsed as an Enum Value)
- Breaking Change Renaming
FSharp.Data.GraphQL.Server.Middlewarespackage toFSharp.Data.GraphQL.Server.Middleware
- Adjusting package dependencies (
FParsec,System.Net.Http, andFSharp.Data.GraphQL.Serverare not locked anymore)
- fixed false positive validation errors related to variable usage.
- Correct printing of queries without names
- Correct printing of ListValue and ObjectValue
- Traverse list values in argument lists
- Added test cases for object inputs for GraphQL functions
- TypeProvider now treats custom scalars as strings
- The Guid scalar was mapped to a DateTime
- Support opening static classes
- Add additional case in client to support failed requests that don't return a path.
- TypeProvider accepts IHttpClientFactory as input
- Add static TypeProvider parameter
explicitOptionalParameters.
- Remove Desktop build
- Update documentation and build tools
- Upgrade build scripts
- Migrate from netcoreapp2.0 to net5.0 for tests and samples
- Target netstandard2.0 exclusively for Type Providers
- Make FSharp.Data.GraphQL.Shared a NuGet package
- Fix parser bug. Thanks to @njlr
- Breaking Change Migrated to .NET 6/7 and F# 7
- Breaking Change Implemented GraphQL error handling using
IGQLErrorinterface instead of exceptions - Breaking Change Implemented parsing variables as
JsonElement - Breaking Change Added
Typesuffix to all built-in GraphQL type definitions - New Package
FSharp.Data.GraphQL.Server.AspNetCorefor ASP.NET Core integration - Migrated from Paket and FAKE CLI to FAKE build project
- Added
PathtoResolveFieldContext - Added ability to deprecate fields defined with any combination of parameters (more overloads to the
Definestatic class) - Added support of
Optionvariable values for nullable input types - Added mapping of input query/AST lists to .NET array type in addition to F# list
- Added input object validation with detailed error messages
- Added
Define.WrappedScalarfor value object scalar definitions - Added coercion of nested input objects
- Added support for
ValueOptioninAutoField - Improved WebSocket handling to eliminate large array allocations
- Fixed nullable enum input handling
- Fixed coercing enum type variables as F# discriminated unions
- Fixed various introspection and default value encoding issues
- Improved server exception logging by including exception in log message
- Documentation and README improvements
- Improved
AddGraphQLOptions - Added Altair and GraphiQL to sample projects
- Fixed
JsonSerializerOptionsread-only instance error
- Breaking Change Migrated to .NET 8 and F# 9.0 with
FSharp.Core9.0.x - Breaking Change Updated scalar
CoerceOutputsignature toobjnull -> 'Primitive option - Breaking Change Moved GraphQL error extensions to standard
extensionsfield according to specification - Breaking Change Renamed
ObjectListFiltertype definition toObjectListFilterType - Breaking Change Removed
ObjectListFilter.NoFiltercase - Breaking Change Reworked Relay types to enable async fetching and switched to
ValueOption - Breaking Change
Giraffeweb framework integration moved to separate package - New Package
FSharp.Data.GraphQL.Server.Giraffefor Giraffe web framework integration - New Package
FSharp.Data.GraphQL.Server.Oxpeckerfor Oxpecker web framework integration - Removed unused Suave NuGet package
- Added
Oxpeckerweb framework support - Added per-field authorization sample using ASP.NET authorization policies
- Added file upload support via GraphQL Multipart Request Spec with
FileDatatype - Added
OfTypesfilter case forObjectListFilterto filter union cases by type - Added
ObjectListFiltervalue parsing from variables in addition to supported inline value - Added
ObjectListFiltervalue parsing from inline object with variables - Added
ObjectListFilteradditional operators (In,Contains,StartsWith,EndsWith) - Added
StructNullableto supportValueOptionfields in input objects - Added case-insensitive input object fields and constructor parameters matching
- Added ability to recognize if an input field is null or not present at all
- Added ability to add errors to resolved fields
- Added
FieldDef<'Val, 'Res>type to support resolver-changing middlewares - Added GraphQL extensions support via
GQLMessageException - Added more overloads to
AddGraphQLOptionsincluding additional converters - Added support for optional properties usage in non-Enumerable LINQ queries
- Fixed
IDtype deserialization - Fixed
ObjectListFilterContainsandInoperators implementation for collections - Fixed generation of discriminator comparing expressions to be translatable to database queries
- Fixed
IInputExecutionContextresolution - Fixed
graphql-transport-wsWebSocket implementation - Fixed ability to override
GraphQLRequestHandler<'Root> - Fixed input object CLR property type validation against GraphQL scalar definitions
- Migrated all solutions to SLNX format
- Various performance optimizations and bug fixes
- Added
TimeOnlyGraphQL type - Added
mapfunction for RelayConnectionandEdgetypes - Excluded
GraphQLWebSocketMiddlewarefrom exception stack trace if request not a Web Socket - Changed
GraphQLOptionsDefaults.WebSocketConnectionInitTimeoutInMsconst type todouble - Improved Relay XML documentation comments
- Fixed planning phase crash when inline fragments reference types not included in union or interface definitions