worker-tls
Version:
worker-tls 提供了 动态Worker 功能 和 其它一些 Worker 场景下有用的工具集;让开发者可以像调用对象方法一样动态地调用Worker中的方法,也可以随时地往 Worker 中动态地添加函数 等等。
170 lines • 4.04 kB
TypeScript
import type { Optional, AnyFunction } from "type-tls";
/**
* 命令执行信息
* @remarks
* 命令有两种类型:
*
* + 函数:
*
* - 执行命令就是执行函数
*
* - 执行命令的返回值就是函数的返回值
*
* + 数据:
*
* - 执行命令就是访问这个数据对象
*
* - 执行命令的返回值就这个数据本身
*/
export interface Exec {
/**
* 被执行对象的名字
*/
name: string;
/**
* 函数式命令的参数
* @remarks
* 如果传递了该选项,则命令一定会被当作函数来处理
*/
args?: Optional<any[]>;
/**
* 函数式命令的 this 值
* @remarks
* 如果传递了该选项,则命令一定会被当作函数来处理
*/
this?: any;
}
/**
* 命令执行的记录
*/
export interface ExecRecord extends Exec {
/**
* 本次执行的id
*/
id: string;
}
/**
* 消息的状态
*/
export declare enum MessageState {
/**
* 消息还没有发完,后续还有
*/
Ing = "\u8FDB\u884C\u4E2D",
/**
* 消息已发完
*/
End = "\u7ED3\u675F"
}
/**
* 响应消息的数据类型
*/
export interface ResponseMessage<D = any> {
/**
* 对应的执行记录的 id
*/
execId: string;
/**
* 数据
*/
data: D;
/**
* 错误消息
*/
error?: any;
/**
* 消息的状态
*/
state: MessageState;
}
/**
* 执行命令
*
* @remarks
* - 如果目标命令不是函数 且 命令给了 args 参数 或 this,则会以错误结束
*
* - 如果目标命令不是函数 且 没有提供 args 参数 和 this,则会返回获取到的命令对象
*
* @param exec
* @returns
*/
export declare function execCMD(exec: Exec): ExecResult;
/**
* 响应信息的类型
*/
export type ResponseMessageOptions<D = any> = WindowPostMessageOptions & ResponseMessage<D>;
/**
* {@link ResponseMessageOptions} 的类型守卫
*
* @param response
* @returns
*/
export declare function isResponseMessageOptions<D>(response: ExecResult<D>): response is ResponseMessageOptions<D>;
/**
* 命令的执行结果
*
* @remarks
* 一般需要被命令的函数的返回值的类型
*/
export type ExecResult<D = any> = ResponseMessageOptions<D> | D;
/**
* sendMessage 的选项
*/
export interface SendMessageOptions extends Partial<Omit<ResponseMessageOptions, "data">> {
/**
* 用于发送消息的消息端口对象 MessagePort
*
* @remarks
* 当在共享 worker 中时,需要提供该选项
*/
port?: Optional<MessagePort>;
}
/**
* 发送消息
*
* @remarks
* 该方法会将数据通过 postMessage 发送出去
*
* 支持发送 异步数据 Promise 和 流 ReadableStream
*
* @param execResult
*/
export declare function sendMessage(execResult: ExecResult, options?: SendMessageOptions | null): any;
/**
* 发送同步消息
*
* @remarks
* 该方法会将数据通过 postMessage 发送出去
*
* @param syncExecResult - 非 Promise 的同步执行结果
*/
export declare function sendMessageForSyncResult(syncExecResult: ExecResult, options: SendMessageOptions): void;
/**
* 用于执行命令的 message 监听器
* @param event
*/
export declare function messageListener(event: MessageEvent<ExecRecord>): void;
/**
* 设置命令
* @remarks
* 会将命令设置在全局环境 `globalThis` 中;其实就是将命令挂载在 `globalThis` 上;
* @param cmdStr - 命令的字符串形式
* @param name - 命令的名字
*/
export declare function setCMD(cmdStr: string, name?: string): boolean;
/**
* 移除命令
* @remarks
* 其实就是删除 `globalThis` 上对应的属性
* @param name - 命令的名字
*/
export declare function removeCMD(name: string): boolean;
/**
* 监听 message 消息
*
* @remarks
* 支持 SharedWorker 和 专用 Worker
* @param listener - 监听器
*/
export declare function listenMessage(listener: AnyFunction): void;
//# sourceMappingURL=dynamicWorkerAPI.d.ts.map