rxjs-rails 2.3.14 → 2.3.20

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rxjs/rails/version.rb +1 -1
  3. data/vendor/assets/javascripts/rx.aggregates.js +325 -370
  4. data/vendor/assets/javascripts/rx.aggregates.min.js +1 -1
  5. data/vendor/assets/javascripts/rx.all.compat.js +1115 -930
  6. data/vendor/assets/javascripts/rx.all.compat.min.js +4 -3
  7. data/vendor/assets/javascripts/rx.all.js +1113 -928
  8. data/vendor/assets/javascripts/rx.all.min.js +3 -3
  9. data/vendor/assets/javascripts/rx.async.compat.js +16 -20
  10. data/vendor/assets/javascripts/rx.async.compat.min.js +1 -1
  11. data/vendor/assets/javascripts/rx.async.js +14 -18
  12. data/vendor/assets/javascripts/rx.async.min.js +1 -1
  13. data/vendor/assets/javascripts/rx.backpressure.js +26 -10
  14. data/vendor/assets/javascripts/rx.backpressure.min.js +1 -1
  15. data/vendor/assets/javascripts/rx.binding.js +2 -14
  16. data/vendor/assets/javascripts/rx.binding.min.js +1 -1
  17. data/vendor/assets/javascripts/rx.coincidence.js +13 -13
  18. data/vendor/assets/javascripts/rx.coincidence.min.js +1 -1
  19. data/vendor/assets/javascripts/rx.compat.js +586 -378
  20. data/vendor/assets/javascripts/rx.compat.min.js +2 -2
  21. data/vendor/assets/javascripts/rx.experimental.js +37 -29
  22. data/vendor/assets/javascripts/rx.experimental.min.js +1 -1
  23. data/vendor/assets/javascripts/rx.js +586 -378
  24. data/vendor/assets/javascripts/rx.lite.compat.js +632 -394
  25. data/vendor/assets/javascripts/rx.lite.compat.min.js +2 -2
  26. data/vendor/assets/javascripts/rx.lite.extras.js +29 -25
  27. data/vendor/assets/javascripts/rx.lite.extras.min.js +1 -1
  28. data/vendor/assets/javascripts/rx.lite.js +630 -392
  29. data/vendor/assets/javascripts/rx.lite.min.js +2 -2
  30. data/vendor/assets/javascripts/rx.min.js +2 -2
  31. data/vendor/assets/javascripts/rx.sorting.js +72 -0
  32. data/vendor/assets/javascripts/rx.sorting.min.js +3 -0
  33. data/vendor/assets/javascripts/rx.testing.js +116 -83
  34. data/vendor/assets/javascripts/rx.testing.min.js +1 -1
  35. data/vendor/assets/javascripts/rx.time.js +127 -101
  36. data/vendor/assets/javascripts/rx.time.min.js +1 -1
  37. metadata +4 -2
@@ -24,7 +24,7 @@
24
24
  var Rx = {
25
25
  internals: {},
26
26
  config: {
27
- Promise: root.Promise // Detect if promise exists
27
+ Promise: root.Promise,
28
28
  },
29
29
  helpers: { }
30
30
  };
@@ -66,6 +66,104 @@
66
66
  var objectDisposed = 'Object has been disposed';
67
67
  function checkDisposed() { if (this.isDisposed) { throw new Error(objectDisposed); } }
68
68
 
69
+ Rx.config.longStackSupport = false;
70
+ var hasStacks = false;
71
+ try {
72
+ throw new Error();
73
+ } catch (e) {
74
+ hasStacks = !!e.stack;
75
+ }
76
+
77
+ // All code after this point will be filtered from stack traces reported by RxJS
78
+ var rStartingLine = captureLine(), rFileName;
79
+
80
+ var STACK_JUMP_SEPARATOR = "From previous event:";
81
+
82
+ function makeStackTraceLong(error, observable) {
83
+ // If possible, transform the error stack trace by removing Node and RxJS
84
+ // cruft, then concatenating with the stack trace of `observable`.
85
+ if (hasStacks &&
86
+ observable.stack &&
87
+ typeof error === "object" &&
88
+ error !== null &&
89
+ error.stack &&
90
+ error.stack.indexOf(STACK_JUMP_SEPARATOR) === -1
91
+ ) {
92
+ var stacks = [];
93
+ for (var o = observable; !!o; o = o.source) {
94
+ if (o.stack) {
95
+ stacks.unshift(o.stack);
96
+ }
97
+ }
98
+ stacks.unshift(error.stack);
99
+
100
+ var concatedStacks = stacks.join("\n" + STACK_JUMP_SEPARATOR + "\n");
101
+ error.stack = filterStackString(concatedStacks);
102
+ }
103
+ }
104
+
105
+ function filterStackString(stackString) {
106
+ var lines = stackString.split("\n"),
107
+ desiredLines = [];
108
+ for (var i = 0, len = lines.length; i < len; i++) {
109
+ var line = lines[i];
110
+
111
+ if (!isInternalFrame(line) && !isNodeFrame(line) && line) {
112
+ desiredLines.push(line);
113
+ }
114
+ }
115
+ return desiredLines.join("\n");
116
+ }
117
+
118
+ function isInternalFrame(stackLine) {
119
+ var fileNameAndLineNumber = getFileNameAndLineNumber(stackLine);
120
+ if (!fileNameAndLineNumber) {
121
+ return false;
122
+ }
123
+ var fileName = fileNameAndLineNumber[0], lineNumber = fileNameAndLineNumber[1];
124
+
125
+ console.log(rFileName, rStartingLine, rEndingLine);
126
+
127
+ return fileName === rFileName &&
128
+ lineNumber >= rStartingLine &&
129
+ lineNumber <= rEndingLine;
130
+ }
131
+
132
+ function isNodeFrame(stackLine) {
133
+ return stackLine.indexOf("(module.js:") !== -1 ||
134
+ stackLine.indexOf("(node.js:") !== -1;
135
+ }
136
+
137
+ function captureLine() {
138
+ if (!hasStacks) { return; }
139
+
140
+ try {
141
+ throw new Error();
142
+ } catch (e) {
143
+ var lines = e.stack.split("\n");
144
+ var firstLine = lines[0].indexOf("@") > 0 ? lines[1] : lines[2];
145
+ var fileNameAndLineNumber = getFileNameAndLineNumber(firstLine);
146
+ if (!fileNameAndLineNumber) { return; }
147
+
148
+ rFileName = fileNameAndLineNumber[0];
149
+ return fileNameAndLineNumber[1];
150
+ }
151
+ }
152
+
153
+ function getFileNameAndLineNumber(stackLine) {
154
+ // Named functions: "at functionName (filename:lineNumber:columnNumber)"
155
+ var attempt1 = /at .+ \((.+):(\d+):(?:\d+)\)$/.exec(stackLine);
156
+ if (attempt1) { return [attempt1[1], Number(attempt1[2])]; }
157
+
158
+ // Anonymous functions: "at filename:lineNumber:columnNumber"
159
+ var attempt2 = /at ([^ ]+):(\d+):(?:\d+)$/.exec(stackLine);
160
+ if (attempt2) { return [attempt2[1], Number(attempt2[2])]; }
161
+
162
+ // Firefox style: "function@filename:lineNumber or @filename:lineNumber"
163
+ var attempt3 = /.*@(.+):(\d+)$/.exec(stackLine);
164
+ if (attempt3) { return [attempt3[1], Number(attempt3[2])]; }
165
+ }
166
+
69
167
  // Shim in iterator support
70
168
  var $iterator$ = (typeof Symbol === 'function' && Symbol.iterator) ||
71
169
  '_es6shim_iterator_';
@@ -76,7 +174,21 @@
76
174
 
77
175
  var doneEnumerator = Rx.doneEnumerator = { done: true, value: undefined };
78
176
 
79
- Rx.iterator = $iterator$;
177
+ var isIterable = Rx.helpers.isIterable = function (o) {
178
+ return o[$iterator$] !== undefined;
179
+ }
180
+
181
+ var isArrayLike = Rx.helpers.isArrayLike = function (o) {
182
+ return o && o.length !== undefined;
183
+ }
184
+
185
+ Rx.helpers.iterator = $iterator$;
186
+
187
+ var deprecate = Rx.helpers.deprecate = function (name, alternative) {
188
+ /*if (typeof console !== "undefined" && typeof console.warn === "function") {
189
+ console.warn(name + ' is deprecated, use ' + alternative + ' instead.', new Error('').stack);
190
+ }*/
191
+ }
80
192
 
81
193
  /** `Object#toString` result shortcuts */
82
194
  var argsClass = '[object Arguments]',
@@ -93,15 +205,16 @@
93
205
  var toString = Object.prototype.toString,
94
206
  hasOwnProperty = Object.prototype.hasOwnProperty,
95
207
  supportsArgsClass = toString.call(arguments) == argsClass, // For less <IE9 && FF<4
96
- suportNodeClass,
208
+ supportNodeClass,
97
209
  errorProto = Error.prototype,
98
210
  objectProto = Object.prototype,
211
+ stringProto = String.prototype,
99
212
  propertyIsEnumerable = objectProto.propertyIsEnumerable;
100
213
 
101
214
  try {
102
- suportNodeClass = !(toString.call(document) == objectClass && !({ 'toString': 0 } + ''));
103
- } catch(e) {
104
- suportNodeClass = true;
215
+ supportNodeClass = !(toString.call(document) == objectClass && !({ 'toString': 0 } + ''));
216
+ } catch (e) {
217
+ supportNodeClass = true;
105
218
  }
106
219
 
107
220
  var shadowedProps = [
@@ -206,7 +319,7 @@
206
319
  return typeof value.toString != 'function' && typeof (value + '') == 'string';
207
320
  }
208
321
 
209
- function isArguments(value) {
322
+ var isArguments = function(value) {
210
323
  return (value && typeof value == 'object') ? toString.call(value) == argsClass : false;
211
324
  }
212
325
 
@@ -262,10 +375,10 @@
262
375
 
263
376
  case numberClass:
264
377
  // treat `NaN` vs. `NaN` as equal
265
- return (a != +a)
266
- ? b != +b
378
+ return (a != +a) ?
379
+ b != +b :
267
380
  // but treat `-0` vs. `+0` as not equal
268
- : (a == 0 ? (1 / a == 1 / b) : a == +b);
381
+ (a == 0 ? (1 / a == 1 / b) : a == +b);
269
382
 
270
383
  case regexpClass:
271
384
  case stringClass:
@@ -1175,15 +1288,13 @@ if (!Array.prototype.forEach) {
1175
1288
  return SchedulePeriodicRecursive;
1176
1289
  }());
1177
1290
 
1178
- /**
1179
- * Gets a scheduler that schedules work immediately on the current thread.
1180
- */
1291
+ /** Gets a scheduler that schedules work immediately on the current thread. */
1181
1292
  var immediateScheduler = Scheduler.immediate = (function () {
1182
1293
 
1183
1294
  function scheduleNow(state, action) { return action(this, state); }
1184
1295
 
1185
1296
  function scheduleRelative(state, dueTime, action) {
1186
- var dt = normalizeTime(dt);
1297
+ var dt = normalizeTime(dueTime);
1187
1298
  while (dt - this.now() > 0) { }
1188
1299
  return action(this, state);
1189
1300
  }
@@ -1297,24 +1408,24 @@ if (!Array.prototype.forEach) {
1297
1408
  oldHandler = root.onmessage;
1298
1409
  // Test for async
1299
1410
  root.onmessage = function () { isAsync = true; };
1300
- root.postMessage('','*');
1411
+ root.postMessage('', '*');
1301
1412
  root.onmessage = oldHandler;
1302
1413
 
1303
1414
  return isAsync;
1304
1415
  }
1305
1416
 
1306
- // Use in order, nextTick, setImmediate, postMessage, MessageChannel, script readystatechanged, setTimeout
1307
- if (typeof process !== 'undefined' && {}.toString.call(process) === '[object process]') {
1308
- scheduleMethod = process.nextTick;
1309
- } else if (typeof setImmediate === 'function') {
1417
+ // Use in order, setImmediate, nextTick, postMessage, MessageChannel, script readystatechanged, setTimeout
1418
+ if (typeof setImmediate === 'function') {
1310
1419
  scheduleMethod = setImmediate;
1311
1420
  clearMethod = clearImmediate;
1421
+ } else if (typeof process !== 'undefined' && {}.toString.call(process) === '[object process]') {
1422
+ scheduleMethod = process.nextTick;
1312
1423
  } else if (postMessageSupported()) {
1313
1424
  var MSG_PREFIX = 'ms.rx.schedule' + Math.random(),
1314
1425
  tasks = {},
1315
1426
  taskId = 0;
1316
1427
 
1317
- function onGlobalPostMessage(event) {
1428
+ var onGlobalPostMessage = function (event) {
1318
1429
  // Only if we're a match to avoid any other global events
1319
1430
  if (typeof event.data === 'string' && event.data.substring(0, MSG_PREFIX.length) === MSG_PREFIX) {
1320
1431
  var handleId = event.data.substring(MSG_PREFIX.length),
@@ -1615,8 +1726,8 @@ if (!Array.prototype.forEach) {
1615
1726
  var e;
1616
1727
  try {
1617
1728
  e = sources[$iterator$]();
1618
- } catch(err) {
1619
- observer.onError();
1729
+ } catch (err) {
1730
+ observer.onError(err);
1620
1731
  return;
1621
1732
  }
1622
1733
 
@@ -1657,14 +1768,14 @@ if (!Array.prototype.forEach) {
1657
1768
  });
1658
1769
  };
1659
1770
 
1660
- Enumerable.prototype.catchException = function () {
1771
+ Enumerable.prototype.catchError = function () {
1661
1772
  var sources = this;
1662
1773
  return new AnonymousObservable(function (observer) {
1663
1774
  var e;
1664
1775
  try {
1665
1776
  e = sources[$iterator$]();
1666
- } catch(err) {
1667
- observer.onError();
1777
+ } catch (err) {
1778
+ observer.onError(err);
1668
1779
  return;
1669
1780
  }
1670
1781
 
@@ -1802,7 +1913,7 @@ if (!Array.prototype.forEach) {
1802
1913
  * @param {Scheduler} scheduler Scheduler to schedule observer messages on.
1803
1914
  * @returns {Observer} Observer whose messages are scheduled on the given scheduler.
1804
1915
  */
1805
- Observer.notifyOn = function (scheduler) {
1916
+ Observer.prototype.notifyOn = function (scheduler) {
1806
1917
  return new ObserveOnObserver(scheduler, this);
1807
1918
  };
1808
1919
 
@@ -1983,23 +2094,17 @@ if (!Array.prototype.forEach) {
1983
2094
 
1984
2095
  ScheduledObserver.prototype.next = function (value) {
1985
2096
  var self = this;
1986
- this.queue.push(function () {
1987
- self.observer.onNext(value);
1988
- });
2097
+ this.queue.push(function () { self.observer.onNext(value); });
1989
2098
  };
1990
2099
 
1991
- ScheduledObserver.prototype.error = function (err) {
2100
+ ScheduledObserver.prototype.error = function (e) {
1992
2101
  var self = this;
1993
- this.queue.push(function () {
1994
- self.observer.onError(err);
1995
- });
2102
+ this.queue.push(function () { self.observer.onError(e); });
1996
2103
  };
1997
2104
 
1998
2105
  ScheduledObserver.prototype.completed = function () {
1999
2106
  var self = this;
2000
- this.queue.push(function () {
2001
- self.observer.onCompleted();
2002
- });
2107
+ this.queue.push(function () { self.observer.onCompleted(); });
2003
2108
  };
2004
2109
 
2005
2110
  ScheduledObserver.prototype.ensureActive = function () {
@@ -2040,8 +2145,9 @@ if (!Array.prototype.forEach) {
2040
2145
  var ObserveOnObserver = (function (__super__) {
2041
2146
  inherits(ObserveOnObserver, __super__);
2042
2147
 
2043
- function ObserveOnObserver() {
2044
- __super__.apply(this, arguments);
2148
+ function ObserveOnObserver(scheduler, observer, cancel) {
2149
+ __super__.call(this, scheduler, observer);
2150
+ this._cancel = cancel;
2045
2151
  }
2046
2152
 
2047
2153
  ObserveOnObserver.prototype.next = function (value) {
@@ -2059,6 +2165,12 @@ if (!Array.prototype.forEach) {
2059
2165
  this.ensureActive();
2060
2166
  };
2061
2167
 
2168
+ ObserveOnObserver.prototype.dispose = function () {
2169
+ __super__.prototype.dispose.call(this);
2170
+ this._cancel && this._cancel.dispose();
2171
+ this._cancel = null;
2172
+ };
2173
+
2062
2174
  return ObserveOnObserver;
2063
2175
  })(ScheduledObserver);
2064
2176
 
@@ -2070,6 +2182,24 @@ if (!Array.prototype.forEach) {
2070
2182
  var Observable = Rx.Observable = (function () {
2071
2183
 
2072
2184
  function Observable(subscribe) {
2185
+ if (Rx.config.longStackSupport && hasStacks) {
2186
+ try {
2187
+ throw new Error();
2188
+ } catch (e) {
2189
+ this.stack = e.stack.substring(e.stack.indexOf("\n") + 1);
2190
+ }
2191
+
2192
+ var self = this;
2193
+ this._subscribe = function (observer) {
2194
+ observer.onError = function (err) {
2195
+ makeStackTraceLong(self, err);
2196
+ observer.onError(err);
2197
+ };
2198
+
2199
+ subscribe(observer);
2200
+ };
2201
+ }
2202
+
2073
2203
  this._subscribe = subscribe;
2074
2204
  }
2075
2205
 
@@ -2134,7 +2264,7 @@ if (!Array.prototype.forEach) {
2134
2264
  var source = this;
2135
2265
  return new AnonymousObservable(function (observer) {
2136
2266
  return source.subscribe(new ObserveOnObserver(scheduler, observer));
2137
- });
2267
+ }, source);
2138
2268
  };
2139
2269
 
2140
2270
  /**
@@ -2156,7 +2286,7 @@ if (!Array.prototype.forEach) {
2156
2286
  d.setDisposable(new ScheduledDisposable(scheduler, source.subscribe(observer)));
2157
2287
  }));
2158
2288
  return d;
2159
- });
2289
+ }, source);
2160
2290
  };
2161
2291
 
2162
2292
  /**
@@ -2170,10 +2300,8 @@ if (!Array.prototype.forEach) {
2170
2300
 
2171
2301
  promise.then(
2172
2302
  function (value) {
2173
- if (!subject.isDisposed) {
2174
- subject.onNext(value);
2175
- subject.onCompleted();
2176
- }
2303
+ subject.onNext(value);
2304
+ subject.onCompleted();
2177
2305
  },
2178
2306
  subject.onError.bind(subject));
2179
2307
 
@@ -2209,36 +2337,34 @@ if (!Array.prototype.forEach) {
2209
2337
  };
2210
2338
 
2211
2339
  /**
2212
- * Creates a list from an observable sequence.
2213
- * @returns An observable sequence containing a single element with a list containing all the elements of the source sequence.
2340
+ * Creates an array from an observable sequence.
2341
+ * @returns {Observable} An observable sequence containing a single element with a list containing all the elements of the source sequence.
2214
2342
  */
2215
2343
  observableProto.toArray = function () {
2216
- var self = this;
2344
+ var source = this;
2217
2345
  return new AnonymousObservable(function(observer) {
2218
2346
  var arr = [];
2219
- return self.subscribe(
2347
+ return source.subscribe(
2220
2348
  arr.push.bind(arr),
2221
2349
  observer.onError.bind(observer),
2222
2350
  function () {
2223
2351
  observer.onNext(arr);
2224
2352
  observer.onCompleted();
2225
2353
  });
2226
- });
2354
+ }, source);
2227
2355
  };
2228
2356
 
2229
2357
  /**
2230
2358
  * Creates an observable sequence from a specified subscribe method implementation.
2231
- *
2232
2359
  * @example
2233
2360
  * var res = Rx.Observable.create(function (observer) { return function () { } );
2234
2361
  * var res = Rx.Observable.create(function (observer) { return Rx.Disposable.empty; } );
2235
2362
  * var res = Rx.Observable.create(function (observer) { } );
2236
- *
2237
2363
  * @param {Function} subscribe Implementation of the resulting observable sequence's subscribe method, returning a function that will be wrapped in a Disposable.
2238
2364
  * @returns {Observable} The observable sequence with the specified implementation for the Subscribe method.
2239
2365
  */
2240
- Observable.create = Observable.createWithDisposable = function (subscribe) {
2241
- return new AnonymousObservable(subscribe);
2366
+ Observable.create = Observable.createWithDisposable = function (subscribe, parent) {
2367
+ return new AnonymousObservable(subscribe, parent);
2242
2368
  };
2243
2369
 
2244
2370
  /**
@@ -2282,6 +2408,60 @@ if (!Array.prototype.forEach) {
2282
2408
 
2283
2409
  var maxSafeInteger = Math.pow(2, 53) - 1;
2284
2410
 
2411
+ function StringIterable(str) {
2412
+ this._s = s;
2413
+ }
2414
+
2415
+ StringIterable.prototype[$iterator$] = function () {
2416
+ return new StringIterator(this._s);
2417
+ };
2418
+
2419
+ function StringIterator(str) {
2420
+ this._s = s;
2421
+ this._l = s.length;
2422
+ this._i = 0;
2423
+ }
2424
+
2425
+ StringIterator.prototype[$iterator$] = function () {
2426
+ return this;
2427
+ };
2428
+
2429
+ StringIterator.prototype.next = function () {
2430
+ if (this._i < this._l) {
2431
+ var val = this._s.charAt(this._i++);
2432
+ return { done: false, value: val };
2433
+ } else {
2434
+ return doneEnumerator;
2435
+ }
2436
+ };
2437
+
2438
+ function ArrayIterable(a) {
2439
+ this._a = a;
2440
+ }
2441
+
2442
+ ArrayIterable.prototype[$iterator$] = function () {
2443
+ return new ArrayIterator(this._a);
2444
+ };
2445
+
2446
+ function ArrayIterator(a) {
2447
+ this._a = a;
2448
+ this._l = toLength(a);
2449
+ this._i = 0;
2450
+ }
2451
+
2452
+ ArrayIterator.prototype[$iterator$] = function () {
2453
+ return this;
2454
+ };
2455
+
2456
+ ArrayIterator.prototype.next = function () {
2457
+ if (this._i < this._l) {
2458
+ var val = this._a[this._i++];
2459
+ return { done: false, value: val };
2460
+ } else {
2461
+ return doneEnumerator;
2462
+ }
2463
+ };
2464
+
2285
2465
  function numberIsFinite(value) {
2286
2466
  return typeof value === 'number' && root.isFinite(value);
2287
2467
  }
@@ -2290,8 +2470,18 @@ if (!Array.prototype.forEach) {
2290
2470
  return n !== n;
2291
2471
  }
2292
2472
 
2293
- function isIterable(o) {
2294
- return o[$iterator$] !== undefined;
2473
+ function getIterable(o) {
2474
+ var i = o[$iterator$], it;
2475
+ if (!i && typeof o === 'string') {
2476
+ it = new StringIterable(o);
2477
+ return it[$iterator$]();
2478
+ }
2479
+ if (!i && o.length !== undefined) {
2480
+ it = new ArrayIterable(o);
2481
+ return it[$iterator$]();
2482
+ }
2483
+ if (!i) { throw new TypeError('Object is not iterable'); }
2484
+ return o[$iterator$]();
2295
2485
  }
2296
2486
 
2297
2487
  function sign(value) {
@@ -2311,10 +2501,6 @@ if (!Array.prototype.forEach) {
2311
2501
  return len;
2312
2502
  }
2313
2503
 
2314
- function isCallable(f) {
2315
- return Object.prototype.toString.call(f) === '[object Function]' && typeof f === 'function';
2316
- }
2317
-
2318
2504
  /**
2319
2505
  * This method creates a new Observable sequence from an array-like or iterable object.
2320
2506
  * @param {Any} arrayLike An array-like or iterable object to convert to an Observable sequence.
@@ -2326,66 +2512,52 @@ if (!Array.prototype.forEach) {
2326
2512
  if (iterable == null) {
2327
2513
  throw new Error('iterable cannot be null.')
2328
2514
  }
2329
- if (mapFn && !isCallable(mapFn)) {
2515
+ if (mapFn && !isFunction(mapFn)) {
2330
2516
  throw new Error('mapFn when provided must be a function');
2331
2517
  }
2332
2518
  isScheduler(scheduler) || (scheduler = currentThreadScheduler);
2519
+ var list = Object(iterable), it = getIterable(list);
2333
2520
  return new AnonymousObservable(function (observer) {
2334
- var list = Object(iterable),
2335
- objIsIterable = isIterable(list),
2336
- len = objIsIterable ? 0 : toLength(list),
2337
- it = objIsIterable ? list[$iterator$]() : null,
2338
- i = 0;
2521
+ var i = 0;
2339
2522
  return scheduler.scheduleRecursive(function (self) {
2340
- if (i < len || objIsIterable) {
2341
- var result;
2342
- if (objIsIterable) {
2343
- var next;
2344
- try {
2345
- next = it.next();
2346
- } catch (e) {
2347
- observer.onError(e);
2348
- return;
2349
- }
2350
- if (next.done) {
2351
- observer.onCompleted();
2352
- return;
2353
- }
2523
+ var next;
2524
+ try {
2525
+ next = it.next();
2526
+ } catch (e) {
2527
+ observer.onError(e);
2528
+ return;
2529
+ }
2530
+ if (next.done) {
2531
+ observer.onCompleted();
2532
+ return;
2533
+ }
2354
2534
 
2355
- result = next.value;
2356
- } else {
2357
- result = !!list.charAt ? list.charAt(i) : list[i];
2358
- }
2535
+ var result = next.value;
2359
2536
 
2360
- if (mapFn && isCallable(mapFn)) {
2361
- try {
2362
- result = thisArg ? mapFn.call(thisArg, result, i) : mapFn(result, i);
2363
- } catch (e) {
2364
- observer.onError(e);
2365
- return;
2366
- }
2537
+ if (mapFn && isFunction(mapFn)) {
2538
+ try {
2539
+ result = mapFn.call(thisArg, result, i);
2540
+ } catch (e) {
2541
+ observer.onError(e);
2542
+ return;
2367
2543
  }
2368
-
2369
- observer.onNext(result);
2370
- i++;
2371
- self();
2372
- } else {
2373
- observer.onCompleted();
2374
2544
  }
2545
+
2546
+ observer.onNext(result);
2547
+ i++;
2548
+ self();
2375
2549
  });
2376
2550
  });
2377
2551
  };
2378
2552
 
2379
2553
  /**
2380
2554
  * Converts an array to an observable sequence, using an optional scheduler to enumerate the array.
2381
- *
2382
- * @example
2383
- * var res = Rx.Observable.fromArray([1,2,3]);
2384
- * var res = Rx.Observable.fromArray([1,2,3], Rx.Scheduler.timeout);
2555
+ * @deprecated use Observable.from or Observable.of
2385
2556
  * @param {Scheduler} [scheduler] Scheduler to run the enumeration of the input sequence on.
2386
2557
  * @returns {Observable} The observable sequence whose elements are pulled from the given enumerable sequence.
2387
2558
  */
2388
2559
  var observableFromArray = Observable.fromArray = function (array, scheduler) {
2560
+ deprecate('fromArray', 'from');
2389
2561
  isScheduler(scheduler) || (scheduler = currentThreadScheduler);
2390
2562
  return new AnonymousObservable(function (observer) {
2391
2563
  var count = 0, len = array.length;
@@ -2453,29 +2625,36 @@ if (!Array.prototype.forEach) {
2453
2625
  });
2454
2626
  };
2455
2627
 
2628
+ function observableOf (scheduler, array) {
2629
+ isScheduler(scheduler) || (scheduler = currentThreadScheduler);
2630
+ return new AnonymousObservable(function (observer) {
2631
+ var count = 0, len = array.length;
2632
+ return scheduler.scheduleRecursive(function (self) {
2633
+ if (count < len) {
2634
+ observer.onNext(array[count++]);
2635
+ self();
2636
+ } else {
2637
+ observer.onCompleted();
2638
+ }
2639
+ });
2640
+ });
2641
+ }
2642
+
2456
2643
  /**
2457
2644
  * This method creates a new Observable instance with a variable number of arguments, regardless of number or type of the arguments.
2458
- * @example
2459
- * var res = Rx.Observable.of(1,2,3);
2460
2645
  * @returns {Observable} The observable sequence whose elements are pulled from the given arguments.
2461
2646
  */
2462
2647
  Observable.of = function () {
2463
- var len = arguments.length, args = new Array(len);
2464
- for(var i = 0; i < len; i++) { args[i] = arguments[i]; }
2465
- return observableFromArray(args);
2648
+ return observableOf(null, arguments);
2466
2649
  };
2467
2650
 
2468
2651
  /**
2469
2652
  * This method creates a new Observable instance with a variable number of arguments, regardless of number or type of the arguments.
2470
- * @example
2471
- * var res = Rx.Observable.of(1,2,3);
2472
2653
  * @param {Scheduler} scheduler A scheduler to use for scheduling the arguments.
2473
2654
  * @returns {Observable} The observable sequence whose elements are pulled from the given arguments.
2474
2655
  */
2475
- var observableOf = Observable.ofWithScheduler = function (scheduler) {
2476
- var len = arguments.length - 1, args = new Array(len);
2477
- for(var i = 0; i < len; i++) { args[i] = arguments[i + 1]; }
2478
- return observableFromArray(args, scheduler);
2656
+ Observable.ofWithScheduler = function (scheduler) {
2657
+ return observableOf(scheduler, slice.call(arguments, 1));
2479
2658
  };
2480
2659
 
2481
2660
  /**
@@ -2532,7 +2711,7 @@ if (!Array.prototype.forEach) {
2532
2711
  * @param {Scheduler} scheduler Scheduler to send the single element on. If not specified, defaults to Scheduler.immediate.
2533
2712
  * @returns {Observable} An observable sequence containing the single specified element.
2534
2713
  */
2535
- var observableReturn = Observable['return'] = Observable.returnValue = Observable.just = function (value, scheduler) {
2714
+ var observableReturn = Observable['return'] = Observable.just = function (value, scheduler) {
2536
2715
  isScheduler(scheduler) || (scheduler = immediateScheduler);
2537
2716
  return new AnonymousObservable(function (observer) {
2538
2717
  return scheduler.schedule(function () {
@@ -2542,6 +2721,12 @@ if (!Array.prototype.forEach) {
2542
2721
  });
2543
2722
  };
2544
2723
 
2724
+ /** @deprecated use return or just */
2725
+ Observable.returnValue = function () {
2726
+ deprecate('returnValue', 'return or just');
2727
+ return observableReturn.apply(null, arguments);
2728
+ };
2729
+
2545
2730
  /**
2546
2731
  * Returns an observable sequence that terminates with an exception, using the specified scheduler to send out the single onError message.
2547
2732
  * There is an alias to this method called 'throwError' for browsers <IE9.
@@ -2684,7 +2869,7 @@ if (!Array.prototype.forEach) {
2684
2869
  }, observer.onCompleted.bind(observer)));
2685
2870
 
2686
2871
  return subscription;
2687
- });
2872
+ }, source);
2688
2873
  }
2689
2874
 
2690
2875
  /**
@@ -2695,19 +2880,35 @@ if (!Array.prototype.forEach) {
2695
2880
  * @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.
2696
2881
  * @returns {Observable} An observable sequence containing the first sequence's elements, followed by the elements of the handler sequence in case an exception occurred.
2697
2882
  */
2698
- observableProto['catch'] = observableProto.catchError = observableProto.catchException = function (handlerOrSecond) {
2883
+ observableProto['catch'] = observableProto.catchError = function (handlerOrSecond) {
2699
2884
  return typeof handlerOrSecond === 'function' ?
2700
2885
  observableCatchHandler(this, handlerOrSecond) :
2701
2886
  observableCatch([this, handlerOrSecond]);
2702
2887
  };
2703
2888
 
2889
+ /**
2890
+ * @deprecated use #catch or #catchError instead.
2891
+ */
2892
+ observableProto.catchException = function (handlerOrSecond) {
2893
+ deprecate('catchException', 'catch or catchError');
2894
+ return this.catchError(handlerOrSecond);
2895
+ };
2896
+
2704
2897
  /**
2705
2898
  * Continues an observable sequence that is terminated by an exception with the next observable sequence.
2706
2899
  * @param {Array | Arguments} args Arguments or an array to use as the next sequence if an error occurs.
2707
2900
  * @returns {Observable} An observable sequence containing elements from consecutive source sequences until a source sequence terminates successfully.
2708
2901
  */
2709
- var observableCatch = Observable.catchException = Observable.catchError = Observable['catch'] = function () {
2710
- return enumerableOf(argsOrArray(arguments, 0)).catchException();
2902
+ var observableCatch = Observable.catchError = Observable['catch'] = function () {
2903
+ return enumerableOf(argsOrArray(arguments, 0)).catchError();
2904
+ };
2905
+
2906
+ /**
2907
+ * @deprecated use #catch or #catchError instead.
2908
+ */
2909
+ Observable.catchException = function () {
2910
+ deprecate('catchException', 'catch or catchError');
2911
+ return observableCatch.apply(null, arguments);
2711
2912
  };
2712
2913
 
2713
2914
  /**
@@ -2791,7 +2992,7 @@ if (!Array.prototype.forEach) {
2791
2992
  }
2792
2993
 
2793
2994
  return new CompositeDisposable(subscriptions);
2794
- });
2995
+ }, this);
2795
2996
  };
2796
2997
 
2797
2998
  /**
@@ -2817,13 +3018,19 @@ if (!Array.prototype.forEach) {
2817
3018
  return enumerableOf(argsOrArray(arguments, 0)).concat();
2818
3019
  };
2819
3020
 
2820
- /**
2821
- * Concatenates an observable sequence of observable sequences.
2822
- * @returns {Observable} An observable sequence that contains the elements of each observed inner sequence, in sequential order.
2823
- */
2824
- observableProto.concatObservable = observableProto.concatAll =function () {
2825
- return this.merge(1);
2826
- };
3021
+ /**
3022
+ * Concatenates an observable sequence of observable sequences.
3023
+ * @returns {Observable} An observable sequence that contains the elements of each observed inner sequence, in sequential order.
3024
+ */
3025
+ observableProto.concatAll = function () {
3026
+ return this.merge(1);
3027
+ };
3028
+
3029
+ /** @deprecated Use `concatAll` instead. */
3030
+ observableProto.concatObservable = function () {
3031
+ deprecate('concatObservable', 'concatAll');
3032
+ return this.merge(1);
3033
+ };
2827
3034
 
2828
3035
  /**
2829
3036
  * Merges an observable sequence of observable sequences into an observable sequence, limiting the number of concurrent subscriptions to inner sequences.
@@ -2870,43 +3077,37 @@ if (!Array.prototype.forEach) {
2870
3077
  activeCount === 0 && observer.onCompleted();
2871
3078
  }));
2872
3079
  return group;
2873
- });
3080
+ }, sources);
2874
3081
  };
2875
3082
 
2876
- /**
2877
- * Merges all the observable sequences into a single observable sequence.
2878
- * The scheduler is optional and if not specified, the immediate scheduler is used.
2879
- *
2880
- * @example
2881
- * 1 - merged = Rx.Observable.merge(xs, ys, zs);
2882
- * 2 - merged = Rx.Observable.merge([xs, ys, zs]);
2883
- * 3 - merged = Rx.Observable.merge(scheduler, xs, ys, zs);
2884
- * 4 - merged = Rx.Observable.merge(scheduler, [xs, ys, zs]);
2885
- * @returns {Observable} The observable sequence that merges the elements of the observable sequences.
2886
- */
2887
- var observableMerge = Observable.merge = function () {
2888
- var scheduler, sources;
2889
- if (!arguments[0]) {
2890
- scheduler = immediateScheduler;
2891
- sources = slice.call(arguments, 1);
2892
- } else if (arguments[0].now) {
2893
- scheduler = arguments[0];
2894
- sources = slice.call(arguments, 1);
2895
- } else {
2896
- scheduler = immediateScheduler;
2897
- sources = slice.call(arguments, 0);
2898
- }
2899
- if (Array.isArray(sources[0])) {
2900
- sources = sources[0];
2901
- }
2902
- return observableFromArray(sources, scheduler).mergeObservable();
2903
- };
3083
+ /**
3084
+ * Merges all the observable sequences into a single observable sequence.
3085
+ * The scheduler is optional and if not specified, the immediate scheduler is used.
3086
+ * @returns {Observable} The observable sequence that merges the elements of the observable sequences.
3087
+ */
3088
+ var observableMerge = Observable.merge = function () {
3089
+ var scheduler, sources;
3090
+ if (!arguments[0]) {
3091
+ scheduler = immediateScheduler;
3092
+ sources = slice.call(arguments, 1);
3093
+ } else if (isScheduler(arguments[0])) {
3094
+ scheduler = arguments[0];
3095
+ sources = slice.call(arguments, 1);
3096
+ } else {
3097
+ scheduler = immediateScheduler;
3098
+ sources = slice.call(arguments, 0);
3099
+ }
3100
+ if (Array.isArray(sources[0])) {
3101
+ sources = sources[0];
3102
+ }
3103
+ return observableOf(scheduler, sources).mergeAll();
3104
+ };
2904
3105
 
2905
3106
  /**
2906
3107
  * Merges an observable sequence of observable sequences into an observable sequence.
2907
3108
  * @returns {Observable} The observable sequence that merges the elements of the inner sequences.
2908
3109
  */
2909
- observableProto.mergeObservable = observableProto.mergeAll = function () {
3110
+ observableProto.mergeAll = function () {
2910
3111
  var sources = this;
2911
3112
  return new AnonymousObservable(function (observer) {
2912
3113
  var group = new CompositeDisposable(),
@@ -2930,7 +3131,15 @@ if (!Array.prototype.forEach) {
2930
3131
  group.length === 1 && observer.onCompleted();
2931
3132
  }));
2932
3133
  return group;
2933
- });
3134
+ }, sources);
3135
+ };
3136
+
3137
+ /**
3138
+ * @deprecated use #mergeAll instead.
3139
+ */
3140
+ observableProto.mergeObservable = function () {
3141
+ deprecate('mergeObservable', 'mergeAll');
3142
+ return this.mergeAll.apply(this, arguments);
2934
3143
  };
2935
3144
 
2936
3145
  /**
@@ -2998,7 +3207,7 @@ if (!Array.prototype.forEach) {
2998
3207
  }));
2999
3208
 
3000
3209
  return disposables;
3001
- });
3210
+ }, source);
3002
3211
  };
3003
3212
 
3004
3213
  /**
@@ -3037,7 +3246,7 @@ if (!Array.prototype.forEach) {
3037
3246
  !hasLatest && observer.onCompleted();
3038
3247
  });
3039
3248
  return new CompositeDisposable(subscription, innerSubscription);
3040
- });
3249
+ }, sources);
3041
3250
  };
3042
3251
 
3043
3252
  /**
@@ -3053,7 +3262,7 @@ if (!Array.prototype.forEach) {
3053
3262
  source.subscribe(observer),
3054
3263
  other.subscribe(observer.onCompleted.bind(observer), observer.onError.bind(observer), noop)
3055
3264
  );
3056
- });
3265
+ }, source);
3057
3266
  };
3058
3267
 
3059
3268
  function zipArray(second, resultSelector) {
@@ -3074,7 +3283,7 @@ if (!Array.prototype.forEach) {
3074
3283
  observer.onCompleted();
3075
3284
  }
3076
3285
  }, observer.onError.bind(observer), observer.onCompleted.bind(observer));
3077
- });
3286
+ }, first);
3078
3287
  }
3079
3288
 
3080
3289
  /**
@@ -3136,7 +3345,7 @@ if (!Array.prototype.forEach) {
3136
3345
  }
3137
3346
 
3138
3347
  return new CompositeDisposable(subscriptions);
3139
- });
3348
+ }, parent);
3140
3349
  };
3141
3350
 
3142
3351
  /**
@@ -3206,7 +3415,7 @@ if (!Array.prototype.forEach) {
3206
3415
  * @returns {Observable} An observable sequence that hides the identity of the source sequence.
3207
3416
  */
3208
3417
  observableProto.asObservable = function () {
3209
- return new AnonymousObservable(this.subscribe.bind(this));
3418
+ return new AnonymousObservable(this.subscribe.bind(this), this);
3210
3419
  };
3211
3420
 
3212
3421
  /**
@@ -3230,60 +3439,58 @@ if (!Array.prototype.forEach) {
3230
3439
  });
3231
3440
  };
3232
3441
 
3233
- /**
3234
- * Dematerializes the explicit notification values of an observable sequence as implicit notifications.
3235
- * @returns {Observable} An observable sequence exhibiting the behavior corresponding to the source sequence's notification values.
3236
- */
3237
- observableProto.dematerialize = function () {
3238
- var source = this;
3239
- return new AnonymousObservable(function (observer) {
3240
- return source.subscribe(function (x) {
3241
- return x.accept(observer);
3242
- }, observer.onError.bind(observer), observer.onCompleted.bind(observer));
3243
- });
3244
- };
3442
+ /**
3443
+ * Dematerializes the explicit notification values of an observable sequence as implicit notifications.
3444
+ * @returns {Observable} An observable sequence exhibiting the behavior corresponding to the source sequence's notification values.
3445
+ */
3446
+ observableProto.dematerialize = function () {
3447
+ var source = this;
3448
+ return new AnonymousObservable(function (observer) {
3449
+ return source.subscribe(function (x) { return x.accept(observer); }, observer.onError.bind(observer), observer.onCompleted.bind(observer));
3450
+ }, this);
3451
+ };
3245
3452
 
3246
- /**
3247
- * Returns an observable sequence that contains only distinct contiguous elements according to the keySelector and the comparer.
3248
- *
3249
- * var obs = observable.distinctUntilChanged();
3250
- * var obs = observable.distinctUntilChanged(function (x) { return x.id; });
3251
- * var obs = observable.distinctUntilChanged(function (x) { return x.id; }, function (x, y) { return x === y; });
3252
- *
3253
- * @param {Function} [keySelector] A function to compute the comparison key for each element. If not provided, it projects the value.
3254
- * @param {Function} [comparer] Equality comparer for computed key values. If not provided, defaults to an equality comparer function.
3255
- * @returns {Observable} An observable sequence only containing the distinct contiguous elements, based on a computed key value, from the source sequence.
3256
- */
3257
- observableProto.distinctUntilChanged = function (keySelector, comparer) {
3258
- var source = this;
3259
- keySelector || (keySelector = identity);
3260
- comparer || (comparer = defaultComparer);
3261
- return new AnonymousObservable(function (observer) {
3262
- var hasCurrentKey = false, currentKey;
3263
- return source.subscribe(function (value) {
3264
- var comparerEquals = false, key;
3265
- try {
3266
- key = keySelector(value);
3267
- } catch (exception) {
3268
- observer.onError(exception);
3269
- return;
3270
- }
3271
- if (hasCurrentKey) {
3272
- try {
3273
- comparerEquals = comparer(currentKey, key);
3274
- } catch (exception) {
3275
- observer.onError(exception);
3276
- return;
3277
- }
3278
- }
3279
- if (!hasCurrentKey || !comparerEquals) {
3280
- hasCurrentKey = true;
3281
- currentKey = key;
3282
- observer.onNext(value);
3283
- }
3284
- }, observer.onError.bind(observer), observer.onCompleted.bind(observer));
3285
- });
3286
- };
3453
+ /**
3454
+ * Returns an observable sequence that contains only distinct contiguous elements according to the keySelector and the comparer.
3455
+ *
3456
+ * var obs = observable.distinctUntilChanged();
3457
+ * var obs = observable.distinctUntilChanged(function (x) { return x.id; });
3458
+ * var obs = observable.distinctUntilChanged(function (x) { return x.id; }, function (x, y) { return x === y; });
3459
+ *
3460
+ * @param {Function} [keySelector] A function to compute the comparison key for each element. If not provided, it projects the value.
3461
+ * @param {Function} [comparer] Equality comparer for computed key values. If not provided, defaults to an equality comparer function.
3462
+ * @returns {Observable} An observable sequence only containing the distinct contiguous elements, based on a computed key value, from the source sequence.
3463
+ */
3464
+ observableProto.distinctUntilChanged = function (keySelector, comparer) {
3465
+ var source = this;
3466
+ keySelector || (keySelector = identity);
3467
+ comparer || (comparer = defaultComparer);
3468
+ return new AnonymousObservable(function (observer) {
3469
+ var hasCurrentKey = false, currentKey;
3470
+ return source.subscribe(function (value) {
3471
+ var comparerEquals = false, key;
3472
+ try {
3473
+ key = keySelector(value);
3474
+ } catch (e) {
3475
+ observer.onError(e);
3476
+ return;
3477
+ }
3478
+ if (hasCurrentKey) {
3479
+ try {
3480
+ comparerEquals = comparer(currentKey, key);
3481
+ } catch (e) {
3482
+ observer.onError(e);
3483
+ return;
3484
+ }
3485
+ }
3486
+ if (!hasCurrentKey || !comparerEquals) {
3487
+ hasCurrentKey = true;
3488
+ currentKey = key;
3489
+ observer.onNext(value);
3490
+ }
3491
+ }, observer.onError.bind(observer), observer.onCompleted.bind(observer));
3492
+ }, this);
3493
+ };
3287
3494
 
3288
3495
  /**
3289
3496
  * Invokes an action for each element in the observable sequence and invokes an action upon graceful or exceptional termination of the observable sequence.
@@ -3293,7 +3500,7 @@ if (!Array.prototype.forEach) {
3293
3500
  * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function.
3294
3501
  * @returns {Observable} The source sequence with the side-effecting behavior applied.
3295
3502
  */
3296
- observableProto['do'] = observableProto.doAction = observableProto.tap = function (observerOrOnNext, onError, onCompleted) {
3503
+ observableProto['do'] = observableProto.tap = function (observerOrOnNext, onError, onCompleted) {
3297
3504
  var source = this, onNextFunc;
3298
3505
  if (typeof observerOrOnNext === 'function') {
3299
3506
  onNextFunc = observerOrOnNext;
@@ -3329,7 +3536,13 @@ if (!Array.prototype.forEach) {
3329
3536
  }
3330
3537
  observer.onCompleted();
3331
3538
  });
3332
- });
3539
+ }, this);
3540
+ };
3541
+
3542
+ /** @deprecated use #do or #tap instead. */
3543
+ observableProto.doAction = function () {
3544
+ deprecate('doAction', 'do or tap');
3545
+ return this.tap.apply(this, arguments);
3333
3546
  };
3334
3547
 
3335
3548
  /**
@@ -3367,13 +3580,10 @@ if (!Array.prototype.forEach) {
3367
3580
 
3368
3581
  /**
3369
3582
  * Invokes a specified action after the source observable sequence terminates gracefully or exceptionally.
3370
- *
3371
- * @example
3372
- * var res = observable.finallyAction(function () { console.log('sequence ended'; });
3373
3583
  * @param {Function} finallyAction Action to invoke after the source observable sequence terminates.
3374
3584
  * @returns {Observable} Source sequence with the action-invoking termination behavior applied.
3375
3585
  */
3376
- observableProto['finally'] = observableProto.finallyAction = function (action) {
3586
+ observableProto['finally'] = observableProto.ensure = function (action) {
3377
3587
  var source = this;
3378
3588
  return new AnonymousObservable(function (observer) {
3379
3589
  var subscription;
@@ -3392,7 +3602,15 @@ if (!Array.prototype.forEach) {
3392
3602
  action();
3393
3603
  }
3394
3604
  });
3395
- });
3605
+ }, this);
3606
+ };
3607
+
3608
+ /**
3609
+ * @deprecated use #finally or #ensure instead.
3610
+ */
3611
+ observableProto.finallyAction = function (action) {
3612
+ deprecate('finallyAction', 'finally or ensure');
3613
+ return this.ensure(action);
3396
3614
  };
3397
3615
 
3398
3616
  /**
@@ -3403,7 +3621,7 @@ if (!Array.prototype.forEach) {
3403
3621
  var source = this;
3404
3622
  return new AnonymousObservable(function (observer) {
3405
3623
  return source.subscribe(noop, observer.onError.bind(observer), observer.onCompleted.bind(observer));
3406
- });
3624
+ }, source);
3407
3625
  };
3408
3626
 
3409
3627
  /**
@@ -3422,21 +3640,17 @@ if (!Array.prototype.forEach) {
3422
3640
  observer.onNext(notificationCreateOnCompleted());
3423
3641
  observer.onCompleted();
3424
3642
  });
3425
- });
3643
+ }, source);
3426
3644
  };
3427
3645
 
3428
- /**
3429
- * Repeats the observable sequence a specified number of times. If the repeat count is not specified, the sequence repeats indefinitely.
3430
- *
3431
- * @example
3432
- * var res = repeated = source.repeat();
3433
- * var res = repeated = source.repeat(42);
3434
- * @param {Number} [repeatCount] Number of times to repeat the sequence. If not provided, repeats the sequence indefinitely.
3435
- * @returns {Observable} The observable sequence producing the elements of the given sequence repeatedly.
3436
- */
3437
- observableProto.repeat = function (repeatCount) {
3438
- return enumerableRepeat(this, repeatCount).concat();
3439
- };
3646
+ /**
3647
+ * Repeats the observable sequence a specified number of times. If the repeat count is not specified, the sequence repeats indefinitely.
3648
+ * @param {Number} [repeatCount] Number of times to repeat the sequence. If not provided, repeats the sequence indefinitely.
3649
+ * @returns {Observable} The observable sequence producing the elements of the given sequence repeatedly.
3650
+ */
3651
+ observableProto.repeat = function (repeatCount) {
3652
+ return enumerableRepeat(this, repeatCount).concat();
3653
+ };
3440
3654
 
3441
3655
  /**
3442
3656
  * Repeats the source observable sequence the specified number of times or until it successfully terminates. If the retry count is not specified, it retries indefinitely.
@@ -3449,7 +3663,7 @@ if (!Array.prototype.forEach) {
3449
3663
  * @returns {Observable} An observable sequence producing the elements of the given sequence repeatedly until it terminates successfully.
3450
3664
  */
3451
3665
  observableProto.retry = function (retryCount) {
3452
- return enumerableRepeat(this, retryCount).catchException();
3666
+ return enumerableRepeat(this, retryCount).catchError();
3453
3667
  };
3454
3668
 
3455
3669
  /**
@@ -3496,7 +3710,7 @@ if (!Array.prototype.forEach) {
3496
3710
  observer.onCompleted();
3497
3711
  }
3498
3712
  );
3499
- });
3713
+ }, source);
3500
3714
  };
3501
3715
 
3502
3716
  /**
@@ -3515,7 +3729,7 @@ if (!Array.prototype.forEach) {
3515
3729
  q.push(x);
3516
3730
  q.length > count && observer.onNext(q.shift());
3517
3731
  }, observer.onError.bind(observer), observer.onCompleted.bind(observer));
3518
- });
3732
+ }, source);
3519
3733
  };
3520
3734
 
3521
3735
  /**
@@ -3554,10 +3768,10 @@ if (!Array.prototype.forEach) {
3554
3768
  q.push(x);
3555
3769
  q.length > count && q.shift();
3556
3770
  }, observer.onError.bind(observer), function () {
3557
- while(q.length > 0) { observer.onNext(q.shift()); }
3771
+ while (q.length > 0) { observer.onNext(q.shift()); }
3558
3772
  observer.onCompleted();
3559
3773
  });
3560
- });
3774
+ }, source);
3561
3775
  };
3562
3776
 
3563
3777
  /**
@@ -3580,7 +3794,7 @@ if (!Array.prototype.forEach) {
3580
3794
  observer.onNext(q);
3581
3795
  observer.onCompleted();
3582
3796
  });
3583
- });
3797
+ }, source);
3584
3798
  };
3585
3799
 
3586
3800
  /**
@@ -3620,27 +3834,27 @@ if (!Array.prototype.forEach) {
3620
3834
  function (x) {
3621
3835
  for (var i = 0, len = q.length; i < len; i++) { q[i].onNext(x); }
3622
3836
  var c = n - count + 1;
3623
- c >=0 && c % skip === 0 && q.shift().onCompleted();
3837
+ c >= 0 && c % skip === 0 && q.shift().onCompleted();
3624
3838
  ++n % skip === 0 && createWindow();
3625
- },
3839
+ },
3626
3840
  function (e) {
3627
3841
  while (q.length > 0) { q.shift().onError(e); }
3628
3842
  observer.onError(e);
3629
- },
3843
+ },
3630
3844
  function () {
3631
3845
  while (q.length > 0) { q.shift().onCompleted(); }
3632
3846
  observer.onCompleted();
3633
3847
  }
3634
3848
  ));
3635
3849
  return refCountDisposable;
3636
- });
3850
+ }, source);
3637
3851
  };
3638
3852
 
3639
3853
  function concatMap(source, selector, thisArg) {
3640
3854
  return source.map(function (x, i) {
3641
3855
  var result = selector.call(thisArg, x, i, source);
3642
3856
  isPromise(result) && (result = observableFromPromise(result));
3643
- (Array.isArray(result) || isIterable(result)) && (result = observableFrom(result));
3857
+ (isArrayLike(result) || isIterable(result)) && (result = observableFrom(result));
3644
3858
  return result;
3645
3859
  }).concatAll();
3646
3860
  }
@@ -3665,18 +3879,18 @@ if (!Array.prototype.forEach) {
3665
3879
  * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element.
3666
3880
  */
3667
3881
  observableProto.selectConcat = observableProto.concatMap = function (selector, resultSelector, thisArg) {
3668
- if (typeof selector === 'function' && typeof resultSelector === 'function') {
3882
+ if (isFunction(selector) && isFunction(resultSelector)) {
3669
3883
  return this.concatMap(function (x, i) {
3670
3884
  var selectorResult = selector(x, i);
3671
3885
  isPromise(selectorResult) && (selectorResult = observableFromPromise(selectorResult));
3672
- (Array.isArray(selectorResult) || isIterable(selectorResult)) && (selectorResult = observableFrom(selectorResult));
3886
+ (isArrayLike(selectorResult) || isIterable(selectorResult)) && (selectorResult = observableFrom(selectorResult));
3673
3887
 
3674
3888
  return selectorResult.map(function (y, i2) {
3675
3889
  return resultSelector(x, y, i, i2);
3676
3890
  });
3677
3891
  });
3678
3892
  }
3679
- return typeof selector === 'function' ?
3893
+ return isFunction(selector) ?
3680
3894
  concatMap(this, selector, thisArg) :
3681
3895
  concatMap(this, function () { return selector; });
3682
3896
  };
@@ -3730,7 +3944,7 @@ if (!Array.prototype.forEach) {
3730
3944
  observer.onNext(result);
3731
3945
  observer.onCompleted();
3732
3946
  });
3733
- }).concatAll();
3947
+ }, this).concatAll();
3734
3948
  };
3735
3949
 
3736
3950
  /**
@@ -3744,22 +3958,18 @@ if (!Array.prototype.forEach) {
3744
3958
  * @returns {Observable} An observable sequence that contains the specified default value if the source is empty; otherwise, the elements of the source itself.
3745
3959
  */
3746
3960
  observableProto.defaultIfEmpty = function (defaultValue) {
3747
- var source = this;
3748
- if (defaultValue === undefined) {
3749
- defaultValue = null;
3750
- }
3751
- return new AnonymousObservable(function (observer) {
3752
- var found = false;
3753
- return source.subscribe(function (x) {
3754
- found = true;
3755
- observer.onNext(x);
3756
- }, observer.onError.bind(observer), function () {
3757
- if (!found) {
3758
- observer.onNext(defaultValue);
3759
- }
3760
- observer.onCompleted();
3761
- });
3961
+ var source = this;
3962
+ defaultValue === undefined && (defaultValue = null);
3963
+ return new AnonymousObservable(function (observer) {
3964
+ var found = false;
3965
+ return source.subscribe(function (x) {
3966
+ found = true;
3967
+ observer.onNext(x);
3968
+ }, observer.onError.bind(observer), function () {
3969
+ !found && observer.onNext(defaultValue);
3970
+ observer.onCompleted();
3762
3971
  });
3972
+ }, this);
3763
3973
  };
3764
3974
 
3765
3975
  // Swap out for Array.findIndex
@@ -3812,30 +4022,31 @@ if (!Array.prototype.forEach) {
3812
4022
  },
3813
4023
  observer.onError.bind(observer),
3814
4024
  observer.onCompleted.bind(observer));
3815
- });
4025
+ }, this);
3816
4026
  };
3817
4027
 
3818
4028
  /**
3819
- * Projects each element of an observable sequence into a new form by incorporating the element's index.
4029
+ * Projects each element of an observable sequence into a new form by incorporating the element's index.
3820
4030
  * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element.
3821
4031
  * @param {Any} [thisArg] Object to use as this when executing callback.
3822
4032
  * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source.
3823
4033
  */
3824
4034
  observableProto.select = observableProto.map = function (selector, thisArg) {
3825
- var parent = this;
4035
+ var selectorFn = isFunction(selector) ? selector : function () { return selector; },
4036
+ source = this;
3826
4037
  return new AnonymousObservable(function (observer) {
3827
4038
  var count = 0;
3828
- return parent.subscribe(function (value) {
4039
+ return source.subscribe(function (value) {
3829
4040
  var result;
3830
4041
  try {
3831
- result = selector.call(thisArg, value, count++, parent);
4042
+ result = selectorFn.call(thisArg, value, count++, source);
3832
4043
  } catch (e) {
3833
4044
  observer.onError(e);
3834
4045
  return;
3835
4046
  }
3836
4047
  observer.onNext(result);
3837
4048
  }, observer.onError.bind(observer), observer.onCompleted.bind(observer));
3838
- });
4049
+ }, source);
3839
4050
  };
3840
4051
 
3841
4052
  /**
@@ -3851,9 +4062,9 @@ if (!Array.prototype.forEach) {
3851
4062
  return source.map(function (x, i) {
3852
4063
  var result = selector.call(thisArg, x, i, source);
3853
4064
  isPromise(result) && (result = observableFromPromise(result));
3854
- (Array.isArray(result) || isIterable(result)) && (result = observableFrom(result));
4065
+ (isArrayLike(result) || isIterable(result)) && (result = observableFrom(result));
3855
4066
  return result;
3856
- }).mergeObservable();
4067
+ }).mergeAll();
3857
4068
  }
3858
4069
 
3859
4070
  /**
@@ -3876,18 +4087,18 @@ if (!Array.prototype.forEach) {
3876
4087
  * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element.
3877
4088
  */
3878
4089
  observableProto.selectMany = observableProto.flatMap = function (selector, resultSelector, thisArg) {
3879
- if (typeof selector === 'function' && typeof resultSelector === 'function') {
4090
+ if (isFunction(selector) && isFunction(resultSelector)) {
3880
4091
  return this.flatMap(function (x, i) {
3881
4092
  var selectorResult = selector(x, i);
3882
4093
  isPromise(selectorResult) && (selectorResult = observableFromPromise(selectorResult));
3883
- (Array.isArray(selectorResult) || isIterable(selectorResult)) && (selectorResult = observableFrom(selectorResult));
4094
+ (isArrayLike(selectorResult) || isIterable(selectorResult)) && (selectorResult = observableFrom(selectorResult));
3884
4095
 
3885
4096
  return selectorResult.map(function (y, i2) {
3886
4097
  return resultSelector(x, y, i, i2);
3887
4098
  });
3888
4099
  }, thisArg);
3889
4100
  }
3890
- return typeof selector === 'function' ?
4101
+ return isFunction(selector) ?
3891
4102
  flatMap(this, selector, thisArg) :
3892
4103
  flatMap(this, function () { return selector; });
3893
4104
  };
@@ -3941,7 +4152,7 @@ if (!Array.prototype.forEach) {
3941
4152
  observer.onNext(result);
3942
4153
  observer.onCompleted();
3943
4154
  });
3944
- }).mergeAll();
4155
+ }, source).mergeAll();
3945
4156
  };
3946
4157
 
3947
4158
  /**
@@ -3962,18 +4173,18 @@ if (!Array.prototype.forEach) {
3962
4173
  * @returns {Observable} An observable sequence that contains the elements that occur after the specified index in the input sequence.
3963
4174
  */
3964
4175
  observableProto.skip = function (count) {
3965
- if (count < 0) { throw new Error(argumentOutOfRange); }
3966
- var source = this;
3967
- return new AnonymousObservable(function (observer) {
3968
- var remaining = count;
3969
- return source.subscribe(function (x) {
3970
- if (remaining <= 0) {
3971
- observer.onNext(x);
3972
- } else {
3973
- remaining--;
3974
- }
3975
- }, observer.onError.bind(observer), observer.onCompleted.bind(observer));
3976
- });
4176
+ if (count < 0) { throw new Error(argumentOutOfRange); }
4177
+ var source = this;
4178
+ return new AnonymousObservable(function (observer) {
4179
+ var remaining = count;
4180
+ return source.subscribe(function (x) {
4181
+ if (remaining <= 0) {
4182
+ observer.onNext(x);
4183
+ } else {
4184
+ remaining--;
4185
+ }
4186
+ }, observer.onError.bind(observer), observer.onCompleted.bind(observer));
4187
+ }, source);
3977
4188
  };
3978
4189
 
3979
4190
  /**
@@ -4001,7 +4212,7 @@ if (!Array.prototype.forEach) {
4001
4212
  }
4002
4213
  running && observer.onNext(x);
4003
4214
  }, observer.onError.bind(observer), observer.onCompleted.bind(observer));
4004
- });
4215
+ }, source);
4005
4216
  };
4006
4217
 
4007
4218
  /**
@@ -4014,18 +4225,18 @@ if (!Array.prototype.forEach) {
4014
4225
  * @returns {Observable} An observable sequence that contains the specified number of elements from the start of the input sequence.
4015
4226
  */
4016
4227
  observableProto.take = function (count, scheduler) {
4017
- if (count < 0) { throw new RangeError(argumentOutOfRange); }
4018
- if (count === 0) { return observableEmpty(scheduler); }
4019
- var observable = this;
4020
- return new AnonymousObservable(function (observer) {
4021
- var remaining = count;
4022
- return observable.subscribe(function (x) {
4023
- if (remaining-- > 0) {
4024
- observer.onNext(x);
4025
- remaining === 0 && observer.onCompleted();
4026
- }
4027
- }, observer.onError.bind(observer), observer.onCompleted.bind(observer));
4028
- });
4228
+ if (count < 0) { throw new RangeError(argumentOutOfRange); }
4229
+ if (count === 0) { return observableEmpty(scheduler); }
4230
+ var source = this;
4231
+ return new AnonymousObservable(function (observer) {
4232
+ var remaining = count;
4233
+ return source.subscribe(function (x) {
4234
+ if (remaining-- > 0) {
4235
+ observer.onNext(x);
4236
+ remaining === 0 && observer.onCompleted();
4237
+ }
4238
+ }, observer.onError.bind(observer), observer.onCompleted.bind(observer));
4239
+ }, source);
4029
4240
  };
4030
4241
 
4031
4242
  /**
@@ -4036,13 +4247,13 @@ if (!Array.prototype.forEach) {
4036
4247
  * @returns {Observable} An observable sequence that contains the elements from the input sequence that occur before the element at which the test no longer passes.
4037
4248
  */
4038
4249
  observableProto.takeWhile = function (predicate, thisArg) {
4039
- var observable = this;
4250
+ var source = this;
4040
4251
  return new AnonymousObservable(function (observer) {
4041
4252
  var i = 0, running = true;
4042
- return observable.subscribe(function (x) {
4253
+ return source.subscribe(function (x) {
4043
4254
  if (running) {
4044
4255
  try {
4045
- running = predicate.call(thisArg, x, i++, observable);
4256
+ running = predicate.call(thisArg, x, i++, source);
4046
4257
  } catch (e) {
4047
4258
  observer.onError(e);
4048
4259
  return;
@@ -4054,7 +4265,7 @@ if (!Array.prototype.forEach) {
4054
4265
  }
4055
4266
  }
4056
4267
  }, observer.onError.bind(observer), observer.onCompleted.bind(observer));
4057
- });
4268
+ }, source);
4058
4269
  };
4059
4270
 
4060
4271
  /**
@@ -4068,24 +4279,24 @@ if (!Array.prototype.forEach) {
4068
4279
  * @returns {Observable} An observable sequence that contains elements from the input sequence that satisfy the condition.
4069
4280
  */
4070
4281
  observableProto.where = observableProto.filter = function (predicate, thisArg) {
4071
- var parent = this;
4072
- return new AnonymousObservable(function (observer) {
4073
- var count = 0;
4074
- return parent.subscribe(function (value) {
4075
- var shouldRun;
4076
- try {
4077
- shouldRun = predicate.call(thisArg, value, count++, parent);
4078
- } catch (e) {
4079
- observer.onError(e);
4080
- return;
4081
- }
4082
- shouldRun && observer.onNext(value);
4083
- }, observer.onError.bind(observer), observer.onCompleted.bind(observer));
4084
- });
4282
+ var source = this;
4283
+ return new AnonymousObservable(function (observer) {
4284
+ var count = 0;
4285
+ return source.subscribe(function (value) {
4286
+ var shouldRun;
4287
+ try {
4288
+ shouldRun = predicate.call(thisArg, value, count++, parent);
4289
+ } catch (e) {
4290
+ observer.onError(e);
4291
+ return;
4292
+ }
4293
+ shouldRun && observer.onNext(value);
4294
+ }, observer.onError.bind(observer), observer.onCompleted.bind(observer));
4295
+ }, source);
4085
4296
  };
4086
4297
 
4087
4298
  /**
4088
- * Executes a transducer to transform the observable sequence
4299
+ * Executes a transducer to transform the observable sequence
4089
4300
  * @param {Transducer} transducer A transducer to execute
4090
4301
  * @returns {Observable} An Observable sequence containing the results from the transducer.
4091
4302
  */
@@ -4109,17 +4320,17 @@ if (!Array.prototype.forEach) {
4109
4320
  return new AnonymousObservable(function(observer) {
4110
4321
  var xform = transducer(transformForObserver(observer));
4111
4322
  return source.subscribe(
4112
- function(v) {
4323
+ function(v) {
4113
4324
  try {
4114
4325
  xform.step(observer, v);
4115
4326
  } catch (e) {
4116
4327
  observer.onError(e);
4117
4328
  }
4118
- },
4119
- observer.onError.bind(observer),
4329
+ },
4330
+ observer.onError.bind(observer),
4120
4331
  function() { xform.result(observer); }
4121
4332
  );
4122
- });
4333
+ }, source);
4123
4334
  };
4124
4335
 
4125
4336
  var AnonymousObservable = Rx.AnonymousObservable = (function (__super__) {
@@ -4134,7 +4345,8 @@ if (!Array.prototype.forEach) {
4134
4345
  disposableEmpty;
4135
4346
  }
4136
4347
 
4137
- function AnonymousObservable(subscribe) {
4348
+ function AnonymousObservable(subscribe, parent) {
4349
+ this.source = parent;
4138
4350
  if (!(this instanceof AnonymousObservable)) {
4139
4351
  return new AnonymousObservable(subscribe);
4140
4352
  }
@@ -4167,66 +4379,59 @@ if (!Array.prototype.forEach) {
4167
4379
 
4168
4380
  }(Observable));
4169
4381
 
4170
- /** @private */
4171
- var AutoDetachObserver = (function (_super) {
4172
- inherits(AutoDetachObserver, _super);
4382
+ var AutoDetachObserver = (function (__super__) {
4383
+ inherits(AutoDetachObserver, __super__);
4173
4384
 
4174
- function AutoDetachObserver(observer) {
4175
- _super.call(this);
4176
- this.observer = observer;
4177
- this.m = new SingleAssignmentDisposable();
4178
- }
4385
+ function AutoDetachObserver(observer) {
4386
+ __super__.call(this);
4387
+ this.observer = observer;
4388
+ this.m = new SingleAssignmentDisposable();
4389
+ }
4179
4390
 
4180
- var AutoDetachObserverPrototype = AutoDetachObserver.prototype;
4391
+ var AutoDetachObserverPrototype = AutoDetachObserver.prototype;
4181
4392
 
4182
- AutoDetachObserverPrototype.next = function (value) {
4183
- var noError = false;
4184
- try {
4185
- this.observer.onNext(value);
4186
- noError = true;
4187
- } catch (e) {
4188
- throw e;
4189
- } finally {
4190
- if (!noError) {
4191
- this.dispose();
4192
- }
4193
- }
4194
- };
4393
+ AutoDetachObserverPrototype.next = function (value) {
4394
+ var noError = false;
4395
+ try {
4396
+ this.observer.onNext(value);
4397
+ noError = true;
4398
+ } catch (e) {
4399
+ throw e;
4400
+ } finally {
4401
+ !noError && this.dispose();
4402
+ }
4403
+ };
4195
4404
 
4196
- AutoDetachObserverPrototype.error = function (exn) {
4197
- try {
4198
- this.observer.onError(exn);
4199
- } catch (e) {
4200
- throw e;
4201
- } finally {
4202
- this.dispose();
4203
- }
4204
- };
4405
+ AutoDetachObserverPrototype.error = function (err) {
4406
+ try {
4407
+ this.observer.onError(err);
4408
+ } catch (e) {
4409
+ throw e;
4410
+ } finally {
4411
+ this.dispose();
4412
+ }
4413
+ };
4205
4414
 
4206
- AutoDetachObserverPrototype.completed = function () {
4207
- try {
4208
- this.observer.onCompleted();
4209
- } catch (e) {
4210
- throw e;
4211
- } finally {
4212
- this.dispose();
4213
- }
4214
- };
4415
+ AutoDetachObserverPrototype.completed = function () {
4416
+ try {
4417
+ this.observer.onCompleted();
4418
+ } catch (e) {
4419
+ throw e;
4420
+ } finally {
4421
+ this.dispose();
4422
+ }
4423
+ };
4215
4424
 
4216
- AutoDetachObserverPrototype.setDisposable = function (value) { this.m.setDisposable(value); };
4217
- AutoDetachObserverPrototype.getDisposable = function (value) { return this.m.getDisposable(); };
4218
- /* @private */
4219
- AutoDetachObserverPrototype.disposable = function (value) {
4220
- return arguments.length ? this.getDisposable() : setDisposable(value);
4221
- };
4425
+ AutoDetachObserverPrototype.setDisposable = function (value) { this.m.setDisposable(value); };
4426
+ AutoDetachObserverPrototype.getDisposable = function () { return this.m.getDisposable(); };
4222
4427
 
4223
- AutoDetachObserverPrototype.dispose = function () {
4224
- _super.prototype.dispose.call(this);
4225
- this.m.dispose();
4226
- };
4428
+ AutoDetachObserverPrototype.dispose = function () {
4429
+ __super__.prototype.dispose.call(this);
4430
+ this.m.dispose();
4431
+ };
4227
4432
 
4228
- return AutoDetachObserver;
4229
- }(AbstractObserver));
4433
+ return AutoDetachObserver;
4434
+ }(AbstractObserver));
4230
4435
 
4231
4436
  /** @private */
4232
4437
  var InnerSubscription = function (subject, observer) {
@@ -4520,4 +4725,7 @@ if (!Array.prototype.forEach) {
4520
4725
  root.Rx = Rx;
4521
4726
  }
4522
4727
 
4728
+ // All code before this point will be filtered from stack traces.
4729
+ var rEndingLine = captureLine();
4730
+
4523
4731
  }.call(this));