1 /** PURE_IMPORTS_START _Observable,_util_identity,_util_isScheduler PURE_IMPORTS_END */
2 import { Observable } from '../Observable';
3 import { identity } from '../util/identity';
4 import { isScheduler } from '../util/isScheduler';
5 export function generate(initialStateOrOptions, condition, iterate, resultSelectorOrObservable, scheduler) {
8 if (arguments.length == 1) {
9 var options = initialStateOrOptions;
10 initialState = options.initialState;
11 condition = options.condition;
12 iterate = options.iterate;
13 resultSelector = options.resultSelector || identity;
14 scheduler = options.scheduler;
16 else if (resultSelectorOrObservable === undefined || isScheduler(resultSelectorOrObservable)) {
17 initialState = initialStateOrOptions;
18 resultSelector = identity;
19 scheduler = resultSelectorOrObservable;
22 initialState = initialStateOrOptions;
23 resultSelector = resultSelectorOrObservable;
25 return new Observable(function (subscriber) {
26 var state = initialState;
28 return scheduler.schedule(dispatch, 0, {
29 subscriber: subscriber,
32 resultSelector: resultSelector,
38 var conditionResult = void 0;
40 conditionResult = condition(state);
43 subscriber.error(err);
46 if (!conditionResult) {
47 subscriber.complete();
53 value = resultSelector(state);
56 subscriber.error(err);
59 subscriber.next(value);
60 if (subscriber.closed) {
64 state = iterate(state);
67 subscriber.error(err);
74 function dispatch(state) {
75 var subscriber = state.subscriber, condition = state.condition;
76 if (subscriber.closed) {
79 if (state.needIterate) {
81 state.state = state.iterate(state.state);
84 subscriber.error(err);
89 state.needIterate = true;
92 var conditionResult = void 0;
94 conditionResult = condition(state.state);
97 subscriber.error(err);
100 if (!conditionResult) {
101 subscriber.complete();
104 if (subscriber.closed) {
110 value = state.resultSelector(state.state);
113 subscriber.error(err);
116 if (subscriber.closed) {
119 subscriber.next(value);
120 if (subscriber.closed) {
123 return this.schedule(state);
125 //# sourceMappingURL=generate.js.map