@bufbuild/protobuf 2.12.1 → 2.13.0

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 (64) hide show
  1. package/README.md +2 -2
  2. package/dist/commonjs/codegenv1/symbols.d.ts +5 -0
  3. package/dist/commonjs/codegenv2/enum.d.ts +15 -4
  4. package/dist/commonjs/codegenv2/enum.js +18 -0
  5. package/dist/commonjs/codegenv2/symbols.d.ts +10 -0
  6. package/dist/commonjs/codegenv2/symbols.js +2 -0
  7. package/dist/commonjs/create.js +3 -3
  8. package/dist/commonjs/descriptors.d.ts +2 -2
  9. package/dist/commonjs/index.d.ts +1 -0
  10. package/dist/commonjs/index.js +1 -0
  11. package/dist/commonjs/reflect/reflect.js +3 -2
  12. package/dist/commonjs/reflect/unsafe.js +1 -1
  13. package/dist/commonjs/registry.js +19 -19
  14. package/dist/commonjs/to-binary.js +1 -1
  15. package/dist/commonjs/to-json.js +2 -2
  16. package/dist/commonjs/txtpb/from-text.d.ts +35 -0
  17. package/dist/commonjs/txtpb/from-text.js +684 -0
  18. package/dist/commonjs/txtpb/index.d.ts +4 -0
  19. package/dist/commonjs/txtpb/index.js +21 -0
  20. package/dist/commonjs/txtpb/is-group-like.d.ts +19 -0
  21. package/dist/commonjs/txtpb/is-group-like.js +47 -0
  22. package/dist/commonjs/txtpb/reader.d.ts +91 -0
  23. package/dist/commonjs/txtpb/reader.js +481 -0
  24. package/dist/commonjs/txtpb/to-text.d.ts +34 -0
  25. package/dist/commonjs/txtpb/to-text.js +358 -0
  26. package/dist/commonjs/txtpb/writer.d.ts +76 -0
  27. package/dist/commonjs/txtpb/writer.js +220 -0
  28. package/dist/commonjs/types.d.ts +7 -0
  29. package/dist/commonjs/unknown-enum.d.ts +10 -0
  30. package/dist/commonjs/unknown-enum.js +26 -0
  31. package/dist/commonjs/wire/size-delimited.d.ts +19 -1
  32. package/dist/commonjs/wire/size-delimited.js +54 -16
  33. package/dist/esm/codegenv1/symbols.d.ts +5 -0
  34. package/dist/esm/codegenv2/enum.d.ts +15 -4
  35. package/dist/esm/codegenv2/enum.js +17 -0
  36. package/dist/esm/codegenv2/symbols.d.ts +10 -0
  37. package/dist/esm/codegenv2/symbols.js +2 -0
  38. package/dist/esm/create.js +3 -3
  39. package/dist/esm/descriptors.d.ts +2 -2
  40. package/dist/esm/index.d.ts +1 -0
  41. package/dist/esm/index.js +1 -0
  42. package/dist/esm/reflect/reflect.js +3 -2
  43. package/dist/esm/reflect/unsafe.js +1 -1
  44. package/dist/esm/registry.js +19 -19
  45. package/dist/esm/to-binary.js +1 -1
  46. package/dist/esm/to-json.js +2 -2
  47. package/dist/esm/txtpb/from-text.d.ts +35 -0
  48. package/dist/esm/txtpb/from-text.js +680 -0
  49. package/dist/esm/txtpb/index.d.ts +4 -0
  50. package/dist/esm/txtpb/index.js +15 -0
  51. package/dist/esm/txtpb/is-group-like.d.ts +19 -0
  52. package/dist/esm/txtpb/is-group-like.js +44 -0
  53. package/dist/esm/txtpb/reader.d.ts +91 -0
  54. package/dist/esm/txtpb/reader.js +477 -0
  55. package/dist/esm/txtpb/to-text.d.ts +34 -0
  56. package/dist/esm/txtpb/to-text.js +355 -0
  57. package/dist/esm/txtpb/writer.d.ts +76 -0
  58. package/dist/esm/txtpb/writer.js +214 -0
  59. package/dist/esm/types.d.ts +7 -0
  60. package/dist/esm/unknown-enum.d.ts +10 -0
  61. package/dist/esm/unknown-enum.js +23 -0
  62. package/dist/esm/wire/size-delimited.d.ts +19 -1
  63. package/dist/esm/wire/size-delimited.js +54 -16
  64. package/package.json +16 -3
@@ -12,6 +12,20 @@ import type { BinaryReadOptions } from "../from-binary.js";
12
12
  * For details, see https://github.com/protocolbuffers/protobuf/issues/10229
13
13
  */
14
14
  export declare function sizeDelimitedEncode<Desc extends DescMessage>(messageDesc: Desc, message: MessageShape<Desc>, options?: BinaryWriteOptions): Uint8Array;
15
+ /**
16
+ * Options for parsing size-delimited messages from a stream.
17
+ */
18
+ export interface SizeDelimitedDecodeOptions extends BinaryReadOptions {
19
+ /**
20
+ * Limit the size of a single message in the stream, in bytes.
21
+ *
22
+ * If a message in the stream declares a size exceeding this limit, an
23
+ * error is raised before the message is buffered.
24
+ *
25
+ * The default limit is 64 MiB.
26
+ */
27
+ readMaxBytes: number;
28
+ }
15
29
  /**
16
30
  * Parse a stream of size-delimited messages.
17
31
  *
@@ -20,8 +34,12 @@ export declare function sizeDelimitedEncode<Desc extends DescMessage>(messageDes
20
34
  *
21
35
  * This size-delimited format is compatible with other implementations.
22
36
  * For details, see https://github.com/protocolbuffers/protobuf/issues/10229
37
+ *
38
+ * Messages exceeding the limit given with the option readMaxBytes raise an
39
+ * error. The limit is 64 MiB by default. All other options are the
40
+ * standard binary read options, passed through to decode each message.
23
41
  */
24
- export declare function sizeDelimitedDecodeStream<Desc extends DescMessage>(messageDesc: Desc, iterable: AsyncIterable<Uint8Array>, options?: Partial<BinaryReadOptions>): AsyncIterableIterator<MessageShape<Desc>>;
42
+ export declare function sizeDelimitedDecodeStream<Desc extends DescMessage>(messageDesc: Desc, iterable: AsyncIterable<Uint8Array>, options?: Partial<SizeDelimitedDecodeOptions>): AsyncIterableIterator<MessageShape<Desc>>;
25
43
  /**
26
44
  * Decodes the size from the given size-delimited message, which may be
27
45
  * incomplete.
@@ -48,6 +48,34 @@ export function sizeDelimitedEncode(messageDesc, message, options) {
48
48
  writer.bytes(toBinary(messageDesc, message, options));
49
49
  return writer.finish();
50
50
  }
51
+ // Default for SizeDelimitedDecodeOptions.readMaxBytes.
52
+ const defaultReadMaxBytes = 64 * 1024 * 1024; // 64 MiB
53
+ /**
54
+ * A growable byte buffer. Used in place of a resizable ArrayBuffer, which is
55
+ * not widely available.
56
+ */
57
+ class ByteBuffer {
58
+ constructor() {
59
+ this.buffer = new Uint8Array(0);
60
+ this.length = 0;
61
+ }
62
+ get byteLength() {
63
+ return this.length;
64
+ }
65
+ bytes() {
66
+ return this.buffer.subarray(0, this.length);
67
+ }
68
+ append(chunk) {
69
+ const newByteLength = this.length + chunk.byteLength;
70
+ if (newByteLength > this.buffer.byteLength) {
71
+ const grown = new Uint8Array(Math.max(this.buffer.byteLength * 2, newByteLength));
72
+ grown.set(this.buffer.subarray(0, this.length));
73
+ this.buffer = grown;
74
+ }
75
+ this.buffer.set(chunk, this.length);
76
+ this.length += chunk.byteLength;
77
+ }
78
+ }
51
79
  /**
52
80
  * Parse a stream of size-delimited messages.
53
81
  *
@@ -56,43 +84,53 @@ export function sizeDelimitedEncode(messageDesc, message, options) {
56
84
  *
57
85
  * This size-delimited format is compatible with other implementations.
58
86
  * For details, see https://github.com/protocolbuffers/protobuf/issues/10229
87
+ *
88
+ * Messages exceeding the limit given with the option readMaxBytes raise an
89
+ * error. The limit is 64 MiB by default. All other options are the
90
+ * standard binary read options, passed through to decode each message.
59
91
  */
60
92
  export function sizeDelimitedDecodeStream(messageDesc, iterable, options) {
61
93
  return __asyncGenerator(this, arguments, function* sizeDelimitedDecodeStream_1() {
62
94
  var _a, e_1, _b, _c;
63
- // append chunk to buffer, returning updated buffer
64
- function append(buffer, chunk) {
65
- const n = new Uint8Array(buffer.byteLength + chunk.byteLength);
66
- n.set(buffer);
67
- n.set(chunk, buffer.length);
68
- return n;
69
- }
70
- let buffer = new Uint8Array(0);
95
+ var _d;
96
+ const readMaxBytes = (_d = options === null || options === void 0 ? void 0 : options.readMaxBytes) !== null && _d !== void 0 ? _d : defaultReadMaxBytes;
97
+ let buffer = new ByteBuffer();
71
98
  try {
72
- for (var _d = true, iterable_1 = __asyncValues(iterable), iterable_1_1; iterable_1_1 = yield __await(iterable_1.next()), _a = iterable_1_1.done, !_a; _d = true) {
99
+ for (var _e = true, iterable_1 = __asyncValues(iterable), iterable_1_1; iterable_1_1 = yield __await(iterable_1.next()), _a = iterable_1_1.done, !_a; _e = true) {
73
100
  _c = iterable_1_1.value;
74
- _d = false;
101
+ _e = false;
75
102
  const chunk = _c;
76
- buffer = append(buffer, chunk);
103
+ buffer.append(chunk);
104
+ const bytes = buffer.bytes();
105
+ let offset = 0;
77
106
  for (;;) {
78
- const size = sizeDelimitedPeek(buffer);
107
+ const size = sizeDelimitedPeek(bytes.subarray(offset));
79
108
  if (size.eof) {
80
109
  // size is incomplete, buffer more data
81
110
  break;
82
111
  }
83
- if (size.offset + size.size > buffer.byteLength) {
112
+ if (size.size > readMaxBytes) {
113
+ throw new Error(`message size ${size.size} is larger than configured readMaxBytes ${readMaxBytes}`);
114
+ }
115
+ const messageStart = offset + size.offset;
116
+ const messageEnd = messageStart + size.size;
117
+ if (messageEnd > bytes.byteLength) {
84
118
  // message is incomplete, buffer more data
85
119
  break;
86
120
  }
87
- yield yield __await(fromBinary(messageDesc, buffer.subarray(size.offset, size.offset + size.size), options));
88
- buffer = buffer.subarray(size.offset + size.size);
121
+ yield yield __await(fromBinary(messageDesc, bytes.subarray(messageStart, messageEnd), options));
122
+ offset = messageEnd;
123
+ }
124
+ if (offset > 0) {
125
+ buffer = new ByteBuffer();
126
+ buffer.append(bytes.subarray(offset));
89
127
  }
90
128
  }
91
129
  }
92
130
  catch (e_1_1) { e_1 = { error: e_1_1 }; }
93
131
  finally {
94
132
  try {
95
- if (!_d && !_a && (_b = iterable_1.return)) yield __await(_b.call(iterable_1));
133
+ if (!_e && !_a && (_b = iterable_1.return)) yield __await(_b.call(iterable_1));
96
134
  }
97
135
  finally { if (e_1) throw e_1.error; }
98
136
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bufbuild/protobuf",
3
- "version": "2.12.1",
3
+ "version": "2.13.0",
4
4
  "license": "(Apache-2.0 AND BSD-3-Clause)",
5
5
  "description": "Protocol Buffers for ECMAScript. The only JavaScript Protobuf library that is fully-compliant with Protobuf conformance tests.",
6
6
  "keywords": [
@@ -29,6 +29,7 @@
29
29
  "type": "module",
30
30
  "sideEffects": false,
31
31
  "tshy": {
32
+ "selfLink": false,
32
33
  "exports": {
33
34
  ".": "./src/index.ts",
34
35
  "./codegenv1": "./src/codegenv1/index.ts",
@@ -36,7 +37,7 @@
36
37
  "./reflect": "./src/reflect/index.ts",
37
38
  "./wkt": "./src/wkt/index.ts",
38
39
  "./wire": "./src/wire/index.ts",
39
- "./package.json": "./package.json"
40
+ "./txtpb": "./src/txtpb/index.ts"
40
41
  }
41
42
  },
42
43
  "devDependencies": {
@@ -107,7 +108,16 @@
107
108
  "default": "./dist/commonjs/wire/index.js"
108
109
  }
109
110
  },
110
- "./package.json": "./package.json"
111
+ "./txtpb": {
112
+ "import": {
113
+ "types": "./dist/esm/txtpb/index.d.ts",
114
+ "default": "./dist/esm/txtpb/index.js"
115
+ },
116
+ "require": {
117
+ "types": "./dist/commonjs/txtpb/index.d.ts",
118
+ "default": "./dist/commonjs/txtpb/index.js"
119
+ }
120
+ }
111
121
  },
112
122
  "main": "./dist/commonjs/index.js",
113
123
  "types": "./dist/commonjs/index.d.ts",
@@ -128,6 +138,9 @@
128
138
  ],
129
139
  "wire": [
130
140
  "./dist/commonjs/wire/index.d.ts"
141
+ ],
142
+ "txtpb": [
143
+ "./dist/commonjs/txtpb/index.d.ts"
131
144
  ]
132
145
  }
133
146
  }