whole_func_string: function getOwnMetadata(metadataKey, target, propertyKey) {
              if (!IsObject(target))
                  throw new TypeError();
              if (!IsUndefined(propertyKey))
                  propertyKey = ToPropertyKey(propertyKey);
              return OrdinaryGetOwnMetadata(metadataKey, target, propertyKey);
          }
func_code_string: function getOwnMetadata(metadataKey, target, propertyKey) {
              if (!IsObject(target))
                  throw new TypeError();
              if (!IsUndefined(propertyKey))
                  propertyKey = ToPropertyKey(propertyKey);
              return OrdinaryGetOwnMetadata(metadataKey, target, propertyKey);
          }
func_documentation_string: Gets the metadata value for the provided metadata key on the target object.
  @param metadataKey A key used to store and retrieve metadata.
  @param target The target object on which the metadata is defined.
  @param propertyKey (Optional) The property key for the target.
  @returns The metadata value for the metadata key if found; otherwise, `undefined`.
  @example
  
  class Example {
  // property declarations are not part of ES6, though they are valid in TypeScript:
  // static staticProperty;
  // property;
  
  constructor(p) { }
  static staticMethod(p) { }
  method(p) { }
  }
  
  // constructor
  result = Reflect.getOwnMetadata("custom:annotation", Example);
  
  // property (on constructor)
  result = Reflect.getOwnMetadata("custom:annotation", Example, "staticProperty");
  
  // property (on prototype)
  result = Reflect.getOwnMetadata("custom:annotation", Example.prototype, "property");
  
  // method (on constructor)
  result = Reflect.getOwnMetadata("custom:annotation", Example, "staticMethod");
  
  // method (on prototype)
  result = Reflect.getOwnMetadata("custom:annotation", Example.prototype, "method");