SkillAgentSearch skills...

Entangle

Distributed objects for nodejs with pluggable drivers

Install / Use

/learn @entangledjs/Entangle
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

Entangle

Distributed objects for nodejs using Object.observe(). Possibly browser support and Object.observe() fallbacks in the future. For now this is a toy experimental library with several drivers to choose from:

Installation

Node 0.11.x must be used for --harmony support.

$ npm install entangled

Example

Any process may use object(name) to reference the "entangled" object:

var Redis = require('do-redis');
var object = require('entangled')(new Redis);

var config = object('config');

config.on('change', function(){
  console.log(config);
});

Any process may then manipulate the object. With configuration as an example you may then launch a REPL and manipulate it on the fly:

app> config.cookieMaxAge = 600000;

All config objects will then receive a "change" event, followed by a "change cookieMaxAge" event.

API

entangle(name)

Return a distributed object (DO) for the given name.

The name is an arbitrary string that represents a given object, this may be anything you want. For example "users/tobi", "config", "users.tobi", "foo.com/users/123", and so on. Keep in mind however that this format may have significance for specific backends, for that reason the /-delimited string is recommended.

DO()

Distributed object that inherets from Emitter#prototype.

DO#set(object)

Merge object's properties silently without broadcasting changes.

Guide

Events

The following events are currently supported. All events are passed an event object. On initialization the "change" event will have .init with a value of true.

  • change when a change has been made to the object
  • change <prop> when a property has been updated
  • new <prop> when a property has been added
  • delete <prop> when a property has been deleted
  • reconfigure <prop> when a property has been reconfigured

Initialization

When an object is referenced it must first be initialized, once the data is fetched and the object is popluated a "change" event is fired with { init: true }. For example:

var config = object('config');

config.on('change', function(e){
  if (e.init) {
    // initialized
  } else {
    // updated
  }
});

This is a "change" event because often the initialization and changed state of an object is irrelevant for your views - when it does matter you can use .init.

Reacting to Change

When an object is manipulated the changes are broadcasted to peers via the driver, such as Redis, or ETCD. You may then listen to changes in a global or granular fashion.

Here we listen for global changes:

var config = object('config');

config.on('change', function(){
  console.log('updated config %j', config);
});

Here we listen for changes on a specific property, an event object is passed and provides the property .name, the .old value, and the new .value.

var config = object('config');

config.on('change title', function(e){
  console.log('changed title from "%s" to "%s"', e.old, e.value);
});

License

MIT

View on GitHub
GitHub Stars36
CategoryDevelopment
Updated8mo ago
Forks2

Languages

JavaScript

Security Score

67/100

Audited on Jul 23, 2025

No findings