I have an arbitrarily deep object like this:
const objToAccess = {
id: 1,
name: {
first: 'Foo',
last: 'Bar'
},
address: {
street: {
name: '987 Walker',
roadType: 'Ave'
},
zip: '12345'
}
};
I call a function that takes the above objToAccess
as a param. EDIT: This function is a black box. I don't know what it looks like and can't edit it. For example:
const accessFn = objToAccess => {
const a = objToAccess.id;
const b = objToAccess.name.first;
const c = objToAccess.address;
};
After that function is called, I want to know which properties were accessed. Here's the kicker: If a nested object was accessed, I want to flag all children as being accessed, too. For example, after running the above code, I would like a result that looks like this:
const propsAccessed = {
id: true,
name: {
first: true,
last: false
},
address: {
street: {
name: true,
roadType: true
},
zip: true
}
};
My naive attempt is to created the propsAccessed
object & set everything to false, and then use getters (below). But, I can't figure out how to use them in such a way that flags all children if just the parent object is accessed. Any ideas would be great!
const gettedReturnedMutation = {
get id() {
propsAccessed.id = true;
},
get name() {
// TODO if just address is accessed, recursively flag all children as true
return {
get first() {
propsAccessed.name.first = true;
},
get last() {
propsAccessed.name.last = true;
}
}
},
get address() {
// TODO if just address is accessed, recursively flag all children as true
return {
get street() {
return {
get name() {
propsAccessed.address.street.name = true;
},
get roadType() {
propsAccessed.address.street.roadType = true;
}
}
},
get zip() {
propsAccessed.address.zip = true;
}
}
}
}