@@ -1316,126 +1316,128 @@ describe('Execute: Handles basic execution tasks', () => {
13161316 expect ( possibleTypes ) . to . deep . equal ( [ fooObject ] ) ;
13171317 } ) ;
13181318
1319- it ( 'stops execution and throws an error when signal is aborted' , async ( ) => {
1320- // TODO: use real Event once we can finally drop node14 support
1321- class MockAbortEvent implements IEvent {
1322- cancelable = false ;
1323- bubbles = false ;
1324- composed = false ;
1325- currentTarget = null ;
1326- cancelBubble = false ;
1327- defaultPrevented = false ;
1328- isTrusted = true ;
1329- returnValue = false ;
1330- srcElement = null ;
1331- type = 'abort' ;
1332- eventPhase = 0 ;
1333- timeStamp = 0 ;
1334- AT_TARGET = 0 ;
1335- BUBBLING_PHASE = 0 ;
1336- CAPTURING_PHASE = 0 ;
1337- NONE = 0 ;
1338-
1339- target : IAbortSignal ;
1340-
1341- constructor ( abortSignal : IAbortSignal ) {
1342- this . target = abortSignal ;
1343- }
1319+ /* c8 ignore start */
1320+ if ( typeof AbortController !== 'undefined' ) {
1321+ it ( 'stops execution and throws an error when signal is aborted' , async ( ) => {
1322+ // TODO: use real Event once we can finally drop node14 support
1323+ class MockAbortEvent implements IEvent {
1324+ cancelable = false ;
1325+ bubbles = false ;
1326+ composed = false ;
1327+ currentTarget = null ;
1328+ cancelBubble = false ;
1329+ defaultPrevented = false ;
1330+ isTrusted = true ;
1331+ returnValue = false ;
1332+ srcElement = null ;
1333+ type = 'abort' ;
1334+ eventPhase = 0 ;
1335+ timeStamp = 0 ;
1336+ AT_TARGET = 0 ;
1337+ BUBBLING_PHASE = 0 ;
1338+ CAPTURING_PHASE = 0 ;
1339+ NONE = 0 ;
1340+
1341+ target : IAbortSignal ;
1342+
1343+ constructor ( abortSignal : IAbortSignal ) {
1344+ this . target = abortSignal ;
1345+ }
13441346
1345- composedPath = ( ) => {
1346- throw new Error ( 'Not mocked!' ) ;
1347- } ;
1347+ composedPath = ( ) => {
1348+ throw new Error ( 'Not mocked!' ) ;
1349+ } ;
13481350
1349- initEvent = ( ) => {
1350- throw new Error ( 'Not mocked!' ) ;
1351- } ;
1351+ initEvent = ( ) => {
1352+ throw new Error ( 'Not mocked!' ) ;
1353+ } ;
13521354
1353- preventDefault = ( ) => {
1354- throw new Error ( '' ) ;
1355- } ;
1355+ preventDefault = ( ) => {
1356+ throw new Error ( '' ) ;
1357+ } ;
13561358
1357- stopImmediatePropagation = ( ) => {
1358- throw new Error ( '' ) ;
1359- } ;
1359+ stopImmediatePropagation = ( ) => {
1360+ throw new Error ( '' ) ;
1361+ } ;
13601362
1361- stopPropagation = ( ) => {
1362- throw new Error ( '' ) ;
1363- } ;
1364- }
1363+ stopPropagation = ( ) => {
1364+ throw new Error ( '' ) ;
1365+ } ;
1366+ }
13651367
1366- class MockAbortSignal implements IAbortSignal {
1367- aborted : boolean = false ;
1368- onabort : ( ( ev : IEvent ) => any ) | null = null ;
1369- reason : unknown ;
1368+ class MockAbortSignal implements IAbortSignal {
1369+ aborted : boolean = false ;
1370+ onabort : ( ( ev : IEvent ) => any ) | null = null ;
1371+ reason : unknown ;
13701372
1371- throwIfAborted ( ) {
1372- if ( this . aborted ) {
1373- throw this . reason ;
1373+ throwIfAborted ( ) {
1374+ if ( this . aborted ) {
1375+ throw this . reason ;
1376+ }
13741377 }
1375- }
13761378
1377- addEventListener ( type : string , cb : unknown ) {
1378- expect ( type ) . to . equal ( 'abort' ) ;
1379- expect ( this . onabort ) . to . equal ( null ) ;
1380- expect ( cb ) . to . be . a ( 'function' ) ;
1381- this . onabort = cb as any ;
1382- }
1379+ addEventListener ( type : string , cb : unknown ) {
1380+ expect ( type ) . to . equal ( 'abort' ) ;
1381+ expect ( this . onabort ) . to . equal ( null ) ;
1382+ expect ( cb ) . to . be . a ( 'function' ) ;
1383+ this . onabort = cb as any ;
1384+ }
13831385
1384- removeEventListener ( type : string , cb : unknown ) {
1385- expect ( type ) . to . equal ( 'abort' ) ;
1386- expect ( cb ) . to . be . a ( 'function' ) ;
1387- this . onabort = null ;
1388- }
1386+ removeEventListener ( type : string , cb : unknown ) {
1387+ expect ( type ) . to . equal ( 'abort' ) ;
1388+ expect ( cb ) . to . be . a ( 'function' ) ;
1389+ this . onabort = null ;
1390+ }
13891391
1390- dispatchEvent ( event : IEvent ) : boolean {
1391- expect ( this . onabort ) . to . be . a ( 'function' ) ;
1392- this . onabort ?.( event ) ;
1393- return true ;
1394- }
1392+ dispatchEvent ( event : IEvent ) : boolean {
1393+ expect ( this . onabort ) . to . be . a ( 'function' ) ;
1394+ this . onabort ?.( event ) ;
1395+ return true ;
1396+ }
13951397
1396- dispatchMockAbortEvent ( reason ?: unknown ) {
1397- this . reason = reason ;
1398- mockAbortSignal . dispatchEvent ( new MockAbortEvent ( this ) ) ;
1398+ dispatchMockAbortEvent ( reason ?: unknown ) {
1399+ this . reason = reason ;
1400+ mockAbortSignal . dispatchEvent ( new MockAbortEvent ( this ) ) ;
1401+ }
13991402 }
1400- }
14011403
1402- const mockAbortSignal = new MockAbortSignal ( ) ;
1404+ const mockAbortSignal = new MockAbortSignal ( ) ;
14031405
1404- const TestType : GraphQLObjectType = new GraphQLObjectType ( {
1405- name : 'TestType' ,
1406- fields : ( ) => ( {
1407- resolveOnNextTick : {
1408- type : TestType ,
1409- resolve : ( ) => resolveOnNextTick ( { } ) ,
1410- } ,
1411- string : {
1412- type : GraphQLString ,
1413- args : {
1414- value : { type : new GraphQLNonNull ( GraphQLString ) } ,
1406+ const TestType : GraphQLObjectType = new GraphQLObjectType ( {
1407+ name : 'TestType' ,
1408+ fields : ( ) => ( {
1409+ resolveOnNextTick : {
1410+ type : TestType ,
1411+ resolve : ( ) => resolveOnNextTick ( { } ) ,
14151412 } ,
1416- resolve : ( _ , { value } ) => value ,
1417- } ,
1418- abortExecution : {
1419- type : GraphQLString ,
1420- resolve : ( ) => {
1421- const abortError = new Error ( 'Custom abort error' ) ;
1422- mockAbortSignal . dispatchMockAbortEvent ( abortError ) ;
1423- return 'aborted' ;
1413+ string : {
1414+ type : GraphQLString ,
1415+ args : {
1416+ value : { type : new GraphQLNonNull ( GraphQLString ) } ,
1417+ } ,
1418+ resolve : ( _ , { value } ) => value ,
14241419 } ,
1425- } ,
1426- shouldNotBeResolved : {
1427- type : GraphQLString ,
1428- /* c8 ignore next */
1429- resolve : ( ) => 'This should not be executed!' ,
1430- } ,
1431- } ) ,
1432- } ) ;
1420+ abortExecution : {
1421+ type : GraphQLString ,
1422+ resolve : ( ) => {
1423+ const abortError = new Error ( 'Custom abort error' ) ;
1424+ mockAbortSignal . dispatchMockAbortEvent ( abortError ) ;
1425+ return 'aborted' ;
1426+ } ,
1427+ } ,
1428+ shouldNotBeResolved : {
1429+ type : GraphQLString ,
1430+ /* c8 ignore next */
1431+ resolve : ( ) => 'This should not be executed!' ,
1432+ } ,
1433+ } ) ,
1434+ } ) ;
14331435
1434- const schema = new GraphQLSchema ( {
1435- query : TestType ,
1436- } ) ;
1436+ const schema = new GraphQLSchema ( {
1437+ query : TestType ,
1438+ } ) ;
14371439
1438- const document = parse ( `
1440+ const document = parse ( `
14391441 query {
14401442 value1: string(value: "1")
14411443 resolveOnNextTick {
@@ -1456,52 +1458,54 @@ describe('Execute: Handles basic execution tasks', () => {
14561458 }
14571459 ` ) ;
14581460
1459- const result = await execute ( {
1460- schema,
1461- document,
1462- signal : mockAbortSignal ,
1463- } ) ;
1461+ const result = await execute ( {
1462+ schema,
1463+ document,
1464+ signal : mockAbortSignal ,
1465+ } ) ;
14641466
1465- expectJSON ( result ) . toDeepEqual ( {
1466- data : {
1467- value1 : '1' ,
1468- resolveOnNextTick : {
1469- value2 : '2' ,
1467+ expectJSON ( result ) . toDeepEqual ( {
1468+ data : {
1469+ value1 : '1' ,
14701470 resolveOnNextTick : {
1471+ value2 : '2' ,
1472+ resolveOnNextTick : {
1473+ resolveOnNextTick : {
1474+ shouldNotBeResolved : null ,
1475+ } ,
1476+ abortExecution : 'aborted' ,
1477+ } ,
1478+ } ,
1479+ alternativeBranch : {
1480+ value3 : '3' ,
14711481 resolveOnNextTick : {
14721482 shouldNotBeResolved : null ,
14731483 } ,
1474- abortExecution : 'aborted' ,
14751484 } ,
14761485 } ,
1477- alternativeBranch : {
1478- value3 : '3' ,
1479- resolveOnNextTick : {
1480- shouldNotBeResolved : null ,
1486+ errors : [
1487+ {
1488+ message : 'Custom abort error' ,
1489+ path : [
1490+ 'alternativeBranch' ,
1491+ 'resolveOnNextTick' ,
1492+ 'shouldNotBeResolved' ,
1493+ ] ,
1494+ locations : [ { line : 16 , column : 13 } ] ,
14811495 } ,
1482- } ,
1483- } ,
1484- errors : [
1485- {
1486- message : 'Custom abort error' ,
1487- path : [
1488- 'alternativeBranch' ,
1489- 'resolveOnNextTick' ,
1490- 'shouldNotBeResolved' ,
1491- ] ,
1492- locations : [ { line : 16 , column : 13 } ] ,
1493- } ,
1494- {
1495- message : 'Custom abort error' ,
1496- path : [
1497- 'resolveOnNextTick' ,
1498- 'resolveOnNextTick' ,
1499- 'resolveOnNextTick' ,
1500- 'shouldNotBeResolved' ,
1501- ] ,
1502- locations : [ { line : 8 , column : 15 } ] ,
1503- } ,
1504- ] ,
1496+ {
1497+ message : 'Custom abort error' ,
1498+ path : [
1499+ 'resolveOnNextTick' ,
1500+ 'resolveOnNextTick' ,
1501+ 'resolveOnNextTick' ,
1502+ 'shouldNotBeResolved' ,
1503+ ] ,
1504+ locations : [ { line : 8 , column : 15 } ] ,
1505+ } ,
1506+ ] ,
1507+ } ) ;
15051508 } ) ;
1506- } ) ;
1509+ }
1510+ /* c8 ignore stop */
15071511} ) ;
0 commit comments