import { Event } from './event';
/**
 * Base class for projections (read models) in CQRS system
 */
export declare abstract class Projection {
    /**
     * Unique projection identifier
     */
    protected id: string;
    /**
     * Last processed event version
     */
    protected lastEventVersion: number;
    /**
     * Last update timestamp
     */
    protected lastUpdated: Date;
    constructor(id: string);
    getId(): string;
    getLastEventVersion(): number;
    getLastUpdated(): Date;
    /**
     * Abstract method for event handling
     * Must be implemented in each projection
     */
    abstract onEvent(event: Event): Promise<void>;
    /**
     * Updates metadata after event processing
     */
    protected updateMetadata(eventVersion?: number): void;
    /**
     * Checks if projection supports given event type
     */
    protected supportsEvent(event: Event): boolean;
    /**
     * Serializes projection to JSON
     */
    toJSON(): Record<string, any>;
    /**
     * Gets projection data for serialization
     */
    protected getProjectionData(): Record<string, any>;
    /**
     * Restores projection from JSON
     */
    static fromJSON<T extends Projection>(this: new (...args: any[]) => T, json: Record<string, any>): T;
    /**
     * Resets projection to initial state
     */
    reset(): void;
    /**
     * Resets projection data (should be overridden in projection)
     */
    protected resetProjectionData(): void;
}
//# sourceMappingURL=projection.d.ts.map