import { IncomingMessage, ServerResponse } from 'http';
import { TransferListItem, Worker, WorkerOptions } from 'worker_threads';
export interface WorkerResponseData {
    type: 'finished' | 'error' | 'invoke' | 'callback' | 'bind-event' | 'remove-event';
    error?: Error;
    event?: {
        id: string;
        name: string;
        target: string;
    };
    callbackId?: string;
    callbackValues?: any[];
    invoke?: {
        id: string;
        target: string;
        method: string;
        args: any[];
    };
}
export type InvokeTargetType = 'request' | 'response' | 'responseSocket' | 'requestSocket';
interface ResponseMessagePort extends MessagePort {
    postMessage(message: WorkerResponseData, transfer: Transferable[]): void;
    postMessage(message: WorkerResponseData, options?: StructuredSerializeOptions): void;
}
export interface WorkerRequestValue {
    port: ResponseMessagePort;
    request: ReturnType<typeof WorkerInvoker.serializeRequest>;
}
export interface ResolverWorker extends Worker {
    postMessage(value: WorkerRequestValue, transferList?: ReadonlyArray<TransferListItem>): void;
}
export interface WorkDataInfo {
    rootDir?: string;
    outDir?: string;
    workerJs: string;
    dev?: boolean;
}
export interface RessolverWorkerOptions extends WorkerOptions {
    workerData?: WorkDataInfo;
}
export default class WorkerInvoker {
    port: ResponseMessagePort;
    static serializeRequest(req: IncomingMessage): {
        url: string;
        method: string;
        rawHeaders: string[];
        rawTrailers: string[];
        httpVersion: string;
        httpVersionMajor: number;
        httpVersionMinor: number;
        readableEncoding: BufferEncoding;
        socket: {
            address: {} | import("net").AddressInfo;
        };
    };
    constructor(port: MessagePort);
    static bindCallback(port: ResponseMessagePort, id: string, name: string): (...values: any[]) => void;
    static onInvoke(info: WorkerResponseData, port: MessagePort, request: IncomingMessage, response: ServerResponse): void;
    static bindEventListener(info: WorkerResponseData, port: ResponseMessagePort, request: IncomingMessage, response: ServerResponse): void;
    /**
     * 执行主线程对象方法
     * @param target 要执行的对象名
     * @param method 要执行的方法名
     * @param args 参数
     * @returns
     */
    invoke(target: InvokeTargetType, method: string, args: any[]): Promise<unknown>;
    addEventListener(target: InvokeTargetType, event: string, handler: (...args: any) => void, once?: boolean): void;
    removeEventListener(target: string, event: string, id: string, handler: (...args: any) => void): void;
}
export {};
