function Field(name, id, type, rule, extend, options, comment) {
        if (util.isObject(rule)) {
          comment = extend;
          options = rule;
          rule = extend = undefined;
        } else if (util.isObject(extend)) {
          comment = options;
          options = extend;
          extend = undefined;
        }

        ReflectionObject.call(this, name, options);

        if (!util.isInteger(id) || id < 0)
          throw TypeError("id must be a non-negative integer");

        if (!util.isString(type)) throw TypeError("type must be a string");

        if (
          rule !== undefined &&
          !ruleRe.test((rule = rule.toString().toLowerCase()))
        )
          throw TypeError("rule must be a string rule");

        if (extend !== undefined && !util.isString(extend))
          throw TypeError("extend must be a string");

        if (rule === "proto3_optional") {
          rule = "optional";
        }
        /**
         * Field rule, if any.
         * @type {string|undefined}
         */
        this.rule = rule && rule !== "optional" ? rule : undefined; // toJSON

        /**
         * Field type.
         * @type {string}
         */
        this.type = type; // toJSON

        /**
         * Unique field id.
         * @type {number}
         */
        this.id = id; // toJSON, marker

        /**
         * Extended type if different from parent.
         * @type {string|undefined}
         */
        this.extend = extend || undefined; // toJSON

        /**
         * Whether this field is required.
         * @type {boolean}
         */
        this.required = rule === "required";

        /**
         * Whether this field is optional.
         * @type {boolean}
         */
        this.optional = !this.required;

        /**
         * Whether this field is repeated.
         * @type {boolean}
         */
        this.repeated = rule === "repeated";

        /**
         * Whether this field is a map or not.
         * @type {boolean}
         */
        this.map = false;

        /**
         * Message this field belongs to.
         * @type {Type|null}
         */
        this.message = null;

        /**
         * OneOf this field belongs to, if any,
         * @type {OneOf|null}
         */
        this.partOf = null;

        /**
         * The field type's default value.
         * @type {*}
         */
        this.typeDefault = null;

        /**
         * The field's default value on prototypes.
         * @type {*}
         */
        this.defaultValue = null;

        /**
         * Whether this field's value should be treated as a long.
         * @type {boolean}
         */
        this.long = util.Long
          ? types.long[type] !== undefined
          : /* istanbul ignore next */ false;

        /**
         * Whether this field's value is a buffer.
         * @type {boolean}
         */
        this.bytes = type === "bytes";

        /**
         * Resolved type if not a basic type.
         * @type {Type|Enum|null}
         */
        this.resolvedType = null;

        /**
         * Sister-field within the extended type if a declaring extension field.
         * @type {Field|null}
         */
        this.extensionField = null;

        /**
         * Sister-field within the declaring namespace if an extended field.
         * @type {Field|null}
         */
        this.declaringField = null;

        /**
         * Internally remembers whether this field is packed.
         * @type {boolean|null}
         * @private
         */
        this._packed = null;

        /**
         * Comment for this field.
         * @type {string|null}
         */
        this.comment = comment;
      }
/**
       * Not an actual constructor. Use {@link Field} instead.
       * @classdesc Base class of all reflected message fields. This is not an actual class but here for the sake of having consistent type definitions.
       * @exports FieldBase
       * @extends ReflectionObject
       * @constructor
       * @param {string} name Unique name within its namespace
       * @param {number} id Unique id within its namespace
       * @param {string} type Value type
       * @param {string|Object.<string,*>} [rule="optional"] Field rule
       * @param {string|Object.<string,*>} [extend] Extended type if different from parent
       * @param {Object.<string,*>} [options] Declared options
       * @param {string} [comment] Comment associated with this field
       */
Not an actual constructor. Use  Field instead.
@classdesc Base class of all reflected message fields. This is not an actual class but here for the sake of having consistent type definitions.
Not an actual constructor . Use Field instead . @classdesc Base class of all reflected message fields . This is not an actual class but here for the sake of having consistent type definitions .
function Field(name, id, type, rule, extend, options, comment) {
        if (util.isObject(rule)) {
          comment = extend;
          options = rule;
          rule = extend = undefined;
        } else if (util.isObject(extend)) {
          comment = options;
          options = extend;
          extend = undefined;
        }
        ReflectionObject.call(this, name, options);
        if (!util.isInteger(id) || id < 0)
          throw TypeError("id must be a non-negative integer");
        if (!util.isString(type)) throw TypeError("type must be a string");
        if (
          rule !== undefined &&
          !ruleRe.test((rule = rule.toString().toLowerCase()))
        )
          throw TypeError("rule must be a string rule");
        if (extend !== undefined && !util.isString(extend))
          throw TypeError("extend must be a string");
        if (rule === "proto3_optional") {
          rule = "optional";
        }
        this.rule = rule && rule !== "optional" ? rule : undefined; 
        this.type = type; 
        this.id = id; , marker
        this.extend = extend || undefined; 
        this.required = rule === "required";
        this.optional = !this.required;
        this.repeated = rule === "repeated";
        this.map = false;
        this.message = null;
        this.partOf = null;
        this.typeDefault = null;
        this.defaultValue = null;
        this.long = util.Long
          ? types.long[type] !== undefined
          :  false;
        this.bytes = type === "bytes";
        this.resolvedType = null;
        this.extensionField = null;
        this.declaringField = null;
        this._packed = null;
        this.comment = comment;
      }
function Field ( name , id , type , rule , extend , options , comment ) { if ( util . isObject ( rule ) ) { comment = extend ; options = rule ; rule = extend = undefined ; } else if ( util . isObject ( extend ) ) { comment = options ; options = extend ; extend = undefined ; } ReflectionObject . call ( this , name , options ) ; if ( ! util . isInteger ( id ) || id < 0 ) throw TypeError ( "id must be a non-negative integer" ) ; if ( ! util . isString ( type ) ) throw TypeError ( "type must be a string" ) ; if ( rule !== undefined && ! ruleRe . test ( ( rule = rule . toString ( ) . toLowerCase ( ) ) ) ) throw TypeError ( "rule must be a string rule" ) ; if ( extend !== undefined && ! util . isString ( extend ) ) throw TypeError ( "extend must be a string" ) ; if ( rule === "proto3_optional" ) { rule = "optional" ; } this . rule = rule && rule !== "optional" ? rule : undefined ; this . type = type ; this . id = id ; this . extend = extend || undefined ; this . required = rule === "required" ; this . optional = ! this . required ; this . repeated = rule === "repeated" ; this . map = false ; this . message = null ; this . partOf = null ; this . typeDefault = null ; this . defaultValue = null ; this . long = util . Long ? types . long [ type ] !== undefined : false ; this . bytes = type === "bytes" ; this . resolvedType = null ; this . extensionField = null ; this . declaringField = null ; this . _packed = null ; this . comment = comment ; }
Not an actual constructor.
Not an actual constructor .
/**
         * Field rule, if any.
         * @type {string|undefined}
         */ // toJSON /**
         * Field type.
         * @type {string}
         */ // toJSON /**
         * Unique field id.
         * @type {number}
         */ // toJSON, marker /**
         * Extended type if different from parent.
         * @type {string|undefined}
         */ // toJSON /**
         * Whether this field is required.
         * @type {boolean}
         */ /**
         * Whether this field is optional.
         * @type {boolean}
         */ /**
         * Whether this field is repeated.
         * @type {boolean}
         */ /**
         * Whether this field is a map or not.
         * @type {boolean}
         */ /**
         * Message this field belongs to.
         * @type {Type|null}
         */ /**
         * OneOf this field belongs to, if any,
         * @type {OneOf|null}
         */ /**
         * The field type's default value.
         * @type {*}
         */ /**
         * The field's default value on prototypes.
         * @type {*}
         */ /**
         * Whether this field's value should be treated as a long.
         * @type {boolean}
         */ /* istanbul ignore next */ /**
         * Whether this field's value is a buffer.
         * @type {boolean}
         */ /**
         * Resolved type if not a basic type.
         * @type {Type|Enum|null}
         */ /**
         * Sister-field within the extended type if a declaring extension field.
         * @type {Field|null}
         */ /**
         * Sister-field within the declaring namespace if an extended field.
         * @type {Field|null}
         */ /**
         * Internally remembers whether this field is packed.
         * @type {boolean|null}
         * @private
         */ /**
         * Comment for this field.
         * @type {string|null}
         */