wonka
Version:
A fast push & pull stream library for Reason, loosely following the [callbag spec](https://github.com/callbag/callbag)
60 lines (54 loc) • 2.12 kB
JavaScript
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";
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);
}
})]));
});
}
export {
share ,
}
/* No side effect */