Commit | Line | Data |
---|---|---|
b5604034 JB |
1 | import type { AsyncResource, AsyncResourceOptions } from 'node:async_hooks' |
2 | import { EventEmitter } from 'node:events' | |
3 | ||
cd312fe9 | 4 | declare module 'events' { |
b5604034 JB |
5 | interface EventEmitterOptions { |
6 | /** | |
7 | * Enables automatic capturing of promise rejection. | |
8 | */ | |
9 | captureRejections?: boolean | undefined | |
10 | } | |
11 | ||
12 | interface EventEmitterAsyncResourceOptions | |
13 | extends AsyncResourceOptions, | |
14 | EventEmitterOptions { | |
15 | /** | |
16 | * The type of async event. | |
d8531d89 | 17 | * @default new.target.name if instantiated as a child class. |
b5604034 JB |
18 | */ |
19 | name?: string | |
20 | } | |
21 | ||
22 | /** | |
95361230 | 23 | * Integrates `EventEmitter` with `AsyncResource` for `EventEmitter`s that require |
b5604034 JB |
24 | * manual async tracking. Specifically, all events emitted by instances of |
25 | * `EventEmitterAsyncResource` will run within its async context. | |
26 | * | |
27 | * The EventEmitterAsyncResource class has the same methods and takes the | |
28 | * same options as EventEmitter and AsyncResource themselves. | |
9ef45721 JB |
29 | * @throws if `options.name` is not provided when instantiated directly. |
30 | * @since v17.4.0, v16.14.0 | |
b5604034 JB |
31 | */ |
32 | export class EventEmitterAsyncResource extends EventEmitter { | |
f8496b22 | 33 | constructor (options: EventEmitterAsyncResourceOptions) |
b5604034 JB |
34 | /** |
35 | * Call all `destroy` hooks. This should only ever be called once. An error will | |
36 | * be thrown if it is called more than once. This **must** be manually called. If | |
37 | * the resource is left to be collected by the GC then the `destroy` hooks will | |
38 | * never be called. | |
b5604034 | 39 | */ |
9ef45721 | 40 | emitDestroy (): void |
b5604034 | 41 | /** The unique asyncId assigned to the resource. */ |
85126db3 | 42 | readonly asyncId: number |
b5604034 | 43 | /** The same triggerAsyncId that is passed to the AsyncResource constructor. */ |
85126db3 | 44 | readonly triggerAsyncId: number |
b5604034 | 45 | /** The underlying AsyncResource */ |
85126db3 | 46 | readonly asyncResource: AsyncResource & { |
b5604034 JB |
47 | readonly eventEmitter: EventEmitterAsyncResource |
48 | } | |
49 | } | |
50 | } |