code: 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;
    };
  }
docs: When working with `GQLBase` instances that expose properties
  that have a 1:1 mapping to their own model property of the
  same name, adding the getters manually can be annoying. This
  takes an indeterminate amount of strings representing the
  properties for which getters should be injected.
  
  @function 🏷⠀Getters
  @memberof! decorators
  
  @param {Array<String|Array<String>>} propertyNames if the model has 'name'
  and 'age' as properties, then passing those two strings will result
  in getters that surface those properties as GraphQL fields.
  @return {Function} a class decorator method.s