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

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 (130) hide show
  1. package/dist/cjs/clone.d.ts +1 -1
  2. package/dist/cjs/clone.js +9 -17
  3. package/dist/cjs/codegenv1/embed.js +25 -25
  4. package/dist/cjs/codegenv1/enum.d.ts +2 -1
  5. package/dist/cjs/codegenv1/file.js +1 -1
  6. package/dist/cjs/codegenv1/message.d.ts +2 -1
  7. package/dist/cjs/codegenv1/scalar.d.ts +4 -0
  8. package/dist/cjs/codegenv1/scalar.js +30 -1
  9. package/dist/cjs/codegenv1/symbols.d.ts +10 -0
  10. package/dist/cjs/codegenv1/symbols.js +2 -0
  11. package/dist/cjs/codegenv1/types.d.ts +7 -5
  12. package/dist/cjs/codegenv1/types.js +2 -1
  13. package/dist/cjs/create.d.ts +1 -1
  14. package/dist/cjs/create.js +47 -20
  15. package/dist/cjs/equals.d.ts +1 -1
  16. package/dist/cjs/equals.js +8 -15
  17. package/dist/cjs/from-binary.d.ts +2 -2
  18. package/dist/cjs/from-binary.js +17 -14
  19. package/dist/cjs/from-json.d.ts +14 -6
  20. package/dist/cjs/from-json.js +51 -55
  21. package/dist/cjs/is-message.d.ts +1 -1
  22. package/dist/cjs/is-message.js +3 -3
  23. package/dist/cjs/reflect/guard.js +4 -4
  24. package/dist/cjs/reflect/reflect-types.d.ts +13 -80
  25. package/dist/cjs/reflect/reflect.d.ts +29 -18
  26. package/dist/cjs/reflect/reflect.js +183 -78
  27. package/dist/cjs/reflect/scalar.d.ts +1 -1
  28. package/dist/cjs/reflect/unsafe.d.ts +0 -16
  29. package/dist/cjs/reflect/unsafe.js +1 -19
  30. package/dist/cjs/registry.d.ts +18 -2
  31. package/dist/cjs/registry.js +62 -60
  32. package/dist/cjs/to-binary.d.ts +1 -1
  33. package/dist/cjs/to-binary.js +2 -2
  34. package/dist/cjs/to-json.d.ts +14 -4
  35. package/dist/cjs/to-json.js +26 -13
  36. package/dist/cjs/types.d.ts +9 -0
  37. package/dist/cjs/wire/binary-encoding.js +30 -9
  38. package/dist/cjs/wkt/any.d.ts +7 -7
  39. package/dist/cjs/wkt/any.js +5 -5
  40. package/dist/cjs/wkt/gen/google/protobuf/any_pb.d.ts +9 -3
  41. package/dist/cjs/wkt/gen/google/protobuf/any_pb.js +4 -4
  42. package/dist/cjs/wkt/gen/google/protobuf/api_pb.d.ts +88 -9
  43. package/dist/cjs/wkt/gen/google/protobuf/api_pb.js +8 -8
  44. package/dist/cjs/wkt/gen/google/protobuf/compiler/plugin_pb.d.ts +107 -11
  45. package/dist/cjs/wkt/gen/google/protobuf/compiler/plugin_pb.js +11 -11
  46. package/dist/cjs/wkt/gen/google/protobuf/descriptor_pb.d.ts +1005 -92
  47. package/dist/cjs/wkt/gen/google/protobuf/descriptor_pb.js +86 -86
  48. package/dist/cjs/wkt/gen/google/protobuf/duration_pb.d.ts +7 -3
  49. package/dist/cjs/wkt/gen/google/protobuf/duration_pb.js +4 -4
  50. package/dist/cjs/wkt/gen/google/protobuf/empty_pb.d.ts +7 -3
  51. package/dist/cjs/wkt/gen/google/protobuf/empty_pb.js +4 -4
  52. package/dist/cjs/wkt/gen/google/protobuf/field_mask_pb.d.ts +7 -3
  53. package/dist/cjs/wkt/gen/google/protobuf/field_mask_pb.js +4 -4
  54. package/dist/cjs/wkt/gen/google/protobuf/source_context_pb.d.ts +12 -3
  55. package/dist/cjs/wkt/gen/google/protobuf/source_context_pb.js +4 -4
  56. package/dist/cjs/wkt/gen/google/protobuf/struct_pb.d.ts +25 -8
  57. package/dist/cjs/wkt/gen/google/protobuf/struct_pb.js +9 -9
  58. package/dist/cjs/wkt/gen/google/protobuf/timestamp_pb.d.ts +7 -3
  59. package/dist/cjs/wkt/gen/google/protobuf/timestamp_pb.js +4 -4
  60. package/dist/cjs/wkt/gen/google/protobuf/type_pb.d.ts +165 -16
  61. package/dist/cjs/wkt/gen/google/protobuf/type_pb.js +15 -15
  62. package/dist/cjs/wkt/gen/google/protobuf/wrappers_pb.d.ts +55 -19
  63. package/dist/cjs/wkt/gen/google/protobuf/wrappers_pb.js +20 -20
  64. package/dist/cjs/wkt/timestamp.js +1 -2
  65. package/dist/esm/clone.d.ts +1 -1
  66. package/dist/esm/clone.js +9 -17
  67. package/dist/esm/codegenv1/embed.js +26 -26
  68. package/dist/esm/codegenv1/enum.d.ts +2 -1
  69. package/dist/esm/codegenv1/file.js +2 -2
  70. package/dist/esm/codegenv1/message.d.ts +2 -1
  71. package/dist/esm/codegenv1/scalar.d.ts +4 -0
  72. package/dist/esm/codegenv1/scalar.js +28 -0
  73. package/dist/esm/codegenv1/symbols.d.ts +10 -0
  74. package/dist/esm/codegenv1/symbols.js +2 -0
  75. package/dist/esm/codegenv1/types.d.ts +7 -5
  76. package/dist/esm/codegenv1/types.js +2 -1
  77. package/dist/esm/create.d.ts +1 -1
  78. package/dist/esm/create.js +47 -20
  79. package/dist/esm/equals.d.ts +1 -1
  80. package/dist/esm/equals.js +8 -15
  81. package/dist/esm/from-binary.d.ts +2 -2
  82. package/dist/esm/from-binary.js +17 -14
  83. package/dist/esm/from-json.d.ts +14 -6
  84. package/dist/esm/from-json.js +49 -55
  85. package/dist/esm/is-message.d.ts +1 -1
  86. package/dist/esm/is-message.js +3 -3
  87. package/dist/esm/reflect/guard.js +4 -4
  88. package/dist/esm/reflect/reflect-types.d.ts +13 -80
  89. package/dist/esm/reflect/reflect-types.js +0 -1
  90. package/dist/esm/reflect/reflect.d.ts +29 -18
  91. package/dist/esm/reflect/reflect.js +185 -80
  92. package/dist/esm/reflect/scalar.d.ts +1 -1
  93. package/dist/esm/reflect/unsafe.d.ts +0 -16
  94. package/dist/esm/reflect/unsafe.js +0 -16
  95. package/dist/esm/registry.d.ts +18 -2
  96. package/dist/esm/registry.js +60 -59
  97. package/dist/esm/to-binary.d.ts +1 -1
  98. package/dist/esm/to-binary.js +2 -2
  99. package/dist/esm/to-json.d.ts +14 -4
  100. package/dist/esm/to-json.js +24 -12
  101. package/dist/esm/types.d.ts +9 -0
  102. package/dist/esm/wire/binary-encoding.js +30 -9
  103. package/dist/esm/wkt/any.d.ts +7 -7
  104. package/dist/esm/wkt/any.js +6 -6
  105. package/dist/esm/wkt/gen/google/protobuf/any_pb.d.ts +9 -3
  106. package/dist/esm/wkt/gen/google/protobuf/any_pb.js +3 -3
  107. package/dist/esm/wkt/gen/google/protobuf/api_pb.d.ts +88 -9
  108. package/dist/esm/wkt/gen/google/protobuf/api_pb.js +9 -9
  109. package/dist/esm/wkt/gen/google/protobuf/compiler/plugin_pb.d.ts +107 -11
  110. package/dist/esm/wkt/gen/google/protobuf/compiler/plugin_pb.js +11 -11
  111. package/dist/esm/wkt/gen/google/protobuf/descriptor_pb.d.ts +1005 -92
  112. package/dist/esm/wkt/gen/google/protobuf/descriptor_pb.js +84 -84
  113. package/dist/esm/wkt/gen/google/protobuf/duration_pb.d.ts +7 -3
  114. package/dist/esm/wkt/gen/google/protobuf/duration_pb.js +3 -3
  115. package/dist/esm/wkt/gen/google/protobuf/empty_pb.d.ts +7 -3
  116. package/dist/esm/wkt/gen/google/protobuf/empty_pb.js +3 -3
  117. package/dist/esm/wkt/gen/google/protobuf/field_mask_pb.d.ts +7 -3
  118. package/dist/esm/wkt/gen/google/protobuf/field_mask_pb.js +3 -3
  119. package/dist/esm/wkt/gen/google/protobuf/source_context_pb.d.ts +12 -3
  120. package/dist/esm/wkt/gen/google/protobuf/source_context_pb.js +3 -3
  121. package/dist/esm/wkt/gen/google/protobuf/struct_pb.d.ts +25 -8
  122. package/dist/esm/wkt/gen/google/protobuf/struct_pb.js +8 -8
  123. package/dist/esm/wkt/gen/google/protobuf/timestamp_pb.d.ts +7 -3
  124. package/dist/esm/wkt/gen/google/protobuf/timestamp_pb.js +3 -3
  125. package/dist/esm/wkt/gen/google/protobuf/type_pb.d.ts +165 -16
  126. package/dist/esm/wkt/gen/google/protobuf/type_pb.js +16 -16
  127. package/dist/esm/wkt/gen/google/protobuf/wrappers_pb.d.ts +55 -19
  128. package/dist/esm/wkt/gen/google/protobuf/wrappers_pb.js +19 -19
  129. package/dist/esm/wkt/timestamp.js +2 -3
  130. package/package.json +2 -2
@@ -3,4 +3,4 @@ import { type DescMessage } from "./descriptors.js";
3
3
  /**
4
4
  * Create a deep copy of a message, including extensions and unknown fields.
5
5
  */
6
- export declare function clone<Desc extends DescMessage>(messageDesc: Desc, message: MessageShape<Desc>): MessageShape<Desc>;
6
+ export declare function clone<Desc extends DescMessage>(schema: Desc, message: MessageShape<Desc>): MessageShape<Desc>;
package/dist/cjs/clone.js CHANGED
@@ -20,9 +20,8 @@ const guard_js_1 = require("./reflect/guard.js");
20
20
  /**
21
21
  * Create a deep copy of a message, including extensions and unknown fields.
22
22
  */
23
- function clone(messageDesc, message) {
24
- return cloneReflect((0, reflect_js_1.reflect)(messageDesc, message))
25
- .message;
23
+ function clone(schema, message) {
24
+ return cloneReflect((0, reflect_js_1.reflect)(schema, message)).message;
26
25
  }
27
26
  exports.clone = clone;
28
27
  function cloneReflect(i) {
@@ -33,28 +32,21 @@ function cloneReflect(i) {
33
32
  }
34
33
  switch (f.fieldKind) {
35
34
  default: {
36
- const err = o.set(f, cloneSingular(f, i.get(f)));
37
- if (err) {
38
- throw err;
39
- }
35
+ o.set(f, cloneSingular(f, i.get(f)));
40
36
  break;
41
37
  }
42
38
  case "list":
39
+ // eslint-disable-next-line no-case-declarations
40
+ const list = o.get(f);
43
41
  for (const item of i.get(f)) {
44
- // TODO fix type error
45
- // @ts-expect-error TODO
46
- const err = o.addListItem(f, cloneSingular(f, item));
47
- if (err) {
48
- throw err;
49
- }
42
+ list.add(cloneSingular(f, item));
50
43
  }
51
44
  break;
52
45
  case "map":
46
+ // eslint-disable-next-line no-case-declarations
47
+ const map = o.get(f);
53
48
  for (const entry of i.get(f).entries()) {
54
- const err = o.setMapEntry(f, entry[0], cloneSingular(f, entry[1]));
55
- if (err) {
56
- throw err;
57
- }
49
+ map.set(entry[0], cloneSingular(f, entry[1]));
58
50
  }
59
51
  break;
60
52
  }
@@ -30,14 +30,14 @@ function embedFileDesc(file) {
30
30
  const embed = {
31
31
  bootable: false,
32
32
  proto() {
33
- const stripped = (0, clone_js_1.clone)(descriptor_pb_js_1.FileDescriptorProtoDesc, file);
34
- (0, fields_js_1.clearField)(stripped, descriptor_pb_js_1.FileDescriptorProtoDesc.field.dependency);
35
- (0, fields_js_1.clearField)(stripped, descriptor_pb_js_1.FileDescriptorProtoDesc.field.sourceCodeInfo);
33
+ const stripped = (0, clone_js_1.clone)(descriptor_pb_js_1.FileDescriptorProtoSchema, file);
34
+ (0, fields_js_1.clearField)(stripped, descriptor_pb_js_1.FileDescriptorProtoSchema.field.dependency);
35
+ (0, fields_js_1.clearField)(stripped, descriptor_pb_js_1.FileDescriptorProtoSchema.field.sourceCodeInfo);
36
36
  stripped.messageType.map(stripJsonNames);
37
37
  return stripped;
38
38
  },
39
39
  base64() {
40
- const bytes = (0, to_binary_js_1.toBinary)(descriptor_pb_js_1.FileDescriptorProtoDesc, this.proto());
40
+ const bytes = (0, to_binary_js_1.toBinary)(descriptor_pb_js_1.FileDescriptorProtoSchema, this.proto());
41
41
  return (0, base64_encoding_js_1.base64Encode)(bytes, "std_raw");
42
42
  },
43
43
  };
@@ -50,7 +50,7 @@ exports.embedFileDesc = embedFileDesc;
50
50
  function stripJsonNames(d) {
51
51
  for (const f of d.field) {
52
52
  if (f.jsonName === (0, names_js_1.protoCamelCase)(f.name)) {
53
- (0, fields_js_1.clearField)(f, descriptor_pb_js_1.FieldDescriptorProtoDesc.field.jsonName);
53
+ (0, fields_js_1.clearField)(f, descriptor_pb_js_1.FieldDescriptorProtoSchema.field.jsonName);
54
54
  }
55
55
  }
56
56
  for (const n of d.nestedType) {
@@ -161,27 +161,27 @@ function createDescriptorBoot(proto) {
161
161
  return b;
162
162
  }
163
163
  function createFieldDescriptorBoot(proto) {
164
- assert((0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldDescriptorProtoDesc.field.name));
165
- assert((0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldDescriptorProtoDesc.field.number));
166
- assert((0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldDescriptorProtoDesc.field.type));
167
- assert(!(0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldDescriptorProtoDesc.field.oneofIndex));
168
- assert(!(0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldDescriptorProtoDesc.field.jsonName) ||
164
+ assert((0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldDescriptorProtoSchema.field.name));
165
+ assert((0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldDescriptorProtoSchema.field.number));
166
+ assert((0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldDescriptorProtoSchema.field.type));
167
+ assert(!(0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldDescriptorProtoSchema.field.oneofIndex));
168
+ assert(!(0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldDescriptorProtoSchema.field.jsonName) ||
169
169
  proto.jsonName === (0, names_js_1.protoCamelCase)(proto.name));
170
170
  const b = {
171
171
  name: proto.name,
172
172
  number: proto.number,
173
173
  type: proto.type,
174
174
  };
175
- if ((0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldDescriptorProtoDesc.field.label)) {
175
+ if ((0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldDescriptorProtoSchema.field.label)) {
176
176
  b.label = proto.label;
177
177
  }
178
- if ((0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldDescriptorProtoDesc.field.typeName)) {
178
+ if ((0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldDescriptorProtoSchema.field.typeName)) {
179
179
  b.typeName = proto.typeName;
180
180
  }
181
- if ((0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldDescriptorProtoDesc.field.extendee)) {
181
+ if ((0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldDescriptorProtoSchema.field.extendee)) {
182
182
  b.extendee = proto.extendee;
183
183
  }
184
- if ((0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldDescriptorProtoDesc.field.defaultValue)) {
184
+ if ((0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldDescriptorProtoSchema.field.defaultValue)) {
185
185
  b.defaultValue = proto.defaultValue;
186
186
  }
187
187
  if (proto.options) {
@@ -191,19 +191,19 @@ function createFieldDescriptorBoot(proto) {
191
191
  }
192
192
  function createFieldOptionsBoot(proto) {
193
193
  const b = {};
194
- assert(!(0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldOptionsDesc.field.ctype));
195
- if ((0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldOptionsDesc.field.packed)) {
194
+ assert(!(0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldOptionsSchema.field.ctype));
195
+ if ((0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldOptionsSchema.field.packed)) {
196
196
  b.packed = proto.packed;
197
197
  }
198
- assert(!(0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldOptionsDesc.field.jstype));
199
- assert(!(0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldOptionsDesc.field.lazy));
200
- assert(!(0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldOptionsDesc.field.unverifiedLazy));
201
- if ((0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldOptionsDesc.field.deprecated)) {
198
+ assert(!(0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldOptionsSchema.field.jstype));
199
+ assert(!(0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldOptionsSchema.field.lazy));
200
+ assert(!(0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldOptionsSchema.field.unverifiedLazy));
201
+ if ((0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldOptionsSchema.field.deprecated)) {
202
202
  b.deprecated = proto.deprecated;
203
203
  }
204
- assert(!(0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldOptionsDesc.field.weak));
205
- assert(!(0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldOptionsDesc.field.debugRedact));
206
- if ((0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldOptionsDesc.field.retention)) {
204
+ assert(!(0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldOptionsSchema.field.weak));
205
+ assert(!(0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldOptionsSchema.field.debugRedact));
206
+ if ((0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldOptionsSchema.field.retention)) {
207
207
  b.retention = proto.retention;
208
208
  }
209
209
  if (proto.targets.length) {
@@ -215,8 +215,8 @@ function createFieldOptionsBoot(proto) {
215
215
  edition: d.edition,
216
216
  }));
217
217
  }
218
- assert(!(0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldOptionsDesc.field.features));
219
- assert(!(0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldOptionsDesc.field.uninterpretedOption));
218
+ assert(!(0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldOptionsSchema.field.features));
219
+ assert(!(0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldOptionsSchema.field.uninterpretedOption));
220
220
  return b;
221
221
  }
222
222
  function createEnumDescriptorBoot(proto) {
@@ -1,11 +1,12 @@
1
1
  import type { DescEnum, DescFile } from "../descriptors.js";
2
2
  import type { GenDescEnum } from "./types.js";
3
+ import type { JsonValue } from "../json-value.js";
3
4
  /**
4
5
  * Hydrate an enum descriptor.
5
6
  *
6
7
  * @private
7
8
  */
8
- export declare function enumDesc<Shape>(file: DescFile, path: number, ...paths: number[]): GenDescEnum<Shape>;
9
+ export declare function enumDesc<Shape, JsonType extends JsonValue = JsonValue>(file: DescFile, path: number, ...paths: number[]): GenDescEnum<Shape, JsonType>;
9
10
  /**
10
11
  * Construct a TypeScript enum object at runtime from a descriptor.
11
12
  */
@@ -26,7 +26,7 @@ const from_binary_js_1 = require("../from-binary.js");
26
26
  */
27
27
  function fileDesc(b64, imports) {
28
28
  var _a;
29
- const root = (0, from_binary_js_1.fromBinary)(descriptor_pb_js_1.FileDescriptorProtoDesc, (0, base64_encoding_js_1.base64Decode)(b64));
29
+ const root = (0, from_binary_js_1.fromBinary)(descriptor_pb_js_1.FileDescriptorProtoSchema, (0, base64_encoding_js_1.base64Decode)(b64));
30
30
  root.messageType.forEach(restore_json_names_js_1.restoreJsonNames);
31
31
  root.dependency = (_a = imports === null || imports === void 0 ? void 0 : imports.map((f) => f.proto.name)) !== null && _a !== void 0 ? _a : [];
32
32
  const reg = (0, registry_js_1.createFileRegistry)(root, (protoFileName) => imports === null || imports === void 0 ? void 0 : imports.find((f) => f.proto.name === protoFileName));
@@ -1,9 +1,10 @@
1
1
  import type { Message } from "../types.js";
2
2
  import type { DescFile } from "../descriptors.js";
3
3
  import type { GenDescMessage } from "./types.js";
4
+ import type { JsonValue } from "../json-value.js";
4
5
  /**
5
6
  * Hydrate a message descriptor.
6
7
  *
7
8
  * @private
8
9
  */
9
- export declare function messageDesc<Shape extends Message>(file: DescFile, path: number, ...paths: number[]): GenDescMessage<Shape>;
10
+ export declare function messageDesc<Shape extends Message, JsonType extends JsonValue = JsonValue>(file: DescFile, path: number, ...paths: number[]): GenDescMessage<Shape, JsonType>;
@@ -3,3 +3,7 @@ import { ScalarType } from "../descriptors.js";
3
3
  * Return the TypeScript type (as a string) for the given scalar type.
4
4
  */
5
5
  export declare function scalarTypeScriptType(scalar: ScalarType, longAsString: boolean): "string" | "boolean" | "bigint" | "bigint | string" | "Uint8Array" | "number";
6
+ /**
7
+ * Return the JSON type (as a string) for the given scalar type.
8
+ */
9
+ export declare function scalarJsonType(scalar: ScalarType): "string" | "boolean" | "number" | `number | "NaN" | "Infinity" | "-Infinity"`;
@@ -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.scalarTypeScriptType = void 0;
16
+ exports.scalarJsonType = exports.scalarTypeScriptType = void 0;
17
17
  const descriptors_js_1 = require("../descriptors.js");
18
18
  /**
19
19
  * Return the TypeScript type (as a string) for the given scalar type.
@@ -37,3 +37,32 @@ function scalarTypeScriptType(scalar, longAsString) {
37
37
  }
38
38
  }
39
39
  exports.scalarTypeScriptType = scalarTypeScriptType;
40
+ /**
41
+ * Return the JSON type (as a string) for the given scalar type.
42
+ */
43
+ function scalarJsonType(scalar) {
44
+ switch (scalar) {
45
+ case descriptors_js_1.ScalarType.DOUBLE:
46
+ case descriptors_js_1.ScalarType.FLOAT:
47
+ return `number | "NaN" | "Infinity" | "-Infinity"`;
48
+ case descriptors_js_1.ScalarType.UINT64:
49
+ case descriptors_js_1.ScalarType.SFIXED64:
50
+ case descriptors_js_1.ScalarType.FIXED64:
51
+ case descriptors_js_1.ScalarType.SINT64:
52
+ case descriptors_js_1.ScalarType.INT64:
53
+ return "string";
54
+ case descriptors_js_1.ScalarType.INT32:
55
+ case descriptors_js_1.ScalarType.FIXED32:
56
+ case descriptors_js_1.ScalarType.UINT32:
57
+ case descriptors_js_1.ScalarType.SFIXED32:
58
+ case descriptors_js_1.ScalarType.SINT32:
59
+ return "number";
60
+ case descriptors_js_1.ScalarType.STRING:
61
+ return "string";
62
+ case descriptors_js_1.ScalarType.BOOL:
63
+ return "boolean";
64
+ case descriptors_js_1.ScalarType.BYTES:
65
+ return "string";
66
+ }
67
+ }
68
+ exports.scalarJsonType = scalarJsonType;
@@ -60,6 +60,16 @@ export declare const symbols: {
60
60
  readonly bootstrapWktFrom: "../../proto-int64.js";
61
61
  readonly from: "@bufbuild/protobuf";
62
62
  };
63
+ readonly JsonValue: {
64
+ readonly typeOnly: true;
65
+ readonly bootstrapWktFrom: "../../json-value.js";
66
+ readonly from: "@bufbuild/protobuf";
67
+ };
68
+ readonly JsonObject: {
69
+ readonly typeOnly: true;
70
+ readonly bootstrapWktFrom: "../../json-value.js";
71
+ readonly from: "@bufbuild/protobuf";
72
+ };
63
73
  readonly codegen: {
64
74
  readonly boot: {
65
75
  readonly typeOnly: false;
@@ -50,6 +50,8 @@ exports.symbols = {
50
50
  toJson: { typeOnly: false, bootstrapWktFrom: "../../to-json.js", from: exports.packageName },
51
51
  toJsonString: { typeOnly: false, bootstrapWktFrom: "../../to-json.js", from: exports.packageName },
52
52
  protoInt64: { typeOnly: false, bootstrapWktFrom: "../../proto-int64.js", from: exports.packageName },
53
+ JsonValue: { typeOnly: true, bootstrapWktFrom: "../../json-value.js", from: exports.packageName },
54
+ JsonObject: { typeOnly: true, bootstrapWktFrom: "../../json-value.js", from: exports.packageName },
53
55
  codegen: {
54
56
  boot: { typeOnly: false, bootstrapWktFrom: "../../codegenv1/boot.js", from: exports.packageName + "/codegenv1" },
55
57
  fileDesc: { typeOnly: false, bootstrapWktFrom: "../../codegenv1/file.js", from: exports.packageName + "/codegenv1" },
@@ -1,5 +1,6 @@
1
1
  import type { Message } from "../types.js";
2
2
  import type { DescEnum, DescExtension, DescField, DescFile, DescMessage, DescMethod, DescService } from "../descriptors.js";
3
+ import type { JsonValue } from "../json-value.js";
3
4
  /**
4
5
  * Describes a protobuf source file.
5
6
  *
@@ -14,9 +15,9 @@ export type GenDescFile = DescFile;
14
15
  *
15
16
  * @private
16
17
  */
17
- export type GenDescMessage<RuntimeShape extends Message> = Omit<DescMessage, "field"> & {
18
+ export type GenDescMessage<RuntimeShape extends Message, JsonType = JsonValue> = Omit<DescMessage, "field"> & {
18
19
  field: Record<MessageFieldNames<RuntimeShape>, DescField>;
19
- } & brand<RuntimeShape>;
20
+ } & brandv1<RuntimeShape, JsonType>;
20
21
  /**
21
22
  * Describes an enumeration in a protobuf source file.
22
23
  *
@@ -25,7 +26,7 @@ export type GenDescMessage<RuntimeShape extends Message> = Omit<DescMessage, "fi
25
26
  *
26
27
  * @private
27
28
  */
28
- export type GenDescEnum<RuntimeShape> = DescEnum & brand<RuntimeShape>;
29
+ export type GenDescEnum<RuntimeShape, JsonType extends JsonValue = JsonValue> = DescEnum & brandv1<RuntimeShape, JsonType>;
29
30
  /**
30
31
  * Describes an extension in a protobuf source file.
31
32
  *
@@ -34,7 +35,7 @@ export type GenDescEnum<RuntimeShape> = DescEnum & brand<RuntimeShape>;
34
35
  *
35
36
  * @private
36
37
  */
37
- export type GenDescExtension<Extendee extends Message = Message, RuntimeShape = unknown> = DescExtension & brand<Extendee, RuntimeShape>;
38
+ export type GenDescExtension<Extendee extends Message = Message, RuntimeShape = unknown> = DescExtension & brandv1<Extendee, RuntimeShape>;
38
39
  /**
39
40
  * Describes a service declaration in a protobuf source file.
40
41
  *
@@ -52,7 +53,8 @@ export type GenDescService<RuntimeShape extends GenDescServiceMethods> = Omit<De
52
53
  * @private
53
54
  */
54
55
  export type GenDescServiceMethods = Record<string, Pick<DescMethod, "input" | "output" | "methodKind">>;
55
- declare class brand<A, B = unknown> {
56
+ declare class brandv1<A, B = unknown> {
57
+ protected v: "codegenv1";
56
58
  protected a: A | boolean;
57
59
  protected b: B | boolean;
58
60
  }
@@ -13,8 +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
- class brand {
16
+ class brandv1 {
17
17
  constructor() {
18
+ this.v = "codegenv1";
18
19
  this.a = false;
19
20
  this.b = false;
20
21
  }
@@ -6,4 +6,4 @@ import type { MessageInitShape, MessageShape } from "./types.js";
6
6
  * The second argument is an optional initializer object, where all fields are
7
7
  * optional.
8
8
  */
9
- export declare function create<Desc extends DescMessage>(messageDesc: Desc, init?: MessageInitShape<Desc>): MessageShape<Desc>;
9
+ export declare function create<Desc extends DescMessage>(schema: Desc, init?: MessageInitShape<Desc>): MessageShape<Desc>;
@@ -22,6 +22,8 @@ const unsafe_js_1 = require("./reflect/unsafe.js");
22
22
  const wrappers_js_1 = require("./wkt/wrappers.js");
23
23
  // bootstrap-inject google.protobuf.Edition.EDITION_PROTO3: const $name: Edition.$localName = $number;
24
24
  const EDITION_PROTO3 = 999;
25
+ // bootstrap-inject google.protobuf.Edition.EDITION_PROTO2: const $name: Edition.$localName = $number;
26
+ const EDITION_PROTO2 = 998;
25
27
  // bootstrap-inject google.protobuf.FeatureSet.FieldPresence.IMPLICIT: const $name: FeatureSet_FieldPresence.$localName = $number;
26
28
  const IMPLICIT = 2;
27
29
  /**
@@ -30,13 +32,13 @@ const IMPLICIT = 2;
30
32
  * The second argument is an optional initializer object, where all fields are
31
33
  * optional.
32
34
  */
33
- function create(messageDesc, init) {
34
- if ((0, is_message_js_1.isMessage)(init, messageDesc)) {
35
+ function create(schema, init) {
36
+ if ((0, is_message_js_1.isMessage)(init, schema)) {
35
37
  return init;
36
38
  }
37
- const message = createZeroMessage(messageDesc);
39
+ const message = createZeroMessage(schema);
38
40
  if (init !== undefined) {
39
- initMessage(messageDesc, message, init);
41
+ initMessage(schema, message, init);
40
42
  }
41
43
  return message;
42
44
  }
@@ -66,12 +68,7 @@ function initMessage(messageDesc, message, init) {
66
68
  // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check -- no need to convert enum
67
69
  switch (field.fieldKind) {
68
70
  case "message":
69
- if ((0, wrappers_js_1.isWrapperDesc)(field.message)) {
70
- value = initScalar(field.message.fields[0], value);
71
- }
72
- else {
73
- value = toMessage(value, field.message);
74
- }
71
+ value = toMessage(field, value);
75
72
  break;
76
73
  case "scalar":
77
74
  value = initScalar(field, value);
@@ -99,7 +96,7 @@ function initMap(field, value) {
99
96
  return convertObjectValues(value, toU8Arr);
100
97
  }
101
98
  if (field.mapKind == "message") {
102
- return convertObjectValues(value, (val) => toMessage(val, field.message));
99
+ return convertObjectValues(value, (val) => toMessage(field, val));
103
100
  }
104
101
  }
105
102
  return value;
@@ -110,14 +107,29 @@ function initList(field, value) {
110
107
  return value.map(toU8Arr);
111
108
  }
112
109
  if (field.listKind == "message") {
113
- return value.map((item) => toMessage(item, field.message));
110
+ return value.map((item) => toMessage(field, item));
114
111
  }
115
112
  }
116
113
  return value;
117
114
  }
118
- function toMessage(value, message) {
119
- if (!(0, is_message_js_1.isMessage)(value, message) && (0, guard_js_1.isObject)(value)) {
120
- return create(message, value);
115
+ function toMessage(field, value) {
116
+ if (field.fieldKind == "message" &&
117
+ !field.oneof &&
118
+ (0, wrappers_js_1.isWrapperDesc)(field.message)) {
119
+ // Types from google/protobuf/wrappers.proto are unwrapped when used in
120
+ // a singular field that is not part of a oneof group.
121
+ return initScalar(field.message.fields[0], value);
122
+ }
123
+ if ((0, guard_js_1.isObject)(value)) {
124
+ if (field.message.typeName == "google.protobuf.Struct" &&
125
+ field.parent.typeName !== "google.protobuf.Value") {
126
+ // google.protobuf.Struct is represented with JsonObject when used in a
127
+ // field, except when used in google.protobuf.Value.
128
+ return value;
129
+ }
130
+ if (!(0, is_message_js_1.isMessage)(value, field.message)) {
131
+ return create(field.message, value);
132
+ }
121
133
  }
122
134
  return value;
123
135
  }
@@ -139,9 +151,7 @@ const messagePrototypes = new WeakMap();
139
151
  */
140
152
  function createZeroMessage(desc) {
141
153
  let msg;
142
- if (desc.file.edition == EDITION_PROTO3) {
143
- // we special case proto3: since it does not have default values, we let
144
- // the `optional` keyword generate an optional property.
154
+ if (!needsPrototypeChain(desc)) {
145
155
  msg = {};
146
156
  for (const member of desc.members) {
147
157
  if (member.kind == "oneof" || member.presence == IMPLICIT) {
@@ -150,8 +160,7 @@ function createZeroMessage(desc) {
150
160
  }
151
161
  }
152
162
  else {
153
- // for everything but proto3, we support default values, and track presence
154
- // via the prototype chain
163
+ // Support default values and track presence via the prototype chain
155
164
  const cached = messagePrototypes.get(desc);
156
165
  let prototype;
157
166
  let members;
@@ -203,6 +212,24 @@ function createZeroMessage(desc) {
203
212
  msg.$typeName = desc.typeName;
204
213
  return msg;
205
214
  }
215
+ /**
216
+ * Do we need the prototype chain to track field presence?
217
+ */
218
+ function needsPrototypeChain(desc) {
219
+ switch (desc.file.edition) {
220
+ case EDITION_PROTO3:
221
+ // proto3 always uses implicit presence, we never need the prototype chain.
222
+ return false;
223
+ case EDITION_PROTO2:
224
+ // proto2 never uses implicit presence, we always need the prototype chain.
225
+ return true;
226
+ default:
227
+ // If a message uses scalar or enum fields with explicit presence, we need
228
+ // the prototype chain to track presence. This rule does not apply to fields
229
+ // in a oneof group - they use a different mechanism to track presence.
230
+ return desc.fields.some((f) => f.presence != IMPLICIT && f.fieldKind != "message" && !f.oneof);
231
+ }
232
+ }
206
233
  /**
207
234
  * Returns a zero value for oneof groups, and for every field kind except
208
235
  * messages. Scalar and enum fields can have default values.
@@ -6,4 +6,4 @@ import type { DescMessage } from "./descriptors.js";
6
6
  * Note that this function disregards extensions and unknown fields, and that
7
7
  * NaN is not equal NaN, following the IEEE standard.
8
8
  */
9
- export declare function equals<Desc extends DescMessage>(messageDesc: Desc, a: MessageShape<Desc>, b: MessageShape<Desc>): boolean;
9
+ export declare function equals<Desc extends DescMessage>(schema: Desc, a: MessageShape<Desc>, b: MessageShape<Desc>): boolean;
@@ -22,15 +22,14 @@ const reflect_js_1 = require("./reflect/reflect.js");
22
22
  * Note that this function disregards extensions and unknown fields, and that
23
23
  * NaN is not equal NaN, following the IEEE standard.
24
24
  */
25
- function equals(messageDesc, a, b) {
26
- if (a.$typeName != messageDesc.typeName ||
27
- b.$typeName != messageDesc.typeName) {
25
+ function equals(schema, a, b) {
26
+ if (a.$typeName != schema.typeName || b.$typeName != schema.typeName) {
28
27
  return false;
29
28
  }
30
29
  if (a === b) {
31
30
  return true;
32
31
  }
33
- return reflectEquals((0, reflect_js_1.reflect)(messageDesc, a), (0, reflect_js_1.reflect)(messageDesc, b));
32
+ return reflectEquals((0, reflect_js_1.reflect)(schema, a), (0, reflect_js_1.reflect)(schema, b));
34
33
  }
35
34
  exports.equals = equals;
36
35
  function reflectEquals(a, b) {
@@ -80,15 +79,11 @@ function fieldEquals(f, a, b) {
80
79
  case "enum":
81
80
  return false;
82
81
  case "message":
83
- // TODO fix type error
84
- // @ts-expect-error TODO
85
82
  if (!reflectEquals(va, vb)) {
86
83
  return false;
87
84
  }
88
85
  break;
89
86
  case "scalar":
90
- // TODO fix type error
91
- // @ts-expect-error TODO
92
87
  if (!(0, scalar_js_1.scalarEquals)(f.scalar, va, vb)) {
93
88
  return false;
94
89
  }
@@ -104,23 +99,21 @@ function fieldEquals(f, a, b) {
104
99
  return false;
105
100
  }
106
101
  for (let i = 0; i < la.size; i++) {
107
- if (la.get(i) === lb.get(i)) {
102
+ const va = la.get(i);
103
+ const vb = lb.get(i);
104
+ if (va === vb) {
108
105
  continue;
109
106
  }
110
107
  switch (f.listKind) {
111
108
  case "enum":
112
109
  return false;
113
110
  case "message":
114
- // TODO fix type error
115
- // @ts-expect-error TODO
116
- if (!reflectEquals(la.get(i), lb.get(i))) {
111
+ if (!reflectEquals(va, vb)) {
117
112
  return false;
118
113
  }
119
114
  break;
120
115
  case "scalar":
121
- // TODO fix type error
122
- // @ts-expect-error TODO
123
- if (!(0, scalar_js_1.scalarEquals)(f.scalar, la.get(i), lb.get(i))) {
116
+ if (!(0, scalar_js_1.scalarEquals)(f.scalar, va, vb)) {
124
117
  return false;
125
118
  }
126
119
  break;
@@ -17,7 +17,7 @@ export interface BinaryReadOptions {
17
17
  /**
18
18
  * Parse serialized binary data.
19
19
  */
20
- export declare function fromBinary<Desc extends DescMessage>(messageDesc: Desc, bytes: Uint8Array, options?: Partial<BinaryReadOptions>): MessageShape<Desc>;
20
+ export declare function fromBinary<Desc extends DescMessage>(schema: Desc, bytes: Uint8Array, options?: Partial<BinaryReadOptions>): MessageShape<Desc>;
21
21
  /**
22
22
  * Parse from binary data, merging fields.
23
23
  *
@@ -27,7 +27,7 @@ export declare function fromBinary<Desc extends DescMessage>(messageDesc: Desc,
27
27
  * If a message field is already present, it will be merged with the
28
28
  * new data.
29
29
  */
30
- export declare function mergeFromBinary<Desc extends DescMessage>(messageDesc: Desc, target: MessageShape<Desc>, bytes: Uint8Array, options?: Partial<BinaryReadOptions>): void;
30
+ export declare function mergeFromBinary<Desc extends DescMessage>(schema: Desc, target: MessageShape<Desc>, bytes: Uint8Array, options?: Partial<BinaryReadOptions>): MessageShape<Desc>;
31
31
  /**
32
32
  * @private
33
33
  */
@@ -28,8 +28,8 @@ function makeReadOptions(options) {
28
28
  /**
29
29
  * Parse serialized binary data.
30
30
  */
31
- function fromBinary(messageDesc, bytes, options) {
32
- const msg = (0, reflect_js_1.reflect)(messageDesc);
31
+ function fromBinary(schema, bytes, options) {
32
+ const msg = (0, reflect_js_1.reflect)(schema, undefined, false);
33
33
  readMessage(msg, new binary_encoding_js_1.BinaryReader(bytes), makeReadOptions(options), false, bytes.byteLength);
34
34
  return msg.message;
35
35
  }
@@ -43,8 +43,9 @@ exports.fromBinary = fromBinary;
43
43
  * If a message field is already present, it will be merged with the
44
44
  * new data.
45
45
  */
46
- function mergeFromBinary(messageDesc, target, bytes, options) {
47
- readMessage((0, reflect_js_1.reflect)(messageDesc, target), new binary_encoding_js_1.BinaryReader(bytes), makeReadOptions(options), false, bytes.byteLength);
46
+ function mergeFromBinary(schema, target, bytes, options) {
47
+ readMessage((0, reflect_js_1.reflect)(schema, target, false), new binary_encoding_js_1.BinaryReader(bytes), makeReadOptions(options), false, bytes.byteLength);
48
+ return target;
48
49
  }
49
50
  exports.mergeFromBinary = mergeFromBinary;
50
51
  /**
@@ -99,16 +100,17 @@ function readField(message, reader, field, wireType, options) {
99
100
  message.set(field, readMessageField(reader, options, field, message.get(field)));
100
101
  break;
101
102
  case "list":
102
- readListField(message, reader, options, field, wireType);
103
+ readListField(reader, wireType, message.get(field), options);
103
104
  break;
104
105
  case "map":
105
- readMapEntry(message, field, reader, options);
106
+ readMapEntry(reader, message.get(field), options);
106
107
  break;
107
108
  }
108
109
  }
109
110
  exports.readField = readField;
110
111
  // Read a map field, expecting key field = 1, value field = 2
111
- function readMapEntry(message, field, reader, options) {
112
+ function readMapEntry(reader, map, options) {
113
+ const field = map.field();
112
114
  let key, val;
113
115
  const end = reader.pos + reader.uint32();
114
116
  while (reader.pos < end) {
@@ -144,16 +146,17 @@ function readMapEntry(message, field, reader, options) {
144
146
  val = field.enum.values[0].number;
145
147
  break;
146
148
  case "message":
147
- val = (0, reflect_js_1.reflect)(field.message);
149
+ val = (0, reflect_js_1.reflect)(field.message, undefined, false);
148
150
  break;
149
151
  }
150
152
  }
151
- message.setMapEntry(field, key, val);
153
+ map.set(key, val);
152
154
  }
153
- function readListField(message, reader, options, field, wireType) {
155
+ function readListField(reader, wireType, list, options) {
154
156
  var _a;
157
+ const field = list.field();
155
158
  if (field.listKind === "message") {
156
- message.addListItem(field, readMessageField(reader, options, field));
159
+ list.add(readMessageField(reader, options, field));
157
160
  return;
158
161
  }
159
162
  const scalarType = (_a = field.scalar) !== null && _a !== void 0 ? _a : descriptors_js_1.ScalarType.INT32;
@@ -161,17 +164,17 @@ function readListField(message, reader, options, field, wireType) {
161
164
  scalarType != descriptors_js_1.ScalarType.STRING &&
162
165
  scalarType != descriptors_js_1.ScalarType.BYTES;
163
166
  if (!packed) {
164
- message.addListItem(field, readScalar(reader, scalarType));
167
+ list.add(readScalar(reader, scalarType));
165
168
  return;
166
169
  }
167
170
  const e = reader.uint32() + reader.pos;
168
171
  while (reader.pos < e) {
169
- message.addListItem(field, readScalar(reader, scalarType));
172
+ list.add(readScalar(reader, scalarType));
170
173
  }
171
174
  }
172
175
  function readMessageField(reader, options, field, mergeMessage) {
173
176
  const delimited = field.delimitedEncoding;
174
- const message = mergeMessage !== null && mergeMessage !== void 0 ? mergeMessage : (0, reflect_js_1.reflect)(field.message);
177
+ const message = mergeMessage !== null && mergeMessage !== void 0 ? mergeMessage : (0, reflect_js_1.reflect)(field.message, undefined, false);
175
178
  readMessage(message, reader, options, delimited, delimited ? field.number : reader.uint32());
176
179
  return message;
177
180
  }