@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
@@ -62,12 +62,12 @@ function readMessage(message, reader, options, delimited, lengthOrDelimitedField
62
62
  const unknownFields = (_a = message.getUnknown()) !== null && _a !== void 0 ? _a : [];
63
63
  while (reader.pos < end) {
64
64
  [fieldNo, wireType] = reader.tag();
65
- if (wireType == binary_encoding_js_1.WireType.EndGroup) {
65
+ if (delimited && wireType == binary_encoding_js_1.WireType.EndGroup) {
66
66
  break;
67
67
  }
68
68
  const field = message.findNumber(fieldNo);
69
69
  if (!field) {
70
- const data = reader.skip(wireType);
70
+ const data = reader.skip(wireType, fieldNo);
71
71
  if (options.readUnknownFields) {
72
72
  unknownFields.push({ no: fieldNo, wireType, data });
73
73
  }
@@ -90,7 +90,7 @@ function readMessage(message, reader, options, delimited, lengthOrDelimitedField
90
90
  function readField(message, reader, field, wireType, options) {
91
91
  switch (field.fieldKind) {
92
92
  case "scalar":
93
- message.set(field, readScalar(reader, field.scalar, field.longType));
93
+ message.set(field, readScalar(reader, field.scalar));
94
94
  break;
95
95
  case "enum":
96
96
  message.set(field, readScalar(reader, scalar_js_1.ScalarType.INT32));
@@ -102,15 +102,13 @@ function readField(message, reader, field, wireType, options) {
102
102
  readListField(message, reader, options, field, wireType);
103
103
  break;
104
104
  case "map":
105
- // eslint-disable-next-line no-case-declarations
106
- const [key, val] = readMapEntry(field, reader, options);
107
- message.setMapEntry(field, key, val);
105
+ readMapEntry(message, field, reader, options);
108
106
  break;
109
107
  }
110
108
  }
111
109
  exports.readField = readField;
112
110
  // Read a map field, expecting key field = 1, value field = 2
113
- function readMapEntry(field, reader, options) {
111
+ function readMapEntry(message, field, reader, options) {
114
112
  let key, val;
115
113
  const end = reader.pos + reader.uint32();
116
114
  while (reader.pos < end) {
@@ -150,7 +148,7 @@ function readMapEntry(field, reader, options) {
150
148
  break;
151
149
  }
152
150
  }
153
- return [key, val];
151
+ message.setMapEntry(field, key, val);
154
152
  }
155
153
  function readListField(message, reader, options, field, wireType) {
156
154
  var _a;
@@ -159,17 +157,16 @@ function readListField(message, reader, options, field, wireType) {
159
157
  return;
160
158
  }
161
159
  const scalarType = (_a = field.scalar) !== null && _a !== void 0 ? _a : scalar_js_1.ScalarType.INT32;
162
- const longType = field.listKind == "scalar" ? field.longType : undefined;
163
160
  const packed = wireType == binary_encoding_js_1.WireType.LengthDelimited &&
164
161
  scalarType != scalar_js_1.ScalarType.STRING &&
165
162
  scalarType != scalar_js_1.ScalarType.BYTES;
166
163
  if (!packed) {
167
- message.addListItem(field, readScalar(reader, scalarType, longType));
164
+ message.addListItem(field, readScalar(reader, scalarType));
168
165
  return;
169
166
  }
170
167
  const e = reader.uint32() + reader.pos;
171
168
  while (reader.pos < e) {
172
- message.addListItem(field, readScalar(reader, scalarType, longType));
169
+ message.addListItem(field, readScalar(reader, scalarType));
173
170
  }
174
171
  }
175
172
  function readMessageField(reader, options, field, mergeMessage) {
@@ -178,14 +175,7 @@ function readMessageField(reader, options, field, mergeMessage) {
178
175
  readMessage(message, reader, options, delimited, delimited ? field.number : reader.uint32());
179
176
  return message;
180
177
  }
181
- function readScalar(reader, type, longType) {
182
- let v = readScalarValue(reader, type);
183
- if (longType === scalar_js_1.LongType.STRING) {
184
- v = typeof v == "bigint" ? v.toString() : v;
185
- }
186
- return v;
187
- }
188
- function readScalarValue(reader, type) {
178
+ function readScalar(reader, type) {
189
179
  switch (type) {
190
180
  case scalar_js_1.ScalarType.STRING:
191
181
  return reader.string();
@@ -175,7 +175,7 @@ function readMapField(msg, field, json, opts) {
175
175
  break;
176
176
  case "scalar":
177
177
  try {
178
- msg.setMapEntry(field, key, readScalar(field.scalar, jsonMapValue, scalar_js_1.LongType.BIGINT, true));
178
+ msg.setMapEntry(field, key, readScalar(field.scalar, jsonMapValue, true));
179
179
  }
180
180
  catch (e) {
181
181
  let m = `cannot decode map value for field ${msg.desc.typeName}.${field.name} from JSON: ${(0, reflect_check_js_1.formatVal)(jsonMapValue)}`;
@@ -213,7 +213,7 @@ function readListField(msg, field, json, opts) {
213
213
  break;
214
214
  case "scalar":
215
215
  try {
216
- msg.addListItem(field, readScalar(field.scalar, jsonItem, field.longType, true));
216
+ msg.addListItem(field, readScalar(field.scalar, jsonItem, true));
217
217
  }
218
218
  catch (e) {
219
219
  let m = `cannot decode field ${msg.desc.typeName}.${field.name} from JSON: ${(0, reflect_check_js_1.formatVal)(jsonItem)}`;
@@ -246,7 +246,7 @@ function readEnumField(msg, field, json, opts) {
246
246
  }
247
247
  function readScalarField(msg, field, json) {
248
248
  try {
249
- const scalarValue = readScalar(field.scalar, json, field.longType, false);
249
+ const scalarValue = readScalar(field.scalar, json, false);
250
250
  if (scalarValue === tokenNull) {
251
251
  msg.clear(field);
252
252
  }
@@ -274,7 +274,7 @@ function readMapKey(type, json) {
274
274
  break;
275
275
  }
276
276
  }
277
- return readScalar(type, json, scalar_js_1.LongType.BIGINT, true);
277
+ return readScalar(type, json, true);
278
278
  }
279
279
  const tokenIgnoredUnknownEnum = Symbol();
280
280
  function readEnum(desc, json, ignoreUnknownFields, nullAsZeroValue) {
@@ -304,10 +304,10 @@ function readEnum(desc, json, ignoreUnknownFields, nullAsZeroValue) {
304
304
  throw new Error(`cannot decode enum ${desc.typeName} from JSON: ${(0, reflect_check_js_1.formatVal)(json)}`);
305
305
  }
306
306
  const tokenNull = Symbol();
307
- function readScalar(type, json, longType, nullAsZeroValue) {
307
+ function readScalar(type, json, nullAsZeroValue) {
308
308
  if (json === null) {
309
309
  if (nullAsZeroValue) {
310
- return (0, scalar_js_1.scalarZeroValue)(type, longType);
310
+ return (0, scalar_js_1.scalarZeroValue)(type, scalar_js_1.LongType.BIGINT);
311
311
  }
312
312
  return tokenNull;
313
313
  }
@@ -373,16 +373,12 @@ function readScalar(type, json, longType, nullAsZeroValue) {
373
373
  case scalar_js_1.ScalarType.SINT64:
374
374
  if (typeof json != "number" && typeof json != "string")
375
375
  break;
376
- const long = proto_int64_js_1.protoInt64.parse(json);
377
- // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
378
- return longType ? long.toString() : long;
376
+ return proto_int64_js_1.protoInt64.parse(json);
379
377
  case scalar_js_1.ScalarType.FIXED64:
380
378
  case scalar_js_1.ScalarType.UINT64:
381
379
  if (typeof json != "number" && typeof json != "string")
382
380
  break;
383
- const uLong = proto_int64_js_1.protoInt64.uParse(json);
384
- // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
385
- return longType ? uLong.toString() : uLong;
381
+ return proto_int64_js_1.protoInt64.uParse(json);
386
382
  // bool:
387
383
  case scalar_js_1.ScalarType.BOOL:
388
384
  if (typeof json !== "boolean")
@@ -450,7 +446,7 @@ function tryWktFromJson(msg, jsonValue, opts) {
450
446
  msg.clear(valueField);
451
447
  }
452
448
  else {
453
- msg.set(valueField, readScalar(valueField.scalar, jsonValue, valueField.longType, true));
449
+ msg.set(valueField, readScalar(valueField.scalar, jsonValue, true));
454
450
  }
455
451
  return true;
456
452
  }
@@ -12,5 +12,5 @@ export { fromBinary, mergeFromBinary } from "./from-binary.js";
12
12
  export type { BinaryReadOptions } from "./from-binary.js";
13
13
  export * from "./to-json.js";
14
14
  export * from "./from-json.js";
15
- export { hasExtension, getExtension, setExtension, clearExtension, } from "./extensions.js";
15
+ export { hasExtension, getExtension, setExtension, clearExtension, hasOption, getOption, } from "./extensions.js";
16
16
  export * from "./proto-int64.js";
package/dist/cjs/index.js CHANGED
@@ -27,7 +27,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
27
27
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
28
28
  };
29
29
  Object.defineProperty(exports, "__esModule", { value: true });
30
- exports.clearExtension = exports.setExtension = exports.getExtension = exports.hasExtension = exports.mergeFromBinary = exports.fromBinary = exports.toBinary = void 0;
30
+ exports.getOption = exports.hasOption = exports.clearExtension = exports.setExtension = exports.getExtension = exports.hasExtension = exports.mergeFromBinary = exports.fromBinary = exports.toBinary = void 0;
31
31
  __exportStar(require("./types.js"), exports);
32
32
  __exportStar(require("./is-message.js"), exports);
33
33
  __exportStar(require("./create.js"), exports);
@@ -47,4 +47,6 @@ Object.defineProperty(exports, "hasExtension", { enumerable: true, get: function
47
47
  Object.defineProperty(exports, "getExtension", { enumerable: true, get: function () { return extensions_js_1.getExtension; } });
48
48
  Object.defineProperty(exports, "setExtension", { enumerable: true, get: function () { return extensions_js_1.setExtension; } });
49
49
  Object.defineProperty(exports, "clearExtension", { enumerable: true, get: function () { return extensions_js_1.clearExtension; } });
50
+ Object.defineProperty(exports, "hasOption", { enumerable: true, get: function () { return extensions_js_1.hasOption; } });
51
+ Object.defineProperty(exports, "getOption", { enumerable: true, get: function () { return extensions_js_1.getOption; } });
50
52
  __exportStar(require("./proto-int64.js"), exports);
@@ -1,15 +1,3 @@
1
- import type { DescEnumValue, DescField } from "../desc-types.js";
2
- import type { DescMethod, DescOneof } from "../desc-types.js";
3
- /**
4
- * Returns the name of a protobuf element in generated code.
5
- *
6
- * Field names - including oneofs - are converted to lowerCamelCase. For methods,
7
- * the first character is made lowercase. All names are escaped to be safe object
8
- * property names.
9
- *
10
- * This function does not provide names for messages, enumerations, and services.
11
- */
12
- export declare function localName(desc: DescEnumValue | DescOneof | DescField | DescMethod): string;
13
1
  /**
14
2
  * Converts snake_case to protoCamelCase according to the convention
15
3
  * used by protoc to convert a field name to a JSON name.
@@ -13,45 +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.safeObjectProperty = exports.protoCamelCase = exports.localName = void 0;
17
- /**
18
- * Returns the name of a protobuf element in generated code.
19
- *
20
- * Field names - including oneofs - are converted to lowerCamelCase. For methods,
21
- * the first character is made lowercase. All names are escaped to be safe object
22
- * property names.
23
- *
24
- * This function does not provide names for messages, enumerations, and services.
25
- */
26
- function localName(desc) {
27
- const name = desc.name;
28
- switch (desc.kind) {
29
- // @ts-expect-error TS7029
30
- case "field":
31
- if (desc.oneof !== undefined) {
32
- // oneof member names are not properties, but values of the `case` property.
33
- return protoCamelCase(name);
34
- }
35
- // eslint-disable-next-line no-fallthrough
36
- case "oneof":
37
- return safeObjectProperty(protoCamelCase(name));
38
- case "enum_value": {
39
- let name = desc.name;
40
- const sharedPrefix = desc.parent.sharedPrefix;
41
- if (sharedPrefix !== undefined) {
42
- name = name.substring(sharedPrefix.length);
43
- }
44
- return safeObjectProperty(name);
45
- }
46
- case "rpc": {
47
- if (name.length == 0) {
48
- return name;
49
- }
50
- return safeObjectProperty(name[0].toLowerCase() + name.substring(1));
51
- }
52
- }
53
- }
54
- exports.localName = localName;
16
+ exports.safeObjectProperty = exports.protoCamelCase = void 0;
55
17
  /**
56
18
  * Converts snake_case to protoCamelCase according to the convention
57
19
  * used by protoc to convert a field name to a JSON name.
@@ -1,2 +1,12 @@
1
- import type { DescEnum, DescExtension, DescFile, DescMessage, DescService } from "../desc-types.js";
1
+ import type { AnyDesc, DescEnum, DescExtension, DescFile, DescMessage, DescService } from "../desc-types.js";
2
+ /**
3
+ * Iterate over all types - enumerations, extensions, services, messages -
4
+ * and enumerations, extensions and messages nested in messages.
5
+ */
2
6
  export declare function nestedTypes(desc: DescFile | DescMessage): Iterable<DescMessage | DescEnum | DescExtension | DescService>;
7
+ /**
8
+ * Returns the ancestors of a given Protobuf element, up to the file.
9
+ */
10
+ export declare function parentTypes(desc: AnyDesc): Parent[];
11
+ type Parent = DescFile | DescEnum | DescMessage | DescService;
12
+ export {};
@@ -13,7 +13,11 @@
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.nestedTypes = void 0;
16
+ exports.parentTypes = exports.nestedTypes = void 0;
17
+ /**
18
+ * Iterate over all types - enumerations, extensions, services, messages -
19
+ * and enumerations, extensions and messages nested in messages.
20
+ */
17
21
  function* nestedTypes(desc) {
18
22
  switch (desc.kind) {
19
23
  case "file":
@@ -36,3 +40,32 @@ function* nestedTypes(desc) {
36
40
  }
37
41
  }
38
42
  exports.nestedTypes = nestedTypes;
43
+ /**
44
+ * Returns the ancestors of a given Protobuf element, up to the file.
45
+ */
46
+ function parentTypes(desc) {
47
+ const parents = [];
48
+ while (desc.kind !== "file") {
49
+ const p = parent(desc);
50
+ desc = p;
51
+ parents.push(p);
52
+ }
53
+ return parents;
54
+ }
55
+ exports.parentTypes = parentTypes;
56
+ function parent(desc) {
57
+ var _a;
58
+ switch (desc.kind) {
59
+ case "enum_value":
60
+ case "field":
61
+ case "oneof":
62
+ case "rpc":
63
+ return desc.parent;
64
+ case "service":
65
+ return desc.file;
66
+ case "extension":
67
+ case "enum":
68
+ case "message":
69
+ return (_a = desc.parent) !== null && _a !== void 0 ? _a : desc.file;
70
+ }
71
+ }
@@ -3,30 +3,149 @@ import { FieldError } from "./error.js";
3
3
  import { unsafeLocal } from "./unsafe.js";
4
4
  import type { Message, UnknownField } from "../types.js";
5
5
  import type { LongType, ScalarValue } from "./scalar.js";
6
+ /**
7
+ * ReflectMessage provides dynamic access and manipulation of a message.
8
+ */
6
9
  export interface ReflectMessage {
10
+ /**
11
+ * The underlying message instance.
12
+ */
7
13
  readonly message: Message;
14
+ /**
15
+ * The descriptor for the message.
16
+ */
8
17
  readonly desc: DescMessage;
18
+ /**
19
+ * The fields of the message. This is a shortcut to message.fields.
20
+ */
9
21
  readonly fields: readonly DescField[];
22
+ /**
23
+ * The fields of the message, sorted by field number ascending.
24
+ */
10
25
  readonly sortedFields: readonly DescField[];
26
+ /**
27
+ * Oneof groups of the message. This is a shortcut to message.oneofs.
28
+ */
11
29
  readonly oneofs: readonly DescOneof[];
30
+ /**
31
+ * Fields and oneof groups for this message. This is a shortcut to message.members.
32
+ */
12
33
  readonly members: readonly (DescField | DescOneof)[];
34
+ /**
35
+ * Find a field by number.
36
+ */
13
37
  findNumber(number: number): DescField | undefined;
38
+ /**
39
+ * Returns true if the field is set.
40
+ *
41
+ * - Scalar and enum fields with implicit presence (proto3):
42
+ * Set if not a zero value.
43
+ *
44
+ * - Scalar and enum fields with explicit presence (proto2, oneof):
45
+ * Set if a value was set when creating or parsing the message, or when a
46
+ * value was assigned to the field's property.
47
+ *
48
+ * - Message fields:
49
+ * Set if the property is not undefined.
50
+ *
51
+ * - List and map fields:
52
+ * Set if not empty.
53
+ */
14
54
  isSet(field: DescField): boolean;
55
+ /**
56
+ * Resets the field, so that isSet() will return false.
57
+ */
15
58
  clear(field: DescField): void;
59
+ /**
60
+ * Return the selected field of a oneof group.
61
+ */
16
62
  oneofCase(oneof: DescOneof): DescField | undefined;
63
+ /**
64
+ * Returns the field value. Values are converted or wrapped to make it easier
65
+ * to manipulate messages.
66
+ *
67
+ * - Scalar fields:
68
+ * Returns the value, but converts 64-bit integer fields with the option
69
+ * `jstype=JS_STRING` to a bigint value.
70
+ * If the field is not set, the default value is returned. If no default
71
+ * value is set, the zero value is returned.
72
+ *
73
+ * - Enum fields:
74
+ * Returns the numeric value. If the field is not set, the default value is
75
+ * returned. If no default value is set, the zero value is returned.
76
+ *
77
+ * - Message fields:
78
+ * Returns a ReflectMessage. If the field is not set, a new message is
79
+ * returned, but not set on the field.
80
+ *
81
+ * - List fields:
82
+ * Returns a ReflectList object.
83
+ *
84
+ * - Map fields:
85
+ * Returns a ReflectMap object.
86
+ *
87
+ * Note that get() never returns `undefined`. To determine whether a field is
88
+ * set, use isSet().
89
+ */
17
90
  get<Field extends DescField>(field: Field): ReflectGetValue<Field>;
91
+ /**
92
+ * Set a field value.
93
+ *
94
+ * Expects values in the same form that get() returns:
95
+ *
96
+ * - Scalar fields:
97
+ * 64-bit integer fields with the option `jstype=JS_STRING` as a bigint value.
98
+ *
99
+ * - Message fields:
100
+ * ReflectMessage.
101
+ *
102
+ * - List fields:
103
+ * ReflectList.
104
+ *
105
+ * - Map fields:
106
+ * ReflectMap.
107
+ *
108
+ * Returns an error if the value is invalid for the field. `undefined` is not
109
+ * a valid value. To reset a field, use clear().
110
+ */
18
111
  set<Field extends DescField>(field: Field, value: ReflectSetValue<Field>): FieldError | undefined;
112
+ /**
113
+ * Add an item to a list field.
114
+ */
19
115
  addListItem<Field extends DescField & {
20
116
  fieldKind: "list";
21
- }>(field: Field, value: NewListItem<Field>): FieldError | undefined;
117
+ }>(field: Field, value: ReflectAddListItemValue<Field>): FieldError | undefined;
118
+ /**
119
+ * Set a map entry.
120
+ */
22
121
  setMapEntry<Field extends DescField & {
23
122
  fieldKind: "map";
24
- }>(field: Field, key: MapEntryKey, value: NewMapEntryValue<Field>): FieldError | undefined;
123
+ }>(field: Field, key: MapEntryKey, value: ReflectSetMapEntryValue<Field>): FieldError | undefined;
124
+ /**
125
+ * Returns the unknown fields of the message.
126
+ */
25
127
  getUnknown(): UnknownField[] | undefined;
128
+ /**
129
+ * Sets the unknown fields of the message, overwriting any previous values.
130
+ */
26
131
  setUnknown(value: UnknownField[]): void;
27
132
  [unsafeLocal]: Message;
28
133
  }
134
+ /**
135
+ * ReflectList provides dynamic access and manipulation of a list field on a
136
+ * message.
137
+ *
138
+ * ReflectList is iterable - you can loop through all items with a for...of loop.
139
+ *
140
+ * Values are converted or wrapped to make it easier to manipulate them:
141
+ * - Scalar 64-bit integer fields with the option `jstype=JS_STRING` are
142
+ * converted to bigint.
143
+ * - Messages are wrapped in a ReflectMessage.
144
+ */
29
145
  export interface ReflectList<V = unknown> extends Iterable<V> {
146
+ /**
147
+ * Returns the list field.
148
+ */
30
149
  field(): DescField & {
31
150
  fieldKind: "list";
32
151
  };
@@ -60,7 +179,21 @@ export interface ReflectList<V = unknown> extends Iterable<V> {
60
179
  values(): IterableIterator<V>;
61
180
  [unsafeLocal]: unknown[];
62
181
  }
182
+ /**
183
+ * ReflectMap provides dynamic access and manipulation of a map field on a
184
+ * message.
185
+ *
186
+ * ReflectMap is iterable - you can loop through all entries with a for...of loop.
187
+ *
188
+ * Keys and values are converted or wrapped to make it easier to manipulate them:
189
+ * - A map field is a record object on a message, where keys are always strings.
190
+ * ReflectMap converts keys to their closest possible type in TypeScript.
191
+ * - Messages are wrapped in a ReflectMessage.
192
+ */
63
193
  export interface ReflectMap<K extends MapEntryKey = MapEntryKey, V = unknown> extends ReadonlyMap<K, V> {
194
+ /**
195
+ * Returns the map field.
196
+ */
64
197
  field(): DescField & {
65
198
  fieldKind: "map";
66
199
  };
@@ -80,9 +213,15 @@ export interface ReflectMap<K extends MapEntryKey = MapEntryKey, V = unknown> ex
80
213
  clear(): void;
81
214
  [unsafeLocal]: Record<string, unknown>;
82
215
  }
216
+ /**
217
+ * A ReflectMap key.
218
+ */
83
219
  export type MapEntryKey = string | number | bigint | boolean;
84
220
  type enumVal = number;
85
- type ReflectGetValue<Field extends DescField = DescField> = (Field extends {
221
+ /**
222
+ * The return type of ReflectMessage.get()
223
+ */
224
+ export type ReflectGetValue<Field extends DescField = DescField> = (Field extends {
86
225
  fieldKind: "map";
87
226
  } ? (Field extends {
88
227
  mapKind: "message";
@@ -95,25 +234,31 @@ type ReflectGetValue<Field extends DescField = DescField> = (Field extends {
95
234
  fieldKind: "list";
96
235
  } ? ReflectList : Field extends {
97
236
  fieldKind: "enum";
98
- } ? number | undefined : Field extends {
237
+ } ? number : Field extends {
99
238
  fieldKind: "message";
100
239
  } ? ReflectMessage : Field extends {
101
240
  fieldKind: "scalar";
102
241
  scalar: infer T;
103
- } ? ScalarValue<T> | undefined : never);
104
- type ReflectSetValue<Field extends DescField = DescField> = (Field extends {
242
+ } ? ScalarValue<T> : never);
243
+ /**
244
+ * The type of the "value" argument of ReflectMessage.set()
245
+ */
246
+ export type ReflectSetValue<Field extends DescField = DescField> = (Field extends {
105
247
  fieldKind: "map";
106
248
  } ? ReflectMap : Field extends {
107
249
  fieldKind: "list";
108
250
  } ? ReflectList : Field extends {
109
251
  fieldKind: "enum";
110
- } ? number | undefined : Field extends {
252
+ } ? number : Field extends {
111
253
  fieldKind: "message";
112
254
  } ? ReflectMessage : Field extends {
113
255
  fieldKind: "scalar";
114
256
  scalar: infer T;
115
- } ? ScalarValue<T> | undefined : never);
116
- type NewListItem<Field extends DescField & {
257
+ } ? ScalarValue<T> : never);
258
+ /**
259
+ * The type of the "value" argument of ReflectMessage.addListItem()
260
+ */
261
+ export type ReflectAddListItemValue<Field extends DescField & {
117
262
  fieldKind: "list";
118
263
  }> = (Field extends {
119
264
  listKind: "scalar";
@@ -123,7 +268,10 @@ type NewListItem<Field extends DescField & {
123
268
  } ? enumVal : Field extends {
124
269
  listKind: "message";
125
270
  } ? ReflectMessage : never);
126
- type NewMapEntryValue<Field extends DescField & {
271
+ /**
272
+ * The type of the "value" argument of ReflectMessage.setMapEntry()
273
+ */
274
+ export type ReflectSetMapEntryValue<Field extends DescField & {
127
275
  fieldKind: "map";
128
276
  }> = (Field extends {
129
277
  mapKind: "enum";
@@ -1,6 +1,9 @@
1
1
  import type { DescField, DescMessage } from "../desc-types.js";
2
2
  import type { MessageShape } from "../types.js";
3
3
  import type { MapEntryKey, ReflectList, ReflectMap, ReflectMessage } from "./reflect-types.js";
4
+ /**
5
+ * Create a ReflectMessage.
6
+ */
4
7
  export declare function reflect<Desc extends DescMessage>(messageDesc: Desc, message?: MessageShape<Desc>, opt?: {
5
8
  /**
6
9
  * By default, field values are validated when setting them. For example,
@@ -15,9 +18,15 @@ export declare function reflect<Desc extends DescMessage>(messageDesc: Desc, mes
15
18
  */
16
19
  disableFieldValueCheck?: boolean;
17
20
  }): ReflectMessage;
21
+ /**
22
+ * Create a ReflectList.
23
+ */
18
24
  export declare function reflectList<V>(field: DescField & {
19
25
  fieldKind: "list";
20
- }, unsafeInput?: unknown[]): ReflectList<V>;
26
+ }, unsafeInput?: unknown[], check?: boolean): ReflectList<V>;
27
+ /**
28
+ * Create a ReflectMap.
29
+ */
21
30
  export declare function reflectMap<K extends MapEntryKey, V>(field: DescField & {
22
31
  fieldKind: "map";
23
- }, unsafeInput?: Record<string, unknown>): ReflectMap<K, V>;
32
+ }, unsafeInput?: Record<string, unknown>, check?: boolean): ReflectMap<K, V>;