Simple store to write code based on value changes
const s = store({ data: 1 });
s.onChange((v) => {
console.log({ v });
});
s.value.data = 2;
export function store(e) { | |
let r = [], | |
t = {}; | |
Object.defineProperty(t, "value", { | |
value: new Proxy( | |
{ __d: e }, | |
{ | |
get: (e, r) => e.__d[r], | |
set(e, t, n) { | |
(e.__d[t] = n), r.forEach((r) => r(e.__d)); | |
return true | |
}, | |
} | |
), | |
}); | |
Object.defineProperty(t, "onChange", { | |
value: function e(t) { | |
return ( | |
r.push(t), | |
() => { | |
r = r.filter((e) => !Object.is(e, t)); | |
} | |
); | |
}, | |
}); | |
return t; | |
} |