innerFrom.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. import { __asyncValues, __awaiter, __generator, __values } from "tslib";
  2. import { isArrayLike } from '../util/isArrayLike';
  3. import { isPromise } from '../util/isPromise';
  4. import { Observable } from '../Observable';
  5. import { isInteropObservable } from '../util/isInteropObservable';
  6. import { isAsyncIterable } from '../util/isAsyncIterable';
  7. import { createInvalidObservableTypeError } from '../util/throwUnobservableError';
  8. import { isIterable } from '../util/isIterable';
  9. import { isReadableStreamLike, readableStreamLikeToAsyncGenerator } from '../util/isReadableStreamLike';
  10. import { isFunction } from '../util/isFunction';
  11. import { reportUnhandledError } from '../util/reportUnhandledError';
  12. import { observable as Symbol_observable } from '../symbol/observable';
  13. export function innerFrom(input) {
  14. if (input instanceof Observable) {
  15. return input;
  16. }
  17. if (input != null) {
  18. if (isInteropObservable(input)) {
  19. return fromInteropObservable(input);
  20. }
  21. if (isArrayLike(input)) {
  22. return fromArrayLike(input);
  23. }
  24. if (isPromise(input)) {
  25. return fromPromise(input);
  26. }
  27. if (isAsyncIterable(input)) {
  28. return fromAsyncIterable(input);
  29. }
  30. if (isIterable(input)) {
  31. return fromIterable(input);
  32. }
  33. if (isReadableStreamLike(input)) {
  34. return fromReadableStreamLike(input);
  35. }
  36. }
  37. throw createInvalidObservableTypeError(input);
  38. }
  39. export function fromInteropObservable(obj) {
  40. return new Observable(function (subscriber) {
  41. var obs = obj[Symbol_observable]();
  42. if (isFunction(obs.subscribe)) {
  43. return obs.subscribe(subscriber);
  44. }
  45. throw new TypeError('Provided object does not correctly implement Symbol.observable');
  46. });
  47. }
  48. export function fromArrayLike(array) {
  49. return new Observable(function (subscriber) {
  50. for (var i = 0; i < array.length && !subscriber.closed; i++) {
  51. subscriber.next(array[i]);
  52. }
  53. subscriber.complete();
  54. });
  55. }
  56. export function fromPromise(promise) {
  57. return new Observable(function (subscriber) {
  58. promise
  59. .then(function (value) {
  60. if (!subscriber.closed) {
  61. subscriber.next(value);
  62. subscriber.complete();
  63. }
  64. }, function (err) { return subscriber.error(err); })
  65. .then(null, reportUnhandledError);
  66. });
  67. }
  68. export function fromIterable(iterable) {
  69. return new Observable(function (subscriber) {
  70. var e_1, _a;
  71. try {
  72. for (var iterable_1 = __values(iterable), iterable_1_1 = iterable_1.next(); !iterable_1_1.done; iterable_1_1 = iterable_1.next()) {
  73. var value = iterable_1_1.value;
  74. subscriber.next(value);
  75. if (subscriber.closed) {
  76. return;
  77. }
  78. }
  79. }
  80. catch (e_1_1) { e_1 = { error: e_1_1 }; }
  81. finally {
  82. try {
  83. if (iterable_1_1 && !iterable_1_1.done && (_a = iterable_1.return)) _a.call(iterable_1);
  84. }
  85. finally { if (e_1) throw e_1.error; }
  86. }
  87. subscriber.complete();
  88. });
  89. }
  90. export function fromAsyncIterable(asyncIterable) {
  91. return new Observable(function (subscriber) {
  92. process(asyncIterable, subscriber).catch(function (err) { return subscriber.error(err); });
  93. });
  94. }
  95. export function fromReadableStreamLike(readableStream) {
  96. return fromAsyncIterable(readableStreamLikeToAsyncGenerator(readableStream));
  97. }
  98. function process(asyncIterable, subscriber) {
  99. var asyncIterable_1, asyncIterable_1_1;
  100. var e_2, _a;
  101. return __awaiter(this, void 0, void 0, function () {
  102. var value, e_2_1;
  103. return __generator(this, function (_b) {
  104. switch (_b.label) {
  105. case 0:
  106. _b.trys.push([0, 5, 6, 11]);
  107. asyncIterable_1 = __asyncValues(asyncIterable);
  108. _b.label = 1;
  109. case 1: return [4, asyncIterable_1.next()];
  110. case 2:
  111. if (!(asyncIterable_1_1 = _b.sent(), !asyncIterable_1_1.done)) return [3, 4];
  112. value = asyncIterable_1_1.value;
  113. subscriber.next(value);
  114. if (subscriber.closed) {
  115. return [2];
  116. }
  117. _b.label = 3;
  118. case 3: return [3, 1];
  119. case 4: return [3, 11];
  120. case 5:
  121. e_2_1 = _b.sent();
  122. e_2 = { error: e_2_1 };
  123. return [3, 11];
  124. case 6:
  125. _b.trys.push([6, , 9, 10]);
  126. if (!(asyncIterable_1_1 && !asyncIterable_1_1.done && (_a = asyncIterable_1.return))) return [3, 8];
  127. return [4, _a.call(asyncIterable_1)];
  128. case 7:
  129. _b.sent();
  130. _b.label = 8;
  131. case 8: return [3, 10];
  132. case 9:
  133. if (e_2) throw e_2.error;
  134. return [7];
  135. case 10: return [7];
  136. case 11:
  137. subscriber.complete();
  138. return [2];
  139. }
  140. });
  141. });
  142. }
  143. //# sourceMappingURL=innerFrom.js.map