--- /dev/null
+"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/field_mask.proto FieldMask
+ * @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/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
+ }
+ }
+ }
+});
+
+common("field_mask", {
+
+ /**
+ * Properties of a google.protobuf.FieldMask message.
+ * @interface IDoubleValue
+ * @type {Object}
+ * @property {number} [value]
+ * @memberof common
+ */
+ FieldMask: {
+ fields: {
+ paths: {
+ rule: "repeated",
+ type: "string",
+ 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/field_mask.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;
+};