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 🙏

© 2026 – Pkg Stats / Ryan Hefner

cache-worker

v1.0.0

Published

Add promise workers to cache values in memory, retrieve synchronously

Readme

Add promise workers to cache values in memory, retrieve synchronously

Installation

$ npm install --save cache-worker

Usage

// require default instance (created with default options)
const cache = require('cache-worker');

// override default options
const winston = require('winston');
const cache = require('cache-worker')({ logger: winston });

// making an instance available to other files
const cache = require('cache-worker');
cache.anInstance = cache({ logger: winston });

Options

logger

The logger must have the following defined function properties or methods:

  • logger.debug
  • logger.error

Default value :

{
    logger: {
        debug: function() {},
        error: function() {},
    }
}

updateCheckPeriodInSeconds

Must be a Number Default value: 10

Adding a cache worker

const cache = require('cache-worker')({
    updateCheckPeriodInSeconds: 0.2,
});

cache.addHandler('example', callback => {

    // wait 100ms
    setTimeout(function() {

        // error, value to cache, expires in (ms)
        callback(null, 'exampleValue', 50);

    }, 100);
});

// current value
cache.get('example') === null;

// immediately and every 200ms (updateCheckPeriodInSeconds)
// this will call the example handler
// if and only if cache.get('example') === null
cache.start();

// current value
cache.get('example') === 'working…';

// 50ms later (the handler takes 100ms to execute)
cache.get('example') === 'working…';

// 60ms later
cache.get('example') === 'exampleValue';

// 50ms later (cache expiration was set to 50ms)
cache.get('example') === null;

// cycle continues every 200ms

In case of an error returned by a handler function, the cached value will stay at 'working…' state, so the cache handler will stop being called. To avoid this, use cache.put('key', null):

cache.addHandler('example2', callback => {
    setTimeout(function() {
        // in 5min, allow the handler to be called again
        setTimeout(function() {
            cache.put('example2', null);
        }, 5 * 60000);
        callback(new Error('not found'));
    }, 100);
});

cache.start

For each added handler, now and every updateCheckPeriodInSeconds seconds, call the handler if the cached value is null (never set or expired)

cache.start([callback(err)])

cache.stop

Stop calling handlers.

cache.get, cache.put

Functions from memory-cache: https://github.com/ptarjan/node-cache

ensureUpToDate

ensureUpToDate([key(s)], callback)

Waits values to be cached before calling the callback. Keys can be a string array or a string (defaults to all keys)

Running tests

$ npm install
$ npm test