@bufbuild/protobuf 2.0.0-alpha.2 → 2.0.0-alpha.4

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 (145) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/clone.d.ts +1 -1
  3. package/dist/cjs/clone.js +9 -6
  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 +1 -1
  7. package/dist/cjs/codegenv1/embed.js +39 -34
  8. package/dist/cjs/codegenv1/enum.d.ts +1 -1
  9. package/dist/cjs/codegenv1/extension.d.ts +1 -1
  10. package/dist/cjs/codegenv1/file.d.ts +1 -1
  11. package/dist/cjs/codegenv1/file.js +5 -7
  12. package/dist/cjs/codegenv1/index.d.ts +1 -0
  13. package/dist/cjs/codegenv1/index.js +1 -0
  14. package/dist/cjs/codegenv1/message.d.ts +1 -1
  15. package/dist/cjs/codegenv1/scalar.d.ts +5 -0
  16. package/dist/cjs/codegenv1/scalar.js +39 -0
  17. package/dist/cjs/codegenv1/service.d.ts +3 -3
  18. package/dist/cjs/codegenv1/types.d.ts +7 -9
  19. package/dist/cjs/create.d.ts +1 -1
  20. package/dist/cjs/create.js +6 -5
  21. package/dist/cjs/{desc-types.d.ts → descriptors.d.ts} +39 -7
  22. package/dist/cjs/descriptors.js +53 -0
  23. package/dist/cjs/equals.d.ts +1 -1
  24. package/dist/cjs/extensions.d.ts +1 -1
  25. package/dist/cjs/extensions.js +4 -3
  26. package/dist/cjs/fields.d.ts +1 -1
  27. package/dist/cjs/from-binary.d.ts +1 -1
  28. package/dist/cjs/from-binary.js +32 -29
  29. package/dist/cjs/from-json.d.ts +2 -2
  30. package/dist/cjs/from-json.js +201 -188
  31. package/dist/cjs/index.d.ts +2 -1
  32. package/dist/cjs/index.js +2 -1
  33. package/dist/cjs/is-message.d.ts +1 -1
  34. package/dist/cjs/proto-int64.d.ts +4 -1
  35. package/dist/cjs/proto-int64.js +16 -6
  36. package/dist/cjs/reflect/error.d.ts +1 -1
  37. package/dist/cjs/reflect/guard.d.ts +1 -1
  38. package/dist/cjs/reflect/guard.js +4 -4
  39. package/dist/cjs/reflect/index.d.ts +0 -1
  40. package/dist/cjs/reflect/index.js +0 -1
  41. package/dist/cjs/reflect/names.d.ts +1 -1
  42. package/dist/cjs/reflect/names.js +1 -1
  43. package/dist/cjs/reflect/nested-types.d.ts +1 -1
  44. package/dist/cjs/reflect/reflect-check.d.ts +10 -1
  45. package/dist/cjs/reflect/reflect-check.js +126 -9
  46. package/dist/cjs/reflect/reflect-types.d.ts +3 -41
  47. package/dist/cjs/reflect/reflect.d.ts +1 -1
  48. package/dist/cjs/reflect/reflect.js +42 -60
  49. package/dist/cjs/reflect/scalar.d.ts +3 -55
  50. package/dist/cjs/reflect/scalar.js +26 -220
  51. package/dist/cjs/reflect/unsafe.d.ts +1 -17
  52. package/dist/cjs/reflect/unsafe.js +2 -20
  53. package/dist/cjs/{reflect/registry.d.ts → registry.d.ts} +2 -2
  54. package/dist/cjs/{reflect/registry.js → registry.js} +54 -36
  55. package/dist/cjs/to-binary.d.ts +1 -1
  56. package/dist/cjs/to-binary.js +27 -27
  57. package/dist/cjs/to-json.d.ts +7 -6
  58. package/dist/cjs/to-json.js +57 -44
  59. package/dist/cjs/types.d.ts +1 -1
  60. package/dist/cjs/wire/base64-encoding.js +2 -2
  61. package/dist/cjs/wire/binary-encoding.d.ts +20 -0
  62. package/dist/cjs/wire/binary-encoding.js +75 -8
  63. package/dist/cjs/wire/size-delimited.d.ts +1 -1
  64. package/dist/cjs/wire/text-format.d.ts +1 -2
  65. package/dist/cjs/wire/text-format.js +21 -19
  66. package/dist/cjs/wkt/any.d.ts +2 -2
  67. package/dist/cjs/wkt/gen/google/protobuf/descriptor_pb.d.ts +6 -0
  68. package/dist/cjs/wkt/gen/google/protobuf/descriptor_pb.js +1 -1
  69. package/dist/cjs/wkt/wrappers.d.ts +1 -1
  70. package/dist/esm/clone.d.ts +1 -1
  71. package/dist/esm/clone.js +8 -5
  72. package/dist/esm/codegenv1/boot.d.ts +1 -1
  73. package/dist/esm/codegenv1/boot.js +3 -5
  74. package/dist/esm/codegenv1/embed.d.ts +1 -1
  75. package/dist/esm/codegenv1/embed.js +9 -4
  76. package/dist/esm/codegenv1/enum.d.ts +1 -1
  77. package/dist/esm/codegenv1/extension.d.ts +1 -1
  78. package/dist/esm/codegenv1/file.d.ts +1 -1
  79. package/dist/esm/codegenv1/file.js +4 -6
  80. package/dist/esm/codegenv1/index.d.ts +1 -0
  81. package/dist/esm/codegenv1/index.js +1 -0
  82. package/dist/esm/codegenv1/message.d.ts +1 -1
  83. package/dist/esm/codegenv1/scalar.d.ts +5 -0
  84. package/dist/esm/codegenv1/scalar.js +35 -0
  85. package/dist/esm/codegenv1/service.d.ts +3 -3
  86. package/dist/esm/codegenv1/types.d.ts +7 -9
  87. package/dist/esm/create.d.ts +1 -1
  88. package/dist/esm/create.js +4 -3
  89. package/dist/esm/{desc-types.d.ts → descriptors.d.ts} +39 -7
  90. package/dist/esm/descriptors.js +50 -0
  91. package/dist/esm/equals.d.ts +1 -1
  92. package/dist/esm/extensions.d.ts +1 -1
  93. package/dist/esm/extensions.js +4 -3
  94. package/dist/esm/fields.d.ts +1 -1
  95. package/dist/esm/from-binary.d.ts +1 -1
  96. package/dist/esm/from-binary.js +14 -11
  97. package/dist/esm/from-json.d.ts +2 -2
  98. package/dist/esm/from-json.js +194 -181
  99. package/dist/esm/index.d.ts +2 -1
  100. package/dist/esm/index.js +2 -1
  101. package/dist/esm/is-message.d.ts +1 -1
  102. package/dist/esm/proto-int64.d.ts +4 -1
  103. package/dist/esm/proto-int64.js +16 -6
  104. package/dist/esm/reflect/error.d.ts +1 -1
  105. package/dist/esm/reflect/guard.d.ts +1 -1
  106. package/dist/esm/reflect/guard.js +4 -4
  107. package/dist/esm/reflect/index.d.ts +0 -1
  108. package/dist/esm/reflect/index.js +0 -1
  109. package/dist/esm/reflect/names.d.ts +1 -1
  110. package/dist/esm/reflect/names.js +1 -1
  111. package/dist/esm/reflect/nested-types.d.ts +1 -1
  112. package/dist/esm/reflect/reflect-check.d.ts +10 -1
  113. package/dist/esm/reflect/reflect-check.js +119 -2
  114. package/dist/esm/reflect/reflect-types.d.ts +3 -41
  115. package/dist/esm/reflect/reflect-types.js +1 -0
  116. package/dist/esm/reflect/reflect.d.ts +1 -1
  117. package/dist/esm/reflect/reflect.js +25 -43
  118. package/dist/esm/reflect/scalar.d.ts +3 -55
  119. package/dist/esm/reflect/scalar.js +14 -205
  120. package/dist/esm/reflect/unsafe.d.ts +1 -17
  121. package/dist/esm/reflect/unsafe.js +1 -17
  122. package/dist/esm/{reflect/registry.d.ts → registry.d.ts} +2 -2
  123. package/dist/esm/{reflect/registry.js → registry.js} +44 -26
  124. package/dist/esm/to-binary.d.ts +1 -1
  125. package/dist/esm/to-binary.js +1 -1
  126. package/dist/esm/to-json.d.ts +7 -6
  127. package/dist/esm/to-json.js +42 -29
  128. package/dist/esm/types.d.ts +1 -1
  129. package/dist/esm/wire/base64-encoding.js +2 -2
  130. package/dist/esm/wire/binary-encoding.d.ts +20 -0
  131. package/dist/esm/wire/binary-encoding.js +68 -1
  132. package/dist/esm/wire/size-delimited.d.ts +1 -1
  133. package/dist/esm/wire/text-format.d.ts +1 -2
  134. package/dist/esm/wire/text-format.js +5 -3
  135. package/dist/esm/wkt/any.d.ts +2 -2
  136. package/dist/esm/wkt/gen/google/protobuf/descriptor_pb.d.ts +6 -0
  137. package/dist/esm/wkt/gen/google/protobuf/descriptor_pb.js +1 -1
  138. package/dist/esm/wkt/wrappers.d.ts +1 -1
  139. package/package.json +1 -1
  140. package/dist/cjs/desc-types.js +0 -15
  141. package/dist/cjs/reflect/assert.d.ts +0 -16
  142. package/dist/cjs/reflect/assert.js +0 -59
  143. package/dist/esm/desc-types.js +0 -14
  144. package/dist/esm/reflect/assert.d.ts +0 -16
  145. package/dist/esm/reflect/assert.js +0 -52
@@ -1,56 +1,8 @@
1
- /**
2
- * Scalar value types. This is a subset of field types declared by protobuf
3
- * enum google.protobuf.FieldDescriptorProto.Type The types GROUP and MESSAGE
4
- * are omitted, but the numerical values are identical.
5
- */
6
- export declare enum ScalarType {
7
- DOUBLE = 1,
8
- FLOAT = 2,
9
- INT64 = 3,
10
- UINT64 = 4,
11
- INT32 = 5,
12
- FIXED64 = 6,
13
- FIXED32 = 7,
14
- BOOL = 8,
15
- STRING = 9,
16
- BYTES = 12,
17
- UINT32 = 13,
18
- SFIXED32 = 15,
19
- SFIXED64 = 16,
20
- SINT32 = 17,// Uses ZigZag encoding.
21
- SINT64 = 18
22
- }
23
- /**
24
- * JavaScript representation of fields with 64 bit integral types (int64, uint64,
25
- * sint64, fixed64, sfixed64).
26
- *
27
- * This is a subset of google.protobuf.FieldOptions.JSType, which defines JS_NORMAL,
28
- * JS_STRING, and JS_NUMBER. Protobuf-ES uses BigInt by default, but will use
29
- * String if `[jstype = JS_STRING]` is specified.
30
- *
31
- * ```protobuf
32
- * uint64 field_a = 1; // BigInt
33
- * uint64 field_b = 2 [jstype = JS_NORMAL]; // BigInt
34
- * uint64 field_b = 2 [jstype = JS_NUMBER]; // BigInt
35
- * uint64 field_b = 2 [jstype = JS_STRING]; // String
36
- * ```
37
- */
38
- export declare enum LongType {
39
- /**
40
- * Use JavaScript BigInt.
41
- */
42
- BIGINT = 0,
43
- /**
44
- * Use JavaScript String.
45
- *
46
- * Field option `[jstype = JS_STRING]`.
47
- */
48
- STRING = 1
49
- }
1
+ import { ScalarType } from "../descriptors.js";
50
2
  /**
51
3
  * ScalarValue maps from a scalar field type to a TypeScript value type.
52
4
  */
53
- export type ScalarValue<T = ScalarType, L extends LongType = LongType.STRING | LongType.BIGINT> = T extends ScalarType.STRING ? string : T extends ScalarType.INT32 ? number : T extends ScalarType.UINT32 ? 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 ? L extends LongType.STRING ? string : bigint : T extends ScalarType.SINT64 ? L extends LongType.STRING ? string : bigint : T extends ScalarType.SFIXED64 ? L extends LongType.STRING ? string : bigint : T extends ScalarType.UINT64 ? L extends LongType.STRING ? string : bigint : T extends ScalarType.FIXED64 ? L extends LongType.STRING ? string : bigint : T extends ScalarType.BOOL ? boolean : T extends ScalarType.BYTES ? Uint8Array : never;
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;
54
6
  /**
55
7
  * Returns true if both scalar values are equal.
56
8
  */
@@ -58,7 +10,7 @@ export declare function scalarEquals(type: ScalarType, a: string | boolean | num
58
10
  /**
59
11
  * Returns the zero value for the given scalar type.
60
12
  */
61
- export declare function scalarZeroValue<T extends ScalarType, L extends LongType>(type: T, longType: L): ScalarValue<T, L>;
13
+ export declare function scalarZeroValue<T extends ScalarType, LongAsString extends boolean>(type: T, longAsString: LongAsString): ScalarValue<T, LongAsString>;
62
14
  /**
63
15
  * Returns true for a zero-value. For example, an integer has the zero-value `0`,
64
16
  * a boolean is `false`, a string is `""`, and bytes is an empty Uint8Array.
@@ -67,7 +19,3 @@ export declare function scalarZeroValue<T extends ScalarType, L extends LongType
67
19
  * optional or repeated.
68
20
  */
69
21
  export declare function isScalarZeroValue(type: ScalarType, value: unknown): boolean;
70
- export type InvalidScalarValueErr = false | "invalid UTF8" | `${string} out of range`;
71
- export declare function checkScalarValue(value: unknown, scalar: ScalarType): true | InvalidScalarValueErr;
72
- export declare function scalarTypeDescription(scalar: ScalarType): string;
73
- export declare function scalarTypeScriptType(scalar: ScalarType, long: LongType): "string" | "boolean" | "bigint" | "bigint | string" | "Uint8Array" | "number";
@@ -13,74 +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.scalarTypeScriptType = exports.scalarTypeDescription = exports.checkScalarValue = exports.isScalarZeroValue = exports.scalarZeroValue = exports.scalarEquals = exports.LongType = exports.ScalarType = void 0;
16
+ exports.isScalarZeroValue = exports.scalarZeroValue = exports.scalarEquals = void 0;
17
17
  const proto_int64_js_1 = require("../proto-int64.js");
18
- const text_encoding_js_1 = require("../wire/text-encoding.js");
19
- /**
20
- * Scalar value types. This is a subset of field types declared by protobuf
21
- * enum google.protobuf.FieldDescriptorProto.Type The types GROUP and MESSAGE
22
- * are omitted, but the numerical values are identical.
23
- */
24
- var ScalarType;
25
- (function (ScalarType) {
26
- // 0 is reserved for errors.
27
- // Order is weird for historical reasons.
28
- ScalarType[ScalarType["DOUBLE"] = 1] = "DOUBLE";
29
- ScalarType[ScalarType["FLOAT"] = 2] = "FLOAT";
30
- // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT64 if
31
- // negative values are likely.
32
- ScalarType[ScalarType["INT64"] = 3] = "INT64";
33
- ScalarType[ScalarType["UINT64"] = 4] = "UINT64";
34
- // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT32 if
35
- // negative values are likely.
36
- ScalarType[ScalarType["INT32"] = 5] = "INT32";
37
- ScalarType[ScalarType["FIXED64"] = 6] = "FIXED64";
38
- ScalarType[ScalarType["FIXED32"] = 7] = "FIXED32";
39
- ScalarType[ScalarType["BOOL"] = 8] = "BOOL";
40
- ScalarType[ScalarType["STRING"] = 9] = "STRING";
41
- // Tag-delimited aggregate.
42
- // Group type is deprecated and not supported in proto3. However, Proto3
43
- // implementations should still be able to parse the group wire format and
44
- // treat group fields as unknown fields.
45
- // TYPE_GROUP = 10,
46
- // TYPE_MESSAGE = 11, // Length-delimited aggregate.
47
- // New in version 2.
48
- ScalarType[ScalarType["BYTES"] = 12] = "BYTES";
49
- ScalarType[ScalarType["UINT32"] = 13] = "UINT32";
50
- // TYPE_ENUM = 14,
51
- ScalarType[ScalarType["SFIXED32"] = 15] = "SFIXED32";
52
- ScalarType[ScalarType["SFIXED64"] = 16] = "SFIXED64";
53
- ScalarType[ScalarType["SINT32"] = 17] = "SINT32";
54
- ScalarType[ScalarType["SINT64"] = 18] = "SINT64";
55
- })(ScalarType || (exports.ScalarType = ScalarType = {}));
56
- /**
57
- * JavaScript representation of fields with 64 bit integral types (int64, uint64,
58
- * sint64, fixed64, sfixed64).
59
- *
60
- * This is a subset of google.protobuf.FieldOptions.JSType, which defines JS_NORMAL,
61
- * JS_STRING, and JS_NUMBER. Protobuf-ES uses BigInt by default, but will use
62
- * String if `[jstype = JS_STRING]` is specified.
63
- *
64
- * ```protobuf
65
- * uint64 field_a = 1; // BigInt
66
- * uint64 field_b = 2 [jstype = JS_NORMAL]; // BigInt
67
- * uint64 field_b = 2 [jstype = JS_NUMBER]; // BigInt
68
- * uint64 field_b = 2 [jstype = JS_STRING]; // String
69
- * ```
70
- */
71
- var LongType;
72
- (function (LongType) {
73
- /**
74
- * Use JavaScript BigInt.
75
- */
76
- LongType[LongType["BIGINT"] = 0] = "BIGINT";
77
- /**
78
- * Use JavaScript String.
79
- *
80
- * Field option `[jstype = JS_STRING]`.
81
- */
82
- LongType[LongType["STRING"] = 1] = "STRING";
83
- })(LongType || (exports.LongType = LongType = {}));
18
+ const descriptors_js_1 = require("../descriptors.js");
84
19
  /**
85
20
  * Returns true if both scalar values are equal.
86
21
  */
@@ -90,7 +25,7 @@ function scalarEquals(type, a, b) {
90
25
  return true;
91
26
  }
92
27
  // Special case BYTES - we need to compare each byte individually
93
- if (type == ScalarType.BYTES) {
28
+ if (type == descriptors_js_1.ScalarType.BYTES) {
94
29
  if (!(a instanceof Uint8Array) || !(b instanceof Uint8Array)) {
95
30
  return false;
96
31
  }
@@ -107,11 +42,11 @@ function scalarEquals(type, a, b) {
107
42
  // Special case 64-bit integers - we support number, string and bigint representation.
108
43
  // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check
109
44
  switch (type) {
110
- case ScalarType.UINT64:
111
- case ScalarType.FIXED64:
112
- case ScalarType.INT64:
113
- case ScalarType.SFIXED64:
114
- case ScalarType.SINT64:
45
+ case descriptors_js_1.ScalarType.UINT64:
46
+ case descriptors_js_1.ScalarType.FIXED64:
47
+ case descriptors_js_1.ScalarType.INT64:
48
+ case descriptors_js_1.ScalarType.SFIXED64:
49
+ case descriptors_js_1.ScalarType.SINT64:
115
50
  // Loose comparison will match between 0n, 0 and "0".
116
51
  return a == b;
117
52
  }
@@ -123,27 +58,27 @@ exports.scalarEquals = scalarEquals;
123
58
  /**
124
59
  * Returns the zero value for the given scalar type.
125
60
  */
126
- function scalarZeroValue(type, longType) {
61
+ function scalarZeroValue(type, longAsString) {
127
62
  switch (type) {
128
- case ScalarType.BOOL:
129
- return false;
130
- case ScalarType.UINT64:
131
- case ScalarType.FIXED64:
132
- case ScalarType.INT64:
133
- case ScalarType.SFIXED64:
134
- case ScalarType.SINT64:
135
- return (longType == 0 ? proto_int64_js_1.protoInt64.zero : "0");
136
- case ScalarType.DOUBLE:
137
- case ScalarType.FLOAT:
138
- return 0.0;
139
- case ScalarType.BYTES:
140
- return new Uint8Array(0);
141
- case ScalarType.STRING:
63
+ case descriptors_js_1.ScalarType.STRING:
142
64
  return "";
65
+ case descriptors_js_1.ScalarType.BOOL:
66
+ return false;
143
67
  default:
144
68
  // Handles INT32, UINT32, SINT32, FIXED32, SFIXED32.
145
69
  // We do not use individual cases to save a few bytes code size.
146
70
  return 0;
71
+ case descriptors_js_1.ScalarType.DOUBLE:
72
+ case descriptors_js_1.ScalarType.FLOAT:
73
+ return 0.0;
74
+ case descriptors_js_1.ScalarType.INT64:
75
+ case descriptors_js_1.ScalarType.UINT64:
76
+ case descriptors_js_1.ScalarType.SFIXED64:
77
+ case descriptors_js_1.ScalarType.FIXED64:
78
+ case descriptors_js_1.ScalarType.SINT64:
79
+ return (longAsString ? "0" : proto_int64_js_1.protoInt64.zero);
80
+ case descriptors_js_1.ScalarType.BYTES:
81
+ return new Uint8Array(0);
147
82
  }
148
83
  }
149
84
  exports.scalarZeroValue = scalarZeroValue;
@@ -156,143 +91,14 @@ exports.scalarZeroValue = scalarZeroValue;
156
91
  */
157
92
  function isScalarZeroValue(type, value) {
158
93
  switch (type) {
159
- case ScalarType.BOOL:
94
+ case descriptors_js_1.ScalarType.BOOL:
160
95
  return value === false;
161
- case ScalarType.STRING:
96
+ case descriptors_js_1.ScalarType.STRING:
162
97
  return value === "";
163
- case ScalarType.BYTES:
98
+ case descriptors_js_1.ScalarType.BYTES:
164
99
  return value instanceof Uint8Array && !value.byteLength;
165
100
  default:
166
101
  return value == 0; // Loose comparison matches 0n, 0 and "0"
167
102
  }
168
103
  }
169
104
  exports.isScalarZeroValue = isScalarZeroValue;
170
- const FLOAT32_MAX = 3.4028234663852886e38, FLOAT32_MIN = -3.4028234663852886e38, UINT32_MAX = 0xffffffff, INT32_MAX = 0x7fffffff, INT32_MIN = -0x80000000;
171
- // TODO this checks UTF-8 validity
172
- function checkScalarValue(value, scalar) {
173
- switch (scalar) {
174
- case ScalarType.DOUBLE:
175
- return typeof value == "number";
176
- case ScalarType.FLOAT:
177
- if (typeof value != "number") {
178
- return false;
179
- }
180
- if (Number.isNaN(value) || !Number.isFinite(value)) {
181
- return true;
182
- }
183
- if (value > FLOAT32_MAX || value < FLOAT32_MIN) {
184
- return `${value.toFixed()} out of range`;
185
- }
186
- return true;
187
- case ScalarType.INT32:
188
- case ScalarType.SFIXED32:
189
- case ScalarType.SINT32:
190
- // signed
191
- if (typeof value !== "number" || !Number.isInteger(value)) {
192
- return false;
193
- }
194
- if (value > INT32_MAX || value < INT32_MIN) {
195
- return `${value.toFixed()} out of range`;
196
- }
197
- return true;
198
- case ScalarType.FIXED32:
199
- case ScalarType.UINT32:
200
- // unsigned
201
- if (typeof value !== "number" || !Number.isInteger(value)) {
202
- return false;
203
- }
204
- if (value > UINT32_MAX || value < 0) {
205
- return `${value.toFixed()} out of range`;
206
- }
207
- return true;
208
- case ScalarType.BOOL:
209
- return typeof value == "boolean";
210
- case ScalarType.STRING:
211
- if (typeof value != "string") {
212
- return false;
213
- }
214
- return (0, text_encoding_js_1.getTextEncoding)().checkUtf8(value) || "invalid UTF8";
215
- case ScalarType.BYTES:
216
- return value instanceof Uint8Array;
217
- case ScalarType.INT64:
218
- case ScalarType.SFIXED64:
219
- case ScalarType.SINT64:
220
- // signed
221
- if (typeof value != "string" &&
222
- typeof value !== "bigint" &&
223
- typeof value !== "number") {
224
- return false;
225
- }
226
- try {
227
- proto_int64_js_1.protoInt64.parse(value);
228
- }
229
- catch (e) {
230
- return `${value} out of range`;
231
- }
232
- return true;
233
- case ScalarType.FIXED64:
234
- case ScalarType.UINT64:
235
- // unsigned
236
- if (typeof value != "string" &&
237
- typeof value !== "bigint" &&
238
- typeof value !== "number") {
239
- return false;
240
- }
241
- try {
242
- proto_int64_js_1.protoInt64.uParse(value);
243
- }
244
- catch (e) {
245
- return `${value} out of range`;
246
- }
247
- return true;
248
- }
249
- }
250
- exports.checkScalarValue = checkScalarValue;
251
- function scalarTypeDescription(scalar) {
252
- switch (scalar) {
253
- case ScalarType.STRING:
254
- return "string";
255
- case ScalarType.BOOL:
256
- return "boolean";
257
- case ScalarType.INT64:
258
- case ScalarType.SINT64:
259
- case ScalarType.SFIXED64:
260
- return "bigint (int64)";
261
- case ScalarType.UINT64:
262
- case ScalarType.FIXED64:
263
- return "bigint (uint64)";
264
- case ScalarType.BYTES:
265
- return "Uint8Array";
266
- case ScalarType.DOUBLE:
267
- return "number (float64)";
268
- case ScalarType.FLOAT:
269
- return "number (float32)";
270
- case ScalarType.FIXED32:
271
- case ScalarType.UINT32:
272
- return "number (uint32)";
273
- case ScalarType.INT32:
274
- case ScalarType.SFIXED32:
275
- case ScalarType.SINT32:
276
- return "number (int32)";
277
- }
278
- }
279
- exports.scalarTypeDescription = scalarTypeDescription;
280
- function scalarTypeScriptType(scalar, long) {
281
- switch (scalar) {
282
- case ScalarType.STRING:
283
- return "string";
284
- case ScalarType.BOOL:
285
- return "boolean";
286
- case ScalarType.UINT64:
287
- case ScalarType.SFIXED64:
288
- case ScalarType.FIXED64:
289
- case ScalarType.SINT64:
290
- case ScalarType.INT64:
291
- return long == LongType.STRING ? "string" : "bigint";
292
- case ScalarType.BYTES:
293
- return "Uint8Array";
294
- default:
295
- return "number";
296
- }
297
- }
298
- exports.scalarTypeScriptType = scalarTypeScriptType;
@@ -1,4 +1,4 @@
1
- import type { DescField, DescOneof } from "../desc-types.js";
1
+ import type { DescField, DescOneof } from "../descriptors.js";
2
2
  export declare const unsafeLocal: unique symbol;
3
3
  /**
4
4
  * Return the selected field of a oneof group.
@@ -40,19 +40,3 @@ export declare function unsafeSet(target: Record<string, unknown>, field: DescFi
40
40
  */
41
41
  export declare function unsafeClear(target: Record<string, any>, // eslint-disable-line @typescript-eslint/no-explicit-any -- `any` is the best choice for dynamic access
42
42
  field: DescField): void;
43
- /**
44
- * Add an item to a list field.
45
- *
46
- * @private
47
- */
48
- export declare function unsafeAddListItem(target: Record<string, unknown>, field: DescField & {
49
- fieldKind: "list";
50
- }, value: unknown): void;
51
- /**
52
- * Set a map entry.
53
- *
54
- * @private
55
- */
56
- export declare function unsafeSetMapEntry(target: Record<string, unknown>, field: DescField & {
57
- fieldKind: "map";
58
- }, key: string | number, value: unknown): void;
@@ -13,7 +13,7 @@
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.unsafeSetMapEntry = exports.unsafeAddListItem = exports.unsafeClear = exports.unsafeSet = exports.unsafeGet = exports.unsafeIsSetExplicit = exports.unsafeIsSet = exports.unsafeOneofCase = exports.unsafeLocal = void 0;
16
+ exports.unsafeClear = exports.unsafeSet = exports.unsafeGet = exports.unsafeIsSetExplicit = exports.unsafeIsSet = exports.unsafeOneofCase = exports.unsafeLocal = void 0;
17
17
  const scalar_js_1 = require("./scalar.js");
18
18
  // bootstrap-inject google.protobuf.FeatureSet.FieldPresence.IMPLICIT: const $name: FeatureSet_FieldPresence.$localName = $number;
19
19
  const IMPLICIT = 2;
@@ -140,27 +140,9 @@ field) {
140
140
  target[name] = field.enum.values[0].number;
141
141
  break;
142
142
  case "scalar":
143
- target[name] = (0, scalar_js_1.scalarZeroValue)(field.scalar, field.longType);
143
+ target[name] = (0, scalar_js_1.scalarZeroValue)(field.scalar, field.longAsString);
144
144
  break;
145
145
  }
146
146
  }
147
147
  }
148
148
  exports.unsafeClear = unsafeClear;
149
- /**
150
- * Add an item to a list field.
151
- *
152
- * @private
153
- */
154
- function unsafeAddListItem(target, field, value) {
155
- target[field.localName].push(value);
156
- }
157
- exports.unsafeAddListItem = unsafeAddListItem;
158
- /**
159
- * Set a map entry.
160
- *
161
- * @private
162
- */
163
- function unsafeSetMapEntry(target, field, key, value) {
164
- target[field.localName][key] = value;
165
- }
166
- exports.unsafeSetMapEntry = unsafeSetMapEntry;
@@ -1,5 +1,5 @@
1
- import type { FileDescriptorProto, FileDescriptorSet } from "../wkt/gen/google/protobuf/descriptor_pb.js";
2
- import type { DescEnum, DescExtension, DescFile, DescMessage, DescService, SupportedEdition } from "../desc-types.js";
1
+ import type { FileDescriptorProto, FileDescriptorSet } from "./wkt/gen/google/protobuf/descriptor_pb.js";
2
+ import { type DescEnum, type DescExtension, type DescFile, type DescMessage, type DescService, type SupportedEdition } from "./descriptors.js";
3
3
  /**
4
4
  * A set of descriptors for messages, enumerations, extensions,
5
5
  * and services.
@@ -14,12 +14,11 @@
14
14
  // limitations under the License.
15
15
  Object.defineProperty(exports, "__esModule", { value: true });
16
16
  exports.maximumEdition = exports.minimumEdition = exports.createFileRegistry = exports.createRegistry = void 0;
17
- const assert_js_1 = require("./assert.js");
18
- const text_format_js_1 = require("../wire/text-format.js");
19
- const scalar_js_1 = require("./scalar.js");
20
- const nested_types_js_1 = require("./nested-types.js");
21
- const unsafe_js_1 = require("./unsafe.js");
22
- const names_js_1 = require("./names.js");
17
+ const descriptors_js_1 = require("./descriptors.js");
18
+ const text_format_js_1 = require("./wire/text-format.js");
19
+ const nested_types_js_1 = require("./reflect/nested-types.js");
20
+ const unsafe_js_1 = require("./reflect/unsafe.js");
21
+ const names_js_1 = require("./reflect/names.js");
23
22
  /**
24
23
  * Create a registry from the given inputs.
25
24
  *
@@ -226,7 +225,7 @@ const DELIMITED = 2;
226
225
  const OPEN = 1;
227
226
  // prettier-ignore
228
227
  // bootstrap-inject defaults: EDITION_PROTO2 to EDITION_2023: export const minimumEdition: SupportedEdition = $minimumEdition, maximumEdition: SupportedEdition = $maximumEdition;
229
- // generated from protoc v27.0-rc2
228
+ // generated from protoc v27.0
230
229
  exports.minimumEdition = 998, exports.maximumEdition = 1000;
231
230
  const featureDefaults = {
232
231
  // EDITION_PROTO2
@@ -285,7 +284,7 @@ function addFile(proto, reg) {
285
284
  },
286
285
  add(desc) {
287
286
  var _a;
288
- (0, assert_js_1.assert)(((_a = desc.proto.options) === null || _a === void 0 ? void 0 : _a.mapEntry) === true);
287
+ assert(((_a = desc.proto.options) === null || _a === void 0 ? void 0 : _a.mapEntry) === true);
289
288
  mapEntriesStore.set(desc.typeName, desc);
290
289
  },
291
290
  };
@@ -460,6 +459,7 @@ function addService(proto, file, reg) {
460
459
  name: proto.name,
461
460
  typeName: makeTypeName(proto, undefined, file),
462
461
  methods: [],
462
+ method: {},
463
463
  toString() {
464
464
  return `service ${this.typeName}`;
465
465
  },
@@ -467,7 +467,9 @@ function addService(proto, file, reg) {
467
467
  file.services.push(desc);
468
468
  reg.add(desc);
469
469
  for (const methodProto of proto.method) {
470
- desc.methods.push(newMethod(methodProto, desc, reg));
470
+ const method = newMethod(methodProto, desc, reg);
471
+ desc.methods.push(method);
472
+ desc.method[method.localName] = method;
471
473
  }
472
474
  }
473
475
  /**
@@ -490,8 +492,8 @@ function newMethod(proto, parent, reg) {
490
492
  }
491
493
  const input = reg.getMessage(trimLeadingDot(proto.inputType));
492
494
  const output = reg.getMessage(trimLeadingDot(proto.outputType));
493
- (0, assert_js_1.assert)(input, `invalid MethodDescriptorProto: input_type ${proto.inputType} not found`);
494
- (0, assert_js_1.assert)(output, `invalid MethodDescriptorProto: output_type ${proto.inputType} not found`);
495
+ assert(input, `invalid MethodDescriptorProto: input_type ${proto.inputType} not found`);
496
+ assert(output, `invalid MethodDescriptorProto: output_type ${proto.inputType} not found`);
495
497
  const name = proto.name;
496
498
  return {
497
499
  kind: "rpc",
@@ -546,7 +548,7 @@ function newField(proto, parentOrFile, reg, oneof, mapEntries) {
546
548
  mapKey: undefined,
547
549
  delimitedEncoding: undefined,
548
550
  packed: undefined,
549
- longType: undefined,
551
+ longAsString: false,
550
552
  getDefaultValue: undefined,
551
553
  };
552
554
  if (isExtension) {
@@ -562,13 +564,13 @@ function newField(proto, parentOrFile, reg, oneof, mapEntries) {
562
564
  field.jsonName = `[${typeName}]`; // option json_name is not allowed on extension fields
563
565
  field.toString = () => `extension ${typeName}`;
564
566
  const extendee = reg.getMessage(trimLeadingDot(proto.extendee));
565
- (0, assert_js_1.assert)(extendee, `invalid FieldDescriptorProto: extendee ${proto.extendee} not found`);
567
+ assert(extendee, `invalid FieldDescriptorProto: extendee ${proto.extendee} not found`);
566
568
  field.extendee = extendee;
567
569
  }
568
570
  else {
569
571
  // regular field
570
572
  const parent = parentOrFile;
571
- (0, assert_js_1.assert)(parent.kind == "message");
573
+ assert(parent.kind == "message");
572
574
  field.parent = parent;
573
575
  field.oneof = oneof;
574
576
  field.localName = oneof
@@ -588,21 +590,13 @@ function newField(proto, parentOrFile, reg, oneof, mapEntries) {
588
590
  if (mapEntry) {
589
591
  // map field
590
592
  field.fieldKind = "map";
591
- const keyField = mapEntry.fields.find((f) => f.number === 1);
592
- (0, assert_js_1.assert)(keyField);
593
- (0, assert_js_1.assert)(keyField.fieldKind == "scalar");
594
- (0, assert_js_1.assert)(keyField.scalar != scalar_js_1.ScalarType.BYTES &&
595
- keyField.scalar != scalar_js_1.ScalarType.FLOAT &&
596
- keyField.scalar != scalar_js_1.ScalarType.DOUBLE);
597
- const valueField = mapEntry.fields.find((f) => f.number === 2);
598
- (0, assert_js_1.assert)(valueField);
599
- (0, assert_js_1.assert)(valueField.fieldKind != "list" && valueField.fieldKind != "map");
600
- field.mapKey = keyField.scalar;
601
- field.mapKind = valueField.fieldKind;
602
- field.message = valueField.message;
593
+ const { key, value } = findMapEntryFields(mapEntry);
594
+ field.mapKey = key.scalar;
595
+ field.mapKind = value.fieldKind;
596
+ field.message = value.message;
603
597
  field.delimitedEncoding = false; // map fields are always LENGTH_PREFIXED
604
- field.enum = valueField.enum;
605
- field.scalar = valueField.scalar;
598
+ field.enum = value.enum;
599
+ field.scalar = value.scalar;
606
600
  return field;
607
601
  }
608
602
  // list field
@@ -612,19 +606,18 @@ function newField(proto, parentOrFile, reg, oneof, mapEntries) {
612
606
  case TYPE_GROUP:
613
607
  field.listKind = "message";
614
608
  field.message = reg.getMessage(trimLeadingDot(proto.typeName));
615
- (0, assert_js_1.assert)(field.message);
609
+ assert(field.message);
616
610
  field.delimitedEncoding = isDelimitedEncoding(proto, parentOrFile);
617
611
  break;
618
612
  case TYPE_ENUM:
619
613
  field.listKind = "enum";
620
614
  field.enum = reg.getEnum(trimLeadingDot(proto.typeName));
621
- (0, assert_js_1.assert)(field.enum);
615
+ assert(field.enum);
622
616
  break;
623
617
  default:
624
618
  field.listKind = "scalar";
625
619
  field.scalar = type;
626
- field.longType =
627
- jstype == JS_STRING ? scalar_js_1.LongType.STRING : scalar_js_1.LongType.BIGINT;
620
+ field.longAsString = jstype == JS_STRING;
628
621
  break;
629
622
  }
630
623
  field.packed = isPackedField(proto, parentOrFile);
@@ -636,13 +629,13 @@ function newField(proto, parentOrFile, reg, oneof, mapEntries) {
636
629
  case TYPE_GROUP:
637
630
  field.fieldKind = "message";
638
631
  field.message = reg.getMessage(trimLeadingDot(proto.typeName));
639
- (0, assert_js_1.assert)(field.message, `invalid FieldDescriptorProto: type_name ${proto.typeName} not found`);
632
+ assert(field.message, `invalid FieldDescriptorProto: type_name ${proto.typeName} not found`);
640
633
  field.delimitedEncoding = isDelimitedEncoding(proto, parentOrFile);
641
634
  field.getDefaultValue = () => undefined;
642
635
  break;
643
636
  case TYPE_ENUM: {
644
637
  const enumeration = reg.getEnum(trimLeadingDot(proto.typeName));
645
- (0, assert_js_1.assert)(enumeration !== undefined, `invalid FieldDescriptorProto: type_name ${proto.typeName} not found`);
638
+ assert(enumeration !== undefined, `invalid FieldDescriptorProto: type_name ${proto.typeName} not found`);
646
639
  field.fieldKind = "enum";
647
640
  field.enum = reg.getEnum(trimLeadingDot(proto.typeName));
648
641
  field.getDefaultValue = () => {
@@ -655,7 +648,7 @@ function newField(proto, parentOrFile, reg, oneof, mapEntries) {
655
648
  default: {
656
649
  field.fieldKind = "scalar";
657
650
  field.scalar = type;
658
- field.longType = jstype == JS_STRING ? scalar_js_1.LongType.STRING : scalar_js_1.LongType.BIGINT;
651
+ field.longAsString = jstype == JS_STRING;
659
652
  field.getDefaultValue = () => {
660
653
  return (0, unsafe_js_1.unsafeIsSetExplicit)(proto, "defaultValue")
661
654
  ? (0, text_format_js_1.parseTextFormatScalarValue)(type, proto.defaultValue)
@@ -773,7 +766,7 @@ function findOneof(proto, allOneofs) {
773
766
  return undefined;
774
767
  }
775
768
  const oneof = allOneofs[proto.oneofIndex];
776
- (0, assert_js_1.assert)(oneof, `invalid FieldDescriptorProto: oneof #${proto.oneofIndex} for field #${proto.number} not found`);
769
+ assert(oneof, `invalid FieldDescriptorProto: oneof #${proto.oneofIndex} for field #${proto.number} not found`);
777
770
  return oneof;
778
771
  }
779
772
  /**
@@ -830,6 +823,22 @@ function isPackedField(proto, parent) {
830
823
  parent,
831
824
  }));
832
825
  }
826
+ /**
827
+ * Find the key and value fields of a synthetic map entry message.
828
+ */
829
+ function findMapEntryFields(mapEntry) {
830
+ const key = mapEntry.fields.find((f) => f.number === 1);
831
+ const value = mapEntry.fields.find((f) => f.number === 2);
832
+ assert(key &&
833
+ key.fieldKind == "scalar" &&
834
+ key.scalar != descriptors_js_1.ScalarType.BYTES &&
835
+ key.scalar != descriptors_js_1.ScalarType.FLOAT &&
836
+ key.scalar != descriptors_js_1.ScalarType.DOUBLE &&
837
+ value &&
838
+ value.fieldKind != "list" &&
839
+ value.fieldKind != "map");
840
+ return { key, value };
841
+ }
833
842
  /**
834
843
  * Enumerations can be open or closed.
835
844
  * See https://protobuf.dev/programming-guides/enum/
@@ -877,3 +886,12 @@ function resolveFeature(name, ref) {
877
886
  }
878
887
  return resolveFeature(name, ref.parent);
879
888
  }
889
+ /**
890
+ * Assert that condition is truthy or throw error (with message)
891
+ */
892
+ function assert(condition, msg) {
893
+ // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions -- we want the implicit conversion to boolean
894
+ if (!condition) {
895
+ throw new Error(msg);
896
+ }
897
+ }
@@ -1,6 +1,6 @@
1
1
  import type { MessageShape } from "./types.js";
2
2
  import { BinaryWriter } from "./wire/binary-encoding.js";
3
- import type { DescField, DescMessage } from "./desc-types.js";
3
+ import { type DescField, type DescMessage } from "./descriptors.js";
4
4
  import type { ReflectMessage } from "./reflect/index.js";
5
5
  /**
6
6
  * Options for serializing to binary data.