@thetaproom/simple-cache

1.0.12 • Public • Published

Cacher

A tiny, zero-dependency library which implements additional utilities on top of the Storage API we're all used to. Features include:

  • expiration on a global or resource level (hours, minutes, days)
  • implement any storage mechanism that implements the Storage API interface
  • archiving for building localized history of state
  • handle non-blocking and blocking storage operations

To install

yarn add simple-cache

Usage

The utility class implements the same interface you're used with the native (Storage Web API)[https://developer.mozilla.org/en-US/docs/Web/API/Storage].

    const cache = new Cache({
      storage: localStorage || sessionStorage,
      expiration: {
        amount: 1,
        unit: "minutes" || "hours" || "days"
      },
    });

    /**
     * @param key
     * @param value
     * @param expirationSettings - optional
     */
    cache.setItem(
      "resource",
      {
        test:
        "test"
      },
      {
        amount: 60,
        unit: "minutes"|"hours"|"days",
        neverExpire: true|false
      }
    )

    /**
     * @param key name of key being cahed
     * @param value value being stored, uses JSON.stringify for all implemenations currently
     */
    cache.setItem("resource", { test: "test" });

    /**
     * @returns cached resource or undefined if expired
     */
    cache.getItem("resource");

    /**
     * get item return a wrapped version of your data with the expiration date and settings
     * @param {string} resource get from cache
     * @param {boolean} returnOld optional, if expired, return resource and expiration time
     */
    cache.getItem("resource", true);

    /**
     * @returns {void}
     */
    cache.clear()

    /**
     * @returns {void}
     */
    cache.removeItem("resource")

    /**
     * the library assumes soft deleting if you pass
     * expirations to removeItem and soft deleted items
     * can be retrieved from cache.getRemovedItem(original key)
     *
     * if expiration is set, this method will return the key to the archived resource
     * @returns {void|string}
     */
    cache.removeItem("resource", expiration)

    /**
     * change the global configuration later in the appliction
     * lifecycle
     */
    cache.setExpiration({
      amount: 2,
      unit: "days",
      neverExpire: true, // never expire overrides other settings
    })

Cacher is static utility class so to extend upon it you can simply inherit or inject the class.

Settings

inject config options into the new instances of the class. The flexibility here allows for you to create many different types of storage i.e. one for localStorage, one for sessionStorage.

Defaults:

  • expiration defaults to 30 minutes
  • storage defaults to sessionStorage
  • never expire defaults to false

you can change these defaults on a global level by passing a config object into the constructor of the class. This give you the flexibility to generate as many caches as you need.

{
  storage: sessionStorage || localStorage
  expiration: {
    amount: 30,
    unit: "minutes" | "hours" | "days"
  }
}

To test

yarn test

Readme

Keywords

none

Package Sidebar

Install

npm i @thetaproom/simple-cache

Weekly Downloads

11

Version

1.0.12

License

ISC

Unpacked Size

39.7 kB

Total Files

20

Last publish

Collaborators

  • kickinbahk
  • lhertzler
  • kellyvaughn
  • jeremiah_taproom