UNPKG

@typed/effects

Version:

Generator-powered Effect management

37 lines 1.35 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createFiber = void 0; const disposable_1 = require("@typed/disposable"); const promises_1 = require("@typed/promises"); // Creates a fiber that automatically reacts to the mutation of its current info // Makes use of ES2015 Proxy, if required the available Proxy polyfills _should_ work for this use case. function createFiber() { const disposable = disposable_1.Disposable.lazy(); const [promise, resolve, reject] = promises_1.createDeferred(); const handleFiberInfo = (info) => { if (info.state === 2 /* Error */) { return reject(info.error); } if (info.state === 1 /* Returned */) { return resolve(info.value); } }; // Besides observing when info is changed, it also coincidentally makes our fiber actually immutable for it's other fields function setFiberKey(target, key, value) { if (key === 'info') { handleFiberInfo(value); target[key] = value; return true; } return false; } const fiber = new Proxy({ info: { state: 0 /* Running */, promise }, ...disposable, }, { set: setFiberKey, }); return fiber; } exports.createFiber = createFiber; //# sourceMappingURL=createFiber.js.map