Skip to content

Commit f3fafa7

Browse files
committed
remove changes to stream from this PR
1 parent 33fa60e commit f3fafa7

File tree

5 files changed

+303
-235
lines changed

5 files changed

+303
-235
lines changed

src/execution/IncrementalGraph.ts

Lines changed: 31 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
11
import { isPromise } from '../jsutils/isPromise.js';
22
import { promiseWithResolvers } from '../jsutils/promiseWithResolvers.js';
33

4-
import type { GraphQLError } from '../error/GraphQLError.js';
5-
64
import type {
75
CompletedDeferredGroupedFieldSet,
86
CompletedIncrementalData,
97
CompletedReconcilableDeferredGroupedFieldSet,
108
DeferredFragmentRecord,
119
DeferredGroupedFieldSetRecord,
1210
IncrementalDataRecord,
13-
StreamItemRecord,
11+
StreamItemsRecord,
1412
StreamRecord,
1513
SubsequentResultRecord,
1614
} from './types.js';
17-
import { isDeferredGroupedFieldSetRecord } from './types.js';
15+
import {
16+
isDeferredGroupedFieldSetRecord,
17+
isStreamItemsRecord,
18+
} from './types.js';
1819

1920
interface DeferredFragmentNode {
2021
deferredFragmentRecord: DeferredFragmentRecord;
@@ -30,9 +31,9 @@ function isDeferredFragmentNode(
3031
}
3132

3233
function isStreamNode(
33-
record: SubsequentResultNode | IncrementalDataRecord,
34-
): record is StreamRecord {
35-
return 'streamItemRecords' in record;
34+
subsequentResultNode: SubsequentResultNode,
35+
): subsequentResultNode is StreamRecord {
36+
return 'path' in subsequentResultNode;
3637
}
3738

3839
type SubsequentResultNode = DeferredFragmentNode | StreamRecord;
@@ -70,7 +71,7 @@ export class IncrementalGraph {
7071
if (isDeferredGroupedFieldSetRecord(incrementalDataRecord)) {
7172
this._addDeferredGroupedFieldSetRecord(incrementalDataRecord);
7273
} else {
73-
this._addStreamRecord(incrementalDataRecord);
74+
this._addStreamItemsRecord(incrementalDataRecord);
7475
}
7576
}
7677
}
@@ -100,7 +101,6 @@ export class IncrementalGraph {
100101
if (isStreamNode(node)) {
101102
this._pending.add(node);
102103
newPending.add(node);
103-
this._newIncrementalDataRecords.add(node);
104104
} else if (node.deferredGroupedFieldSetRecords.size > 0) {
105105
for (const deferredGroupedFieldSetNode of node.deferredGroupedFieldSetRecords) {
106106
this._newIncrementalDataRecords.add(deferredGroupedFieldSetNode);
@@ -116,12 +116,22 @@ export class IncrementalGraph {
116116
this._newPending.clear();
117117

118118
for (const incrementalDataRecord of this._newIncrementalDataRecords) {
119-
if (isStreamNode(incrementalDataRecord)) {
120-
// eslint-disable-next-line @typescript-eslint/no-floating-promises
121-
this._onStreamItems(
122-
incrementalDataRecord,
123-
incrementalDataRecord.streamItemRecords,
124-
);
119+
if (isStreamItemsRecord(incrementalDataRecord)) {
120+
const result = incrementalDataRecord.streamItemsResult.value;
121+
if (isPromise(result)) {
122+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
123+
result.then((resolved) =>
124+
this._enqueue({
125+
streamItemsRecord: incrementalDataRecord,
126+
streamItemsResult: resolved,
127+
}),
128+
);
129+
} else {
130+
this._enqueue({
131+
streamItemsRecord: incrementalDataRecord,
132+
streamItemsResult: result,
133+
});
134+
}
125135
} else {
126136
const result =
127137
incrementalDataRecord.deferredGroupedFieldSetResult.value;
@@ -264,8 +274,12 @@ export class IncrementalGraph {
264274
}
265275
}
266276

267-
private _addStreamRecord(streamRecord: StreamRecord): void {
268-
this._newPending.add(streamRecord);
277+
private _addStreamItemsRecord(streamItemsRecord: StreamItemsRecord): void {
278+
const streamRecord = streamItemsRecord.streamRecord;
279+
if (!this._pending.has(streamRecord)) {
280+
this._newPending.add(streamRecord);
281+
}
282+
this._newIncrementalDataRecords.add(streamItemsRecord);
269283
}
270284

271285
private _addDeferredFragmentNode(
@@ -297,71 +311,6 @@ export class IncrementalGraph {
297311
return deferredFragmentNode;
298312
}
299313

300-
private async _onStreamItems(
301-
streamRecord: StreamRecord,
302-
streamItemRecords: Array<StreamItemRecord>,
303-
): Promise<void> {
304-
let items: Array<unknown> = [];
305-
let errors: Array<GraphQLError> = [];
306-
let incrementalDataRecords: Array<IncrementalDataRecord> = [];
307-
let streamItemRecord: StreamItemRecord | undefined;
308-
while ((streamItemRecord = streamItemRecords.shift()) !== undefined) {
309-
let result = streamItemRecord.value;
310-
if (isPromise(result)) {
311-
if (items.length > 0) {
312-
this._enqueue({
313-
streamRecord,
314-
streamItemsResult: {
315-
result:
316-
// TODO add additional test case or rework for coverage
317-
errors.length > 0 /* c8 ignore start */
318-
? { items, errors } /* c8 ignore stop */
319-
: { items },
320-
incrementalDataRecords,
321-
},
322-
});
323-
items = [];
324-
errors = [];
325-
incrementalDataRecords = [];
326-
}
327-
// eslint-disable-next-line no-await-in-loop
328-
result = await result;
329-
// wait an additional tick to coalesce resolving additional promises
330-
// within the queue
331-
// eslint-disable-next-line no-await-in-loop
332-
await Promise.resolve();
333-
}
334-
if (result.item === undefined) {
335-
if (items.length > 0) {
336-
this._enqueue({
337-
streamRecord,
338-
streamItemsResult: {
339-
result: errors.length > 0 ? { items, errors } : { items },
340-
incrementalDataRecords,
341-
},
342-
});
343-
}
344-
this._enqueue({
345-
streamRecord,
346-
streamItemsResult:
347-
result.errors === undefined
348-
? {}
349-
: {
350-
errors: result.errors,
351-
},
352-
});
353-
return;
354-
}
355-
items.push(result.item);
356-
if (result.errors !== undefined) {
357-
errors.push(...result.errors);
358-
}
359-
if (result.incrementalDataRecords !== undefined) {
360-
incrementalDataRecords.push(...result.incrementalDataRecords);
361-
}
362-
}
363-
}
364-
365314
private *_yieldCurrentCompletedIncrementalData(
366315
first: CompletedIncrementalData,
367316
): Generator<CompletedIncrementalData> {

src/execution/IncrementalPublisher.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -298,8 +298,9 @@ class IncrementalPublisher {
298298
completedStreamItems: CompletedStreamItems,
299299
context: SubsequentIncrementalExecutionResultContext,
300300
): void {
301-
const { streamRecord, streamItemsResult } = completedStreamItems;
302-
const id = streamRecord.id;
301+
const { streamItemsRecord, streamItemsResult } = completedStreamItems;
302+
const streamRecord = streamItemsRecord.streamRecord;
303+
const id = streamItemsRecord.streamRecord.id;
303304
invariant(id !== undefined);
304305
if (streamItemsResult.errors !== undefined) {
305306
this._incrementalGraph.removeStream(streamRecord);

0 commit comments

Comments
 (0)