"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Observable_1 = require("../Observable"); var Subscription_1 = require("../Subscription"); var iterator_1 = require("../symbol/iterator"); var subscribeToIterable_1 = require("../util/subscribeToIterable"); function fromIterable(input, scheduler) { if (!input) { throw new Error('Iterable cannot be null'); } if (!scheduler) { return new Observable_1.Observable(subscribeToIterable_1.subscribeToIterable(input)); } else { return new Observable_1.Observable(function (subscriber) { var sub = new Subscription_1.Subscription(); var iterator; sub.add(function () { if (iterator && typeof iterator.return === 'function') { iterator.return(); } }); sub.add(scheduler.schedule(function () { iterator = input[iterator_1.iterator](); sub.add(scheduler.schedule(function () { if (subscriber.closed) { return; } var value; var done; try { var result = iterator.next(); value = result.value; done = result.done; } catch (err) { subscriber.error(err); return; } if (done) { subscriber.complete(); } else { subscriber.next(value); this.schedule(); } })); })); return sub; }); } } exports.fromIterable = fromIterable; //# sourceMappingURL=fromIterable.js.map