import { FoundationError } from '@cosmicmind/foundationjs';
export type Entity = Record<string, unknown>;
export type EntityPropertyKey<K> = keyof K extends string | symbol ? keyof K : never;
export type EntityPropertyLifecycle<E extends Entity, V> = {
    required?: boolean;
    validator?(value: V, entity: E): boolean | never;
    updated?(newValue: V, oldValue: V, entity: E): void;
};
export type EntityPropertyLifecycleMap<E extends Entity> = {
    [K in keyof E]?: EntityPropertyLifecycle<E, E[K]>;
};
export declare class EntityError extends FoundationError {
}
export type EntityLifecycle<E extends Entity> = {
    created?(entity: E): void;
    trace?(entity: E): void;
    error?(error: EntityError): void;
    properties?: EntityPropertyLifecycleMap<E>;
};
export declare const defineEntity: <E extends Entity>(handler?: EntityLifecycle<E>) => (entity: E) => E;
//# sourceMappingURL=Entity.d.ts.map