26 lines
523 B
JavaScript
26 lines
523 B
JavaScript
import { eq } from './util.js';
|
|
|
|
export function prop(store, comparator = eq) {
|
|
const subscribers = new Set();
|
|
|
|
const accessor = function _prop(newVal) {
|
|
if (newVal !== undefined && !comparator(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;
|
|
}
|