@bufbuild/protobuf 2.12.0 → 2.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/README.md +5 -5
  2. package/dist/commonjs/codegenv1/boot.d.ts +1 -0
  3. package/dist/{cjs/codegenv1/types.js → commonjs/codegenv1/boot.js} +3 -7
  4. package/dist/{cjs → commonjs}/codegenv1/symbols.d.ts +5 -0
  5. package/dist/{cjs → commonjs}/codegenv1/types.d.ts +9 -5
  6. package/dist/commonjs/codegenv2/enum.d.ts +29 -0
  7. package/dist/{cjs → commonjs}/codegenv2/enum.js +18 -0
  8. package/dist/{cjs → commonjs}/codegenv2/symbols.d.ts +10 -0
  9. package/dist/{cjs → commonjs}/codegenv2/symbols.js +2 -0
  10. package/dist/{cjs → commonjs}/codegenv2/types.d.ts +9 -5
  11. package/dist/{cjs → commonjs}/create.js +3 -3
  12. package/dist/{cjs → commonjs}/descriptors.d.ts +2 -2
  13. package/dist/{cjs → commonjs}/equals.d.ts +8 -3
  14. package/dist/{cjs → commonjs}/equals.js +8 -3
  15. package/dist/{cjs → commonjs}/extensions.d.ts +2 -1
  16. package/dist/{cjs → commonjs}/extensions.js +3 -4
  17. package/dist/{cjs → commonjs}/from-binary.d.ts +16 -2
  18. package/dist/{cjs → commonjs}/from-binary.js +30 -24
  19. package/dist/{cjs → commonjs}/from-json.d.ts +19 -2
  20. package/dist/{cjs → commonjs}/from-json.js +174 -54
  21. package/dist/{cjs → commonjs}/index.d.ts +1 -0
  22. package/dist/{cjs → commonjs}/index.js +1 -0
  23. package/dist/commonjs/json-value.js +15 -0
  24. package/dist/commonjs/package.json +4 -0
  25. package/dist/{cjs → commonjs}/proto-int64.js +1 -0
  26. package/dist/{cjs → commonjs}/reflect/reflect-check.js +3 -1
  27. package/dist/{cjs → commonjs}/reflect/reflect.js +3 -2
  28. package/dist/commonjs/reflect/scalar.d.ts +43 -0
  29. package/dist/{cjs → commonjs}/reflect/scalar.js +33 -6
  30. package/dist/{cjs → commonjs}/reflect/unsafe.js +1 -1
  31. package/dist/{cjs → commonjs}/registry.js +20 -20
  32. package/dist/{cjs → commonjs}/to-binary.js +1 -1
  33. package/dist/{cjs → commonjs}/to-json.js +2 -2
  34. package/dist/commonjs/txtpb/from-text.d.ts +35 -0
  35. package/dist/commonjs/txtpb/from-text.js +684 -0
  36. package/dist/commonjs/txtpb/index.d.ts +4 -0
  37. package/dist/commonjs/txtpb/index.js +21 -0
  38. package/dist/commonjs/txtpb/is-group-like.d.ts +19 -0
  39. package/dist/commonjs/txtpb/is-group-like.js +47 -0
  40. package/dist/commonjs/txtpb/reader.d.ts +91 -0
  41. package/dist/commonjs/txtpb/reader.js +481 -0
  42. package/dist/commonjs/txtpb/to-text.d.ts +34 -0
  43. package/dist/commonjs/txtpb/to-text.js +358 -0
  44. package/dist/commonjs/txtpb/writer.d.ts +76 -0
  45. package/dist/commonjs/txtpb/writer.js +220 -0
  46. package/dist/{cjs → commonjs}/types.d.ts +7 -0
  47. package/dist/{cjs/codegenv2 → commonjs}/types.js +0 -7
  48. package/dist/commonjs/unknown-enum.d.ts +10 -0
  49. package/dist/commonjs/unknown-enum.js +26 -0
  50. package/dist/{cjs → commonjs}/wire/binary-encoding.d.ts +4 -2
  51. package/dist/{cjs → commonjs}/wire/binary-encoding.js +8 -3
  52. package/dist/{cjs → commonjs}/wire/size-delimited.d.ts +19 -1
  53. package/dist/{cjs → commonjs}/wire/size-delimited.js +54 -16
  54. package/dist/esm/codegenv1/boot.d.ts +1 -0
  55. package/dist/esm/codegenv1/boot.js +14 -0
  56. package/dist/esm/codegenv1/symbols.d.ts +5 -0
  57. package/dist/esm/codegenv1/types.d.ts +9 -5
  58. package/dist/esm/codegenv1/types.js +0 -7
  59. package/dist/esm/codegenv2/enum.d.ts +15 -4
  60. package/dist/esm/codegenv2/enum.js +17 -0
  61. package/dist/esm/codegenv2/symbols.d.ts +10 -0
  62. package/dist/esm/codegenv2/symbols.js +2 -0
  63. package/dist/esm/codegenv2/types.d.ts +9 -5
  64. package/dist/esm/codegenv2/types.js +0 -7
  65. package/dist/esm/create.js +3 -3
  66. package/dist/esm/descriptors.d.ts +2 -2
  67. package/dist/esm/equals.d.ts +8 -3
  68. package/dist/esm/equals.js +8 -3
  69. package/dist/esm/extensions.d.ts +2 -1
  70. package/dist/esm/extensions.js +4 -5
  71. package/dist/esm/from-binary.d.ts +16 -2
  72. package/dist/esm/from-binary.js +29 -24
  73. package/dist/esm/from-json.d.ts +19 -2
  74. package/dist/esm/from-json.js +174 -54
  75. package/dist/esm/index.d.ts +1 -0
  76. package/dist/esm/index.js +1 -0
  77. package/dist/esm/package.json +4 -0
  78. package/dist/esm/proto-int64.js +1 -0
  79. package/dist/esm/reflect/reflect-check.js +3 -1
  80. package/dist/esm/reflect/reflect.js +3 -2
  81. package/dist/esm/reflect/scalar.d.ts +27 -5
  82. package/dist/esm/reflect/scalar.js +33 -6
  83. package/dist/esm/reflect/unsafe.js +1 -1
  84. package/dist/esm/registry.js +20 -20
  85. package/dist/esm/to-binary.js +1 -1
  86. package/dist/esm/to-json.js +2 -2
  87. package/dist/esm/txtpb/from-text.d.ts +35 -0
  88. package/dist/esm/txtpb/from-text.js +680 -0
  89. package/dist/esm/txtpb/index.d.ts +4 -0
  90. package/dist/esm/txtpb/index.js +15 -0
  91. package/dist/esm/txtpb/is-group-like.d.ts +19 -0
  92. package/dist/esm/txtpb/is-group-like.js +44 -0
  93. package/dist/esm/txtpb/reader.d.ts +91 -0
  94. package/dist/esm/txtpb/reader.js +477 -0
  95. package/dist/esm/txtpb/to-text.d.ts +34 -0
  96. package/dist/esm/txtpb/to-text.js +355 -0
  97. package/dist/esm/txtpb/writer.d.ts +76 -0
  98. package/dist/esm/txtpb/writer.js +214 -0
  99. package/dist/esm/types.d.ts +7 -0
  100. package/dist/esm/unknown-enum.d.ts +10 -0
  101. package/dist/esm/unknown-enum.js +23 -0
  102. package/dist/esm/wire/binary-encoding.d.ts +4 -2
  103. package/dist/esm/wire/binary-encoding.js +8 -3
  104. package/dist/esm/wire/size-delimited.d.ts +19 -1
  105. package/dist/esm/wire/size-delimited.js +54 -16
  106. package/package.json +109 -30
  107. package/dist/cjs/codegenv2/enum.d.ts +0 -18
  108. package/dist/cjs/package.json +0 -1
  109. package/dist/cjs/reflect/scalar.d.ts +0 -21
  110. /package/dist/{cjs → commonjs}/clone.d.ts +0 -0
  111. /package/dist/{cjs → commonjs}/clone.js +0 -0
  112. /package/dist/{cjs → commonjs}/codegenv1/enum.d.ts +0 -0
  113. /package/dist/{cjs → commonjs}/codegenv1/enum.js +0 -0
  114. /package/dist/{cjs → commonjs}/codegenv1/extension.d.ts +0 -0
  115. /package/dist/{cjs → commonjs}/codegenv1/extension.js +0 -0
  116. /package/dist/{cjs → commonjs}/codegenv1/file.d.ts +0 -0
  117. /package/dist/{cjs → commonjs}/codegenv1/file.js +0 -0
  118. /package/dist/{cjs → commonjs}/codegenv1/index.d.ts +0 -0
  119. /package/dist/{cjs → commonjs}/codegenv1/index.js +0 -0
  120. /package/dist/{cjs → commonjs}/codegenv1/message.d.ts +0 -0
  121. /package/dist/{cjs → commonjs}/codegenv1/message.js +0 -0
  122. /package/dist/{cjs → commonjs}/codegenv1/service.d.ts +0 -0
  123. /package/dist/{cjs → commonjs}/codegenv1/service.js +0 -0
  124. /package/dist/{cjs → commonjs}/codegenv1/symbols.js +0 -0
  125. /package/dist/{cjs → commonjs/codegenv1}/types.js +0 -0
  126. /package/dist/{cjs → commonjs}/codegenv2/boot.d.ts +0 -0
  127. /package/dist/{cjs → commonjs}/codegenv2/boot.js +0 -0
  128. /package/dist/{cjs → commonjs}/codegenv2/embed.d.ts +0 -0
  129. /package/dist/{cjs → commonjs}/codegenv2/embed.js +0 -0
  130. /package/dist/{cjs → commonjs}/codegenv2/extension.d.ts +0 -0
  131. /package/dist/{cjs → commonjs}/codegenv2/extension.js +0 -0
  132. /package/dist/{cjs → commonjs}/codegenv2/file.d.ts +0 -0
  133. /package/dist/{cjs → commonjs}/codegenv2/file.js +0 -0
  134. /package/dist/{cjs → commonjs}/codegenv2/index.d.ts +0 -0
  135. /package/dist/{cjs → commonjs}/codegenv2/index.js +0 -0
  136. /package/dist/{cjs → commonjs}/codegenv2/message.d.ts +0 -0
  137. /package/dist/{cjs → commonjs}/codegenv2/message.js +0 -0
  138. /package/dist/{cjs → commonjs}/codegenv2/restore-json-names.d.ts +0 -0
  139. /package/dist/{cjs → commonjs}/codegenv2/restore-json-names.js +0 -0
  140. /package/dist/{cjs → commonjs}/codegenv2/scalar.d.ts +0 -0
  141. /package/dist/{cjs → commonjs}/codegenv2/scalar.js +0 -0
  142. /package/dist/{cjs → commonjs}/codegenv2/service.d.ts +0 -0
  143. /package/dist/{cjs → commonjs}/codegenv2/service.js +0 -0
  144. /package/dist/{cjs/json-value.js → commonjs/codegenv2/types.js} +0 -0
  145. /package/dist/{cjs → commonjs}/create.d.ts +0 -0
  146. /package/dist/{cjs → commonjs}/descriptors.js +0 -0
  147. /package/dist/{cjs → commonjs}/fields.d.ts +0 -0
  148. /package/dist/{cjs → commonjs}/fields.js +0 -0
  149. /package/dist/{cjs → commonjs}/is-message.d.ts +0 -0
  150. /package/dist/{cjs → commonjs}/is-message.js +0 -0
  151. /package/dist/{cjs → commonjs}/json-value.d.ts +0 -0
  152. /package/dist/{cjs → commonjs}/merge.d.ts +0 -0
  153. /package/dist/{cjs → commonjs}/merge.js +0 -0
  154. /package/dist/{cjs → commonjs}/proto-int64.d.ts +0 -0
  155. /package/dist/{cjs → commonjs}/reflect/error.d.ts +0 -0
  156. /package/dist/{cjs → commonjs}/reflect/error.js +0 -0
  157. /package/dist/{cjs → commonjs}/reflect/guard.d.ts +0 -0
  158. /package/dist/{cjs → commonjs}/reflect/guard.js +0 -0
  159. /package/dist/{cjs → commonjs}/reflect/index.d.ts +0 -0
  160. /package/dist/{cjs → commonjs}/reflect/index.js +0 -0
  161. /package/dist/{cjs → commonjs}/reflect/names.d.ts +0 -0
  162. /package/dist/{cjs → commonjs}/reflect/names.js +0 -0
  163. /package/dist/{cjs → commonjs}/reflect/nested-types.d.ts +0 -0
  164. /package/dist/{cjs → commonjs}/reflect/nested-types.js +0 -0
  165. /package/dist/{cjs → commonjs}/reflect/path.d.ts +0 -0
  166. /package/dist/{cjs → commonjs}/reflect/path.js +0 -0
  167. /package/dist/{cjs → commonjs}/reflect/reflect-check.d.ts +0 -0
  168. /package/dist/{cjs → commonjs}/reflect/reflect-types.d.ts +0 -0
  169. /package/dist/{cjs → commonjs}/reflect/reflect-types.js +0 -0
  170. /package/dist/{cjs → commonjs}/reflect/reflect.d.ts +0 -0
  171. /package/dist/{cjs → commonjs}/reflect/unsafe.d.ts +0 -0
  172. /package/dist/{cjs → commonjs}/registry.d.ts +0 -0
  173. /package/dist/{cjs → commonjs}/to-binary.d.ts +0 -0
  174. /package/dist/{cjs → commonjs}/to-json.d.ts +0 -0
  175. /package/dist/{cjs → commonjs}/wire/base64-encoding.d.ts +0 -0
  176. /package/dist/{cjs → commonjs}/wire/base64-encoding.js +0 -0
  177. /package/dist/{cjs → commonjs}/wire/index.d.ts +0 -0
  178. /package/dist/{cjs → commonjs}/wire/index.js +0 -0
  179. /package/dist/{cjs → commonjs}/wire/text-encoding.d.ts +0 -0
  180. /package/dist/{cjs → commonjs}/wire/text-encoding.js +0 -0
  181. /package/dist/{cjs → commonjs}/wire/text-format.d.ts +0 -0
  182. /package/dist/{cjs → commonjs}/wire/text-format.js +0 -0
  183. /package/dist/{cjs → commonjs}/wire/varint.d.ts +0 -0
  184. /package/dist/{cjs → commonjs}/wire/varint.js +0 -0
  185. /package/dist/{cjs → commonjs}/wkt/any.d.ts +0 -0
  186. /package/dist/{cjs → commonjs}/wkt/any.js +0 -0
  187. /package/dist/{cjs → commonjs}/wkt/duration.d.ts +0 -0
  188. /package/dist/{cjs → commonjs}/wkt/duration.js +0 -0
  189. /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/any_pb.d.ts +0 -0
  190. /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/any_pb.js +0 -0
  191. /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/api_pb.d.ts +0 -0
  192. /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/api_pb.js +0 -0
  193. /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/compiler/plugin_pb.d.ts +0 -0
  194. /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/compiler/plugin_pb.js +0 -0
  195. /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/cpp_features_pb.d.ts +0 -0
  196. /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/cpp_features_pb.js +0 -0
  197. /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/descriptor_pb.d.ts +0 -0
  198. /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/descriptor_pb.js +0 -0
  199. /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/duration_pb.d.ts +0 -0
  200. /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/duration_pb.js +0 -0
  201. /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/empty_pb.d.ts +0 -0
  202. /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/empty_pb.js +0 -0
  203. /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/field_mask_pb.d.ts +0 -0
  204. /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/field_mask_pb.js +0 -0
  205. /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/go_features_pb.d.ts +0 -0
  206. /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/go_features_pb.js +0 -0
  207. /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/java_features_pb.d.ts +0 -0
  208. /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/java_features_pb.js +0 -0
  209. /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/source_context_pb.d.ts +0 -0
  210. /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/source_context_pb.js +0 -0
  211. /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/struct_pb.d.ts +0 -0
  212. /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/struct_pb.js +0 -0
  213. /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/timestamp_pb.d.ts +0 -0
  214. /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/timestamp_pb.js +0 -0
  215. /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/type_pb.d.ts +0 -0
  216. /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/type_pb.js +0 -0
  217. /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/wrappers_pb.d.ts +0 -0
  218. /package/dist/{cjs → commonjs}/wkt/gen/google/protobuf/wrappers_pb.js +0 -0
  219. /package/dist/{cjs → commonjs}/wkt/index.d.ts +0 -0
  220. /package/dist/{cjs → commonjs}/wkt/index.js +0 -0
  221. /package/dist/{cjs → commonjs}/wkt/timestamp.d.ts +0 -0
  222. /package/dist/{cjs → commonjs}/wkt/timestamp.js +0 -0
  223. /package/dist/{cjs → commonjs}/wkt/wrappers.d.ts +0 -0
  224. /package/dist/{cjs → commonjs}/wkt/wrappers.js +0 -0
@@ -16,3 +16,4 @@ export * from "./from-json.js";
16
16
  export * from "./merge.js";
17
17
  export { hasExtension, getExtension, setExtension, clearExtension, hasOption, getOption, } from "./extensions.js";
18
18
  export * from "./proto-int64.js";
19
+ export * from "./unknown-enum.js";
package/dist/esm/index.js CHANGED
@@ -26,3 +26,4 @@ export * from "./from-json.js";
26
26
  export * from "./merge.js";
27
27
  export { hasExtension, getExtension, setExtension, clearExtension, hasOption, getOption, } from "./extensions.js";
28
28
  export * from "./proto-int64.js";
29
+ export * from "./unknown-enum.js";
@@ -0,0 +1,4 @@
1
+ {
2
+ "type": "module",
3
+ "sideEffects": false
4
+ }
@@ -25,6 +25,7 @@ function makeInt64Support() {
25
25
  typeof dv.setBigInt64 === "function" &&
26
26
  typeof dv.setBigUint64 === "function" &&
27
27
  (!!globalThis.Deno ||
28
+ !!globalThis.Bun ||
28
29
  typeof process != "object" ||
29
30
  typeof process.env != "object" ||
30
31
  process.env.BUF_BIGINT_DISABLE !== "1");
@@ -74,7 +74,9 @@ function checkSingular(field, value) {
74
74
  }
75
75
  if (field.enum !== undefined) {
76
76
  if (field.enum.open) {
77
- return Number.isInteger(value);
77
+ // Open enums accept unrecognized values, but enum values are always
78
+ // int32 (see https://protobuf.dev/programming-guides/proto3/#enum).
79
+ return checkScalarValue(value, ScalarType.INT32);
78
80
  }
79
81
  return field.enum.values.some((v) => v.number === value);
80
82
  }
@@ -20,6 +20,8 @@ import { isWrapper, isWrapperDesc } from "../wkt/wrappers.js";
20
20
  import { scalarZeroValue } from "./scalar.js";
21
21
  import { protoInt64 } from "../proto-int64.js";
22
22
  import { isObject, isReflectList, isReflectMap, isReflectMessage, } from "./guard.js";
23
+ // google.protobuf.NullValue.NULL_VALUE;
24
+ const NULL_VALUE = 0;
23
25
  /**
24
26
  * Create a ReflectMessage.
25
27
  */
@@ -510,8 +512,7 @@ function wktValueToReflect(json) {
510
512
  break;
511
513
  case "object":
512
514
  if (json === null) {
513
- const nullValue = 0;
514
- value.kind = { case: "nullValue", value: nullValue };
515
+ value.kind = { case: "nullValue", value: NULL_VALUE };
515
516
  }
516
517
  else if (Array.isArray(json)) {
517
518
  const listValue = {
@@ -5,17 +5,39 @@ import { ScalarType } from "../descriptors.js";
5
5
  export type ScalarValue<T = ScalarType, LongAsString extends boolean = false> = T extends ScalarType.STRING ? string : T extends ScalarType.INT32 ? number : T extends ScalarType.UINT32 ? number : T extends ScalarType.SINT32 ? number : T extends ScalarType.FIXED32 ? number : T extends ScalarType.SFIXED32 ? number : T extends ScalarType.FLOAT ? number : T extends ScalarType.DOUBLE ? number : T extends ScalarType.INT64 ? LongAsString extends true ? string : bigint : T extends ScalarType.SINT64 ? LongAsString extends true ? string : bigint : T extends ScalarType.SFIXED64 ? LongAsString extends true ? string : bigint : T extends ScalarType.UINT64 ? LongAsString extends true ? string : bigint : T extends ScalarType.FIXED64 ? LongAsString extends true ? string : bigint : T extends ScalarType.BOOL ? boolean : T extends ScalarType.BYTES ? Uint8Array : never;
6
6
  /**
7
7
  * Returns true if both scalar values are equal.
8
+ *
9
+ * For float and double, values are compared following IEEE semantics: -0
10
+ * equals 0, and NaN does not equal NaN. This is value equality, not identity.
11
+ *
12
+ * It deliberately differs from isScalarZeroValue, which treats -0 as distinct
13
+ * from 0. A value can equal the zero value without being a zero value
14
+ * (scalarEquals(DOUBLE, -0, 0) is true while isScalarZeroValue(DOUBLE, -0) is
15
+ * false) so this function must not be used to derive implicit presence.
8
16
  */
9
17
  export declare function scalarEquals(type: ScalarType, a: ScalarValue | undefined, b: ScalarValue | undefined): boolean;
10
18
  /**
11
- * Returns the zero value for the given scalar type.
19
+ * Returns the zero value for the given scalar type, the value a field of this
20
+ * type has when unset: 0 for numeric types, "" for strings, false for
21
+ * booleans, and an empty Uint8Array for bytes. For 64-bit integer types, the
22
+ * result is "0" when longAsString is true, otherwise 0n.
23
+ *
24
+ * This is the type's zero value, not a proto2 custom field default. For float
25
+ * and double it is +0; isScalarZeroValue treats only +0, not -0, as this value.
12
26
  */
13
27
  export declare function scalarZeroValue<T extends ScalarType, LongAsString extends boolean>(type: T, longAsString: LongAsString): ScalarValue<T, LongAsString>;
14
28
  /**
15
- * Returns true for a zero-value. For example, an integer has the zero-value `0`,
16
- * a boolean is `false`, a string is `""`, and bytes is an empty Uint8Array.
29
+ * Returns true if the value is the zero value for the given scalar type: `0`
30
+ * for numeric types, `false` for booleans, `""` for strings, and an empty
31
+ * Uint8Array for bytes.
32
+ *
33
+ * This is the implicit-presence default check. A singular field with implicit
34
+ * presence is treated as unset, and omitted from the wire, when its value is
35
+ * the zero value. With explicit presence, or in repeated and map fields,
36
+ * presence is structural and this function does not apply.
17
37
  *
18
- * In proto3, zero-values are not written to the wire, unless the field is
19
- * optional or repeated.
38
+ * Note that -0 is NOT a zero value for float and double: under implicit
39
+ * presence, +0 is omitted from the wire but -0 is written, following the
40
+ * proto3 specification. As a result this can disagree with scalarEquals, which
41
+ * compares by value and treats -0 as equal to 0.
20
42
  */
21
43
  export declare function isScalarZeroValue(type: ScalarType, value: unknown): boolean;
@@ -15,6 +15,14 @@ import { protoInt64 } from "../proto-int64.js";
15
15
  import { ScalarType } from "../descriptors.js";
16
16
  /**
17
17
  * Returns true if both scalar values are equal.
18
+ *
19
+ * For float and double, values are compared following IEEE semantics: -0
20
+ * equals 0, and NaN does not equal NaN. This is value equality, not identity.
21
+ *
22
+ * It deliberately differs from isScalarZeroValue, which treats -0 as distinct
23
+ * from 0. A value can equal the zero value without being a zero value
24
+ * (scalarEquals(DOUBLE, -0, 0) is true while isScalarZeroValue(DOUBLE, -0) is
25
+ * false) so this function must not be used to derive implicit presence.
18
26
  */
19
27
  export function scalarEquals(type, a, b) {
20
28
  if (a === b) {
@@ -51,7 +59,13 @@ export function scalarEquals(type, a, b) {
51
59
  return false;
52
60
  }
53
61
  /**
54
- * Returns the zero value for the given scalar type.
62
+ * Returns the zero value for the given scalar type, the value a field of this
63
+ * type has when unset: 0 for numeric types, "" for strings, false for
64
+ * booleans, and an empty Uint8Array for bytes. For 64-bit integer types, the
65
+ * result is "0" when longAsString is true, otherwise 0n.
66
+ *
67
+ * This is the type's zero value, not a proto2 custom field default. For float
68
+ * and double it is +0; isScalarZeroValue treats only +0, not -0, as this value.
55
69
  */
56
70
  export function scalarZeroValue(type, longAsString) {
57
71
  switch (type) {
@@ -77,11 +91,19 @@ export function scalarZeroValue(type, longAsString) {
77
91
  }
78
92
  }
79
93
  /**
80
- * Returns true for a zero-value. For example, an integer has the zero-value `0`,
81
- * a boolean is `false`, a string is `""`, and bytes is an empty Uint8Array.
94
+ * Returns true if the value is the zero value for the given scalar type: `0`
95
+ * for numeric types, `false` for booleans, `""` for strings, and an empty
96
+ * Uint8Array for bytes.
82
97
  *
83
- * In proto3, zero-values are not written to the wire, unless the field is
84
- * optional or repeated.
98
+ * This is the implicit-presence default check. A singular field with implicit
99
+ * presence is treated as unset, and omitted from the wire, when its value is
100
+ * the zero value. With explicit presence, or in repeated and map fields,
101
+ * presence is structural and this function does not apply.
102
+ *
103
+ * Note that -0 is NOT a zero value for float and double: under implicit
104
+ * presence, +0 is omitted from the wire but -0 is written, following the
105
+ * proto3 specification. As a result this can disagree with scalarEquals, which
106
+ * compares by value and treats -0 as equal to 0.
85
107
  */
86
108
  export function isScalarZeroValue(type, value) {
87
109
  switch (type) {
@@ -91,7 +113,12 @@ export function isScalarZeroValue(type, value) {
91
113
  return value === "";
92
114
  case ScalarType.BYTES:
93
115
  return value instanceof Uint8Array && !value.byteLength;
116
+ case ScalarType.DOUBLE:
117
+ case ScalarType.FLOAT:
118
+ // Object.is distinguishes -0 from 0.
119
+ return Object.is(value, 0);
94
120
  default:
95
- return value == 0; // Loose comparison matches 0n, 0 and "0"
121
+ // Loose comparison matches 0n, 0 and "0".
122
+ return value == 0;
96
123
  }
97
124
  }
@@ -12,7 +12,7 @@
12
12
  // See the License for the specific language governing permissions and
13
13
  // limitations under the License.
14
14
  import { isScalarZeroValue, scalarZeroValue } from "./scalar.js";
15
- // bootstrap-inject google.protobuf.FeatureSet.FieldPresence.IMPLICIT: const $name: FeatureSet_FieldPresence.$localName = $number;
15
+ // bootstrap-inject google.protobuf.FeatureSet.FieldPresence.IMPLICIT: const $name = $number;
16
16
  const IMPLICIT = 2;
17
17
  export const unsafeLocal = Symbol.for("reflect unsafe local");
18
18
  /**
@@ -187,47 +187,47 @@ function initBaseRegistry(inputs) {
187
187
  }
188
188
  return registry;
189
189
  }
190
- // bootstrap-inject google.protobuf.Edition.EDITION_PROTO2: const $name: Edition.$localName = $number;
190
+ // bootstrap-inject google.protobuf.Edition.EDITION_PROTO2: const $name = $number;
191
191
  const EDITION_PROTO2 = 998;
192
- // bootstrap-inject google.protobuf.Edition.EDITION_PROTO3: const $name: Edition.$localName = $number;
192
+ // bootstrap-inject google.protobuf.Edition.EDITION_PROTO3: const $name = $number;
193
193
  const EDITION_PROTO3 = 999;
194
- // bootstrap-inject google.protobuf.Edition.EDITION_UNSTABLE: const $name: Edition.$localName = $number;
194
+ // bootstrap-inject google.protobuf.Edition.EDITION_UNSTABLE: const $name = $number;
195
195
  const EDITION_UNSTABLE = 9999;
196
- // bootstrap-inject google.protobuf.FieldDescriptorProto.Type.TYPE_STRING: const $name: FieldDescriptorProto_Type.$localName = $number;
196
+ // bootstrap-inject google.protobuf.FieldDescriptorProto.Type.TYPE_STRING: const $name = $number;
197
197
  const TYPE_STRING = 9;
198
- // bootstrap-inject google.protobuf.FieldDescriptorProto.Type.TYPE_GROUP: const $name: FieldDescriptorProto_Type.$localName = $number;
198
+ // bootstrap-inject google.protobuf.FieldDescriptorProto.Type.TYPE_GROUP: const $name = $number;
199
199
  const TYPE_GROUP = 10;
200
- // bootstrap-inject google.protobuf.FieldDescriptorProto.Type.TYPE_MESSAGE: const $name: FieldDescriptorProto_Type.$localName = $number;
200
+ // bootstrap-inject google.protobuf.FieldDescriptorProto.Type.TYPE_MESSAGE: const $name = $number;
201
201
  const TYPE_MESSAGE = 11;
202
- // bootstrap-inject google.protobuf.FieldDescriptorProto.Type.TYPE_BYTES: const $name: FieldDescriptorProto_Type.$localName = $number;
202
+ // bootstrap-inject google.protobuf.FieldDescriptorProto.Type.TYPE_BYTES: const $name = $number;
203
203
  const TYPE_BYTES = 12;
204
- // bootstrap-inject google.protobuf.FieldDescriptorProto.Type.TYPE_ENUM: const $name: FieldDescriptorProto_Type.$localName = $number;
204
+ // bootstrap-inject google.protobuf.FieldDescriptorProto.Type.TYPE_ENUM: const $name = $number;
205
205
  const TYPE_ENUM = 14;
206
- // bootstrap-inject google.protobuf.FieldDescriptorProto.Label.LABEL_REPEATED: const $name: FieldDescriptorProto_Label.$localName = $number;
206
+ // bootstrap-inject google.protobuf.FieldDescriptorProto.Label.LABEL_REPEATED: const $name = $number;
207
207
  const LABEL_REPEATED = 3;
208
- // bootstrap-inject google.protobuf.FieldDescriptorProto.Label.LABEL_REQUIRED: const $name: FieldDescriptorProto_Label.$localName = $number;
208
+ // bootstrap-inject google.protobuf.FieldDescriptorProto.Label.LABEL_REQUIRED: const $name = $number;
209
209
  const LABEL_REQUIRED = 2;
210
- // bootstrap-inject google.protobuf.FieldOptions.JSType.JS_STRING: const $name: FieldOptions_JSType.$localName = $number;
210
+ // bootstrap-inject google.protobuf.FieldOptions.JSType.JS_STRING: const $name = $number;
211
211
  const JS_STRING = 1;
212
- // bootstrap-inject google.protobuf.MethodOptions.IdempotencyLevel.IDEMPOTENCY_UNKNOWN: const $name: MethodOptions_IdempotencyLevel.$localName = $number;
212
+ // bootstrap-inject google.protobuf.MethodOptions.IdempotencyLevel.IDEMPOTENCY_UNKNOWN: const $name = $number;
213
213
  const IDEMPOTENCY_UNKNOWN = 0;
214
- // bootstrap-inject google.protobuf.FeatureSet.FieldPresence.EXPLICIT: const $name: FeatureSet_FieldPresence.$localName = $number;
214
+ // bootstrap-inject google.protobuf.FeatureSet.FieldPresence.EXPLICIT: const $name = $number;
215
215
  const EXPLICIT = 1;
216
- // bootstrap-inject google.protobuf.FeatureSet.FieldPresence.IMPLICIT: const $name: FeatureSet_FieldPresence.$localName = $number;
216
+ // bootstrap-inject google.protobuf.FeatureSet.FieldPresence.IMPLICIT: const $name = $number;
217
217
  const IMPLICIT = 2;
218
- // bootstrap-inject google.protobuf.FeatureSet.FieldPresence.LEGACY_REQUIRED: const $name: FeatureSet_FieldPresence.$localName = $number;
218
+ // bootstrap-inject google.protobuf.FeatureSet.FieldPresence.LEGACY_REQUIRED: const $name = $number;
219
219
  const LEGACY_REQUIRED = 3;
220
- // bootstrap-inject google.protobuf.FeatureSet.RepeatedFieldEncoding.PACKED: const $name: FeatureSet_RepeatedFieldEncoding.$localName = $number;
220
+ // bootstrap-inject google.protobuf.FeatureSet.RepeatedFieldEncoding.PACKED: const $name = $number;
221
221
  const PACKED = 1;
222
- // bootstrap-inject google.protobuf.FeatureSet.MessageEncoding.DELIMITED: const $name: FeatureSet_MessageEncoding.$localName = $number;
222
+ // bootstrap-inject google.protobuf.FeatureSet.MessageEncoding.DELIMITED: const $name = $number;
223
223
  const DELIMITED = 2;
224
- // bootstrap-inject google.protobuf.FeatureSet.EnumType.OPEN: const $name: FeatureSet_EnumType.$localName = $number;
224
+ // bootstrap-inject google.protobuf.FeatureSet.EnumType.OPEN: const $name = $number;
225
225
  const OPEN = 1;
226
- // bootstrap-inject google.protobuf.FeatureSet.Utf8Validation.VERIFY: const $name: FeatureSet_Utf8Validation.$localName = $number;
226
+ // bootstrap-inject google.protobuf.FeatureSet.Utf8Validation.VERIFY: const $name = $number;
227
227
  const VERIFY = 2;
228
228
  // biome-ignore format: want this to read well
229
229
  // bootstrap-inject defaults: EDITION_PROTO2 to EDITION_2024: export const minimumEdition: SupportedEdition = $minimumEdition, maximumEdition: SupportedEdition = $maximumEdition;
230
- // generated from protoc v34.0
230
+ // generated from protoc v34.1
231
231
  export const minimumEdition = 998, maximumEdition = 1001;
232
232
  const featureDefaults = {
233
233
  // EDITION_PROTO2
@@ -14,7 +14,7 @@
14
14
  import { reflect } from "./reflect/reflect.js";
15
15
  import { BinaryWriter, WireType } from "./wire/binary-encoding.js";
16
16
  import { ScalarType } from "./descriptors.js";
17
- // bootstrap-inject google.protobuf.FeatureSet.FieldPresence.LEGACY_REQUIRED: const $name: FeatureSet_FieldPresence.$localName = $number;
17
+ // bootstrap-inject google.protobuf.FeatureSet.FieldPresence.LEGACY_REQUIRED: const $name = $number;
18
18
  const LEGACY_REQUIRED = 3;
19
19
  // Default options for serializing binary data.
20
20
  const writeDefaults = {
@@ -19,9 +19,9 @@ import { hasCustomJsonRepresentation, isWrapperDesc } from "./wkt/wrappers.js";
19
19
  import { base64Encode } from "./wire/index.js";
20
20
  import { createExtensionContainer, getExtension } from "./extensions.js";
21
21
  import { checkField, formatVal } from "./reflect/reflect-check.js";
22
- // bootstrap-inject google.protobuf.FeatureSet.FieldPresence.LEGACY_REQUIRED: const $name: FeatureSet_FieldPresence.$localName = $number;
22
+ // bootstrap-inject google.protobuf.FeatureSet.FieldPresence.LEGACY_REQUIRED: const $name = $number;
23
23
  const LEGACY_REQUIRED = 3;
24
- // bootstrap-inject google.protobuf.FeatureSet.FieldPresence.IMPLICIT: const $name: FeatureSet_FieldPresence.$localName = $number;
24
+ // bootstrap-inject google.protobuf.FeatureSet.FieldPresence.IMPLICIT: const $name = $number;
25
25
  const IMPLICIT = 2;
26
26
  // Default options for serializing to JSON.
27
27
  const jsonWriteDefaults = {
@@ -0,0 +1,35 @@
1
+ import { type DescMessage } from "../descriptors.js";
2
+ import type { Registry } from "../registry.js";
3
+ import type { MessageShape } from "../types.js";
4
+ /**
5
+ * Options for parsing the protobuf text format.
6
+ */
7
+ export interface TextReadOptions {
8
+ /**
9
+ * The registry to resolve `google.protobuf.Any` and extensions. Parsing an
10
+ * Any in its expanded form, or an extension field, requires it.
11
+ */
12
+ registry?: Registry | undefined;
13
+ /**
14
+ * The maximum depth of nested messages to parse. A message nesting deeper
15
+ * than this fails with an error instead of exhausting the call stack.
16
+ * Defaults to 100.
17
+ */
18
+ recursionLimit: number;
19
+ }
20
+ /**
21
+ * Parse a message from the protobuf text format.
22
+ *
23
+ * Requires BigInt: throws immediately if the environment does not support it.
24
+ */
25
+ export declare function fromText<Desc extends DescMessage>(schema: Desc, text: string, options?: Partial<TextReadOptions>): MessageShape<Desc>;
26
+ /**
27
+ * Parse a message from the protobuf text format, merging into the target.
28
+ *
29
+ * Repeated fields are appended, singular fields are overwritten (last wins),
30
+ * message fields are merged, and map entries are added (overwriting an existing
31
+ * key).
32
+ *
33
+ * Requires BigInt: throws immediately if the environment does not support it.
34
+ */
35
+ export declare function mergeFromText<Desc extends DescMessage>(schema: Desc, target: MessageShape<Desc>, text: string, options?: Partial<TextReadOptions>): MessageShape<Desc>;