import { Seconds, UnixTimestamp } from '@thermopylae/core.declarations';
import { CacheEntry } from '../../contracts/commons';
import { EXPIRES_AT_SYM } from '../../constants';
import { CacheReplacementPolicy, Deleter, EntryValidity } from '../../contracts/cache-replacement-policy';
/**
 * @private
 */
interface ExpirableCacheEntry<Key, Value> extends CacheEntry<Key, Value> {
    [EXPIRES_AT_SYM]?: UnixTimestamp;
}
/**
 * @private
 */
declare abstract class AbstractExpirationPolicy<Key, Value, ArgumentsBundle> implements CacheReplacementPolicy<Key, Value, ArgumentsBundle> {
    /**
     * Cache entry deleter.
     */
    protected deleteFromCache: Deleter<Key, Value>;
    /**
     * @inheritDoc
     */
    abstract onHit(entry: CacheEntry<Key, Value>): EntryValidity;
    /**
     * @inheritDoc
     */
    onMiss(): void;
    /**
     * @inheritDoc
     */
    abstract onSet(entry: CacheEntry<Key, Value>, argsBundle?: ArgumentsBundle): void;
    /**
     * @inheritDoc
     */
    abstract onUpdate(entry: CacheEntry<Key, Value>, argsBundle?: ArgumentsBundle): void;
    /**
     * @inheritDoc
     */
    onDelete(entry: ExpirableCacheEntry<Key, Value>): void;
    /**
     * @inheritDoc
     */
    abstract onClear(): void;
    /**
     * @inheritDoc
     */
    setDeleter(deleter: Deleter<Key, Value>): void;
    protected static setEntryExpiration<K, V>(entry: ExpirableCacheEntry<K, V>, expiresAfter: Seconds, expiresFrom?: UnixTimestamp): void;
}
export { AbstractExpirationPolicy, ExpirableCacheEntry };
