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) { | |
let resultSelector; | |
let initialState; | |
if (arguments.length === 1) { | |
({ | |
initialState, | |
condition, | |
iterate, | |
resultSelector = identity, | |
scheduler, | |
} = initialStateOrOptions); | |
} | |
else { | |
initialState = initialStateOrOptions; | |
if (!resultSelectorOrScheduler || isScheduler(resultSelectorOrScheduler)) { | |
resultSelector = identity; | |
scheduler = resultSelectorOrScheduler; | |
} | |
else { | |
resultSelector = resultSelectorOrScheduler; | |
} | |
} | |
function* gen() { | |
for (let state = initialState; !condition || condition(state); state = iterate(state)) { | |
yield resultSelector(state); | |
} | |
} | |
return defer((scheduler | |
? | |
() => scheduleIterable(gen(), scheduler) | |
: | |
gen)); | |
} | |
//# sourceMappingURL=generate.js.map |