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