cycle-most-adapter
Version:
Cycle.js Most.js Stream Adapter
77 lines (70 loc) • 1.96 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _mostSubject = require('most-subject');
function logToConsoleError(err) {
var target = err.stack || err;
if (console && console.error) {
console.error(target);
} else if (console && console.log) {
console.log(target);
}
}
var MostAdapter = {
adapt: function adapt(originStream, originStreamSubscribe) {
if (this.isValidStream(originStream)) {
return originStream;
}
var stream = (0, _mostSubject.subject)();
var dispose = originStreamSubscribe(originStream, {
next: function next(x) {
return stream.next(x);
},
error: function error(err) {
return stream.error(err);
},
complete: function complete(x) {
stream.complete(x);
if (typeof dispose === 'function') {
dispose();
}
}
});
return stream;
},
dispose: function dispose(sinks, sinkProxies, sources) {
Object.keys(sinkProxies).forEach(function (k) {
sinkProxies[k].observer.complete();
});
},
makeHoldSubject: function makeHoldSubject() {
var stream = (0, _mostSubject.holdSubject)();
var observer = {
next: function next(x) {
return stream.next(x);
},
error: function error(err) {
logToConsoleError(err);
stream.error(err);
},
complete: function complete(x) {
return stream.complete(x);
}
};
return { stream: stream, observer: observer };
},
isValidStream: function isValidStream(stream) {
return typeof stream.observe === 'function' && typeof stream.drain === 'function';
},
streamSubscribe: function streamSubscribe(stream, observer) {
stream.observe(function (x) {
return observer.next(x);
}).then(function (x) {
return observer.complete(x);
}).catch(function (e) {
return observer.error(e);
});
}
};
exports.default = MostAdapter;