Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jameshopkins/atom-store
🍔 A Clojure-inspired atom implementation in Javascript with configurability for external persistance
https://github.com/jameshopkins/atom-store
Last synced: 12 days ago
JSON representation
🍔 A Clojure-inspired atom implementation in Javascript with configurability for external persistance
- Host: GitHub
- URL: https://github.com/jameshopkins/atom-store
- Owner: jameshopkins
- License: mit
- Created: 2016-05-08T10:11:11.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2023-07-05T16:13:20.000Z (over 1 year ago)
- Last Synced: 2024-03-15T06:02:42.462Z (8 months ago)
- Language: JavaScript
- Homepage:
- Size: 14.6 KB
- Stars: 14
- Watchers: 2
- Forks: 4
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE.md
Awesome Lists containing this project
README
# atom-store
[![Circle CI](https://circleci.com/gh/jameshopkins/atom-store.svg?style=svg)](https://circleci.com/gh/jameshopkins/atom-store)## API
### `createAtom(val[, plugin]) => AtomInstance`
Creates a new atom instance.
#### Arguments
- `val`: The initial stored value within the atom
- `plugin` (optional): A function that returns a `read` and `write` method, with the same semantics described in the [`AtomInstance` API](#atominstance-api). If `plugin` is not supplied, the default in-memory storage interface is used.#### An interface for external persistence
Your atom doesn't necessarily have to be referenced in memory. You can define your own interface into any external persistence type, through the optional `plugin` function.
For example, [Web Storage API's `Storage` interface](https://developer.mozilla.org/en-US/docs/Web/API/Storage), for which a plugin is already defined.It must return two methods - `write` and `read`. These provide the transactional semantics between the defined store and the consumer application that invokes the mutations.
### `AtomInstance` API
#### `.read()`
Returns the current atom value.
#### `.write(fn(currentValue) {}, ...context)`
Replaces the current atom value with the return value of the `fn` invocation.
You may also optionally provide any number of `context` arguments, which will be appended to `.watch` invocations.##### Arguments
- `fn`: A function whose return value is the new value of the store. The provided argument to `fn` is the current atom value (`currentValue`). You can pass any additional arguments to `fn` by binding them. For example, `fn.bind(null, firstArg, secondArg)`#### `.watch(fn(nextValue, prevValue, ...context) {})`
Invokes the given function whenever the atom value changes.
Also provides any `context` arguments that were handed off by the initiating `.write` call.##### Arguments
- `fn`: A function that is invoked whenever the atom value changes.