import {CacheProvider} from './cacheProvider'; /** * A cache that prefixes keys with a string. */ export class PrefixedCache implements CacheProvider { private readonly inner: CacheProvider; private readonly prefix: string; public constructor(inner: CacheProvider, prefix: string) { this.inner = inner; this.prefix = prefix; } public get(key: string, loader: (key: string) => Promise): Promise { return this.inner.get(`${this.prefix}/${key}`, () => loader(key)); } public set(key: string, value: V): Promise { return this.inner.set(`${this.prefix}/${key}`, value); } public delete(key: string): Promise { return this.inner.delete(`${this.prefix}/${key}`); } }