Skip to content

Commit 64894d9

Browse files
committed
refactor(incremental): introduce BoxedPromiseOrValue to save resolved promise results
1 parent 2766922 commit 64894d9

File tree

7 files changed

+168
-224
lines changed

7 files changed

+168
-224
lines changed

src/execution/IncrementalGraph.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ export class IncrementalGraph {
110110
this._newPending.clear();
111111

112112
for (const incrementalDataRecord of this._newIncrementalDataRecords) {
113-
const result = incrementalDataRecord.result;
113+
const result = incrementalDataRecord.result.value;
114114
if (isPromise(result)) {
115115
// eslint-disable-next-line @typescript-eslint/no-floating-promises
116116
result.then((resolved) => this._enqueue(resolved));

src/execution/__tests__/defer-test.ts

Lines changed: 10 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -367,20 +367,14 @@ describe('Execute: defer directive', () => {
367367
},
368368
id: '0',
369369
},
370-
],
371-
completed: [{ id: '0' }],
372-
hasNext: true,
373-
},
374-
{
375-
incremental: [
376370
{
377371
data: {
378372
friends: [{ name: 'Han' }, { name: 'Leia' }, { name: 'C-3PO' }],
379373
},
380374
id: '1',
381375
},
382376
],
383-
completed: [{ id: '1' }],
377+
completed: [{ id: '0' }, { id: '1' }],
384378
hasNext: false,
385379
},
386380
]);
@@ -732,20 +726,14 @@ describe('Execute: defer directive', () => {
732726
},
733727
id: '0',
734728
},
735-
],
736-
completed: [{ id: '0' }],
737-
hasNext: true,
738-
},
739-
{
740-
incremental: [
741729
{
742730
data: {
743731
id: '1',
744732
},
745733
id: '1',
746734
},
747735
],
748-
completed: [{ id: '1' }],
736+
completed: [{ id: '0' }, { id: '1' }],
749737
hasNext: false,
750738
},
751739
]);
@@ -909,20 +897,14 @@ describe('Execute: defer directive', () => {
909897
},
910898
id: '0',
911899
},
912-
],
913-
completed: [{ id: '0' }],
914-
hasNext: true,
915-
},
916-
{
917-
incremental: [
918900
{
919901
data: {
920902
bar: 'bar',
921903
},
922904
id: '1',
923905
},
924906
],
925-
completed: [{ id: '1' }],
907+
completed: [{ id: '0' }, { id: '1' }],
926908
hasNext: false,
927909
},
928910
]);
@@ -983,37 +965,27 @@ describe('Execute: defer directive', () => {
983965
hasNext: true,
984966
},
985967
{
986-
pending: [{ id: '1', path: ['hero', 'nestedObject'] }],
968+
pending: [
969+
{ id: '1', path: ['hero', 'nestedObject'] },
970+
{ id: '2', path: ['hero', 'nestedObject', 'deeperObject'] },
971+
],
987972
incremental: [
988973
{
989974
data: { bar: 'bar' },
990975
id: '0',
991976
subPath: ['nestedObject', 'deeperObject'],
992977
},
993-
],
994-
completed: [{ id: '0' }],
995-
hasNext: true,
996-
},
997-
{
998-
pending: [{ id: '2', path: ['hero', 'nestedObject', 'deeperObject'] }],
999-
incremental: [
1000978
{
1001979
data: { baz: 'baz' },
1002980
id: '1',
1003981
subPath: ['deeperObject'],
1004982
},
1005-
],
1006-
completed: [{ id: '1' }],
1007-
hasNext: true,
1008-
},
1009-
{
1010-
incremental: [
1011983
{
1012984
data: { bak: 'bak' },
1013985
id: '2',
1014986
},
1015987
],
1016-
completed: [{ id: '2' }],
988+
completed: [{ id: '0' }, { id: '1' }, { id: '2' }],
1017989
hasNext: false,
1018990
},
1019991
]);
@@ -2080,17 +2052,11 @@ describe('Execute: defer directive', () => {
20802052
data: { name: 'slow', friends: [{}, {}, {}] },
20812053
id: '0',
20822054
},
2083-
],
2084-
completed: [{ id: '0' }],
2085-
hasNext: true,
2086-
},
2087-
{
2088-
incremental: [
20892055
{ data: { name: 'Han' }, id: '1' },
20902056
{ data: { name: 'Leia' }, id: '2' },
20912057
{ data: { name: 'C-3PO' }, id: '3' },
20922058
],
2093-
completed: [{ id: '1' }, { id: '2' }, { id: '3' }],
2059+
completed: [{ id: '0' }, { id: '1' }, { id: '2' }, { id: '3' }],
20942060
hasNext: false,
20952061
},
20962062
]);
@@ -2136,17 +2102,11 @@ describe('Execute: defer directive', () => {
21362102
},
21372103
id: '0',
21382104
},
2139-
],
2140-
completed: [{ id: '0' }],
2141-
hasNext: true,
2142-
},
2143-
{
2144-
incremental: [
21452105
{ data: { name: 'Han' }, id: '1' },
21462106
{ data: { name: 'Leia' }, id: '2' },
21472107
{ data: { name: 'C-3PO' }, id: '3' },
21482108
],
2149-
completed: [{ id: '1' }, { id: '2' }, { id: '3' }],
2109+
completed: [{ id: '0' }, { id: '1' }, { id: '2' }, { id: '3' }],
21502110
hasNext: false,
21512111
},
21522112
]);

src/execution/__tests__/stream-test.ts

Lines changed: 4 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -369,20 +369,10 @@ describe('Execute: stream directive', () => {
369369
items: [{ name: 'Luke', id: '1' }],
370370
id: '0',
371371
},
372-
],
373-
hasNext: true,
374-
},
375-
{
376-
incremental: [
377372
{
378373
items: [{ name: 'Han', id: '2' }],
379374
id: '0',
380375
},
381-
],
382-
hasNext: true,
383-
},
384-
{
385-
incremental: [
386376
{
387377
items: [{ name: 'Leia', id: '3' }],
388378
id: '0',
@@ -527,11 +517,6 @@ describe('Execute: stream directive', () => {
527517
},
528518
],
529519
},
530-
],
531-
hasNext: true,
532-
},
533-
{
534-
incremental: [
535520
{
536521
items: [{ name: 'Leia', id: '3' }],
537522
id: '0',
@@ -572,11 +557,6 @@ describe('Execute: stream directive', () => {
572557
items: [{ name: 'Luke', id: '1' }],
573558
id: '0',
574559
},
575-
],
576-
hasNext: true,
577-
},
578-
{
579-
incremental: [
580560
{
581561
items: [{ name: 'Han', id: '2' }],
582562
id: '0',
@@ -591,9 +571,6 @@ describe('Execute: stream directive', () => {
591571
id: '0',
592572
},
593573
],
594-
hasNext: true,
595-
},
596-
{
597574
completed: [{ id: '0' }],
598575
hasNext: false,
599576
},
@@ -633,9 +610,6 @@ describe('Execute: stream directive', () => {
633610
id: '0',
634611
},
635612
],
636-
hasNext: true,
637-
},
638-
{
639613
completed: [{ id: '0' }],
640614
hasNext: false,
641615
},
@@ -946,11 +920,6 @@ describe('Execute: stream directive', () => {
946920
},
947921
],
948922
},
949-
],
950-
hasNext: true,
951-
},
952-
{
953-
incremental: [
954923
{
955924
items: [{ nonNullName: 'Han' }],
956925
id: '0',
@@ -997,11 +966,6 @@ describe('Execute: stream directive', () => {
997966
},
998967
],
999968
},
1000-
],
1001-
hasNext: true,
1002-
},
1003-
{
1004-
incremental: [
1005969
{
1006970
items: [{ nonNullName: 'Han' }],
1007971
id: '0',
@@ -1132,19 +1096,11 @@ describe('Execute: stream directive', () => {
11321096
},
11331097
],
11341098
},
1135-
],
1136-
hasNext: true,
1137-
},
1138-
{
1139-
incremental: [
11401099
{
11411100
items: [{ nonNullName: 'Han' }],
11421101
id: '0',
11431102
},
11441103
],
1145-
hasNext: true,
1146-
},
1147-
{
11481104
completed: [{ id: '0' }],
11491105
hasNext: false,
11501106
},
@@ -1460,11 +1416,7 @@ describe('Execute: stream directive', () => {
14601416
],
14611417
},
14621418
],
1463-
completed: [{ id: '0' }],
1464-
hasNext: true,
1465-
},
1466-
{
1467-
completed: [{ id: '1' }],
1419+
completed: [{ id: '0' }, { id: '1' }],
14681420
hasNext: false,
14691421
},
14701422
]);
@@ -1570,9 +1522,6 @@ describe('Execute: stream directive', () => {
15701522
],
15711523
},
15721524
],
1573-
hasNext: true,
1574-
},
1575-
{
15761525
completed: [{ id: '0' }],
15771526
hasNext: false,
15781527
},
@@ -1724,9 +1673,6 @@ describe('Execute: stream directive', () => {
17241673
id: '0',
17251674
},
17261675
],
1727-
hasNext: true,
1728-
},
1729-
{
17301676
completed: [{ id: '0' }],
17311677
hasNext: false,
17321678
},
@@ -1774,19 +1720,11 @@ describe('Execute: stream directive', () => {
17741720
items: [{ id: '1', name: 'Luke' }],
17751721
id: '0',
17761722
},
1777-
],
1778-
hasNext: true,
1779-
},
1780-
{
1781-
incremental: [
17821723
{
17831724
items: [{ id: '2', name: 'Han' }],
17841725
id: '0',
17851726
},
17861727
],
1787-
hasNext: true,
1788-
},
1789-
{
17901728
completed: [{ id: '0' }],
17911729
hasNext: false,
17921730
},
@@ -1844,48 +1782,22 @@ describe('Execute: stream directive', () => {
18441782
data: { scalarField: 'slow', nestedFriendList: [] },
18451783
id: '0',
18461784
},
1847-
],
1848-
completed: [{ id: '0' }],
1849-
hasNext: true,
1850-
},
1851-
done: false,
1852-
});
1853-
const result3 = await iterator.next();
1854-
expectJSON(result3).toDeepEqual({
1855-
value: {
1856-
incremental: [
18571785
{
18581786
items: [{ name: 'Luke' }],
18591787
id: '1',
18601788
},
1861-
],
1862-
hasNext: true,
1863-
},
1864-
done: false,
1865-
});
1866-
const result4 = await iterator.next();
1867-
expectJSON(result4).toDeepEqual({
1868-
value: {
1869-
incremental: [
18701789
{
18711790
items: [{ name: 'Han' }],
18721791
id: '1',
18731792
},
18741793
],
1875-
hasNext: true,
1876-
},
1877-
done: false,
1878-
});
1879-
const result5 = await iterator.next();
1880-
expectJSON(result5).toDeepEqual({
1881-
value: {
1882-
completed: [{ id: '1' }],
1794+
completed: [{ id: '0' }, { id: '1' }],
18831795
hasNext: false,
18841796
},
18851797
done: false,
18861798
});
1887-
const result6 = await iterator.next();
1888-
expectJSON(result6).toDeepEqual({
1799+
const result3 = await iterator.next();
1800+
expectJSON(result3).toDeepEqual({
18891801
value: undefined,
18901802
done: true,
18911803
});

0 commit comments

Comments
 (0)