code: function onDecoratorFactory(decoratorName, propertyName) {
      return function(eventName) {
           return function(target, name, descriptor) {
               if (!eventName) {
                   throw new Error(`The ${decoratorName} decorator requires an eventName argument`);
               }
               if (_.isFunction(target[propertyName])) {
                   throw new Error(`The ${decoratorName} decorator is not compatible with ${propertyName} as method form`);
                   return;
               }
               if (target[propertyName] && !_.has(target, propertyName)) {
                   target[propertyName] = _.clone(target[propertyName]);
               }
               if (!target[propertyName]) {
                   target[propertyName] = {};
               }
               target[propertyName][eventName] = name;
               return descriptor;
           };
       };
  }
docs: /* Ideally we'd want to just pass these exports through directly
  but Babel complains about nesting exports, so we attach them
  to a namespace