lighthouse icon indicating copy to clipboard operation
lighthouse copied to clipboard

New `unaliasedPath` field in `ResolveInfo` is removed when constructing Lighthouse `ResolveInfo`

Open ChrisExP opened this issue 1 year ago • 1 comments

Describe the bug Since version 15.12 of webonyx/graphql-php there has been a new property on the ResolveInfo class, unaliasedPath.
This field is not preserved when building the child ResolveInfo class used by Lighthouse.

Expected behavior/Solution The unaliasedPath property can be passed up through the parent constructor.

I am happy to create a PR, but I just want some guidance on how it should be done regarding the versioning.

Option 1:

Pass the unaliasedPath constructor parameter to the parent without checking, and force people to use the correct version of webonyx/graphql:

Nuwave\Lighthouse\Execution\ResolveInfo.php

     public function __construct(
         BaseResolveInfo $baseResolveInfo,
         public ArgumentSet $argumentSet,
     ) {
         parent::__construct(
             fieldDefinition: $baseResolveInfo->fieldDefinition,
             fieldNodes: $baseResolveInfo->fieldNodes,
             parentType: $baseResolveInfo->parentType,
             path: $baseResolveInfo->path,
            schema: $baseResolveInfo->schema,
             fragments: $baseResolveInfo->fragments,
             rootValue: $baseResolveInfo->rootValue,
             operation: $baseResolveInfo->operation,
             variableValues: $baseResolveInfo->variableValues,
+            unaliasedPath: $baseResolveInfo->unaliasedPath,
         );
     }

composer.json

     "require": {
         ...
-         "webonyx/graphql-php": "^15"
+         "webonyx/graphql-php": "^15.12.0"
     },

Option 2

Check if the property is set so it works with older versions. Something like this:

Nuwave\Lighthouse\Execution\ResolveInfo.php

     public function __construct(
         BaseResolveInfo $baseResolveInfo,
         public ArgumentSet $argumentSet,
     ) {
         parent::__construct(
             fieldDefinition: $baseResolveInfo->fieldDefinition,
             fieldNodes: $baseResolveInfo->fieldNodes,
             parentType: $baseResolveInfo->parentType,
             path: $baseResolveInfo->path,
            schema: $baseResolveInfo->schema,
             fragments: $baseResolveInfo->fragments,
             rootValue: $baseResolveInfo->rootValue,
             operation: $baseResolveInfo->operation,
             variableValues: $baseResolveInfo->variableValues,
+            ...(isset($baseResolveInfo->unaliasedPath)
+                ? ['unaliasedPath' => $baseResolveInfo->unaliasedPath]
+                : [])
         );
     }

ChrisExP avatar Jan 08 '25 17:01 ChrisExP

I like option 2, since we can do that without a breaking change. Can you create a pull request for that? You can add a TODO to simplify and bump the version when we work towards a new major version.

spawnia avatar Jan 23 '25 16:01 spawnia