2 Object.defineProperty(exports, "__esModule", { value: true });
3 var Observable_1 = require("../Observable");
4 var identity_1 = require("../util/identity");
5 var isScheduler_1 = require("../util/isScheduler");
6 function generate(initialStateOrOptions, condition, iterate, resultSelectorOrObservable, scheduler) {
9 if (arguments.length == 1) {
10 var options = initialStateOrOptions;
11 initialState = options.initialState;
12 condition = options.condition;
13 iterate = options.iterate;
14 resultSelector = options.resultSelector || identity_1.identity;
15 scheduler = options.scheduler;
17 else if (resultSelectorOrObservable === undefined || isScheduler_1.isScheduler(resultSelectorOrObservable)) {
18 initialState = initialStateOrOptions;
19 resultSelector = identity_1.identity;
20 scheduler = resultSelectorOrObservable;
23 initialState = initialStateOrOptions;
24 resultSelector = resultSelectorOrObservable;
26 return new Observable_1.Observable(function (subscriber) {
27 var state = initialState;
29 return scheduler.schedule(dispatch, 0, {
30 subscriber: subscriber,
33 resultSelector: resultSelector,
39 var conditionResult = void 0;
41 conditionResult = condition(state);
44 subscriber.error(err);
47 if (!conditionResult) {
48 subscriber.complete();
54 value = resultSelector(state);
57 subscriber.error(err);
60 subscriber.next(value);
61 if (subscriber.closed) {
65 state = iterate(state);
68 subscriber.error(err);
75 exports.generate = generate;
76 function dispatch(state) {
77 var subscriber = state.subscriber, condition = state.condition;
78 if (subscriber.closed) {
81 if (state.needIterate) {
83 state.state = state.iterate(state.state);
86 subscriber.error(err);
91 state.needIterate = true;
94 var conditionResult = void 0;
96 conditionResult = condition(state.state);
99 subscriber.error(err);
102 if (!conditionResult) {
103 subscriber.complete();
106 if (subscriber.closed) {
112 value = state.resultSelector(state.state);
115 subscriber.error(err);
118 if (subscriber.closed) {
121 subscriber.next(value);
122 if (subscriber.closed) {
125 return this.schedule(state);
127 //# sourceMappingURL=generate.js.map