DeltaPlane
Proxy to keep original data unchanged,
but read and write changes using additional layer - 'delta' object.
npm install deltaplane
var o = { a:{b:{c:'original'}}, hello: 'world'};
var dp = DeltaPlane(o);
var p = dp.getPlane();
console.log(p.a.b.c);
console.log(p.hello);
p.a.b.c = 1;
console.log(p.a.b.c);
console.log(p.hello);
console.log(dp.getDelta());
console.log(o);
var delta = {hello:"hi"};
dp = DeltaPlane(o, delta);
p = dp.getPlane();
console.log(p.hello);
console.log(p.a.b.c);
p.a.b.c = 2;
console.log(delta);
p = dp.getPlane(['a','b']);
p.c = 3;
console.log(delta);
p = dp.getPlane(['x','y']);
p.z='ZZZZ';
console.log(delta);