xstream
Version:
An extremely intuitive, small, and fast functional reactive stream library for JavaScript
1,243 lines (1,199 loc) • 34.7 kB
JavaScript
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.xstream = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
"use strict";
var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
var NO = {};
function noop() { }
function copy(a) {
var l = a.length;
var b = Array(l);
for (var i = 0; i < l; ++i) {
b[i] = a[i];
}
return b;
}
exports.NO_IL = {
_n: noop,
_e: noop,
_c: noop,
};
function internalizeProducer(producer) {
producer._start =
function _start(il) {
il.next = il._n;
il.error = il._e;
il.complete = il._c;
this.start(il);
};
producer._stop = producer.stop;
}
function compose2(f1, f2) {
return function composedFn(arg) {
return f1(f2(arg));
};
}
function and(f1, f2) {
return function andFn(t) {
return f1(t) && f2(t);
};
}
var MergeProducer = (function () {
function MergeProducer(insArr) {
this.type = 'merge';
this.insArr = insArr;
this.out = NO;
this.ac = 0;
}
MergeProducer.prototype._start = function (out) {
this.out = out;
var s = this.insArr;
var L = s.length;
this.ac = L;
for (var i = 0; i < L; i++) {
s[i]._add(this);
}
};
MergeProducer.prototype._stop = function () {
var s = this.insArr;
var L = s.length;
for (var i = 0; i < L; i++) {
s[i]._remove(this);
}
this.out = NO;
};
MergeProducer.prototype._n = function (t) {
var u = this.out;
if (u === NO)
return;
u._n(t);
};
MergeProducer.prototype._e = function (err) {
var u = this.out;
if (u === NO)
return;
u._e(err);
};
MergeProducer.prototype._c = function () {
if (--this.ac <= 0) {
var u = this.out;
if (u === NO)
return;
u._c();
}
};
return MergeProducer;
}());
exports.MergeProducer = MergeProducer;
var CombineListener = (function () {
function CombineListener(i, out, p) {
this.i = i;
this.out = out;
this.p = p;
p.ils.push(this);
}
CombineListener.prototype._n = function (t) {
var p = this.p, out = this.out;
if (!out)
return;
if (p.up(t, this.i)) {
out._n(p.vals);
}
};
CombineListener.prototype._e = function (err) {
var out = this.out;
if (!out)
return;
out._e(err);
};
CombineListener.prototype._c = function () {
var p = this.p;
if (!p.out)
return;
if (--p.Nc === 0) {
p.out._c();
}
};
return CombineListener;
}());
exports.CombineListener = CombineListener;
var CombineProducer = (function () {
function CombineProducer(insArr) {
this.type = 'combine';
this.insArr = insArr;
this.out = NO;
this.ils = [];
this.Nc = this.Nn = 0;
this.vals = [];
}
CombineProducer.prototype.up = function (t, i) {
var v = this.vals[i];
var Nn = !this.Nn ? 0 : v === NO ? --this.Nn : this.Nn;
this.vals[i] = t;
return Nn === 0;
};
CombineProducer.prototype._start = function (out) {
this.out = out;
var s = this.insArr;
var n = this.Nc = this.Nn = s.length;
var vals = this.vals = new Array(n);
if (n === 0) {
out._n([]);
out._c();
}
else {
for (var i = 0; i < n; i++) {
vals[i] = NO;
s[i]._add(new CombineListener(i, out, this));
}
}
};
CombineProducer.prototype._stop = function () {
var s = this.insArr;
var n = s.length;
for (var i = 0; i < n; i++) {
s[i]._remove(this.ils[i]);
}
this.out = NO;
this.ils = [];
this.vals = [];
};
return CombineProducer;
}());
exports.CombineProducer = CombineProducer;
var FromArrayProducer = (function () {
function FromArrayProducer(a) {
this.type = 'fromArray';
this.a = a;
}
FromArrayProducer.prototype._start = function (out) {
var a = this.a;
for (var i = 0, l = a.length; i < l; i++) {
out._n(a[i]);
}
out._c();
};
FromArrayProducer.prototype._stop = function () {
};
return FromArrayProducer;
}());
exports.FromArrayProducer = FromArrayProducer;
var FromPromiseProducer = (function () {
function FromPromiseProducer(p) {
this.type = 'fromPromise';
this.on = false;
this.p = p;
}
FromPromiseProducer.prototype._start = function (out) {
var prod = this;
this.on = true;
this.p.then(function (v) {
if (prod.on) {
out._n(v);
out._c();
}
}, function (e) {
out._e(e);
}).then(null, function (err) {
setTimeout(function () { throw err; });
});
};
FromPromiseProducer.prototype._stop = function () {
this.on = false;
};
return FromPromiseProducer;
}());
exports.FromPromiseProducer = FromPromiseProducer;
var PeriodicProducer = (function () {
function PeriodicProducer(period) {
this.type = 'periodic';
this.period = period;
this.intervalID = -1;
this.i = 0;
}
PeriodicProducer.prototype._start = function (stream) {
var self = this;
function intervalHandler() { stream._n(self.i++); }
this.intervalID = setInterval(intervalHandler, this.period);
};
PeriodicProducer.prototype._stop = function () {
if (this.intervalID !== -1)
clearInterval(this.intervalID);
this.intervalID = -1;
this.i = 0;
};
return PeriodicProducer;
}());
exports.PeriodicProducer = PeriodicProducer;
var DebugOperator = (function () {
function DebugOperator(arg, ins) {
this.type = 'debug';
this.ins = ins;
this.out = NO;
this.s = noop;
this.l = '';
if (typeof arg === 'string') {
this.l = arg;
}
else if (typeof arg === 'function') {
this.s = arg;
}
}
DebugOperator.prototype._start = function (out) {
this.out = out;
this.ins._add(this);
};
DebugOperator.prototype._stop = function () {
this.ins._remove(this);
this.out = NO;
};
DebugOperator.prototype._n = function (t) {
var u = this.out;
if (u === NO)
return;
var s = this.s, l = this.l;
if (s !== noop) {
try {
s(t);
}
catch (e) {
u._e(e);
}
}
else if (l) {
console.log(l + ':', t);
}
else {
console.log(t);
}
u._n(t);
};
DebugOperator.prototype._e = function (err) {
var u = this.out;
if (u === NO)
return;
u._e(err);
};
DebugOperator.prototype._c = function () {
var u = this.out;
if (u === NO)
return;
u._c();
};
return DebugOperator;
}());
exports.DebugOperator = DebugOperator;
var DropOperator = (function () {
function DropOperator(max, ins) {
this.type = 'drop';
this.ins = ins;
this.out = NO;
this.max = max;
this.dropped = 0;
}
DropOperator.prototype._start = function (out) {
this.out = out;
this.dropped = 0;
this.ins._add(this);
};
DropOperator.prototype._stop = function () {
this.ins._remove(this);
this.out = NO;
};
DropOperator.prototype._n = function (t) {
var u = this.out;
if (u === NO)
return;
if (this.dropped++ >= this.max)
u._n(t);
};
DropOperator.prototype._e = function (err) {
var u = this.out;
if (u === NO)
return;
u._e(err);
};
DropOperator.prototype._c = function () {
var u = this.out;
if (u === NO)
return;
u._c();
};
return DropOperator;
}());
exports.DropOperator = DropOperator;
var OtherIL = (function () {
function OtherIL(out, op) {
this.out = out;
this.op = op;
}
OtherIL.prototype._n = function (t) {
this.op.end();
};
OtherIL.prototype._e = function (err) {
this.out._e(err);
};
OtherIL.prototype._c = function () {
this.op.end();
};
return OtherIL;
}());
var EndWhenOperator = (function () {
function EndWhenOperator(o, ins) {
this.type = 'endWhen';
this.ins = ins;
this.out = NO;
this.o = o;
this.oil = exports.NO_IL;
}
EndWhenOperator.prototype._start = function (out) {
this.out = out;
this.o._add(this.oil = new OtherIL(out, this));
this.ins._add(this);
};
EndWhenOperator.prototype._stop = function () {
this.ins._remove(this);
this.o._remove(this.oil);
this.out = NO;
this.oil = exports.NO_IL;
};
EndWhenOperator.prototype.end = function () {
var u = this.out;
if (u === NO)
return;
u._c();
};
EndWhenOperator.prototype._n = function (t) {
var u = this.out;
if (u === NO)
return;
u._n(t);
};
EndWhenOperator.prototype._e = function (err) {
var u = this.out;
if (u === NO)
return;
u._e(err);
};
EndWhenOperator.prototype._c = function () {
this.end();
};
return EndWhenOperator;
}());
exports.EndWhenOperator = EndWhenOperator;
var FilterOperator = (function () {
function FilterOperator(passes, ins) {
this.type = 'filter';
this.ins = ins;
this.out = NO;
this.passes = passes;
}
FilterOperator.prototype._start = function (out) {
this.out = out;
this.ins._add(this);
};
FilterOperator.prototype._stop = function () {
this.ins._remove(this);
this.out = NO;
};
FilterOperator.prototype._n = function (t) {
var u = this.out;
if (u === NO)
return;
try {
if (this.passes(t))
u._n(t);
}
catch (e) {
u._e(e);
}
};
FilterOperator.prototype._e = function (err) {
var u = this.out;
if (u === NO)
return;
u._e(err);
};
FilterOperator.prototype._c = function () {
var u = this.out;
if (u === NO)
return;
u._c();
};
return FilterOperator;
}());
exports.FilterOperator = FilterOperator;
var FlattenListener = (function () {
function FlattenListener(out, op) {
this.out = out;
this.op = op;
}
FlattenListener.prototype._n = function (t) {
this.out._n(t);
};
FlattenListener.prototype._e = function (err) {
this.out._e(err);
};
FlattenListener.prototype._c = function () {
this.op.inner = NO;
this.op.less();
};
return FlattenListener;
}());
var FlattenOperator = (function () {
function FlattenOperator(ins) {
this.type = 'flatten';
this.ins = ins;
this.out = NO;
this.open = true;
this.inner = NO;
this.il = exports.NO_IL;
}
FlattenOperator.prototype._start = function (out) {
this.out = out;
this.open = true;
this.inner = NO;
this.il = exports.NO_IL;
this.ins._add(this);
};
FlattenOperator.prototype._stop = function () {
this.ins._remove(this);
if (this.inner !== NO)
this.inner._remove(this.il);
this.out = NO;
this.open = true;
this.inner = NO;
this.il = exports.NO_IL;
};
FlattenOperator.prototype.less = function () {
var u = this.out;
if (u === NO)
return;
if (!this.open && this.inner === NO)
u._c();
};
FlattenOperator.prototype._n = function (s) {
var u = this.out;
if (u === NO)
return;
var _a = this, inner = _a.inner, il = _a.il;
if (inner !== NO && il !== exports.NO_IL)
inner._remove(il);
(this.inner = s)._add(this.il = new FlattenListener(u, this));
};
FlattenOperator.prototype._e = function (err) {
var u = this.out;
if (u === NO)
return;
u._e(err);
};
FlattenOperator.prototype._c = function () {
this.open = false;
this.less();
};
return FlattenOperator;
}());
exports.FlattenOperator = FlattenOperator;
var FoldOperator = (function () {
function FoldOperator(f, seed, ins) {
this.type = 'fold';
this.ins = ins;
this.out = NO;
this.f = f;
this.acc = this.seed = seed;
}
FoldOperator.prototype._start = function (out) {
this.out = out;
this.acc = this.seed;
out._n(this.acc);
this.ins._add(this);
};
FoldOperator.prototype._stop = function () {
this.ins._remove(this);
this.out = NO;
this.acc = this.seed;
};
FoldOperator.prototype._n = function (t) {
var u = this.out;
if (u === NO)
return;
try {
u._n(this.acc = this.f(this.acc, t));
}
catch (e) {
u._e(e);
}
};
FoldOperator.prototype._e = function (err) {
var u = this.out;
if (u === NO)
return;
u._e(err);
};
FoldOperator.prototype._c = function () {
var u = this.out;
if (u === NO)
return;
u._c();
};
return FoldOperator;
}());
exports.FoldOperator = FoldOperator;
var LastOperator = (function () {
function LastOperator(ins) {
this.type = 'last';
this.ins = ins;
this.out = NO;
this.has = false;
this.val = NO;
}
LastOperator.prototype._start = function (out) {
this.out = out;
this.has = false;
this.ins._add(this);
};
LastOperator.prototype._stop = function () {
this.ins._remove(this);
this.out = NO;
this.val = NO;
};
LastOperator.prototype._n = function (t) {
this.has = true;
this.val = t;
};
LastOperator.prototype._e = function (err) {
var u = this.out;
if (u === NO)
return;
u._e(err);
};
LastOperator.prototype._c = function () {
var u = this.out;
if (u === NO)
return;
if (this.has) {
u._n(this.val);
u._c();
}
else {
u._e('TODO show proper error');
}
};
return LastOperator;
}());
exports.LastOperator = LastOperator;
var MapFlattenInner = (function () {
function MapFlattenInner(out, op) {
this.out = out;
this.op = op;
}
MapFlattenInner.prototype._n = function (r) {
this.out._n(r);
};
MapFlattenInner.prototype._e = function (err) {
this.out._e(err);
};
MapFlattenInner.prototype._c = function () {
this.op.inner = NO;
this.op.less();
};
return MapFlattenInner;
}());
var MapFlattenOperator = (function () {
function MapFlattenOperator(mapOp) {
this.type = mapOp.type + "+flatten";
this.ins = mapOp.ins;
this.out = NO;
this.mapOp = mapOp;
this.inner = NO;
this.il = exports.NO_IL;
this.open = true;
}
MapFlattenOperator.prototype._start = function (out) {
this.out = out;
this.inner = NO;
this.il = exports.NO_IL;
this.open = true;
this.mapOp.ins._add(this);
};
MapFlattenOperator.prototype._stop = function () {
this.mapOp.ins._remove(this);
if (this.inner !== NO)
this.inner._remove(this.il);
this.out = NO;
this.inner = NO;
this.il = exports.NO_IL;
};
MapFlattenOperator.prototype.less = function () {
if (!this.open && this.inner === NO) {
var u = this.out;
if (u === NO)
return;
u._c();
}
};
MapFlattenOperator.prototype._n = function (v) {
var u = this.out;
if (u === NO)
return;
var _a = this, inner = _a.inner, il = _a.il;
var s;
try {
s = this.mapOp.project(v);
}
catch (e) {
u._e(e);
return;
}
if (inner !== NO && il !== exports.NO_IL)
inner._remove(il);
(this.inner = s)._add(this.il = new MapFlattenInner(u, this));
};
MapFlattenOperator.prototype._e = function (err) {
var u = this.out;
if (u === NO)
return;
u._e(err);
};
MapFlattenOperator.prototype._c = function () {
this.open = false;
this.less();
};
return MapFlattenOperator;
}());
exports.MapFlattenOperator = MapFlattenOperator;
var MapOperator = (function () {
function MapOperator(project, ins) {
this.type = 'map';
this.ins = ins;
this.out = NO;
this.project = project;
}
MapOperator.prototype._start = function (out) {
this.out = out;
this.ins._add(this);
};
MapOperator.prototype._stop = function () {
this.ins._remove(this);
this.out = NO;
};
MapOperator.prototype._n = function (t) {
var u = this.out;
if (u === NO)
return;
try {
u._n(this.project(t));
}
catch (e) {
u._e(e);
}
};
MapOperator.prototype._e = function (err) {
var u = this.out;
if (u === NO)
return;
u._e(err);
};
MapOperator.prototype._c = function () {
var u = this.out;
if (u === NO)
return;
u._c();
};
return MapOperator;
}());
exports.MapOperator = MapOperator;
var FilterMapOperator = (function (_super) {
__extends(FilterMapOperator, _super);
function FilterMapOperator(passes, project, ins) {
_super.call(this, project, ins);
this.type = 'filter+map';
this.passes = passes;
}
FilterMapOperator.prototype._n = function (v) {
if (this.passes(v)) {
_super.prototype._n.call(this, v);
}
;
};
return FilterMapOperator;
}(MapOperator));
exports.FilterMapOperator = FilterMapOperator;
var RememberOperator = (function () {
function RememberOperator(ins) {
this.type = 'remember';
this.ins = ins;
this.out = NO;
}
RememberOperator.prototype._start = function (out) {
this.out = out;
this.ins._add(out);
};
RememberOperator.prototype._stop = function () {
this.ins._remove(this.out);
this.out = NO;
};
return RememberOperator;
}());
exports.RememberOperator = RememberOperator;
var ReplaceErrorOperator = (function () {
function ReplaceErrorOperator(fn, ins) {
this.type = 'replaceError';
this.ins = ins;
this.out = NO;
this.fn = fn;
}
ReplaceErrorOperator.prototype._start = function (out) {
this.out = out;
this.ins._add(this);
};
ReplaceErrorOperator.prototype._stop = function () {
this.ins._remove(this);
this.out = NO;
};
ReplaceErrorOperator.prototype._n = function (t) {
var u = this.out;
if (u === NO)
return;
u._n(t);
};
ReplaceErrorOperator.prototype._e = function (err) {
var u = this.out;
if (u === NO)
return;
try {
this.ins._remove(this);
(this.ins = this.fn(err))._add(this);
}
catch (e) {
u._e(e);
}
};
ReplaceErrorOperator.prototype._c = function () {
var u = this.out;
if (u === NO)
return;
u._c();
};
return ReplaceErrorOperator;
}());
exports.ReplaceErrorOperator = ReplaceErrorOperator;
var StartWithOperator = (function () {
function StartWithOperator(ins, val) {
this.type = 'startWith';
this.ins = ins;
this.out = NO;
this.val = val;
}
StartWithOperator.prototype._start = function (out) {
this.out = out;
this.out._n(this.val);
this.ins._add(out);
};
StartWithOperator.prototype._stop = function () {
this.ins._remove(this.out);
this.out = NO;
};
return StartWithOperator;
}());
exports.StartWithOperator = StartWithOperator;
var TakeOperator = (function () {
function TakeOperator(max, ins) {
this.type = 'take';
this.ins = ins;
this.out = NO;
this.max = max;
this.taken = 0;
}
TakeOperator.prototype._start = function (out) {
this.out = out;
this.taken = 0;
if (this.max <= 0) {
out._c();
}
else {
this.ins._add(this);
}
};
TakeOperator.prototype._stop = function () {
this.ins._remove(this);
this.out = NO;
};
TakeOperator.prototype._n = function (t) {
var u = this.out;
if (u === NO)
return;
if (this.taken++ < this.max - 1) {
u._n(t);
}
else {
u._n(t);
u._c();
}
};
TakeOperator.prototype._e = function (err) {
var u = this.out;
if (u === NO)
return;
u._e(err);
};
TakeOperator.prototype._c = function () {
var u = this.out;
if (u === NO)
return;
u._c();
};
return TakeOperator;
}());
exports.TakeOperator = TakeOperator;
var Stream = (function () {
function Stream(producer) {
this._prod = producer || NO;
this._ils = [];
this._stopID = NO;
this._target = NO;
this._err = NO;
}
Stream.prototype._n = function (t) {
var a = this._ils;
var L = a.length;
if (L == 1)
a[0]._n(t);
else {
var b = copy(a);
for (var i = 0; i < L; i++)
b[i]._n(t);
}
};
Stream.prototype._e = function (err) {
if (this._err !== NO)
return;
this._err = err;
var a = this._ils;
var L = a.length;
if (L == 1)
a[0]._e(err);
else {
var b = copy(a);
for (var i = 0; i < L; i++)
b[i]._e(err);
}
this._x();
};
Stream.prototype._c = function () {
var a = this._ils;
var L = a.length;
if (L == 1)
a[0]._c();
else {
var b = copy(a);
for (var i = 0; i < L; i++)
b[i]._c();
}
this._x();
};
Stream.prototype._x = function () {
if (this._ils.length === 0)
return;
if (this._prod !== NO)
this._prod._stop();
this._err = NO;
this._ils = [];
};
Stream.prototype._stopNow = function () {
this._prod._stop();
this._err = NO;
this._stopID = NO;
};
Stream.prototype._add = function (il) {
var ta = this._target;
if (ta !== NO)
return ta._add(il);
var a = this._ils;
a.push(il);
if (a.length === 1) {
if (this._stopID !== NO) {
clearTimeout(this._stopID);
this._stopID = NO;
}
var p = this._prod;
if (p !== NO)
p._start(this);
}
};
Stream.prototype._remove = function (il) {
var _this = this;
var ta = this._target;
if (ta !== NO)
return ta._remove(il);
var a = this._ils;
var i = a.indexOf(il);
if (i > -1) {
a.splice(i, 1);
if (this._prod !== NO && a.length <= 0) {
this._err = NO;
this._stopID = setTimeout(function () { return _this._stopNow(); });
}
else if (a.length === 1) {
this._pruneCycles();
}
}
};
Stream.prototype._pruneCycles = function () {
if (this._hasNoSinks(this, [])) {
this._remove(this._ils[0]);
}
};
Stream.prototype._hasNoSinks = function (x, trace) {
if (trace.indexOf(x) !== -1) {
return true;
}
else if (x.out === this) {
return true;
}
else if (x.out && x.out !== NO) {
return this._hasNoSinks(x.out, trace.concat(x));
}
else if (x._ils) {
for (var i = 0, N = x._ils.length; i < N; i++) {
if (!this._hasNoSinks(x._ils[i], trace.concat(x))) {
return false;
}
}
return true;
}
else {
return false;
}
};
Stream.prototype.ctor = function () {
return this instanceof MemoryStream ? MemoryStream : Stream;
};
Stream.prototype.addListener = function (listener) {
if (typeof listener.next !== 'function'
|| typeof listener.error !== 'function'
|| typeof listener.complete !== 'function') {
throw new Error('stream.addListener() requires all three next, error, ' +
'and complete functions.');
}
listener._n = listener.next;
listener._e = listener.error;
listener._c = listener.complete;
this._add(listener);
};
Stream.prototype.removeListener = function (listener) {
this._remove(listener);
};
Stream.create = function (producer) {
if (producer) {
if (typeof producer.start !== 'function'
|| typeof producer.stop !== 'function') {
throw new Error('producer requires both start and stop functions');
}
internalizeProducer(producer);
}
return new Stream(producer);
};
Stream.createWithMemory = function (producer) {
if (producer) {
internalizeProducer(producer);
}
return new MemoryStream(producer);
};
Stream.never = function () {
return new Stream({ _start: noop, _stop: noop });
};
Stream.empty = function () {
return new Stream({
_start: function (il) { il._c(); },
_stop: noop,
});
};
Stream.throw = function (error) {
return new Stream({
_start: function (il) { il._e(error); },
_stop: noop,
});
};
Stream.of = function () {
var items = [];
for (var _i = 0; _i < arguments.length; _i++) {
items[_i - 0] = arguments[_i];
}
return Stream.fromArray(items);
};
Stream.fromArray = function (array) {
return new Stream(new FromArrayProducer(array));
};
Stream.fromPromise = function (promise) {
return new Stream(new FromPromiseProducer(promise));
};
Stream.periodic = function (period) {
return new Stream(new PeriodicProducer(period));
};
Stream.prototype._map = function (project) {
var p = this._prod;
var ctor = this.ctor();
if (p instanceof FilterOperator) {
return new ctor(new FilterMapOperator(p.passes, project, p.ins));
}
if (p instanceof FilterMapOperator) {
return new ctor(new FilterMapOperator(p.passes, compose2(project, p.project), p.ins));
}
if (p instanceof MapOperator) {
return new ctor(new MapOperator(compose2(project, p.project), p.ins));
}
return new ctor(new MapOperator(project, this));
};
Stream.prototype.map = function (project) {
return this._map(project);
};
Stream.prototype.mapTo = function (projectedValue) {
var s = this.map(function () { return projectedValue; });
var op = s._prod;
op.type = op.type.replace('map', 'mapTo');
return s;
};
Stream.prototype.filter = function (passes) {
var p = this._prod;
if (p instanceof FilterOperator) {
return new Stream(new FilterOperator(and(p.passes, passes), p.ins));
}
return new Stream(new FilterOperator(passes, this));
};
Stream.prototype.take = function (amount) {
return new (this.ctor())(new TakeOperator(amount, this));
};
Stream.prototype.drop = function (amount) {
return new Stream(new DropOperator(amount, this));
};
Stream.prototype.last = function () {
return new Stream(new LastOperator(this));
};
Stream.prototype.startWith = function (initial) {
return new MemoryStream(new StartWithOperator(this, initial));
};
Stream.prototype.endWhen = function (other) {
return new (this.ctor())(new EndWhenOperator(other, this));
};
Stream.prototype.fold = function (accumulate, seed) {
return new MemoryStream(new FoldOperator(accumulate, seed, this));
};
Stream.prototype.replaceError = function (replace) {
return new (this.ctor())(new ReplaceErrorOperator(replace, this));
};
Stream.prototype.flatten = function () {
var p = this._prod;
return new Stream(p instanceof MapOperator && !(p instanceof FilterMapOperator) ?
new MapFlattenOperator(p) :
new FlattenOperator(this));
};
Stream.prototype.compose = function (operator) {
return operator(this);
};
Stream.prototype.remember = function () {
return new MemoryStream(new RememberOperator(this));
};
Stream.prototype.debug = function (labelOrSpy) {
return new (this.ctor())(new DebugOperator(labelOrSpy, this));
};
Stream.prototype.imitate = function (target) {
if (target instanceof MemoryStream) {
throw new Error('A MemoryStream was given to imitate(), but it only ' +
'supports a Stream. Read more about this restriction here: ' +
'https://github.com/staltz/xstream#faq');
}
this._target = target;
for (var ils = this._ils, N = ils.length, i = 0; i < N; i++) {
target._add(ils[i]);
}
this._ils = [];
};
Stream.prototype.shamefullySendNext = function (value) {
this._n(value);
};
Stream.prototype.shamefullySendError = function (error) {
this._e(error);
};
Stream.prototype.shamefullySendComplete = function () {
this._c();
};
Stream.merge = function merge() {
var streams = [];
for (var _i = 0; _i < arguments.length; _i++) {
streams[_i - 0] = arguments[_i];
}
return new Stream(new MergeProducer(streams));
};
Stream.combine = function combine() {
var streams = [];
for (var _i = 0; _i < arguments.length; _i++) {
streams[_i - 0] = arguments[_i];
}
return new Stream(new CombineProducer(streams));
};
return Stream;
}());
exports.Stream = Stream;
var MemoryStream = (function (_super) {
__extends(MemoryStream, _super);
function MemoryStream(producer) {
_super.call(this, producer);
this._has = false;
}
MemoryStream.prototype._n = function (x) {
this._v = x;
this._has = true;
_super.prototype._n.call(this, x);
};
MemoryStream.prototype._add = function (il) {
if (this._has) {
il._n(this._v);
}
_super.prototype._add.call(this, il);
};
MemoryStream.prototype._stopNow = function () {
this._has = false;
_super.prototype._stopNow.call(this);
};
MemoryStream.prototype._x = function () {
this._has = false;
_super.prototype._x.call(this);
};
MemoryStream.prototype.map = function (project) {
return this._map(project);
};
MemoryStream.prototype.mapTo = function (projectedValue) {
return _super.prototype.mapTo.call(this, projectedValue);
};
MemoryStream.prototype.take = function (amount) {
return _super.prototype.take.call(this, amount);
};
MemoryStream.prototype.endWhen = function (other) {
return _super.prototype.endWhen.call(this, other);
};
MemoryStream.prototype.replaceError = function (replace) {
return _super.prototype.replaceError.call(this, replace);
};
MemoryStream.prototype.remember = function () {
return this;
};
MemoryStream.prototype.debug = function (labelOrSpy) {
return _super.prototype.debug.call(this, labelOrSpy);
};
return MemoryStream;
}(Stream));
exports.MemoryStream = MemoryStream;
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = Stream;
},{}],2:[function(require,module,exports){
"use strict";
var core_1 = require('./core');
exports.Stream = core_1.Stream;
exports.MemoryStream = core_1.MemoryStream;
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = core_1.Stream;
},{"./core":1}]},{},[2])(2)
});