UNPKG

wonka

Version:

A fast push & pull stream library for Reason, loosely following the [callbag spec](https://github.com/callbag/callbag)

57 lines (53 loc) 2.13 kB
'use strict'; var Block = require("bs-platform/lib/js/block.js"); var Curry = require("bs-platform/lib/js/curry.js"); var Wonka_helpers = require("../wonka_helpers.js"); function share(source) { var state = /* record */[ /* sinks */new Array(), /* talkback */Wonka_helpers.talkbackPlaceholder, /* gotSignal */false ]; return (function (sink) { state[/* sinks */0] = state[/* sinks */0].concat(sink); if (state[/* sinks */0].length === 1) { Curry._1(source, (function (signal) { if (typeof signal === "number") { state[/* sinks */0].forEach((function (sink) { return sink(/* End */0); })); state[/* sinks */0] = new Array(); return /* () */0; } else if (signal.tag) { state[/* gotSignal */2] = false; state[/* sinks */0].forEach((function (sink) { return sink(signal); })); return /* () */0; } else { state[/* talkback */1] = signal[0]; return /* () */0; } })); } return sink(/* Start */Block.__(0, [(function (signal) { if (signal) { state[/* sinks */0] = state[/* sinks */0].filter((function (x) { return x !== sink; })); if (state[/* sinks */0].length === 0) { return state[/* talkback */1](/* Close */1); } else { return 0; } } else if (state[/* gotSignal */2]) { return /* () */0; } else { state[/* gotSignal */2] = true; return state[/* talkback */1](signal); } })])); }); } exports.share = share; /* No side effect */