88} from '@envelop/testing' ;
99import { OnExecuteDoneHookResult , OnSubscribeResultResult } from '@envelop/types' ;
1010import { makeExecutableSchema } from '@graphql-tools/schema' ;
11+ import { fakePromise } from '@whatwg-node/promise-helpers' ;
1112import { query , schema } from './common.js' ;
1213
1314type Deferred < T = void > = {
@@ -324,6 +325,11 @@ describe('execute', () => {
324325 async throw ( ) {
325326 throw new Error ( 'Noop.' ) ;
326327 } ,
328+ [ Symbol . asyncDispose ] ( ) {
329+ // This is a no-op, but we need to implement it to ensure that the AsyncGenerator
330+ // is properly cleaned up when the subscription is disposed.
331+ return fakePromise ( ) ;
332+ } ,
327333 } ) ;
328334
329335 const teskit = createTestkit (
@@ -380,24 +386,30 @@ describe('execute', () => {
380386 const delayNextDeferred = createDeferred ( ) ;
381387 let isReturnCalled = false ;
382388
383- const streamExecuteFn = ( ) : AsyncGenerator => ( {
384- [ Symbol . asyncIterator ] ( ) {
385- return this ;
386- } ,
387- async next ( ) {
388- return delayNextDeferred . promise . then ( ( ) => ( {
389- value : { data : { alphabet : 'a' } } ,
390- done : false ,
391- } ) ) ;
392- } ,
393- async return ( ) {
394- isReturnCalled = true ;
395- return { done : true , value : undefined } ;
396- } ,
397- async throw ( ) {
398- throw new Error ( 'Noop.' ) ;
399- } ,
400- } ) ;
389+ const streamExecuteFn = ( ) =>
390+ ( {
391+ [ Symbol . asyncIterator ] ( ) {
392+ return this ;
393+ } ,
394+ async next ( ) {
395+ return delayNextDeferred . promise . then ( ( ) => ( {
396+ value : { data : { alphabet : 'a' } } ,
397+ done : false ,
398+ } ) ) ;
399+ } ,
400+ async return ( ) {
401+ isReturnCalled = true ;
402+ return { done : true , value : undefined } ;
403+ } ,
404+ async throw ( ) {
405+ throw new Error ( 'Noop.' ) ;
406+ } ,
407+ [ Symbol . asyncDispose ] ( ) {
408+ // This is a no-op, but we need to implement it to ensure that the AsyncGenerator
409+ // is properly cleaned up when the subscription is disposed.
410+ return fakePromise ( ) ;
411+ } ,
412+ } ) as AsyncGenerator ;
401413
402414 const teskit = createTestkit (
403415 [
@@ -462,7 +474,7 @@ describe('execute', () => {
462474 expect . assertions ( 2 ) ;
463475 let isReturnCalled = false ;
464476 const values = [ 'a' , 'b' , 'c' , 'd' ] ;
465- const source : AsyncGenerator = {
477+ const source = {
466478 [ Symbol . asyncIterator ] ( ) {
467479 return this ;
468480 } ,
@@ -480,7 +492,12 @@ describe('execute', () => {
480492 async throw ( ) {
481493 throw new Error ( 'Noop.' ) ;
482494 } ,
483- } ;
495+ [ Symbol . asyncDispose ] ( ) {
496+ // This is a no-op, but we need to implement it to ensure that the AsyncGenerator
497+ // is properly cleaned up when the subscription is disposed.
498+ return fakePromise ( ) ;
499+ } ,
500+ } as AsyncGenerator ;
484501
485502 const schema = makeExecutableSchema ( {
486503 typeDefs : /* GraphQL */ `
@@ -575,7 +592,7 @@ it.each([
575592 const delayNextDeferred = createDeferred ( ) ;
576593 let isReturnCalled = false ;
577594
578- const source : AsyncGenerator = {
595+ const source = {
579596 [ Symbol . asyncIterator ] ( ) {
580597 return this ;
581598 } ,
@@ -592,7 +609,12 @@ it.each([
592609 async throw ( ) {
593610 throw new Error ( 'Noop.' ) ;
594611 } ,
595- } ;
612+ [ Symbol . asyncDispose ] ( ) {
613+ // This is a no-op, but we need to implement it to ensure that the AsyncGenerator
614+ // is properly cleaned up when the subscription is disposed.
615+ return fakePromise ( ) ;
616+ } ,
617+ } as AsyncGenerator ;
596618
597619 const schema = makeExecutableSchema ( {
598620 typeDefs : /* GraphQL */ `
0 commit comments