function propertyDescriptorIn( value, property ) {
	var desc;
	var obj;

	if ( value === null || value === void 0 ) {
		return null;
	}
	// Cast the value to an object:
	obj = Object( value );

	// Walk the prototype chain in search of a specified property...
	do {
		desc = getOwnPropertyDescriptor( obj, property );
		if ( desc ) {
			return desc;
		}
		obj = getPrototypeOf( obj );
	} while ( obj );

	return null;
}
Returns a property descriptor for an object's own or inherited property.

## Notes

-   In contrast to the built-in `Object.getOwnPropertyDescriptor()`, this function returns `null` if provided `undefined` or `null`, rather than throwing an error.
-   In contrast to the built-in `Object.getOwnPropertyDescriptor()`, this function returns `null` if an object does not have a provided property, rather than `undefined`.

@private
@param {*} value - input object
@param {(string|symbol)} property - property
@returns {(Object|null)} property descriptor or null

@example
var obj = {
    'beep': 'boop',
    'foo': 3.14
};

var desc = propertyDescriptorIn( obj, 'foo' );
// returns {'configurable':true,'enumerable':true,'writable':true,'value':3.14}