import { DynamicWorker, DynamicWorkerCodes, DynamicWorkerOptions } from "./DynamicWorker";
import { DynamicWorkerPool } from "./DynamicWorkerPool";
import type { AnyFunction, Optional, PickMethod } from "type-tls";
import type { INamedFunctionMap, IWorkerCodes } from "./createWorkerURL";
import type { WorkerClient } from "./WorkerClient";
import type { CallOptions } from "./type";
/**
 * 提取 ExecRes<D> 中的 D 的类型
 * @remarks
 * 用于提取 ExecResult 类型中的 D 的类型
 */
export type GetExecResultData<ExecRes> = ExecRes extends {
    data: infer D;
} ? D : ExecRes;
/**
 * 提取 函数 Fun 的返回类型 ExecRes<D> 中的 D 的类型
 */
export type GetExecFunResultData<Fun extends (...args: any) => any> = GetExecResultData<Awaited<ReturnType<Fun>>>;
/**
 * 异步函数的参数类型
 */
export type AsyncFunArgs<Fun extends (...args: any) => any> = Parameters<Fun> | [CallOptions<Parameters<Fun>>];
/**
* 把函数转为异步函数
*/
export type AsyncFun<Fun extends (...args: any) => any> = GetExecFunResultData<Fun> extends ReadableStream ? (...args: AsyncFunArgs<Fun>) => GetExecFunResultData<Fun> : (...args: AsyncFunArgs<Fun>) => Promise<GetExecFunResultData<Fun>>;
/**
* 将所有方法都 转为 异步方法
*
* @remarks
* 所有的方法的入参不变，返回参数都变为解决值为对应类型的 Promise
*
* @typeParam Methods - 包含方法的对象
*/
export type ToAsyncMethods<Methods extends INamedFunctionMap> = {
    [N in keyof Methods]: AsyncFun<Methods[N]>;
};
/**
* 将所有成员都 转为 异步h命令
*
* @remarks
* 所有的方法的入参不变，返回参数都变为解决值为对应类型的 Promise
* 所有的属性都变为返回解决值为对应类型的 Promise 的方法
*/
export type MembersToAsyncCMD<Target> = {
    [N in keyof Target]: AsyncCMD<Target[N]>;
};
/**
* 转为异步的命令
* @remarks
* 函数的入参不变，返回参数都变为解决值为对应类型的 Promise
* 其它非函数的值都变为返回解决值为对应类型的 Promise 的函数
*/
export type AsyncCMD<Value> = Value extends AnyFunction ? AsyncFun<Value> : (() => Promise<Awaited<Value>>);
/**
 * 创建Worker客户端的代理
 * @param client
 * @returns
 */
export declare function createWorkerClientProxy<WClient extends WorkerClient<AbstractWorker>>(client: WClient): any;
/**
 * 创建动态 Worker
 *
 * @param worker - worker实例
 * @param name - worker中运行的js文件的url
 * @param url - Worker 中所包含的初始代码
 * @param code - Worker 中所包含的初始代码
 * @param workerOptions - Worker 相关的选项
 * @returns
 */
export declare function createDynamicWorker<Members, W extends AbstractWorker = Worker>(noCode?: undefined | null, workerOptions?: Optional<DynamicWorkerOptions<W>>): MembersToAsyncCMD<Members> & DynamicWorker<W>;
export declare function createDynamicWorker<Members, W extends AbstractWorker = Worker>(worker: W, name?: string): MembersToAsyncCMD<Members> & DynamicWorker<W>;
export declare function createDynamicWorker<Members, W extends AbstractWorker = Worker>(url: string, workerOptions?: Optional<Omit<DynamicWorkerOptions<W>, "noDep">>): MembersToAsyncCMD<Members> & DynamicWorker<W>;
export declare function createDynamicWorker<Members extends Record<string | number, any>, W extends AbstractWorker = Worker>(code: DynamicWorkerCodes<PickMethod<Members>>, workerOptions?: Optional<DynamicWorkerOptions<W>>): MembersToAsyncCMD<Members> & DynamicWorker<W>;
export declare function createDynamicWorker<Members extends Record<string | number, any>, W extends AbstractWorker = Worker>(codeOptions?: Optional<DynamicWorkerCodes<Members> | string | W>, workerOptions?: Optional<DynamicWorkerOptions<W> | string>): MembersToAsyncCMD<Members> & DynamicWorker<W>;
/**
 * 创建动态 Worker 池
 *
 * @param workerNum - Worker池 中 workder 的个数
 * @param codeOptions - Worker 中所包含的初始代码
 * @param workerOptions - Worker 相关的选项
 * @returns
 */
export declare function createDynamicWorkerPool<Members extends Record<string | number, any>, W extends AbstractWorker = Worker>(workerNum: number, codeOptions?: Optional<IWorkerCodes | string>, workerOptions?: Optional<DynamicWorkerOptions<W>>): MembersToAsyncCMD<Members> & DynamicWorkerPool<W>;
//# sourceMappingURL=createDynamicWorker.d.ts.map