UNPKG

wonka

Version:

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

119 lines (110 loc) 4.81 kB
import * as Block from "bs-platform/lib/es6/block.js"; import * as Curry from "bs-platform/lib/es6/curry.js"; import * as Wonka_helpers from "../wonka_helpers.js"; import * as Wonka_source_fromArray from "../sources/wonka_source_fromArray.js"; function mergeMap(f) { return (function (source) { return (function (sink) { var state = /* record */[ /* outerTalkback */Wonka_helpers.talkbackPlaceholder, /* innerTalkbacks */new Array(), /* ended */false ]; var applyInnerSource = function (innerSource) { var talkback = /* record */[/* contents */Wonka_helpers.talkbackPlaceholder]; return Curry._1(innerSource, (function (signal) { if (typeof signal === "number") { state[/* innerTalkbacks */1] = state[/* innerTalkbacks */1].filter((function (x) { return x !== talkback[0]; })); if (state[/* ended */2] && state[/* innerTalkbacks */1].length === 0) { return sink(/* End */0); } else { return 0; } } else if (signal.tag) { if (state[/* innerTalkbacks */1].length !== 0) { sink(/* Push */Block.__(1, [signal[0]])); return talkback[0](/* Pull */0); } else { return /* () */0; } } else { var tb = signal[0]; talkback[0] = tb; state[/* innerTalkbacks */1] = state[/* innerTalkbacks */1].concat(tb); return tb(/* Pull */0); } })); }; Curry._1(source, (function (signal) { if (typeof signal === "number") { if (state[/* ended */2]) { return /* () */0; } else { state[/* ended */2] = true; if (state[/* innerTalkbacks */1].length === 0) { return sink(/* End */0); } else { return 0; } } } else if (signal.tag) { if (state[/* ended */2]) { return /* () */0; } else { applyInnerSource(f(signal[0])); return state[/* outerTalkback */0](/* Pull */0); } } else { var tb = signal[0]; state[/* outerTalkback */0] = tb; return tb(/* Pull */0); } })); return sink(/* Start */Block.__(0, [(function (signal) { if (signal) { state[/* innerTalkbacks */1].forEach((function (talkback) { return talkback(/* Close */1); })); if (state[/* ended */2]) { return 0; } else { state[/* ended */2] = true; state[/* outerTalkback */0](/* Close */1); state[/* innerTalkbacks */1].forEach((function (talkback) { return talkback(/* Close */1); })); state[/* innerTalkbacks */1] = new Array(); return /* () */0; } } else if (state[/* ended */2]) { return /* () */0; } else { state[/* innerTalkbacks */1].forEach((function (talkback) { return talkback(/* Pull */0); })); return /* () */0; } })])); }); }); } function merge(sources) { return mergeMap((function (x) { return x; }))(Wonka_source_fromArray.fromArray(sources)); } function mergeAll(source) { return mergeMap((function (x) { return x; }))(source); } var flatten = mergeAll; export { mergeMap , merge , mergeAll , flatten , } /* No side effect */