PageRenderTime 44ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/node_modules/rxjs/observable/IteratorObservable.js

https://gitlab.com/gctech4all/angular2-tour-of-heroes
JavaScript | 179 lines | 178 code | 0 blank | 1 comment | 41 complexity | a0a49530546b92614e0748ebaaf5598a MD5 | raw file
  1. var __extends = (this && this.__extends) || function (d, b) {
  2. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  3. function __() { this.constructor = d; }
  4. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  5. };
  6. var Observable_1 = require('../Observable');
  7. var root_1 = require('../util/root');
  8. var SymbolShim_1 = require('../util/SymbolShim');
  9. var tryCatch_1 = require('../util/tryCatch');
  10. var errorObject_1 = require('../util/errorObject');
  11. var IteratorObservable = (function (_super) {
  12. __extends(IteratorObservable, _super);
  13. function IteratorObservable(iterator, project, thisArg, scheduler) {
  14. _super.call(this);
  15. this.project = project;
  16. this.thisArg = thisArg;
  17. this.scheduler = scheduler;
  18. if (iterator == null) {
  19. throw new Error('iterator cannot be null.');
  20. }
  21. if (project && typeof project !== 'function') {
  22. throw new Error('When provided, `project` must be a function.');
  23. }
  24. this.iterator = getIterator(iterator);
  25. }
  26. IteratorObservable.create = function (iterator, project, thisArg, scheduler) {
  27. return new IteratorObservable(iterator, project, thisArg, scheduler);
  28. };
  29. IteratorObservable.dispatch = function (state) {
  30. var index = state.index, hasError = state.hasError, thisArg = state.thisArg, project = state.project, iterator = state.iterator, subscriber = state.subscriber;
  31. if (hasError) {
  32. subscriber.error(state.error);
  33. return;
  34. }
  35. var result = iterator.next();
  36. if (result.done) {
  37. subscriber.complete();
  38. return;
  39. }
  40. if (project) {
  41. result = tryCatch_1.tryCatch(project).call(thisArg, result.value, index);
  42. if (result === errorObject_1.errorObject) {
  43. state.error = errorObject_1.errorObject.e;
  44. state.hasError = true;
  45. }
  46. else {
  47. subscriber.next(result);
  48. state.index = index + 1;
  49. }
  50. }
  51. else {
  52. subscriber.next(result.value);
  53. state.index = index + 1;
  54. }
  55. if (subscriber.isUnsubscribed) {
  56. return;
  57. }
  58. this.schedule(state);
  59. };
  60. IteratorObservable.prototype._subscribe = function (subscriber) {
  61. var index = 0;
  62. var _a = this, iterator = _a.iterator, project = _a.project, thisArg = _a.thisArg, scheduler = _a.scheduler;
  63. if (scheduler) {
  64. subscriber.add(scheduler.schedule(IteratorObservable.dispatch, 0, {
  65. index: index, thisArg: thisArg, project: project, iterator: iterator, subscriber: subscriber
  66. }));
  67. }
  68. else {
  69. do {
  70. var result = iterator.next();
  71. if (result.done) {
  72. subscriber.complete();
  73. break;
  74. }
  75. else if (project) {
  76. result = tryCatch_1.tryCatch(project).call(thisArg, result.value, index++);
  77. if (result === errorObject_1.errorObject) {
  78. subscriber.error(errorObject_1.errorObject.e);
  79. break;
  80. }
  81. subscriber.next(result);
  82. }
  83. else {
  84. subscriber.next(result.value);
  85. }
  86. if (subscriber.isUnsubscribed) {
  87. break;
  88. }
  89. } while (true);
  90. }
  91. };
  92. return IteratorObservable;
  93. })(Observable_1.Observable);
  94. exports.IteratorObservable = IteratorObservable;
  95. var StringIterator = (function () {
  96. function StringIterator(str, idx, len) {
  97. if (idx === void 0) { idx = 0; }
  98. if (len === void 0) { len = str.length; }
  99. this.str = str;
  100. this.idx = idx;
  101. this.len = len;
  102. }
  103. StringIterator.prototype[SymbolShim_1.SymbolShim.iterator] = function () { return (this); };
  104. StringIterator.prototype.next = function () {
  105. return this.idx < this.len ? {
  106. done: false,
  107. value: this.str.charAt(this.idx++)
  108. } : {
  109. done: true,
  110. value: undefined
  111. };
  112. };
  113. return StringIterator;
  114. })();
  115. var ArrayIterator = (function () {
  116. function ArrayIterator(arr, idx, len) {
  117. if (idx === void 0) { idx = 0; }
  118. if (len === void 0) { len = toLength(arr); }
  119. this.arr = arr;
  120. this.idx = idx;
  121. this.len = len;
  122. }
  123. ArrayIterator.prototype[SymbolShim_1.SymbolShim.iterator] = function () { return this; };
  124. ArrayIterator.prototype.next = function () {
  125. return this.idx < this.len ? {
  126. done: false,
  127. value: this.arr[this.idx++]
  128. } : {
  129. done: true,
  130. value: undefined
  131. };
  132. };
  133. return ArrayIterator;
  134. })();
  135. function getIterator(obj) {
  136. var i = obj[SymbolShim_1.SymbolShim.iterator];
  137. if (!i && typeof obj === 'string') {
  138. return new StringIterator(obj);
  139. }
  140. if (!i && obj.length !== undefined) {
  141. return new ArrayIterator(obj);
  142. }
  143. if (!i) {
  144. throw new TypeError('Object is not iterable');
  145. }
  146. return obj[SymbolShim_1.SymbolShim.iterator]();
  147. }
  148. var maxSafeInteger = Math.pow(2, 53) - 1;
  149. function toLength(o) {
  150. var len = +o.length;
  151. if (isNaN(len)) {
  152. return 0;
  153. }
  154. if (len === 0 || !numberIsFinite(len)) {
  155. return len;
  156. }
  157. len = sign(len) * Math.floor(Math.abs(len));
  158. if (len <= 0) {
  159. return 0;
  160. }
  161. if (len > maxSafeInteger) {
  162. return maxSafeInteger;
  163. }
  164. return len;
  165. }
  166. function numberIsFinite(value) {
  167. return typeof value === 'number' && root_1.root.isFinite(value);
  168. }
  169. function sign(value) {
  170. var valueAsNumber = +value;
  171. if (valueAsNumber === 0) {
  172. return valueAsNumber;
  173. }
  174. if (isNaN(valueAsNumber)) {
  175. return valueAsNumber;
  176. }
  177. return valueAsNumber < 0 ? -1 : 1;
  178. }
  179. //# sourceMappingURL=IteratorObservable.js.map