fluidstate-alien
Version:
Alien Signals-based reactive layer for fluidstate
65 lines (64 loc) • 1.75 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getReactiveLayer = void 0;
var _alienSignals = require("./alien-signals");
/**
* Returns a `ReactiveLayer` implementation backed by the Alien Signals library.
* This function provides the bridge between `fluidstate`'s abstract reactivity
* API and Alien Signals's reactivity implementation.
*/
const getReactiveLayer = () => ({
createAtom: (name, options) => {
const alienAtom = (0, _alienSignals.atom)(options);
const result = {
name,
reportChanged: _alienSignals.reportChanged.bind(alienAtom),
reportObserved: _alienSignals.reportObserved.bind(alienAtom)
};
return result;
},
createComputedAtom: (name, calculate, options) => {
const get = (0, _alienSignals.computed)(calculate, options);
const result = {
name,
get
};
return result;
},
createReaction: (fn, options) => {
const stopEffect = (0, _alienSignals.effect)(fn, options);
const result = {
stop: stopEffect
};
return result;
},
untrack: action => {
const prevActiveSub = (0, _alienSignals.getCurrentSub)();
(0, _alienSignals.setCurrentSub)(undefined);
try {
return action();
} finally {
(0, _alienSignals.setCurrentSub)(prevActiveSub);
}
},
runTransaction: transaction => {
(0, _alienSignals.startBatch)();
try {
return transaction();
} finally {
(0, _alienSignals.endBatch)();
}
},
runAction: action => {
(0, _alienSignals.startBatch)();
try {
return action();
} finally {
(0, _alienSignals.endBatch)();
}
}
});
exports.getReactiveLayer = getReactiveLayer;
//# sourceMappingURL=reactive-layer.js.map