docs: function Getters() {
    for (var _len = arguments.length, propertyNames = new Array(_len), _key = 0; _key < _len; _key++) {
      propertyNames[_key] = arguments[_key];
    }
  
    return function (target) {
      var addTags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
  
      for (var _i = 0; _i < propertyNames.length; _i++) {
        var property = propertyNames[_i];
  
        var _extractBits = extractBits(property),
            fieldName = _extractBits.fieldName,
            getterMaker = _extractBits.getterMaker;
  
        var desc = Object.getOwnPropertyDescriptor(target.prototype, fieldName);
        var hasImpl = desc && (desc.get || typeof desc.value === 'function');
        var tags = [_GQLBase.GETTERS].concat(Array.isArray(addTags) && addTags || []);
  
        if (!hasImpl) {
          var descriptor = {
            get: getterMaker()
          };
          applyTags(target, tags, fieldName, descriptor);
          Object.defineProperty(target.prototype, fieldName, descriptor);
        } else {
          console.warn("Skipping getter for ".concat(target.name, ".").concat(fieldName, "; already exists"));
        }
      }
  
      return target;
    };
  }