Skip to content

Commit 02ee34f

Browse files
authored
polish(incremental): rename terms to match spec (graphql#4148)
DeferredGroupedFieldSet => ExecutionGroup SubsequentResultRecord => DeliveryGroup ExecuteExecutionGroups => CollectExecutionGroups
1 parent 25be244 commit 02ee34f

File tree

5 files changed

+185
-202
lines changed

5 files changed

+185
-202
lines changed

src/execution/IncrementalGraph.ts

Lines changed: 52 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,21 @@ import type { GraphQLError } from '../error/GraphQLError.js';
77

88
import type {
99
DeferredFragmentRecord,
10-
DeferredGroupedFieldSetRecord,
10+
DeliveryGroup,
1111
IncrementalDataRecord,
1212
IncrementalDataRecordResult,
13-
ReconcilableDeferredGroupedFieldSetResult,
13+
PendingExecutionGroup,
1414
StreamItemRecord,
1515
StreamRecord,
16-
SubsequentResultRecord,
17-
} from './types.js';
18-
import {
19-
isDeferredFragmentRecord,
20-
isDeferredGroupedFieldSetRecord,
16+
SuccessfulExecutionGroup,
2117
} from './types.js';
18+
import { isDeferredFragmentRecord, isPendingExecutionGroup } from './types.js';
2219

2320
/**
2421
* @internal
2522
*/
2623
export class IncrementalGraph {
27-
private _rootNodes: Set<SubsequentResultRecord>;
24+
private _rootNodes: Set<DeliveryGroup>;
2825

2926
private _completedQueue: Array<IncrementalDataRecordResult>;
3027
private _nextQueue: Array<
@@ -39,8 +36,8 @@ export class IncrementalGraph {
3936

4037
getNewRootNodes(
4138
incrementalDataRecords: ReadonlyArray<IncrementalDataRecord>,
42-
): ReadonlyArray<SubsequentResultRecord> {
43-
const initialResultChildren = new Set<SubsequentResultRecord>();
39+
): ReadonlyArray<DeliveryGroup> {
40+
const initialResultChildren = new Set<DeliveryGroup>();
4441
this._addIncrementalDataRecords(
4542
incrementalDataRecords,
4643
undefined,
@@ -49,23 +46,25 @@ export class IncrementalGraph {
4946
return this._promoteNonEmptyToRoot(initialResultChildren);
5047
}
5148

52-
addCompletedReconcilableDeferredGroupedFieldSet(
53-
reconcilableResult: ReconcilableDeferredGroupedFieldSetResult,
49+
addCompletedSuccessfulExecutionGroup(
50+
successfulExecutionGroup: SuccessfulExecutionGroup,
5451
): void {
55-
for (const deferredFragmentRecord of reconcilableResult
56-
.deferredGroupedFieldSetRecord.deferredFragmentRecords) {
57-
deferredFragmentRecord.deferredGroupedFieldSetRecords.delete(
58-
reconcilableResult.deferredGroupedFieldSetRecord,
52+
for (const deferredFragmentRecord of successfulExecutionGroup
53+
.pendingExecutionGroup.deferredFragmentRecords) {
54+
deferredFragmentRecord.pendingExecutionGroups.delete(
55+
successfulExecutionGroup.pendingExecutionGroup,
56+
);
57+
deferredFragmentRecord.successfulExecutionGroups.add(
58+
successfulExecutionGroup,
5959
);
60-
deferredFragmentRecord.reconcilableResults.add(reconcilableResult);
6160
}
6261

63-
const incrementalDataRecords = reconcilableResult.incrementalDataRecords;
62+
const incrementalDataRecords =
63+
successfulExecutionGroup.incrementalDataRecords;
6464
if (incrementalDataRecords !== undefined) {
6565
this._addIncrementalDataRecords(
6666
incrementalDataRecords,
67-
reconcilableResult.deferredGroupedFieldSetRecord
68-
.deferredFragmentRecords,
67+
successfulExecutionGroup.pendingExecutionGroup.deferredFragmentRecords,
6968
);
7069
}
7170
}
@@ -104,32 +103,32 @@ export class IncrementalGraph {
104103

105104
completeDeferredFragment(deferredFragmentRecord: DeferredFragmentRecord):
106105
| {
107-
newRootNodes: ReadonlyArray<SubsequentResultRecord>;
108-
reconcilableResults: ReadonlyArray<ReconcilableDeferredGroupedFieldSetResult>;
106+
newRootNodes: ReadonlyArray<DeliveryGroup>;
107+
successfulExecutionGroups: ReadonlyArray<SuccessfulExecutionGroup>;
109108
}
110109
| undefined {
111110
if (
112111
!this._rootNodes.has(deferredFragmentRecord) ||
113-
deferredFragmentRecord.deferredGroupedFieldSetRecords.size > 0
112+
deferredFragmentRecord.pendingExecutionGroups.size > 0
114113
) {
115114
return;
116115
}
117-
const reconcilableResults = Array.from(
118-
deferredFragmentRecord.reconcilableResults,
116+
const successfulExecutionGroups = Array.from(
117+
deferredFragmentRecord.successfulExecutionGroups,
119118
);
120119
this._removeRootNode(deferredFragmentRecord);
121-
for (const reconcilableResult of reconcilableResults) {
122-
for (const otherDeferredFragmentRecord of reconcilableResult
123-
.deferredGroupedFieldSetRecord.deferredFragmentRecords) {
124-
otherDeferredFragmentRecord.reconcilableResults.delete(
125-
reconcilableResult,
120+
for (const successfulExecutionGroup of successfulExecutionGroups) {
121+
for (const otherDeferredFragmentRecord of successfulExecutionGroup
122+
.pendingExecutionGroup.deferredFragmentRecords) {
123+
otherDeferredFragmentRecord.successfulExecutionGroups.delete(
124+
successfulExecutionGroup,
126125
);
127126
}
128127
}
129128
const newRootNodes = this._promoteNonEmptyToRoot(
130129
deferredFragmentRecord.children,
131130
);
132-
return { newRootNodes, reconcilableResults };
131+
return { newRootNodes, successfulExecutionGroups };
133132
}
134133

135134
removeDeferredFragment(
@@ -146,30 +145,28 @@ export class IncrementalGraph {
146145
this._removeRootNode(streamRecord);
147146
}
148147

149-
private _removeRootNode(
150-
subsequentResultRecord: SubsequentResultRecord,
151-
): void {
152-
this._rootNodes.delete(subsequentResultRecord);
148+
private _removeRootNode(deliveryGroup: DeliveryGroup): void {
149+
this._rootNodes.delete(deliveryGroup);
153150
}
154151

155152
private _addIncrementalDataRecords(
156153
incrementalDataRecords: ReadonlyArray<IncrementalDataRecord>,
157154
parents: ReadonlyArray<DeferredFragmentRecord> | undefined,
158-
initialResultChildren?: Set<SubsequentResultRecord> | undefined,
155+
initialResultChildren?: Set<DeliveryGroup> | undefined,
159156
): void {
160157
for (const incrementalDataRecord of incrementalDataRecords) {
161-
if (isDeferredGroupedFieldSetRecord(incrementalDataRecord)) {
158+
if (isPendingExecutionGroup(incrementalDataRecord)) {
162159
for (const deferredFragmentRecord of incrementalDataRecord.deferredFragmentRecords) {
163160
this._addDeferredFragment(
164161
deferredFragmentRecord,
165162
initialResultChildren,
166163
);
167-
deferredFragmentRecord.deferredGroupedFieldSetRecords.add(
164+
deferredFragmentRecord.pendingExecutionGroups.add(
168165
incrementalDataRecord,
169166
);
170167
}
171168
if (this._completesRootNode(incrementalDataRecord)) {
172-
this._onDeferredGroupedFieldSet(incrementalDataRecord);
169+
this._onExecutionGroup(incrementalDataRecord);
173170
}
174171
} else if (parents === undefined) {
175172
invariant(initialResultChildren !== undefined);
@@ -184,15 +181,15 @@ export class IncrementalGraph {
184181
}
185182

186183
private _promoteNonEmptyToRoot(
187-
maybeEmptyNewRootNodes: Set<SubsequentResultRecord>,
188-
): ReadonlyArray<SubsequentResultRecord> {
189-
const newRootNodes: Array<SubsequentResultRecord> = [];
184+
maybeEmptyNewRootNodes: Set<DeliveryGroup>,
185+
): ReadonlyArray<DeliveryGroup> {
186+
const newRootNodes: Array<DeliveryGroup> = [];
190187
for (const node of maybeEmptyNewRootNodes) {
191188
if (isDeferredFragmentRecord(node)) {
192-
if (node.deferredGroupedFieldSetRecords.size > 0) {
193-
for (const deferredGroupedFieldSetRecord of node.deferredGroupedFieldSetRecords) {
194-
if (!this._completesRootNode(deferredGroupedFieldSetRecord)) {
195-
this._onDeferredGroupedFieldSet(deferredGroupedFieldSetRecord);
189+
if (node.pendingExecutionGroups.size > 0) {
190+
for (const pendingExecutionGroup of node.pendingExecutionGroups) {
191+
if (!this._completesRootNode(pendingExecutionGroup)) {
192+
this._onExecutionGroup(pendingExecutionGroup);
196193
}
197194
}
198195
this._rootNodes.add(node);
@@ -214,16 +211,16 @@ export class IncrementalGraph {
214211
}
215212

216213
private _completesRootNode(
217-
deferredGroupedFieldSetRecord: DeferredGroupedFieldSetRecord,
214+
pendingExecutionGroup: PendingExecutionGroup,
218215
): boolean {
219-
return deferredGroupedFieldSetRecord.deferredFragmentRecords.some(
216+
return pendingExecutionGroup.deferredFragmentRecords.some(
220217
(deferredFragmentRecord) => this._rootNodes.has(deferredFragmentRecord),
221218
);
222219
}
223220

224221
private _addDeferredFragment(
225222
deferredFragmentRecord: DeferredFragmentRecord,
226-
initialResultChildren: Set<SubsequentResultRecord> | undefined,
223+
initialResultChildren: Set<DeliveryGroup> | undefined,
227224
): void {
228225
if (this._rootNodes.has(deferredFragmentRecord)) {
229226
return;
@@ -238,14 +235,14 @@ export class IncrementalGraph {
238235
this._addDeferredFragment(parent, initialResultChildren);
239236
}
240237

241-
private _onDeferredGroupedFieldSet(
242-
deferredGroupedFieldSetRecord: DeferredGroupedFieldSetRecord,
238+
private _onExecutionGroup(
239+
pendingExecutionGroup: PendingExecutionGroup,
243240
): void {
244-
let deferredGroupedFieldSetResult = deferredGroupedFieldSetRecord.result;
245-
if (!(deferredGroupedFieldSetResult instanceof BoxedPromiseOrValue)) {
246-
deferredGroupedFieldSetResult = deferredGroupedFieldSetResult();
241+
let completedExecutionGroup = pendingExecutionGroup.result;
242+
if (!(completedExecutionGroup instanceof BoxedPromiseOrValue)) {
243+
completedExecutionGroup = completedExecutionGroup();
247244
}
248-
const value = deferredGroupedFieldSetResult.value;
245+
const value = completedExecutionGroup.value;
249246
if (isPromise(value)) {
250247
// eslint-disable-next-line @typescript-eslint/no-floating-promises
251248
value.then((resolved) => this._enqueue(resolved));

src/execution/IncrementalPublisher.ts

Lines changed: 25 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@ import type { GraphQLError } from '../error/GraphQLError.js';
77
import { IncrementalGraph } from './IncrementalGraph.js';
88
import type {
99
CancellableStreamRecord,
10+
CompletedExecutionGroup,
1011
CompletedResult,
1112
DeferredFragmentRecord,
12-
DeferredGroupedFieldSetResult,
13+
DeliveryGroup,
1314
ExperimentalIncrementalExecutionResults,
1415
IncrementalDataRecord,
1516
IncrementalDataRecordResult,
@@ -20,12 +21,11 @@ import type {
2021
PendingResult,
2122
StreamItemsResult,
2223
SubsequentIncrementalExecutionResult,
23-
SubsequentResultRecord,
2424
} from './types.js';
2525
import {
2626
isCancellableStreamRecord,
27-
isDeferredGroupedFieldSetResult,
28-
isNonReconcilableDeferredGroupedFieldSetResult,
27+
isCompletedExecutionGroup,
28+
isFailedExecutionGroup,
2929
} from './types.js';
3030

3131
export function buildIncrementalResponse(
@@ -92,7 +92,7 @@ class IncrementalPublisher {
9292
}
9393

9494
private _toPendingResults(
95-
newRootNodes: ReadonlyArray<SubsequentResultRecord>,
95+
newRootNodes: ReadonlyArray<DeliveryGroup>,
9696
): Array<PendingResult> {
9797
const pendingResults: Array<PendingResult> = [];
9898
for (const node of newRootNodes) {
@@ -207,27 +207,20 @@ class IncrementalPublisher {
207207
completedIncrementalData: IncrementalDataRecordResult,
208208
context: SubsequentIncrementalExecutionResultContext,
209209
): void {
210-
if (isDeferredGroupedFieldSetResult(completedIncrementalData)) {
211-
this._handleCompletedDeferredGroupedFieldSet(
212-
completedIncrementalData,
213-
context,
214-
);
210+
if (isCompletedExecutionGroup(completedIncrementalData)) {
211+
this._handleCompletedExecutionGroup(completedIncrementalData, context);
215212
} else {
216213
this._handleCompletedStreamItems(completedIncrementalData, context);
217214
}
218215
}
219216

220-
private _handleCompletedDeferredGroupedFieldSet(
221-
deferredGroupedFieldSetResult: DeferredGroupedFieldSetResult,
217+
private _handleCompletedExecutionGroup(
218+
completedExecutionGroup: CompletedExecutionGroup,
222219
context: SubsequentIncrementalExecutionResultContext,
223220
): void {
224-
if (
225-
isNonReconcilableDeferredGroupedFieldSetResult(
226-
deferredGroupedFieldSetResult,
227-
)
228-
) {
229-
for (const deferredFragmentRecord of deferredGroupedFieldSetResult
230-
.deferredGroupedFieldSetRecord.deferredFragmentRecords) {
221+
if (isFailedExecutionGroup(completedExecutionGroup)) {
222+
for (const deferredFragmentRecord of completedExecutionGroup
223+
.pendingExecutionGroup.deferredFragmentRecords) {
231224
const id = deferredFragmentRecord.id;
232225
if (
233226
!this._incrementalGraph.removeDeferredFragment(deferredFragmentRecord)
@@ -238,18 +231,18 @@ class IncrementalPublisher {
238231
invariant(id !== undefined);
239232
context.completed.push({
240233
id,
241-
errors: deferredGroupedFieldSetResult.errors,
234+
errors: completedExecutionGroup.errors,
242235
});
243236
}
244237
return;
245238
}
246239

247-
this._incrementalGraph.addCompletedReconcilableDeferredGroupedFieldSet(
248-
deferredGroupedFieldSetResult,
240+
this._incrementalGraph.addCompletedSuccessfulExecutionGroup(
241+
completedExecutionGroup,
249242
);
250243

251-
for (const deferredFragmentRecord of deferredGroupedFieldSetResult
252-
.deferredGroupedFieldSetRecord.deferredFragmentRecords) {
244+
for (const deferredFragmentRecord of completedExecutionGroup
245+
.pendingExecutionGroup.deferredFragmentRecords) {
253246
const completion = this._incrementalGraph.completeDeferredFragment(
254247
deferredFragmentRecord,
255248
);
@@ -259,16 +252,16 @@ class IncrementalPublisher {
259252
const id = deferredFragmentRecord.id;
260253
invariant(id !== undefined);
261254
const incremental = context.incremental;
262-
const { newRootNodes, reconcilableResults } = completion;
255+
const { newRootNodes, successfulExecutionGroups } = completion;
263256
context.pending.push(...this._toPendingResults(newRootNodes));
264-
for (const reconcilableResult of reconcilableResults) {
257+
for (const successfulExecutionGroup of successfulExecutionGroups) {
265258
const { bestId, subPath } = this._getBestIdAndSubPath(
266259
id,
267260
deferredFragmentRecord,
268-
reconcilableResult,
261+
successfulExecutionGroup,
269262
);
270263
const incrementalEntry: IncrementalDeferResult = {
271-
...reconcilableResult.result,
264+
...successfulExecutionGroup.result,
272265
id: bestId,
273266
};
274267
if (subPath !== undefined) {
@@ -329,13 +322,13 @@ class IncrementalPublisher {
329322
private _getBestIdAndSubPath(
330323
initialId: string,
331324
initialDeferredFragmentRecord: DeferredFragmentRecord,
332-
deferredGroupedFieldSetResult: DeferredGroupedFieldSetResult,
325+
completedExecutionGroup: CompletedExecutionGroup,
333326
): { bestId: string; subPath: ReadonlyArray<string | number> | undefined } {
334327
let maxLength = pathToArray(initialDeferredFragmentRecord.path).length;
335328
let bestId = initialId;
336329

337-
for (const deferredFragmentRecord of deferredGroupedFieldSetResult
338-
.deferredGroupedFieldSetRecord.deferredFragmentRecords) {
330+
for (const deferredFragmentRecord of completedExecutionGroup
331+
.pendingExecutionGroup.deferredFragmentRecords) {
339332
if (deferredFragmentRecord === initialDeferredFragmentRecord) {
340333
continue;
341334
}
@@ -352,7 +345,7 @@ class IncrementalPublisher {
352345
bestId = id;
353346
}
354347
}
355-
const subPath = deferredGroupedFieldSetResult.path.slice(maxLength);
348+
const subPath = completedExecutionGroup.path.slice(maxLength);
356349
return {
357350
bestId,
358351
subPath: subPath.length > 0 ? subPath : undefined,

src/execution/buildFieldPlan.ts renamed to src/execution/buildExecutionPlan.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,15 @@ import type {
99

1010
export type DeferUsageSet = ReadonlySet<DeferUsage>;
1111

12-
export interface FieldPlan {
12+
export interface ExecutionPlan {
1313
groupedFieldSet: GroupedFieldSet;
1414
newGroupedFieldSets: Map<DeferUsageSet, GroupedFieldSet>;
1515
}
1616

17-
export function buildFieldPlan(
17+
export function buildExecutionPlan(
1818
originalGroupedFieldSet: GroupedFieldSet,
1919
parentDeferUsages: DeferUsageSet = new Set<DeferUsage>(),
20-
): FieldPlan {
20+
): ExecutionPlan {
2121
const groupedFieldSet = new Map<string, FieldGroup>();
2222
const newGroupedFieldSets = new Map<DeferUsageSet, Map<string, FieldGroup>>();
2323
for (const [responseKey, fieldGroup] of originalGroupedFieldSet) {

0 commit comments

Comments
 (0)