import { HandlerObject, ModuleAPI, ModuleDef, Module } from '../core';
export interface WorkerAPI {
    postMessage(value: any): void;
    onmessage?(ev: WorkerEvent): void;
}
export interface WorkerEvent {
    data: any;
}
export interface SyncQueue {
    queue: Waiter[];
    addWaiter(Waiter: any): void;
    next(data: any): void;
}
export interface Waiter {
    (data: any): boolean;
}
export declare function makeSyncQueue(): SyncQueue;
export declare const workerHandler: (type: "interface" | "task" | "group", name: string, syncQueue: SyncQueue, workerAPI?: WorkerAPI) => (mod: ModuleAPI) => {
    state: any;
    handle: (id: any, value: any) => Promise<any>;
    destroy: () => void;
};
export declare const workerLog: (type: "error" | "warn", workerAPI?: WorkerAPI) => (source: string, description: string) => void;
export declare const createWorkerListener: (syncQueue: SyncQueue, workerAPI?: WorkerAPI) => any;
export interface WorkerModuleDef extends ModuleDef {
    worker: any;
    Root: any;
}
export interface WorkerModule {
    worker: WorkerAPI;
    moduleAPI: ModuleAPI;
    groupObjects: {
        [name: string]: HandlerObject;
    };
    taskObjects: {
        [name: string]: HandlerObject;
    };
    interfaceObjects: {
        [name: string]: HandlerObject;
    };
}
export declare function runWorker(def: WorkerModuleDef): Promise<WorkerModule>;
export interface ExceptionsObject {
    interfaces: string[];
    tasks: string[];
    groups: string[];
}
export declare const runInWorker: (moduleDef: ModuleDef, exceptions?: ExceptionsObject, workerAPI?: WorkerAPI) => Promise<Module>;
