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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (201) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/clone.d.ts +1 -1
  3. package/dist/cjs/clone.js +2 -2
  4. package/dist/cjs/codegenv1/boot.d.ts +1 -1
  5. package/dist/cjs/codegenv1/boot.js +3 -5
  6. package/dist/cjs/codegenv1/embed.d.ts +2 -2
  7. package/dist/cjs/codegenv1/embed.js +51 -46
  8. package/dist/cjs/codegenv1/enum.d.ts +1 -1
  9. package/dist/cjs/codegenv1/enum.js +2 -4
  10. package/dist/cjs/codegenv1/extension.d.ts +1 -1
  11. package/dist/cjs/codegenv1/file.d.ts +1 -1
  12. package/dist/cjs/codegenv1/file.js +5 -7
  13. package/dist/cjs/codegenv1/index.d.ts +1 -0
  14. package/dist/cjs/codegenv1/index.js +1 -0
  15. package/dist/cjs/codegenv1/message.d.ts +1 -1
  16. package/dist/cjs/codegenv1/restore-json-names.d.ts +3 -0
  17. package/dist/cjs/codegenv1/restore-json-names.js +3 -0
  18. package/dist/cjs/codegenv1/scalar.d.ts +5 -0
  19. package/dist/cjs/codegenv1/scalar.js +39 -0
  20. package/dist/cjs/codegenv1/service.d.ts +3 -3
  21. package/dist/cjs/codegenv1/symbols.d.ts +9 -0
  22. package/dist/cjs/codegenv1/symbols.js +9 -0
  23. package/dist/cjs/codegenv1/types.d.ts +59 -8
  24. package/dist/cjs/create.d.ts +1 -1
  25. package/dist/cjs/create.js +13 -23
  26. package/dist/cjs/{desc-types.d.ts → descriptors.d.ts} +66 -17
  27. package/dist/cjs/descriptors.js +53 -0
  28. package/dist/cjs/equals.d.ts +1 -1
  29. package/dist/cjs/extensions.d.ts +21 -1
  30. package/dist/cjs/extensions.js +42 -10
  31. package/dist/cjs/fields.d.ts +17 -16
  32. package/dist/cjs/fields.js +17 -10
  33. package/dist/cjs/from-binary.d.ts +2 -2
  34. package/dist/cjs/from-binary.js +31 -41
  35. package/dist/cjs/from-json.d.ts +4 -4
  36. package/dist/cjs/from-json.js +200 -185
  37. package/dist/cjs/index.d.ts +3 -2
  38. package/dist/cjs/index.js +5 -2
  39. package/dist/cjs/is-message.d.ts +1 -1
  40. package/dist/cjs/proto-int64.d.ts +4 -1
  41. package/dist/cjs/proto-int64.js +16 -6
  42. package/dist/cjs/reflect/error.d.ts +1 -1
  43. package/dist/cjs/reflect/guard.d.ts +1 -1
  44. package/dist/cjs/reflect/index.d.ts +0 -1
  45. package/dist/cjs/reflect/index.js +0 -1
  46. package/dist/cjs/reflect/names.d.ts +1 -13
  47. package/dist/cjs/reflect/names.js +2 -40
  48. package/dist/cjs/reflect/nested-types.d.ts +11 -1
  49. package/dist/cjs/reflect/nested-types.js +34 -1
  50. package/dist/cjs/reflect/reflect-check.d.ts +10 -1
  51. package/dist/cjs/reflect/reflect-check.js +126 -9
  52. package/dist/cjs/reflect/reflect-types.d.ts +162 -14
  53. package/dist/cjs/reflect/reflect.d.ts +12 -3
  54. package/dist/cjs/reflect/reflect.js +316 -290
  55. package/dist/cjs/reflect/scalar.d.ts +3 -55
  56. package/dist/cjs/reflect/scalar.js +26 -220
  57. package/dist/cjs/reflect/unsafe.d.ts +1 -1
  58. package/dist/cjs/reflect/unsafe.js +38 -43
  59. package/dist/cjs/{reflect/registry.d.ts → registry.d.ts} +2 -2
  60. package/dist/cjs/{reflect/registry.js → registry.js} +100 -73
  61. package/dist/cjs/to-binary.d.ts +1 -1
  62. package/dist/cjs/to-binary.js +28 -30
  63. package/dist/cjs/to-json.d.ts +7 -6
  64. package/dist/cjs/to-json.js +63 -70
  65. package/dist/cjs/types.d.ts +1 -1
  66. package/dist/cjs/wire/base64-encoding.js +4 -4
  67. package/dist/cjs/wire/binary-encoding.d.ts +25 -3
  68. package/dist/cjs/wire/binary-encoding.js +70 -18
  69. package/dist/cjs/wire/size-delimited.d.ts +1 -1
  70. package/dist/cjs/wire/text-format.d.ts +1 -2
  71. package/dist/cjs/wire/text-format.js +21 -19
  72. package/dist/cjs/wkt/any.d.ts +3 -3
  73. package/dist/cjs/wkt/gen/google/protobuf/any_pb.d.ts +7 -0
  74. package/dist/cjs/wkt/gen/google/protobuf/any_pb.js +7 -2
  75. package/dist/cjs/wkt/gen/google/protobuf/api_pb.d.ts +15 -0
  76. package/dist/cjs/wkt/gen/google/protobuf/api_pb.js +15 -6
  77. package/dist/cjs/wkt/gen/google/protobuf/compiler/plugin_pb.d.ts +22 -0
  78. package/dist/cjs/wkt/gen/google/protobuf/compiler/plugin_pb.js +22 -9
  79. package/dist/cjs/wkt/gen/google/protobuf/descriptor_pb.d.ts +192 -0
  80. package/dist/cjs/wkt/gen/google/protobuf/descriptor_pb.js +187 -84
  81. package/dist/cjs/wkt/gen/google/protobuf/duration_pb.d.ts +7 -0
  82. package/dist/cjs/wkt/gen/google/protobuf/duration_pb.js +7 -2
  83. package/dist/cjs/wkt/gen/google/protobuf/empty_pb.d.ts +7 -0
  84. package/dist/cjs/wkt/gen/google/protobuf/empty_pb.js +7 -2
  85. package/dist/cjs/wkt/gen/google/protobuf/field_mask_pb.d.ts +7 -0
  86. package/dist/cjs/wkt/gen/google/protobuf/field_mask_pb.js +7 -2
  87. package/dist/cjs/wkt/gen/google/protobuf/source_context_pb.d.ts +7 -0
  88. package/dist/cjs/wkt/gen/google/protobuf/source_context_pb.js +7 -2
  89. package/dist/cjs/wkt/gen/google/protobuf/struct_pb.d.ts +18 -0
  90. package/dist/cjs/wkt/gen/google/protobuf/struct_pb.js +18 -7
  91. package/dist/cjs/wkt/gen/google/protobuf/timestamp_pb.d.ts +7 -0
  92. package/dist/cjs/wkt/gen/google/protobuf/timestamp_pb.js +7 -2
  93. package/dist/cjs/wkt/gen/google/protobuf/type_pb.d.ts +32 -0
  94. package/dist/cjs/wkt/gen/google/protobuf/type_pb.js +32 -13
  95. package/dist/cjs/wkt/gen/google/protobuf/wrappers_pb.d.ts +39 -0
  96. package/dist/cjs/wkt/gen/google/protobuf/wrappers_pb.js +39 -18
  97. package/dist/cjs/wkt/wrappers.d.ts +1 -1
  98. package/dist/esm/clone.d.ts +1 -1
  99. package/dist/esm/clone.js +1 -1
  100. package/dist/esm/codegenv1/boot.d.ts +1 -1
  101. package/dist/esm/codegenv1/boot.js +3 -5
  102. package/dist/esm/codegenv1/embed.d.ts +2 -2
  103. package/dist/esm/codegenv1/embed.js +34 -29
  104. package/dist/esm/codegenv1/enum.d.ts +1 -1
  105. package/dist/esm/codegenv1/enum.js +2 -4
  106. package/dist/esm/codegenv1/extension.d.ts +1 -1
  107. package/dist/esm/codegenv1/file.d.ts +1 -1
  108. package/dist/esm/codegenv1/file.js +4 -6
  109. package/dist/esm/codegenv1/index.d.ts +1 -0
  110. package/dist/esm/codegenv1/index.js +1 -0
  111. package/dist/esm/codegenv1/message.d.ts +1 -1
  112. package/dist/esm/codegenv1/restore-json-names.d.ts +3 -0
  113. package/dist/esm/codegenv1/restore-json-names.js +3 -0
  114. package/dist/esm/codegenv1/scalar.d.ts +5 -0
  115. package/dist/esm/codegenv1/scalar.js +35 -0
  116. package/dist/esm/codegenv1/service.d.ts +3 -3
  117. package/dist/esm/codegenv1/symbols.d.ts +9 -0
  118. package/dist/esm/codegenv1/symbols.js +9 -0
  119. package/dist/esm/codegenv1/types.d.ts +59 -8
  120. package/dist/esm/create.d.ts +1 -1
  121. package/dist/esm/create.js +11 -21
  122. package/dist/esm/{desc-types.d.ts → descriptors.d.ts} +66 -17
  123. package/dist/esm/descriptors.js +50 -0
  124. package/dist/esm/equals.d.ts +1 -1
  125. package/dist/esm/extensions.d.ts +21 -1
  126. package/dist/esm/extensions.js +39 -9
  127. package/dist/esm/fields.d.ts +17 -16
  128. package/dist/esm/fields.js +17 -10
  129. package/dist/esm/from-binary.d.ts +2 -2
  130. package/dist/esm/from-binary.js +13 -23
  131. package/dist/esm/from-json.d.ts +4 -4
  132. package/dist/esm/from-json.js +193 -178
  133. package/dist/esm/index.d.ts +3 -2
  134. package/dist/esm/index.js +3 -2
  135. package/dist/esm/is-message.d.ts +1 -1
  136. package/dist/esm/proto-int64.d.ts +4 -1
  137. package/dist/esm/proto-int64.js +16 -6
  138. package/dist/esm/reflect/error.d.ts +1 -1
  139. package/dist/esm/reflect/guard.d.ts +1 -1
  140. package/dist/esm/reflect/index.d.ts +0 -1
  141. package/dist/esm/reflect/index.js +0 -1
  142. package/dist/esm/reflect/names.d.ts +1 -13
  143. package/dist/esm/reflect/names.js +1 -38
  144. package/dist/esm/reflect/nested-types.d.ts +11 -1
  145. package/dist/esm/reflect/nested-types.js +32 -0
  146. package/dist/esm/reflect/reflect-check.d.ts +10 -1
  147. package/dist/esm/reflect/reflect-check.js +119 -2
  148. package/dist/esm/reflect/reflect-types.d.ts +162 -14
  149. package/dist/esm/reflect/reflect-types.js +1 -0
  150. package/dist/esm/reflect/reflect.d.ts +12 -3
  151. package/dist/esm/reflect/reflect.js +305 -279
  152. package/dist/esm/reflect/scalar.d.ts +3 -55
  153. package/dist/esm/reflect/scalar.js +14 -205
  154. package/dist/esm/reflect/unsafe.d.ts +1 -1
  155. package/dist/esm/reflect/unsafe.js +38 -43
  156. package/dist/esm/{reflect/registry.d.ts → registry.d.ts} +2 -2
  157. package/dist/esm/{reflect/registry.js → registry.js} +90 -63
  158. package/dist/esm/to-binary.d.ts +1 -1
  159. package/dist/esm/to-binary.js +2 -4
  160. package/dist/esm/to-json.d.ts +7 -6
  161. package/dist/esm/to-json.js +48 -55
  162. package/dist/esm/types.d.ts +1 -1
  163. package/dist/esm/wire/base64-encoding.js +4 -4
  164. package/dist/esm/wire/binary-encoding.d.ts +25 -3
  165. package/dist/esm/wire/binary-encoding.js +63 -11
  166. package/dist/esm/wire/size-delimited.d.ts +1 -1
  167. package/dist/esm/wire/text-format.d.ts +1 -2
  168. package/dist/esm/wire/text-format.js +5 -3
  169. package/dist/esm/wkt/any.d.ts +3 -3
  170. package/dist/esm/wkt/gen/google/protobuf/any_pb.d.ts +7 -0
  171. package/dist/esm/wkt/gen/google/protobuf/any_pb.js +7 -2
  172. package/dist/esm/wkt/gen/google/protobuf/api_pb.d.ts +15 -0
  173. package/dist/esm/wkt/gen/google/protobuf/api_pb.js +15 -6
  174. package/dist/esm/wkt/gen/google/protobuf/compiler/plugin_pb.d.ts +22 -0
  175. package/dist/esm/wkt/gen/google/protobuf/compiler/plugin_pb.js +22 -9
  176. package/dist/esm/wkt/gen/google/protobuf/descriptor_pb.d.ts +192 -0
  177. package/dist/esm/wkt/gen/google/protobuf/descriptor_pb.js +187 -84
  178. package/dist/esm/wkt/gen/google/protobuf/duration_pb.d.ts +7 -0
  179. package/dist/esm/wkt/gen/google/protobuf/duration_pb.js +7 -2
  180. package/dist/esm/wkt/gen/google/protobuf/empty_pb.d.ts +7 -0
  181. package/dist/esm/wkt/gen/google/protobuf/empty_pb.js +7 -2
  182. package/dist/esm/wkt/gen/google/protobuf/field_mask_pb.d.ts +7 -0
  183. package/dist/esm/wkt/gen/google/protobuf/field_mask_pb.js +7 -2
  184. package/dist/esm/wkt/gen/google/protobuf/source_context_pb.d.ts +7 -0
  185. package/dist/esm/wkt/gen/google/protobuf/source_context_pb.js +7 -2
  186. package/dist/esm/wkt/gen/google/protobuf/struct_pb.d.ts +18 -0
  187. package/dist/esm/wkt/gen/google/protobuf/struct_pb.js +18 -7
  188. package/dist/esm/wkt/gen/google/protobuf/timestamp_pb.d.ts +7 -0
  189. package/dist/esm/wkt/gen/google/protobuf/timestamp_pb.js +7 -2
  190. package/dist/esm/wkt/gen/google/protobuf/type_pb.d.ts +32 -0
  191. package/dist/esm/wkt/gen/google/protobuf/type_pb.js +32 -13
  192. package/dist/esm/wkt/gen/google/protobuf/wrappers_pb.d.ts +39 -0
  193. package/dist/esm/wkt/gen/google/protobuf/wrappers_pb.js +39 -18
  194. package/dist/esm/wkt/wrappers.d.ts +1 -1
  195. package/package.json +2 -2
  196. package/dist/cjs/desc-types.js +0 -15
  197. package/dist/cjs/reflect/assert.d.ts +0 -16
  198. package/dist/cjs/reflect/assert.js +0 -59
  199. package/dist/esm/desc-types.js +0 -14
  200. package/dist/esm/reflect/assert.d.ts +0 -16
  201. package/dist/esm/reflect/assert.js +0 -52
@@ -1,5 +1,5 @@
1
1
  import type { MessageShape } from "./types.js";
2
- import type { DescMessage } from "./desc-types.js";
2
+ import type { DescMessage } from "./descriptors.js";
3
3
  /**
4
4
  * Determine whether the given `arg` is a message.
5
5
  * If `desc` is set, determine whether `arg` is this specific message.
@@ -1,3 +1,7 @@
1
+ /**
2
+ * Int64Support for the current environment.
3
+ */
4
+ export declare const protoInt64: Int64Support;
1
5
  /**
2
6
  * We use the `bigint` primitive to represent 64-bit integral types. If bigint
3
7
  * is unavailable, we fall back to a string representation, which means that
@@ -91,5 +95,4 @@ interface Int64Support {
91
95
  */
92
96
  uDec(lo: number, hi: number): bigint;
93
97
  }
94
- export declare const protoInt64: Int64Support;
95
98
  export {};
@@ -14,8 +14,11 @@
14
14
  // limitations under the License.
15
15
  Object.defineProperty(exports, "__esModule", { value: true });
16
16
  exports.protoInt64 = void 0;
17
- const assert_js_1 = require("./reflect/assert.js");
18
17
  const varint_js_1 = require("./wire/varint.js");
18
+ /**
19
+ * Int64Support for the current environment.
20
+ */
21
+ exports.protoInt64 = makeInt64Support();
19
22
  function makeInt64Support() {
20
23
  const dv = new DataView(new ArrayBuffer(8));
21
24
  // note that Safari 14 implements BigInt, but not the DataView methods
@@ -35,14 +38,14 @@ function makeInt64Support() {
35
38
  parse(value) {
36
39
  const bi = typeof value == "bigint" ? value : BigInt(value);
37
40
  if (bi > MAX || bi < MIN) {
38
- throw new Error(`int64 invalid: ${value}`);
41
+ throw new Error(`invalid int64: ${value}`);
39
42
  }
40
43
  return bi;
41
44
  },
42
45
  uParse(value) {
43
46
  const bi = typeof value == "bigint" ? value : BigInt(value);
44
47
  if (bi > UMAX || bi < UMIN) {
45
- throw new Error(`uint64 invalid: ${value}`);
48
+ throw new Error(`invalid uint64: ${value}`);
46
49
  }
47
50
  return bi;
48
51
  },
@@ -72,8 +75,6 @@ function makeInt64Support() {
72
75
  },
73
76
  };
74
77
  }
75
- const assertInt64String = (value) => (0, assert_js_1.assert)(/^-?[0-9]+$/.test(value), `int64 invalid: ${value}`);
76
- const assertUInt64String = (value) => (0, assert_js_1.assert)(/^[0-9]+$/.test(value), `uint64 invalid: ${value}`);
77
78
  return {
78
79
  zero: "0",
79
80
  supported: false,
@@ -113,4 +114,13 @@ function makeInt64Support() {
113
114
  },
114
115
  };
115
116
  }
116
- exports.protoInt64 = makeInt64Support();
117
+ function assertInt64String(value) {
118
+ if (!/^-?[0-9]+$/.test(value)) {
119
+ throw new Error("invalid int64: " + value);
120
+ }
121
+ }
122
+ function assertUInt64String(value) {
123
+ if (!/^[0-9]+$/.test(value)) {
124
+ throw new Error("invalid uint64: " + value);
125
+ }
126
+ }
@@ -1,4 +1,4 @@
1
- import type { DescField, DescOneof } from "../desc-types.js";
1
+ import type { DescField, DescOneof } from "../descriptors.js";
2
2
  declare const errorNames: string[];
3
3
  export declare class FieldError extends Error {
4
4
  readonly name: (typeof errorNames)[number];
@@ -1,7 +1,7 @@
1
1
  import type { Message } from "../types.js";
2
2
  import type { ScalarValue } from "./scalar.js";
3
3
  import type { ReflectList, ReflectMap, ReflectMessage } from "./reflect-types.js";
4
- import type { DescField, DescMessage } from "../desc-types.js";
4
+ import type { DescField, DescMessage } from "../descriptors.js";
5
5
  export declare function isObject(arg: unknown): arg is Record<string, unknown>;
6
6
  export declare function isOneofADT(arg: unknown): arg is OneofADT;
7
7
  export type OneofADT = {
@@ -3,6 +3,5 @@ export * from "./names.js";
3
3
  export * from "./nested-types.js";
4
4
  export * from "./reflect.js";
5
5
  export * from "./reflect-types.js";
6
- export * from "./registry.js";
7
6
  export * from "./scalar.js";
8
7
  export { isReflectList, isReflectMap, isReflectMessage } from "./guard.js";
@@ -33,7 +33,6 @@ __exportStar(require("./names.js"), exports);
33
33
  __exportStar(require("./nested-types.js"), exports);
34
34
  __exportStar(require("./reflect.js"), exports);
35
35
  __exportStar(require("./reflect-types.js"), exports);
36
- __exportStar(require("./registry.js"), exports);
37
36
  __exportStar(require("./scalar.js"), exports);
38
37
  var guard_js_1 = require("./guard.js");
39
38
  Object.defineProperty(exports, "isReflectList", { enumerable: true, get: function () { return guard_js_1.isReflectList; } });
@@ -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.
@@ -18,6 +6,6 @@ export declare function protoCamelCase(snakeCase: string): string;
18
6
  /**
19
7
  * Escapes names that are reserved for ECMAScript built-in object properties.
20
8
  *
21
- * Also see safeIdentifier() from @bufbuild/protoplugin/ecmascript.
9
+ * Also see safeIdentifier() from @bufbuild/protoplugin.
22
10
  */
23
11
  export declare function safeObjectProperty(name: string): string;
@@ -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.
@@ -104,7 +66,7 @@ const reservedObjectProperties = new Set([
104
66
  /**
105
67
  * Escapes names that are reserved for ECMAScript built-in object properties.
106
68
  *
107
- * Also see safeIdentifier() from @bufbuild/protoplugin/ecmascript.
69
+ * Also see safeIdentifier() from @bufbuild/protoplugin.
108
70
  */
109
71
  function safeObjectProperty(name) {
110
72
  return reservedObjectProperties.has(name) ? name + "$" : 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 "../descriptors.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
+ }
@@ -1,9 +1,18 @@
1
- import type { DescField } from "../desc-types.js";
1
+ import { type DescField } from "../descriptors.js";
2
2
  import { FieldError } from "./error.js";
3
+ /**
4
+ * Check whether the given field value is valid for the reflect API.
5
+ */
3
6
  export declare function checkField(field: DescField, value: unknown): FieldError | undefined;
7
+ /**
8
+ * Check whether the given list item is valid for the reflect API.
9
+ */
4
10
  export declare function checkListItem(field: DescField & {
5
11
  fieldKind: "list";
6
12
  }, index: number, value: unknown): FieldError | undefined;
13
+ /**
14
+ * Check whether the given map key and value are valid for the reflect API.
15
+ */
7
16
  export declare function checkMapEntry(field: DescField & {
8
17
  fieldKind: "map";
9
18
  }, key: unknown, value: unknown): FieldError | undefined;
@@ -14,11 +14,16 @@
14
14
  // limitations under the License.
15
15
  Object.defineProperty(exports, "__esModule", { value: true });
16
16
  exports.formatVal = exports.checkMapEntry = exports.checkListItem = exports.checkField = void 0;
17
- const scalar_js_1 = require("./scalar.js");
18
- const scalar_js_2 = require("./scalar.js");
17
+ const descriptors_js_1 = require("../descriptors.js");
19
18
  const is_message_js_1 = require("../is-message.js");
20
19
  const error_js_1 = require("./error.js");
21
20
  const guard_js_1 = require("./guard.js");
21
+ const binary_encoding_js_1 = require("../wire/binary-encoding.js");
22
+ const text_encoding_js_1 = require("../wire/text-encoding.js");
23
+ const proto_int64_js_1 = require("../proto-int64.js");
24
+ /**
25
+ * Check whether the given field value is valid for the reflect API.
26
+ */
22
27
  function checkField(field, value) {
23
28
  const check = field.fieldKind == "list"
24
29
  ? (0, guard_js_1.isReflectList)(value, field)
@@ -43,6 +48,9 @@ function checkField(field, value) {
43
48
  return new error_js_1.FieldError(field, reason);
44
49
  }
45
50
  exports.checkField = checkField;
51
+ /**
52
+ * Check whether the given list item is valid for the reflect API.
53
+ */
46
54
  function checkListItem(field, index, value) {
47
55
  const check = checkSingular(field, value);
48
56
  if (check !== true) {
@@ -51,8 +59,11 @@ function checkListItem(field, index, value) {
51
59
  return undefined;
52
60
  }
53
61
  exports.checkListItem = checkListItem;
62
+ /**
63
+ * Check whether the given map key and value are valid for the reflect API.
64
+ */
54
65
  function checkMapEntry(field, key, value) {
55
- const checkKey = (0, scalar_js_2.checkScalarValue)(key, field.mapKey);
66
+ const checkKey = checkScalarValue(key, field.mapKey);
56
67
  if (checkKey !== true) {
57
68
  return new error_js_1.FieldError(field, `invalid map key: ${reasonSingular({ scalar: field.mapKey }, key, checkKey)}`);
58
69
  }
@@ -65,7 +76,7 @@ function checkMapEntry(field, key, value) {
65
76
  exports.checkMapEntry = checkMapEntry;
66
77
  function checkSingular(field, value) {
67
78
  if (field.scalar !== undefined) {
68
- return (0, scalar_js_2.checkScalarValue)(value, field.scalar);
79
+ return checkScalarValue(value, field.scalar);
69
80
  }
70
81
  if (field.enum !== undefined) {
71
82
  if (field.enum.open) {
@@ -75,11 +86,89 @@ function checkSingular(field, value) {
75
86
  }
76
87
  return (0, guard_js_1.isReflectMessage)(value, field.message);
77
88
  }
89
+ function checkScalarValue(value, scalar) {
90
+ switch (scalar) {
91
+ case descriptors_js_1.ScalarType.DOUBLE:
92
+ return typeof value == "number";
93
+ case descriptors_js_1.ScalarType.FLOAT:
94
+ if (typeof value != "number") {
95
+ return false;
96
+ }
97
+ if (Number.isNaN(value) || !Number.isFinite(value)) {
98
+ return true;
99
+ }
100
+ if (value > binary_encoding_js_1.FLOAT32_MAX || value < binary_encoding_js_1.FLOAT32_MIN) {
101
+ return `${value.toFixed()} out of range`;
102
+ }
103
+ return true;
104
+ case descriptors_js_1.ScalarType.INT32:
105
+ case descriptors_js_1.ScalarType.SFIXED32:
106
+ case descriptors_js_1.ScalarType.SINT32:
107
+ // signed
108
+ if (typeof value !== "number" || !Number.isInteger(value)) {
109
+ return false;
110
+ }
111
+ if (value > binary_encoding_js_1.INT32_MAX || value < binary_encoding_js_1.INT32_MIN) {
112
+ return `${value.toFixed()} out of range`;
113
+ }
114
+ return true;
115
+ case descriptors_js_1.ScalarType.FIXED32:
116
+ case descriptors_js_1.ScalarType.UINT32:
117
+ // unsigned
118
+ if (typeof value !== "number" || !Number.isInteger(value)) {
119
+ return false;
120
+ }
121
+ if (value > binary_encoding_js_1.UINT32_MAX || value < 0) {
122
+ return `${value.toFixed()} out of range`;
123
+ }
124
+ return true;
125
+ case descriptors_js_1.ScalarType.BOOL:
126
+ return typeof value == "boolean";
127
+ case descriptors_js_1.ScalarType.STRING:
128
+ if (typeof value != "string") {
129
+ return false;
130
+ }
131
+ return (0, text_encoding_js_1.getTextEncoding)().checkUtf8(value) || "invalid UTF8";
132
+ case descriptors_js_1.ScalarType.BYTES:
133
+ return value instanceof Uint8Array;
134
+ case descriptors_js_1.ScalarType.INT64:
135
+ case descriptors_js_1.ScalarType.SFIXED64:
136
+ case descriptors_js_1.ScalarType.SINT64:
137
+ // signed
138
+ if (typeof value != "string" &&
139
+ typeof value !== "bigint" &&
140
+ typeof value !== "number") {
141
+ return false;
142
+ }
143
+ try {
144
+ proto_int64_js_1.protoInt64.parse(value);
145
+ }
146
+ catch (e) {
147
+ return `${value} out of range`;
148
+ }
149
+ return true;
150
+ case descriptors_js_1.ScalarType.FIXED64:
151
+ case descriptors_js_1.ScalarType.UINT64:
152
+ // unsigned
153
+ if (typeof value != "string" &&
154
+ typeof value !== "bigint" &&
155
+ typeof value !== "number") {
156
+ return false;
157
+ }
158
+ try {
159
+ proto_int64_js_1.protoInt64.uParse(value);
160
+ }
161
+ catch (e) {
162
+ return `${value} out of range`;
163
+ }
164
+ return true;
165
+ }
166
+ }
78
167
  function reasonSingular(field, val, details) {
79
168
  details =
80
169
  typeof details == "string" ? `: ${details}` : `, got ${formatVal(val)}`;
81
170
  if (field.scalar !== undefined) {
82
- return `expected ${(0, scalar_js_1.scalarTypeDescription)(field.scalar)}` + details;
171
+ return `expected ${scalarTypeDescription(field.scalar)}` + details;
83
172
  }
84
173
  else if (field.enum !== undefined) {
85
174
  return `expected ${field.enum.toString()}` + details;
@@ -135,16 +224,44 @@ function formatReflectList(field) {
135
224
  case "enum":
136
225
  return `ReflectList (${field.enum.toString()})`;
137
226
  case "scalar":
138
- return `ReflectList (${scalar_js_1.ScalarType[field.scalar]})`;
227
+ return `ReflectList (${descriptors_js_1.ScalarType[field.scalar]})`;
139
228
  }
140
229
  }
141
230
  function formatReflectMap(field) {
142
231
  switch (field.mapKind) {
143
232
  case "message":
144
- return `ReflectMap (${scalar_js_1.ScalarType[field.mapKey]}, ${field.message.toString()})`;
233
+ return `ReflectMap (${descriptors_js_1.ScalarType[field.mapKey]}, ${field.message.toString()})`;
145
234
  case "enum":
146
- return `ReflectMap (${scalar_js_1.ScalarType[field.mapKey]}, ${field.enum.toString()})`;
235
+ return `ReflectMap (${descriptors_js_1.ScalarType[field.mapKey]}, ${field.enum.toString()})`;
147
236
  case "scalar":
148
- return `ReflectMap (${scalar_js_1.ScalarType[field.mapKey]}, ${scalar_js_1.ScalarType[field.scalar]})`;
237
+ return `ReflectMap (${descriptors_js_1.ScalarType[field.mapKey]}, ${descriptors_js_1.ScalarType[field.scalar]})`;
238
+ }
239
+ }
240
+ function scalarTypeDescription(scalar) {
241
+ switch (scalar) {
242
+ case descriptors_js_1.ScalarType.STRING:
243
+ return "string";
244
+ case descriptors_js_1.ScalarType.BOOL:
245
+ return "boolean";
246
+ case descriptors_js_1.ScalarType.INT64:
247
+ case descriptors_js_1.ScalarType.SINT64:
248
+ case descriptors_js_1.ScalarType.SFIXED64:
249
+ return "bigint (int64)";
250
+ case descriptors_js_1.ScalarType.UINT64:
251
+ case descriptors_js_1.ScalarType.FIXED64:
252
+ return "bigint (uint64)";
253
+ case descriptors_js_1.ScalarType.BYTES:
254
+ return "Uint8Array";
255
+ case descriptors_js_1.ScalarType.DOUBLE:
256
+ return "number (float64)";
257
+ case descriptors_js_1.ScalarType.FLOAT:
258
+ return "number (float32)";
259
+ case descriptors_js_1.ScalarType.FIXED32:
260
+ case descriptors_js_1.ScalarType.UINT32:
261
+ return "number (uint32)";
262
+ case descriptors_js_1.ScalarType.INT32:
263
+ case descriptors_js_1.ScalarType.SFIXED32:
264
+ case descriptors_js_1.ScalarType.SINT32:
265
+ return "number (int32)";
149
266
  }
150
267
  }