123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- declare module 'worker_threads' {
- import { Context } from 'vm';
- import EventEmitter = require('events');
- import { Readable, Writable } from 'stream';
- import { URL } from 'url';
- import { FileHandle } from 'fs/promises';
-
- const isMainThread: boolean;
- const parentPort: null | MessagePort;
- const resourceLimits: ResourceLimits;
- const SHARE_ENV: unique symbol;
- const threadId: number;
- const workerData: any;
-
- class MessageChannel {
- readonly port1: MessagePort;
- readonly port2: MessagePort;
- }
-
- type TransferListItem = ArrayBuffer | MessagePort | FileHandle;
-
- class MessagePort extends EventEmitter {
- close(): void;
- postMessage(value: any, transferList?: ReadonlyArray<TransferListItem>): void;
- ref(): void;
- unref(): void;
- start(): void;
-
- addListener(event: "close", listener: () => void): this;
- addListener(event: "message", listener: (value: any) => void): this;
- addListener(event: "messageerror", listener: (error: Error) => void): this;
- addListener(event: string | symbol, listener: (...args: any[]) => void): this;
-
- emit(event: "close"): boolean;
- emit(event: "message", value: any): boolean;
- emit(event: "messageerror", error: Error): boolean;
- emit(event: string | symbol, ...args: any[]): boolean;
-
- on(event: "close", listener: () => void): this;
- on(event: "message", listener: (value: any) => void): this;
- on(event: "messageerror", listener: (error: Error) => void): this;
- on(event: string | symbol, listener: (...args: any[]) => void): this;
-
- once(event: "close", listener: () => void): this;
- once(event: "message", listener: (value: any) => void): this;
- once(event: "messageerror", listener: (error: Error) => void): this;
- once(event: string | symbol, listener: (...args: any[]) => void): this;
-
- prependListener(event: "close", listener: () => void): this;
- prependListener(event: "message", listener: (value: any) => void): this;
- prependListener(event: "messageerror", listener: (error: Error) => void): this;
- prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
-
- prependOnceListener(event: "close", listener: () => void): this;
- prependOnceListener(event: "message", listener: (value: any) => void): this;
- prependOnceListener(event: "messageerror", listener: (error: Error) => void): this;
- prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
-
- removeListener(event: "close", listener: () => void): this;
- removeListener(event: "message", listener: (value: any) => void): this;
- removeListener(event: "messageerror", listener: (error: Error) => void): this;
- removeListener(event: string | symbol, listener: (...args: any[]) => void): this;
-
- off(event: "close", listener: () => void): this;
- off(event: "message", listener: (value: any) => void): this;
- off(event: "messageerror", listener: (error: Error) => void): this;
- off(event: string | symbol, listener: (...args: any[]) => void): this;
- }
-
- interface WorkerOptions {
- /**
- * List of arguments which would be stringified and appended to
- * `process.argv` in the worker. This is mostly similar to the `workerData`
- * but the values will be available on the global `process.argv` as if they
- * were passed as CLI options to the script.
- */
- argv?: any[];
- env?: NodeJS.Dict<string> | typeof SHARE_ENV;
- eval?: boolean;
- workerData?: any;
- stdin?: boolean;
- stdout?: boolean;
- stderr?: boolean;
- execArgv?: string[];
- resourceLimits?: ResourceLimits;
- /**
- * Additional data to send in the first worker message.
- */
- transferList?: TransferListItem[];
- trackUnmanagedFds?: boolean;
- }
-
- interface ResourceLimits {
- /**
- * The maximum size of a heap space for recently created objects.
- */
- maxYoungGenerationSizeMb?: number;
- /**
- * The maximum size of the main heap in MB.
- */
- maxOldGenerationSizeMb?: number;
- /**
- * The size of a pre-allocated memory range used for generated code.
- */
- codeRangeSizeMb?: number;
- /**
- * The default maximum stack size for the thread. Small values may lead to unusable Worker instances.
- * @default 4
- */
- stackSizeMb?: number;
- }
-
- class Worker extends EventEmitter {
- readonly stdin: Writable | null;
- readonly stdout: Readable;
- readonly stderr: Readable;
- readonly threadId: number;
- readonly resourceLimits?: ResourceLimits;
-
- /**
- * @param filename The path to the Worker’s main script or module.
- * Must be either an absolute path or a relative path (i.e. relative to the current working directory) starting with ./ or ../,
- * or a WHATWG URL object using file: protocol. If options.eval is true, this is a string containing JavaScript code rather than a path.
- */
- constructor(filename: string | URL, options?: WorkerOptions);
-
- postMessage(value: any, transferList?: ReadonlyArray<TransferListItem>): void;
- ref(): void;
- unref(): void;
- /**
- * Stop all JavaScript execution in the worker thread as soon as possible.
- * Returns a Promise for the exit code that is fulfilled when the `exit` event is emitted.
- */
- terminate(): Promise<number>;
-
- /**
- * Returns a readable stream for a V8 snapshot of the current state of the Worker.
- * See [`v8.getHeapSnapshot()`][] for more details.
- *
- * If the Worker thread is no longer running, which may occur before the
- * [`'exit'` event][] is emitted, the returned `Promise` will be rejected
- * immediately with an [`ERR_WORKER_NOT_RUNNING`][] error
- */
- getHeapSnapshot(): Promise<Readable>;
-
- addListener(event: "error", listener: (err: Error) => void): this;
- addListener(event: "exit", listener: (exitCode: number) => void): this;
- addListener(event: "message", listener: (value: any) => void): this;
- addListener(event: "messageerror", listener: (error: Error) => void): this;
- addListener(event: "online", listener: () => void): this;
- addListener(event: string | symbol, listener: (...args: any[]) => void): this;
-
- emit(event: "error", err: Error): boolean;
- emit(event: "exit", exitCode: number): boolean;
- emit(event: "message", value: any): boolean;
- emit(event: "messageerror", error: Error): boolean;
- emit(event: "online"): boolean;
- emit(event: string | symbol, ...args: any[]): boolean;
-
- on(event: "error", listener: (err: Error) => void): this;
- on(event: "exit", listener: (exitCode: number) => void): this;
- on(event: "message", listener: (value: any) => void): this;
- on(event: "messageerror", listener: (error: Error) => void): this;
- on(event: "online", listener: () => void): this;
- on(event: string | symbol, listener: (...args: any[]) => void): this;
-
- once(event: "error", listener: (err: Error) => void): this;
- once(event: "exit", listener: (exitCode: number) => void): this;
- once(event: "message", listener: (value: any) => void): this;
- once(event: "messageerror", listener: (error: Error) => void): this;
- once(event: "online", listener: () => void): this;
- once(event: string | symbol, listener: (...args: any[]) => void): this;
-
- prependListener(event: "error", listener: (err: Error) => void): this;
- prependListener(event: "exit", listener: (exitCode: number) => void): this;
- prependListener(event: "message", listener: (value: any) => void): this;
- prependListener(event: "messageerror", listener: (error: Error) => void): this;
- prependListener(event: "online", listener: () => void): this;
- prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
-
- prependOnceListener(event: "error", listener: (err: Error) => void): this;
- prependOnceListener(event: "exit", listener: (exitCode: number) => void): this;
- prependOnceListener(event: "message", listener: (value: any) => void): this;
- prependOnceListener(event: "messageerror", listener: (error: Error) => void): this;
- prependOnceListener(event: "online", listener: () => void): this;
- prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
-
- removeListener(event: "error", listener: (err: Error) => void): this;
- removeListener(event: "exit", listener: (exitCode: number) => void): this;
- removeListener(event: "message", listener: (value: any) => void): this;
- removeListener(event: "messageerror", listener: (error: Error) => void): this;
- removeListener(event: "online", listener: () => void): this;
- removeListener(event: string | symbol, listener: (...args: any[]) => void): this;
-
- off(event: "error", listener: (err: Error) => void): this;
- off(event: "exit", listener: (exitCode: number) => void): this;
- off(event: "message", listener: (value: any) => void): this;
- off(event: "messageerror", listener: (error: Error) => void): this;
- off(event: "online", listener: () => void): this;
- off(event: string | symbol, listener: (...args: any[]) => void): this;
- }
-
- /**
- * Mark an object as not transferable.
- * If `object` occurs in the transfer list of a `port.postMessage()` call, it will be ignored.
- *
- * In particular, this makes sense for objects that can be cloned, rather than transferred,
- * and which are used by other objects on the sending side. For example, Node.js marks
- * the `ArrayBuffer`s it uses for its Buffer pool with this.
- *
- * This operation cannot be undone.
- */
- function markAsUntransferable(object: object): void;
-
- /**
- * Transfer a `MessagePort` to a different `vm` Context. The original `port`
- * object will be rendered unusable, and the returned `MessagePort` instance will
- * take its place.
- *
- * The returned `MessagePort` will be an object in the target context, and will
- * inherit from its global `Object` class. Objects passed to the
- * `port.onmessage()` listener will also be created in the target context
- * and inherit from its global `Object` class.
- *
- * However, the created `MessagePort` will no longer inherit from
- * `EventEmitter`, and only `port.onmessage()` can be used to receive
- * events using it.
- */
- function moveMessagePortToContext(port: MessagePort, context: Context): MessagePort;
-
- /**
- * Receive a single message from a given `MessagePort`. If no message is available,
- * `undefined` is returned, otherwise an object with a single `message` property
- * that contains the message payload, corresponding to the oldest message in the
- * `MessagePort`’s queue.
- */
- function receiveMessageOnPort(port: MessagePort): { message: any } | undefined;
- }
|