UNPKG

@typed/effects

Version:

Generator-powered Effect management

33 lines 1.19 kB
import { Disposable } from '@typed/disposable'; import { createDeferred } from '@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. export function createFiber() { const disposable = Disposable.lazy(); const [promise, resolve, reject] = 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; } //# sourceMappingURL=createFiber.js.map