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