Skip to content

Commit e5c52aa

Browse files
committed
Fix OperationParams not copying originalInput/readOnly from base
Causing TypeError on validation errors
1 parent afb61f8 commit e5c52aa

4 files changed

Lines changed: 12 additions & 10 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ CHANGELOG
1212
### Fixed
1313
- Fix `SelectFields` crashing when field types use callable [\#1252 / mfn](https://github.com/rebing/graphql-laravel/pull/1252)
1414
- Fix APQ middleware race condition (TOCTOU) [\#1253 / mfn](https://github.com/rebing/graphql-laravel/pull/1253)
15+
- Fix `OperationParams` not copying `originalInput`/`readOnly`, causing TypeError [\#1254 / mfn](https://github.com/rebing/graphql-laravel/pull/1254)
1516

1617
2026-03-21, 10.0.0-RC2
1718
----------------------

src/GraphQL.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,8 @@ public function queryAndReturnResult(string $query, ?array $variables = null, ar
134134
$baseParams->query = $query;
135135
$baseParams->operation = $operationName;
136136
$baseParams->variables = $variables;
137+
$baseParams->originalInput = [];
138+
$baseParams->readOnly = false;
137139
$params = new OperationParams($baseParams);
138140

139141
return $this->executeAndReturnResult($schemaName, $schema, $params, $rootValue, $context);

src/Support/OperationParams.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ protected function init(BaseOperationParams $baseOperationParams): void
2828
$this->operation = $baseOperationParams->operation;
2929
$this->variables = $baseOperationParams->variables;
3030
$this->extensions = $baseOperationParams->extensions;
31+
$this->originalInput = $baseOperationParams->originalInput;
32+
$this->readOnly = $baseOperationParams->readOnly;
3133

3234
$this->baseOperationParams = $baseOperationParams;
3335
}

tests/Unit/OperationParamsTest.php

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -69,12 +69,8 @@ public function testGetParsedQueryReturnsParsedDocument(): void
6969
/**
7070
* When webonyx's Helper::validateOperationParams() detects invalid variables,
7171
* it accesses $params->originalInput['variables'] to build the error message.
72-
*
73-
* Since OperationParams::init() doesn't copy originalInput from the base,
74-
* the typed property (array) is uninitialized, causing a TypeError instead
75-
* of returning the proper validation error.
7672
*/
77-
public function testValidateOperationParamsWithInvalidVariablesCrashesOnUninitializedOriginalInput(): void
73+
public function testValidateOperationParamsWithInvalidVariablesReturnsValidationError(): void
7874
{
7975
$base = BaseOperationParams::create([
8076
'query' => '{ hello }',
@@ -84,11 +80,12 @@ public function testValidateOperationParamsWithInvalidVariablesCrashesOnUninitia
8480

8581
$helper = new Helper;
8682

87-
// Should return a validation error about variables,
88-
// but crashes with TypeError because originalInput is uninitialized
89-
$this->expectException(\Error::class);
90-
$this->expectExceptionMessage('must not be accessed before initialization');
83+
$errors = $helper->validateOperationParams($params);
9184

92-
$helper->validateOperationParams($params);
85+
self::assertCount(1, $errors);
86+
self::assertSame(
87+
'GraphQL Request parameter "variables" must be object or JSON string parsed to object, but got "[1, 2]"',
88+
$errors[0]->getMessage(),
89+
);
9390
}
9491
}

0 commit comments

Comments
 (0)