@dhmk/atom
Version:
Lightweight mobx-like observable values, computed values and side-effects
35 lines (34 loc) • 918 B
JavaScript
import { runtime } from "./runtime";
export var removeAtom = function (a, self) {
a.observers.delete(self);
if (!a.observers.size)
a.dispose();
};
export function useAtom(a) {
var self = runtime.currentAtom;
if (!self)
return;
if (a.runId === self.runId)
return;
a.runId = self.runId;
if (self.prevDepsIndex < self.prevDeps.length &&
a === self.prevDeps[self.prevDepsIndex]) {
self.prevDepsIndex++;
self.isObserved ? self.deps.push(a) : self.depsForUnobserved.add(a);
return;
}
if (!self.isObserved) {
self.depsForUnobserved.add(a);
return;
}
var cid = a.observers.get(self);
if (cid !== self.runId) {
a.observers.set(self, self.runId);
self.deps.push(a);
}
}
export function reportError(e) {
return function () {
throw e;
};
}