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

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 (113) hide show
  1. package/dist/cjs/codegenv1/embed.d.ts +2 -2
  2. package/dist/cjs/codegenv1/embed.js +25 -25
  3. package/dist/cjs/codegenv1/enum.js +2 -4
  4. package/dist/cjs/codegenv1/restore-json-names.d.ts +3 -0
  5. package/dist/cjs/codegenv1/restore-json-names.js +3 -0
  6. package/dist/cjs/codegenv1/symbols.d.ts +9 -0
  7. package/dist/cjs/codegenv1/symbols.js +9 -0
  8. package/dist/cjs/codegenv1/types.d.ts +55 -2
  9. package/dist/cjs/create.js +7 -18
  10. package/dist/cjs/desc-types.d.ts +27 -10
  11. package/dist/cjs/extensions.d.ts +21 -1
  12. package/dist/cjs/extensions.js +38 -7
  13. package/dist/cjs/fields.d.ts +17 -16
  14. package/dist/cjs/fields.js +17 -10
  15. package/dist/cjs/from-binary.js +9 -19
  16. package/dist/cjs/from-json.js +9 -13
  17. package/dist/cjs/index.d.ts +1 -1
  18. package/dist/cjs/index.js +3 -1
  19. package/dist/cjs/reflect/names.d.ts +0 -12
  20. package/dist/cjs/reflect/names.js +1 -39
  21. package/dist/cjs/reflect/nested-types.d.ts +11 -1
  22. package/dist/cjs/reflect/nested-types.js +34 -1
  23. package/dist/cjs/reflect/reflect-types.d.ts +158 -10
  24. package/dist/cjs/reflect/reflect.d.ts +11 -2
  25. package/dist/cjs/reflect/reflect.js +306 -281
  26. package/dist/cjs/reflect/registry.js +50 -41
  27. package/dist/cjs/reflect/unsafe.js +38 -43
  28. package/dist/cjs/to-binary.js +1 -3
  29. package/dist/cjs/to-json.js +7 -27
  30. package/dist/cjs/wire/base64-encoding.js +2 -2
  31. package/dist/cjs/wire/binary-encoding.d.ts +5 -3
  32. package/dist/cjs/wire/binary-encoding.js +16 -10
  33. package/dist/cjs/wkt/gen/google/protobuf/any_pb.d.ts +7 -0
  34. package/dist/cjs/wkt/gen/google/protobuf/any_pb.js +7 -2
  35. package/dist/cjs/wkt/gen/google/protobuf/api_pb.d.ts +15 -0
  36. package/dist/cjs/wkt/gen/google/protobuf/api_pb.js +15 -6
  37. package/dist/cjs/wkt/gen/google/protobuf/compiler/plugin_pb.d.ts +22 -0
  38. package/dist/cjs/wkt/gen/google/protobuf/compiler/plugin_pb.js +22 -9
  39. package/dist/cjs/wkt/gen/google/protobuf/descriptor_pb.d.ts +186 -0
  40. package/dist/cjs/wkt/gen/google/protobuf/descriptor_pb.js +186 -83
  41. package/dist/cjs/wkt/gen/google/protobuf/duration_pb.d.ts +7 -0
  42. package/dist/cjs/wkt/gen/google/protobuf/duration_pb.js +7 -2
  43. package/dist/cjs/wkt/gen/google/protobuf/empty_pb.d.ts +7 -0
  44. package/dist/cjs/wkt/gen/google/protobuf/empty_pb.js +7 -2
  45. package/dist/cjs/wkt/gen/google/protobuf/field_mask_pb.d.ts +7 -0
  46. package/dist/cjs/wkt/gen/google/protobuf/field_mask_pb.js +7 -2
  47. package/dist/cjs/wkt/gen/google/protobuf/source_context_pb.d.ts +7 -0
  48. package/dist/cjs/wkt/gen/google/protobuf/source_context_pb.js +7 -2
  49. package/dist/cjs/wkt/gen/google/protobuf/struct_pb.d.ts +18 -0
  50. package/dist/cjs/wkt/gen/google/protobuf/struct_pb.js +18 -7
  51. package/dist/cjs/wkt/gen/google/protobuf/timestamp_pb.d.ts +7 -0
  52. package/dist/cjs/wkt/gen/google/protobuf/timestamp_pb.js +7 -2
  53. package/dist/cjs/wkt/gen/google/protobuf/type_pb.d.ts +32 -0
  54. package/dist/cjs/wkt/gen/google/protobuf/type_pb.js +32 -13
  55. package/dist/cjs/wkt/gen/google/protobuf/wrappers_pb.d.ts +39 -0
  56. package/dist/cjs/wkt/gen/google/protobuf/wrappers_pb.js +39 -18
  57. package/dist/esm/codegenv1/embed.d.ts +2 -2
  58. package/dist/esm/codegenv1/embed.js +25 -25
  59. package/dist/esm/codegenv1/enum.js +2 -4
  60. package/dist/esm/codegenv1/restore-json-names.d.ts +3 -0
  61. package/dist/esm/codegenv1/restore-json-names.js +3 -0
  62. package/dist/esm/codegenv1/symbols.d.ts +9 -0
  63. package/dist/esm/codegenv1/symbols.js +9 -0
  64. package/dist/esm/codegenv1/types.d.ts +55 -2
  65. package/dist/esm/create.js +7 -18
  66. package/dist/esm/desc-types.d.ts +27 -10
  67. package/dist/esm/extensions.d.ts +21 -1
  68. package/dist/esm/extensions.js +35 -6
  69. package/dist/esm/fields.d.ts +17 -16
  70. package/dist/esm/fields.js +17 -10
  71. package/dist/esm/from-binary.js +9 -19
  72. package/dist/esm/from-json.js +11 -15
  73. package/dist/esm/index.d.ts +1 -1
  74. package/dist/esm/index.js +1 -1
  75. package/dist/esm/reflect/names.d.ts +0 -12
  76. package/dist/esm/reflect/names.js +0 -37
  77. package/dist/esm/reflect/nested-types.d.ts +11 -1
  78. package/dist/esm/reflect/nested-types.js +32 -0
  79. package/dist/esm/reflect/reflect-types.d.ts +158 -10
  80. package/dist/esm/reflect/reflect.d.ts +11 -2
  81. package/dist/esm/reflect/reflect.js +304 -279
  82. package/dist/esm/reflect/registry.js +50 -41
  83. package/dist/esm/reflect/unsafe.js +38 -43
  84. package/dist/esm/to-binary.js +1 -3
  85. package/dist/esm/to-json.js +7 -27
  86. package/dist/esm/wire/base64-encoding.js +2 -2
  87. package/dist/esm/wire/binary-encoding.d.ts +5 -3
  88. package/dist/esm/wire/binary-encoding.js +16 -10
  89. package/dist/esm/wkt/gen/google/protobuf/any_pb.d.ts +7 -0
  90. package/dist/esm/wkt/gen/google/protobuf/any_pb.js +7 -2
  91. package/dist/esm/wkt/gen/google/protobuf/api_pb.d.ts +15 -0
  92. package/dist/esm/wkt/gen/google/protobuf/api_pb.js +15 -6
  93. package/dist/esm/wkt/gen/google/protobuf/compiler/plugin_pb.d.ts +22 -0
  94. package/dist/esm/wkt/gen/google/protobuf/compiler/plugin_pb.js +22 -9
  95. package/dist/esm/wkt/gen/google/protobuf/descriptor_pb.d.ts +186 -0
  96. package/dist/esm/wkt/gen/google/protobuf/descriptor_pb.js +186 -83
  97. package/dist/esm/wkt/gen/google/protobuf/duration_pb.d.ts +7 -0
  98. package/dist/esm/wkt/gen/google/protobuf/duration_pb.js +7 -2
  99. package/dist/esm/wkt/gen/google/protobuf/empty_pb.d.ts +7 -0
  100. package/dist/esm/wkt/gen/google/protobuf/empty_pb.js +7 -2
  101. package/dist/esm/wkt/gen/google/protobuf/field_mask_pb.d.ts +7 -0
  102. package/dist/esm/wkt/gen/google/protobuf/field_mask_pb.js +7 -2
  103. package/dist/esm/wkt/gen/google/protobuf/source_context_pb.d.ts +7 -0
  104. package/dist/esm/wkt/gen/google/protobuf/source_context_pb.js +7 -2
  105. package/dist/esm/wkt/gen/google/protobuf/struct_pb.d.ts +18 -0
  106. package/dist/esm/wkt/gen/google/protobuf/struct_pb.js +18 -7
  107. package/dist/esm/wkt/gen/google/protobuf/timestamp_pb.d.ts +7 -0
  108. package/dist/esm/wkt/gen/google/protobuf/timestamp_pb.js +7 -2
  109. package/dist/esm/wkt/gen/google/protobuf/type_pb.d.ts +32 -0
  110. package/dist/esm/wkt/gen/google/protobuf/type_pb.js +32 -13
  111. package/dist/esm/wkt/gen/google/protobuf/wrappers_pb.d.ts +39 -0
  112. package/dist/esm/wkt/gen/google/protobuf/wrappers_pb.js +39 -18
  113. package/package.json +2 -2
@@ -1,4 +1,4 @@
1
- import type { DescEnum, DescExtension, DescFile, DescMessage, DescService } from "../desc-types.js";
1
+ import type { DescEnum, DescExtension, DescMessage, DescService } from "../desc-types.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.
@@ -31,9 +31,9 @@ function embedFileDesc(file) {
31
31
  const embed = {
32
32
  bootable: false,
33
33
  proto() {
34
- const stripped = (0, clone_js_1.clone)(descriptor_pb_js_1.FileDescriptorProtoDesc, file.proto);
35
- (0, fields_js_1.clearField)(descriptor_pb_js_1.FileDescriptorProtoDesc, stripped, "dependency");
36
- (0, fields_js_1.clearField)(descriptor_pb_js_1.FileDescriptorProtoDesc, stripped, "sourceCodeInfo");
34
+ const stripped = (0, clone_js_1.clone)(descriptor_pb_js_1.FileDescriptorProtoDesc, file);
35
+ (0, fields_js_1.clearField)(stripped, descriptor_pb_js_1.FileDescriptorProtoDesc.field.dependency);
36
+ (0, fields_js_1.clearField)(stripped, descriptor_pb_js_1.FileDescriptorProtoDesc.field.sourceCodeInfo);
37
37
  stripped.messageType.map(stripJsonNames);
38
38
  return stripped;
39
39
  },
@@ -42,7 +42,7 @@ function embedFileDesc(file) {
42
42
  return (0, base64_encoding_js_1.base64Encode)(bytes, "std_raw");
43
43
  },
44
44
  };
45
- return file.proto.name == "google/protobuf/descriptor.proto"
45
+ return file.name == "google/protobuf/descriptor.proto"
46
46
  ? Object.assign(Object.assign({}, embed), { bootable: true, boot() {
47
47
  return createFileDescriptorProtoBoot(this.proto());
48
48
  } }) : embed;
@@ -51,7 +51,7 @@ exports.embedFileDesc = embedFileDesc;
51
51
  function stripJsonNames(d) {
52
52
  for (const f of d.field) {
53
53
  if (f.jsonName === (0, names_js_1.protoCamelCase)(f.name)) {
54
- (0, fields_js_1.clearField)(descriptor_pb_js_1.FieldDescriptorProtoDesc, f, "jsonName");
54
+ (0, fields_js_1.clearField)(f, descriptor_pb_js_1.FieldDescriptorProtoDesc.field.jsonName);
55
55
  }
56
56
  }
57
57
  for (const n of d.nestedType) {
@@ -163,27 +163,27 @@ function createDescriptorBoot(proto) {
163
163
  return b;
164
164
  }
165
165
  function createFieldDescriptorBoot(proto) {
166
- (0, assert_js_1.assert)((0, fields_js_1.isFieldSet)(descriptor_pb_js_1.FieldDescriptorProtoDesc, proto, "name"));
167
- (0, assert_js_1.assert)((0, fields_js_1.isFieldSet)(descriptor_pb_js_1.FieldDescriptorProtoDesc, proto, "number"));
168
- (0, assert_js_1.assert)((0, fields_js_1.isFieldSet)(descriptor_pb_js_1.FieldDescriptorProtoDesc, proto, "type"));
169
- (0, assert_js_1.assert)(!(0, fields_js_1.isFieldSet)(descriptor_pb_js_1.FieldDescriptorProtoDesc, proto, "oneofIndex"));
170
- (0, assert_js_1.assert)(!(0, fields_js_1.isFieldSet)(descriptor_pb_js_1.FieldDescriptorProtoDesc, proto, "jsonName") ||
166
+ (0, assert_js_1.assert)((0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldDescriptorProtoDesc.field.name));
167
+ (0, assert_js_1.assert)((0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldDescriptorProtoDesc.field.number));
168
+ (0, assert_js_1.assert)((0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldDescriptorProtoDesc.field.type));
169
+ (0, assert_js_1.assert)(!(0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldDescriptorProtoDesc.field.oneofIndex));
170
+ (0, assert_js_1.assert)(!(0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldDescriptorProtoDesc.field.jsonName) ||
171
171
  proto.jsonName === (0, names_js_1.protoCamelCase)(proto.name));
172
172
  const b = {
173
173
  name: proto.name,
174
174
  number: proto.number,
175
175
  type: proto.type,
176
176
  };
177
- if ((0, fields_js_1.isFieldSet)(descriptor_pb_js_1.FieldDescriptorProtoDesc, proto, "label")) {
177
+ if ((0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldDescriptorProtoDesc.field.label)) {
178
178
  b.label = proto.label;
179
179
  }
180
- if ((0, fields_js_1.isFieldSet)(descriptor_pb_js_1.FieldDescriptorProtoDesc, proto, "typeName")) {
180
+ if ((0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldDescriptorProtoDesc.field.typeName)) {
181
181
  b.typeName = proto.typeName;
182
182
  }
183
- if ((0, fields_js_1.isFieldSet)(descriptor_pb_js_1.FieldDescriptorProtoDesc, proto, "extendee")) {
183
+ if ((0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldDescriptorProtoDesc.field.extendee)) {
184
184
  b.extendee = proto.extendee;
185
185
  }
186
- if ((0, fields_js_1.isFieldSet)(descriptor_pb_js_1.FieldDescriptorProtoDesc, proto, "defaultValue")) {
186
+ if ((0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldDescriptorProtoDesc.field.defaultValue)) {
187
187
  b.defaultValue = proto.defaultValue;
188
188
  }
189
189
  if (proto.options) {
@@ -193,19 +193,19 @@ function createFieldDescriptorBoot(proto) {
193
193
  }
194
194
  function createFieldOptionsBoot(proto) {
195
195
  const b = {};
196
- (0, assert_js_1.assert)(!(0, fields_js_1.isFieldSet)(descriptor_pb_js_1.FieldOptionsDesc, proto, "ctype"));
197
- if ((0, fields_js_1.isFieldSet)(descriptor_pb_js_1.FieldOptionsDesc, proto, "packed")) {
196
+ (0, assert_js_1.assert)(!(0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldOptionsDesc.field.ctype));
197
+ if ((0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldOptionsDesc.field.packed)) {
198
198
  b.packed = proto.packed;
199
199
  }
200
- (0, assert_js_1.assert)(!(0, fields_js_1.isFieldSet)(descriptor_pb_js_1.FieldOptionsDesc, proto, "jstype"));
201
- (0, assert_js_1.assert)(!(0, fields_js_1.isFieldSet)(descriptor_pb_js_1.FieldOptionsDesc, proto, "lazy"));
202
- (0, assert_js_1.assert)(!(0, fields_js_1.isFieldSet)(descriptor_pb_js_1.FieldOptionsDesc, proto, "unverifiedLazy"));
203
- if ((0, fields_js_1.isFieldSet)(descriptor_pb_js_1.FieldOptionsDesc, proto, "deprecated")) {
200
+ (0, assert_js_1.assert)(!(0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldOptionsDesc.field.jstype));
201
+ (0, assert_js_1.assert)(!(0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldOptionsDesc.field.lazy));
202
+ (0, assert_js_1.assert)(!(0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldOptionsDesc.field.unverifiedLazy));
203
+ if ((0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldOptionsDesc.field.deprecated)) {
204
204
  b.deprecated = proto.deprecated;
205
205
  }
206
- (0, assert_js_1.assert)(!(0, fields_js_1.isFieldSet)(descriptor_pb_js_1.FieldOptionsDesc, proto, "weak"));
207
- (0, assert_js_1.assert)(!(0, fields_js_1.isFieldSet)(descriptor_pb_js_1.FieldOptionsDesc, proto, "debugRedact"));
208
- if ((0, fields_js_1.isFieldSet)(descriptor_pb_js_1.FieldOptionsDesc, proto, "retention")) {
206
+ (0, assert_js_1.assert)(!(0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldOptionsDesc.field.weak));
207
+ (0, assert_js_1.assert)(!(0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldOptionsDesc.field.debugRedact));
208
+ if ((0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldOptionsDesc.field.retention)) {
209
209
  b.retention = proto.retention;
210
210
  }
211
211
  if (proto.targets.length) {
@@ -217,8 +217,8 @@ function createFieldOptionsBoot(proto) {
217
217
  edition: d.edition,
218
218
  }));
219
219
  }
220
- (0, assert_js_1.assert)(!(0, fields_js_1.isFieldSet)(descriptor_pb_js_1.FieldOptionsDesc, proto, "features"));
221
- (0, assert_js_1.assert)(!(0, fields_js_1.isFieldSet)(descriptor_pb_js_1.FieldOptionsDesc, proto, "uninterpretedOption"));
220
+ (0, assert_js_1.assert)(!(0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldOptionsDesc.field.features));
221
+ (0, assert_js_1.assert)(!(0, fields_js_1.isFieldSet)(proto, descriptor_pb_js_1.FieldOptionsDesc.field.uninterpretedOption));
222
222
  return b;
223
223
  }
224
224
  function createEnumDescriptorBoot(proto) {
@@ -14,7 +14,6 @@
14
14
  // limitations under the License.
15
15
  Object.defineProperty(exports, "__esModule", { value: true });
16
16
  exports.tsEnum = exports.enumDesc = void 0;
17
- const names_js_1 = require("../reflect/names.js");
18
17
  /**
19
18
  * Hydrate an enum descriptor.
20
19
  *
@@ -34,9 +33,8 @@ exports.enumDesc = enumDesc;
34
33
  function tsEnum(desc) {
35
34
  const enumObject = {};
36
35
  for (const value of desc.values) {
37
- const name = (0, names_js_1.localName)(value);
38
- enumObject[name] = value.number;
39
- enumObject[value.number] = name;
36
+ enumObject[value.localName] = value.number;
37
+ enumObject[value.number] = value.localName;
40
38
  }
41
39
  return enumObject;
42
40
  }
@@ -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;
@@ -16,6 +16,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
16
16
  exports.restoreJsonNames = void 0;
17
17
  const names_js_1 = require("../reflect/names.js");
18
18
  const unsafe_js_1 = require("../reflect/unsafe.js");
19
+ /**
20
+ * @private
21
+ */
19
22
  function restoreJsonNames(message) {
20
23
  for (const f of message.field) {
21
24
  if (!(0, unsafe_js_1.unsafeIsSetExplicit)(f, "jsonName")) {
@@ -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;
@@ -14,7 +14,13 @@
14
14
  // limitations under the License.
15
15
  Object.defineProperty(exports, "__esModule", { value: true });
16
16
  exports.symbols = exports.wktPublicImportPaths = exports.packageName = void 0;
17
+ /**
18
+ * @private
19
+ */
17
20
  exports.packageName = "@bufbuild/protobuf";
21
+ /**
22
+ * @private
23
+ */
18
24
  exports.wktPublicImportPaths = {
19
25
  "google/protobuf/compiler/plugin.proto": exports.packageName + "/wkt",
20
26
  "google/protobuf/any.proto": exports.packageName + "/wkt",
@@ -29,6 +35,9 @@ exports.wktPublicImportPaths = {
29
35
  "google/protobuf/type.proto": exports.packageName + "/wkt",
30
36
  "google/protobuf/wrappers.proto": exports.packageName + "/wkt",
31
37
  };
38
+ /**
39
+ * @private
40
+ */
32
41
  // prettier-ignore
33
42
  exports.symbols = {
34
43
  isMessage: { typeOnly: false, bootstrapWktFrom: "../../is-message.js", from: exports.packageName },
@@ -1,10 +1,52 @@
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, DescService } from "../desc-types.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>;
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
+ */
7
46
  export type GenDescService<RuntimeShape extends GenDescServiceShape> = DescService & brand<RuntimeShape>;
47
+ /**
48
+ * @private
49
+ */
8
50
  export type GenDescServiceShape = {
9
51
  [localName: string]: {
10
52
  kind: "unary" | "server_streaming" | "client_streaming" | "bidi_streaming";
@@ -16,4 +58,15 @@ declare class brand<A, B = unknown> {
16
58
  protected a: A | boolean;
17
59
  protected b: B | boolean;
18
60
  }
61
+ /**
62
+ * Union of the property names of all fields, including oneof members.
63
+ * For an anonymous message (no generated message shape), it's simply a string.
64
+ */
65
+ type MessageFieldNames<T extends Message> = Message extends T ? string : Exclude<keyof {
66
+ [P in keyof T as P extends ("$typeName" | "$unknown") ? never : T[P] extends Oneof<infer K> ? K : P]-?: true;
67
+ }, number | symbol>;
68
+ type Oneof<K extends string> = {
69
+ case: K | undefined;
70
+ value?: unknown;
71
+ };
19
72
  export {};
@@ -15,15 +15,12 @@
15
15
  Object.defineProperty(exports, "__esModule", { value: true });
16
16
  exports.create = void 0;
17
17
  const is_message_js_1 = require("./is-message.js");
18
- const names_js_1 = require("./reflect/names.js");
19
18
  const scalar_js_1 = require("./reflect/scalar.js");
20
19
  const guard_js_1 = require("./reflect/guard.js");
21
20
  const unsafe_js_1 = require("./reflect/unsafe.js");
22
21
  const wrappers_js_1 = require("./wkt/wrappers.js");
23
22
  // bootstrap-inject google.protobuf.Edition.EDITION_PROTO3: const $name: Edition.$localName = $number;
24
23
  const EDITION_PROTO3 = 999;
25
- // bootstrap-inject google.protobuf.FeatureSet.FieldPresence.EXPLICIT: const $name: FeatureSet_FieldPresence.$localName = $number;
26
- const EXPLICIT = 1;
27
24
  // bootstrap-inject google.protobuf.FeatureSet.FieldPresence.IMPLICIT: const $name: FeatureSet_FieldPresence.$localName = $number;
28
25
  const IMPLICIT = 2;
29
26
  /**
@@ -48,7 +45,7 @@ exports.create = create;
48
45
  */
49
46
  function initMessage(messageDesc, message, init) {
50
47
  for (const member of messageDesc.members) {
51
- let value = init[(0, names_js_1.localName)(member)];
48
+ let value = init[member.localName];
52
49
  if (value == null) {
53
50
  // intentionally ignore undefined and null
54
51
  continue;
@@ -146,17 +143,9 @@ function createZeroMessage(desc) {
146
143
  // the `optional` keyword generate an optional property.
147
144
  msg = {};
148
145
  for (const member of desc.members) {
149
- if (member.kind == "field") {
150
- if (member.fieldKind == "scalar" ||
151
- member.fieldKind == "enum" ||
152
- member.fieldKind == "message") {
153
- if (member.presence == EXPLICIT) {
154
- // skips message fields and optional scalar/enum
155
- continue;
156
- }
157
- }
146
+ if (member.kind == "oneof" || member.presence == IMPLICIT) {
147
+ msg[member.localName] = createZeroField(member);
158
148
  }
159
- msg[(0, names_js_1.localName)(member)] = createZeroField(member);
160
149
  }
161
150
  }
162
151
  else {
@@ -183,12 +172,12 @@ function createZeroMessage(desc) {
183
172
  continue;
184
173
  }
185
174
  if (member.presence == IMPLICIT) {
186
- // implicit presence tracks field presence by zero values
187
- // e.g. 0, false, "", are unset, 1, true, "x" are set
175
+ // implicit presence tracks field presence by zero values - e.g. 0, false, "", are unset, 1, true, "x" are set.
176
+ // message, map, list fields are mutable, and also have IMPLICIT presence.
188
177
  continue;
189
178
  }
190
179
  members.add(member);
191
- prototype[(0, names_js_1.localName)(member)] = createZeroField(member);
180
+ prototype[member.localName] = createZeroField(member);
192
181
  }
193
182
  messagePrototypes.set(desc, { prototype, members });
194
183
  }
@@ -207,7 +196,7 @@ function createZeroMessage(desc) {
207
196
  }
208
197
  }
209
198
  }
210
- msg[(0, names_js_1.localName)(member)] = createZeroField(member);
199
+ msg[member.localName] = createZeroField(member);
211
200
  }
212
201
  }
213
202
  msg.$typeName = desc.typeName;
@@ -108,6 +108,10 @@ export interface DescEnumValue {
108
108
  * The name of the enumeration value, as specified in the protobuf source.
109
109
  */
110
110
  readonly name: string;
111
+ /**
112
+ * A safe and idiomatic name for the value in a TypeScript enum.
113
+ */
114
+ readonly localName: string;
111
115
  /**
112
116
  * The enumeration this value belongs to.
113
117
  */
@@ -152,6 +156,10 @@ export interface DescMessage {
152
156
  * group.
153
157
  */
154
158
  readonly fields: DescField[];
159
+ /**
160
+ * All fields of this message by their "localName".
161
+ */
162
+ readonly field: Record<string, DescField>;
155
163
  /**
156
164
  * Oneof groups declared for this message.
157
165
  * This does not include synthetic oneofs for proto3 optionals.
@@ -195,6 +203,10 @@ type descFieldCommon = descFieldAndExtensionShared & {
195
203
  * The message this field is declared on.
196
204
  */
197
205
  readonly parent: DescMessage;
206
+ /**
207
+ * A safe and idiomatic name for the field as a property in ECMAScript.
208
+ */
209
+ readonly localName: string;
198
210
  };
199
211
  /**
200
212
  * Describes an extension in a protobuf source file.
@@ -240,6 +252,11 @@ interface descFieldAndExtensionShared {
240
252
  * Marked as deprecated in the protobuf source.
241
253
  */
242
254
  readonly deprecated: boolean;
255
+ /**
256
+ * Presence of the field.
257
+ * See https://protobuf.dev/programming-guides/field_presence/
258
+ */
259
+ readonly presence: SupportedFieldPresence;
243
260
  /**
244
261
  * The compiler-generated descriptor.
245
262
  */
@@ -256,15 +273,6 @@ type descFieldSingularCommon = {
256
273
  * This does not include synthetic oneofs for proto3 optionals.
257
274
  */
258
275
  readonly oneof: DescOneof | undefined;
259
- /**
260
- * Whether this field was declared with `optional` in the protobuf source.
261
- */
262
- readonly optional: boolean;
263
- /**
264
- * Presence of the field.
265
- * See https://protobuf.dev/programming-guides/field_presence/
266
- */
267
- readonly presence: SupportedFieldPresence;
268
276
  };
269
277
  type descFieldScalar<T extends ScalarType = ScalarType> = T extends T ? {
270
278
  readonly fieldKind: "scalar";
@@ -414,7 +422,8 @@ type descFieldMapCommon<T extends ScalarType = ScalarType> = T extends Exclude<S
414
422
  readonly oneof: undefined;
415
423
  /**
416
424
  * Encode the map entry message delimited (a.k.a. proto2 group encoding),
417
- * or length-prefixed? This is always false for map fields.
425
+ * or length-prefixed? As of Edition 2023, this is always false for map fields,
426
+ * and also applies to map values, if they are messages.
418
427
  */
419
428
  readonly delimitedEncoding: false;
420
429
  } : never;
@@ -472,6 +481,10 @@ export interface DescOneof {
472
481
  * The name of the oneof group, as specified in the protobuf source.
473
482
  */
474
483
  readonly name: string;
484
+ /**
485
+ * A safe and idiomatic name for the oneof group as a property in ECMAScript.
486
+ */
487
+ readonly localName: string;
475
488
  /**
476
489
  * The message this oneof group was declared in.
477
490
  */
@@ -532,6 +545,10 @@ export interface DescMethod {
532
545
  * The name of the RPC, as specified in the protobuf source.
533
546
  */
534
547
  readonly name: string;
548
+ /**
549
+ * A safe and idiomatic name for the RPC as a method in ECMAScript.
550
+ */
551
+ readonly localName: string;
535
552
  /**
536
553
  * The parent service.
537
554
  */
@@ -1,6 +1,7 @@
1
- import type { DescExtension, DescField } from "./desc-types.js";
1
+ import type { AnyDesc, DescEnum, DescEnumValue, DescExtension, DescField, DescFile, DescMessage, DescMethod, DescOneof, DescService } from "./desc-types.js";
2
2
  import type { ReflectMessage } from "./reflect/reflect-types.js";
3
3
  import type { Extendee, ExtensionValueShape } from "./types.js";
4
+ import type { EnumOptions, EnumValueOptions, FieldOptions, FileOptions, MessageOptions, MethodOptions, OneofOptions, ServiceOptions } from "./wkt/gen/google/protobuf/descriptor_pb.js";
4
5
  /**
5
6
  * Retrieve an extension value from a message.
6
7
  *
@@ -33,7 +34,26 @@ export declare function clearExtension<Desc extends DescExtension>(message: Exte
33
34
  * Check whether an extension is set on a message.
34
35
  */
35
36
  export declare function hasExtension<Desc extends DescExtension>(message: Extendee<Desc>, extension: Desc): boolean;
37
+ /**
38
+ * Check whether an option is set on a descriptor.
39
+ *
40
+ * Options are extensions to the `google.protobuf.*Options` messages defined in
41
+ * google/protobuf/descriptor.proto. This function gets the option message from
42
+ * the descriptor, and calls hasExtension().
43
+ */
44
+ export declare function hasOption<Ext extends DescExtension, Desc extends DescForOptionExtension<Ext>>(element: Desc, option: Ext): boolean;
45
+ /**
46
+ * Retrieve an option value from a descriptor.
47
+ *
48
+ * Options are extensions to the `google.protobuf.*Options` messages defined in
49
+ * google/protobuf/descriptor.proto. This function gets the option message from
50
+ * the descriptor, and calls getExtension(). Same as getExtension(), this
51
+ * function never returns undefined.
52
+ */
53
+ export declare function getOption<Ext extends DescExtension, Desc extends DescForOptionExtension<Ext>>(element: Desc, option: Ext): ExtensionValueShape<Ext>;
54
+ type DescForOptionExtension<Ext extends DescExtension> = Extendee<Ext> extends FileOptions ? DescFile : Extendee<Ext> extends EnumOptions ? DescEnum : Extendee<Ext> extends EnumValueOptions ? DescEnumValue : Extendee<Ext> extends MessageOptions ? DescMessage : Extendee<Ext> extends MessageOptions ? DescEnum : Extendee<Ext> extends FieldOptions ? DescField | DescExtension : Extendee<Ext> extends OneofOptions ? DescOneof : Extendee<Ext> extends ServiceOptions ? DescService : Extendee<Ext> extends EnumOptions ? DescEnum : Extendee<Ext> extends MethodOptions ? DescMethod : AnyDesc;
36
55
  /**
37
56
  * @private
38
57
  */
39
58
  export declare function createExtensionContainer<Desc extends DescExtension>(extension: Desc, value?: ExtensionValueShape<Desc>): [ReflectMessage, DescField, () => ExtensionValueShape<Desc>];
59
+ export {};
@@ -13,11 +13,10 @@
13
13
  // See the License for the specific language governing permissions and
14
14
  // limitations under the License.
15
15
  Object.defineProperty(exports, "__esModule", { value: true });
16
- exports.createExtensionContainer = exports.hasExtension = exports.clearExtension = exports.setExtension = exports.getExtension = void 0;
16
+ exports.createExtensionContainer = exports.getOption = exports.hasOption = exports.hasExtension = exports.clearExtension = exports.setExtension = exports.getExtension = void 0;
17
17
  const assert_js_1 = require("./reflect/assert.js");
18
18
  const create_js_1 = require("./create.js");
19
19
  const from_binary_js_1 = require("./from-binary.js");
20
- const names_js_1 = require("./reflect/names.js");
21
20
  const reflect_js_1 = require("./reflect/reflect.js");
22
21
  const scalar_js_1 = require("./reflect/scalar.js");
23
22
  const to_binary_js_1 = require("./to-binary.js");
@@ -65,7 +64,7 @@ function setExtension(message, extension, value) {
65
64
  const reader = new binary_encoding_js_1.BinaryReader(writer.finish());
66
65
  while (reader.pos < reader.len) {
67
66
  const [no, wireType] = reader.tag();
68
- const data = reader.skip(wireType);
67
+ const data = reader.skip(wireType, no);
69
68
  ufs.push({ no, wireType, data });
70
69
  }
71
70
  message.$unknown = ufs;
@@ -93,6 +92,38 @@ function hasExtension(message, extension) {
93
92
  !!((_a = message.$unknown) === null || _a === void 0 ? void 0 : _a.find((uf) => uf.no === extension.number)));
94
93
  }
95
94
  exports.hasExtension = hasExtension;
95
+ /**
96
+ * Check whether an option is set on a descriptor.
97
+ *
98
+ * Options are extensions to the `google.protobuf.*Options` messages defined in
99
+ * google/protobuf/descriptor.proto. This function gets the option message from
100
+ * the descriptor, and calls hasExtension().
101
+ */
102
+ function hasOption(element, option) {
103
+ const message = element.proto.options;
104
+ if (!message) {
105
+ return false;
106
+ }
107
+ return hasExtension(message, option);
108
+ }
109
+ exports.hasOption = hasOption;
110
+ /**
111
+ * Retrieve an option value from a descriptor.
112
+ *
113
+ * Options are extensions to the `google.protobuf.*Options` messages defined in
114
+ * google/protobuf/descriptor.proto. This function gets the option message from
115
+ * the descriptor, and calls getExtension(). Same as getExtension(), this
116
+ * function never returns undefined.
117
+ */
118
+ function getOption(element, option) {
119
+ const message = element.proto.options;
120
+ if (!message) {
121
+ const [, , get] = createExtensionContainer(option);
122
+ return get();
123
+ }
124
+ return getExtension(message, option);
125
+ }
126
+ exports.getOption = getOption;
96
127
  function filterUnknownFields(unknownFields, extension) {
97
128
  if (unknownFields === undefined)
98
129
  return [];
@@ -111,15 +142,15 @@ function filterUnknownFields(unknownFields, extension) {
111
142
  * @private
112
143
  */
113
144
  function createExtensionContainer(extension, value) {
114
- const field = Object.assign(Object.assign({}, extension), { kind: "field", parent: extension.extendee });
145
+ const localName = extension.typeName;
146
+ const field = Object.assign(Object.assign({}, extension), { kind: "field", parent: extension.extendee, localName });
115
147
  const desc = Object.assign(Object.assign({}, extension.extendee), { fields: [field], members: [field], oneofs: [] });
116
- const fieldName = (0, names_js_1.localName)(field);
117
- const container = (0, create_js_1.create)(desc, value !== undefined ? { [fieldName]: value } : undefined);
148
+ const container = (0, create_js_1.create)(desc, value !== undefined ? { [localName]: value } : undefined);
118
149
  return [
119
150
  (0, reflect_js_1.reflect)(desc, container),
120
151
  field,
121
152
  () => {
122
- const value = container[fieldName];
153
+ const value = container[localName];
123
154
  if (value === undefined) {
124
155
  // Only message fields are undefined, rest will have a zero value.
125
156
  const desc = extension.message;
@@ -1,22 +1,23 @@
1
- import type { Message, MessageShape } from "./types.js";
2
- import type { DescMessage } from "./desc-types.js";
1
+ import type { MessageShape } from "./types.js";
2
+ import type { DescField, DescMessage } from "./desc-types.js";
3
3
  /**
4
4
  * Returns true if the field is set.
5
+ *
6
+ * - Scalar and enum fields with implicit presence (proto3):
7
+ * Set if not a zero value.
8
+ *
9
+ * - Scalar and enum fields with explicit presence (proto2, oneof):
10
+ * Set if a value was set when creating or parsing the message, or when a
11
+ * value was assigned to the field's property.
12
+ *
13
+ * - Message fields:
14
+ * Set if the property is not undefined.
15
+ *
16
+ * - List and map fields:
17
+ * Set if not empty.
5
18
  */
6
- export declare function isFieldSet<Desc extends DescMessage>(messageDesc: Desc, message: MessageShape<Desc>, fieldName: MessageFieldNames<MessageShape<Desc>>): boolean;
19
+ export declare function isFieldSet<Desc extends DescMessage>(message: MessageShape<Desc>, field: DescField): boolean;
7
20
  /**
8
21
  * Resets the field, so that isFieldSet() will return false.
9
22
  */
10
- export declare function clearField<Desc extends DescMessage>(messageDesc: Desc, message: MessageShape<Desc>, fieldName: MessageFieldNames<MessageShape<Desc>>): void;
11
- /**
12
- * Union of the property names of all fields, including oneof members.
13
- * For an anonymous message (no generated message shape), it's simply a string.
14
- */
15
- type MessageFieldNames<T extends Message> = Message extends T ? string : Exclude<keyof {
16
- [P in keyof T as P extends ("$typeName" | "$unknown") ? never : T[P] extends Oneof<infer K> ? K : P]-?: true;
17
- }, number | symbol>;
18
- type Oneof<K extends string> = {
19
- case: K | undefined;
20
- value?: unknown;
21
- };
22
- export {};
23
+ export declare function clearField<Desc extends DescMessage>(message: MessageShape<Desc>, field: DescField): void;
@@ -14,25 +14,32 @@
14
14
  // limitations under the License.
15
15
  Object.defineProperty(exports, "__esModule", { value: true });
16
16
  exports.clearField = exports.isFieldSet = void 0;
17
- const names_js_1 = require("./reflect/names.js");
18
17
  const unsafe_js_1 = require("./reflect/unsafe.js");
19
18
  /**
20
19
  * Returns true if the field is set.
20
+ *
21
+ * - Scalar and enum fields with implicit presence (proto3):
22
+ * Set if not a zero value.
23
+ *
24
+ * - Scalar and enum fields with explicit presence (proto2, oneof):
25
+ * Set if a value was set when creating or parsing the message, or when a
26
+ * value was assigned to the field's property.
27
+ *
28
+ * - Message fields:
29
+ * Set if the property is not undefined.
30
+ *
31
+ * - List and map fields:
32
+ * Set if not empty.
21
33
  */
22
- function isFieldSet(messageDesc, message, fieldName) {
23
- const field = messageDesc.fields.find((f) => (0, names_js_1.localName)(f) === fieldName);
24
- if (field) {
25
- return (0, unsafe_js_1.unsafeIsSet)(message, field);
26
- }
27
- return false;
34
+ function isFieldSet(message, field) {
35
+ return (field.parent.typeName == message.$typeName && (0, unsafe_js_1.unsafeIsSet)(message, field));
28
36
  }
29
37
  exports.isFieldSet = isFieldSet;
30
38
  /**
31
39
  * Resets the field, so that isFieldSet() will return false.
32
40
  */
33
- function clearField(messageDesc, message, fieldName) {
34
- const field = messageDesc.fields.find((f) => (0, names_js_1.localName)(f) === fieldName);
35
- if (field) {
41
+ function clearField(message, field) {
42
+ if (field.parent.typeName == message.$typeName) {
36
43
  (0, unsafe_js_1.unsafeClear)(message, field);
37
44
  }
38
45
  }