Skip to content

akenneth/memoize

 
 

Repository files navigation

memoize

This is a package which provides a memoize function, as well as a TypeScript decorator which will memoize a class method.

Usage

import memoize from '@github/memoize'

const fn = memoize(function doExpensiveStuff() {
  // Here's where you do expensive stuff!
})

const other = memoize(function doExpensiveStuff() {}, { 
  cache: new Map(), // pass your own cache implementation
  hash: JSON.stringify // pass your own hashing implementation
})

Options:

  • hash?: (...args: A) => unknown Provides a single value to use as the Key for the memoization. Defaults to JSON.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.

TypeScript Decorators Support!

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:

import memoize from '@github/memoize/decorator'
//                                  ^ note: add `/decorator` to the import to get decorators

class MyClass {
  @memoize() // Memoize the method below
  doThings() {
  }
}

const cache = new Map()
class MyClass {
  @memoize({ cache }) // Pass options just like the memoize function
  doThings() {
  }
}

Why not just use package X?

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:

Development

npm install
npm test

License

Distributed under the MIT license. See LICENSE for details.

About

No description, website, or topics provided.

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Packages

No packages published

Languages

  • TypeScript 100.0%