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

@code-o-mat/history-cache

v0.0.17

Published

A data object structure that logs all changes using the immutable library

Downloads

15

Readme

@CodeOMat HistoryCache

VERSION 0.0.1x Alpha: March 3, 2018

HistoryCache is a wrapper for Immutable Map that functions like a version repository for local data..

HistoryCache is not intended for nested maps, but it is useful for storing properties where the history of properties will be needed later.

Basic Usage and data access.

Creation

    import HistoryCache from 'history-cache';

    var defaultData = { 
      name: 'Robert LaMarca',
      age: 103,
      birthplace: 'Croatia',
      voice: 'Flat',
      eyes: 'sensitive',
      [FEELING]: 'groovy'
    };

    const cache = new HistoryCache(defaultData);

Accessors

  • get(key, default): Just like Map.get, retrieves a value at key.

  • getFrom(key, versionSearchTerm, default): Like get, but will look for the value from a previous data version. (See the section on versionSearching)

  • set(key, value): calls Map.set, but stores the original Map in the HistoryCache and advances the version. every time you set any item, the history cache advances one. This is like calling commit automatically with a git repo.

  • merge(newData): calls Map.merge. NewData can be either a Map or a standard JavaScript object;

  • index(): returns the index that will be assigned to the next version. Since this is a simple index starting at 0, index is also the number of versions available.

Settings:

  • limit(limitValue = -1): Sets the limit for how many versions you wish to store in the history. If no value passed in returns the current setting. Default has no limit.

Accessor Examples.

    const name = cache.get('name', 'default'); //Robert LaMarca

    const sunSign = cache.get('sign', 'default'); // default because there is no such data.

    cache.index(); // 1; .. the index of the version when something is set next.

    cache.set('name', 'Grace Hopper'); // returns the cache instance.
    cache.set('age', 33.33333).set('voice');
    cache.get('age', 'default'); // Grace Hopper


    cache.index(); // 2 because now there are two entries, 0 and 1.

    const originalData = cache.version(0); // Immutable Map from the original
    originalData.get('age'); // 103

    // Get data from a particular version.
    cache.getFrom('age', 0, 'default'); // 103;
    cache.getFrom('age'); // 33.33333

Versioning.

The commands set and checkout create new versions: In either case, the following data is added to the history for the current state:

  • Date: The exact date and time this version was put to history.
  • data: The Immutable map of the data of this version.
  • UID: A unique identfier for this version. ( created with uuid/v4 );
  • event: A description of what triggered the new version. For example, setting name would create an event name of: 'set name = Edith Bunker';
  • comment: not used yet.
  • tag: A note of the tag for this version.

There are three ways to access old versions of the data:

  • getFromCommand: Gets a data item from a particular version.
  • version: returns an Immutable Map from a particular version.
  • checkout: gets an earlier version and makes it the current one. This adds the current one to the history as if a set command were called.

Versions can be searched by the following methods: All the above commands use the same search terms when accessing versions.

  • index: This is the simplest and fastest. Simply use the index of the version. Indices of versions start at 0 for the initial data and advance from there by ones.

  • UID: Access the version by its UID number. (see the logging section for how to access the UID)

  • Event: Access the version by its Event name. (event names can be accessed by logging or by inferring from the commands that were used to create a version)

  • Tag: Access the version by a tag.

Tagging:

Tagging is similar to git tagging. Simply use the tag command to add a comment that will be associated with the next set of checkout run. This comment can later be used to find the version.

Examples

    cache.index(); // 3 
    cache.set('birthplace', 'Joplin');
    cache.index(); // 4 

    cache.version(3); // gets the Map created when birthplace was set.

    cache.tag('usetofind');
    cache.set('voice', 'alto');

    cache.index(5);
    cache.set('voice', 'sweet');
    cache.get('voice'); // sweet;
    cache.getFrom('voice', 4); // alto;
    cache.getFrom('voice', 'usetofind'); // alto.

    const cacheData4 = cache.version(4);
    cacheData4.get('voice'); // alto;

    const cacheData4too = cache.version('usetofind');
    cacheData4too.get('voice'); // alto;

    cache.checkout(4);

    cache.index(); // 6;
    cache.get('voice'); // alto;
    cache.getFrom('voice', 5); // sweet;

    cache.checkout(5);
    cache.index(); // 7;
    cache.get('voice'); // sweet;

    cache.checkout('usetofind');
    cache.index(8);
    cache.get('voice'); // alto;

Logs

HistoryCache provides access to logging meta data. Logging has its own API which can be used select the form in which this meta data is returned.

Each version in the HistoryCache has a meta data item in the log. This item contains the following:

  • Date
  • Comment
  • Event
  • Tag ( if available )
  • UID

Log meta data can be returned in the following forms:

  • Immutable List:
    cache.log().log();// returns Immutable List;
    cache.log().list(); // so does this;
    cache.log().$(); // and this;
  • JavaScript Array:
    cache.log().js(); // returns JavaScript Array;
  • JSON Array:
    cache.log().json(); // returns JSON Array.
  • Formatted Text for Console View:
    cache.log().text(); // returns a formatted string.

    // looks like: 
    something like....
    History Cache Log for anon:
        showing    items:
        ===============
        --------------
        Sat Mar 03 2018 20:56:23 GMT-0500 (EST)
        No Tag
        94c74643-69a3-4ddd-841b-a2efb8e016a0
        START
        DEFAULT STATE
----------------------
        Sat Mar 03 2018 20:56:23 GMT-0500 (EST)
        No Tag
        465c6da7-a0de-4a64-9cbe-48d165115688
        set name = Edith Bunker
        Revision: 1 

        ...