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.
You can find and compare releases at the GitHub release page.
- Add
AttemptAuthentication
middleware to optionally log in users and delegate access guards to the field level nuwave#1197 - Add artisan command
lighthouse:directive
to add directive class nuwave#1240
- Eager load nested relations using the
@with
directive nuwave#1068 - Avoid infinite loop with empty namespace in generator commands nuwave#1245
- Automatically register
TestingServiceProvider
for@mock
when running unit tests nuwave#1244
- Ensure subscription routes are named uniquely nuwave#1231
- Throw user readable
Error
instead ofModelNotFoundException
when model is not found in@can
nuwave#1225
- Fix Laravel version detection for Lumen nuwave#1224
- Access nested inputs with dot notation using the
find
option of@can
nuwave#1216 - Add
@hash
directive which uses Laravel's hashing configuration nuwave#1200 - Add option
passOrdered
to@method
to pass just the arguments as ordered parameters nuwave#1208 - Add support to extend
input
,interface
andenum
types nuwave#1203 - Implement
streamGraphQL()
helper in\Nuwave\Lighthouse\Testing\MakesGraphQLRequestsLumen
nuwave#1222 - Support Laravel 7 nuwave#1219
- Remove
@bcrypt
in favour of@hash
nuwave#1200 @method
will call the underlying method with the arguments as ordered parameters instead of the full resolver arguments nuwave#1208
- Add optional
columnsEnum
argument to the@whereConditions
,@whereHasConditions
and@orderBy
directives nuwave#1150 - Exclude or include trashed models in
@can
when@forceDelete
or@restore
are used so the client does not have to filter explicitly nuwave#1157 - Add test trait
\Nuwave\Lighthouse\Testing\MakesGraphQLRequestsLumen
for usage with Lumen nuwave#1100 - Add test trait
\Nuwave\Lighthouse\Testing\UsesTestSchema
to enable using a dummy schema for testing custom Lighthouse extensions nuwave#1171 - Simplify mocking resolvers that just return static data nuwave#1177
- Add utility
\Nuwave\Lighthouse\ClientDirectives\ClientDirective
to correctly get the arguments passed through a client directive nuwave#1184 - Add
streamGraphQL()
helper method to\Nuwave\Lighthouse\Testing\MakesGraphQLRequests
for simple testing of streamed responses, such as@defer
nuwave#1184
- Fix eager-loading relations where the parent type is an
interface
orunion
and may correspond to multiple different models nuwave#1035 - Fix renaming input fields that are nested within lists using
@rename
nuwave#1166 - Fix handling of nested mutation operations that receive
null
nuwave#1174 - Fix nested mutation
upsert
across two levels of BelongsTo relations nuwave#1169 - Apply query filters using an
ArgBuilderDirective
such as@eq
when the argument is nested deeply within the input nuwave#1176 - Fix
\Nuwave\Lighthouse\Testing\MakesGraphQLRequestsLumen
test helper nuwave#1186 - Handle multiple instances of client directives with
@defer
correctly nuwave#1184
- Deprecate
\Nuwave\Lighthouse\Schema\Source\SchemaSourceProvider#setRootPath()
, this function is never called or used anywhere within Lighthouse. It will be removed from the interface.
- Avoid erasing the model information from the wrapping paginated results
type
when defining a paginated@hasMany
field after a field with@paginate
nuwave#1149
- Compose complex input arguments through nested arg resolvers nuwave#899
- Add
\Nuwave\Lighthouse\Support\Contracts\ArgResolver
directive interface nuwave#899 - Allow existing mutation directives
@create
,@update
,@upsert
and@delete
to function as nested arg resolvers nuwave#899 - Validate at schema build time that the
apply
argument@rules
is an array nuwave#1092 - Add support in
@whereConditions
for IN, IS NULL and BETWEEN operators nuwave#1099 - Add ability to define pivot data on nested mutations within
sync
,syncWithoutDetach
andconnect
nuwave#1110 - Allow restricting the columns for
@orderBy
to a given whitelist and generate anenum
definition for it nuwave#1118 - Allow passing variables in
->graphQL()
test helper nuwave#1127 - Add missing schema descriptions to some inputs, types, and enums nuwave#1131
- Add
@guard
directive to handle authentication nuwave#1135 - Add
@whereHasConditions
directive to filter query results based on the existence of a relationship nuwave#1140
- Remove
\Nuwave\Lighthouse\Execution\MutationExecutor
in favour of modular nested arg resolvers nuwave#899 - Register the operator enum for
@whereConditions
programmatically and allow overwriting it through a service provider nuwave#1099 - Always automatically set the correct argument type when using
@whereConditions
or@orderBy
directives nuwave#1118 - Implement the
name()
function generically in the BaseDirective class nuwave#1098 - Renamed the
@whereConstraints
directive to@whereConditions
nuwave#1140
- Enable chained rule provider directives (
ProvidesRules
) to merge the rules before validating nuwave#1082 - Apply nested
OR
conditions in@whereConditions
correctly nuwave#1099 - Allow passing
null
or simply noid
when using@upsert
nuwave#1114
- The argument
field
within theOrderByClause
used for@orderBy
will be renamed tocolumn
in v5 nuwave#1118 - Deprecated the
@middleware
directive, as it violates the boundary between HTTP and GraphQL request handling. Use@guard
or other field middleware directives instead nuwave#1135
- Remove broken
NOT
conditional when using@whereConditions
nuwave#1125
- Enable multiple queries in a single request by clearing
BatchLoader
instances after executing each query nuwave#1030 - Keep the query and pagination capabilities of relation directives when disabling batch loading nuwave#1083
- Add
INPUT_FIELD_DEFINITION
to allowed locations for the@builder
directive nuwave#1074
- Define
@enum
as a directive class so it shows up inschema-directives.graphql
and can potentially be overwritten nuwave#1078
- Add
syncWithoutDetaching
option for BelongsToMany and MorphToMany relationships nuwave#1031 - Add
injectArgs
option to@can
directive to pass along client defined arguments to the policy check nuwave#1043 - Allow globally turning off relation batch loading through the
config option
batchload_relations
nuwave#1059 - Add
\Nuwave\Lighthouse\Execution\DataLoader\BatchLoader#loadMany()
function nuwave#973 - Extend
@rename
directive to work with arguments and input fields nuwave#521
- Add ability to fetch soft deleted model within
@can
directive to validate permissions using@softDeletes
directive. nuwave#1042 - Improve the error message for missing field resolvers by offering a solution nuwave#1045
- Throw
DefinitionException
when missing a type in the type registry nuwave#1066 - Add
INPUT_FIELD_DEFINITION
toorderBy
directive location nuwave#1069
- Add
@scope
directive for adding a scope to the query builder nuwave#998
- Use detailed
$description
property when generatingenum
values from aBenSampo\Enum\Enum
class nuwave#1027
- Handle arrays of namespaces in generator commands nuwave#1033
- Handle
null
being passed to a nullable argument that is an input object type nuwave#1021
- Fix conversion of client directives after the schema was cached nuwave#1019
- Handle
null
being passed to a nullable argument that is a list of type nuwave#1016
- Add
@upsert
directive and nested mutation operations to create or update a model regardless whether it exists nuwave#1005
- Fix broken behaviour when using union types with schema caching nuwave#1015
- Validate the correctness of the
builder
given to@paginate
at schema build time
- Do not require the type of a field matching a model class when using the
builder
argument of@paginate
nuwave#1011
- Fix regression in 4.4.0 that required matching the type returned from paginated relationship fields with the class name of the model nuwave#1011
- Add
@count
directive for counting a relationship nuwave#984 - Allow overwriting the name of Enum types created through
LaravelEnumType
nuwave#968 - Resolve models through Relay's global identification using
@node
nuwave#974 - Add experimental
@modelClass
directive to map types to models. It will be renamed to@model
in v5 nuwave#974
- Remove the extra new line from the returned value when using
@globalId(decode: "ID")
nuwave#982 - Throw a syntax error instead of an exception when performing an empty request or a request with an empty query nuwave#989
- Properly apply
@spread
when used within a nested input object nuwave#992
- Allow additional route configurations
prefix
anddomain
nuwave#951 - Enable schema cache only when
APP_ENV
!= 'local' nuwave#957
- Fix default model detection when using other directives combination with
@paginate
nuwave#974
- Use the
RegisterDirectiveNamespaces
event instead ofDirectiveFactory#addResolved()
nuwave#950 - Use
@node
instead of@model
to resolve models through Relay's global identification nuwave#974
- Add
@restore
and@forceDelete
directives, similar to@delete
nuwave#941 - Add
@softDeletes
and@trashed
directives to enable filtering soft deleted models nuwave#937
- Prevent throwing in
lighthouse:ide-helper
when no custom directives are defined nuwave#948
- Validate requirements for argument definitions of
@delete
,@forceDelete
and@restore
during schema build time nuwave#941
- Actually use the specified
edgeType
in Relay style connections nuwave#939
- Add
@morphOne
directive for polymorphic one-to-one relationships nuwave#944 - Add
@morphTo
directive for polymorphic one-to-one relationships nuwave#921 - Add
@morphMany
directive for polymorphic one-to-many relationships nuwave#944 - Support Laravel
^6.0
nuwave#926 - Add command
lighthouse:ide-helper
for generating a definition file with all schema directives nuwave#933
- Unbox laravel-enum inputs when using the builder directives nuwave#927
- Add the
@whereJsonContains
directive to an input value as a [whereJsonContains filter - Allow using callable classes with
__invoke
when referencing methods in directives and when looking for default resolvers or type resolvers nuwave#882 - Allow to restrict column names to a well-defined list in
@whereContraints
and generate definitions for anEnum
type and anInput
type that are restricted to the defined columns nuwave#916 - Add test helpers for introspection queries to
MakesGraphQLRequests
nuwave#916
- The default name of resolver and type resolver methods will be
__invoke
in v5 nuwave#882
- Fixed the
ValidationDirective
not setting the mutation or query arguments to itself nuwave#915
- Add the
@namespace
directive as a replacement for the removed@group
directive nuwave#768 - The
@defer
extension now supports deferring nested fields of mutations nuwave#855 - Add a simple way to define complex validation directives by
extending
\Nuwave\Lighthouse\Schema\Directives\ValidationDirective
nuwave#846 - Extend the
@belongsToMany
directive to support pivot data on a custom Relay style Edge type nuwave#871 - Implement
connect
,disconnect
anddelete
operations for nested mutations upon MorphTo relationships nuwave#879
- Avoid growing the memory extensively when doing complex AST manipulation nuwave#768
- Make nested mutations work with subclassed relationship types nuwave#825
- Allow empty arrays and other falsy values as input for nested mutation operations like "sync" nuwave#830
- Use
Illuminate\Contracts\Config\Repository
instead ofIlluminate\Config\Repository
nuwave#832 - Allow checking the abilities with
@can
when issuing mass updates on multiple models nuwave#838 - Allow use of
private
in@cache
directive even when the user is not authenticated nuwave#843 - Fix Lumen route registration nuwave#853
- Fix handling of
@include
directive, it is semantically opposite to@skip
, when using it with@defer
nuwave#855 - Allow querying for null values using
@whereConstraints
nuwave#872 - Fix issue when using the
@model
directive in a type that has a list field nuwave#883 - Make the
@include
and@skip
directives that are part of the GraphQL spec show up in introspection and fix handling of default values in custom client directives nuwave#892
- Bumped the requirement on
webonyx/graphql-php
to^0.13.2
nuwave#768 - Rename directive interfaces dealing with types from
Node*
toType*
nuwave#768 - Change the signature of the AST manipulating directive interfaces:
TypeManipulator
,FieldManipulator
andArgManipulator
nuwave#768 - Change the API of the
DocumentAST
class to enable a more performant implementation nuwave#768 - Enable the schema caching option
lighthouse.cache.enable
by default nuwave#768 - Lazily load types from the schema. Directives defined on parts of the schema that are not used within the current query are no longer run on every request nuwave#768
- Simplify the default route configuration.
Make sure to review your
config/lighthouse.php
and bring it up to date with the latest changes in the base configuration file nuwave#820 - Move
SubscriptionExceptionHandler
into namespaceNuwave\Lighthouse\Subscriptions\Contracts
nuwave#819 - The pagination field argument that controls the amount of results
now default tos
first
instead ofcount
. The configpagination_amount_argument
can be used to change the argument name nuwave#852 - Rename
ArgValidationDirective
toProvidesRules
and dropget
prefix from the methods within nuwave#846 - Make the argument used for finding a model to check
@can
against configurable. The previous behaviour of implicitly using theid
argument for finding a specific model to authorize against now no longer works. nuwave#856 - Change the
Nuwave\Lighthouse\Schema\Types\LaravelEnumType
wrapper to map to Enum instances internally nuwave#908
- Remove
@group
directive in favour of@middleware
and@namespace
nuwave#768 - Remove the
ArgFilterDirective
interface in favour of theArgBuilderDirective
interface nuwave#821 - Remove the old style
@whereBetween
and@whereNotBetween
directives nuwave#821 - Use the
@spread
directive instead of theflatten
argument of@create
/@update
nuwave#822 - Remove
dispatch
aliasesfire
andclass
for dispatching through@event
nuwave#823 - Remove the
GraphQL
facade and the container aliasgraphql
nuwave#824 - Remove the alias
if
for specifying theability
that has to be met in@can
nuwave#838
- The configuration option
pagination_amount_argument
will be removed in v5
- Add compatibility layer to allow
@middleware
to support Lumen nuwave#786 - Add option
decode
to@globaldId
to control the result of decoding nuwave#796 - Add config option
cache.ttl
for customizing expiration time of schema cache nuwave#801 - Extract test helpers into a reusable trait
\Nuwave\Lighthouse\Testing\MakesGraphQLRequests
nuwave#802 - Support custom rule classes in
@rules
and@rulesForArray
nuwave#812
- Fix querying for falsy values through
@whereConstraints
nuwave#800 - Use
Illuminate\Contracts\Events\Dispatcher
instead of concrete implementation in SubscriptionBroadcaster nuwave#805
- The
GraphQL
facade and the container aliasgraphql
will be removed in v4
- Use the spec-compliant default deprecation reason for
@deprecate
directive nuwave#787
- Add
@whereConstraints
directive that offers flexible query capabilities to the client nuwave#753 - Add convenience wrapper for registering Enum types based on [BenSampo/laravel-enum nuwave#779
- The
controller
config option will be removed in v4 nuwave#781
- Respect the model's connection for database transaction during
@create
and@update
nuwave#777
- You can now omit an
input
argument from a query that uses the@spread
directive without getting an error nuwave#774
- The class
SubscriptionExceptionHandler
will be moved to the namespace Nuwave\Lighthouse\Subscriptions\Contracts
- Throw error if pagination amount
<= 0
is requested nuwave#765
- Default the config to always set the
Accept: application/json
header nuwave#743 - Declare a single named route which handles POST/GET instead of 2 separate routes nuwave#738
- Apply the nested operations within a nested mutation in a consistent order that makes sense nuwave#754
- The pagination field argument that controls the amount of results
will default to
first
instead ofcount
in v4. The configpagination_amount_argument
can be used to change the argument name now nuwave#752
- Instantiate the
ErrorBuffer
directly, its dependencies can not be resolved through the container nuwave#756 - Refresh GraphQLRequest singleton between multiple requests to prevent a common error in test execution nuwave#761
- Allow rebinding a custom GlobalId resolver nuwave#739
- Sync existing models in belongsToMany relations using nested mutations when creating nuwave#707
- Add
@spread
directive to reshape nested input arguments nuwave#680 - Add flexible
@builder
directive to quickly specify a single method to apply constraints to the query builder nuwave#680 - Add
new_between_directives
config to use the new between directives now nuwave#680
- Use the
@spread
instead of theflatten
argument of@create
/@update
nuwave#680 - Prefer usage of the
ArgBuilderDirective
instead of theArgFilterDirective
nuwave#680 @whereBetween
and@whereNotBetween
will take a single input object instead of being spread across two args nuwave#680
- Flatten the namespace for the built-in directives nuwave#700
- Sync and connect existing models in morphToMany relations using nested mutations nuwave#707
- Adapt to the new Laravel way and add an alias
dispatch
for the@event
directive nuwave#719
- Aliases
fire
andclass
for dispatching through@event
nuwave#719
- Support Subscriptions nuwave#337
- Support
@defer
client directive nuwave#422 - Define validation for list arguments themselves through
@rulesForArray
nuwave#427 - The
@hasMany
and@paginator
directives now support an additional argumentdefaultCount
that sets a default value for the generated field argumentcount
nuwave#428 - Allow user to be guest when using the
@can
directive nuwave#431 - Add shortcut to get NodeValue type definition fields nuwave#432
- Use
@inject
with dot notation to set nested value nuwave#511 - Populate more relationship types through nested mutations nuwave#514 nuwave#549
- Support the
@deprecated
directive nuwave#522 - Allow defining default namespaces as an array nuwave#525
- Add config & directive argument for
@paginate
to limit the maximum requested count nuwave#569 - Add
guard
argument to@auth
directive nuwave#584 - Support Laravel 5.8 nuwave#626
- Support File Uploads nuwave#628
- Add lifecycle events to hook into the execution nuwave#645
- Add
@orderBy
argument directive for client-side dynamic ordering nuwave#659 - Enable passing in model instance to
@can
directive nuwave#684 - Allow swapping out the default resolver nuwave#690
- Change the default schema location, model and GraphQL namespaces nuwave#423
- Construction and methods of the Field|Node|Arg-Value objects nuwave#425
- The methods called with
@method
now receive the same 4 resolver arguments that all other resolvers do nuwave#486 - Handle mutating directives transactional by default nuwave#512
- Nested mutations for BelongsTo require wrapping the ID in a
connect
argument nuwave#514 nuwave#549 - Make the error messages returned by
@can
more friendly nuwave#515 - Bump requirements for
webonyx/graphql-php
to^0.13
and PHP to>= 7.1
nuwave#517 - Replace
DirectiveRegistry
withDirectiveFactory
to lazy load directives nuwave#520 - Extensions must registered through ServiceProviders instead of the config file nuwave#645
- Increase tracing precision when nanoseconds are available nuwave#674
- Diverging paths of nested input objects can now have distinct validation rules nuwave#427
- Distinguish between FieldDefinitions and InputObjectValues in AST handling nuwave#425
- Set the date in the
Date
scalar to startOfDay, fixes equality checks nuwave#452 - Use primary key defined in model to execute update nuwave#469
- Consider batched queries when using BatchLoader nuwave#508
- Refresh newly created models before returning them nuwave#509
- Prevent name conflict between argument names and non-relation methods when executing nested mutations nuwave#519
- Prevent crash when invalid JSON variables are given nuwave#581
- Handle pagination with Laravel Scout correctly nuwave#661
- Handle schema defined default values for enum types correctly nuwave#689
- Remove the previously broken
@validate
directive in favour of@rules
nuwave#427 - Remove broken user mutations from the default schema nuwave#435
- Remove deprecated methods nuwave#435
- Limit the
@field
directive to using theresolver
argument nuwave#435 - Remove the
@security
directive in favour of defining security options through the config nuwave#435 - Rename the
resolver
argument of@interface
and@union
toresolveType
nuwave#435 - Remove deprecated Traits nuwave#435
We just started maintaining a changelog starting from v3.
If someone wants to make one for previous versions, PR's are welcome.