Commit e71ab6c
committed
Fix variable validation failing when type loader overrides built-in scalars
When a type loader returns a custom instance for a built-in scalar (e.g.
ID, String), `Schema::getType()` stores and returns that instance. However,
field argument definitions in the schema still reference the built-in
singletons (e.g. `Type::id()`). During query validation,
`VariablesInAllowedPosition` resolves variable types via
`Schema::getType()` and compares them against argument types using
`TypeComparators`. Both `isEqualType()` and `isTypeSubTypeOf()` use strict
identity checks (`===`), which fail when comparing two different instances
that represent the same named type.
This causes queries with variables of overridden built-in scalar types to
fail validation with errors like:
Variable "$id" of type "ID!" used in position expecting type "ID!".
The fix adds a name-based equality check for `NamedType` instances in both
`isEqualType()` and `isTypeSubTypeOf()`, falling back to comparing type
names when the identity check fails. In a valid schema, each type name is
unique, so two named types with the same name are semantically equivalent
even if they are different object instances.
Ref webonyx#1869
Fixes webonyx#18741 parent 74790a3 commit e71ab6c
2 files changed
Lines changed: 82 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
| 8 | + | |
8 | 9 | | |
9 | 10 | | |
10 | 11 | | |
| |||
19 | 20 | | |
20 | 21 | | |
21 | 22 | | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
22 | 31 | | |
23 | 32 | | |
24 | 33 | | |
| |||
46 | 55 | | |
47 | 56 | | |
48 | 57 | | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
49 | 66 | | |
50 | 67 | | |
51 | 68 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
| 8 | + | |
8 | 9 | | |
9 | 10 | | |
10 | 11 | | |
| |||
204 | 205 | | |
205 | 206 | | |
206 | 207 | | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
207 | 272 | | |
208 | 273 | | |
209 | 274 | | |
| |||
0 commit comments