@typed/effects
Version:
Generator-powered Effect management
17 lines (13 loc) • 522 B
text/typescript
import { combine } from '../combinators'
import { Effects } from '../Effect'
import { Fiber, FiberFailure } from './Fiber'
import { join, Join } from './join'
export function* joinAll<A extends ReadonlyArray<Fiber<any>>>(
...fibers: A
): Effects<FiberFailure & Join, JoinAll<A>> {
const values = yield* combine<Effects<any, any>[]>(...fibers.map(join))
return values as JoinAll<A>
}
export type JoinAll<A extends ReadonlyArray<Fiber<any>>> = {
readonly [K in keyof A]: A[K] extends Fiber<infer R> ? R : never
}