- Support for Lumen has been removed
- Integrate laragraph/utils RequestParser #739 / mfn
- batched queries will only work with
POST
requests This is due toRequestParser
using\GraphQL\Server\Helper::parseRequestParams
which includes this check - Drop support for configuration the name of the variable for the variables
GraphQLUploadMiddleware
has been removed (RequestParser
includes this functionality)- Empty GraphQL queries now return a proper validated GraphQL error
- Signature changes In
\Rebing\GraphQL\GraphQLController
:- old:
protected function executeQuery(string $schema, array $input): array
new:protected function executeQuery(string $schema, OperationParams $params): array
- old:
protected function queryContext(string $query, ?array $params, string $schema)
new:protected function queryContext(string $query, ?array $variables, string $schema)
- old:
protected function handleAutomaticPersistQueries(string $schemaName, array $input): string
new:protected function handleAutomaticPersistQueries(string $schemaName, OperationParams $operation): string
- old:
- batched queries will only work with
- In
\Rebing\GraphQL\GraphQLController
, renamed all occurrences of$schema
to$schemaName
This is to reduce the confusion as the code in some other places uses$schema
for the actual schema itself (either as an object or array form). This changes the signature on the following methods:- old:
protected function executeQuery(string $schema, OperationParams $params): array
new:protected function executeQuery(string $schemaName, OperationParams $params): array
- old:
protected function queryContext(string $query, ?array $variables, string $schema)
new:protected function queryContext(string $query, ?array $variables, string $schemaName)
- old:
- In
\Rebing\GraphQL\GraphQL
, renamed remaining instances of$params
to$variables
After switching toRequestParser
, the support for changing the variable name what was supposed toparams_key
has gone and thus the name isn't fitting anymore- old:
public function query(string $query, ?array $params = [], array $opts = []): array
new:public function query(string $query, ?array $variables = [], array $opts = []): array
- old:
public function queryAndReturnResult(string $query, ?array $params = [], array $opts = []): ExecutionResult
new:public function queryAndReturnResult(string $query, ?array $variables = [], array $opts = []): ExecutionResult
- old:
- As part of APQ parsed query support #740 / mfn:
- In
\Rebing\GraphQL\GraphQLController
, the following signature changed:- old:
protected function handleAutomaticPersistQueries(string $schemaName, OperationParams $operation): string
new:protected function handleAutomaticPersistQueries(string $schemaName, OperationParams $operation): array
- old:
- In
\Rebing\GraphQL\GraphQL
, the following signature changed:- old:
public function query(string $query, ?array $variables = [], array $opts = []): array
new:public function query($query, ?array $variables = [], array $opts = []): array
- old:
public function queryAndReturnResult(string $query, ?array $variables = [], array $opts = []): ExecutionResult
new:public function queryAndReturnResult($query, ?array $variables = [], array $opts = []): ExecutionResult
- old:
- In
- Automatic Persisted Queries (APQ) now cache the parsed query #740 / mfn
This avoids having to re-parse the same queries over and over again. - Add ability to detect unused GraphQL variables #660 / mfn
- Allow disabling batched requests #738 / mfn
- Basic Automatic Persisted Queries (APQ) support #701 / illambo
- Support Laravels simple pagination #715 / lamtranb
- Signature of
\Rebing\GraphQL\Support\Privacy::validate
changed, now it accepts both query/mutation arguments and the query/mutation context. Update your existing privacy policies this way:-public function validate(array $queryArgs): bool +public function validate(array $queryArgs, $queryContext = null): bool
- Ability to pass query/mutation context to the field privacy handler (both closure and class) #727 / torunar
- Middleware and methods can be used in class based schemas. #724 / jasonvarga
This is a follow-up fix for Support for class based schemas
- Support for per-schema types #658 / stevelacey
- Support for class based schemas #706 / jasonvarga
- Lumen routing with regular expression constraints #719 / sglitowitzsoci
Same as 6.1.0-rc1!
- Support for resolver middleware #594 / stevelacey
- Support for resolver middleware #594 / stevelacey
- Implemented generation of a SyntaxError instead of a hard Exception for empty single/batch queries #685 / plivius
- Upgrade to webonyx/graphql-php 14.0.0 #645 / mfn Be sure to read up on breaking changes in graphql-php => https://github.com/webonyx/graphql-php/releases/tag/v14.0.0
- Remove support for Laravel < 6.0 #651 / mfn This also bumps the minimum required version to PHP 7.2
- Support for Laravel 8 #672 / mfn
- Implemented generation of a SyntaxError instead of a hard Exception for empty single/batch queries #685 / plivius
- Support for PHP 8 #686 / mfn
Hotfix release to replace 5.1.3
Apologies for the rushed 5.1.3 release causing trouble, it was in fact cut from the wrong branch and it was current state for the upcoming 6.x series 😬
5.1.4 intends to correct this.
- Support Laravel 8 #671 / mfn
- Support Laravel 8 #671 / mfn
- Re-added support for validation in field arguments (with breaking change fix) #630 / crissi
- Reverted "Add support for validation in field arguments" due to breaking changes reported
- Add support for validation in field arguments #608 / crissi
- Add support for modifiers to
GraphQL::type
#621 / stevelacey
- Support Laravel 7 #597 / exodusanto
- Add support for custom authorization message #578 / Sh1d0w
- Add support for macros on the GraphQL service/facade #592 / stevelacey
- Fix the infinite loop as well as sending the correct matching input data to the rule-callback #579 / crissi
- Fix selecting not the correct columns for interface fields #607 / illambo
- Refactor route files with the goal of making adding subscription support easier #575 / crissi
- Official support for Laravel 5.8 has been removed #596 / mfn
- Allow passing through an instance of a
Field
#521 / georgeboot - Add the ability to alias query and mutations arguments as well as input objects #517 / crissi
- Classes can now be injected in the Resolve method from the query/mutation similarly to Laravel controller methods #520 / crissi
- Fix validation rules for non-null list of non-null objects #511 / crissi
- Add morph type to returned models #503 / crissi
- Querying same field multiple times causes an error (e.g. via fragments) #537 / edgarsn
- Fixed the custom query not being handled by interface's relations #486 / EdwinDayot
- Switch Code Style handling from StyleCI to PHP-CS Fixer #502 / crissi
- Implemented ClientAware interface on integrated exceptions #530 / georgeboot
- More control over validation through optional user-generated validator by introducing
getValidator()
#531 / mailspice
- Allow passing through the
rootValue
as an option #492 / tuurbo
- Add
wrapType()
, allowing to add more information for queries/mutations #496 / albertcito
- The signature of
authorize
changed, receiving not the exact same argumenst the resolver would #489 / mfn- before:
public function authorize(array $args)
- after:
public function authorize($root, array $args, $ctx, ResolveInfo $resolveInfo = null, Closure $getSelectFields = null): bool
- before:
- Forward PHP engine errors to the application error handler #487 / mfn
- The custom
'query'
now receives the GraphQL context as the 3rd arg (same as any resolver) #464 / mfn - Allow to load deeper nested queries by allowing to change the depth when calling
$getSelectFields(int $depth)
#472 / mfn
- Allow
'alias'
to be a callback #452 / crissi
- Internal
- Properly separate larastans' phpstan config from ours #451 / szepeviktor
- Support adding Schema objects directly #449 / mfn
- Input arguments are properly parsed when objects or lists are passed #419 / sowork
- The
UploadType
now has to be added manually to thetypes
in your schema if you want to use it- The
::getInstance()
method is gone
- The
- The order and arguments/types for resolvers has changed:
- before:
resolve($root, $array, SelectFields $selectFields, ResolveInfo $info)
- after:
resolve($root, $array, $context, ResolveInfo $info, Closure $getSelectFields)
- before:
- Added PHP types / phpdoc to all methods / properties #331
- Changes in method signatures will require small adaptions.
- Validation errors are moved from
error.validation
toerror.extensions.validation
as per GraphQL spec recommendation #294 - SelectFields on interface types now only selects specific fields instead of all #294
- Although this could be considered a bug fix, it changes what columns are selected and if your code as a side effect dependent on all columns being selected, it will break
- Added support for lazy loading types (config
lazyload_types
), improve performance on large type systems #405 but doesn't work together with type aliases orpaginate()
. - A migration guide for the Folklore library as part of the readme
- New
make:graphql:input
command - New
make:graphql:union
command - New
make:graphql:interface
command - New
make:graphql:field
command - New
make:graphql:enum
command and dedicatedEnumType
, deprecating$enumObject=true
in theType
class - New
make:graphql:scalar
command and add more information regarding scalars to the readme TypeConvertible
interface requiring to implementtoType(): \GraphQL\Type\Definition\Type
Existing types are not affected because they already made use of the same method/signature, but custom Scalar GraphQL types work differently and benefit from the interfacealias
is now also supported for relationships #367InputType
support class which eventually replace$inputObject=true
#363- Support
DB::raw()
inalias
fields - GraphiQL: use regenerated CSRF from server if present #332
- Internal
- Added declare(strict_types=1) directive to all files
- Test suite has been refactored and now features Database (SQLite) tests too
- Types and Schemas are now only booted when the
graphql
service is requested, improving performance when having this library installed but not using it in certain workloads (pure artisan commands, non-GraphQL web requests, etc.) #427 - Follow Laravel convention and use plural for namespaces (e.g. new queries are placed in
App\GraphQL\Queries
, notApp\GraphQL\Query
anymore); make commands have been adjusted - Made the following classes abstract:
Support\Field
,Support\InterfaceType
,Support\Mutation
,Support\Query
,Support\Type
,Support\UnionType
#357 - Updated GraphiQL to 0.13.0 #335
- If you're using CSP, be sure to allow
cdn.jsdelivr.net
andcdnjs.cloudflare.com
- If you're using CSP, be sure to allow
ValidatorError
: remove setter and make it a constructor arg, add getter and rely on contracts- Replace global helper
is_lumen
with static class call\Rebing\GraphQL\Helpers::isLumen
- The Paginator correctly inherits the types model so it can be used with
SelectFields
and still generates correct SQL queries #415 - Arguments are now validated before they're passed to
authorize()
#413 - File uploads now correctly work with batched requests #397
- Path multi-level support for Schemas works again #358
- SelectFields correctly passes field arguments to the custom query #327
- This also applies to privacy checks on fields, the callback now receives the field arguments too
- Previously the initial query arguments would be used everywhere
- Removed
\Fluent
dependency on\Rebing\GraphQL\Support\Field
#431 - Removed
\Fluent
dependency on\Rebing\GraphQL\Support\Type
#389 - Unused static field
\Rebing\GraphQL\Support\Type::$instances
- Unused field
\Rebing\GraphQL\Support\Type::$unionType
- Prefix named GraphiQL routes with
graphql.
for compatibility with Folklore #360
- New config options
headers
to send custom HTTP headers andjson_encoding_options
for encoding the JSON response #293
- SelectFields now works with wrapped types (nonNull, listOf) #315
- Auto-resolve aliased fields #283
- This project has a changelog
\o/
- Allow configuring a custom default field resolver #266
- Routes have now given names, so they can be referenced #264
- Expose more fields on the default pagination type #262
- Mongodb support #257
- Add support for MorphOne relationships #238
- Checks for lumen when determining schema #247
- Internal changes:
- Replace deprecated global
array_*
andstr_*
helpers with directArr::*
andStr::*
calls - Code style now enforced via StyleCI
- Replace deprecated global
- Fixed infinite recursion for InputTypeObject self reference #230
- Laravel 5.8 support
- Don't report certain GraphQL Errors
- Mutation routes fix
- Fix to allow recursive input objects #158
- Fixed default error handler
- Bump webonxy/graphql-php version requirement
- Add support for custom error handler config
handle_errors
- Fixed validation
- Validation error messages Can now add custom validation error messages to Queries and Mutations
- Added support for query complexity and depth (more details)
- Also added support for InputObjectType rules validation.
- Rules supported for all Fields
Added
rules
support for Query fields
- Allow subscription types to be added Supports creating the schema, but the underlying PHP functionality does not do anything.
- Updating route and controller to give us the ability to create multilevel URI names #69
- Composer fix
- SelectFields fix
- GET routes
- Enum types
- Privacy validation optimized
- Initial release