Skip to content

Commit 2fe45b0

Browse files
committed
extract to separate file
1 parent 0d164ab commit 2fe45b0

File tree

2 files changed

+68
-66
lines changed

2 files changed

+68
-66
lines changed

Diff for: src/execution/DeferredFragmentFactory.ts

+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import type { Path } from '../jsutils/Path.js';
2+
3+
import type { DeferUsage } from './collectFields.js';
4+
import { DeferredFragmentRecord } from './types.js';
5+
6+
/**
7+
* @internal
8+
*/
9+
export class DeferredFragmentFactory {
10+
private _rootDeferredFragments = new Map<
11+
DeferUsage,
12+
DeferredFragmentRecord
13+
>();
14+
15+
get(deferUsage: DeferUsage, path: Path | undefined): DeferredFragmentRecord {
16+
const deferUsagePath = this._pathAtDepth(path, deferUsage.depth);
17+
let deferredFragmentRecords:
18+
| Map<DeferUsage, DeferredFragmentRecord>
19+
| undefined;
20+
if (deferUsagePath === undefined) {
21+
deferredFragmentRecords = this._rootDeferredFragments;
22+
} else {
23+
deferredFragmentRecords = (
24+
deferUsagePath as unknown as {
25+
deferredFragmentRecords: Map<DeferUsage, DeferredFragmentRecord>;
26+
}
27+
).deferredFragmentRecords;
28+
if (deferredFragmentRecords === undefined) {
29+
deferredFragmentRecords = new Map();
30+
(
31+
deferUsagePath as unknown as {
32+
deferredFragmentRecords: Map<DeferUsage, DeferredFragmentRecord>;
33+
}
34+
).deferredFragmentRecords = deferredFragmentRecords;
35+
}
36+
}
37+
let deferredFragmentRecord = deferredFragmentRecords.get(deferUsage);
38+
if (deferredFragmentRecord === undefined) {
39+
const { label, parentDeferUsage } = deferUsage;
40+
deferredFragmentRecord = new DeferredFragmentRecord(
41+
deferUsagePath,
42+
label,
43+
parentDeferUsage,
44+
);
45+
deferredFragmentRecords.set(deferUsage, deferredFragmentRecord);
46+
}
47+
return deferredFragmentRecord;
48+
}
49+
50+
private _pathAtDepth(
51+
path: Path | undefined,
52+
depth: number,
53+
): Path | undefined {
54+
if (depth === 0) {
55+
return;
56+
}
57+
const stack: Array<Path> = [];
58+
let currentPath = path;
59+
while (currentPath !== undefined) {
60+
stack.unshift(currentPath);
61+
currentPath = currentPath.prev;
62+
}
63+
return stack[depth - 1];
64+
}
65+
}

Diff for: src/execution/IncrementalGraph.ts

+3-66
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ import { promiseWithResolvers } from '../jsutils/promiseWithResolvers.js';
77
import type { GraphQLError } from '../error/GraphQLError.js';
88

99
import type { DeferUsage } from './collectFields.js';
10+
import { DeferredFragmentFactory } from './DeferredFragmentFactory.js';
1011
import type {
12+
DeferredFragmentRecord,
1113
DeliveryGroup,
1214
IncrementalDataRecord,
1315
IncrementalDataRecordResult,
@@ -16,72 +18,7 @@ import type {
1618
StreamRecord,
1719
SuccessfulExecutionGroup,
1820
} from './types.js';
19-
import {
20-
DeferredFragmentRecord,
21-
isDeferredFragmentRecord,
22-
isPendingExecutionGroup,
23-
} from './types.js';
24-
25-
/**
26-
* @internal
27-
*/
28-
class DeferredFragmentFactory {
29-
private _rootDeferredFragments = new Map<
30-
DeferUsage,
31-
DeferredFragmentRecord
32-
>();
33-
34-
get(deferUsage: DeferUsage, path: Path | undefined): DeferredFragmentRecord {
35-
const deferUsagePath = this._pathAtDepth(path, deferUsage.depth);
36-
let deferredFragmentRecords:
37-
| Map<DeferUsage, DeferredFragmentRecord>
38-
| undefined;
39-
if (deferUsagePath === undefined) {
40-
deferredFragmentRecords = this._rootDeferredFragments;
41-
} else {
42-
deferredFragmentRecords = (
43-
deferUsagePath as unknown as {
44-
deferredFragmentRecords: Map<DeferUsage, DeferredFragmentRecord>;
45-
}
46-
).deferredFragmentRecords;
47-
if (deferredFragmentRecords === undefined) {
48-
deferredFragmentRecords = new Map();
49-
(
50-
deferUsagePath as unknown as {
51-
deferredFragmentRecords: Map<DeferUsage, DeferredFragmentRecord>;
52-
}
53-
).deferredFragmentRecords = deferredFragmentRecords;
54-
}
55-
}
56-
let deferredFragmentRecord = deferredFragmentRecords.get(deferUsage);
57-
if (deferredFragmentRecord === undefined) {
58-
const { label, parentDeferUsage } = deferUsage;
59-
deferredFragmentRecord = new DeferredFragmentRecord(
60-
deferUsagePath,
61-
label,
62-
parentDeferUsage,
63-
);
64-
deferredFragmentRecords.set(deferUsage, deferredFragmentRecord);
65-
}
66-
return deferredFragmentRecord;
67-
}
68-
69-
private _pathAtDepth(
70-
path: Path | undefined,
71-
depth: number,
72-
): Path | undefined {
73-
if (depth === 0) {
74-
return;
75-
}
76-
const stack: Array<Path> = [];
77-
let currentPath = path;
78-
while (currentPath !== undefined) {
79-
stack.unshift(currentPath);
80-
currentPath = currentPath.prev;
81-
}
82-
return stack[depth - 1];
83-
}
84-
}
21+
import { isDeferredFragmentRecord, isPendingExecutionGroup } from './types.js';
8522

8623
/**
8724
* @internal

0 commit comments

Comments
 (0)