Skip to content

Commit 0da8e48

Browse files
committed
Simplify collectFields for @defer & @stream
1 parent 2e29180 commit 0da8e48

File tree

6 files changed

+326
-466
lines changed

6 files changed

+326
-466
lines changed

src/execution/IncrementalPublisher.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import type {
88
GraphQLFormattedError,
99
} from '../error/GraphQLError.js';
1010

11-
import type { GroupedFieldSet } from './collectFields.js';
11+
import type { DeferUsage, GroupedFieldSet } from './collectFields.js';
1212

1313
interface IncrementalUpdate<TData = unknown, TExtensions = ObjMap<unknown>> {
1414
pending: ReadonlyArray<PendingResult>;
@@ -611,8 +611,11 @@ export class IncrementalPublisher {
611611
const { data, deferredFragmentRecords } = deferredGroupedFieldSetRecord;
612612
let maxLength = deferredFragmentRecords[0].path.length;
613613
let maxIndex = 0;
614-
for (let i = 1; i < deferredFragmentRecords.length; i++) {
614+
for (let i = 0; i < deferredFragmentRecords.length; i++) {
615615
const deferredFragmentRecord = deferredFragmentRecords[i];
616+
if (deferredFragmentRecord.id == null) {
617+
continue;
618+
}
616619
const length = deferredFragmentRecord.path.length;
617620
if (length > maxLength) {
618621
maxLength = length;
@@ -763,7 +766,6 @@ export class DeferredGroupedFieldSetRecord {
763766
path: ReadonlyArray<string | number>;
764767
deferredFragmentRecords: ReadonlyArray<DeferredFragmentRecord>;
765768
groupedFieldSet: GroupedFieldSet;
766-
shouldInitiateDefer: boolean;
767769
errors: Array<GraphQLError>;
768770
data: ObjMap<unknown> | undefined;
769771
sent: boolean;
@@ -772,12 +774,10 @@ export class DeferredGroupedFieldSetRecord {
772774
path: Path | undefined;
773775
deferredFragmentRecords: ReadonlyArray<DeferredFragmentRecord>;
774776
groupedFieldSet: GroupedFieldSet;
775-
shouldInitiateDefer: boolean;
776777
}) {
777778
this.path = pathToArray(opts.path);
778779
this.deferredFragmentRecords = opts.deferredFragmentRecords;
779780
this.groupedFieldSet = opts.groupedFieldSet;
780-
this.shouldInitiateDefer = opts.shouldInitiateDefer;
781781
this.errors = [];
782782
this.sent = false;
783783
}
@@ -786,6 +786,7 @@ export class DeferredGroupedFieldSetRecord {
786786
/** @internal */
787787
export class DeferredFragmentRecord {
788788
path: ReadonlyArray<string | number>;
789+
deferUsage: DeferUsage;
789790
label: string | undefined;
790791
id: string | undefined;
791792
children: Set<SubsequentResultRecord>;
@@ -795,9 +796,10 @@ export class DeferredFragmentRecord {
795796
pendingSent?: boolean;
796797
_pending: Set<DeferredGroupedFieldSetRecord>;
797798

798-
constructor(opts: { path: Path | undefined; label: string | undefined }) {
799+
constructor(opts: { path: Path | undefined; deferUsage: DeferUsage }) {
799800
this.path = pathToArray(opts.path);
800-
this.label = opts.label;
801+
this.label = opts.deferUsage.label;
802+
this.deferUsage = opts.deferUsage;
801803
this.children = new Set();
802804
this.filtered = false;
803805
this.deferredGroupedFieldSetRecords = new Set();

0 commit comments

Comments
 (0)