/** * Simple memoize function. It takes a function and a resolver function to generate a * cache key */ export function memoize any>( func: T, resolver: (...args: Parameters) => string ): T { const cache = new Map>(); return function (...args: Parameters): ReturnType { const key = resolver(...args); if (cache.has(key)) { return cache.get(key)!; } const result = func(...args); cache.set(key, result); return result; } as T; }