portfolio/packages/frptools/src/observable.js
2017-10-27 21:37:57 -05:00

24 lines
475 B
JavaScript

export function observable(store) {
const subscribers = new Set();
const accessor = function _observable(newVal) {
if (newVal !== undefined && store !== newVal) {
store = newVal;
subscribers.forEach(s => s(store));
}
return store;
};
accessor.subscribe = accessor._d = fn => {
subscribers.add(fn);
return () => {
subscribers.delete(fn);
return subscribers.size;
};
};
accessor.unsubscribeAll = () => subscribers.clear();
return accessor;
}