0.0.0-0 • Published 3 years ago

@plurid/state-recorder v0.0.0-0

Weekly downloads
3
License
SEE LICENSE IN LI...
Repository
github
Last release
3 years ago

Record the state of an application and play it back/forward.

Install

npm install @plurid/state-recorder

or

yarn add @plurid/state-recorder

Usage

import StateRecorder from '@plurid/state-recorder';

const initialState = {
    // initial state object
};

const stateRecorder = new StateRecorder(initialState);

const newState = {
    // updated application state object
};

stateRecorder.add(newState);


stateRecorder.all();
// returns an array of all the state objects
// e.g.
// [
//      initialState,
//      newState
// ];


stateRecorder.current();
// returns the current StateSituation
// e.g.
// {
//      state, // the state
//      cursor, // the state location in all the recorded states
//      first, // if it is the first state
//      last, // if it is the last state
// };


stateRecorder.previous();
// returns the previous StateSituation, if it exists,
// or the first StateSituation;
// sets playMode on


stateRecorder.next();
// returns the next StateSituation, if it exists,
// or the last StateSituation;
// sets playMode on
// or sets playMode off if it returns the last StateSituation


const differences = stateRecorder.differences();
// returns an array of differences between the states
// with the first element, differences[0], the initial state
// to be further stored in persistent storage

// the differences can be loaded into a new StateRecorder
// to obtain a previous state chain, a sitting
const previousSitting = new StateRecorder(differences);


// when the stateRecorder state cursor is not on the last state of the state chain
// due to an action of moving back/forward on the chain through previous()/next() methods
// a playMode is automatically activated

// during playMode new states cannot/will not be added onto the state chain with the add() method

// any of the following will set playMode off:
// - the cursor is placed on the last state of the state chain through successive next() methods
// - the stateRecorder is resetted
stateRecorder.reset();
// - the stateRecorder is branched
stateRecorder.branch();
//   effectively discarding all the states on the state chain from the current position of the state cursor