unissist
Version:
A persistance library for unistore
104 lines (71 loc) • 3.47 kB
Markdown
<a href="https://www.npmjs.org/package/unissist"><img src="https://img.shields.io/npm/v/unissist.svg?style=flat" alt="npm"></a> <a href="https://travis-ci.org/DonnieWest/unissist"><img src="https://api.travis-ci.org/DonnieWest/unissist.svg?branch=master" alt="travis"></a>
> A tiny ~300b unistore persistence helper library state container with various storage adapters.
- [Install](
- [Usage](
- [API](
- [License](
This project uses [node](http://nodejs.org) and [npm](https://npmjs.com). Go check them out if you don't have them locally installed.
```sh
npm install --save unissist
```
Then with a module bundler like [webpack](https://webpack.js.org) or [rollup](http://rollupjs.org), use as you would anything else:
```js
// The helper:
import persistStore from 'unissist';
// localStorage Adapter
import localStorageAdapter from 'unissist/integrations/localStorageAdapter';
// indexedDB Adapter
import indexedDBAdapter from 'unissist/integrations/indexdbAdapter';
// AsyncStorage Adapter
import asyncStorageAdapter from 'unissist/integrations/asyncStorageAdapter';
```
The [UMD](https://github.com/umdjs/umd) build is also available on [unpkg](https://unpkg.com):
```html
<script src="//unpkg.com/unistore/dist/unissist.umd.js"></script>
```
You can find the library on `window.unissist`.
```js
// use unistore like you always would, but use the unissist helper to persist state
import createStore from 'unistore'
import persistStore from 'unissist'
import localStorageAdapter from 'unissist/integrations/localStorageAdapter';
const store = createStore({ count: 0 })
const adapter = localStorageAdapter();
persistStore(store, adapter);
// store state now includes a `hydrated` that tells you whether or not the state has been rehydrated from the store
```
Unissist also takes a third parameter that allows you to configure how your peristence works
```js
import createStore from 'unistore'
import persistStore from 'unissist'
import localStorageAdapter from 'unissist/integrations/localStorageAdapter';
const store = createStore({ count: 0 })
const adapter = localStorageAdapter();
// Default values except migration
let config = {
version: 1,
debounceTime: 100,
// called when version is updated. Accepts promises. Defaults to dropping the store
migration: (oldState, oldversion) => ({ /* new state */ }),
// takes in the current state and returns the state to be persisted
map: state => ({ /* new persisted state shape */ })
// takes in state that will be hydrated and returns the new state shape
hydration: state => ({ /* new state shape */ })
}
persistStore(store, adapter, config);
```
Found a problem? Want a new feature? First of all, see if your issue or idea has [already been reported](../../issues).
If not, just open a [new clear and descriptive issue](../../issues/new).
[](https://github.com/developit) for [unistore](https://github.com/developit/unistore), `assign` util function, and a lot of the tooling that I ~stole~ used
</br>
[](https://github.com/jakearchibald) for [idb-keyval](https://github.com/jakearchibald/idb-keyval) where much of the code for the indexdbAdapter was ~stolen~ borrowed
</br>
[](https://github.com/seangroff) for the name
[](https://oss.ninja/mit/donniewest) © [Donnie West](https://donniewest.com)