--- /dev/null
+"use strict";
+
+/**
+ * Common type constants.
+ * @namespace
+ */
+var types = exports;
+
+var util = require("./util");
+
+var s = [
+ "double", // 0
+ "float", // 1
+ "int32", // 2
+ "uint32", // 3
+ "sint32", // 4
+ "fixed32", // 5
+ "sfixed32", // 6
+ "int64", // 7
+ "uint64", // 8
+ "sint64", // 9
+ "fixed64", // 10
+ "sfixed64", // 11
+ "bool", // 12
+ "string", // 13
+ "bytes" // 14
+];
+
+function bake(values, offset) {
+ var i = 0, o = {};
+ offset |= 0;
+ while (i < values.length) o[s[i + offset]] = values[i++];
+ return o;
+}
+
+/**
+ * Basic type wire types.
+ * @type {Object.<string,number>}
+ * @const
+ * @property {number} double=1 Fixed64 wire type
+ * @property {number} float=5 Fixed32 wire type
+ * @property {number} int32=0 Varint wire type
+ * @property {number} uint32=0 Varint wire type
+ * @property {number} sint32=0 Varint wire type
+ * @property {number} fixed32=5 Fixed32 wire type
+ * @property {number} sfixed32=5 Fixed32 wire type
+ * @property {number} int64=0 Varint wire type
+ * @property {number} uint64=0 Varint wire type
+ * @property {number} sint64=0 Varint wire type
+ * @property {number} fixed64=1 Fixed64 wire type
+ * @property {number} sfixed64=1 Fixed64 wire type
+ * @property {number} bool=0 Varint wire type
+ * @property {number} string=2 Ldelim wire type
+ * @property {number} bytes=2 Ldelim wire type
+ */
+types.basic = bake([
+ /* double */ 1,
+ /* float */ 5,
+ /* int32 */ 0,
+ /* uint32 */ 0,
+ /* sint32 */ 0,
+ /* fixed32 */ 5,
+ /* sfixed32 */ 5,
+ /* int64 */ 0,
+ /* uint64 */ 0,
+ /* sint64 */ 0,
+ /* fixed64 */ 1,
+ /* sfixed64 */ 1,
+ /* bool */ 0,
+ /* string */ 2,
+ /* bytes */ 2
+]);
+
+/**
+ * Basic type defaults.
+ * @type {Object.<string,*>}
+ * @const
+ * @property {number} double=0 Double default
+ * @property {number} float=0 Float default
+ * @property {number} int32=0 Int32 default
+ * @property {number} uint32=0 Uint32 default
+ * @property {number} sint32=0 Sint32 default
+ * @property {number} fixed32=0 Fixed32 default
+ * @property {number} sfixed32=0 Sfixed32 default
+ * @property {number} int64=0 Int64 default
+ * @property {number} uint64=0 Uint64 default
+ * @property {number} sint64=0 Sint32 default
+ * @property {number} fixed64=0 Fixed64 default
+ * @property {number} sfixed64=0 Sfixed64 default
+ * @property {boolean} bool=false Bool default
+ * @property {string} string="" String default
+ * @property {Array.<number>} bytes=Array(0) Bytes default
+ * @property {null} message=null Message default
+ */
+types.defaults = bake([
+ /* double */ 0,
+ /* float */ 0,
+ /* int32 */ 0,
+ /* uint32 */ 0,
+ /* sint32 */ 0,
+ /* fixed32 */ 0,
+ /* sfixed32 */ 0,
+ /* int64 */ 0,
+ /* uint64 */ 0,
+ /* sint64 */ 0,
+ /* fixed64 */ 0,
+ /* sfixed64 */ 0,
+ /* bool */ false,
+ /* string */ "",
+ /* bytes */ util.emptyArray,
+ /* message */ null
+]);
+
+/**
+ * Basic long type wire types.
+ * @type {Object.<string,number>}
+ * @const
+ * @property {number} int64=0 Varint wire type
+ * @property {number} uint64=0 Varint wire type
+ * @property {number} sint64=0 Varint wire type
+ * @property {number} fixed64=1 Fixed64 wire type
+ * @property {number} sfixed64=1 Fixed64 wire type
+ */
+types.long = bake([
+ /* int64 */ 0,
+ /* uint64 */ 0,
+ /* sint64 */ 0,
+ /* fixed64 */ 1,
+ /* sfixed64 */ 1
+], 7);
+
+/**
+ * Allowed types for map keys with their associated wire type.
+ * @type {Object.<string,number>}
+ * @const
+ * @property {number} int32=0 Varint wire type
+ * @property {number} uint32=0 Varint wire type
+ * @property {number} sint32=0 Varint wire type
+ * @property {number} fixed32=5 Fixed32 wire type
+ * @property {number} sfixed32=5 Fixed32 wire type
+ * @property {number} int64=0 Varint wire type
+ * @property {number} uint64=0 Varint wire type
+ * @property {number} sint64=0 Varint wire type
+ * @property {number} fixed64=1 Fixed64 wire type
+ * @property {number} sfixed64=1 Fixed64 wire type
+ * @property {number} bool=0 Varint wire type
+ * @property {number} string=2 Ldelim wire type
+ */
+types.mapKey = bake([
+ /* int32 */ 0,
+ /* uint32 */ 0,
+ /* sint32 */ 0,
+ /* fixed32 */ 5,
+ /* sfixed32 */ 5,
+ /* int64 */ 0,
+ /* uint64 */ 0,
+ /* sint64 */ 0,
+ /* fixed64 */ 1,
+ /* sfixed64 */ 1,
+ /* bool */ 0,
+ /* string */ 2
+], 2);
+
+/**
+ * Allowed types for packed repeated fields with their associated wire type.
+ * @type {Object.<string,number>}
+ * @const
+ * @property {number} double=1 Fixed64 wire type
+ * @property {number} float=5 Fixed32 wire type
+ * @property {number} int32=0 Varint wire type
+ * @property {number} uint32=0 Varint wire type
+ * @property {number} sint32=0 Varint wire type
+ * @property {number} fixed32=5 Fixed32 wire type
+ * @property {number} sfixed32=5 Fixed32 wire type
+ * @property {number} int64=0 Varint wire type
+ * @property {number} uint64=0 Varint wire type
+ * @property {number} sint64=0 Varint wire type
+ * @property {number} fixed64=1 Fixed64 wire type
+ * @property {number} sfixed64=1 Fixed64 wire type
+ * @property {number} bool=0 Varint wire type
+ */
+types.packed = bake([
+ /* double */ 1,
+ /* float */ 5,
+ /* int32 */ 0,
+ /* uint32 */ 0,
+ /* sint32 */ 0,
+ /* fixed32 */ 5,
+ /* sfixed32 */ 5,
+ /* int64 */ 0,
+ /* uint64 */ 0,
+ /* sint64 */ 0,
+ /* fixed64 */ 1,
+ /* sfixed64 */ 1,
+ /* bool */ 0
+]);