1. small-store

small-store

🗃 Small Store

npm Package Version
Libraries.io dependency status for latest release
Coveralls github
Last CI Workflow Status
GitHub Repo
License MIT

A small, immutable, reactive and framework agnostic state store under 2KB
powered by rxjs and immer with native typescript support. To be used with
vanilla, react, preact, angular, vue or whatever you like.


Quick Start

 import { Actions, Store } from 'small-store';

// state declaration
interface CounterState {
  count: number;
}

// actions
enum CounterAction {
  Increment = 'increment',
  Decrement = 'decrement'
}

// action functions
const counterActions: Actions<CounterState, CounterAction> = {
  [CounterAction.Increment]: () => state => {
    state.count++;
    return state;
  },
  [CounterAction.Decrement]: () => state => {
    state.count--;
    return state;
  }
};

// the initial state
const initialCounterState: CounterState = {
  count: 0
};

// creating the store
const counterStore = new Store<CounterState, CounterAction>(
  initialCounterState,
  counterActions
);

// subscribing to the store's state
counterStore.state$.subscribe(state => console.log(state));

// dispatching actions
counterStore.dispatch(CounterAction.Increment);
counterStore.dispatch(CounterAction.Increment);
counterStore.dispatch(CounterAction.Decrement);

See details and more examples in the docs.

Documentation

Visit simbo.codes/small-store to read
the documentation and the examples.

Development

Requirements: node.js >=14, yarn >=1.22

 # build using microbundle
yarn build
# watch and rebuild
yarn build:watch
# lint using prettier and eslint
yarn lint
# test using jest
yarn test
# watch and retest
yarn test:watch
# open coverage in default browser
yarn coverage:open
# check everything
yarn preflight

Docs

Requirements: docker

 # pull slate image
docker pull slatedocs/slate
# serve docs on localhost:4567
yarn docs:serve
# build docs to ./docs-build
yarn docs:build

License and Author

MIT © Simon Lepel