protobufjs 5.0.1 → 5.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/.travis.yml +2 -1
  2. package/README.md +144 -22
  3. package/bin/pbjs +2 -2
  4. package/bower.json +2 -2
  5. package/cli/pbjs/targets/amd.js +1 -1
  6. package/cli/pbjs/targets/json.js +8 -0
  7. package/cli/pbjs/util.js +1 -1
  8. package/cli/pbjs.js +1 -1
  9. package/dist/protobuf-light.js +166 -128
  10. package/dist/protobuf-light.min.js +88 -81
  11. package/dist/protobuf-light.min.js.gz +0 -0
  12. package/dist/protobuf-light.min.map +4 -4
  13. package/dist/protobuf.js +171 -129
  14. package/dist/protobuf.min.js +106 -98
  15. package/dist/protobuf.min.js.gz +0 -0
  16. package/dist/protobuf.min.map +4 -4
  17. package/docs/ProtoBuf.Builder.Message.html +1408 -971
  18. package/docs/ProtoBuf.Builder.Service.html +266 -197
  19. package/docs/ProtoBuf.Builder.html +758 -542
  20. package/docs/ProtoBuf.DotProto.Parser.html +223 -161
  21. package/docs/ProtoBuf.DotProto.Tokenizer.html +344 -248
  22. package/docs/ProtoBuf.DotProto.html +20 -12
  23. package/docs/ProtoBuf.Element.html +554 -554
  24. package/docs/ProtoBuf.Map.html +158 -123
  25. package/docs/ProtoBuf.Reflect.Element.html +286 -143
  26. package/docs/ProtoBuf.Reflect.Enum.Value.html +329 -228
  27. package/docs/ProtoBuf.Reflect.Enum.html +757 -537
  28. package/docs/ProtoBuf.Reflect.Extension.html +73 -56
  29. package/docs/ProtoBuf.Reflect.Message.ExtensionField.html +1013 -740
  30. package/docs/ProtoBuf.Reflect.Message.Field.html +926 -649
  31. package/docs/ProtoBuf.Reflect.Message.OneOf.html +327 -245
  32. package/docs/ProtoBuf.Reflect.Message.html +915 -651
  33. package/docs/ProtoBuf.Reflect.Namespace.html +648 -447
  34. package/docs/ProtoBuf.Reflect.Service.Method.html +363 -251
  35. package/docs/ProtoBuf.Reflect.Service.RPCMethod.html +545 -397
  36. package/docs/ProtoBuf.Reflect.Service.html +721 -511
  37. package/docs/ProtoBuf.Reflect.T.html +268 -197
  38. package/docs/ProtoBuf.Reflect.html +20 -12
  39. package/docs/ProtoBuf.Util.html +169 -118
  40. package/docs/ProtoBuf.html +840 -628
  41. package/docs/ProtoBuf.js.html +177 -134
  42. package/docs/fonts/OpenSans-Bold-webfont.eot +0 -0
  43. package/docs/fonts/OpenSans-Bold-webfont.svg +1830 -0
  44. package/docs/fonts/OpenSans-Bold-webfont.woff +0 -0
  45. package/docs/fonts/OpenSans-BoldItalic-webfont.eot +0 -0
  46. package/docs/fonts/OpenSans-BoldItalic-webfont.svg +1830 -0
  47. package/docs/fonts/OpenSans-BoldItalic-webfont.woff +0 -0
  48. package/docs/fonts/OpenSans-Italic-webfont.eot +0 -0
  49. package/docs/fonts/OpenSans-Italic-webfont.svg +1830 -0
  50. package/docs/fonts/OpenSans-Italic-webfont.woff +0 -0
  51. package/docs/fonts/OpenSans-Light-webfont.eot +0 -0
  52. package/docs/fonts/OpenSans-Light-webfont.svg +1831 -0
  53. package/docs/fonts/OpenSans-Light-webfont.woff +0 -0
  54. package/docs/fonts/OpenSans-LightItalic-webfont.eot +0 -0
  55. package/docs/fonts/OpenSans-LightItalic-webfont.svg +1835 -0
  56. package/docs/fonts/OpenSans-LightItalic-webfont.woff +0 -0
  57. package/docs/fonts/OpenSans-Regular-webfont.eot +0 -0
  58. package/docs/fonts/OpenSans-Regular-webfont.svg +1831 -0
  59. package/docs/fonts/OpenSans-Regular-webfont.woff +0 -0
  60. package/docs/index.html +7 -5
  61. package/docs/styles/jsdoc-default.css +95 -75
  62. package/docs/styles/prettify-tomorrow.css +1 -1
  63. package/examples/protoify/json.js +123 -123
  64. package/examples/protoify/json.json +123 -123
  65. package/examples/websocket/server.js +4 -4
  66. package/externs/protobuf.js +1 -1
  67. package/jsdoc.json +1 -1
  68. package/package.json +2 -2
  69. package/scripts/build.js +53 -53
  70. package/src/ProtoBuf/Builder/Message.js +9 -5
  71. package/src/ProtoBuf/Builder.js +19 -2
  72. package/src/ProtoBuf/DotProto/Parser.js +5 -1
  73. package/src/ProtoBuf/Reflect/Element.js +13 -1
  74. package/src/ProtoBuf/Reflect/Message/Field.js +2 -2
  75. package/src/ProtoBuf/Reflect/Message.js +6 -1
  76. package/src/ProtoBuf/Util.js +116 -116
  77. package/src/bower.json +1 -1
  78. package/src/google/protobuf/descriptor.json +27 -1
  79. package/tests/bench.txt +373 -373
  80. package/tests/complex.json +8 -1
  81. package/tests/custom-options.json +169 -169
  82. package/tests/extend.json +71 -71
  83. package/tests/imports.json +83 -83
  84. package/tests/nodeunit-browser/nodeunit.css +70 -70
  85. package/tests/nodeunit-browser/nodeunit.js +2108 -2108
  86. package/tests/options.json +32 -32
  87. package/tests/proto2js/Bar.json +46 -46
  88. package/tests/suite.js +43 -1
  89. package/sandbox/gapi/googleapis/google/api/annotations.proto +0 -29
  90. package/sandbox/gapi/googleapis/google/api/http.proto +0 -245
  91. package/sandbox/gapi/googleapis/google/datastore/v1beta3/datastore.proto +0 -281
  92. package/sandbox/gapi/googleapis/google/datastore/v1beta3/entity.proto +0 -189
  93. package/sandbox/gapi/googleapis/google/datastore/v1beta3/query.proto +0 -281
  94. package/sandbox/gapi/googleapis/google/longrunning/operations.proto +0 -144
  95. package/sandbox/gapi/googleapis/google/protobuf/any.proto +0 -98
  96. package/sandbox/gapi/googleapis/google/protobuf/any_test.proto +0 -41
  97. package/sandbox/gapi/googleapis/google/protobuf/api.proto +0 -201
  98. package/sandbox/gapi/googleapis/google/protobuf/descriptor.proto +0 -773
  99. package/sandbox/gapi/googleapis/google/protobuf/duration.proto +0 -95
  100. package/sandbox/gapi/googleapis/google/protobuf/empty.proto +0 -50
  101. package/sandbox/gapi/googleapis/google/protobuf/field_mask.proto +0 -167
  102. package/sandbox/gapi/googleapis/google/protobuf/map_lite_unittest.proto +0 -130
  103. package/sandbox/gapi/googleapis/google/protobuf/map_proto2_unittest.proto +0 -60
  104. package/sandbox/gapi/googleapis/google/protobuf/map_unittest.proto +0 -129
  105. package/sandbox/gapi/googleapis/google/protobuf/map_unittest_proto3.proto +0 -120
  106. package/sandbox/gapi/googleapis/google/protobuf/source_context.proto +0 -47
  107. package/sandbox/gapi/googleapis/google/protobuf/struct.proto +0 -94
  108. package/sandbox/gapi/googleapis/google/protobuf/timestamp.proto +0 -107
  109. package/sandbox/gapi/googleapis/google/protobuf/type.proto +0 -176
  110. package/sandbox/gapi/googleapis/google/protobuf/unittest.proto +0 -878
  111. package/sandbox/gapi/googleapis/google/protobuf/unittest_arena.proto +0 -46
  112. package/sandbox/gapi/googleapis/google/protobuf/unittest_custom_options.proto +0 -394
  113. package/sandbox/gapi/googleapis/google/protobuf/unittest_drop_unknown_fields.proto +0 -58
  114. package/sandbox/gapi/googleapis/google/protobuf/unittest_embed_optimize_for.proto +0 -51
  115. package/sandbox/gapi/googleapis/google/protobuf/unittest_empty.proto +0 -38
  116. package/sandbox/gapi/googleapis/google/protobuf/unittest_enormous_descriptor.proto +0 -1048
  117. package/sandbox/gapi/googleapis/google/protobuf/unittest_import.proto +0 -66
  118. package/sandbox/gapi/googleapis/google/protobuf/unittest_import_lite.proto +0 -52
  119. package/sandbox/gapi/googleapis/google/protobuf/unittest_import_proto3.proto +0 -68
  120. package/sandbox/gapi/googleapis/google/protobuf/unittest_import_public.proto +0 -41
  121. package/sandbox/gapi/googleapis/google/protobuf/unittest_import_public_lite.proto +0 -43
  122. package/sandbox/gapi/googleapis/google/protobuf/unittest_import_public_proto3.proto +0 -42
  123. package/sandbox/gapi/googleapis/google/protobuf/unittest_lite.proto +0 -385
  124. package/sandbox/gapi/googleapis/google/protobuf/unittest_lite_imports_nonlite.proto +0 -44
  125. package/sandbox/gapi/googleapis/google/protobuf/unittest_mset.proto +0 -82
  126. package/sandbox/gapi/googleapis/google/protobuf/unittest_mset_wire_format.proto +0 -52
  127. package/sandbox/gapi/googleapis/google/protobuf/unittest_no_arena.proto +0 -202
  128. package/sandbox/gapi/googleapis/google/protobuf/unittest_no_arena_import.proto +0 -37
  129. package/sandbox/gapi/googleapis/google/protobuf/unittest_no_arena_lite.proto +0 -42
  130. package/sandbox/gapi/googleapis/google/protobuf/unittest_no_field_presence.proto +0 -138
  131. package/sandbox/gapi/googleapis/google/protobuf/unittest_no_generic_services.proto +0 -54
  132. package/sandbox/gapi/googleapis/google/protobuf/unittest_optimize_for.proto +0 -67
  133. package/sandbox/gapi/googleapis/google/protobuf/unittest_preserve_unknown_enum.proto +0 -71
  134. package/sandbox/gapi/googleapis/google/protobuf/unittest_preserve_unknown_enum2.proto +0 -50
  135. package/sandbox/gapi/googleapis/google/protobuf/unittest_proto3.proto +0 -388
  136. package/sandbox/gapi/googleapis/google/protobuf/unittest_proto3_arena.proto +0 -206
  137. package/sandbox/gapi/googleapis/google/protobuf/unittest_well_known_types.proto +0 -112
  138. package/sandbox/gapi/googleapis/google/protobuf/unknown_enum_test.proto +0 -62
  139. package/sandbox/gapi/googleapis/google/protobuf/wrappers.proto +0 -117
  140. package/sandbox/gapi/googleapis/google/rpc/code.proto +0 -190
  141. package/sandbox/gapi/googleapis/google/rpc/error_details.proto +0 -157
  142. package/sandbox/gapi/googleapis/google/rpc/status.proto +0 -90
  143. package/sandbox/gapi/googleapis/google/type/color.proto +0 -163
  144. package/sandbox/gapi/googleapis/google/type/date.proto +0 -43
  145. package/sandbox/gapi/googleapis/google/type/dayofweek.proto +0 -50
  146. package/sandbox/gapi/googleapis/google/type/latlng.proto +0 -36
  147. package/sandbox/gapi/googleapis/google/type/money.proto +0 -40
  148. package/sandbox/gapi/googleapis/google/type/timeofday.proto +0 -42
  149. package/sandbox/gapi/test.js +0 -17
  150. package/sandbox/gapi/test.proto +0 -12
  151. package/sandbox/issue146/MyOptions.proto +0 -28
  152. package/sandbox/issue146/Sample.proto +0 -21
  153. package/sandbox/issue146/main.js +0 -3
  154. package/sandbox/issue147/enum.proto +0 -8
  155. package/sandbox/issue147/main.js +0 -3
  156. package/sandbox/issue182/commands.proto +0 -10
  157. package/sandbox/issue182/execute.js +0 -22
  158. package/sandbox/issue182/session_commands.proto +0 -14
  159. package/sandbox/issue289/A.proto +0 -8
  160. package/sandbox/issue289/B.proto +0 -8
  161. package/sandbox/issue289/common.proto +0 -5
  162. package/sandbox/issue289/main.js +0 -7
  163. package/sandbox/issue300/IAuth.proto +0 -14
  164. package/sandbox/issue300/Request.proto +0 -14
  165. package/sandbox/issue300/main.js +0 -26
  166. package/sandbox/issue347/index.js +0 -27
  167. package/sandbox/issue355/main.proto +0 -15
  168. package/sandbox/issue42/innerextend.proto +0 -18
  169. package/sandbox/issue42/main.js +0 -8
  170. package/sandbox/issue42/outerextend.proto +0 -17
@@ -57,7 +57,7 @@
57
57
  * @const
58
58
  * @expose
59
59
  */
60
- ProtoBuf.VERSION = "5.0.1";
60
+ ProtoBuf.VERSION = "5.0.2";
61
61
 
62
62
  /**
63
63
  * Wire types.
@@ -289,122 +289,122 @@
289
289
  */
290
290
  ProtoBuf.populateDefaults = true;
291
291
 
292
- /**
293
- * @alias ProtoBuf.Util
294
- * @expose
295
- */
296
- ProtoBuf.Util = (function() {
297
- "use strict";
298
-
299
- /**
300
- * ProtoBuf utilities.
301
- * @exports ProtoBuf.Util
302
- * @namespace
303
- */
304
- var Util = {};
305
-
306
- /**
307
- * Flag if running in node or not.
308
- * @type {boolean}
309
- * @const
310
- * @expose
311
- */
312
- Util.IS_NODE = !!(
313
- typeof process === 'object' && process+'' === '[object process]' && !process['browser']
314
- );
315
-
316
- /**
317
- * Constructs a XMLHttpRequest object.
318
- * @return {XMLHttpRequest}
319
- * @throws {Error} If XMLHttpRequest is not supported
320
- * @expose
321
- */
322
- Util.XHR = function() {
323
- // No dependencies please, ref: http://www.quirksmode.org/js/xmlhttp.html
324
- var XMLHttpFactories = [
325
- function () {return new XMLHttpRequest()},
326
- function () {return new ActiveXObject("Msxml2.XMLHTTP")},
327
- function () {return new ActiveXObject("Msxml3.XMLHTTP")},
328
- function () {return new ActiveXObject("Microsoft.XMLHTTP")}
329
- ];
330
- /** @type {?XMLHttpRequest} */
331
- var xhr = null;
332
- for (var i=0;i<XMLHttpFactories.length;i++) {
333
- try { xhr = XMLHttpFactories[i](); }
334
- catch (e) { continue; }
335
- break;
336
- }
337
- if (!xhr)
338
- throw Error("XMLHttpRequest is not supported");
339
- return xhr;
340
- };
341
-
342
- /**
343
- * Fetches a resource.
344
- * @param {string} path Resource path
345
- * @param {function(?string)=} callback Callback receiving the resource's contents. If omitted the resource will
346
- * be fetched synchronously. If the request failed, contents will be null.
347
- * @return {?string|undefined} Resource contents if callback is omitted (null if the request failed), else undefined.
348
- * @expose
349
- */
350
- Util.fetch = function(path, callback) {
351
- if (callback && typeof callback != 'function')
352
- callback = null;
353
- if (Util.IS_NODE) {
354
- var fs = require("fs");
355
- if (callback) {
356
- fs.readFile(path, function(err, data) {
357
- if (err)
358
- callback(null);
359
- else
360
- callback(""+data);
361
- });
362
- } else
363
- try {
364
- return fs.readFileSync(path);
365
- } catch (e) {
366
- return null;
367
- }
368
- } else {
369
- var xhr = Util.XHR();
370
- xhr.open('GET', path, callback ? true : false);
371
- // xhr.setRequestHeader('User-Agent', 'XMLHTTP/1.0');
372
- xhr.setRequestHeader('Accept', 'text/plain');
373
- if (typeof xhr.overrideMimeType === 'function') xhr.overrideMimeType('text/plain');
374
- if (callback) {
375
- xhr.onreadystatechange = function() {
376
- if (xhr.readyState != 4) return;
377
- if (/* remote */ xhr.status == 200 || /* local */ (xhr.status == 0 && typeof xhr.responseText === 'string'))
378
- callback(xhr.responseText);
379
- else
380
- callback(null);
381
- };
382
- if (xhr.readyState == 4)
383
- return;
384
- xhr.send(null);
385
- } else {
386
- xhr.send(null);
387
- if (/* remote */ xhr.status == 200 || /* local */ (xhr.status == 0 && typeof xhr.responseText === 'string'))
388
- return xhr.responseText;
389
- return null;
390
- }
391
- }
392
- };
393
-
394
- /**
395
- * Converts a string to camel case.
396
- * @param {string} str
397
- * @returns {string}
398
- * @expose
399
- */
400
- Util.toCamelCase = function(str) {
401
- return str.replace(/_([a-zA-Z])/g, function ($0, $1) {
402
- return $1.toUpperCase();
403
- });
404
- };
405
-
406
- return Util;
407
- })();
292
+ /**
293
+ * @alias ProtoBuf.Util
294
+ * @expose
295
+ */
296
+ ProtoBuf.Util = (function() {
297
+ "use strict";
298
+
299
+ /**
300
+ * ProtoBuf utilities.
301
+ * @exports ProtoBuf.Util
302
+ * @namespace
303
+ */
304
+ var Util = {};
305
+
306
+ /**
307
+ * Flag if running in node or not.
308
+ * @type {boolean}
309
+ * @const
310
+ * @expose
311
+ */
312
+ Util.IS_NODE = !!(
313
+ typeof process === 'object' && process+'' === '[object process]' && !process['browser']
314
+ );
315
+
316
+ /**
317
+ * Constructs a XMLHttpRequest object.
318
+ * @return {XMLHttpRequest}
319
+ * @throws {Error} If XMLHttpRequest is not supported
320
+ * @expose
321
+ */
322
+ Util.XHR = function() {
323
+ // No dependencies please, ref: http://www.quirksmode.org/js/xmlhttp.html
324
+ var XMLHttpFactories = [
325
+ function () {return new XMLHttpRequest()},
326
+ function () {return new ActiveXObject("Msxml2.XMLHTTP")},
327
+ function () {return new ActiveXObject("Msxml3.XMLHTTP")},
328
+ function () {return new ActiveXObject("Microsoft.XMLHTTP")}
329
+ ];
330
+ /** @type {?XMLHttpRequest} */
331
+ var xhr = null;
332
+ for (var i=0;i<XMLHttpFactories.length;i++) {
333
+ try { xhr = XMLHttpFactories[i](); }
334
+ catch (e) { continue; }
335
+ break;
336
+ }
337
+ if (!xhr)
338
+ throw Error("XMLHttpRequest is not supported");
339
+ return xhr;
340
+ };
341
+
342
+ /**
343
+ * Fetches a resource.
344
+ * @param {string} path Resource path
345
+ * @param {function(?string)=} callback Callback receiving the resource's contents. If omitted the resource will
346
+ * be fetched synchronously. If the request failed, contents will be null.
347
+ * @return {?string|undefined} Resource contents if callback is omitted (null if the request failed), else undefined.
348
+ * @expose
349
+ */
350
+ Util.fetch = function(path, callback) {
351
+ if (callback && typeof callback != 'function')
352
+ callback = null;
353
+ if (Util.IS_NODE) {
354
+ var fs = require("fs");
355
+ if (callback) {
356
+ fs.readFile(path, function(err, data) {
357
+ if (err)
358
+ callback(null);
359
+ else
360
+ callback(""+data);
361
+ });
362
+ } else
363
+ try {
364
+ return fs.readFileSync(path);
365
+ } catch (e) {
366
+ return null;
367
+ }
368
+ } else {
369
+ var xhr = Util.XHR();
370
+ xhr.open('GET', path, callback ? true : false);
371
+ // xhr.setRequestHeader('User-Agent', 'XMLHTTP/1.0');
372
+ xhr.setRequestHeader('Accept', 'text/plain');
373
+ if (typeof xhr.overrideMimeType === 'function') xhr.overrideMimeType('text/plain');
374
+ if (callback) {
375
+ xhr.onreadystatechange = function() {
376
+ if (xhr.readyState != 4) return;
377
+ if (/* remote */ xhr.status == 200 || /* local */ (xhr.status == 0 && typeof xhr.responseText === 'string'))
378
+ callback(xhr.responseText);
379
+ else
380
+ callback(null);
381
+ };
382
+ if (xhr.readyState == 4)
383
+ return;
384
+ xhr.send(null);
385
+ } else {
386
+ xhr.send(null);
387
+ if (/* remote */ xhr.status == 200 || /* local */ (xhr.status == 0 && typeof xhr.responseText === 'string'))
388
+ return xhr.responseText;
389
+ return null;
390
+ }
391
+ }
392
+ };
393
+
394
+ /**
395
+ * Converts a string to camel case.
396
+ * @param {string} str
397
+ * @returns {string}
398
+ * @expose
399
+ */
400
+ Util.toCamelCase = function(str) {
401
+ return str.replace(/_([a-zA-Z])/g, function ($0, $1) {
402
+ return $1.toUpperCase();
403
+ });
404
+ };
405
+
406
+ return Util;
407
+ })();
408
408
 
409
409
  /**
410
410
  * Language expressions.
@@ -801,9 +801,11 @@
801
801
  * converted to string form if so.
802
802
  * @param {string} syntax Syntax level of defining message type, e.g.,
803
803
  * proto2 or proto3.
804
+ * @param {string} name Name of the field containing this element (for error
805
+ * messages)
804
806
  * @constructor
805
807
  */
806
- var Element = function(type, resolvedType, isMapKey, syntax) {
808
+ var Element = function(type, resolvedType, isMapKey, syntax, name) {
807
809
 
808
810
  /**
809
811
  * Element type, as a string (e.g., int32).
@@ -829,6 +831,12 @@
829
831
  */
830
832
  this.syntax = syntax;
831
833
 
834
+ /**
835
+ * Name of the field containing this element (for error messages)
836
+ * @type {string}
837
+ */
838
+ this.name = name;
839
+
832
840
  if (isMapKey && ProtoBuf.MAP_KEY_TYPES.indexOf(type) < 0)
833
841
  throw Error("Invalid map key type: " + type.name);
834
842
  };
@@ -879,6 +887,10 @@
879
887
  throw Error("not convertible to Long");
880
888
  }
881
889
 
890
+ ElementPrototype.toString = function() {
891
+ return (this.name || '') + (this.isMapKey ? 'map' : 'value') + ' element';
892
+ }
893
+
882
894
  /**
883
895
  * Checks if the given value can be set for an element of this type (singular
884
896
  * field or one element of a repeated field or map).
@@ -1553,9 +1565,11 @@
1553
1565
  MessagePrototype.set = function(keyOrObj, value, noAssert) {
1554
1566
  if (keyOrObj && typeof keyOrObj === 'object') {
1555
1567
  noAssert = value;
1556
- for (var ikey in keyOrObj)
1557
- if (keyOrObj.hasOwnProperty(ikey) && typeof (value = keyOrObj[ikey]) !== 'undefined')
1568
+ for (var ikey in keyOrObj) {
1569
+ // Check if virtual oneof field - don't set these
1570
+ if (keyOrObj.hasOwnProperty(ikey) && typeof (value = keyOrObj[ikey]) !== 'undefined' && T._oneofsByName[ikey] === undefined)
1558
1571
  this.$set(ikey, value, noAssert);
1572
+ }
1559
1573
  return this;
1560
1574
  }
1561
1575
  var field = T._fieldsByName[keyOrObj];
@@ -2019,10 +2033,11 @@
2019
2033
  length = -1;
2020
2034
  if (typeof buffer === 'string')
2021
2035
  buffer = ByteBuffer.wrap(buffer, enc ? enc : "base64");
2022
- buffer = ByteBuffer.isByteBuffer(buffer) ? buffer : ByteBuffer.wrap(buffer); // May throw
2036
+ else if (!ByteBuffer.isByteBuffer(buffer))
2037
+ buffer = ByteBuffer.wrap(buffer); // May throw
2023
2038
  var le = buffer.littleEndian;
2024
2039
  try {
2025
- var msg = T.decode(buffer.LE());
2040
+ var msg = T.decode(buffer.LE(), length);
2026
2041
  buffer.LE(le);
2027
2042
  return msg;
2028
2043
  } catch (e) {
@@ -2045,7 +2060,8 @@
2045
2060
  Message.decodeDelimited = function(buffer, enc) {
2046
2061
  if (typeof buffer === 'string')
2047
2062
  buffer = ByteBuffer.wrap(buffer, enc ? enc : "base64");
2048
- buffer = ByteBuffer.isByteBuffer(buffer) ? buffer : ByteBuffer.wrap(buffer); // May throw
2063
+ else if (!ByteBuffer.isByteBuffer(buffer))
2064
+ buffer = ByteBuffer.wrap(buffer); // May throw
2049
2065
  if (buffer.remaining() < 1)
2050
2066
  return null;
2051
2067
  var off = buffer.offset,
@@ -2167,6 +2183,7 @@
2167
2183
  this._fields = [];
2168
2184
  this._fieldsById = {};
2169
2185
  this._fieldsByName = {};
2186
+ this._oneofsByName = {};
2170
2187
  for (var i=0, k=this.children.length, child; i<k; i++) {
2171
2188
  child = this.children[i];
2172
2189
  if (child instanceof Enum || child instanceof Message || child instanceof Service) {
@@ -2178,6 +2195,9 @@
2178
2195
  this._fields.push(child),
2179
2196
  this._fieldsById[child.id] = child,
2180
2197
  this._fieldsByName[child.name] = child;
2198
+ else if (child instanceof Message.OneOf) {
2199
+ this._oneofsByName[child.name] = child;
2200
+ }
2181
2201
  else if (!(child instanceof Message.OneOf) && !(child instanceof Extension)) // Not built
2182
2202
  throw Error("Illegal reflect child of "+this.toString(true)+": "+this.children[i].toString(true));
2183
2203
  }
@@ -2284,7 +2304,8 @@
2284
2304
  * @expose
2285
2305
  */
2286
2306
  MessagePrototype.decode = function(buffer, length, expectedGroupEndId) {
2287
- length = typeof length === 'number' ? length : -1;
2307
+ if (typeof length !== 'number')
2308
+ length = -1;
2288
2309
  var start = buffer.offset,
2289
2310
  msg = new (this.clazz)(),
2290
2311
  tag, wireType, id, field;
@@ -2503,9 +2524,9 @@
2503
2524
  * @expose
2504
2525
  */
2505
2526
  FieldPrototype.build = function() {
2506
- this.element = new Element(this.type, this.resolvedType, false, this.syntax);
2527
+ this.element = new Element(this.type, this.resolvedType, false, this.syntax, this.name);
2507
2528
  if (this.map)
2508
- this.keyElement = new Element(this.keyType, undefined, true, this.syntax);
2529
+ this.keyElement = new Element(this.keyType, undefined, true, this.syntax, this.name);
2509
2530
 
2510
2531
  // In proto3, fields do not have field presence, and every field is set to
2511
2532
  // its type's default value ("", 0, 0.0, or false).
@@ -3724,7 +3745,11 @@
3724
3745
  root = require("path")['resolve'](root);
3725
3746
  if (root.indexOf("\\") >= 0 || filename.file.indexOf("\\") >= 0)
3726
3747
  delim = '\\';
3727
- var fname = root + delim + filename.file;
3748
+ var fname;
3749
+ if (ProtoBuf.Util.IS_NODE)
3750
+ fname = require("path")['join'](root, filename.file);
3751
+ else
3752
+ fname = root + delim + filename.file;
3728
3753
  if (this.files[fname] === true)
3729
3754
  return this.reset();
3730
3755
  this.files[fname] = true;
@@ -3770,7 +3795,10 @@
3770
3795
  var importFilename = json['imports'][i];
3771
3796
  if (importFilename === "google/protobuf/descriptor.proto")
3772
3797
  continue; // Not needed and therefore not used
3773
- importFilename = importRoot + delim + importFilename;
3798
+ if (ProtoBuf.Util.IS_NODE)
3799
+ importFilename = require("path")['join'](importRoot, importFilename);
3800
+ else
3801
+ importFilename = importRoot + delim + importFilename;
3774
3802
  if (this.files[importFilename] === true)
3775
3803
  continue; // Already imported
3776
3804
  if (/\.proto$/i.test(importFilename) && !ProtoBuf.DotProto) // If this is a light build
@@ -3868,6 +3896,16 @@
3868
3896
  this.ptr.keyType = ProtoBuf.TYPES[this.ptr.keyType];
3869
3897
  }
3870
3898
 
3899
+ // If it's a repeated and packable field then proto3 mandates it should be packed by
3900
+ // default
3901
+ if (
3902
+ this.ptr.syntax === 'proto3' &&
3903
+ this.ptr.repeated && this.ptr.options.packed === undefined &&
3904
+ ProtoBuf.PACKABLE_WIRE_TYPES.indexOf(this.ptr.type.wireType) !== -1
3905
+ ) {
3906
+ this.ptr.options.packed = true;
3907
+ }
3908
+
3871
3909
  } else if (this.ptr instanceof ProtoBuf.Reflect.Service.Method) {
3872
3910
 
3873
3911
  if (this.ptr instanceof ProtoBuf.Reflect.Service.RPCMethod) {