import { FoundationError } from '@cosmicmind/foundationjs';
import { Observable, ObservableTopics } from './Topic';
export type Event = Record<string, unknown>;
export type EventTopics = ObservableTopics & {
    readonly [K: string]: Event;
};
export declare class EventObservable<T extends EventTopics> extends Observable<T> {
}
export type EventPropertyLifecycle<E extends Event, V> = {
    required?: boolean;
    validator?(value: V, event: E): boolean | never;
};
export type EventPropertyLifecycleMap<E extends Event> = {
    [K in keyof E]?: EventPropertyLifecycle<E, E[K]>;
};
export declare class EventError extends FoundationError {
}
export type EventLifecycle<E extends Event> = {
    created?(event: E): void;
    error?(error: EventError): void;
    properties?: EventPropertyLifecycleMap<E>;
};
export declare const defineEvent: <E extends Event>(handler?: EventLifecycle<E>) => (event: E) => E;
//# sourceMappingURL=Event.d.ts.map