UNPKG

multithreading

Version:

The missing standard library for multithreading in JavaScript (Works in the browser, Node.js, Deno, Bun).

93 lines (92 loc) 2.08 kB
import type { SharedJsonBuffer } from "./json_buffer.js"; import type { PayloadType, WorkerResponseType, WorkerTaskType } from "./shared.js"; export type Result<T, E = Error> = { ok: true; value: T; } | { ok: false; error: E; }; export interface JoinHandle<T> { join(): Promise<Result<T, Error>>; abort(): void; } export type SharedMemoryView = Int8Array<SharedArrayBuffer> | Uint8Array<SharedArrayBuffer> | Uint8ClampedArray<SharedArrayBuffer> | Int16Array<SharedArrayBuffer> | Uint16Array<SharedArrayBuffer> | Int32Array<SharedArrayBuffer> | Uint32Array<SharedArrayBuffer> | Float32Array<SharedArrayBuffer> | Float64Array<SharedArrayBuffer> | BigInt64Array<SharedArrayBuffer> | BigUint64Array<SharedArrayBuffer> | DataView<SharedArrayBuffer> | SharedJsonBuffer<any>; /** * The internal task structure passed from lib -> pool */ export type ThreadTask = [ /** * fnId */ number, /** * code (Is always available here, but Pool decides if it sends it) */ string, /** * args */ unknown[] ]; /** * The wire format. * [type, value, typeId (optional, only for LIB)] */ export type Envelope = readonly [PayloadType.RAW, any] | readonly [PayloadType.LIB, any, number]; export type WorkerTaskPayload = [ /** * type */ WorkerTaskType.RUN, /** * taskId */ number, /** * fnId */ number, /** * args */ Envelope[], /** * code */ string | undefined ]; export type WorkerResultResponse = [ /** * type */ WorkerResponseType.RESULT, /** * taskId */ number, /** * result */ Envelope ]; export type WorkerErrorResponse = [ /** * type */ WorkerResponseType.ERROR, /** * taskId */ number, /** * error */ string, /** * code */ string | undefined ]; export type WorkerResponsePayload = WorkerResultResponse | WorkerErrorResponse; export type UserFunction = (...args: unknown[]) => Promise<unknown> | unknown;