import { EventSchemaMetadata } from './event-subscriber.cjs';

type SafeParseResult<T> = {
    success: true;
    data: T;
} | {
    success: false;
    error: unknown;
};
interface SchemaLike<T> {
    safeParse(input: unknown): SafeParseResult<T>;
}
interface DefineEventOptions<S> {
    toJsonSchema?: (schema: S) => unknown;
}
interface DefinedEvent<Name extends string, Payload> {
    readonly name: Name;
    readonly schemaMetadata?: EventSchemaMetadata;
    track(payload: Payload): void;
}
declare function defineEvent<Name extends string, Payload, S extends SchemaLike<Payload>>(name: Name, schema: S, options?: DefineEventOptions<S>): DefinedEvent<Name, Payload>;

export { type DefineEventOptions as D, type SchemaLike as S, type DefinedEvent as a, defineEvent as d };
