Spaces:
Paused
Paused
/** | |
* Returns the source object of the given property on the target object | |
* (the target itself, any parent in its prototype, or null). | |
*/ | |
export function findPropertySource( | |
target: object, | |
propertyName: string | symbol | |
): object | null { | |
if (!(propertyName in target)) { | |
return null | |
} | |
const hasProperty = Object.prototype.hasOwnProperty.call(target, propertyName) | |
if (hasProperty) { | |
return target | |
} | |
const prototype = Reflect.getPrototypeOf(target) | |
return prototype ? findPropertySource(prototype, propertyName) : null | |
} | |