vizier v1.0.0
Vizier

Overview
Vizier is a tiny framework for performing realtime, distributed, one-way data synchronization.
Usage
On the server, you'll need to install vizier and connect it to a network pipe. Vizier only works the pipe delivers updates as quickly as possible; two great options are socket.io or PubNub.
// server.js
import Vizier from 'vizier';
import io from 'socket.io';
Vizier
.build('postgres://my-database-url')
.track('my_table') // Assuming such a table already exists, of course.
.then((vizier) => {
io.on('connect', (socket) => {
let pipe = (update) => socket.emit('vizier', update);
let desynchronize = vizier.synchronize('my_table', pipe);
socket.on('disconnect', () => desynchronize());
});
});On the client, you'll need to install vizier-client-simple and submit Vizier's messages to it.
// client.js
import io from 'socket.io-client';
import Sink from 'vizier-client-simple';
let sink = new Sink();
io.on('vizier', (message) => {
sink.submit(message);
});
setInterval(() => {
console.log(`There are now ${sink.get('item').length} items in the database.`);
}, 1000);Any table you've synchronized on the server will be stored in sink, updated in realtime (or however fast your actual network framework is).
Configuration
Pass options to make(connection, options) or use Vizier#configure(options). You may also pass per-synchronization options from the options.synchronization key directly to Vizier#synchronize(table, pipe, options) to override the instance options. Anyway, here are the available options and their defaults:
/**
* Reconfigures this Vizier instance with new options.
*
* @param {object} options
* The options to use; read the method for details.
*/
configure (options) {
// Set defaults for the options.
options = options || {};
// A delimiter used to manage objects in the database.
options.delimiter = options.delimiter || '‡';
// A prefix used to manage objects in the database.
options.prefix = options.prefix || 'vizier';
// Set default synchronization options.
options.synchronization = options.synchronization || {};
// Whether or not we synchronize from now, or from all time.
options.synchronization.full = options.synchronization.full || false;
// The loader for tables/rows coming in from the database.
options.synchronization.loader = options.synchronization.loader || new DefaultLoader(this.client);
// Initialize this instance's options.
this.options = options;
}11 years ago