import { KeyType } from './KeyType';
import { RemovalListener } from './RemovalListener';
import { ON_REMOVE, ON_MAINTENANCE } from './symbols';

/**
 * Type not part of the public API, used by caches and their layers as their
 * "base".
 */
export interface CacheSPI<K extends KeyType, V> {
	/**
	 * Called when a key is removed from the cache. Intended to be overridden
	 * so that the value and removal reason can be modified.
	 */
	[ON_REMOVE]?: RemovalListener<K, V>;

	/**
	 * Called when maintenance occurs in the cache. Can be used by layers to
	 * perform extra tasks during maintenance windows, such as expiring items.
	 */
	[ON_MAINTENANCE]?: () => void;
}
