UNPKG

@typed/effects

Version:

Generator-powered Effect management

26 lines 1.03 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.runEffect = void 0; const env_1 = require("@typed/env"); const Failure_1 = require("../failures/Failure"); exports.runEffect = (effect) => (c) => { const generator = effect[Symbol.iterator](); return runEffectGenerator(generator, generator.next(), c); }; const nextResult = (value, generator) => { if (value instanceof Failure_1.Failure) { return value.unpack((e) => generator.throw(e), (a) => generator.return(a)); } return generator.next(value); }; const runEffectGenerator = (generator, result, capabilities) => { while (!result.done) { const resume = result.value(capabilities); if (resume.type === 'lazy') { return env_1.Resume.chain((value) => runEffectGenerator(generator, nextResult(value, generator), capabilities), resume); } result = nextResult(resume.value, generator); } return env_1.Resume.of(result.value); }; //# sourceMappingURL=runEffect.js.map