debugProxy = (target, source, hint) => {
  const inheritedFromObj = Object.getOwnPropertyNames(Object.prototype)

  const keys = getAllKeys(source)
  for (const key of keys) {
    if (!Object.hasOwn(target, key) && !inheritedFromObj.includes(key)) {
      Object.defineProperty(target, key, {
        get() {
          addToPolicy(hint, key)
          return recursiveProxy(hint, [key])
        },
      })
    }
  }
}
Creates a debug proxy for a target object by replacing all own keys and
overshadowing the ones from the prototype chain.

@param {any} target - The target object to create a debug proxy for.
@param {object} source - The keys to check for in the target object.
@param {string} hint - The hint to identify the source of the missing key.