UNPKG

@typed/effects

Version:

Generator-powered Effect management

31 lines 1.22 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.join = exports.Join = void 0; const disposable_1 = require("@typed/disposable"); const either_1 = require("@typed/either"); const env_1 = require("@typed/env"); const Effect_1 = require("../Effect"); const failures_1 = require("../failures"); const Fiber_1 = require("./Fiber"); exports.Join = { join(fiber) { const { info } = fiber; if (info.state === 1 /* Returned */) { return env_1.Resume.of(either_1.Either.of(info.value)); } if (info.state === 2 /* Error */) { return env_1.Resume.of(either_1.Left.of(info.error)); } return env_1.Resume.create((cb) => { const disposable = disposable_1.Disposable.lazy(); fiber.addDisposable(disposable); info.promise.then((value) => disposable.addDisposable(cb(either_1.Right.of(value))), (error) => disposable.addDisposable(cb(either_1.Left.of(error)))); return disposable; }); }, }; function* join(f) { return yield* failures_1.orFail(Fiber_1.FiberFailure, Effect_1.Effect.fromEnv((c) => c.join(f))); } exports.join = join; //# sourceMappingURL=join.js.map