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

feather-cache

v1.3.1

Published

A Simple Lightweight Pluggable Key-Value Cache For Multiple Storage Options.

Downloads

3,489

Readme

feather-cache

A Simple Pluggable Key-Value Cache For Multiple Storage Options.

npm Travis styled with prettier TypeScript Ready

Install

npm i --save feather-cache

You don't have to install type definitions for typescript. It's built in.

What

This is a simple caching frame which can be used with available drivers or you can easily write one your own. If no drivers are provided (default) works like an in-memory cache. But that is not what this module intended for. The in-memory cache is provided for the sake of convenience. If that is what all you want, lru-cache is recommended.

Actual use case for this module is to use with a driver (mongodb-driver or indexed-db-driver etc.) which enables persistent caching.

Example

in memory cache

const { FeatherCache } = require('feather-cache');
// or
import { FeatherCache } from 'feather-cache';

// init
const fStore = new FeatherCache({
  maxAgeInMs: 60 * 1000, // 1 min expiry
});

// ...async fn...
await fStore.set('hiya', 'mm!');

await fStore.get('hiya'); //-> mm!
await fStore.fetch('hiya'); //-> { key: 'hiya', val: 'mm!' }

// ... after expiry time
await fStore.get('hiya'); //-> null

with a driver

// ...
const fStore = new FeatherCache(driver);
// ...

APIs

| function | description | | --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | FeatherCache.set(key, val, opt) | returns Promise.key: stringval: any data to be stored opt: (optional) { maxAgeInMs: 1000 }, sets expiry time. | | FeatherCache.get(key) | returns Promise which resolves to the stored data. else, null. If data has expired returns null and then deletes the entry behind the scenes. | | FeatherCache.fetch(key) | returns Promise which resolves to stored data. The difference between get and fetch is that, fetch returns the stored data one more time after its expiry and then deletes it.More info:get: finds data -> if expired deletes it -> returns null.fetch: finds data -> if expired returns it -> and then deletes it. However, you can control this behavior by passing the delete option (default delete: true). Eg: fStore.fetch('hiya', { delete: false }). This sets the expiry flag but don't delete it. Sometimes you may find this helpful. | | FeatherCache.del(key) | returns Promise deletes the entry |

Configuration / writing drivers

A driver is nothing but a configuration object which exposes a persistent storage interface.

const dbDriver = {
  maxAgeInMs: 60 * 1000 * 5, // default expiry 5 mins
  setFn: async function(key, val) {
    // db interface to store data
    await Db.create({ key, val });
  },
  getFn: async function(key) {
    // db interface to get data
    const data = await Db.find({ where: { key } });
    return data;
  },
  delFn: async function(key) {
    // db interface to delete data
    await Db.remove({ where: { key } });
  },
};

// pass in the driver
const featherStore = new FeatherCache(dbDriver);
// ...

An example: feather-cache-indexeddb.

Those who publish drivers advised to follow the naming convention:

feather-cache-<storage_option_name>

Also, attach the key word feather-cache.


used version of ts-np generator

Licence

MIT © Vajahath Ahmed