@bufbuild/protobuf 0.0.1-alpha.1 → 0.0.1

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 (127) hide show
  1. package/README.md +21 -1
  2. package/dist/cjs/binary-encoding.js +402 -410
  3. package/dist/cjs/descriptor-registry.js +407 -449
  4. package/dist/cjs/descriptor-set.js +416 -513
  5. package/dist/cjs/field.js +30 -30
  6. package/dist/cjs/google/protobuf/any_pb.js +122 -140
  7. package/dist/cjs/google/protobuf/api_pb.js +177 -224
  8. package/dist/cjs/google/protobuf/compiler/plugin_pb.js +125 -227
  9. package/dist/cjs/google/protobuf/descriptor_pb.js +1029 -1888
  10. package/dist/cjs/google/protobuf/duration_pb.js +72 -88
  11. package/dist/cjs/google/protobuf/empty_pb.js +17 -17
  12. package/dist/cjs/google/protobuf/field_mask_pb.js +77 -94
  13. package/dist/cjs/google/protobuf/source_context_pb.js +25 -25
  14. package/dist/cjs/google/protobuf/struct_pb.js +144 -181
  15. package/dist/cjs/google/protobuf/timestamp_pb.js +86 -123
  16. package/dist/cjs/google/protobuf/type_pb.js +406 -462
  17. package/dist/cjs/google/protobuf/wrappers_pb.js +407 -470
  18. package/dist/cjs/index.js +24 -122
  19. package/dist/cjs/message.js +81 -89
  20. package/dist/cjs/private/assert.js +20 -26
  21. package/dist/cjs/private/base64.js +79 -78
  22. package/dist/cjs/private/binary-format-common.js +195 -208
  23. package/dist/cjs/private/binary-format-proto2.js +75 -109
  24. package/dist/cjs/private/binary-format-proto3.js +57 -90
  25. package/dist/cjs/private/enum.js +38 -43
  26. package/dist/cjs/private/field-list.js +51 -50
  27. package/dist/cjs/private/field-wrapper.js +8 -10
  28. package/dist/cjs/private/field.js +22 -25
  29. package/dist/cjs/private/goog-varint.js +275 -0
  30. package/dist/cjs/private/json-format-common.js +414 -440
  31. package/dist/cjs/private/json-format-proto2.js +78 -89
  32. package/dist/cjs/private/json-format-proto3.js +69 -93
  33. package/dist/cjs/private/message-type.js +26 -27
  34. package/dist/cjs/private/names.js +58 -62
  35. package/dist/cjs/private/proto-runtime.js +11 -16
  36. package/dist/cjs/private/scalars.js +100 -103
  37. package/dist/cjs/private/util-common.js +180 -210
  38. package/dist/cjs/proto-int64.js +111 -112
  39. package/dist/cjs/proto2.js +50 -63
  40. package/dist/cjs/proto3.js +61 -74
  41. package/dist/cjs/service-type.js +14 -17
  42. package/dist/cjs/type-registry.js +33 -31
  43. package/dist/esm/binary-encoding.js +401 -414
  44. package/dist/esm/descriptor-registry.js +409 -458
  45. package/dist/esm/descriptor-set.js +417 -478
  46. package/dist/esm/field.js +29 -29
  47. package/dist/esm/google/protobuf/any_pb.js +122 -140
  48. package/dist/esm/google/protobuf/api_pb.js +177 -197
  49. package/dist/esm/google/protobuf/compiler/plugin_pb.js +123 -216
  50. package/dist/esm/google/protobuf/descriptor_pb.js +1013 -1804
  51. package/dist/esm/google/protobuf/duration_pb.js +72 -88
  52. package/dist/esm/google/protobuf/empty_pb.js +17 -17
  53. package/dist/esm/google/protobuf/field_mask_pb.js +77 -94
  54. package/dist/esm/google/protobuf/source_context_pb.js +25 -25
  55. package/dist/esm/google/protobuf/struct_pb.js +143 -180
  56. package/dist/esm/google/protobuf/timestamp_pb.js +86 -123
  57. package/dist/esm/google/protobuf/type_pb.js +401 -421
  58. package/dist/esm/google/protobuf/wrappers_pb.js +406 -397
  59. package/dist/esm/index.js +1 -1
  60. package/dist/esm/message.js +81 -89
  61. package/dist/esm/private/assert.js +19 -21
  62. package/dist/esm/private/base64.js +79 -78
  63. package/dist/esm/private/binary-format-common.js +196 -207
  64. package/dist/esm/private/binary-format-proto2.js +76 -81
  65. package/dist/esm/private/binary-format-proto3.js +58 -67
  66. package/dist/esm/private/enum.js +38 -43
  67. package/dist/esm/private/field-list.js +51 -50
  68. package/dist/esm/private/field-wrapper.js +8 -10
  69. package/dist/esm/private/field.js +22 -22
  70. package/dist/esm/private/goog-varint.js +266 -0
  71. package/dist/esm/private/json-format-common.js +414 -435
  72. package/dist/esm/private/json-format-proto2.js +76 -81
  73. package/dist/esm/private/json-format-proto3.js +66 -80
  74. package/dist/esm/private/message-type.js +27 -28
  75. package/dist/esm/private/names.js +57 -57
  76. package/dist/esm/private/proto-runtime.js +11 -11
  77. package/dist/esm/private/scalars.js +99 -99
  78. package/dist/esm/private/util-common.js +180 -192
  79. package/dist/esm/proto-int64.js +111 -112
  80. package/dist/esm/proto2.js +50 -57
  81. package/dist/esm/proto3.js +61 -68
  82. package/dist/esm/service-type.js +12 -12
  83. package/dist/esm/type-registry.js +33 -31
  84. package/dist/types/binary-encoding.d.ts +398 -398
  85. package/dist/types/binary-format.d.ts +69 -91
  86. package/dist/types/descriptor-registry.d.ts +23 -29
  87. package/dist/types/descriptor-set.d.ts +107 -128
  88. package/dist/types/enum.d.ts +21 -21
  89. package/dist/types/field-list.d.ts +21 -21
  90. package/dist/types/field.d.ts +191 -231
  91. package/dist/types/google/protobuf/any_pb.d.ts +56 -77
  92. package/dist/types/google/protobuf/api_pb.d.ts +144 -187
  93. package/dist/types/google/protobuf/compiler/plugin_pb.d.ts +195 -257
  94. package/dist/types/google/protobuf/descriptor_pb.d.ts +1360 -1737
  95. package/dist/types/google/protobuf/duration_pb.d.ts +30 -50
  96. package/dist/types/google/protobuf/empty_pb.d.ts +9 -28
  97. package/dist/types/google/protobuf/field_mask_pb.d.ts +17 -37
  98. package/dist/types/google/protobuf/source_context_pb.d.ts +16 -35
  99. package/dist/types/google/protobuf/struct_pb.d.ts +64 -115
  100. package/dist/types/google/protobuf/timestamp_pb.d.ts +31 -51
  101. package/dist/types/google/protobuf/type_pb.d.ts +355 -422
  102. package/dist/types/google/protobuf/wrappers_pb.d.ts +181 -297
  103. package/dist/types/index.d.ts +4 -27
  104. package/dist/types/json-format.d.ts +70 -89
  105. package/dist/types/message-type.d.ts +38 -46
  106. package/dist/types/message.d.ts +73 -99
  107. package/dist/types/private/assert.d.ts +1 -4
  108. package/dist/types/private/binary-format-common.d.ts +6 -32
  109. package/dist/types/private/enum.d.ts +4 -11
  110. package/dist/types/private/field-list.d.ts +14 -21
  111. package/dist/types/private/field-wrapper.d.ts +5 -11
  112. package/dist/types/private/field.d.ts +12 -12
  113. package/dist/types/{google/varint.d.ts → private/goog-varint.d.ts} +6 -13
  114. package/dist/types/private/json-format-common.d.ts +5 -27
  115. package/dist/types/private/message-type.d.ts +3 -8
  116. package/dist/types/private/names.d.ts +1 -4
  117. package/dist/types/private/options-map.d.ts +1 -1
  118. package/dist/types/private/proto-runtime.d.ts +29 -42
  119. package/dist/types/private/scalars.d.ts +5 -12
  120. package/dist/types/private/util-common.d.ts +1 -4
  121. package/dist/types/private/util.d.ts +29 -41
  122. package/dist/types/proto-int64.d.ts +42 -42
  123. package/dist/types/service-type.d.ts +37 -57
  124. package/dist/types/type-registry.d.ts +13 -15
  125. package/package.json +2 -2
  126. package/dist/cjs/google/varint.js +0 -280
  127. package/dist/esm/google/varint.js +0 -265
@@ -1,4 +1,4 @@
1
- import { BinaryReader, BinaryWriter, WireType } from "../binary-encoding.js";
1
+ import { BinaryReader, BinaryWriter, WireType, } from "../binary-encoding.js";
2
2
  import { ScalarType } from "../field.js";
3
3
  import { unwrapField, wrapField } from "./field-wrapper.js";
4
4
  import { scalarDefaultValue, scalarTypeInfo } from "./scalars.js";
@@ -7,237 +7,226 @@ import { assert } from "./assert.js";
7
7
  const unknownFieldsSymbol = Symbol("@bufbuild/protobuf/unknown-fields");
8
8
  // Default options for parsing binary data.
9
9
  const readDefaults = {
10
- readUnknownFields: true,
11
- readerFactory: (bytes) => new BinaryReader(bytes),
10
+ readUnknownFields: true,
11
+ readerFactory: (bytes) => new BinaryReader(bytes),
12
12
  };
13
13
  // Default options for serializing binary data.
14
14
  const writeDefaults = {
15
- writeUnknownFields: true,
16
- writerFactory: () => new BinaryWriter(),
15
+ writeUnknownFields: true,
16
+ writerFactory: () => new BinaryWriter(),
17
17
  };
18
18
  function makeReadOptions(options) {
19
- return options ? { ...readDefaults, ...options } : readDefaults;
19
+ return options ? { ...readDefaults, ...options } : readDefaults;
20
20
  }
21
21
  function makeWriteOptions(options) {
22
- return options ? { ...writeDefaults, ...options } : writeDefaults;
22
+ return options ? { ...writeDefaults, ...options } : writeDefaults;
23
23
  }
24
24
  export function makeBinaryFormatCommon() {
25
- return {
26
- makeReadOptions,
27
- makeWriteOptions,
28
- listUnknownFields(message) {
29
- return message[unknownFieldsSymbol] ?? [];
30
- },
31
- discardUnknownFields(message) {
32
- delete message[unknownFieldsSymbol];
33
- },
34
- writeUnknownFields(message, writer) {
35
- const m = message;
36
- const c = m[unknownFieldsSymbol];
37
- if (c) {
38
- for (const f of c) {
39
- writer.tag(f.no, f.wireType).raw(f.data);
40
- }
41
- }
42
- },
43
- onUnknownField(message, no, wireType, data) {
44
- const m = message;
45
- if (!Array.isArray(m[unknownFieldsSymbol])) {
46
- m[unknownFieldsSymbol] = [];
47
- }
48
- m[unknownFieldsSymbol].push({ no, wireType, data });
49
- },
50
- readMessage(message, reader, length, options) {
51
- const type = message.getType();
52
- const end = length === undefined ? reader.len : reader.pos + length;
53
- while (reader.pos < end) {
54
- const [fieldNo, wireType] = reader.tag(),
55
- field = type.fields.find(fieldNo);
56
- if (!field) {
57
- const data = reader.skip(wireType);
58
- if (options.readUnknownFields) {
59
- this.onUnknownField(message, fieldNo, wireType, data);
60
- }
61
- continue;
62
- }
63
- let target = message,
64
- repeated = field.repeated,
65
- localName = field.localName;
66
- if (field.oneof) {
67
- target = target[field.oneof.localName];
68
- if (target.case != localName) {
69
- delete target.value;
70
- }
71
- target.case = localName;
72
- localName = "value";
73
- }
74
- switch (field.kind) {
75
- case "scalar":
76
- case "enum":
77
- const scalarType =
78
- field.kind == "enum" ? ScalarType.INT32 : field.T;
79
- if (repeated) {
80
- let arr = target[localName]; // safe to assume presence of array, oneof cannot contain repeated values
81
- if (
82
- wireType == WireType.LengthDelimited &&
83
- scalarType != ScalarType.STRING &&
84
- scalarType != ScalarType.BYTES
85
- ) {
86
- let e = reader.uint32() + reader.pos;
87
- while (reader.pos < e) {
88
- arr.push(readScalar(reader, scalarType));
25
+ return {
26
+ makeReadOptions,
27
+ makeWriteOptions,
28
+ listUnknownFields(message) {
29
+ return message[unknownFieldsSymbol] ?? [];
30
+ },
31
+ discardUnknownFields(message) {
32
+ delete message[unknownFieldsSymbol];
33
+ },
34
+ writeUnknownFields(message, writer) {
35
+ const m = message;
36
+ const c = m[unknownFieldsSymbol];
37
+ if (c) {
38
+ for (const f of c) {
39
+ writer.tag(f.no, f.wireType).raw(f.data);
89
40
  }
90
- } else {
91
- arr.push(readScalar(reader, scalarType));
92
- }
93
- } else {
94
- target[localName] = readScalar(reader, scalarType);
95
41
  }
96
- break;
97
- case "message":
98
- const messageType = field.T;
99
- if (repeated) {
100
- // safe to assume presence of array, oneof cannot contain repeated values
101
- target[localName].push(
102
- messageType.fromBinary(reader.bytes(), options)
103
- );
104
- } else {
105
- if (target[localName] instanceof messageType) {
106
- target[localName].fromBinary(reader.bytes(), options);
107
- } else {
108
- target[localName] = unwrapField(
109
- messageType,
110
- messageType.fromBinary(reader.bytes(), options)
111
- );
112
- }
42
+ },
43
+ onUnknownField(message, no, wireType, data) {
44
+ const m = message;
45
+ if (!Array.isArray(m[unknownFieldsSymbol])) {
46
+ m[unknownFieldsSymbol] = [];
113
47
  }
114
- break;
115
- case "map":
116
- let [mapKey, mapVal] = readMapEntry(field, reader, options);
117
- // safe to assume presence of map object, oneof cannot contain repeated values
118
- target[localName][mapKey] = mapVal;
119
- break;
120
- }
121
- }
122
- },
123
- };
48
+ m[unknownFieldsSymbol].push({ no, wireType, data });
49
+ },
50
+ readMessage(message, reader, length, options) {
51
+ const type = message.getType();
52
+ const end = length === undefined ? reader.len : reader.pos + length;
53
+ while (reader.pos < end) {
54
+ const [fieldNo, wireType] = reader.tag(), field = type.fields.find(fieldNo);
55
+ if (!field) {
56
+ const data = reader.skip(wireType);
57
+ if (options.readUnknownFields) {
58
+ this.onUnknownField(message, fieldNo, wireType, data);
59
+ }
60
+ continue;
61
+ }
62
+ let target = message, repeated = field.repeated, localName = field.localName;
63
+ if (field.oneof) {
64
+ target = target[field.oneof.localName];
65
+ if (target.case != localName) {
66
+ delete target.value;
67
+ }
68
+ target.case = localName;
69
+ localName = "value";
70
+ }
71
+ switch (field.kind) {
72
+ case "scalar":
73
+ case "enum":
74
+ const scalarType = field.kind == "enum" ? ScalarType.INT32 : field.T;
75
+ if (repeated) {
76
+ let arr = target[localName]; // safe to assume presence of array, oneof cannot contain repeated values
77
+ if (wireType == WireType.LengthDelimited &&
78
+ scalarType != ScalarType.STRING &&
79
+ scalarType != ScalarType.BYTES) {
80
+ let e = reader.uint32() + reader.pos;
81
+ while (reader.pos < e) {
82
+ arr.push(readScalar(reader, scalarType));
83
+ }
84
+ }
85
+ else {
86
+ arr.push(readScalar(reader, scalarType));
87
+ }
88
+ }
89
+ else {
90
+ target[localName] = readScalar(reader, scalarType);
91
+ }
92
+ break;
93
+ case "message":
94
+ const messageType = field.T;
95
+ if (repeated) {
96
+ // safe to assume presence of array, oneof cannot contain repeated values
97
+ target[localName].push(messageType.fromBinary(reader.bytes(), options));
98
+ }
99
+ else {
100
+ if (target[localName] instanceof messageType) {
101
+ target[localName].fromBinary(reader.bytes(), options);
102
+ }
103
+ else {
104
+ target[localName] = unwrapField(messageType, messageType.fromBinary(reader.bytes(), options));
105
+ }
106
+ }
107
+ break;
108
+ case "map":
109
+ let [mapKey, mapVal] = readMapEntry(field, reader, options);
110
+ // safe to assume presence of map object, oneof cannot contain repeated values
111
+ target[localName][mapKey] = mapVal;
112
+ break;
113
+ }
114
+ }
115
+ },
116
+ };
124
117
  }
125
118
  // Read a map field, expecting key field = 1, value field = 2
126
119
  function readMapEntry(field, reader, options) {
127
- const length = reader.uint32(),
128
- end = reader.pos + length;
129
- let key, val;
130
- while (reader.pos < end) {
131
- let [fieldNo] = reader.tag();
132
- switch (fieldNo) {
133
- case 1:
134
- key = readScalar(reader, field.K);
135
- break;
136
- case 2:
137
- switch (field.V.kind) {
138
- case "scalar":
139
- val = readScalar(reader, field.V.T);
140
- break;
141
- case "enum":
142
- val = reader.int32();
143
- break;
144
- case "message":
145
- val = field.V.T.fromBinary(reader.bytes(), options);
146
- break;
120
+ const length = reader.uint32(), end = reader.pos + length;
121
+ let key, val;
122
+ while (reader.pos < end) {
123
+ let [fieldNo] = reader.tag();
124
+ switch (fieldNo) {
125
+ case 1:
126
+ key = readScalar(reader, field.K);
127
+ break;
128
+ case 2:
129
+ switch (field.V.kind) {
130
+ case "scalar":
131
+ val = readScalar(reader, field.V.T);
132
+ break;
133
+ case "enum":
134
+ val = reader.int32();
135
+ break;
136
+ case "message":
137
+ val = field.V.T.fromBinary(reader.bytes(), options);
138
+ break;
139
+ }
140
+ break;
147
141
  }
148
- break;
149
142
  }
150
- }
151
- if (key === undefined) {
152
- let keyRaw = scalarDefaultValue(field.K);
153
- key = field.K == ScalarType.BOOL ? keyRaw.toString() : keyRaw;
154
- }
155
- if (typeof key != "string" && typeof key != "number") {
156
- key = key.toString();
157
- }
158
- if (val === undefined) {
159
- switch (field.V.kind) {
160
- case "scalar":
161
- val = scalarDefaultValue(field.V.T);
162
- break;
163
- case "enum":
164
- val = 0;
165
- break;
166
- case "message":
167
- val = new field.V.T();
168
- break;
143
+ if (key === undefined) {
144
+ let keyRaw = scalarDefaultValue(field.K);
145
+ key =
146
+ field.K == ScalarType.BOOL
147
+ ? keyRaw.toString()
148
+ : keyRaw;
169
149
  }
170
- }
171
- return [key, val];
150
+ if (typeof key != "string" && typeof key != "number") {
151
+ key = key.toString();
152
+ }
153
+ if (val === undefined) {
154
+ switch (field.V.kind) {
155
+ case "scalar":
156
+ val = scalarDefaultValue(field.V.T);
157
+ break;
158
+ case "enum":
159
+ val = 0;
160
+ break;
161
+ case "message":
162
+ val = new field.V.T();
163
+ break;
164
+ }
165
+ }
166
+ return [key, val];
172
167
  }
173
168
  function readScalar(reader, type) {
174
- let [, method] = scalarTypeInfo(type);
175
- return reader[method]();
169
+ let [, method] = scalarTypeInfo(type);
170
+ return reader[method]();
176
171
  }
177
172
  export function writeMapEntry(writer, options, field, key, value) {
178
- writer.tag(field.no, WireType.LengthDelimited);
179
- writer.fork();
180
- // javascript only allows number or string for object properties
181
- // we convert from our representation to the protobuf type
182
- let keyValue = key;
183
- // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check -- we deliberately handle just the special cases for map keys
184
- switch (field.K) {
185
- case ScalarType.INT32:
186
- case ScalarType.FIXED32:
187
- case ScalarType.UINT32:
188
- case ScalarType.SFIXED32:
189
- case ScalarType.SINT32:
190
- keyValue = Number.parseInt(key);
191
- break;
192
- case ScalarType.BOOL:
193
- assert(key == "true" || key == "false");
194
- keyValue = key == "true";
195
- break;
196
- }
197
- // write key, expecting key field number = 1
198
- writeScalar(writer, field.K, 1, keyValue, true);
199
- // write value, expecting value field number = 2
200
- switch (field.V.kind) {
201
- case "scalar":
202
- writeScalar(writer, field.V.T, 2, value, true);
203
- break;
204
- case "enum":
205
- writeScalar(writer, ScalarType.INT32, 2, value, true);
206
- break;
207
- case "message":
208
- writeMessageField(writer, options, field.V.T, 2, value);
209
- break;
210
- }
211
- writer.join();
173
+ writer.tag(field.no, WireType.LengthDelimited);
174
+ writer.fork();
175
+ // javascript only allows number or string for object properties
176
+ // we convert from our representation to the protobuf type
177
+ let keyValue = key;
178
+ // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check -- we deliberately handle just the special cases for map keys
179
+ switch (field.K) {
180
+ case ScalarType.INT32:
181
+ case ScalarType.FIXED32:
182
+ case ScalarType.UINT32:
183
+ case ScalarType.SFIXED32:
184
+ case ScalarType.SINT32:
185
+ keyValue = Number.parseInt(key);
186
+ break;
187
+ case ScalarType.BOOL:
188
+ assert(key == "true" || key == "false");
189
+ keyValue = key == "true";
190
+ break;
191
+ }
192
+ // write key, expecting key field number = 1
193
+ writeScalar(writer, field.K, 1, keyValue, true);
194
+ // write value, expecting value field number = 2
195
+ switch (field.V.kind) {
196
+ case "scalar":
197
+ writeScalar(writer, field.V.T, 2, value, true);
198
+ break;
199
+ case "enum":
200
+ writeScalar(writer, ScalarType.INT32, 2, value, true);
201
+ break;
202
+ case "message":
203
+ writeMessageField(writer, options, field.V.T, 2, value);
204
+ break;
205
+ }
206
+ writer.join();
212
207
  }
213
208
  export function writeMessageField(writer, options, type, fieldNo, value) {
214
- if (value !== undefined) {
215
- const message = wrapField(type, value);
216
- writer
217
- .tag(fieldNo, WireType.LengthDelimited)
218
- .bytes(message.toBinary(options));
219
- }
209
+ if (value !== undefined) {
210
+ const message = wrapField(type, value);
211
+ writer
212
+ .tag(fieldNo, WireType.LengthDelimited)
213
+ .bytes(message.toBinary(options));
214
+ }
220
215
  }
221
- export function writeScalar(
222
- writer,
223
- type,
224
- fieldNo,
225
- value,
226
- emitIntrinsicDefault
227
- ) {
228
- let [wireType, method, isIntrinsicDefault] = scalarTypeInfo(type, value);
229
- if (!isIntrinsicDefault || emitIntrinsicDefault) {
230
- writer.tag(fieldNo, wireType)[method](value);
231
- }
216
+ export function writeScalar(writer, type, fieldNo, value, emitIntrinsicDefault) {
217
+ let [wireType, method, isIntrinsicDefault] = scalarTypeInfo(type, value);
218
+ if (!isIntrinsicDefault || emitIntrinsicDefault) {
219
+ writer.tag(fieldNo, wireType)[method](value);
220
+ }
232
221
  }
233
222
  export function writePacked(writer, type, fieldNo, value) {
234
- if (!value.length) {
235
- return;
236
- }
237
- writer.tag(fieldNo, WireType.LengthDelimited).fork();
238
- let [, method] = scalarTypeInfo(type);
239
- for (let i = 0; i < value.length; i++) {
240
- writer[method](value[i]);
241
- }
242
- writer.join();
223
+ if (!value.length) {
224
+ return;
225
+ }
226
+ writer.tag(fieldNo, WireType.LengthDelimited).fork();
227
+ let [, method] = scalarTypeInfo(type);
228
+ for (let i = 0; i < value.length; i++) {
229
+ writer[method](value[i]);
230
+ }
231
+ writer.join();
243
232
  }
@@ -1,87 +1,82 @@
1
1
  import { ScalarType } from "../field.js";
2
- import {
3
- makeBinaryFormatCommon,
4
- writeMapEntry,
5
- writeMessageField,
6
- writePacked,
7
- writeScalar,
8
- } from "./binary-format-common.js";
2
+ import { makeBinaryFormatCommon, writeMapEntry, writeMessageField, writePacked, writeScalar, } from "./binary-format-common.js";
9
3
  /* eslint-disable @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unnecessary-condition, @typescript-eslint/strict-boolean-expressions, no-case-declarations, prefer-const */
10
4
  export function makeBinaryFormatProto2() {
11
- return {
12
- ...makeBinaryFormatCommon(),
13
- writeMessage(message, writer, options) {
14
- const type = message.getType();
15
- let field;
16
- try {
17
- for (field of type.fields.byNumber()) {
18
- let value, // this will be our field value, whether it is member of a oneof or not
19
- repeated = field.repeated,
20
- localName = field.localName;
21
- if (field.oneof) {
22
- const oneof = message[field.oneof.localName];
23
- if (oneof.case !== localName) {
24
- continue; // field is not selected, skip
5
+ return {
6
+ ...makeBinaryFormatCommon(),
7
+ writeMessage(message, writer, options) {
8
+ const type = message.getType();
9
+ let field;
10
+ try {
11
+ for (field of type.fields.byNumber()) {
12
+ let value, // this will be our field value, whether it is member of a oneof or not
13
+ repeated = field.repeated, localName = field.localName;
14
+ if (field.oneof) {
15
+ const oneof = message[field.oneof.localName];
16
+ if (oneof.case !== localName) {
17
+ continue; // field is not selected, skip
18
+ }
19
+ value = oneof.value;
20
+ }
21
+ else {
22
+ value = message[localName];
23
+ // In contrast to proto3, we raise an error if a non-optional (proto2 required)
24
+ // field is missing a value.
25
+ if (value === undefined && !field.oneof && !field.opt) {
26
+ throw new Error(`cannot encode field ${type.typeName}.${field.name} to JSON: required field not set`);
27
+ }
28
+ }
29
+ switch (field.kind) {
30
+ case "scalar":
31
+ case "enum":
32
+ let scalarType = field.kind == "enum" ? ScalarType.INT32 : field.T;
33
+ if (repeated) {
34
+ if (field.packed) {
35
+ writePacked(writer, scalarType, field.no, value);
36
+ }
37
+ else {
38
+ for (const item of value) {
39
+ writeScalar(writer, scalarType, field.no, item, true);
40
+ }
41
+ }
42
+ }
43
+ else {
44
+ if (value !== undefined) {
45
+ // In contrast to proto3, we do not skip intrinsic default values.
46
+ // Explicit default values are not special cased either.
47
+ writeScalar(writer, scalarType, field.no, value, true);
48
+ }
49
+ }
50
+ break;
51
+ case "message":
52
+ if (repeated) {
53
+ for (const item of value) {
54
+ writeMessageField(writer, options, field.T, field.no, item);
55
+ }
56
+ }
57
+ else {
58
+ writeMessageField(writer, options, field.T, field.no, value);
59
+ }
60
+ break;
61
+ case "map":
62
+ for (const [key, val] of Object.entries(value)) {
63
+ writeMapEntry(writer, options, field, key, val);
64
+ }
65
+ break;
66
+ }
67
+ }
25
68
  }
26
- value = oneof.value;
27
- } else {
28
- value = message[localName];
29
- // In contrast to proto3, we raise an error if a non-optional (proto2 required)
30
- // field is missing a value.
31
- if (value === undefined && !field.oneof && !field.opt) {
32
- throw new Error(
33
- `cannot encode field ${type.typeName}.${field.name} to JSON: required field not set`
34
- );
69
+ catch (e) {
70
+ let m = field
71
+ ? `cannot encode field ${type.typeName}.${field?.name} to binary`
72
+ : `cannot encode message ${type.typeName} to binary`;
73
+ let r = e instanceof Error ? e.message : String(e);
74
+ throw new Error(m + (r.length > 0 ? `: ${r}` : ""));
35
75
  }
36
- }
37
- switch (field.kind) {
38
- case "scalar":
39
- case "enum":
40
- let scalarType =
41
- field.kind == "enum" ? ScalarType.INT32 : field.T;
42
- if (repeated) {
43
- if (field.packed) {
44
- writePacked(writer, scalarType, field.no, value);
45
- } else {
46
- for (const item of value) {
47
- writeScalar(writer, scalarType, field.no, item, true);
48
- }
49
- }
50
- } else {
51
- if (value !== undefined) {
52
- // In contrast to proto3, we do not skip intrinsic default values.
53
- // Explicit default values are not special cased either.
54
- writeScalar(writer, scalarType, field.no, value, true);
55
- }
56
- }
57
- break;
58
- case "message":
59
- if (repeated) {
60
- for (const item of value) {
61
- writeMessageField(writer, options, field.T, field.no, item);
62
- }
63
- } else {
64
- writeMessageField(writer, options, field.T, field.no, value);
65
- }
66
- break;
67
- case "map":
68
- for (const [key, val] of Object.entries(value)) {
69
- writeMapEntry(writer, options, field, key, val);
70
- }
71
- break;
72
- }
73
- }
74
- } catch (e) {
75
- let m = field
76
- ? `cannot encode field ${type.typeName}.${field?.name} to binary`
77
- : `cannot encode message ${type.typeName} to binary`;
78
- let r = e instanceof Error ? e.message : String(e);
79
- throw new Error(m + (r.length > 0 ? `: ${r}` : ""));
80
- }
81
- if (options.writeUnknownFields) {
82
- this.writeUnknownFields(message, writer);
83
- }
84
- return writer;
85
- },
86
- };
76
+ if (options.writeUnknownFields) {
77
+ this.writeUnknownFields(message, writer);
78
+ }
79
+ return writer;
80
+ },
81
+ };
87
82
  }