Socket
Socket
Sign inDemoInstall

rx

Package Overview
Dependencies
0
Maintainers
2
Versions
103
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 2.5.3 to 3.0.0

dist/rx.core.binding.js

26

bower.json
{
"name": "rxjs",
"version": "2.5.3",
"main": [
"dist/rx.all.js",
"dist/rx.all.compat.js",
"dist/rx.js",
"dist/rx.compat.js",
"dist/rx.aggregates.js",
"dist/rx.async.js",
"dist/rx.async.compat.js",
"dist/rx.backpressure.js",
"dist/rx.binding.js",
"dist/rx.coincidence.js",
"dist/rx.experimental.js",
"dist/rx.lite.js",
"dist/rx.lite.compat.js",
"dist/rx.joinpatterns.js",
"dist/rx.testing.js",
"dist/rx.time.js",
"dist/rx.virtualtime.js",
],
"main": "dist/rx.all.js",
"repository": {
"type": "git",
"url": "https://github.com/Reactive-Extensions/RxJS.git"
},
"license": "Apache-2.0",
"ignore": [

@@ -24,0 +10,0 @@ ".sh",

// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
;(function (factory) {
var objectTypes = {
'boolean': false,
'function': true,
'object': true,
'number': false,
'string': false,
'undefined': false
};
var objectTypes = {
'function': true,
'object': true
};
var root = (objectTypes[typeof window] && window) || this,
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = objectTypes[typeof global] && global;
var
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeSelf = objectTypes[typeof self] && self.Object && self,
freeWindow = objectTypes[typeof window] && window && window.Object && window,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global;
if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) {
root = freeGlobal;
}
var root = root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this;

@@ -40,2 +36,3 @@ // Because of build optimizers

AnonymousObservable = Rx.AnonymousObservable,
AbstractObserver = Rx.internals.AbstractObserver,
disposableEmpty = Rx.Disposable.empty,

@@ -119,46 +116,2 @@ isEqual = Rx.internals.isEqual,

/**
* Applies an accumulator function over an observable sequence, returning the result of the aggregation as a single element in the result sequence. The specified seed value is used as the initial accumulator value.
* For aggregation behavior with incremental intermediate results, see Observable.scan.
* @deprecated Use #reduce instead
* @param {Mixed} [seed] The initial accumulator value.
* @param {Function} accumulator An accumulator function to be invoked on each element.
* @returns {Observable} An observable sequence containing a single element with the final accumulator value.
*/
observableProto.aggregate = function () {
var hasSeed = false, accumulator, seed, source = this;
if (arguments.length === 2) {
hasSeed = true;
seed = arguments[0];
accumulator = arguments[1];
} else {
accumulator = arguments[0];
}
return new AnonymousObservable(function (o) {
var hasAccumulation, accumulation, hasValue;
return source.subscribe (
function (x) {
!hasValue && (hasValue = true);
try {
if (hasAccumulation) {
accumulation = accumulator(accumulation, x);
} else {
accumulation = hasSeed ? accumulator(seed, x) : x;
hasAccumulation = true;
}
} catch (e) {
return o.onError(e);
}
},
function (e) { o.onError(e); },
function () {
hasValue && o.onNext(accumulation);
!hasValue && hasSeed && o.onNext(seed);
!hasValue && !hasSeed && o.onError(new EmptyError());
o.onCompleted();
}
);
}, source);
};
var ReduceObservable = (function(__super__) {

@@ -240,2 +193,30 @@ inherits(ReduceObservable, __super__);

var SomeObserver = (function (__super__) {
inherits(SomeObserver, __super__);
function SomeObserver(o, fn, s) {
this._o = o;
this._fn = fn;
this._s = s;
this._i = 0;
__super__.call(this);
}
SomeObserver.prototype.next = function (x) {
var result = tryCatch(this._fn)(x, this._i++, this._s);
if (result === errorObj) { return this._o.onError(result.e); }
if (Boolean(result)) {
this._o.onNext(true);
this._o.onCompleted();
}
};
SomeObserver.prototype.error = function (e) { this._o.onError(e); };
SomeObserver.prototype.completed = function () {
this._o.onNext(false);
this._o.onCompleted();
};
return SomeObserver;
}(AbstractObserver));
/**

@@ -247,22 +228,28 @@ * Determines whether any element of an observable sequence satisfies a condition if present, else if any items are in the sequence.

observableProto.some = function (predicate, thisArg) {
var source = this;
return predicate ?
source.filter(predicate, thisArg).some() :
new AnonymousObservable(function (observer) {
return source.subscribe(function () {
observer.onNext(true);
observer.onCompleted();
}, function (e) { observer.onError(e); }, function () {
observer.onNext(false);
observer.onCompleted();
});
}, source);
var source = this, fn = bindCallback(predicate, thisArg, 3);
return new AnonymousObservable(function (o) {
return source.subscribe(new SomeObserver(o, fn, source));
});
};
/** @deprecated use #some instead */
observableProto.any = function () {
//deprecate('any', 'some');
return this.some.apply(this, arguments);
};
var IsEmptyObserver = (function(__super__) {
inherits(IsEmptyObserver, __super__);
function IsEmptyObserver(o) {
this._o = o;
__super__.call(this);
}
IsEmptyObserver.prototype.next = function () {
this._o.onNext(false);
this._o.onCompleted();
};
IsEmptyObserver.prototype.error = function (e) { this._o.onError(e); };
IsEmptyObserver.prototype.completed = function () {
this._o.onNext(true);
this._o.onCompleted();
};
return IsEmptyObserver;
}(AbstractObserver));
/**

@@ -273,5 +260,36 @@ * Determines whether an observable sequence is empty.

observableProto.isEmpty = function () {
return this.any().map(not);
var source = this;
return new AnonymousObservable(function (o) {
return source.subscribe(new IsEmptyObserver(o));
}, source);
};
var EveryObserver = (function (__super__) {
inherits(EveryObserver, __super__);
function EveryObserver(o, fn, s) {
this._o = o;
this._fn = fn;
this._s = s;
this._i = 0;
__super__.call(this);
}
EveryObserver.prototype.next = function (x) {
var result = tryCatch(this._fn)(x, this._i++, this._s);
if (result === errorObj) { return this._o.onError(result.e); }
if (!Boolean(result)) {
this._o.onNext(false);
this._o.onCompleted();
}
};
EveryObserver.prototype.error = function (e) { this._o.onError(e); };
EveryObserver.prototype.completed = function () {
this._o.onNext(true);
this._o.onCompleted();
};
return EveryObserver;
}(AbstractObserver));
/**

@@ -284,11 +302,8 @@ * Determines whether all elements of an observable sequence satisfy a condition.

observableProto.every = function (predicate, thisArg) {
return this.filter(function (v) { return !predicate(v); }, thisArg).some().map(not);
var source = this, fn = bindCallback(predicate, thisArg, 3);
return new AnonymousObservable(function (o) {
return source.subscribe(new EveryObserver(o, fn, source));
}, this);
};
/** @deprecated use #every instead */
observableProto.all = function () {
//deprecate('all', 'every');
return this.every.apply(this, arguments);
};
/**

@@ -447,2 +462,33 @@ * Determines whether an observable sequence includes a specified element with an optional equality comparer.

var AverageObserver = (function(__super__) {
inherits(AverageObserver, __super__);
function AverageObserver(o, fn, s) {
this._o = o;
this._fn = fn;
this._s = s;
this._c = 0;
this._t = 0;
__super__.call(this);
}
AverageObserver.prototype.next = function (x) {
if(this._fn) {
var r = tryCatch(this._fn)(x, this._c++, this._s);
if (r === errorObj) { return this._o.onError(r.e); }
this._t += r;
} else {
this._c++;
this._t += x;
}
};
AverageObserver.prototype.error = function (e) { this._o.onError(e); };
AverageObserver.prototype.completed = function () {
if (this._c === 0) { return this._o.onError(new EmptyError()); }
this._o.onNext(this._t / this._c);
this._o.onCompleted();
};
return AverageObserver;
}(AbstractObserver));
/**

@@ -455,13 +501,9 @@ * Computes the average of an observable sequence of values that are in the sequence or obtained by invoking a transform function on each element of the input sequence if present.

observableProto.average = function (keySelector, thisArg) {
return keySelector && isFunction(keySelector) ?
this.map(keySelector, thisArg).average() :
this.reduce(function (prev, cur) {
return {
sum: prev.sum + cur,
count: prev.count + 1
};
}, {sum: 0, count: 0 }).map(function (s) {
if (s.count === 0) { throw new EmptyError(); }
return s.sum / s.count;
});
var source = this, fn;
if (isFunction(keySelector)) {
fn = bindCallback(keySelector, thisArg, 3);
}
return new AnonymousObservable(function (o) {
return source.subscribe(new AverageObserver(o, fn, source));
}, source);
};

@@ -557,49 +599,43 @@

function elementAtOrDefault(source, index, hasDefault, defaultValue) {
/**
* Returns the element at a specified index in a sequence or default value if not found.
* @param {Number} index The zero-based index of the element to retrieve.
* @param {Any} [defaultValue] The default value to use if elementAt does not find a value.
* @returns {Observable} An observable sequence that produces the element at the specified position in the source sequence.
*/
observableProto.elementAt = function (index, defaultValue) {
if (index < 0) { throw new ArgumentOutOfRangeError(); }
var source = this;
return new AnonymousObservable(function (o) {
var i = index;
return source.subscribe(function (x) {
if (i-- === 0) {
o.onNext(x);
o.onCompleted();
}
}, function (e) { o.onError(e); }, function () {
if (!hasDefault) {
o.onError(new ArgumentOutOfRangeError());
} else {
o.onNext(defaultValue);
o.onCompleted();
}
return source.subscribe(
function (x) {
if (i-- === 0) {
o.onNext(x);
o.onCompleted();
}
},
function (e) { o.onError(e); },
function () {
if (defaultValue === undefined) {
o.onError(new ArgumentOutOfRangeError());
} else {
o.onNext(defaultValue);
o.onCompleted();
}
});
}, source);
}
/**
* Returns the element at a specified index in a sequence.
* @example
* var res = source.elementAt(5);
* @param {Number} index The zero-based index of the element to retrieve.
* @returns {Observable} An observable sequence that produces the element at the specified position in the source sequence.
*/
observableProto.elementAt = function (index) {
return elementAtOrDefault(this, index, false);
};
/**
* Returns the element at a specified index in a sequence or a default value if the index is out of range.
* @example
* var res = source.elementAtOrDefault(5);
* var res = source.elementAtOrDefault(5, 0);
* @param {Number} index The zero-based index of the element to retrieve.
* @param [defaultValue] The default value if the index is outside the bounds of the source sequence.
* @returns {Observable} An observable sequence that produces the element at the specified position in the source sequence, or a default value if the index is outside the bounds of the source sequence.
* Returns the only element of an observable sequence that satisfies the condition in the optional predicate, and reports an exception if there is not exactly one element in the observable sequence.
* @param {Function} [predicate] A predicate function to evaluate for elements in the source sequence.
* @param {Any} [thisArg] Object to use as `this` when executing the predicate.
* @returns {Observable} Sequence containing the single element in the observable sequence that satisfies the condition in the predicate.
*/
observableProto.elementAtOrDefault = function (index, defaultValue) {
return elementAtOrDefault(this, index, true, defaultValue);
};
function singleOrDefaultAsync(source, hasDefault, defaultValue) {
observableProto.single = function (predicate, thisArg) {
if (isFunction(predicate)) { return this.filter(predicate, thisArg).single(); }
var source = this;
return new AnonymousObservable(function (o) {
var value = defaultValue, seenValue = false;
var value, seenValue = false;
return source.subscribe(function (x) {

@@ -613,129 +649,119 @@ if (seenValue) {

}, function (e) { o.onError(e); }, function () {
if (!seenValue && !hasDefault) {
o.onError(new EmptyError());
} else {
o.onNext(value);
o.onCompleted();
}
o.onNext(value);
o.onCompleted();
});
}, source);
}
/**
* Returns the only element of an observable sequence that satisfies the condition in the optional predicate, and reports an exception if there is not exactly one element in the observable sequence.
* @param {Function} [predicate] A predicate function to evaluate for elements in the source sequence.
* @param {Any} [thisArg] Object to use as `this` when executing the predicate.
* @returns {Observable} Sequence containing the single element in the observable sequence that satisfies the condition in the predicate.
*/
observableProto.single = function (predicate, thisArg) {
return predicate && isFunction(predicate) ?
this.where(predicate, thisArg).single() :
singleOrDefaultAsync(this, false);
};
/**
* Returns the only element of an observable sequence that matches the predicate, or a default value if no such element exists; this method reports an exception if there is more than one element in the observable sequence.
* @example
* var res = res = source.singleOrDefault();
* var res = res = source.singleOrDefault(function (x) { return x === 42; });
* res = source.singleOrDefault(function (x) { return x === 42; }, 0);
* res = source.singleOrDefault(null, 0);
* @memberOf Observable#
* @param {Function} predicate A predicate function to evaluate for elements in the source sequence.
* @param [defaultValue] The default value if the index is outside the bounds of the source sequence.
* @param {Any} [thisArg] Object to use as `this` when executing the predicate.
* @returns {Observable} Sequence containing the single element in the observable sequence that satisfies the condition in the predicate, or a default value if no such element exists.
*/
observableProto.singleOrDefault = function (predicate, defaultValue, thisArg) {
return predicate && isFunction(predicate) ?
this.filter(predicate, thisArg).singleOrDefault(null, defaultValue) :
singleOrDefaultAsync(this, true, defaultValue);
};
var FirstObserver = (function(__super__) {
inherits(FirstObserver, __super__);
function FirstObserver(o, obj, s) {
this._o = o;
this._obj = obj;
this._s = s;
this._i = 0;
__super__.call(this);
}
function firstOrDefaultAsync(source, hasDefault, defaultValue) {
return new AnonymousObservable(function (o) {
return source.subscribe(function (x) {
o.onNext(x);
o.onCompleted();
}, function (e) { o.onError(e); }, function () {
if (!hasDefault) {
o.onError(new EmptyError());
} else {
o.onNext(defaultValue);
o.onCompleted();
FirstObserver.prototype.next = function (x) {
if (this._obj.predicate) {
var res = tryCatch(this._obj.predicate)(x, this._i++, this._s);
if (res === errorObj) { return this._o.onError(res.e); }
if (Boolean(res)) {
this._o.onNext(x);
this._o.onCompleted();
}
});
}, source);
}
} else if (!this._obj.predicate) {
this._o.onNext(x);
this._o.onCompleted();
}
};
FirstObserver.prototype.error = function (e) { this._o.onError(e); };
FirstObserver.prototype.completed = function () {
if (this._obj.defaultValue === undefined) {
this._o.onError(new EmptyError());
} else {
this._o.onNext(this._obj.defaultValue);
this._o.onCompleted();
}
};
return FirstObserver;
}(AbstractObserver));
/**
* Returns the first element of an observable sequence that satisfies the condition in the predicate if present else the first item in the sequence.
* @example
* var res = res = source.first();
* var res = res = source.first(function (x) { return x > 3; });
* @param {Function} [predicate] A predicate function to evaluate for elements in the source sequence.
* @param {Any} [thisArg] Object to use as `this` when executing the predicate.
* @returns {Observable} Sequence containing the first element in the observable sequence that satisfies the condition in the predicate if provided, else the first item in the sequence.
*/
observableProto.first = function (predicate, thisArg) {
return predicate ?
this.where(predicate, thisArg).first() :
firstOrDefaultAsync(this, false);
};
/**
* Returns the first element of an observable sequence that satisfies the condition in the predicate, or a default value if no such element exists.
* @param {Function} [predicate] A predicate function to evaluate for elements in the source sequence.
* @param {Any} [defaultValue] The default value if no such element exists. If not specified, defaults to null.
* @param {Any} [thisArg] Object to use as `this` when executing the predicate.
* @returns {Observable} Sequence containing the first element in the observable sequence that satisfies the condition in the predicate, or a default value if no such element exists.
*/
observableProto.firstOrDefault = function (predicate, defaultValue, thisArg) {
return predicate ?
this.where(predicate).firstOrDefault(null, defaultValue) :
firstOrDefaultAsync(this, true, defaultValue);
};
function lastOrDefaultAsync(source, hasDefault, defaultValue) {
observableProto.first = function () {
var obj = {}, source = this;
if (typeof arguments[0] === 'object') {
obj = arguments[0];
} else {
obj = {
predicate: arguments[0],
thisArg: arguments[1],
defaultValue: arguments[2]
};
}
if (isFunction (obj.predicate)) {
var fn = obj.predicate;
obj.predicate = bindCallback(fn, obj.thisArg, 3);
}
return new AnonymousObservable(function (o) {
var value = defaultValue, seenValue = false;
return source.subscribe(function (x) {
value = x;
seenValue = true;
}, function (e) { o.onError(e); }, function () {
if (!seenValue && !hasDefault) {
o.onError(new EmptyError());
} else {
o.onNext(value);
o.onCompleted();
}
});
return source.subscribe(new FirstObserver(o, obj, source));
}, source);
}
};
/**
* Returns the last element of an observable sequence that satisfies the condition in the predicate if specified, else the last element.
* @param {Function} [predicate] A predicate function to evaluate for elements in the source sequence.
* @param {Any} [thisArg] Object to use as `this` when executing the predicate.
* @returns {Observable} Sequence containing the last element in the observable sequence that satisfies the condition in the predicate.
*/
observableProto.last = function (predicate, thisArg) {
return predicate ?
this.where(predicate, thisArg).last() :
lastOrDefaultAsync(this, false);
observableProto.last = function () {
var obj = {}, source = this;
if (typeof arguments[0] === 'object') {
obj = arguments[0];
} else {
obj = {
predicate: arguments[0],
thisArg: arguments[1],
defaultValue: arguments[2]
};
}
if (isFunction (obj.predicate)) {
var fn = obj.predicate;
obj.predicate = bindCallback(fn, obj.thisArg, 3);
}
return new AnonymousObservable(function (o) {
var value, seenValue = false, i = 0;
return source.subscribe(
function (x) {
if (obj.predicate) {
var res = tryCatch(obj.predicate)(x, i++, source);
if (res === errorObj) { return o.onError(res.e); }
if (res) {
seenValue = true;
value = x;
}
} else if (!obj.predicate) {
seenValue = true;
value = x;
}
},
function (e) { o.onError(e); },
function () {
if (seenValue) {
o.onNext(value);
o.onCompleted();
}
else if (obj.defaultValue === undefined) {
o.onError(new EmptyError());
} else {
o.onNext(obj.defaultValue);
o.onCompleted();
}
});
}, source);
};
/**
* Returns the last element of an observable sequence that satisfies the condition in the predicate, or a default value if no such element exists.
* @param {Function} [predicate] A predicate function to evaluate for elements in the source sequence.
* @param [defaultValue] The default value if no such element exists. If not specified, defaults to null.
* @param {Any} [thisArg] Object to use as `this` when executing the predicate.
* @returns {Observable} Sequence containing the last element in the observable sequence that satisfies the condition in the predicate, or a default value if no such element exists.
*/
observableProto.lastOrDefault = function (predicate, defaultValue, thisArg) {
return predicate ?
this.where(predicate, thisArg).lastOrDefault(null, defaultValue) :
lastOrDefaultAsync(this, true, defaultValue);
};
function findValue (source, predicate, thisArg, yieldIndex) {

@@ -742,0 +768,0 @@ var callback = bindCallback(predicate, thisArg, 3);

/* Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.*/
(function(a){var b={"boolean":!1,"function":!0,object:!0,number:!1,string:!1,undefined:!1},c=b[typeof window]&&window||this,d=b[typeof exports]&&exports&&!exports.nodeType&&exports,e=b[typeof module]&&module&&!module.nodeType&&module,f=(e&&e.exports===d&&d,b[typeof global]&&global);!f||f.global!==f&&f.window!==f||(c=f),"function"==typeof define&&define.amd?define(["rx"],function(b,d){return a(c,d,b)}):"object"==typeof module&&module&&module.exports===d?module.exports=a(c,module.exports,require("./rx")):c.Rx=a(c,{},c.Rx)}).call(this,function(a,b,c,d){function e(){try{return n.apply(this,arguments)}catch(a){return J.e=a,J}}function f(a){if(!y(a))throw new TypeError("fn must be a function");return n=a,e}function g(a,b,c){return new r(function(d){var e=!1,f=null,g=[];return a.subscribe(function(a){var h,i;try{i=b(a)}catch(j){return void d.onError(j)}if(h=0,e)try{h=c(i,f)}catch(k){return void d.onError(k)}else e=!0,f=i;h>0&&(f=i,g=[]),h>=0&&g.push(a)},function(a){d.onError(a)},function(){d.onNext(g),d.onCompleted()})},a)}function h(a){if(0===a.length)throw new G;return a[0]}function i(a,b,c,d){if(0>b)throw new I;return new r(function(e){var f=b;return a.subscribe(function(a){0===f--&&(e.onNext(a),e.onCompleted())},function(a){e.onError(a)},function(){c?(e.onNext(d),e.onCompleted()):e.onError(new I)})},a)}function j(a,b,c){return new r(function(d){var e=c,f=!1;return a.subscribe(function(a){f?d.onError(new Error("Sequence contains more than one element")):(e=a,f=!0)},function(a){d.onError(a)},function(){f||b?(d.onNext(e),d.onCompleted()):d.onError(new G)})},a)}function k(a,b,c){return new r(function(d){return a.subscribe(function(a){d.onNext(a),d.onCompleted()},function(a){d.onError(a)},function(){b?(d.onNext(c),d.onCompleted()):d.onError(new G)})},a)}function l(a,b,c){return new r(function(d){var e=c,f=!1;return a.subscribe(function(a){e=a,f=!0},function(a){d.onError(a)},function(){f||b?(d.onNext(e),d.onCompleted()):d.onError(new G)})},a)}function m(a,b,c,e){var f=F(b,c,3);return new r(function(b){var c=0;return a.subscribe(function(d){var g;try{g=f(d,c,a)}catch(h){return void b.onError(h)}g?(b.onNext(e?c:d),b.onCompleted()):c++},function(a){b.onError(a)},function(){b.onNext(e?-1:d),b.onCompleted()})},a)}var n,o=c.Observable,p=o.prototype,q=c.CompositeDisposable,r=c.AnonymousObservable,s=c.Disposable.empty,t=(c.internals.isEqual,c.helpers),u=t.not,v=t.defaultComparer,w=t.identity,x=t.defaultSubComparer,y=t.isFunction,z=t.isPromise,A=t.isArrayLike,B=t.isIterable,C=c.internals.inherits,D=o.fromPromise,E=o.from,F=c.internals.bindCallback,G=c.EmptyError,H=c.ObservableBase,I=c.ArgumentOutOfRangeError,J={e:{}};p.aggregate=function(){var a,b,c=!1,d=this;return 2===arguments.length?(c=!0,b=arguments[0],a=arguments[1]):a=arguments[0],new r(function(e){var f,g,h;return d.subscribe(function(d){!h&&(h=!0);try{f?g=a(g,d):(g=c?a(b,d):d,f=!0)}catch(i){return e.onError(i)}},function(a){e.onError(a)},function(){h&&e.onNext(g),!h&&c&&e.onNext(b),!h&&!c&&e.onError(new G),e.onCompleted()})},d)};var K=function(a){function b(b,c,d,e){this.source=b,this.acc=c,this.hasSeed=d,this.seed=e,a.call(this)}function c(a,b){this.o=a,this.acc=b.acc,this.hasSeed=b.hasSeed,this.seed=b.seed,this.hasAccumulation=!1,this.result=null,this.hasValue=!1,this.isStopped=!1}return C(b,a),b.prototype.subscribeCore=function(a){return this.source.subscribe(new c(a,this))},c.prototype.onNext=function(a){this.isStopped||(!this.hasValue&&(this.hasValue=!0),this.hasAccumulation?this.result=f(this.acc)(this.result,a):(this.result=this.hasSeed?f(this.acc)(this.seed,a):a,this.hasAccumulation=!0),this.result===J&&this.o.onError(this.result.e))},c.prototype.onError=function(a){this.isStopped||(this.isStopped=!0,this.o.onError(a))},c.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.hasValue&&this.o.onNext(this.result),!this.hasValue&&this.hasSeed&&this.o.onNext(this.seed),!this.hasValue&&!this.hasSeed&&this.o.onError(new G),this.o.onCompleted())},c.prototype.dispose=function(){this.isStopped=!0},c.prototype.fail=function(a){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(a),!0)},b}(H);return p.reduce=function(a){var b=!1;if(2===arguments.length){b=!0;var c=arguments[1]}return new K(this,a,b,c)},p.some=function(a,b){var c=this;return a?c.filter(a,b).some():new r(function(a){return c.subscribe(function(){a.onNext(!0),a.onCompleted()},function(b){a.onError(b)},function(){a.onNext(!1),a.onCompleted()})},c)},p.any=function(){return this.some.apply(this,arguments)},p.isEmpty=function(){return this.any().map(u)},p.every=function(a,b){return this.filter(function(b){return!a(b)},b).some().map(u)},p.all=function(){return this.every.apply(this,arguments)},p.includes=function(a,b){function c(a,b){return 0===a&&0===b||a===b||isNaN(a)&&isNaN(b)}var d=this;return new r(function(e){var f=0,g=+b||0;return Math.abs(g)===1/0&&(g=0),0>g?(e.onNext(!1),e.onCompleted(),s):d.subscribe(function(b){f++>=g&&c(b,a)&&(e.onNext(!0),e.onCompleted())},function(a){e.onError(a)},function(){e.onNext(!1),e.onCompleted()})},this)},p.contains=function(a,b){p.includes(a,b)},p.count=function(a,b){return a?this.filter(a,b).count():this.reduce(function(a){return a+1},0)},p.indexOf=function(a,b){var c=this;return new r(function(d){var e=0,f=+b||0;return Math.abs(f)===1/0&&(f=0),0>f?(d.onNext(-1),d.onCompleted(),s):c.subscribe(function(b){e>=f&&b===a&&(d.onNext(e),d.onCompleted()),e++},function(a){d.onError(a)},function(){d.onNext(-1),d.onCompleted()})},c)},p.sum=function(a,b){return a&&y(a)?this.map(a,b).sum():this.reduce(function(a,b){return a+b},0)},p.minBy=function(a,b){return b||(b=x),g(this,a,function(a,c){return-1*b(a,c)})},p.min=function(a){return this.minBy(w,a).map(function(a){return h(a)})},p.maxBy=function(a,b){return b||(b=x),g(this,a,b)},p.max=function(a){return this.maxBy(w,a).map(function(a){return h(a)})},p.average=function(a,b){return a&&y(a)?this.map(a,b).average():this.reduce(function(a,b){return{sum:a.sum+b,count:a.count+1}},{sum:0,count:0}).map(function(a){if(0===a.count)throw new G;return a.sum/a.count})},p.sequenceEqual=function(a,b){var c=this;return b||(b=v),new r(function(d){var e=!1,f=!1,g=[],h=[],i=c.subscribe(function(a){var c,e;if(h.length>0){e=h.shift();try{c=b(e,a)}catch(i){return void d.onError(i)}c||(d.onNext(!1),d.onCompleted())}else f?(d.onNext(!1),d.onCompleted()):g.push(a)},function(a){d.onError(a)},function(){e=!0,0===g.length&&(h.length>0?(d.onNext(!1),d.onCompleted()):f&&(d.onNext(!0),d.onCompleted()))});(A(a)||B(a))&&(a=E(a)),z(a)&&(a=D(a));var j=a.subscribe(function(a){var c;if(g.length>0){var f=g.shift();try{c=b(f,a)}catch(i){return void d.onError(i)}c||(d.onNext(!1),d.onCompleted())}else e?(d.onNext(!1),d.onCompleted()):h.push(a)},function(a){d.onError(a)},function(){f=!0,0===h.length&&(g.length>0?(d.onNext(!1),d.onCompleted()):e&&(d.onNext(!0),d.onCompleted()))});return new q(i,j)},c)},p.elementAt=function(a){return i(this,a,!1)},p.elementAtOrDefault=function(a,b){return i(this,a,!0,b)},p.single=function(a,b){return a&&y(a)?this.where(a,b).single():j(this,!1)},p.singleOrDefault=function(a,b,c){return a&&y(a)?this.filter(a,c).singleOrDefault(null,b):j(this,!0,b)},p.first=function(a,b){return a?this.where(a,b).first():k(this,!1)},p.firstOrDefault=function(a,b,c){return a?this.where(a).firstOrDefault(null,b):k(this,!0,b)},p.last=function(a,b){return a?this.where(a,b).last():l(this,!1)},p.lastOrDefault=function(a,b,c){return a?this.where(a,c).lastOrDefault(null,b):l(this,!0,b)},p.find=function(a,b){return m(this,a,b,!1)},p.findIndex=function(a,b){return m(this,a,b,!0)},p.toSet=function(){if("undefined"==typeof a.Set)throw new TypeError;var b=this;return new r(function(c){var d=new a.Set;return b.subscribe(function(a){d.add(a)},function(a){c.onError(a)},function(){c.onNext(d),c.onCompleted()})},b)},p.toMap=function(b,c){if("undefined"==typeof a.Map)throw new TypeError;var d=this;return new r(function(e){var f=new a.Map;return d.subscribe(function(a){var d;try{d=b(a)}catch(g){return void e.onError(g)}var h=a;if(c)try{h=c(a)}catch(g){return void e.onError(g)}f.set(d,h)},function(a){e.onError(a)},function(){e.onNext(f),e.onCompleted()})},d)},c});
(function(a){var b={"function":!0,object:!0},c=b[typeof exports]&&exports&&!exports.nodeType&&exports,d=b[typeof self]&&self.Object&&self,e=b[typeof window]&&window&&window.Object&&window,f=b[typeof module]&&module&&!module.nodeType&&module,g=(f&&f.exports===c&&c,c&&f&&"object"==typeof global&&global&&global.Object&&global),h=h=g||e!==(this&&this.window)&&e||d||this;"function"==typeof define&&define.amd?define(["rx"],function(b,c){return a(h,c,b)}):"object"==typeof module&&module&&module.exports===c?module.exports=a(h,module.exports,require("./rx")):h.Rx=a(h,{},h.Rx)}).call(this,function(a,b,c,d){function e(){try{return j.apply(this,arguments)}catch(a){return F.e=a,F}}function f(a){if(!u(a))throw new TypeError("fn must be a function");return j=a,e}function g(a,b,c){return new n(function(d){var e=!1,f=null,g=[];return a.subscribe(function(a){var h,i;try{i=b(a)}catch(j){return void d.onError(j)}if(h=0,e)try{h=c(i,f)}catch(k){return void d.onError(k)}else e=!0,f=i;h>0&&(f=i,g=[]),h>=0&&g.push(a)},function(a){d.onError(a)},function(){d.onNext(g),d.onCompleted()})},a)}function h(a){if(0===a.length)throw new C;return a[0]}function i(a,b,c,e){var f=B(b,c,3);return new n(function(b){var c=0;return a.subscribe(function(d){var g;try{g=f(d,c,a)}catch(h){return void b.onError(h)}g?(b.onNext(e?c:d),b.onCompleted()):c++},function(a){b.onError(a)},function(){b.onNext(e?-1:d),b.onCompleted()})},a)}var j,k=c.Observable,l=k.prototype,m=c.CompositeDisposable,n=c.AnonymousObservable,o=c.internals.AbstractObserver,p=c.Disposable.empty,q=(c.internals.isEqual,c.helpers),r=(q.not,q.defaultComparer),s=q.identity,t=q.defaultSubComparer,u=q.isFunction,v=q.isPromise,w=q.isArrayLike,x=q.isIterable,y=c.internals.inherits,z=k.fromPromise,A=k.from,B=c.internals.bindCallback,C=c.EmptyError,D=c.ObservableBase,E=c.ArgumentOutOfRangeError,F={e:{}},G=function(a){function b(b,c,d,e){this.source=b,this.acc=c,this.hasSeed=d,this.seed=e,a.call(this)}function c(a,b){this.o=a,this.acc=b.acc,this.hasSeed=b.hasSeed,this.seed=b.seed,this.hasAccumulation=!1,this.result=null,this.hasValue=!1,this.isStopped=!1}return y(b,a),b.prototype.subscribeCore=function(a){return this.source.subscribe(new c(a,this))},c.prototype.onNext=function(a){this.isStopped||(!this.hasValue&&(this.hasValue=!0),this.hasAccumulation?this.result=f(this.acc)(this.result,a):(this.result=this.hasSeed?f(this.acc)(this.seed,a):a,this.hasAccumulation=!0),this.result===F&&this.o.onError(this.result.e))},c.prototype.onError=function(a){this.isStopped||(this.isStopped=!0,this.o.onError(a))},c.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.hasValue&&this.o.onNext(this.result),!this.hasValue&&this.hasSeed&&this.o.onNext(this.seed),!this.hasValue&&!this.hasSeed&&this.o.onError(new C),this.o.onCompleted())},c.prototype.dispose=function(){this.isStopped=!0},c.prototype.fail=function(a){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(a),!0)},b}(D);l.reduce=function(a){var b=!1;if(2===arguments.length){b=!0;var c=arguments[1]}return new G(this,a,b,c)};var H=function(a){function b(b,c,d){this._o=b,this._fn=c,this._s=d,this._i=0,a.call(this)}return y(b,a),b.prototype.next=function(a){var b=f(this._fn)(a,this._i++,this._s);return b===F?this._o.onError(b.e):void(Boolean(b)&&(this._o.onNext(!0),this._o.onCompleted()))},b.prototype.error=function(a){this._o.onError(a)},b.prototype.completed=function(){this._o.onNext(!1),this._o.onCompleted()},b}(o);l.some=function(a,b){var c=this,d=B(a,b,3);return new n(function(a){return c.subscribe(new H(a,d,c))})};var I=function(a){function b(b){this._o=b,a.call(this)}return y(b,a),b.prototype.next=function(){this._o.onNext(!1),this._o.onCompleted()},b.prototype.error=function(a){this._o.onError(a)},b.prototype.completed=function(){this._o.onNext(!0),this._o.onCompleted()},b}(o);l.isEmpty=function(){var a=this;return new n(function(b){return a.subscribe(new I(b))},a)};var J=function(a){function b(b,c,d){this._o=b,this._fn=c,this._s=d,this._i=0,a.call(this)}return y(b,a),b.prototype.next=function(a){var b=f(this._fn)(a,this._i++,this._s);return b===F?this._o.onError(b.e):void(Boolean(b)||(this._o.onNext(!1),this._o.onCompleted()))},b.prototype.error=function(a){this._o.onError(a)},b.prototype.completed=function(){this._o.onNext(!0),this._o.onCompleted()},b}(o);l.every=function(a,b){var c=this,d=B(a,b,3);return new n(function(a){return c.subscribe(new J(a,d,c))},this)},l.includes=function(a,b){function c(a,b){return 0===a&&0===b||a===b||isNaN(a)&&isNaN(b)}var d=this;return new n(function(e){var f=0,g=+b||0;return Math.abs(g)===1/0&&(g=0),0>g?(e.onNext(!1),e.onCompleted(),p):d.subscribe(function(b){f++>=g&&c(b,a)&&(e.onNext(!0),e.onCompleted())},function(a){e.onError(a)},function(){e.onNext(!1),e.onCompleted()})},this)},l.contains=function(a,b){l.includes(a,b)},l.count=function(a,b){return a?this.filter(a,b).count():this.reduce(function(a){return a+1},0)},l.indexOf=function(a,b){var c=this;return new n(function(d){var e=0,f=+b||0;return Math.abs(f)===1/0&&(f=0),0>f?(d.onNext(-1),d.onCompleted(),p):c.subscribe(function(b){e>=f&&b===a&&(d.onNext(e),d.onCompleted()),e++},function(a){d.onError(a)},function(){d.onNext(-1),d.onCompleted()})},c)},l.sum=function(a,b){return a&&u(a)?this.map(a,b).sum():this.reduce(function(a,b){return a+b},0)},l.minBy=function(a,b){return b||(b=t),g(this,a,function(a,c){return-1*b(a,c)})},l.min=function(a){return this.minBy(s,a).map(function(a){return h(a)})},l.maxBy=function(a,b){return b||(b=t),g(this,a,b)},l.max=function(a){return this.maxBy(s,a).map(function(a){return h(a)})};var K=function(a){function b(b,c,d){this._o=b,this._fn=c,this._s=d,this._c=0,this._t=0,a.call(this)}return y(b,a),b.prototype.next=function(a){if(this._fn){var b=f(this._fn)(a,this._c++,this._s);if(b===F)return this._o.onError(b.e);this._t+=b}else this._c++,this._t+=a},b.prototype.error=function(a){this._o.onError(a)},b.prototype.completed=function(){return 0===this._c?this._o.onError(new C):(this._o.onNext(this._t/this._c),void this._o.onCompleted())},b}(o);l.average=function(a,b){var c,d=this;return u(a)&&(c=B(a,b,3)),new n(function(a){return d.subscribe(new K(a,c,d))},d)},l.sequenceEqual=function(a,b){var c=this;return b||(b=r),new n(function(d){var e=!1,f=!1,g=[],h=[],i=c.subscribe(function(a){var c,e;if(h.length>0){e=h.shift();try{c=b(e,a)}catch(i){return void d.onError(i)}c||(d.onNext(!1),d.onCompleted())}else f?(d.onNext(!1),d.onCompleted()):g.push(a)},function(a){d.onError(a)},function(){e=!0,0===g.length&&(h.length>0?(d.onNext(!1),d.onCompleted()):f&&(d.onNext(!0),d.onCompleted()))});(w(a)||x(a))&&(a=A(a)),v(a)&&(a=z(a));var j=a.subscribe(function(a){var c;if(g.length>0){var f=g.shift();try{c=b(f,a)}catch(i){return void d.onError(i)}c||(d.onNext(!1),d.onCompleted())}else e?(d.onNext(!1),d.onCompleted()):h.push(a)},function(a){d.onError(a)},function(){f=!0,0===h.length&&(g.length>0?(d.onNext(!1),d.onCompleted()):e&&(d.onNext(!0),d.onCompleted()))});return new m(i,j)},c)},l.elementAt=function(a,b){if(0>a)throw new E;var c=this;return new n(function(e){var f=a;return c.subscribe(function(a){0===f--&&(e.onNext(a),e.onCompleted())},function(a){e.onError(a)},function(){b===d?e.onError(new E):(e.onNext(b),e.onCompleted())})},c)},l.single=function(a,b){if(u(a))return this.filter(a,b).single();var c=this;return new n(function(a){var b,d=!1;return c.subscribe(function(c){d?a.onError(new Error("Sequence contains more than one element")):(b=c,d=!0)},function(b){a.onError(b)},function(){a.onNext(b),a.onCompleted()})},c)};var L=function(a){function b(b,c,d){this._o=b,this._obj=c,this._s=d,this._i=0,a.call(this)}return y(b,a),b.prototype.next=function(a){if(this._obj.predicate){var b=f(this._obj.predicate)(a,this._i++,this._s);if(b===F)return this._o.onError(b.e);Boolean(b)&&(this._o.onNext(a),this._o.onCompleted())}else this._obj.predicate||(this._o.onNext(a),this._o.onCompleted())},b.prototype.error=function(a){this._o.onError(a)},b.prototype.completed=function(){this._obj.defaultValue===d?this._o.onError(new C):(this._o.onNext(this._obj.defaultValue),this._o.onCompleted())},b}(o);return l.first=function(){var a={},b=this;if(a="object"==typeof arguments[0]?arguments[0]:{predicate:arguments[0],thisArg:arguments[1],defaultValue:arguments[2]},u(a.predicate)){var c=a.predicate;a.predicate=B(c,a.thisArg,3)}return new n(function(c){return b.subscribe(new L(c,a,b))},b)},l.last=function(){var a={},b=this;if(a="object"==typeof arguments[0]?arguments[0]:{predicate:arguments[0],thisArg:arguments[1],defaultValue:arguments[2]},u(a.predicate)){var c=a.predicate;a.predicate=B(c,a.thisArg,3)}return new n(function(c){var e,g=!1,h=0;return b.subscribe(function(d){if(a.predicate){var i=f(a.predicate)(d,h++,b);if(i===F)return c.onError(i.e);i&&(g=!0,e=d)}else a.predicate||(g=!0,e=d)},function(a){c.onError(a)},function(){g?(c.onNext(e),c.onCompleted()):a.defaultValue===d?c.onError(new C):(c.onNext(a.defaultValue),c.onCompleted())})},b)},l.find=function(a,b){return i(this,a,b,!1)},l.findIndex=function(a,b){return i(this,a,b,!0)},l.toSet=function(){if("undefined"==typeof a.Set)throw new TypeError;var b=this;return new n(function(c){var d=new a.Set;return b.subscribe(function(a){d.add(a)},function(a){c.onError(a)},function(){c.onNext(d),c.onCompleted()})},b)},l.toMap=function(b,c){if("undefined"==typeof a.Map)throw new TypeError;var d=this;return new n(function(e){var f=new a.Map;return d.subscribe(function(a){var d;try{d=b(a)}catch(g){return void e.onError(g)}var h=a;if(c)try{h=c(a)}catch(g){return void e.onError(g)}f.set(d,h)},function(a){e.onError(a)},function(){e.onNext(f),e.onCompleted()})},d)},c});
//# sourceMappingURL=rx.aggregates.map
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
;(function (factory) {
var objectTypes = {
'boolean': false,
'function': true,
'object': true,
'number': false,
'string': false,
'undefined': false
};
var objectTypes = {
'function': true,
'object': true
};
var root = (objectTypes[typeof window] && window) || this,
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = objectTypes[typeof global] && global;
var
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeSelf = objectTypes[typeof self] && self.Object && self,
freeWindow = objectTypes[typeof window] && window && window.Object && window,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global;
if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) {
root = freeGlobal;
}
var root = root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this;
// Because of build optimizers
if (typeof define === 'function' && define.amd) {
define(['rx.binding', 'exports'], function (Rx, exports) {
root.Rx = factory(root, exports, Rx);
return root.Rx;
});
} else if (typeof module === 'object' && module && module.exports === freeExports) {
module.exports = factory(root, module.exports, require('./rx'));
} else {
root.Rx = factory(root, {}, root.Rx);
}
// Because of build optimizers
if (typeof define === 'function' && define.amd) {
define(['rx.binding', 'exports'], function (Rx, exports) {
root.Rx = factory(root, exports, Rx);
return root.Rx;
});
} else if (typeof module === 'object' && module && module.exports === freeExports) {
module.exports = factory(root, module.exports, require('./rx'));
} else {
root.Rx = factory(root, {}, root.Rx);
}
}.call(this, function (root, exp, Rx, undefined) {

@@ -48,198 +44,140 @@

isScheduler = Rx.Scheduler.isScheduler,
slice = Array.prototype.slice;
isPromise = Rx.helpers.isPromise,
isFunction = Rx.helpers.isFunction;
var fnString = 'function',
throwString = 'throw',
isObject = Rx.internals.isObject;
var errorObj = {e: {}};
var tryCatchTarget;
function tryCatcher() {
try {
return tryCatchTarget.apply(this, arguments);
} catch (e) {
errorObj.e = e;
return errorObj;
}
}
function tryCatch(fn) {
if (!isFunction(fn)) { throw new TypeError('fn must be a function'); }
tryCatchTarget = fn;
return tryCatcher;
}
function thrower(e) {
throw e;
}
function toThunk(obj, ctx) {
if (Array.isArray(obj)) { return objectToThunk.call(ctx, obj); }
if (isGeneratorFunction(obj)) { return observableSpawn(obj.call(ctx)); }
if (isGenerator(obj)) { return observableSpawn(obj); }
if (isObservable(obj)) { return observableToThunk(obj); }
if (isPromise(obj)) { return promiseToThunk(obj); }
if (typeof obj === fnString) { return obj; }
if (isObject(obj) || Array.isArray(obj)) { return objectToThunk.call(ctx, obj); }
var spawn = Observable.spawn = function () {
var gen = arguments[0], self = this, args = [];
for (var i = 1, len = arguments.length; i < len; i++) { args.push(arguments[i]); }
return obj;
}
return new AnonymousObservable(function (o) {
var g = new CompositeDisposable();
function objectToThunk(obj) {
var ctx = this;
if (isFunction(gen)) { gen = gen.apply(self, args); }
if (!gen || !isFunction(gen.next)) {
o.onNext(gen);
return o.onCompleted();
}
return function (done) {
var keys = Object.keys(obj),
pending = keys.length,
results = new obj.constructor(),
finished;
processGenerator();
if (!pending) {
timeoutScheduler.schedule(function () { done(null, results); });
return;
function processGenerator(res) {
var ret = tryCatch(gen.next).call(gen, res);
if (ret === errorObj) { return o.onError(ret.e); }
next(ret);
}
for (var i = 0, len = keys.length; i < len; i++) {
run(obj[keys[i]], keys[i]);
function onError(err) {
var ret = tryCatch(gen.next).call(gen, err);
if (ret === errorObj) { return o.onError(ret.e); }
next(ret);
}
function run(fn, key) {
if (finished) { return; }
try {
fn = toThunk(fn, ctx);
function next(ret) {
if (ret.done) {
o.onNext(ret.value);
o.onCompleted();
}
var value = toObservable.call(self, ret.value);
if (Observable.isObservable(value)) {
g.add(value.subscribe(processGenerator, onError));
} else {
onError(new TypeError('type not supported'));
}
}
if (typeof fn !== fnString) {
results[key] = fn;
return --pending || done(null, results);
}
return g;
});
}
fn.call(ctx, function(err, res) {
if (finished) { return; }
function toObservable(obj) {
if (!obj) { return obj; }
if (Observable.isObservable(obj)) { return obj; }
if (isPromise(obj)) { return Observable.fromPromise(obj); }
if (isGeneratorFunction(obj) || isGenerator(obj)) { return spawn.call(this, obj); }
if (isFunction(obj)) { return thunkToObservable.call(this, obj); }
if (isArrayLike(obj) || isIterable(obj)) { return arrayToObservable.call(this, obj); }
if (isObject(obj)) return objectToObservable.call(this, obj);
return obj;
}
if (err) {
finished = true;
return done(err);
}
function arrayToObservable (obj) {
return Observable.from(obj)
.map(toObservable, this)
.toArray();
}
results[key] = res;
--pending || done(null, results);
});
} catch (e) {
finished = true;
done(e);
}
function objectToObservable (obj) {
var results = new obj.constructor(), keys = Object.keys(obj), observables = [];
for (var i = 0, len = keys.length; i < len; i++) {
var key = keys[i], observable = toObservable.call(this, obj[key]);
if (observable && Observable.isObservable(observable)) {
defer(observable, key);
} else {
results[key] = obj[key];
}
}
}
return Observable.concat(observables).startWith(results);
function observableToThunk(observable) {
return function (fn) {
var value, hasValue = false;
observable.subscribe(
function (v) {
value = v;
hasValue = true;
},
fn,
function () {
hasValue && fn(null, value);
function defer (observable, key) {
results[key] = undefined;
observables.push(new AnonymousObservable(function (o) {
return observable.subscribe(function (next) {
results[key] = next;
o.onCompleted();
});
}));
}
}
function promiseToThunk(promise) {
return function(fn) {
promise.then(function(res) {
fn(null, res);
}, fn);
}
function thunkToObservable(fn) {
var self = this;
return new AnonymousObservable(function (o) {
fn.call(self, function () {
var err = arguments[0], res = arguments[1];
if (err) { return o.onError(err); }
if (arguments.length > 2) {
var args = [];
for (var i = 1, len = arguments.length; i < len; i++) { args.push(arguments[i]); }
res = args;
}
o.onNext(res);
o.onCompleted();
});
});
}
function isObservable(obj) {
return obj && typeof obj.subscribe === fnString;
function isGenerator(obj) {
return isFunction (obj.next) && isFunction (obj.throw);
}
function isGeneratorFunction(obj) {
return obj && obj.constructor && obj.constructor.name === 'GeneratorFunction';
var ctor = obj.constructor;
if (!ctor) { return false; }
if (ctor.name === 'GeneratorFunction' || ctor.displayName === 'GeneratorFunction') { return true; }
return isGenerator(ctor.prototype);
}
function isGenerator(obj) {
return obj && typeof obj.next === fnString && typeof obj[throwString] === fnString;
function isObject(val) {
return Object == val.constructor;
}
/*
* Spawns a generator function which allows for Promises, Observable sequences, Arrays, Objects, Generators and functions.
* @param {Function} The spawning function.
* @returns {Function} a function which has a done continuation.
*/
var observableSpawn = Rx.spawn = function (fn) {
var isGenFun = isGeneratorFunction(fn);
return function (done) {
var ctx = this,
gen = fn;
if (isGenFun) {
for(var args = [], i = 0, len = arguments.length; i < len; i++) { args.push(arguments[i]); }
var len = args.length,
hasCallback = len && typeof args[len - 1] === fnString;
done = hasCallback ? args.pop() : handleError;
gen = fn.apply(this, args);
} else {
done = done || handleError;
}
next();
function exit(err, res) {
timeoutScheduler.schedule(done.bind(ctx, err, res));
}
function next(err, res) {
var ret;
// multiple args
if (arguments.length > 2) {
for(var res = [], i = 1, len = arguments.length; i < len; i++) { res.push(arguments[i]); }
}
if (err) {
try {
ret = gen[throwString](err);
} catch (e) {
return exit(e);
}
}
if (!err) {
try {
ret = gen.next(res);
} catch (e) {
return exit(e);
}
}
if (ret.done) {
return exit(null, ret.value);
}
ret.value = toThunk(ret.value, ctx);
if (typeof ret.value === fnString) {
var called = false;
try {
ret.value.call(ctx, function() {
if (called) {
return;
}
called = true;
next.apply(ctx, arguments);
});
} catch (e) {
timeoutScheduler.schedule(function () {
if (called) {
return;
}
called = true;
next.call(ctx, e);
});
}
return;
}
// Not supported
next(new TypeError('Rx.spawn only supports a function, Promise, Observable, Object or Array.'));
}
}
};
function handleError(err) {
if (!err) { return; }
timeoutScheduler.schedule(function() {
throw err;
});
}
/**

@@ -294,91 +232,96 @@ * Invokes the specified function asynchronously on the specified scheduler, surfacing the result through an observable sequence.

/**
* Converts a callback function to an observable sequence.
*
* @param {Function} function Function with a callback as the last parameter to convert to an Observable sequence.
* @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined.
* @param {Function} [selector] A selector which takes the arguments from the callback to produce a single item to yield on next.
* @returns {Function} A function, when executed with the required parameters minus the callback, produces an Observable sequence with a single value of the arguments to the callback as an array.
*/
Observable.fromCallback = function (func, context, selector) {
return function () {
var len = arguments.length, args = new Array(len)
for(var i = 0; i < len; i++) { args[i] = arguments[i]; }
function createCbObservable(fn, ctx, selector, args) {
var o = new AsyncSubject();
return new AnonymousObservable(function (observer) {
function handler() {
var len = arguments.length, results = new Array(len);
for(var i = 0; i < len; i++) { results[i] = arguments[i]; }
args.push(createCbHandler(o, ctx, selector));
fn.apply(ctx, args);
if (selector) {
try {
results = selector.apply(context, results);
} catch (e) {
return observer.onError(e);
}
return o.asObservable();
}
observer.onNext(results);
} else {
if (results.length <= 1) {
observer.onNext.apply(observer, results);
} else {
observer.onNext(results);
}
}
function createCbHandler(o, ctx, selector) {
return function handler () {
var len = arguments.length, results = new Array(len);
for(var i = 0; i < len; i++) { results[i] = arguments[i]; }
observer.onCompleted();
}
if (isFunction(selector)) {
results = tryCatch(selector).apply(ctx, results);
if (results === errorObj) { return o.onError(results.e); }
o.onNext(results);
} else {
if (results.length <= 1) {
o.onNext(results[0]);
} else {
o.onNext(results);
}
}
args.push(handler);
func.apply(context, args);
}).publishLast().refCount();
};
o.onCompleted();
};
}
/**
* Converts a Node.js callback style function to an observable sequence. This must be in function (err, ...) format.
* @param {Function} func The function to call
* @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined.
* @param {Function} [selector] A selector which takes the arguments from the callback minus the error to produce a single item to yield on next.
* @returns {Function} An async function which when applied, returns an observable sequence with the callback arguments as an array.
*/
Observable.fromNodeCallback = function (func, context, selector) {
return function () {
var len = arguments.length, args = new Array(len);
for(var i = 0; i < len; i++) { args[i] = arguments[i]; }
/**
* Converts a callback function to an observable sequence.
*
* @param {Function} fn Function with a callback as the last parameter to convert to an Observable sequence.
* @param {Mixed} [ctx] The context for the func parameter to be executed. If not specified, defaults to undefined.
* @param {Function} [selector] A selector which takes the arguments from the callback to produce a single item to yield on next.
* @returns {Function} A function, when executed with the required parameters minus the callback, produces an Observable sequence with a single value of the arguments to the callback as an array.
*/
Observable.fromCallback = function (fn, ctx, selector) {
return function () {
var len = arguments.length, args = new Array(len)
for(var i = 0; i < len; i++) { args[i] = arguments[i]; }
return createCbObservable(fn, ctx, selector, args);
};
};
return new AnonymousObservable(function (observer) {
function handler(err) {
if (err) {
observer.onError(err);
return;
}
function createNodeObservable(fn, ctx, selector, args) {
var o = new AsyncSubject();
var len = arguments.length, results = [];
for(var i = 1; i < len; i++) { results[i - 1] = arguments[i]; }
args.push(createNodeHandler(o, ctx, selector));
fn.apply(ctx, args);
if (selector) {
try {
results = selector.apply(context, results);
} catch (e) {
return observer.onError(e);
}
observer.onNext(results);
} else {
if (results.length <= 1) {
observer.onNext.apply(observer, results);
} else {
observer.onNext(results);
}
}
return o.asObservable();
}
observer.onCompleted();
}
function createNodeHandler(o, ctx, selector) {
return function handler () {
var err = arguments[0];
if (err) { return o.onError(err); }
args.push(handler);
func.apply(context, args);
}).publishLast().refCount();
};
var len = arguments.length, results = [];
for(var i = 1; i < len; i++) { results[i - 1] = arguments[i]; }
if (isFunction(selector)) {
var results = tryCatch(selector).apply(ctx, results);
if (results === errorObj) { return o.onError(results.e); }
o.onNext(results);
} else {
if (results.length <= 1) {
o.onNext(results[0]);
} else {
o.onNext(results);
}
}
o.onCompleted();
};
}
/**
* Converts a Node.js callback style function to an observable sequence. This must be in function (err, ...) format.
* @param {Function} fn The function to call
* @param {Mixed} [ctx] The context for the func parameter to be executed. If not specified, defaults to undefined.
* @param {Function} [selector] A selector which takes the arguments from the callback minus the error to produce a single item to yield on next.
* @returns {Function} An async function which when applied, returns an observable sequence with the callback arguments as an array.
*/
Observable.fromNodeCallback = function (fn, ctx, selector) {
return function () {
var len = arguments.length, args = new Array(len);
for(var i = 0; i < len; i++) { args[i] = arguments[i]; }
return createNodeObservable(fn, ctx, selector, args);
};
};
function isNodeList(el) {

@@ -447,27 +390,52 @@ if (window.StaticNodeList) {

function createListener (element, name, handler) {
// Standards compliant
if (element.addEventListener) {
element.addEventListener(name, handler, false);
return disposableCreate(function () {
element.removeEventListener(name, handler, false);
});
function ListenDisposable(e, n, fn) {
this._e = e;
this._n = n;
this._fn = fn;
this._e.addEventListener(this._n, this._fn, false);
this.isDisposed = false;
}
ListenDisposable.prototype.dispose = function () {
if (!this.isDisposed) {
this._e.removeEventListener(this._n, this._fn, false);
this.isDisposed = true;
}
if (element.attachEvent) {
// IE Specific
var innerHandler = function (event) {
handler(fixEvent(event));
};
element.attachEvent('on' + name, innerHandler);
return disposableCreate(function () {
element.detachEvent('on' + name, innerHandler);
});
};
function AttachEventDisposable(e, n, fn) {
this._e = e;
this._n = 'on' + n;
this._fn = function (e) { fn(fixEvent(e)); };
this._e.attachEvent(this._n, this._fn);
this.isDisposed = false;
}
AttachEventDisposable.prototype.dispose = function () {
if (!this.isDisposed) {
this._e.detachEvent(this._n, this._fn);
this.isDisposed = true;
}
// Level 1 DOM Events
element['on' + name] = handler;
return disposableCreate(function () {
element['on' + name] = null;
});
};
function LevelOneDisposable(e, n, fn) {
this._e = e;
this._n = 'on' + n;
this._e[this._n] = fn;
this.isDisposed = false;
}
LevelOneDisposable.prototype.dispose = function () {
if (!this.isDisposed) {
this._e[this._n] = null;
this.isDisposed = true;
}
};
function createListener (el, eventName, handler) {
if (el.addEventListener) {
return new ListenDisposable(el, eventName, handler)
}
if (el.attachEvent) {
return new AttachEventDisposable(el, eventName, handler);
}
return LevelOneDisposable(el, eventName, handler);
}
function createEventListener (el, eventName, handler) {

@@ -495,6 +463,2 @@ var disposables = new CompositeDisposable();

* Creates an observable sequence by adding an event listener to the matching DOMElement or each item in the NodeList.
*
* @example
* var source = Rx.Observable.fromEvent(element, 'mouseup');
*
* @param {Object} element The DOMElement or NodeList to attach a listener.

@@ -524,18 +488,13 @@ * @param {String} eventName The event name to attach the observable sequence.

}
return new AnonymousObservable(function (observer) {
return new AnonymousObservable(function (o) {
return createEventListener(
element,
eventName,
function handler (e) {
var results = e;
if (selector) {
try {
results = selector(arguments);
} catch (err) {
return observer.onError(err);
}
function handler () {
var results = arguments[0];
if (isFunction(selector)) {
results = tryCatch(selector).apply(null, arguments);
if (results === errorObj) { return o.onError(results.e); }
}
observer.onNext(results);
o.onNext(results);
});

@@ -553,13 +512,10 @@ }).publish().refCount();

var fromEventPattern = Observable.fromEventPattern = function (addHandler, removeHandler, selector) {
return new AnonymousObservable(function (observer) {
function innerHandler (e) {
var result = e;
if (selector) {
try {
result = selector(arguments);
} catch (err) {
return observer.onError(err);
}
return new AnonymousObservable(function (o) {
function innerHandler () {
var result = arguments[0];
if (isFunction(selector)) {
result = tryCatch(selector).apply(null, arguments);
if (result === errorObj) { return o.onError(result.e); }
}
observer.onNext(result);
o.onNext(result);
}

@@ -569,5 +525,3 @@

return disposableCreate(function () {
if (removeHandler) {
removeHandler(innerHandler, returnValue);
}
isFunction(removeHandler) && removeHandler(innerHandler, returnValue);
});

@@ -574,0 +528,0 @@ }).publish().refCount();

/* Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.*/
(function(a){var b={"boolean":!1,"function":!0,object:!0,number:!1,string:!1,undefined:!1},c=b[typeof window]&&window||this,d=b[typeof exports]&&exports&&!exports.nodeType&&exports,e=b[typeof module]&&module&&!module.nodeType&&module,f=(e&&e.exports===d&&d,b[typeof global]&&global);!f||f.global!==f&&f.window!==f||(c=f),"function"==typeof define&&define.amd?define(["rx.binding","exports"],function(b,d){return c.Rx=a(c,d,b),c.Rx}):"object"==typeof module&&module&&module.exports===d?module.exports=a(c,module.exports,require("./rx")):c.Rx=a(c,{},c.Rx)}).call(this,function(a,b,c,d){function e(a,b){return Array.isArray(a)?f.call(b,a):j(a)?C(a.call(b)):k(a)?C(a):i(a)?g(a):isPromise(a)?h(a):typeof a===z?a:B(a)||Array.isArray(a)?f.call(b,a):a}function f(a){var b=this;return function(c){function d(a,d){if(!f)try{if(a=e(a,b),typeof a!==z)return i[d]=a,--h||c(null,i);a.call(b,function(a,b){if(!f){if(a)return f=!0,c(a);i[d]=b,--h||c(null,i)}})}catch(g){f=!0,c(g)}}var f,g=Object.keys(a),h=g.length,i=new a.constructor;if(!h)return void x.schedule(function(){c(null,i)});for(var j=0,k=g.length;k>j;j++)d(a[g[j]],g[j])}}function g(a){return function(b){var c,d=!1;a.subscribe(function(a){c=a,d=!0},b,function(){d&&b(null,c)})}}function h(a){return function(b){a.then(function(a){b(null,a)},b)}}function i(a){return a&&typeof a.subscribe===z}function j(a){return a&&a.constructor&&"GeneratorFunction"===a.constructor.name}function k(a){return a&&typeof a.next===z&&typeof a[A]===z}function l(a){a&&x.schedule(function(){throw a})}function m(a){return window.StaticNodeList?a instanceof window.StaticNodeList||a instanceof window.NodeList:"[object NodeList]"==Object.prototype.toString.call(a)}function n(b){var c=function(){this.cancelBubble=!0},d=function(){if(this.bubbledKeyCode=this.keyCode,this.ctrlKey)try{this.keyCode=0}catch(a){}this.defaultPrevented=!0,this.returnValue=!1,this.modified=!0};if(b||(b=a.event),!b.target)switch(b.target=b.target||b.srcElement,"mouseover"==b.type&&(b.relatedTarget=b.fromElement),"mouseout"==b.type&&(b.relatedTarget=b.toElement),b.stopPropagation||(b.stopPropagation=c,b.preventDefault=d),b.type){case"keypress":var e="charCode"in b?b.charCode:b.keyCode;10==e?(e=0,b.keyCode=13):13==e||27==e?e=0:3==e&&(e=99),b.charCode=e,b.keyChar=b.charCode?String.fromCharCode(b.charCode):""}return b}function o(a,b,c){if(a.addEventListener)return a.addEventListener(b,c,!1),v(function(){a.removeEventListener(b,c,!1)});if(a.attachEvent){var d=function(a){c(n(a))};return a.attachEvent("on"+b,d),v(function(){a.detachEvent("on"+b,d)})}return a["on"+b]=c,v(function(){a["on"+b]=null})}function p(a,b,c){var d=new w;if(m(a)||"[object HTMLCollection]"===Object.prototype.toString.call(a))for(var e=0,f=a.length;f>e;e++)d.add(p(a.item(e),b,c));else a&&d.add(o(a,b,c));return d}var q=c.Observable,r=(q.prototype,q.fromPromise),s=q.throwError,t=c.AnonymousObservable,u=c.AsyncSubject,v=c.Disposable.create,w=c.CompositeDisposable,x=(c.Scheduler.immediate,c.Scheduler["default"]),y=c.Scheduler.isScheduler,z=(Array.prototype.slice,"function"),A="throw",B=c.internals.isObject,C=c.spawn=function(a){var b=j(a);return function(c){function d(a,b){x.schedule(c.bind(g,a,b))}function f(a,b){var c;if(arguments.length>2)for(var b=[],i=1,j=arguments.length;j>i;i++)b.push(arguments[i]);if(a)try{c=h[A](a)}catch(k){return d(k)}if(!a)try{c=h.next(b)}catch(k){return d(k)}if(c.done)return d(null,c.value);if(c.value=e(c.value,g),typeof c.value!==z)f(new TypeError("Rx.spawn only supports a function, Promise, Observable, Object or Array."));else{var l=!1;try{c.value.call(g,function(){l||(l=!0,f.apply(g,arguments))})}catch(k){x.schedule(function(){l||(l=!0,f.call(g,k))})}}}var g=this,h=a;if(b){for(var i=[],j=0,k=arguments.length;k>j;j++)i.push(arguments[j]);var k=i.length,m=k&&typeof i[k-1]===z;c=m?i.pop():l,h=a.apply(this,i)}else c=c||l;f()}};q.start=function(a,b,c){return D(a,b,c)()};var D=q.toAsync=function(a,b,c){return y(c)||(c=x),function(){var d=arguments,e=new u;return c.schedule(function(){var c;try{c=a.apply(b,d)}catch(f){return void e.onError(f)}e.onNext(c),e.onCompleted()}),e.asObservable()}};q.fromCallback=function(a,b,c){return function(){for(var d=arguments.length,e=new Array(d),f=0;d>f;f++)e[f]=arguments[f];return new t(function(d){function f(){for(var a=arguments.length,e=new Array(a),f=0;a>f;f++)e[f]=arguments[f];if(c){try{e=c.apply(b,e)}catch(g){return d.onError(g)}d.onNext(e)}else e.length<=1?d.onNext.apply(d,e):d.onNext(e);d.onCompleted()}e.push(f),a.apply(b,e)}).publishLast().refCount()}},q.fromNodeCallback=function(a,b,c){return function(){for(var d=arguments.length,e=new Array(d),f=0;d>f;f++)e[f]=arguments[f];return new t(function(d){function f(a){if(a)return void d.onError(a);for(var e=arguments.length,f=[],g=1;e>g;g++)f[g-1]=arguments[g];if(c){try{f=c.apply(b,f)}catch(h){return d.onError(h)}d.onNext(f)}else f.length<=1?d.onNext.apply(d,f):d.onNext(f);d.onCompleted()}e.push(f),a.apply(b,e)}).publishLast().refCount()}},c.config.useNativeEvents=!1,q.fromEvent=function(a,b,d){return a.addListener?E(function(c){a.addListener(b,c)},function(c){a.removeListener(b,c)},d):c.config.useNativeEvents||"function"!=typeof a.on||"function"!=typeof a.off?new t(function(c){return p(a,b,function(a){var b=a;if(d)try{b=d(arguments)}catch(e){return c.onError(e)}c.onNext(b)})}).publish().refCount():E(function(c){a.on(b,c)},function(c){a.off(b,c)},d)};var E=q.fromEventPattern=function(a,b,c){return new t(function(d){function e(a){var b=a;if(c)try{b=c(arguments)}catch(e){return d.onError(e)}d.onNext(b)}var f=a(e);return v(function(){b&&b(e,f)})}).publish().refCount()};return q.startAsync=function(a){var b;try{b=a()}catch(c){return s(c)}return r(b)},c});
(function(a){var b={"function":!0,object:!0},c=b[typeof exports]&&exports&&!exports.nodeType&&exports,d=b[typeof self]&&self.Object&&self,e=b[typeof window]&&window&&window.Object&&window,f=b[typeof module]&&module&&!module.nodeType&&module,g=(f&&f.exports===c&&c,c&&f&&"object"==typeof global&&global&&global.Object&&global),h=h=g||e!==(this&&this.window)&&e||d||this;"function"==typeof define&&define.amd?define(["rx.binding","exports"],function(b,c){return h.Rx=a(h,c,b),h.Rx}):"object"==typeof module&&module&&module.exports===c?module.exports=a(h,module.exports,require("./rx")):h.Rx=a(h,{},h.Rx)}).call(this,function(a,b,c,d){function e(){try{return y.apply(this,arguments)}catch(a){return K.e=a,K}}function f(a){if(!J(a))throw new TypeError("fn must be a function");return y=a,e}function g(a){return a?z.isObservable(a)?a:I(a)?z.fromPromise(a):l(a)||k(a)?L.call(this,a):J(a)?j.call(this,a):isArrayLike(a)||isIterable(a)?h.call(this,a):m(a)?i.call(this,a):a:a}function h(a){return z.from(a).map(g,this).toArray()}function i(a){function b(a,b){c[b]=d,f.push(new C(function(d){return a.subscribe(function(a){c[b]=a,d.onCompleted()})}))}for(var c=new a.constructor,e=Object.keys(a),f=[],h=0,i=e.length;i>h;h++){var j=e[h],k=g.call(this,a[j]);k&&z.isObservable(k)?b(k,j):c[j]=a[j]}return z.concat(f).startWith(c)}function j(a){var b=this;return new C(function(c){a.call(b,function(){var a=arguments[0],b=arguments[1];if(a)return c.onError(a);if(arguments.length>2){for(var d=[],e=1,f=arguments.length;f>e;e++)d.push(arguments[e]);b=d}c.onNext(b),c.onCompleted()})})}function k(a){return J(a.next)&&J(a["throw"])}function l(a){var b=a.constructor;return b?"GeneratorFunction"===b.name||"GeneratorFunction"===b.displayName?!0:k(b.prototype):!1}function m(a){return Object==a.constructor}function n(a,b,c,d){var e=new D;return d.push(o(e,b,c)),a.apply(b,d),e.asObservable()}function o(a,b,c){return function(){for(var d=arguments.length,e=new Array(d),g=0;d>g;g++)e[g]=arguments[g];if(J(c)){if(e=f(c).apply(b,e),e===K)return a.onError(e.e);a.onNext(e)}else e.length<=1?a.onNext(e[0]):a.onNext(e);a.onCompleted()}}function p(a,b,c,d){var e=new D;return d.push(q(e,b,c)),a.apply(b,d),e.asObservable()}function q(a,b,c){return function(){var d=arguments[0];if(d)return a.onError(d);for(var e=arguments.length,g=[],h=1;e>h;h++)g[h-1]=arguments[h];if(J(c)){var g=f(c).apply(b,g);if(g===K)return a.onError(g.e);a.onNext(g)}else g.length<=1?a.onNext(g[0]):a.onNext(g);a.onCompleted()}}function r(a){return window.StaticNodeList?a instanceof window.StaticNodeList||a instanceof window.NodeList:"[object NodeList]"==Object.prototype.toString.call(a)}function s(b){var c=function(){this.cancelBubble=!0},d=function(){if(this.bubbledKeyCode=this.keyCode,this.ctrlKey)try{this.keyCode=0}catch(a){}this.defaultPrevented=!0,this.returnValue=!1,this.modified=!0};if(b||(b=a.event),!b.target)switch(b.target=b.target||b.srcElement,"mouseover"==b.type&&(b.relatedTarget=b.fromElement),"mouseout"==b.type&&(b.relatedTarget=b.toElement),b.stopPropagation||(b.stopPropagation=c,b.preventDefault=d),b.type){case"keypress":var e="charCode"in b?b.charCode:b.keyCode;10==e?(e=0,b.keyCode=13):13==e||27==e?e=0:3==e&&(e=99),b.charCode=e,b.keyChar=b.charCode?String.fromCharCode(b.charCode):""}return b}function t(a,b,c){this._e=a,this._n=b,this._fn=c,this._e.addEventListener(this._n,this._fn,!1),this.isDisposed=!1}function u(a,b,c){this._e=a,this._n="on"+b,this._fn=function(a){c(s(a))},this._e.attachEvent(this._n,this._fn),this.isDisposed=!1}function v(a,b,c){this._e=a,this._n="on"+b,this._e[this._n]=c,this.isDisposed=!1}function w(a,b,c){return a.addEventListener?new t(a,b,c):a.attachEvent?new u(a,b,c):v(a,b,c)}function x(a,b,c){var d=new F;if(r(a)||"[object HTMLCollection]"===Object.prototype.toString.call(a))for(var e=0,f=a.length;f>e;e++)d.add(x(a.item(e),b,c));else a&&d.add(w(a,b,c));return d}var y,z=c.Observable,A=(z.prototype,z.fromPromise),B=z.throwError,C=c.AnonymousObservable,D=c.AsyncSubject,E=c.Disposable.create,F=c.CompositeDisposable,G=(c.Scheduler.immediate,c.Scheduler["default"]),H=c.Scheduler.isScheduler,I=c.helpers.isPromise,J=c.helpers.isFunction,K={e:{}},L=z.spawn=function(){for(var a=arguments[0],b=this,c=[],d=1,e=arguments.length;e>d;d++)c.push(arguments[d]);return new C(function(d){function e(b){var c=f(a.next).call(a,b);return c===K?d.onError(c.e):void i(c)}function h(b){var c=f(a.next).call(a,b);return c===K?d.onError(c.e):void i(c)}function i(a){a.done&&(d.onNext(a.value),d.onCompleted());var c=g.call(b,a.value);z.isObservable(c)?j.add(c.subscribe(e,h)):h(new TypeError("type not supported"))}var j=new F;return J(a)&&(a=a.apply(b,c)),a&&J(a.next)?(e(),j):(d.onNext(a),d.onCompleted())})};z.start=function(a,b,c){return M(a,b,c)()};var M=z.toAsync=function(a,b,c){return H(c)||(c=G),function(){var d=arguments,e=new D;return c.schedule(function(){var c;try{c=a.apply(b,d)}catch(f){return void e.onError(f)}e.onNext(c),e.onCompleted()}),e.asObservable()}};z.fromCallback=function(a,b,c){return function(){for(var d=arguments.length,e=new Array(d),f=0;d>f;f++)e[f]=arguments[f];return n(a,b,c,e)}},z.fromNodeCallback=function(a,b,c){return function(){for(var d=arguments.length,e=new Array(d),f=0;d>f;f++)e[f]=arguments[f];return p(a,b,c,e)}},t.prototype.dispose=function(){this.isDisposed||(this._e.removeEventListener(this._n,this._fn,!1),this.isDisposed=!0)},u.prototype.dispose=function(){this.isDisposed||(this._e.detachEvent(this._n,this._fn),this.isDisposed=!0)},v.prototype.dispose=function(){this.isDisposed||(this._e[this._n]=null,this.isDisposed=!0)},c.config.useNativeEvents=!1,z.fromEvent=function(a,b,d){return a.addListener?N(function(c){a.addListener(b,c)},function(c){a.removeListener(b,c)},d):c.config.useNativeEvents||"function"!=typeof a.on||"function"!=typeof a.off?new C(function(c){return x(a,b,function(){var a=arguments[0];return J(d)&&(a=f(d).apply(null,arguments),a===K)?c.onError(a.e):void c.onNext(a)})}).publish().refCount():N(function(c){a.on(b,c)},function(c){a.off(b,c)},d)};var N=z.fromEventPattern=function(a,b,c){return new C(function(d){function e(){var a=arguments[0];return J(c)&&(a=f(c).apply(null,arguments),a===K)?d.onError(a.e):void d.onNext(a)}var g=a(e);return E(function(){J(b)&&b(e,g)})}).publish().refCount()};return z.startAsync=function(a){var b;try{b=a()}catch(c){return B(c)}return A(b)},c});
//# sourceMappingURL=rx.async.compat.map
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
;(function (factory) {
var objectTypes = {
'boolean': false,
'function': true,
'object': true,
'number': false,
'string': false,
'undefined': false
};
var objectTypes = {
'function': true,
'object': true
};
var root = (objectTypes[typeof window] && window) || this,
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = objectTypes[typeof global] && global;
var
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeSelf = objectTypes[typeof self] && self.Object && self,
freeWindow = objectTypes[typeof window] && window && window.Object && window,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global;
if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) {
root = freeGlobal;
}
var root = root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this;
// Because of build optimizers
if (typeof define === 'function' && define.amd) {
define(['rx.binding', 'exports'], function (Rx, exports) {
root.Rx = factory(root, exports, Rx);
return root.Rx;
});
} else if (typeof module === 'object' && module && module.exports === freeExports) {
module.exports = factory(root, module.exports, require('./rx'));
} else {
root.Rx = factory(root, {}, root.Rx);
}
// Because of build optimizers
if (typeof define === 'function' && define.amd) {
define(['rx.binding', 'exports'], function (Rx, exports) {
root.Rx = factory(root, exports, Rx);
return root.Rx;
});
} else if (typeof module === 'object' && module && module.exports === freeExports) {
module.exports = factory(root, module.exports, require('./rx'));
} else {
root.Rx = factory(root, {}, root.Rx);
}
}.call(this, function (root, exp, Rx, undefined) {

@@ -48,198 +44,140 @@

isScheduler = Rx.Scheduler.isScheduler,
slice = Array.prototype.slice;
isPromise = Rx.helpers.isPromise,
isFunction = Rx.helpers.isFunction;
var fnString = 'function',
throwString = 'throw',
isObject = Rx.internals.isObject;
var errorObj = {e: {}};
var tryCatchTarget;
function tryCatcher() {
try {
return tryCatchTarget.apply(this, arguments);
} catch (e) {
errorObj.e = e;
return errorObj;
}
}
function tryCatch(fn) {
if (!isFunction(fn)) { throw new TypeError('fn must be a function'); }
tryCatchTarget = fn;
return tryCatcher;
}
function thrower(e) {
throw e;
}
function toThunk(obj, ctx) {
if (Array.isArray(obj)) { return objectToThunk.call(ctx, obj); }
if (isGeneratorFunction(obj)) { return observableSpawn(obj.call(ctx)); }
if (isGenerator(obj)) { return observableSpawn(obj); }
if (isObservable(obj)) { return observableToThunk(obj); }
if (isPromise(obj)) { return promiseToThunk(obj); }
if (typeof obj === fnString) { return obj; }
if (isObject(obj) || Array.isArray(obj)) { return objectToThunk.call(ctx, obj); }
var spawn = Observable.spawn = function () {
var gen = arguments[0], self = this, args = [];
for (var i = 1, len = arguments.length; i < len; i++) { args.push(arguments[i]); }
return obj;
}
return new AnonymousObservable(function (o) {
var g = new CompositeDisposable();
function objectToThunk(obj) {
var ctx = this;
if (isFunction(gen)) { gen = gen.apply(self, args); }
if (!gen || !isFunction(gen.next)) {
o.onNext(gen);
return o.onCompleted();
}
return function (done) {
var keys = Object.keys(obj),
pending = keys.length,
results = new obj.constructor(),
finished;
processGenerator();
if (!pending) {
timeoutScheduler.schedule(function () { done(null, results); });
return;
function processGenerator(res) {
var ret = tryCatch(gen.next).call(gen, res);
if (ret === errorObj) { return o.onError(ret.e); }
next(ret);
}
for (var i = 0, len = keys.length; i < len; i++) {
run(obj[keys[i]], keys[i]);
function onError(err) {
var ret = tryCatch(gen.next).call(gen, err);
if (ret === errorObj) { return o.onError(ret.e); }
next(ret);
}
function run(fn, key) {
if (finished) { return; }
try {
fn = toThunk(fn, ctx);
function next(ret) {
if (ret.done) {
o.onNext(ret.value);
o.onCompleted();
}
var value = toObservable.call(self, ret.value);
if (Observable.isObservable(value)) {
g.add(value.subscribe(processGenerator, onError));
} else {
onError(new TypeError('type not supported'));
}
}
if (typeof fn !== fnString) {
results[key] = fn;
return --pending || done(null, results);
}
return g;
});
}
fn.call(ctx, function(err, res) {
if (finished) { return; }
function toObservable(obj) {
if (!obj) { return obj; }
if (Observable.isObservable(obj)) { return obj; }
if (isPromise(obj)) { return Observable.fromPromise(obj); }
if (isGeneratorFunction(obj) || isGenerator(obj)) { return spawn.call(this, obj); }
if (isFunction(obj)) { return thunkToObservable.call(this, obj); }
if (isArrayLike(obj) || isIterable(obj)) { return arrayToObservable.call(this, obj); }
if (isObject(obj)) return objectToObservable.call(this, obj);
return obj;
}
if (err) {
finished = true;
return done(err);
}
function arrayToObservable (obj) {
return Observable.from(obj)
.map(toObservable, this)
.toArray();
}
results[key] = res;
--pending || done(null, results);
});
} catch (e) {
finished = true;
done(e);
}
function objectToObservable (obj) {
var results = new obj.constructor(), keys = Object.keys(obj), observables = [];
for (var i = 0, len = keys.length; i < len; i++) {
var key = keys[i], observable = toObservable.call(this, obj[key]);
if (observable && Observable.isObservable(observable)) {
defer(observable, key);
} else {
results[key] = obj[key];
}
}
}
return Observable.concat(observables).startWith(results);
function observableToThunk(observable) {
return function (fn) {
var value, hasValue = false;
observable.subscribe(
function (v) {
value = v;
hasValue = true;
},
fn,
function () {
hasValue && fn(null, value);
function defer (observable, key) {
results[key] = undefined;
observables.push(new AnonymousObservable(function (o) {
return observable.subscribe(function (next) {
results[key] = next;
o.onCompleted();
});
}));
}
}
function promiseToThunk(promise) {
return function(fn) {
promise.then(function(res) {
fn(null, res);
}, fn);
}
function thunkToObservable(fn) {
var self = this;
return new AnonymousObservable(function (o) {
fn.call(self, function () {
var err = arguments[0], res = arguments[1];
if (err) { return o.onError(err); }
if (arguments.length > 2) {
var args = [];
for (var i = 1, len = arguments.length; i < len; i++) { args.push(arguments[i]); }
res = args;
}
o.onNext(res);
o.onCompleted();
});
});
}
function isObservable(obj) {
return obj && typeof obj.subscribe === fnString;
function isGenerator(obj) {
return isFunction (obj.next) && isFunction (obj.throw);
}
function isGeneratorFunction(obj) {
return obj && obj.constructor && obj.constructor.name === 'GeneratorFunction';
var ctor = obj.constructor;
if (!ctor) { return false; }
if (ctor.name === 'GeneratorFunction' || ctor.displayName === 'GeneratorFunction') { return true; }
return isGenerator(ctor.prototype);
}
function isGenerator(obj) {
return obj && typeof obj.next === fnString && typeof obj[throwString] === fnString;
function isObject(val) {
return Object == val.constructor;
}
/*
* Spawns a generator function which allows for Promises, Observable sequences, Arrays, Objects, Generators and functions.
* @param {Function} The spawning function.
* @returns {Function} a function which has a done continuation.
*/
var observableSpawn = Rx.spawn = function (fn) {
var isGenFun = isGeneratorFunction(fn);
return function (done) {
var ctx = this,
gen = fn;
if (isGenFun) {
for(var args = [], i = 0, len = arguments.length; i < len; i++) { args.push(arguments[i]); }
var len = args.length,
hasCallback = len && typeof args[len - 1] === fnString;
done = hasCallback ? args.pop() : handleError;
gen = fn.apply(this, args);
} else {
done = done || handleError;
}
next();
function exit(err, res) {
timeoutScheduler.schedule(done.bind(ctx, err, res));
}
function next(err, res) {
var ret;
// multiple args
if (arguments.length > 2) {
for(var res = [], i = 1, len = arguments.length; i < len; i++) { res.push(arguments[i]); }
}
if (err) {
try {
ret = gen[throwString](err);
} catch (e) {
return exit(e);
}
}
if (!err) {
try {
ret = gen.next(res);
} catch (e) {
return exit(e);
}
}
if (ret.done) {
return exit(null, ret.value);
}
ret.value = toThunk(ret.value, ctx);
if (typeof ret.value === fnString) {
var called = false;
try {
ret.value.call(ctx, function() {
if (called) {
return;
}
called = true;
next.apply(ctx, arguments);
});
} catch (e) {
timeoutScheduler.schedule(function () {
if (called) {
return;
}
called = true;
next.call(ctx, e);
});
}
return;
}
// Not supported
next(new TypeError('Rx.spawn only supports a function, Promise, Observable, Object or Array.'));
}
}
};
function handleError(err) {
if (!err) { return; }
timeoutScheduler.schedule(function() {
throw err;
});
}
/**

@@ -294,100 +232,109 @@ * Invokes the specified function asynchronously on the specified scheduler, surfacing the result through an observable sequence.

/**
* Converts a callback function to an observable sequence.
*
* @param {Function} function Function with a callback as the last parameter to convert to an Observable sequence.
* @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined.
* @param {Function} [selector] A selector which takes the arguments from the callback to produce a single item to yield on next.
* @returns {Function} A function, when executed with the required parameters minus the callback, produces an Observable sequence with a single value of the arguments to the callback as an array.
*/
Observable.fromCallback = function (func, context, selector) {
return function () {
var len = arguments.length, args = new Array(len)
for(var i = 0; i < len; i++) { args[i] = arguments[i]; }
function createCbObservable(fn, ctx, selector, args) {
var o = new AsyncSubject();
return new AnonymousObservable(function (observer) {
function handler() {
var len = arguments.length, results = new Array(len);
for(var i = 0; i < len; i++) { results[i] = arguments[i]; }
args.push(createCbHandler(o, ctx, selector));
fn.apply(ctx, args);
if (selector) {
try {
results = selector.apply(context, results);
} catch (e) {
return observer.onError(e);
}
return o.asObservable();
}
observer.onNext(results);
} else {
if (results.length <= 1) {
observer.onNext.apply(observer, results);
} else {
observer.onNext(results);
}
}
function createCbHandler(o, ctx, selector) {
return function handler () {
var len = arguments.length, results = new Array(len);
for(var i = 0; i < len; i++) { results[i] = arguments[i]; }
observer.onCompleted();
}
if (isFunction(selector)) {
results = tryCatch(selector).apply(ctx, results);
if (results === errorObj) { return o.onError(results.e); }
o.onNext(results);
} else {
if (results.length <= 1) {
o.onNext(results[0]);
} else {
o.onNext(results);
}
}
args.push(handler);
func.apply(context, args);
}).publishLast().refCount();
};
o.onCompleted();
};
}
/**
* Converts a Node.js callback style function to an observable sequence. This must be in function (err, ...) format.
* @param {Function} func The function to call
* @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined.
* @param {Function} [selector] A selector which takes the arguments from the callback minus the error to produce a single item to yield on next.
* @returns {Function} An async function which when applied, returns an observable sequence with the callback arguments as an array.
*/
Observable.fromNodeCallback = function (func, context, selector) {
return function () {
var len = arguments.length, args = new Array(len);
for(var i = 0; i < len; i++) { args[i] = arguments[i]; }
/**
* Converts a callback function to an observable sequence.
*
* @param {Function} fn Function with a callback as the last parameter to convert to an Observable sequence.
* @param {Mixed} [ctx] The context for the func parameter to be executed. If not specified, defaults to undefined.
* @param {Function} [selector] A selector which takes the arguments from the callback to produce a single item to yield on next.
* @returns {Function} A function, when executed with the required parameters minus the callback, produces an Observable sequence with a single value of the arguments to the callback as an array.
*/
Observable.fromCallback = function (fn, ctx, selector) {
return function () {
var len = arguments.length, args = new Array(len)
for(var i = 0; i < len; i++) { args[i] = arguments[i]; }
return createCbObservable(fn, ctx, selector, args);
};
};
return new AnonymousObservable(function (observer) {
function handler(err) {
if (err) {
observer.onError(err);
return;
}
function createNodeObservable(fn, ctx, selector, args) {
var o = new AsyncSubject();
var len = arguments.length, results = [];
for(var i = 1; i < len; i++) { results[i - 1] = arguments[i]; }
args.push(createNodeHandler(o, ctx, selector));
fn.apply(ctx, args);
if (selector) {
try {
results = selector.apply(context, results);
} catch (e) {
return observer.onError(e);
}
observer.onNext(results);
} else {
if (results.length <= 1) {
observer.onNext.apply(observer, results);
} else {
observer.onNext(results);
}
}
return o.asObservable();
}
observer.onCompleted();
}
function createNodeHandler(o, ctx, selector) {
return function handler () {
var err = arguments[0];
if (err) { return o.onError(err); }
args.push(handler);
func.apply(context, args);
}).publishLast().refCount();
};
var len = arguments.length, results = [];
for(var i = 1; i < len; i++) { results[i - 1] = arguments[i]; }
if (isFunction(selector)) {
var results = tryCatch(selector).apply(ctx, results);
if (results === errorObj) { return o.onError(results.e); }
o.onNext(results);
} else {
if (results.length <= 1) {
o.onNext(results[0]);
} else {
o.onNext(results);
}
}
o.onCompleted();
};
}
function createListener (element, name, handler) {
if (element.addEventListener) {
element.addEventListener(name, handler, false);
return disposableCreate(function () {
element.removeEventListener(name, handler, false);
});
/**
* Converts a Node.js callback style function to an observable sequence. This must be in function (err, ...) format.
* @param {Function} fn The function to call
* @param {Mixed} [ctx] The context for the func parameter to be executed. If not specified, defaults to undefined.
* @param {Function} [selector] A selector which takes the arguments from the callback minus the error to produce a single item to yield on next.
* @returns {Function} An async function which when applied, returns an observable sequence with the callback arguments as an array.
*/
Observable.fromNodeCallback = function (fn, ctx, selector) {
return function () {
var len = arguments.length, args = new Array(len);
for(var i = 0; i < len; i++) { args[i] = arguments[i]; }
return createNodeObservable(fn, ctx, selector, args);
};
};
function ListenDisposable(e, n, fn) {
this._e = e;
this._n = n;
this._fn = fn;
this._e.addEventListener(this._n, this._fn, false);
this.isDisposed = false;
}
ListenDisposable.prototype.dispose = function () {
if (!this.isDisposed) {
this._e.removeEventListener(this._n, this._fn, false);
this.isDisposed = true;
}
throw new Error('No listener found');
}
};

@@ -404,3 +351,3 @@ function createEventListener (el, eventName, handler) {

} else if (el) {
disposables.add(createListener(el, eventName, handler));
disposables.add(new ListenDisposable(el, eventName, handler));
}

@@ -418,6 +365,2 @@

* Creates an observable sequence by adding an event listener to the matching DOMElement or each item in the NodeList.
*
* @example
* var source = Rx.Observable.fromEvent(element, 'mouseup');
*
* @param {Object} element The DOMElement or NodeList to attach a listener.

@@ -447,19 +390,19 @@ * @param {String} eventName The event name to attach the observable sequence.

}
return new AnonymousObservable(function (observer) {
function eventHandler(o) {
return function handler () {
var results = arguments[0];
if (isFunction(selector)) {
results = tryCatch(selector).apply(null, arguments);
if (results === errorObj) { return o.onError(results.e); }
}
o.onNext(results);
};
}
return new AnonymousObservable(function (o) {
return createEventListener(
element,
eventName,
function handler (e) {
var results = e;
if (selector) {
try {
results = selector(arguments);
} catch (err) {
return observer.onError(err);
}
}
observer.onNext(results);
});
eventHandler(o));
}).publish().refCount();

@@ -476,13 +419,10 @@ };

var fromEventPattern = Observable.fromEventPattern = function (addHandler, removeHandler, selector) {
return new AnonymousObservable(function (observer) {
function innerHandler (e) {
var result = e;
if (selector) {
try {
result = selector(arguments);
} catch (err) {
return observer.onError(err);
}
return new AnonymousObservable(function (o) {
function innerHandler () {
var result = arguments[0];
if (isFunction(selector)) {
result = tryCatch(selector).apply(null, arguments);
if (result === errorObj) { return o.onError(result.e); }
}
observer.onNext(result);
o.onNext(result);
}

@@ -492,5 +432,3 @@

return disposableCreate(function () {
if (removeHandler) {
removeHandler(innerHandler, returnValue);
}
isFunction(removeHandler) && removeHandler(innerHandler, returnValue);
});

@@ -497,0 +435,0 @@ }).publish().refCount();

/* Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.*/
(function(a){var b={"boolean":!1,"function":!0,object:!0,number:!1,string:!1,undefined:!1},c=b[typeof window]&&window||this,d=b[typeof exports]&&exports&&!exports.nodeType&&exports,e=b[typeof module]&&module&&!module.nodeType&&module,f=(e&&e.exports===d&&d,b[typeof global]&&global);!f||f.global!==f&&f.window!==f||(c=f),"function"==typeof define&&define.amd?define(["rx.binding","exports"],function(b,d){return c.Rx=a(c,d,b),c.Rx}):"object"==typeof module&&module&&module.exports===d?module.exports=a(c,module.exports,require("./rx")):c.Rx=a(c,{},c.Rx)}).call(this,function(a,b,c,d){function e(a,b){return Array.isArray(a)?f.call(b,a):j(a)?A(a.call(b)):k(a)?A(a):i(a)?g(a):isPromise(a)?h(a):typeof a===x?a:z(a)||Array.isArray(a)?f.call(b,a):a}function f(a){var b=this;return function(c){function d(a,d){if(!f)try{if(a=e(a,b),typeof a!==x)return i[d]=a,--h||c(null,i);a.call(b,function(a,b){if(!f){if(a)return f=!0,c(a);i[d]=b,--h||c(null,i)}})}catch(g){f=!0,c(g)}}var f,g=Object.keys(a),h=g.length,i=new a.constructor;if(!h)return void v.schedule(function(){c(null,i)});for(var j=0,k=g.length;k>j;j++)d(a[g[j]],g[j])}}function g(a){return function(b){var c,d=!1;a.subscribe(function(a){c=a,d=!0},b,function(){d&&b(null,c)})}}function h(a){return function(b){a.then(function(a){b(null,a)},b)}}function i(a){return a&&typeof a.subscribe===x}function j(a){return a&&a.constructor&&"GeneratorFunction"===a.constructor.name}function k(a){return a&&typeof a.next===x&&typeof a[y]===x}function l(a){a&&v.schedule(function(){throw a})}function m(a,b,c){if(a.addEventListener)return a.addEventListener(b,c,!1),t(function(){a.removeEventListener(b,c,!1)});throw new Error("No listener found")}function n(a,b,c){var d=new u,e=Object.prototype.toString;if("[object NodeList]"===e.call(a)||"[object HTMLCollection]"===e.call(a))for(var f=0,g=a.length;g>f;f++)d.add(n(a.item(f),b,c));else a&&d.add(m(a,b,c));return d}var o=c.Observable,p=(o.prototype,o.fromPromise),q=o.throwError,r=c.AnonymousObservable,s=c.AsyncSubject,t=c.Disposable.create,u=c.CompositeDisposable,v=(c.Scheduler.immediate,c.Scheduler["default"]),w=c.Scheduler.isScheduler,x=(Array.prototype.slice,"function"),y="throw",z=c.internals.isObject,A=c.spawn=function(a){var b=j(a);return function(c){function d(a,b){v.schedule(c.bind(g,a,b))}function f(a,b){var c;if(arguments.length>2)for(var b=[],i=1,j=arguments.length;j>i;i++)b.push(arguments[i]);if(a)try{c=h[y](a)}catch(k){return d(k)}if(!a)try{c=h.next(b)}catch(k){return d(k)}if(c.done)return d(null,c.value);if(c.value=e(c.value,g),typeof c.value!==x)f(new TypeError("Rx.spawn only supports a function, Promise, Observable, Object or Array."));else{var l=!1;try{c.value.call(g,function(){l||(l=!0,f.apply(g,arguments))})}catch(k){v.schedule(function(){l||(l=!0,f.call(g,k))})}}}var g=this,h=a;if(b){for(var i=[],j=0,k=arguments.length;k>j;j++)i.push(arguments[j]);var k=i.length,m=k&&typeof i[k-1]===x;c=m?i.pop():l,h=a.apply(this,i)}else c=c||l;f()}};o.start=function(a,b,c){return B(a,b,c)()};var B=o.toAsync=function(a,b,c){return w(c)||(c=v),function(){var d=arguments,e=new s;return c.schedule(function(){var c;try{c=a.apply(b,d)}catch(f){return void e.onError(f)}e.onNext(c),e.onCompleted()}),e.asObservable()}};o.fromCallback=function(a,b,c){return function(){for(var d=arguments.length,e=new Array(d),f=0;d>f;f++)e[f]=arguments[f];return new r(function(d){function f(){for(var a=arguments.length,e=new Array(a),f=0;a>f;f++)e[f]=arguments[f];if(c){try{e=c.apply(b,e)}catch(g){return d.onError(g)}d.onNext(e)}else e.length<=1?d.onNext.apply(d,e):d.onNext(e);d.onCompleted()}e.push(f),a.apply(b,e)}).publishLast().refCount()}},o.fromNodeCallback=function(a,b,c){return function(){for(var d=arguments.length,e=new Array(d),f=0;d>f;f++)e[f]=arguments[f];return new r(function(d){function f(a){if(a)return void d.onError(a);for(var e=arguments.length,f=[],g=1;e>g;g++)f[g-1]=arguments[g];if(c){try{f=c.apply(b,f)}catch(h){return d.onError(h)}d.onNext(f)}else f.length<=1?d.onNext.apply(d,f):d.onNext(f);d.onCompleted()}e.push(f),a.apply(b,e)}).publishLast().refCount()}},c.config.useNativeEvents=!1,o.fromEvent=function(a,b,d){return a.addListener?C(function(c){a.addListener(b,c)},function(c){a.removeListener(b,c)},d):c.config.useNativeEvents||"function"!=typeof a.on||"function"!=typeof a.off?new r(function(c){return n(a,b,function(a){var b=a;if(d)try{b=d(arguments)}catch(e){return c.onError(e)}c.onNext(b)})}).publish().refCount():C(function(c){a.on(b,c)},function(c){a.off(b,c)},d)};var C=o.fromEventPattern=function(a,b,c){return new r(function(d){function e(a){var b=a;if(c)try{b=c(arguments)}catch(e){return d.onError(e)}d.onNext(b)}var f=a(e);return t(function(){b&&b(e,f)})}).publish().refCount()};return o.startAsync=function(a){var b;try{b=a()}catch(c){return q(c)}return p(b)},c});
(function(a){var b={"function":!0,object:!0},c=b[typeof exports]&&exports&&!exports.nodeType&&exports,d=b[typeof self]&&self.Object&&self,e=b[typeof window]&&window&&window.Object&&window,f=b[typeof module]&&module&&!module.nodeType&&module,g=(f&&f.exports===c&&c,c&&f&&"object"==typeof global&&global&&global.Object&&global),h=h=g||e!==(this&&this.window)&&e||d||this;"function"==typeof define&&define.amd?define(["rx.binding","exports"],function(b,c){return h.Rx=a(h,c,b),h.Rx}):"object"==typeof module&&module&&module.exports===c?module.exports=a(h,module.exports,require("./rx")):h.Rx=a(h,{},h.Rx)}).call(this,function(a,b,c,d){function e(){try{return t.apply(this,arguments)}catch(a){return F.e=a,F}}function f(a){if(!E(a))throw new TypeError("fn must be a function");return t=a,e}function g(a){return a?u.isObservable(a)?a:D(a)?u.fromPromise(a):l(a)||k(a)?G.call(this,a):E(a)?j.call(this,a):isArrayLike(a)||isIterable(a)?h.call(this,a):m(a)?i.call(this,a):a:a}function h(a){return u.from(a).map(g,this).toArray()}function i(a){function b(a,b){c[b]=d,f.push(new x(function(d){return a.subscribe(function(a){c[b]=a,d.onCompleted()})}))}for(var c=new a.constructor,e=Object.keys(a),f=[],h=0,i=e.length;i>h;h++){var j=e[h],k=g.call(this,a[j]);k&&u.isObservable(k)?b(k,j):c[j]=a[j]}return u.concat(f).startWith(c)}function j(a){var b=this;return new x(function(c){a.call(b,function(){var a=arguments[0],b=arguments[1];if(a)return c.onError(a);if(arguments.length>2){for(var d=[],e=1,f=arguments.length;f>e;e++)d.push(arguments[e]);b=d}c.onNext(b),c.onCompleted()})})}function k(a){return E(a.next)&&E(a["throw"])}function l(a){var b=a.constructor;return b?"GeneratorFunction"===b.name||"GeneratorFunction"===b.displayName?!0:k(b.prototype):!1}function m(a){return Object==a.constructor}function n(a,b,c,d){var e=new y;return d.push(o(e,b,c)),a.apply(b,d),e.asObservable()}function o(a,b,c){return function(){for(var d=arguments.length,e=new Array(d),g=0;d>g;g++)e[g]=arguments[g];if(E(c)){if(e=f(c).apply(b,e),e===F)return a.onError(e.e);a.onNext(e)}else e.length<=1?a.onNext(e[0]):a.onNext(e);a.onCompleted()}}function p(a,b,c,d){var e=new y;return d.push(q(e,b,c)),a.apply(b,d),e.asObservable()}function q(a,b,c){return function(){var d=arguments[0];if(d)return a.onError(d);for(var e=arguments.length,g=[],h=1;e>h;h++)g[h-1]=arguments[h];if(E(c)){var g=f(c).apply(b,g);if(g===F)return a.onError(g.e);a.onNext(g)}else g.length<=1?a.onNext(g[0]):a.onNext(g);a.onCompleted()}}function r(a,b,c){this._e=a,this._n=b,this._fn=c,this._e.addEventListener(this._n,this._fn,!1),this.isDisposed=!1}function s(a,b,c){var d=new A,e=Object.prototype.toString;if("[object NodeList]"===e.call(a)||"[object HTMLCollection]"===e.call(a))for(var f=0,g=a.length;g>f;f++)d.add(s(a.item(f),b,c));else a&&d.add(new r(a,b,c));return d}var t,u=c.Observable,v=(u.prototype,u.fromPromise),w=u.throwError,x=c.AnonymousObservable,y=c.AsyncSubject,z=c.Disposable.create,A=c.CompositeDisposable,B=(c.Scheduler.immediate,c.Scheduler["default"]),C=c.Scheduler.isScheduler,D=c.helpers.isPromise,E=c.helpers.isFunction,F={e:{}},G=u.spawn=function(){for(var a=arguments[0],b=this,c=[],d=1,e=arguments.length;e>d;d++)c.push(arguments[d]);return new x(function(d){function e(b){var c=f(a.next).call(a,b);return c===F?d.onError(c.e):void i(c)}function h(b){var c=f(a.next).call(a,b);return c===F?d.onError(c.e):void i(c)}function i(a){a.done&&(d.onNext(a.value),d.onCompleted());var c=g.call(b,a.value);u.isObservable(c)?j.add(c.subscribe(e,h)):h(new TypeError("type not supported"))}var j=new A;return E(a)&&(a=a.apply(b,c)),a&&E(a.next)?(e(),j):(d.onNext(a),d.onCompleted())})};u.start=function(a,b,c){return H(a,b,c)()};var H=u.toAsync=function(a,b,c){return C(c)||(c=B),function(){var d=arguments,e=new y;return c.schedule(function(){var c;try{c=a.apply(b,d)}catch(f){return void e.onError(f)}e.onNext(c),e.onCompleted()}),e.asObservable()}};u.fromCallback=function(a,b,c){return function(){for(var d=arguments.length,e=new Array(d),f=0;d>f;f++)e[f]=arguments[f];return n(a,b,c,e)}},u.fromNodeCallback=function(a,b,c){return function(){for(var d=arguments.length,e=new Array(d),f=0;d>f;f++)e[f]=arguments[f];return p(a,b,c,e)}},r.prototype.dispose=function(){this.isDisposed||(this._e.removeEventListener(this._n,this._fn,!1),this.isDisposed=!0)},c.config.useNativeEvents=!1,u.fromEvent=function(a,b,d){function e(a){return function(){var b=arguments[0];return E(d)&&(b=f(d).apply(null,arguments),b===F)?a.onError(b.e):void a.onNext(b)}}return a.addListener?I(function(c){a.addListener(b,c)},function(c){a.removeListener(b,c)},d):c.config.useNativeEvents||"function"!=typeof a.on||"function"!=typeof a.off?new x(function(c){return s(a,b,e(c))}).publish().refCount():I(function(c){a.on(b,c)},function(c){a.off(b,c)},d)};var I=u.fromEventPattern=function(a,b,c){return new x(function(d){function e(){var a=arguments[0];return E(c)&&(a=f(c).apply(null,arguments),a===F)?d.onError(a.e):void d.onNext(a)}var g=a(e);return z(function(){E(b)&&b(e,g)})}).publish().refCount()};return u.startAsync=function(a){var b;try{b=a()}catch(c){return w(c)}return v(b)},c});
//# sourceMappingURL=rx.async.map
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
;(function (factory) {
var objectTypes = {
'boolean': false,
'function': true,
'object': true,
'number': false,
'string': false,
'undefined': false
};
var objectTypes = {
'function': true,
'object': true
};
var root = (objectTypes[typeof window] && window) || this,
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = objectTypes[typeof global] && global;
var
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeSelf = objectTypes[typeof self] && self.Object && self,
freeWindow = objectTypes[typeof window] && window && window.Object && window,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global;
if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) {
root = freeGlobal;
}
var root = root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this;

@@ -164,3 +160,3 @@ // Because of build optimizers

function next(x, i) {
values[i] = x
values[i] = x;
hasValue[i] = true;

@@ -217,3 +213,3 @@ if (hasValueAll || (hasValueAll = hasValue.every(identity))) {

this.source,
this.pauser.distinctUntilChanged().startWith(false),
this.pauser.startWith(false).distinctUntilChanged(),
function (data, shouldFire) {

@@ -288,140 +284,143 @@ return { data: data, shouldFire: shouldFire };

var ControlledObservable = (function (__super__) {
var ControlledObservable = (function (__super__) {
inherits(ControlledObservable, __super__);
inherits(ControlledObservable, __super__);
function subscribe (observer) {
return this.source.subscribe(observer);
}
function subscribe (observer) {
return this.source.subscribe(observer);
}
function ControlledObservable (source, enableQueue, scheduler) {
__super__.call(this, subscribe, source);
this.subject = new ControlledSubject(enableQueue, scheduler);
this.source = source.multicast(this.subject).refCount();
}
function ControlledObservable (source, enableQueue, scheduler) {
__super__.call(this, subscribe, source);
this.subject = new ControlledSubject(enableQueue, scheduler);
this.source = source.multicast(this.subject).refCount();
}
ControlledObservable.prototype.request = function (numberOfItems) {
return this.subject.request(numberOfItems == null ? -1 : numberOfItems);
};
ControlledObservable.prototype.request = function (numberOfItems) {
return this.subject.request(numberOfItems == null ? -1 : numberOfItems);
};
return ControlledObservable;
return ControlledObservable;
}(Observable));
}(Observable));
var ControlledSubject = (function (__super__) {
var ControlledSubject = (function (__super__) {
function subscribe (observer) {
return this.subject.subscribe(observer);
}
function subscribe (observer) {
return this.subject.subscribe(observer);
}
inherits(ControlledSubject, __super__);
inherits(ControlledSubject, __super__);
function ControlledSubject(enableQueue, scheduler) {
enableQueue == null && (enableQueue = true);
function ControlledSubject(enableQueue, scheduler) {
enableQueue == null && (enableQueue = true);
__super__.call(this, subscribe);
this.subject = new Subject();
this.enableQueue = enableQueue;
this.queue = enableQueue ? [] : null;
this.requestedCount = 0;
this.requestedDisposable = disposableEmpty;
this.error = null;
this.hasFailed = false;
this.hasCompleted = false;
this.scheduler = scheduler || currentThreadScheduler;
}
__super__.call(this, subscribe);
this.subject = new Subject();
this.enableQueue = enableQueue;
this.queue = enableQueue ? [] : null;
this.requestedCount = 0;
this.requestedDisposable = null;
this.error = null;
this.hasFailed = false;
this.hasCompleted = false;
this.scheduler = scheduler || currentThreadScheduler;
}
addProperties(ControlledSubject.prototype, Observer, {
onCompleted: function () {
this.hasCompleted = true;
if (!this.enableQueue || this.queue.length === 0) {
this.subject.onCompleted();
} else {
this.queue.push(Notification.createOnCompleted());
addProperties(ControlledSubject.prototype, Observer, {
onCompleted: function () {
this.hasCompleted = true;
if (!this.enableQueue || this.queue.length === 0) {
this.subject.onCompleted();
this.disposeCurrentRequest()
} else {
this.queue.push(Notification.createOnCompleted());
}
},
onError: function (error) {
this.hasFailed = true;
this.error = error;
if (!this.enableQueue || this.queue.length === 0) {
this.subject.onError(error);
this.disposeCurrentRequest()
} else {
this.queue.push(Notification.createOnError(error));
}
},
onNext: function (value) {
if (this.requestedCount <= 0) {
this.enableQueue && this.queue.push(Notification.createOnNext(value));
} else {
(this.requestedCount-- === 0) && this.disposeCurrentRequest();
this.subject.onNext(value);
}
},
_processRequest: function (numberOfItems) {
if (this.enableQueue) {
while (this.queue.length > 0 && (numberOfItems > 0 || this.queue[0].kind !== 'N')) {
var first = this.queue.shift();
first.accept(this.subject);
if (first.kind === 'N') {
numberOfItems--;
} else {
this.disposeCurrentRequest();
this.queue = [];
}
}
},
onError: function (error) {
this.hasFailed = true;
this.error = error;
if (!this.enableQueue || this.queue.length === 0) {
this.subject.onError(error);
} else {
this.queue.push(Notification.createOnError(error));
}
},
onNext: function (value) {
var hasRequested = false;
}
if (this.requestedCount === 0) {
this.enableQueue && this.queue.push(Notification.createOnNext(value));
} else {
(this.requestedCount !== -1 && this.requestedCount-- === 0) && this.disposeCurrentRequest();
hasRequested = true;
}
hasRequested && this.subject.onNext(value);
},
_processRequest: function (numberOfItems) {
if (this.enableQueue) {
while ((this.queue.length >= numberOfItems && numberOfItems > 0) ||
(this.queue.length > 0 && this.queue[0].kind !== 'N')) {
var first = this.queue.shift();
first.accept(this.subject);
if (first.kind === 'N') {
numberOfItems--;
} else {
this.disposeCurrentRequest();
this.queue = [];
}
}
return numberOfItems;
},
request: function (number) {
this.disposeCurrentRequest();
var self = this;
return { numberOfItems : numberOfItems, returnValue: this.queue.length !== 0};
this.requestedDisposable = this.scheduler.scheduleWithState(number,
function(s, i) {
var remaining = self._processRequest(i);
var stopped = self.hasCompleted || self.hasFailed
if (!stopped && remaining > 0) {
self.requestedCount = remaining;
return disposableCreate(function () {
self.requestedCount = 0;
});
// Scheduled item is still in progress. Return a new
// disposable to allow the request to be interrupted
// via dispose.
}
});
return { numberOfItems: numberOfItems, returnValue: false };
},
request: function (number) {
this.disposeCurrentRequest();
var self = this;
this.requestedDisposable = this.scheduler.scheduleWithState(number,
function(s, i) {
var r = self._processRequest(i), remaining = r.numberOfItems;
if (!r.returnValue) {
self.requestedCount = remaining;
self.requestedDisposable = disposableCreate(function () {
self.requestedCount = 0;
});
}
});
return this.requestedDisposable;
},
disposeCurrentRequest: function () {
return this.requestedDisposable;
},
disposeCurrentRequest: function () {
if (this.requestedDisposable) {
this.requestedDisposable.dispose();
this.requestedDisposable = disposableEmpty;
this.requestedDisposable = null;
}
});
}
});
return ControlledSubject;
}(Observable));
return ControlledSubject;
}(Observable));
/**
* Attaches a controller to the observable sequence with the ability to queue.
* @example
* var source = Rx.Observable.interval(100).controlled();
* source.request(3); // Reads 3 values
* @param {bool} enableQueue truthy value to determine if values should be queued pending the next request
* @param {Scheduler} scheduler determines how the requests will be scheduled
* @returns {Observable} The observable sequence which only propagates values on request.
*/
observableProto.controlled = function (enableQueue, scheduler) {
/**
* Attaches a controller to the observable sequence with the ability to queue.
* @example
* var source = Rx.Observable.interval(100).controlled();
* source.request(3); // Reads 3 values
* @param {bool} enableQueue truthy value to determine if values should be queued pending the next request
* @param {Scheduler} scheduler determines how the requests will be scheduled
* @returns {Observable} The observable sequence which only propagates values on request.
*/
observableProto.controlled = function (enableQueue, scheduler) {
if (enableQueue && isScheduler(enableQueue)) {
scheduler = enableQueue;
enableQueue = true;
}
if (enableQueue && isScheduler(enableQueue)) {
scheduler = enableQueue;
enableQueue = true;
}
if (enableQueue == null) { enableQueue = true; }
return new ControlledObservable(this, enableQueue, scheduler);
};
if (enableQueue == null) { enableQueue = true; }
return new ControlledObservable(this, enableQueue, scheduler);
};

@@ -582,3 +581,35 @@ var StopAndWaitObservable = (function (__super__) {

/**
* Pipes the existing Observable sequence into a Node.js Stream.
* @param {Stream} dest The destination Node.js stream.
* @returns {Stream} The destination stream.
*/
observableProto.pipe = function (dest) {
var source = this.pausableBuffered();
function onDrain() {
source.resume();
}
dest.addListener('drain', onDrain);
source.subscribe(
function (x) {
!dest.write(String(x)) && source.pause();
},
function (err) {
dest.emit('error', err);
},
function () {
// Hack check because STDIO is not closable
!dest._isStdio && dest.end();
dest.removeListener('drain', onDrain);
});
source.resume();
return dest;
};
return Rx;
}));
/* Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.*/
(function(a){var b={"boolean":!1,"function":!0,object:!0,number:!1,string:!1,undefined:!1},c=b[typeof window]&&window||this,d=b[typeof exports]&&exports&&!exports.nodeType&&exports,e=b[typeof module]&&module&&!module.nodeType&&module,f=(e&&e.exports===d&&d,b[typeof global]&&global);!f||f.global!==f&&f.window!==f||(c=f),"function"==typeof define&&define.amd?define(["rx"],function(b,d){return a(c,d,b)}):"object"==typeof module&&module&&module.exports===d?module.exports=a(c,module.exports,require("./rx")):c.Rx=a(c,{},c.Rx)}).call(this,function(a,b,c,d){function e(){try{return h.apply(this,arguments)}catch(a){return z.e=a,z}}function f(a){if(!y(a))throw new TypeError("fn must be a function");return h=a,e}function g(a,b,c){return new k(function(d){function e(a,b){if(k[b]=a,h[b]=!0,i||(i=h.every(w))){if(g)return d.onError(g);var e=f(c).apply(null,k);if(e===z)return d.onError(e.e);d.onNext(e)}j&&k[1]&&d.onCompleted()}var g,h=[!1,!1],i=!1,j=!1,k=new Array(2);return new m(a.subscribe(function(a){e(a,0)},function(a){k[1]?d.onError(a):g=a},function(){j=!0,k[1]&&d.onCompleted()}),b.subscribe(function(a){e(a,1)},function(a){d.onError(a)},function(){j=!0,e(!0,1)}))},a)}var h,i=c.Observable,j=i.prototype,k=c.AnonymousObservable,l=c.internals.AbstractObserver,m=c.CompositeDisposable,n=c.Notification,o=c.Subject,p=c.Observer,q=c.Disposable.empty,r=c.Disposable.create,s=c.internals.inherits,t=c.internals.addProperties,u=c.Scheduler.timeout,v=c.Scheduler.currentThread,w=c.helpers.identity,x=c.Scheduler.isScheduler,y=c.helpers.isFunction,z=(c.Disposable.checkDisposed,{e:{}});c.Pauser=function(a){function b(){a.call(this)}return s(b,a),b.prototype.pause=function(){this.onNext(!1)},b.prototype.resume=function(){this.onNext(!0)},b}(o);var A=function(a){function b(a){var b=this.source.publish(),c=b.subscribe(a),d=q,e=this.pauser.distinctUntilChanged().subscribe(function(a){a?d=b.connect():(d.dispose(),d=q)});return new m(c,d,e)}function c(c,d){this.source=c,this.controller=new o,d&&d.subscribe?this.pauser=this.controller.merge(d):this.pauser=this.controller,a.call(this,b,c)}return s(c,a),c.prototype.pause=function(){this.controller.onNext(!1)},c.prototype.resume=function(){this.controller.onNext(!0)},c}(i);j.pausable=function(a){return new A(this,a)};var B=function(a){function b(a){function b(){for(;e.length>0;)a.onNext(e.shift())}var c,e=[],f=g(this.source,this.pauser.distinctUntilChanged().startWith(!1),function(a,b){return{data:a,shouldFire:b}}).subscribe(function(f){c!==d&&f.shouldFire!=c?(c=f.shouldFire,f.shouldFire&&b()):(c=f.shouldFire,f.shouldFire?a.onNext(f.data):e.push(f.data))},function(c){b(),a.onError(c)},function(){b(),a.onCompleted()});return f}function c(c,d){this.source=c,this.controller=new o,d&&d.subscribe?this.pauser=this.controller.merge(d):this.pauser=this.controller,a.call(this,b,c)}return s(c,a),c.prototype.pause=function(){this.controller.onNext(!1)},c.prototype.resume=function(){this.controller.onNext(!0)},c}(i);j.pausableBuffered=function(a){return new B(this,a)};var C=function(a){function b(a){return this.source.subscribe(a)}function c(c,d,e){a.call(this,b,c),this.subject=new D(d,e),this.source=c.multicast(this.subject).refCount()}return s(c,a),c.prototype.request=function(a){return this.subject.request(null==a?-1:a)},c}(i),D=function(a){function b(a){return this.subject.subscribe(a)}function c(c,d){null==c&&(c=!0),a.call(this,b),this.subject=new o,this.enableQueue=c,this.queue=c?[]:null,this.requestedCount=0,this.requestedDisposable=q,this.error=null,this.hasFailed=!1,this.hasCompleted=!1,this.scheduler=d||v}return s(c,a),t(c.prototype,p,{onCompleted:function(){this.hasCompleted=!0,this.enableQueue&&0!==this.queue.length?this.queue.push(n.createOnCompleted()):this.subject.onCompleted()},onError:function(a){this.hasFailed=!0,this.error=a,this.enableQueue&&0!==this.queue.length?this.queue.push(n.createOnError(a)):this.subject.onError(a)},onNext:function(a){var b=!1;0===this.requestedCount?this.enableQueue&&this.queue.push(n.createOnNext(a)):(-1!==this.requestedCount&&0===this.requestedCount--&&this.disposeCurrentRequest(),b=!0),b&&this.subject.onNext(a)},_processRequest:function(a){if(this.enableQueue){for(;this.queue.length>=a&&a>0||this.queue.length>0&&"N"!==this.queue[0].kind;){var b=this.queue.shift();b.accept(this.subject),"N"===b.kind?a--:(this.disposeCurrentRequest(),this.queue=[])}return{numberOfItems:a,returnValue:0!==this.queue.length}}return{numberOfItems:a,returnValue:!1}},request:function(a){this.disposeCurrentRequest();var b=this;return this.requestedDisposable=this.scheduler.scheduleWithState(a,function(a,c){var d=b._processRequest(c),e=d.numberOfItems;d.returnValue||(b.requestedCount=e,b.requestedDisposable=r(function(){b.requestedCount=0}))}),this.requestedDisposable},disposeCurrentRequest:function(){this.requestedDisposable.dispose(),this.requestedDisposable=q}}),c}(i);j.controlled=function(a,b){return a&&x(a)&&(b=a,a=!0),null==a&&(a=!0),new C(this,a,b)};var E=function(a){function b(a){this.subscription=this.source.subscribe(new d(a,this,this.subscription));var b=this;return u.schedule(function(){b.source.request(1)}),this.subscription}function c(c){a.call(this,b,c),this.source=c}s(c,a);var d=function(a){function b(b,c,d){a.call(this),this.observer=b,this.observable=c,this.cancel=d}s(b,a);var c=b.prototype;return c.completed=function(){this.observer.onCompleted(),this.dispose()},c.error=function(a){this.observer.onError(a),this.dispose()},c.next=function(a){this.observer.onNext(a);var b=this;u.schedule(function(){b.observable.source.request(1)})},c.dispose=function(){this.observer=null,this.cancel&&(this.cancel.dispose(),this.cancel=null),a.prototype.dispose.call(this)},b}(l);return c}(i);C.prototype.stopAndWait=function(){return new E(this)};var F=function(a){function b(a){this.subscription=this.source.subscribe(new d(a,this,this.subscription));var b=this;return u.schedule(function(){b.source.request(b.windowSize)}),this.subscription}function c(c,d){a.call(this,b,c),this.source=c,this.windowSize=d}s(c,a);var d=function(a){function b(a,b,c){this.observer=a,this.observable=b,this.cancel=c,this.received=0}s(b,a);var c=b.prototype;return c.completed=function(){this.observer.onCompleted(),this.dispose()},c.error=function(a){this.observer.onError(a),this.dispose()},c.next=function(a){if(this.observer.onNext(a),this.received=++this.received%this.observable.windowSize,0===this.received){var b=this;u.schedule(function(){b.observable.source.request(b.observable.windowSize)})}},c.dispose=function(){this.observer=null,this.cancel&&(this.cancel.dispose(),this.cancel=null),a.prototype.dispose.call(this)},b}(l);return c}(i);return C.prototype.windowed=function(a){return new F(this,a)},c});
(function(a){var b={"function":!0,object:!0},c=b[typeof exports]&&exports&&!exports.nodeType&&exports,d=b[typeof self]&&self.Object&&self,e=b[typeof window]&&window&&window.Object&&window,f=b[typeof module]&&module&&!module.nodeType&&module,g=(f&&f.exports===c&&c,c&&f&&"object"==typeof global&&global&&global.Object&&global),h=h=g||e!==(this&&this.window)&&e||d||this;"function"==typeof define&&define.amd?define(["rx"],function(b,c){return a(h,c,b)}):"object"==typeof module&&module&&module.exports===c?module.exports=a(h,module.exports,require("./rx")):h.Rx=a(h,{},h.Rx)}).call(this,function(a,b,c,d){function e(){try{return h.apply(this,arguments)}catch(a){return z.e=a,z}}function f(a){if(!y(a))throw new TypeError("fn must be a function");return h=a,e}function g(a,b,c){return new k(function(d){function e(a,b){if(k[b]=a,h[b]=!0,i||(i=h.every(w))){if(g)return d.onError(g);var e=f(c).apply(null,k);if(e===z)return d.onError(e.e);d.onNext(e)}j&&k[1]&&d.onCompleted()}var g,h=[!1,!1],i=!1,j=!1,k=new Array(2);return new m(a.subscribe(function(a){e(a,0)},function(a){k[1]?d.onError(a):g=a},function(){j=!0,k[1]&&d.onCompleted()}),b.subscribe(function(a){e(a,1)},function(a){d.onError(a)},function(){j=!0,e(!0,1)}))},a)}var h,i=c.Observable,j=i.prototype,k=c.AnonymousObservable,l=c.internals.AbstractObserver,m=c.CompositeDisposable,n=c.Notification,o=c.Subject,p=c.Observer,q=c.Disposable.empty,r=c.Disposable.create,s=c.internals.inherits,t=c.internals.addProperties,u=c.Scheduler.timeout,v=c.Scheduler.currentThread,w=c.helpers.identity,x=c.Scheduler.isScheduler,y=c.helpers.isFunction,z=(c.Disposable.checkDisposed,{e:{}});c.Pauser=function(a){function b(){a.call(this)}return s(b,a),b.prototype.pause=function(){this.onNext(!1)},b.prototype.resume=function(){this.onNext(!0)},b}(o);var A=function(a){function b(a){var b=this.source.publish(),c=b.subscribe(a),d=q,e=this.pauser.distinctUntilChanged().subscribe(function(a){a?d=b.connect():(d.dispose(),d=q)});return new m(c,d,e)}function c(c,d){this.source=c,this.controller=new o,d&&d.subscribe?this.pauser=this.controller.merge(d):this.pauser=this.controller,a.call(this,b,c)}return s(c,a),c.prototype.pause=function(){this.controller.onNext(!1)},c.prototype.resume=function(){this.controller.onNext(!0)},c}(i);j.pausable=function(a){return new A(this,a)};var B=function(a){function b(a){function b(){for(;e.length>0;)a.onNext(e.shift())}var c,e=[],f=g(this.source,this.pauser.startWith(!1).distinctUntilChanged(),function(a,b){return{data:a,shouldFire:b}}).subscribe(function(f){c!==d&&f.shouldFire!=c?(c=f.shouldFire,f.shouldFire&&b()):(c=f.shouldFire,f.shouldFire?a.onNext(f.data):e.push(f.data))},function(c){b(),a.onError(c)},function(){b(),a.onCompleted()});return f}function c(c,d){this.source=c,this.controller=new o,d&&d.subscribe?this.pauser=this.controller.merge(d):this.pauser=this.controller,a.call(this,b,c)}return s(c,a),c.prototype.pause=function(){this.controller.onNext(!1)},c.prototype.resume=function(){this.controller.onNext(!0)},c}(i);j.pausableBuffered=function(a){return new B(this,a)};var C=function(a){function b(a){return this.source.subscribe(a)}function c(c,d,e){a.call(this,b,c),this.subject=new D(d,e),this.source=c.multicast(this.subject).refCount()}return s(c,a),c.prototype.request=function(a){return this.subject.request(null==a?-1:a)},c}(i),D=function(a){function b(a){return this.subject.subscribe(a)}function c(c,d){null==c&&(c=!0),a.call(this,b),this.subject=new o,this.enableQueue=c,this.queue=c?[]:null,this.requestedCount=0,this.requestedDisposable=null,this.error=null,this.hasFailed=!1,this.hasCompleted=!1,this.scheduler=d||v}return s(c,a),t(c.prototype,p,{onCompleted:function(){this.hasCompleted=!0,this.enableQueue&&0!==this.queue.length?this.queue.push(n.createOnCompleted()):(this.subject.onCompleted(),this.disposeCurrentRequest())},onError:function(a){this.hasFailed=!0,this.error=a,this.enableQueue&&0!==this.queue.length?this.queue.push(n.createOnError(a)):(this.subject.onError(a),this.disposeCurrentRequest())},onNext:function(a){this.requestedCount<=0?this.enableQueue&&this.queue.push(n.createOnNext(a)):(0===this.requestedCount--&&this.disposeCurrentRequest(),this.subject.onNext(a))},_processRequest:function(a){if(this.enableQueue)for(;this.queue.length>0&&(a>0||"N"!==this.queue[0].kind);){var b=this.queue.shift();b.accept(this.subject),"N"===b.kind?a--:(this.disposeCurrentRequest(),this.queue=[])}return a},request:function(a){this.disposeCurrentRequest();var b=this;return this.requestedDisposable=this.scheduler.scheduleWithState(a,function(a,c){var d=b._processRequest(c),e=b.hasCompleted||b.hasFailed;return!e&&d>0?(b.requestedCount=d,r(function(){b.requestedCount=0})):void 0}),this.requestedDisposable},disposeCurrentRequest:function(){this.requestedDisposable&&(this.requestedDisposable.dispose(),this.requestedDisposable=null)}}),c}(i);j.controlled=function(a,b){return a&&x(a)&&(b=a,a=!0),null==a&&(a=!0),new C(this,a,b)};var E=function(a){function b(a){this.subscription=this.source.subscribe(new d(a,this,this.subscription));var b=this;return u.schedule(function(){b.source.request(1)}),this.subscription}function c(c){a.call(this,b,c),this.source=c}s(c,a);var d=function(a){function b(b,c,d){a.call(this),this.observer=b,this.observable=c,this.cancel=d}s(b,a);var c=b.prototype;return c.completed=function(){this.observer.onCompleted(),this.dispose()},c.error=function(a){this.observer.onError(a),this.dispose()},c.next=function(a){this.observer.onNext(a);var b=this;u.schedule(function(){b.observable.source.request(1)})},c.dispose=function(){this.observer=null,this.cancel&&(this.cancel.dispose(),this.cancel=null),a.prototype.dispose.call(this)},b}(l);return c}(i);C.prototype.stopAndWait=function(){return new E(this)};var F=function(a){function b(a){this.subscription=this.source.subscribe(new d(a,this,this.subscription));var b=this;return u.schedule(function(){b.source.request(b.windowSize)}),this.subscription}function c(c,d){a.call(this,b,c),this.source=c,this.windowSize=d}s(c,a);var d=function(a){function b(a,b,c){this.observer=a,this.observable=b,this.cancel=c,this.received=0}s(b,a);var c=b.prototype;return c.completed=function(){this.observer.onCompleted(),this.dispose()},c.error=function(a){this.observer.onError(a),this.dispose()},c.next=function(a){if(this.observer.onNext(a),this.received=++this.received%this.observable.windowSize,0===this.received){var b=this;u.schedule(function(){b.observable.source.request(b.observable.windowSize)})}},c.dispose=function(){this.observer=null,this.cancel&&(this.cancel.dispose(),this.cancel=null),a.prototype.dispose.call(this)},b}(l);return c}(i);return C.prototype.windowed=function(a){return new F(this,a)},j.pipe=function(a){function b(){c.resume()}var c=this.pausableBuffered();return a.addListener("drain",b),c.subscribe(function(b){!a.write(String(b))&&c.pause()},function(b){a.emit("error",b)},function(){!a._isStdio&&a.end(),a.removeListener("drain",b)}),c.resume(),a},c});
//# sourceMappingURL=rx.backpressure.map
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
;(function (factory) {
var objectTypes = {
'boolean': false,
'function': true,
'object': true,
'number': false,
'string': false,
'undefined': false
};
var objectTypes = {
'function': true,
'object': true
};
var root = (objectTypes[typeof window] && window) || this,
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = objectTypes[typeof global] && global;
var
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeSelf = objectTypes[typeof self] && self.Object && self,
freeWindow = objectTypes[typeof window] && window && window.Object && window,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global;
if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) {
root = freeGlobal;
}
var root = root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this;

@@ -23,0 +19,0 @@ // Because of build optimizers

/* Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.*/
(function(a){var b={"boolean":!1,"function":!0,object:!0,number:!1,string:!1,undefined:!1},c=b[typeof window]&&window||this,d=b[typeof exports]&&exports&&!exports.nodeType&&exports,e=b[typeof module]&&module&&!module.nodeType&&module,f=(e&&e.exports===d&&d,b[typeof global]&&global);!f||f.global!==f&&f.window!==f||(c=f),"function"==typeof define&&define.amd?define(["rx"],function(b,d){return a(c,d,b)}):"object"==typeof module&&module&&module.exports===d?module.exports=a(c,module.exports,require("./rx")):c.Rx=a(c,{},c.Rx)}).call(this,function(a,b,c,d){function e(a){for(var b=a.length,c=new Array(b),d=0;b>d;d++)c[d]=a[d];return c}var f=c.Observable,g=f.prototype,h=c.AnonymousObservable,i=c.Subject,j=c.AsyncSubject,k=c.Observer,l=c.internals.ScheduledObserver,m=c.Disposable.create,n=c.Disposable.empty,o=c.CompositeDisposable,p=c.Scheduler.currentThread,q=c.helpers.isFunction,r=c.internals.inherits,s=c.internals.addProperties,t=c.Disposable.checkDisposed;g.multicast=function(a,b){var c=this;return"function"==typeof a?new h(function(d){var e=c.multicast(a());return new o(b(e).subscribe(d),e.connect())},c):new x(c,a)},g.publish=function(a){return a&&q(a)?this.multicast(function(){return new i},a):this.multicast(new i)},g.share=function(){return this.publish().refCount()},g.publishLast=function(a){return a&&q(a)?this.multicast(function(){return new j},a):this.multicast(new j)},g.publishValue=function(a,b){return 2===arguments.length?this.multicast(function(){return new v(b)},a):this.multicast(new v(a))},g.shareValue=function(a){return this.publishValue(a).refCount()},g.replay=function(a,b,c,d){return a&&q(a)?this.multicast(function(){return new w(b,c,d)},a):this.multicast(new w(b,c,d))},g.shareReplay=function(a,b,c){return this.replay(null,a,b,c).refCount()};var u=function(a,b){this.subject=a,this.observer=b};u.prototype.dispose=function(){if(!this.subject.isDisposed&&null!==this.observer){var a=this.subject.observers.indexOf(this.observer);this.subject.observers.splice(a,1),this.observer=null}};var v=c.BehaviorSubject=function(a){function b(a){return t(this),this.isStopped?(this.hasError?a.onError(this.error):a.onCompleted(),n):(this.observers.push(a),a.onNext(this.value),new u(this,a))}function c(c){a.call(this,b),this.value=c,this.observers=[],this.isDisposed=!1,this.isStopped=!1,this.hasError=!1}return r(c,a),s(c.prototype,k,{getValue:function(){if(t(this),this.hasError)throw this.error;return this.value},hasObservers:function(){return this.observers.length>0},onCompleted:function(){if(t(this),!this.isStopped){this.isStopped=!0;for(var a=0,b=e(this.observers),c=b.length;c>a;a++)b[a].onCompleted();this.observers.length=0}},onError:function(a){if(t(this),!this.isStopped){this.isStopped=!0,this.hasError=!0,this.error=a;for(var b=0,c=e(this.observers),d=c.length;d>b;b++)c[b].onError(a);this.observers.length=0}},onNext:function(a){if(t(this),!this.isStopped){this.value=a;for(var b=0,c=e(this.observers),d=c.length;d>b;b++)c[b].onNext(a)}},dispose:function(){this.isDisposed=!0,this.observers=null,this.value=null,this.exception=null}}),c}(f),w=c.ReplaySubject=function(a){function b(a,b){return m(function(){b.dispose(),!a.isDisposed&&a.observers.splice(a.observers.indexOf(b),1)})}function c(a){var c=new l(this.scheduler,a),d=b(this,c);t(this),this._trim(this.scheduler.now()),this.observers.push(c);for(var e=0,f=this.q.length;f>e;e++)c.onNext(this.q[e].value);return this.hasError?c.onError(this.error):this.isStopped&&c.onCompleted(),c.ensureActive(),d}function d(b,d,e){this.bufferSize=null==b?f:b,this.windowSize=null==d?f:d,this.scheduler=e||p,this.q=[],this.observers=[],this.isStopped=!1,this.isDisposed=!1,this.hasError=!1,this.error=null,a.call(this,c)}var f=Math.pow(2,53)-1;return r(d,a),s(d.prototype,k.prototype,{hasObservers:function(){return this.observers.length>0},_trim:function(a){for(;this.q.length>this.bufferSize;)this.q.shift();for(;this.q.length>0&&a-this.q[0].interval>this.windowSize;)this.q.shift()},onNext:function(a){if(t(this),!this.isStopped){var b=this.scheduler.now();this.q.push({interval:b,value:a}),this._trim(b);for(var c=0,d=e(this.observers),f=d.length;f>c;c++){var g=d[c];g.onNext(a),g.ensureActive()}}},onError:function(a){if(t(this),!this.isStopped){this.isStopped=!0,this.error=a,this.hasError=!0;var b=this.scheduler.now();this._trim(b);for(var c=0,d=e(this.observers),f=d.length;f>c;c++){var g=d[c];g.onError(a),g.ensureActive()}this.observers.length=0}},onCompleted:function(){if(t(this),!this.isStopped){this.isStopped=!0;var a=this.scheduler.now();this._trim(a);for(var b=0,c=e(this.observers),d=c.length;d>b;b++){var f=c[b];f.onCompleted(),f.ensureActive()}this.observers.length=0}},dispose:function(){this.isDisposed=!0,this.observers=null}}),d}(f),x=c.ConnectableObservable=function(a){function b(b,c){var d,e=!1,f=b.asObservable();this.connect=function(){return e||(e=!0,d=new o(f.subscribe(c),m(function(){e=!1}))),d},a.call(this,function(a){return c.subscribe(a)})}return r(b,a),b.prototype.refCount=function(){var a,b=0,c=this;return new h(function(d){var e=1===++b,f=c.subscribe(d);return e&&(a=c.connect()),function(){f.dispose(),0===--b&&a.dispose()}})},b}(f);return g.singleInstance=function(){function a(){return d||(d=!0,b=c["finally"](function(){d=!1}).publish().refCount()),b}var b,c=this,d=!1;return new h(function(b){return a().subscribe(b)})},c});
(function(a){var b={"function":!0,object:!0},c=b[typeof exports]&&exports&&!exports.nodeType&&exports,d=b[typeof self]&&self.Object&&self,e=b[typeof window]&&window&&window.Object&&window,f=b[typeof module]&&module&&!module.nodeType&&module,g=(f&&f.exports===c&&c,c&&f&&"object"==typeof global&&global&&global.Object&&global),h=h=g||e!==(this&&this.window)&&e||d||this;"function"==typeof define&&define.amd?define(["rx"],function(b,c){return a(h,c,b)}):"object"==typeof module&&module&&module.exports===c?module.exports=a(h,module.exports,require("./rx")):h.Rx=a(h,{},h.Rx)}).call(this,function(a,b,c,d){function e(a){for(var b=a.length,c=new Array(b),d=0;b>d;d++)c[d]=a[d];return c}var f=c.Observable,g=f.prototype,h=c.AnonymousObservable,i=c.Subject,j=c.AsyncSubject,k=c.Observer,l=c.internals.ScheduledObserver,m=c.Disposable.create,n=c.Disposable.empty,o=c.CompositeDisposable,p=c.Scheduler.currentThread,q=c.helpers.isFunction,r=c.internals.inherits,s=c.internals.addProperties,t=c.Disposable.checkDisposed;g.multicast=function(a,b){var c=this;return"function"==typeof a?new h(function(d){var e=c.multicast(a());return new o(b(e).subscribe(d),e.connect())},c):new x(c,a)},g.publish=function(a){return a&&q(a)?this.multicast(function(){return new i},a):this.multicast(new i)},g.share=function(){return this.publish().refCount()},g.publishLast=function(a){return a&&q(a)?this.multicast(function(){return new j},a):this.multicast(new j)},g.publishValue=function(a,b){return 2===arguments.length?this.multicast(function(){return new v(b)},a):this.multicast(new v(a))},g.shareValue=function(a){return this.publishValue(a).refCount()},g.replay=function(a,b,c,d){return a&&q(a)?this.multicast(function(){return new w(b,c,d)},a):this.multicast(new w(b,c,d))},g.shareReplay=function(a,b,c){return this.replay(null,a,b,c).refCount()};var u=function(a,b){this.subject=a,this.observer=b};u.prototype.dispose=function(){if(!this.subject.isDisposed&&null!==this.observer){var a=this.subject.observers.indexOf(this.observer);this.subject.observers.splice(a,1),this.observer=null}};var v=c.BehaviorSubject=function(a){function b(a){return t(this),this.isStopped?(this.hasError?a.onError(this.error):a.onCompleted(),n):(this.observers.push(a),a.onNext(this.value),new u(this,a))}function c(c){a.call(this,b),this.value=c,this.observers=[],this.isDisposed=!1,this.isStopped=!1,this.hasError=!1}return r(c,a),s(c.prototype,k,{getValue:function(){if(t(this),this.hasError)throw this.error;return this.value},hasObservers:function(){return this.observers.length>0},onCompleted:function(){if(t(this),!this.isStopped){this.isStopped=!0;for(var a=0,b=e(this.observers),c=b.length;c>a;a++)b[a].onCompleted();this.observers.length=0}},onError:function(a){if(t(this),!this.isStopped){this.isStopped=!0,this.hasError=!0,this.error=a;for(var b=0,c=e(this.observers),d=c.length;d>b;b++)c[b].onError(a);this.observers.length=0}},onNext:function(a){if(t(this),!this.isStopped){this.value=a;for(var b=0,c=e(this.observers),d=c.length;d>b;b++)c[b].onNext(a)}},dispose:function(){this.isDisposed=!0,this.observers=null,this.value=null,this.exception=null}}),c}(f),w=c.ReplaySubject=function(a){function b(a,b){return m(function(){b.dispose(),!a.isDisposed&&a.observers.splice(a.observers.indexOf(b),1)})}function c(a){var c=new l(this.scheduler,a),d=b(this,c);t(this),this._trim(this.scheduler.now()),this.observers.push(c);for(var e=0,f=this.q.length;f>e;e++)c.onNext(this.q[e].value);return this.hasError?c.onError(this.error):this.isStopped&&c.onCompleted(),c.ensureActive(),d}function d(b,d,e){this.bufferSize=null==b?f:b,this.windowSize=null==d?f:d,this.scheduler=e||p,this.q=[],this.observers=[],this.isStopped=!1,this.isDisposed=!1,this.hasError=!1,this.error=null,a.call(this,c)}var f=Math.pow(2,53)-1;return r(d,a),s(d.prototype,k.prototype,{hasObservers:function(){return this.observers.length>0},_trim:function(a){for(;this.q.length>this.bufferSize;)this.q.shift();for(;this.q.length>0&&a-this.q[0].interval>this.windowSize;)this.q.shift()},onNext:function(a){if(t(this),!this.isStopped){var b=this.scheduler.now();this.q.push({interval:b,value:a}),this._trim(b);for(var c=0,d=e(this.observers),f=d.length;f>c;c++){var g=d[c];g.onNext(a),g.ensureActive()}}},onError:function(a){if(t(this),!this.isStopped){this.isStopped=!0,this.error=a,this.hasError=!0;var b=this.scheduler.now();this._trim(b);for(var c=0,d=e(this.observers),f=d.length;f>c;c++){var g=d[c];g.onError(a),g.ensureActive()}this.observers.length=0}},onCompleted:function(){if(t(this),!this.isStopped){this.isStopped=!0;var a=this.scheduler.now();this._trim(a);for(var b=0,c=e(this.observers),d=c.length;d>b;b++){var f=c[b];f.onCompleted(),f.ensureActive()}this.observers.length=0}},dispose:function(){this.isDisposed=!0,this.observers=null}}),d}(f),x=c.ConnectableObservable=function(a){function b(b,c){var d,e=!1,f=b.asObservable();this.connect=function(){return e||(e=!0,d=new o(f.subscribe(c),m(function(){e=!1}))),d},a.call(this,function(a){return c.subscribe(a)})}return r(b,a),b.prototype.refCount=function(){var a,b=0,c=this;return new h(function(d){var e=1===++b,f=c.subscribe(d);return e&&(a=c.connect()),function(){f.dispose(),0===--b&&a.dispose()}})},b}(f);return g.singleInstance=function(){function a(){return d||(d=!0,b=c["finally"](function(){d=!1}).publish().refCount()),b}var b,c=this,d=!1;return new h(function(b){return a().subscribe(b)})},c});
//# sourceMappingURL=rx.binding.map
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
;(function (factory) {
var objectTypes = {
'boolean': false,
'function': true,
'object': true,
'number': false,
'string': false,
'undefined': false
};
var objectTypes = {
'function': true,
'object': true
};
var root = (objectTypes[typeof window] && window) || this,
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = objectTypes[typeof global] && global;
var
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeSelf = objectTypes[typeof self] && self.Object && self,
freeWindow = objectTypes[typeof window] && window && window.Object && window,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global;
if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) {
root = freeGlobal;
}
var root = root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this;

@@ -52,251 +48,66 @@ // Because of build optimizers

isPromise = Rx.helpers.isPromise,
isFunction = Rx.helpers.isFunction,
bindCallback = Rx.internals.bindCallback,
observableFromPromise = Observable.fromPromise,
ArgumentOutOfRangeError = Rx.ArgumentOutOfRangeError;
var Dictionary = (function () {
var primes = [1, 3, 7, 13, 31, 61, 127, 251, 509, 1021, 2039, 4093, 8191, 16381, 32749, 65521, 131071, 262139, 524287, 1048573, 2097143, 4194301, 8388593, 16777213, 33554393, 67108859, 134217689, 268435399, 536870909, 1073741789, 2147483647],
noSuchkey = "no such key",
duplicatekey = "duplicate key";
function isPrime(candidate) {
if ((candidate & 1) === 0) { return candidate === 2; }
var num1 = Math.sqrt(candidate),
num2 = 3;
while (num2 <= num1) {
if (candidate % num2 === 0) { return false; }
num2 += 2;
}
return true;
var errorObj = {e: {}};
var tryCatchTarget;
function tryCatcher() {
try {
return tryCatchTarget.apply(this, arguments);
} catch (e) {
errorObj.e = e;
return errorObj;
}
}
function tryCatch(fn) {
if (!isFunction(fn)) { throw new TypeError('fn must be a function'); }
tryCatchTarget = fn;
return tryCatcher;
}
function thrower(e) {
throw e;
}
function getPrime(min) {
var index, num, candidate;
for (index = 0; index < primes.length; ++index) {
num = primes[index];
if (num >= min) { return num; }
}
candidate = min | 1;
while (candidate < primes[primes.length - 1]) {
if (isPrime(candidate)) { return candidate; }
candidate += 2;
}
return min;
}
function stringHashFn(str) {
var hash = 757602046;
if (!str.length) { return hash; }
for (var i = 0, len = str.length; i < len; i++) {
var character = str.charCodeAt(i);
hash = ((hash << 5) - hash) + character;
hash = hash & hash;
}
return hash;
}
function numberHashFn(key) {
var c2 = 0x27d4eb2d;
key = (key ^ 61) ^ (key >>> 16);
key = key + (key << 3);
key = key ^ (key >>> 4);
key = key * c2;
key = key ^ (key >>> 15);
return key;
}
var getHashCode = (function () {
var uniqueIdCounter = 0;
return function (obj) {
if (obj == null) { throw new Error(noSuchkey); }
// Check for built-ins before tacking on our own for any object
if (typeof obj === 'string') { return stringHashFn(obj); }
if (typeof obj === 'number') { return numberHashFn(obj); }
if (typeof obj === 'boolean') { return obj === true ? 1 : 0; }
if (obj instanceof Date) { return numberHashFn(obj.valueOf()); }
if (obj instanceof RegExp) { return stringHashFn(obj.toString()); }
if (typeof obj.valueOf === 'function') {
// Hack check for valueOf
var valueOf = obj.valueOf();
if (typeof valueOf === 'number') { return numberHashFn(valueOf); }
if (typeof valueOf === 'string') { return stringHashFn(valueOf); }
}
if (obj.hashCode) { return obj.hashCode(); }
var id = 17 * uniqueIdCounter++;
obj.hashCode = function () { return id; };
return id;
};
}());
function newEntry() {
return { key: null, value: null, next: 0, hashCode: 0 };
}
function Dictionary(capacity, comparer) {
if (capacity < 0) { throw new ArgumentOutOfRangeError(); }
if (capacity > 0) { this._initialize(capacity); }
this.comparer = comparer || defaultComparer;
this.freeCount = 0;
var Map = root.Map || (function () {
function Map() {
this.size = 0;
this.freeList = -1;
this._values = [];
this._keys = [];
}
var dictionaryProto = Dictionary.prototype;
dictionaryProto._initialize = function (capacity) {
var prime = getPrime(capacity), i;
this.buckets = new Array(prime);
this.entries = new Array(prime);
for (i = 0; i < prime; i++) {
this.buckets[i] = -1;
this.entries[i] = newEntry();
}
this.freeList = -1;
Map.prototype['delete'] = function (key) {
var i = this._keys.indexOf(key);
if (i === -1) { return false }
this._values.splice(i, 1);
this._keys.splice(i, 1);
this.size--;
return true;
};
dictionaryProto.add = function (key, value) {
this._insert(key, value, true);
Map.prototype.get = function (key) {
var i = this._keys.indexOf(key);
return i === -1 ? undefined : this._values[i];
};
dictionaryProto._insert = function (key, value, add) {
if (!this.buckets) { this._initialize(0); }
var index3,
num = getHashCode(key) & 2147483647,
index1 = num % this.buckets.length;
for (var index2 = this.buckets[index1]; index2 >= 0; index2 = this.entries[index2].next) {
if (this.entries[index2].hashCode === num && this.comparer(this.entries[index2].key, key)) {
if (add) { throw new Error(duplicatekey); }
this.entries[index2].value = value;
return;
}
}
if (this.freeCount > 0) {
index3 = this.freeList;
this.freeList = this.entries[index3].next;
--this.freeCount;
Map.prototype.set = function (key, value) {
var i = this._keys.indexOf(key);
if (i === -1) {
this._keys.push(key);
this._values.push(value);
this.size++;
} else {
if (this.size === this.entries.length) {
this._resize();
index1 = num % this.buckets.length;
}
index3 = this.size;
++this.size;
this._values[i] = value;
}
this.entries[index3].hashCode = num;
this.entries[index3].next = this.buckets[index1];
this.entries[index3].key = key;
this.entries[index3].value = value;
this.buckets[index1] = index3;
return this;
};
dictionaryProto._resize = function () {
var prime = getPrime(this.size * 2),
numArray = new Array(prime);
for (index = 0; index < numArray.length; ++index) { numArray[index] = -1; }
var entryArray = new Array(prime);
for (index = 0; index < this.size; ++index) { entryArray[index] = this.entries[index]; }
for (var index = this.size; index < prime; ++index) { entryArray[index] = newEntry(); }
for (var index1 = 0; index1 < this.size; ++index1) {
var index2 = entryArray[index1].hashCode % prime;
entryArray[index1].next = numArray[index2];
numArray[index2] = index1;
Map.prototype.forEach = function (cb, thisArg) {
for (var i = 0; i < this.size; i++) {
cb.call(thisArg, this._values[i], this._keys[i]);
}
this.buckets = numArray;
this.entries = entryArray;
};
dictionaryProto.remove = function (key) {
if (this.buckets) {
var num = getHashCode(key) & 2147483647,
index1 = num % this.buckets.length,
index2 = -1;
for (var index3 = this.buckets[index1]; index3 >= 0; index3 = this.entries[index3].next) {
if (this.entries[index3].hashCode === num && this.comparer(this.entries[index3].key, key)) {
if (index2 < 0) {
this.buckets[index1] = this.entries[index3].next;
} else {
this.entries[index2].next = this.entries[index3].next;
}
this.entries[index3].hashCode = -1;
this.entries[index3].next = this.freeList;
this.entries[index3].key = null;
this.entries[index3].value = null;
this.freeList = index3;
++this.freeCount;
return true;
} else {
index2 = index3;
}
}
}
return false;
};
dictionaryProto.clear = function () {
var index, len;
if (this.size <= 0) { return; }
for (index = 0, len = this.buckets.length; index < len; ++index) {
this.buckets[index] = -1;
}
for (index = 0; index < this.size; ++index) {
this.entries[index] = newEntry();
}
this.freeList = -1;
this.size = 0;
};
dictionaryProto._findEntry = function (key) {
if (this.buckets) {
var num = getHashCode(key) & 2147483647;
for (var index = this.buckets[num % this.buckets.length]; index >= 0; index = this.entries[index].next) {
if (this.entries[index].hashCode === num && this.comparer(this.entries[index].key, key)) {
return index;
}
}
}
return -1;
};
dictionaryProto.count = function () {
return this.size - this.freeCount;
};
dictionaryProto.tryGetValue = function (key) {
var entry = this._findEntry(key);
return entry >= 0 ?
this.entries[entry].value :
undefined;
};
dictionaryProto.getValues = function () {
var index = 0, results = [];
if (this.entries) {
for (var index1 = 0; index1 < this.size; index1++) {
if (this.entries[index1].hashCode >= 0) {
results[index++] = this.entries[index1].value;
}
}
}
return results;
};
dictionaryProto.get = function (key) {
var entry = this._findEntry(key);
if (entry >= 0) { return this.entries[entry].value; }
throw new Error(noSuchkey);
};
dictionaryProto.set = function (key, value) {
this._insert(key, value, false);
};
dictionaryProto.containskey = function (key) {
return this._findEntry(key) >= 0;
};
return Dictionary;
return Map;
}());

@@ -315,47 +126,37 @@

var left = this;
return new AnonymousObservable(function (observer) {
return new AnonymousObservable(function (o) {
var group = new CompositeDisposable();
var leftDone = false, rightDone = false;
var leftId = 0, rightId = 0;
var leftMap = new Dictionary(), rightMap = new Dictionary();
var leftMap = new Map(), rightMap = new Map();
var handleError = function (e) { o.onError(e); };
group.add(left.subscribe(
function (value) {
var id = leftId++;
var md = new SingleAssignmentDisposable();
var id = leftId++, md = new SingleAssignmentDisposable();
leftMap.add(id, value);
leftMap.set(id, value);
group.add(md);
var expire = function () {
leftMap.remove(id) && leftMap.count() === 0 && leftDone && observer.onCompleted();
group.remove(md);
};
var duration = tryCatch(leftDurationSelector)(value);
if (duration === errorObj) { return o.onError(duration.e); }
var duration;
try {
duration = leftDurationSelector(value);
} catch (e) {
observer.onError(e);
return;
}
md.setDisposable(duration.take(1).subscribe(
noop,
handleError,
function () {
leftMap['delete'](id) && leftMap.size === 0 && leftDone && o.onCompleted();
group.remove(md);
}));
md.setDisposable(duration.take(1).subscribe(noop, observer.onError.bind(observer), expire));
rightMap.getValues().forEach(function (v) {
var result;
try {
result = resultSelector(value, v);
} catch (exn) {
observer.onError(exn);
return;
}
observer.onNext(result);
rightMap.forEach(function (v) {
var result = tryCatch(resultSelector)(value, v);
if (result === errorObj) { return o.onError(result.e); }
o.onNext(result);
});
},
observer.onError.bind(observer),
handleError,
function () {
leftDone = true;
(rightDone || leftMap.count() === 0) && observer.onCompleted();
(rightDone || leftMap.size === 0) && o.onCompleted();
})

@@ -366,39 +167,28 @@ );

function (value) {
var id = rightId++;
var md = new SingleAssignmentDisposable();
var id = rightId++, md = new SingleAssignmentDisposable();
rightMap.add(id, value);
rightMap.set(id, value);
group.add(md);
var expire = function () {
rightMap.remove(id) && rightMap.count() === 0 && rightDone && observer.onCompleted();
group.remove(md);
};
var duration = tryCatch(rightDurationSelector)(value);
if (duration === errorObj) { return o.onError(duration.e); }
var duration;
try {
duration = rightDurationSelector(value);
} catch (e) {
observer.onError(e);
return;
}
md.setDisposable(duration.take(1).subscribe(
noop,
handleError,
function () {
rightMap['delete'](id) && rightMap.size === 0 && rightDone && o.onCompleted();
group.remove(md);
}));
md.setDisposable(duration.take(1).subscribe(noop, observer.onError.bind(observer), expire));
leftMap.getValues().forEach(function (v) {
var result;
try {
result = resultSelector(v, value);
} catch (exn) {
observer.onError(exn);
return;
}
observer.onNext(result);
leftMap.forEach(function (v) {
var result = tryCatch(resultSelector)(v, value);
if (result === errorObj) { return o.onError(result.e); }
o.onNext(result);
});
},
observer.onError.bind(observer),
handleError,
function () {
rightDone = true;
(leftDone || rightMap.count() === 0) && observer.onCompleted();
(leftDone || rightMap.size === 0) && o.onCompleted();
})

@@ -421,9 +211,10 @@ );

var left = this;
return new AnonymousObservable(function (observer) {
return new AnonymousObservable(function (o) {
var group = new CompositeDisposable();
var r = new RefCountDisposable(group);
var leftMap = new Dictionary(), rightMap = new Dictionary();
var leftMap = new Map(), rightMap = new Map();
var leftId = 0, rightId = 0;
var handleError = function (e) { return function (v) { v.onError(e); }; };
function handleError(e) { return function (v) { v.onError(e); }; };
function handleError(e) { };

@@ -434,15 +225,12 @@ group.add(left.subscribe(

var id = leftId++;
leftMap.add(id, s);
leftMap.set(id, s);
var result;
try {
result = resultSelector(value, addRef(s, r));
} catch (e) {
leftMap.getValues().forEach(handleError(e));
observer.onError(e);
return;
var result = tryCatch(resultSelector)(value, addRef(s, r));
if (result === errorObj) {
leftMap.forEach(handleError(result.e));
return o.onError(result.e);
}
observer.onNext(result);
o.onNext(result);
rightMap.getValues().forEach(function (v) { s.onNext(v); });
rightMap.forEach(function (v) { s.onNext(v); });

@@ -452,14 +240,6 @@ var md = new SingleAssignmentDisposable();

var expire = function () {
leftMap.remove(id) && s.onCompleted();
group.remove(md);
};
var duration;
try {
duration = leftDurationSelector(value);
} catch (e) {
leftMap.getValues().forEach(handleError(e));
observer.onError(e);
return;
var duration = tryCatch(leftDurationSelector)(value);
if (duration === errorObj) {
leftMap.forEach(handleError(duration.e));
return o.onError(duration.e);
}

@@ -470,13 +250,15 @@

function (e) {
leftMap.getValues().forEach(handleError(e));
observer.onError(e);
leftMap.forEach(handleError(e));
o.onError(e);
},
expire)
);
function () {
leftMap['delete'](id) && s.onCompleted();
group.remove(md);
}));
},
function (e) {
leftMap.getValues().forEach(handleError(e));
observer.onError(e);
leftMap.forEach(handleError(e));
o.onError(e);
},
observer.onCompleted.bind(observer))
function () { o.onCompleted(); })
);

@@ -487,3 +269,3 @@

var id = rightId++;
rightMap.add(id, value);
rightMap.set(id, value);

@@ -493,29 +275,24 @@ var md = new SingleAssignmentDisposable();

var expire = function () {
rightMap.remove(id);
group.remove(md);
};
var duration = tryCatch(rightDurationSelector)(value);
if (duration === errorObj) {
leftMap.forEach(handleError(duration.e));
return o.onError(duration.e);
}
var duration;
try {
duration = rightDurationSelector(value);
} catch (e) {
leftMap.getValues().forEach(handleError(e));
observer.onError(e);
return;
}
md.setDisposable(duration.take(1).subscribe(
noop,
function (e) {
leftMap.getValues().forEach(handleError(e));
observer.onError(e);
leftMap.forEach(handleError(e));
o.onError(e);
},
expire)
);
function () {
rightMap['delete'](id);
group.remove(md);
}));
leftMap.getValues().forEach(function (v) { v.onNext(value); });
leftMap.forEach(function (v) { v.onNext(value); });
},
function (e) {
leftMap.getValues().forEach(handleError(e));
observer.onError(e);
leftMap.forEach(handleError(e));
o.onError(e);
})

@@ -528,14 +305,16 @@ );

/**
* Projects each element of an observable sequence into zero or more buffers.
*
* @param {Mixed} bufferOpeningsOrClosingSelector Observable sequence whose elements denote the creation of new windows, or, a function invoked to define the boundaries of the produced windows (a new window is started when the previous one is closed, resulting in non-overlapping windows).
* @param {Function} [bufferClosingSelector] A function invoked to define the closing of each produced window. If a closing selector function is specified for the first parameter, this parameter is ignored.
* @returns {Observable} An observable sequence of windows.
*/
observableProto.buffer = function (bufferOpeningsOrClosingSelector, bufferClosingSelector) {
return this.window.apply(this, arguments).selectMany(function (x) { return x.toArray(); });
};
function toArray(x) { return x.toArray(); }
/**
* Projects each element of an observable sequence into zero or more buffers.
* @param {Mixed} bufferOpeningsOrClosingSelector Observable sequence whose elements denote the creation of new windows, or, a function invoked to define the boundaries of the produced windows (a new window is started when the previous one is closed, resulting in non-overlapping windows).
* @param {Function} [bufferClosingSelector] A function invoked to define the closing of each produced window. If a closing selector function is specified for the first parameter, this parameter is ignored.
* @returns {Observable} An observable sequence of windows.
*/
observableProto.buffer = function () {
return this.window.apply(this, arguments)
.flatMap(toArray);
};
/**
* Projects each element of an observable sequence into zero or more windows.

@@ -699,7 +478,6 @@ *

* @param {Function} [elementSelector] A function to map each source element to an element in an observable group.
* @param {Function} [comparer] Used to determine whether the objects are equal.
* @returns {Observable} A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value.
*/
observableProto.groupBy = function (keySelector, elementSelector, comparer) {
return this.groupByUntil(keySelector, elementSelector, observableNever, comparer);
observableProto.groupBy = function (keySelector, elementSelector) {
return this.groupByUntil(keySelector, elementSelector, observableNever);
};

@@ -718,3 +496,2 @@

* @param {Function} durationSelector A function to signal the expiration of a group.
* @param {Function} [comparer] Used to compare objects. When not specified, the default comparer is used.
* @returns {Observable}

@@ -725,78 +502,68 @@ * A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value.

*/
observableProto.groupByUntil = function (keySelector, elementSelector, durationSelector, comparer) {
observableProto.groupByUntil = function (keySelector, elementSelector, durationSelector) {
var source = this;
elementSelector || (elementSelector = identity);
comparer || (comparer = defaultComparer);
return new AnonymousObservable(function (observer) {
function handleError(e) { return function (item) { item.onError(e); }; }
var map = new Dictionary(0, comparer),
return new AnonymousObservable(function (o) {
var map = new Map(),
groupDisposable = new CompositeDisposable(),
refCountDisposable = new RefCountDisposable(groupDisposable);
refCountDisposable = new RefCountDisposable(groupDisposable),
handleError = function (e) { return function (item) { item.onError(e); }; };
groupDisposable.add(source.subscribe(function (x) {
var key;
try {
key = keySelector(x);
} catch (e) {
map.getValues().forEach(handleError(e));
observer.onError(e);
return;
}
groupDisposable.add(
source.subscribe(function (x) {
var key = tryCatch(keySelector)(x);
if (key === errorObj) {
map.forEach(handleError(key.e));
return o.onError(key.e);
}
var fireNewMapEntry = false,
writer = map.tryGetValue(key);
if (!writer) {
writer = new Subject();
map.set(key, writer);
fireNewMapEntry = true;
}
if (fireNewMapEntry) {
var group = new GroupedObservable(key, writer, refCountDisposable),
durationGroup = new GroupedObservable(key, writer);
try {
duration = durationSelector(durationGroup);
} catch (e) {
map.getValues().forEach(handleError(e));
observer.onError(e);
return;
var fireNewMapEntry = false, writer = map.get(key);
if (writer === undefined) {
writer = new Subject();
map.set(key, writer);
fireNewMapEntry = true;
}
observer.onNext(group);
if (fireNewMapEntry) {
var group = new GroupedObservable(key, writer, refCountDisposable),
durationGroup = new GroupedObservable(key, writer);
var duration = tryCatch(durationSelector)(durationGroup);
if (duration === errorObj) {
map.forEach(handleError(duration.e));
return o.onError(duration.e);
}
var md = new SingleAssignmentDisposable();
groupDisposable.add(md);
o.onNext(group);
var expire = function () {
map.remove(key) && writer.onCompleted();
groupDisposable.remove(md);
};
var md = new SingleAssignmentDisposable();
groupDisposable.add(md);
md.setDisposable(duration.take(1).subscribe(
noop,
function (exn) {
map.getValues().forEach(handleError(exn));
observer.onError(exn);
},
expire)
);
}
md.setDisposable(duration.take(1).subscribe(
noop,
function (e) {
map.forEach(handleError(e));
o.onError(e);
},
function () {
if (map['delete'](key)) { writer.onCompleted(); }
groupDisposable.remove(md);
}));
}
var element;
try {
element = elementSelector(x);
} catch (e) {
map.getValues().forEach(handleError(e));
observer.onError(e);
return;
}
var element = x;
if (isFunction(elementSelector)) {
element = tryCatch(elementSelector)(x);
if (element === errorObj) {
map.forEach(handleError(element.e));
return o.onError(element.e);
}
}
writer.onNext(element);
}, function (ex) {
map.getValues().forEach(handleError(ex));
observer.onError(ex);
}, function () {
map.getValues().forEach(function (item) { item.onCompleted(); });
observer.onCompleted();
}));
writer.onNext(element);
}, function (e) {
map.forEach(handleError(e));
o.onError(e);
}, function () {
map.forEach(function (item) { item.onCompleted(); });
o.onCompleted();
}));

@@ -803,0 +570,0 @@ return refCountDisposable;

/* Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.*/
(function(a){var b={"boolean":!1,"function":!0,object:!0,number:!1,string:!1,undefined:!1},c=b[typeof window]&&window||this,d=b[typeof exports]&&exports&&!exports.nodeType&&exports,e=b[typeof module]&&module&&!module.nodeType&&module,f=(e&&e.exports===d&&d,b[typeof global]&&global);!f||f.global!==f&&f.window!==f||(c=f),"function"==typeof define&&define.amd?define(["rx"],function(b,d){return a(c,d,b)}):"object"==typeof module&&module&&module.exports===d?module.exports=a(c,module.exports,require("./rx")):c.Rx=a(c,{},c.Rx)}).call(this,function(a,b,c,d){function e(a,b){return a.groupJoin(this,b,o,function(a,b){return b})}function f(a){var b=this;return new q(function(c){var d=new m,e=new i,f=new j(e);return c.onNext(r(d,f)),e.add(b.subscribe(function(a){d.onNext(a)},function(a){d.onError(a),c.onError(a)},function(){d.onCompleted(),c.onCompleted()})),w(a)&&(a=x(a)),e.add(a.subscribe(function(a){d.onCompleted(),d=new m,c.onNext(r(d,f))},function(a){d.onError(a),c.onError(a)},function(){d.onCompleted(),c.onCompleted()})),f},b)}function g(a){var b=this;return new q(function(c){function d(){var b;try{b=a()}catch(f){return void c.onError(f)}w(b)&&(b=x(b));var i=new k;e.setDisposable(i),i.setDisposable(b.take(1).subscribe(u,function(a){h.onError(a),c.onError(a)},function(){h.onCompleted(),h=new m,c.onNext(r(h,g)),d()}))}var e=new l,f=new i(e),g=new j(f),h=new m;return c.onNext(r(h,g)),f.add(b.subscribe(function(a){h.onNext(a)},function(a){h.onError(a),c.onError(a)},function(){h.onCompleted(),c.onCompleted()})),d(),g},b)}var h=c.Observable,i=c.CompositeDisposable,j=c.RefCountDisposable,k=c.SingleAssignmentDisposable,l=c.SerialDisposable,m=c.Subject,n=h.prototype,o=h.empty,p=h.never,q=c.AnonymousObservable,r=(c.Observer.create,c.internals.addRef),s=c.internals.isEqual,t=c.internals.inherits,u=c.helpers.noop,v=c.helpers.identity,w=c.helpers.isPromise,x=h.fromPromise,y=c.ArgumentOutOfRangeError,z=function(){function a(a){if(0===(1&a))return 2===a;for(var b=Math.sqrt(a),c=3;b>=c;){if(a%c===0)return!1;c+=2}return!0}function b(b){var c,d,e;for(c=0;c<h.length;++c)if(d=h[c],d>=b)return d;for(e=1|b;e<h[h.length-1];){if(a(e))return e;e+=2}return b}function c(a){var b=757602046;if(!a.length)return b;for(var c=0,d=a.length;d>c;c++){var e=a.charCodeAt(c);b=(b<<5)-b+e,b&=b}return b}function e(a){var b=668265261;return a=61^a^a>>>16,a+=a<<3,a^=a>>>4,a*=b,a^=a>>>15}function f(){return{key:null,value:null,next:0,hashCode:0}}function g(a,b){if(0>a)throw new y;a>0&&this._initialize(a),this.comparer=b||s,this.freeCount=0,this.size=0,this.freeList=-1}var h=[1,3,7,13,31,61,127,251,509,1021,2039,4093,8191,16381,32749,65521,131071,262139,524287,1048573,2097143,4194301,8388593,16777213,33554393,67108859,134217689,268435399,536870909,1073741789,2147483647],i="no such key",j="duplicate key",k=function(){var a=0;return function(b){if(null==b)throw new Error(i);if("string"==typeof b)return c(b);if("number"==typeof b)return e(b);if("boolean"==typeof b)return b===!0?1:0;if(b instanceof Date)return e(b.valueOf());if(b instanceof RegExp)return c(b.toString());if("function"==typeof b.valueOf){var d=b.valueOf();if("number"==typeof d)return e(d);if("string"==typeof d)return c(d)}if(b.hashCode)return b.hashCode();var f=17*a++;return b.hashCode=function(){return f},f}}(),l=g.prototype;return l._initialize=function(a){var c,d=b(a);for(this.buckets=new Array(d),this.entries=new Array(d),c=0;d>c;c++)this.buckets[c]=-1,this.entries[c]=f();this.freeList=-1},l.add=function(a,b){this._insert(a,b,!0)},l._insert=function(a,b,c){this.buckets||this._initialize(0);for(var d,e=2147483647&k(a),f=e%this.buckets.length,g=this.buckets[f];g>=0;g=this.entries[g].next)if(this.entries[g].hashCode===e&&this.comparer(this.entries[g].key,a)){if(c)throw new Error(j);return void(this.entries[g].value=b)}this.freeCount>0?(d=this.freeList,this.freeList=this.entries[d].next,--this.freeCount):(this.size===this.entries.length&&(this._resize(),f=e%this.buckets.length),d=this.size,++this.size),this.entries[d].hashCode=e,this.entries[d].next=this.buckets[f],this.entries[d].key=a,this.entries[d].value=b,this.buckets[f]=d},l._resize=function(){var a=b(2*this.size),c=new Array(a);for(e=0;e<c.length;++e)c[e]=-1;var d=new Array(a);for(e=0;e<this.size;++e)d[e]=this.entries[e];for(var e=this.size;a>e;++e)d[e]=f();for(var g=0;g<this.size;++g){var h=d[g].hashCode%a;d[g].next=c[h],c[h]=g}this.buckets=c,this.entries=d},l.remove=function(a){if(this.buckets)for(var b=2147483647&k(a),c=b%this.buckets.length,d=-1,e=this.buckets[c];e>=0;e=this.entries[e].next){if(this.entries[e].hashCode===b&&this.comparer(this.entries[e].key,a))return 0>d?this.buckets[c]=this.entries[e].next:this.entries[d].next=this.entries[e].next,this.entries[e].hashCode=-1,this.entries[e].next=this.freeList,this.entries[e].key=null,this.entries[e].value=null,this.freeList=e,++this.freeCount,!0;d=e}return!1},l.clear=function(){var a,b;if(!(this.size<=0)){for(a=0,b=this.buckets.length;b>a;++a)this.buckets[a]=-1;for(a=0;a<this.size;++a)this.entries[a]=f();this.freeList=-1,this.size=0}},l._findEntry=function(a){if(this.buckets)for(var b=2147483647&k(a),c=this.buckets[b%this.buckets.length];c>=0;c=this.entries[c].next)if(this.entries[c].hashCode===b&&this.comparer(this.entries[c].key,a))return c;return-1},l.count=function(){return this.size-this.freeCount},l.tryGetValue=function(a){var b=this._findEntry(a);return b>=0?this.entries[b].value:d},l.getValues=function(){var a=0,b=[];if(this.entries)for(var c=0;c<this.size;c++)this.entries[c].hashCode>=0&&(b[a++]=this.entries[c].value);return b},l.get=function(a){var b=this._findEntry(a);if(b>=0)return this.entries[b].value;throw new Error(i)},l.set=function(a,b){this._insert(a,b,!1)},l.containskey=function(a){return this._findEntry(a)>=0},g}();n.join=function(a,b,c,d){var e=this;return new q(function(f){var g=new i,h=!1,j=!1,l=0,m=0,n=new z,o=new z;return g.add(e.subscribe(function(a){var c=l++,e=new k;n.add(c,a),g.add(e);var i,j=function(){n.remove(c)&&0===n.count()&&h&&f.onCompleted(),g.remove(e)};try{i=b(a)}catch(m){return void f.onError(m)}e.setDisposable(i.take(1).subscribe(u,f.onError.bind(f),j)),o.getValues().forEach(function(b){var c;try{c=d(a,b)}catch(e){return void f.onError(e)}f.onNext(c)})},f.onError.bind(f),function(){h=!0,(j||0===n.count())&&f.onCompleted()})),g.add(a.subscribe(function(a){var b=m++,e=new k;o.add(b,a),g.add(e);var h,i=function(){o.remove(b)&&0===o.count()&&j&&f.onCompleted(),g.remove(e)};try{h=c(a)}catch(l){return void f.onError(l)}e.setDisposable(h.take(1).subscribe(u,f.onError.bind(f),i)),n.getValues().forEach(function(b){var c;try{c=d(b,a)}catch(e){return void f.onError(e)}f.onNext(c)})},f.onError.bind(f),function(){j=!0,(h||0===o.count())&&f.onCompleted()})),g},e)},n.groupJoin=function(a,b,c,d){var e=this;return new q(function(f){function g(a){return function(b){b.onError(a)}}var h=new i,l=new j(h),n=new z,o=new z,p=0,q=0;return h.add(e.subscribe(function(a){var c=new m,e=p++;n.add(e,c);var i;try{i=d(a,r(c,l))}catch(j){return n.getValues().forEach(g(j)),void f.onError(j)}f.onNext(i),o.getValues().forEach(function(a){c.onNext(a)});var q=new k;h.add(q);var s,t=function(){n.remove(e)&&c.onCompleted(),h.remove(q)};try{s=b(a)}catch(j){return n.getValues().forEach(g(j)),void f.onError(j)}q.setDisposable(s.take(1).subscribe(u,function(a){n.getValues().forEach(g(a)),f.onError(a)},t))},function(a){n.getValues().forEach(g(a)),f.onError(a)},f.onCompleted.bind(f))),h.add(a.subscribe(function(a){var b=q++;o.add(b,a);var d=new k;h.add(d);var e,i=function(){o.remove(b),h.remove(d)};try{e=c(a)}catch(j){return n.getValues().forEach(g(j)),void f.onError(j)}d.setDisposable(e.take(1).subscribe(u,function(a){n.getValues().forEach(g(a)),f.onError(a)},i)),n.getValues().forEach(function(b){b.onNext(a)})},function(a){n.getValues().forEach(g(a)),f.onError(a)})),l},e)},n.buffer=function(a,b){return this.window.apply(this,arguments).selectMany(function(a){return a.toArray()})},n.window=function(a,b){return 1===arguments.length&&"function"!=typeof arguments[0]?f.call(this,a):"function"==typeof a?g.call(this,a):e.call(this,a,b)},n.pairwise=function(){var a=this;return new q(function(b){var c,d=!1;return a.subscribe(function(a){d?b.onNext([c,a]):d=!0,c=a},b.onError.bind(b),b.onCompleted.bind(b))},a)},n.partition=function(a,b){return[this.filter(a,b),this.filter(function(c,d,e){return!a.call(b,c,d,e)})]},n.groupBy=function(a,b,c){return this.groupByUntil(a,b,p,c)},n.groupByUntil=function(a,b,c,d){var e=this;return b||(b=v),d||(d=s),new q(function(f){function g(a){return function(b){b.onError(a)}}var h=new z(0,d),l=new i,n=new j(l);return l.add(e.subscribe(function(d){var e;try{e=a(d)}catch(i){return h.getValues().forEach(g(i)),void f.onError(i)}var j=!1,o=h.tryGetValue(e);if(o||(o=new m,h.set(e,o),j=!0),j){var p=new A(e,o,n),q=new A(e,o);try{duration=c(q)}catch(i){return h.getValues().forEach(g(i)),void f.onError(i)}f.onNext(p);var r=new k;l.add(r);var s=function(){h.remove(e)&&o.onCompleted(),l.remove(r)};r.setDisposable(duration.take(1).subscribe(u,function(a){h.getValues().forEach(g(a)),f.onError(a)},s))}var t;try{t=b(d)}catch(i){return h.getValues().forEach(g(i)),void f.onError(i)}o.onNext(t)},function(a){h.getValues().forEach(g(a)),f.onError(a)},function(){h.getValues().forEach(function(a){a.onCompleted()}),f.onCompleted()})),n},e)};var A=function(a){function b(a){return this.underlyingObservable.subscribe(a)}function c(c,d,e){a.call(this,b),this.key=c,this.underlyingObservable=e?new q(function(a){return new i(e.getDisposable(),d.subscribe(a))}):d}return t(c,a),c}(h);return c});
(function(a){var b={"function":!0,object:!0},c=b[typeof exports]&&exports&&!exports.nodeType&&exports,d=b[typeof self]&&self.Object&&self,e=b[typeof window]&&window&&window.Object&&window,f=b[typeof module]&&module&&!module.nodeType&&module,g=(f&&f.exports===c&&c,c&&f&&"object"==typeof global&&global&&global.Object&&global),h=h=g||e!==(this&&this.window)&&e||d||this;"function"==typeof define&&define.amd?define(["rx"],function(b,c){return a(h,c,b)}):"object"==typeof module&&module&&module.exports===c?module.exports=a(h,module.exports,require("./rx")):h.Rx=a(h,{},h.Rx)}).call(this,function(a,b,c,d){function e(){try{return k.apply(this,arguments)}catch(a){return B.e=a,B}}function f(a){if(!z(a))throw new TypeError("fn must be a function");return k=a,e}function g(a){return a.toArray()}function h(a,b){return a.groupJoin(this,b,s,function(a,b){return b})}function i(a){var b=this;return new u(function(c){var d=new q,e=new m,f=new n(e);return c.onNext(v(d,f)),e.add(b.subscribe(function(a){d.onNext(a)},function(a){d.onError(a),c.onError(a)},function(){d.onCompleted(),c.onCompleted()})),y(a)&&(a=A(a)),e.add(a.subscribe(function(a){d.onCompleted(),d=new q,c.onNext(v(d,f))},function(a){d.onError(a),c.onError(a)},function(){d.onCompleted(),c.onCompleted()})),f},b)}function j(a){var b=this;return new u(function(c){function d(){var b;try{b=a()}catch(f){return void c.onError(f)}y(b)&&(b=A(b));var i=new o;e.setDisposable(i),i.setDisposable(b.take(1).subscribe(x,function(a){h.onError(a),c.onError(a)},function(){h.onCompleted(),h=new q,c.onNext(v(h,g)),d()}))}var e=new p,f=new m(e),g=new n(f),h=new q;return c.onNext(v(h,g)),f.add(b.subscribe(function(a){h.onNext(a)},function(a){h.onError(a),c.onError(a)},function(){h.onCompleted(),c.onCompleted()})),d(),g},b)}var k,l=c.Observable,m=c.CompositeDisposable,n=c.RefCountDisposable,o=c.SingleAssignmentDisposable,p=c.SerialDisposable,q=c.Subject,r=l.prototype,s=l.empty,t=l.never,u=c.AnonymousObservable,v=(c.Observer.create,c.internals.addRef),w=(c.internals.isEqual,c.internals.inherits),x=c.helpers.noop,y=(c.helpers.identity,c.helpers.isPromise),z=c.helpers.isFunction,A=(c.internals.bindCallback,l.fromPromise),B=(c.ArgumentOutOfRangeError,{e:{}}),C=a.Map||function(){function a(){this.size=0,this._values=[],this._keys=[]}return a.prototype["delete"]=function(a){var b=this._keys.indexOf(a);return-1===b?!1:(this._values.splice(b,1),this._keys.splice(b,1),this.size--,!0)},a.prototype.get=function(a){var b=this._keys.indexOf(a);return-1===b?d:this._values[b]},a.prototype.set=function(a,b){var c=this._keys.indexOf(a);return-1===c?(this._keys.push(a),this._values.push(b),this.size++):this._values[c]=b,this},a.prototype.forEach=function(a,b){for(var c=0;c<this.size;c++)a.call(b,this._values[c],this._keys[c])},a}();r.join=function(a,b,c,d){var e=this;return new u(function(g){var h=new m,i=!1,j=!1,k=0,l=0,n=new C,p=new C,q=function(a){g.onError(a)};return h.add(e.subscribe(function(a){var c=k++,e=new o;n.set(c,a),h.add(e);var j=f(b)(a);return j===B?g.onError(j.e):(e.setDisposable(j.take(1).subscribe(x,q,function(){n["delete"](c)&&0===n.size&&i&&g.onCompleted(),h.remove(e)})),void p.forEach(function(b){var c=f(d)(a,b);return c===B?g.onError(c.e):void g.onNext(c)}))},q,function(){i=!0,(j||0===n.size)&&g.onCompleted()})),h.add(a.subscribe(function(a){var b=l++,e=new o;p.set(b,a),h.add(e);var i=f(c)(a);return i===B?g.onError(i.e):(e.setDisposable(i.take(1).subscribe(x,q,function(){p["delete"](b)&&0===p.size&&j&&g.onCompleted(),h.remove(e)})),void n.forEach(function(b){var c=f(d)(b,a);return c===B?g.onError(c.e):void g.onNext(c)}))},q,function(){j=!0,(i||0===p.size)&&g.onCompleted()})),h},e)},r.groupJoin=function(a,b,c,d){var e=this;return new u(function(g){function h(a){}var i=new m,j=new n(i),k=new C,l=new C,p=0,r=0,h=function(a){return function(b){b.onError(a)}};return i.add(e.subscribe(function(a){var c=new q,e=p++;k.set(e,c);var m=f(d)(a,v(c,j));if(m===B)return k.forEach(h(m.e)),g.onError(m.e);g.onNext(m),l.forEach(function(a){c.onNext(a)});var n=new o;i.add(n);var r=f(b)(a);return r===B?(k.forEach(h(r.e)),g.onError(r.e)):void n.setDisposable(r.take(1).subscribe(x,function(a){k.forEach(h(a)),g.onError(a)},function(){k["delete"](e)&&c.onCompleted(),i.remove(n)}))},function(a){k.forEach(h(a)),g.onError(a)},function(){g.onCompleted()})),i.add(a.subscribe(function(a){var b=r++;l.set(b,a);var d=new o;i.add(d);var e=f(c)(a);return e===B?(k.forEach(h(e.e)),g.onError(e.e)):(d.setDisposable(e.take(1).subscribe(x,function(a){k.forEach(h(a)),g.onError(a)},function(){l["delete"](b),i.remove(d)})),void k.forEach(function(b){b.onNext(a)}))},function(a){k.forEach(h(a)),g.onError(a)})),j},e)},r.buffer=function(){return this.window.apply(this,arguments).flatMap(g)},r.window=function(a,b){return 1===arguments.length&&"function"!=typeof arguments[0]?i.call(this,a):"function"==typeof a?j.call(this,a):h.call(this,a,b)},r.pairwise=function(){var a=this;return new u(function(b){var c,d=!1;return a.subscribe(function(a){d?b.onNext([c,a]):d=!0,c=a},b.onError.bind(b),b.onCompleted.bind(b))},a)},r.partition=function(a,b){return[this.filter(a,b),this.filter(function(c,d,e){return!a.call(b,c,d,e)})]},r.groupBy=function(a,b){return this.groupByUntil(a,b,t)},r.groupByUntil=function(a,b,c){var e=this;return new u(function(g){var h=new C,i=new m,j=new n(i),k=function(a){return function(b){b.onError(a)}};return i.add(e.subscribe(function(e){var l=f(a)(e);if(l===B)return h.forEach(k(l.e)),g.onError(l.e);var m=!1,n=h.get(l);if(n===d&&(n=new q,h.set(l,n),m=!0),m){var p=new D(l,n,j),r=new D(l,n),s=f(c)(r);if(s===B)return h.forEach(k(s.e)),g.onError(s.e);g.onNext(p);var t=new o;i.add(t),t.setDisposable(s.take(1).subscribe(x,function(a){h.forEach(k(a)),g.onError(a)},function(){h["delete"](l)&&n.onCompleted(),i.remove(t)}))}var u=e;return z(b)&&(u=f(b)(e),u===B)?(h.forEach(k(u.e)),g.onError(u.e)):void n.onNext(u)},function(a){h.forEach(k(a)),g.onError(a)},function(){h.forEach(function(a){a.onCompleted()}),g.onCompleted()})),j},e)};var D=function(a){function b(a){return this.underlyingObservable.subscribe(a)}function c(c,d,e){a.call(this,b),this.key=c,this.underlyingObservable=e?new u(function(a){return new m(e.getDisposable(),d.subscribe(a))}):d}return w(c,a),c}(l);return c});
//# sourceMappingURL=rx.coincidence.map
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
;(function (factory) {
var objectTypes = {
'boolean': false,
'function': true,
'object': true,
'number': false,
'string': false,
'undefined': false
};
var objectTypes = {
'function': true,
'object': true
};
var root = (objectTypes[typeof window] && window) || this,
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = objectTypes[typeof global] && global;
var
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeSelf = objectTypes[typeof self] && self.Object && self,
freeWindow = objectTypes[typeof window] && window && window.Object && window,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global;
if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) {
root = freeGlobal;
}
var root = root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this;

@@ -60,5 +56,25 @@ // Because of build optimizers

isPromise = helpers.isPromise,
isFunction = helpers.isFunction,
isScheduler = Rx.Scheduler.isScheduler,
observableFromPromise = Observable.fromPromise;
var errorObj = {e: {}};
var tryCatchTarget;
function tryCatcher() {
try {
return tryCatchTarget.apply(this, arguments);
} catch (e) {
errorObj.e = e;
return errorObj;
}
}
function tryCatch(fn) {
if (!isFunction(fn)) { throw new TypeError('fn must be a function'); }
tryCatchTarget = fn;
return tryCatcher;
}
function thrower(e) {
throw e;
}
// Shim in iterator support

@@ -119,3 +135,3 @@ var $iterator$ = (typeof Symbol === 'function' && Symbol.iterator) ||

/**
* Determines whether an observable collection contains values. There is an alias for this method called 'ifThen' for browsers <IE9
* Determines whether an observable collection contains values.
*

@@ -131,3 +147,3 @@ * @example

*/
Observable['if'] = Observable.ifThen = function (condition, thenSource, elseSourceOrScheduler) {
Observable['if'] = function (condition, thenSource, elseSourceOrScheduler) {
return observableDefer(function () {

@@ -182,9 +198,3 @@ elseSourceOrScheduler || (elseSourceOrScheduler = observableEmpty());

* Uses selector to determine which source in sources to use.
* There is an alias 'switchCase' for browsers <IE9.
*
* @example
* 1 - res = Rx.Observable.case(selector, { '1': obs1, '2': obs2 });
* 1 - res = Rx.Observable.case(selector, { '1': obs1, '2': obs2 }, obs0);
* 1 - res = Rx.Observable.case(selector, { '1': obs1, '2': obs2 }, scheduler);
*
* @param {Function} selector The function which extracts the value for to test in a case statement.

@@ -196,3 +206,3 @@ * @param {Array} sources A object which has keys which correspond to the case statement labels.

*/
Observable['case'] = Observable.switchCase = function (selector, sources, defaultSourceOrScheduler) {
Observable['case'] = function (selector, sources, defaultSourceOrScheduler) {
return observableDefer(function () {

@@ -202,3 +212,3 @@ isPromise(defaultSourceOrScheduler) && (defaultSourceOrScheduler = observableFromPromise(defaultSourceOrScheduler));

typeof defaultSourceOrScheduler.now === 'function' && (defaultSourceOrScheduler = observableEmpty(defaultSourceOrScheduler));
isScheduler(defaultSourceOrScheduler) && (defaultSourceOrScheduler = observableEmpty(defaultSourceOrScheduler));

@@ -477,3 +487,3 @@ var result = sources[selector()];

onError: function (e) {
this.onNext(Observable.throwError(e));
this.onNext(Observable['throw'](e));
},

@@ -490,3 +500,3 @@ onNext: function (v) {

/*
/**
* Performs a exclusive waiting for the first to finish before subscribing to another observable.

@@ -496,5 +506,5 @@ * Observables that come in between subscriptions will be dropped on the floor.

*/
observableProto.exclusive = function () {
observableProto.switchFirst = function () {
var sources = this;
return new AnonymousObservable(function (observer) {
return new AnonymousObservable(function (o) {
var hasCurrent = false,

@@ -518,19 +528,15 @@ isStopped = false,

innerSubscription.setDisposable(innerSource.subscribe(
observer.onNext.bind(observer),
observer.onError.bind(observer),
function (x) { o.onNext(x); },
function (e) { o.onError(e); },
function () {
g.remove(innerSubscription);
hasCurrent = false;
if (isStopped && g.length === 1) {
observer.onCompleted();
}
isStopped && g.length === 1 && o.onCompleted();
}));
}
},
observer.onError.bind(observer),
function (e) { o.onError(e); },
function () {
isStopped = true;
if (!hasCurrent && g.length === 1) {
observer.onCompleted();
}
!hasCurrent && g.length === 1 && o.onCompleted();
}));

@@ -542,67 +548,10 @@

/*
* Performs a exclusive map waiting for the first to finish before subscribing to another observable.
* Observables that come in between subscriptions will be dropped on the floor.
* @param {Function} selector Selector to invoke for every item in the current subscription.
* @param {Any} [thisArg] An optional context to invoke with the selector parameter.
* @returns {Observable} An exclusive observable with only the results that happen when subscribed.
*/
observableProto.exclusiveMap = function (selector, thisArg) {
var sources = this,
selectorFunc = bindCallback(selector, thisArg, 3);
return new AnonymousObservable(function (observer) {
var index = 0,
hasCurrent = false,
isStopped = true,
m = new SingleAssignmentDisposable(),
g = new CompositeDisposable();
observableProto.flatMapFirst = observableProto.selectManyFirst = function(selector, resultSelector, thisArg) {
return new FlatMapObservable(this, selector, resultSelector, thisArg).switchFirst();
};
g.add(m);
m.setDisposable(sources.subscribe(
function (innerSource) {
if (!hasCurrent) {
hasCurrent = true;
innerSubscription = new SingleAssignmentDisposable();
g.add(innerSubscription);
isPromise(innerSource) && (innerSource = observableFromPromise(innerSource));
innerSubscription.setDisposable(innerSource.subscribe(
function (x) {
var result;
try {
result = selectorFunc(x, index++, innerSource);
} catch (e) {
observer.onError(e);
return;
}
observer.onNext(result);
},
function (e) { observer.onError(e); },
function () {
g.remove(innerSubscription);
hasCurrent = false;
if (isStopped && g.length === 1) {
observer.onCompleted();
}
}));
}
},
function (e) { observer.onError(e); },
function () {
isStopped = true;
if (g.length === 1 && !hasCurrent) {
observer.onCompleted();
}
}));
return g;
}, this);
};
Rx.Observable.prototype.flatMapWithMaxConcurrent = function(limit, selector, resultSelector, thisArg) {
return new FlatMapObservable(this, selector, resultSelector, thisArg).merge(limit);
};
return Rx;
}));
/* Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.*/
(function(a){var b={"boolean":!1,"function":!0,object:!0,number:!1,string:!1,undefined:!1},c=b[typeof window]&&window||this,d=b[typeof exports]&&exports&&!exports.nodeType&&exports,e=b[typeof module]&&module&&!module.nodeType&&module,f=(e&&e.exports===d&&d,b[typeof global]&&global);!f||f.global!==f&&f.window!==f||(c=f),"function"==typeof define&&define.amd?define(["rx"],function(b,d){return a(c,d,b)}):"object"==typeof module&&module&&module.exports===d?module.exports=a(c,module.exports,require("./rx")):c.Rx=a(c,{},c.Rx)}).call(this,function(a,b,c,d){function e(a,b){return new E(a,b)}var f=c.Observable,g=f.prototype,h=c.AnonymousObservable,i=f.concat,j=f.defer,k=f.empty,l=c.Disposable.empty,m=c.CompositeDisposable,n=c.SerialDisposable,o=c.SingleAssignmentDisposable,p=(c.internals.Enumerator,c.internals.Enumerable),q=p.of,r=c.Scheduler.immediate,s=c.Scheduler.currentThread,t=(Array.prototype.slice,c.AsyncSubject),u=c.Observer,v=c.internals.inherits,w=c.internals.bindCallback,x=c.internals.addProperties,y=c.helpers,z=y.noop,A=y.isPromise,B=c.Scheduler.isScheduler,C=f.fromPromise,D="function"==typeof Symbol&&Symbol.iterator||"_es6shim_iterator_";a.Set&&"function"==typeof(new a.Set)["@@iterator"]&&(D="@@iterator");c.doneEnumerator={done:!0,value:d},c.helpers.isIterable=function(a){return a[D]!==d},c.helpers.isArrayLike=function(a){return a&&a.length!==d};c.helpers.iterator=D;var E=function(a){function b(a,b){this.c=a,this.s=b}return v(b,a),b.prototype[D]=function(){var a=this;return{next:function(){return a.c()?{done:!1,value:a.s}:{done:!0,value:void 0}}}},b}(p);g.letBind=g.let=function(a){return a(this)},f["if"]=f.ifThen=function(a,b,c){return j(function(){return c||(c=k()),A(b)&&(b=C(b)),A(c)&&(c=C(c)),"function"==typeof c.now&&(c=k(c)),a()?b:c})},f["for"]=f.forIn=function(a,b,c){return q(a,b,c).concat()};var F=f["while"]=f.whileDo=function(a,b){return A(b)&&(b=C(b)),e(a,b).concat()};g.doWhile=function(a){return i([this,F(a,this)])},f["case"]=f.switchCase=function(a,b,c){return j(function(){A(c)&&(c=C(c)),c||(c=k()),"function"==typeof c.now&&(c=k(c));var d=b[a()];return A(d)&&(d=C(d)),d||c})},g.expand=function(a,b){B(b)||(b=r);var c=this;return new h(function(d){var e=[],f=new n,g=new m(f),h=0,i=!1,j=function(){var c=!1;e.length>0&&(c=!i,i=!0),c&&f.setDisposable(b.scheduleRecursive(function(b){var c;if(!(e.length>0))return void(i=!1);c=e.shift();var f=new o;g.add(f),f.setDisposable(c.subscribe(function(b){d.onNext(b);var c=null;try{c=a(b)}catch(f){d.onError(f)}e.push(c),h++,j()},d.onError.bind(d),function(){g.remove(f),h--,0===h&&d.onCompleted()})),b()}))};return e.push(c),h++,j(),g},this)},f.forkJoin=function(){var a=[];if(Array.isArray(arguments[0]))a=arguments[0];else for(var b=0,c=arguments.length;c>b;b++)a.push(arguments[b]);return new h(function(b){var c=a.length;if(0===c)return b.onCompleted(),l;for(var d=new m,e=!1,f=new Array(c),g=new Array(c),h=new Array(c),i=0;c>i;i++)!function(i){var j=a[i];A(j)&&(j=C(j)),d.add(j.subscribe(function(a){e||(f[i]=!0,h[i]=a)},function(a){e=!0,b.onError(a),d.dispose()},function(){if(!e){if(!f[i])return void b.onCompleted();g[i]=!0;for(var a=0;c>a;a++)if(!g[a])return;e=!0,b.onNext(h),b.onCompleted()}}))}(i);return d})},g.forkJoin=function(a,b){var c=this;return new h(function(d){var e,f,g=!1,h=!1,i=!1,j=!1,k=new o,l=new o;return A(a)&&(a=C(a)),k.setDisposable(c.subscribe(function(a){i=!0,e=a},function(a){l.dispose(),d.onError(a)},function(){if(g=!0,h)if(i)if(j){var a;try{a=b(e,f)}catch(c){return void d.onError(c)}d.onNext(a),d.onCompleted()}else d.onCompleted();else d.onCompleted()})),l.setDisposable(a.subscribe(function(a){j=!0,f=a},function(a){k.dispose(),d.onError(a)},function(){if(h=!0,g)if(i)if(j){var a;try{a=b(e,f)}catch(c){return void d.onError(c)}d.onNext(a),d.onCompleted()}else d.onCompleted();else d.onCompleted()})),new m(k,l)},c)},g.manySelect=g.extend=function(a,b){B(b)||(b=r);var c=this;return j(function(){var d;return c.map(function(a){var b=new G(a);return d&&d.onNext(a),d=b,b}).tap(z,function(a){d&&d.onError(a)},function(){d&&d.onCompleted()}).observeOn(b).map(a)},c)};var G=function(a){function b(a){var b=this,c=new m;return c.add(s.schedule(function(){a.onNext(b.head),c.add(b.tail.mergeAll().subscribe(a))})),c}function c(c){a.call(this,b),this.head=c,this.tail=new t}return v(c,a),x(c.prototype,u,{onCompleted:function(){this.onNext(f.empty())},onError:function(a){this.onNext(f.throwError(a))},onNext:function(a){this.tail.onNext(a),this.tail.onCompleted()}}),c}(f);return g.exclusive=function(){var a=this;return new h(function(b){var c=!1,d=!1,e=new o,f=new m;return f.add(e),e.setDisposable(a.subscribe(function(a){if(!c){c=!0,A(a)&&(a=C(a));var e=new o;f.add(e),e.setDisposable(a.subscribe(b.onNext.bind(b),b.onError.bind(b),function(){f.remove(e),c=!1,d&&1===f.length&&b.onCompleted()}))}},b.onError.bind(b),function(){d=!0,c||1!==f.length||b.onCompleted()})),f},this)},g.exclusiveMap=function(a,b){var c=this,d=w(a,b,3);return new h(function(a){var b=0,e=!1,f=!0,g=new o,h=new m;return h.add(g),g.setDisposable(c.subscribe(function(c){e||(e=!0,innerSubscription=new o,h.add(innerSubscription),A(c)&&(c=C(c)),innerSubscription.setDisposable(c.subscribe(function(e){var f;try{f=d(e,b++,c)}catch(g){return void a.onError(g)}a.onNext(f)},function(b){a.onError(b)},function(){h.remove(innerSubscription),e=!1,f&&1===h.length&&a.onCompleted()})))},function(b){a.onError(b)},function(){f=!0,1!==h.length||e||a.onCompleted()})),h},this)},c});
(function(a){var b={"function":!0,object:!0},c=b[typeof exports]&&exports&&!exports.nodeType&&exports,d=b[typeof self]&&self.Object&&self,e=b[typeof window]&&window&&window.Object&&window,f=b[typeof module]&&module&&!module.nodeType&&module,g=(f&&f.exports===c&&c,c&&f&&"object"==typeof global&&global&&global.Object&&global),h=h=g||e!==(this&&this.window)&&e||d||this;"function"==typeof define&&define.amd?define(["rx"],function(b,c){return a(h,c,b)}):"object"==typeof module&&module&&module.exports===c?module.exports=a(h,module.exports,require("./rx")):h.Rx=a(h,{},h.Rx)}).call(this,function(a,b,c,d){function e(a,b){return new D(a,b)}var f=c.Observable,g=f.prototype,h=c.AnonymousObservable,i=f.concat,j=f.defer,k=f.empty,l=c.Disposable.empty,m=c.CompositeDisposable,n=c.SerialDisposable,o=c.SingleAssignmentDisposable,p=(c.internals.Enumerator,c.internals.Enumerable),q=p.of,r=c.Scheduler.immediate,s=c.Scheduler.currentThread,t=(Array.prototype.slice,c.AsyncSubject),u=c.Observer,v=c.internals.inherits,w=(c.internals.bindCallback,c.internals.addProperties),x=c.helpers,y=x.noop,z=x.isPromise,A=(x.isFunction,c.Scheduler.isScheduler),B=f.fromPromise,C="function"==typeof Symbol&&Symbol.iterator||"_es6shim_iterator_";a.Set&&"function"==typeof(new a.Set)["@@iterator"]&&(C="@@iterator");c.doneEnumerator={done:!0,value:d},c.helpers.isIterable=function(a){return a[C]!==d},c.helpers.isArrayLike=function(a){return a&&a.length!==d};c.helpers.iterator=C;var D=function(a){function b(a,b){this.c=a,this.s=b}return v(b,a),b.prototype[C]=function(){var a=this;return{next:function(){return a.c()?{done:!1,value:a.s}:{done:!0,value:void 0}}}},b}(p);g.letBind=g.let=function(a){return a(this)},f["if"]=function(a,b,c){return j(function(){return c||(c=k()),z(b)&&(b=B(b)),z(c)&&(c=B(c)),"function"==typeof c.now&&(c=k(c)),a()?b:c})},f["for"]=f.forIn=function(a,b,c){return q(a,b,c).concat()};var E=f["while"]=f.whileDo=function(a,b){return z(b)&&(b=B(b)),e(a,b).concat()};g.doWhile=function(a){return i([this,E(a,this)])},f["case"]=function(a,b,c){return j(function(){z(c)&&(c=B(c)),c||(c=k()),A(c)&&(c=k(c));var d=b[a()];return z(d)&&(d=B(d)),d||c})},g.expand=function(a,b){A(b)||(b=r);var c=this;return new h(function(d){var e=[],f=new n,g=new m(f),h=0,i=!1,j=function(){var c=!1;e.length>0&&(c=!i,i=!0),c&&f.setDisposable(b.scheduleRecursive(function(b){var c;if(!(e.length>0))return void(i=!1);c=e.shift();var f=new o;g.add(f),f.setDisposable(c.subscribe(function(b){d.onNext(b);var c=null;try{c=a(b)}catch(f){d.onError(f)}e.push(c),h++,j()},d.onError.bind(d),function(){g.remove(f),h--,0===h&&d.onCompleted()})),b()}))};return e.push(c),h++,j(),g},this)},f.forkJoin=function(){var a=[];if(Array.isArray(arguments[0]))a=arguments[0];else for(var b=0,c=arguments.length;c>b;b++)a.push(arguments[b]);return new h(function(b){var c=a.length;if(0===c)return b.onCompleted(),l;for(var d=new m,e=!1,f=new Array(c),g=new Array(c),h=new Array(c),i=0;c>i;i++)!function(i){var j=a[i];z(j)&&(j=B(j)),d.add(j.subscribe(function(a){e||(f[i]=!0,h[i]=a)},function(a){e=!0,b.onError(a),d.dispose()},function(){if(!e){if(!f[i])return void b.onCompleted();g[i]=!0;for(var a=0;c>a;a++)if(!g[a])return;e=!0,b.onNext(h),b.onCompleted()}}))}(i);return d})},g.forkJoin=function(a,b){var c=this;return new h(function(d){var e,f,g=!1,h=!1,i=!1,j=!1,k=new o,l=new o;return z(a)&&(a=B(a)),k.setDisposable(c.subscribe(function(a){i=!0,e=a},function(a){l.dispose(),d.onError(a)},function(){if(g=!0,h)if(i)if(j){var a;try{a=b(e,f)}catch(c){return void d.onError(c)}d.onNext(a),d.onCompleted()}else d.onCompleted();else d.onCompleted()})),l.setDisposable(a.subscribe(function(a){j=!0,f=a},function(a){k.dispose(),d.onError(a)},function(){if(h=!0,g)if(i)if(j){var a;try{a=b(e,f)}catch(c){return void d.onError(c)}d.onNext(a),d.onCompleted()}else d.onCompleted();else d.onCompleted()})),new m(k,l)},c)},g.manySelect=g.extend=function(a,b){A(b)||(b=r);var c=this;return j(function(){var d;return c.map(function(a){var b=new F(a);return d&&d.onNext(a),d=b,b}).tap(y,function(a){d&&d.onError(a)},function(){d&&d.onCompleted()}).observeOn(b).map(a)},c)};var F=function(a){function b(a){var b=this,c=new m;return c.add(s.schedule(function(){a.onNext(b.head),c.add(b.tail.mergeAll().subscribe(a))})),c}function c(c){a.call(this,b),this.head=c,this.tail=new t}return v(c,a),w(c.prototype,u,{onCompleted:function(){this.onNext(f.empty())},onError:function(a){this.onNext(f["throw"](a))},onNext:function(a){this.tail.onNext(a),this.tail.onCompleted()}}),c}(f);return g.switchFirst=function(){var a=this;return new h(function(b){var c=!1,d=!1,e=new o,f=new m;return f.add(e),e.setDisposable(a.subscribe(function(a){if(!c){c=!0,z(a)&&(a=B(a));var e=new o;f.add(e),e.setDisposable(a.subscribe(function(a){b.onNext(a)},function(a){b.onError(a)},function(){f.remove(e),c=!1,d&&1===f.length&&b.onCompleted()}))}},function(a){b.onError(a)},function(){d=!0,!c&&1===f.length&&b.onCompleted()})),f},this)},g.flatMapFirst=g.selectManyFirst=function(a,b,c){return new FlatMapObservable(this,a,b,c).switchFirst()},c.Observable.prototype.flatMapWithMaxConcurrent=function(a,b,c,d){return new FlatMapObservable(this,b,c,d).merge(a)},c});
//# sourceMappingURL=rx.experimental.map
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
;(function (factory) {
var objectTypes = {
'boolean': false,
'function': true,
'object': true,
'number': false,
'string': false,
'undefined': false
};
var objectTypes = {
'function': true,
'object': true
};
var root = (objectTypes[typeof window] && window) || this,
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = objectTypes[typeof global] && global;
var
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeSelf = objectTypes[typeof self] && self.Object && self,
freeWindow = objectTypes[typeof window] && window && window.Object && window,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global;
if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) {
root = freeGlobal;
}
var root = root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this;

@@ -50,15 +46,24 @@ // Because of build optimizers

$iterator$ = Rx.iterator,
doneEnumerator = Rx.doneEnumerator;
doneEnumerator = Rx.doneEnumerator,
bindCallback = Rx.internals.bindCallback;
/** @private */
var Map = root.Map || (function () {
function Map() {
this.size = 0;
this._values = [];
this._keys = [];
this._values = [];
}
Map.prototype['delete'] = function (key) {
var i = this._keys.indexOf(key);
if (i === -1) { return false }
this._values.splice(i, 1);
this._keys.splice(i, 1);
this.size--;
return true;
};
Map.prototype.get = function (key) {
var i = this._keys.indexOf(key);
return i !== -1 ? this._values[i] : undefined;
return i === -1 ? undefined : this._values[i];
};

@@ -68,9 +73,15 @@

var i = this._keys.indexOf(key);
i !== -1 && (this._values[i] = value);
this._values[this._keys.push(key) - 1] = value;
if (i === -1) {
this._keys.push(key);
this._values.push(value);
this.size++;
} else {
this._values[i] = value;
}
return this;
};
Map.prototype.forEach = function (callback, thisArg) {
for (var i = 0, len = this._keys.length; i < len; i++) {
callback.call(thisArg, this._values[i], this._keys[i]);
Map.prototype.forEach = function (cb, thisArg) {
for (var i = 0; i < this.size; i++) {
cb.call(thisArg, this._values[i], this._keys[i]);
}

@@ -77,0 +88,0 @@ };

/* Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.*/
(function(a){var b={"boolean":!1,"function":!0,object:!0,number:!1,string:!1,undefined:!1},c=b[typeof window]&&window||this,d=b[typeof exports]&&exports&&!exports.nodeType&&exports,e=b[typeof module]&&module&&!module.nodeType&&module,f=(e&&e.exports===d&&d,b[typeof global]&&global);!f||f.global!==f&&f.window!==f||(c=f),"function"==typeof define&&define.amd?define(["rx"],function(b,d){return a(c,d,b)}):"object"==typeof module&&module&&module.exports===d?module.exports=a(c,module.exports,require("./rx")):c.Rx=a(c,{},c.Rx)}).call(this,function(a,b,c,d){function e(a){this.patterns=a}function f(a,b){this.expression=a,this.selector=b}function g(a,b,c){var d=a.get(b);if(!d){var e=new t(b,c);return a.set(b,e),e}return d}function h(a,b,c){this.joinObserverArray=a,this.onNext=b,this.onCompleted=c,this.joinObservers=new s;for(var d=0,e=this.joinObserverArray.length;e>d;d++){var f=this.joinObserverArray[d];this.joinObservers.set(f,f)}}var i=c.Observable,j=i.prototype,k=c.AnonymousObservable,l=i.throwError,m=c.Observer.create,n=c.SingleAssignmentDisposable,o=c.CompositeDisposable,p=c.internals.AbstractObserver,q=c.helpers.noop,r=(c.internals.isEqual,c.internals.inherits),s=(c.internals.Enumerable,c.internals.Enumerator,c.iterator,c.doneEnumerator,a.Map||function(){function a(){this._keys=[],this._values=[]}return a.prototype.get=function(a){var b=this._keys.indexOf(a);return-1!==b?this._values[b]:d},a.prototype.set=function(a,b){var c=this._keys.indexOf(a);-1!==c&&(this._values[c]=b),this._values[this._keys.push(a)-1]=b},a.prototype.forEach=function(a,b){for(var c=0,d=this._keys.length;d>c;c++)a.call(b,this._values[c],this._keys[c])},a}());e.prototype.and=function(a){return new e(this.patterns.concat(a))},e.prototype.thenDo=function(a){return new f(this,a)},f.prototype.activate=function(a,b,c){for(var d=this,e=[],f=0,i=this.expression.patterns.length;i>f;f++)e.push(g(a,this.expression.patterns[f],b.onError.bind(b)));var j=new h(e,function(){var a;try{a=d.selector.apply(d,arguments)}catch(c){return void b.onError(c)}b.onNext(a)},function(){for(var a=0,b=e.length;b>a;a++)e[a].removeActivePlan(j);c(j)});for(f=0,i=e.length;i>f;f++)e[f].addActivePlan(j);return j},h.prototype.dequeue=function(){this.joinObservers.forEach(function(a){a.queue.shift()})},h.prototype.match=function(){var a,b,c=!0;for(a=0,b=this.joinObserverArray.length;b>a;a++)if(0===this.joinObserverArray[a].queue.length){c=!1;break}if(c){var d=[],e=!1;for(a=0,b=this.joinObserverArray.length;b>a;a++)d.push(this.joinObserverArray[a].queue[0]),"C"===this.joinObserverArray[a].queue[0].kind&&(e=!0);if(e)this.onCompleted();else{this.dequeue();var f=[];for(a=0,b=d.length;a<d.length;a++)f.push(d[a].value);this.onNext.apply(this,f)}}};var t=function(a){function b(b,c){a.call(this),this.source=b,this.onError=c,this.queue=[],this.activePlans=[],this.subscription=new n,this.isDisposed=!1}r(b,a);var c=b.prototype;return c.next=function(a){if(!this.isDisposed){if("E"===a.kind)return this.onError(a.exception);this.queue.push(a);for(var b=this.activePlans.slice(0),c=0,d=b.length;d>c;c++)b[c].match()}},c.error=q,c.completed=q,c.addActivePlan=function(a){this.activePlans.push(a)},c.subscribe=function(){this.subscription.setDisposable(this.source.materialize().subscribe(this))},c.removeActivePlan=function(a){this.activePlans.splice(this.activePlans.indexOf(a),1),0===this.activePlans.length&&this.dispose()},c.dispose=function(){a.prototype.dispose.call(this),this.isDisposed||(this.isDisposed=!0,this.subscription.dispose())},b}(p);return j.and=function(a){return new e([this,a])},j.thenDo=function(a){return new e([this]).thenDo(a)},i.when=function(){var a,b=arguments.length;if(Array.isArray(arguments[0]))a=arguments[0];else{a=new Array(b);for(var c=0;b>c;c++)a[c]=arguments[c]}return new k(function(b){var c=[],d=new s,e=m(function(a){b.onNext(a)},function(a){d.forEach(function(b){b.onError(a)}),b.onError(a)},function(a){b.onCompleted()});try{for(var f=0,g=a.length;g>f;f++)c.push(a[f].activate(d,e,function(a){var d=c.indexOf(a);c.splice(d,1),0===c.length&&b.onCompleted()}))}catch(h){l(h).subscribe(b)}var i=new o;return d.forEach(function(a){a.subscribe(),i.add(a)}),i})},c});
(function(a){var b={"function":!0,object:!0},c=b[typeof exports]&&exports&&!exports.nodeType&&exports,d=b[typeof self]&&self.Object&&self,e=b[typeof window]&&window&&window.Object&&window,f=b[typeof module]&&module&&!module.nodeType&&module,g=(f&&f.exports===c&&c,c&&f&&"object"==typeof global&&global&&global.Object&&global),h=h=g||e!==(this&&this.window)&&e||d||this;"function"==typeof define&&define.amd?define(["rx"],function(b,c){return a(h,c,b)}):"object"==typeof module&&module&&module.exports===c?module.exports=a(h,module.exports,require("./rx")):h.Rx=a(h,{},h.Rx)}).call(this,function(a,b,c,d){function e(a){this.patterns=a}function f(a,b){this.expression=a,this.selector=b}function g(a,b,c){var d=a.get(b);if(!d){var e=new t(b,c);return a.set(b,e),e}return d}function h(a,b,c){this.joinObserverArray=a,this.onNext=b,this.onCompleted=c,this.joinObservers=new s;for(var d=0,e=this.joinObserverArray.length;e>d;d++){var f=this.joinObserverArray[d];this.joinObservers.set(f,f)}}var i=c.Observable,j=i.prototype,k=c.AnonymousObservable,l=i.throwError,m=c.Observer.create,n=c.SingleAssignmentDisposable,o=c.CompositeDisposable,p=c.internals.AbstractObserver,q=c.helpers.noop,r=(c.internals.isEqual,c.internals.inherits),s=(c.internals.Enumerable,c.internals.Enumerator,c.iterator,c.doneEnumerator,c.internals.bindCallback,a.Map||function(){function a(){this.size=0,this._values=[],this._keys=[]}return a.prototype["delete"]=function(a){var b=this._keys.indexOf(a);return-1===b?!1:(this._values.splice(b,1),this._keys.splice(b,1),this.size--,!0)},a.prototype.get=function(a){var b=this._keys.indexOf(a);return-1===b?d:this._values[b]},a.prototype.set=function(a,b){var c=this._keys.indexOf(a);return-1===c?(this._keys.push(a),this._values.push(b),this.size++):this._values[c]=b,this},a.prototype.forEach=function(a,b){for(var c=0;c<this.size;c++)a.call(b,this._values[c],this._keys[c])},a}());e.prototype.and=function(a){return new e(this.patterns.concat(a))},e.prototype.thenDo=function(a){return new f(this,a)},f.prototype.activate=function(a,b,c){for(var d=this,e=[],f=0,i=this.expression.patterns.length;i>f;f++)e.push(g(a,this.expression.patterns[f],b.onError.bind(b)));var j=new h(e,function(){var a;try{a=d.selector.apply(d,arguments)}catch(c){return void b.onError(c)}b.onNext(a)},function(){for(var a=0,b=e.length;b>a;a++)e[a].removeActivePlan(j);c(j)});for(f=0,i=e.length;i>f;f++)e[f].addActivePlan(j);return j},h.prototype.dequeue=function(){this.joinObservers.forEach(function(a){a.queue.shift()})},h.prototype.match=function(){var a,b,c=!0;for(a=0,b=this.joinObserverArray.length;b>a;a++)if(0===this.joinObserverArray[a].queue.length){c=!1;break}if(c){var d=[],e=!1;for(a=0,b=this.joinObserverArray.length;b>a;a++)d.push(this.joinObserverArray[a].queue[0]),"C"===this.joinObserverArray[a].queue[0].kind&&(e=!0);if(e)this.onCompleted();else{this.dequeue();var f=[];for(a=0,b=d.length;a<d.length;a++)f.push(d[a].value);this.onNext.apply(this,f)}}};var t=function(a){function b(b,c){a.call(this),this.source=b,this.onError=c,this.queue=[],this.activePlans=[],this.subscription=new n,this.isDisposed=!1}r(b,a);var c=b.prototype;return c.next=function(a){if(!this.isDisposed){if("E"===a.kind)return this.onError(a.exception);this.queue.push(a);for(var b=this.activePlans.slice(0),c=0,d=b.length;d>c;c++)b[c].match()}},c.error=q,c.completed=q,c.addActivePlan=function(a){this.activePlans.push(a)},c.subscribe=function(){this.subscription.setDisposable(this.source.materialize().subscribe(this))},c.removeActivePlan=function(a){this.activePlans.splice(this.activePlans.indexOf(a),1),0===this.activePlans.length&&this.dispose()},c.dispose=function(){a.prototype.dispose.call(this),this.isDisposed||(this.isDisposed=!0,this.subscription.dispose())},b}(p);return j.and=function(a){return new e([this,a])},j.thenDo=function(a){return new e([this]).thenDo(a)},i.when=function(){var a,b=arguments.length;if(Array.isArray(arguments[0]))a=arguments[0];else{a=new Array(b);for(var c=0;b>c;c++)a[c]=arguments[c]}return new k(function(b){var c=[],d=new s,e=m(function(a){b.onNext(a)},function(a){d.forEach(function(b){b.onError(a)}),b.onError(a)},function(a){b.onCompleted()});try{for(var f=0,g=a.length;g>f;f++)c.push(a[f].activate(d,e,function(a){var d=c.indexOf(a);c.splice(d,1),0===c.length&&b.onCompleted()}))}catch(h){l(h).subscribe(b)}var i=new o;return d.forEach(function(a){a.subscribe(),i.add(a)}),i})},c});
//# sourceMappingURL=rx.joinpatterns.map
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
;(function (factory) {
var objectTypes = {
'boolean': false,
'function': true,
'object': true,
'number': false,
'string': false,
'undefined': false
};
var objectTypes = {
'function': true,
'object': true
};
var root = (objectTypes[typeof window] && window) || this,
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = objectTypes[typeof global] && global;
var
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeSelf = objectTypes[typeof self] && self.Object && self,
freeWindow = objectTypes[typeof window] && window && window.Object && window,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global;
if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) {
root = freeGlobal;
}
var root = root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this;
// Because of build optimizers
if (typeof define === 'function' && define.amd) {
define(['rx-lite-compat'], function (Rx, exports) {
return factory(root, exports, Rx);
});
} else if (typeof module === 'object' && module && module.exports === freeExports) {
module.exports = factory(root, module.exports, require('rx-lite-compat'));
} else {
root.Rx = factory(root, {}, root.Rx);
}
// Because of build optimizers
if (typeof define === 'function' && define.amd) {
define(['rx-lite-compat'], function (Rx, exports) {
return factory(root, exports, Rx);
});
} else if (typeof module === 'object' && module && module.exports === freeExports) {
module.exports = factory(root, module.exports, require('rx-lite-compat'));
} else {
root.Rx = factory(root, {}, root.Rx);
}
}.call(this, function (root, exp, Rx, undefined) {

@@ -39,3 +35,3 @@

observableNever = Observable.never,
observableThrow = Observable.throwException,
observableThrow = Observable['throw'],
AnonymousObservable = Rx.AnonymousObservable,

@@ -47,2 +43,3 @@ AnonymousObserver = Rx.AnonymousObserver,

Observer = Rx.Observer,
observerCreate = Observer.create,
Subject = Rx.Subject,

@@ -62,2 +59,3 @@ internals = Rx.internals,

isPromise = helpers.isPromise,
isFunction = helpers.isFunction,
inherits = internals.inherits,

@@ -70,2 +68,21 @@ bindCallback = internals.bindCallback,

var errorObj = {e: {}};
var tryCatchTarget;
function tryCatcher() {
try {
return tryCatchTarget.apply(this, arguments);
} catch (e) {
errorObj.e = e;
return errorObj;
}
}
function tryCatch(fn) {
if (!isFunction(fn)) { throw new TypeError('fn must be a function'); }
tryCatchTarget = fn;
return tryCatcher;
}
function thrower(e) {
throw e;
}
function ScheduledDisposable(scheduler, disposable) {

@@ -301,12 +318,14 @@ this.scheduler = scheduler;

Observable.using = function (resourceFactory, observableFactory) {
return new AnonymousObservable(function (observer) {
var disposable = disposableEmpty, resource, source;
try {
resource = resourceFactory();
resource && (disposable = resource);
source = observableFactory(resource);
} catch (exception) {
return new CompositeDisposable(observableThrow(exception).subscribe(observer), disposable);
return new AnonymousObservable(function (o) {
var disposable = disposableEmpty;
var resource = tryCatch(resourceFactory)();
if (resource === errorObj) {
return new CompositeDisposable(observableThrow(resource.e).subscribe(o), disposable);
}
return new CompositeDisposable(source.subscribe(observer), disposable);
resource && (disposable = resource);
var source = tryCatch(observableFactory)(resource);
if (source === errorObj) {
return new CompositeDisposable(observableThrow(source.e).subscribe(o), disposable);
}
return new CompositeDisposable(source.subscribe(o), disposable);
});

@@ -344,23 +363,33 @@ };

leftSubscription.setDisposable(leftSource.subscribe(function (left) {
choiceL();
choice === leftChoice && observer.onNext(left);
}, function (err) {
choiceL();
choice === leftChoice && observer.onError(err);
}, function () {
choiceL();
choice === leftChoice && observer.onCompleted();
}));
var leftSubscribe = observerCreate(
function (left) {
choiceL();
choice === leftChoice && observer.onNext(left);
},
function (e) {
choiceL();
choice === leftChoice && observer.onError(e);
},
function () {
choiceL();
choice === leftChoice && observer.onCompleted();
}
);
var rightSubscribe = observerCreate(
function (right) {
choiceR();
choice === rightChoice && observer.onNext(right);
},
function (e) {
choiceR();
choice === rightChoice && observer.onError(e);
},
function () {
choiceR();
choice === rightChoice && observer.onCompleted();
}
);
rightSubscription.setDisposable(rightSource.subscribe(function (right) {
choiceR();
choice === rightChoice && observer.onNext(right);
}, function (err) {
choiceR();
choice === rightChoice && observer.onError(err);
}, function () {
choiceR();
choice === rightChoice && observer.onCompleted();
}));
leftSubscription.setDisposable(leftSource.subscribe(leftSubscribe));
rightSubscription.setDisposable(rightSource.subscribe(rightSubscribe));

@@ -371,22 +400,19 @@ return new CompositeDisposable(leftSubscription, rightSubscription);

function amb(p, c) { return p.amb(c); }
/**
* Propagates the observable sequence or Promise that reacts first.
*
* @example
* var = Rx.Observable.amb(xs, ys, zs);
* @returns {Observable} An observable sequence that surfaces any of the given sequences, whichever reacted first.
*/
Observable.amb = function () {
var acc = observableNever(), items = [];
var acc = observableNever(), items;
if (Array.isArray(arguments[0])) {
items = arguments[0];
} else {
for(var i = 0, len = arguments.length; i < len; i++) { items.push(arguments[i]); }
var len = arguments.length;
items = new Array(items);
for(var i = 0; i < len; i++) { items[i] = arguments[i]; }
}
function func(previous, current) {
return previous.amb(current);
}
for (var i = 0, len = items.length; i < len; i++) {
acc = func(acc, items[i]);
acc = amb(acc, items[i]);
}

@@ -439,8 +465,7 @@ return acc;

function toArray(x) { return x.toArray(); }
function notEmpty(x) { return x.length > 0; }
/**
* Projects each element of an observable sequence into zero or more buffers which are produced based on element count information.
*
* @example
* var res = xs.bufferWithCount(10);
* var res = xs.bufferWithCount(10, 1);
* @param {Number} count Length of each buffer.

@@ -451,10 +476,6 @@ * @param {Number} [skip] Number of elements to skip between creation of consecutive buffers. If not provided, defaults to the count.

observableProto.bufferWithCount = function (count, skip) {
if (typeof skip !== 'number') {
skip = count;
}
return this.windowWithCount(count, skip).selectMany(function (x) {
return x.toArray();
}).where(function (x) {
return x.length > 0;
});
typeof skip !== 'number' && (skip = count);
return this.windowWithCount(count, skip)
.flatMap(toArray)
.filter(notEmpty);
};

@@ -461,0 +482,0 @@

/* Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.*/
(function(a){var b={"boolean":!1,"function":!0,object:!0,number:!1,string:!1,undefined:!1},c=b[typeof window]&&window||this,d=b[typeof exports]&&exports&&!exports.nodeType&&exports,e=b[typeof module]&&module&&!module.nodeType&&module,f=(e&&e.exports===d&&d,b[typeof global]&&global);!f||f.global!==f&&f.window!==f||(c=f),"function"==typeof define&&define.amd?define(["rx-lite-compat"],function(b,d){return a(c,d,b)}):"object"==typeof module&&module&&module.exports===d?module.exports=a(c,module.exports,require("rx-lite-compat")):c.Rx=a(c,{},c.Rx)}).call(this,function(a,b,c,d){function e(a,b){this.scheduler=a,this.disposable=b,this.isDisposed=!1}function f(a,b){b.isDisposed||(b.isDisposed=!0,b.disposable.dispose())}function g(a,b,c){for(var d=0,e=a.length;e>d;d++)if(c(a[d],b))return d;return-1}function h(a){this.comparer=a,this.set=[]}var i=c.Observable,j=i.prototype,k=i.never,l=i.throwException,m=c.AnonymousObservable,n=c.AnonymousObserver,o=c.Notification.createOnNext,p=c.Notification.createOnError,q=c.Notification.createOnCompleted,r=c.Observer,s=c.Subject,t=c.internals,u=c.helpers,v=t.ScheduledObserver,w=c.SerialDisposable,x=c.SingleAssignmentDisposable,y=c.CompositeDisposable,z=c.RefCountDisposable,A=c.Disposable.empty,B=c.Scheduler.immediate,C=(u.defaultKeySerializer,c.internals.addRef),D=(u.identity,u.isPromise),E=t.inherits,F=t.bindCallback,G=(u.noop,c.Scheduler.isScheduler),H=i.fromPromise,I=c.ArgumentOutOfRangeError;e.prototype.dispose=function(){this.scheduler.scheduleWithState(this,f)};var J=function(a){function b(b){a.call(this),this._observer=b,this._state=0}E(b,a);var c=b.prototype;return c.onNext=function(a){this.checkAccess();var b=tryCatch(this._observer.onNext).call(this._observer,a);this._state=0,b===errorObj&&thrower(b.e)},c.onError=function(a){this.checkAccess();var b=tryCatch(this._observer.onError).call(this._observer,a);this._state=2,b===errorObj&&thrower(b.e)},c.onCompleted=function(){this.checkAccess();var a=tryCatch(this._observer.onCompleted).call(this._observer);this._state=2,a===errorObj&&thrower(a.e)},c.checkAccess=function(){if(1===this._state)throw new Error("Re-entrancy detected");if(2===this._state)throw new Error("Observer completed");0===this._state&&(this._state=1)},b}(r),K=function(a){function b(b,c,d){a.call(this,b,c),this._cancel=d}return E(b,a),b.prototype.next=function(b){a.prototype.next.call(this,b),this.ensureActive()},b.prototype.error=function(b){a.prototype.error.call(this,b),this.ensureActive()},b.prototype.completed=function(){a.prototype.completed.call(this),this.ensureActive()},b.prototype.dispose=function(){a.prototype.dispose.call(this),this._cancel&&this._cancel.dispose(),this._cancel=null},b}(v);r.prototype.checked=function(){return new J(this)},r.notifyOn=function(a){return new K(a,this)},r.fromNotifier=function(a,b){var c=F(a,b,1);return new n(function(a){return c(o(a))},function(a){return c(p(a))},function(){return c(q())})},r.prototype.toNotifier=function(){var a=this;return function(b){return b.accept(a)}},r.prototype.asObserver=function(){var a=this;return new n(function(b){a.onNext(b)},function(b){a.onError(b)},function(){a.onCompleted()})},j.observeOn=function(a){var b=this;return new m(function(c){return b.subscribe(new K(a,c))},b)},j.subscribeOn=function(a){var b=this;return new m(function(c){var d=new x,f=new w;return f.setDisposable(d),d.setDisposable(a.schedule(function(){f.setDisposable(new e(a,b.subscribe(c)))})),f},b)},i.generate=function(a,b,c,d,e){return G(e)||(e=currentThreadScheduler),new m(function(f){var g=!0;return e.scheduleRecursiveWithState(a,function(a,e){var h,i;try{g?g=!1:a=c(a),h=b(a),h&&(i=d(a))}catch(j){return f.onError(j)}h?(f.onNext(i),e(a)):f.onCompleted()})})},i.using=function(a,b){return new m(function(c){var d,e,f=A;try{d=a(),d&&(f=d),e=b(d)}catch(g){return new y(l(g).subscribe(c),f)}return new y(e.subscribe(c),f)})},j.amb=function(a){var b=this;return new m(function(c){function d(){f||(f=g,j.dispose())}function e(){f||(f=h,i.dispose())}var f,g="L",h="R",i=new x,j=new x;return D(a)&&(a=H(a)),i.setDisposable(b.subscribe(function(a){d(),f===g&&c.onNext(a)},function(a){d(),f===g&&c.onError(a)},function(){d(),f===g&&c.onCompleted()})),j.setDisposable(a.subscribe(function(a){e(),f===h&&c.onNext(a)},function(a){e(),f===h&&c.onError(a)},function(){e(),f===h&&c.onCompleted()})),new y(i,j)})},i.amb=function(){function a(a,b){return a.amb(b)}var b=k(),c=[];if(Array.isArray(arguments[0]))c=arguments[0];else for(var d=0,e=arguments.length;e>d;d++)c.push(arguments[d]);for(var d=0,e=c.length;e>d;d++)b=a(b,c[d]);return b},j.onErrorResumeNext=function(a){if(!a)throw new Error("Second observable is required");return L([this,a])};var L=i.onErrorResumeNext=function(){var a=[];if(Array.isArray(arguments[0]))a=arguments[0];else for(var b=0,c=arguments.length;c>b;b++)a.push(arguments[b]);return new m(function(b){var c=0,d=new w,e=B.scheduleRecursive(function(e){var f,g;c<a.length?(f=a[c++],D(f)&&(f=H(f)),g=new x,d.setDisposable(g),g.setDisposable(f.subscribe(b.onNext.bind(b),e,e))):b.onCompleted()});return new y(d,e)})};return j.bufferWithCount=function(a,b){return"number"!=typeof b&&(b=a),this.windowWithCount(a,b).selectMany(function(a){return a.toArray()}).where(function(a){return a.length>0})},j.windowWithCount=function(a,b){var c=this;if(+a||(a=0),Math.abs(a)===1/0&&(a=0),0>=a)throw new I;if(null==b&&(b=a),+b||(b=0),Math.abs(b)===1/0&&(b=0),0>=b)throw new I;return new m(function(d){function e(){var a=new s;i.push(a),d.onNext(C(a,g))}var f=new x,g=new z(f),h=0,i=[];return e(),f.setDisposable(c.subscribe(function(c){for(var d=0,f=i.length;f>d;d++)i[d].onNext(c);var g=h-a+1;g>=0&&g%b===0&&i.shift().onCompleted(),++h%b===0&&e()},function(a){for(;i.length>0;)i.shift().onError(a);d.onError(a)},function(){for(;i.length>0;)i.shift().onCompleted();d.onCompleted()})),g},c)},j.takeLastBuffer=function(a){var b=this;return new m(function(c){var d=[];return b.subscribe(function(b){d.push(b),d.length>a&&d.shift()},function(a){c.onError(a)},function(){c.onNext(d),c.onCompleted()})},b)},j.defaultIfEmpty=function(a){var b=this;return a===d&&(a=null),new m(function(c){var d=!1;return b.subscribe(function(a){d=!0,c.onNext(a)},function(a){c.onError(a)},function(){!d&&c.onNext(a),c.onCompleted()})},b)},h.prototype.push=function(a){var b=-1===g(this.set,a,this.comparer);return b&&this.set.push(a),b},j.distinct=function(a,b){var c=this;return b||(b=defaultComparer),new m(function(d){var e=new h(b);return c.subscribe(function(b){var c=b;if(a)try{c=a(b)}catch(f){return void d.onError(f)}e.push(c)&&d.onNext(b)},function(a){d.onError(a)},function(){d.onCompleted()})},this)},j.singleInstance=function(){function a(){return d||(d=!0,b=c["finally"](function(){d=!1}).publish().refCount()),b}var b,c=this,d=!1;return new m(function(b){return a().subscribe(b)})},c});
(function(a){var b={"function":!0,object:!0},c=b[typeof exports]&&exports&&!exports.nodeType&&exports,d=b[typeof self]&&self.Object&&self,e=b[typeof window]&&window&&window.Object&&window,f=b[typeof module]&&module&&!module.nodeType&&module,g=(f&&f.exports===c&&c,c&&f&&"object"==typeof global&&global&&global.Object&&global),h=h=g||e!==(this&&this.window)&&e||d||this;"function"==typeof define&&define.amd?define(["rx-lite-compat"],function(b,c){return a(h,c,b)}):"object"==typeof module&&module&&module.exports===c?module.exports=a(h,module.exports,require("rx-lite-compat")):h.Rx=a(h,{},h.Rx)}).call(this,function(a,b,c,d){function e(){try{return o.apply(this,arguments)}catch(a){return S.e=a,S}}function f(a){if(!M(a))throw new TypeError("fn must be a function");return o=a,e}function g(a){throw a}function h(a,b){this.scheduler=a,this.disposable=b,this.isDisposed=!1}function i(a,b){b.isDisposed||(b.isDisposed=!0,b.disposable.dispose())}function j(a,b){return a.amb(b)}function k(a){return a.toArray()}function l(a){return a.length>0}function m(a,b,c){for(var d=0,e=a.length;e>d;d++)if(c(a[d],b))return d;return-1}function n(a){this.comparer=a,this.set=[]}var o,p=c.Observable,q=p.prototype,r=p.never,s=p["throw"],t=c.AnonymousObservable,u=c.AnonymousObserver,v=c.Notification.createOnNext,w=c.Notification.createOnError,x=c.Notification.createOnCompleted,y=c.Observer,z=y.create,A=c.Subject,B=c.internals,C=c.helpers,D=B.ScheduledObserver,E=c.SerialDisposable,F=c.SingleAssignmentDisposable,G=c.CompositeDisposable,H=c.RefCountDisposable,I=c.Disposable.empty,J=c.Scheduler.immediate,K=(C.defaultKeySerializer,c.internals.addRef),L=(C.identity,C.isPromise),M=C.isFunction,N=B.inherits,O=B.bindCallback,P=(C.noop,c.Scheduler.isScheduler),Q=p.fromPromise,R=c.ArgumentOutOfRangeError,S={e:{}};h.prototype.dispose=function(){this.scheduler.scheduleWithState(this,i)};var T=function(a){function b(b){a.call(this),this._observer=b,this._state=0}N(b,a);var c=b.prototype;return c.onNext=function(a){this.checkAccess();var b=f(this._observer.onNext).call(this._observer,a);this._state=0,b===S&&g(b.e)},c.onError=function(a){this.checkAccess();var b=f(this._observer.onError).call(this._observer,a);this._state=2,b===S&&g(b.e)},c.onCompleted=function(){this.checkAccess();var a=f(this._observer.onCompleted).call(this._observer);this._state=2,a===S&&g(a.e)},c.checkAccess=function(){if(1===this._state)throw new Error("Re-entrancy detected");if(2===this._state)throw new Error("Observer completed");0===this._state&&(this._state=1)},b}(y),U=function(a){function b(b,c,d){a.call(this,b,c),this._cancel=d}return N(b,a),b.prototype.next=function(b){a.prototype.next.call(this,b),this.ensureActive()},b.prototype.error=function(b){a.prototype.error.call(this,b),this.ensureActive()},b.prototype.completed=function(){a.prototype.completed.call(this),this.ensureActive()},b.prototype.dispose=function(){a.prototype.dispose.call(this),this._cancel&&this._cancel.dispose(),this._cancel=null},b}(D);y.prototype.checked=function(){return new T(this)},y.notifyOn=function(a){return new U(a,this)},y.fromNotifier=function(a,b){var c=O(a,b,1);return new u(function(a){return c(v(a))},function(a){return c(w(a))},function(){return c(x())})},y.prototype.toNotifier=function(){var a=this;return function(b){return b.accept(a)}},y.prototype.asObserver=function(){var a=this;return new u(function(b){a.onNext(b)},function(b){a.onError(b)},function(){a.onCompleted()})},q.observeOn=function(a){var b=this;return new t(function(c){return b.subscribe(new U(a,c))},b)},q.subscribeOn=function(a){var b=this;return new t(function(c){var d=new F,e=new E;return e.setDisposable(d),d.setDisposable(a.schedule(function(){e.setDisposable(new h(a,b.subscribe(c)))})),e},b)},p.generate=function(a,b,c,d,e){return P(e)||(e=currentThreadScheduler),new t(function(f){var g=!0;return e.scheduleRecursiveWithState(a,function(a,e){var h,i;try{g?g=!1:a=c(a),h=b(a),h&&(i=d(a))}catch(j){return f.onError(j)}h?(f.onNext(i),e(a)):f.onCompleted()})})},p.using=function(a,b){return new t(function(c){var d=I,e=f(a)();if(e===S)return new G(s(e.e).subscribe(c),d);e&&(d=e);var g=f(b)(e);return g===S?new G(s(g.e).subscribe(c),d):new G(g.subscribe(c),d)})},q.amb=function(a){var b=this;return new t(function(c){function d(){f||(f=g,j.dispose())}function e(){f||(f=h,i.dispose())}var f,g="L",h="R",i=new F,j=new F;L(a)&&(a=Q(a));var k=z(function(a){d(),f===g&&c.onNext(a)},function(a){d(),f===g&&c.onError(a)},function(){d(),f===g&&c.onCompleted()}),l=z(function(a){e(),f===h&&c.onNext(a)},function(a){e(),f===h&&c.onError(a)},function(){e(),f===h&&c.onCompleted()});return i.setDisposable(b.subscribe(k)),j.setDisposable(a.subscribe(l)),new G(i,j)})},p.amb=function(){var a,b=r();if(Array.isArray(arguments[0]))a=arguments[0];else{var c=arguments.length;a=new Array(a);for(var d=0;c>d;d++)a[d]=arguments[d]}for(var d=0,c=a.length;c>d;d++)b=j(b,a[d]);return b},q.onErrorResumeNext=function(a){if(!a)throw new Error("Second observable is required");return V([this,a])};var V=p.onErrorResumeNext=function(){var a=[];if(Array.isArray(arguments[0]))a=arguments[0];else for(var b=0,c=arguments.length;c>b;b++)a.push(arguments[b]);return new t(function(b){var c=0,d=new E,e=J.scheduleRecursive(function(e){var f,g;c<a.length?(f=a[c++],L(f)&&(f=Q(f)),g=new F,d.setDisposable(g),g.setDisposable(f.subscribe(b.onNext.bind(b),e,e))):b.onCompleted()});return new G(d,e)})};return q.bufferWithCount=function(a,b){return"number"!=typeof b&&(b=a),this.windowWithCount(a,b).flatMap(k).filter(l)},q.windowWithCount=function(a,b){var c=this;if(+a||(a=0),Math.abs(a)===1/0&&(a=0),0>=a)throw new R;if(null==b&&(b=a),+b||(b=0),Math.abs(b)===1/0&&(b=0),0>=b)throw new R;return new t(function(d){function e(){var a=new A;i.push(a),d.onNext(K(a,g))}var f=new F,g=new H(f),h=0,i=[];return e(),f.setDisposable(c.subscribe(function(c){for(var d=0,f=i.length;f>d;d++)i[d].onNext(c);var g=h-a+1;g>=0&&g%b===0&&i.shift().onCompleted(),++h%b===0&&e()},function(a){for(;i.length>0;)i.shift().onError(a);d.onError(a)},function(){for(;i.length>0;)i.shift().onCompleted();d.onCompleted()})),g},c)},q.takeLastBuffer=function(a){var b=this;return new t(function(c){var d=[];return b.subscribe(function(b){d.push(b),d.length>a&&d.shift()},function(a){c.onError(a)},function(){c.onNext(d),c.onCompleted()})},b)},q.defaultIfEmpty=function(a){var b=this;return a===d&&(a=null),new t(function(c){var d=!1;return b.subscribe(function(a){d=!0,c.onNext(a)},function(a){c.onError(a)},function(){!d&&c.onNext(a),c.onCompleted()})},b)},n.prototype.push=function(a){var b=-1===m(this.set,a,this.comparer);return b&&this.set.push(a),b},q.distinct=function(a,b){var c=this;return b||(b=defaultComparer),new t(function(d){var e=new n(b);return c.subscribe(function(b){var c=b;if(a)try{c=a(b)}catch(f){return void d.onError(f)}e.push(c)&&d.onNext(b)},function(a){d.onError(a)},function(){d.onCompleted()})},this)},q.singleInstance=function(){function a(){return d||(d=!0,b=c["finally"](function(){d=!1}).publish().refCount()),b}var b,c=this,d=!1;return new t(function(b){return a().subscribe(b)})},c});
//# sourceMappingURL=rx.lite.extras.compat.map
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
;(function (factory) {
var objectTypes = {
'boolean': false,
'function': true,
'object': true,
'number': false,
'string': false,
'undefined': false
};
var objectTypes = {
'function': true,
'object': true
};
var root = (objectTypes[typeof window] && window) || this,
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = objectTypes[typeof global] && global;
var
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeSelf = objectTypes[typeof self] && self.Object && self,
freeWindow = objectTypes[typeof window] && window && window.Object && window,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global;
if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) {
root = freeGlobal;
}
var root = root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this;
// Because of build optimizers
if (typeof define === 'function' && define.amd) {
define(['rx-lite'], function (Rx, exports) {
return factory(root, exports, Rx);
});
} else if (typeof module === 'object' && module && module.exports === freeExports) {
module.exports = factory(root, module.exports, require('rx-lite'));
} else {
root.Rx = factory(root, {}, root.Rx);
}
// Because of build optimizers
if (typeof define === 'function' && define.amd) {
define(['rx-lite'], function (Rx, exports) {
return factory(root, exports, Rx);
});
} else if (typeof module === 'object' && module && module.exports === freeExports) {
module.exports = factory(root, module.exports, require('rx-lite'));
} else {
root.Rx = factory(root, {}, root.Rx);
}
}.call(this, function (root, exp, Rx, undefined) {

@@ -39,3 +35,3 @@

observableNever = Observable.never,
observableThrow = Observable.throwException,
observableThrow = Observable['throw'],
AnonymousObservable = Rx.AnonymousObservable,

@@ -47,2 +43,3 @@ AnonymousObserver = Rx.AnonymousObserver,

Observer = Rx.Observer,
observerCreate = Observer.create,
Subject = Rx.Subject,

@@ -62,2 +59,3 @@ internals = Rx.internals,

isPromise = helpers.isPromise,
isFunction = helpers.isFunction,
inherits = internals.inherits,

@@ -70,2 +68,21 @@ bindCallback = internals.bindCallback,

var errorObj = {e: {}};
var tryCatchTarget;
function tryCatcher() {
try {
return tryCatchTarget.apply(this, arguments);
} catch (e) {
errorObj.e = e;
return errorObj;
}
}
function tryCatch(fn) {
if (!isFunction(fn)) { throw new TypeError('fn must be a function'); }
tryCatchTarget = fn;
return tryCatcher;
}
function thrower(e) {
throw e;
}
function ScheduledDisposable(scheduler, disposable) {

@@ -301,12 +318,14 @@ this.scheduler = scheduler;

Observable.using = function (resourceFactory, observableFactory) {
return new AnonymousObservable(function (observer) {
var disposable = disposableEmpty, resource, source;
try {
resource = resourceFactory();
resource && (disposable = resource);
source = observableFactory(resource);
} catch (exception) {
return new CompositeDisposable(observableThrow(exception).subscribe(observer), disposable);
return new AnonymousObservable(function (o) {
var disposable = disposableEmpty;
var resource = tryCatch(resourceFactory)();
if (resource === errorObj) {
return new CompositeDisposable(observableThrow(resource.e).subscribe(o), disposable);
}
return new CompositeDisposable(source.subscribe(observer), disposable);
resource && (disposable = resource);
var source = tryCatch(observableFactory)(resource);
if (source === errorObj) {
return new CompositeDisposable(observableThrow(source.e).subscribe(o), disposable);
}
return new CompositeDisposable(source.subscribe(o), disposable);
});

@@ -344,23 +363,33 @@ };

leftSubscription.setDisposable(leftSource.subscribe(function (left) {
choiceL();
choice === leftChoice && observer.onNext(left);
}, function (err) {
choiceL();
choice === leftChoice && observer.onError(err);
}, function () {
choiceL();
choice === leftChoice && observer.onCompleted();
}));
var leftSubscribe = observerCreate(
function (left) {
choiceL();
choice === leftChoice && observer.onNext(left);
},
function (e) {
choiceL();
choice === leftChoice && observer.onError(e);
},
function () {
choiceL();
choice === leftChoice && observer.onCompleted();
}
);
var rightSubscribe = observerCreate(
function (right) {
choiceR();
choice === rightChoice && observer.onNext(right);
},
function (e) {
choiceR();
choice === rightChoice && observer.onError(e);
},
function () {
choiceR();
choice === rightChoice && observer.onCompleted();
}
);
rightSubscription.setDisposable(rightSource.subscribe(function (right) {
choiceR();
choice === rightChoice && observer.onNext(right);
}, function (err) {
choiceR();
choice === rightChoice && observer.onError(err);
}, function () {
choiceR();
choice === rightChoice && observer.onCompleted();
}));
leftSubscription.setDisposable(leftSource.subscribe(leftSubscribe));
rightSubscription.setDisposable(rightSource.subscribe(rightSubscribe));

@@ -371,22 +400,19 @@ return new CompositeDisposable(leftSubscription, rightSubscription);

function amb(p, c) { return p.amb(c); }
/**
* Propagates the observable sequence or Promise that reacts first.
*
* @example
* var = Rx.Observable.amb(xs, ys, zs);
* @returns {Observable} An observable sequence that surfaces any of the given sequences, whichever reacted first.
*/
Observable.amb = function () {
var acc = observableNever(), items = [];
var acc = observableNever(), items;
if (Array.isArray(arguments[0])) {
items = arguments[0];
} else {
for(var i = 0, len = arguments.length; i < len; i++) { items.push(arguments[i]); }
var len = arguments.length;
items = new Array(items);
for(var i = 0; i < len; i++) { items[i] = arguments[i]; }
}
function func(previous, current) {
return previous.amb(current);
}
for (var i = 0, len = items.length; i < len; i++) {
acc = func(acc, items[i]);
acc = amb(acc, items[i]);
}

@@ -439,8 +465,7 @@ return acc;

function toArray(x) { return x.toArray(); }
function notEmpty(x) { return x.length > 0; }
/**
* Projects each element of an observable sequence into zero or more buffers which are produced based on element count information.
*
* @example
* var res = xs.bufferWithCount(10);
* var res = xs.bufferWithCount(10, 1);
* @param {Number} count Length of each buffer.

@@ -451,10 +476,6 @@ * @param {Number} [skip] Number of elements to skip between creation of consecutive buffers. If not provided, defaults to the count.

observableProto.bufferWithCount = function (count, skip) {
if (typeof skip !== 'number') {
skip = count;
}
return this.windowWithCount(count, skip).selectMany(function (x) {
return x.toArray();
}).where(function (x) {
return x.length > 0;
});
typeof skip !== 'number' && (skip = count);
return this.windowWithCount(count, skip)
.flatMap(toArray)
.filter(notEmpty);
};

@@ -461,0 +482,0 @@

/* Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.*/
(function(a){var b={"boolean":!1,"function":!0,object:!0,number:!1,string:!1,undefined:!1},c=b[typeof window]&&window||this,d=b[typeof exports]&&exports&&!exports.nodeType&&exports,e=b[typeof module]&&module&&!module.nodeType&&module,f=(e&&e.exports===d&&d,b[typeof global]&&global);!f||f.global!==f&&f.window!==f||(c=f),"function"==typeof define&&define.amd?define(["rx-lite"],function(b,d){return a(c,d,b)}):"object"==typeof module&&module&&module.exports===d?module.exports=a(c,module.exports,require("rx-lite")):c.Rx=a(c,{},c.Rx)}).call(this,function(a,b,c,d){function e(a,b){this.scheduler=a,this.disposable=b,this.isDisposed=!1}function f(a,b){b.isDisposed||(b.isDisposed=!0,b.disposable.dispose())}function g(a,b,c){for(var d=0,e=a.length;e>d;d++)if(c(a[d],b))return d;return-1}function h(a){this.comparer=a,this.set=[]}var i=c.Observable,j=i.prototype,k=i.never,l=i.throwException,m=c.AnonymousObservable,n=c.AnonymousObserver,o=c.Notification.createOnNext,p=c.Notification.createOnError,q=c.Notification.createOnCompleted,r=c.Observer,s=c.Subject,t=c.internals,u=c.helpers,v=t.ScheduledObserver,w=c.SerialDisposable,x=c.SingleAssignmentDisposable,y=c.CompositeDisposable,z=c.RefCountDisposable,A=c.Disposable.empty,B=c.Scheduler.immediate,C=(u.defaultKeySerializer,c.internals.addRef),D=(u.identity,u.isPromise),E=t.inherits,F=t.bindCallback,G=(u.noop,c.Scheduler.isScheduler),H=i.fromPromise,I=c.ArgumentOutOfRangeError;e.prototype.dispose=function(){this.scheduler.scheduleWithState(this,f)};var J=function(a){function b(b){a.call(this),this._observer=b,this._state=0}E(b,a);var c=b.prototype;return c.onNext=function(a){this.checkAccess();var b=tryCatch(this._observer.onNext).call(this._observer,a);this._state=0,b===errorObj&&thrower(b.e)},c.onError=function(a){this.checkAccess();var b=tryCatch(this._observer.onError).call(this._observer,a);this._state=2,b===errorObj&&thrower(b.e)},c.onCompleted=function(){this.checkAccess();var a=tryCatch(this._observer.onCompleted).call(this._observer);this._state=2,a===errorObj&&thrower(a.e)},c.checkAccess=function(){if(1===this._state)throw new Error("Re-entrancy detected");if(2===this._state)throw new Error("Observer completed");0===this._state&&(this._state=1)},b}(r),K=function(a){function b(b,c,d){a.call(this,b,c),this._cancel=d}return E(b,a),b.prototype.next=function(b){a.prototype.next.call(this,b),this.ensureActive()},b.prototype.error=function(b){a.prototype.error.call(this,b),this.ensureActive()},b.prototype.completed=function(){a.prototype.completed.call(this),this.ensureActive()},b.prototype.dispose=function(){a.prototype.dispose.call(this),this._cancel&&this._cancel.dispose(),this._cancel=null},b}(v);r.prototype.checked=function(){return new J(this)},r.notifyOn=function(a){return new K(a,this)},r.fromNotifier=function(a,b){var c=F(a,b,1);return new n(function(a){return c(o(a))},function(a){return c(p(a))},function(){return c(q())})},r.prototype.toNotifier=function(){var a=this;return function(b){return b.accept(a)}},r.prototype.asObserver=function(){var a=this;return new n(function(b){a.onNext(b)},function(b){a.onError(b)},function(){a.onCompleted()})},j.observeOn=function(a){var b=this;return new m(function(c){return b.subscribe(new K(a,c))},b)},j.subscribeOn=function(a){var b=this;return new m(function(c){var d=new x,f=new w;return f.setDisposable(d),d.setDisposable(a.schedule(function(){f.setDisposable(new e(a,b.subscribe(c)))})),f},b)},i.generate=function(a,b,c,d,e){return G(e)||(e=currentThreadScheduler),new m(function(f){var g=!0;return e.scheduleRecursiveWithState(a,function(a,e){var h,i;try{g?g=!1:a=c(a),h=b(a),h&&(i=d(a))}catch(j){return f.onError(j)}h?(f.onNext(i),e(a)):f.onCompleted()})})},i.using=function(a,b){return new m(function(c){var d,e,f=A;try{d=a(),d&&(f=d),e=b(d)}catch(g){return new y(l(g).subscribe(c),f)}return new y(e.subscribe(c),f)})},j.amb=function(a){var b=this;return new m(function(c){function d(){f||(f=g,j.dispose())}function e(){f||(f=h,i.dispose())}var f,g="L",h="R",i=new x,j=new x;return D(a)&&(a=H(a)),i.setDisposable(b.subscribe(function(a){d(),f===g&&c.onNext(a)},function(a){d(),f===g&&c.onError(a)},function(){d(),f===g&&c.onCompleted()})),j.setDisposable(a.subscribe(function(a){e(),f===h&&c.onNext(a)},function(a){e(),f===h&&c.onError(a)},function(){e(),f===h&&c.onCompleted()})),new y(i,j)})},i.amb=function(){function a(a,b){return a.amb(b)}var b=k(),c=[];if(Array.isArray(arguments[0]))c=arguments[0];else for(var d=0,e=arguments.length;e>d;d++)c.push(arguments[d]);for(var d=0,e=c.length;e>d;d++)b=a(b,c[d]);return b},j.onErrorResumeNext=function(a){if(!a)throw new Error("Second observable is required");return L([this,a])};var L=i.onErrorResumeNext=function(){var a=[];if(Array.isArray(arguments[0]))a=arguments[0];else for(var b=0,c=arguments.length;c>b;b++)a.push(arguments[b]);return new m(function(b){var c=0,d=new w,e=B.scheduleRecursive(function(e){var f,g;c<a.length?(f=a[c++],D(f)&&(f=H(f)),g=new x,d.setDisposable(g),g.setDisposable(f.subscribe(b.onNext.bind(b),e,e))):b.onCompleted()});return new y(d,e)})};return j.bufferWithCount=function(a,b){return"number"!=typeof b&&(b=a),this.windowWithCount(a,b).selectMany(function(a){return a.toArray()}).where(function(a){return a.length>0})},j.windowWithCount=function(a,b){var c=this;if(+a||(a=0),Math.abs(a)===1/0&&(a=0),0>=a)throw new I;if(null==b&&(b=a),+b||(b=0),Math.abs(b)===1/0&&(b=0),0>=b)throw new I;return new m(function(d){function e(){var a=new s;i.push(a),d.onNext(C(a,g))}var f=new x,g=new z(f),h=0,i=[];return e(),f.setDisposable(c.subscribe(function(c){for(var d=0,f=i.length;f>d;d++)i[d].onNext(c);var g=h-a+1;g>=0&&g%b===0&&i.shift().onCompleted(),++h%b===0&&e()},function(a){for(;i.length>0;)i.shift().onError(a);d.onError(a)},function(){for(;i.length>0;)i.shift().onCompleted();d.onCompleted()})),g},c)},j.takeLastBuffer=function(a){var b=this;return new m(function(c){var d=[];return b.subscribe(function(b){d.push(b),d.length>a&&d.shift()},function(a){c.onError(a)},function(){c.onNext(d),c.onCompleted()})},b)},j.defaultIfEmpty=function(a){var b=this;return a===d&&(a=null),new m(function(c){var d=!1;return b.subscribe(function(a){d=!0,c.onNext(a)},function(a){c.onError(a)},function(){!d&&c.onNext(a),c.onCompleted()})},b)},h.prototype.push=function(a){var b=-1===g(this.set,a,this.comparer);return b&&this.set.push(a),b},j.distinct=function(a,b){var c=this;return b||(b=defaultComparer),new m(function(d){var e=new h(b);return c.subscribe(function(b){var c=b;if(a)try{c=a(b)}catch(f){return void d.onError(f)}e.push(c)&&d.onNext(b)},function(a){d.onError(a)},function(){d.onCompleted()})},this)},j.singleInstance=function(){function a(){return d||(d=!0,b=c["finally"](function(){d=!1}).publish().refCount()),b}var b,c=this,d=!1;return new m(function(b){return a().subscribe(b)})},c});
(function(a){var b={"function":!0,object:!0},c=b[typeof exports]&&exports&&!exports.nodeType&&exports,d=b[typeof self]&&self.Object&&self,e=b[typeof window]&&window&&window.Object&&window,f=b[typeof module]&&module&&!module.nodeType&&module,g=(f&&f.exports===c&&c,c&&f&&"object"==typeof global&&global&&global.Object&&global),h=h=g||e!==(this&&this.window)&&e||d||this;"function"==typeof define&&define.amd?define(["rx-lite"],function(b,c){return a(h,c,b)}):"object"==typeof module&&module&&module.exports===c?module.exports=a(h,module.exports,require("rx-lite")):h.Rx=a(h,{},h.Rx)}).call(this,function(a,b,c,d){function e(){try{return o.apply(this,arguments)}catch(a){return S.e=a,S}}function f(a){if(!M(a))throw new TypeError("fn must be a function");return o=a,e}function g(a){throw a}function h(a,b){this.scheduler=a,this.disposable=b,this.isDisposed=!1}function i(a,b){b.isDisposed||(b.isDisposed=!0,b.disposable.dispose())}function j(a,b){return a.amb(b)}function k(a){return a.toArray()}function l(a){return a.length>0}function m(a,b,c){for(var d=0,e=a.length;e>d;d++)if(c(a[d],b))return d;return-1}function n(a){this.comparer=a,this.set=[]}var o,p=c.Observable,q=p.prototype,r=p.never,s=p["throw"],t=c.AnonymousObservable,u=c.AnonymousObserver,v=c.Notification.createOnNext,w=c.Notification.createOnError,x=c.Notification.createOnCompleted,y=c.Observer,z=y.create,A=c.Subject,B=c.internals,C=c.helpers,D=B.ScheduledObserver,E=c.SerialDisposable,F=c.SingleAssignmentDisposable,G=c.CompositeDisposable,H=c.RefCountDisposable,I=c.Disposable.empty,J=c.Scheduler.immediate,K=(C.defaultKeySerializer,c.internals.addRef),L=(C.identity,C.isPromise),M=C.isFunction,N=B.inherits,O=B.bindCallback,P=(C.noop,c.Scheduler.isScheduler),Q=p.fromPromise,R=c.ArgumentOutOfRangeError,S={e:{}};h.prototype.dispose=function(){this.scheduler.scheduleWithState(this,i)};var T=function(a){function b(b){a.call(this),this._observer=b,this._state=0}N(b,a);var c=b.prototype;return c.onNext=function(a){this.checkAccess();var b=f(this._observer.onNext).call(this._observer,a);this._state=0,b===S&&g(b.e)},c.onError=function(a){this.checkAccess();var b=f(this._observer.onError).call(this._observer,a);this._state=2,b===S&&g(b.e)},c.onCompleted=function(){this.checkAccess();var a=f(this._observer.onCompleted).call(this._observer);this._state=2,a===S&&g(a.e)},c.checkAccess=function(){if(1===this._state)throw new Error("Re-entrancy detected");if(2===this._state)throw new Error("Observer completed");0===this._state&&(this._state=1)},b}(y),U=function(a){function b(b,c,d){a.call(this,b,c),this._cancel=d}return N(b,a),b.prototype.next=function(b){a.prototype.next.call(this,b),this.ensureActive()},b.prototype.error=function(b){a.prototype.error.call(this,b),this.ensureActive()},b.prototype.completed=function(){a.prototype.completed.call(this),this.ensureActive()},b.prototype.dispose=function(){a.prototype.dispose.call(this),this._cancel&&this._cancel.dispose(),this._cancel=null},b}(D);y.prototype.checked=function(){return new T(this)},y.notifyOn=function(a){return new U(a,this)},y.fromNotifier=function(a,b){var c=O(a,b,1);return new u(function(a){return c(v(a))},function(a){return c(w(a))},function(){return c(x())})},y.prototype.toNotifier=function(){var a=this;return function(b){return b.accept(a)}},y.prototype.asObserver=function(){var a=this;return new u(function(b){a.onNext(b)},function(b){a.onError(b)},function(){a.onCompleted()})},q.observeOn=function(a){var b=this;return new t(function(c){return b.subscribe(new U(a,c))},b)},q.subscribeOn=function(a){var b=this;return new t(function(c){var d=new F,e=new E;return e.setDisposable(d),d.setDisposable(a.schedule(function(){e.setDisposable(new h(a,b.subscribe(c)))})),e},b)},p.generate=function(a,b,c,d,e){return P(e)||(e=currentThreadScheduler),new t(function(f){var g=!0;return e.scheduleRecursiveWithState(a,function(a,e){var h,i;try{g?g=!1:a=c(a),h=b(a),h&&(i=d(a))}catch(j){return f.onError(j)}h?(f.onNext(i),e(a)):f.onCompleted()})})},p.using=function(a,b){return new t(function(c){var d=I,e=f(a)();if(e===S)return new G(s(e.e).subscribe(c),d);e&&(d=e);var g=f(b)(e);return g===S?new G(s(g.e).subscribe(c),d):new G(g.subscribe(c),d)})},q.amb=function(a){var b=this;return new t(function(c){function d(){f||(f=g,j.dispose())}function e(){f||(f=h,i.dispose())}var f,g="L",h="R",i=new F,j=new F;L(a)&&(a=Q(a));var k=z(function(a){d(),f===g&&c.onNext(a)},function(a){d(),f===g&&c.onError(a)},function(){d(),f===g&&c.onCompleted()}),l=z(function(a){e(),f===h&&c.onNext(a)},function(a){e(),f===h&&c.onError(a)},function(){e(),f===h&&c.onCompleted()});return i.setDisposable(b.subscribe(k)),j.setDisposable(a.subscribe(l)),new G(i,j)})},p.amb=function(){var a,b=r();if(Array.isArray(arguments[0]))a=arguments[0];else{var c=arguments.length;a=new Array(a);for(var d=0;c>d;d++)a[d]=arguments[d]}for(var d=0,c=a.length;c>d;d++)b=j(b,a[d]);return b},q.onErrorResumeNext=function(a){if(!a)throw new Error("Second observable is required");return V([this,a])};var V=p.onErrorResumeNext=function(){var a=[];if(Array.isArray(arguments[0]))a=arguments[0];else for(var b=0,c=arguments.length;c>b;b++)a.push(arguments[b]);return new t(function(b){var c=0,d=new E,e=J.scheduleRecursive(function(e){var f,g;c<a.length?(f=a[c++],L(f)&&(f=Q(f)),g=new F,d.setDisposable(g),g.setDisposable(f.subscribe(b.onNext.bind(b),e,e))):b.onCompleted()});return new G(d,e)})};return q.bufferWithCount=function(a,b){return"number"!=typeof b&&(b=a),this.windowWithCount(a,b).flatMap(k).filter(l)},q.windowWithCount=function(a,b){var c=this;if(+a||(a=0),Math.abs(a)===1/0&&(a=0),0>=a)throw new R;if(null==b&&(b=a),+b||(b=0),Math.abs(b)===1/0&&(b=0),0>=b)throw new R;return new t(function(d){function e(){var a=new A;i.push(a),d.onNext(K(a,g))}var f=new F,g=new H(f),h=0,i=[];return e(),f.setDisposable(c.subscribe(function(c){for(var d=0,f=i.length;f>d;d++)i[d].onNext(c);var g=h-a+1;g>=0&&g%b===0&&i.shift().onCompleted(),++h%b===0&&e()},function(a){for(;i.length>0;)i.shift().onError(a);d.onError(a)},function(){for(;i.length>0;)i.shift().onCompleted();d.onCompleted()})),g},c)},q.takeLastBuffer=function(a){var b=this;return new t(function(c){var d=[];return b.subscribe(function(b){d.push(b),d.length>a&&d.shift()},function(a){c.onError(a)},function(){c.onNext(d),c.onCompleted()})},b)},q.defaultIfEmpty=function(a){var b=this;return a===d&&(a=null),new t(function(c){var d=!1;return b.subscribe(function(a){d=!0,c.onNext(a)},function(a){c.onError(a)},function(){!d&&c.onNext(a),c.onCompleted()})},b)},n.prototype.push=function(a){var b=-1===m(this.set,a,this.comparer);return b&&this.set.push(a),b},q.distinct=function(a,b){var c=this;return b||(b=defaultComparer),new t(function(d){var e=new n(b);return c.subscribe(function(b){var c=b;if(a)try{c=a(b)}catch(f){return void d.onError(f)}e.push(c)&&d.onNext(b)},function(a){d.onError(a)},function(){d.onCompleted()})},this)},q.singleInstance=function(){function a(){return d||(d=!0,b=c["finally"](function(){d=!1}).publish().refCount()),b}var b,c=this,d=!1;return new t(function(b){return a().subscribe(b)})},c});
//# sourceMappingURL=rx.lite.extras.map
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
;(function (factory) {
var objectTypes = {
'boolean': false,
'function': true,
'object': true,
'number': false,
'string': false,
'undefined': false
};
var objectTypes = {
'function': true,
'object': true
};
var root = (objectTypes[typeof window] && window) || this,
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = objectTypes[typeof global] && global;
var
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeSelf = objectTypes[typeof self] && self.Object && self,
freeWindow = objectTypes[typeof window] && window && window.Object && window,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global;
if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) {
root = freeGlobal;
}
var root = root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this;

@@ -23,0 +19,0 @@ // Because of build optimizers

/* Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.*/
(function(a){var b={"boolean":!1,"function":!0,object:!0,number:!1,string:!1,undefined:!1},c=b[typeof window]&&window||this,d=b[typeof exports]&&exports&&!exports.nodeType&&exports,e=b[typeof module]&&module&&!module.nodeType&&module,f=(e&&e.exports===d&&d,b[typeof global]&&global);!f||f.global!==f&&f.window!==f||(c=f),"function"==typeof define&&define.amd?define(["rx"],function(b,d){return a(c,d,b)}):"object"==typeof module&&module&&module.exports===d?module.exports=a(c,module.exports,require("./rx")):c.Rx=a(c,{},c.Rx)}).call(this,function(a,b,c,d){var e=c.Observable,f=e.prototype,g=c.AnonymousObservable,h=e.never,i=c.internals.isEqual,j=c.helpers.defaultSubComparer;return f.jortSort=function(){return this.jortSortUntil(h())},f.jortSortUntil=function(a){var b=this;return new g(function(c){var d=[];return b.takeUntil(a).subscribe(d.push.bind(d),c.onError.bind(c),function(){var a=d.slice(0).sort(j);c.onNext(i(d,a)),c.onCompleted()})},b)},c});
(function(a){var b={"function":!0,object:!0},c=b[typeof exports]&&exports&&!exports.nodeType&&exports,d=b[typeof self]&&self.Object&&self,e=b[typeof window]&&window&&window.Object&&window,f=b[typeof module]&&module&&!module.nodeType&&module,g=(f&&f.exports===c&&c,c&&f&&"object"==typeof global&&global&&global.Object&&global),h=h=g||e!==(this&&this.window)&&e||d||this;"function"==typeof define&&define.amd?define(["rx"],function(b,c){return a(h,c,b)}):"object"==typeof module&&module&&module.exports===c?module.exports=a(h,module.exports,require("./rx")):h.Rx=a(h,{},h.Rx)}).call(this,function(a,b,c,d){var e=c.Observable,f=e.prototype,g=c.AnonymousObservable,h=e.never,i=c.internals.isEqual,j=c.helpers.defaultSubComparer;return f.jortSort=function(){return this.jortSortUntil(h())},f.jortSortUntil=function(a){var b=this;return new g(function(c){var d=[];return b.takeUntil(a).subscribe(d.push.bind(d),c.onError.bind(c),function(){var a=d.slice(0).sort(j);c.onNext(i(d,a)),c.onCompleted()})},b)},c});
//# sourceMappingURL=rx.sorting.map

@@ -5,19 +5,15 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.

var objectTypes = {
'boolean': false,
'function': true,
'object': true,
'number': false,
'string': false,
'undefined': false
'object': true
};
var root = (objectTypes[typeof window] && window) || this,
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = objectTypes[typeof global] && global;
var
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeSelf = objectTypes[typeof self] && self.Object && self,
freeWindow = objectTypes[typeof window] && window && window.Object && window,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global;
if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) {
root = freeGlobal;
}
var root = root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this;

@@ -24,0 +20,0 @@ // Because of build optimizers

/* Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.*/
(function(a){var b={"boolean":!1,"function":!0,object:!0,number:!1,string:!1,undefined:!1},c=b[typeof window]&&window||this,d=b[typeof exports]&&exports&&!exports.nodeType&&exports,e=b[typeof module]&&module&&!module.nodeType&&module,f=(e&&e.exports===d&&d,b[typeof global]&&global);!f||f.global!==f&&f.window!==f||(c=f),"function"==typeof define&&define.amd?define(["rx.virtualtime","exports"],function(b,d){return c.Rx=a(c,d,b),c.Rx}):"object"==typeof module&&module&&module.exports===d?module.exports=a(c,module.exports,require("./rx")):c.Rx=a(c,{},c.Rx)}).call(this,function(a,b,c,d){function e(a){this.predicate=a}function f(a){this.predicate=a}function g(a,b){var c=this;this.scheduler=a,this.messages=b,this.subscriptions=[],this.observers=[];for(var d=0,e=this.messages.length;e>d;d++){var f=this.messages[d],g=f.value;!function(b){a.scheduleAbsoluteWithState(null,f.time,function(){for(var a=c.observers.slice(0),d=0,e=a.length;e>d;d++)b.accept(a[d]);return m})}(g)}}var h=c.Observer,i=c.Observable,j=c.Notification,k=c.VirtualTimeScheduler,l=c.Disposable,m=l.empty,n=l.create,o=c.CompositeDisposable,p=(c.SingleAssignmentDisposable,c.internals.inherits),q=c.internals.isEqual;e.prototype.equals=function(a){return a===this?!0:null==a?!1:"N"!==a.kind?!1:this.predicate(a.value)},f.prototype.equals=function(a){return a===this?!0:null==a?!1:"E"!==a.kind?!1:this.predicate(a.exception)};var r=c.ReactiveTest={created:100,subscribed:200,disposed:1e3,onNext:function(a,b){return"function"==typeof b?new s(a,new e(b)):new s(a,j.createOnNext(b))},onError:function(a,b){return"function"==typeof b?new s(a,new f(b)):new s(a,j.createOnError(b))},onCompleted:function(a){return new s(a,j.createOnCompleted())},subscribe:function(a,b){return new t(a,b)}},s=c.Recorded=function(a,b,c){this.time=a,this.value=b,this.comparer=c||q};s.prototype.equals=function(a){return this.time===a.time&&this.comparer(this.value,a.value)},s.prototype.toString=function(){return this.value.toString()+"@"+this.time};var t=c.Subscription=function(a,b){this.subscribe=a,this.unsubscribe=b||Number.MAX_VALUE};t.prototype.equals=function(a){return this.subscribe===a.subscribe&&this.unsubscribe===a.unsubscribe},t.prototype.toString=function(){return"("+this.subscribe+", "+(this.unsubscribe===Number.MAX_VALUE?"Infinite":this.unsubscribe)+")"};var u=c.MockDisposable=function(a){this.scheduler=a,this.disposes=[],this.disposes.push(this.scheduler.clock)};u.prototype.dispose=function(){this.disposes.push(this.scheduler.clock)};var v=function(a){function b(b){a.call(this),this.scheduler=b,this.messages=[]}p(b,a);var c=b.prototype;return c.onNext=function(a){this.messages.push(new s(this.scheduler.clock,j.createOnNext(a)))},c.onError=function(a){this.messages.push(new s(this.scheduler.clock,j.createOnError(a)))},c.onCompleted=function(){this.messages.push(new s(this.scheduler.clock,j.createOnCompleted()))},b}(h);g.prototype.then=function(a,b){var e=this;this.subscriptions.push(new t(this.scheduler.clock));var f,h=this.subscriptions.length-1,i=c.Observer.create(function(b){var j=a(b);if(j&&"function"==typeof j.then)f=j;else{var k=e.scheduler.clock;f=new g(e.scheduler,[c.ReactiveTest.onNext(k,d),c.ReactiveTest.onCompleted(k)])}var l=e.observers.indexOf(i);e.observers.splice(l,1),e.subscriptions[h]=new t(e.subscriptions[h].subscribe,e.scheduler.clock)},function(a){b(a);var c=e.observers.indexOf(i);e.observers.splice(c,1),e.subscriptions[h]=new t(e.subscriptions[h].subscribe,e.scheduler.clock)});return this.observers.push(i),f||new g(this.scheduler,this.messages)};var w=function(a){function b(a){var b=this;this.observers.push(a),this.subscriptions.push(new t(this.scheduler.clock));var c=this.subscriptions.length-1;return n(function(){var d=b.observers.indexOf(a);b.observers.splice(d,1),b.subscriptions[c]=new t(b.subscriptions[c].subscribe,b.scheduler.clock)})}function c(c,d){a.call(this,b);var e,f,g=this;this.scheduler=c,this.messages=d,this.subscriptions=[],this.observers=[];for(var h=0,i=this.messages.length;i>h;h++)e=this.messages[h],f=e.value,function(a){c.scheduleAbsoluteWithState(null,e.time,function(){for(var b=g.observers.slice(0),c=0,d=b.length;d>c;c++)a.accept(b[c]);return m})}(f)}return p(c,a),c}(i),x=function(a){function b(a){var b,c,d=this;this.subscriptions.push(new t(this.scheduler.clock));for(var e=this.subscriptions.length-1,f=new o,g=0,h=this.messages.length;h>g;g++)b=this.messages[g],c=b.value,function(c){f.add(d.scheduler.scheduleRelativeWithState(null,b.time,function(){return c.accept(a),m}))}(c);return n(function(){d.subscriptions[e]=new t(d.subscriptions[e].subscribe,d.scheduler.clock),f.dispose()})}function c(c,d){a.call(this,b),this.scheduler=c,this.messages=d,this.subscriptions=[]}return p(c,a),c}(i);return c.TestScheduler=function(a){function b(a,b){return a>b?1:b>a?-1:0}function d(){a.call(this,0,b)}return p(d,a),d.prototype.scheduleAbsoluteWithState=function(b,c,d){return c<=this.clock&&(c=this.clock+1),a.prototype.scheduleAbsoluteWithState.call(this,b,c,d)},d.prototype.add=function(a,b){return a+b},d.prototype.toDateTimeOffset=function(a){return new Date(a).getTime()},d.prototype.toRelative=function(a){return a},d.prototype.startWithTiming=function(a,b,c,d){var e,f,g=this.createObserver();return this.scheduleAbsoluteWithState(null,b,function(){return e=a(),m}),this.scheduleAbsoluteWithState(null,c,function(){return f=e.subscribe(g),m}),this.scheduleAbsoluteWithState(null,d,function(){return f.dispose(),m}),this.start(),g},d.prototype.startWithDispose=function(a,b){return this.startWithTiming(a,r.created,r.subscribed,b)},d.prototype.startWithCreate=function(a){return this.startWithTiming(a,r.created,r.subscribed,r.disposed)},d.prototype.createHotObservable=function(){var a,b=arguments.length;if(Array.isArray(arguments[0]))a=arguments[0];else{a=new Array(b);for(var c=0;b>c;c++)a[c]=arguments[c]}return new w(this,a)},d.prototype.createColdObservable=function(){var a,b=arguments.length;if(Array.isArray(arguments[0]))a=arguments[0];else{a=new Array(b);for(var c=0;b>c;c++)a[c]=arguments[c]}return new x(this,a)},d.prototype.createResolvedPromise=function(a,b){return new g(this,[c.ReactiveTest.onNext(a,b),c.ReactiveTest.onCompleted(a)])},d.prototype.createRejectedPromise=function(a,b){return new g(this,[c.ReactiveTest.onError(a,b)])},d.prototype.createObserver=function(){return new v(this)},d}(k),c});
(function(a){var b={"function":!0,object:!0},c=b[typeof exports]&&exports&&!exports.nodeType&&exports,d=b[typeof self]&&self.Object&&self,e=b[typeof window]&&window&&window.Object&&window,f=b[typeof module]&&module&&!module.nodeType&&module,g=(f&&f.exports===c&&c,c&&f&&"object"==typeof global&&global&&global.Object&&global),h=h=g||e!==(this&&this.window)&&e||d||this;"function"==typeof define&&define.amd?define(["rx.virtualtime","exports"],function(b,c){return h.Rx=a(h,c,b),h.Rx}):"object"==typeof module&&module&&module.exports===c?module.exports=a(h,module.exports,require("./rx")):h.Rx=a(h,{},h.Rx)}).call(this,function(a,b,c,d){function e(a){this.predicate=a}function f(a){this.predicate=a}function g(a,b){var c=this;this.scheduler=a,this.messages=b,this.subscriptions=[],this.observers=[];for(var d=0,e=this.messages.length;e>d;d++){var f=this.messages[d],g=f.value;!function(b){a.scheduleAbsoluteWithState(null,f.time,function(){for(var a=c.observers.slice(0),d=0,e=a.length;e>d;d++)b.accept(a[d]);return m})}(g)}}var h=c.Observer,i=c.Observable,j=c.Notification,k=c.VirtualTimeScheduler,l=c.Disposable,m=l.empty,n=l.create,o=c.CompositeDisposable,p=(c.SingleAssignmentDisposable,c.internals.inherits),q=c.internals.isEqual;e.prototype.equals=function(a){return a===this?!0:null==a?!1:"N"!==a.kind?!1:this.predicate(a.value)},f.prototype.equals=function(a){return a===this?!0:null==a?!1:"E"!==a.kind?!1:this.predicate(a.exception)};var r=c.ReactiveTest={created:100,subscribed:200,disposed:1e3,onNext:function(a,b){return"function"==typeof b?new s(a,new e(b)):new s(a,j.createOnNext(b))},onError:function(a,b){return"function"==typeof b?new s(a,new f(b)):new s(a,j.createOnError(b))},onCompleted:function(a){return new s(a,j.createOnCompleted())},subscribe:function(a,b){return new t(a,b)}},s=c.Recorded=function(a,b,c){this.time=a,this.value=b,this.comparer=c||q};s.prototype.equals=function(a){return this.time===a.time&&this.comparer(this.value,a.value)},s.prototype.toString=function(){return this.value.toString()+"@"+this.time};var t=c.Subscription=function(a,b){this.subscribe=a,this.unsubscribe=b||Number.MAX_VALUE};t.prototype.equals=function(a){return this.subscribe===a.subscribe&&this.unsubscribe===a.unsubscribe},t.prototype.toString=function(){return"("+this.subscribe+", "+(this.unsubscribe===Number.MAX_VALUE?"Infinite":this.unsubscribe)+")"};var u=c.MockDisposable=function(a){this.scheduler=a,this.disposes=[],this.disposes.push(this.scheduler.clock)};u.prototype.dispose=function(){this.disposes.push(this.scheduler.clock)};var v=function(a){function b(b){a.call(this),this.scheduler=b,this.messages=[]}p(b,a);var c=b.prototype;return c.onNext=function(a){this.messages.push(new s(this.scheduler.clock,j.createOnNext(a)))},c.onError=function(a){this.messages.push(new s(this.scheduler.clock,j.createOnError(a)))},c.onCompleted=function(){this.messages.push(new s(this.scheduler.clock,j.createOnCompleted()))},b}(h);g.prototype.then=function(a,b){var e=this;this.subscriptions.push(new t(this.scheduler.clock));var f,h=this.subscriptions.length-1,i=c.Observer.create(function(b){var j=a(b);if(j&&"function"==typeof j.then)f=j;else{var k=e.scheduler.clock;f=new g(e.scheduler,[c.ReactiveTest.onNext(k,d),c.ReactiveTest.onCompleted(k)])}var l=e.observers.indexOf(i);e.observers.splice(l,1),e.subscriptions[h]=new t(e.subscriptions[h].subscribe,e.scheduler.clock)},function(a){b(a);var c=e.observers.indexOf(i);e.observers.splice(c,1),e.subscriptions[h]=new t(e.subscriptions[h].subscribe,e.scheduler.clock)});return this.observers.push(i),f||new g(this.scheduler,this.messages)};var w=function(a){function b(a){var b=this;this.observers.push(a),this.subscriptions.push(new t(this.scheduler.clock));var c=this.subscriptions.length-1;return n(function(){var d=b.observers.indexOf(a);b.observers.splice(d,1),b.subscriptions[c]=new t(b.subscriptions[c].subscribe,b.scheduler.clock)})}function c(c,d){a.call(this,b);var e,f,g=this;this.scheduler=c,this.messages=d,this.subscriptions=[],this.observers=[];for(var h=0,i=this.messages.length;i>h;h++)e=this.messages[h],f=e.value,function(a){c.scheduleAbsoluteWithState(null,e.time,function(){for(var b=g.observers.slice(0),c=0,d=b.length;d>c;c++)a.accept(b[c]);return m})}(f)}return p(c,a),c}(i),x=function(a){function b(a){var b,c,d=this;this.subscriptions.push(new t(this.scheduler.clock));for(var e=this.subscriptions.length-1,f=new o,g=0,h=this.messages.length;h>g;g++)b=this.messages[g],c=b.value,function(c){f.add(d.scheduler.scheduleRelativeWithState(null,b.time,function(){return c.accept(a),m}))}(c);return n(function(){d.subscriptions[e]=new t(d.subscriptions[e].subscribe,d.scheduler.clock),f.dispose()})}function c(c,d){a.call(this,b),this.scheduler=c,this.messages=d,this.subscriptions=[]}return p(c,a),c}(i);return c.TestScheduler=function(a){function b(a,b){return a>b?1:b>a?-1:0}function d(){a.call(this,0,b)}return p(d,a),d.prototype.scheduleAbsoluteWithState=function(b,c,d){return c<=this.clock&&(c=this.clock+1),a.prototype.scheduleAbsoluteWithState.call(this,b,c,d)},d.prototype.add=function(a,b){return a+b},d.prototype.toDateTimeOffset=function(a){return new Date(a).getTime()},d.prototype.toRelative=function(a){return a},d.prototype.startWithTiming=function(a,b,c,d){var e,f,g=this.createObserver();return this.scheduleAbsoluteWithState(null,b,function(){return e=a(),m}),this.scheduleAbsoluteWithState(null,c,function(){return f=e.subscribe(g),m}),this.scheduleAbsoluteWithState(null,d,function(){return f.dispose(),m}),this.start(),g},d.prototype.startWithDispose=function(a,b){return this.startWithTiming(a,r.created,r.subscribed,b)},d.prototype.startWithCreate=function(a){return this.startWithTiming(a,r.created,r.subscribed,r.disposed)},d.prototype.createHotObservable=function(){var a,b=arguments.length;if(Array.isArray(arguments[0]))a=arguments[0];else{a=new Array(b);for(var c=0;b>c;c++)a[c]=arguments[c]}return new w(this,a)},d.prototype.createColdObservable=function(){var a,b=arguments.length;if(Array.isArray(arguments[0]))a=arguments[0];else{a=new Array(b);for(var c=0;b>c;c++)a[c]=arguments[c]}return new x(this,a)},d.prototype.createResolvedPromise=function(a,b){return new g(this,[c.ReactiveTest.onNext(a,b),c.ReactiveTest.onCompleted(a)])},d.prototype.createRejectedPromise=function(a,b){return new g(this,[c.ReactiveTest.onError(a,b)])},d.prototype.createObserver=function(){return new v(this)},d}(k),c});
//# sourceMappingURL=rx.testing.map
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
;(function (factory) {
var objectTypes = {
'boolean': false,
'function': true,
'object': true,
'number': false,
'string': false,
'undefined': false
};
var objectTypes = {
'function': true,
'object': true
};
var root = (objectTypes[typeof window] && window) || this,
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = objectTypes[typeof global] && global;
var
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeSelf = objectTypes[typeof self] && self.Object && self,
freeWindow = objectTypes[typeof window] && window && window.Object && window,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global;
if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) {
root = freeGlobal;
}
var root = root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this;

@@ -42,3 +38,3 @@ // Because of build optimizers

observableNever = Observable.never,
observableThrow = Observable.throwException,
observableThrow = Observable['throw'],
observableFromArray = Observable.fromArray,

@@ -149,3 +145,3 @@ timeoutScheduler = Rx.Scheduler['default'],

isScheduler(scheduler) || (scheduler = timeoutScheduler);
if (periodOrScheduler !== undefined && typeof periodOrScheduler === 'number') {
if (periodOrScheduler != null && typeof periodOrScheduler === 'number') {
period = periodOrScheduler;

@@ -159,4 +155,3 @@ } else if (isScheduler(periodOrScheduler)) {

if (dueTime instanceof Date && period !== undefined) {
period = periodOrScheduler;
return observableTimerDateAndPeriod(dueTime.getTime(), period, scheduler);
return observableTimerDateAndPeriod(dueTime.getTime(), periodOrScheduler, scheduler);
}

@@ -265,3 +260,3 @@ return period === undefined ?

*/
observableProto.debounce = observableProto.throttleWithTimeout = function (dueTime, scheduler) {
observableProto.debounce = function (dueTime, scheduler) {
isScheduler(scheduler) || (scheduler = timeoutScheduler);

@@ -450,37 +445,29 @@ var source = this;

/**
* Projects each element of an observable sequence into zero or more buffers which are produced based on timing information.
*
* @example
* 1 - res = xs.bufferWithTime(1000, scheduler); // non-overlapping segments of 1 second
* 2 - res = xs.bufferWithTime(1000, 500, scheduler; // segments of 1 second with time shift 0.5 seconds
*
* @param {Number} timeSpan Length of each buffer (specified as an integer denoting milliseconds).
* @param {Mixed} [timeShiftOrScheduler] Interval between creation of consecutive buffers (specified as an integer denoting milliseconds), or an optional scheduler parameter. If not specified, the time shift corresponds to the timeSpan parameter, resulting in non-overlapping adjacent buffers.
* @param {Scheduler} [scheduler] Scheduler to run buffer timers on. If not specified, the timeout scheduler is used.
* @returns {Observable} An observable sequence of buffers.
*/
observableProto.bufferWithTime = function (timeSpan, timeShiftOrScheduler, scheduler) {
return this.windowWithTime.apply(this, arguments).selectMany(function (x) { return x.toArray(); });
};
function toArray(x) { return x.toArray(); }
/**
* Projects each element of an observable sequence into a buffer that is completed when either it's full or a given amount of time has elapsed.
*
* @example
* 1 - res = source.bufferWithTimeOrCount(5000, 50); // 5s or 50 items in an array
* 2 - res = source.bufferWithTimeOrCount(5000, 50, scheduler); // 5s or 50 items in an array
*
* @param {Number} timeSpan Maximum time length of a buffer.
* @param {Number} count Maximum element count of a buffer.
* @param {Scheduler} [scheduler] Scheduler to run bufferin timers on. If not specified, the timeout scheduler is used.
* @returns {Observable} An observable sequence of buffers.
*/
observableProto.bufferWithTimeOrCount = function (timeSpan, count, scheduler) {
return this.windowWithTimeOrCount(timeSpan, count, scheduler).selectMany(function (x) {
return x.toArray();
});
};
/**
* Projects each element of an observable sequence into zero or more buffers which are produced based on timing information.
* @param {Number} timeSpan Length of each buffer (specified as an integer denoting milliseconds).
* @param {Mixed} [timeShiftOrScheduler] Interval between creation of consecutive buffers (specified as an integer denoting milliseconds), or an optional scheduler parameter. If not specified, the time shift corresponds to the timeSpan parameter, resulting in non-overlapping adjacent buffers.
* @param {Scheduler} [scheduler] Scheduler to run buffer timers on. If not specified, the timeout scheduler is used.
* @returns {Observable} An observable sequence of buffers.
*/
observableProto.bufferWithTime = function (timeSpan, timeShiftOrScheduler, scheduler) {
return this.windowWithTime(timeSpan, timeShiftOrScheduler, scheduler).flatMap(toArray);
};
function toArray(x) { return x.toArray(); }
/**
* Projects each element of an observable sequence into a buffer that is completed when either it's full or a given amount of time has elapsed.
* @param {Number} timeSpan Maximum time length of a buffer.
* @param {Number} count Maximum element count of a buffer.
* @param {Scheduler} [scheduler] Scheduler to run bufferin timers on. If not specified, the timeout scheduler is used.
* @returns {Observable} An observable sequence of buffers.
*/
observableProto.bufferWithTimeOrCount = function (timeSpan, count, scheduler) {
return this.windowWithTimeOrCount(timeSpan, count, scheduler).flatMap(toArray);
};
/**
* Records the time interval between consecutive values in an observable sequence.

@@ -903,41 +890,44 @@ *

var source = this;
return new AnonymousObservable(function (observer) {
return new AnonymousObservable(function (o) {
var value, hasValue = false, cancelable = new SerialDisposable(), id = 0;
var subscription = source.subscribe(function (x) {
var throttle;
try {
throttle = durationSelector(x);
} catch (e) {
observer.onError(e);
return;
}
var subscription = source.subscribe(
function (x) {
var throttle = tryCatch(durationSelector)(x);
if (throttle === errorObj) { return o.onError(throttle.e); }
isPromise(throttle) && (throttle = observableFromPromise(throttle));
isPromise(throttle) && (throttle = observableFromPromise(throttle));
hasValue = true;
value = x;
id++;
var currentid = id, d = new SingleAssignmentDisposable();
cancelable.setDisposable(d);
d.setDisposable(throttle.subscribe(function () {
hasValue && id === currentid && observer.onNext(value);
hasValue = true;
value = x;
id++;
var currentid = id, d = new SingleAssignmentDisposable();
cancelable.setDisposable(d);
d.setDisposable(throttle.subscribe(
function () {
hasValue && id === currentid && o.onNext(value);
hasValue = false;
d.dispose();
},
function (e) { o.onError(e); },
function () {
hasValue && id === currentid && o.onNext(value);
hasValue = false;
d.dispose();
}
));
},
function (e) {
cancelable.dispose();
o.onError(e);
hasValue = false;
d.dispose();
}, observer.onError.bind(observer), function () {
hasValue && id === currentid && observer.onNext(value);
id++;
},
function () {
cancelable.dispose();
hasValue && o.onNext(value);
o.onCompleted();
hasValue = false;
d.dispose();
}));
}, function (e) {
cancelable.dispose();
observer.onError(e);
hasValue = false;
id++;
}, function () {
cancelable.dispose();
hasValue && observer.onNext(value);
observer.onCompleted();
hasValue = false;
id++;
});
id++;
}
);
return new CompositeDisposable(subscription, cancelable);

@@ -948,10 +938,2 @@ }, source);

/**
* @deprecated use #debounceWithSelector instead.
*/
observableProto.throttleWithSelector = function (durationSelector) {
//deprecate('throttleWithSelector', 'debounceWithSelector');
return this.debounceWithSelector(durationSelector);
};
/**
* Skips elements for the specified duration from the end of the observable source sequence, using the specified scheduler to run timers.

@@ -958,0 +940,0 @@ *

/* Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.*/
(function(a){var b={"boolean":!1,"function":!0,object:!0,number:!1,string:!1,undefined:!1},c=b[typeof window]&&window||this,d=b[typeof exports]&&exports&&!exports.nodeType&&exports,e=b[typeof module]&&module&&!module.nodeType&&module,f=(e&&e.exports===d&&d,b[typeof global]&&global);!f||f.global!==f&&f.window!==f||(c=f),"function"==typeof define&&define.amd?define(["rx"],function(b,d){return a(c,d,b)}):"object"==typeof module&&module&&module.exports===d?module.exports=a(c,module.exports,require("./rx")):c.Rx=a(c,{},c.Rx)}).call(this,function(a,b,c,d){function e(){try{return n.apply(this,arguments)}catch(a){return H.e=a,H}}function f(a){if(!E(a))throw new TypeError("fn must be a function");return n=a,e}function g(a,b){return new q(function(c){return b.scheduleWithAbsolute(a,function(){c.onNext(0),c.onCompleted()})})}function h(a,b,c){return new q(function(d){var e=a,f=B(b);return c.scheduleRecursiveWithAbsoluteAndState(0,e,function(a,b){if(f>0){var g=c.now();e+=f,g>=e&&(e=g+f)}d.onNext(a),b(a+1,e)})})}function i(a,b){return new q(function(c){return b.scheduleWithRelative(B(a),function(){c.onNext(0),c.onCompleted()})})}function j(a,b,c){return a===b?new q(function(a){return c.schedulePeriodicWithState(0,b,function(b){return a.onNext(b),b+1})}):r(function(){return h(c.now()+a,b,c)})}function k(a,b,c){return new q(function(d){var e,f=!1,g=new w,h=null,i=[],j=!1;return e=a.materialize().timestamp(c).subscribe(function(a){var e,k;"E"===a.value.kind?(i=[],i.push(a),h=a.value.exception,k=!j):(i.push({value:a.value,timestamp:a.timestamp+b}),k=!f,f=!0),k&&(null!==h?d.onError(h):(e=new v,g.setDisposable(e),e.setDisposable(c.scheduleRecursiveWithRelative(b,function(a){var b,e,g,k;if(null===h){j=!0;do g=null,i.length>0&&i[0].timestamp-c.now()<=0&&(g=i.shift().value),null!==g&&g.accept(d);while(null!==g);k=!1,e=0,i.length>0?(k=!0,e=Math.max(0,i[0].timestamp-c.now())):f=!1,b=h,j=!1,null!==b?d.onError(b):k&&a(e)}}))))}),new x(e,g)},a)}function l(a,b,c){return r(function(){return k(a,b-c.now(),c)})}function m(a,b){return new q(function(c){function d(){g&&(g=!1,c.onNext(e)),f&&c.onCompleted()}var e,f=!1,g=!1,h=new v;return h.setDisposable(a.subscribe(function(a){g=!0,e=a},function(a){c.onError(a)},function(){f=!0,h.dispose()})),new x(h,b.subscribe(d,function(a){c.onError(a)},d))},a)}{var n,o=c.Observable,p=o.prototype,q=c.AnonymousObservable,r=o.defer,s=(o.empty,o.never),t=o.throwException,u=(o.fromArray,c.Scheduler["default"]),v=c.SingleAssignmentDisposable,w=c.SerialDisposable,x=c.CompositeDisposable,y=c.RefCountDisposable,z=c.Subject,A=c.internals.addRef,B=c.Scheduler.normalize,C=c.helpers,D=C.isPromise,E=C.isFunction,F=c.Scheduler.isScheduler,G=o.fromPromise,H={e:{}},I=o.interval=function(a,b){return j(a,a,F(b)?b:u)};o.timer=function(a,b,c){var e;return F(c)||(c=u),b!==d&&"number"==typeof b?e=b:F(b)&&(c=b),a instanceof Date&&e===d?g(a.getTime(),c):a instanceof Date&&e!==d?(e=b,h(a.getTime(),e,c)):e===d?i(a,c):j(a,e,c)}}return p.delay=function(a,b){return F(b)||(b=u),a instanceof Date?l(this,a.getTime(),b):k(this,a,b)},p.debounce=p.throttleWithTimeout=function(a,b){F(b)||(b=u);var c=this;return new q(function(d){var e,f=new w,g=!1,h=0,i=c.subscribe(function(c){g=!0,e=c,h++;var i=h,j=new v;f.setDisposable(j),j.setDisposable(b.scheduleWithRelative(a,function(){g&&h===i&&d.onNext(e),g=!1}))},function(a){f.dispose(),d.onError(a),g=!1,h++},function(){f.dispose(),g&&d.onNext(e),d.onCompleted(),g=!1,h++});return new x(i,f)},this)},p.throttle=function(a,b){return this.debounce(a,b)},p.windowWithTime=function(a,b,c){var d,e=this;return null==b&&(d=a),F(c)||(c=u),"number"==typeof b?d=b:F(b)&&(d=a,c=b),new q(function(b){function f(){var a=new v,e=!1,g=!1;l.setDisposable(a),j===i?(e=!0,g=!0):i>j?e=!0:g=!0;var n=e?j:i,o=n-m;m=n,e&&(j+=d),g&&(i+=d),a.setDisposable(c.scheduleWithRelative(o,function(){if(g){var a=new z;k.push(a),b.onNext(A(a,h))}e&&k.shift().onCompleted(),f()}))}var g,h,i=d,j=a,k=[],l=new w,m=0;return g=new x(l),h=new y(g),k.push(new z),b.onNext(A(k[0],h)),f(),g.add(e.subscribe(function(a){for(var b=0,c=k.length;c>b;b++)k[b].onNext(a)},function(a){for(var c=0,d=k.length;d>c;c++)k[c].onError(a);b.onError(a)},function(){for(var a=0,c=k.length;c>a;a++)k[a].onCompleted();b.onCompleted()})),h},e)},p.windowWithTimeOrCount=function(a,b,c){var d=this;return F(c)||(c=u),new q(function(e){function f(b){var d=new v;g.setDisposable(d),d.setDisposable(c.scheduleWithRelative(a,function(){if(b===k){j=0;var a=++k;l.onCompleted(),l=new z,e.onNext(A(l,i)),f(a)}}))}var g=new w,h=new x(g),i=new y(h),j=0,k=0,l=new z;return e.onNext(A(l,i)),f(0),h.add(d.subscribe(function(a){var c=0,d=!1;l.onNext(a),++j===b&&(d=!0,j=0,c=++k,l.onCompleted(),l=new z,e.onNext(A(l,i))),d&&f(c)},function(a){l.onError(a),e.onError(a)},function(){l.onCompleted(),e.onCompleted()})),i},d)},p.bufferWithTime=function(a,b,c){return this.windowWithTime.apply(this,arguments).selectMany(function(a){return a.toArray()})},p.bufferWithTimeOrCount=function(a,b,c){return this.windowWithTimeOrCount(a,b,c).selectMany(function(a){return a.toArray()})},p.timeInterval=function(a){var b=this;return F(a)||(a=u),r(function(){var c=a.now();return b.map(function(b){var d=a.now(),e=d-c;return c=d,{value:b,interval:e}})})},p.timestamp=function(a){return F(a)||(a=u),this.map(function(b){return{value:b,timestamp:a.now()}})},p.sample=p.throttleLatest=function(a,b){return F(b)||(b=u),"number"==typeof a?m(this,I(a,b)):m(this,a)},p.timeout=function(a,b,c){(null==b||"string"==typeof b)&&(b=t(new Error(b||"Timeout"))),F(c)||(c=u);var d=this,e=a instanceof Date?"scheduleWithAbsolute":"scheduleWithRelative";return new q(function(f){function g(){var d=h;l.setDisposable(c[e](a,function(){h===d&&(D(b)&&(b=G(b)),j.setDisposable(b.subscribe(f)))}))}var h=0,i=new v,j=new w,k=!1,l=new w;return j.setDisposable(i),g(),i.setDisposable(d.subscribe(function(a){k||(h++,f.onNext(a),g())},function(a){k||(h++,f.onError(a))},function(){k||(h++,f.onCompleted())})),new x(j,l)},d)},o.generateWithAbsoluteTime=function(a,b,c,d,e,f){return F(f)||(f=u),new q(function(g){var h=!0,i=!1;return f.scheduleRecursiveWithAbsoluteAndState(a,f.now(),function(a,f){i&&g.onNext(a);try{if(h?h=!1:a=c(a),i=b(a))var j=d(a),k=e(a)}catch(l){return void g.onError(l)}i?f(j,k):g.onCompleted()})})},o.generateWithRelativeTime=function(a,b,c,d,e,f){return F(f)||(f=u),new q(function(g){var h=!0,i=!1;return f.scheduleRecursiveWithRelativeAndState(a,0,function(a,f){i&&g.onNext(a);try{if(h?h=!1:a=c(a),i=b(a))var j=d(a),k=e(a)}catch(l){return void g.onError(l)}i?f(j,k):g.onCompleted()})})},p.delaySubscription=function(a,b){var c=a instanceof Date?"scheduleWithAbsolute":"scheduleWithRelative",d=this;return F(b)||(b=u),new q(function(e){var f=new w;return f.setDisposable(b[c](a,function(){f.setDisposable(d.subscribe(e))})),f},this)},p.delayWithSelector=function(a,b){var c,d,e=this;return E(a)?d=a:(c=a,d=b),new q(function(a){function b(){j.setDisposable(e.subscribe(function(b){var c=f(d)(b);if(c===H)return a.onError(c.e);var e=new v;h.add(e),e.setDisposable(c.subscribe(function(){a.onNext(b),h.remove(e),g()},function(b){a.onError(b)},function(){a.onNext(b),h.remove(e),g()}))},function(b){a.onError(b)},function(){i=!0,j.dispose(),g()}))}function g(){i&&0===h.length&&a.onCompleted()}var h=new x,i=!1,j=new w;return c?j.setDisposable(c.subscribe(b,function(b){a.onError(b)},b)):b(),new x(j,h)},this)},p.timeoutWithSelector=function(a,b,c){1===arguments.length&&(b=a,a=s()),c||(c=t(new Error("Timeout")));var d=this;return new q(function(e){function f(a){function b(){return k===d}var d=k,f=new v;i.setDisposable(f),f.setDisposable(a.subscribe(function(){b()&&h.setDisposable(c.subscribe(e)),f.dispose()},function(a){b()&&e.onError(a)},function(){b()&&h.setDisposable(c.subscribe(e))}))}function g(){var a=!l;return a&&k++,a}var h=new w,i=new w,j=new v;h.setDisposable(j);var k=0,l=!1;return f(a),j.setDisposable(d.subscribe(function(a){if(g()){e.onNext(a);var c;try{c=b(a)}catch(d){return void e.onError(d)}f(D(c)?G(c):c)}},function(a){g()&&e.onError(a)},function(){g()&&e.onCompleted()})),new x(h,i)},d)},p.debounceWithSelector=function(a){var b=this;return new q(function(c){var d,e=!1,f=new w,g=0,h=b.subscribe(function(b){var h;try{h=a(b)}catch(i){return void c.onError(i)}D(h)&&(h=G(h)),e=!0,d=b,g++;var j=g,k=new v;f.setDisposable(k),k.setDisposable(h.subscribe(function(){e&&g===j&&c.onNext(d),e=!1,k.dispose()},c.onError.bind(c),function(){e&&g===j&&c.onNext(d),e=!1,k.dispose()}))},function(a){f.dispose(),c.onError(a),e=!1,g++},function(){f.dispose(),e&&c.onNext(d),c.onCompleted(),e=!1,g++});return new x(h,f)},b)},p.throttleWithSelector=function(a){return this.debounceWithSelector(a)},p.skipLastWithTime=function(a,b){F(b)||(b=u);var c=this;return new q(function(d){var e=[];return c.subscribe(function(c){var f=b.now();for(e.push({interval:f,value:c});e.length>0&&f-e[0].interval>=a;)d.onNext(e.shift().value)},function(a){d.onError(a)},function(){for(var c=b.now();e.length>0&&c-e[0].interval>=a;)d.onNext(e.shift().value);d.onCompleted()})},c)},p.takeLastWithTime=function(a,b){var c=this;return F(b)||(b=u),new q(function(d){var e=[];return c.subscribe(function(c){var d=b.now();for(e.push({interval:d,value:c});e.length>0&&d-e[0].interval>=a;)e.shift()},function(a){d.onError(a)},function(){for(var c=b.now();e.length>0;){var f=e.shift();c-f.interval<=a&&d.onNext(f.value)}d.onCompleted()})},c)},p.takeLastBufferWithTime=function(a,b){var c=this;return F(b)||(b=u),new q(function(d){var e=[];return c.subscribe(function(c){var d=b.now();for(e.push({interval:d,value:c});e.length>0&&d-e[0].interval>=a;)e.shift()},function(a){d.onError(a)},function(){for(var c=b.now(),f=[];e.length>0;){var g=e.shift();c-g.interval<=a&&f.push(g.value)}d.onNext(f),d.onCompleted()})},c)},p.takeWithTime=function(a,b){var c=this;return F(b)||(b=u),new q(function(d){return new x(b.scheduleWithRelative(a,function(){d.onCompleted()}),c.subscribe(d))},c)},p.skipWithTime=function(a,b){var c=this;return F(b)||(b=u),new q(function(d){var e=!1;return new x(b.scheduleWithRelative(a,function(){e=!0}),c.subscribe(function(a){e&&d.onNext(a)},d.onError.bind(d),d.onCompleted.bind(d)))},c)},p.skipUntilWithTime=function(a,b){F(b)||(b=u);var c=this,d=a instanceof Date?"scheduleWithAbsolute":"scheduleWithRelative";return new q(function(e){var f=!1;return new x(b[d](a,function(){f=!0}),c.subscribe(function(a){f&&e.onNext(a)},function(a){e.onError(a)},function(){e.onCompleted()}))},c)},p.takeUntilWithTime=function(a,b){F(b)||(b=u);var c=this,d=a instanceof Date?"scheduleWithAbsolute":"scheduleWithRelative";return new q(function(e){return new x(b[d](a,function(){e.onCompleted()}),c.subscribe(e))},c)},p.throttleFirst=function(a,b){F(b)||(b=u);var c=+a||0;if(0>=c)throw new RangeError("windowDuration cannot be less or equal zero.");var d=this;return new q(function(a){var e=0;return d.subscribe(function(d){var f=b.now();(0===e||f-e>=c)&&(e=f,a.onNext(d))},function(b){a.onError(b)},function(){a.onCompleted()})},d)},c});
(function(a){var b={"function":!0,object:!0},c=b[typeof exports]&&exports&&!exports.nodeType&&exports,d=b[typeof self]&&self.Object&&self,e=b[typeof window]&&window&&window.Object&&window,f=b[typeof module]&&module&&!module.nodeType&&module,g=(f&&f.exports===c&&c,c&&f&&"object"==typeof global&&global&&global.Object&&global),h=h=g||e!==(this&&this.window)&&e||d||this;"function"==typeof define&&define.amd?define(["rx"],function(b,c){return a(h,c,b)}):"object"==typeof module&&module&&module.exports===c?module.exports=a(h,module.exports,require("./rx")):h.Rx=a(h,{},h.Rx)}).call(this,function(a,b,c,d){function e(){try{return o.apply(this,arguments)}catch(a){return I.e=a,I}}function f(a){if(!F(a))throw new TypeError("fn must be a function");return o=a,e}function g(a,b){return new r(function(c){return b.scheduleWithAbsolute(a,function(){c.onNext(0),c.onCompleted()})})}function h(a,b,c){return new r(function(d){var e=a,f=C(b);return c.scheduleRecursiveWithAbsoluteAndState(0,e,function(a,b){if(f>0){var g=c.now();e+=f,g>=e&&(e=g+f)}d.onNext(a),b(a+1,e)})})}function i(a,b){return new r(function(c){return b.scheduleWithRelative(C(a),function(){c.onNext(0),c.onCompleted()})})}function j(a,b,c){return a===b?new r(function(a){return c.schedulePeriodicWithState(0,b,function(b){return a.onNext(b),b+1})}):s(function(){return h(c.now()+a,b,c)})}function k(a,b,c){return new r(function(d){var e,f=!1,g=new x,h=null,i=[],j=!1;return e=a.materialize().timestamp(c).subscribe(function(a){var e,k;"E"===a.value.kind?(i=[],i.push(a),h=a.value.exception,k=!j):(i.push({value:a.value,timestamp:a.timestamp+b}),k=!f,f=!0),k&&(null!==h?d.onError(h):(e=new w,g.setDisposable(e),e.setDisposable(c.scheduleRecursiveWithRelative(b,function(a){var b,e,g,k;if(null===h){j=!0;do g=null,i.length>0&&i[0].timestamp-c.now()<=0&&(g=i.shift().value),null!==g&&g.accept(d);while(null!==g);k=!1,e=0,i.length>0?(k=!0,e=Math.max(0,i[0].timestamp-c.now())):f=!1,b=h,j=!1,null!==b?d.onError(b):k&&a(e)}}))))}),new y(e,g)},a)}function l(a,b,c){return s(function(){return k(a,b-c.now(),c)})}function m(a){return a.toArray()}function m(a){return a.toArray()}function n(a,b){return new r(function(c){function d(){g&&(g=!1,c.onNext(e)),f&&c.onCompleted()}var e,f=!1,g=!1,h=new w;return h.setDisposable(a.subscribe(function(a){g=!0,e=a},function(a){c.onError(a)},function(){f=!0,h.dispose()})),new y(h,b.subscribe(d,function(a){c.onError(a)},d))},a)}var o,p=c.Observable,q=p.prototype,r=c.AnonymousObservable,s=p.defer,t=(p.empty,p.never),u=p["throw"],v=(p.fromArray,c.Scheduler["default"]),w=c.SingleAssignmentDisposable,x=c.SerialDisposable,y=c.CompositeDisposable,z=c.RefCountDisposable,A=c.Subject,B=c.internals.addRef,C=c.Scheduler.normalize,D=c.helpers,E=D.isPromise,F=D.isFunction,G=c.Scheduler.isScheduler,H=p.fromPromise,I={e:{}},J=p.interval=function(a,b){return j(a,a,G(b)?b:v)};p.timer=function(a,b,c){var e;return G(c)||(c=v),null!=b&&"number"==typeof b?e=b:G(b)&&(c=b),a instanceof Date&&e===d?g(a.getTime(),c):a instanceof Date&&e!==d?h(a.getTime(),b,c):e===d?i(a,c):j(a,e,c)};return q.delay=function(a,b){return G(b)||(b=v),a instanceof Date?l(this,a.getTime(),b):k(this,a,b)},q.debounce=function(a,b){G(b)||(b=v);var c=this;return new r(function(d){var e,f=new x,g=!1,h=0,i=c.subscribe(function(c){g=!0,e=c,h++;var i=h,j=new w;f.setDisposable(j),j.setDisposable(b.scheduleWithRelative(a,function(){g&&h===i&&d.onNext(e),g=!1}))},function(a){f.dispose(),d.onError(a),g=!1,h++},function(){f.dispose(),g&&d.onNext(e),d.onCompleted(),g=!1,h++});return new y(i,f)},this)},q.throttle=function(a,b){return this.debounce(a,b)},q.windowWithTime=function(a,b,c){var d,e=this;return null==b&&(d=a),G(c)||(c=v),"number"==typeof b?d=b:G(b)&&(d=a,c=b),new r(function(b){function f(){var a=new w,e=!1,g=!1;l.setDisposable(a),j===i?(e=!0,g=!0):i>j?e=!0:g=!0;var n=e?j:i,o=n-m;m=n,e&&(j+=d),g&&(i+=d),a.setDisposable(c.scheduleWithRelative(o,function(){if(g){var a=new A;k.push(a),b.onNext(B(a,h))}e&&k.shift().onCompleted(),f()}))}var g,h,i=d,j=a,k=[],l=new x,m=0;return g=new y(l),h=new z(g),k.push(new A),b.onNext(B(k[0],h)),f(),g.add(e.subscribe(function(a){for(var b=0,c=k.length;c>b;b++)k[b].onNext(a)},function(a){for(var c=0,d=k.length;d>c;c++)k[c].onError(a);b.onError(a)},function(){for(var a=0,c=k.length;c>a;a++)k[a].onCompleted();b.onCompleted()})),h},e)},q.windowWithTimeOrCount=function(a,b,c){var d=this;return G(c)||(c=v),new r(function(e){function f(b){var d=new w;g.setDisposable(d),d.setDisposable(c.scheduleWithRelative(a,function(){if(b===k){j=0;var a=++k;l.onCompleted(),l=new A,e.onNext(B(l,i)),f(a)}}))}var g=new x,h=new y(g),i=new z(h),j=0,k=0,l=new A;return e.onNext(B(l,i)),f(0),h.add(d.subscribe(function(a){var c=0,d=!1;l.onNext(a),++j===b&&(d=!0,j=0,c=++k,l.onCompleted(),l=new A,e.onNext(B(l,i))),d&&f(c)},function(a){l.onError(a),e.onError(a)},function(){l.onCompleted(),e.onCompleted()})),i},d)},q.bufferWithTime=function(a,b,c){return this.windowWithTime(a,b,c).flatMap(m)},q.bufferWithTimeOrCount=function(a,b,c){return this.windowWithTimeOrCount(a,b,c).flatMap(m)},q.timeInterval=function(a){var b=this;return G(a)||(a=v),s(function(){var c=a.now();return b.map(function(b){var d=a.now(),e=d-c;return c=d,{value:b,interval:e}})})},q.timestamp=function(a){return G(a)||(a=v),this.map(function(b){return{value:b,timestamp:a.now()}})},q.sample=q.throttleLatest=function(a,b){return G(b)||(b=v),"number"==typeof a?n(this,J(a,b)):n(this,a)},q.timeout=function(a,b,c){(null==b||"string"==typeof b)&&(b=u(new Error(b||"Timeout"))),G(c)||(c=v);var d=this,e=a instanceof Date?"scheduleWithAbsolute":"scheduleWithRelative";return new r(function(f){function g(){var d=h;l.setDisposable(c[e](a,function(){h===d&&(E(b)&&(b=H(b)),j.setDisposable(b.subscribe(f)))}))}var h=0,i=new w,j=new x,k=!1,l=new x;return j.setDisposable(i),g(),i.setDisposable(d.subscribe(function(a){k||(h++,f.onNext(a),g())},function(a){k||(h++,f.onError(a))},function(){k||(h++,f.onCompleted())})),new y(j,l)},d)},p.generateWithAbsoluteTime=function(a,b,c,d,e,f){return G(f)||(f=v),new r(function(g){var h=!0,i=!1;return f.scheduleRecursiveWithAbsoluteAndState(a,f.now(),function(a,f){i&&g.onNext(a);try{if(h?h=!1:a=c(a),i=b(a))var j=d(a),k=e(a)}catch(l){return void g.onError(l)}i?f(j,k):g.onCompleted()})})},p.generateWithRelativeTime=function(a,b,c,d,e,f){return G(f)||(f=v),new r(function(g){var h=!0,i=!1;return f.scheduleRecursiveWithRelativeAndState(a,0,function(a,f){i&&g.onNext(a);try{if(h?h=!1:a=c(a),i=b(a))var j=d(a),k=e(a)}catch(l){return void g.onError(l)}i?f(j,k):g.onCompleted()})})},q.delaySubscription=function(a,b){var c=a instanceof Date?"scheduleWithAbsolute":"scheduleWithRelative",d=this;return G(b)||(b=v),new r(function(e){var f=new x;return f.setDisposable(b[c](a,function(){f.setDisposable(d.subscribe(e))})),f},this)},q.delayWithSelector=function(a,b){var c,d,e=this;return F(a)?d=a:(c=a,d=b),new r(function(a){function b(){j.setDisposable(e.subscribe(function(b){var c=f(d)(b);if(c===I)return a.onError(c.e);var e=new w;h.add(e),e.setDisposable(c.subscribe(function(){a.onNext(b),h.remove(e),g()},function(b){a.onError(b)},function(){a.onNext(b),h.remove(e),g()}))},function(b){a.onError(b)},function(){i=!0,j.dispose(),g()}))}function g(){i&&0===h.length&&a.onCompleted()}var h=new y,i=!1,j=new x;return c?j.setDisposable(c.subscribe(b,function(b){a.onError(b)},b)):b(),new y(j,h)},this)},q.timeoutWithSelector=function(a,b,c){1===arguments.length&&(b=a,a=t()),c||(c=u(new Error("Timeout")));var d=this;return new r(function(e){function f(a){function b(){return k===d}var d=k,f=new w;i.setDisposable(f),f.setDisposable(a.subscribe(function(){b()&&h.setDisposable(c.subscribe(e)),f.dispose()},function(a){b()&&e.onError(a)},function(){b()&&h.setDisposable(c.subscribe(e))}))}function g(){var a=!l;return a&&k++,a}var h=new x,i=new x,j=new w;h.setDisposable(j);var k=0,l=!1;return f(a),j.setDisposable(d.subscribe(function(a){if(g()){e.onNext(a);var c;try{c=b(a)}catch(d){return void e.onError(d)}f(E(c)?H(c):c)}},function(a){g()&&e.onError(a)},function(){g()&&e.onCompleted()})),new y(h,i)},d)},q.debounceWithSelector=function(a){var b=this;return new r(function(c){var d,e=!1,g=new x,h=0,i=b.subscribe(function(b){var i=f(a)(b);if(i===I)return c.onError(i.e);E(i)&&(i=H(i)),e=!0,d=b,h++;var j=h,k=new w;g.setDisposable(k),k.setDisposable(i.subscribe(function(){e&&h===j&&c.onNext(d),e=!1,k.dispose()},function(a){c.onError(a)},function(){e&&h===j&&c.onNext(d),e=!1,k.dispose()}))},function(a){g.dispose(),c.onError(a),e=!1,h++},function(){g.dispose(),e&&c.onNext(d),c.onCompleted(),e=!1,h++});return new y(i,g)},b)},q.skipLastWithTime=function(a,b){G(b)||(b=v);var c=this;return new r(function(d){var e=[];return c.subscribe(function(c){var f=b.now();for(e.push({interval:f,value:c});e.length>0&&f-e[0].interval>=a;)d.onNext(e.shift().value)},function(a){d.onError(a)},function(){for(var c=b.now();e.length>0&&c-e[0].interval>=a;)d.onNext(e.shift().value);d.onCompleted()})},c)},q.takeLastWithTime=function(a,b){var c=this;return G(b)||(b=v),new r(function(d){var e=[];return c.subscribe(function(c){var d=b.now();for(e.push({interval:d,value:c});e.length>0&&d-e[0].interval>=a;)e.shift()},function(a){d.onError(a)},function(){for(var c=b.now();e.length>0;){var f=e.shift();c-f.interval<=a&&d.onNext(f.value)}d.onCompleted()})},c)},q.takeLastBufferWithTime=function(a,b){var c=this;return G(b)||(b=v),new r(function(d){var e=[];return c.subscribe(function(c){var d=b.now();for(e.push({interval:d,value:c});e.length>0&&d-e[0].interval>=a;)e.shift()},function(a){d.onError(a)},function(){for(var c=b.now(),f=[];e.length>0;){var g=e.shift();c-g.interval<=a&&f.push(g.value)}d.onNext(f),d.onCompleted()})},c)},q.takeWithTime=function(a,b){var c=this;return G(b)||(b=v),new r(function(d){return new y(b.scheduleWithRelative(a,function(){d.onCompleted()}),c.subscribe(d))},c)},q.skipWithTime=function(a,b){var c=this;return G(b)||(b=v),new r(function(d){var e=!1;return new y(b.scheduleWithRelative(a,function(){e=!0}),c.subscribe(function(a){e&&d.onNext(a)},d.onError.bind(d),d.onCompleted.bind(d)))},c)},q.skipUntilWithTime=function(a,b){G(b)||(b=v);var c=this,d=a instanceof Date?"scheduleWithAbsolute":"scheduleWithRelative";return new r(function(e){var f=!1;return new y(b[d](a,function(){f=!0}),c.subscribe(function(a){f&&e.onNext(a)},function(a){e.onError(a)},function(){e.onCompleted()}))},c)},q.takeUntilWithTime=function(a,b){G(b)||(b=v);var c=this,d=a instanceof Date?"scheduleWithAbsolute":"scheduleWithRelative";return new r(function(e){return new y(b[d](a,function(){e.onCompleted()}),c.subscribe(e))},c)},q.throttleFirst=function(a,b){G(b)||(b=v);var c=+a||0;if(0>=c)throw new RangeError("windowDuration cannot be less or equal zero.");var d=this;return new r(function(a){var e=0;return d.subscribe(function(d){var f=b.now();(0===e||f-e>=c)&&(e=f,a.onNext(d))},function(b){a.onError(b)},function(){a.onCompleted()})},d)},c});
//# sourceMappingURL=rx.time.map
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
;(function (factory) {
var objectTypes = {
'boolean': false,
'function': true,
'object': true,
'number': false,
'string': false,
'undefined': false
};
var objectTypes = {
'function': true,
'object': true
};
var root = (objectTypes[typeof window] && window) || this,
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = objectTypes[typeof global] && global;
var
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeSelf = objectTypes[typeof self] && self.Object && self,
freeWindow = objectTypes[typeof window] && window && window.Object && window,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global;
if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) {
root = freeGlobal;
}
var root = root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this;

@@ -35,14 +31,99 @@ // Because of build optimizers

// Aliases
var Scheduler = Rx.Scheduler,
PriorityQueue = Rx.internals.PriorityQueue,
ScheduledItem = Rx.internals.ScheduledItem,
SchedulePeriodicRecursive = Rx.internals.SchedulePeriodicRecursive,
disposableEmpty = Rx.Disposable.empty,
inherits = Rx.internals.inherits,
// Aliases
var Scheduler = Rx.Scheduler,
ScheduledItem = Rx.internals.ScheduledItem,
SchedulePeriodicRecursive = Rx.internals.SchedulePeriodicRecursive,
disposableEmpty = Rx.Disposable.empty,
inherits = Rx.internals.inherits,
defaultSubComparer = Rx.helpers.defaultSubComparer,
notImplemented = Rx.helpers.notImplemented;
notImplemented = Rx.helpers.notImplemented;
// Collections
function IndexedItem(id, value) {
this.id = id;
this.value = value;
}
IndexedItem.prototype.compareTo = function (other) {
var c = this.value.compareTo(other.value);
c === 0 && (c = this.id - other.id);
return c;
};
// Priority Queue for Scheduling
var PriorityQueue = Rx.internals.PriorityQueue = function (capacity) {
this.items = new Array(capacity);
this.length = 0;
};
var priorityProto = PriorityQueue.prototype;
priorityProto.isHigherPriority = function (left, right) {
return this.items[left].compareTo(this.items[right]) < 0;
};
priorityProto.percolate = function (index) {
if (index >= this.length || index < 0) { return; }
var parent = index - 1 >> 1;
if (parent < 0 || parent === index) { return; }
if (this.isHigherPriority(index, parent)) {
var temp = this.items[index];
this.items[index] = this.items[parent];
this.items[parent] = temp;
this.percolate(parent);
}
};
priorityProto.heapify = function (index) {
+index || (index = 0);
if (index >= this.length || index < 0) { return; }
var left = 2 * index + 1,
right = 2 * index + 2,
first = index;
if (left < this.length && this.isHigherPriority(left, first)) {
first = left;
}
if (right < this.length && this.isHigherPriority(right, first)) {
first = right;
}
if (first !== index) {
var temp = this.items[index];
this.items[index] = this.items[first];
this.items[first] = temp;
this.heapify(first);
}
};
priorityProto.peek = function () { return this.items[0].value; };
priorityProto.removeAt = function (index) {
this.items[index] = this.items[--this.length];
this.items[this.length] = undefined;
this.heapify();
};
priorityProto.dequeue = function () {
var result = this.peek();
this.removeAt(0);
return result;
};
priorityProto.enqueue = function (item) {
var index = this.length++;
this.items[index] = new IndexedItem(PriorityQueue.count++, item);
this.percolate(index);
};
priorityProto.remove = function (item) {
for (var i = 0; i < this.length; i++) {
if (this.items[i].value === item) {
this.removeAt(i);
return true;
}
}
return false;
};
PriorityQueue.count = 0;
/** Provides a set of extension methods for virtual time scheduling. */
Rx.VirtualTimeScheduler = (function (__super__) {
var VirtualTimeScheduler = Rx.VirtualTimeScheduler = (function (__super__) {

@@ -49,0 +130,0 @@ function localNow() {

/* Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.*/
(function(a){var b={"boolean":!1,"function":!0,object:!0,number:!1,string:!1,undefined:!1},c=b[typeof window]&&window||this,d=b[typeof exports]&&exports&&!exports.nodeType&&exports,e=b[typeof module]&&module&&!module.nodeType&&module,f=(e&&e.exports===d&&d,b[typeof global]&&global);!f||f.global!==f&&f.window!==f||(c=f),"function"==typeof define&&define.amd?define(["rx"],function(b,d){return a(c,d,b)}):"object"==typeof module&&module&&module.exports===d?module.exports=a(c,module.exports,require("./rx")):c.Rx=a(c,{},c.Rx)}).call(this,function(a,b,c,d){var e=c.Scheduler,f=c.internals.PriorityQueue,g=c.internals.ScheduledItem,h=c.internals.SchedulePeriodicRecursive,i=c.Disposable.empty,j=c.internals.inherits,k=c.helpers.defaultSubComparer,l=c.helpers.notImplemented;return c.VirtualTimeScheduler=function(a){function b(){return this.toDateTimeOffset(this.clock)}function c(a,b){return this.scheduleAbsoluteWithState(a,this.clock,b)}function d(a,b,c){return this.scheduleRelativeWithState(a,this.toRelative(b),c)}function e(a,b,c){return this.scheduleRelativeWithState(a,this.toRelative(b-this.now()),c)}function k(a,b){return b(),i}function m(g,h){this.clock=g,this.comparer=h,this.isEnabled=!1,this.queue=new f(1024),a.call(this,b,c,d,e)}j(m,a);var n=m.prototype;return n.add=l,n.toDateTimeOffset=l,n.toRelative=l,n.schedulePeriodicWithState=function(a,b,c){var d=new h(this,a,b,c);return d.start()},n.scheduleRelativeWithState=function(a,b,c){var d=this.add(this.clock,b);return this.scheduleAbsoluteWithState(a,d,c)},n.scheduleRelative=function(a,b){return this.scheduleRelativeWithState(b,a,k)},n.start=function(){if(!this.isEnabled){this.isEnabled=!0;do{var a=this.getNext();null!==a?(this.comparer(a.dueTime,this.clock)>0&&(this.clock=a.dueTime),a.invoke()):this.isEnabled=!1}while(this.isEnabled)}},n.stop=function(){this.isEnabled=!1},n.advanceTo=function(a){var b=this.comparer(this.clock,a);if(this.comparer(this.clock,a)>0)throw new ArgumentOutOfRangeError;if(0!==b&&!this.isEnabled){this.isEnabled=!0;do{var c=this.getNext();null!==c&&this.comparer(c.dueTime,a)<=0?(this.comparer(c.dueTime,this.clock)>0&&(this.clock=c.dueTime),c.invoke()):this.isEnabled=!1}while(this.isEnabled);this.clock=a}},n.advanceBy=function(a){var b=this.add(this.clock,a),c=this.comparer(this.clock,b);if(c>0)throw new ArgumentOutOfRangeError;0!==c&&this.advanceTo(b)},n.sleep=function(a){var b=this.add(this.clock,a);if(this.comparer(this.clock,b)>=0)throw new ArgumentOutOfRangeError;this.clock=b},n.getNext=function(){for(;this.queue.length>0;){var a=this.queue.peek();if(!a.isCancelled())return a;this.queue.dequeue()}return null},n.scheduleAbsolute=function(a,b){return this.scheduleAbsoluteWithState(b,a,k)},n.scheduleAbsoluteWithState=function(a,b,c){function d(a,b){return e.queue.remove(f),c(a,b)}var e=this,f=new g(this,a,d,b,this.comparer);return this.queue.enqueue(f),f.disposable},m}(e),c.HistoricalScheduler=function(a){function b(b,c){var d=null==b?0:b,e=c||k;a.call(this,d,e)}j(b,a);var c=b.prototype;return c.add=function(a,b){return a+b},c.toDateTimeOffset=function(a){return new Date(a).getTime()},c.toRelative=function(a){return a},b}(c.VirtualTimeScheduler),c});
(function(a){var b={"function":!0,object:!0},c=b[typeof exports]&&exports&&!exports.nodeType&&exports,d=b[typeof self]&&self.Object&&self,e=b[typeof window]&&window&&window.Object&&window,f=b[typeof module]&&module&&!module.nodeType&&module,g=(f&&f.exports===c&&c,c&&f&&"object"==typeof global&&global&&global.Object&&global),h=h=g||e!==(this&&this.window)&&e||d||this;"function"==typeof define&&define.amd?define(["rx"],function(b,c){return a(h,c,b)}):"object"==typeof module&&module&&module.exports===c?module.exports=a(h,module.exports,require("./rx")):h.Rx=a(h,{},h.Rx)}).call(this,function(a,b,c,d){function e(a,b){this.id=a,this.value=b}var f=c.Scheduler,g=c.internals.ScheduledItem,h=c.internals.SchedulePeriodicRecursive,i=c.Disposable.empty,j=c.internals.inherits,k=c.helpers.defaultSubComparer,l=c.helpers.notImplemented;e.prototype.compareTo=function(a){var b=this.value.compareTo(a.value);return 0===b&&(b=this.id-a.id),b};var m=c.internals.PriorityQueue=function(a){this.items=new Array(a),this.length=0},n=m.prototype;n.isHigherPriority=function(a,b){return this.items[a].compareTo(this.items[b])<0},n.percolate=function(a){if(!(a>=this.length||0>a)){var b=a-1>>1;if(!(0>b||b===a)&&this.isHigherPriority(a,b)){var c=this.items[a];this.items[a]=this.items[b],this.items[b]=c,this.percolate(b)}}},n.heapify=function(a){if(+a||(a=0),!(a>=this.length||0>a)){var b=2*a+1,c=2*a+2,d=a;if(b<this.length&&this.isHigherPriority(b,d)&&(d=b),c<this.length&&this.isHigherPriority(c,d)&&(d=c),d!==a){var e=this.items[a];this.items[a]=this.items[d],this.items[d]=e,this.heapify(d)}}},n.peek=function(){return this.items[0].value},n.removeAt=function(a){this.items[a]=this.items[--this.length],this.items[this.length]=d,this.heapify()},n.dequeue=function(){var a=this.peek();return this.removeAt(0),a},n.enqueue=function(a){var b=this.length++;this.items[b]=new e(m.count++,a),this.percolate(b)},n.remove=function(a){for(var b=0;b<this.length;b++)if(this.items[b].value===a)return this.removeAt(b),!0;return!1},m.count=0;c.VirtualTimeScheduler=function(a){function b(){return this.toDateTimeOffset(this.clock)}function c(a,b){return this.scheduleAbsoluteWithState(a,this.clock,b)}function d(a,b,c){return this.scheduleRelativeWithState(a,this.toRelative(b),c)}function e(a,b,c){return this.scheduleRelativeWithState(a,this.toRelative(b-this.now()),c)}function f(a,b){return b(),i}function k(f,g){this.clock=f,this.comparer=g,this.isEnabled=!1,this.queue=new m(1024),a.call(this,b,c,d,e)}j(k,a);var n=k.prototype;return n.add=l,n.toDateTimeOffset=l,n.toRelative=l,n.schedulePeriodicWithState=function(a,b,c){var d=new h(this,a,b,c);return d.start()},n.scheduleRelativeWithState=function(a,b,c){var d=this.add(this.clock,b);return this.scheduleAbsoluteWithState(a,d,c)},n.scheduleRelative=function(a,b){return this.scheduleRelativeWithState(b,a,f)},n.start=function(){if(!this.isEnabled){this.isEnabled=!0;do{var a=this.getNext();null!==a?(this.comparer(a.dueTime,this.clock)>0&&(this.clock=a.dueTime),a.invoke()):this.isEnabled=!1}while(this.isEnabled)}},n.stop=function(){this.isEnabled=!1},n.advanceTo=function(a){var b=this.comparer(this.clock,a);if(this.comparer(this.clock,a)>0)throw new ArgumentOutOfRangeError;if(0!==b&&!this.isEnabled){this.isEnabled=!0;do{var c=this.getNext();null!==c&&this.comparer(c.dueTime,a)<=0?(this.comparer(c.dueTime,this.clock)>0&&(this.clock=c.dueTime),c.invoke()):this.isEnabled=!1}while(this.isEnabled);this.clock=a}},n.advanceBy=function(a){var b=this.add(this.clock,a),c=this.comparer(this.clock,b);if(c>0)throw new ArgumentOutOfRangeError;0!==c&&this.advanceTo(b)},n.sleep=function(a){var b=this.add(this.clock,a);if(this.comparer(this.clock,b)>=0)throw new ArgumentOutOfRangeError;this.clock=b},n.getNext=function(){for(;this.queue.length>0;){var a=this.queue.peek();if(!a.isCancelled())return a;this.queue.dequeue()}return null},n.scheduleAbsolute=function(a,b){return this.scheduleAbsoluteWithState(b,a,f)},n.scheduleAbsoluteWithState=function(a,b,c){function d(a,b){return e.queue.remove(f),c(a,b)}var e=this,f=new g(this,a,d,b,this.comparer);return this.queue.enqueue(f),f.disposable},k}(f);return c.HistoricalScheduler=function(a){function b(b,c){var d=null==b?0:b,e=c||k;a.call(this,d,e)}j(b,a);var c=b.prototype;return c.add=function(a,b){return a+b},c.toDateTimeOffset=function(a){return new Date(a).getTime()},c.toRelative=function(a){return a},b}(c.VirtualTimeScheduler),c});
//# sourceMappingURL=rx.virtualtime.map

@@ -5,3 +5,3 @@ {

"description": "Library for composing asynchronous and event-based operations in JavaScript",
"version": "2.5.3",
"version": "3.0.0",
"homepage": "https://github.com/Reactive-Extensions/RxJS",

@@ -8,0 +8,0 @@ "author": {

[![Build Status](https://travis-ci.org/Reactive-Extensions/RxJS.png)](https://travis-ci.org/Reactive-Extensions/RxJS)
[![Inline docs](http://inch-ci.org/github/Reactive-Extensions/RxJS.svg?branch=master)](http://inch-ci.org/github/Reactive-Extensions/RxJS)
[![GitHub version](http://img.shields.io/github/tag/reactive-extensions/rxjs.svg)](https://github.com/Reactive-Extensions/RxJS)
[![NPM version](http://img.shields.io/npm/v/rx.svg)](https://npmjs.org/package/rx)
[![Downloads](http://img.shields.io/npm/dm/rx.svg)](https://npmjs.org/package/rx)
[![Bower](https://img.shields.io/bower/v/rxjs.svg)](http://bower.io/search/?q=rxjs)
[![NuGet](http://img.shields.io/nuget/v/RxJS-All.svg)](http://www.nuget.org/packages/RxJS-All/)
[![Built with Grunt](https://cdn.gruntjs.com/builtwith.png)](http://gruntjs.com/)
[![Join the chat at https://gitter.im/Reactive-Extensions/RxJS](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/Reactive-Extensions/RxJS?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)

@@ -21,3 +21,4 @@ **[The Need to go Reactive](#the-need-to-go-reactive)** |

# The Reactive Extensions for JavaScript (RxJS) <sup>2.5</sup>... #
# The Reactive Extensions for JavaScript (RxJS) <sup>3.0</sup>... #
*...is a set of libraries to compose asynchronous and event-based programs using observable collections and [Array#extras](http://blogs.msdn.com/b/ie/archive/2010/12/13/ecmascript-5-part-2-array-extras.aspx) style composition in JavaScript*

@@ -88,21 +89,38 @@

Sure, there are a lot of libraries to get started with RxJS. Confused on where to get started? Start out with the complete set of operators with [`rx.all.js`](doc/libraries/rx.complete.md), then you can reduce it to the number of operators that you really need, and perhaps stick with something as small as [`rx.lite.js`](doc/libraries/rx.lite.md).
Sure, there are a lot of libraries to get started with RxJS. Confused on where to get started? Start out with the complete set of operators with [`rx.all.js`](doc/libraries/main/rx.complete.md), then you can reduce it to the number of operators that you really need, and perhaps stick with something as small as [`rx.lite.js`](doc/libraries/lite/rx.lite.md). If you're an implementor of RxJS, then you can start out with [`rx.core.js`](doc/libraries/core/rx.core.md).
This set of libraries include:
- [`rx.all.js`](doc/libraries/rx.complete.md) - complete version of RxJS with all operators, minus the testing operators, and comes with a compat file for older browsers.
- [`rx.lite.js`](doc/libraries/rx.lite.md) - lite version with event bindings, creation, time and standard query operators with a compat file for older browsers. For most operations, this is the file you'll want to use unless you want the full power of RxJS.
- [`rx.lite.extras.js`](doc/libraries/rx.lite.extras.md) - the operators missing from rx.lite.js that can be found in rx.js.
- [`rx.js`](doc/libraries/rx.md) - core library for ES5 compliant browsers and runtimes plus compatibility for older browsers.
- [`rx.aggregates.js`](doc/libraries/rx.aggregates.md) - aggregation event processing query operations
- [`rx.async.js`](doc/libraries/rx.async.md) - async operations such as events, callbacks and promises plus a compat file for older browsers.
- [`rx.backpressure.js`](doc/libraries/rx.backpressure.md) - backpressure operators such as pause/resume and controlled.
- [`rx.binding.js`](doc/libraries/rx.binding.md) - binding operators including multicast, publish, publishLast, publishValue, and replay
- [`rx.coincidence.js`](doc/libraries/rx.coincidence.md) - reactive coincidence join event processing query operations
- [`rx.experimental.js`](doc/libraries/rx.experimental.md) - experimental operators including imperative operators and forkJoin
- [`rx.joinpatterns.js`](doc/libraries/rx.joinpatterns.md) - join patterns event processing query operations
- [`rx.testing.js`](doc/libraries/rx.testing.md) - used to write unit tests for complex event processing queries
- [`rx.time.js`](doc/libraries/rx.time.md) - time-based event processing query operations
- [`rx.virtualtime.js`](doc/libraries/rx.virtualtime.md) - virtual-time-based schedulers
### The complete library:
- [`rx.all.js`](doc/libraries/main/rx.complete.md)
### Main Libraries:
- [`rx.js`](doc/libraries/main/rx.md)
- [`rx.aggregates.js`](doc/libraries/main/rx.aggregates.md)
- [`rx.async.js`](doc/libraries/main/rx.async.md)
- [`rx.binding.js`](doc/libraries/main/rx.binding.md)
- [`rx.coincidence.js`](doc/libraries/main/rx.coincidence.md)
- [`rx.experimental.js`](doc/libraries/main/rx.experimental.md)
- [`rx.joinpatterns.js`](doc/libraries/main/rx.joinpatterns.md)
- [`rx.testing.js`](doc/libraries/main/rx.testing.md)
- [`rx.time.js`](doc/libraries/main/rx.time.md)
- [`rx.virtualtime.js`](doc/libraries/main/rx.virtualtime.md)
### Lite Libraries:
- [`rx.lite.js`](doc/libraries/lite/rx.lite.md)
- [`rx.lite.extras.js`](doc/libraries/lite/rx.lite.extras.md)
- [`rx.lite.aggregates.js`](doc/libraries/lite/rx.lite.aggregates.md)
- [`rx.lite.async.js`](doc/libraries/lite/rx.lite.async.md)
- [`rx.lite.coincidence.js`](doc/libraries/lite/rx.lite.coincidence.md)
- [`rx.lite.experimental.js`](doc/libraries/lite/rx.lite.experimental.md)
- [`rx.lite.joinpatterns.js`](doc/libraries/lite/rx.lite.joinpatterns.md)
- [`rx.lite.testing.js`](doc/libraries/lite/rx.lite.testing.md)
- [`rx.lite.time.js`](doc/libraries/lite/rx.lite.time.md)
- [`rx.lite.virtualtime.js`](doc/libraries/lite/rx.lite.virtualtime.md)
### Core Libraries:
- [`rx.core.js`](doc/libraries/core/rx.core.md)
- [`rx.core.binding.js`](doc/libraries/core/rx.core.binding.md)
- [`rx.core.testing.js`](doc/libraries/core/rx.core.testing.md)
## Why RxJS? ##

@@ -127,5 +145,3 @@

var keyups = Rx.Observable.fromEvent($input, 'keyup')
.map(function (e) {
return e.target.value;
})
.pluck('target', 'value')
.filter(function (text) {

@@ -211,7 +227,9 @@ return text.length > 2;

- [2 minute introduction to Rx](https://medium.com/@andrestaltz/2-minute-introduction-to-rx-24c8ca793877)
- [Learn RxJS](https://github.com/jhusain/learnrx)
- [Learn RxJS - @jhusain](https://github.com/jhusain/learnrx)
- [RxJS Koans](https://github.com/Reactive-Extensions/RxJSKoans)
- [RxJS Workshop](https://github.com/Reactive-Extensions/BuildStuffWorkshop)
- [RxJS Workshop from BuildStuff 2014](https://github.com/Reactive-Extensions/BuildStuffWorkshop)
- [Rx Workshop](http://rxworkshop.codeplex.com/)
- [Reactive Programming and MVC](http://aaronstacy.com/writings/reactive-programming-and-mvc/)
- [RxJS lessons - egghead.io](https://egghead.io/technologies/rx)
- [RxJS Training - @andrestaltz](https://github.com/staltz/rxjs-training)

@@ -223,73 +241,10 @@ - Reference Material

- [101 Rx Samples Wiki](http://rxwiki.wikidot.com/101samples)
- [Rx Design Guidelines](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/designguidelines)
- [Beginners Guide to Rx](http://msdn.microsoft.com/en-us/data/gg577611)
- [RxJS Design Guidelines](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/designguidelines)
- [Visualizing Reactive Streams](http://jaredly.github.io/2015/03/06/visualizing-reactive-streams-hot-and-cold/)
- [Your Mouse is a Database](http://queue.acm.org/detail.cfm?id=2169076)
- Community Examples
- [React](http://facebook.github.io/react/)
- [Rx-React](https://github.com/fdecampredon/rx-react)
- [RxReact](https://github.com/AlexMost/RxReact)
- [cycle-react](https://github.com/pH200/cycle-react)
- [React RxJS Autocomplete](https://github.com/eliseumds/react-autocomplete)
- [React RxJS TODO MVC](https://github.com/fdecampredon/react-rxjs-todomvc)
- [Rx TODO MVC](https://github.com/footballradar/rx-todomvc)
- [React RxJS Router](https://github.com/kmcclosk/reactjs-rxjs-example)
- [React + RxJS + Angular 2.0 di.js TODO MVC](https://github.com/joelhooks/react-rxjs-angular-di-todomvc)
- [React + RxJS Reactive Cube](https://github.com/hugobessaa/cubactive)
- [Real-Time with React + RxJS + Meteor](https://medium.com/@bobiblazeski/functional-reactive-interfaces-e8de034de6bd)
- [React + RxJS Flow](https://github.com/justinwoo/react-rxjs-flow)
- [Reactive Widgets](https://github.com/zxbodya/reactive-widgets)
- [React RxJS Infinite Scroll](https://github.com/justinwoo/react-rxjs-scroll)
- [Flux](http://facebook.github.io/flux/)
- [Rx-Flux](https://github.com/fdecampredon/rx-flux)
- [ReactiveFlux](https://github.com/codesuki/reactive-flux)
- [Thundercats.js](https://github.com/r3dm/thundercats)
- [Flurx](https://github.com/cell303/flurx)
- [RR](https://github.com/winsonwq/RR)
- [Ember](http://emberjs.com/)
- [RxEmber](https://github.com/blesh/RxEmber)
- [AngularJS](http://angularjs.org)
- [Ninya.io - Angular + RxJS + rx.angular.js](https://github.com/ninya-io/ninya.io) - [Site](http://stackwho.herokuapp.com/)
- [The Car Game](https://github.com/mikkark/TheCarGame) - [Site](https://thecargame.herokuapp.com/) - [Blog Post](https://allthingsarchitectural.wordpress.com/2014/11/24/game-programming-with-angular-rxjs-and-node-js/)
- [Cycle](https://github.com/staltz/cycle)
- [Cycle TODO MVC](https://github.com/staltz/todomvc-cycle)
- [WebRx](https://github.com/oliverw/webrx)
- Everything else
- [RxVision](http://jaredly.github.io/rxvision/)
- [Mario Elm Example](http://fudini.github.io/rx/mario.html)
- [Firebase + RxJS](http://blog.cryptoguru.com/2014/11/frp-using-rxjs-and-firebase.html)
- [Reactive Trader](https://github.com/AdaptiveConsulting/ReactiveTrader) - [Site](https://reactivetrader.azurewebsites.net/)
- [NPM Dependencies](https://www.npmjs.com/browse/depended/rx)
- Essential tools
- [RxVision](http://jaredforsyth.com/rxvision/)
- [Percussion](https://github.com/grisendo/Percussion)
- Presentations
- Don't Cross the Streams - Cascadia.js 2012 [slides/demos](http://www.slideshare.net/mattpodwysocki/cascadiajs-dont-cross-the-streams) | [video](http://www.youtube.com/watch?v=FqBq4uoiG0M)
- Curing Your Asynchronous Blues - Strange Loop 2013 [slides/demos](https://github.com/Reactive-Extensions/StrangeLoop2013) | [video](http://www.infoq.com/presentations/rx-event-processing)
- Streaming and event-based programming using FRP and RxJS - FutureJS 2014 [slides/demos](https://github.com/Reactive-Extensions/FutureJS) | [video](https://www.youtube.com/watch?v=zlERo_JMGCw)
- [Tyrannosaurus Rx](http://yobriefca.se/presentations/tyrannosaurus-rx.pdf) - [James Hughes](http://twitter.com/kouphax)
- Taming Asynchronous Workflows with Functional Reactive Programming - EuroClojure - [Leonardo Borges](https://twitter.com/leonardo_borges) [slides](http://www.slideshare.net/borgesleonardo/functional-reactive-programming-compositional-event-systems) | [video](http://www.slideshare.net/borgesleonardo/functional-reactive-programming-compositional-event-systems)
- Reactive All the Things - ng-conf 2015 - [Martin Gontovnikas](https://twitter.com/mgonto/) & [Ben Lesh](https://twitter.com/BenLesh)
- [Slides](http://mgonto.github.io/reactive-all-the-things-talk/#1)
- [Video](https://www.youtube.com/watch?v=zbBVG8bOoXk&feature=youtu.be&app=desktop)
- Videos
- [Practical Rx with Matthew Podwysocki, Bart de Smet and Jafar Husain](http://channel9.msdn.com/posts/Bart-De-Smet-Jafar-Hussain-Matthew-Podwysocki-Pragmatic-Rx)
- [Netflix and RxJS](http://channel9.msdn.com/posts/Rx-and-Netflix)
- [Hello RxJS - Channel 9](http://channel9.msdn.com/Blogs/Charles/Introducing-RxJS-Reactive-Extensions-for-JavaScript)
- [MIX 2011](http://channel9.msdn.com/events/MIX/MIX11/HTM07)
- [RxJS Today and Tomorrow - Channel 9](http://channel9.msdn.com/Blogs/Charles/Matthew-Podwysocki-and-Bart-J-F-De-Smet-RxJS-Today-and-Tomorrow)
- [Reactive Extensions Videos on Channel 9](http://channel9.msdn.com/Tags/reactive+extensions)
- [Asynchronous JavaScript at Netflix - Netflix JavaScript Talks - Jafar Husain](https://www.youtube.com/watch?v=XRYN2xt11Ek)
- [Asynchronous JavaScript at Netflix - MountainWest JavaScript 2014 - Jafar Husain](https://www.youtube.com/watch?v=XE692Clb5LU)
- [Asynchronous JavaScript at Netflix - HTML5DevConf - Jafar Husain](https://www.youtube.com/watch?v=5uxSu-F5Kj0)
- [Adding Even More Fun to Functional Programming With RXJS - Ryan Anklam](https://www.youtube.com/watch?v=8EExNfm0gt4)
- [Reactive Angular - Devoxx France 2014 - Martin Gontovnikas](http://parleys.com/play/53677646e4b0593229b85841/chapter0/about)
- [Reactive Game Programming for the Discerning Hipster - JSConf 2014 - Bodil Stokke](https://www.youtube.com/watch?v=x8mmAu7ZR9Y)
- Podcasts
- [.NET Rocks #907](http://dotnetrocks.com/default.aspx?showNum=907)
- [JavaScript Jabber #83](http://javascriptjabber.com/083-jsj-frp-and-rxjs-with-matthew-podwysocki/)
- Articles
- [Your Mouse is a Database](http://queue.acm.org/detail.cfm?id=2169076)
- Books

@@ -300,2 +255,6 @@ - [RxJS](http://xgrommx.github.io/rx-book)

- [Community Examples](examples/community.md)
- [Presentations](doc/presentations.md)
- [Videos and Podcasts](doc/videos.md)
## Getting Started

@@ -302,0 +261,0 @@

@@ -13,3 +13,2 @@ /**

this.isStopped = false;
__super__.call(this);
}

@@ -27,3 +26,3 @@

AbstractObserver.prototype.onNext = function (value) {
if (!this.isStopped) { this.next(value); }
!this.isStopped && this.next(value);
};

@@ -55,5 +54,3 @@

*/
AbstractObserver.prototype.dispose = function () {
this.isStopped = true;
};
AbstractObserver.prototype.dispose = function () { this.isStopped = true; };

@@ -60,0 +57,0 @@ AbstractObserver.prototype.fail = function (e) {

@@ -11,4 +11,4 @@ var AnonymousObservable = Rx.AnonymousObservable = (function (__super__) {

function setDisposable(s, state) {
var ado = state[0], subscribe = state[1];
var sub = tryCatch(subscribe)(ado);
var ado = state[0], self = state[1];
var sub = tryCatch(self.__subscribe).call(self, ado);

@@ -21,17 +21,17 @@ if (sub === errorObj) {

function AnonymousObservable(subscribe, parent) {
this.source = parent;
function innerSubscribe(observer) {
var ado = new AutoDetachObserver(observer), state = [ado, this];
function s(observer) {
var ado = new AutoDetachObserver(observer), state = [ado, subscribe];
if (currentThreadScheduler.scheduleRequired()) {
currentThreadScheduler.scheduleWithState(state, setDisposable);
} else {
setDisposable(null, state);
}
return ado;
if (currentThreadScheduler.scheduleRequired()) {
currentThreadScheduler.scheduleWithState(state, setDisposable);
} else {
setDisposable(null, state);
}
return ado;
}
__super__.call(this, s);
function AnonymousObservable(subscribe, parent) {
this.source = parent;
this.__subscribe = subscribe;
__super__.call(this, innerSubscribe);
}

@@ -38,0 +38,0 @@

@@ -1,138 +0,141 @@

var ControlledObservable = (function (__super__) {
var ControlledObservable = (function (__super__) {
inherits(ControlledObservable, __super__);
inherits(ControlledObservable, __super__);
function subscribe (observer) {
return this.source.subscribe(observer);
}
function subscribe (observer) {
return this.source.subscribe(observer);
}
function ControlledObservable (source, enableQueue, scheduler) {
__super__.call(this, subscribe, source);
this.subject = new ControlledSubject(enableQueue, scheduler);
this.source = source.multicast(this.subject).refCount();
}
function ControlledObservable (source, enableQueue, scheduler) {
__super__.call(this, subscribe, source);
this.subject = new ControlledSubject(enableQueue, scheduler);
this.source = source.multicast(this.subject).refCount();
}
ControlledObservable.prototype.request = function (numberOfItems) {
return this.subject.request(numberOfItems == null ? -1 : numberOfItems);
};
ControlledObservable.prototype.request = function (numberOfItems) {
return this.subject.request(numberOfItems == null ? -1 : numberOfItems);
};
return ControlledObservable;
return ControlledObservable;
}(Observable));
}(Observable));
var ControlledSubject = (function (__super__) {
var ControlledSubject = (function (__super__) {
function subscribe (observer) {
return this.subject.subscribe(observer);
}
function subscribe (observer) {
return this.subject.subscribe(observer);
}
inherits(ControlledSubject, __super__);
inherits(ControlledSubject, __super__);
function ControlledSubject(enableQueue, scheduler) {
enableQueue == null && (enableQueue = true);
function ControlledSubject(enableQueue, scheduler) {
enableQueue == null && (enableQueue = true);
__super__.call(this, subscribe);
this.subject = new Subject();
this.enableQueue = enableQueue;
this.queue = enableQueue ? [] : null;
this.requestedCount = 0;
this.requestedDisposable = disposableEmpty;
this.error = null;
this.hasFailed = false;
this.hasCompleted = false;
this.scheduler = scheduler || currentThreadScheduler;
}
__super__.call(this, subscribe);
this.subject = new Subject();
this.enableQueue = enableQueue;
this.queue = enableQueue ? [] : null;
this.requestedCount = 0;
this.requestedDisposable = null;
this.error = null;
this.hasFailed = false;
this.hasCompleted = false;
this.scheduler = scheduler || currentThreadScheduler;
}
addProperties(ControlledSubject.prototype, Observer, {
onCompleted: function () {
this.hasCompleted = true;
if (!this.enableQueue || this.queue.length === 0) {
this.subject.onCompleted();
} else {
this.queue.push(Notification.createOnCompleted());
addProperties(ControlledSubject.prototype, Observer, {
onCompleted: function () {
this.hasCompleted = true;
if (!this.enableQueue || this.queue.length === 0) {
this.subject.onCompleted();
this.disposeCurrentRequest()
} else {
this.queue.push(Notification.createOnCompleted());
}
},
onError: function (error) {
this.hasFailed = true;
this.error = error;
if (!this.enableQueue || this.queue.length === 0) {
this.subject.onError(error);
this.disposeCurrentRequest()
} else {
this.queue.push(Notification.createOnError(error));
}
},
onNext: function (value) {
if (this.requestedCount <= 0) {
this.enableQueue && this.queue.push(Notification.createOnNext(value));
} else {
(this.requestedCount-- === 0) && this.disposeCurrentRequest();
this.subject.onNext(value);
}
},
_processRequest: function (numberOfItems) {
if (this.enableQueue) {
while (this.queue.length > 0 && (numberOfItems > 0 || this.queue[0].kind !== 'N')) {
var first = this.queue.shift();
first.accept(this.subject);
if (first.kind === 'N') {
numberOfItems--;
} else {
this.disposeCurrentRequest();
this.queue = [];
}
}
},
onError: function (error) {
this.hasFailed = true;
this.error = error;
if (!this.enableQueue || this.queue.length === 0) {
this.subject.onError(error);
} else {
this.queue.push(Notification.createOnError(error));
}
},
onNext: function (value) {
var hasRequested = false;
}
if (this.requestedCount === 0) {
this.enableQueue && this.queue.push(Notification.createOnNext(value));
} else {
(this.requestedCount !== -1 && this.requestedCount-- === 0) && this.disposeCurrentRequest();
hasRequested = true;
}
hasRequested && this.subject.onNext(value);
},
_processRequest: function (numberOfItems) {
if (this.enableQueue) {
while ((this.queue.length >= numberOfItems && numberOfItems > 0) ||
(this.queue.length > 0 && this.queue[0].kind !== 'N')) {
var first = this.queue.shift();
first.accept(this.subject);
if (first.kind === 'N') {
numberOfItems--;
} else {
this.disposeCurrentRequest();
this.queue = [];
}
}
return numberOfItems;
},
request: function (number) {
this.disposeCurrentRequest();
var self = this;
return { numberOfItems : numberOfItems, returnValue: this.queue.length !== 0};
this.requestedDisposable = this.scheduler.scheduleWithState(number,
function(s, i) {
var remaining = self._processRequest(i);
var stopped = self.hasCompleted || self.hasFailed
if (!stopped && remaining > 0) {
self.requestedCount = remaining;
return disposableCreate(function () {
self.requestedCount = 0;
});
// Scheduled item is still in progress. Return a new
// disposable to allow the request to be interrupted
// via dispose.
}
});
return { numberOfItems: numberOfItems, returnValue: false };
},
request: function (number) {
this.disposeCurrentRequest();
var self = this;
this.requestedDisposable = this.scheduler.scheduleWithState(number,
function(s, i) {
var r = self._processRequest(i), remaining = r.numberOfItems;
if (!r.returnValue) {
self.requestedCount = remaining;
self.requestedDisposable = disposableCreate(function () {
self.requestedCount = 0;
});
}
});
return this.requestedDisposable;
},
disposeCurrentRequest: function () {
return this.requestedDisposable;
},
disposeCurrentRequest: function () {
if (this.requestedDisposable) {
this.requestedDisposable.dispose();
this.requestedDisposable = disposableEmpty;
this.requestedDisposable = null;
}
});
}
});
return ControlledSubject;
}(Observable));
return ControlledSubject;
}(Observable));
/**
* Attaches a controller to the observable sequence with the ability to queue.
* @example
* var source = Rx.Observable.interval(100).controlled();
* source.request(3); // Reads 3 values
* @param {bool} enableQueue truthy value to determine if values should be queued pending the next request
* @param {Scheduler} scheduler determines how the requests will be scheduled
* @returns {Observable} The observable sequence which only propagates values on request.
*/
observableProto.controlled = function (enableQueue, scheduler) {
/**
* Attaches a controller to the observable sequence with the ability to queue.
* @example
* var source = Rx.Observable.interval(100).controlled();
* source.request(3); // Reads 3 values
* @param {bool} enableQueue truthy value to determine if values should be queued pending the next request
* @param {Scheduler} scheduler determines how the requests will be scheduled
* @returns {Observable} The observable sequence which only propagates values on request.
*/
observableProto.controlled = function (enableQueue, scheduler) {
if (enableQueue && isScheduler(enableQueue)) {
scheduler = enableQueue;
enableQueue = true;
}
if (enableQueue && isScheduler(enableQueue)) {
scheduler = enableQueue;
enableQueue = true;
}
if (enableQueue == null) { enableQueue = true; }
return new ControlledObservable(this, enableQueue, scheduler);
};
if (enableQueue == null) { enableQueue = true; }
return new ControlledObservable(this, enableQueue, scheduler);
};

@@ -10,3 +10,3 @@ function combineLatestSource(source, subject, resultSelector) {

function next(x, i) {
values[i] = x
values[i] = x;
hasValue[i] = true;

@@ -63,3 +63,3 @@ if (hasValueAll || (hasValueAll = hasValue.every(identity))) {

this.source,
this.pauser.distinctUntilChanged().startWith(false),
this.pauser.startWith(false).distinctUntilChanged(),
function (data, shouldFire) {

@@ -66,0 +66,0 @@ return { data: data, shouldFire: shouldFire };

@@ -9,3 +9,3 @@ /**

while (queue.length > 0) {
var item = queue.dequeue();
var item = queue.shift();
!item.isCancelled() && item.invoke();

@@ -19,4 +19,3 @@ }

if (!queue) {
queue = new PriorityQueue(4);
queue.enqueue(si);
queue = [si];

@@ -27,3 +26,3 @@ var result = tryCatch(runTrampoline)();

} else {
queue.enqueue(si);
queue.push(si);
}

@@ -30,0 +29,0 @@ return si.disposable;

@@ -5,23 +5,24 @@ (function (schedulerProto) {

var state = pair[0], action = pair[1], group = new CompositeDisposable();
action(state, innerAction);
return group;
function recursiveAction(state1) {
action(state1, function (state2) {
var isAdded = false, isDone = false,
d = scheduler.scheduleWithState(state2, function (scheduler1, state3) {
if (isAdded) {
group.remove(d);
} else {
isDone = true;
}
recursiveAction(state3);
return disposableEmpty;
});
if (!isDone) {
group.add(d);
isAdded = true;
function innerAction(state2) {
var isAdded = false, isDone = false;
var d = scheduler.scheduleWithState(state2, scheduleWork);
if (!isDone) {
group.add(d);
isAdded = true;
}
function scheduleWork(_, state3) {
if (isAdded) {
group.remove(d);
} else {
isDone = true;
}
});
action(state3, innerAction);
return disposableEmpty;
}
}
recursiveAction(state);
return group;
}

@@ -31,24 +32,34 @@

var state = pair[0], action = pair[1], group = new CompositeDisposable();
function recursiveAction(state1) {
action(state1, function (state2, dueTime1) {
var isAdded = false, isDone = false,
d = scheduler[method](state2, dueTime1, function (scheduler1, state3) {
if (isAdded) {
group.remove(d);
} else {
isDone = true;
}
recursiveAction(state3);
return disposableEmpty;
});
if (!isDone) {
group.add(d);
isAdded = true;
action(state, innerAction);
return group;
function innerAction(state2, dueTime1) {
var isAdded = false, isDone = false;
var d = scheduler[method](state2, dueTime1, scheduleWork);
if (!isDone) {
group.add(d);
isAdded = true;
}
function scheduleWork(_, state3) {
if (isAdded) {
group.remove(d);
} else {
isDone = true;
}
});
};
recursiveAction(state);
return group;
action(state3, innerAction);
return disposableEmpty;
}
}
}
function invokeRecDateRelative(s, p) {
return invokeRecDate(s, p, 'scheduleWithRelativeAndState');
}
function invokeRecDateAbsolute(s, p) {
return invokeRecDate(s, p, 'scheduleWithAbsoluteAndState');
}
function scheduleInnerRecursive(action, self) {

@@ -95,5 +106,3 @@ action(function(dt) { self(action, dt); });

schedulerProto.scheduleRecursiveWithRelativeAndState = function (state, dueTime, action) {
return this._scheduleRelative([state, action], dueTime, function (s, p) {
return invokeRecDate(s, p, 'scheduleWithRelativeAndState');
});
return this._scheduleRelative([state, action], dueTime, invokeRecDateRelative);
};

@@ -119,6 +128,4 @@

schedulerProto.scheduleRecursiveWithAbsoluteAndState = function (state, dueTime, action) {
return this._scheduleAbsolute([state, action], dueTime, function (s, p) {
return invokeRecDate(s, p, 'scheduleWithAbsoluteAndState');
});
return this._scheduleAbsolute([state, action], dueTime, invokeRecDateAbsolute);
};
}(Scheduler.prototype));
/** Provides a set of extension methods for virtual time scheduling. */
Rx.VirtualTimeScheduler = (function (__super__) {
var VirtualTimeScheduler = Rx.VirtualTimeScheduler = (function (__super__) {

@@ -4,0 +4,0 @@ function localNow() {

class Expression {
nodeType: ExpressionType;
nodeType: ExpressionType;
constructor(nodeType: ExpressionType) {
this.nodeType = nodeType;
}
constructor(nodeType: ExpressionType) {
this.nodeType = nodeType;
}
Accept(visitor: ExpressionVisitor): Expression {
throw new Error("not implemented");
}
accept(visitor: ExpressionVisitor): Expression {
throw new Error("not implemented");
}
static Constant(value: any): ConstantExpression {
return new ConstantExpression(value);
}
acceptGeneric<T>(visitor: ExpressionVisitorGeneric<T>): T {
throw new Error("not implemented");
}
static Parameter(name: string): ParameterExpression {
return new ParameterExpression(name);
}
toString(): string {
return new PrintVisitor().visit(this);
}
static Condition(test: Expression, ifTrue: Expression, ifFalse: Expression): ConditionalExpression {
return new ConditionalExpression(test, ifTrue, ifFalse);
}
toBonsai(): string {
return new BonsaiVisitor().visit(this);
}
static Add(left: Expression, right: Expression): BinaryExpression {
return new BinaryExpression(ExpressionType.Add, left, right);
}
static constant(value: any): ConstantExpression {
return new ConstantExpression(value);
}
static Subtract(left: Expression, right: Expression): BinaryExpression {
return new BinaryExpression(ExpressionType.Subtract, left, right);
}
static parameter(name: string): ParameterExpression {
return new ParameterExpression(name);
}
static Multiply(left: Expression, right: Expression): BinaryExpression {
return new BinaryExpression(ExpressionType.Multiply, left, right);
}
static condition(test: Expression, ifTrue: Expression, ifFalse: Expression): ConditionalExpression {
return new ConditionalExpression(test, ifTrue, ifFalse);
}
static Divide(left: Expression, right: Expression): BinaryExpression {
return new BinaryExpression(ExpressionType.Divide, left, right);
}
static add(left: Expression, right: Expression): BinaryExpression {
return new BinaryExpression(ExpressionType.Add, left, right);
}
static Modulo(left: Expression, right: Expression): BinaryExpression {
return new BinaryExpression(ExpressionType.Modulo, left, right);
}
static subtract(left: Expression, right: Expression): BinaryExpression {
return new BinaryExpression(ExpressionType.Subtract, left, right);
}
static And(left: Expression, right: Expression): BinaryExpression {
return new BinaryExpression(ExpressionType.And, left, right);
}
static multiply(left: Expression, right: Expression): BinaryExpression {
return new BinaryExpression(ExpressionType.Multiply, left, right);
}
static AndAlso(left: Expression, right: Expression): BinaryExpression {
return new BinaryExpression(ExpressionType.AndAlso, left, right);
}
static divide(left: Expression, right: Expression): BinaryExpression {
return new BinaryExpression(ExpressionType.Divide, left, right);
}
static Or(left: Expression, right: Expression): BinaryExpression {
return new BinaryExpression(ExpressionType.Or, left, right);
}
static modulo(left: Expression, right: Expression): BinaryExpression {
return new BinaryExpression(ExpressionType.Modulo, left, right);
}
static OrElse(left: Expression, right: Expression): BinaryExpression {
return new BinaryExpression(ExpressionType.OrElse, left, right);
}
static and(left: Expression, right: Expression): BinaryExpression {
return new BinaryExpression(ExpressionType.And, left, right);
}
static ExclusiveOr(left: Expression, right: Expression): BinaryExpression {
return new BinaryExpression(ExpressionType.ExclusiveOr, left, right);
}
static andAlso(left: Expression, right: Expression): BinaryExpression {
return new BinaryExpression(ExpressionType.AndAlso, left, right);
}
static Equal(left: Expression, right: Expression): BinaryExpression {
return new BinaryExpression(ExpressionType.Equal, left, right);
}
static or(left: Expression, right: Expression): BinaryExpression {
return new BinaryExpression(ExpressionType.Or, left, right);
}
static NotEqual(left: Expression, right: Expression): BinaryExpression {
return new BinaryExpression(ExpressionType.NotEqual, left, right);
}
static orElse(left: Expression, right: Expression): BinaryExpression {
return new BinaryExpression(ExpressionType.OrElse, left, right);
}
static LessThan(left: Expression, right: Expression): BinaryExpression {
return new BinaryExpression(ExpressionType.LessThan, left, right);
}
static exclusiveOr(left: Expression, right: Expression): BinaryExpression {
return new BinaryExpression(ExpressionType.ExclusiveOr, left, right);
}
static LessThanOrEqual(left: Expression, right: Expression): BinaryExpression {
return new BinaryExpression(ExpressionType.LessThanOrEqual, left, right);
}
static equal(left: Expression, right: Expression): BinaryExpression {
return new BinaryExpression(ExpressionType.Equal, left, right);
}
static GreaterThan(left: Expression, right: Expression): BinaryExpression {
return new BinaryExpression(ExpressionType.GreaterThan, left, right);
}
static notEqual(left: Expression, right: Expression): BinaryExpression {
return new BinaryExpression(ExpressionType.NotEqual, left, right);
}
static GreaterThanOrEqual(left: Expression, right: Expression): BinaryExpression {
return new BinaryExpression(ExpressionType.GreaterThanOrEqual, left, right);
}
static lessThan(left: Expression, right: Expression): BinaryExpression {
return new BinaryExpression(ExpressionType.LessThan, left, right);
}
static LeftShift(left: Expression, right: Expression): BinaryExpression {
return new BinaryExpression(ExpressionType.LeftShift, left, right);
}
static lessThanOrEqual(left: Expression, right: Expression): BinaryExpression {
return new BinaryExpression(ExpressionType.LessThanOrEqual, left, right);
}
static RightShift(left: Expression, right: Expression): BinaryExpression {
return new BinaryExpression(ExpressionType.RightShift, left, right);
}
static greaterThan(left: Expression, right: Expression): BinaryExpression {
return new BinaryExpression(ExpressionType.GreaterThan, left, right);
}
static Not(operand: Expression): UnaryExpression {
return new UnaryExpression(ExpressionType.Not, operand);
}
static greaterThanOrEqual(left: Expression, right: Expression): BinaryExpression {
return new BinaryExpression(ExpressionType.GreaterThanOrEqual, left, right);
}
static UnaryPlus(operand: Expression): UnaryExpression {
return new UnaryExpression(ExpressionType.UnaryPlus, operand);
}
static leftShift(left: Expression, right: Expression): BinaryExpression {
return new BinaryExpression(ExpressionType.LeftShift, left, right);
}
static Negate(operand: Expression): UnaryExpression {
return new UnaryExpression(ExpressionType.Negate, operand);
}
static rightShift(left: Expression, right: Expression): BinaryExpression {
return new BinaryExpression(ExpressionType.RightShift, left, right);
}
static OnesComplement(operand: Expression): UnaryExpression {
return new UnaryExpression(ExpressionType.OnesComplement, operand);
}
static not(operand: Expression): UnaryExpression {
return new UnaryExpression(ExpressionType.Not, operand);
}
static Lambda<T extends Function>(body: Expression, ...parameters: ParameterExpression[]): LambdaExpression<T> {
return new LambdaExpression<T>(body, parameters);
}
static unaryPlus(operand: Expression): UnaryExpression {
return new UnaryExpression(ExpressionType.UnaryPlus, operand);
}
static Invoke(expression: Expression, ...args: Expression[]): InvocationExpression {
return new InvocationExpression(expression, args);
}
static negate(operand: Expression): UnaryExpression {
return new UnaryExpression(ExpressionType.Negate, operand);
}
static New(typeName: string, ...args: Expression[]): NewExpression {
return new NewExpression(typeName, args);
}
static onesComplement(operand: Expression): UnaryExpression {
return new UnaryExpression(ExpressionType.OnesComplement, operand);
}
static Call(obj: Expression, methodName: string, ...args: Expression[]): CallExpression {
return new CallExpression(obj, methodName, args);
}
static lambda<T extends Function>(body: Expression, ...parameters: ParameterExpression[]): LambdaExpression<T> {
return new LambdaExpression<T>(body, parameters);
}
static Member(obj: Expression, memberName: string): MemberExpression {
return new MemberExpression(obj, memberName);
}
static invoke(expression: Expression, ...args: Expression[]): InvocationExpression {
return new InvocationExpression(expression, args);
}
static Index(obj: Expression, ...args: Expression[]): IndexExpression {
return new IndexExpression(obj, args);
}
static new(typeName: string, ...args: Expression[]): NewExpression {
return new NewExpression(typeName, args);
}
static functionCall(obj: Expression, methodName: string, ...args: Expression[]): FunctionCallExpression {
return new FunctionCallExpression(obj, methodName, args);
}
static member(obj: Expression, memberName: string): MemberExpression {
return new MemberExpression(obj, memberName);
}
static index(obj: Expression, ...args: Expression[]): IndexExpression {
return new IndexExpression(obj, args);
}
}
class ExpressionVisitorGeneric<T> {
visit(node: Expression): T {
if (node === null) {
return null;
}
return node.acceptGeneric(this);
}
visitConstant(node: ConstantExpression): T { throw new Error("not implemented"); }
visitParameter(node: ParameterExpression): T { throw new Error("not implemented"); }
visitBinary(node: BinaryExpression): T { throw new Error("not implemented"); }
visitUnary(node: UnaryExpression): T { throw new Error("not implemented"); }
visitConditional(node: ConditionalExpression): T { throw new Error("not implemented"); }
visitLambda<TFunction extends Function>(node: LambdaExpression<TFunction>): T { throw new Error("not implemented"); }
visitInvoke(node: InvocationExpression): T { throw new Error("not implemented"); }
visitCall(node: FunctionCallExpression): T { throw new Error("not implemented"); }
visitNew(node: NewExpression): T { throw new Error("not implemented"); }
visitMember(node: MemberExpression): T { throw new Error("not implemented"); }
visitIndex(node: IndexExpression): T { throw new Error("not implemented"); }
visitMany<E extends Expression>(nodes: E[]): T[] {
var res = new Array<T>(nodes.length);
for (var i = 0; i < nodes.length; i++) {
var oldNode = nodes[i];
var newNode = <T>this.visit(oldNode);
res[i] = newNode;
}
return res;
}
}
class ExpressionVisitor {
Visit(node: Expression): Expression {
if (node === null) {
return null;
visit(node: Expression): Expression {
if (node === null) {
return null;
}
return node.accept(this);
}
return node.Accept(this);
}
VisitConstant(node: ConstantExpression): Expression {
return node;
}
visitConstant(node: ConstantExpression): Expression {
return node;
}
VisitParameter(node: ParameterExpression): Expression {
return node;
}
visitParameter(node: ParameterExpression): Expression {
return node;
}
VisitBinary(node: BinaryExpression): Expression {
return node.Update(this.Visit(node.left), this.Visit(node.right));
}
visitBinary(node: BinaryExpression): Expression {
return node.update(this.visit(node.left), this.visit(node.right));
}
VisitUnary(node: UnaryExpression): Expression {
return node.Update(this.Visit(node.operand));
}
visitUnary(node: UnaryExpression): Expression {
return node.update(this.visit(node.operand));
}
VisitConditional(node: ConditionalExpression): Expression {
return node.Update(this.Visit(node.test), this.Visit(node.ifTrue), this.Visit(node.ifFalse));
}
visitConditional(node: ConditionalExpression): Expression {
return node.update(this.visit(node.test), this.visit(node.ifTrue), this.visit(node.ifFalse));
}
VisitLambda<T extends Function>(node: LambdaExpression<T>): Expression {
return node.Update(this.Visit(node.body), this.VisitMany(node.parameters));
}
visitLambda<T extends Function>(node: LambdaExpression<T>): Expression {
return node.update(this.visit(node.body), this.visitMany(node.parameters));
}
VisitInvoke(node: InvocationExpression): Expression {
return node.Update(this.Visit(node.expression), this.VisitMany(node.args));
}
visitInvoke(node: InvocationExpression): Expression {
return node.update(this.visit(node.expression), this.visitMany(node.args));
}
VisitCall(node: CallExpression): Expression {
return node.Update(this.Visit(node.obj), this.VisitMany(node.args));
}
visitCall(node: FunctionCallExpression): Expression {
return node.update(this.visit(node.obj), this.visitMany(node.args));
}
VisitNew(node: NewExpression): Expression {
return node.Update(this.VisitMany(node.args));
}
visitNew(node: NewExpression): Expression {
return node.update(this.visitMany(node.args));
}
VisitMember(node: MemberExpression): Expression {
return node.Update(this.Visit(node.obj));
}
visitMember(node: MemberExpression): Expression {
return node.update(this.visit(node.obj));
}
VisitIndex(node: IndexExpression): Expression {
return node.Update(this.Visit(node.obj), this.VisitMany(node.args));
}
visitIndex(node: IndexExpression): Expression {
return node.update(this.visit(node.obj), this.visitMany(node.args));
}
VisitMany<T extends Expression>(nodes: T[]): T[] {
var res = new Array<T>(nodes.length);
visitMany<T extends Expression>(nodes: T[]): T[] {
var res = new Array<T>(nodes.length);
for (var i = 0; i < nodes.length; i++) {
var oldNode = nodes[i];
var newNode = <T>this.Visit(oldNode);
res[i] = newNode;
for (var i = 0; i < nodes.length; i++) {
var oldNode = nodes[i];
var newNode = <T>this.visit(oldNode);
res[i] = newNode;
}
return res;
}
return res;
}
}
class ConstantExpression extends Expression {
_value: any;
_value: any;
constructor(value: any) {
super(ExpressionType.Constant);
this._value = value;
}
constructor(value: any) {
super(ExpressionType.Constant);
this._value = value;
}
get value(): any {
return this._value;
}
get value(): any {
return this._value;
}
Accept(visitor: ExpressionVisitor): Expression {
return visitor.VisitConstant(this);
}
accept(visitor: ExpressionVisitor): Expression {
return visitor.visitConstant(this);
}
acceptGeneric<T>(visitor: ExpressionVisitorGeneric<T>): T {
return visitor.visitConstant(this);
}
}
class ParameterExpression extends Expression {
_name: string;
_name: string;
constructor(name: string) {
super(ExpressionType.Parameter);
this._name = name;
}
constructor(name: string) {
super(ExpressionType.Parameter);
this._name = name;
}
get name(): string {
return this._name;
}
get name(): string {
return this._name;
}
Accept(visitor: ExpressionVisitor): Expression {
return visitor.VisitParameter(this);
}
accept(visitor: ExpressionVisitor): Expression {
return visitor.visitParameter(this);
}
acceptGeneric<T>(visitor: ExpressionVisitorGeneric<T>): T {
return visitor.visitParameter(this);
}
}
class UnaryExpression extends Expression {
_operand: Expression;
_operand: Expression;
constructor(nodeType: ExpressionType, operand: Expression) {
super(nodeType);
this._operand = operand;
}
constructor(nodeType: ExpressionType, operand: Expression) {
super(nodeType);
this._operand = operand;
}
get operand(): Expression {
return this._operand;
}
get operand(): Expression {
return this._operand;
}
Accept(visitor: ExpressionVisitor): Expression {
return visitor.VisitUnary(this);
}
accept(visitor: ExpressionVisitor): Expression {
return visitor.visitUnary(this);
}
Update(operand: Expression): UnaryExpression {
if (operand !== this._operand) {
return new UnaryExpression(this.nodeType, operand);
acceptGeneric<T>(visitor: ExpressionVisitorGeneric<T>): T {
return visitor.visitUnary(this);
}
return this;
}
update(operand: Expression): UnaryExpression {
if (operand !== this._operand) {
return new UnaryExpression(this.nodeType, operand);
}
return this;
}
}
class BinaryExpression extends Expression {
_left: Expression;
_right: Expression;
_left: Expression;
_right: Expression;
constructor(nodeType: ExpressionType, left: Expression, right: Expression) {
super(nodeType);
this._left = left;
this._right = right;
}
constructor(nodeType: ExpressionType, left: Expression, right: Expression) {
super(nodeType);
this._left = left;
this._right = right;
}
get left(): Expression {
return this._left;
}
get left(): Expression {
return this._left;
}
get right(): Expression {
return this._right;
}
get right(): Expression {
return this._right;
}
Accept(visitor: ExpressionVisitor): Expression {
return visitor.VisitBinary(this);
}
accept(visitor: ExpressionVisitor): Expression {
return visitor.visitBinary(this);
}
Update(left: Expression, right: Expression): BinaryExpression {
if (left !== this._left || right !== this._right) {
return new BinaryExpression(this.nodeType, left, right);
acceptGeneric<T>(visitor: ExpressionVisitorGeneric<T>): T {
return visitor.visitBinary(this);
}
return this;
}
update(left: Expression, right: Expression): BinaryExpression {
if (left !== this._left || right !== this._right) {
return new BinaryExpression(this.nodeType, left, right);
}
return this;
}
}
class ConditionalExpression extends Expression {
_test: Expression;
_ifTrue: Expression;
_ifFalse: Expression;
_test: Expression;
_ifTrue: Expression;
_ifFalse: Expression;
constructor(test: Expression, ifTrue: Expression, ifFalse: Expression) {
super(ExpressionType.Condition);
this._test = test;
this._ifTrue = ifTrue;
this._ifFalse = ifFalse;
}
constructor(test: Expression, ifTrue: Expression, ifFalse: Expression) {
super(ExpressionType.Condition);
this._test = test;
this._ifTrue = ifTrue;
this._ifFalse = ifFalse;
}
get test(): Expression {
return this._test;
}
get test(): Expression {
return this._test;
}
get ifTrue(): Expression {
return this._ifTrue;
}
get ifTrue(): Expression {
return this._ifTrue;
}
get ifFalse(): Expression {
return this._ifTrue;
}
get ifFalse(): Expression {
return this._ifTrue;
}
Accept(visitor: ExpressionVisitor): Expression {
return visitor.VisitConditional(this);
}
accept(visitor: ExpressionVisitor): Expression {
return visitor.visitConditional(this);
}
Update(test: Expression, ifTrue: Expression, ifFalse: Expression): ConditionalExpression {
if (test !== this._test || ifTrue !== this._ifTrue || ifFalse !== this._ifFalse) {
return new ConditionalExpression(test, ifTrue, ifFalse);
acceptGeneric<T>(visitor: ExpressionVisitorGeneric<T>): T {
return visitor.visitConditional(this);
}
return this;
}
update(test: Expression, ifTrue: Expression, ifFalse: Expression): ConditionalExpression {
if (test !== this._test || ifTrue !== this._ifTrue || ifFalse !== this._ifFalse) {
return new ConditionalExpression(test, ifTrue, ifFalse);
}
return this;
}
}
class LambdaExpression<T extends Function> extends Expression {
_body: Expression;
_parameters: ParameterExpression[];
class LambdaExpression<TFunction extends Function> extends Expression {
_body: Expression;
_parameters: ParameterExpression[];
constructor(body: Expression, parameters: ParameterExpression[]) {
super(ExpressionType.Lambda);
this._body = body;
this._parameters = parameters;
}
constructor(body: Expression, parameters: ParameterExpression[]) {
super(ExpressionType.Lambda);
this._body = body;
this._parameters = parameters;
}
get body(): Expression {
return this._body;
}
get body(): Expression {
return this._body;
}
get parameters(): ParameterExpression[] {
return this._parameters;
}
get parameters(): ParameterExpression[] {
return this._parameters;
}
Accept(visitor: ExpressionVisitor): Expression {
return visitor.VisitLambda<T>(this);
}
accept(visitor: ExpressionVisitor): Expression {
return visitor.visitLambda<TFunction>(this);
}
Update(body: Expression, parameters: ParameterExpression[]): LambdaExpression<T> {
if (body !== this._body || parameters !== this._parameters) {
return new LambdaExpression<T>(body, parameters);
acceptGeneric<T>(visitor: ExpressionVisitorGeneric<T>): T {
return visitor.visitLambda<TFunction>(this);
}
return this;
}
update(body: Expression, parameters: ParameterExpression[]): LambdaExpression<TFunction> {
if (body !== this._body || parameters !== this._parameters) {
return new LambdaExpression<TFunction>(body, parameters);
}
Compile(): T {
var comp = new LambdaCompiler();
comp.Visit(this);
var code = comp.code;
code = code.replace(/\"/g, "\\\""); // TODO: more escape sequences
code = "new Function(\"return " + code + ";\")";
code = code.replace(/\r?\n|\r/g, "");
alert(code);
return <T>eval(code)();
}
return this;
}
compileToFunction(debug?: boolean): string {
var comp = new LambdaCompiler();
comp.visit(this);
var code = comp.code;
code = code.replace(/\"/g, "\\\""); // TODO: more escape sequences
code = "new Function(\"return " + code + ";\")";
code = code.replace(/\r?\n|\r/g, "");
if (debug) {
alert(code);
}
return code;
}
compile(debug?: boolean): TFunction {
var code = this.compileToFunction(debug);
return <TFunction>eval(code)();
}
}
class InvocationExpression extends Expression {
_expression: Expression;
_args: Expression[];
_expression: Expression;
_args: Expression[];
constructor(expression: Expression, args: Expression[]) {
super(ExpressionType.Invoke);
this._expression = expression;
this._args = args;
}
constructor(expression: Expression, args: Expression[]) {
super(ExpressionType.Invoke);
this._expression = expression;
this._args = args;
}
get expression(): Expression {
return this._expression;
}
get expression(): Expression {
return this._expression;
}
get args(): Expression[] {
return this._args;
}
get args(): Expression[] {
return this._args;
}
Accept(visitor: ExpressionVisitor): Expression {
return visitor.VisitInvoke(this);
}
accept(visitor: ExpressionVisitor): Expression {
return visitor.visitInvoke(this);
}
Update(expression: Expression, args: Expression[]): InvocationExpression {
if (expression !== this._expression || args !== this._args) {
return new InvocationExpression(expression, args);
acceptGeneric<T>(visitor: ExpressionVisitorGeneric<T>): T {
return visitor.visitInvoke(this);
}
return this;
}
update(expression: Expression, args: Expression[]): InvocationExpression {
if (expression !== this._expression || args !== this._args) {
return new InvocationExpression(expression, args);
}
return this;
}
}
class CallExpression extends Expression {
_expression: Expression;
_method: string;
_args: Expression[];
class FunctionCallExpression extends Expression {
_expression: Expression;
_method: string;
_args: Expression[];
constructor(expression: Expression, methodName: string, args: Expression[]) {
super(ExpressionType.Call);
this._expression = expression;
this._method = methodName;
this._args = args;
}
constructor(expression: Expression, methodName: string, args: Expression[]) {
super(ExpressionType.Call);
this._expression = expression;
this._method = methodName;
this._args = args;
}
get obj(): Expression {
return this._expression;
}
get obj(): Expression {
return this._expression;
}
get method(): string {
return this._method;
}
get method(): string {
return this._method;
}
get args(): Expression[] {
return this._args;
}
get args(): Expression[] {
return this._args;
}
Accept(visitor: ExpressionVisitor): Expression {
return visitor.VisitCall(this);
}
accept(visitor: ExpressionVisitor): Expression {
return visitor.visitCall(this);
}
Update(expression: Expression, args: Expression[]): CallExpression {
if (expression !== this._expression || args !== this._args) {
return new CallExpression(expression, this._method, args);
acceptGeneric<T>(visitor: ExpressionVisitorGeneric<T>): T {
return visitor.visitCall(this);
}
return this;
}
update(expression: Expression, args: Expression[]): FunctionCallExpression {
if (expression !== this._expression || args !== this._args) {
return new FunctionCallExpression(expression, this._method, args);
}
return this;
}
}
class IndexExpression extends Expression {
_expression: Expression;
_args: Expression[];
_expression: Expression;
_args: Expression[];
constructor(expression: Expression, args: Expression[]) {
super(ExpressionType.Index);
this._expression = expression;
this._args = args;
}
constructor(expression: Expression, args: Expression[]) {
super(ExpressionType.Index);
this._expression = expression;
this._args = args;
}
get obj(): Expression {
return this._expression;
}
get obj(): Expression {
return this._expression;
}
get args(): Expression[] {
return this._args;
}
get args(): Expression[] {
return this._args;
}
Accept(visitor: ExpressionVisitor): Expression {
return visitor.VisitIndex(this);
}
accept(visitor: ExpressionVisitor): Expression {
return visitor.visitIndex(this);
}
Update(expression: Expression, args: Expression[]): IndexExpression {
if (expression !== this._expression || args !== this._args) {
return new IndexExpression(expression, args);
acceptGeneric<T>(visitor: ExpressionVisitorGeneric<T>): T {
return visitor.visitIndex(this);
}
return this;
}
update(expression: Expression, args: Expression[]): IndexExpression {
if (expression !== this._expression || args !== this._args) {
return new IndexExpression(expression, args);
}
return this;
}
}
class NewExpression extends Expression {
_type: string;
_args: Expression[];
_type: string;
_args: Expression[];
constructor(typeName: string, args: Expression[]) {
super(ExpressionType.New);
this._type = typeName;
this._args = args;
}
constructor(typeName: string, args: Expression[]) {
super(ExpressionType.New);
this._type = typeName;
this._args = args;
}
get type(): string {
return this._type;
}
get type(): string {
return this._type;
}
get args(): Expression[] {
return this._args;
}
get args(): Expression[] {
return this._args;
}
Accept(visitor: ExpressionVisitor): Expression {
return visitor.VisitNew(this);
}
accept(visitor: ExpressionVisitor): Expression {
return visitor.visitNew(this);
}
Update(args: Expression[]): NewExpression {
if (args !== this._args) {
return new NewExpression(this._type, args);
acceptGeneric<T>(visitor: ExpressionVisitorGeneric<T>): T {
return visitor.visitNew(this);
}
return this;
}
update(args: Expression[]): NewExpression {
if (args !== this._args) {
return new NewExpression(this._type, args);
}
return this;
}
}
class MemberExpression extends Expression {
_obj: Expression;
_member: string;
_obj: Expression;
_member: string;
constructor(obj: Expression, memberName: string) {
super(ExpressionType.Member);
this._obj = obj;
this._member = memberName;
}
constructor(obj: Expression, memberName: string) {
super(ExpressionType.Member);
this._obj = obj;
this._member = memberName;
}
get obj(): Expression {
return this._obj;
}
get obj(): Expression {
return this._obj;
}
get member(): string {
return this._member;
}
get member(): string {
return this._member;
}
Accept(visitor: ExpressionVisitor): Expression {
return visitor.VisitMember(this);
}
accept(visitor: ExpressionVisitor): Expression {
return visitor.visitMember(this);
}
Update(obj: Expression): MemberExpression {
if (obj !== this._obj) {
return new MemberExpression(obj, this._member);
acceptGeneric<T>(visitor: ExpressionVisitorGeneric<T>): T {
return visitor.visitMember(this);
}
return this;
}
update(obj: Expression): MemberExpression {
if (obj !== this._obj) {
return new MemberExpression(obj, this._member);
}
return this;
}
}
class LambdaCompiler extends ExpressionVisitor {
_stack: string[];
_stack: string[];
constructor() {
super();
this._stack = new Array<string>();
}
constructor() {
super();
this._stack = new Array<string>();
}
get code(): string {
if (this._stack.length != 1)
throw new Error("invalid code generation");
get code(): string {
if (this._stack.length != 1)
throw new Error("invalid code generation");
return this._stack[0];
}
VisitConstant(node: ConstantExpression): Expression {
var value = "";
if (typeof node.value == "string") {
value = "\"" + node.value + "\""; // TODO: escape characters
return this._stack[0];
}
else if (node.value instanceof Array) {
value = JSON.stringify(node.value);
}
else if (node.value === undefined) {
value = "undefined";
}
else {
value = node.value.toString(); // TODO
}
this._stack.push(value);
visitConstant(node: ConstantExpression): Expression {
var value = "";
return node;
}
if (typeof node.value == "string") {
value = "\"" + node.value + "\""; // TODO: escape characters
}
else if (node.value instanceof Array) {
value = JSON.stringify(node.value);
}
else if (node.value === undefined) {
value = "undefined";
}
else {
value = node.value.toString(); // TODO
}
VisitUnary(node: UnaryExpression): Expression {
this.Visit(node.operand);
this._stack.push(value);
var o = this._stack.pop();
var i = "";
switch (node.nodeType) {
case ExpressionType.Negate:
i = "-";
break;
case ExpressionType.UnaryPlus:
i = "+";
break;
case ExpressionType.Not:
i = "!";
break;
case ExpressionType.OnesComplement:
i = "~";
break;
return node;
}
var res = "(" + i + "" + o + ")";
this._stack.push(res);
visitUnary(node: UnaryExpression): Expression {
this.visit(node.operand);
return node;
}
var o = this._stack.pop();
var i = "";
VisitBinary(node: BinaryExpression): Expression {
this.Visit(node.left);
this.Visit(node.right);
switch (node.nodeType) {
case ExpressionType.Negate:
i = "-";
break;
case ExpressionType.UnaryPlus:
i = "+";
break;
case ExpressionType.Not:
i = "!";
break;
case ExpressionType.OnesComplement:
i = "~";
break;
}
var r = this._stack.pop();
var l = this._stack.pop();
var i = "";
var res = "(" + i + "" + o + ")";
this._stack.push(res);
switch (node.nodeType) {
case ExpressionType.Add:
i = "+";
break;
case ExpressionType.Subtract:
i = "-";
break;
case ExpressionType.Multiply:
i = "*";
break;
case ExpressionType.Divide:
i = "/";
break;
case ExpressionType.Modulo:
i = "%";
break;
case ExpressionType.And:
i = "&";
break;
case ExpressionType.Or:
i = "|";
break;
case ExpressionType.AndAlso:
i = "&&";
break;
case ExpressionType.OrElse:
i = "||";
break;
case ExpressionType.ExclusiveOr:
i = "^";
break;
case ExpressionType.Equal:
i = "===";
break;
case ExpressionType.NotEqual:
i = "!==";
break;
case ExpressionType.LessThan:
i = "<";
break;
case ExpressionType.LessThanOrEqual:
i = "<=";
break;
case ExpressionType.GreaterThan:
i = ">";
break;
case ExpressionType.GreaterThanOrEqual:
i = ">=";
break;
case ExpressionType.LeftShift:
i = "<<";
break;
case ExpressionType.RightShift:
i = ">>";
break;
return node;
}
var res = "(" + l + " " + i + " " + r + ")";
this._stack.push(res);
visitBinary(node: BinaryExpression): Expression {
this.visit(node.left);
this.visit(node.right);
return node;
}
var r = this._stack.pop();
var l = this._stack.pop();
var i = "";
VisitConditional(node: ConditionalExpression): Expression {
this.Visit(node.test);
this.Visit(node.ifTrue);
this.Visit(node.ifFalse);
switch (node.nodeType) {
case ExpressionType.Add:
i = "+";
break;
case ExpressionType.Subtract:
i = "-";
break;
case ExpressionType.Multiply:
i = "*";
break;
case ExpressionType.Divide:
i = "/";
break;
case ExpressionType.Modulo:
i = "%";
break;
case ExpressionType.And:
i = "&";
break;
case ExpressionType.Or:
i = "|";
break;
case ExpressionType.AndAlso:
i = "&&";
break;
case ExpressionType.OrElse:
i = "||";
break;
case ExpressionType.ExclusiveOr:
i = "^";
break;
case ExpressionType.Equal:
i = "===";
break;
case ExpressionType.NotEqual:
i = "!==";
break;
case ExpressionType.LessThan:
i = "<";
break;
case ExpressionType.LessThanOrEqual:
i = "<=";
break;
case ExpressionType.GreaterThan:
i = ">";
break;
case ExpressionType.GreaterThanOrEqual:
i = ">=";
break;
case ExpressionType.LeftShift:
i = "<<";
break;
case ExpressionType.RightShift:
i = ">>";
break;
}
var f = this._stack.pop();
var t = this._stack.pop();
var c = this._stack.pop();
var res = "(" + l + " " + i + " " + r + ")";
this._stack.push(res);
var res = "(" + c + " ? " + t + " : " + f + ")";
return node;
}
this._stack.push(res);
visitConditional(node: ConditionalExpression): Expression {
this.visit(node.test);
this.visit(node.ifTrue);
this.visit(node.ifFalse);
return node;
}
var f = this._stack.pop();
var t = this._stack.pop();
var c = this._stack.pop();
VisitParameter(node: ParameterExpression): Expression {
this._stack.push(node.name);
var res = "(" + c + " ? " + t + " : " + f + ")";
return node;
}
this._stack.push(res);
VisitLambda<T extends Function>(node: LambdaExpression<T>): Expression {
this.VisitMany(node.parameters);
this.Visit(node.body);
return node;
}
var body = this._stack.pop();
visitParameter(node: ParameterExpression): Expression {
this._stack.push(node.name);
var n = node.parameters.length;
var args = new Array<string>(n);
for (var i = 0; i < n; i++) {
args[n - i - 1] = this._stack.pop();
return node;
}
var allArgs = args.join(", ");
visitLambda<T extends Function>(node: LambdaExpression<T>): Expression {
this.visitMany(node.parameters);
this.visit(node.body);
var res = "function(" + allArgs + ") { return " + body + "; }";
var body = this._stack.pop();
this._stack.push(res);
var n = node.parameters.length;
var args = new Array<string>(n);
for (var i = 0; i < n; i++) {
args[n - i - 1] = this._stack.pop();
}
return node;
}
var allArgs = args.join(", ");
VisitInvoke(node: InvocationExpression): Expression {
this.Visit(node.expression);
this.VisitMany(node.args);
var res = "function(" + allArgs + ") { return " + body + "; }";
var n = node.args.length;
var args = new Array<string>(n);
for (var i = 0; i < n; i++) {
args[n - i - 1] = this._stack.pop();
this._stack.push(res);
return node;
}
var argList = args.join(", ");
visitInvoke(node: InvocationExpression): Expression {
this.visit(node.expression);
this.visitMany(node.args);
var func = this._stack.pop();
var n = node.args.length;
var args = new Array<string>(n);
for (var i = 0; i < n; i++) {
args[n - i - 1] = this._stack.pop();
}
var res = func + "(" + argList + ")";
var argList = args.join(", ");
this._stack.push(res);
var func = this._stack.pop();
return node;
}
var res = func + "(" + argList + ")";
VisitCall(node: CallExpression): Expression {
var res = "";
this._stack.push(res);
if (node.obj !== null) {
this.Visit(node.obj);
res = this._stack.pop() + ".";
return node;
}
this.VisitMany(node.args);
visitCall(node: FunctionCallExpression): Expression {
var res = "";
var n = node.args.length;
var args = new Array<string>(n);
for (var i = 0; i < n; i++) {
args[n - i - 1] = this._stack.pop();
}
if (node.obj !== null) {
this.visit(node.obj);
res = this._stack.pop() + ".";
}
var argList = args.join(", ");
this.visitMany(node.args);
res += node.method + "(" + argList + ")";
var n = node.args.length;
var args = new Array<string>(n);
for (var i = 0; i < n; i++) {
args[n - i - 1] = this._stack.pop();
}
this._stack.push(res);
var argList = args.join(", ");
return node;
}
res += node.method + "(" + argList + ")";
VisitNew(node: NewExpression): Expression {
this.VisitMany(node.args);
this._stack.push(res);
var n = node.args.length;
var args = new Array<string>(n);
for (var i = 0; i < n; i++) {
args[n - i - 1] = this._stack.pop();
return node;
}
var argList = args.join(", ");
visitNew(node: NewExpression): Expression {
this.visitMany(node.args);
var res = "new " + node.type + "(" + argList + ")";
var n = node.args.length;
var args = new Array<string>(n);
for (var i = 0; i < n; i++) {
args[n - i - 1] = this._stack.pop();
}
this._stack.push(res);
var argList = args.join(", ");
return node;
}
var res = "new " + node.type + "(" + argList + ")";
VisitMember(node: MemberExpression): Expression {
var res = "";
this._stack.push(res);
if (node.obj !== null) {
this.Visit(node.obj);
res = this._stack.pop() + ".";
return node;
}
res += node.member;
visitMember(node: MemberExpression): Expression {
var res = "";
this._stack.push(res);
if (node.obj !== null) {
this.visit(node.obj);
res = this._stack.pop() + ".";
}
return node;
}
res += node.member;
VisitIndex(node: IndexExpression): Expression {
this.Visit(node.obj);
var res = this._stack.pop();
this._stack.push(res);
this.VisitMany(node.args);
var n = node.args.length;
var args = new Array<string>(n);
for (var i = 0; i < n; i++) {
args[n - i - 1] = this._stack.pop();
return node;
}
var argList = args.join(", ");
visitIndex(node: IndexExpression): Expression {
this.visit(node.obj);
var res = this._stack.pop();
res += "[" + argList + "]";
this.visitMany(node.args);
this._stack.push(res);
var n = node.args.length;
var args = new Array<string>(n);
for (var i = 0; i < n; i++) {
args[n - i - 1] = this._stack.pop();
}
return node;
}
var argList = args.join(", ");
res += "[" + argList + "]";
this._stack.push(res);
return node;
}
}
class FreeVariableScanner extends ExpressionVisitor {
_stack: Expression[][];
_result: Expression[];
_stack: Expression[][];
_result: Expression[];
constructor() {
super();
this._stack = new Array<Expression[]>();
this._result = new Array<Expression>();
}
constructor() {
super();
this._stack = new Array<Expression[]>();
this._result = new Array<Expression>();
}
get result(): Expression[] {
return this._result;
}
get result(): Expression[] {
return this._result;
}
VisitParameter(node: ParameterExpression): Expression {
var found = false;
visitParameter(node: ParameterExpression): Expression {
var found = false;
for (var i = this._stack.length - 1; i >= 0; i--) {
if (this._stack[i].indexOf(node) >= 0) {
found = true;
break;
}
}
for (var i = this._stack.length - 1; i >= 0; i--) {
if (this._stack[i].indexOf(node) >= 0) {
found = true;
break;
}
}
if (!found) {
this._result.push(node);
if (!found) {
this._result.push(node);
}
return node;
}
return node;
}
visitLambda<T extends Function>(node: LambdaExpression<T>): Expression {
this._stack.push(node.parameters);
VisitLambda<T extends Function>(node: LambdaExpression<T>): Expression {
this._stack.push(node.parameters);
this.visit(node.body);
this.Visit(node.body);
this._stack.pop();
this._stack.pop();
return node;
}
return node;
}
}
enum ExpressionType {
Constant,
Parameter,
Lambda,
Add,
Subtract,
Multiply,
Divide,
Modulo,
And,
Or,
AndAlso,
OrElse,
ExclusiveOr,
Equal,
NotEqual,
LessThan,
LessThanOrEqual,
GreaterThan,
GreaterThanOrEqual,
LeftShift,
RightShift,
Invoke,
Not,
Negate,
UnaryPlus,
OnesComplement,
Condition,
New,
Call,
Member,
Index,
Constant,
Parameter,
Lambda,
Add,
Subtract,
Multiply,
Divide,
Modulo,
And,
Or,
AndAlso,
OrElse,
ExclusiveOr,
Equal,
NotEqual,
LessThan,
LessThanOrEqual,
GreaterThan,
GreaterThanOrEqual,
LeftShift,
RightShift,
Invoke,
Not,
Negate,
UnaryPlus,
OnesComplement,
Condition,
New,
Call,
Member,
Index,
}
class Binder extends ExpressionVisitor {
_stack: Expression[][];
_resources: any;
_stack: Expression[][];
_resources: any;
constructor(resources: any) {
super();
this._stack = new Array<Expression[]>();
this._resources = resources;
}
constructor(resources: any) {
super();
this._stack = new Array<Expression[]>();
this._resources = resources;
}
VisitParameter(node: ParameterExpression): Expression {
var found = false;
visitParameter(node: ParameterExpression): Expression {
var found = false;
for (var i = this._stack.length - 1; i >= 0; i--) {
if (this._stack[i].indexOf(node) >= 0) {
found = true;
break;
}
for (var i = this._stack.length - 1; i >= 0; i--) {
if (this._stack[i].indexOf(node) >= 0) {
found = true;
break;
}
}
if (!found) {
return Expression.constant(this._resources[node.name]);
}
return node;
}
if (!found) {
return Expression.Constant(this._resources[node.name]);
visitLambda<T extends Function>(node: LambdaExpression<T>): Expression {
this._stack.push(node.parameters);
this.visit(node.body);
this._stack.pop();
return node;
}
}
return node;
}
class PrintVisitor extends ExpressionVisitorGeneric<string> {
visitConstant(node: ConstantExpression): string {
return "Constant(" + node.value + ")";
}
VisitLambda<T extends Function>(node: LambdaExpression<T>): Expression {
this._stack.push(node.parameters);
visitParameter(node: ParameterExpression): string {
return "Parameter(" + node.name + ")";
}
this.Visit(node.body);
visitBinary(node: BinaryExpression): string {
return ExpressionType[node.nodeType] + "(" + this.visit(node.left) + ", " + this.visit(node.right) + ")";
}
this._stack.pop();
visitUnary(node: UnaryExpression): string {
return ExpressionType[node.nodeType] + "(" + this.visit(node.operand) + ")";
}
return node;
}
visitConditional(node: ConditionalExpression): string {
return "Conditional(" + this.visit(node.test) + ", " + this.visit(node.ifTrue) + ", " + this.visit(node.ifFalse) + ")";
}
visitLambda<T extends Function>(node: LambdaExpression<T>): string {
var body = this.visit(node.body);
var children = this.visitMany(node.parameters);
children.unshift(body);
return "Lambda(" + children.join(", ") + ")";
}
visitInvoke(node: InvocationExpression): string {
var expression = this.visit(node.expression);
var children = this.visitMany(node.args);
children.unshift(expression);
return "Invoke(" + children.join(", ") + ")";
}
visitCall(node: FunctionCallExpression): string {
var children = this.visitMany(node.args);
if (node.obj != null) {
children.unshift(this.visit(node.obj));
}
children.unshift(node.method);
return "Call(" + children.join(", ") + ")";
}
visitNew(node: NewExpression): string {
var children = this.visitMany(node.args);
children.unshift(node.type);
return "New(" + children.join(", ") + ")";
}
visitMember(node: MemberExpression): string {
var children = <string[]>[];
if (node.obj != null) {
children.unshift(this.visit(node.obj));
}
children.unshift(node.member);
return "Member(" + children.join(", ") + ")";
}
visitIndex(node: IndexExpression): string {
var children = this.visitMany(node.args);
if (node.obj != null) {
children.unshift(this.visit(node.obj));
}
return "Index(" + children.join(", ") + ")";
}
}
var resources =
{
"my://xs": [1, 2, 3, 4, 5],
"my://ss": ["bar", "foo", "qux"],
"rx://operators/filter": function (xs: any[], f: (any) => boolean) { return xs.filter(f); },
"rx://operators/map": function (xs: any[], f: (any) => any) { return xs.map(f); },
};
class BonsaiVisitor extends ExpressionVisitorGeneric<any> {
visitConstant(node: ConstantExpression): any {
return [ ":", node.value ];
}
var x = Expression.Parameter("x");
var f1 =
Expression.Invoke(
Expression.Parameter("rx://operators/map"),
Expression.Invoke(
Expression.Parameter("rx://operators/filter"),
Expression.Parameter("my://xs"),
Expression.Lambda<(number) => boolean>(
Expression.Equal(
Expression.Modulo(
x,
Expression.Constant(2)
),
Expression.Constant(0)
),
x
)
),
Expression.Lambda<(number) => boolean>(
Expression.Multiply(
x,
x
),
x
)
);
visitParameter(node: ParameterExpression): any {
return ["$", node.name];
}
var f2 =
Expression.Invoke(
Expression.Parameter("rx://operators/map"),
Expression.Parameter("my://ss"),
Expression.Lambda<(string) => string>(
Expression.Call(
x,
"substring",
Expression.Constant(1)
),
x
)
);
visitBinary(node: BinaryExpression): any {
var i = "";
var binder = new Binder(resources);
switch (node.nodeType) {
case ExpressionType.Add:
i = "+";
break;
case ExpressionType.Subtract:
i = "-";
break;
case ExpressionType.Multiply:
i = "*";
break;
case ExpressionType.Divide:
i = "/";
break;
case ExpressionType.Modulo:
i = "%";
break;
case ExpressionType.And:
i = "&";
break;
case ExpressionType.Or:
i = "|";
break;
case ExpressionType.AndAlso:
i = "&&";
break;
case ExpressionType.OrElse:
i = "||";
break;
case ExpressionType.ExclusiveOr:
i = "^";
break;
case ExpressionType.Equal:
i = "===";
break;
case ExpressionType.NotEqual:
i = "!==";
break;
case ExpressionType.LessThan:
i = "<";
break;
case ExpressionType.LessThanOrEqual:
i = "<=";
break;
case ExpressionType.GreaterThan:
i = ">";
break;
case ExpressionType.GreaterThanOrEqual:
i = ">=";
break;
case ExpressionType.LeftShift:
i = "<<";
break;
case ExpressionType.RightShift:
i = ">>";
break;
}
var b1 = Expression.Lambda<() => number[]>(binder.Visit(f1));
var c1 = b1.Compile();
var r1 = c1();
alert(r1.join(", "));
return [ i, this.visit(node.left), this.visit(node.right) ];
}
var b2 = Expression.Lambda<() => string[]>(binder.Visit(f2));
var c2 = b2.Compile();
var r2 = c2();
alert(r2.join(", "));
visitUnary(node: UnaryExpression): any {
var i = "";
switch (node.nodeType) {
case ExpressionType.Negate:
i = "-";
break;
case ExpressionType.UnaryPlus:
i = "+";
break;
case ExpressionType.Not:
i = "!";
break;
case ExpressionType.OnesComplement:
i = "~";
break;
}
return [i, this.visit(node.operand)];
}
visitConditional(node: ConditionalExpression): any {
return ["?:", this.visit(node.test), this.visit(node.ifTrue), this.visit(node.ifFalse) ];
}
visitLambda<T extends Function>(node: LambdaExpression<T>): any {
return ["=>", this.visit(node.body), this.visitMany(node.parameters)];
}
visitInvoke(node: InvocationExpression): any {
var expression = this.visit(node.expression);
var args = this.visitMany(node.args);
return ["()", expression, args];
}
visitCall(node: FunctionCallExpression): any {
var args = <any[]>[];
if (node.obj != null) {
args.unshift(this.visit(node.obj));
}
args.unshift(this.visitMany(node.args));
return [".()", node.method, args];
}
visitNew(node: NewExpression): any {
var args = this.visitMany(node.args);
return ["new", args];
}
visitMember(node: MemberExpression): any {
var res = [".", node.member];
if (node.obj != null) {
res.unshift(this.visit(node.obj));
}
return res;
}
visitIndex(node: IndexExpression): any {
throw new Error("not implemented");
}
}

@@ -6,2 +6,3 @@ // References

AnonymousObservable = Rx.AnonymousObservable,
AbstractObserver = Rx.internals.AbstractObserver,
disposableEmpty = Rx.Disposable.empty,

@@ -8,0 +9,0 @@ isEqual = Rx.internals.isEqual,

@@ -13,2 +13,3 @@ // Aliases

isScheduler = Rx.Scheduler.isScheduler,
slice = Array.prototype.slice;
isPromise = Rx.helpers.isPromise,
isFunction = Rx.helpers.isFunction;
;(function (factory) {
var objectTypes = {
'boolean': false,
'function': true,
'object': true,
'number': false,
'string': false,
'undefined': false
};
var objectTypes = {
'function': true,
'object': true
};
var root = (objectTypes[typeof window] && window) || this,
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = objectTypes[typeof global] && global;
var
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeSelf = objectTypes[typeof self] && self.Object && self,
freeWindow = objectTypes[typeof window] && window && window.Object && window,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global;
if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) {
root = freeGlobal;
}
var root = root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this;
// Because of build optimizers
if (typeof define === 'function' && define.amd) {
define(['rx.binding', 'exports'], function (Rx, exports) {
root.Rx = factory(root, exports, Rx);
return root.Rx;
});
} else if (typeof module === 'object' && module && module.exports === freeExports) {
module.exports = factory(root, module.exports, require('./rx'));
} else {
root.Rx = factory(root, {}, root.Rx);
}
// Because of build optimizers
if (typeof define === 'function' && define.amd) {
define(['rx.binding', 'exports'], function (Rx, exports) {
root.Rx = factory(root, exports, Rx);
return root.Rx;
});
} else if (typeof module === 'object' && module && module.exports === freeExports) {
module.exports = factory(root, module.exports, require('./rx'));
} else {
root.Rx = factory(root, {}, root.Rx);
}
}.call(this, function (root, exp, Rx, undefined) {
// Defaults
var noop = Rx.helpers.noop = function () { },
notDefined = Rx.helpers.notDefined = function (x) { return typeof x === 'undefined'; },
identity = Rx.helpers.identity = function (x) { return x; },
pluck = Rx.helpers.pluck = function (property) { return function (x) { return x[property]; }; },
just = Rx.helpers.just = function (value) { return function () { return value; }; },
defaultNow = Rx.helpers.defaultNow = (function () { return !!Date.now ? Date.now : function () { return +new Date; }; }()),

@@ -13,4 +10,2 @@ defaultComparer = Rx.helpers.defaultComparer = function (x, y) { return isEqual(x, y); },

isPromise = Rx.helpers.isPromise = function (p) { return !!p && typeof p.subscribe !== 'function' && typeof p.then === 'function'; },
asArray = Rx.helpers.asArray = function () { return Array.prototype.slice.call(arguments); },
not = Rx.helpers.not = function (a) { return !a; },
isFunction = Rx.helpers.isFunction = (function () {

@@ -17,0 +12,0 @@ var isFn = function (value) {

// Defaults
var noop = Rx.helpers.noop = function () { },
notDefined = Rx.helpers.notDefined = function (x) { return typeof x === 'undefined'; },
identity = Rx.helpers.identity = function (x) { return x; },
pluck = Rx.helpers.pluck = function (property) { return function (x) { return x[property]; }; },
just = Rx.helpers.just = function (value) { return function () { return value; }; },
defaultNow = Rx.helpers.defaultNow = Date.now,

@@ -13,4 +10,2 @@ defaultComparer = Rx.helpers.defaultComparer = function (x, y) { return isEqual(x, y); },

isPromise = Rx.helpers.isPromise = function (p) { return !!p && typeof p.subscribe !== 'function' && typeof p.then === 'function'; },
asArray = Rx.helpers.asArray = function () { return Array.prototype.slice.call(arguments); },
not = Rx.helpers.not = function (a) { return !a; },
isFunction = Rx.helpers.isFunction = (function () {

@@ -17,0 +12,0 @@

@@ -18,3 +18,5 @@ var Observable = Rx.Observable,

isPromise = Rx.helpers.isPromise,
isFunction = Rx.helpers.isFunction,
bindCallback = Rx.internals.bindCallback,
observableFromPromise = Observable.fromPromise,
ArgumentOutOfRangeError = Rx.ArgumentOutOfRangeError;

@@ -26,3 +26,4 @@ // Aliases

isPromise = helpers.isPromise,
isFunction = helpers.isFunction,
isScheduler = Rx.Scheduler.isScheduler,
observableFromPromise = Observable.fromPromise;
;(function (undefined) {
var objectTypes = {
'boolean': false,
'function': true,
'object': true,
'number': false,
'string': false,
'undefined': false
'object': true
};
var root = (objectTypes[typeof window] && window) || this,
var
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeSelf = objectTypes[typeof self] && self.Object && self,
freeWindow = objectTypes[typeof window] && window && window.Object && window,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = objectTypes[typeof global] && global;
freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global;
if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) {
root = freeGlobal;
}
var root = root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this;

@@ -22,0 +18,0 @@ var Rx = {

@@ -16,2 +16,3 @@ // Aliases

$iterator$ = Rx.iterator,
doneEnumerator = Rx.doneEnumerator;
doneEnumerator = Rx.doneEnumerator,
bindCallback = Rx.internals.bindCallback;

@@ -5,3 +5,3 @@ // References

observableNever = Observable.never,
observableThrow = Observable.throwException,
observableThrow = Observable['throw'],
AnonymousObservable = Rx.AnonymousObservable,

@@ -13,2 +13,3 @@ AnonymousObserver = Rx.AnonymousObserver,

Observer = Rx.Observer,
observerCreate = Observer.create,
Subject = Rx.Subject,

@@ -28,2 +29,3 @@ internals = Rx.internals,

isPromise = helpers.isPromise,
isFunction = helpers.isFunction,
inherits = internals.inherits,

@@ -30,0 +32,0 @@ bindCallback = internals.bindCallback,

// Defaults
var noop = Rx.helpers.noop = function () { },
notDefined = Rx.helpers.notDefined = function (x) { return typeof x === 'undefined'; },
identity = Rx.helpers.identity = function (x) { return x; },
pluck = Rx.helpers.pluck = function (property) { return function (x) { return x[property]; }; },
just = Rx.helpers.just = function (value) { return function () { return value; }; },
defaultNow = Rx.helpers.defaultNow = (function () { return !!Date.now ? Date.now : function () { return +new Date; }; }()),

@@ -13,4 +10,2 @@ defaultComparer = Rx.helpers.defaultComparer = function (x, y) { return isEqual(x, y); },

isPromise = Rx.helpers.isPromise = function (p) { return !!p && typeof p.subscribe !== 'function' && typeof p.then === 'function'; },
asArray = Rx.helpers.asArray = function () { return Array.prototype.slice.call(arguments); },
not = Rx.helpers.not = function (a) { return !a; },
isFunction = Rx.helpers.isFunction = (function () {

@@ -17,0 +12,0 @@

// Defaults
var noop = Rx.helpers.noop = function () { },
notDefined = Rx.helpers.notDefined = function (x) { return typeof x === 'undefined'; },
identity = Rx.helpers.identity = function (x) { return x; },
pluck = Rx.helpers.pluck = function (property) { return function (x) { return x[property]; }; },
just = Rx.helpers.just = function (value) { return function () { return value; }; },
defaultNow = Rx.helpers.defaultNow = Date.now,

@@ -13,4 +10,2 @@ defaultComparer = Rx.helpers.defaultComparer = function (x, y) { return isEqual(x, y); },

isPromise = Rx.helpers.isPromise = function (p) { return !!p && typeof p.subscribe !== 'function' && typeof p.then === 'function'; },
asArray = Rx.helpers.asArray = function () { return Array.prototype.slice.call(arguments); },
not = Rx.helpers.not = function (a) { return !a; },
isFunction = Rx.helpers.isFunction = (function () {

@@ -17,0 +12,0 @@

;(function (factory) {
var objectTypes = {
'boolean': false,
'function': true,
'object': true,
'number': false,
'string': false,
'undefined': false
};
var objectTypes = {
'function': true,
'object': true
};
var root = (objectTypes[typeof window] && window) || this,
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = objectTypes[typeof global] && global;
var
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeSelf = objectTypes[typeof self] && self.Object && self,
freeWindow = objectTypes[typeof window] && window && window.Object && window,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global;
if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) {
root = freeGlobal;
}
var root = root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this;
// Because of build optimizers
if (typeof define === 'function' && define.amd) {
define(['rx-lite-compat'], function (Rx, exports) {
return factory(root, exports, Rx);
});
} else if (typeof module === 'object' && module && module.exports === freeExports) {
module.exports = factory(root, module.exports, require('rx-lite-compat'));
} else {
root.Rx = factory(root, {}, root.Rx);
}
// Because of build optimizers
if (typeof define === 'function' && define.amd) {
define(['rx-lite-compat'], function (Rx, exports) {
return factory(root, exports, Rx);
});
} else if (typeof module === 'object' && module && module.exports === freeExports) {
module.exports = factory(root, module.exports, require('rx-lite-compat'));
} else {
root.Rx = factory(root, {}, root.Rx);
}
}.call(this, function (root, exp, Rx, undefined) {
;(function (factory) {
var objectTypes = {
'boolean': false,
'function': true,
'object': true,
'number': false,
'string': false,
'undefined': false
};
var objectTypes = {
'function': true,
'object': true
};
var root = (objectTypes[typeof window] && window) || this,
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = objectTypes[typeof global] && global;
var
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeSelf = objectTypes[typeof self] && self.Object && self,
freeWindow = objectTypes[typeof window] && window && window.Object && window,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global;
if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) {
root = freeGlobal;
}
var root = root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this;
// Because of build optimizers
if (typeof define === 'function' && define.amd) {
define(['rx-lite'], function (Rx, exports) {
return factory(root, exports, Rx);
});
} else if (typeof module === 'object' && module && module.exports === freeExports) {
module.exports = factory(root, module.exports, require('rx-lite'));
} else {
root.Rx = factory(root, {}, root.Rx);
}
// Because of build optimizers
if (typeof define === 'function' && define.amd) {
define(['rx-lite'], function (Rx, exports) {
return factory(root, exports, Rx);
});
} else if (typeof module === 'object' && module && module.exports === freeExports) {
module.exports = factory(root, module.exports, require('rx-lite'));
} else {
root.Rx = factory(root, {}, root.Rx);
}
}.call(this, function (root, exp, Rx, undefined) {
;(function (factory) {
var objectTypes = {
'boolean': false,
'function': true,
'object': true,
'number': false,
'string': false,
'undefined': false
};
var objectTypes = {
'function': true,
'object': true
};
var root = (objectTypes[typeof window] && window) || this,
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = objectTypes[typeof global] && global;
var
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeSelf = objectTypes[typeof self] && self.Object && self,
freeWindow = objectTypes[typeof window] && window && window.Object && window,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global;
if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) {
root = freeGlobal;
}
var root = root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this;

@@ -21,0 +17,0 @@ // Because of build optimizers

;(function (factory) {
var objectTypes = {
'boolean': false,
'function': true,
'object': true,
'number': false,
'string': false,
'undefined': false
'object': true
};
var root = (objectTypes[typeof window] && window) || this,
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = objectTypes[typeof global] && global;
var
freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports,
freeSelf = objectTypes[typeof self] && self.Object && self,
freeWindow = objectTypes[typeof window] && window && window.Object && window,
freeModule = objectTypes[typeof module] && module && !module.nodeType && module,
moduleExports = freeModule && freeModule.exports === freeExports && freeExports,
freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global;
if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) {
root = freeGlobal;
}
var root = root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this;

@@ -21,0 +17,0 @@ // Because of build optimizers

@@ -8,3 +8,3 @@ // Refernces

observableNever = Observable.never,
observableThrow = Observable.throwException,
observableThrow = Observable['throw'],
observableFromArray = Observable.fromArray,

@@ -11,0 +11,0 @@ timeoutScheduler = Rx.Scheduler['default'],

@@ -1,9 +0,8 @@

// Aliases
var Scheduler = Rx.Scheduler,
PriorityQueue = Rx.internals.PriorityQueue,
ScheduledItem = Rx.internals.ScheduledItem,
SchedulePeriodicRecursive = Rx.internals.SchedulePeriodicRecursive,
disposableEmpty = Rx.Disposable.empty,
inherits = Rx.internals.inherits,
// Aliases
var Scheduler = Rx.Scheduler,
ScheduledItem = Rx.internals.ScheduledItem,
SchedulePeriodicRecursive = Rx.internals.SchedulePeriodicRecursive,
disposableEmpty = Rx.Disposable.empty,
inherits = Rx.internals.inherits,
defaultSubComparer = Rx.helpers.defaultSubComparer,
notImplemented = Rx.helpers.notImplemented;
notImplemented = Rx.helpers.notImplemented;

@@ -1,12 +0,20 @@

/** @private */
var Map = root.Map || (function () {
function Map() {
this.size = 0;
this._values = [];
this._keys = [];
this._values = [];
}
Map.prototype['delete'] = function (key) {
var i = this._keys.indexOf(key);
if (i === -1) { return false }
this._values.splice(i, 1);
this._keys.splice(i, 1);
this.size--;
return true;
};
Map.prototype.get = function (key) {
var i = this._keys.indexOf(key);
return i !== -1 ? this._values[i] : undefined;
return i === -1 ? undefined : this._values[i];
};

@@ -16,9 +24,15 @@

var i = this._keys.indexOf(key);
i !== -1 && (this._values[i] = value);
this._values[this._keys.push(key) - 1] = value;
if (i === -1) {
this._keys.push(key);
this._values.push(value);
this.size++;
} else {
this._values[i] = value;
}
return this;
};
Map.prototype.forEach = function (callback, thisArg) {
for (var i = 0, len = this._keys.length; i < len; i++) {
callback.call(thisArg, this._values[i], this._keys[i]);
Map.prototype.forEach = function (cb, thisArg) {
for (var i = 0; i < this.size; i++) {
cb.call(thisArg, this._values[i], this._keys[i]);
}

@@ -25,0 +39,0 @@ };

@@ -0,23 +1,20 @@

function amb(p, c) { return p.amb(c); }
/**
* Propagates the observable sequence or Promise that reacts first.
*
* @example
* var = Rx.Observable.amb(xs, ys, zs);
* @returns {Observable} An observable sequence that surfaces any of the given sequences, whichever reacted first.
*/
Observable.amb = function () {
var acc = observableNever(), items = [];
var acc = observableNever(), items;
if (Array.isArray(arguments[0])) {
items = arguments[0];
} else {
for(var i = 0, len = arguments.length; i < len; i++) { items.push(arguments[i]); }
var len = arguments.length;
items = new Array(items);
for(var i = 0; i < len; i++) { items[i] = arguments[i]; }
}
function func(previous, current) {
return previous.amb(current);
}
for (var i = 0, len = items.length; i < len; i++) {
acc = func(acc, items[i]);
acc = amb(acc, items[i]);
}
return acc;
};

@@ -30,23 +30,33 @@ /**

leftSubscription.setDisposable(leftSource.subscribe(function (left) {
choiceL();
choice === leftChoice && observer.onNext(left);
}, function (err) {
choiceL();
choice === leftChoice && observer.onError(err);
}, function () {
choiceL();
choice === leftChoice && observer.onCompleted();
}));
var leftSubscribe = observerCreate(
function (left) {
choiceL();
choice === leftChoice && observer.onNext(left);
},
function (e) {
choiceL();
choice === leftChoice && observer.onError(e);
},
function () {
choiceL();
choice === leftChoice && observer.onCompleted();
}
);
var rightSubscribe = observerCreate(
function (right) {
choiceR();
choice === rightChoice && observer.onNext(right);
},
function (e) {
choiceR();
choice === rightChoice && observer.onError(e);
},
function () {
choiceR();
choice === rightChoice && observer.onCompleted();
}
);
rightSubscription.setDisposable(rightSource.subscribe(function (right) {
choiceR();
choice === rightChoice && observer.onNext(right);
}, function (err) {
choiceR();
choice === rightChoice && observer.onError(err);
}, function () {
choiceR();
choice === rightChoice && observer.onCompleted();
}));
leftSubscription.setDisposable(leftSource.subscribe(leftSubscribe));
rightSubscription.setDisposable(rightSource.subscribe(rightSubscribe));

@@ -53,0 +63,0 @@ return new CompositeDisposable(leftSubscription, rightSubscription);

@@ -0,1 +1,5 @@

function asObservable(source) {
return function subscribe(o) { return source.subscribe(o); };
}
/**

@@ -6,4 +10,3 @@ * Hides the identity of an observable sequence.

observableProto.asObservable = function () {
var source = this;
return new AnonymousObservable(function (o) { return source.subscribe(o); }, source);
return new AnonymousObservable(asObservable(this), this);
};

@@ -0,1 +1,32 @@

var AverageObserver = (function(__super__) {
inherits(AverageObserver, __super__);
function AverageObserver(o, fn, s) {
this._o = o;
this._fn = fn;
this._s = s;
this._c = 0;
this._t = 0;
__super__.call(this);
}
AverageObserver.prototype.next = function (x) {
if(this._fn) {
var r = tryCatch(this._fn)(x, this._c++, this._s);
if (r === errorObj) { return this._o.onError(r.e); }
this._t += r;
} else {
this._c++;
this._t += x;
}
};
AverageObserver.prototype.error = function (e) { this._o.onError(e); };
AverageObserver.prototype.completed = function () {
if (this._c === 0) { return this._o.onError(new EmptyError()); }
this._o.onNext(this._t / this._c);
this._o.onCompleted();
};
return AverageObserver;
}(AbstractObserver));
/**

@@ -8,13 +39,9 @@ * Computes the average of an observable sequence of values that are in the sequence or obtained by invoking a transform function on each element of the input sequence if present.

observableProto.average = function (keySelector, thisArg) {
return keySelector && isFunction(keySelector) ?
this.map(keySelector, thisArg).average() :
this.reduce(function (prev, cur) {
return {
sum: prev.sum + cur,
count: prev.count + 1
};
}, {sum: 0, count: 0 }).map(function (s) {
if (s.count === 0) { throw new EmptyError(); }
return s.sum / s.count;
});
var source = this, fn;
if (isFunction(keySelector)) {
fn = bindCallback(keySelector, thisArg, 3);
}
return new AnonymousObservable(function (o) {
return source.subscribe(new AverageObserver(o, fn, source));
}, source);
};

@@ -1,10 +0,12 @@

/**
* Projects each element of an observable sequence into zero or more buffers.
*
* @param {Mixed} bufferOpeningsOrClosingSelector Observable sequence whose elements denote the creation of new windows, or, a function invoked to define the boundaries of the produced windows (a new window is started when the previous one is closed, resulting in non-overlapping windows).
* @param {Function} [bufferClosingSelector] A function invoked to define the closing of each produced window. If a closing selector function is specified for the first parameter, this parameter is ignored.
* @returns {Observable} An observable sequence of windows.
*/
observableProto.buffer = function (bufferOpeningsOrClosingSelector, bufferClosingSelector) {
return this.window.apply(this, arguments).selectMany(function (x) { return x.toArray(); });
};
function toArray(x) { return x.toArray(); }
/**
* Projects each element of an observable sequence into zero or more buffers.
* @param {Mixed} bufferOpeningsOrClosingSelector Observable sequence whose elements denote the creation of new windows, or, a function invoked to define the boundaries of the produced windows (a new window is started when the previous one is closed, resulting in non-overlapping windows).
* @param {Function} [bufferClosingSelector] A function invoked to define the closing of each produced window. If a closing selector function is specified for the first parameter, this parameter is ignored.
* @returns {Observable} An observable sequence of windows.
*/
observableProto.buffer = function () {
return this.window.apply(this, arguments)
.flatMap(toArray);
};

@@ -0,7 +1,6 @@

function toArray(x) { return x.toArray(); }
function notEmpty(x) { return x.length > 0; }
/**
* Projects each element of an observable sequence into zero or more buffers which are produced based on element count information.
*
* @example
* var res = xs.bufferWithCount(10);
* var res = xs.bufferWithCount(10, 1);
* @param {Number} count Length of each buffer.

@@ -12,10 +11,6 @@ * @param {Number} [skip] Number of elements to skip between creation of consecutive buffers. If not provided, defaults to the count.

observableProto.bufferWithCount = function (count, skip) {
if (typeof skip !== 'number') {
skip = count;
}
return this.windowWithCount(count, skip).selectMany(function (x) {
return x.toArray();
}).where(function (x) {
return x.length > 0;
});
typeof skip !== 'number' && (skip = count);
return this.windowWithCount(count, skip)
.flatMap(toArray)
.filter(notEmpty);
};

@@ -1,15 +0,12 @@

/**
* Projects each element of an observable sequence into zero or more buffers which are produced based on timing information.
*
* @example
* 1 - res = xs.bufferWithTime(1000, scheduler); // non-overlapping segments of 1 second
* 2 - res = xs.bufferWithTime(1000, 500, scheduler; // segments of 1 second with time shift 0.5 seconds
*
* @param {Number} timeSpan Length of each buffer (specified as an integer denoting milliseconds).
* @param {Mixed} [timeShiftOrScheduler] Interval between creation of consecutive buffers (specified as an integer denoting milliseconds), or an optional scheduler parameter. If not specified, the time shift corresponds to the timeSpan parameter, resulting in non-overlapping adjacent buffers.
* @param {Scheduler} [scheduler] Scheduler to run buffer timers on. If not specified, the timeout scheduler is used.
* @returns {Observable} An observable sequence of buffers.
*/
observableProto.bufferWithTime = function (timeSpan, timeShiftOrScheduler, scheduler) {
return this.windowWithTime.apply(this, arguments).selectMany(function (x) { return x.toArray(); });
};
function toArray(x) { return x.toArray(); }
/**
* Projects each element of an observable sequence into zero or more buffers which are produced based on timing information.
* @param {Number} timeSpan Length of each buffer (specified as an integer denoting milliseconds).
* @param {Mixed} [timeShiftOrScheduler] Interval between creation of consecutive buffers (specified as an integer denoting milliseconds), or an optional scheduler parameter. If not specified, the time shift corresponds to the timeSpan parameter, resulting in non-overlapping adjacent buffers.
* @param {Scheduler} [scheduler] Scheduler to run buffer timers on. If not specified, the timeout scheduler is used.
* @returns {Observable} An observable sequence of buffers.
*/
observableProto.bufferWithTime = function (timeSpan, timeShiftOrScheduler, scheduler) {
return this.windowWithTime(timeSpan, timeShiftOrScheduler, scheduler).flatMap(toArray);
};

@@ -1,17 +0,12 @@

/**
* Projects each element of an observable sequence into a buffer that is completed when either it's full or a given amount of time has elapsed.
*
* @example
* 1 - res = source.bufferWithTimeOrCount(5000, 50); // 5s or 50 items in an array
* 2 - res = source.bufferWithTimeOrCount(5000, 50, scheduler); // 5s or 50 items in an array
*
* @param {Number} timeSpan Maximum time length of a buffer.
* @param {Number} count Maximum element count of a buffer.
* @param {Scheduler} [scheduler] Scheduler to run bufferin timers on. If not specified, the timeout scheduler is used.
* @returns {Observable} An observable sequence of buffers.
*/
observableProto.bufferWithTimeOrCount = function (timeSpan, count, scheduler) {
return this.windowWithTimeOrCount(timeSpan, count, scheduler).selectMany(function (x) {
return x.toArray();
});
};
function toArray(x) { return x.toArray(); }
/**
* Projects each element of an observable sequence into a buffer that is completed when either it's full or a given amount of time has elapsed.
* @param {Number} timeSpan Maximum time length of a buffer.
* @param {Number} count Maximum element count of a buffer.
* @param {Scheduler} [scheduler] Scheduler to run bufferin timers on. If not specified, the timeout scheduler is used.
* @returns {Observable} An observable sequence of buffers.
*/
observableProto.bufferWithTimeOrCount = function (timeSpan, count, scheduler) {
return this.windowWithTimeOrCount(timeSpan, count, scheduler).flatMap(toArray);
};
/**
* Uses selector to determine which source in sources to use.
* There is an alias 'switchCase' for browsers <IE9.
*
* @example
* 1 - res = Rx.Observable.case(selector, { '1': obs1, '2': obs2 });
* 1 - res = Rx.Observable.case(selector, { '1': obs1, '2': obs2 }, obs0);
* 1 - res = Rx.Observable.case(selector, { '1': obs1, '2': obs2 }, scheduler);
*
* @param {Function} selector The function which extracts the value for to test in a case statement.

@@ -16,3 +10,3 @@ * @param {Array} sources A object which has keys which correspond to the case statement labels.

*/
Observable['case'] = Observable.switchCase = function (selector, sources, defaultSourceOrScheduler) {
Observable['case'] = function (selector, sources, defaultSourceOrScheduler) {
return observableDefer(function () {

@@ -22,3 +16,3 @@ isPromise(defaultSourceOrScheduler) && (defaultSourceOrScheduler = observableFromPromise(defaultSourceOrScheduler));

typeof defaultSourceOrScheduler.now === 'function' && (defaultSourceOrScheduler = observableEmpty(defaultSourceOrScheduler));
isScheduler(defaultSourceOrScheduler) && (defaultSourceOrScheduler = observableEmpty(defaultSourceOrScheduler));

@@ -25,0 +19,0 @@ var result = sources[selector()];

@@ -6,10 +6,12 @@ /**

*/
var observableCatch = Observable.catchError = Observable['catch'] = Observable.catchException = function () {
var items = [];
var observableCatch = Observable['catch'] = function () {
var items;
if (Array.isArray(arguments[0])) {
items = arguments[0];
} else {
for(var i = 0, len = arguments.length; i < len; i++) { items.push(arguments[i]); }
var len = arguments.length;
items = new Array(len);
for(var i = 0; i < len; i++) { items[i] = arguments[i]; }
}
return enumerableOf(items).catchError();
};

@@ -0,1 +1,25 @@

var CatchObserver = (function(__super__) {
inherits(CatchObserver, __super__);
function CatchObserver(o, s, fn) {
this._o = o;
this._s = s;
this._fn = fn;
__super__.call(this);
}
CatchObserver.prototype.next = function (x) { this._o.onNext(x); };
CatchObserver.prototype.completed = function () { return this._o.onCompleted(); };
CatchObserver.prototype.error = function (e) {
var result = tryCatch(this._fn)(e);
if (result === errorObj) { return this._o.onError(result.e); }
isPromise(result) && (result = observableFromPromise(result));
var d = new SingleAssignmentDisposable();
this._s.setDisposable(d);
d.setDisposable(result.subscribe(this._o));
};
return CatchObserver;
}(AbstractObserver));
function observableCatchHandler(source, handler) {

@@ -5,15 +29,3 @@ return new AnonymousObservable(function (o) {

subscription.setDisposable(d1);
d1.setDisposable(source.subscribe(function (x) { o.onNext(x); }, function (e) {
try {
var result = handler(e);
} catch (ex) {
return o.onError(ex);
}
isPromise(result) && (result = observableFromPromise(result));
var d = new SingleAssignmentDisposable();
subscription.setDisposable(d);
d.setDisposable(result.subscribe(o));
}, function (x) { o.onCompleted(x); }));
d1.setDisposable(source.subscribe(new CatchObserver(o, subscription, handler)));
return subscription;

@@ -25,12 +37,7 @@ }, source);

* Continues an observable sequence that is terminated by an exception with the next observable sequence.
* @example
* 1 - xs.catchException(ys)
* 2 - xs.catchException(function (ex) { return ys(ex); })
* @param {Mixed} handlerOrSecond Exception handler function that returns an observable sequence given the error that occurred in the first sequence, or a second observable sequence used to produce results when an error occurred in the first sequence.
* @returns {Observable} An observable sequence containing the first sequence's elements, followed by the elements of the handler sequence in case an exception occurred.
*/
observableProto['catch'] = observableProto.catchError = observableProto.catchException = function (handlerOrSecond) {
return typeof handlerOrSecond === 'function' ?
observableCatchHandler(this, handlerOrSecond) :
observableCatch([this, handlerOrSecond]);
observableProto['catch'] = function (handlerOrSecond) {
return isFunction(handlerOrSecond) ? observableCatchHandler(this, handlerOrSecond) : observableCatch([this, handlerOrSecond]);
};

@@ -5,4 +5,4 @@ /**

*/
observableProto.concatAll = observableProto.concatObservable = function () {
observableProto.concatAll = function () {
return this.merge(1);
};

@@ -10,4 +10,4 @@ /**

*/
Observable.create = Observable.createWithDisposable = function (subscribe, parent) {
Observable.create = function (subscribe, parent) {
return new AnonymousObservable(subscribe, parent);
};

@@ -7,3 +7,3 @@ /**

*/
observableProto.debounce = observableProto.throttleWithTimeout = function (dueTime, scheduler) {
observableProto.debounce = function (dueTime, scheduler) {
isScheduler(scheduler) || (scheduler = timeoutScheduler);

@@ -10,0 +10,0 @@ var source = this;

@@ -8,51 +8,46 @@ /**

var source = this;
return new AnonymousObservable(function (observer) {
return new AnonymousObservable(function (o) {
var value, hasValue = false, cancelable = new SerialDisposable(), id = 0;
var subscription = source.subscribe(function (x) {
var throttle;
try {
throttle = durationSelector(x);
} catch (e) {
observer.onError(e);
return;
}
var subscription = source.subscribe(
function (x) {
var throttle = tryCatch(durationSelector)(x);
if (throttle === errorObj) { return o.onError(throttle.e); }
isPromise(throttle) && (throttle = observableFromPromise(throttle));
isPromise(throttle) && (throttle = observableFromPromise(throttle));
hasValue = true;
value = x;
id++;
var currentid = id, d = new SingleAssignmentDisposable();
cancelable.setDisposable(d);
d.setDisposable(throttle.subscribe(function () {
hasValue && id === currentid && observer.onNext(value);
hasValue = true;
value = x;
id++;
var currentid = id, d = new SingleAssignmentDisposable();
cancelable.setDisposable(d);
d.setDisposable(throttle.subscribe(
function () {
hasValue && id === currentid && o.onNext(value);
hasValue = false;
d.dispose();
},
function (e) { o.onError(e); },
function () {
hasValue && id === currentid && o.onNext(value);
hasValue = false;
d.dispose();
}
));
},
function (e) {
cancelable.dispose();
o.onError(e);
hasValue = false;
d.dispose();
}, observer.onError.bind(observer), function () {
hasValue && id === currentid && observer.onNext(value);
id++;
},
function () {
cancelable.dispose();
hasValue && o.onNext(value);
o.onCompleted();
hasValue = false;
d.dispose();
}));
}, function (e) {
cancelable.dispose();
observer.onError(e);
hasValue = false;
id++;
}, function () {
cancelable.dispose();
hasValue && observer.onNext(value);
observer.onCompleted();
hasValue = false;
id++;
});
id++;
}
);
return new CompositeDisposable(subscription, cancelable);
}, source);
};
/**
* @deprecated use #debounceWithSelector instead.
*/
observableProto.throttleWithSelector = function (durationSelector) {
//deprecate('throttleWithSelector', 'debounceWithSelector');
return this.debounceWithSelector(durationSelector);
};

@@ -9,3 +9,3 @@ /**

*/
observableProto['do'] = observableProto.tap = observableProto.doAction = function (observerOrOnNext, onError, onCompleted) {
observableProto['do'] = observableProto.tap = function (observerOrOnNext, onError, onCompleted) {
var source = this;

@@ -12,0 +12,0 @@ return new AnonymousObservable(function (observer) {

/**
* Returns the element at a specified index in a sequence.
* @example
* var res = source.elementAt(5);
* Returns the element at a specified index in a sequence or default value if not found.
* @param {Number} index The zero-based index of the element to retrieve.
* @param {Any} [defaultValue] The default value to use if elementAt does not find a value.
* @returns {Observable} An observable sequence that produces the element at the specified position in the source sequence.
*/
observableProto.elementAt = function (index) {
return elementAtOrDefault(this, index, false);
observableProto.elementAt = function (index, defaultValue) {
if (index < 0) { throw new ArgumentOutOfRangeError(); }
var source = this;
return new AnonymousObservable(function (o) {
var i = index;
return source.subscribe(
function (x) {
if (i-- === 0) {
o.onNext(x);
o.onCompleted();
}
},
function (e) { o.onError(e); },
function () {
if (defaultValue === undefined) {
o.onError(new ArgumentOutOfRangeError());
} else {
o.onNext(defaultValue);
o.onCompleted();
}
});
}, source);
};

@@ -0,1 +1,29 @@

var EveryObserver = (function (__super__) {
inherits(EveryObserver, __super__);
function EveryObserver(o, fn, s) {
this._o = o;
this._fn = fn;
this._s = s;
this._i = 0;
__super__.call(this);
}
EveryObserver.prototype.next = function (x) {
var result = tryCatch(this._fn)(x, this._i++, this._s);
if (result === errorObj) { return this._o.onError(result.e); }
if (!Boolean(result)) {
this._o.onNext(false);
this._o.onCompleted();
}
};
EveryObserver.prototype.error = function (e) { this._o.onError(e); };
EveryObserver.prototype.completed = function () {
this._o.onNext(true);
this._o.onCompleted();
};
return EveryObserver;
}(AbstractObserver));
/**

@@ -8,9 +36,6 @@ * Determines whether all elements of an observable sequence satisfy a condition.

observableProto.every = function (predicate, thisArg) {
return this.filter(function (v) { return !predicate(v); }, thisArg).some().map(not);
var source = this, fn = bindCallback(predicate, thisArg, 3);
return new AnonymousObservable(function (o) {
return source.subscribe(new EveryObserver(o, fn, source));
}, this);
};
/** @deprecated use #every instead */
observableProto.all = function () {
//deprecate('all', 'every');
return this.every.apply(this, arguments);
};

@@ -9,27 +9,13 @@ /**

return new AnonymousObservable(function (observer) {
var subscription;
try {
subscription = source.subscribe(observer);
} catch (e) {
var subscription = tryCatch(source.subscribe).call(source, observer);
if (subscription === errorObj) {
action();
throw e;
return thrower(subscription.e);
}
return disposableCreate(function () {
try {
subscription.dispose();
} catch (e) {
throw e;
} finally {
action();
}
var r = tryCatch(subscription.dispose).call(subscription);
action();
r === errorObj && thrower(r.e);
});
}, this);
};
/**
* @deprecated use #finally or #ensure instead.
*/
observableProto.finallyAction = function (action) {
//deprecate('finallyAction', 'finally or ensure');
return this.ensure(action);
};

@@ -0,14 +1,59 @@

var FirstObserver = (function(__super__) {
inherits(FirstObserver, __super__);
function FirstObserver(o, obj, s) {
this._o = o;
this._obj = obj;
this._s = s;
this._i = 0;
__super__.call(this);
}
FirstObserver.prototype.next = function (x) {
if (this._obj.predicate) {
var res = tryCatch(this._obj.predicate)(x, this._i++, this._s);
if (res === errorObj) { return this._o.onError(res.e); }
if (Boolean(res)) {
this._o.onNext(x);
this._o.onCompleted();
}
} else if (!this._obj.predicate) {
this._o.onNext(x);
this._o.onCompleted();
}
};
FirstObserver.prototype.error = function (e) { this._o.onError(e); };
FirstObserver.prototype.completed = function () {
if (this._obj.defaultValue === undefined) {
this._o.onError(new EmptyError());
} else {
this._o.onNext(this._obj.defaultValue);
this._o.onCompleted();
}
};
return FirstObserver;
}(AbstractObserver));
/**
* Returns the first element of an observable sequence that satisfies the condition in the predicate if present else the first item in the sequence.
* @example
* var res = res = source.first();
* var res = res = source.first(function (x) { return x > 3; });
* @param {Function} [predicate] A predicate function to evaluate for elements in the source sequence.
* @param {Any} [thisArg] Object to use as `this` when executing the predicate.
* @returns {Observable} Sequence containing the first element in the observable sequence that satisfies the condition in the predicate if provided, else the first item in the sequence.
*/
observableProto.first = function (predicate, thisArg) {
return predicate ?
this.where(predicate, thisArg).first() :
firstOrDefaultAsync(this, false);
observableProto.first = function () {
var obj = {}, source = this;
if (typeof arguments[0] === 'object') {
obj = arguments[0];
} else {
obj = {
predicate: arguments[0],
thisArg: arguments[1],
defaultValue: arguments[2]
};
}
if (isFunction (obj.predicate)) {
var fn = obj.predicate;
obj.predicate = bindCallback(fn, obj.thisArg, 3);
}
return new AnonymousObservable(function (o) {
return source.subscribe(new FirstObserver(o, obj, source));
}, source);
};
var maxSafeInteger = Math.pow(2, 53) - 1;
function StringIterable(str) {
function StringIterable(s) {
this._s = s;

@@ -11,3 +11,3 @@ }

function StringIterator(str) {
function StringIterator(s) {
this._s = s;

@@ -14,0 +14,0 @@ this._l = s.length;

@@ -14,30 +14,28 @@ /**

return new AnonymousObservable(function (observer) {
function handler() {
var len = arguments.length, results = new Array(len);
for(var i = 0; i < len; i++) { results[i] = arguments[i]; }
var subject = new AsyncSubject();
if (selector) {
try {
results = selector.apply(context, results);
} catch (e) {
return observer.onError(e);
}
function handler() {
var len = arguments.length, results = new Array(len);
for(var i = 0; i < len; i++) { results[i] = arguments[i]; }
observer.onNext(results);
if (isFunction(selector)) {
results = tryCatch(selector).apply(context, results);
if (results === errorObj) { return subject.onError(results.e); }
subject.onNext(results);
} else {
if (results.length <= 1) {
subject.onNext(results[0]);
} else {
if (results.length <= 1) {
observer.onNext.apply(observer, results);
} else {
observer.onNext(results);
}
subject.onNext(results);
}
observer.onCompleted();
}
args.push(handler);
func.apply(context, args);
}).publishLast().refCount();
subject.onCompleted();
}
args.push(handler);
func.apply(context, args);
return subject.asObservable();
};
};

@@ -1,94 +0,21 @@

function isNodeList(el) {
if (window.StaticNodeList) {
// IE8 Specific
// instanceof is slower than Object#toString, but Object#toString will not work as intended in IE8
return (el instanceof window.StaticNodeList || el instanceof window.NodeList);
} else {
return (Object.prototype.toString.call(el) == '[object NodeList]')
}
function ListenDisposable(e, n, fn) {
this._e = e;
this._n = n;
this._fn = fn;
this._e.addEventListener(this._n, this._fn, false);
this.isDisposed = false;
}
function fixEvent(event) {
var stopPropagation = function () {
this.cancelBubble = true;
};
var preventDefault = function () {
this.bubbledKeyCode = this.keyCode;
if (this.ctrlKey) {
try {
this.keyCode = 0;
} catch (e) { }
}
this.defaultPrevented = true;
this.returnValue = false;
this.modified = true;
};
event || (event = root.event);
if (!event.target) {
event.target = event.target || event.srcElement;
if (event.type == 'mouseover') {
event.relatedTarget = event.fromElement;
}
if (event.type == 'mouseout') {
event.relatedTarget = event.toElement;
}
// Adding stopPropogation and preventDefault to IE
if (!event.stopPropagation) {
event.stopPropagation = stopPropagation;
event.preventDefault = preventDefault;
}
// Normalize key events
switch (event.type) {
case 'keypress':
var c = ('charCode' in event ? event.charCode : event.keyCode);
if (c == 10) {
c = 0;
event.keyCode = 13;
} else if (c == 13 || c == 27) {
c = 0;
} else if (c == 3) {
c = 99;
}
event.charCode = c;
event.keyChar = event.charCode ? String.fromCharCode(event.charCode) : '';
break;
}
ListenDisposable.prototype.dispose = function () {
if (!this.isDisposed) {
this._e.removeEventListener(this._n, this._fn, false);
this.isDisposed = true;
}
};
return event;
}
function createListener (element, name, handler) {
// Standards compliant
if (element.addEventListener) {
element.addEventListener(name, handler, false);
return disposableCreate(function () {
element.removeEventListener(name, handler, false);
});
}
if (element.attachEvent) {
// IE Specific
var innerHandler = function (event) {
handler(fixEvent(event));
};
element.attachEvent('on' + name, innerHandler);
return disposableCreate(function () {
element.detachEvent('on' + name, innerHandler);
});
}
// Level 1 DOM Events
element['on' + name] = handler;
return disposableCreate(function () {
element['on' + name] = null;
});
}
function createEventListener (el, eventName, handler) {
var disposables = new CompositeDisposable();
// Asume NodeList
if (isNodeList(el) || Object.prototype.toString.call(el) === '[object HTMLCollection]') {
// Asume NodeList or HTMLCollection
var toStr = Object.prototype.toString;
if (toStr.call(el) === '[object NodeList]' || toStr.call(el) === '[object HTMLCollection]') {
for (var i = 0, len = el.length; i < len; i++) {

@@ -98,3 +25,3 @@ disposables.add(createEventListener(el.item(i), eventName, handler));

} else if (el) {
disposables.add(createListener(el, eventName, handler));
disposables.add(new ListenDisposable(el, eventName, handler));
}

@@ -112,6 +39,2 @@

* Creates an observable sequence by adding an event listener to the matching DOMElement or each item in the NodeList.
*
* @example
* var source = Rx.Observable.fromEvent(element, 'mouseup');
*
* @param {Object} element The DOMElement or NodeList to attach a listener.

@@ -141,20 +64,20 @@ * @param {String} eventName The event name to attach the observable sequence.

}
return new AnonymousObservable(function (observer) {
function eventHandler(o) {
return function handler () {
var results = arguments[0];
if (isFunction(selector)) {
results = tryCatch(selector).apply(null, arguments);
if (results === errorObj) { return o.onError(results.e); }
}
o.onNext(results);
};
}
return new AnonymousObservable(function (o) {
return createEventListener(
element,
eventName,
function handler (e) {
var results = e;
if (selector) {
try {
results = selector(arguments);
} catch (err) {
return observer.onError(err);
}
}
observer.onNext(results);
});
eventHandler(o));
}).publish().refCount();
};

@@ -9,13 +9,10 @@ /**

var fromEventPattern = Observable.fromEventPattern = function (addHandler, removeHandler, selector) {
return new AnonymousObservable(function (observer) {
function innerHandler (e) {
var result = e;
if (selector) {
try {
result = selector(arguments);
} catch (err) {
return observer.onError(err);
}
return new AnonymousObservable(function (o) {
function innerHandler () {
var result = arguments[0];
if (isFunction(selector)) {
result = tryCatch(selector).apply(null, arguments);
if (result === errorObj) { return o.onError(result.e); }
}
observer.onNext(result);
o.onNext(result);
}

@@ -25,7 +22,5 @@

return disposableCreate(function () {
if (removeHandler) {
removeHandler(innerHandler, returnValue);
}
isFunction(removeHandler) && removeHandler(innerHandler, returnValue);
});
}).publish().refCount();
};

@@ -13,34 +13,31 @@ /**

return new AnonymousObservable(function (observer) {
function handler(err) {
if (err) {
observer.onError(err);
return;
}
var o = new AsyncSubject();
var len = arguments.length, results = [];
for(var i = 1; i < len; i++) { results[i - 1] = arguments[i]; }
function handler() {
var err = arguments[0];
if (err) { return o.onError(err); }
if (selector) {
try {
results = selector.apply(context, results);
} catch (e) {
return observer.onError(e);
}
observer.onNext(results);
var len = arguments.length, results = [];
for(var i = 1; i < len; i++) { results[i - 1] = arguments[i]; }
if (isFunction(selector)) {
var results = tryCatch(selector).apply(context, results);
if (results === errorObj) { return o.onError(results.e); }
o.onNext(results);
} else {
if (results.length <= 1) {
o.onNext(results[0]);
} else {
if (results.length <= 1) {
observer.onNext.apply(observer, results);
} else {
observer.onNext(results);
}
o.onNext(results);
}
observer.onCompleted();
}
args.push(handler);
func.apply(context, args);
}).publishLast().refCount();
o.onCompleted();
}
args.push(handler);
func.apply(context, args);
return o.asObservable();
};
};

@@ -10,7 +10,6 @@ /**

* @param {Function} [elementSelector] A function to map each source element to an element in an observable group.
* @param {Function} [comparer] Used to determine whether the objects are equal.
* @returns {Observable} A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value.
*/
observableProto.groupBy = function (keySelector, elementSelector, comparer) {
return this.groupByUntil(keySelector, elementSelector, observableNever, comparer);
observableProto.groupBy = function (keySelector, elementSelector) {
return this.groupByUntil(keySelector, elementSelector, observableNever);
};

@@ -12,3 +12,2 @@ /**

* @param {Function} durationSelector A function to signal the expiration of a group.
* @param {Function} [comparer] Used to compare objects. When not specified, the default comparer is used.
* @returns {Observable}

@@ -19,78 +18,68 @@ * A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value.

*/
observableProto.groupByUntil = function (keySelector, elementSelector, durationSelector, comparer) {
observableProto.groupByUntil = function (keySelector, elementSelector, durationSelector) {
var source = this;
elementSelector || (elementSelector = identity);
comparer || (comparer = defaultComparer);
return new AnonymousObservable(function (observer) {
function handleError(e) { return function (item) { item.onError(e); }; }
var map = new Dictionary(0, comparer),
return new AnonymousObservable(function (o) {
var map = new Map(),
groupDisposable = new CompositeDisposable(),
refCountDisposable = new RefCountDisposable(groupDisposable);
refCountDisposable = new RefCountDisposable(groupDisposable),
handleError = function (e) { return function (item) { item.onError(e); }; };
groupDisposable.add(source.subscribe(function (x) {
var key;
try {
key = keySelector(x);
} catch (e) {
map.getValues().forEach(handleError(e));
observer.onError(e);
return;
}
groupDisposable.add(
source.subscribe(function (x) {
var key = tryCatch(keySelector)(x);
if (key === errorObj) {
map.forEach(handleError(key.e));
return o.onError(key.e);
}
var fireNewMapEntry = false,
writer = map.tryGetValue(key);
if (!writer) {
writer = new Subject();
map.set(key, writer);
fireNewMapEntry = true;
}
if (fireNewMapEntry) {
var group = new GroupedObservable(key, writer, refCountDisposable),
durationGroup = new GroupedObservable(key, writer);
try {
duration = durationSelector(durationGroup);
} catch (e) {
map.getValues().forEach(handleError(e));
observer.onError(e);
return;
var fireNewMapEntry = false, writer = map.get(key);
if (writer === undefined) {
writer = new Subject();
map.set(key, writer);
fireNewMapEntry = true;
}
observer.onNext(group);
if (fireNewMapEntry) {
var group = new GroupedObservable(key, writer, refCountDisposable),
durationGroup = new GroupedObservable(key, writer);
var duration = tryCatch(durationSelector)(durationGroup);
if (duration === errorObj) {
map.forEach(handleError(duration.e));
return o.onError(duration.e);
}
var md = new SingleAssignmentDisposable();
groupDisposable.add(md);
o.onNext(group);
var expire = function () {
map.remove(key) && writer.onCompleted();
groupDisposable.remove(md);
};
var md = new SingleAssignmentDisposable();
groupDisposable.add(md);
md.setDisposable(duration.take(1).subscribe(
noop,
function (exn) {
map.getValues().forEach(handleError(exn));
observer.onError(exn);
},
expire)
);
}
md.setDisposable(duration.take(1).subscribe(
noop,
function (e) {
map.forEach(handleError(e));
o.onError(e);
},
function () {
if (map['delete'](key)) { writer.onCompleted(); }
groupDisposable.remove(md);
}));
}
var element;
try {
element = elementSelector(x);
} catch (e) {
map.getValues().forEach(handleError(e));
observer.onError(e);
return;
}
var element = x;
if (isFunction(elementSelector)) {
element = tryCatch(elementSelector)(x);
if (element === errorObj) {
map.forEach(handleError(element.e));
return o.onError(element.e);
}
}
writer.onNext(element);
}, function (ex) {
map.getValues().forEach(handleError(ex));
observer.onError(ex);
}, function () {
map.getValues().forEach(function (item) { item.onCompleted(); });
observer.onCompleted();
}));
writer.onNext(element);
}, function (e) {
map.forEach(handleError(e));
o.onError(e);
}, function () {
map.forEach(function (item) { item.onCompleted(); });
o.onCompleted();
}));

@@ -97,0 +86,0 @@ return refCountDisposable;

@@ -12,9 +12,10 @@ /**

var left = this;
return new AnonymousObservable(function (observer) {
return new AnonymousObservable(function (o) {
var group = new CompositeDisposable();
var r = new RefCountDisposable(group);
var leftMap = new Dictionary(), rightMap = new Dictionary();
var leftMap = new Map(), rightMap = new Map();
var leftId = 0, rightId = 0;
var handleError = function (e) { return function (v) { v.onError(e); }; };
function handleError(e) { return function (v) { v.onError(e); }; };
function handleError(e) { };

@@ -25,15 +26,12 @@ group.add(left.subscribe(

var id = leftId++;
leftMap.add(id, s);
leftMap.set(id, s);
var result;
try {
result = resultSelector(value, addRef(s, r));
} catch (e) {
leftMap.getValues().forEach(handleError(e));
observer.onError(e);
return;
var result = tryCatch(resultSelector)(value, addRef(s, r));
if (result === errorObj) {
leftMap.forEach(handleError(result.e));
return o.onError(result.e);
}
observer.onNext(result);
o.onNext(result);
rightMap.getValues().forEach(function (v) { s.onNext(v); });
rightMap.forEach(function (v) { s.onNext(v); });

@@ -43,14 +41,6 @@ var md = new SingleAssignmentDisposable();

var expire = function () {
leftMap.remove(id) && s.onCompleted();
group.remove(md);
};
var duration;
try {
duration = leftDurationSelector(value);
} catch (e) {
leftMap.getValues().forEach(handleError(e));
observer.onError(e);
return;
var duration = tryCatch(leftDurationSelector)(value);
if (duration === errorObj) {
leftMap.forEach(handleError(duration.e));
return o.onError(duration.e);
}

@@ -61,13 +51,15 @@

function (e) {
leftMap.getValues().forEach(handleError(e));
observer.onError(e);
leftMap.forEach(handleError(e));
o.onError(e);
},
expire)
);
function () {
leftMap['delete'](id) && s.onCompleted();
group.remove(md);
}));
},
function (e) {
leftMap.getValues().forEach(handleError(e));
observer.onError(e);
leftMap.forEach(handleError(e));
o.onError(e);
},
observer.onCompleted.bind(observer))
function () { o.onCompleted(); })
);

@@ -78,3 +70,3 @@

var id = rightId++;
rightMap.add(id, value);
rightMap.set(id, value);

@@ -84,29 +76,24 @@ var md = new SingleAssignmentDisposable();

var expire = function () {
rightMap.remove(id);
group.remove(md);
};
var duration = tryCatch(rightDurationSelector)(value);
if (duration === errorObj) {
leftMap.forEach(handleError(duration.e));
return o.onError(duration.e);
}
var duration;
try {
duration = rightDurationSelector(value);
} catch (e) {
leftMap.getValues().forEach(handleError(e));
observer.onError(e);
return;
}
md.setDisposable(duration.take(1).subscribe(
noop,
function (e) {
leftMap.getValues().forEach(handleError(e));
observer.onError(e);
leftMap.forEach(handleError(e));
o.onError(e);
},
expire)
);
function () {
rightMap['delete'](id);
group.remove(md);
}));
leftMap.getValues().forEach(function (v) { v.onNext(value); });
leftMap.forEach(function (v) { v.onNext(value); });
},
function (e) {
leftMap.getValues().forEach(handleError(e));
observer.onError(e);
leftMap.forEach(handleError(e));
o.onError(e);
})

@@ -113,0 +100,0 @@ );

/**
* Determines whether an observable collection contains values. There is an alias for this method called 'ifThen' for browsers <IE9
* Determines whether an observable collection contains values.
*

@@ -13,3 +13,3 @@ * @example

*/
Observable['if'] = Observable.ifThen = function (condition, thenSource, elseSourceOrScheduler) {
Observable['if'] = function (condition, thenSource, elseSourceOrScheduler) {
return observableDefer(function () {

@@ -16,0 +16,0 @@ elseSourceOrScheduler || (elseSourceOrScheduler = observableEmpty());

@@ -0,1 +1,21 @@

var IsEmptyObserver = (function(__super__) {
inherits(IsEmptyObserver, __super__);
function IsEmptyObserver(o) {
this._o = o;
__super__.call(this);
}
IsEmptyObserver.prototype.next = function () {
this._o.onNext(false);
this._o.onCompleted();
};
IsEmptyObserver.prototype.error = function (e) { this._o.onError(e); };
IsEmptyObserver.prototype.completed = function () {
this._o.onNext(true);
this._o.onCompleted();
};
return IsEmptyObserver;
}(AbstractObserver));
/**

@@ -6,3 +26,6 @@ * Determines whether an observable sequence is empty.

observableProto.isEmpty = function () {
return this.any().map(not);
var source = this;
return new AnonymousObservable(function (o) {
return source.subscribe(new IsEmptyObserver(o));
}, source);
};

@@ -12,47 +12,37 @@ /**

var left = this;
return new AnonymousObservable(function (observer) {
return new AnonymousObservable(function (o) {
var group = new CompositeDisposable();
var leftDone = false, rightDone = false;
var leftId = 0, rightId = 0;
var leftMap = new Dictionary(), rightMap = new Dictionary();
var leftMap = new Map(), rightMap = new Map();
var handleError = function (e) { o.onError(e); };
group.add(left.subscribe(
function (value) {
var id = leftId++;
var md = new SingleAssignmentDisposable();
var id = leftId++, md = new SingleAssignmentDisposable();
leftMap.add(id, value);
leftMap.set(id, value);
group.add(md);
var expire = function () {
leftMap.remove(id) && leftMap.count() === 0 && leftDone && observer.onCompleted();
group.remove(md);
};
var duration = tryCatch(leftDurationSelector)(value);
if (duration === errorObj) { return o.onError(duration.e); }
var duration;
try {
duration = leftDurationSelector(value);
} catch (e) {
observer.onError(e);
return;
}
md.setDisposable(duration.take(1).subscribe(
noop,
handleError,
function () {
leftMap['delete'](id) && leftMap.size === 0 && leftDone && o.onCompleted();
group.remove(md);
}));
md.setDisposable(duration.take(1).subscribe(noop, observer.onError.bind(observer), expire));
rightMap.getValues().forEach(function (v) {
var result;
try {
result = resultSelector(value, v);
} catch (exn) {
observer.onError(exn);
return;
}
observer.onNext(result);
rightMap.forEach(function (v) {
var result = tryCatch(resultSelector)(value, v);
if (result === errorObj) { return o.onError(result.e); }
o.onNext(result);
});
},
observer.onError.bind(observer),
handleError,
function () {
leftDone = true;
(rightDone || leftMap.count() === 0) && observer.onCompleted();
(rightDone || leftMap.size === 0) && o.onCompleted();
})

@@ -63,39 +53,28 @@ );

function (value) {
var id = rightId++;
var md = new SingleAssignmentDisposable();
var id = rightId++, md = new SingleAssignmentDisposable();
rightMap.add(id, value);
rightMap.set(id, value);
group.add(md);
var expire = function () {
rightMap.remove(id) && rightMap.count() === 0 && rightDone && observer.onCompleted();
group.remove(md);
};
var duration = tryCatch(rightDurationSelector)(value);
if (duration === errorObj) { return o.onError(duration.e); }
var duration;
try {
duration = rightDurationSelector(value);
} catch (e) {
observer.onError(e);
return;
}
md.setDisposable(duration.take(1).subscribe(
noop,
handleError,
function () {
rightMap['delete'](id) && rightMap.size === 0 && rightDone && o.onCompleted();
group.remove(md);
}));
md.setDisposable(duration.take(1).subscribe(noop, observer.onError.bind(observer), expire));
leftMap.getValues().forEach(function (v) {
var result;
try {
result = resultSelector(v, value);
} catch (exn) {
observer.onError(exn);
return;
}
observer.onNext(result);
leftMap.forEach(function (v) {
var result = tryCatch(resultSelector)(v, value);
if (result === errorObj) { return o.onError(result.e); }
o.onNext(result);
});
},
observer.onError.bind(observer),
handleError,
function () {
rightDone = true;
(leftDone || rightMap.count() === 0) && observer.onCompleted();
(leftDone || rightMap.size === 0) && o.onCompleted();
})

@@ -102,0 +81,0 @@ );

/**
* Returns the last element of an observable sequence that satisfies the condition in the predicate if specified, else the last element.
* @param {Function} [predicate] A predicate function to evaluate for elements in the source sequence.
* @param {Any} [thisArg] Object to use as `this` when executing the predicate.
* @returns {Observable} Sequence containing the last element in the observable sequence that satisfies the condition in the predicate.
*/
observableProto.last = function (predicate, thisArg) {
return predicate ?
this.where(predicate, thisArg).last() :
lastOrDefaultAsync(this, false);
observableProto.last = function () {
var obj = {}, source = this;
if (typeof arguments[0] === 'object') {
obj = arguments[0];
} else {
obj = {
predicate: arguments[0],
thisArg: arguments[1],
defaultValue: arguments[2]
};
}
if (isFunction (obj.predicate)) {
var fn = obj.predicate;
obj.predicate = bindCallback(fn, obj.thisArg, 3);
}
return new AnonymousObservable(function (o) {
var value, seenValue = false, i = 0;
return source.subscribe(
function (x) {
if (obj.predicate) {
var res = tryCatch(obj.predicate)(x, i++, source);
if (res === errorObj) { return o.onError(res.e); }
if (res) {
seenValue = true;
value = x;
}
} else if (!obj.predicate) {
seenValue = true;
value = x;
}
},
function (e) { o.onError(e); },
function () {
if (seenValue) {
o.onNext(value);
o.onCompleted();
}
else if (obj.defaultValue === undefined) {
o.onError(new EmptyError());
} else {
o.onNext(obj.defaultValue);
o.onCompleted();
}
});
}, source);
};

@@ -57,3 +57,3 @@ /**

onError: function (e) {
this.onNext(Observable.throwError(e));
this.onNext(Observable['throw'](e));
},

@@ -60,0 +60,0 @@ onNext: function (v) {

@@ -5,3 +5,3 @@ /**

*/
observableProto.mergeAll = observableProto.mergeObservable = function () {
observableProto.mergeAll = function () {
var sources = this;

@@ -8,0 +8,0 @@ return new AnonymousObservable(function (o) {

@@ -1,11 +0,3 @@

/**
* Retrieves the value of a specified nested property from all elements in
* the Observable sequence.
* @param {Arguments} arguments The nested properties to pluck.
* @returns {Observable} Returns a new Observable sequence of property values.
*/
observableProto.pluck = function () {
var args = arguments, len = arguments.length;
if (len === 0) { throw new Error('List of properties cannot be empty.'); }
return this.map(function (x) {
function plucker(args, len) {
return function mapper(x) {
var currentProp = x;

@@ -21,3 +13,16 @@ for (var i = 0; i < len; i++) {

return currentProp;
});
}
}
/**
* Retrieves the value of a specified nested property from all elements in
* the Observable sequence.
* @param {Arguments} arguments The nested properties to pluck.
* @returns {Observable} Returns a new Observable sequence of property values.
*/
observableProto.pluck = function () {
var len = arguments.length, args = new Array(len);
if (len === 0) { throw new Error('List of properties cannot be empty.'); }
for(var i = 0; i < len; i++) { args[i] = arguments[i]; }
return this.map(plucker(args, len));
};

@@ -8,3 +8,3 @@ /**

*/
var observableReturn = Observable['return'] = Observable.just = Observable.returnValue = function (value, scheduler) {
var observableReturn = Observable['return'] = Observable.just = function (value, scheduler) {
isScheduler(scheduler) || (scheduler = immediateScheduler);

@@ -11,0 +11,0 @@ return new AnonymousObservable(function (o) {

@@ -6,15 +6,12 @@ /**

* var res = source.scan(function (acc, x) { return acc + x; });
* var res = source.scan(0, function (acc, x) { return acc + x; });
* var res = source.scan(function (acc, x) { return acc + x; }, 0);
* @param {Function} accumulator An accumulator function to be invoked on each element.
* @param {Mixed} [seed] The initial accumulator value.
* @param {Function} accumulator An accumulator function to be invoked on each element.
* @returns {Observable} An observable sequence containing the accumulated values.
*/
observableProto.scan = function () {
var hasSeed = false, seed, accumulator, source = this;
observableProto.scan = function (accumulator) {
var hasSeed = false, seed, source = this, accumulator = arguments[0];
if (arguments.length === 2) {
hasSeed = true;
seed = arguments[0];
accumulator = arguments[1];
} else {
accumulator = arguments[0];
seed = arguments[1];
}

@@ -26,14 +23,9 @@ return new AnonymousObservable(function (o) {

!hasValue && (hasValue = true);
try {
if (hasAccumulation) {
accumulation = accumulator(accumulation, x);
} else {
accumulation = hasSeed ? accumulator(seed, x) : x;
hasAccumulation = true;
}
} catch (e) {
o.onError(e);
return;
if (hasAccumulation) {
accumulation = tryCatch(accumulator)(accumulation, x);
} else {
accumulation = hasSeed ? tryCatch(accumulator)(seed, x) : x;
hasAccumulation = true;
}
if (accumulation === errorObj) { return o.onError(accumulation.e); }
o.onNext(accumulation);

@@ -40,0 +32,0 @@ },

@@ -8,5 +8,18 @@ /**

observableProto.single = function (predicate, thisArg) {
return predicate && isFunction(predicate) ?
this.where(predicate, thisArg).single() :
singleOrDefaultAsync(this, false);
if (isFunction(predicate)) { return this.filter(predicate, thisArg).single(); }
var source = this;
return new AnonymousObservable(function (o) {
var value, seenValue = false;
return source.subscribe(function (x) {
if (seenValue) {
o.onError(new Error('Sequence contains more than one element'));
} else {
value = x;
seenValue = true;
}
}, function (e) { o.onError(e); }, function () {
o.onNext(value);
o.onCompleted();
});
}, source);
};

@@ -0,1 +1,29 @@

var SomeObserver = (function (__super__) {
inherits(SomeObserver, __super__);
function SomeObserver(o, fn, s) {
this._o = o;
this._fn = fn;
this._s = s;
this._i = 0;
__super__.call(this);
}
SomeObserver.prototype.next = function (x) {
var result = tryCatch(this._fn)(x, this._i++, this._s);
if (result === errorObj) { return this._o.onError(result.e); }
if (Boolean(result)) {
this._o.onNext(true);
this._o.onCompleted();
}
};
SomeObserver.prototype.error = function (e) { this._o.onError(e); };
SomeObserver.prototype.completed = function () {
this._o.onNext(false);
this._o.onCompleted();
};
return SomeObserver;
}(AbstractObserver));
/**

@@ -7,20 +35,6 @@ * Determines whether any element of an observable sequence satisfies a condition if present, else if any items are in the sequence.

observableProto.some = function (predicate, thisArg) {
var source = this;
return predicate ?
source.filter(predicate, thisArg).some() :
new AnonymousObservable(function (observer) {
return source.subscribe(function () {
observer.onNext(true);
observer.onCompleted();
}, function (e) { observer.onError(e); }, function () {
observer.onNext(false);
observer.onCompleted();
});
}, source);
var source = this, fn = bindCallback(predicate, thisArg, 3);
return new AnonymousObservable(function (o) {
return source.subscribe(new SomeObserver(o, fn, source));
});
};
/** @deprecated use #some instead */
observableProto.any = function () {
//deprecate('any', 'some');
return this.some.apply(this, arguments);
};

@@ -1,193 +0,115 @@

var fnString = 'function',
throwString = 'throw',
isObject = Rx.internals.isObject;
var spawn = Observable.spawn = function () {
var gen = arguments[0], self = this, args = [];
for (var i = 1, len = arguments.length; i < len; i++) { args.push(arguments[i]); }
function toThunk(obj, ctx) {
if (Array.isArray(obj)) { return objectToThunk.call(ctx, obj); }
if (isGeneratorFunction(obj)) { return observableSpawn(obj.call(ctx)); }
if (isGenerator(obj)) { return observableSpawn(obj); }
if (isObservable(obj)) { return observableToThunk(obj); }
if (isPromise(obj)) { return promiseToThunk(obj); }
if (typeof obj === fnString) { return obj; }
if (isObject(obj) || Array.isArray(obj)) { return objectToThunk.call(ctx, obj); }
return new AnonymousObservable(function (o) {
var g = new CompositeDisposable();
return obj;
}
if (isFunction(gen)) { gen = gen.apply(self, args); }
if (!gen || !isFunction(gen.next)) {
o.onNext(gen);
return o.onCompleted();
}
function objectToThunk(obj) {
var ctx = this;
processGenerator();
return function (done) {
var keys = Object.keys(obj),
pending = keys.length,
results = new obj.constructor(),
finished;
function processGenerator(res) {
var ret = tryCatch(gen.next).call(gen, res);
if (ret === errorObj) { return o.onError(ret.e); }
next(ret);
}
if (!pending) {
timeoutScheduler.schedule(function () { done(null, results); });
return;
function onError(err) {
var ret = tryCatch(gen.next).call(gen, err);
if (ret === errorObj) { return o.onError(ret.e); }
next(ret);
}
for (var i = 0, len = keys.length; i < len; i++) {
run(obj[keys[i]], keys[i]);
function next(ret) {
if (ret.done) {
o.onNext(ret.value);
o.onCompleted();
}
var value = toObservable.call(self, ret.value);
if (Observable.isObservable(value)) {
g.add(value.subscribe(processGenerator, onError));
} else {
onError(new TypeError('type not supported'));
}
}
function run(fn, key) {
if (finished) { return; }
try {
fn = toThunk(fn, ctx);
return g;
});
}
if (typeof fn !== fnString) {
results[key] = fn;
return --pending || done(null, results);
}
function toObservable(obj) {
if (!obj) { return obj; }
if (Observable.isObservable(obj)) { return obj; }
if (isPromise(obj)) { return Observable.fromPromise(obj); }
if (isGeneratorFunction(obj) || isGenerator(obj)) { return spawn.call(this, obj); }
if (isFunction(obj)) { return thunkToObservable.call(this, obj); }
if (isArrayLike(obj) || isIterable(obj)) { return arrayToObservable.call(this, obj); }
if (isObject(obj)) return objectToObservable.call(this, obj);
return obj;
}
fn.call(ctx, function(err, res) {
if (finished) { return; }
function arrayToObservable (obj) {
return Observable.from(obj)
.map(toObservable, this)
.toArray();
}
if (err) {
finished = true;
return done(err);
}
results[key] = res;
--pending || done(null, results);
});
} catch (e) {
finished = true;
done(e);
}
function objectToObservable (obj) {
var results = new obj.constructor(), keys = Object.keys(obj), observables = [];
for (var i = 0, len = keys.length; i < len; i++) {
var key = keys[i], observable = toObservable.call(this, obj[key]);
if (observable && Observable.isObservable(observable)) {
defer(observable, key);
} else {
results[key] = obj[key];
}
}
}
return Observable.concat(observables).startWith(results);
function observableToThunk(observable) {
return function (fn) {
var value, hasValue = false;
observable.subscribe(
function (v) {
value = v;
hasValue = true;
},
fn,
function () {
hasValue && fn(null, value);
function defer (observable, key) {
results[key] = undefined;
observables.push(new AnonymousObservable(function (o) {
return observable.subscribe(function (next) {
results[key] = next;
o.onCompleted();
});
}));
}
}
function promiseToThunk(promise) {
return function(fn) {
promise.then(function(res) {
fn(null, res);
}, fn);
}
function thunkToObservable(fn) {
var self = this;
return new AnonymousObservable(function (o) {
fn.call(self, function () {
var err = arguments[0], res = arguments[1];
if (err) { return o.onError(err); }
if (arguments.length > 2) {
var args = [];
for (var i = 1, len = arguments.length; i < len; i++) { args.push(arguments[i]); }
res = args;
}
o.onNext(res);
o.onCompleted();
});
});
}
function isObservable(obj) {
return obj && typeof obj.subscribe === fnString;
function isGenerator(obj) {
return isFunction (obj.next) && isFunction (obj.throw);
}
function isGeneratorFunction(obj) {
return obj && obj.constructor && obj.constructor.name === 'GeneratorFunction';
var ctor = obj.constructor;
if (!ctor) { return false; }
if (ctor.name === 'GeneratorFunction' || ctor.displayName === 'GeneratorFunction') { return true; }
return isGenerator(ctor.prototype);
}
function isGenerator(obj) {
return obj && typeof obj.next === fnString && typeof obj[throwString] === fnString;
function isObject(val) {
return Object == val.constructor;
}
/*
* Spawns a generator function which allows for Promises, Observable sequences, Arrays, Objects, Generators and functions.
* @param {Function} The spawning function.
* @returns {Function} a function which has a done continuation.
*/
var observableSpawn = Rx.spawn = function (fn) {
var isGenFun = isGeneratorFunction(fn);
return function (done) {
var ctx = this,
gen = fn;
if (isGenFun) {
for(var args = [], i = 0, len = arguments.length; i < len; i++) { args.push(arguments[i]); }
var len = args.length,
hasCallback = len && typeof args[len - 1] === fnString;
done = hasCallback ? args.pop() : handleError;
gen = fn.apply(this, args);
} else {
done = done || handleError;
}
next();
function exit(err, res) {
timeoutScheduler.schedule(done.bind(ctx, err, res));
}
function next(err, res) {
var ret;
// multiple args
if (arguments.length > 2) {
for(var res = [], i = 1, len = arguments.length; i < len; i++) { res.push(arguments[i]); }
}
if (err) {
try {
ret = gen[throwString](err);
} catch (e) {
return exit(e);
}
}
if (!err) {
try {
ret = gen.next(res);
} catch (e) {
return exit(e);
}
}
if (ret.done) {
return exit(null, ret.value);
}
ret.value = toThunk(ret.value, ctx);
if (typeof ret.value === fnString) {
var called = false;
try {
ret.value.call(ctx, function() {
if (called) {
return;
}
called = true;
next.apply(ctx, arguments);
});
} catch (e) {
timeoutScheduler.schedule(function () {
if (called) {
return;
}
called = true;
next.call(ctx, e);
});
}
return;
}
// Not supported
next(new TypeError('Rx.spawn only supports a function, Promise, Observable, Object or Array.'));
}
}
};
function handleError(err) {
if (!err) { return; }
timeoutScheduler.schedule(function() {
throw err;
});
}
/**
* Returns an observable sequence that terminates with an exception, using the specified scheduler to send out the single onError message.
* There is an alias to this method called 'throwError' for browsers <IE9.
* @param {Mixed} error An object used for the sequence's termination.

@@ -8,15 +7,9 @@ * @param {Scheduler} scheduler Scheduler to send the exceptional termination call on. If not specified, defaults to Scheduler.immediate.

*/
var observableThrow = Observable['throw'] = Observable.throwError = function (error, scheduler) {
var observableThrow = Observable['throw'] = function (error, scheduler) {
isScheduler(scheduler) || (scheduler = immediateScheduler);
return new AnonymousObservable(function (observer) {
return scheduler.schedule(function () {
observer.onError(error);
return scheduler.scheduleWithState(error, function (e) {
observer.onError(e);
});
});
};
/** @deprecated use #some instead */
Observable.throwException = function () {
//deprecate('throwException', 'throwError');
return Observable.throwError.apply(null, arguments);
};

@@ -11,3 +11,3 @@ /**

isScheduler(scheduler) || (scheduler = timeoutScheduler);
if (periodOrScheduler !== undefined && typeof periodOrScheduler === 'number') {
if (periodOrScheduler != null && typeof periodOrScheduler === 'number') {
period = periodOrScheduler;

@@ -21,4 +21,3 @@ } else if (isScheduler(periodOrScheduler)) {

if (dueTime instanceof Date && period !== undefined) {
period = periodOrScheduler;
return observableTimerDateAndPeriod(dueTime.getTime(), period, scheduler);
return observableTimerDateAndPeriod(dueTime.getTime(), periodOrScheduler, scheduler);
}

@@ -25,0 +24,0 @@ return period === undefined ?

@@ -27,7 +27,4 @@ /**

function(v) {
try {
xform['@@transducer/step'](o, v);
} catch (e) {
o.onError(e);
}
var res = tryCatch(xform['@@transducer/step']).call(xform, o, v);
if (res === errorObj) { o.onError(res.e); }
},

@@ -34,0 +31,0 @@ function (e) { o.onError(e); },

@@ -8,13 +8,15 @@ /**

Observable.using = function (resourceFactory, observableFactory) {
return new AnonymousObservable(function (observer) {
var disposable = disposableEmpty, resource, source;
try {
resource = resourceFactory();
resource && (disposable = resource);
source = observableFactory(resource);
} catch (exception) {
return new CompositeDisposable(observableThrow(exception).subscribe(observer), disposable);
return new AnonymousObservable(function (o) {
var disposable = disposableEmpty;
var resource = tryCatch(resourceFactory)();
if (resource === errorObj) {
return new CompositeDisposable(observableThrow(resource.e).subscribe(o), disposable);
}
return new CompositeDisposable(source.subscribe(observer), disposable);
resource && (disposable = resource);
var source = tryCatch(observableFactory)(resource);
if (source === errorObj) {
return new CompositeDisposable(observableThrow(source.e).subscribe(o), disposable);
}
return new CompositeDisposable(source.subscribe(o), disposable);
});
};
Rx.config.longStackSupport = false;
var hasStacks = false;
try {
throw new Error();
} catch (e) {
hasStacks = !!e.stack;
}
var hasStacks = false, stacks = tryCatch(function () { throw new Error(); })();
hasStacks = !!stacks.e && !!stacks.e.stack;
// All code after this point will be filtered from stack traces reported by RxJS
var rStartingLine = captureLine(), rFileName;

@@ -1,23 +0,23 @@

var STACK_JUMP_SEPARATOR = "From previous event:";
var STACK_JUMP_SEPARATOR = 'From previous event:';
function makeStackTraceLong(error, observable) {
// If possible, transform the error stack trace by removing Node and RxJS
// cruft, then concatenating with the stack trace of `observable`.
if (hasStacks &&
observable.stack &&
typeof error === "object" &&
error !== null &&
error.stack &&
error.stack.indexOf(STACK_JUMP_SEPARATOR) === -1
) {
var stacks = [];
for (var o = observable; !!o; o = o.source) {
if (o.stack) {
stacks.unshift(o.stack);
}
// If possible, transform the error stack trace by removing Node and RxJS
// cruft, then concatenating with the stack trace of `observable`.
if (hasStacks &&
observable.stack &&
typeof error === 'object' &&
error !== null &&
error.stack &&
error.stack.indexOf(STACK_JUMP_SEPARATOR) === -1
) {
var stacks = [];
for (var o = observable; !!o; o = o.source) {
if (o.stack) {
stacks.unshift(o.stack);
}
stacks.unshift(error.stack);
}
stacks.unshift(error.stack);
var concatedStacks = stacks.join("\n" + STACK_JUMP_SEPARATOR + "\n");
error.stack = filterStackString(concatedStacks);
var concatedStacks = stacks.join('\n' + STACK_JUMP_SEPARATOR + '\n');
error.stack = filterStackString(concatedStacks);
}

@@ -27,4 +27,3 @@ }

function filterStackString(stackString) {
var lines = stackString.split("\n"),
desiredLines = [];
var lines = stackString.split('\n'), desiredLines = [];
for (var i = 0, len = lines.length; i < len; i++) {

@@ -37,3 +36,3 @@ var line = lines[i];

}
return desiredLines.join("\n");
return desiredLines.join('\n');
}

@@ -54,4 +53,4 @@

function isNodeFrame(stackLine) {
return stackLine.indexOf("(module.js:") !== -1 ||
stackLine.indexOf("(node.js:") !== -1;
return stackLine.indexOf('(module.js:') !== -1 ||
stackLine.indexOf('(node.js:') !== -1;
}

@@ -65,4 +64,4 @@

} catch (e) {
var lines = e.stack.split("\n");
var firstLine = lines[0].indexOf("@") > 0 ? lines[1] : lines[2];
var lines = e.stack.split('\n');
var firstLine = lines[0].indexOf('@') > 0 ? lines[1] : lines[2];
var fileNameAndLineNumber = getFileNameAndLineNumber(firstLine);

@@ -77,13 +76,13 @@ if (!fileNameAndLineNumber) { return; }

function getFileNameAndLineNumber(stackLine) {
// Named functions: "at functionName (filename:lineNumber:columnNumber)"
// Named functions: 'at functionName (filename:lineNumber:columnNumber)'
var attempt1 = /at .+ \((.+):(\d+):(?:\d+)\)$/.exec(stackLine);
if (attempt1) { return [attempt1[1], Number(attempt1[2])]; }
// Anonymous functions: "at filename:lineNumber:columnNumber"
// Anonymous functions: 'at filename:lineNumber:columnNumber'
var attempt2 = /at ([^ ]+):(\d+):(?:\d+)$/.exec(stackLine);
if (attempt2) { return [attempt2[1], Number(attempt2[2])]; }
// Firefox style: "function@filename:lineNumber or @filename:lineNumber"
// Firefox style: 'function@filename:lineNumber or @filename:lineNumber'
var attempt3 = /.*@(.+):(\d+)$/.exec(stackLine);
if (attempt3) { return [attempt3[1], Number(attempt3[2])]; }
}

@@ -8,21 +8,19 @@ var observableProto;

function makeSubscribe(self, subscribe) {
return function (o) {
var oldOnError = o.onError;
o.onError = function (e) {
makeStackTraceLong(e, self);
oldOnError.call(o, e);
};
return subscribe.call(self, o);
};
}
function Observable(subscribe) {
if (Rx.config.longStackSupport && hasStacks) {
try {
throw new Error();
} catch (e) {
this.stack = e.stack.substring(e.stack.indexOf("\n") + 1);
}
var self = this;
this._subscribe = function (observer) {
var oldOnError = observer.onError.bind(observer);
observer.onError = function (err) {
makeStackTraceLong(err, self);
oldOnError(err);
};
return subscribe.call(self, observer);
};
var e = tryCatch(thrower)(new Error()).e;
this.stack = e.stack.substring(e.stack.indexOf('\n') + 1);
this._subscribe = makeSubscribe(this, subscribe);
} else {

@@ -36,4 +34,13 @@ this._subscribe = subscribe;

/**
* Subscribes an observer to the observable sequence.
* @param {Mixed} [observerOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence.
* Determines whether the given object is an Observable
* @param {Any} An object to determine whether it is an Observable
* @returns {Boolean} true if an Observable, else false.
*/
Observable.isObservable = function (o) {
return o && isFunction(o.subscribe);
}
/**
* Subscribes an o to the observable sequence.
* @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence.
* @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence.

@@ -43,6 +50,6 @@ * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence.

*/
observableProto.subscribe = observableProto.forEach = function (observerOrOnNext, onError, onCompleted) {
return this._subscribe(typeof observerOrOnNext === 'object' ?
observerOrOnNext :
observerCreate(observerOrOnNext, onError, onCompleted));
observableProto.subscribe = observableProto.forEach = function (oOrOnNext, onError, onCompleted) {
return this._subscribe(typeof oOrOnNext === 'object' ?
oOrOnNext :
observerCreate(oOrOnNext, onError, onCompleted));
};

@@ -49,0 +56,0 @@

@@ -20,3 +20,7 @@ /**

Observer.prototype.asObserver = function () {
return new AnonymousObserver(this.onNext.bind(this), this.onError.bind(this), this.onCompleted.bind(this));
var self = this;
return new AnonymousObserver(
function (x) { self.onNext(x); },
function (err) { self.onError(err); },
function () { self.onCompleted(); });
};

@@ -54,8 +58,9 @@

Observer.fromNotifier = function (handler, thisArg) {
var cb = bindCallback(handler, thisArg, 1);
return new AnonymousObserver(function (x) {
return handler.call(thisArg, notificationCreateOnNext(x));
return cb(notificationCreateOnNext(x));
}, function (e) {
return handler.call(thisArg, notificationCreateOnError(e));
return cb(notificationCreateOnError(e));
}, function () {
return handler.call(thisArg, notificationCreateOnCompleted());
return cb(notificationCreateOnCompleted());
});

@@ -62,0 +67,0 @@ };

@@ -1,7 +0,7 @@

function ObserverBase(o) {
this.o = o;
this.isStopped = false;
}
ObserverBase.prototype.onError = function (err) {
function ObserverBase(o) {
this.o = o;
this.isStopped = false;
}
ObserverBase.prototype.onError = function (err) {
if (!this.isStopped) {

@@ -8,0 +8,0 @@ this.isStopped = true;

@@ -1,13 +0,13 @@

var ConcatObservable = (function(__super__) {
inherits(ConcatObservable, __super__);
function ConcatObservable(sources) {
this.sources = sources;
__super__.call(this);
}
ConcatObservable.prototype.subscribeCore = function(o) {
var ConcatObservable = (function(__super__) {
inherits(ConcatObservable, __super__);
function ConcatObservable(sources) {
this.sources = sources;
__super__.call(this);
}
ConcatObservable.prototype.subscribeCore = function(o) {
var sink = new ConcatSink(this.sources, o);
return sink.run();
};
};
function ConcatSink(sources, o) {

@@ -22,5 +22,5 @@ this.sources = sources;

if (i === length) {
return o.onCompleted();
}
return o.onCompleted();
}
// Check if promise

@@ -43,7 +43,7 @@ var currentValue = sources[i];

};
return ConcatObservable;
}(ObservableBase));
return ConcatObservable;
}(ObservableBase));
/**

@@ -50,0 +50,0 @@ * Concatenates all the observable sequences.

var DistinctUntilChangedObservable = (function(__super__) {
inherits(DistinctUntilChangedObservable, __super__);
function DistinctUntilChangedObservable(source, keySelector, comparer) {
function DistinctUntilChangedObservable(source, keyFn, comparer) {
this.source = source;
this.keySelector = keySelector;
this.keyFn = keyFn;
this.comparer = comparer;

@@ -10,4 +10,4 @@ __super__.call(this);

DistinctUntilChangedObservable.prototype.subscribeCore = function (observer) {
return this.source.subcribe(new DistinctUntilChangedObserver(observer, keySelector, comparer));
DistinctUntilChangedObservable.prototype.subscribeCore = function (o) {
return this.source.subscribe(new DistinctUntilChangedObserver(o, this.keyFn, this.comparer));
};

@@ -18,5 +18,5 @@

function DistinctUntilChangedObserver(observer, keySelector, comparer) {
this.observer = observer;
this.keySelector = keySelector;
function DistinctUntilChangedObserver(o, keyFn, comparer) {
this.o = o;
this.keyFn = keyFn;
this.comparer = comparer;

@@ -31,15 +31,9 @@ this.hasCurrentKey = false;

var key = x;
if (this.keySelector) {
try {
key = keySelector(x);
} catch (e) {
return this.observer.onError(e);
}
if (isFunction(this.keyFn)) {
key = tryCatch(this.keyFn)(x);
if (key === errorObj) { return this.o.onError(key.e); }
}
if (this.hasCurrentKey) {
try {
var comparerEquals = this.comparer(this.currentKey, key);
} catch (e) {
return this.observer.onError(e);
}
comparerEquals = tryCatch(this.comparer)(this.currentKey, key);
if (comparerEquals === errorObj) { return this.o.onError(comparerEquals.e); }
}

@@ -49,3 +43,3 @@ if (!this.hasCurrentKey || !comparerEquals) {

this.currentKey = key;
this.observer.onNext(value);
this.o.onNext(x);
}

@@ -56,3 +50,3 @@ };

this.isStopped = true;
this.observer.onError(e);
this.o.onError(e);
}

@@ -63,3 +57,3 @@ };

this.isStopped = true;
this.observer.onCompleted();
this.o.onCompleted();
}

@@ -71,3 +65,3 @@ };

this.isStopped = true;
this.observer.onError(e);
this.o.onError(e);
return true;

@@ -80,10 +74,10 @@ }

/**
* Returns an observable sequence that contains only distinct contiguous elements according to the keySelector and the comparer.
* @param {Function} [keySelector] A function to compute the comparison key for each element. If not provided, it projects the value.
* Returns an observable sequence that contains only distinct contiguous elements according to the keyFn and the comparer.
* @param {Function} [keyFn] A function to compute the comparison key for each element. If not provided, it projects the value.
* @param {Function} [comparer] Equality comparer for computed key values. If not provided, defaults to an equality comparer function.
* @returns {Observable} An observable sequence only containing the distinct contiguous elements, based on a computed key value, from the source sequence.
*/
observableProto.distinctUntilChanged = function (keySelector, comparer) {
observableProto.distinctUntilChanged = function (keyFn, comparer) {
comparer || (comparer = defaultComparer);
return new DistinctUntilChangedObservable(this, keySelector, comparer);
return new DistinctUntilChangedObservable(this, keyFn, comparer);
};
var FinallyObservable = (function (__super__) {
inherits(FinallyObservable, __super__);
function FinallyObservable(source, action, thisArg) {
this.source = source;
this.action = bindCallback(action, thisArg, 1);
inherits(FinallyObservable, __super__);
function FinallyObservable(source, action, thisArg) {
this.source = source;
this.action = bindCallback(action, thisArg, 1);
__super__.call(this);
}
}
FinallyObservable.prototype.subscribeCore = function (o) {

@@ -13,3 +13,3 @@ var subscription = this.source.subscribe(o);

};
function FinallyDisposable(subscription, parent) {

@@ -27,8 +27,8 @@ this.isDisposed = false;

};
return FinallyObservable;
}(ObservableBase));
/**
}(ObservableBase));
/**
* Invokes a specified action after the source observable sequence terminates gracefully or exceptionally.

@@ -35,0 +35,0 @@ * @param {Function} finallyAction Action to invoke after the source observable sequence terminates.

@@ -10,4 +10,4 @@ var FromObservable = (function(__super__) {

FromObservable.prototype.subscribeCore = function (observer) {
var sink = new FromSink(observer, this);
FromObservable.prototype.subscribeCore = function (o) {
var sink = new FromSink(o, this);
return sink.run();

@@ -20,4 +20,4 @@ };

var FromSink = (function () {
function FromSink(observer, parent) {
this.observer = observer;
function FromSink(o, parent) {
this.o = o;
this.parent = parent;

@@ -29,26 +29,18 @@ }

it = getIterable(list),
observer = this.observer,
o = this.o,
mapper = this.parent.mapper;
function loopRecursive(i, recurse) {
try {
var next = it.next();
} catch (e) {
return observer.onError(e);
}
if (next.done) {
return observer.onCompleted();
}
var next = tryCatch(it.next).call(it);
if (next === errorObj) { return o.onError(next.e); }
if (next.done) { return o.onCompleted(); }
var result = next.value;
if (mapper) {
try {
result = mapper(result, i);
} catch (e) {
return observer.onError(e);
}
if (isFunction(mapper)) {
result = tryCatch(mapper)(result, i);
if (result === errorObj) { return o.onError(result.e); }
}
observer.onNext(result);
o.onNext(result);
recurse(i + 1);

@@ -65,3 +57,3 @@ }

function StringIterable(str) {
function StringIterable(s) {
this._s = s;

@@ -74,3 +66,3 @@ }

function StringIterator(str) {
function StringIterator(s) {
this._s = s;

@@ -77,0 +69,0 @@ this._l = s.length;

@@ -1,26 +0,26 @@

var FromPromiseObservable = (function(__super__) {
inherits(FromPromiseObservable, __super__);
function FromPromiseObservable(p) {
this.p = p;
__super__.call(this);
}
FromPromiseObservable.prototype.subscribeCore = function(o) {
this.p.then(function (data) {
o.onNext(data);
o.onCompleted();
}, function (err) { o.onError(err); });
return disposableEmpty;
};
return FromPromiseObservable;
}(ObservableBase));
/**
* Converts a Promise to an Observable sequence
* @param {Promise} An ES6 Compliant promise.
* @returns {Observable} An Observable sequence which wraps the existing promise success and failure.
*/
var observableFromPromise = Observable.fromPromise = function (promise) {
return new FromPromiseObservable(promise);
};
var FromPromiseObservable = (function(__super__) {
inherits(FromPromiseObservable, __super__);
function FromPromiseObservable(p) {
this.p = p;
__super__.call(this);
}
FromPromiseObservable.prototype.subscribeCore = function(o) {
this.p.then(function (data) {
o.onNext(data);
o.onCompleted();
}, function (err) { o.onError(err); });
return disposableEmpty;
};
return FromPromiseObservable;
}(ObservableBase));
/**
* Converts a Promise to an Observable sequence
* @param {Promise} An ES6 Compliant promise.
* @returns {Observable} An Observable sequence which wraps the existing promise success and failure.
*/
var observableFromPromise = Observable.fromPromise = function (promise) {
return new FromPromiseObservable(promise);
};

@@ -39,5 +39,5 @@ var JustObservable = (function(__super__) {

*/
var observableReturn = Observable['return'] = Observable.just = Observable.returnValue = function (value, scheduler) {
var observableReturn = Observable['return'] = Observable.just = function (value, scheduler) {
isScheduler(scheduler) || (scheduler = immediateScheduler);
return new JustObservable(value, scheduler);
};

@@ -9,3 +9,3 @@ var MapObservable = (function (__super__) {

}
function innerMap(selector, self) {

@@ -22,3 +22,3 @@ return function (x, i, o) { return selector.call(this, self.selector(x, i, o), i, o); }

};
function InnerObserver(o, selector, source) {

@@ -31,9 +31,7 @@ this.o = o;

}
InnerObserver.prototype.onNext = function(x) {
if (this.isStopped) { return; }
var result = tryCatch(this.selector)(x, this.i++, this.source);
if (result === errorObj) {
return this.o.onError(result.e);
}
if (result === errorObj) { return this.o.onError(result.e); }
this.o.onNext(result);

@@ -54,3 +52,3 @@ };

}
return false;

@@ -57,0 +55,0 @@ };

@@ -15,3 +15,3 @@ var MergeAllObservable = (function (__super__) {

};
function MergeAllObserver(o, g) {

@@ -30,3 +30,3 @@ this.o = o;

sad.setDisposable(innerSource.subscribe(new InnerObserver(this, this.g, sad)));
sad.setDisposable(innerSource.subscribe(new InnerObserver(this, sad)));
};

@@ -57,5 +57,4 @@ MergeAllObserver.prototype.onError = function (e) {

function InnerObserver(parent, g, sad) {
function InnerObserver(parent, sad) {
this.parent = parent;
this.g = g;
this.sad = sad;

@@ -97,4 +96,4 @@ this.isStopped = false;

*/
observableProto.mergeAll = observableProto.mergeObservable = function () {
observableProto.mergeAll = function () {
return new MergeAllObservable(this);
};

@@ -11,4 +11,4 @@ var ScanObservable = (function(__super__) {

ScanObservable.prototype.subscribeCore = function(observer) {
return this.source.subscribe(new ScanObserver(observer,this));
ScanObservable.prototype.subscribeCore = function(o) {
return this.source.subscribe(new InnerObserver(o,this));
};

@@ -19,4 +19,4 @@

function ScanObserver(observer, parent) {
this.observer = observer;
function InnerObserver(o, parent) {
this.o = o;
this.accumulator = parent.accumulator;

@@ -30,39 +30,38 @@ this.hasSeed = parent.hasSeed;

}
ScanObserver.prototype.onNext = function (x) {
if (this.isStopped) { return; }
!this.hasValue && (this.hasValue = true);
try {
InnerObserver.prototype = {
onNext: function (x) {
if (this.isStopped) { return; }
!this.hasValue && (this.hasValue = true);
if (this.hasAccumulation) {
this.accumulation = this.accumulator(this.accumulation, x);
this.accumulation = tryCatch(this.accumulator)(this.accumulation, x);
} else {
this.accumulation = this.hasSeed ? this.accumulator(this.seed, x) : x;
this.accumulation = this.hasSeed ? tryCatch(this.accumulator)(this.seed, x) : x;
this.hasAccumulation = true;
}
} catch (e) {
return this.observer.onError(e);
if (this.accumulation === errorObj) { return this.o.onError(this.accumulation.e); }
this.o.onNext(this.accumulation);
},
onError: function (e) {
if (!this.isStopped) {
this.isStopped = true;
this.o.onError(e);
}
},
onCompleted: function () {
if (!this.isStopped) {
this.isStopped = true;
!this.hasValue && this.hasSeed && this.o.onNext(this.seed);
this.o.onCompleted();
}
},
dispose: function() { this.isStopped = true; },
fail: function (e) {
if (!this.isStopped) {
this.isStopped = true;
this.o.onError(e);
return true;
}
return false;
}
this.observer.onNext(this.accumulation);
};
ScanObserver.prototype.onError = function (e) {
if (!this.isStopped) {
this.isStopped = true;
this.observer.onError(e);
}
};
ScanObserver.prototype.onCompleted = function () {
if (!this.isStopped) {
this.isStopped = true;
!this.hasValue && this.hasSeed && this.observer.onNext(this.seed);
this.observer.onCompleted();
}
};
ScanObserver.prototype.dispose = function() { this.isStopped = true; };
ScanObserver.prototype.fail = function (e) {
if (!this.isStopped) {
this.isStopped = true;
this.observer.onError(e);
return true;
}
return false;
};

@@ -77,11 +76,8 @@ /**

observableProto.scan = function () {
var hasSeed = false, seed, accumulator, source = this;
var hasSeed = false, seed, accumulator = arguments[0];
if (arguments.length === 2) {
hasSeed = true;
seed = arguments[0];
accumulator = arguments[1];
} else {
accumulator = arguments[0];
seed = arguments[1];
}
return new ScanObservable(this, accumulator, hasSeed, seed);
};

@@ -5,5 +5,5 @@ var TapObservable = (function(__super__) {

this.source = source;
this.t = !observerOrOnNext || isFunction(observerOrOnNext) ?
observerCreate(observerOrOnNext || noop, onError || noop, onCompleted || noop) :
observerOrOnNext;
this._oN = observerOrOnNext;
this._oE = onError;
this._oC = onCompleted;
__super__.call(this);

@@ -13,8 +13,10 @@ }

TapObservable.prototype.subscribeCore = function(o) {
return this.source.subscribe(new InnerObserver(o, this.t));
return this.source.subscribe(new InnerObserver(o, this));
};
function InnerObserver(o, t) {
function InnerObserver(o, p) {
this.o = o;
this.t = t;
this.t = !p._oN || isFunction(p._oN) ?
observerCreate(p._oN || noop, p._oE || noop, p._oC || noop) :
p._oN;
this.isStopped = false;

@@ -21,0 +23,0 @@ }

@@ -38,5 +38,5 @@ var ThrowObservable = (function(__super__) {

*/
var observableThrow = Observable['throw'] = Observable.throwError = Observable.throwException = function (error, scheduler) {
var observableThrow = Observable['throw'] = function (error, scheduler) {
isScheduler(scheduler) || (scheduler = immediateScheduler);
return new ThrowObservable(error, scheduler);
};

@@ -30,3 +30,3 @@ var ScheduledObserver = Rx.internals.ScheduledObserver = (function (__super__) {

ScheduledObserver.prototype.ensureActive = function () {
var isOwner = false, parent = this;
var isOwner = false;
if (!this.hasFaulted && this.queue.length > 0) {

@@ -37,3 +37,3 @@ isOwner = !this.isAcquired;

if (isOwner) {
this.disposable.setDisposable(this.scheduler.scheduleRecursive(function (self) {
this.disposable.setDisposable(this.scheduler.scheduleRecursiveWithState(this, function (parent, self) {
var work;

@@ -46,10 +46,9 @@ if (parent.queue.length > 0) {

}
try {
work();
} catch (ex) {
var res = tryCatch(work)();
if (res === errorObj) {
parent.queue = [];
parent.hasFaulted = true;
throw ex;
return thrower(res.e);
}
self();
self(parent);
}));

@@ -56,0 +55,0 @@ }

@@ -325,3 +325,3 @@ // DefinitelyTyped: partial

retry(retryCount?: number): Observable<T>;
scan<TAcc>(seed: TAcc, accumulator: (acc: TAcc, value: T) => TAcc): Observable<TAcc>;
scan<TAcc>(accumulator: (acc: TAcc, value: T, seed: TAcc) => TAcc): Observable<TAcc>;
scan(accumulator: (acc: T, value: T) => T): Observable<T>;

@@ -343,2 +343,3 @@ skipLast(count: number): Observable<T>;

selectMany<TResult>(other: IPromise<TResult>): Observable<TResult>;
selectMany<TResult>(selector: (value: T) => TResult[]): Observable<TResult>; // alias for selectMany
flatMap<TOther, TResult>(selector: (value: T) => Observable<TOther>, resultSelector: (item: T, other: TOther) => TResult): Observable<TResult>; // alias for selectMany

@@ -350,3 +351,24 @@ flatMap<TOther, TResult>(selector: (value: T) => IPromise<TOther>, resultSelector: (item: T, other: TOther) => TResult): Observable<TResult>; // alias for selectMany

flatMap<TResult>(other: IPromise<TResult>): Observable<TResult>; // alias for selectMany
flatMap<TResult>(selector: (value: T) => TResult[]): Observable<TResult>; // alias for selectMany
/**
* Projects each notification of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence.
* @param {Function} onNext A transform function to apply to each element; the second parameter of the function represents the index of the source element.
* @param {Function} onError A transform function to apply when an error occurs in the source sequence.
* @param {Function} onCompleted A transform function to apply when the end of the source sequence is reached.
* @param {Any} [thisArg] An optional "this" to use to invoke each transform.
* @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence.
*/
selectManyObserver<T2, T3, T4>(onNext: (value: T, index: number) => Observable<T2>, onError: (exception: any) => Observable<T3>, onCompleted: () => Observable<T4>, thisArg?: any): Observable<T2 | T3 | T4>;
/**
* Projects each notification of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence.
* @param {Function} onNext A transform function to apply to each element; the second parameter of the function represents the index of the source element.
* @param {Function} onError A transform function to apply when an error occurs in the source sequence.
* @param {Function} onCompleted A transform function to apply when the end of the source sequence is reached.
* @param {Any} [thisArg] An optional "this" to use to invoke each transform.
* @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence.
*/
flatMapObserver<T2, T3, T4>(onNext: (value: T, index: number) => Observable<T2>, onError: (exception: any) => Observable<T3>, onCompleted: () => Observable<T4>, thisArg?: any): Observable<T2 | T3 | T4>;
selectConcat<T2, R>(selector: (value: T, index: number) => Observable<T2>, resultSelector: (value1: T, value2: T2, index: number) => R): Observable<R>;

@@ -493,26 +515,2 @@ selectConcat<T2, R>(selector: (value: T, index: number) => IPromise<T2>, resultSelector: (value1: T, value2: T2, index: number) => R): Observable<R>;

/**
* Converts an iterable into an Observable sequence
*
* @example
* var res = Rx.Observable.fromIterable(new Map());
* var res = Rx.Observable.fromIterable(function* () { yield 42; });
* var res = Rx.Observable.fromIterable(new Set(), Rx.Scheduler.timeout);
* @param generator Generator to convert from.
* @param [scheduler] Scheduler to run the enumeration of the input sequence on.
* @returns The observable sequence whose elements are pulled from the given generator sequence.
*/
fromItreable<T>(generator: () => { next(): { done: boolean; value?: T; }; }, scheduler?: IScheduler): Observable<T>;
/**
* Converts an iterable into an Observable sequence
*
* @example
* var res = Rx.Observable.fromIterable(new Map());
* var res = Rx.Observable.fromIterable(new Set(), Rx.Scheduler.timeout);
* @param iterable Iterable to convert from.
* @param [scheduler] Scheduler to run the enumeration of the input sequence on.
* @returns The observable sequence whose elements are pulled from the given generator sequence.
*/
fromItreable<T>(iterable: {}, scheduler?: IScheduler): Observable<T>; // todo: can't describe ES6 Iterable via TypeScript type system
generate<TState, TResult>(initialState: TState, condition: (state: TState) => boolean, iterate: (state: TState) => TState, resultSelector: (state: TState) => TResult, scheduler?: IScheduler): Observable<TResult>;

@@ -645,2 +643,4 @@ never<T>(): Observable<T>;

pairs<T>(obj: { [key: string]: T }, scheduler?: IScheduler): Observable<[string, T]>;
zip<T1, T2, TResult>(first: Observable<T1>, sources: Observable<T2>[], resultSelector: (item1: T1, ...right: T2[]) => TResult): Observable<TResult>;

@@ -672,3 +672,3 @@ zip<T1, T2, TResult>(first: Observable<T1>, sources: IPromise<T2>[], resultSelector: (item1: T1, ...right: T2[]) => TResult): Observable<TResult>;

fromPromise<T>(promise: IPromise<T>): Observable<T>;
prototype: any;

@@ -675,0 +675,0 @@ }

@@ -43,13 +43,5 @@ // Type definitions for RxJS-Aggregates v2.2.28

elementAt(index: number): Observable<T>;
elementAtOrDefault(index: number, defaultValue?: T): Observable<T>;
single(predicate?: (value: T, index: number, source: Observable<T>) => boolean, thisArg?: any): Observable<T>;
singleOrDefault(predicate?: (value: T, index: number, source: Observable<T>) => boolean, defaultValue?: T, thisArg?: any): Observable<T>;
first(predicate?: (value: T, index: number, source: Observable<T>) => boolean, thisArg?: any): Observable<T>;
firstOrDefault(predicate?: (value: T, index: number, source: Observable<T>) => boolean, defaultValue?: T, thisArg?: any): Observable<T>;
last(predicate?: (value: T, index: number, source: Observable<T>) => boolean, thisArg?: any): Observable<T>;
lastOrDefault(predicate?: (value: T, index: number, source: Observable<T>) => boolean, defaultValue?: T, thisArg?: any): Observable<T>;
find(predicate: (value: T, index: number, source: Observable<T>) => boolean, thisArg?: any): Observable<T>;

@@ -56,0 +48,0 @@ findIndex(predicate: (value: T, index: number, source: Observable<T>) => boolean, thisArg?: any): Observable<number>;

@@ -70,4 +70,5 @@ // DefinitelyTyped: partial

fromEvent<T>(element: Node, eventName: string, selector?: (arguments: any[]) => T): Observable<T>;
fromEventPattern<T>(addHandler: (handler: Function) => void, removeHandler: (handler: Function) => void, selector?: (arguments: any[])=>T): Observable<T>;
fromEvent<T>(element: {on: (name: string, cb: (e: any) => any) => void; off: (name: string, cb: (e: any) => any) => void}, eventName: string, selector?: (arguments: any[]) => T): Observable<T>;
fromEventPattern<T>(addHandler: (handler: Function) => void, removeHandler: (handler: Function) => void, selector?: (arguments: any[])=>T): Observable<T>;
}
}

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc