Skip to content

Commit 8a66084

Browse files
committed
incremental: add id
TODO: use `id` to shorten `path` to `id` + `subPath`
1 parent fe65bc8 commit 8a66084

File tree

4 files changed

+242
-242
lines changed

4 files changed

+242
-242
lines changed

src/execution/IncrementalPublisher.ts

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -146,13 +146,13 @@ export type FormattedIncrementalResult<
146146
| FormattedIncrementalStreamResult<TData, TExtensions>;
147147

148148
export interface PendingResult {
149+
id: string;
149150
path: ReadonlyArray<string | number>;
150151
label?: string;
151152
}
152153

153154
export interface CompletedResult {
154-
path: ReadonlyArray<string | number>;
155-
label?: string;
155+
id: string;
156156
errors?: ReadonlyArray<GraphQLError>;
157157
}
158158

@@ -178,6 +178,7 @@ export interface FormattedCompletedResult {
178178
* @internal
179179
*/
180180
export class IncrementalPublisher {
181+
private _nextId = 0;
181182
private _released: Set<SubsequentResultRecord>;
182183
private _pending: Set<SubsequentResultRecord>;
183184

@@ -372,7 +373,10 @@ export class IncrementalPublisher {
372373
const pendingResults: Array<PendingResult> = [];
373374
for (const pendingSource of pendingSources) {
374375
pendingSource.pendingSent = true;
376+
const id = this._getNextId();
377+
pendingSource.id = id;
375378
const pendingResult: PendingResult = {
379+
id,
376380
path: pendingSource.path,
377381
};
378382
if (pendingSource.label !== undefined) {
@@ -383,6 +387,10 @@ export class IncrementalPublisher {
383387
return pendingResults;
384388
}
385389

390+
private _getNextId(): string {
391+
return String(this._nextId++);
392+
}
393+
386394
private _subscribe(): AsyncGenerator<
387395
SubsequentIncrementalExecutionResult,
388396
void,
@@ -596,11 +604,9 @@ export class IncrementalPublisher {
596604
completedRecord: DeferredFragmentRecord | StreamRecord,
597605
): CompletedResult {
598606
const result: CompletedResult = {
599-
path: completedRecord.path,
607+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
608+
id: completedRecord.id!,
600609
};
601-
if (completedRecord.label !== undefined) {
602-
result.label = completedRecord.label;
603-
}
604610
if (completedRecord.errors.length > 0) {
605611
result.errors = completedRecord.errors;
606612
}
@@ -736,6 +742,7 @@ export class DeferredGroupedFieldSetRecord {
736742
export class DeferredFragmentRecord {
737743
path: ReadonlyArray<string | number>;
738744
label: string | undefined;
745+
id: string | undefined;
739746
children: Set<SubsequentResultRecord>;
740747
deferredGroupedFieldSetRecords: Set<DeferredGroupedFieldSetRecord>;
741748
errors: Array<GraphQLError>;
@@ -758,6 +765,7 @@ export class DeferredFragmentRecord {
758765
export class StreamRecord {
759766
label: string | undefined;
760767
path: ReadonlyArray<string | number>;
768+
id: string | undefined;
761769
errors: Array<GraphQLError>;
762770
earlyReturn?: (() => Promise<unknown>) | undefined;
763771
pendingSent?: boolean;

0 commit comments

Comments
 (0)