UNPKG

wonka

Version:

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

64 lines (60 loc) 2.71 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 takeUntil(notifier) { return (function (source) { return (function (sink) { var state = /* record */[ /* ended */false, /* sourceTalkback */Wonka_helpers.talkbackPlaceholder, /* notifierTalkback */Wonka_helpers.talkbackPlaceholder ]; Curry._1(source, (function (signal) { if (typeof signal === "number") { if (state[/* ended */0]) { return /* () */0; } else { state[/* notifierTalkback */2](/* Close */1); state[/* ended */0] = true; return sink(/* End */0); } } else if (signal.tag) { if (state[/* ended */0]) { return /* () */0; } else { return sink(signal); } } else { state[/* sourceTalkback */1] = signal[0]; return Curry._1(notifier, (function (signal) { if (typeof signal === "number") { return /* () */0; } else if (signal.tag) { state[/* ended */0] = true; state[/* notifierTalkback */2](/* Close */1); state[/* sourceTalkback */1](/* Close */1); return sink(/* End */0); } else { var innerTb = signal[0]; state[/* notifierTalkback */2] = innerTb; return innerTb(/* Pull */0); } })); } })); return sink(/* Start */Block.__(0, [(function (signal) { if (state[/* ended */0]) { return 0; } else if (signal) { state[/* sourceTalkback */1](/* Close */1); return state[/* notifierTalkback */2](/* Close */1); } else { return state[/* sourceTalkback */1](/* Pull */0); } })])); }); }); } exports.takeUntil = takeUntil; /* No side effect */