docs: function getPropertyNamesAndDescriptions (obj) {
    let props = {}
  
    do {
      Object.getOwnPropertyNames(obj).forEach(function (prop) {
        if (!props.hasOwnProperty(prop)) {
          props[prop] = Object.getOwnPropertyDescriptor(obj, prop)
        }
      })
      obj = Object.getPrototypeOf(obj)
    } while (obj !== Object.prototype)
  
    return props
  }