UNPKG

diffusion

Version:

Diffusion JavaScript client

53 lines (39 loc) 1.37 kB
var ValueStreamProxy = require('features/topics/value-stream-proxy'); var Emitter = require('events/emitter'); function SubscriptionImpl(registry, stream, fallback, selector) { for (var fn in stream) { this[fn] = stream[fn]; } this.selector = selector; var self = this; this.asType = function(datatype, callback) { var proxy = new ValueStreamProxy(registry, selector, datatype, fallback, callback); self.on('error', function(error) { proxy.onSubscriptionError(error); }); return proxy.subscription; }; this.transform = function(fn) { var e = new Emitter(); self.on('open', function(selector) { e.emit('open', selector, self); }); self.on('close', function() { e.emit('close'); }); self.on('update', function(update, topic) { e.emit('update', fn(update), topic); }); self.on('subscribe', function(details) { e.emit('subscribe', details); }); self.on('unsubscribe', function(reason, topic) { e.emit('unsubscribe', reason, topic); }); self.on('error', function(error) { e.error(error); }); return new SubscriptionImpl(registry, e.get(), selector); }; } module.exports = SubscriptionImpl;