/** * @typedef {Object} StoreRecord * @property {number} expiresAt * @property {Record} [metadata] * * @typedef {Object} MarkUsedResult * @property {boolean} swapped true if this call stamped usedAt (was null before) * @property {StoreRecord} record the record after the operation * * @typedef {Object} Store * @property {(key: string, expiresAt: number, metadata?: Record) => Promise} add * @property {(key: string) => Promise} has * @property {(key: string) => Promise} get * @property {(key: string) => Promise} delete * @property {(filter: Record) => Promise} deleteAll * @property {(key: string, nowSec: number) => Promise} [markUsed] * @property {() => number} size * @property {() => void} _stop * * @typedef {Object} MemoryConfig * @property {number} [maxSize] * @property {{ strategy?: 'interval' | 'lazy' | 'lru', interval?: string | number, maxSize?: number }} [gc] */ /** * @param {MemoryConfig} [options] * @returns {Store} */ export function createMemoryStore(options?: MemoryConfig): Store; export type StoreRecord = { expiresAt: number; metadata?: Record | undefined; }; export type MarkUsedResult = { /** * true if this call stamped usedAt (was null before) */ swapped: boolean; /** * the record after the operation */ record: StoreRecord; }; export type Store = { add: (key: string, expiresAt: number, metadata?: Record) => Promise; has: (key: string) => Promise; get: (key: string) => Promise; delete: (key: string) => Promise; deleteAll: (filter: Record) => Promise; markUsed?: ((key: string, nowSec: number) => Promise) | undefined; size: () => number; _stop: () => void; }; export type MemoryConfig = { maxSize?: number | undefined; gc?: { strategy?: "interval" | "lazy" | "lru"; interval?: string | number; maxSize?: number; } | undefined; };