@doop/deepstream

0.2.2 • Public • Published

@doop/deepstream

Deepstream.io adapter for Doop.

Features vs. Vanilla Deepstream:

  • Entirely promise based - no weird callbacks that DS seems to prefer for some methods
  • Minimal get() / set() implementations which try to avoid subscribing to Deepstream to fetch data when possible
  • Names are dropped entirely to use paths which can be in dotted.notation, slash/notation or ['array', 'format']
  • Distinction from record names and subkeys via At notation - e.g. this/is/a/record@this/is/a/subkey
  • Array format paths are automatically escaped if any member contains a splitter character (dots or slashes)

Backend

See config.js for example config to merge.

The module will be detected and loaded automatically with the server as app.deepstream.

Frontend

The vm.$deepstream service should be loaded by default.

app.component({
	data() { return {
		doc: {},
	}},
	watch: {
		doc: {
			deep: true,
			handler() {
				this.$debug('SET', this.doc);
				this.$deepstream.set(this.doc);
			},
		},
	},
	created() {
		this.$debug.enable(true);
		this.record = this.$deepstream.get('debug/deepstream');
		this.record.subscribe(values => {
			this.$debug('GET', this.doc);
			this.doc = values;
		});
	},
});

API

client

The actual DeepstreamClient instance.

options

General options for the Deepstram wrapper.

Options are:

Option Type Default Description
pathAtNotation boolean true Support At notation when splitting paths
pathSplitSlash boolean true Support path seperators with slashes
pathSplitDot boolean false Support path seperators with dots
split function See code Path spliter function

pathCache

An object containing all loaded records.

isReady

Boolean indicating if the module has loaded, connected and authenticated.

connect(url, auth?)

Async function which establishes a connection with an optional auth object.

getRecord(path)

Fetch (+cache) a DeepstreamRecord instance for a given path.

splitPath(path)

Internal function used to seperate a regular path into component deepstream docName + docPath specs, used by some DS functions. This function supports dotted.notation, slash/notation and ['array', 'notation']. Array members are sanitised and is the recommended method to specifiy a path.

get(path, fallback?)

Async function to fetch a given, nested path. See splitPath() for valid path specifications. If the record doesn't exist the fallback is used instead of throwing.

has(path)

Async function which will return a boolean if the path exists.

set(path, value)

Async function to set a given, nested path. See splitPath() for valid path specifications.

merge(path, values)

Convenience async function to merge the given values object into an existing object + save. See splitPath() for valid path specifications.

subscribe(path, cb, options?)

Subscribe to a path, calling the callback as cb(newValue) for any change.

Options can be:

Option Type Default Description
immediate boolean true Whether to fire the subscription immediately with the current value, if falsy only updates will fire the callback

unsubscribe(path, cb)

Release a given callback from its subscription.

VUE: bindData(vuePath, dsPath, options?)

Bind a local Vue variable to a remote Deepstream path. Read or writes to the remote will sync with local (assuming the correct allow{Read,Write} options are enabled).

Options can be:

Option Type Default Description
immediate boolean true Whether to fetch the state immediately after subscription
allowRead boolean true Keep the local state up to date with the remote
allowWrite boolean true Keep the remote state up to date with local
readData function Function to call as (newData) when any data is incomming from remote
writeData function Function to call as (newData) before changes are transmitted to remote

Notes:

  • Data object parameters in readData and writeData can mutate incomming / outgoing data respectively
  • Setting {allowWrite: false} is essencially the same as $deepstream.subscribe(path, cb) but automatically updates local state without a callback

VUE: destroyVM()

Clean up all bindings and release any pending subscriptions. Called automatically when a Vue component is entering the beforeDestroy lifecycle stage.

rpc

Object for Remote-Procedure-Calls.

rpc.provide(name, cb)

Regisiter an RPC function.

rpc.call(name, data?)

Call a registered RPC function with an optional data object.

Readme

Keywords

Package Sidebar

Install

npm i @doop/deepstream

Weekly Downloads

1

Version

0.2.2

License

MIT

Unpacked Size

25.9 kB

Total Files

8

Last publish

Collaborators

  • hash-bang
  • mr-yellow