1 | declare 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 |
|
73 |
|
74 |
|
75 |
|
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 |
|
88 |
|
89 | transferList?: TransferListItem[] | undefined;
|
90 | trackUnmanagedFds?: boolean | undefined;
|
91 | }
|
92 |
|
93 | interface ResourceLimits {
|
94 | |
95 |
|
96 |
|
97 | maxYoungGenerationSizeMb?: number | undefined;
|
98 | |
99 |
|
100 |
|
101 | maxOldGenerationSizeMb?: number | undefined;
|
102 | |
103 |
|
104 |
|
105 | codeRangeSizeMb?: number | undefined;
|
106 | |
107 |
|
108 |
|
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 |
|
122 |
|
123 |
|
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 | }
|