docs: function (object) {
    let names = Object.getOwnPropertyNames(object)
    // For Function, we should not override following properties even though they
    // are "own" properties.
    if (typeof object === 'function') {
      names = names.filter((name) => {
        return !FUNCTION_PROPERTIES.includes(name)
      })
    }
    // Map properties to descriptors.
    return names.map((name) => {
      const descriptor = Object.getOwnPropertyDescriptor(object, name)
      const member = { name, enumerable: descriptor.enumerable, writable: false }
      if (descriptor.get === undefined && typeof object[name] === 'function') {
        member.type = 'method'
      } else {
        if (descriptor.set || descriptor.writable) member.writable = true
        member.type = 'get'
      }
      return member
    })
  }