UNPKG

@typed/effects

Version:

Generator-powered Effect management

33 lines 1.15 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.combine = void 0; const disposable_1 = require("@typed/disposable"); const env_1 = require("@typed/env"); const run_1 = require("../run"); function* combine(...effects) { if (effects.length === 0) { return []; } return yield combineEnvs(effects.map(run_1.runEffect)); } exports.combine = combine; function combineEnvs(envs) { return (c) => env_1.Resume.create((cb) => { const hasValues = Array(envs.length).fill(false); const values = Array(envs.length); const disposable = disposable_1.Disposable.lazy(); function onValue(value, index) { hasValues[index] = true; values[index] = value; if (hasValues.every(Boolean)) { disposable.addDisposable(cb(values)); } return disposable_1.Disposable.None; } for (let i = 0; i < envs.length; ++i) { disposable.addDisposable(env_1.runEnv((value) => onValue(value, i), c, envs[i])); } return disposable; }); } //# sourceMappingURL=combine.js.map