text: "use strict";
  module.exports = common;
  
  var commonRe = /\/|\./;
  
  /**
   * Provides common type definitions.
   * Can also be used to provide additional google types or your own custom types.
   * @param {string} name Short name as in `google/protobuf/[name].proto` or full file name
   * @param {Object.<string,*>} json JSON definition within `google.protobuf` if a short name, otherwise the file's root definition
   * @returns {undefined}
   * @property {INamespace} google/protobuf/any.proto Any
   * @property {INamespace} google/protobuf/duration.proto Duration
   * @property {INamespace} google/protobuf/empty.proto Empty
   * @property {INamespace} google/protobuf/struct.proto Struct, Value, NullValue and ListValue
   * @property {INamespace} google/protobuf/timestamp.proto Timestamp
   * @property {INamespace} google/protobuf/wrappers.proto Wrappers
   * @example
   * // manually provides descriptor.proto (assumes google/protobuf/ namespace and .proto extension)
   * protobuf.common("descriptor", descriptorJson);
   *
   * // manually provides a custom definition (uses my.foo namespace)
   * protobuf.common("my/foo/bar.proto", myFooBarJson);
   */
  function common(name, json) {
      if (!commonRe.test(name)) {
          name = "google/protobuf/" + name + ".proto";
          json = { nested: { google: { nested: { protobuf: { nested: json } } } } };
      }
      common[name] = json;
  }
  
  // Not provided because of limited use (feel free to discuss or to provide yourself):
  //
  // google/protobuf/descriptor.proto
  // google/protobuf/field_mask.proto
  // google/protobuf/source_context.proto
  // google/protobuf/type.proto
  //
  // Stripped and pre-parsed versions of these non-bundled files are instead available as part of
  // the repository or package within the google/protobuf directory.
  
  common("any", {
  
      /**
       * Properties of a google.protobuf.Any message.
       * @interface IAny
       * @type {Object}
       * @property {string} [typeUrl]
       * @property {Uint8Array} [bytes]
       * @memberof common
       */
      Any: {
          fields: {
              type_url: {
                  type: "string",
                  id: 1
              },
              value: {
                  type: "bytes",
                  id: 2
              }
          }
      }
  });
  
  var timeType;
  
  common("duration", {
  
      /**
       * Properties of a google.protobuf.Duration message.
       * @interface IDuration
       * @type {Object}
       * @property {number|Long} [seconds]
       * @property {number} [nanos]
       * @memberof common
       */
      Duration: timeType = {
          fields: {
              seconds: {
                  type: "int64",
                  id: 1
              },
              nanos: {
                  type: "int32",
                  id: 2
              }
          }
      }
  });
  
  common("timestamp", {
  
      /**
       * Properties of a google.protobuf.Timestamp message.
       * @interface ITimestamp
       * @type {Object}
       * @property {number|Long} [seconds]
       * @property {number} [nanos]
       * @memberof common
       */
      Timestamp: timeType
  });
  
  common("empty", {
  
      /**
       * Properties of a google.protobuf.Empty message.
       * @interface IEmpty
       * @memberof common
       */
      Empty: {
          fields: {}
      }
  });
  
  common("struct", {
  
      /**
       * Properties of a google.protobuf.Struct message.
       * @interface IStruct
       * @type {Object}
       * @property {Object.<string,IValue>} [fields]
       * @memberof common
       */
      Struct: {
          fields: {
              fields: {
                  keyType: "string",
                  type: "Value",
                  id: 1
              }
          }
      },
  
      /**
       * Properties of a google.protobuf.Value message.
       * @interface IValue
       * @type {Object}
       * @property {string} [kind]
       * @property {0} [nullValue]
       * @property {number} [numberValue]
       * @property {string} [stringValue]
       * @property {boolean} [boolValue]
       * @property {IStruct} [structValue]
       * @property {IListValue} [listValue]
       * @memberof common
       */
      Value: {
          oneofs: {
              kind: {
                  oneof: [
                      "nullValue",
                      "numberValue",
                      "stringValue",
                      "boolValue",
                      "structValue",
                      "listValue"
                  ]
              }
          },
          fields: {
              nullValue: {
                  type: "NullValue",
                  id: 1
              },
              numberValue: {
                  type: "double",
                  id: 2
              },
              stringValue: {
                  type: "string",
                  id: 3
              },
              boolValue: {
                  type: "bool",
                  id: 4
              },
              structValue: {
                  type: "Struct",
                  id: 5
              },
              listValue: {
                  type: "ListValue",
                  id: 6
              }
          }
      },
  
      NullValue: {
          values: {
              NULL_VALUE: 0
          }
      },
  
      /**
       * Properties of a google.protobuf.ListValue message.
       * @interface IListValue
       * @type {Object}
       * @property {Array.<IValue>} [values]
       * @memberof common
       */
      ListValue: {
          fields: {
              values: {
                  rule: "repeated",
                  type: "Value",
                  id: 1
              }
          }
      }
  });
  
  common("wrappers", {
  
      /**
       * Properties of a google.protobuf.DoubleValue message.
       * @interface IDoubleValue
       * @type {Object}
       * @property {number} [value]
       * @memberof common
       */
      DoubleValue: {
          fields: {
              value: {
                  type: "double",
                  id: 1
              }
          }
      },
  
      /**
       * Properties of a google.protobuf.FloatValue message.
       * @interface IFloatValue
       * @type {Object}
       * @property {number} [value]
       * @memberof common
       */
      FloatValue: {
          fields: {
              value: {
                  type: "float",
                  id: 1
              }
          }
      },
  
      /**
       * Properties of a google.protobuf.Int64Value message.
       * @interface IInt64Value
       * @type {Object}
       * @property {number|Long} [value]
       * @memberof common
       */
      Int64Value: {
          fields: {
              value: {
                  type: "int64",
                  id: 1
              }
          }
      },
  
      /**
       * Properties of a google.protobuf.UInt64Value message.
       * @interface IUInt64Value
       * @type {Object}
       * @property {number|Long} [value]
       * @memberof common
       */
      UInt64Value: {
          fields: {
              value: {
                  type: "uint64",
                  id: 1
              }
          }
      },
  
      /**
       * Properties of a google.protobuf.Int32Value message.
       * @interface IInt32Value
       * @type {Object}
       * @property {number} [value]
       * @memberof common
       */
      Int32Value: {
          fields: {
              value: {
                  type: "int32",
                  id: 1
              }
          }
      },
  
      /**
       * Properties of a google.protobuf.UInt32Value message.
       * @interface IUInt32Value
       * @type {Object}
       * @property {number} [value]
       * @memberof common
       */
      UInt32Value: {
          fields: {
              value: {
                  type: "uint32",
                  id: 1
              }
          }
      },
  
      /**
       * Properties of a google.protobuf.BoolValue message.
       * @interface IBoolValue
       * @type {Object}
       * @property {boolean} [value]
       * @memberof common
       */
      BoolValue: {
          fields: {
              value: {
                  type: "bool",
                  id: 1
              }
          }
      },
  
      /**
       * Properties of a google.protobuf.StringValue message.
       * @interface IStringValue
       * @type {Object}
       * @property {string} [value]
       * @memberof common
       */
      StringValue: {
          fields: {
              value: {
                  type: "string",
                  id: 1
              }
          }
      },
  
      /**
       * Properties of a google.protobuf.BytesValue message.
       * @interface IBytesValue
       * @type {Object}
       * @property {Uint8Array} [value]
       * @memberof common
       */
      BytesValue: {
          fields: {
              value: {
                  type: "bytes",
                  id: 1
              }
          }
      }
  });
  
  /**
   * Gets the root definition of the specified common proto file.
   *
   * Bundled definitions are:
   * - google/protobuf/any.proto
   * - google/protobuf/duration.proto
   * - google/protobuf/empty.proto
   * - google/protobuf/struct.proto
   * - google/protobuf/timestamp.proto
   * - google/protobuf/wrappers.proto
   *
   * @param {string} file Proto file name
   * @returns {INamespace|null} Root definition or `null` if not defined
   */
  common.get = function get(file) {
      return common[file] || null;
  };
  