UNPKG

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