code: function decorators() {
    for (var _len3 = arguments.length, funcs = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
      funcs[_key3] = arguments[_key3];
    }
  
    return function (key, value, descriptor) {
      var elementDescriptor;
  
      if (!descriptor) {
        elementDescriptor = key;
      } else {
        elementDescriptor = {
          key: key,
          descriptor: descriptor,
          value: value
        };
      }
  
      var ret = funcs.reduceRight(function (a, b) {
        return b.call(this, a);
      }, elementDescriptor);
      return ret && ret.descriptor;
    };
  }
docs: return a function to apply any decorators to a descriptor