@bufbuild/protobuf 2.0.0-alpha.1 → 2.0.0-alpha.3

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 (201) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/clone.d.ts +1 -1
  3. package/dist/cjs/clone.js +2 -2
  4. package/dist/cjs/codegenv1/boot.d.ts +1 -1
  5. package/dist/cjs/codegenv1/boot.js +3 -5
  6. package/dist/cjs/codegenv1/embed.d.ts +2 -2
  7. package/dist/cjs/codegenv1/embed.js +51 -46
  8. package/dist/cjs/codegenv1/enum.d.ts +1 -1
  9. package/dist/cjs/codegenv1/enum.js +2 -4
  10. package/dist/cjs/codegenv1/extension.d.ts +1 -1
  11. package/dist/cjs/codegenv1/file.d.ts +1 -1
  12. package/dist/cjs/codegenv1/file.js +5 -7
  13. package/dist/cjs/codegenv1/index.d.ts +1 -0
  14. package/dist/cjs/codegenv1/index.js +1 -0
  15. package/dist/cjs/codegenv1/message.d.ts +1 -1
  16. package/dist/cjs/codegenv1/restore-json-names.d.ts +3 -0
  17. package/dist/cjs/codegenv1/restore-json-names.js +3 -0
  18. package/dist/cjs/codegenv1/scalar.d.ts +5 -0
  19. package/dist/cjs/codegenv1/scalar.js +39 -0
  20. package/dist/cjs/codegenv1/service.d.ts +3 -3
  21. package/dist/cjs/codegenv1/symbols.d.ts +9 -0
  22. package/dist/cjs/codegenv1/symbols.js +9 -0
  23. package/dist/cjs/codegenv1/types.d.ts +59 -8
  24. package/dist/cjs/create.d.ts +1 -1
  25. package/dist/cjs/create.js +13 -23
  26. package/dist/cjs/{desc-types.d.ts → descriptors.d.ts} +66 -17
  27. package/dist/cjs/descriptors.js +53 -0
  28. package/dist/cjs/equals.d.ts +1 -1
  29. package/dist/cjs/extensions.d.ts +21 -1
  30. package/dist/cjs/extensions.js +42 -10
  31. package/dist/cjs/fields.d.ts +17 -16
  32. package/dist/cjs/fields.js +17 -10
  33. package/dist/cjs/from-binary.d.ts +2 -2
  34. package/dist/cjs/from-binary.js +31 -41
  35. package/dist/cjs/from-json.d.ts +4 -4
  36. package/dist/cjs/from-json.js +200 -185
  37. package/dist/cjs/index.d.ts +3 -2
  38. package/dist/cjs/index.js +5 -2
  39. package/dist/cjs/is-message.d.ts +1 -1
  40. package/dist/cjs/proto-int64.d.ts +4 -1
  41. package/dist/cjs/proto-int64.js +16 -6
  42. package/dist/cjs/reflect/error.d.ts +1 -1
  43. package/dist/cjs/reflect/guard.d.ts +1 -1
  44. package/dist/cjs/reflect/index.d.ts +0 -1
  45. package/dist/cjs/reflect/index.js +0 -1
  46. package/dist/cjs/reflect/names.d.ts +1 -13
  47. package/dist/cjs/reflect/names.js +2 -40
  48. package/dist/cjs/reflect/nested-types.d.ts +11 -1
  49. package/dist/cjs/reflect/nested-types.js +34 -1
  50. package/dist/cjs/reflect/reflect-check.d.ts +10 -1
  51. package/dist/cjs/reflect/reflect-check.js +126 -9
  52. package/dist/cjs/reflect/reflect-types.d.ts +162 -14
  53. package/dist/cjs/reflect/reflect.d.ts +12 -3
  54. package/dist/cjs/reflect/reflect.js +316 -290
  55. package/dist/cjs/reflect/scalar.d.ts +3 -55
  56. package/dist/cjs/reflect/scalar.js +26 -220
  57. package/dist/cjs/reflect/unsafe.d.ts +1 -1
  58. package/dist/cjs/reflect/unsafe.js +38 -43
  59. package/dist/cjs/{reflect/registry.d.ts → registry.d.ts} +2 -2
  60. package/dist/cjs/{reflect/registry.js → registry.js} +100 -73
  61. package/dist/cjs/to-binary.d.ts +1 -1
  62. package/dist/cjs/to-binary.js +28 -30
  63. package/dist/cjs/to-json.d.ts +7 -6
  64. package/dist/cjs/to-json.js +63 -70
  65. package/dist/cjs/types.d.ts +1 -1
  66. package/dist/cjs/wire/base64-encoding.js +4 -4
  67. package/dist/cjs/wire/binary-encoding.d.ts +25 -3
  68. package/dist/cjs/wire/binary-encoding.js +70 -18
  69. package/dist/cjs/wire/size-delimited.d.ts +1 -1
  70. package/dist/cjs/wire/text-format.d.ts +1 -2
  71. package/dist/cjs/wire/text-format.js +21 -19
  72. package/dist/cjs/wkt/any.d.ts +3 -3
  73. package/dist/cjs/wkt/gen/google/protobuf/any_pb.d.ts +7 -0
  74. package/dist/cjs/wkt/gen/google/protobuf/any_pb.js +7 -2
  75. package/dist/cjs/wkt/gen/google/protobuf/api_pb.d.ts +15 -0
  76. package/dist/cjs/wkt/gen/google/protobuf/api_pb.js +15 -6
  77. package/dist/cjs/wkt/gen/google/protobuf/compiler/plugin_pb.d.ts +22 -0
  78. package/dist/cjs/wkt/gen/google/protobuf/compiler/plugin_pb.js +22 -9
  79. package/dist/cjs/wkt/gen/google/protobuf/descriptor_pb.d.ts +192 -0
  80. package/dist/cjs/wkt/gen/google/protobuf/descriptor_pb.js +187 -84
  81. package/dist/cjs/wkt/gen/google/protobuf/duration_pb.d.ts +7 -0
  82. package/dist/cjs/wkt/gen/google/protobuf/duration_pb.js +7 -2
  83. package/dist/cjs/wkt/gen/google/protobuf/empty_pb.d.ts +7 -0
  84. package/dist/cjs/wkt/gen/google/protobuf/empty_pb.js +7 -2
  85. package/dist/cjs/wkt/gen/google/protobuf/field_mask_pb.d.ts +7 -0
  86. package/dist/cjs/wkt/gen/google/protobuf/field_mask_pb.js +7 -2
  87. package/dist/cjs/wkt/gen/google/protobuf/source_context_pb.d.ts +7 -0
  88. package/dist/cjs/wkt/gen/google/protobuf/source_context_pb.js +7 -2
  89. package/dist/cjs/wkt/gen/google/protobuf/struct_pb.d.ts +18 -0
  90. package/dist/cjs/wkt/gen/google/protobuf/struct_pb.js +18 -7
  91. package/dist/cjs/wkt/gen/google/protobuf/timestamp_pb.d.ts +7 -0
  92. package/dist/cjs/wkt/gen/google/protobuf/timestamp_pb.js +7 -2
  93. package/dist/cjs/wkt/gen/google/protobuf/type_pb.d.ts +32 -0
  94. package/dist/cjs/wkt/gen/google/protobuf/type_pb.js +32 -13
  95. package/dist/cjs/wkt/gen/google/protobuf/wrappers_pb.d.ts +39 -0
  96. package/dist/cjs/wkt/gen/google/protobuf/wrappers_pb.js +39 -18
  97. package/dist/cjs/wkt/wrappers.d.ts +1 -1
  98. package/dist/esm/clone.d.ts +1 -1
  99. package/dist/esm/clone.js +1 -1
  100. package/dist/esm/codegenv1/boot.d.ts +1 -1
  101. package/dist/esm/codegenv1/boot.js +3 -5
  102. package/dist/esm/codegenv1/embed.d.ts +2 -2
  103. package/dist/esm/codegenv1/embed.js +34 -29
  104. package/dist/esm/codegenv1/enum.d.ts +1 -1
  105. package/dist/esm/codegenv1/enum.js +2 -4
  106. package/dist/esm/codegenv1/extension.d.ts +1 -1
  107. package/dist/esm/codegenv1/file.d.ts +1 -1
  108. package/dist/esm/codegenv1/file.js +4 -6
  109. package/dist/esm/codegenv1/index.d.ts +1 -0
  110. package/dist/esm/codegenv1/index.js +1 -0
  111. package/dist/esm/codegenv1/message.d.ts +1 -1
  112. package/dist/esm/codegenv1/restore-json-names.d.ts +3 -0
  113. package/dist/esm/codegenv1/restore-json-names.js +3 -0
  114. package/dist/esm/codegenv1/scalar.d.ts +5 -0
  115. package/dist/esm/codegenv1/scalar.js +35 -0
  116. package/dist/esm/codegenv1/service.d.ts +3 -3
  117. package/dist/esm/codegenv1/symbols.d.ts +9 -0
  118. package/dist/esm/codegenv1/symbols.js +9 -0
  119. package/dist/esm/codegenv1/types.d.ts +59 -8
  120. package/dist/esm/create.d.ts +1 -1
  121. package/dist/esm/create.js +11 -21
  122. package/dist/esm/{desc-types.d.ts → descriptors.d.ts} +66 -17
  123. package/dist/esm/descriptors.js +50 -0
  124. package/dist/esm/equals.d.ts +1 -1
  125. package/dist/esm/extensions.d.ts +21 -1
  126. package/dist/esm/extensions.js +39 -9
  127. package/dist/esm/fields.d.ts +17 -16
  128. package/dist/esm/fields.js +17 -10
  129. package/dist/esm/from-binary.d.ts +2 -2
  130. package/dist/esm/from-binary.js +13 -23
  131. package/dist/esm/from-json.d.ts +4 -4
  132. package/dist/esm/from-json.js +193 -178
  133. package/dist/esm/index.d.ts +3 -2
  134. package/dist/esm/index.js +3 -2
  135. package/dist/esm/is-message.d.ts +1 -1
  136. package/dist/esm/proto-int64.d.ts +4 -1
  137. package/dist/esm/proto-int64.js +16 -6
  138. package/dist/esm/reflect/error.d.ts +1 -1
  139. package/dist/esm/reflect/guard.d.ts +1 -1
  140. package/dist/esm/reflect/index.d.ts +0 -1
  141. package/dist/esm/reflect/index.js +0 -1
  142. package/dist/esm/reflect/names.d.ts +1 -13
  143. package/dist/esm/reflect/names.js +1 -38
  144. package/dist/esm/reflect/nested-types.d.ts +11 -1
  145. package/dist/esm/reflect/nested-types.js +32 -0
  146. package/dist/esm/reflect/reflect-check.d.ts +10 -1
  147. package/dist/esm/reflect/reflect-check.js +119 -2
  148. package/dist/esm/reflect/reflect-types.d.ts +162 -14
  149. package/dist/esm/reflect/reflect-types.js +1 -0
  150. package/dist/esm/reflect/reflect.d.ts +12 -3
  151. package/dist/esm/reflect/reflect.js +305 -279
  152. package/dist/esm/reflect/scalar.d.ts +3 -55
  153. package/dist/esm/reflect/scalar.js +14 -205
  154. package/dist/esm/reflect/unsafe.d.ts +1 -1
  155. package/dist/esm/reflect/unsafe.js +38 -43
  156. package/dist/esm/{reflect/registry.d.ts → registry.d.ts} +2 -2
  157. package/dist/esm/{reflect/registry.js → registry.js} +90 -63
  158. package/dist/esm/to-binary.d.ts +1 -1
  159. package/dist/esm/to-binary.js +2 -4
  160. package/dist/esm/to-json.d.ts +7 -6
  161. package/dist/esm/to-json.js +48 -55
  162. package/dist/esm/types.d.ts +1 -1
  163. package/dist/esm/wire/base64-encoding.js +4 -4
  164. package/dist/esm/wire/binary-encoding.d.ts +25 -3
  165. package/dist/esm/wire/binary-encoding.js +63 -11
  166. package/dist/esm/wire/size-delimited.d.ts +1 -1
  167. package/dist/esm/wire/text-format.d.ts +1 -2
  168. package/dist/esm/wire/text-format.js +5 -3
  169. package/dist/esm/wkt/any.d.ts +3 -3
  170. package/dist/esm/wkt/gen/google/protobuf/any_pb.d.ts +7 -0
  171. package/dist/esm/wkt/gen/google/protobuf/any_pb.js +7 -2
  172. package/dist/esm/wkt/gen/google/protobuf/api_pb.d.ts +15 -0
  173. package/dist/esm/wkt/gen/google/protobuf/api_pb.js +15 -6
  174. package/dist/esm/wkt/gen/google/protobuf/compiler/plugin_pb.d.ts +22 -0
  175. package/dist/esm/wkt/gen/google/protobuf/compiler/plugin_pb.js +22 -9
  176. package/dist/esm/wkt/gen/google/protobuf/descriptor_pb.d.ts +192 -0
  177. package/dist/esm/wkt/gen/google/protobuf/descriptor_pb.js +187 -84
  178. package/dist/esm/wkt/gen/google/protobuf/duration_pb.d.ts +7 -0
  179. package/dist/esm/wkt/gen/google/protobuf/duration_pb.js +7 -2
  180. package/dist/esm/wkt/gen/google/protobuf/empty_pb.d.ts +7 -0
  181. package/dist/esm/wkt/gen/google/protobuf/empty_pb.js +7 -2
  182. package/dist/esm/wkt/gen/google/protobuf/field_mask_pb.d.ts +7 -0
  183. package/dist/esm/wkt/gen/google/protobuf/field_mask_pb.js +7 -2
  184. package/dist/esm/wkt/gen/google/protobuf/source_context_pb.d.ts +7 -0
  185. package/dist/esm/wkt/gen/google/protobuf/source_context_pb.js +7 -2
  186. package/dist/esm/wkt/gen/google/protobuf/struct_pb.d.ts +18 -0
  187. package/dist/esm/wkt/gen/google/protobuf/struct_pb.js +18 -7
  188. package/dist/esm/wkt/gen/google/protobuf/timestamp_pb.d.ts +7 -0
  189. package/dist/esm/wkt/gen/google/protobuf/timestamp_pb.js +7 -2
  190. package/dist/esm/wkt/gen/google/protobuf/type_pb.d.ts +32 -0
  191. package/dist/esm/wkt/gen/google/protobuf/type_pb.js +32 -13
  192. package/dist/esm/wkt/gen/google/protobuf/wrappers_pb.d.ts +39 -0
  193. package/dist/esm/wkt/gen/google/protobuf/wrappers_pb.js +39 -18
  194. package/dist/esm/wkt/wrappers.d.ts +1 -1
  195. package/package.json +2 -2
  196. package/dist/cjs/desc-types.js +0 -15
  197. package/dist/cjs/reflect/assert.d.ts +0 -16
  198. package/dist/cjs/reflect/assert.js +0 -59
  199. package/dist/esm/desc-types.js +0 -14
  200. package/dist/esm/reflect/assert.d.ts +0 -16
  201. package/dist/esm/reflect/assert.js +0 -52
@@ -15,15 +15,13 @@
15
15
  Object.defineProperty(exports, "__esModule", { value: true });
16
16
  exports.create = void 0;
17
17
  const is_message_js_1 = require("./is-message.js");
18
- const names_js_1 = require("./reflect/names.js");
18
+ const descriptors_js_1 = require("./descriptors.js");
19
19
  const scalar_js_1 = require("./reflect/scalar.js");
20
20
  const guard_js_1 = require("./reflect/guard.js");
21
21
  const unsafe_js_1 = require("./reflect/unsafe.js");
22
22
  const wrappers_js_1 = require("./wkt/wrappers.js");
23
23
  // bootstrap-inject google.protobuf.Edition.EDITION_PROTO3: const $name: Edition.$localName = $number;
24
24
  const EDITION_PROTO3 = 999;
25
- // bootstrap-inject google.protobuf.FeatureSet.FieldPresence.EXPLICIT: const $name: FeatureSet_FieldPresence.$localName = $number;
26
- const EXPLICIT = 1;
27
25
  // bootstrap-inject google.protobuf.FeatureSet.FieldPresence.IMPLICIT: const $name: FeatureSet_FieldPresence.$localName = $number;
28
26
  const IMPLICIT = 2;
29
27
  /**
@@ -48,7 +46,7 @@ exports.create = create;
48
46
  */
49
47
  function initMessage(messageDesc, message, init) {
50
48
  for (const member of messageDesc.members) {
51
- let value = init[(0, names_js_1.localName)(member)];
49
+ let value = init[member.localName];
52
50
  if (value == null) {
53
51
  // intentionally ignore undefined and null
54
52
  continue;
@@ -90,14 +88,14 @@ function initMessage(messageDesc, message, init) {
90
88
  return message;
91
89
  }
92
90
  function initScalar(field, value) {
93
- if (field.scalar == scalar_js_1.ScalarType.BYTES) {
91
+ if (field.scalar == descriptors_js_1.ScalarType.BYTES) {
94
92
  return toU8Arr(value);
95
93
  }
96
94
  return value;
97
95
  }
98
96
  function initMap(field, value) {
99
97
  if ((0, guard_js_1.isObject)(value)) {
100
- if (field.scalar == scalar_js_1.ScalarType.BYTES) {
98
+ if (field.scalar == descriptors_js_1.ScalarType.BYTES) {
101
99
  return convertObjectValues(value, toU8Arr);
102
100
  }
103
101
  if (field.mapKind == "message") {
@@ -108,7 +106,7 @@ function initMap(field, value) {
108
106
  }
109
107
  function initList(field, value) {
110
108
  if (Array.isArray(value)) {
111
- if (field.scalar == scalar_js_1.ScalarType.BYTES) {
109
+ if (field.scalar == descriptors_js_1.ScalarType.BYTES) {
112
110
  return value.map(toU8Arr);
113
111
  }
114
112
  if (field.listKind == "message") {
@@ -146,17 +144,9 @@ function createZeroMessage(desc) {
146
144
  // the `optional` keyword generate an optional property.
147
145
  msg = {};
148
146
  for (const member of desc.members) {
149
- if (member.kind == "field") {
150
- if (member.fieldKind == "scalar" ||
151
- member.fieldKind == "enum" ||
152
- member.fieldKind == "message") {
153
- if (member.presence == EXPLICIT) {
154
- // skips message fields and optional scalar/enum
155
- continue;
156
- }
157
- }
147
+ if (member.kind == "oneof" || member.presence == IMPLICIT) {
148
+ msg[member.localName] = createZeroField(member);
158
149
  }
159
- msg[(0, names_js_1.localName)(member)] = createZeroField(member);
160
150
  }
161
151
  }
162
152
  else {
@@ -183,12 +173,12 @@ function createZeroMessage(desc) {
183
173
  continue;
184
174
  }
185
175
  if (member.presence == IMPLICIT) {
186
- // implicit presence tracks field presence by zero values
187
- // e.g. 0, false, "", are unset, 1, true, "x" are set
176
+ // implicit presence tracks field presence by zero values - e.g. 0, false, "", are unset, 1, true, "x" are set.
177
+ // message, map, list fields are mutable, and also have IMPLICIT presence.
188
178
  continue;
189
179
  }
190
180
  members.add(member);
191
- prototype[(0, names_js_1.localName)(member)] = createZeroField(member);
181
+ prototype[member.localName] = createZeroField(member);
192
182
  }
193
183
  messagePrototypes.set(desc, { prototype, members });
194
184
  }
@@ -207,7 +197,7 @@ function createZeroMessage(desc) {
207
197
  }
208
198
  }
209
199
  }
210
- msg[(0, names_js_1.localName)(member)] = createZeroField(member);
200
+ msg[member.localName] = createZeroField(member);
211
201
  }
212
202
  }
213
203
  msg.$typeName = desc.typeName;
@@ -232,11 +222,11 @@ function createZeroField(field) {
232
222
  }
233
223
  const defaultValue = field.getDefaultValue();
234
224
  if (defaultValue !== undefined) {
235
- return field.fieldKind == "scalar" && field.longType == scalar_js_1.LongType.STRING
225
+ return field.fieldKind == "scalar" && field.longAsString
236
226
  ? defaultValue.toString()
237
227
  : defaultValue;
238
228
  }
239
229
  return field.fieldKind == "scalar"
240
- ? (0, scalar_js_1.scalarZeroValue)(field.scalar, field.longType)
230
+ ? (0, scalar_js_1.scalarZeroValue)(field.scalar, field.longAsString)
241
231
  : field.enum.values[0].number;
242
232
  }
@@ -1,7 +1,29 @@
1
1
  import type { DescriptorProto, Edition, EnumDescriptorProto, EnumValueDescriptorProto, FeatureSet_FieldPresence, FieldDescriptorProto, FileDescriptorProto, MethodDescriptorProto, MethodOptions_IdempotencyLevel, OneofDescriptorProto, ServiceDescriptorProto } from "./wkt/gen/google/protobuf/descriptor_pb.js";
2
- import type { LongType, ScalarType, ScalarValue } from "./reflect/scalar.js";
2
+ import type { ScalarValue } from "./reflect/scalar.js";
3
3
  export type SupportedEdition = Extract<Edition, Edition.EDITION_PROTO2 | Edition.EDITION_PROTO3 | Edition.EDITION_2023>;
4
4
  type SupportedFieldPresence = Extract<FeatureSet_FieldPresence, FeatureSet_FieldPresence.EXPLICIT | FeatureSet_FieldPresence.IMPLICIT | FeatureSet_FieldPresence.LEGACY_REQUIRED>;
5
+ /**
6
+ * Scalar value types. This is a subset of field types declared by protobuf
7
+ * enum google.protobuf.FieldDescriptorProto.Type The types GROUP and MESSAGE
8
+ * are omitted, but the numerical values are identical.
9
+ */
10
+ export declare enum ScalarType {
11
+ DOUBLE = 1,
12
+ FLOAT = 2,
13
+ INT64 = 3,
14
+ UINT64 = 4,
15
+ INT32 = 5,
16
+ FIXED64 = 6,
17
+ FIXED32 = 7,
18
+ BOOL = 8,
19
+ STRING = 9,
20
+ BYTES = 12,
21
+ UINT32 = 13,
22
+ SFIXED32 = 15,
23
+ SFIXED64 = 16,
24
+ SINT32 = 17,// Uses ZigZag encoding.
25
+ SINT64 = 18
26
+ }
5
27
  /**
6
28
  * A union of all descriptors, discriminated by a `kind` property.
7
29
  */
@@ -108,6 +130,10 @@ export interface DescEnumValue {
108
130
  * The name of the enumeration value, as specified in the protobuf source.
109
131
  */
110
132
  readonly name: string;
133
+ /**
134
+ * A safe and idiomatic name for the value in a TypeScript enum.
135
+ */
136
+ readonly localName: string;
111
137
  /**
112
138
  * The enumeration this value belongs to.
113
139
  */
@@ -152,6 +178,10 @@ export interface DescMessage {
152
178
  * group.
153
179
  */
154
180
  readonly fields: DescField[];
181
+ /**
182
+ * All fields of this message by their "localName".
183
+ */
184
+ readonly field: Record<string, DescField>;
155
185
  /**
156
186
  * Oneof groups declared for this message.
157
187
  * This does not include synthetic oneofs for proto3 optionals.
@@ -195,6 +225,10 @@ type descFieldCommon = descFieldAndExtensionShared & {
195
225
  * The message this field is declared on.
196
226
  */
197
227
  readonly parent: DescMessage;
228
+ /**
229
+ * A safe and idiomatic name for the field as a property in ECMAScript.
230
+ */
231
+ readonly localName: string;
198
232
  };
199
233
  /**
200
234
  * Describes an extension in a protobuf source file.
@@ -240,6 +274,11 @@ interface descFieldAndExtensionShared {
240
274
  * Marked as deprecated in the protobuf source.
241
275
  */
242
276
  readonly deprecated: boolean;
277
+ /**
278
+ * Presence of the field.
279
+ * See https://protobuf.dev/programming-guides/field_presence/
280
+ */
281
+ readonly presence: SupportedFieldPresence;
243
282
  /**
244
283
  * The compiler-generated descriptor.
245
284
  */
@@ -256,15 +295,6 @@ type descFieldSingularCommon = {
256
295
  * This does not include synthetic oneofs for proto3 optionals.
257
296
  */
258
297
  readonly oneof: DescOneof | undefined;
259
- /**
260
- * Whether this field was declared with `optional` in the protobuf source.
261
- */
262
- readonly optional: boolean;
263
- /**
264
- * Presence of the field.
265
- * See https://protobuf.dev/programming-guides/field_presence/
266
- */
267
- readonly presence: SupportedFieldPresence;
268
298
  };
269
299
  type descFieldScalar<T extends ScalarType = ScalarType> = T extends T ? {
270
300
  readonly fieldKind: "scalar";
@@ -273,10 +303,13 @@ type descFieldScalar<T extends ScalarType = ScalarType> = T extends T ? {
273
303
  */
274
304
  readonly scalar: T;
275
305
  /**
276
- * JavaScript type for 64 bit integral types (int64, uint64,
277
- * sint64, fixed64, sfixed64).
306
+ * By default, 64-bit integral types (int64, uint64, sint64, fixed64,
307
+ * sfixed64) are represented with BigInt.
308
+ *
309
+ * If the field option `jstype = JS_STRING` is set, this property
310
+ * is true, and 64-bit integral types are represented with String.
278
311
  */
279
- readonly longType: LongType;
312
+ readonly longAsString: boolean;
280
313
  /**
281
314
  * The message type, if it is a message field.
282
315
  */
@@ -361,10 +394,13 @@ type descFieldListScalar<T extends ScalarType = ScalarType> = T extends T ? {
361
394
  */
362
395
  readonly scalar: T;
363
396
  /**
364
- * JavaScript type for 64 bit integral types (int64, uint64,
365
- * sint64, fixed64, sfixed64).
397
+ * By default, 64-bit integral types (int64, uint64, sint64, fixed64,
398
+ * sfixed64) are represented with BigInt.
399
+ *
400
+ * If the field option `jstype = JS_STRING` is set, this property
401
+ * is true, and 64-bit integral types are represented with String.
366
402
  */
367
- readonly longType: LongType;
403
+ readonly longAsString: boolean;
368
404
  } : never;
369
405
  type descFieldListEnum = {
370
406
  readonly listKind: "enum";
@@ -414,7 +450,8 @@ type descFieldMapCommon<T extends ScalarType = ScalarType> = T extends Exclude<S
414
450
  readonly oneof: undefined;
415
451
  /**
416
452
  * Encode the map entry message delimited (a.k.a. proto2 group encoding),
417
- * or length-prefixed? This is always false for map fields.
453
+ * or length-prefixed? As of Edition 2023, this is always false for map fields,
454
+ * and also applies to map values, if they are messages.
418
455
  */
419
456
  readonly delimitedEncoding: false;
420
457
  } : never;
@@ -472,6 +509,10 @@ export interface DescOneof {
472
509
  * The name of the oneof group, as specified in the protobuf source.
473
510
  */
474
511
  readonly name: string;
512
+ /**
513
+ * A safe and idiomatic name for the oneof group as a property in ECMAScript.
514
+ */
515
+ readonly localName: string;
475
516
  /**
476
517
  * The message this oneof group was declared in.
477
518
  */
@@ -513,6 +554,10 @@ export interface DescService {
513
554
  * The RPCs this service declares.
514
555
  */
515
556
  readonly methods: DescMethod[];
557
+ /**
558
+ * All methods of this service by their "localName".
559
+ */
560
+ readonly method: Record<string, DescMethod>;
516
561
  /**
517
562
  * Marked as deprecated in the protobuf source.
518
563
  */
@@ -532,6 +577,10 @@ export interface DescMethod {
532
577
  * The name of the RPC, as specified in the protobuf source.
533
578
  */
534
579
  readonly name: string;
580
+ /**
581
+ * A safe and idiomatic name for the RPC as a method in ECMAScript.
582
+ */
583
+ readonly localName: string;
535
584
  /**
536
585
  * The parent service.
537
586
  */
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ // Copyright 2021-2024 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.
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.ScalarType = void 0;
17
+ /**
18
+ * Scalar value types. This is a subset of field types declared by protobuf
19
+ * enum google.protobuf.FieldDescriptorProto.Type The types GROUP and MESSAGE
20
+ * are omitted, but the numerical values are identical.
21
+ */
22
+ var ScalarType;
23
+ (function (ScalarType) {
24
+ // 0 is reserved for errors.
25
+ // Order is weird for historical reasons.
26
+ ScalarType[ScalarType["DOUBLE"] = 1] = "DOUBLE";
27
+ ScalarType[ScalarType["FLOAT"] = 2] = "FLOAT";
28
+ // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT64 if
29
+ // negative values are likely.
30
+ ScalarType[ScalarType["INT64"] = 3] = "INT64";
31
+ ScalarType[ScalarType["UINT64"] = 4] = "UINT64";
32
+ // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT32 if
33
+ // negative values are likely.
34
+ ScalarType[ScalarType["INT32"] = 5] = "INT32";
35
+ ScalarType[ScalarType["FIXED64"] = 6] = "FIXED64";
36
+ ScalarType[ScalarType["FIXED32"] = 7] = "FIXED32";
37
+ ScalarType[ScalarType["BOOL"] = 8] = "BOOL";
38
+ ScalarType[ScalarType["STRING"] = 9] = "STRING";
39
+ // Tag-delimited aggregate.
40
+ // Group type is deprecated and not supported in proto3. However, Proto3
41
+ // implementations should still be able to parse the group wire format and
42
+ // treat group fields as unknown fields.
43
+ // TYPE_GROUP = 10,
44
+ // TYPE_MESSAGE = 11, // Length-delimited aggregate.
45
+ // New in version 2.
46
+ ScalarType[ScalarType["BYTES"] = 12] = "BYTES";
47
+ ScalarType[ScalarType["UINT32"] = 13] = "UINT32";
48
+ // TYPE_ENUM = 14,
49
+ ScalarType[ScalarType["SFIXED32"] = 15] = "SFIXED32";
50
+ ScalarType[ScalarType["SFIXED64"] = 16] = "SFIXED64";
51
+ ScalarType[ScalarType["SINT32"] = 17] = "SINT32";
52
+ ScalarType[ScalarType["SINT64"] = 18] = "SINT64";
53
+ })(ScalarType || (exports.ScalarType = ScalarType = {}));
@@ -1,5 +1,5 @@
1
1
  import type { MessageShape } from "./types.js";
2
- import type { DescMessage } from "./desc-types.js";
2
+ import type { DescMessage } from "./descriptors.js";
3
3
  /**
4
4
  * Compare two messages of the same type.
5
5
  *
@@ -1,6 +1,7 @@
1
- import type { DescExtension, DescField } from "./desc-types.js";
1
+ import type { AnyDesc, DescEnum, DescEnumValue, DescExtension, DescField, DescFile, DescMessage, DescMethod, DescOneof, DescService } from "./descriptors.js";
2
2
  import type { ReflectMessage } from "./reflect/reflect-types.js";
3
3
  import type { Extendee, ExtensionValueShape } from "./types.js";
4
+ import type { EnumOptions, EnumValueOptions, FieldOptions, FileOptions, MessageOptions, MethodOptions, OneofOptions, ServiceOptions } from "./wkt/gen/google/protobuf/descriptor_pb.js";
4
5
  /**
5
6
  * Retrieve an extension value from a message.
6
7
  *
@@ -33,7 +34,26 @@ export declare function clearExtension<Desc extends DescExtension>(message: Exte
33
34
  * Check whether an extension is set on a message.
34
35
  */
35
36
  export declare function hasExtension<Desc extends DescExtension>(message: Extendee<Desc>, extension: Desc): boolean;
37
+ /**
38
+ * Check whether an option is set on a descriptor.
39
+ *
40
+ * Options are extensions to the `google.protobuf.*Options` messages defined in
41
+ * google/protobuf/descriptor.proto. This function gets the option message from
42
+ * the descriptor, and calls hasExtension().
43
+ */
44
+ export declare function hasOption<Ext extends DescExtension, Desc extends DescForOptionExtension<Ext>>(element: Desc, option: Ext): boolean;
45
+ /**
46
+ * Retrieve an option value from a descriptor.
47
+ *
48
+ * Options are extensions to the `google.protobuf.*Options` messages defined in
49
+ * google/protobuf/descriptor.proto. This function gets the option message from
50
+ * the descriptor, and calls getExtension(). Same as getExtension(), this
51
+ * function never returns undefined.
52
+ */
53
+ export declare function getOption<Ext extends DescExtension, Desc extends DescForOptionExtension<Ext>>(element: Desc, option: Ext): ExtensionValueShape<Ext>;
54
+ type DescForOptionExtension<Ext extends DescExtension> = Extendee<Ext> extends FileOptions ? DescFile : Extendee<Ext> extends EnumOptions ? DescEnum : Extendee<Ext> extends EnumValueOptions ? DescEnumValue : Extendee<Ext> extends MessageOptions ? DescMessage : Extendee<Ext> extends MessageOptions ? DescEnum : Extendee<Ext> extends FieldOptions ? DescField | DescExtension : Extendee<Ext> extends OneofOptions ? DescOneof : Extendee<Ext> extends ServiceOptions ? DescService : Extendee<Ext> extends EnumOptions ? DescEnum : Extendee<Ext> extends MethodOptions ? DescMethod : AnyDesc;
36
55
  /**
37
56
  * @private
38
57
  */
39
58
  export declare function createExtensionContainer<Desc extends DescExtension>(extension: Desc, value?: ExtensionValueShape<Desc>): [ReflectMessage, DescField, () => ExtensionValueShape<Desc>];
59
+ export {};
@@ -13,11 +13,9 @@
13
13
  // See the License for the specific language governing permissions and
14
14
  // limitations under the License.
15
15
  Object.defineProperty(exports, "__esModule", { value: true });
16
- exports.createExtensionContainer = exports.hasExtension = exports.clearExtension = exports.setExtension = exports.getExtension = void 0;
17
- const assert_js_1 = require("./reflect/assert.js");
16
+ exports.createExtensionContainer = exports.getOption = exports.hasOption = exports.hasExtension = exports.clearExtension = exports.setExtension = exports.getExtension = void 0;
18
17
  const create_js_1 = require("./create.js");
19
18
  const from_binary_js_1 = require("./from-binary.js");
20
- const names_js_1 = require("./reflect/names.js");
21
19
  const reflect_js_1 = require("./reflect/reflect.js");
22
20
  const scalar_js_1 = require("./reflect/scalar.js");
23
21
  const to_binary_js_1 = require("./to-binary.js");
@@ -65,7 +63,7 @@ function setExtension(message, extension, value) {
65
63
  const reader = new binary_encoding_js_1.BinaryReader(writer.finish());
66
64
  while (reader.pos < reader.len) {
67
65
  const [no, wireType] = reader.tag();
68
- const data = reader.skip(wireType);
66
+ const data = reader.skip(wireType, no);
69
67
  ufs.push({ no, wireType, data });
70
68
  }
71
69
  message.$unknown = ufs;
@@ -93,6 +91,38 @@ function hasExtension(message, extension) {
93
91
  !!((_a = message.$unknown) === null || _a === void 0 ? void 0 : _a.find((uf) => uf.no === extension.number)));
94
92
  }
95
93
  exports.hasExtension = hasExtension;
94
+ /**
95
+ * Check whether an option is set on a descriptor.
96
+ *
97
+ * Options are extensions to the `google.protobuf.*Options` messages defined in
98
+ * google/protobuf/descriptor.proto. This function gets the option message from
99
+ * the descriptor, and calls hasExtension().
100
+ */
101
+ function hasOption(element, option) {
102
+ const message = element.proto.options;
103
+ if (!message) {
104
+ return false;
105
+ }
106
+ return hasExtension(message, option);
107
+ }
108
+ exports.hasOption = hasOption;
109
+ /**
110
+ * Retrieve an option value from a descriptor.
111
+ *
112
+ * Options are extensions to the `google.protobuf.*Options` messages defined in
113
+ * google/protobuf/descriptor.proto. This function gets the option message from
114
+ * the descriptor, and calls getExtension(). Same as getExtension(), this
115
+ * function never returns undefined.
116
+ */
117
+ function getOption(element, option) {
118
+ const message = element.proto.options;
119
+ if (!message) {
120
+ const [, , get] = createExtensionContainer(option);
121
+ return get();
122
+ }
123
+ return getExtension(message, option);
124
+ }
125
+ exports.getOption = getOption;
96
126
  function filterUnknownFields(unknownFields, extension) {
97
127
  if (unknownFields === undefined)
98
128
  return [];
@@ -111,20 +141,20 @@ function filterUnknownFields(unknownFields, extension) {
111
141
  * @private
112
142
  */
113
143
  function createExtensionContainer(extension, value) {
114
- const field = Object.assign(Object.assign({}, extension), { kind: "field", parent: extension.extendee });
144
+ const localName = extension.typeName;
145
+ const field = Object.assign(Object.assign({}, extension), { kind: "field", parent: extension.extendee, localName });
115
146
  const desc = Object.assign(Object.assign({}, extension.extendee), { fields: [field], members: [field], oneofs: [] });
116
- const fieldName = (0, names_js_1.localName)(field);
117
- const container = (0, create_js_1.create)(desc, value !== undefined ? { [fieldName]: value } : undefined);
147
+ const container = (0, create_js_1.create)(desc, value !== undefined ? { [localName]: value } : undefined);
118
148
  return [
119
149
  (0, reflect_js_1.reflect)(desc, container),
120
150
  field,
121
151
  () => {
122
- const value = container[fieldName];
152
+ const value = container[localName];
123
153
  if (value === undefined) {
124
154
  // Only message fields are undefined, rest will have a zero value.
125
155
  const desc = extension.message;
126
156
  if ((0, wrappers_js_1.isWrapperDesc)(desc)) {
127
- return (0, scalar_js_1.scalarZeroValue)(desc.fields[0].scalar, desc.fields[0].longType);
157
+ return (0, scalar_js_1.scalarZeroValue)(desc.fields[0].scalar, desc.fields[0].longAsString);
128
158
  }
129
159
  return (0, create_js_1.create)(desc);
130
160
  }
@@ -134,5 +164,7 @@ function createExtensionContainer(extension, value) {
134
164
  }
135
165
  exports.createExtensionContainer = createExtensionContainer;
136
166
  function assertExtendee(extension, message) {
137
- (0, assert_js_1.assert)(extension.extendee.typeName == message.$typeName, `extension ${extension.typeName} can only be applied to message ${extension.extendee.typeName}`);
167
+ if (extension.extendee.typeName != message.$typeName) {
168
+ throw new Error(`extension ${extension.typeName} can only be applied to message ${extension.extendee.typeName}`);
169
+ }
138
170
  }
@@ -1,22 +1,23 @@
1
- import type { Message, MessageShape } from "./types.js";
2
- import type { DescMessage } from "./desc-types.js";
1
+ import type { MessageShape } from "./types.js";
2
+ import type { DescField, DescMessage } from "./descriptors.js";
3
3
  /**
4
4
  * Returns true if the field is set.
5
+ *
6
+ * - Scalar and enum fields with implicit presence (proto3):
7
+ * Set if not a zero value.
8
+ *
9
+ * - Scalar and enum fields with explicit presence (proto2, oneof):
10
+ * Set if a value was set when creating or parsing the message, or when a
11
+ * value was assigned to the field's property.
12
+ *
13
+ * - Message fields:
14
+ * Set if the property is not undefined.
15
+ *
16
+ * - List and map fields:
17
+ * Set if not empty.
5
18
  */
6
- export declare function isFieldSet<Desc extends DescMessage>(messageDesc: Desc, message: MessageShape<Desc>, fieldName: MessageFieldNames<MessageShape<Desc>>): boolean;
19
+ export declare function isFieldSet<Desc extends DescMessage>(message: MessageShape<Desc>, field: DescField): boolean;
7
20
  /**
8
21
  * Resets the field, so that isFieldSet() will return false.
9
22
  */
10
- export declare function clearField<Desc extends DescMessage>(messageDesc: Desc, message: MessageShape<Desc>, fieldName: MessageFieldNames<MessageShape<Desc>>): void;
11
- /**
12
- * Union of the property names of all fields, including oneof members.
13
- * For an anonymous message (no generated message shape), it's simply a string.
14
- */
15
- type MessageFieldNames<T extends Message> = Message extends T ? string : Exclude<keyof {
16
- [P in keyof T as P extends ("$typeName" | "$unknown") ? never : T[P] extends Oneof<infer K> ? K : P]-?: true;
17
- }, number | symbol>;
18
- type Oneof<K extends string> = {
19
- case: K | undefined;
20
- value?: unknown;
21
- };
22
- export {};
23
+ export declare function clearField<Desc extends DescMessage>(message: MessageShape<Desc>, field: DescField): void;
@@ -14,25 +14,32 @@
14
14
  // limitations under the License.
15
15
  Object.defineProperty(exports, "__esModule", { value: true });
16
16
  exports.clearField = exports.isFieldSet = void 0;
17
- const names_js_1 = require("./reflect/names.js");
18
17
  const unsafe_js_1 = require("./reflect/unsafe.js");
19
18
  /**
20
19
  * Returns true if the field is set.
20
+ *
21
+ * - Scalar and enum fields with implicit presence (proto3):
22
+ * Set if not a zero value.
23
+ *
24
+ * - Scalar and enum fields with explicit presence (proto2, oneof):
25
+ * Set if a value was set when creating or parsing the message, or when a
26
+ * value was assigned to the field's property.
27
+ *
28
+ * - Message fields:
29
+ * Set if the property is not undefined.
30
+ *
31
+ * - List and map fields:
32
+ * Set if not empty.
21
33
  */
22
- function isFieldSet(messageDesc, message, fieldName) {
23
- const field = messageDesc.fields.find((f) => (0, names_js_1.localName)(f) === fieldName);
24
- if (field) {
25
- return (0, unsafe_js_1.unsafeIsSet)(message, field);
26
- }
27
- return false;
34
+ function isFieldSet(message, field) {
35
+ return (field.parent.typeName == message.$typeName && (0, unsafe_js_1.unsafeIsSet)(message, field));
28
36
  }
29
37
  exports.isFieldSet = isFieldSet;
30
38
  /**
31
39
  * Resets the field, so that isFieldSet() will return false.
32
40
  */
33
- function clearField(messageDesc, message, fieldName) {
34
- const field = messageDesc.fields.find((f) => (0, names_js_1.localName)(f) === fieldName);
35
- if (field) {
41
+ function clearField(message, field) {
42
+ if (field.parent.typeName == message.$typeName) {
36
43
  (0, unsafe_js_1.unsafeClear)(message, field);
37
44
  }
38
45
  }
@@ -1,4 +1,4 @@
1
- import type { DescField, DescMessage } from "./desc-types.js";
1
+ import { type DescField, type DescMessage } from "./descriptors.js";
2
2
  import type { MessageShape } from "./types.js";
3
3
  import type { ReflectMessage } from "./reflect/index.js";
4
4
  import { BinaryReader, WireType } from "./wire/binary-encoding.js";
@@ -27,7 +27,7 @@ export declare function fromBinary<Desc extends DescMessage>(messageDesc: Desc,
27
27
  * If a message field is already present, it will be merged with the
28
28
  * new data.
29
29
  */
30
- export declare function mergeFromBinary<Desc extends DescMessage>(messageDesc: Desc, target: MessageShape<Desc>, bytes: Uint8Array, options?: Partial<BinaryReadOptions>): MessageShape<Desc>;
30
+ export declare function mergeFromBinary<Desc extends DescMessage>(messageDesc: Desc, target: MessageShape<Desc>, bytes: Uint8Array, options?: Partial<BinaryReadOptions>): void;
31
31
  /**
32
32
  * @private
33
33
  */