{"ast":null,"code":"import { Observable } from '../Observable';\nimport { identity } from '../util/identity';\nimport { isScheduler } from '../util/isScheduler';\nexport function generate(initialStateOrOptions, condition, iterate, resultSelectorOrObservable, scheduler) {\n let resultSelector;\n let initialState;\n\n if (arguments.length == 1) {\n const options = initialStateOrOptions;\n initialState = options.initialState;\n condition = options.condition;\n iterate = options.iterate;\n resultSelector = options.resultSelector || identity;\n scheduler = options.scheduler;\n } else if (resultSelectorOrObservable === undefined || isScheduler(resultSelectorOrObservable)) {\n initialState = initialStateOrOptions;\n resultSelector = identity;\n scheduler = resultSelectorOrObservable;\n } else {\n initialState = initialStateOrOptions;\n resultSelector = resultSelectorOrObservable;\n }\n\n return new Observable(subscriber => {\n let state = initialState;\n\n if (scheduler) {\n return scheduler.schedule(dispatch, 0, {\n subscriber,\n iterate,\n condition,\n resultSelector,\n state\n });\n }\n\n do {\n if (condition) {\n let conditionResult;\n\n try {\n conditionResult = condition(state);\n } catch (err) {\n subscriber.error(err);\n return undefined;\n }\n\n if (!conditionResult) {\n subscriber.complete();\n break;\n }\n }\n\n let value;\n\n try {\n value = resultSelector(state);\n } catch (err) {\n subscriber.error(err);\n return undefined;\n }\n\n subscriber.next(value);\n\n if (subscriber.closed) {\n break;\n }\n\n try {\n state = iterate(state);\n } catch (err) {\n subscriber.error(err);\n return undefined;\n }\n } while (true);\n\n return undefined;\n });\n}\n\nfunction dispatch(state) {\n const {\n subscriber,\n condition\n } = state;\n\n if (subscriber.closed) {\n return undefined;\n }\n\n if (state.needIterate) {\n try {\n state.state = state.iterate(state.state);\n } catch (err) {\n subscriber.error(err);\n return undefined;\n }\n } else {\n state.needIterate = true;\n }\n\n if (condition) {\n let conditionResult;\n\n try {\n conditionResult = condition(state.state);\n } catch (err) {\n subscriber.error(err);\n return undefined;\n }\n\n if (!conditionResult) {\n subscriber.complete();\n return undefined;\n }\n\n if (subscriber.closed) {\n return undefined;\n }\n }\n\n let value;\n\n try {\n value = state.resultSelector(state.state);\n } catch (err) {\n subscriber.error(err);\n return undefined;\n }\n\n if (subscriber.closed) {\n return undefined;\n }\n\n subscriber.next(value);\n\n if (subscriber.closed) {\n return undefined;\n }\n\n return this.schedule(state);\n} //# sourceMappingURL=generate.js.map","map":null,"metadata":{},"sourceType":"module"}