Skip to content

Commit

Permalink
refactor(incremental): introduce BoxedPromiseOrValue to save resolved…
Browse files Browse the repository at this point in the history
… promise results
  • Loading branch information
yaacovCR committed Jun 3, 2024
1 parent 8bfd7f5 commit 32272a6
Show file tree
Hide file tree
Showing 7 changed files with 168 additions and 224 deletions.
2 changes: 1 addition & 1 deletion src/execution/IncrementalGraph.ts
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ export class IncrementalGraph {
this._newPending.clear();

for (const incrementalDataRecord of this._newIncrementalDataRecords) {
const result = incrementalDataRecord.result;
const result = incrementalDataRecord.result.value;
if (isPromise(result)) {
// eslint-disable-next-line @typescript-eslint/no-floating-promises
result.then((resolved) => this._enqueue(resolved));
Expand Down
60 changes: 10 additions & 50 deletions src/execution/__tests__/defer-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -367,20 +367,14 @@ describe('Execute: defer directive', () => {
},
id: '0',
},
],
completed: [{ id: '0' }],
hasNext: true,
},
{
incremental: [
{
data: {
friends: [{ name: 'Han' }, { name: 'Leia' }, { name: 'C-3PO' }],
},
id: '1',
},
],
completed: [{ id: '1' }],
completed: [{ id: '0' }, { id: '1' }],
hasNext: false,
},
]);
Expand Down Expand Up @@ -732,20 +726,14 @@ describe('Execute: defer directive', () => {
},
id: '0',
},
],
completed: [{ id: '0' }],
hasNext: true,
},
{
incremental: [
{
data: {
id: '1',
},
id: '1',
},
],
completed: [{ id: '1' }],
completed: [{ id: '0' }, { id: '1' }],
hasNext: false,
},
]);
Expand Down Expand Up @@ -909,20 +897,14 @@ describe('Execute: defer directive', () => {
},
id: '0',
},
],
completed: [{ id: '0' }],
hasNext: true,
},
{
incremental: [
{
data: {
bar: 'bar',
},
id: '1',
},
],
completed: [{ id: '1' }],
completed: [{ id: '0' }, { id: '1' }],
hasNext: false,
},
]);
Expand Down Expand Up @@ -983,37 +965,27 @@ describe('Execute: defer directive', () => {
hasNext: true,
},
{
pending: [{ id: '1', path: ['hero', 'nestedObject'] }],
pending: [
{ id: '1', path: ['hero', 'nestedObject'] },
{ id: '2', path: ['hero', 'nestedObject', 'deeperObject'] },
],
incremental: [
{
data: { bar: 'bar' },
id: '0',
subPath: ['nestedObject', 'deeperObject'],
},
],
completed: [{ id: '0' }],
hasNext: true,
},
{
pending: [{ id: '2', path: ['hero', 'nestedObject', 'deeperObject'] }],
incremental: [
{
data: { baz: 'baz' },
id: '1',
subPath: ['deeperObject'],
},
],
completed: [{ id: '1' }],
hasNext: true,
},
{
incremental: [
{
data: { bak: 'bak' },
id: '2',
},
],
completed: [{ id: '2' }],
completed: [{ id: '0' }, { id: '1' }, { id: '2' }],
hasNext: false,
},
]);
Expand Down Expand Up @@ -2080,17 +2052,11 @@ describe('Execute: defer directive', () => {
data: { name: 'slow', friends: [{}, {}, {}] },
id: '0',
},
],
completed: [{ id: '0' }],
hasNext: true,
},
{
incremental: [
{ data: { name: 'Han' }, id: '1' },
{ data: { name: 'Leia' }, id: '2' },
{ data: { name: 'C-3PO' }, id: '3' },
],
completed: [{ id: '1' }, { id: '2' }, { id: '3' }],
completed: [{ id: '0' }, { id: '1' }, { id: '2' }, { id: '3' }],
hasNext: false,
},
]);
Expand Down Expand Up @@ -2136,17 +2102,11 @@ describe('Execute: defer directive', () => {
},
id: '0',
},
],
completed: [{ id: '0' }],
hasNext: true,
},
{
incremental: [
{ data: { name: 'Han' }, id: '1' },
{ data: { name: 'Leia' }, id: '2' },
{ data: { name: 'C-3PO' }, id: '3' },
],
completed: [{ id: '1' }, { id: '2' }, { id: '3' }],
completed: [{ id: '0' }, { id: '1' }, { id: '2' }, { id: '3' }],
hasNext: false,
},
]);
Expand Down
96 changes: 4 additions & 92 deletions src/execution/__tests__/stream-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -369,20 +369,10 @@ describe('Execute: stream directive', () => {
items: [{ name: 'Luke', id: '1' }],
id: '0',
},
],
hasNext: true,
},
{
incremental: [
{
items: [{ name: 'Han', id: '2' }],
id: '0',
},
],
hasNext: true,
},
{
incremental: [
{
items: [{ name: 'Leia', id: '3' }],
id: '0',
Expand Down Expand Up @@ -527,11 +517,6 @@ describe('Execute: stream directive', () => {
},
],
},
],
hasNext: true,
},
{
incremental: [
{
items: [{ name: 'Leia', id: '3' }],
id: '0',
Expand Down Expand Up @@ -572,11 +557,6 @@ describe('Execute: stream directive', () => {
items: [{ name: 'Luke', id: '1' }],
id: '0',
},
],
hasNext: true,
},
{
incremental: [
{
items: [{ name: 'Han', id: '2' }],
id: '0',
Expand All @@ -591,9 +571,6 @@ describe('Execute: stream directive', () => {
id: '0',
},
],
hasNext: true,
},
{
completed: [{ id: '0' }],
hasNext: false,
},
Expand Down Expand Up @@ -633,9 +610,6 @@ describe('Execute: stream directive', () => {
id: '0',
},
],
hasNext: true,
},
{
completed: [{ id: '0' }],
hasNext: false,
},
Expand Down Expand Up @@ -946,11 +920,6 @@ describe('Execute: stream directive', () => {
},
],
},
],
hasNext: true,
},
{
incremental: [
{
items: [{ nonNullName: 'Han' }],
id: '0',
Expand Down Expand Up @@ -997,11 +966,6 @@ describe('Execute: stream directive', () => {
},
],
},
],
hasNext: true,
},
{
incremental: [
{
items: [{ nonNullName: 'Han' }],
id: '0',
Expand Down Expand Up @@ -1132,19 +1096,11 @@ describe('Execute: stream directive', () => {
},
],
},
],
hasNext: true,
},
{
incremental: [
{
items: [{ nonNullName: 'Han' }],
id: '0',
},
],
hasNext: true,
},
{
completed: [{ id: '0' }],
hasNext: false,
},
Expand Down Expand Up @@ -1460,11 +1416,7 @@ describe('Execute: stream directive', () => {
],
},
],
completed: [{ id: '0' }],
hasNext: true,
},
{
completed: [{ id: '1' }],
completed: [{ id: '0' }, { id: '1' }],
hasNext: false,
},
]);
Expand Down Expand Up @@ -1570,9 +1522,6 @@ describe('Execute: stream directive', () => {
],
},
],
hasNext: true,
},
{
completed: [{ id: '0' }],
hasNext: false,
},
Expand Down Expand Up @@ -1724,9 +1673,6 @@ describe('Execute: stream directive', () => {
id: '0',
},
],
hasNext: true,
},
{
completed: [{ id: '0' }],
hasNext: false,
},
Expand Down Expand Up @@ -1774,19 +1720,11 @@ describe('Execute: stream directive', () => {
items: [{ id: '1', name: 'Luke' }],
id: '0',
},
],
hasNext: true,
},
{
incremental: [
{
items: [{ id: '2', name: 'Han' }],
id: '0',
},
],
hasNext: true,
},
{
completed: [{ id: '0' }],
hasNext: false,
},
Expand Down Expand Up @@ -1844,48 +1782,22 @@ describe('Execute: stream directive', () => {
data: { scalarField: 'slow', nestedFriendList: [] },
id: '0',
},
],
completed: [{ id: '0' }],
hasNext: true,
},
done: false,
});
const result3 = await iterator.next();
expectJSON(result3).toDeepEqual({
value: {
incremental: [
{
items: [{ name: 'Luke' }],
id: '1',
},
],
hasNext: true,
},
done: false,
});
const result4 = await iterator.next();
expectJSON(result4).toDeepEqual({
value: {
incremental: [
{
items: [{ name: 'Han' }],
id: '1',
},
],
hasNext: true,
},
done: false,
});
const result5 = await iterator.next();
expectJSON(result5).toDeepEqual({
value: {
completed: [{ id: '1' }],
completed: [{ id: '0' }, { id: '1' }],
hasNext: false,
},
done: false,
});
const result6 = await iterator.next();
expectJSON(result6).toDeepEqual({
const result3 = await iterator.next();
expectJSON(result3).toDeepEqual({
value: undefined,
done: true,
});
Expand Down
Loading

0 comments on commit 32272a6

Please sign in to comment.