UNPKG

11.7 kBTypeScriptView Raw
1declare module 'worker_threads' {
2 import { Context } from 'vm';
3 import EventEmitter = require('events');
4 import { Readable, Writable } from 'stream';
5 import { URL } from 'url';
6 import { FileHandle } from 'fs/promises';
7
8 const isMainThread: boolean;
9 const parentPort: null | MessagePort;
10 const resourceLimits: ResourceLimits;
11 const SHARE_ENV: unique symbol;
12 const threadId: number;
13 const workerData: any;
14
15 class MessageChannel {
16 readonly port1: MessagePort;
17 readonly port2: MessagePort;
18 }
19
20 type TransferListItem = ArrayBuffer | MessagePort | FileHandle;
21
22 class MessagePort extends EventEmitter {
23 close(): void;
24 postMessage(value: any, transferList?: ReadonlyArray<TransferListItem>): void;
25 ref(): void;
26 unref(): void;
27 start(): void;
28
29 addListener(event: "close", listener: () => void): this;
30 addListener(event: "message", listener: (value: any) => void): this;
31 addListener(event: "messageerror", listener: (error: Error) => void): this;
32 addListener(event: string | symbol, listener: (...args: any[]) => void): this;
33
34 emit(event: "close"): boolean;
35 emit(event: "message", value: any): boolean;
36 emit(event: "messageerror", error: Error): boolean;
37 emit(event: string | symbol, ...args: any[]): boolean;
38
39 on(event: "close", listener: () => void): this;
40 on(event: "message", listener: (value: any) => void): this;
41 on(event: "messageerror", listener: (error: Error) => void): this;
42 on(event: string | symbol, listener: (...args: any[]) => void): this;
43
44 once(event: "close", listener: () => void): this;
45 once(event: "message", listener: (value: any) => void): this;
46 once(event: "messageerror", listener: (error: Error) => void): this;
47 once(event: string | symbol, listener: (...args: any[]) => void): this;
48
49 prependListener(event: "close", listener: () => void): this;
50 prependListener(event: "message", listener: (value: any) => void): this;
51 prependListener(event: "messageerror", listener: (error: Error) => void): this;
52 prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
53
54 prependOnceListener(event: "close", listener: () => void): this;
55 prependOnceListener(event: "message", listener: (value: any) => void): this;
56 prependOnceListener(event: "messageerror", listener: (error: Error) => void): this;
57 prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
58
59 removeListener(event: "close", listener: () => void): this;
60 removeListener(event: "message", listener: (value: any) => void): this;
61 removeListener(event: "messageerror", listener: (error: Error) => void): this;
62 removeListener(event: string | symbol, listener: (...args: any[]) => void): this;
63
64 off(event: "close", listener: () => void): this;
65 off(event: "message", listener: (value: any) => void): this;
66 off(event: "messageerror", listener: (error: Error) => void): this;
67 off(event: string | symbol, listener: (...args: any[]) => void): this;
68 }
69
70 interface WorkerOptions {
71 /**
72 * List of arguments which would be stringified and appended to
73 * `process.argv` in the worker. This is mostly similar to the `workerData`
74 * but the values will be available on the global `process.argv` as if they
75 * were passed as CLI options to the script.
76 */
77 argv?: any[] | undefined;
78 env?: NodeJS.Dict<string> | typeof SHARE_ENV | undefined;
79 eval?: boolean | undefined;
80 workerData?: any;
81 stdin?: boolean | undefined;
82 stdout?: boolean | undefined;
83 stderr?: boolean | undefined;
84 execArgv?: string[] | undefined;
85 resourceLimits?: ResourceLimits | undefined;
86 /**
87 * Additional data to send in the first worker message.
88 */
89 transferList?: TransferListItem[] | undefined;
90 trackUnmanagedFds?: boolean | undefined;
91 }
92
93 interface ResourceLimits {
94 /**
95 * The maximum size of a heap space for recently created objects.
96 */
97 maxYoungGenerationSizeMb?: number | undefined;
98 /**
99 * The maximum size of the main heap in MB.
100 */
101 maxOldGenerationSizeMb?: number | undefined;
102 /**
103 * The size of a pre-allocated memory range used for generated code.
104 */
105 codeRangeSizeMb?: number | undefined;
106 /**
107 * The default maximum stack size for the thread. Small values may lead to unusable Worker instances.
108 * @default 4
109 */
110 stackSizeMb?: number | undefined;
111 }
112
113 class Worker extends EventEmitter {
114 readonly stdin: Writable | null;
115 readonly stdout: Readable;
116 readonly stderr: Readable;
117 readonly threadId: number;
118 readonly resourceLimits?: ResourceLimits | undefined;
119
120 /**
121 * @param filename The path to the Worker’s main script or module.
122 * Must be either an absolute path or a relative path (i.e. relative to the current working directory) starting with ./ or ../,
123 * or a WHATWG URL object using file: protocol. If options.eval is true, this is a string containing JavaScript code rather than a path.
124 */
125 constructor(filename: string | URL, options?: WorkerOptions);
126
127 postMessage(value: any, transferList?: ReadonlyArray<TransferListItem>): void;
128 ref(): void;
129 unref(): void;
130 /**
131 * Stop all JavaScript execution in the worker thread as soon as possible.
132 * Returns a Promise for the exit code that is fulfilled when the `exit` event is emitted.
133 */
134 terminate(): Promise<number>;
135
136 /**
137 * Returns a readable stream for a V8 snapshot of the current state of the Worker.
138 * See [`v8.getHeapSnapshot()`][] for more details.
139 *
140 * If the Worker thread is no longer running, which may occur before the
141 * [`'exit'` event][] is emitted, the returned `Promise` will be rejected
142 * immediately with an [`ERR_WORKER_NOT_RUNNING`][] error
143 */
144 getHeapSnapshot(): Promise<Readable>;
145
146 addListener(event: "error", listener: (err: Error) => void): this;
147 addListener(event: "exit", listener: (exitCode: number) => void): this;
148 addListener(event: "message", listener: (value: any) => void): this;
149 addListener(event: "messageerror", listener: (error: Error) => void): this;
150 addListener(event: "online", listener: () => void): this;
151 addListener(event: string | symbol, listener: (...args: any[]) => void): this;
152
153 emit(event: "error", err: Error): boolean;
154 emit(event: "exit", exitCode: number): boolean;
155 emit(event: "message", value: any): boolean;
156 emit(event: "messageerror", error: Error): boolean;
157 emit(event: "online"): boolean;
158 emit(event: string | symbol, ...args: any[]): boolean;
159
160 on(event: "error", listener: (err: Error) => void): this;
161 on(event: "exit", listener: (exitCode: number) => void): this;
162 on(event: "message", listener: (value: any) => void): this;
163 on(event: "messageerror", listener: (error: Error) => void): this;
164 on(event: "online", listener: () => void): this;
165 on(event: string | symbol, listener: (...args: any[]) => void): this;
166
167 once(event: "error", listener: (err: Error) => void): this;
168 once(event: "exit", listener: (exitCode: number) => void): this;
169 once(event: "message", listener: (value: any) => void): this;
170 once(event: "messageerror", listener: (error: Error) => void): this;
171 once(event: "online", listener: () => void): this;
172 once(event: string | symbol, listener: (...args: any[]) => void): this;
173
174 prependListener(event: "error", listener: (err: Error) => void): this;
175 prependListener(event: "exit", listener: (exitCode: number) => void): this;
176 prependListener(event: "message", listener: (value: any) => void): this;
177 prependListener(event: "messageerror", listener: (error: Error) => void): this;
178 prependListener(event: "online", listener: () => void): this;
179 prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
180
181 prependOnceListener(event: "error", listener: (err: Error) => void): this;
182 prependOnceListener(event: "exit", listener: (exitCode: number) => void): this;
183 prependOnceListener(event: "message", listener: (value: any) => void): this;
184 prependOnceListener(event: "messageerror", listener: (error: Error) => void): this;
185 prependOnceListener(event: "online", listener: () => void): this;
186 prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
187
188 removeListener(event: "error", listener: (err: Error) => void): this;
189 removeListener(event: "exit", listener: (exitCode: number) => void): this;
190 removeListener(event: "message", listener: (value: any) => void): this;
191 removeListener(event: "messageerror", listener: (error: Error) => void): this;
192 removeListener(event: "online", listener: () => void): this;
193 removeListener(event: string | symbol, listener: (...args: any[]) => void): this;
194
195 off(event: "error", listener: (err: Error) => void): this;
196 off(event: "exit", listener: (exitCode: number) => void): this;
197 off(event: "message", listener: (value: any) => void): this;
198 off(event: "messageerror", listener: (error: Error) => void): this;
199 off(event: "online", listener: () => void): this;
200 off(event: string | symbol, listener: (...args: any[]) => void): this;
201 }
202
203 /**
204 * Mark an object as not transferable.
205 * If `object` occurs in the transfer list of a `port.postMessage()` call, it will be ignored.
206 *
207 * In particular, this makes sense for objects that can be cloned, rather than transferred,
208 * and which are used by other objects on the sending side. For example, Node.js marks
209 * the `ArrayBuffer`s it uses for its Buffer pool with this.
210 *
211 * This operation cannot be undone.
212 */
213 function markAsUntransferable(object: object): void;
214
215 /**
216 * Transfer a `MessagePort` to a different `vm` Context. The original `port`
217 * object will be rendered unusable, and the returned `MessagePort` instance will
218 * take its place.
219 *
220 * The returned `MessagePort` will be an object in the target context, and will
221 * inherit from its global `Object` class. Objects passed to the
222 * `port.onmessage()` listener will also be created in the target context
223 * and inherit from its global `Object` class.
224 *
225 * However, the created `MessagePort` will no longer inherit from
226 * `EventEmitter`, and only `port.onmessage()` can be used to receive
227 * events using it.
228 */
229 function moveMessagePortToContext(port: MessagePort, context: Context): MessagePort;
230
231 /**
232 * Receive a single message from a given `MessagePort`. If no message is available,
233 * `undefined` is returned, otherwise an object with a single `message` property
234 * that contains the message payload, corresponding to the oldest message in the
235 * `MessagePort`’s queue.
236 */
237 function receiveMessageOnPort(port: MessagePort): { message: any } | undefined;
238}
239declare module 'node:worker_threads' {
240 export * from 'worker_threads';
241}