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