If you'd like to be notified about any possible change that could happen to a JSON compatible model / data / object / array / structure, including the possibility to retrieve the exact full path of the object that changed and eventually walk through it, you've reached your destination.
const data = Introspected(
// any object or JSON compatible structure
// even with nested properties, objects, arrays
JSON.parse('{}'),
(root, path) => {
// the root object that changed
console.log(root);
// the path that just changed
console.log(path);
}
);
// now try the following in console
data.a.b.c.d.e.f.g = 'whatever';
data.array.value = [1, 2, 3];
data.array.value.push(4);
// see all notifications about all changes 🎉
JSON.stringify(data);
// {"a":{"b":{"c":{"d":{"e":{"f":{"g":"whatever"}}}}}},"array":{"value":[1,2,3,4]}}
Introspected(objectOrArray[, callback])
create a newIntrospected
object capable of having infinite depth without ever throwing errorsIntrospected.observe(objectOrArray, callback)
crate aIntrospected
with a notifier per each change, or set a notifier per each change to an existentIntrospected
objectIntrospected.pathValue(objectOrArray, path)
walk through an object via a provided path. Apath
is anArray
of properties, it is usually the one received through the notifier whenever aIntrospected
object is observed.
Any spec compliant ES2015 JavaScript engine.
(that means native WeakMap
, Proxy
and Symbol.toPrimitive
too)
Working: NodeJS 6+, Chrome, Safari, GNOME Web, Edge, Firefox, Samsung Internet (Chrome 51)
Not there yet: UC Browser (WebKit 534)