spy object

A tool to subscribe to deep object changes

usage

import {spyObject} from 'https://deno.land/x/spy_object@v0.2.0/spyObject.js'

const data = {
  a: 1,
  b: {
    c: 2,
  },
};

const spied = spyObject(data, {
  set(path, target, prop, value) {
    console.log(`set ${value} at /${path.join('/')}`);
    console.log('old value:', target[prop]);
    console.log('new value:', value);
  },

  get(path, target, prop) {
    console.log(
      `read ${JSON.stringify(
        target[prop],
      )} at path: /${path.join('/')}`,
    );
  },

  delete(path, target, prop) {
    console.log(`delete at path: /${path.join('/')}`);
    console.log('old value:', target[prop]);
  },
});

spied.a = 2;

spied.b.c;

delete spied.a;