function inspectValue(object, key, computedValue) {
  let string;
  const value = computedValue;

  if (arguments.length === 3 && computedValue === undefined) {
    return { type: `type-undefined`, inspect: 'undefined' };
  }

  // TODO: this is not very clean. We should refactor calculateCP, etc, rather than passing computedValue
  if (computedValue !== undefined) {
    if (value instanceof HTMLElement) {
      return {
        type: 'type-object',
        inspect: `<${value.tagName.toLowerCase()}>`,
      };
    }
    return { type: `type-${typeOf(value)}`, inspect: inspect(value) };
  }

  if (value instanceof EmberObject) {
    return { type: 'type-ember-object', inspect: value.toString() };
  } else if (isComputed(object, key)) {
    string = '<computed>';
    return { type: 'type-descriptor', inspect: string };
  } else if (value?.isDescriptor) {
    return { type: 'type-descriptor', inspect: value.toString() };
  } else if (value instanceof HTMLElement) {
    return { type: 'type-object', inspect: value.tagName.toLowerCase() };
  } else {
    return { type: `type-${typeOf(value)}`, inspect: inspect(value) };
  }
}
Determine the type and get the value of the passed property
@param {*} object The parent object we will look for `key` on
@param {string} key The key for the property which points to a computed, EmberObject, etc
@param {*} computedValue A value that has already been computed with calculateCP
@return {{inspect: (string|*), type: string}|{computed: boolean, inspect: string, type: string}|{inspect: string, type: string}}