import { WorkerClientConnection } from './worker-client-connection.js';
import { IEventDispatcher, InferEvent, NormalizedEventTarget } from '../shared/normalized-event-target';
export type AsyncProperty<T> = T extends (...args: infer TArgs) => infer TResult ? (...args: TArgs) => TResult extends Promise<any> ? TResult : Promise<TResult> : Promise<T>;
export type WrappedObject<T> = T extends IEventDispatcher<infer TEvent> ? {
    readonly [property in keyof Omit<T, 'dispatchEvent'> as T[property] extends Function ? property : never]: AsyncProperty<T[property]>;
} & NormalizedEventTarget<TEvent> : {
    readonly [property in keyof T as T[property] extends Function ? property : never]: AsyncProperty<T[property]>;
};
export declare function wrapBackgroundService<T extends object | IEventDispatcher<TEvent>, TEvent extends object = InferEvent<T>>(workerConnection: WorkerClientConnection): WrappedObject<T>;
