1 import { Observable } from '../Observable';
2 import { identity } from '../util/identity';
3 import { isScheduler } from '../util/isScheduler';
4 export function generate(initialStateOrOptions, condition, iterate, resultSelectorOrObservable, scheduler) {
7 if (arguments.length == 1) {
8 const options = initialStateOrOptions;
9 initialState = options.initialState;
10 condition = options.condition;
11 iterate = options.iterate;
12 resultSelector = options.resultSelector || identity;
13 scheduler = options.scheduler;
15 else if (resultSelectorOrObservable === undefined || isScheduler(resultSelectorOrObservable)) {
16 initialState = initialStateOrOptions;
17 resultSelector = identity;
18 scheduler = resultSelectorOrObservable;
21 initialState = initialStateOrOptions;
22 resultSelector = resultSelectorOrObservable;
24 return new Observable(subscriber => {
25 let state = initialState;
27 return scheduler.schedule(dispatch, 0, {
39 conditionResult = condition(state);
42 subscriber.error(err);
45 if (!conditionResult) {
46 subscriber.complete();
52 value = resultSelector(state);
55 subscriber.error(err);
58 subscriber.next(value);
59 if (subscriber.closed) {
63 state = iterate(state);
66 subscriber.error(err);
73 function dispatch(state) {
74 const { subscriber, condition } = state;
75 if (subscriber.closed) {
78 if (state.needIterate) {
80 state.state = state.iterate(state.state);
83 subscriber.error(err);
88 state.needIterate = true;
93 conditionResult = condition(state.state);
96 subscriber.error(err);
99 if (!conditionResult) {
100 subscriber.complete();
103 if (subscriber.closed) {
109 value = state.resultSelector(state.state);
112 subscriber.error(err);
115 if (subscriber.closed) {
118 subscriber.next(value);
119 if (subscriber.closed) {
122 return this.schedule(state);
124 //# sourceMappingURL=generate.js.map