|
import { __generator } from "tslib"; |
|
import { identity } from '../util/identity'; |
|
import { isScheduler } from '../util/isScheduler'; |
|
import { defer } from './defer'; |
|
import { scheduleIterable } from '../scheduled/scheduleIterable'; |
|
export function generate(initialStateOrOptions, condition, iterate, resultSelectorOrScheduler, scheduler) { |
|
var _a, _b; |
|
var resultSelector; |
|
var initialState; |
|
if (arguments.length === 1) { |
|
(_a = initialStateOrOptions, initialState = _a.initialState, condition = _a.condition, iterate = _a.iterate, _b = _a.resultSelector, resultSelector = _b === void 0 ? identity : _b, scheduler = _a.scheduler); |
|
} |
|
else { |
|
initialState = initialStateOrOptions; |
|
if (!resultSelectorOrScheduler || isScheduler(resultSelectorOrScheduler)) { |
|
resultSelector = identity; |
|
scheduler = resultSelectorOrScheduler; |
|
} |
|
else { |
|
resultSelector = resultSelectorOrScheduler; |
|
} |
|
} |
|
function gen() { |
|
var state; |
|
return __generator(this, function (_a) { |
|
switch (_a.label) { |
|
case 0: |
|
state = initialState; |
|
_a.label = 1; |
|
case 1: |
|
if (!(!condition || condition(state))) return [3, 4]; |
|
return [4, resultSelector(state)]; |
|
case 2: |
|
_a.sent(); |
|
_a.label = 3; |
|
case 3: |
|
state = iterate(state); |
|
return [3, 1]; |
|
case 4: return [2]; |
|
} |
|
}); |
|
} |
|
return defer((scheduler |
|
? |
|
function () { return scheduleIterable(gen(), scheduler); } |
|
: |
|
gen)); |
|
} |
|
|