protobufjs 8.6.1 → 8.6.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 (105) hide show
  1. package/LICENSE +39 -39
  2. package/README.md +441 -441
  3. package/dist/light/protobuf.js +8455 -8455
  4. package/dist/light/protobuf.js.map +1 -1
  5. package/dist/light/protobuf.min.js +3 -3
  6. package/dist/light/protobuf.min.js.map +1 -1
  7. package/dist/minimal/protobuf.js +2999 -2999
  8. package/dist/minimal/protobuf.js.map +1 -1
  9. package/dist/minimal/protobuf.min.js +3 -3
  10. package/dist/minimal/protobuf.min.js.map +1 -1
  11. package/dist/protobuf.js +10359 -10359
  12. package/dist/protobuf.js.map +1 -1
  13. package/dist/protobuf.min.js +3 -3
  14. package/dist/protobuf.min.js.map +1 -1
  15. package/ext/README.md +70 -70
  16. package/ext/debug/README.md +4 -4
  17. package/ext/debug/index.js +71 -71
  18. package/ext/descriptor/README.md +5 -5
  19. package/ext/descriptor/index.d.ts +2 -2
  20. package/ext/descriptor/index.js +2 -2
  21. package/ext/descriptor.d.ts +87 -87
  22. package/ext/descriptor.js +1354 -1354
  23. package/ext/protojson.LICENSE +201 -201
  24. package/ext/protojson.d.ts +20 -20
  25. package/ext/protojson.js +925 -925
  26. package/ext/textformat.d.ts +19 -19
  27. package/ext/textformat.js +1256 -1256
  28. package/google/LICENSE +27 -27
  29. package/google/README.md +1 -1
  30. package/google/api/annotations.json +82 -82
  31. package/google/api/annotations.proto +10 -10
  32. package/google/api/http.json +85 -85
  33. package/google/api/http.proto +30 -30
  34. package/google/protobuf/api.json +117 -117
  35. package/google/protobuf/api.proto +33 -33
  36. package/google/protobuf/compiler/plugin.json +126 -126
  37. package/google/protobuf/compiler/plugin.proto +47 -47
  38. package/google/protobuf/descriptor.json +1381 -1381
  39. package/google/protobuf/descriptor.proto +534 -534
  40. package/google/protobuf/source_context.json +19 -19
  41. package/google/protobuf/source_context.proto +7 -7
  42. package/google/protobuf/type.json +201 -201
  43. package/google/protobuf/type.proto +89 -89
  44. package/index.d.ts +1 -1
  45. package/index.js +4 -4
  46. package/light.d.ts +2 -2
  47. package/light.js +3 -3
  48. package/minimal.d.ts +2 -2
  49. package/minimal.js +4 -4
  50. package/package.json +93 -93
  51. package/src/common.js +399 -399
  52. package/src/converter.js +344 -344
  53. package/src/decoder.js +208 -208
  54. package/src/encoder.js +111 -111
  55. package/src/enum.js +231 -231
  56. package/src/field.js +497 -497
  57. package/src/index-light.js +104 -104
  58. package/src/index-minimal.js +36 -36
  59. package/src/index.js +12 -12
  60. package/src/mapfield.js +136 -136
  61. package/src/message.js +137 -137
  62. package/src/method.js +175 -175
  63. package/src/namespace.js +565 -565
  64. package/src/object.js +382 -382
  65. package/src/oneof.js +225 -225
  66. package/src/parse.js +1068 -1068
  67. package/src/reader.js +543 -543
  68. package/src/reader_buffer.js +72 -72
  69. package/src/root.js +416 -416
  70. package/src/roots.js +18 -18
  71. package/src/rpc/service.js +148 -148
  72. package/src/rpc.js +36 -36
  73. package/src/service.js +198 -198
  74. package/src/tokenize.js +421 -421
  75. package/src/type.js +655 -655
  76. package/src/types.js +196 -196
  77. package/src/typescript.js +25 -25
  78. package/src/util/aspromise.d.ts +13 -13
  79. package/src/util/aspromise.js +52 -52
  80. package/src/util/base64.d.ts +32 -32
  81. package/src/util/base64.js +146 -146
  82. package/src/util/codegen.d.ts +31 -31
  83. package/src/util/codegen.js +113 -113
  84. package/src/util/eventemitter.d.ts +45 -45
  85. package/src/util/eventemitter.js +86 -86
  86. package/src/util/fetch.d.ts +56 -56
  87. package/src/util/fetch.js +112 -112
  88. package/src/util/float.d.ts +83 -83
  89. package/src/util/float.js +335 -335
  90. package/src/util/fs.js +11 -11
  91. package/src/util/longbits.js +200 -200
  92. package/src/util/minimal.js +515 -515
  93. package/src/util/path.d.ts +22 -22
  94. package/src/util/path.js +72 -72
  95. package/src/util/patterns.js +7 -7
  96. package/src/util/pool.d.ts +32 -32
  97. package/src/util/pool.js +48 -48
  98. package/src/util/utf8.d.ts +24 -24
  99. package/src/util/utf8.js +130 -130
  100. package/src/util.js +242 -242
  101. package/src/verifier.js +180 -180
  102. package/src/wrappers.js +106 -106
  103. package/src/writer.js +495 -495
  104. package/src/writer_buffer.js +102 -102
  105. package/tsconfig.json +6 -6
package/src/reader.js CHANGED
@@ -1,543 +1,543 @@
1
- "use strict";
2
- module.exports = Reader;
3
-
4
- var util = require("./util/minimal");
5
-
6
- var BufferReader; // cyclic
7
-
8
- var LongBits = util.LongBits,
9
- utf8 = util.utf8;
10
-
11
- /* istanbul ignore next */
12
- function indexOutOfRange(reader, writeLength) {
13
- return RangeError("index out of range: " + reader.pos + " + " + (writeLength || 1) + " > " + reader.len);
14
- }
15
-
16
- /**
17
- * Constructs a new reader instance using the specified buffer.
18
- * @classdesc Wire format reader using `Uint8Array` if available, otherwise `Array`.
19
- * @constructor
20
- * @param {Uint8Array} buffer Buffer to read from
21
- */
22
- function Reader(buffer) {
23
-
24
- /**
25
- * Read buffer.
26
- * @type {Uint8Array}
27
- */
28
- this.buf = buffer;
29
-
30
- /**
31
- * Read buffer position.
32
- * @type {number}
33
- */
34
- this.pos = 0;
35
-
36
- /**
37
- * Read buffer length.
38
- * @type {number}
39
- */
40
- this.len = buffer.length;
41
-
42
- /**
43
- * Whether to discard unknown fields while decoding.
44
- * @type {boolean}
45
- */
46
- this.discardUnknown = Reader.discardUnknown;
47
- }
48
-
49
- var create_array = typeof Uint8Array !== "undefined"
50
- ? function create_typed_array(buffer) {
51
- if (buffer instanceof Uint8Array || Array.isArray(buffer))
52
- return new Reader(buffer);
53
- throw Error("illegal buffer");
54
- }
55
- /* istanbul ignore next */
56
- : function create_array(buffer) {
57
- if (Array.isArray(buffer))
58
- return new Reader(buffer);
59
- throw Error("illegal buffer");
60
- };
61
-
62
- var create = function create() {
63
- return util.Buffer
64
- ? function create_buffer_setup(buffer) {
65
- return (Reader.create = function create_buffer(buffer) {
66
- return util.Buffer.isBuffer(buffer)
67
- ? new BufferReader(buffer)
68
- /* istanbul ignore next */
69
- : create_array(buffer);
70
- })(buffer);
71
- }
72
- /* istanbul ignore next */
73
- : create_array;
74
- };
75
-
76
- /**
77
- * Creates a new reader using the specified buffer.
78
- * @function
79
- * @param {Uint8Array|Buffer} buffer Buffer to read from
80
- * @returns {Reader|BufferReader} A {@link BufferReader} if `buffer` is a Buffer, otherwise a {@link Reader}
81
- * @throws {Error} If `buffer` is not a valid buffer
82
- */
83
- Reader.create = create();
84
-
85
- Reader.prototype._slice = util.Array.prototype.subarray || /* istanbul ignore next */ util.Array.prototype.slice;
86
-
87
- /**
88
- * Returns raw bytes from the backing buffer without advancing the reader.
89
- * @param {number} start Start offset
90
- * @param {number} end End offset
91
- * @returns {Uint8Array} Raw bytes
92
- */
93
- Reader.prototype.raw = function read_raw(start, end) {
94
- if (Array.isArray(this.buf)) // plain array
95
- return this.buf.slice(start, end);
96
-
97
- if (start === end) // fix for IE 10/Win8 and others' subarray returning array of size 1
98
- return new this.buf.constructor(0);
99
- return this._slice.call(this.buf, start, end);
100
- };
101
-
102
- /**
103
- * Reads a varint as an unsigned 32 bit value.
104
- * @function
105
- * @returns {number} Value read
106
- */
107
- Reader.prototype.uint32 = function read_uint32() {
108
- var buf = this.buf,
109
- pos = this.pos,
110
- value = (buf[pos] & 127) >>> 0;
111
- if (buf[pos++] < 128) {
112
- this.pos = pos;
113
- return value;
114
- }
115
- value = (value | (buf[pos] & 127) << 7) >>> 0;
116
- if (buf[pos++] < 128) {
117
- this.pos = pos;
118
- return value;
119
- }
120
- value = (value | (buf[pos] & 127) << 14) >>> 0;
121
- if (buf[pos++] < 128) {
122
- this.pos = pos;
123
- return value;
124
- }
125
- value = (value | (buf[pos] & 127) << 21) >>> 0;
126
- if (buf[pos++] < 128) {
127
- this.pos = pos;
128
- return value;
129
- }
130
- value = (value | (buf[pos] & 15) << 28) >>> 0;
131
- if (buf[pos++] < 128) {
132
- this.pos = pos;
133
- return value;
134
- }
135
-
136
- for (var i = 0; i < 5; ++i) {
137
- /* istanbul ignore if */
138
- if (pos >= this.len) {
139
- this.pos = pos;
140
- throw indexOutOfRange(this);
141
- }
142
- if (buf[pos++] < 128) {
143
- this.pos = pos;
144
- return value;
145
- }
146
- }
147
- /* istanbul ignore next */
148
- this.pos = pos;
149
- throw Error("invalid varint encoding");
150
- };
151
-
152
- /**
153
- * Reads a field tag.
154
- * @function
155
- * @returns {number} Tag read
156
- */
157
- Reader.prototype.tag = function read_tag() {
158
- var buf = this.buf,
159
- pos = this.pos,
160
- value = (buf[pos] & 127) >>> 0;
161
- if (buf[pos++] < 128) {
162
- this.pos = pos;
163
- return value;
164
- }
165
- value = (value | (buf[pos] & 127) << 7) >>> 0;
166
- if (buf[pos++] < 128) {
167
- this.pos = pos;
168
- return value;
169
- }
170
- value = (value | (buf[pos] & 127) << 14) >>> 0;
171
- if (buf[pos++] < 128) {
172
- this.pos = pos;
173
- return value;
174
- }
175
- value = (value | (buf[pos] & 127) << 21) >>> 0;
176
- if (buf[pos++] < 128) {
177
- this.pos = pos;
178
- return value;
179
- }
180
- value = (value | (buf[pos] & 15) << 28) >>> 0;
181
- if (buf[pos] < 128 && (buf[pos] & 112) === 0) {
182
- this.pos = pos + 1;
183
- return value;
184
- }
185
-
186
- this.pos = pos + 1;
187
- throw Error("invalid tag encoding");
188
- };
189
-
190
- /**
191
- * Reads a varint as a signed 32 bit value.
192
- * @returns {number} Value read
193
- */
194
- Reader.prototype.int32 = function read_int32() {
195
- return this.uint32() | 0;
196
- };
197
-
198
- /**
199
- * Reads a zig-zag encoded varint as a signed 32 bit value.
200
- * @returns {number} Value read
201
- */
202
- Reader.prototype.sint32 = function read_sint32() {
203
- var value = this.uint32();
204
- return value >>> 1 ^ -(value & 1) | 0;
205
- };
206
-
207
- /* eslint-disable no-invalid-this */
208
-
209
- function readLongVarint() {
210
- // tends to deopt with local vars for octet etc.
211
- var bits = new LongBits(0, 0);
212
- var i = 0;
213
- if (this.len - this.pos > 4) { // fast route (lo)
214
- for (; i < 4; ++i) {
215
- // 1st..4th
216
- bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;
217
- if (this.buf[this.pos++] < 128)
218
- return bits;
219
- }
220
- // 5th
221
- bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0;
222
- bits.hi = (bits.hi | (this.buf[this.pos] & 127) >> 4) >>> 0;
223
- if (this.buf[this.pos++] < 128)
224
- return bits;
225
- i = 0;
226
- } else {
227
- for (; i < 3; ++i) {
228
- /* istanbul ignore if */
229
- if (this.pos >= this.len)
230
- throw indexOutOfRange(this);
231
- // 1st..3th
232
- bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;
233
- if (this.buf[this.pos++] < 128)
234
- return bits;
235
- }
236
- // 4th
237
- bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0;
238
- return bits;
239
- }
240
- if (this.len - this.pos > 4) { // fast route (hi)
241
- for (; i < 5; ++i) {
242
- // 6th..10th
243
- bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;
244
- if (this.buf[this.pos++] < 128)
245
- return bits;
246
- }
247
- } else {
248
- for (; i < 5; ++i) {
249
- /* istanbul ignore if */
250
- if (this.pos >= this.len)
251
- throw indexOutOfRange(this);
252
- // 6th..10th
253
- bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;
254
- if (this.buf[this.pos++] < 128)
255
- return bits;
256
- }
257
- }
258
- /* istanbul ignore next */
259
- throw Error("invalid varint encoding");
260
- }
261
-
262
- /* eslint-enable no-invalid-this */
263
-
264
- /**
265
- * Reads a varint as a signed 64 bit value.
266
- * @name Reader#int64
267
- * @function
268
- * @returns {Long} Value read
269
- */
270
-
271
- /**
272
- * Reads a varint as an unsigned 64 bit value.
273
- * @name Reader#uint64
274
- * @function
275
- * @returns {Long} Value read
276
- */
277
-
278
- /**
279
- * Reads a zig-zag encoded varint as a signed 64 bit value.
280
- * @name Reader#sint64
281
- * @function
282
- * @returns {Long} Value read
283
- */
284
-
285
- /**
286
- * Reads a varint as a boolean.
287
- * @returns {boolean} Value read
288
- */
289
- Reader.prototype.bool = function read_bool() {
290
- var value = false,
291
- b;
292
- for (var i = 0; i < 10; ++i) {
293
- /* istanbul ignore if */
294
- if (this.pos >= this.len)
295
- throw indexOutOfRange(this);
296
- b = this.buf[this.pos++];
297
- if (b & 127)
298
- value = true;
299
- if (b < 128)
300
- return value;
301
- }
302
- /* istanbul ignore next */
303
- throw Error("invalid varint encoding");
304
- };
305
-
306
- function readFixed32_end(buf, end) { // note that this uses `end`, not `pos`
307
- return (buf[end - 4]
308
- | buf[end - 3] << 8
309
- | buf[end - 2] << 16
310
- | buf[end - 1] << 24) >>> 0;
311
- }
312
-
313
- /**
314
- * Reads fixed 32 bits as an unsigned 32 bit integer.
315
- * @returns {number} Value read
316
- */
317
- Reader.prototype.fixed32 = function read_fixed32() {
318
-
319
- /* istanbul ignore if */
320
- if (this.pos + 4 > this.len)
321
- throw indexOutOfRange(this, 4);
322
-
323
- return readFixed32_end(this.buf, this.pos += 4);
324
- };
325
-
326
- /**
327
- * Reads fixed 32 bits as a signed 32 bit integer.
328
- * @returns {number} Value read
329
- */
330
- Reader.prototype.sfixed32 = function read_sfixed32() {
331
-
332
- /* istanbul ignore if */
333
- if (this.pos + 4 > this.len)
334
- throw indexOutOfRange(this, 4);
335
-
336
- return readFixed32_end(this.buf, this.pos += 4) | 0;
337
- };
338
-
339
- /* eslint-disable no-invalid-this */
340
-
341
- function readFixed64(/* this: Reader */) {
342
-
343
- /* istanbul ignore if */
344
- if (this.pos + 8 > this.len)
345
- throw indexOutOfRange(this, 8);
346
-
347
- return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));
348
- }
349
-
350
- /* eslint-enable no-invalid-this */
351
-
352
- /**
353
- * Reads fixed 64 bits.
354
- * @name Reader#fixed64
355
- * @function
356
- * @returns {Long} Value read
357
- */
358
-
359
- /**
360
- * Reads zig-zag encoded fixed 64 bits.
361
- * @name Reader#sfixed64
362
- * @function
363
- * @returns {Long} Value read
364
- */
365
-
366
- /**
367
- * Reads a float (32 bit) as a number.
368
- * @function
369
- * @returns {number} Value read
370
- */
371
- Reader.prototype.float = function read_float() {
372
-
373
- /* istanbul ignore if */
374
- if (this.pos + 4 > this.len)
375
- throw indexOutOfRange(this, 4);
376
-
377
- var value = util.float.readFloatLE(this.buf, this.pos);
378
- this.pos += 4;
379
- return value;
380
- };
381
-
382
- /**
383
- * Reads a double (64 bit float) as a number.
384
- * @function
385
- * @returns {number} Value read
386
- */
387
- Reader.prototype.double = function read_double() {
388
-
389
- /* istanbul ignore if */
390
- if (this.pos + 8 > this.len)
391
- throw indexOutOfRange(this, 4);
392
-
393
- var value = util.float.readDoubleLE(this.buf, this.pos);
394
- this.pos += 8;
395
- return value;
396
- };
397
-
398
- /**
399
- * Reads a sequence of bytes preceeded by its length as a varint.
400
- * @returns {Uint8Array} Value read
401
- */
402
- Reader.prototype.bytes = function read_bytes() {
403
- var length = this.uint32(),
404
- start = this.pos,
405
- end = this.pos + length;
406
-
407
- /* istanbul ignore if */
408
- if (end > this.len)
409
- throw indexOutOfRange(this, length);
410
-
411
- this.pos = end;
412
- return this.raw(start, end);
413
- };
414
-
415
- /**
416
- * Reads a string preceeded by its byte length as a varint.
417
- * @returns {string} Value read
418
- */
419
- Reader.prototype.string = function read_string() {
420
- var length = this.uint32(),
421
- start = this.pos,
422
- end = this.pos + length;
423
-
424
- /* istanbul ignore if */
425
- if (end > this.len)
426
- throw indexOutOfRange(this, length);
427
-
428
- this.pos = end;
429
- return utf8.read(this.buf, start, end);
430
- };
431
-
432
- /**
433
- * Skips the specified number of bytes if specified, otherwise skips a varint.
434
- * @param {number} [length] Length if known, otherwise a varint is assumed
435
- * @returns {Reader} `this`
436
- */
437
- Reader.prototype.skip = function skip(length) {
438
- if (typeof length === "number") {
439
- /* istanbul ignore if */
440
- if (this.pos + length > this.len)
441
- throw indexOutOfRange(this, length);
442
- this.pos += length;
443
- } else {
444
- do {
445
- /* istanbul ignore if */
446
- if (this.pos >= this.len)
447
- throw indexOutOfRange(this);
448
- } while (this.buf[this.pos++] & 128);
449
- }
450
- return this;
451
- };
452
-
453
- /**
454
- * Recursion limit.
455
- * @type {number}
456
- */
457
- Reader.recursionLimit = util.recursionLimit;
458
-
459
- /**
460
- * Whether readers discard unknown fields while decoding.
461
- * @type {boolean}
462
- */
463
- Reader.discardUnknown = false;
464
-
465
- /**
466
- * Skips the next element of the specified wire type.
467
- * @param {number} wireType Wire type received
468
- * @param {number} [depth] Depth of recursion to control nested calls; 0 if omitted
469
- * @param {number} [fieldNumber] Field number for validating group end tags
470
- * @returns {Reader} `this`
471
- */
472
- Reader.prototype.skipType = function(wireType, depth, fieldNumber) {
473
- if (depth === undefined) depth = 0;
474
- if (depth > Reader.recursionLimit)
475
- throw Error("max depth exceeded");
476
- if (fieldNumber === 0)
477
- throw Error("illegal tag: field number 0");
478
- switch (wireType) {
479
- case 0:
480
- this.skip();
481
- break;
482
- case 1:
483
- this.skip(8);
484
- break;
485
- case 2:
486
- this.skip(this.uint32());
487
- break;
488
- case 3:
489
- while (true) {
490
- var tag = this.tag();
491
- var nestedField = tag >>> 3;
492
- wireType = tag & 7;
493
- if (!nestedField)
494
- throw Error("illegal tag: field number 0");
495
- if (wireType === 4) {
496
- if (fieldNumber !== undefined && nestedField !== fieldNumber)
497
- throw Error("invalid end group tag");
498
- break;
499
- }
500
- this.skipType(wireType, depth + 1, nestedField);
501
- }
502
- break;
503
- case 5:
504
- this.skip(4);
505
- break;
506
-
507
- /* istanbul ignore next */
508
- default:
509
- throw Error("invalid wire type " + wireType + " at offset " + this.pos);
510
- }
511
- return this;
512
- };
513
-
514
- Reader._configure = function(BufferReader_) {
515
- BufferReader = BufferReader_;
516
- Reader.create = create();
517
- BufferReader._configure();
518
-
519
- var fn = util.Long ? "toLong" : /* istanbul ignore next */ "toNumber";
520
- util.merge(Reader.prototype, {
521
-
522
- int64: function read_int64() {
523
- return readLongVarint.call(this)[fn](false);
524
- },
525
-
526
- uint64: function read_uint64() {
527
- return readLongVarint.call(this)[fn](true);
528
- },
529
-
530
- sint64: function read_sint64() {
531
- return readLongVarint.call(this).zzDecode()[fn](false);
532
- },
533
-
534
- fixed64: function read_fixed64() {
535
- return readFixed64.call(this)[fn](true);
536
- },
537
-
538
- sfixed64: function read_sfixed64() {
539
- return readFixed64.call(this)[fn](false);
540
- }
541
-
542
- });
543
- };
1
+ "use strict";
2
+ module.exports = Reader;
3
+
4
+ var util = require("./util/minimal");
5
+
6
+ var BufferReader; // cyclic
7
+
8
+ var LongBits = util.LongBits,
9
+ utf8 = util.utf8;
10
+
11
+ /* istanbul ignore next */
12
+ function indexOutOfRange(reader, writeLength) {
13
+ return RangeError("index out of range: " + reader.pos + " + " + (writeLength || 1) + " > " + reader.len);
14
+ }
15
+
16
+ /**
17
+ * Constructs a new reader instance using the specified buffer.
18
+ * @classdesc Wire format reader using `Uint8Array` if available, otherwise `Array`.
19
+ * @constructor
20
+ * @param {Uint8Array} buffer Buffer to read from
21
+ */
22
+ function Reader(buffer) {
23
+
24
+ /**
25
+ * Read buffer.
26
+ * @type {Uint8Array}
27
+ */
28
+ this.buf = buffer;
29
+
30
+ /**
31
+ * Read buffer position.
32
+ * @type {number}
33
+ */
34
+ this.pos = 0;
35
+
36
+ /**
37
+ * Read buffer length.
38
+ * @type {number}
39
+ */
40
+ this.len = buffer.length;
41
+
42
+ /**
43
+ * Whether to discard unknown fields while decoding.
44
+ * @type {boolean}
45
+ */
46
+ this.discardUnknown = Reader.discardUnknown;
47
+ }
48
+
49
+ var create_array = typeof Uint8Array !== "undefined"
50
+ ? function create_typed_array(buffer) {
51
+ if (buffer instanceof Uint8Array || Array.isArray(buffer))
52
+ return new Reader(buffer);
53
+ throw Error("illegal buffer");
54
+ }
55
+ /* istanbul ignore next */
56
+ : function create_array(buffer) {
57
+ if (Array.isArray(buffer))
58
+ return new Reader(buffer);
59
+ throw Error("illegal buffer");
60
+ };
61
+
62
+ var create = function create() {
63
+ return util.Buffer
64
+ ? function create_buffer_setup(buffer) {
65
+ return (Reader.create = function create_buffer(buffer) {
66
+ return util.Buffer.isBuffer(buffer)
67
+ ? new BufferReader(buffer)
68
+ /* istanbul ignore next */
69
+ : create_array(buffer);
70
+ })(buffer);
71
+ }
72
+ /* istanbul ignore next */
73
+ : create_array;
74
+ };
75
+
76
+ /**
77
+ * Creates a new reader using the specified buffer.
78
+ * @function
79
+ * @param {Uint8Array|Buffer} buffer Buffer to read from
80
+ * @returns {Reader|BufferReader} A {@link BufferReader} if `buffer` is a Buffer, otherwise a {@link Reader}
81
+ * @throws {Error} If `buffer` is not a valid buffer
82
+ */
83
+ Reader.create = create();
84
+
85
+ Reader.prototype._slice = util.Array.prototype.subarray || /* istanbul ignore next */ util.Array.prototype.slice;
86
+
87
+ /**
88
+ * Returns raw bytes from the backing buffer without advancing the reader.
89
+ * @param {number} start Start offset
90
+ * @param {number} end End offset
91
+ * @returns {Uint8Array} Raw bytes
92
+ */
93
+ Reader.prototype.raw = function read_raw(start, end) {
94
+ if (Array.isArray(this.buf)) // plain array
95
+ return this.buf.slice(start, end);
96
+
97
+ if (start === end) // fix for IE 10/Win8 and others' subarray returning array of size 1
98
+ return new this.buf.constructor(0);
99
+ return this._slice.call(this.buf, start, end);
100
+ };
101
+
102
+ /**
103
+ * Reads a varint as an unsigned 32 bit value.
104
+ * @function
105
+ * @returns {number} Value read
106
+ */
107
+ Reader.prototype.uint32 = function read_uint32() {
108
+ var buf = this.buf,
109
+ pos = this.pos,
110
+ value = (buf[pos] & 127) >>> 0;
111
+ if (buf[pos++] < 128) {
112
+ this.pos = pos;
113
+ return value;
114
+ }
115
+ value = (value | (buf[pos] & 127) << 7) >>> 0;
116
+ if (buf[pos++] < 128) {
117
+ this.pos = pos;
118
+ return value;
119
+ }
120
+ value = (value | (buf[pos] & 127) << 14) >>> 0;
121
+ if (buf[pos++] < 128) {
122
+ this.pos = pos;
123
+ return value;
124
+ }
125
+ value = (value | (buf[pos] & 127) << 21) >>> 0;
126
+ if (buf[pos++] < 128) {
127
+ this.pos = pos;
128
+ return value;
129
+ }
130
+ value = (value | (buf[pos] & 15) << 28) >>> 0;
131
+ if (buf[pos++] < 128) {
132
+ this.pos = pos;
133
+ return value;
134
+ }
135
+
136
+ for (var i = 0; i < 5; ++i) {
137
+ /* istanbul ignore if */
138
+ if (pos >= this.len) {
139
+ this.pos = pos;
140
+ throw indexOutOfRange(this);
141
+ }
142
+ if (buf[pos++] < 128) {
143
+ this.pos = pos;
144
+ return value;
145
+ }
146
+ }
147
+ /* istanbul ignore next */
148
+ this.pos = pos;
149
+ throw Error("invalid varint encoding");
150
+ };
151
+
152
+ /**
153
+ * Reads a field tag.
154
+ * @function
155
+ * @returns {number} Tag read
156
+ */
157
+ Reader.prototype.tag = function read_tag() {
158
+ var buf = this.buf,
159
+ pos = this.pos,
160
+ value = (buf[pos] & 127) >>> 0;
161
+ if (buf[pos++] < 128) {
162
+ this.pos = pos;
163
+ return value;
164
+ }
165
+ value = (value | (buf[pos] & 127) << 7) >>> 0;
166
+ if (buf[pos++] < 128) {
167
+ this.pos = pos;
168
+ return value;
169
+ }
170
+ value = (value | (buf[pos] & 127) << 14) >>> 0;
171
+ if (buf[pos++] < 128) {
172
+ this.pos = pos;
173
+ return value;
174
+ }
175
+ value = (value | (buf[pos] & 127) << 21) >>> 0;
176
+ if (buf[pos++] < 128) {
177
+ this.pos = pos;
178
+ return value;
179
+ }
180
+ value = (value | (buf[pos] & 15) << 28) >>> 0;
181
+ if (buf[pos] < 128 && (buf[pos] & 112) === 0) {
182
+ this.pos = pos + 1;
183
+ return value;
184
+ }
185
+
186
+ this.pos = pos + 1;
187
+ throw Error("invalid tag encoding");
188
+ };
189
+
190
+ /**
191
+ * Reads a varint as a signed 32 bit value.
192
+ * @returns {number} Value read
193
+ */
194
+ Reader.prototype.int32 = function read_int32() {
195
+ return this.uint32() | 0;
196
+ };
197
+
198
+ /**
199
+ * Reads a zig-zag encoded varint as a signed 32 bit value.
200
+ * @returns {number} Value read
201
+ */
202
+ Reader.prototype.sint32 = function read_sint32() {
203
+ var value = this.uint32();
204
+ return value >>> 1 ^ -(value & 1) | 0;
205
+ };
206
+
207
+ /* eslint-disable no-invalid-this */
208
+
209
+ function readLongVarint() {
210
+ // tends to deopt with local vars for octet etc.
211
+ var bits = new LongBits(0, 0);
212
+ var i = 0;
213
+ if (this.len - this.pos > 4) { // fast route (lo)
214
+ for (; i < 4; ++i) {
215
+ // 1st..4th
216
+ bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;
217
+ if (this.buf[this.pos++] < 128)
218
+ return bits;
219
+ }
220
+ // 5th
221
+ bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0;
222
+ bits.hi = (bits.hi | (this.buf[this.pos] & 127) >> 4) >>> 0;
223
+ if (this.buf[this.pos++] < 128)
224
+ return bits;
225
+ i = 0;
226
+ } else {
227
+ for (; i < 3; ++i) {
228
+ /* istanbul ignore if */
229
+ if (this.pos >= this.len)
230
+ throw indexOutOfRange(this);
231
+ // 1st..3th
232
+ bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;
233
+ if (this.buf[this.pos++] < 128)
234
+ return bits;
235
+ }
236
+ // 4th
237
+ bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0;
238
+ return bits;
239
+ }
240
+ if (this.len - this.pos > 4) { // fast route (hi)
241
+ for (; i < 5; ++i) {
242
+ // 6th..10th
243
+ bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;
244
+ if (this.buf[this.pos++] < 128)
245
+ return bits;
246
+ }
247
+ } else {
248
+ for (; i < 5; ++i) {
249
+ /* istanbul ignore if */
250
+ if (this.pos >= this.len)
251
+ throw indexOutOfRange(this);
252
+ // 6th..10th
253
+ bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;
254
+ if (this.buf[this.pos++] < 128)
255
+ return bits;
256
+ }
257
+ }
258
+ /* istanbul ignore next */
259
+ throw Error("invalid varint encoding");
260
+ }
261
+
262
+ /* eslint-enable no-invalid-this */
263
+
264
+ /**
265
+ * Reads a varint as a signed 64 bit value.
266
+ * @name Reader#int64
267
+ * @function
268
+ * @returns {Long} Value read
269
+ */
270
+
271
+ /**
272
+ * Reads a varint as an unsigned 64 bit value.
273
+ * @name Reader#uint64
274
+ * @function
275
+ * @returns {Long} Value read
276
+ */
277
+
278
+ /**
279
+ * Reads a zig-zag encoded varint as a signed 64 bit value.
280
+ * @name Reader#sint64
281
+ * @function
282
+ * @returns {Long} Value read
283
+ */
284
+
285
+ /**
286
+ * Reads a varint as a boolean.
287
+ * @returns {boolean} Value read
288
+ */
289
+ Reader.prototype.bool = function read_bool() {
290
+ var value = false,
291
+ b;
292
+ for (var i = 0; i < 10; ++i) {
293
+ /* istanbul ignore if */
294
+ if (this.pos >= this.len)
295
+ throw indexOutOfRange(this);
296
+ b = this.buf[this.pos++];
297
+ if (b & 127)
298
+ value = true;
299
+ if (b < 128)
300
+ return value;
301
+ }
302
+ /* istanbul ignore next */
303
+ throw Error("invalid varint encoding");
304
+ };
305
+
306
+ function readFixed32_end(buf, end) { // note that this uses `end`, not `pos`
307
+ return (buf[end - 4]
308
+ | buf[end - 3] << 8
309
+ | buf[end - 2] << 16
310
+ | buf[end - 1] << 24) >>> 0;
311
+ }
312
+
313
+ /**
314
+ * Reads fixed 32 bits as an unsigned 32 bit integer.
315
+ * @returns {number} Value read
316
+ */
317
+ Reader.prototype.fixed32 = function read_fixed32() {
318
+
319
+ /* istanbul ignore if */
320
+ if (this.pos + 4 > this.len)
321
+ throw indexOutOfRange(this, 4);
322
+
323
+ return readFixed32_end(this.buf, this.pos += 4);
324
+ };
325
+
326
+ /**
327
+ * Reads fixed 32 bits as a signed 32 bit integer.
328
+ * @returns {number} Value read
329
+ */
330
+ Reader.prototype.sfixed32 = function read_sfixed32() {
331
+
332
+ /* istanbul ignore if */
333
+ if (this.pos + 4 > this.len)
334
+ throw indexOutOfRange(this, 4);
335
+
336
+ return readFixed32_end(this.buf, this.pos += 4) | 0;
337
+ };
338
+
339
+ /* eslint-disable no-invalid-this */
340
+
341
+ function readFixed64(/* this: Reader */) {
342
+
343
+ /* istanbul ignore if */
344
+ if (this.pos + 8 > this.len)
345
+ throw indexOutOfRange(this, 8);
346
+
347
+ return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));
348
+ }
349
+
350
+ /* eslint-enable no-invalid-this */
351
+
352
+ /**
353
+ * Reads fixed 64 bits.
354
+ * @name Reader#fixed64
355
+ * @function
356
+ * @returns {Long} Value read
357
+ */
358
+
359
+ /**
360
+ * Reads zig-zag encoded fixed 64 bits.
361
+ * @name Reader#sfixed64
362
+ * @function
363
+ * @returns {Long} Value read
364
+ */
365
+
366
+ /**
367
+ * Reads a float (32 bit) as a number.
368
+ * @function
369
+ * @returns {number} Value read
370
+ */
371
+ Reader.prototype.float = function read_float() {
372
+
373
+ /* istanbul ignore if */
374
+ if (this.pos + 4 > this.len)
375
+ throw indexOutOfRange(this, 4);
376
+
377
+ var value = util.float.readFloatLE(this.buf, this.pos);
378
+ this.pos += 4;
379
+ return value;
380
+ };
381
+
382
+ /**
383
+ * Reads a double (64 bit float) as a number.
384
+ * @function
385
+ * @returns {number} Value read
386
+ */
387
+ Reader.prototype.double = function read_double() {
388
+
389
+ /* istanbul ignore if */
390
+ if (this.pos + 8 > this.len)
391
+ throw indexOutOfRange(this, 4);
392
+
393
+ var value = util.float.readDoubleLE(this.buf, this.pos);
394
+ this.pos += 8;
395
+ return value;
396
+ };
397
+
398
+ /**
399
+ * Reads a sequence of bytes preceeded by its length as a varint.
400
+ * @returns {Uint8Array} Value read
401
+ */
402
+ Reader.prototype.bytes = function read_bytes() {
403
+ var length = this.uint32(),
404
+ start = this.pos,
405
+ end = this.pos + length;
406
+
407
+ /* istanbul ignore if */
408
+ if (end > this.len)
409
+ throw indexOutOfRange(this, length);
410
+
411
+ this.pos = end;
412
+ return this.raw(start, end);
413
+ };
414
+
415
+ /**
416
+ * Reads a string preceeded by its byte length as a varint.
417
+ * @returns {string} Value read
418
+ */
419
+ Reader.prototype.string = function read_string() {
420
+ var length = this.uint32(),
421
+ start = this.pos,
422
+ end = this.pos + length;
423
+
424
+ /* istanbul ignore if */
425
+ if (end > this.len)
426
+ throw indexOutOfRange(this, length);
427
+
428
+ this.pos = end;
429
+ return utf8.read(this.buf, start, end);
430
+ };
431
+
432
+ /**
433
+ * Skips the specified number of bytes if specified, otherwise skips a varint.
434
+ * @param {number} [length] Length if known, otherwise a varint is assumed
435
+ * @returns {Reader} `this`
436
+ */
437
+ Reader.prototype.skip = function skip(length) {
438
+ if (typeof length === "number") {
439
+ /* istanbul ignore if */
440
+ if (this.pos + length > this.len)
441
+ throw indexOutOfRange(this, length);
442
+ this.pos += length;
443
+ } else {
444
+ do {
445
+ /* istanbul ignore if */
446
+ if (this.pos >= this.len)
447
+ throw indexOutOfRange(this);
448
+ } while (this.buf[this.pos++] & 128);
449
+ }
450
+ return this;
451
+ };
452
+
453
+ /**
454
+ * Recursion limit.
455
+ * @type {number}
456
+ */
457
+ Reader.recursionLimit = util.recursionLimit;
458
+
459
+ /**
460
+ * Whether readers discard unknown fields while decoding.
461
+ * @type {boolean}
462
+ */
463
+ Reader.discardUnknown = true;
464
+
465
+ /**
466
+ * Skips the next element of the specified wire type.
467
+ * @param {number} wireType Wire type received
468
+ * @param {number} [depth] Depth of recursion to control nested calls; 0 if omitted
469
+ * @param {number} [fieldNumber] Field number for validating group end tags
470
+ * @returns {Reader} `this`
471
+ */
472
+ Reader.prototype.skipType = function(wireType, depth, fieldNumber) {
473
+ if (depth === undefined) depth = 0;
474
+ if (depth > Reader.recursionLimit)
475
+ throw Error("max depth exceeded");
476
+ if (fieldNumber === 0)
477
+ throw Error("illegal tag: field number 0");
478
+ switch (wireType) {
479
+ case 0:
480
+ this.skip();
481
+ break;
482
+ case 1:
483
+ this.skip(8);
484
+ break;
485
+ case 2:
486
+ this.skip(this.uint32());
487
+ break;
488
+ case 3:
489
+ while (true) {
490
+ var tag = this.tag();
491
+ var nestedField = tag >>> 3;
492
+ wireType = tag & 7;
493
+ if (!nestedField)
494
+ throw Error("illegal tag: field number 0");
495
+ if (wireType === 4) {
496
+ if (fieldNumber !== undefined && nestedField !== fieldNumber)
497
+ throw Error("invalid end group tag");
498
+ break;
499
+ }
500
+ this.skipType(wireType, depth + 1, nestedField);
501
+ }
502
+ break;
503
+ case 5:
504
+ this.skip(4);
505
+ break;
506
+
507
+ /* istanbul ignore next */
508
+ default:
509
+ throw Error("invalid wire type " + wireType + " at offset " + this.pos);
510
+ }
511
+ return this;
512
+ };
513
+
514
+ Reader._configure = function(BufferReader_) {
515
+ BufferReader = BufferReader_;
516
+ Reader.create = create();
517
+ BufferReader._configure();
518
+
519
+ var fn = util.Long ? "toLong" : /* istanbul ignore next */ "toNumber";
520
+ util.merge(Reader.prototype, {
521
+
522
+ int64: function read_int64() {
523
+ return readLongVarint.call(this)[fn](false);
524
+ },
525
+
526
+ uint64: function read_uint64() {
527
+ return readLongVarint.call(this)[fn](true);
528
+ },
529
+
530
+ sint64: function read_sint64() {
531
+ return readLongVarint.call(this).zzDecode()[fn](false);
532
+ },
533
+
534
+ fixed64: function read_fixed64() {
535
+ return readFixed64.call(this)[fn](true);
536
+ },
537
+
538
+ sfixed64: function read_sfixed64() {
539
+ return readFixed64.call(this)[fn](false);
540
+ }
541
+
542
+ });
543
+ };