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