21 lines
437 B
JavaScript
21 lines
437 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);
|
|
};
|
|
|
|
accessor.unsubscribeAll = () => subscribers.clear();
|
|
|
|
return accessor;
|
|
}
|