import {CacheLoader, CacheProvider} from './cacheProvider'; /** * A cache provider that automatically caches loaded values. */ export class AutoSaveCache implements CacheProvider { private readonly cacheProvider: CacheProvider; public constructor(cacheProvider: CacheProvider) { this.cacheProvider = cacheProvider; } public get(key: K, loader: CacheLoader): Promise { return this.cacheProvider.get(key, async () => { const value = await loader(key); await this.cacheProvider.set(key, value); return value; }); } public set(key: K, value: V): Promise { return this.cacheProvider.set(key, value); } public delete(key: K): Promise { return this.cacheProvider.delete(key); } }