/// import type { Worker as Worker_2 } from 'worker_threads'; /** @public */ export declare interface BaseOptions { wasi: WASIInstance; version?: 'preview1'; wasm64?: boolean; } /** @public */ export declare interface ChildThreadOptions extends BaseOptions { childThread: true; postMessage?: (data: any) => void; } /** @public */ export declare function createInstanceProxy(instance: WebAssembly.Instance, memory?: WebAssembly.Memory | (() => WebAssembly.Memory)): WebAssembly.Instance; /** @public */ export declare function isSharedArrayBuffer(value: any): value is SharedArrayBuffer; /** @public */ export declare function isTrapError(e: Error): e is WebAssembly.RuntimeError; export declare interface LoadPayload { wasmModule: WebAssembly.Module; wasmMemory: WebAssembly.Memory; sab?: Int32Array; } /** @public */ export declare interface MainThreadBaseOptions extends BaseOptions { waitThreadStart?: boolean | number; } /** @public */ export declare type MainThreadOptions = MainThreadOptionsWithThreadManager | MainThreadOptionsCreateThreadManager; /** @public */ export declare interface MainThreadOptionsCreateThreadManager extends MainThreadBaseOptions, ThreadManagerOptionsMain { } /** @public */ export declare interface MainThreadOptionsWithThreadManager extends MainThreadBaseOptions { threadManager?: ThreadManager | (() => ThreadManager); } /** @public */ export declare interface ReuseWorkerOptions { /** * @see {@link https://emscripten.org/docs/tools_reference/settings_reference.html#pthread-pool-size | PTHREAD_POOL_SIZE} */ size: number; /** * @see {@link https://emscripten.org/docs/tools_reference/settings_reference.html#pthread-pool-size-strict | PTHREAD_POOL_SIZE_STRICT} */ strict?: boolean; } /** @public */ export declare interface StartResult { exitCode: number; instance: WebAssembly.Instance; } /** @public */ export declare class ThreadManager { unusedWorkers: WorkerLike[]; runningWorkers: WorkerLike[]; pthreads: Record; get nextWorkerID(): number; wasmModule: WebAssembly.Module | null; wasmMemory: WebAssembly.Memory | null; private readonly messageEvents; private readonly _childThread; private readonly _onCreateWorker; private readonly _reuseWorker; private readonly _beforeLoad?; /* Excluded from this release type: printErr */ constructor(options: ThreadManagerOptions); init(): void; initMainThread(): void; private preparePool; shouldPreloadWorkers(): boolean; loadWasmModuleToAllWorkers(): Promise; preloadWorkers(): Promise; setup(wasmModule: WebAssembly.Module, wasmMemory: WebAssembly.Memory): void; markId(worker: WorkerLike): number; returnWorkerToPool(worker: WorkerLike): void; loadWasmModuleToWorker(worker: WorkerLike, sab?: Int32Array): Promise; allocateUnusedWorker(): WorkerLike; getNewWorker(sab?: Int32Array): WorkerLike | undefined; cleanThread(worker: WorkerLike, tid: number, force?: boolean): void; terminateWorker(worker: WorkerLike): void; terminateAllThreads(): void; addMessageEventListener(worker: WorkerLike, onMessage: (e: WorkerMessageEvent) => void): () => void; fireMessageEvent(worker: WorkerLike, e: WorkerMessageEvent): void; } /** @public */ export declare type ThreadManagerOptions = ThreadManagerOptionsMain | ThreadManagerOptionsChild; /** @public */ export declare interface ThreadManagerOptionsBase { printErr?: (message: string) => void; } /** @public */ export declare interface ThreadManagerOptionsChild extends ThreadManagerOptionsBase { childThread: true; } /** @public */ export declare interface ThreadManagerOptionsMain extends ThreadManagerOptionsBase { beforeLoad?: (worker: WorkerLike) => any; reuseWorker?: boolean | number | ReuseWorkerOptions; onCreateWorker: WorkerFactory; childThread?: false; } /** @public */ export declare class ThreadMessageHandler { protected instance: WebAssembly.Instance | undefined; private messagesBeforeLoad; protected postMessage: (message: any) => void; protected onLoad?: (data: LoadPayload) => WebAssembly.WebAssemblyInstantiatedSource | PromiseLike; constructor(options?: ThreadMessageHandlerOptions); /** @virtual */ instantiate(data: LoadPayload): WebAssembly.WebAssemblyInstantiatedSource | PromiseLike; /** @virtual */ handle(e: WorkerMessageEvent): void; private _load; private _start; protected _loaded(err: Error | null, source: WebAssembly.WebAssemblyInstantiatedSource | null, payload: LoadPayload): void; protected handleAfterLoad(e: E, f: (e: E) => void): void; } /** @public */ export declare interface ThreadMessageHandlerOptions { onLoad?: (data: LoadPayload) => WebAssembly.WebAssemblyInstantiatedSource | PromiseLike; postMessage?: (message: any) => void; } /** @public */ export declare interface WASIInstance { readonly wasiImport?: Record; initialize(instance: object): void; start(instance: object): number; getImportObject?(): any; } /** @public */ export declare class WASIThreads { PThread: ThreadManager | undefined; private wasmMemory; private wasmInstance; private readonly threadSpawn; readonly childThread: boolean; private readonly postMessage; readonly wasi: WASIInstance; constructor(options: WASIThreadsOptions); getImportObject(): { wasi: WASIThreadsImports; }; setup(wasmInstance: WebAssembly.Instance, wasmModule: WebAssembly.Module, wasmMemory?: WebAssembly.Memory): void; preloadWorkers(): Promise; /** * It's ok to call this method to a WASI command module. * * in child thread, must call this method instead of {@link WASIThreads.start} even if it's a WASI command module * * @returns A proxied WebAssembly instance if in child thread, other wise the original instance */ initialize(instance: WebAssembly.Instance, module: WebAssembly.Module, memory?: WebAssembly.Memory): WebAssembly.Instance; /** * Equivalent to calling {@link WASIThreads.initialize} and then calling {@link WASIInstance.start} * ```js * this.initialize(instance, module, memory) * this.wasi.start(instance) * ``` */ start(instance: WebAssembly.Instance, module: WebAssembly.Module, memory?: WebAssembly.Memory): StartResult; terminateAllThreads(): void; } /** @public */ export declare interface WASIThreadsImports { 'thread-spawn': (startArg: number, errorOrTid?: number) => number; } /** @public */ export declare type WASIThreadsOptions = MainThreadOptions | ChildThreadOptions; /** @public */ export declare type WorkerFactory = (ctx: { type: string; name: string; }) => WorkerLike; /** @public */ export declare type WorkerLike = (Worker | Worker_2) & { whenLoaded?: Promise; loaded?: boolean; __emnapi_tid?: number; }; /** @public */ export declare interface WorkerMessageEvent { data: T; } export { }