state lib

by evgkch

JavaScript

const PRIVATE = Symbol('private');

const model = {
	[PRIVATE]: 0,
  public: 'init'
};

const observe = (model, cb) => {
	let cx = null;
  const proxy = new Proxy(model, {
    set(target, prop, value) {
      target[prop] = value;
      if (typeof(prop) == 'string')
      {
      	clearTimeout(cx);
        cx = setTimeout(cb, 0, target);
      }
    }
  });
  return proxy;
};

const data = observe(model, (model) => { console.log(model) });

data[PRIVATE] = 1;
data.public = 'updated';