protobufjs 7.3.0 → 7.3.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 (77) hide show
  1. package/LICENSE +39 -39
  2. package/README.md +727 -740
  3. package/dist/light/protobuf.js +6264 -6264
  4. package/dist/light/protobuf.js.map +1 -1
  5. package/dist/light/protobuf.min.js +2 -2
  6. package/dist/light/protobuf.min.js.map +1 -1
  7. package/dist/minimal/protobuf.js +1928 -1928
  8. package/dist/minimal/protobuf.js.map +1 -1
  9. package/dist/minimal/protobuf.min.js +2 -2
  10. package/dist/minimal/protobuf.min.js.map +1 -1
  11. package/dist/protobuf.js +7978 -7978
  12. package/dist/protobuf.js.map +1 -1
  13. package/dist/protobuf.min.js +2 -2
  14. package/dist/protobuf.min.js.map +1 -1
  15. package/ext/debug/README.md +4 -4
  16. package/ext/debug/index.js +71 -71
  17. package/ext/descriptor/README.md +72 -72
  18. package/ext/descriptor/index.d.ts +191 -191
  19. package/ext/descriptor/index.js +1052 -1052
  20. package/ext/descriptor/test.js +54 -54
  21. package/google/LICENSE +27 -27
  22. package/google/README.md +1 -1
  23. package/google/api/annotations.json +82 -82
  24. package/google/api/annotations.proto +10 -10
  25. package/google/api/http.json +85 -85
  26. package/google/api/http.proto +30 -30
  27. package/google/protobuf/api.json +117 -117
  28. package/google/protobuf/api.proto +33 -33
  29. package/google/protobuf/descriptor.json +738 -738
  30. package/google/protobuf/descriptor.proto +286 -286
  31. package/google/protobuf/source_context.json +19 -19
  32. package/google/protobuf/source_context.proto +7 -7
  33. package/google/protobuf/type.json +201 -201
  34. package/google/protobuf/type.proto +89 -89
  35. package/index.d.ts +2741 -2741
  36. package/index.js +4 -4
  37. package/light.d.ts +2 -2
  38. package/light.js +3 -3
  39. package/minimal.d.ts +2 -2
  40. package/minimal.js +4 -4
  41. package/package.json +111 -111
  42. package/scripts/postinstall.js +32 -32
  43. package/src/common.js +399 -399
  44. package/src/converter.js +301 -301
  45. package/src/decoder.js +129 -129
  46. package/src/encoder.js +100 -100
  47. package/src/enum.js +198 -198
  48. package/src/field.js +377 -377
  49. package/src/index-light.js +104 -104
  50. package/src/index-minimal.js +36 -36
  51. package/src/index.js +12 -12
  52. package/src/mapfield.js +126 -126
  53. package/src/message.js +138 -138
  54. package/src/method.js +160 -160
  55. package/src/namespace.js +433 -433
  56. package/src/object.js +243 -243
  57. package/src/oneof.js +203 -203
  58. package/src/parse.js +889 -889
  59. package/src/reader.js +416 -416
  60. package/src/reader_buffer.js +51 -51
  61. package/src/root.js +368 -368
  62. package/src/roots.js +18 -18
  63. package/src/rpc/service.js +142 -142
  64. package/src/rpc.js +36 -36
  65. package/src/service.js +167 -167
  66. package/src/tokenize.js +416 -416
  67. package/src/type.js +589 -589
  68. package/src/types.js +196 -196
  69. package/src/typescript.jsdoc +15 -15
  70. package/src/util/longbits.js +200 -200
  71. package/src/util/minimal.js +438 -438
  72. package/src/util.js +212 -212
  73. package/src/verifier.js +176 -176
  74. package/src/wrappers.js +102 -102
  75. package/src/writer.js +465 -465
  76. package/src/writer_buffer.js +85 -85
  77. package/tsconfig.json +7 -7
package/src/writer.js CHANGED
@@ -1,465 +1,465 @@
1
- "use strict";
2
- module.exports = Writer;
3
-
4
- var util = require("./util/minimal");
5
-
6
- var BufferWriter; // cyclic
7
-
8
- var LongBits = util.LongBits,
9
- base64 = util.base64,
10
- utf8 = util.utf8;
11
-
12
- /**
13
- * Constructs a new writer operation instance.
14
- * @classdesc Scheduled writer operation.
15
- * @constructor
16
- * @param {function(*, Uint8Array, number)} fn Function to call
17
- * @param {number} len Value byte length
18
- * @param {*} val Value to write
19
- * @ignore
20
- */
21
- function Op(fn, len, val) {
22
-
23
- /**
24
- * Function to call.
25
- * @type {function(Uint8Array, number, *)}
26
- */
27
- this.fn = fn;
28
-
29
- /**
30
- * Value byte length.
31
- * @type {number}
32
- */
33
- this.len = len;
34
-
35
- /**
36
- * Next operation.
37
- * @type {Writer.Op|undefined}
38
- */
39
- this.next = undefined;
40
-
41
- /**
42
- * Value to write.
43
- * @type {*}
44
- */
45
- this.val = val; // type varies
46
- }
47
-
48
- /* istanbul ignore next */
49
- function noop() {} // eslint-disable-line no-empty-function
50
-
51
- /**
52
- * Constructs a new writer state instance.
53
- * @classdesc Copied writer state.
54
- * @memberof Writer
55
- * @constructor
56
- * @param {Writer} writer Writer to copy state from
57
- * @ignore
58
- */
59
- function State(writer) {
60
-
61
- /**
62
- * Current head.
63
- * @type {Writer.Op}
64
- */
65
- this.head = writer.head;
66
-
67
- /**
68
- * Current tail.
69
- * @type {Writer.Op}
70
- */
71
- this.tail = writer.tail;
72
-
73
- /**
74
- * Current buffer length.
75
- * @type {number}
76
- */
77
- this.len = writer.len;
78
-
79
- /**
80
- * Next state.
81
- * @type {State|null}
82
- */
83
- this.next = writer.states;
84
- }
85
-
86
- /**
87
- * Constructs a new writer instance.
88
- * @classdesc Wire format writer using `Uint8Array` if available, otherwise `Array`.
89
- * @constructor
90
- */
91
- function Writer() {
92
-
93
- /**
94
- * Current length.
95
- * @type {number}
96
- */
97
- this.len = 0;
98
-
99
- /**
100
- * Operations head.
101
- * @type {Object}
102
- */
103
- this.head = new Op(noop, 0, 0);
104
-
105
- /**
106
- * Operations tail
107
- * @type {Object}
108
- */
109
- this.tail = this.head;
110
-
111
- /**
112
- * Linked forked states.
113
- * @type {Object|null}
114
- */
115
- this.states = null;
116
-
117
- // When a value is written, the writer calculates its byte length and puts it into a linked
118
- // list of operations to perform when finish() is called. This both allows us to allocate
119
- // buffers of the exact required size and reduces the amount of work we have to do compared
120
- // to first calculating over objects and then encoding over objects. In our case, the encoding
121
- // part is just a linked list walk calling operations with already prepared values.
122
- }
123
-
124
- var create = function create() {
125
- return util.Buffer
126
- ? function create_buffer_setup() {
127
- return (Writer.create = function create_buffer() {
128
- return new BufferWriter();
129
- })();
130
- }
131
- /* istanbul ignore next */
132
- : function create_array() {
133
- return new Writer();
134
- };
135
- };
136
-
137
- /**
138
- * Creates a new writer.
139
- * @function
140
- * @returns {BufferWriter|Writer} A {@link BufferWriter} when Buffers are supported, otherwise a {@link Writer}
141
- */
142
- Writer.create = create();
143
-
144
- /**
145
- * Allocates a buffer of the specified size.
146
- * @param {number} size Buffer size
147
- * @returns {Uint8Array} Buffer
148
- */
149
- Writer.alloc = function alloc(size) {
150
- return new util.Array(size);
151
- };
152
-
153
- // Use Uint8Array buffer pool in the browser, just like node does with buffers
154
- /* istanbul ignore else */
155
- if (util.Array !== Array)
156
- Writer.alloc = util.pool(Writer.alloc, util.Array.prototype.subarray);
157
-
158
- /**
159
- * Pushes a new operation to the queue.
160
- * @param {function(Uint8Array, number, *)} fn Function to call
161
- * @param {number} len Value byte length
162
- * @param {number} val Value to write
163
- * @returns {Writer} `this`
164
- * @private
165
- */
166
- Writer.prototype._push = function push(fn, len, val) {
167
- this.tail = this.tail.next = new Op(fn, len, val);
168
- this.len += len;
169
- return this;
170
- };
171
-
172
- function writeByte(val, buf, pos) {
173
- buf[pos] = val & 255;
174
- }
175
-
176
- function writeVarint32(val, buf, pos) {
177
- while (val > 127) {
178
- buf[pos++] = val & 127 | 128;
179
- val >>>= 7;
180
- }
181
- buf[pos] = val;
182
- }
183
-
184
- /**
185
- * Constructs a new varint writer operation instance.
186
- * @classdesc Scheduled varint writer operation.
187
- * @extends Op
188
- * @constructor
189
- * @param {number} len Value byte length
190
- * @param {number} val Value to write
191
- * @ignore
192
- */
193
- function VarintOp(len, val) {
194
- this.len = len;
195
- this.next = undefined;
196
- this.val = val;
197
- }
198
-
199
- VarintOp.prototype = Object.create(Op.prototype);
200
- VarintOp.prototype.fn = writeVarint32;
201
-
202
- /**
203
- * Writes an unsigned 32 bit value as a varint.
204
- * @param {number} value Value to write
205
- * @returns {Writer} `this`
206
- */
207
- Writer.prototype.uint32 = function write_uint32(value) {
208
- // here, the call to this.push has been inlined and a varint specific Op subclass is used.
209
- // uint32 is by far the most frequently used operation and benefits significantly from this.
210
- this.len += (this.tail = this.tail.next = new VarintOp(
211
- (value = value >>> 0)
212
- < 128 ? 1
213
- : value < 16384 ? 2
214
- : value < 2097152 ? 3
215
- : value < 268435456 ? 4
216
- : 5,
217
- value)).len;
218
- return this;
219
- };
220
-
221
- /**
222
- * Writes a signed 32 bit value as a varint.
223
- * @function
224
- * @param {number} value Value to write
225
- * @returns {Writer} `this`
226
- */
227
- Writer.prototype.int32 = function write_int32(value) {
228
- return value < 0
229
- ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) // 10 bytes per spec
230
- : this.uint32(value);
231
- };
232
-
233
- /**
234
- * Writes a 32 bit value as a varint, zig-zag encoded.
235
- * @param {number} value Value to write
236
- * @returns {Writer} `this`
237
- */
238
- Writer.prototype.sint32 = function write_sint32(value) {
239
- return this.uint32((value << 1 ^ value >> 31) >>> 0);
240
- };
241
-
242
- function writeVarint64(val, buf, pos) {
243
- while (val.hi) {
244
- buf[pos++] = val.lo & 127 | 128;
245
- val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0;
246
- val.hi >>>= 7;
247
- }
248
- while (val.lo > 127) {
249
- buf[pos++] = val.lo & 127 | 128;
250
- val.lo = val.lo >>> 7;
251
- }
252
- buf[pos++] = val.lo;
253
- }
254
-
255
- /**
256
- * Writes an unsigned 64 bit value as a varint.
257
- * @param {Long|number|string} value Value to write
258
- * @returns {Writer} `this`
259
- * @throws {TypeError} If `value` is a string and no long library is present.
260
- */
261
- Writer.prototype.uint64 = function write_uint64(value) {
262
- var bits = LongBits.from(value);
263
- return this._push(writeVarint64, bits.length(), bits);
264
- };
265
-
266
- /**
267
- * Writes a signed 64 bit value as a varint.
268
- * @function
269
- * @param {Long|number|string} value Value to write
270
- * @returns {Writer} `this`
271
- * @throws {TypeError} If `value` is a string and no long library is present.
272
- */
273
- Writer.prototype.int64 = Writer.prototype.uint64;
274
-
275
- /**
276
- * Writes a signed 64 bit value as a varint, zig-zag encoded.
277
- * @param {Long|number|string} value Value to write
278
- * @returns {Writer} `this`
279
- * @throws {TypeError} If `value` is a string and no long library is present.
280
- */
281
- Writer.prototype.sint64 = function write_sint64(value) {
282
- var bits = LongBits.from(value).zzEncode();
283
- return this._push(writeVarint64, bits.length(), bits);
284
- };
285
-
286
- /**
287
- * Writes a boolish value as a varint.
288
- * @param {boolean} value Value to write
289
- * @returns {Writer} `this`
290
- */
291
- Writer.prototype.bool = function write_bool(value) {
292
- return this._push(writeByte, 1, value ? 1 : 0);
293
- };
294
-
295
- function writeFixed32(val, buf, pos) {
296
- buf[pos ] = val & 255;
297
- buf[pos + 1] = val >>> 8 & 255;
298
- buf[pos + 2] = val >>> 16 & 255;
299
- buf[pos + 3] = val >>> 24;
300
- }
301
-
302
- /**
303
- * Writes an unsigned 32 bit value as fixed 32 bits.
304
- * @param {number} value Value to write
305
- * @returns {Writer} `this`
306
- */
307
- Writer.prototype.fixed32 = function write_fixed32(value) {
308
- return this._push(writeFixed32, 4, value >>> 0);
309
- };
310
-
311
- /**
312
- * Writes a signed 32 bit value as fixed 32 bits.
313
- * @function
314
- * @param {number} value Value to write
315
- * @returns {Writer} `this`
316
- */
317
- Writer.prototype.sfixed32 = Writer.prototype.fixed32;
318
-
319
- /**
320
- * Writes an unsigned 64 bit value as fixed 64 bits.
321
- * @param {Long|number|string} value Value to write
322
- * @returns {Writer} `this`
323
- * @throws {TypeError} If `value` is a string and no long library is present.
324
- */
325
- Writer.prototype.fixed64 = function write_fixed64(value) {
326
- var bits = LongBits.from(value);
327
- return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi);
328
- };
329
-
330
- /**
331
- * Writes a signed 64 bit value as fixed 64 bits.
332
- * @function
333
- * @param {Long|number|string} value Value to write
334
- * @returns {Writer} `this`
335
- * @throws {TypeError} If `value` is a string and no long library is present.
336
- */
337
- Writer.prototype.sfixed64 = Writer.prototype.fixed64;
338
-
339
- /**
340
- * Writes a float (32 bit).
341
- * @function
342
- * @param {number} value Value to write
343
- * @returns {Writer} `this`
344
- */
345
- Writer.prototype.float = function write_float(value) {
346
- return this._push(util.float.writeFloatLE, 4, value);
347
- };
348
-
349
- /**
350
- * Writes a double (64 bit float).
351
- * @function
352
- * @param {number} value Value to write
353
- * @returns {Writer} `this`
354
- */
355
- Writer.prototype.double = function write_double(value) {
356
- return this._push(util.float.writeDoubleLE, 8, value);
357
- };
358
-
359
- var writeBytes = util.Array.prototype.set
360
- ? function writeBytes_set(val, buf, pos) {
361
- buf.set(val, pos); // also works for plain array values
362
- }
363
- /* istanbul ignore next */
364
- : function writeBytes_for(val, buf, pos) {
365
- for (var i = 0; i < val.length; ++i)
366
- buf[pos + i] = val[i];
367
- };
368
-
369
- /**
370
- * Writes a sequence of bytes.
371
- * @param {Uint8Array|string} value Buffer or base64 encoded string to write
372
- * @returns {Writer} `this`
373
- */
374
- Writer.prototype.bytes = function write_bytes(value) {
375
- var len = value.length >>> 0;
376
- if (!len)
377
- return this._push(writeByte, 1, 0);
378
- if (util.isString(value)) {
379
- var buf = Writer.alloc(len = base64.length(value));
380
- base64.decode(value, buf, 0);
381
- value = buf;
382
- }
383
- return this.uint32(len)._push(writeBytes, len, value);
384
- };
385
-
386
- /**
387
- * Writes a string.
388
- * @param {string} value Value to write
389
- * @returns {Writer} `this`
390
- */
391
- Writer.prototype.string = function write_string(value) {
392
- var len = utf8.length(value);
393
- return len
394
- ? this.uint32(len)._push(utf8.write, len, value)
395
- : this._push(writeByte, 1, 0);
396
- };
397
-
398
- /**
399
- * Forks this writer's state by pushing it to a stack.
400
- * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.
401
- * @returns {Writer} `this`
402
- */
403
- Writer.prototype.fork = function fork() {
404
- this.states = new State(this);
405
- this.head = this.tail = new Op(noop, 0, 0);
406
- this.len = 0;
407
- return this;
408
- };
409
-
410
- /**
411
- * Resets this instance to the last state.
412
- * @returns {Writer} `this`
413
- */
414
- Writer.prototype.reset = function reset() {
415
- if (this.states) {
416
- this.head = this.states.head;
417
- this.tail = this.states.tail;
418
- this.len = this.states.len;
419
- this.states = this.states.next;
420
- } else {
421
- this.head = this.tail = new Op(noop, 0, 0);
422
- this.len = 0;
423
- }
424
- return this;
425
- };
426
-
427
- /**
428
- * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.
429
- * @returns {Writer} `this`
430
- */
431
- Writer.prototype.ldelim = function ldelim() {
432
- var head = this.head,
433
- tail = this.tail,
434
- len = this.len;
435
- this.reset().uint32(len);
436
- if (len) {
437
- this.tail.next = head.next; // skip noop
438
- this.tail = tail;
439
- this.len += len;
440
- }
441
- return this;
442
- };
443
-
444
- /**
445
- * Finishes the write operation.
446
- * @returns {Uint8Array} Finished buffer
447
- */
448
- Writer.prototype.finish = function finish() {
449
- var head = this.head.next, // skip noop
450
- buf = this.constructor.alloc(this.len),
451
- pos = 0;
452
- while (head) {
453
- head.fn(head.val, buf, pos);
454
- pos += head.len;
455
- head = head.next;
456
- }
457
- // this.head = this.tail = null;
458
- return buf;
459
- };
460
-
461
- Writer._configure = function(BufferWriter_) {
462
- BufferWriter = BufferWriter_;
463
- Writer.create = create();
464
- BufferWriter._configure();
465
- };
1
+ "use strict";
2
+ module.exports = Writer;
3
+
4
+ var util = require("./util/minimal");
5
+
6
+ var BufferWriter; // cyclic
7
+
8
+ var LongBits = util.LongBits,
9
+ base64 = util.base64,
10
+ utf8 = util.utf8;
11
+
12
+ /**
13
+ * Constructs a new writer operation instance.
14
+ * @classdesc Scheduled writer operation.
15
+ * @constructor
16
+ * @param {function(*, Uint8Array, number)} fn Function to call
17
+ * @param {number} len Value byte length
18
+ * @param {*} val Value to write
19
+ * @ignore
20
+ */
21
+ function Op(fn, len, val) {
22
+
23
+ /**
24
+ * Function to call.
25
+ * @type {function(Uint8Array, number, *)}
26
+ */
27
+ this.fn = fn;
28
+
29
+ /**
30
+ * Value byte length.
31
+ * @type {number}
32
+ */
33
+ this.len = len;
34
+
35
+ /**
36
+ * Next operation.
37
+ * @type {Writer.Op|undefined}
38
+ */
39
+ this.next = undefined;
40
+
41
+ /**
42
+ * Value to write.
43
+ * @type {*}
44
+ */
45
+ this.val = val; // type varies
46
+ }
47
+
48
+ /* istanbul ignore next */
49
+ function noop() {} // eslint-disable-line no-empty-function
50
+
51
+ /**
52
+ * Constructs a new writer state instance.
53
+ * @classdesc Copied writer state.
54
+ * @memberof Writer
55
+ * @constructor
56
+ * @param {Writer} writer Writer to copy state from
57
+ * @ignore
58
+ */
59
+ function State(writer) {
60
+
61
+ /**
62
+ * Current head.
63
+ * @type {Writer.Op}
64
+ */
65
+ this.head = writer.head;
66
+
67
+ /**
68
+ * Current tail.
69
+ * @type {Writer.Op}
70
+ */
71
+ this.tail = writer.tail;
72
+
73
+ /**
74
+ * Current buffer length.
75
+ * @type {number}
76
+ */
77
+ this.len = writer.len;
78
+
79
+ /**
80
+ * Next state.
81
+ * @type {State|null}
82
+ */
83
+ this.next = writer.states;
84
+ }
85
+
86
+ /**
87
+ * Constructs a new writer instance.
88
+ * @classdesc Wire format writer using `Uint8Array` if available, otherwise `Array`.
89
+ * @constructor
90
+ */
91
+ function Writer() {
92
+
93
+ /**
94
+ * Current length.
95
+ * @type {number}
96
+ */
97
+ this.len = 0;
98
+
99
+ /**
100
+ * Operations head.
101
+ * @type {Object}
102
+ */
103
+ this.head = new Op(noop, 0, 0);
104
+
105
+ /**
106
+ * Operations tail
107
+ * @type {Object}
108
+ */
109
+ this.tail = this.head;
110
+
111
+ /**
112
+ * Linked forked states.
113
+ * @type {Object|null}
114
+ */
115
+ this.states = null;
116
+
117
+ // When a value is written, the writer calculates its byte length and puts it into a linked
118
+ // list of operations to perform when finish() is called. This both allows us to allocate
119
+ // buffers of the exact required size and reduces the amount of work we have to do compared
120
+ // to first calculating over objects and then encoding over objects. In our case, the encoding
121
+ // part is just a linked list walk calling operations with already prepared values.
122
+ }
123
+
124
+ var create = function create() {
125
+ return util.Buffer
126
+ ? function create_buffer_setup() {
127
+ return (Writer.create = function create_buffer() {
128
+ return new BufferWriter();
129
+ })();
130
+ }
131
+ /* istanbul ignore next */
132
+ : function create_array() {
133
+ return new Writer();
134
+ };
135
+ };
136
+
137
+ /**
138
+ * Creates a new writer.
139
+ * @function
140
+ * @returns {BufferWriter|Writer} A {@link BufferWriter} when Buffers are supported, otherwise a {@link Writer}
141
+ */
142
+ Writer.create = create();
143
+
144
+ /**
145
+ * Allocates a buffer of the specified size.
146
+ * @param {number} size Buffer size
147
+ * @returns {Uint8Array} Buffer
148
+ */
149
+ Writer.alloc = function alloc(size) {
150
+ return new util.Array(size);
151
+ };
152
+
153
+ // Use Uint8Array buffer pool in the browser, just like node does with buffers
154
+ /* istanbul ignore else */
155
+ if (util.Array !== Array)
156
+ Writer.alloc = util.pool(Writer.alloc, util.Array.prototype.subarray);
157
+
158
+ /**
159
+ * Pushes a new operation to the queue.
160
+ * @param {function(Uint8Array, number, *)} fn Function to call
161
+ * @param {number} len Value byte length
162
+ * @param {number} val Value to write
163
+ * @returns {Writer} `this`
164
+ * @private
165
+ */
166
+ Writer.prototype._push = function push(fn, len, val) {
167
+ this.tail = this.tail.next = new Op(fn, len, val);
168
+ this.len += len;
169
+ return this;
170
+ };
171
+
172
+ function writeByte(val, buf, pos) {
173
+ buf[pos] = val & 255;
174
+ }
175
+
176
+ function writeVarint32(val, buf, pos) {
177
+ while (val > 127) {
178
+ buf[pos++] = val & 127 | 128;
179
+ val >>>= 7;
180
+ }
181
+ buf[pos] = val;
182
+ }
183
+
184
+ /**
185
+ * Constructs a new varint writer operation instance.
186
+ * @classdesc Scheduled varint writer operation.
187
+ * @extends Op
188
+ * @constructor
189
+ * @param {number} len Value byte length
190
+ * @param {number} val Value to write
191
+ * @ignore
192
+ */
193
+ function VarintOp(len, val) {
194
+ this.len = len;
195
+ this.next = undefined;
196
+ this.val = val;
197
+ }
198
+
199
+ VarintOp.prototype = Object.create(Op.prototype);
200
+ VarintOp.prototype.fn = writeVarint32;
201
+
202
+ /**
203
+ * Writes an unsigned 32 bit value as a varint.
204
+ * @param {number} value Value to write
205
+ * @returns {Writer} `this`
206
+ */
207
+ Writer.prototype.uint32 = function write_uint32(value) {
208
+ // here, the call to this.push has been inlined and a varint specific Op subclass is used.
209
+ // uint32 is by far the most frequently used operation and benefits significantly from this.
210
+ this.len += (this.tail = this.tail.next = new VarintOp(
211
+ (value = value >>> 0)
212
+ < 128 ? 1
213
+ : value < 16384 ? 2
214
+ : value < 2097152 ? 3
215
+ : value < 268435456 ? 4
216
+ : 5,
217
+ value)).len;
218
+ return this;
219
+ };
220
+
221
+ /**
222
+ * Writes a signed 32 bit value as a varint.
223
+ * @function
224
+ * @param {number} value Value to write
225
+ * @returns {Writer} `this`
226
+ */
227
+ Writer.prototype.int32 = function write_int32(value) {
228
+ return value < 0
229
+ ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) // 10 bytes per spec
230
+ : this.uint32(value);
231
+ };
232
+
233
+ /**
234
+ * Writes a 32 bit value as a varint, zig-zag encoded.
235
+ * @param {number} value Value to write
236
+ * @returns {Writer} `this`
237
+ */
238
+ Writer.prototype.sint32 = function write_sint32(value) {
239
+ return this.uint32((value << 1 ^ value >> 31) >>> 0);
240
+ };
241
+
242
+ function writeVarint64(val, buf, pos) {
243
+ while (val.hi) {
244
+ buf[pos++] = val.lo & 127 | 128;
245
+ val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0;
246
+ val.hi >>>= 7;
247
+ }
248
+ while (val.lo > 127) {
249
+ buf[pos++] = val.lo & 127 | 128;
250
+ val.lo = val.lo >>> 7;
251
+ }
252
+ buf[pos++] = val.lo;
253
+ }
254
+
255
+ /**
256
+ * Writes an unsigned 64 bit value as a varint.
257
+ * @param {Long|number|string} value Value to write
258
+ * @returns {Writer} `this`
259
+ * @throws {TypeError} If `value` is a string and no long library is present.
260
+ */
261
+ Writer.prototype.uint64 = function write_uint64(value) {
262
+ var bits = LongBits.from(value);
263
+ return this._push(writeVarint64, bits.length(), bits);
264
+ };
265
+
266
+ /**
267
+ * Writes a signed 64 bit value as a varint.
268
+ * @function
269
+ * @param {Long|number|string} value Value to write
270
+ * @returns {Writer} `this`
271
+ * @throws {TypeError} If `value` is a string and no long library is present.
272
+ */
273
+ Writer.prototype.int64 = Writer.prototype.uint64;
274
+
275
+ /**
276
+ * Writes a signed 64 bit value as a varint, zig-zag encoded.
277
+ * @param {Long|number|string} value Value to write
278
+ * @returns {Writer} `this`
279
+ * @throws {TypeError} If `value` is a string and no long library is present.
280
+ */
281
+ Writer.prototype.sint64 = function write_sint64(value) {
282
+ var bits = LongBits.from(value).zzEncode();
283
+ return this._push(writeVarint64, bits.length(), bits);
284
+ };
285
+
286
+ /**
287
+ * Writes a boolish value as a varint.
288
+ * @param {boolean} value Value to write
289
+ * @returns {Writer} `this`
290
+ */
291
+ Writer.prototype.bool = function write_bool(value) {
292
+ return this._push(writeByte, 1, value ? 1 : 0);
293
+ };
294
+
295
+ function writeFixed32(val, buf, pos) {
296
+ buf[pos ] = val & 255;
297
+ buf[pos + 1] = val >>> 8 & 255;
298
+ buf[pos + 2] = val >>> 16 & 255;
299
+ buf[pos + 3] = val >>> 24;
300
+ }
301
+
302
+ /**
303
+ * Writes an unsigned 32 bit value as fixed 32 bits.
304
+ * @param {number} value Value to write
305
+ * @returns {Writer} `this`
306
+ */
307
+ Writer.prototype.fixed32 = function write_fixed32(value) {
308
+ return this._push(writeFixed32, 4, value >>> 0);
309
+ };
310
+
311
+ /**
312
+ * Writes a signed 32 bit value as fixed 32 bits.
313
+ * @function
314
+ * @param {number} value Value to write
315
+ * @returns {Writer} `this`
316
+ */
317
+ Writer.prototype.sfixed32 = Writer.prototype.fixed32;
318
+
319
+ /**
320
+ * Writes an unsigned 64 bit value as fixed 64 bits.
321
+ * @param {Long|number|string} value Value to write
322
+ * @returns {Writer} `this`
323
+ * @throws {TypeError} If `value` is a string and no long library is present.
324
+ */
325
+ Writer.prototype.fixed64 = function write_fixed64(value) {
326
+ var bits = LongBits.from(value);
327
+ return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi);
328
+ };
329
+
330
+ /**
331
+ * Writes a signed 64 bit value as fixed 64 bits.
332
+ * @function
333
+ * @param {Long|number|string} value Value to write
334
+ * @returns {Writer} `this`
335
+ * @throws {TypeError} If `value` is a string and no long library is present.
336
+ */
337
+ Writer.prototype.sfixed64 = Writer.prototype.fixed64;
338
+
339
+ /**
340
+ * Writes a float (32 bit).
341
+ * @function
342
+ * @param {number} value Value to write
343
+ * @returns {Writer} `this`
344
+ */
345
+ Writer.prototype.float = function write_float(value) {
346
+ return this._push(util.float.writeFloatLE, 4, value);
347
+ };
348
+
349
+ /**
350
+ * Writes a double (64 bit float).
351
+ * @function
352
+ * @param {number} value Value to write
353
+ * @returns {Writer} `this`
354
+ */
355
+ Writer.prototype.double = function write_double(value) {
356
+ return this._push(util.float.writeDoubleLE, 8, value);
357
+ };
358
+
359
+ var writeBytes = util.Array.prototype.set
360
+ ? function writeBytes_set(val, buf, pos) {
361
+ buf.set(val, pos); // also works for plain array values
362
+ }
363
+ /* istanbul ignore next */
364
+ : function writeBytes_for(val, buf, pos) {
365
+ for (var i = 0; i < val.length; ++i)
366
+ buf[pos + i] = val[i];
367
+ };
368
+
369
+ /**
370
+ * Writes a sequence of bytes.
371
+ * @param {Uint8Array|string} value Buffer or base64 encoded string to write
372
+ * @returns {Writer} `this`
373
+ */
374
+ Writer.prototype.bytes = function write_bytes(value) {
375
+ var len = value.length >>> 0;
376
+ if (!len)
377
+ return this._push(writeByte, 1, 0);
378
+ if (util.isString(value)) {
379
+ var buf = Writer.alloc(len = base64.length(value));
380
+ base64.decode(value, buf, 0);
381
+ value = buf;
382
+ }
383
+ return this.uint32(len)._push(writeBytes, len, value);
384
+ };
385
+
386
+ /**
387
+ * Writes a string.
388
+ * @param {string} value Value to write
389
+ * @returns {Writer} `this`
390
+ */
391
+ Writer.prototype.string = function write_string(value) {
392
+ var len = utf8.length(value);
393
+ return len
394
+ ? this.uint32(len)._push(utf8.write, len, value)
395
+ : this._push(writeByte, 1, 0);
396
+ };
397
+
398
+ /**
399
+ * Forks this writer's state by pushing it to a stack.
400
+ * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.
401
+ * @returns {Writer} `this`
402
+ */
403
+ Writer.prototype.fork = function fork() {
404
+ this.states = new State(this);
405
+ this.head = this.tail = new Op(noop, 0, 0);
406
+ this.len = 0;
407
+ return this;
408
+ };
409
+
410
+ /**
411
+ * Resets this instance to the last state.
412
+ * @returns {Writer} `this`
413
+ */
414
+ Writer.prototype.reset = function reset() {
415
+ if (this.states) {
416
+ this.head = this.states.head;
417
+ this.tail = this.states.tail;
418
+ this.len = this.states.len;
419
+ this.states = this.states.next;
420
+ } else {
421
+ this.head = this.tail = new Op(noop, 0, 0);
422
+ this.len = 0;
423
+ }
424
+ return this;
425
+ };
426
+
427
+ /**
428
+ * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.
429
+ * @returns {Writer} `this`
430
+ */
431
+ Writer.prototype.ldelim = function ldelim() {
432
+ var head = this.head,
433
+ tail = this.tail,
434
+ len = this.len;
435
+ this.reset().uint32(len);
436
+ if (len) {
437
+ this.tail.next = head.next; // skip noop
438
+ this.tail = tail;
439
+ this.len += len;
440
+ }
441
+ return this;
442
+ };
443
+
444
+ /**
445
+ * Finishes the write operation.
446
+ * @returns {Uint8Array} Finished buffer
447
+ */
448
+ Writer.prototype.finish = function finish() {
449
+ var head = this.head.next, // skip noop
450
+ buf = this.constructor.alloc(this.len),
451
+ pos = 0;
452
+ while (head) {
453
+ head.fn(head.val, buf, pos);
454
+ pos += head.len;
455
+ head = head.next;
456
+ }
457
+ // this.head = this.tail = null;
458
+ return buf;
459
+ };
460
+
461
+ Writer._configure = function(BufferWriter_) {
462
+ BufferWriter = BufferWriter_;
463
+ Writer.create = create();
464
+ BufferWriter._configure();
465
+ };