npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

cached-decorator

v1.0.0

Published

An @Cached decorator for object methods

Downloads

9

Readme

@Cached decorator for TypeScript

This library provides a mechanism to selectively cache (memoize) method calls.

Installing

To install the library issue the following command:

$ npm install --save cached-decorator

Types are provided with the package

Using the library

To use the library, in its simplest form, you add the @Cached() decorator to a method in classes like this:

class Calculator {
  @Cached()
  sum(x: number, y: number): number {
    console.log('Calculating sum')
    return x + y
  }
}

const calc = new Calculator()
calc.sum(1, 2)
calc.sum(1, 2)
calc.sum(1, 2)

Upon running you will notice that the log "Calculating sum" is called only once.

Specifying timeout for cached values

It is possible that sometimes you'll want to have a time-constrained version of the cache. You can specify how long will it take for a certain result of method call is cached by specifying the timeout in milliseconds as the first parameter of the decorator:

class Calculator {
  @Cached(1000)
  sum(x: number, y: number): number {
    ...

The above change will cache the result of the call to sum for 1 second.

Specifying a different implementation for caching

It is possible to tweak how the library works by specifying cache implementation and its parameters. There are two main implementations:

MemoryCache - this cache is implemented using a nested Map construct. It has a destroy() method that will release all the allocated resources

ObjectCache - this cache implementation hooks up to the instance of the class, creates the __cache__ key and stores the values there.

Both implementations expect the following optional parameters:

timeout - after the specified time the cached entry will be invalidated and removed from cache (default: Number.POSITIVE_INFINITY)

updateOnGet - refresh key's time when fetching (default: false)

Here's an example of how to use ObjectCache implementation with 1 second timeout and refreshing the key's age on every call to the function:

class Calculator {
  @Cached(, new ObjectCache(1000, true))
  sum(x: number, y: number): number {
    ...

The timeout parameter is by default just passed on to the constructor of MemoryCache (default cache implementation) - hence it needs to be skipped when using this decorator.