@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
@@ -12,8 +12,7 @@
12
12
  // See the License for the specific language governing permissions and
13
13
  // limitations under the License.
14
14
  import { restoreJsonNames } from "./restore-json-names.js";
15
- import { createFileRegistry } from "../reflect/registry.js";
16
- import { assert } from "../reflect/assert.js";
15
+ import { createFileRegistry } from "../registry.js";
17
16
  /**
18
17
  * Hydrate a file descriptor for google/protobuf/descriptor.proto from a plain
19
18
  * object.
@@ -26,9 +25,8 @@ export function boot(boot) {
26
25
  const root = bootFileDescriptorProto(boot);
27
26
  root.messageType.forEach(restoreJsonNames);
28
27
  const reg = createFileRegistry(root, () => undefined);
29
- const file = reg.getFile(root.name);
30
- assert(file);
31
- return file;
28
+ // non-null assertion because we just created the registry from the file we look up
29
+ return reg.getFile(root.name);
32
30
  }
33
31
  /**
34
32
  * Creates the message google.protobuf.FileDescriptorProto from an object literal.
@@ -1,4 +1,4 @@
1
- import type { DescEnum, DescExtension, DescFile, DescMessage, DescService } from "../desc-types.js";
1
+ import type { DescEnum, DescExtension, DescMessage, DescService } from "../descriptors.js";
2
2
  import type { FileDescriptorProto } from "../wkt/gen/google/protobuf/descriptor_pb.js";
3
3
  import type { FileDescriptorProtoBoot } from "./boot.js";
4
4
  type EmbedUnknown = {
@@ -16,7 +16,7 @@ type EmbedDescriptorProto = Omit<EmbedUnknown, "bootable"> & {
16
16
  *
17
17
  * @private
18
18
  */
19
- export declare function embedFileDesc(file: DescFile): EmbedUnknown | EmbedDescriptorProto;
19
+ export declare function embedFileDesc(file: FileDescriptorProto): EmbedUnknown | EmbedDescriptorProto;
20
20
  /**
21
21
  * Compute the path to a message, enumeration, extension, or service in a
22
22
  * file descriptor.
@@ -12,7 +12,6 @@
12
12
  // See the License for the specific language governing permissions and
13
13
  // limitations under the License.
14
14
  import { protoCamelCase } from "../reflect/names.js";
15
- import { assert } from "../reflect/assert.js";
16
15
  import { isFieldSet, clearField } from "../fields.js";
17
16
  import { base64Encode } from "../wire/base64-encoding.js";
18
17
  import { toBinary } from "../to-binary.js";
@@ -28,9 +27,9 @@ export function embedFileDesc(file) {
28
27
  const embed = {
29
28
  bootable: false,
30
29
  proto() {
31
- const stripped = clone(FileDescriptorProtoDesc, file.proto);
32
- clearField(FileDescriptorProtoDesc, stripped, "dependency");
33
- clearField(FileDescriptorProtoDesc, stripped, "sourceCodeInfo");
30
+ const stripped = clone(FileDescriptorProtoDesc, file);
31
+ clearField(stripped, FileDescriptorProtoDesc.field.dependency);
32
+ clearField(stripped, FileDescriptorProtoDesc.field.sourceCodeInfo);
34
33
  stripped.messageType.map(stripJsonNames);
35
34
  return stripped;
36
35
  },
@@ -39,7 +38,7 @@ export function embedFileDesc(file) {
39
38
  return base64Encode(bytes, "std_raw");
40
39
  },
41
40
  };
42
- return file.proto.name == "google/protobuf/descriptor.proto"
41
+ return file.name == "google/protobuf/descriptor.proto"
43
42
  ? Object.assign(Object.assign({}, embed), { bootable: true, boot() {
44
43
  return createFileDescriptorProtoBoot(this.proto());
45
44
  } }) : embed;
@@ -47,7 +46,7 @@ export function embedFileDesc(file) {
47
46
  function stripJsonNames(d) {
48
47
  for (const f of d.field) {
49
48
  if (f.jsonName === protoCamelCase(f.name)) {
50
- clearField(FieldDescriptorProtoDesc, f, "jsonName");
49
+ clearField(f, FieldDescriptorProtoDesc.field.jsonName);
51
50
  }
52
51
  }
53
52
  for (const n of d.nestedType) {
@@ -135,7 +134,6 @@ function createDescriptorBoot(proto) {
135
134
  assert(proto.extension.length == 0);
136
135
  assert(!proto.oneofDecl.length);
137
136
  assert(!proto.options);
138
- assert(!proto.reservedName.length); // we're also dropping reserved_range
139
137
  const b = {
140
138
  name: proto.name,
141
139
  };
@@ -157,27 +155,27 @@ function createDescriptorBoot(proto) {
157
155
  return b;
158
156
  }
159
157
  function createFieldDescriptorBoot(proto) {
160
- assert(isFieldSet(FieldDescriptorProtoDesc, proto, "name"));
161
- assert(isFieldSet(FieldDescriptorProtoDesc, proto, "number"));
162
- assert(isFieldSet(FieldDescriptorProtoDesc, proto, "type"));
163
- assert(!isFieldSet(FieldDescriptorProtoDesc, proto, "oneofIndex"));
164
- assert(!isFieldSet(FieldDescriptorProtoDesc, proto, "jsonName") ||
158
+ assert(isFieldSet(proto, FieldDescriptorProtoDesc.field.name));
159
+ assert(isFieldSet(proto, FieldDescriptorProtoDesc.field.number));
160
+ assert(isFieldSet(proto, FieldDescriptorProtoDesc.field.type));
161
+ assert(!isFieldSet(proto, FieldDescriptorProtoDesc.field.oneofIndex));
162
+ assert(!isFieldSet(proto, FieldDescriptorProtoDesc.field.jsonName) ||
165
163
  proto.jsonName === protoCamelCase(proto.name));
166
164
  const b = {
167
165
  name: proto.name,
168
166
  number: proto.number,
169
167
  type: proto.type,
170
168
  };
171
- if (isFieldSet(FieldDescriptorProtoDesc, proto, "label")) {
169
+ if (isFieldSet(proto, FieldDescriptorProtoDesc.field.label)) {
172
170
  b.label = proto.label;
173
171
  }
174
- if (isFieldSet(FieldDescriptorProtoDesc, proto, "typeName")) {
172
+ if (isFieldSet(proto, FieldDescriptorProtoDesc.field.typeName)) {
175
173
  b.typeName = proto.typeName;
176
174
  }
177
- if (isFieldSet(FieldDescriptorProtoDesc, proto, "extendee")) {
175
+ if (isFieldSet(proto, FieldDescriptorProtoDesc.field.extendee)) {
178
176
  b.extendee = proto.extendee;
179
177
  }
180
- if (isFieldSet(FieldDescriptorProtoDesc, proto, "defaultValue")) {
178
+ if (isFieldSet(proto, FieldDescriptorProtoDesc.field.defaultValue)) {
181
179
  b.defaultValue = proto.defaultValue;
182
180
  }
183
181
  if (proto.options) {
@@ -187,19 +185,19 @@ function createFieldDescriptorBoot(proto) {
187
185
  }
188
186
  function createFieldOptionsBoot(proto) {
189
187
  const b = {};
190
- assert(!isFieldSet(FieldOptionsDesc, proto, "ctype"));
191
- if (isFieldSet(FieldOptionsDesc, proto, "packed")) {
188
+ assert(!isFieldSet(proto, FieldOptionsDesc.field.ctype));
189
+ if (isFieldSet(proto, FieldOptionsDesc.field.packed)) {
192
190
  b.packed = proto.packed;
193
191
  }
194
- assert(!isFieldSet(FieldOptionsDesc, proto, "jstype"));
195
- assert(!isFieldSet(FieldOptionsDesc, proto, "lazy"));
196
- assert(!isFieldSet(FieldOptionsDesc, proto, "unverifiedLazy"));
197
- if (isFieldSet(FieldOptionsDesc, proto, "deprecated")) {
192
+ assert(!isFieldSet(proto, FieldOptionsDesc.field.jstype));
193
+ assert(!isFieldSet(proto, FieldOptionsDesc.field.lazy));
194
+ assert(!isFieldSet(proto, FieldOptionsDesc.field.unverifiedLazy));
195
+ if (isFieldSet(proto, FieldOptionsDesc.field.deprecated)) {
198
196
  b.deprecated = proto.deprecated;
199
197
  }
200
- assert(!isFieldSet(FieldOptionsDesc, proto, "weak"));
201
- assert(!isFieldSet(FieldOptionsDesc, proto, "debugRedact"));
202
- if (isFieldSet(FieldOptionsDesc, proto, "retention")) {
198
+ assert(!isFieldSet(proto, FieldOptionsDesc.field.weak));
199
+ assert(!isFieldSet(proto, FieldOptionsDesc.field.debugRedact));
200
+ if (isFieldSet(proto, FieldOptionsDesc.field.retention)) {
203
201
  b.retention = proto.retention;
204
202
  }
205
203
  if (proto.targets.length) {
@@ -211,13 +209,11 @@ function createFieldOptionsBoot(proto) {
211
209
  edition: d.edition,
212
210
  }));
213
211
  }
214
- assert(!isFieldSet(FieldOptionsDesc, proto, "features"));
215
- assert(!isFieldSet(FieldOptionsDesc, proto, "uninterpretedOption"));
212
+ assert(!isFieldSet(proto, FieldOptionsDesc.field.features));
213
+ assert(!isFieldSet(proto, FieldOptionsDesc.field.uninterpretedOption));
216
214
  return b;
217
215
  }
218
216
  function createEnumDescriptorBoot(proto) {
219
- assert(!proto.reservedName.length);
220
- assert(!proto.reservedRange.length);
221
217
  assert(!proto.options);
222
218
  return {
223
219
  name: proto.name,
@@ -230,3 +226,12 @@ function createEnumDescriptorBoot(proto) {
230
226
  }),
231
227
  };
232
228
  }
229
+ /**
230
+ * Assert that condition is truthy or throw error.
231
+ */
232
+ function assert(condition) {
233
+ // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions -- we want the implicit conversion to boolean
234
+ if (!condition) {
235
+ throw new Error();
236
+ }
237
+ }
@@ -1,4 +1,4 @@
1
- import type { DescEnum, DescFile } from "../desc-types.js";
1
+ import type { DescEnum, DescFile } from "../descriptors.js";
2
2
  import type { GenDescEnum } from "./types.js";
3
3
  /**
4
4
  * Hydrate an enum descriptor.
@@ -11,7 +11,6 @@
11
11
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  // See the License for the specific language governing permissions and
13
13
  // limitations under the License.
14
- import { localName } from "../reflect/names.js";
15
14
  /**
16
15
  * Hydrate an enum descriptor.
17
16
  *
@@ -30,9 +29,8 @@ export function enumDesc(file, path, ...paths) {
30
29
  export function tsEnum(desc) {
31
30
  const enumObject = {};
32
31
  for (const value of desc.values) {
33
- const name = localName(value);
34
- enumObject[name] = value.number;
35
- enumObject[value.number] = name;
32
+ enumObject[value.localName] = value.number;
33
+ enumObject[value.number] = value.localName;
36
34
  }
37
35
  return enumObject;
38
36
  }
@@ -1,5 +1,5 @@
1
1
  import type { Message } from "../types.js";
2
- import type { DescFile } from "../desc-types.js";
2
+ import type { DescFile } from "../descriptors.js";
3
3
  import type { GenDescExtension } from "./types.js";
4
4
  /**
5
5
  * Hydrate an extension descriptor.
@@ -1,4 +1,4 @@
1
- import type { DescFile } from "../desc-types.js";
1
+ import type { DescFile } from "../descriptors.js";
2
2
  /**
3
3
  * Hydrate a file descriptor.
4
4
  *
@@ -11,10 +11,9 @@
11
11
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  // See the License for the specific language governing permissions and
13
13
  // limitations under the License.
14
- import { base64Decode } from "../wire/index.js";
14
+ import { base64Decode } from "../wire/base64-encoding.js";
15
15
  import { FileDescriptorProtoDesc } from "../wkt/gen/google/protobuf/descriptor_pb.js";
16
- import { createFileRegistry } from "../reflect/registry.js";
17
- import { assert } from "../reflect/assert.js";
16
+ import { createFileRegistry } from "../registry.js";
18
17
  import { restoreJsonNames } from "./restore-json-names.js";
19
18
  import { fromBinary } from "../from-binary.js";
20
19
  /**
@@ -28,7 +27,6 @@ export function fileDesc(b64, imports) {
28
27
  root.messageType.forEach(restoreJsonNames);
29
28
  root.dependency = (_a = imports === null || imports === void 0 ? void 0 : imports.map((f) => f.proto.name)) !== null && _a !== void 0 ? _a : [];
30
29
  const reg = createFileRegistry(root, (protoFileName) => imports === null || imports === void 0 ? void 0 : imports.find((f) => f.proto.name === protoFileName));
31
- const file = reg.getFile(root.name);
32
- assert(file);
33
- return file;
30
+ // non-null assertion because we just created the registry from the file we look up
31
+ return reg.getFile(root.name);
34
32
  }
@@ -6,4 +6,5 @@ export * from "./file.js";
6
6
  export * from "./message.js";
7
7
  export * from "./service.js";
8
8
  export * from "./symbols.js";
9
+ export * from "./scalar.js";
9
10
  export * from "./types.js";
@@ -19,4 +19,5 @@ export * from "./file.js";
19
19
  export * from "./message.js";
20
20
  export * from "./service.js";
21
21
  export * from "./symbols.js";
22
+ export * from "./scalar.js";
22
23
  export * from "./types.js";
@@ -1,5 +1,5 @@
1
1
  import type { Message } from "../types.js";
2
- import type { DescFile } from "../desc-types.js";
2
+ import type { DescFile } from "../descriptors.js";
3
3
  import type { GenDescMessage } from "./types.js";
4
4
  /**
5
5
  * Hydrate a message descriptor.
@@ -1,2 +1,5 @@
1
1
  import type { DescriptorProto } from "../wkt/gen/google/protobuf/descriptor_pb.js";
2
+ /**
3
+ * @private
4
+ */
2
5
  export declare function restoreJsonNames(message: DescriptorProto): void;
@@ -13,6 +13,9 @@
13
13
  // limitations under the License.
14
14
  import { protoCamelCase } from "../reflect/names.js";
15
15
  import { unsafeIsSetExplicit } from "../reflect/unsafe.js";
16
+ /**
17
+ * @private
18
+ */
16
19
  export function restoreJsonNames(message) {
17
20
  for (const f of message.field) {
18
21
  if (!unsafeIsSetExplicit(f, "jsonName")) {
@@ -0,0 +1,5 @@
1
+ import { ScalarType } from "../descriptors.js";
2
+ /**
3
+ * Return the TypeScript type (as a string) for the given scalar type.
4
+ */
5
+ export declare function scalarTypeScriptType(scalar: ScalarType, longAsString: boolean): "string" | "boolean" | "bigint" | "bigint | string" | "Uint8Array" | "number";
@@ -0,0 +1,35 @@
1
+ // Copyright 2021-2024 Buf Technologies, Inc.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ import { ScalarType } from "../descriptors.js";
15
+ /**
16
+ * Return the TypeScript type (as a string) for the given scalar type.
17
+ */
18
+ export function scalarTypeScriptType(scalar, longAsString) {
19
+ switch (scalar) {
20
+ case ScalarType.STRING:
21
+ return "string";
22
+ case ScalarType.BOOL:
23
+ return "boolean";
24
+ case ScalarType.UINT64:
25
+ case ScalarType.SFIXED64:
26
+ case ScalarType.FIXED64:
27
+ case ScalarType.SINT64:
28
+ case ScalarType.INT64:
29
+ return longAsString ? "string" : "bigint";
30
+ case ScalarType.BYTES:
31
+ return "Uint8Array";
32
+ default:
33
+ return "number";
34
+ }
35
+ }
@@ -1,8 +1,8 @@
1
- import type { GenDescService, GenDescServiceShape } from "./types.js";
2
- import type { DescFile } from "../desc-types.js";
1
+ import type { GenDescService, GenDescServiceMethods } from "./types.js";
2
+ import type { DescFile } from "../descriptors.js";
3
3
  /**
4
4
  * Hydrate a service descriptor.
5
5
  *
6
6
  * @private
7
7
  */
8
- export declare function serviceDesc<T extends GenDescServiceShape>(file: DescFile, path: number, ...paths: number[]): GenDescService<T>;
8
+ export declare function serviceDesc<T extends GenDescServiceMethods>(file: DescFile, path: number, ...paths: number[]): GenDescService<T>;
@@ -1,5 +1,14 @@
1
+ /**
2
+ * @private
3
+ */
1
4
  export declare const packageName = "@bufbuild/protobuf";
5
+ /**
6
+ * @private
7
+ */
2
8
  export declare const wktPublicImportPaths: Readonly<Record<string, string>>;
9
+ /**
10
+ * @private
11
+ */
3
12
  export declare const symbols: {
4
13
  readonly isMessage: {
5
14
  readonly typeOnly: false;
@@ -11,7 +11,13 @@
11
11
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  // See the License for the specific language governing permissions and
13
13
  // limitations under the License.
14
+ /**
15
+ * @private
16
+ */
14
17
  export const packageName = "@bufbuild/protobuf";
18
+ /**
19
+ * @private
20
+ */
15
21
  export const wktPublicImportPaths = {
16
22
  "google/protobuf/compiler/plugin.proto": packageName + "/wkt",
17
23
  "google/protobuf/any.proto": packageName + "/wkt",
@@ -26,6 +32,9 @@ export const wktPublicImportPaths = {
26
32
  "google/protobuf/type.proto": packageName + "/wkt",
27
33
  "google/protobuf/wrappers.proto": packageName + "/wkt",
28
34
  };
35
+ /**
36
+ * @private
37
+ */
29
38
  // prettier-ignore
30
39
  export const symbols = {
31
40
  isMessage: { typeOnly: false, bootstrapWktFrom: "../../is-message.js", from: packageName },
@@ -1,19 +1,70 @@
1
1
  import type { Message } from "../types.js";
2
- import type { DescEnum, DescExtension, DescFile, DescMessage, DescService } from "../desc-types.js";
2
+ import type { DescEnum, DescExtension, DescField, DescFile, DescMessage, DescMethod, DescService } from "../descriptors.js";
3
+ /**
4
+ * Describes a protobuf source file.
5
+ *
6
+ * @private
7
+ */
3
8
  export type GenDescFile = DescFile;
4
- export type GenDescMessage<RuntimeShape extends Message> = DescMessage & brand<RuntimeShape>;
9
+ /**
10
+ * Describes a message declaration in a protobuf source file.
11
+ *
12
+ * This type is identical to DescMessage, but carries additional type
13
+ * information.
14
+ *
15
+ * @private
16
+ */
17
+ export type GenDescMessage<RuntimeShape extends Message> = Omit<DescMessage, "field"> & {
18
+ field: Record<MessageFieldNames<RuntimeShape>, DescField>;
19
+ } & brand<RuntimeShape>;
20
+ /**
21
+ * Describes an enumeration in a protobuf source file.
22
+ *
23
+ * This type is identical to DescEnum, but carries additional type
24
+ * information.
25
+ *
26
+ * @private
27
+ */
5
28
  export type GenDescEnum<RuntimeShape> = DescEnum & brand<RuntimeShape>;
29
+ /**
30
+ * Describes an extension in a protobuf source file.
31
+ *
32
+ * This type is identical to DescExtension, but carries additional type
33
+ * information.
34
+ *
35
+ * @private
36
+ */
6
37
  export type GenDescExtension<Extendee extends Message = Message, RuntimeShape = unknown> = DescExtension & brand<Extendee, RuntimeShape>;
7
- export type GenDescService<RuntimeShape extends GenDescServiceShape> = DescService & brand<RuntimeShape>;
8
- export type GenDescServiceShape = {
9
- [localName: string]: {
10
- kind: "unary" | "server_streaming" | "client_streaming" | "bidi_streaming";
11
- I: Message;
12
- O: Message;
38
+ /**
39
+ * Describes a service declaration in a protobuf source file.
40
+ *
41
+ * This type is identical to DescService, but carries additional type
42
+ * information.
43
+ *
44
+ * @private
45
+ */
46
+ export type GenDescService<RuntimeShape extends GenDescServiceMethods> = Omit<DescService, "method"> & {
47
+ method: {
48
+ [K in keyof RuntimeShape]: RuntimeShape[K] & DescMethod;
13
49
  };
14
50
  };
51
+ /**
52
+ * @private
53
+ */
54
+ export type GenDescServiceMethods = Record<string, Pick<DescMethod, "input" | "output" | "methodKind">>;
15
55
  declare class brand<A, B = unknown> {
16
56
  protected a: A | boolean;
17
57
  protected b: B | boolean;
18
58
  }
59
+ /**
60
+ * Union of the property names of all fields, including oneof members.
61
+ * For an anonymous message (no generated message shape), it's simply a string.
62
+ */
63
+ type MessageFieldNames<T extends Message> = Message extends T ? string : Exclude<keyof {
64
+ [P in keyof T as P extends ("$typeName" | "$unknown") ? never : T[P] extends Oneof<infer K> ? K : P]-?: true;
65
+ }, number | symbol>;
66
+ type Oneof<K extends string> = {
67
+ case: K | undefined;
68
+ value?: unknown;
69
+ };
19
70
  export {};
@@ -1,4 +1,4 @@
1
- import type { DescMessage } from "./desc-types.js";
1
+ import { type DescMessage } from "./descriptors.js";
2
2
  import type { MessageInitShape, MessageShape } from "./types.js";
3
3
  /**
4
4
  * Create a new message instance.
@@ -12,16 +12,14 @@
12
12
  // See the License for the specific language governing permissions and
13
13
  // limitations under the License.
14
14
  import { isMessage } from "./is-message.js";
15
- import { localName } from "./reflect/names.js";
16
- import { LongType, ScalarType, scalarZeroValue } from "./reflect/scalar.js";
15
+ import { ScalarType, } from "./descriptors.js";
16
+ import { scalarZeroValue } from "./reflect/scalar.js";
17
17
  import { FieldError } from "./reflect/error.js";
18
18
  import { isObject } from "./reflect/guard.js";
19
19
  import { unsafeGet, unsafeOneofCase, unsafeSet } from "./reflect/unsafe.js";
20
20
  import { isWrapperDesc } from "./wkt/wrappers.js";
21
21
  // bootstrap-inject google.protobuf.Edition.EDITION_PROTO3: const $name: Edition.$localName = $number;
22
22
  const EDITION_PROTO3 = 999;
23
- // bootstrap-inject google.protobuf.FeatureSet.FieldPresence.EXPLICIT: const $name: FeatureSet_FieldPresence.$localName = $number;
24
- const EXPLICIT = 1;
25
23
  // bootstrap-inject google.protobuf.FeatureSet.FieldPresence.IMPLICIT: const $name: FeatureSet_FieldPresence.$localName = $number;
26
24
  const IMPLICIT = 2;
27
25
  /**
@@ -45,7 +43,7 @@ export function create(messageDesc, init) {
45
43
  */
46
44
  function initMessage(messageDesc, message, init) {
47
45
  for (const member of messageDesc.members) {
48
- let value = init[localName(member)];
46
+ let value = init[member.localName];
49
47
  if (value == null) {
50
48
  // intentionally ignore undefined and null
51
49
  continue;
@@ -143,17 +141,9 @@ function createZeroMessage(desc) {
143
141
  // the `optional` keyword generate an optional property.
144
142
  msg = {};
145
143
  for (const member of desc.members) {
146
- if (member.kind == "field") {
147
- if (member.fieldKind == "scalar" ||
148
- member.fieldKind == "enum" ||
149
- member.fieldKind == "message") {
150
- if (member.presence == EXPLICIT) {
151
- // skips message fields and optional scalar/enum
152
- continue;
153
- }
154
- }
144
+ if (member.kind == "oneof" || member.presence == IMPLICIT) {
145
+ msg[member.localName] = createZeroField(member);
155
146
  }
156
- msg[localName(member)] = createZeroField(member);
157
147
  }
158
148
  }
159
149
  else {
@@ -180,12 +170,12 @@ function createZeroMessage(desc) {
180
170
  continue;
181
171
  }
182
172
  if (member.presence == IMPLICIT) {
183
- // implicit presence tracks field presence by zero values
184
- // e.g. 0, false, "", are unset, 1, true, "x" are set
173
+ // implicit presence tracks field presence by zero values - e.g. 0, false, "", are unset, 1, true, "x" are set.
174
+ // message, map, list fields are mutable, and also have IMPLICIT presence.
185
175
  continue;
186
176
  }
187
177
  members.add(member);
188
- prototype[localName(member)] = createZeroField(member);
178
+ prototype[member.localName] = createZeroField(member);
189
179
  }
190
180
  messagePrototypes.set(desc, { prototype, members });
191
181
  }
@@ -204,7 +194,7 @@ function createZeroMessage(desc) {
204
194
  }
205
195
  }
206
196
  }
207
- msg[localName(member)] = createZeroField(member);
197
+ msg[member.localName] = createZeroField(member);
208
198
  }
209
199
  }
210
200
  msg.$typeName = desc.typeName;
@@ -229,11 +219,11 @@ function createZeroField(field) {
229
219
  }
230
220
  const defaultValue = field.getDefaultValue();
231
221
  if (defaultValue !== undefined) {
232
- return field.fieldKind == "scalar" && field.longType == LongType.STRING
222
+ return field.fieldKind == "scalar" && field.longAsString
233
223
  ? defaultValue.toString()
234
224
  : defaultValue;
235
225
  }
236
226
  return field.fieldKind == "scalar"
237
- ? scalarZeroValue(field.scalar, field.longType)
227
+ ? scalarZeroValue(field.scalar, field.longAsString)
238
228
  : field.enum.values[0].number;
239
229
  }