UNPKG

8.37 kBTypeScriptView Raw
1declare module "worker_threads" {
2 import { Context } from "vm";
3 import { EventEmitter } from "events";
4 import { Readable, Writable } from "stream";
5
6 const isMainThread: boolean;
7 const parentPort: null | MessagePort;
8 const threadId: number;
9 const workerData: any;
10
11 class MessageChannel {
12 readonly port1: MessagePort;
13 readonly port2: MessagePort;
14 }
15
16 class MessagePort extends EventEmitter {
17 close(): void;
18 postMessage(value: any, transferList?: Array<ArrayBuffer | MessagePort>): void;
19 ref(): void;
20 unref(): void;
21 start(): void;
22
23 addListener(event: "close", listener: () => void): this;
24 addListener(event: "message", listener: (value: any) => void): this;
25 addListener(event: string | symbol, listener: (...args: any[]) => void): this;
26
27 emit(event: "close"): boolean;
28 emit(event: "message", value: any): boolean;
29 emit(event: string | symbol, ...args: any[]): boolean;
30
31 on(event: "close", listener: () => void): this;
32 on(event: "message", listener: (value: any) => void): this;
33 on(event: string | symbol, listener: (...args: any[]) => void): this;
34
35 once(event: "close", listener: () => void): this;
36 once(event: "message", listener: (value: any) => void): this;
37 once(event: string | symbol, listener: (...args: any[]) => void): this;
38
39 prependListener(event: "close", listener: () => void): this;
40 prependListener(event: "message", listener: (value: any) => void): this;
41 prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
42
43 prependOnceListener(event: "close", listener: () => void): this;
44 prependOnceListener(event: "message", listener: (value: any) => void): this;
45 prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
46
47 removeListener(event: "close", listener: () => void): this;
48 removeListener(event: "message", listener: (value: any) => void): this;
49 removeListener(event: string | symbol, listener: (...args: any[]) => void): this;
50
51 off(event: "close", listener: () => void): this;
52 off(event: "message", listener: (value: any) => void): this;
53 off(event: string | symbol, listener: (...args: any[]) => void): this;
54 }
55
56 interface WorkerOptions {
57 /**
58 * List of arguments which would be stringified and appended to
59 * `process.argv` in the worker. This is mostly similar to the `workerData`
60 * but the values will be available on the global `process.argv` as if they
61 * were passed as CLI options to the script.
62 */
63 argv?: any[];
64 eval?: boolean;
65 workerData?: any;
66 stdin?: boolean;
67 stdout?: boolean;
68 stderr?: boolean;
69 execArgv?: string[];
70 resourceLimits?: ResourceLimits;
71 }
72
73 interface ResourceLimits {
74 maxYoungGenerationSizeMb?: number;
75 maxOldGenerationSizeMb?: number;
76 codeRangeSizeMb?: number;
77 }
78
79 class Worker extends EventEmitter {
80 readonly stdin: Writable | null;
81 readonly stdout: Readable;
82 readonly stderr: Readable;
83 readonly threadId: number;
84 readonly resourceLimits?: ResourceLimits;
85
86 constructor(filename: string, options?: WorkerOptions);
87
88 postMessage(value: any, transferList?: Array<ArrayBuffer | MessagePort>): void;
89 ref(): void;
90 unref(): void;
91 /**
92 * Stop all JavaScript execution in the worker thread as soon as possible.
93 * Returns a Promise for the exit code that is fulfilled when the `exit` event is emitted.
94 */
95 terminate(): Promise<number>;
96 /**
97 * Transfer a `MessagePort` to a different `vm` Context. The original `port`
98 * object will be rendered unusable, and the returned `MessagePort` instance will
99 * take its place.
100 *
101 * The returned `MessagePort` will be an object in the target context, and will
102 * inherit from its global `Object` class. Objects passed to the
103 * `port.onmessage()` listener will also be created in the target context
104 * and inherit from its global `Object` class.
105 *
106 * However, the created `MessagePort` will no longer inherit from
107 * `EventEmitter`, and only `port.onmessage()` can be used to receive
108 * events using it.
109 */
110 moveMessagePortToContext(port: MessagePort, context: Context): MessagePort;
111
112 /**
113 * Receive a single message from a given `MessagePort`. If no message is available,
114 * `undefined` is returned, otherwise an object with a single `message` property
115 * that contains the message payload, corresponding to the oldest message in the
116 * `MessagePort`’s queue.
117 */
118 receiveMessageOnPort(port: MessagePort): {} | undefined;
119
120 /**
121 * Returns a readable stream for a V8 snapshot of the current state of the Worker.
122 * See [`v8.getHeapSnapshot()`][] for more details.
123 *
124 * If the Worker thread is no longer running, which may occur before the
125 * [`'exit'` event][] is emitted, the returned `Promise` will be rejected
126 * immediately with an [`ERR_WORKER_NOT_RUNNING`][] error
127 */
128 getHeapSnapshot(): Promise<Readable>;
129
130 addListener(event: "error", listener: (err: Error) => void): this;
131 addListener(event: "exit", listener: (exitCode: number) => void): this;
132 addListener(event: "message", listener: (value: any) => void): this;
133 addListener(event: "online", listener: () => void): this;
134 addListener(event: string | symbol, listener: (...args: any[]) => void): this;
135
136 emit(event: "error", err: Error): boolean;
137 emit(event: "exit", exitCode: number): boolean;
138 emit(event: "message", value: any): boolean;
139 emit(event: "online"): boolean;
140 emit(event: string | symbol, ...args: any[]): boolean;
141
142 on(event: "error", listener: (err: Error) => void): this;
143 on(event: "exit", listener: (exitCode: number) => void): this;
144 on(event: "message", listener: (value: any) => void): this;
145 on(event: "online", listener: () => void): this;
146 on(event: string | symbol, listener: (...args: any[]) => void): this;
147
148 once(event: "error", listener: (err: Error) => void): this;
149 once(event: "exit", listener: (exitCode: number) => void): this;
150 once(event: "message", listener: (value: any) => void): this;
151 once(event: "online", listener: () => void): this;
152 once(event: string | symbol, listener: (...args: any[]) => void): this;
153
154 prependListener(event: "error", listener: (err: Error) => void): this;
155 prependListener(event: "exit", listener: (exitCode: number) => void): this;
156 prependListener(event: "message", listener: (value: any) => void): this;
157 prependListener(event: "online", listener: () => void): this;
158 prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
159
160 prependOnceListener(event: "error", listener: (err: Error) => void): this;
161 prependOnceListener(event: "exit", listener: (exitCode: number) => void): this;
162 prependOnceListener(event: "message", listener: (value: any) => void): this;
163 prependOnceListener(event: "online", listener: () => void): this;
164 prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
165
166 removeListener(event: "error", listener: (err: Error) => void): this;
167 removeListener(event: "exit", listener: (exitCode: number) => void): this;
168 removeListener(event: "message", listener: (value: any) => void): this;
169 removeListener(event: "online", listener: () => void): this;
170 removeListener(event: string | symbol, listener: (...args: any[]) => void): this;
171
172 off(event: "error", listener: (err: Error) => void): this;
173 off(event: "exit", listener: (exitCode: number) => void): this;
174 off(event: "message", listener: (value: any) => void): this;
175 off(event: "online", listener: () => void): this;
176 off(event: string | symbol, listener: (...args: any[]) => void): this;
177 }
178}