import { IWorkerCodes, INamedFunctionMap, INamedFunctionList } from "./createWorkerURL";
import type { Optional, AnyFunction } from "type-tls";
import { WorkerClient, type DWorker } from "./WorkerClient";
/**
 * worker 的信息
 */
export interface WorkerInfo {
    /**
     * worker 要加载的代码的url
     */
    url: string;
    /**
     * worker 的名字
     */
    name: string;
    /**
     * worker 客户端 的 id
     */
    clientId: number;
    /**
     * worker 的 id
     */
    id: number;
}
/**
 * 获取 Worker 的回调函数
 * @remarks
 * 这个函数就是用来根据回调的入参创建 worker 实例的
 *
 * @param url - 用于创建 Worker 的 url；
 * @param name - Worker 的名字
 */
export type GetWorker<W extends AbstractWorker = Worker> = (info: WorkerInfo) => W;
/**
 * 默认的 getWorker
 * @param url
 * @param name
 * @returns
 */
export declare function getWorker_Default(info: WorkerInfo): Worker;
/**
 * 动态 Worker 的初始配置 code
 */
export type DynamicWorkerCodes<Methods extends INamedFunctionMap> = Omit<IWorkerCodes, "named"> & {
    named?: Optional<Methods | INamedFunctionList>;
};
/**
 * 动态 Worker 的选项
 */
export interface DynamicWorkerOptions<W extends AbstractWorker = Worker> {
    /**
     * 获取 Worker 实例的方法
     * @defaultValue 默认会创建私有 Worker
     */
    getWorker?: Optional<GetWorker<W>>;
    /**
     * worker 的名字
     */
    name?: string;
    /**
     * 是否是不自动添加 动态 worker 依赖的环境代码
     * 如果明确指定为 true，则不会包含 动态 worker 依赖的环境代码
     * @defaultValue true
     */
    noDep?: boolean;
}
/**
 * 从 worker 实例创建 动态 Worker 的选项
 */
export interface DynamicWorkerFromInstOptions<W extends AbstractWorker = Worker> {
    /**
     * Worker 实例
     */
    worker: W;
    /**
     * worker 的名字
     */
    name?: string;
}
/**
 * 动态Worker
 *
 * @remarks
 * 动态 Worker 具备以下特点：
 *
 * - 往 Worker 中添加函数、全局变量 等
 *
 * - 调用 Worker 中的任意全局函数 或 全局变量
 *
 * - 像调用本地方法一样调用 Worker 里的方法
 *
 * - 会自动给实例自身添加快捷命令
 *
 * - 支持异步、流
 *
 * - 支持异步和流互相嵌套
 */
export declare class DynamicWorker<W extends AbstractWorker = Worker> extends WorkerClient<W> {
    /**
     *
     * @param worker 已创建好的 worker 实例
     * @param name
     */
    constructor();
    constructor(worker: W, name?: string);
    constructor(url: string, workerOptions?: Optional<Omit<DynamicWorkerOptions<W>, "noDep">>);
    constructor(code: IWorkerCodes, workerOptions?: Optional<DynamicWorkerOptions<W>>);
    constructor(codeOrUrlOrWorker?: Optional<IWorkerCodes | string | W>, workerOptionsOrName?: Optional<DynamicWorkerOptions<W> | string>);
    /**
     * Worker 的实例
     */
    worker: DWorker<W>;
    /**
     * 正在执行中的任务数
     */
    get executingCount(): number;
    /**
     * 设置命令
     * @remarks
     * 会在Worker中添加一条命令，并且也会在实例自身上添加一个快捷命令（快捷方法 或 快捷属性）
     *
     * @param cmd
     * @param name - 命令的命名；默认会取 `cmd.name` 作为名字；当 cmd 是字符串时，name 是必须的
     * @param isProperty - 添加到实例自身的快捷命令是否作为属性；如果是 true，则会在实例自身上生成快捷属性
     * @returns
     */
    setCMD(cmd: string | AnyFunction, name?: Optional<string>, isProperty?: Optional<boolean>): Promise<boolean>;
    /**
     * 移除命令
     * @remarks
     * 会将 Worker 中的命令 和 自己实例上的对应快捷方法都给移除
     * @param name
     * @returns
     */
    removeCMD(name: string): Promise<boolean>;
}
//# sourceMappingURL=DynamicWorker.d.ts.map