UNPKG

@typed/effects

Version:

Generator-powered Effect management

27 lines 1.01 kB
import { Disposable } from '@typed/disposable'; import { Either, Left, Right } from '@typed/either'; import { Resume } from '@typed/env'; import { Effect } from '../Effect'; import { orFail } from '../failures'; import { FiberFailure } from './Fiber'; export const Join = { join(fiber) { const { info } = fiber; if (info.state === 1 /* Returned */) { return Resume.of(Either.of(info.value)); } if (info.state === 2 /* Error */) { return Resume.of(Left.of(info.error)); } return Resume.create((cb) => { const disposable = Disposable.lazy(); fiber.addDisposable(disposable); info.promise.then((value) => disposable.addDisposable(cb(Right.of(value))), (error) => disposable.addDisposable(cb(Left.of(error)))); return disposable; }); }, }; export function* join(f) { return yield* orFail(FiberFailure, Effect.fromEnv((c) => c.join(f))); } //# sourceMappingURL=join.js.map