import { Fun, JSIdentifier } from "./stringify";
import type { Optional, AnyFunction } from "type-tls";
/**
 * 将一组脚本内容构造成 ObjectURL
 * @param scripts - 脚本内容
 * @param options - 选项
 * @returns url字符串
 */
export declare function createObjectURLByContents(scripts: BlobPart[], options?: BlobPropertyBag | null): string;
/**
 * 代码片段
 */
export type CodePart = Fun | BlobPart;
/**
 * 通过代码构建 ObjectURL
 * @param codes
 * @param args - 对于立即调用的函数传的参数
 * @returns
 */
export declare function createObjectURLByCodes(codes: CodePart[], args?: Optional<any[]>): string;
/**
 * 定义命名的函数
 *
 * @remarks
 * 属性名字作为保存函数的变量名，即：函数名
 */
export interface INamedFunctionMap {
    [name: string | number]: AnyFunction;
}
/**
 * 定义命名的函数
 *
 */
export interface INamedFunction {
    /**
     * 保存函数的变量名
     */
    name?: Optional<string>;
    /**
     * 函数
     */
    fun: AnyFunction;
}
/**
 * 命名函数的数组
 */
export type INamedFunctionList = (AnyFunction | INamedFunction | INamedFunctionMap)[];
/**
 * 命名函数选项的综合定义
 */
export type INamedFunctions = INamedFunctionList | INamedFunctionMap;
/**
 * 代码块列表
 */
export type CodePartList = (CodePart | INamedFunction | INamedFunctionMap)[];
/**
 * 代码块选项的综合定义
 */
export type CodePartOptions = CodePartList | INamedFunctionMap;
/**
 * worker 的代码选项
 */
export interface IWorkerCodes {
    /**
     * 代码块
     * @remarks
     * - `code` 和 `named` 中的所有具有名字的 函数和数据都会被挂载在 `Worker` 中的 `globalThis` 上，其中 名字会作为 属性名字；
     *
     * - `code` 和 `named`中的 匿名函数 以及 `iife` 中的函数 会被作为 立即调用函数在 `Worker` 启动时作为顶层代码被立即执行；
     */
    code?: Optional<CodePartOptions>;
    /**
     * 命名的函数
     *
     * @remarks
     * 这些函数会被保存在 `Worker` 中的对应名字的全局变量中。
     *
     * - `code` 和 `named` 中的所有具有名字的 函数和数据都会被挂载在 `Worker` 中的 `globalThis` 上，其中 名字会作为 属性名字；
     *
     * - `code` 和 `named`中的 匿名函数 以及 `iife` 中的函数 会被作为 立即调用函数在 `Worker` 启动时作为顶层代码被立即执行；
     */
    named?: Optional<INamedFunctions>;
    /**
     * 在 Wokrer 中会被立即执行的函数
     * @remarks
     * 这些函数会被作为 立即调用函数在 Worker 启动时作为顶层代码被立即执行；
     */
    iife?: Optional<AnyFunction[]>;
    /**
     * 会作为 message 事件监听器的函数。
     * @remarks
     * 这些函数会在 Worker 中接收 `message` 事件；
     *
     * **注意：** 并不是所有的 监听器 都会被直接添加到 `message` 事件上；只有以 函数名字（即：`JSIdentifier` 类型的监听器） 指定的 事件会被直接添加到 `message` 事件上，其它类型的监听器都是以函数调用并传递 `message` 事件参数的形式来响应 `message` 事件，
     */
    message?: Optional<(AnyFunction | JSIdentifier | Partial<INamedFunction>)[]>;
}
/**
 * 打包 options 中的代码并转成 BlobPart[]
 * @remarks
 * 传入的所有的代码块最终会被分为以下几类：
 *
 * 1. `code` 和 `named` 中的所有具有名字的 函数和数据都会被挂载在 Worker 中的 `globalThis` 上，其中 名字会作为 属性名字；
 *
 * 2. `code` 和 `named`中的 匿名函数 以及 `iife` 中的函数 会被作为 立即调用函数在 Worker 启动时作为顶层代码被立即执行；
 *
 * 3. `message` 监听器会在 Worker 中接收 `message` 事件；
 *
 * @param options
 * @param noDep - 禁止包含 创建 Worker 时所需要的其它依赖代码（环境代码）
 * @returns
 */
export declare function createBlobParts(options: IWorkerCodes, noDep?: Optional<boolean>): BlobPart[];
/**
 * 生成可用于创建 worker 的 url
 * @remarks
 * 打包 codeOptions 中的代码并生成可用于创建 worker 的 url
 * @param codeOptions - 往 Worker 中注入代码的配置选项
 * @param noDep - 禁止包含 创建 Worker 时所需要的其它依赖代码（环境代码）
 * @returns
 */
export declare function createWorkerURL(codeOptions: IWorkerCodes, noDep?: Optional<boolean>): string;
/**
 * 生成可用于创建动态 Worker 的 url
 *
 * @remarks
 *
 * {@inheritDoc ./stringify.ts#dynamicWorkerCodeString}
 *
 * @param codeOptions - 往 Worker 中注入代码的配置选项
 * @param noDep - 禁止包含 创建 Worker 时所需要的其它依赖代码（环境代码）
 */
export declare function createDynamicWorkerURL(codeOptions?: Optional<IWorkerCodes>, noDep?: Optional<boolean>): string;
//# sourceMappingURL=createWorkerURL.d.ts.map