Skip to content

Commit dd4da0d

Browse files
authored
feat(worker): expose AbortController to the worker sandbox (#1576)
1 parent 5d5bda1 commit dd4da0d

File tree

5 files changed

+41
-0
lines changed

5 files changed

+41
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import test from 'ava';
2+
import { v4 as uuid4 } from 'uuid';
3+
import { Client } from '@temporalio/client';
4+
import { RUN_INTEGRATION_TESTS, Worker } from './helpers';
5+
import { defaultOptions } from './mock-native-worker';
6+
import { abortController } from './workflows';
7+
8+
if (RUN_INTEGRATION_TESTS) {
9+
test(`Worker runtime exposes AbortController as a global`, async (t) => {
10+
const worker = await Worker.create({ ...defaultOptions, taskQueue: 'test-worker-exposes-abortcontroller' });
11+
const client = new Client();
12+
const result = await worker.runUntil(
13+
client.workflow.execute(abortController, {
14+
args: [],
15+
taskQueue: 'test-worker-exposes-abortcontroller',
16+
workflowId: uuid4(),
17+
workflowExecutionTimeout: '5s',
18+
})
19+
);
20+
t.is(result, 'abort successful');
21+
});
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
export async function abortController(): Promise<string | null> {
2+
let aborted: string | null = null;
3+
4+
const controller = new AbortController();
5+
const { signal } = controller;
6+
7+
const abortEventListener = () => {
8+
aborted = signal.reason;
9+
};
10+
11+
signal.addEventListener('abort', abortEventListener);
12+
controller.abort('abort successful');
13+
signal.removeEventListener('abort', abortEventListener);
14+
15+
return aborted;
16+
}

packages/test/src/workflows/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
export * from './abort-controller';
12
export * from './activity-failure';
23
export * from './activity-failures';
34
export * from './args-and-return';

packages/worker/src/workflow/reusable-vm.ts

+1
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ export class ReusableVMWorkflowCreator implements WorkflowCreator {
7878
__webpack_module_cache__,
7979
TextEncoder,
8080
TextDecoder,
81+
AbortController,
8182
};
8283
this._context = vm.createContext(globals, { microtaskMode: 'afterEvaluate' });
8384
this.injectConsole();

packages/worker/src/workflow/vm.ts

+1
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ export class VMWorkflowCreator implements WorkflowCreator {
8686
__webpack_module_cache__: {},
8787
TextEncoder,
8888
TextDecoder,
89+
AbortController,
8990
};
9091
const context = vm.createContext(globals, { microtaskMode: 'afterEvaluate' });
9192
this.script.runInContext(context);

0 commit comments

Comments
 (0)