UNPKG

wonka

Version:

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

1,690 lines (1,571 loc) 39.5 kB
function __(tag, block) { block.tag = tag; return block; } function caml_array_sub(x, offset, len) { var result = new Array(len); var j = 0; var i = offset; while (j < len) { result[j] = x[i]; j = (j + 1) | 0; i = (i + 1) | 0; } return result; } function app(_f, _args) { while (1) { var args = _args; var f = _f; var arity = f.length; var d = (arity - args.length) | 0; if (0 === d) { return f.apply(null, args); } else if (d < 0) { _args = caml_array_sub(args, arity, 0 | -d); _f = f.apply(null, caml_array_sub(args, 0, arity)); continue; } else { return (function(f, args) { return function(x) { return app(f, args.concat([x])); }; })(f, args); } } } function _1(o, a0) { var arity = o.length; if (1 === arity) { return o(a0); } else { return (function curry_1(o, a0, arity) { switch (arity) { case 1: return o(a0); case 2: return function(param) { return o(a0, param); }; case 3: return function(param, param$1) { return o(a0, param, param$1); }; case 4: return function(param, param$1, param$2) { return o(a0, param, param$1, param$2); }; case 5: return function(param, param$1, param$2, param$3) { return o(a0, param, param$1, param$2, param$3); }; case 6: return function(param, param$1, param$2, param$3, param$4) { return o(a0, param, param$1, param$2, param$3, param$4); }; case 7: return function(param, param$1, param$2, param$3, param$4, param$5) { return o(a0, param, param$1, param$2, param$3, param$4, param$5); }; default: return app(o, [a0]); } })(o, a0, arity); } } function _3(o, a0, a1, a2) { var arity = o.length; if (3 === arity) { return o(a0, a1, a2); } else { return (function curry_3(o, a0, a1, a2, arity) { switch (arity) { case 1: return app(o(a0), [a1, a2]); case 2: return app(o(a0, a1), [a2]); case 3: return o(a0, a1, a2); case 4: return function(param) { return o(a0, a1, a2, param); }; case 5: return function(param, param$1) { return o(a0, a1, a2, param, param$1); }; case 6: return function(param, param$1, param$2) { return o(a0, a1, a2, param, param$1, param$2); }; case 7: return function(param, param$1, param$2, param$3) { return o(a0, a1, a2, param, param$1, param$2, param$3); }; default: return app(o, [a0, a1, a2]); } })(o, a0, a1, a2, arity); } } var undefinedHeader = []; function some(x) { if (void 0 === x) { var block = [undefinedHeader, 0]; block.tag = 256; return block; } else if (null !== x && x[0] === undefinedHeader) { var block$1 = [undefinedHeader, (x[1] + 1) | 0]; block$1.tag = 256; return block$1; } else { return x; } } function valFromOption(x) { if (null !== x && x[0] === undefinedHeader) { var depth = x[1]; if (0 === depth) { return; } else { return [undefinedHeader, (depth - 1) | 0]; } } else { return x; } } function talkbackPlaceholder(param) { return 0; } function captureTalkback(source, sinkWithTalkback) { var talkback = [talkbackPlaceholder]; return _1(source, function(signal) { if ("number" != typeof signal) { if (!signal.tag) { talkback[0] = signal[0]; } } return sinkWithTalkback(signal, talkback[0]); }); } function takeLast(max) { return function(source) { return function(sink) { var queue = new Array(); return captureTalkback(source, function(signal, talkback) { if ("number" == typeof signal) { return (function makeTrampoline(sink, f) { var state = [!1, !1, !1]; return sink( __(0, [ function(signal) { if (signal || state[0]) { return 0; } else { state[2] = !0; if (state[1]) { return 0; } else { state[1] = !0; !(function(_param) { while (1) { var match = f(); if (void 0 !== match) { state[2] = !1; sink(__(1, [valFromOption(match)])); if (state[2]) { continue; } else { return 0; } } else { state[0] = !0; return sink(0); } } })(); state[1] = !1; return 0; } } } ]) ); })(sink, function() { return queue.shift(); }); } else if (signal.tag) { if (queue.length >= max && max > 0) { queue.shift(); } queue.push(signal[0]); return talkback(0); } else { return talkback(0); } }); }; }; } function fromListener(addListener, removeListener) { return function(sink) { var handler = function($$event) { return sink(__(1, [$$event])); }; sink( __(0, [ function(signal) { if (signal) { return _1(removeListener, handler); } else { return 0; } } ]) ); return _1(addListener, handler); }; } var toPromise$1 = function toPromise(source) { return new Promise(function(resolve, param) { return _1(takeLast(1)(source), function(signal) { if ("number" == typeof signal) { return 0; } else if (signal.tag) { return resolve(signal[0]); } else { return signal[0](0); } }); }); }; function subscribe(f) { return function(source) { var state = [talkbackPlaceholder, !1]; _1(source, function(signal) { if ("number" == typeof signal) { state[1] = !0; return 0; } else if (signal.tag) { if (state[1]) { return 0; } else { f(signal[0]); return state[0](0); } } else { var x = signal[0]; state[0] = x; return x(0); } }); return [ function(param) { if (state[1]) { return 0; } else { state[1] = !0; return state[0](1); } } ]; }; } function fromArray(arr) { return function(sink) { var size = arr.length; var state = [0, !1, !1, !1]; return sink( __(0, [ function(signal) { var match = state[2]; if (signal) { state[1] = !0; return 0; } else if (match) { state[3] = !0; return 0; } else { state[3] = !0; state[2] = !0; while (state[3] && !state[1]) { var index = state[0]; if (index < size) { var x = arr[index]; state[0] = (index + 1) | 0; state[3] = !1; sink(__(1, [x])); } else { state[1] = !0; sink(0); } } state[2] = !1; return 0; } } ]) ); }; } function mergeMap(f) { return function(source) { return function(sink) { var state = [talkbackPlaceholder, new Array(), !1]; _1(source, function(signal) { if ("number" == typeof signal) { if (state[2]) { return 0; } else { state[2] = !0; if (0 === state[1].length) { return sink(0); } else { return 0; } } } else if (signal.tag) { if (state[2]) { return 0; } else { (innerSource = f(signal[0])), (talkback = [talkbackPlaceholder]), _1(innerSource, function(signal) { if ("number" == typeof signal) { state[1] = state[1].filter(function(x) { return x !== talkback[0]; }); if (state[2] && 0 === state[1].length) { return sink(0); } else { return 0; } } else if (signal.tag) { if (0 !== state[1].length) { sink(__(1, [signal[0]])); return talkback[0](0); } else { return 0; } } else { var tb = signal[0]; talkback[0] = tb; state[1] = state[1].concat(tb); return tb(0); } }); return state[0](0); } } else { var tb = signal[0]; state[0] = tb; return tb(0); } var innerSource, talkback; }); return sink( __(0, [ function(signal) { if (signal) { state[1].forEach(function(talkback) { return talkback(1); }); if (state[2]) { return 0; } else { state[2] = !0; state[0](1); state[1].forEach(function(talkback) { return talkback(1); }); state[1] = new Array(); return 0; } } else if (state[2]) { return 0; } else { state[1].forEach(function(talkback) { return talkback(0); }); return 0; } } ]) ); }; }; } function mergeAll(source) { return mergeMap(function(x) { return x; })(source); } function concatMap(f) { return function(source) { return function(sink) { var state = [new Array(), talkbackPlaceholder, talkbackPlaceholder, !1, !1, !1]; var applyInnerSource = function(innerSource) { return _1(innerSource, function(signal) { if ("number" == typeof signal) { state[3] = !1; state[2] = talkbackPlaceholder; var match = state[0].shift(); if (void 0 !== match) { return applyInnerSource(f(valFromOption(match))); } else if (state[5]) { return sink(0); } else { return 0; } } else if (signal.tag) { if (state[4]) { return 0; } else { sink(__(1, [signal[0]])); return state[2](0); } } else { var tb = signal[0]; state[3] = !0; state[2] = tb; return tb(0); } }); }; _1(source, function(signal) { if ("number" == typeof signal) { if (state[5]) { return 0; } else { state[5] = !0; if ( !state[3] && (function isEmpty(q) { return 0 === q.length; })(state[0]) ) { return sink(0); } else { return 0; } } } else if (signal.tag) { if (state[5]) { return 0; } else { var x = signal[0]; if (state[3]) { state[0].push(x); } else { applyInnerSource(f(x)); } return state[1](0); } } else { var tb = signal[0]; state[1] = tb; return tb(0); } }); return sink( __(0, [ function(signal) { if (signal) { state[2](1); if (state[5]) { return 0; } else { state[5] = !0; state[4] = !0; state[1](1); state[2] = talkbackPlaceholder; return 0; } } else if (state[5]) { return 0; } else { return state[2](0); } } ]) ); }; }; } function switchMap(f) { return function(source) { return function(sink) { var state = [talkbackPlaceholder, talkbackPlaceholder, !1, !1, !1]; _1(source, function(signal) { if ("number" == typeof signal) { if (state[4]) { return 0; } else { state[4] = !0; if (state[2]) { return 0; } else { return sink(0); } } } else if (signal.tag) { if (state[4]) { return 0; } else { if (state[2]) { state[1](1); state[1] = talkbackPlaceholder; } _1(f(signal[0]), function(signal) { if ("number" == typeof signal) { state[2] = !1; state[1] = talkbackPlaceholder; if (state[4]) { return sink(0); } else { return 0; } } else if (signal.tag) { if (state[3]) { return 0; } else { sink(__(1, [signal[0]])); return state[1](0); } } else { var tb = signal[0]; state[2] = !0; state[1] = tb; return tb(0); } }); return state[0](0); } } else { var tb = signal[0]; state[0] = tb; return tb(0); } }); return sink( __(0, [ function(signal) { if (signal) { state[1](1); if (state[4]) { return 0; } else { state[4] = !0; state[3] = !0; state[0](1); state[1] = talkbackPlaceholder; return 0; } } else { return state[1](0); } } ]) ); }; }; } var fromArray$1 = fromArray; var fromList$1 = function fromList(ls) { return function(sink) { var state = [ls, !1, !1, !1]; return sink( __(0, [ function(signal) { var match = state[2]; if (signal) { state[1] = !0; return 0; } else if (match) { state[3] = !0; return 0; } else { state[3] = !0; state[2] = !0; while (state[3] && !state[1]) { var match$1 = state[0]; if (match$1) { state[0] = match$1[1]; state[3] = !1; sink(__(1, [match$1[0]])); } else { state[1] = !0; sink(0); } } state[2] = !1; return 0; } } ]) ); }; }; var fromValue$1 = function fromValue(x) { return function(sink) { var ended = [!1]; return sink( __(0, [ function(signal) { if (signal || ended[0]) { return 0; } else { ended[0] = !0; sink(__(1, [x])); return sink(0); } } ]) ); }; }; var make$1 = function make(f) { return function(sink) { var teardown = f([ function(value) { return sink(__(1, [value])); }, function(param) { return sink(0); } ]); return sink( __(0, [ function(signal) { if (signal) { return teardown(); } else { return 0; } } ]) ); }; }; var makeSubject$1 = function makeSubject(param) { var state = [new Array(), !1]; return [ function(sink) { state[0] = state[0].concat(sink); return sink( __(0, [ function(signal) { if (1 === signal) { state[0] = state[0].filter(function(x) { return x !== sink; }); return 0; } else { return 0; } } ]) ); }, function(value) { if (state[1]) { return 0; } else { state[0].forEach(function(sink) { return sink(__(1, [value])); }); return 0; } }, function(param) { if (state[1]) { return 0; } else { state[1] = !0; state[0].forEach(function(sink) { return sink(0); }); return 0; } } ]; }; var empty$1 = function empty(sink) { sink(__(0, [talkbackPlaceholder])); return sink(0); }; var never$1 = function never(sink) { return sink(__(0, [talkbackPlaceholder])); }; var combine$1 = function combine(sourceA) { return function(sourceB) { return function(sink) { var state = [talkbackPlaceholder, talkbackPlaceholder, void 0, void 0, !1, 0, !1]; _1(sourceA, function(signal) { var match = state[3]; if ("number" == typeof signal) { if (state[5] < 1) { state[5] = (state[5] + 1) | 0; return 0; } else if (state[6]) { return 0; } else { state[6] = !0; return sink(0); } } else if (signal.tag) { var a = signal[0]; if (void 0 !== match) { if (state[6]) { return 0; } else { state[2] = some(a); state[4] = !1; return sink(__(1, [[a, valFromOption(match)]])); } } else { state[2] = some(a); state[4] = !1; return 0; } } else { state[0] = signal[0]; return 0; } }); _1(sourceB, function(signal) { var match = state[2]; if ("number" == typeof signal) { if (state[5] < 1) { state[5] = (state[5] + 1) | 0; return 0; } else if (state[6]) { return 0; } else { state[6] = !0; return sink(0); } } else if (signal.tag) { var b = signal[0]; if (void 0 !== match) { if (state[6]) { return 0; } else { state[3] = some(b); state[4] = !1; return sink(__(1, [[valFromOption(match), b]])); } } else { state[3] = some(b); state[4] = !1; return 0; } } else { state[1] = signal[0]; return 0; } }); return sink( __(0, [ function(signal) { if (state[6]) { return 0; } else if (signal) { state[6] = !0; state[0](1); return state[1](1); } else if (state[4]) { return 0; } else { state[4] = !0; state[0](signal); return state[1](signal); } } ]) ); }; }; }; var concatMap$1 = concatMap; var concat$1 = function concat(sources) { return concatMap(function(x) { return x; })(fromArray(sources)); }; var concatAll$1 = function concatAll(source) { return concatMap(function(x) { return x; })(source); }; var filter$1 = function filter(f) { return function(source) { return function(sink) { return captureTalkback(source, function(signal, talkback) { if ("number" == typeof signal || !signal.tag || f(signal[0])) { return sink(signal); } else { return talkback(0); } }); }; }; }; var map$1 = function map(f) { return function(source) { return function(sink) { return _1(source, function(signal) { var tmp; tmp = "number" == typeof signal ? 0 : signal.tag ? __(1, [f(signal[0])]) : __(0, [signal[0]]); return sink(tmp); }); }; }; }; var mergeMap$1 = mergeMap; var merge$1 = function merge(sources) { return mergeMap(function(x) { return x; })(fromArray(sources)); }; var mergeAll$1 = mergeAll; var flatten$1 = mergeAll; var scan$1 = function scan(f, seed) { return function(source) { return function(sink) { var acc = [seed]; return _1(source, function(signal) { var tmp; if ("number" == typeof signal) { tmp = 0; } else if (signal.tag) { acc[0] = f(acc[0], signal[0]); tmp = __(1, [acc[0]]); } else { tmp = __(0, [signal[0]]); } return sink(tmp); }); }; }; }; var share$1 = function share(source) { var state = [new Array(), talkbackPlaceholder, !1]; return function(sink) { state[0] = state[0].concat(sink); if (1 === state[0].length) { _1(source, function(signal) { if ("number" == typeof signal) { state[0].forEach(function(sink) { return sink(0); }); state[0] = new Array(); return 0; } else if (signal.tag) { state[2] = !1; state[0].forEach(function(sink) { return sink(signal); }); return 0; } else { state[1] = signal[0]; return 0; } }); } return sink( __(0, [ function(signal) { if (signal) { state[0] = state[0].filter(function(x) { return x !== sink; }); if (0 === state[0].length) { return state[1](1); } else { return 0; } } else if (state[2]) { return 0; } else { state[2] = !0; return state[1](signal); } } ]) ); }; }; var skip$1 = function skip(wait) { return function(source) { return function(sink) { var rest = [wait]; return captureTalkback(source, function(signal, talkback) { if ("number" == typeof signal || !(signal.tag && rest[0] > 0)) { return sink(signal); } else { rest[0] = (rest[0] - 1) | 0; return talkback(0); } }); }; }; }; var skipUntil$1 = function skipUntil(notifier) { return function(source) { return function(sink) { var state = [!0, !1, !1, talkbackPlaceholder, talkbackPlaceholder]; _1(source, function(signal) { if ("number" == typeof signal) { if (state[0]) { state[4](1); } state[1] = !0; return sink(0); } else if (signal.tag) { if (state[0] && !state[1]) { return state[3](0); } else if (state[1]) { return 0; } else { state[2] = !1; return sink(signal); } } else { var tb = signal[0]; state[3] = tb; return _1(notifier, function(signal) { if ("number" == typeof signal) { return 0; } else if (signal.tag) { state[0] = !1; return state[4](1); } else { var innerTb = signal[0]; state[4] = innerTb; innerTb(0); return tb(0); } }); } }); return sink( __(0, [ function(signal) { if (signal) { if (state[0]) { state[4](1); } state[1] = !0; return state[3](1); } else if (!state[2] && !state[1]) { state[2] = !0; return state[3](0); } else { return 0; } } ]) ); }; }; }; var skipWhile$1 = function skipWhile(f) { return function(source) { return function(sink) { var skip = [!0]; return captureTalkback(source, function(signal, talkback) { if ("number" == typeof signal || !signal.tag || !skip[0]) { return sink(signal); } else if (f(signal[0])) { return talkback(0); } else { skip[0] = !1; return sink(signal); } }); }; }; }; var switchMap$1 = switchMap; var switchAll$1 = function switchAll(source) { return switchMap(function(x) { return x; })(source); }; var take$1 = function take(max) { return function(source) { return function(sink) { var state = [0, talkbackPlaceholder]; _1(source, function(signal) { if ("number" == typeof signal) { if (state[0] < max) { state[0] = max; return sink(0); } else { return 0; } } else if (signal.tag) { if (state[0] < max) { state[0] = (state[0] + 1) | 0; sink(signal); if (state[0] === max) { sink(0); return state[1](1); } else { return 0; } } else { return 0; } } else { state[1] = signal[0]; return 0; } }); return sink( __(0, [ function(signal) { if (state[0] < max) { if (signal) { state[0] = max; return state[1](1); } else { return state[1](0); } } else { return 0; } } ]) ); }; }; }; var takeLast$1 = takeLast; var takeUntil$1 = function takeUntil(notifier) { return function(source) { return function(sink) { var state = [!1, talkbackPlaceholder, talkbackPlaceholder]; _1(source, function(signal) { if ("number" == typeof signal) { if (state[0]) { return 0; } else { state[2](1); state[0] = !0; return sink(0); } } else if (signal.tag) { if (state[0]) { return 0; } else { return sink(signal); } } else { state[1] = signal[0]; return _1(notifier, function(signal) { if ("number" == typeof signal) { return 0; } else if (signal.tag) { state[0] = !0; state[2](1); state[1](1); return sink(0); } else { var innerTb = signal[0]; state[2] = innerTb; return innerTb(0); } }); } }); return sink( __(0, [ function(signal) { if (state[0]) { return 0; } else if (signal) { state[1](1); return state[2](1); } else { return state[1](0); } } ]) ); }; }; }; var takeWhile$1 = function takeWhile(f) { return function(source) { return function(sink) { var ended = [!1]; var talkback = [talkbackPlaceholder]; _1(source, function(signal) { if ("number" == typeof signal) { if (ended[0]) { return 0; } else { ended[0] = !0; return sink(0); } } else if (signal.tag) { if (ended[0]) { return 0; } else if (f(signal[0])) { return sink(signal); } else { ended[0] = !0; sink(0); return talkback[0](1); } } else { talkback[0] = signal[0]; return sink(signal); } }); return sink( __(0, [ function(signal) { if (ended[0]) { return 0; } else if (signal) { ended[0] = !0; return talkback[0](1); } else { return talkback[0](0); } } ]) ); }; }; }; var tap$1 = function tap(f) { return function(source) { return function(sink) { return _1(source, function(signal) { if ("number" != typeof signal) { if (signal.tag) { f(signal[0]); } } return sink(signal); }); }; }; }; var tapAll$1 = function tapAll(onStart, onPush, onEnd) { return function(source) { return function(sink) { var ended = [!1]; return _1(source, function(signal) { if ("number" == typeof signal) { if (ended[0]) { return 0; } else { ended[0] = !0; return onEnd(); } } else if (signal.tag) { onPush(signal[0]); return sink(signal); } else { var talkback = signal[0]; onStart(); return sink( __(0, [ function(signal) { if (signal) { if (ended[0]) { return 0; } else { ended[0] = !0; return onEnd(); } } else { return talkback(signal); } } ]) ); } }); }; }; }; var publish$1 = function publish(source) { var state = [talkbackPlaceholder, !1]; _1(source, function(signal) { if ("number" == typeof signal) { state[1] = !0; return 0; } else if (signal.tag) { if (state[1]) { return 0; } else { return state[0](0); } } else { var x = signal[0]; state[0] = x; return x(0); } }); return [ function(param) { if (state[1]) { return 0; } else { state[1] = !0; return state[0](1); } } ]; }; var subscribe$1 = subscribe; var forEach$1 = function forEach(f) { return function(source) { subscribe(f)(source); return 0; }; }; var debounce$2 = function debounce(f) { return function(source) { return function(sink) { var gotEndSignal = [!1]; var id = [void 0]; var $$clearTimeout$1 = function(param) { var match = id[0]; if (void 0 !== match) { id[0] = void 0; clearTimeout(valFromOption(match)); return 0; } else { return 0; } }; return _1(source, function(signal) { if ("number" == typeof signal) { gotEndSignal[0] = !0; if (void 0 !== id[0]) { return 0; } else { return sink(0); } } else if (signal.tag) { $$clearTimeout$1(); id[0] = some( setTimeout(function(param) { id[0] = void 0; sink(signal); if (gotEndSignal[0]) { return sink(0); } else { return 0; } }, f(signal[0])) ); return 0; } else { var tb = signal[0]; return sink( __(0, [ function(signal) { if (signal) { $$clearTimeout$1(); return tb(1); } else { return tb(signal); } } ]) ); } }); }; }; }; var delay$2 = function delay(wait) { return function(source) { return function(sink) { var state = [talkbackPlaceholder, 0, !1]; _1(source, function(signal) { var exit = 0; if ("number" == typeof signal || signal.tag) { exit = 1; } else { state[0] = signal[0]; return 0; } if (1 === exit) { if (state[2]) { return 0; } else { state[1] = (state[1] + 1) | 0; setTimeout(function(param) { if (state[2] && 0 === state[1]) { sink(0); } else { state[1] = (state[1] - 1) | 0; } return sink(signal); }, wait); return 0; } } }); return sink( __(0, [ function(signal) { if (signal) { state[2] = !0; if (0 === state[1]) { return sink(0); } else { return 0; } } else if (state[2]) { return 0; } else { return state[0](signal); } } ]) ); }; }; }; var interval$2 = function interval(p) { return function(sink) { var i = [0]; var id = setInterval(function(param) { var num = i[0]; i[0] = (i[0] + 1) | 0; return sink(__(1, [num])); }, p); return sink( __(0, [ function(signal) { if (signal) { clearInterval(id); return 0; } else { return 0; } } ]) ); }; }; var sample$2 = function sample(notifier) { return function(source) { return function(sink) { var state = [ !1, void 0, function(param) { return 0; }, function(param) { return 0; } ]; _1(source, function(signal) { if ("number" == typeof signal) { state[0] = !0; state[3](1); return sink(0); } else if (signal.tag) { state[1] = some(signal[0]); return 0; } else { state[2] = signal[0]; return 0; } }); _1(notifier, function(signal) { var match = state[1]; if ("number" == typeof signal) { state[0] = !0; state[2](1); return sink(0); } else if (signal.tag) { if (void 0 !== match && !state[0]) { state[1] = void 0; return sink(__(1, [valFromOption(match)])); } else { return 0; } } else { state[3] = signal[0]; return 0; } }); return sink( __(0, [ function(signal) { if (signal) { state[0] = !0; state[2](1); return state[3](1); } else { state[2](0); return state[3](0); } } ]) ); }; }; }; var throttle$2 = function throttle(f) { return function(source) { return function(sink) { var skip = [!1]; var id = [void 0]; var $$clearTimeout$1 = function(param) { var match = id[0]; if (void 0 !== match) { clearTimeout(valFromOption(match)); return 0; } else { return 0; } }; return _1(source, function(signal) { if ("number" == typeof signal) { $$clearTimeout$1(); return sink(0); } else if (signal.tag) { if (skip[0]) { return 0; } else { skip[0] = !0; $$clearTimeout$1(); id[0] = some( setTimeout(function(param) { id[0] = void 0; skip[0] = !1; return 0; }, f(signal[0])) ); return sink(signal); } } else { var tb = signal[0]; return sink( __(0, [ function(signal) { if (signal) { $$clearTimeout$1(); return tb(1); } else { return tb(signal); } } ]) ); } }); }; }; }; var toPromise$2 = toPromise$1; var fromDomEvent$2 = function fromDomEvent(element, $$event) { return function(sink) { var addEventListener = function(element, event, handler) { element.addEventListener(event, handler); }; var removeEventListener = function(element, event, handler) { element.removeEventListener(event, handler); }; return fromListener( function(handler) { return _3(addEventListener, element, $$event, handler); }, function(handler) { return _3(removeEventListener, element, $$event, handler); } )(sink); }; }; var fromListener$2 = fromListener; var fromPromise$2 = function fromPromise(promise) { return function(sink) { var ended = [!1]; promise.then(function(value) { if (!ended[0]) { sink(__(1, [value])); sink(0); } return Promise.resolve(0); }); return sink( __(0, [ function(signal) { if (signal) { ended[0] = !0; return 0; } else { return 0; } } ]) ); }; }; exports.pipe = function pipe(source) { var args = arguments; var len = args.length; var x = source; for (var i = 1; i < len; i++) { x = args[i](x); } return x; }; exports.Types = 0; exports.fromArray = fromArray$1; exports.fromList = fromList$1; exports.fromValue = fromValue$1; exports.make = make$1; exports.makeSubject = makeSubject$1; exports.empty = empty$1; exports.never = never$1; exports.combine = combine$1; exports.concatMap = concatMap$1; exports.concat = concat$1; exports.concatAll = concatAll$1; exports.filter = filter$1; exports.map = map$1; exports.mergeMap = mergeMap$1; exports.merge = merge$1; exports.mergeAll = mergeAll$1; exports.flatten = flatten$1; exports.scan = scan$1; exports.share = share$1; exports.skip = skip$1; exports.skipUntil = skipUntil$1; exports.skipWhile = skipWhile$1; exports.switchMap = switchMap$1; exports.switchAll = switchAll$1; exports.take = take$1; exports.takeLast = takeLast$1; exports.takeUntil = takeUntil$1; exports.takeWhile = takeWhile$1; exports.tap = tap$1; exports.tapAll = tapAll$1; exports.publish = publish$1; exports.subscribe = subscribe$1; exports.forEach = forEach$1; exports.debounce = debounce$2; exports.delay = delay$2; exports.interval = interval$2; exports.sample = sample$2; exports.throttle = throttle$2; exports.toPromise = toPromise$2; exports.fromDomEvent = fromDomEvent$2; exports.fromListener = fromListener$2; exports.fromPromise = fromPromise$2;