export default class FetchCache {
  private cache: Map<string, PromiseLike<any>> = new Map();

  get(key: string) {
    return this.cache.get(key);
  }

  set(key: string, value: PromiseLike<any>) {
    this.cache.set(key, value);
  }

  promise<T>(key: string, promiseFn: () => PromiseLike<T>): PromiseLike<T> {
    const cached = this.get(key);
    if (cached) {
      return cached;
    }
    const promise = promiseFn();
    this.set(key, promise);
    return promise;
  }
}