UNPKG

typedash

Version:

modern, type-safe collection of utility functions

1 lines 1.44 kB
{"version":3,"file":"memoize-tqOVguju.cjs","names":[],"sources":["../src/functions/memoize/memoize.ts"],"sourcesContent":["import type { AnyFunction } from '../../types/_internal';\n\n/**\n * Memoizes a function.\n * @param fn The function to memoize.\n * @param cacheKeyResolver An optional function used to resolve the cache key. Defaults to the first argument in the function call.\n * @returns The memoized function.\n */\nexport function memoize<TFunction extends AnyFunction>(\n fn: TFunction,\n cacheKeyResolver?: (...args: Parameters<TFunction>) => string\n): TFunction {\n const cache = new Map<unknown, ReturnType<TFunction>>();\n\n return function memoizedFunction(\n ...args: Parameters<TFunction>\n ): ReturnType<TFunction> {\n const cacheKey: unknown = cacheKeyResolver\n ? cacheKeyResolver(...args)\n : args[0];\n\n if (cache.has(cacheKey)) {\n // biome-ignore lint/style/noNonNullAssertion: we check using `has` before calling `get`\n return cache.get(cacheKey)!;\n }\n\n const result = fn(...args) as ReturnType<TFunction>;\n cache.set(cacheKey, result);\n\n return result;\n } as TFunction;\n}\n"],"mappings":";;;;;;;;AAQA,SAAgB,QACd,IACA,kBACW;CACX,MAAM,wBAAQ,IAAI,KAAqC;AAEvD,QAAO,SAAS,iBACd,GAAG,MACoB;EACvB,MAAM,WAAoB,mBACtB,iBAAiB,GAAG,KAAK,GACzB,KAAK;AAET,MAAI,MAAM,IAAI,SAAS,CAErB,QAAO,MAAM,IAAI,SAAS;EAG5B,MAAM,SAAS,GAAG,GAAG,KAAK;AAC1B,QAAM,IAAI,UAAU,OAAO;AAE3B,SAAO"}