Skip to content

Commit 93c8c46

Browse files
committed
introduce new interface FragmentVariableValues
1 parent 3b53462 commit 93c8c46

File tree

5 files changed

+28
-14
lines changed

5 files changed

+28
-14
lines changed

src/execution/collectFields.ts

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { AccumulatorMap } from '../jsutils/AccumulatorMap.js';
2-
import type { ObjMap } from '../jsutils/ObjMap.js';
2+
import type { ObjMap, ReadOnlyObjMap } from '../jsutils/ObjMap.js';
33

44
import type {
55
DirectiveNode,
@@ -35,10 +35,20 @@ export interface DeferUsage {
3535
parentDeferUsage: DeferUsage | undefined;
3636
}
3737

38+
export interface FragmentVariableValues {
39+
readonly sources: ReadOnlyObjMap<FragmentVariableValueSource>;
40+
readonly coerced: ReadOnlyObjMap<unknown>;
41+
}
42+
43+
interface FragmentVariableValueSource {
44+
readonly signature: GraphQLVariableSignature;
45+
readonly value?: unknown;
46+
}
47+
3848
export interface FieldDetails {
3949
node: FieldNode;
4050
deferUsage?: DeferUsage | undefined;
41-
fragmentVariableValues?: VariableValues | undefined;
51+
fragmentVariableValues?: FragmentVariableValues | undefined;
4252
}
4353

4454
export type FieldDetailsList = ReadonlyArray<FieldDetails>;
@@ -168,7 +178,7 @@ function collectFieldsImpl(
168178
groupedFieldSet: AccumulatorMap<string, FieldDetails>,
169179
newDeferUsages: Array<DeferUsage>,
170180
deferUsage?: DeferUsage,
171-
fragmentVariableValues?: VariableValues,
181+
fragmentVariableValues?: FragmentVariableValues,
172182
): void {
173183
const {
174184
schema,
@@ -318,7 +328,7 @@ function collectFieldsImpl(
318328
*/
319329
function getDeferUsage(
320330
variableValues: VariableValues,
321-
fragmentVariableValues: VariableValues | undefined,
331+
fragmentVariableValues: FragmentVariableValues | undefined,
322332
node: FragmentSpreadNode | InlineFragmentNode,
323333
parentDeferUsage: DeferUsage | undefined,
324334
): DeferUsage | undefined {
@@ -351,7 +361,7 @@ function shouldIncludeNode(
351361
context: CollectFieldsContext,
352362
node: FragmentSpreadNode | FieldNode | InlineFragmentNode,
353363
variableValues: VariableValues,
354-
fragmentVariableValues: VariableValues | undefined,
364+
fragmentVariableValues: FragmentVariableValues | undefined,
355365
): boolean {
356366
const skipDirectiveNode = node.directives?.find(
357367
(directive) => directive.name.value === GraphQLSkipDirective.name,

src/execution/values.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import {
3232
validateInputValue,
3333
} from '../utilities/validateInputValue.js';
3434

35+
import type { FragmentVariableValues } from './collectFields.js';
3536
import type { GraphQLVariableSignature } from './getVariableSignature.js';
3637
import { getVariableSignature } from './getVariableSignature.js';
3738

@@ -154,9 +155,9 @@ export function getFragmentVariableValues(
154155
fragmentSpreadNode: FragmentSpreadNode,
155156
fragmentSignatures: ReadOnlyObjMap<GraphQLVariableSignature>,
156157
variableValues: VariableValues,
157-
fragmentVariableValues?: Maybe<VariableValues>,
158+
fragmentVariableValues?: Maybe<FragmentVariableValues>,
158159
hideSuggestions?: Maybe<boolean>,
159-
): VariableValues {
160+
): FragmentVariableValues {
160161
const varSignatures: Array<GraphQLVariableSignature> = [];
161162
const sources = Object.create(null);
162163
for (const [varName, varSignature] of Object.entries(fragmentSignatures)) {
@@ -207,7 +208,7 @@ export function experimentalGetArgumentValues(
207208
node: FieldNode | DirectiveNode | FragmentSpreadNode,
208209
argDefs: ReadonlyArray<GraphQLArgument | GraphQLVariableSignature>,
209210
variableValues: Maybe<VariableValues>,
210-
fragmentVariableValues?: Maybe<VariableValues>,
211+
fragmentVariableValues?: Maybe<FragmentVariableValues>,
211212
hideSuggestions?: Maybe<boolean>,
212213
): { [argument: string]: unknown } {
213214
const coercedValues: { [argument: string]: unknown } = {};
@@ -306,7 +307,7 @@ export function getDirectiveValues(
306307
directiveDef: GraphQLDirective,
307308
node: { readonly directives?: ReadonlyArray<DirectiveNode> | undefined },
308309
variableValues?: Maybe<VariableValues>,
309-
fragmentVariableValues?: Maybe<VariableValues>,
310+
fragmentVariableValues?: Maybe<FragmentVariableValues>,
310311
hideSuggestions?: Maybe<boolean>,
311312
): undefined | { [argument: string]: unknown } {
312313
const directiveNode = node.directives?.find(

src/utilities/coerceInputValue.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import {
1818
isRequiredInputField,
1919
} from '../type/definition.js';
2020

21+
import type { FragmentVariableValues } from '../execution/collectFields.js';
2122
import type { VariableValues } from '../execution/values.js';
2223

2324
import { replaceVariables } from './replaceVariables.js';
@@ -130,7 +131,7 @@ export function coerceInputLiteral(
130131
valueNode: ValueNode,
131132
type: GraphQLInputType,
132133
variableValues?: Maybe<VariableValues>,
133-
fragmentVariableValues?: Maybe<VariableValues>,
134+
fragmentVariableValues?: Maybe<FragmentVariableValues>,
134135
): unknown {
135136
if (valueNode.kind === Kind.VARIABLE) {
136137
const coercedVariableValue = getCoercedVariableValue(
@@ -283,7 +284,7 @@ export function coerceInputLiteral(
283284
function getCoercedVariableValue(
284285
variableNode: VariableNode,
285286
variableValues: Maybe<VariableValues>,
286-
fragmentVariableValues: Maybe<VariableValues>,
287+
fragmentVariableValues: Maybe<FragmentVariableValues>,
287288
): unknown {
288289
const varName = variableNode.name.value;
289290
if (fragmentVariableValues?.sources[varName] !== undefined) {

src/utilities/replaceVariables.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import type {
77
} from '../language/ast.js';
88
import { Kind } from '../language/kinds.js';
99

10+
import type { FragmentVariableValues } from '../execution/collectFields.js';
1011
import type { VariableValues } from '../execution/values.js';
1112

1213
import { valueToLiteral } from './valueToLiteral.js';
@@ -22,7 +23,7 @@ import { valueToLiteral } from './valueToLiteral.js';
2223
export function replaceVariables(
2324
valueNode: ValueNode,
2425
variableValues?: Maybe<VariableValues>,
25-
fragmentVariableValues?: Maybe<VariableValues>,
26+
fragmentVariableValues?: Maybe<FragmentVariableValues>,
2627
): ConstValueNode {
2728
switch (valueNode.kind) {
2829
case Kind.VARIABLE: {

src/utilities/validateInputValue.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import {
2323
isRequiredInputField,
2424
} from '../type/definition.js';
2525

26+
import type { FragmentVariableValues } from '../execution/collectFields.js';
2627
import type { VariableValues } from '../execution/values.js';
2728

2829
import { replaceVariables } from './replaceVariables.js';
@@ -231,7 +232,7 @@ export function validateInputLiteral(
231232
type: GraphQLInputType,
232233
onError: (error: GraphQLError, path: ReadonlyArray<string | number>) => void,
233234
variables?: Maybe<VariableValues>,
234-
fragmentVariableValues?: Maybe<VariableValues>,
235+
fragmentVariableValues?: Maybe<FragmentVariableValues>,
235236
hideSuggestions?: Maybe<boolean>,
236237
): void {
237238
const context: ValidationContext = {
@@ -253,7 +254,7 @@ interface ValidationContext {
253254
static: boolean;
254255
onError: (error: GraphQLError, path: ReadonlyArray<string | number>) => void;
255256
variables?: Maybe<VariableValues>;
256-
fragmentVariableValues?: Maybe<VariableValues>;
257+
fragmentVariableValues?: Maybe<FragmentVariableValues>;
257258
}
258259

259260
function validateInputLiteralImpl(

0 commit comments

Comments
 (0)