{"version":3,"file":"cache.cjs","sources":["../../../src/utils/cache.ts"],"sourcesContent":["interface CahcedValue<T> {\n  value: T;\n  time: number;\n}\n\nexport type CvgCache<T, U extends any[]> = {\n  get: (...u: U) => Promise<T>;\n  clear: () => void;\n};\n\nexport const useCache = <T, U extends any[]>(\n  valueGetter: (...u: U) => Promise<T>,\n  stalenessSeconds = 300\n): CvgCache<T, U> => {\n  const stalenessMs = stalenessSeconds * 1_000;\n  let cache: CahcedValue<T> | null = null;\n  let operation: Promise<T> | undefined;\n\n  return {\n    get: async (...u: U) => {\n      if (cache !== null) {\n        if (Date.now() - cache.time <= stalenessMs) {\n          // return cached value\n          return cache.value;\n        }\n        // clear cached value once expired\n        cache = null;\n        operation = undefined;\n      }\n\n      // return existing getter promise or start a new one\n      let value: T;\n      if (operation) {\n        value = await operation;\n      } else {\n        operation = valueGetter(...u);\n        value = await operation;\n      }\n      cache = {\n        value,\n        time: Date.now(),\n      };\n\n      return cache.value;\n    },\n    clear: () => {\n      cache = null;\n      operation = undefined;\n    },\n  };\n};\n"],"names":["useCache","valueGetter","stalenessSeconds","arguments","length","undefined","stalenessMs","cache","operation","get","_get","_asyncToGenerator","_regeneratorRuntime","mark","_callee","value","_args","wrap","_callee$","_context","prev","next","Date","now","time","abrupt","sent","apply","stop","clear"],"mappings":"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"}