https://github.com/selfagency/antiflux
A lightweight (<20kb bundled), zero-dependency, in-memory store and observable state manager, exclusively for Node.js, for when reactive state managers and their attendant boilerplate are overkill.
https://github.com/selfagency/antiflux
cache config esm flux node nodejs observable state store
Last synced: 7 months ago
JSON representation
A lightweight (<20kb bundled), zero-dependency, in-memory store and observable state manager, exclusively for Node.js, for when reactive state managers and their attendant boilerplate are overkill.
- Host: GitHub
- URL: https://github.com/selfagency/antiflux
- Owner: selfagency
- Created: 2022-01-01T06:19:24.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2025-03-13T04:29:09.000Z (7 months ago)
- Last Synced: 2025-03-13T05:26:59.211Z (7 months ago)
- Topics: cache, config, esm, flux, node, nodejs, observable, state, store
- Language: TypeScript
- Homepage: https://npmjs.com/package/antiflux
- Size: 1.49 MB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 17
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Antiflux
A lightweight (<20kb bundled), zero-dependency, in-memory store and observable
state manager, exclusively for Node.js, for when reactive state managers and
their attendant boilerplate are overkill.[](https://www.codacy.com/gh/selfagency/antiflux/dashboard?utm_source=github.com&utm_medium=referral&utm_content=selfagency/antiflux&utm_campaign=Badge_Grade) [](https://codecov.io/gh/selfagency/antiflux) [](https://snyk.io/test/github/selfagency/antiflux)
## Installation
```sh
npm install antiflux || yarn add antiflux
```## Usage
```js
// js
import Antiflux from 'antiflux'// ts
import Antiflux from 'antiflux/src/mainconst store = new Antiflux([initialState], [options], [getters])
```### Set key
Add or update a key. Value can be of any type.
```js
store.set('myKey', 'myValue')
```### Has key
Check if a key exists. Responds with a boolean.
```js
store.has('myKey')
```### Get key
Get a key's value.
```js
const myValue = store.get('myKey')
```### Deep operations
Supports dot notation.
```js
store.set('deep.deeper.deepest', 'deeperest')if (store.has('deep.deeper.deepest')) {
return store.get('deep.deeper.deepest')
}
```### Watch for changes
Watch a key for changes. Available targets are `set`, `delete`, and `clear`.
```js
store.watch.on('set', e => {
const { key, value, prior } = econsole.log(`The key ${key} changed from ${prior} to ${value}`).
})
```### Delete key
Delete a key from the state.
```js
store.delete('myKey')
```### Dump data
Dump all state data.
```js
store.dump()
```### Clear all
Clear all entries from the state.
```js
store.clear()
```## Options
### Initialize state
Initialize the store with a predefined state.
```js
const initialState = {
foo: 'bar',
baz: 'qux'
}const store = new Antiflux(initialState)
```### Persist data
Use the `persist` option to specify a path at which to write data. Data will
be reloaded from disk at runtime.```js
const options = {
persist: '/tmp/antiflux.db'
}const store = new Antiflux({}, options)
```### Encrypt data
Encrypt persisted data at rest with AES-256-GCM encryption. Use the `encryptKey` option to specify a 32-character encryption key.
```js
const options = {
encryptKey: 'bWDlfrMxr1cnl4F4sdOvoKEOO9WY628a'
}const store = new Antiflux({}, options)
```### Debug mode
Use the `debug` option to print state changes to the console, e.g.: `(Store) foo: bar ➟ baz`.
```js
const options = {
debug: true
}const store = new Antiflux({}, options)
```## Custom getters
Create custom getters to return modified data.
```js
const getters = {
getLower(state) {
return state.get('foo.bar.baz').toLowerCase()
},
getUpper(state) {
return state.get('foo.bar.baz').toUpperCase()
}
}const store = new Antiflux({}, {}, getters)
```