@@ -4,6 +4,7 @@ import { describe, it } from 'mocha';
4
4
import { expectJSON } from '../../__testUtils__/expectJSON.js' ;
5
5
6
6
import type { PromiseOrValue } from '../../jsutils/PromiseOrValue.js' ;
7
+ import { promiseWithResolvers } from '../../jsutils/promiseWithResolvers.js' ;
7
8
8
9
import type { DocumentNode } from '../../language/ast.js' ;
9
10
import { parse } from '../../language/parser.js' ;
@@ -129,14 +130,6 @@ async function completeAsync(
129
130
return Promise . all ( promises ) ;
130
131
}
131
132
132
- function createResolvablePromise < T > ( ) : [ Promise < T > , ( value ?: T ) => void ] {
133
- let resolveFn ;
134
- const promise = new Promise < T > ( ( resolve ) => {
135
- resolveFn = resolve ;
136
- } ) ;
137
- return [ promise , resolveFn as unknown as ( value ?: T ) => void ] ;
138
- }
139
-
140
133
describe ( 'Execute: stream directive' , ( ) => {
141
134
it ( 'Can stream a list field' , async ( ) => {
142
135
const document = parse ( '{ scalarList @stream(initialCount: 1) }' ) ;
@@ -1564,7 +1557,8 @@ describe('Execute: stream directive', () => {
1564
1557
] ) ;
1565
1558
} ) ;
1566
1559
it ( 'Returns payloads in correct order when parent deferred fragment resolves slower than stream' , async ( ) => {
1567
- const [ slowFieldPromise , resolveSlowField ] = createResolvablePromise ( ) ;
1560
+ const { promise : slowFieldPromise , resolve : resolveSlowField } =
1561
+ promiseWithResolvers ( ) ;
1568
1562
const document = parse ( `
1569
1563
query {
1570
1564
nestedObject {
@@ -1655,9 +1649,12 @@ describe('Execute: stream directive', () => {
1655
1649
} ) ;
1656
1650
} ) ;
1657
1651
it ( 'Can @defer fields that are resolved after async iterable is complete' , async ( ) => {
1658
- const [ slowFieldPromise , resolveSlowField ] = createResolvablePromise ( ) ;
1659
- const [ iterableCompletionPromise , resolveIterableCompletion ] =
1660
- createResolvablePromise ( ) ;
1652
+ const { promise : slowFieldPromise , resolve : resolveSlowField } =
1653
+ promiseWithResolvers ( ) ;
1654
+ const {
1655
+ promise : iterableCompletionPromise ,
1656
+ resolve : resolveIterableCompletion ,
1657
+ } = promiseWithResolvers ( ) ;
1661
1658
1662
1659
const document = parse ( `
1663
1660
query {
@@ -1697,7 +1694,7 @@ describe('Execute: stream directive', () => {
1697
1694
} ) ;
1698
1695
1699
1696
const result2Promise = iterator . next ( ) ;
1700
- resolveIterableCompletion ( ) ;
1697
+ resolveIterableCompletion ( null ) ;
1701
1698
const result2 = await result2Promise ;
1702
1699
expectJSON ( result2 ) . toDeepEqual ( {
1703
1700
value : {
@@ -1741,9 +1738,12 @@ describe('Execute: stream directive', () => {
1741
1738
} ) ;
1742
1739
} ) ;
1743
1740
it ( 'Can @defer fields that are resolved before async iterable is complete' , async ( ) => {
1744
- const [ slowFieldPromise , resolveSlowField ] = createResolvablePromise ( ) ;
1745
- const [ iterableCompletionPromise , resolveIterableCompletion ] =
1746
- createResolvablePromise ( ) ;
1741
+ const { promise : slowFieldPromise , resolve : resolveSlowField } =
1742
+ promiseWithResolvers ( ) ;
1743
+ const {
1744
+ promise : iterableCompletionPromise ,
1745
+ resolve : resolveIterableCompletion ,
1746
+ } = promiseWithResolvers ( ) ;
1747
1747
1748
1748
const document = parse ( `
1749
1749
query {
@@ -1819,7 +1819,7 @@ describe('Execute: stream directive', () => {
1819
1819
done : false ,
1820
1820
} ) ;
1821
1821
const result4Promise = iterator . next ( ) ;
1822
- resolveIterableCompletion ( ) ;
1822
+ resolveIterableCompletion ( null ) ;
1823
1823
const result4 = await result4Promise ;
1824
1824
expectJSON ( result4 ) . toDeepEqual ( {
1825
1825
value : { hasNext : false } ,
0 commit comments