@thermopylae/lib.cache
Version:
50 lines (49 loc) • 1.53 kB
TypeScript
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 };