UNPKG

@cycle/run

Version:

The Cycle.js run() function to use with xstream

102 lines 3.59 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var xstream_1 = require("xstream"); var quicktask_1 = require("quicktask"); var adapt_1 = require("./adapt"); function makeSinkProxies(drivers) { var sinkProxies = {}; for (var name_1 in drivers) { if (drivers.hasOwnProperty(name_1)) { sinkProxies[name_1] = xstream_1.default.create(); } } return sinkProxies; } exports.makeSinkProxies = makeSinkProxies; function callDrivers(drivers, sinkProxies) { var sources = {}; for (var name_2 in drivers) { if (drivers.hasOwnProperty(name_2)) { sources[name_2] = drivers[name_2](sinkProxies[name_2], name_2); if (sources[name_2] && typeof sources[name_2] === 'object') { sources[name_2]._isCycleSource = name_2; } } } return sources; } exports.callDrivers = callDrivers; // NOTE: this will mutate `sources`. function adaptSources(sources) { for (var name_3 in sources) { if (sources.hasOwnProperty(name_3) && sources[name_3] && typeof sources[name_3].shamefullySendNext === 'function') { sources[name_3] = adapt_1.adapt(sources[name_3]); } } return sources; } exports.adaptSources = adaptSources; function replicateMany(sinks, sinkProxies) { var scheduleMicrotask = quicktask_1.default(); var sinkNames = Object.keys(sinks).filter(function (name) { return !!sinkProxies[name]; }); var buffers = {}; var replicators = {}; sinkNames.forEach(function (name) { buffers[name] = { _n: [], _e: [] }; replicators[name] = { next: function (x) { return buffers[name]._n.push(x); }, error: function (err) { return buffers[name]._e.push(err); }, complete: function () { }, }; }); var subscriptions = sinkNames.map(function (name) { return xstream_1.default.fromObservable(sinks[name]).subscribe(replicators[name]); }); sinkNames.forEach(function (name) { var listener = sinkProxies[name]; var next = function (x) { scheduleMicrotask(function () { return listener._n(x); }); }; var error = function (err) { scheduleMicrotask(function () { (console.error || console.log)(err); listener._e(err); }); }; buffers[name]._n.forEach(next); buffers[name]._e.forEach(error); replicators[name].next = next; replicators[name].error = error; // because sink.subscribe(replicator) had mutated replicator to add // _n, _e, _c, we must also update these: replicators[name]._n = next; replicators[name]._e = error; }); buffers = null; // free up for GC return function disposeReplication() { subscriptions.forEach(function (s) { return s.unsubscribe(); }); }; } exports.replicateMany = replicateMany; function disposeSinkProxies(sinkProxies) { Object.keys(sinkProxies).forEach(function (name) { return sinkProxies[name]._c(); }); } exports.disposeSinkProxies = disposeSinkProxies; function disposeSources(sources) { for (var k in sources) { if (sources.hasOwnProperty(k) && sources[k] && sources[k].dispose) { sources[k].dispose(); } } } exports.disposeSources = disposeSources; function isObjectEmpty(obj) { return Object.keys(obj).length === 0; } exports.isObjectEmpty = isObjectEmpty; //# sourceMappingURL=internals.js.map