Skip to content

Commit 3036d41

Browse files
committed
rename PromiseCanceller to AbortSignalListener
1 parent 46643cd commit 3036d41

File tree

4 files changed

+35
-35
lines changed

4 files changed

+35
-35
lines changed

src/execution/PromiseCanceller.ts renamed to src/execution/AbortSignalListener.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import { promiseWithResolvers } from '../jsutils/promiseWithResolvers.js';
22

33
/**
4-
* A PromiseCanceller object can be used to cancel multiple promises
5-
* using a single AbortSignal.
4+
* A AbortSignalListener object can be used to trigger multiple responses
5+
* in response to an abort signal.
66
*
77
* @internal
88
*/
9-
export class PromiseCanceller {
9+
export class AbortSignalListener {
1010
abortSignal: AbortSignal;
1111
abort: () => void;
1212

@@ -28,7 +28,7 @@ export class PromiseCanceller {
2828
this.abortSignal.removeEventListener('abort', this.abort);
2929
}
3030

31-
withCancellation<T>(originalPromise: Promise<T>): Promise<T> {
31+
cancellablePromise<T>(originalPromise: Promise<T>): Promise<T> {
3232
if (this.abortSignal.aborted) {
3333
// eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
3434
return Promise.reject(this.abortSignal.reason);

src/execution/IncrementalPublisher.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import { pathToArray } from '../jsutils/Path.js';
44

55
import type { GraphQLError } from '../error/GraphQLError.js';
66

7+
import type { AbortSignalListener } from './AbortSignalListener.js';
78
import { IncrementalGraph } from './IncrementalGraph.js';
8-
import type { PromiseCanceller } from './PromiseCanceller.js';
99
import type {
1010
CancellableStreamRecord,
1111
CompletedExecutionGroup,
@@ -44,7 +44,7 @@ export function buildIncrementalResponse(
4444
}
4545

4646
interface IncrementalPublisherContext {
47-
promiseCanceller: PromiseCanceller | undefined;
47+
abortSignalListener: AbortSignalListener | undefined;
4848
cancellableStreams: Set<CancellableStreamRecord> | undefined;
4949
}
5050

@@ -127,7 +127,7 @@ class IncrementalPublisher {
127127
IteratorResult<SubsequentIncrementalExecutionResult, void>
128128
> => {
129129
if (isDone) {
130-
this._context.promiseCanceller?.disconnect();
130+
this._context.abortSignalListener?.disconnect();
131131
await this._returnAsyncIteratorsIgnoringErrors();
132132
return { value: undefined, done: true };
133133
}
@@ -176,7 +176,7 @@ class IncrementalPublisher {
176176

177177
// TODO: add test for this case
178178
/* c8 ignore next */
179-
this._context.promiseCanceller?.disconnect();
179+
this._context.abortSignalListener?.disconnect();
180180
await this._returnAsyncIteratorsIgnoringErrors();
181181
return { value: undefined, done: true };
182182
};

src/execution/__tests__/PromiseCanceller-test.ts renamed to src/execution/__tests__/AbortSignalListener-test.ts

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,39 +2,39 @@ import { describe, it } from 'mocha';
22

33
import { expectPromise } from '../../__testUtils__/expectPromise.js';
44

5-
import { PromiseCanceller } from '../PromiseCanceller.js';
5+
import { AbortSignalListener } from '../AbortSignalListener.js';
66

7-
describe('PromiseCanceller', () => {
7+
describe('AbortSignalListener', () => {
88
it('works to cancel an already resolved promise', async () => {
99
const abortController = new AbortController();
1010
const abortSignal = abortController.signal;
1111

12-
const promiseCanceller = new PromiseCanceller(abortSignal);
12+
const abortSignalListener = new AbortSignalListener(abortSignal);
1313

1414
const promise = Promise.resolve(1);
1515

16-
const withCancellation = promiseCanceller.withCancellation(promise);
16+
const cancellablePromise = abortSignalListener.cancellablePromise(promise);
1717

1818
abortController.abort(new Error('Cancelled!'));
1919

20-
await expectPromise(withCancellation).toRejectWith('Cancelled!');
20+
await expectPromise(cancellablePromise).toRejectWith('Cancelled!');
2121
});
2222

2323
it('works to cancel a hanging promise', async () => {
2424
const abortController = new AbortController();
2525
const abortSignal = abortController.signal;
2626

27-
const promiseCanceller = new PromiseCanceller(abortSignal);
27+
const abortSignalListener = new AbortSignalListener(abortSignal);
2828

2929
const promise = new Promise(() => {
3030
/* never resolves */
3131
});
3232

33-
const withCancellation = promiseCanceller.withCancellation(promise);
33+
const cancellablePromise = abortSignalListener.cancellablePromise(promise);
3434

3535
abortController.abort(new Error('Cancelled!'));
3636

37-
await expectPromise(withCancellation).toRejectWith('Cancelled!');
37+
await expectPromise(cancellablePromise).toRejectWith('Cancelled!');
3838
});
3939

4040
it('works to cancel a hanging promise created after abort signal triggered', async () => {
@@ -43,14 +43,14 @@ describe('PromiseCanceller', () => {
4343

4444
abortController.abort(new Error('Cancelled!'));
4545

46-
const promiseCanceller = new PromiseCanceller(abortSignal);
46+
const abortSignalListener = new AbortSignalListener(abortSignal);
4747

4848
const promise = new Promise(() => {
4949
/* never resolves */
5050
});
5151

52-
const withCancellation = promiseCanceller.withCancellation(promise);
52+
const cancellablePromise = abortSignalListener.cancellablePromise(promise);
5353

54-
await expectPromise(withCancellation).toRejectWith('Cancelled!');
54+
await expectPromise(cancellablePromise).toRejectWith('Cancelled!');
5555
});
5656
});

src/execution/execute.ts

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ import { GraphQLStreamDirective } from '../type/directives.js';
4848
import type { GraphQLSchema } from '../type/schema.js';
4949
import { assertValidSchema } from '../type/validate.js';
5050

51+
import { AbortSignalListener } from './AbortSignalListener.js';
5152
import type { DeferUsageSet, ExecutionPlan } from './buildExecutionPlan.js';
5253
import { buildExecutionPlan } from './buildExecutionPlan.js';
5354
import type {
@@ -63,7 +64,6 @@ import {
6364
import { getVariableSignature } from './getVariableSignature.js';
6465
import { buildIncrementalResponse } from './IncrementalPublisher.js';
6566
import { mapAsyncIterable } from './mapAsyncIterable.js';
66-
import { PromiseCanceller } from './PromiseCanceller.js';
6767
import type {
6868
CancellableStreamRecord,
6969
CompletedExecutionGroup,
@@ -164,7 +164,7 @@ export interface ValidatedExecutionArgs {
164164
export interface ExecutionContext {
165165
validatedExecutionArgs: ValidatedExecutionArgs;
166166
errors: Array<GraphQLError> | undefined;
167-
promiseCanceller: PromiseCanceller | undefined;
167+
abortSignalListener: AbortSignalListener | undefined;
168168
completed: boolean;
169169
cancellableStreams: Set<CancellableStreamRecord> | undefined;
170170
}
@@ -318,8 +318,8 @@ export function experimentalExecuteQueryOrMutationOrSubscriptionEvent(
318318
const exeContext: ExecutionContext = {
319319
validatedExecutionArgs,
320320
errors: undefined,
321-
promiseCanceller: abortSignal
322-
? new PromiseCanceller(abortSignal)
321+
abortSignalListener: abortSignal
322+
? new AbortSignalListener(abortSignal)
323323
: undefined,
324324
completed: false,
325325
cancellableStreams: undefined,
@@ -378,7 +378,7 @@ export function experimentalExecuteQueryOrMutationOrSubscriptionEvent(
378378
},
379379
(error: unknown) => {
380380
exeContext.completed = true;
381-
exeContext.promiseCanceller?.disconnect();
381+
exeContext.abortSignalListener?.disconnect();
382382
return {
383383
data: null,
384384
errors: withError(exeContext.errors, error as GraphQLError),
@@ -392,7 +392,7 @@ export function experimentalExecuteQueryOrMutationOrSubscriptionEvent(
392392
exeContext.completed = true;
393393
// TODO: add test case for synchronous null bubbling to root with cancellation
394394
/* c8 ignore next */
395-
exeContext.promiseCanceller?.disconnect();
395+
exeContext.abortSignalListener?.disconnect();
396396
return { data: null, errors: withError(exeContext.errors, error) };
397397
}
398398
}
@@ -483,7 +483,7 @@ function buildDataResponse(
483483
const { rawResult: data, incrementalDataRecords } = graphqlWrappedResult;
484484
const errors = exeContext.errors;
485485
if (incrementalDataRecords === undefined) {
486-
exeContext.promiseCanceller?.disconnect();
486+
exeContext.abortSignalListener?.disconnect();
487487
return errors !== undefined ? { errors, data } : { data };
488488
}
489489

@@ -834,7 +834,7 @@ function executeField(
834834
incrementalContext: IncrementalContext | undefined,
835835
deferMap: ReadonlyMap<DeferUsage, DeferredFragmentRecord> | undefined,
836836
): PromiseOrValue<GraphQLWrappedResult<unknown>> | undefined {
837-
const { validatedExecutionArgs, promiseCanceller } = exeContext;
837+
const { validatedExecutionArgs, abortSignalListener } = exeContext;
838838
const { schema, contextValue, variableValues, hideSuggestions, abortSignal } =
839839
validatedExecutionArgs;
840840
const fieldName = fieldDetailsList[0].node.name.value;
@@ -879,7 +879,7 @@ function executeField(
879879
fieldDetailsList,
880880
info,
881881
path,
882-
promiseCanceller?.withCancellation(result) ?? result,
882+
abortSignalListener?.cancellablePromise(result) ?? result,
883883
incrementalContext,
884884
deferMap,
885885
);
@@ -1598,7 +1598,7 @@ async function completePromisedListItemValue(
15981598
deferMap: ReadonlyMap<DeferUsage, DeferredFragmentRecord> | undefined,
15991599
): Promise<unknown> {
16001600
try {
1601-
const resolved = await (exeContext.promiseCanceller?.withCancellation(
1601+
const resolved = await (exeContext.abortSignalListener?.cancellablePromise(
16021602
item,
16031603
) ?? item);
16041604
let completed = completeValue(
@@ -2220,19 +2220,19 @@ function executeSubscription(
22202220
const result = resolveFn(rootValue, args, contextValue, info, abortSignal);
22212221

22222222
if (isPromise(result)) {
2223-
const promiseCanceller = abortSignal
2224-
? new PromiseCanceller(abortSignal)
2223+
const abortSignalListener = abortSignal
2224+
? new AbortSignalListener(abortSignal)
22252225
: undefined;
2226-
const promise = promiseCanceller?.withCancellation(result) ?? result;
2226+
const promise = abortSignalListener?.cancellablePromise(result) ?? result;
22272227
return promise.then(assertEventStream).then(
22282228
(resolved) => {
22292229
// TODO: add test case
22302230
/* c8 ignore next */
2231-
promiseCanceller?.disconnect();
2231+
abortSignalListener?.disconnect();
22322232
return resolved;
22332233
},
22342234
(error: unknown) => {
2235-
promiseCanceller?.disconnect();
2235+
abortSignalListener?.disconnect();
22362236
throw locatedError(error, fieldNodes, pathToArray(path));
22372237
},
22382238
);
@@ -2604,7 +2604,7 @@ function completeStreamItem(
26042604
fieldDetailsList,
26052605
info,
26062606
itemPath,
2607-
exeContext.promiseCanceller?.withCancellation(item) ?? item,
2607+
exeContext.abortSignalListener?.cancellablePromise(item) ?? item,
26082608
incrementalContext,
26092609
new Map(),
26102610
).then(

0 commit comments

Comments
 (0)