@github/memoize
TypeScript icon, indicating that this package has built-in type declarations

1.1.4 • Public • Published

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.

Readme

Keywords

none

Package Sidebar

Install

npm i @github/memoize

Weekly Downloads

588

Version

1.1.4

License

MIT

Unpacked Size

13.2 kB

Total Files

17

Last publish

Collaborators

  • andrialexandrou
  • jfuchs
  • githubbot
  • manuelpuyol
  • jonrohan
  • broccolini
  • primer-css
  • keithamus
  • mschoening
  • colebemis
  • smockle
  • simurai
  • khiga8
  • dustin.greif
  • srt32