Skip to content

A small, immutable and framework agnostic state store using rxjs and immer with native typescript support.

License

Notifications You must be signed in to change notification settings

simbo/small-store

Repository files navigation

🗃 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