This is a package which provides a memoize function, as well as a TypeScript
decorator which will memoize a class method.
importmemoizefrom'@github/memoize'constfn=memoize(functiondoExpensiveStuff(){// Here's where you do expensive stuff!})constother=memoize(functiondoExpensiveStuff(){},{cache: newMap(),// pass your own cache implementationhash: JSON.stringify// pass your own hashing implementation})hash?: (...args: A) => unknownProvides a single value to use as the Key for the memoization. Defaults toJSON.stringify(ish).cache?: Map<unknown, R>The Cache implementation to provide. Must be a Map or Map-alike. Defaults to a Map. Useful for replacing the cache with an LRU cache or similar.
This package also includes a decorator module which can be used to provide TypeScript Decorator annotations to functions.
Here's an example, showing what you need to do:
importmemoizefrom'@github/memoize/decorator'// ^ note: add `/decorator` to the import to get decoratorsclassMyClass{
@memoize()// Memoize the method belowdoThings(){}}constcache=newMap()classMyClass{
@memoize({ cache })// Pass options just like the memoize functiondoThings(){}}Many memoize implementations exist. This one provides all of the utility we need at GitHub and nothing more. We've used a few various implementations in the past, here are some good ones:
npm install
npm test
Distributed under the MIT license. See LICENSE for details.