@nrk/yr-data-store v11.1.0
A data object that supports storing and retrieving data with namespaced keys ('foo/bar/bat'), immutability, data
fetching, and a flexible handler api for observation, side effects, computed values and more.
Usage
const dataStoreFactory = require("@nrk/yr-data-store").create;
const store = dataStoreFactory("fooStore", { foo: true, bar: false });
store.get("foo"); //=> true
store.set("foo/bar", { bat: true, boo: ["boo"] }, { immutable: true });
store.get("foo/bar/bat"); //=> trueAPI
create (id: String, data: Object, options: Object): DataStore|FetchableDataStore
Instance factory. Options include:
handlers: Arrayarray of tuples ([match: RegExp, handler: Function]) for passing touseHandlerdefault:null. See handlersisFetchable: Booleanspecify whether instance should be aFetchableDataStorethat supports data fetching default:false. See FetchableDataStoreisWritable: Booleanspecify whether instance should be writable viaset()default:trueserialisableKeys: Objectobject listing keys and their serialisable state default:{}. SeesetSerialisabilityOfKey()
DataStore
setWriteable (value: Boolean)
Set the writeable state of a store. A read-only store will internally cache all calls to get(). Calling
setWriteable() to toggle read/write state will invalidate the internal cache.
get (key: String, options: Object): *
Retrieve value stored at key. Empty key will return all data:
store.get("foo/bar/bat"); //=> truegetAll (keys: Array): Array
Batch version of get(). Accepts array of keys, and returns array of values:
store.getAll(["foo/bar/bat", "bar"]); //=> [true, false]set (key: String, value: *, options: Object)
Store value at key:
store.set("bat", "bat");options include:
immutable: Booleanspecify whether to mutate the underlying data object default:truefor browser,falsefor servermerge: Booleanspecify whether to mergevalueinto the underlying data object (true), or overwrite an existing key (false) default:true
setAll (keys: Object, options: Object)
Batch version of set(). Accepts hash of key:value pairs:
store.set({ bat: "bat", "foo/bar/bat": false });options are same as for set().
reset (data: Object)
Reset/replace underlying data with data.
destroy ()
Destroy the instance.
setSerialisabilityOfKey (key: String, value: Boolean)
Specify serialisablity of key. Setting a key to false will exclude that key when stringifying:
store.setSerialisabilityOfKey("foo", false);
JSON.stringify(store); //=> { "bar": false, "bat": "bat"}setSerialisabilityOfKeys (keys: Object)
Batch version of setSerialisabilityOfKey(). Accepts a hash of key:value pairs:
store.setSerialisabilityOfKeys({ foo: false, bat: false });
JSON.stringify(store); //=> { "bar": false }dump (stringify: Boolean): Object|String
Retrieve all data as Object or String (if stringify argument is true).
fetch (key: String, url: String, options: Object): Promise
Retrieve value stored at key. If the stored value has not yet been set, or is set but expired (based on expires
header), load from url:
store.fetch("beep", "http://localhost/beep").then(response => {
console.log(response); //=> { duration: 1000, headers: {/* */}, body: { beep: 'foo' } }
store.get("beep"); //=> { beep: 'foo' }
});The returned Promise resolves with a response object:
body: Objectthe response bodyduration: Numberload time in msheaders: Objectthe parsed response headerskey: Stringthe key used to store the response data
options include:
abort: Booleanabort existing (outstanding) request to same url default:falsecacheControl: Stringdefaultcache-controlheader to determine value expiry default:"public, max-age=120, stale-if-error=180"ignoreQuery: Booleanignore query parameters ofurlwhen matching existing, oustanding requests for the same url default:falseminExpiry: Numberthe minimum expiry (in ms) to use in cases of invalidexpiresdefault:60000retries: Numberthe number of times to retry load on error default:2rejectOnError: Booleanspecify whether to reject on error or resolve with stale value default:truetimeout: Numberthe timeout duration (in ms) before attempting retry default:5000
fetchAll (keys: Array, options: Object): Promise
Batch version of fetch(). Accepts an array of [key, url, options] tuples, returning a Promise resolving to an array
of results:
store
.fetchAll([
["beep", "http://localhost/beep"],
["foo", "http://localhost/foo"]
])
.then(responses => {
store.get("beep"); //=> { beep: 'foo' }
});abort (key: String)
Abort outstanding load operations. If key is omitted, all operations will be aborted:
store.fetch("beep", "http://localhost/beep").then(response => {
// Will never be called
});
store.abort("beep");