UNPKG

callbag-remember

Version:

👜 Callbag operator which shares input stream between subscribers and emits last emitted value upon subscription.

80 lines (61 loc) • 1.37 kB
var noop = function noop() {}; var UNIQUE = {}; function remember(source) { var sinks = []; var inited = false; var endValue = UNIQUE; var sourceTalkback; var value; return function (start, sink) { if (start !== 0) return; if (endValue !== UNIQUE) { sink(0, noop); if (inited) { sink(1, value); } sink(2, endValue); return; } sinks.push(sink); var talkback = function talkback(type, data) { if (type === 2) { var index = sinks.indexOf(sink); if (index !== -1) { sinks.splice(index, 1); } return; } if (endValue !== UNIQUE) { return; } sourceTalkback(type, data); }; if (sinks.length === 1) { source(0, function (type, data) { if (type === 0) { sourceTalkback = data; sink(0, talkback); return; } if (type === 1) { inited = true; value = data; } var sinksCopy = sinks.slice(0); if (type === 2) { endValue = data; sinks = null; } sinksCopy.forEach(function (sink) { sink(type, data); }); }); return; } sink(0, talkback); if (inited && endValue === UNIQUE) { sink(1, value); } }; } export default remember;