UNPKG

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