| /** PURE_IMPORTS_START _Observable,_util_identity,_util_isScheduler PURE_IMPORTS_END */ | 
| import { Observable } from '../Observable'; | 
| import { identity } from '../util/identity'; | 
| import { isScheduler } from '../util/isScheduler'; | 
| export function generate(initialStateOrOptions, condition, iterate, resultSelectorOrObservable, scheduler) { | 
|     var resultSelector; | 
|     var initialState; | 
|     if (arguments.length == 1) { | 
|         var options = initialStateOrOptions; | 
|         initialState = options.initialState; | 
|         condition = options.condition; | 
|         iterate = options.iterate; | 
|         resultSelector = options.resultSelector || identity; | 
|         scheduler = options.scheduler; | 
|     } | 
|     else if (resultSelectorOrObservable === undefined || isScheduler(resultSelectorOrObservable)) { | 
|         initialState = initialStateOrOptions; | 
|         resultSelector = identity; | 
|         scheduler = resultSelectorOrObservable; | 
|     } | 
|     else { | 
|         initialState = initialStateOrOptions; | 
|         resultSelector = resultSelectorOrObservable; | 
|     } | 
|     return new Observable(function (subscriber) { | 
|         var state = initialState; | 
|         if (scheduler) { | 
|             return scheduler.schedule(dispatch, 0, { | 
|                 subscriber: subscriber, | 
|                 iterate: iterate, | 
|                 condition: condition, | 
|                 resultSelector: resultSelector, | 
|                 state: state | 
|             }); | 
|         } | 
|         do { | 
|             if (condition) { | 
|                 var conditionResult = void 0; | 
|                 try { | 
|                     conditionResult = condition(state); | 
|                 } | 
|                 catch (err) { | 
|                     subscriber.error(err); | 
|                     return undefined; | 
|                 } | 
|                 if (!conditionResult) { | 
|                     subscriber.complete(); | 
|                     break; | 
|                 } | 
|             } | 
|             var value = void 0; | 
|             try { | 
|                 value = resultSelector(state); | 
|             } | 
|             catch (err) { | 
|                 subscriber.error(err); | 
|                 return undefined; | 
|             } | 
|             subscriber.next(value); | 
|             if (subscriber.closed) { | 
|                 break; | 
|             } | 
|             try { | 
|                 state = iterate(state); | 
|             } | 
|             catch (err) { | 
|                 subscriber.error(err); | 
|                 return undefined; | 
|             } | 
|         } while (true); | 
|         return undefined; | 
|     }); | 
| } | 
| function dispatch(state) { | 
|     var subscriber = state.subscriber, condition = state.condition; | 
|     if (subscriber.closed) { | 
|         return undefined; | 
|     } | 
|     if (state.needIterate) { | 
|         try { | 
|             state.state = state.iterate(state.state); | 
|         } | 
|         catch (err) { | 
|             subscriber.error(err); | 
|             return undefined; | 
|         } | 
|     } | 
|     else { | 
|         state.needIterate = true; | 
|     } | 
|     if (condition) { | 
|         var conditionResult = void 0; | 
|         try { | 
|             conditionResult = condition(state.state); | 
|         } | 
|         catch (err) { | 
|             subscriber.error(err); | 
|             return undefined; | 
|         } | 
|         if (!conditionResult) { | 
|             subscriber.complete(); | 
|             return undefined; | 
|         } | 
|         if (subscriber.closed) { | 
|             return undefined; | 
|         } | 
|     } | 
|     var value; | 
|     try { | 
|         value = state.resultSelector(state.state); | 
|     } | 
|     catch (err) { | 
|         subscriber.error(err); | 
|         return undefined; | 
|     } | 
|     if (subscriber.closed) { | 
|         return undefined; | 
|     } | 
|     subscriber.next(value); | 
|     if (subscriber.closed) { | 
|         return undefined; | 
|     } | 
|     return this.schedule(state); | 
| } | 
| //# sourceMappingURL=generate.js.map |