docs: function extractBits(property) {
    var array = (0, _neTypes.isArray)(property) ? property : [property, property, null];
    var reply;
  
    if (!property) {
      var error = new Error('Invalid property. Given\n  %o', (0, _util.inspect)(property, {
        depth: 2
      }));
      return {
        fieldName: 'anErrorOccurred',
        modelName: 'anErrorOccurred',
        typeClass: null,
        getterMaker: function getterMaker() {
          return function () {
            return error;
          };
        },
        setterMaker: function setterMaker() {
          return function (v) {
            return undefined;
          };
        }
      };
    } //
  
  
    if (array.length === 3) {
      reply = {
        fieldName: array[0],
        modelName: array[1],
        typeClass: typeof array[2] === 'function' && array[2] || null
      };
    } //
    else if (array.length === 2) {
        reply = {
          fieldName: array[0],
          modelName: typeof array[1] === 'string' ? array[1] : array[0],
          typeClass: typeof array[1] === 'function' && array[1] || null
        };
      } //
      else {
          reply = {
            fieldName: array[0],
            modelName: array[0],
            typeClass: array[0]
          };
        }
  
    reply.getterMaker = function () {
      var _reply = reply,
          modelName = _reply.modelName,
          fieldName = _reply.fieldName,
          typeClass = _reply.typeClass;
      return function () {
        var thisClass = this.constructor;
        var model = this[_GQLBase.MODEL_KEY] || null;
        var val;
  
        if (!(0, _neTypes.extendsFrom)(thisClass, _GQLBase.GQLBase)) {
          console.error("".concat(thisClass.name, " is not derived from GQLBase"));
          return undefined;
        }
  
        if (!thisClass.SCHEMA) {
          throw new Error("\n        All GQLBase extended classes should have a defined SCHEMA. Please\n        manually define a static get SCHEMA() in your class or use the\n        @Schema() decorator to do so.\n        ");
        }
  
        if (typeClass) {
          // If the value of the model is already the type of class we expect
          // we do not need to do any processing and we can just grab it and
          // go.
          if (model[modelName] && (0, _neTypes.extendsFrom)(model[modelName], typeClass)) {
            val = model[modelName];
          } // Otherwise we need to return an instance of the determined typeClass
          // and pass that back instead; as requested.
          else {
              var results = _SyntaxTree.SyntaxTree.findField((0, _graphql.parse)(this.constructor.SCHEMA), this.constructor.name, modelName);
  
              var _ref = results || {
                meta: null
              },
                  meta = _ref.meta;
  
              var args = [model[modelName], this.requestData];
  
              if (meta && !meta.nullable && !model) {
                throw new Error("\n              Using @Getters or @Properties decorators with a null or\n              undefined model when the schema states that this field\n              cannot be null.\n\n              Type      : ".concat(typeClass.name, "\n              Field (AST data)\n                name    : ").concat(meta.name, "\n                type    : ").concat(meta.type, "\n                nullable: ").concat(meta.nullable, "\n              [getter]  : ").concat(fieldName, "\n              [maps to] : ").concat(modelName, "\n              [model  ] : ").concat(model, "\n            "));
              } // If the following is true, it means that despite allowing nulls
              // for this field in the schema, we do have a valid model and should
              // proceed.
  
  
              if (model) {
                if (extractBits.DIRECT_TYPES.includes(typeClass.name)) {
                  val = typeClass.apply(void 0, args);
                } else {
                  val = (0, _construct2.default)(typeClass, args);
                }
  
                if (typeClass.GQL_TYPE === _graphql.GraphQLEnumType) {
                  return val.value;
                }
              }
            }
        } else {
          val = model[modelName];
        }
  
        if (val === 'undefined' || val === undefined) {
          val = null;
        }
  
        return val;
      };
    };
  
    reply.setterMaker = function () {
      var _reply2 = reply,
          modelName = _reply2.modelName;
      return function (value) {
        this[_GQLBase.MODEL_KEY][modelName] = value;
      };
    };
  
    return reply;
  }