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

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 (145) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/clone.d.ts +1 -1
  3. package/dist/cjs/clone.js +9 -6
  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 +1 -1
  7. package/dist/cjs/codegenv1/embed.js +39 -34
  8. package/dist/cjs/codegenv1/enum.d.ts +1 -1
  9. package/dist/cjs/codegenv1/extension.d.ts +1 -1
  10. package/dist/cjs/codegenv1/file.d.ts +1 -1
  11. package/dist/cjs/codegenv1/file.js +5 -7
  12. package/dist/cjs/codegenv1/index.d.ts +1 -0
  13. package/dist/cjs/codegenv1/index.js +1 -0
  14. package/dist/cjs/codegenv1/message.d.ts +1 -1
  15. package/dist/cjs/codegenv1/scalar.d.ts +5 -0
  16. package/dist/cjs/codegenv1/scalar.js +39 -0
  17. package/dist/cjs/codegenv1/service.d.ts +3 -3
  18. package/dist/cjs/codegenv1/types.d.ts +7 -9
  19. package/dist/cjs/create.d.ts +1 -1
  20. package/dist/cjs/create.js +6 -5
  21. package/dist/cjs/{desc-types.d.ts → descriptors.d.ts} +39 -7
  22. package/dist/cjs/descriptors.js +53 -0
  23. package/dist/cjs/equals.d.ts +1 -1
  24. package/dist/cjs/extensions.d.ts +1 -1
  25. package/dist/cjs/extensions.js +4 -3
  26. package/dist/cjs/fields.d.ts +1 -1
  27. package/dist/cjs/from-binary.d.ts +1 -1
  28. package/dist/cjs/from-binary.js +32 -29
  29. package/dist/cjs/from-json.d.ts +2 -2
  30. package/dist/cjs/from-json.js +201 -188
  31. package/dist/cjs/index.d.ts +2 -1
  32. package/dist/cjs/index.js +2 -1
  33. package/dist/cjs/is-message.d.ts +1 -1
  34. package/dist/cjs/proto-int64.d.ts +4 -1
  35. package/dist/cjs/proto-int64.js +16 -6
  36. package/dist/cjs/reflect/error.d.ts +1 -1
  37. package/dist/cjs/reflect/guard.d.ts +1 -1
  38. package/dist/cjs/reflect/guard.js +4 -4
  39. package/dist/cjs/reflect/index.d.ts +0 -1
  40. package/dist/cjs/reflect/index.js +0 -1
  41. package/dist/cjs/reflect/names.d.ts +1 -1
  42. package/dist/cjs/reflect/names.js +1 -1
  43. package/dist/cjs/reflect/nested-types.d.ts +1 -1
  44. package/dist/cjs/reflect/reflect-check.d.ts +10 -1
  45. package/dist/cjs/reflect/reflect-check.js +126 -9
  46. package/dist/cjs/reflect/reflect-types.d.ts +3 -41
  47. package/dist/cjs/reflect/reflect.d.ts +1 -1
  48. package/dist/cjs/reflect/reflect.js +42 -60
  49. package/dist/cjs/reflect/scalar.d.ts +3 -55
  50. package/dist/cjs/reflect/scalar.js +26 -220
  51. package/dist/cjs/reflect/unsafe.d.ts +1 -17
  52. package/dist/cjs/reflect/unsafe.js +2 -20
  53. package/dist/cjs/{reflect/registry.d.ts → registry.d.ts} +2 -2
  54. package/dist/cjs/{reflect/registry.js → registry.js} +54 -36
  55. package/dist/cjs/to-binary.d.ts +1 -1
  56. package/dist/cjs/to-binary.js +27 -27
  57. package/dist/cjs/to-json.d.ts +7 -6
  58. package/dist/cjs/to-json.js +57 -44
  59. package/dist/cjs/types.d.ts +1 -1
  60. package/dist/cjs/wire/base64-encoding.js +2 -2
  61. package/dist/cjs/wire/binary-encoding.d.ts +20 -0
  62. package/dist/cjs/wire/binary-encoding.js +75 -8
  63. package/dist/cjs/wire/size-delimited.d.ts +1 -1
  64. package/dist/cjs/wire/text-format.d.ts +1 -2
  65. package/dist/cjs/wire/text-format.js +21 -19
  66. package/dist/cjs/wkt/any.d.ts +2 -2
  67. package/dist/cjs/wkt/gen/google/protobuf/descriptor_pb.d.ts +6 -0
  68. package/dist/cjs/wkt/gen/google/protobuf/descriptor_pb.js +1 -1
  69. package/dist/cjs/wkt/wrappers.d.ts +1 -1
  70. package/dist/esm/clone.d.ts +1 -1
  71. package/dist/esm/clone.js +8 -5
  72. package/dist/esm/codegenv1/boot.d.ts +1 -1
  73. package/dist/esm/codegenv1/boot.js +3 -5
  74. package/dist/esm/codegenv1/embed.d.ts +1 -1
  75. package/dist/esm/codegenv1/embed.js +9 -4
  76. package/dist/esm/codegenv1/enum.d.ts +1 -1
  77. package/dist/esm/codegenv1/extension.d.ts +1 -1
  78. package/dist/esm/codegenv1/file.d.ts +1 -1
  79. package/dist/esm/codegenv1/file.js +4 -6
  80. package/dist/esm/codegenv1/index.d.ts +1 -0
  81. package/dist/esm/codegenv1/index.js +1 -0
  82. package/dist/esm/codegenv1/message.d.ts +1 -1
  83. package/dist/esm/codegenv1/scalar.d.ts +5 -0
  84. package/dist/esm/codegenv1/scalar.js +35 -0
  85. package/dist/esm/codegenv1/service.d.ts +3 -3
  86. package/dist/esm/codegenv1/types.d.ts +7 -9
  87. package/dist/esm/create.d.ts +1 -1
  88. package/dist/esm/create.js +4 -3
  89. package/dist/esm/{desc-types.d.ts → descriptors.d.ts} +39 -7
  90. package/dist/esm/descriptors.js +50 -0
  91. package/dist/esm/equals.d.ts +1 -1
  92. package/dist/esm/extensions.d.ts +1 -1
  93. package/dist/esm/extensions.js +4 -3
  94. package/dist/esm/fields.d.ts +1 -1
  95. package/dist/esm/from-binary.d.ts +1 -1
  96. package/dist/esm/from-binary.js +14 -11
  97. package/dist/esm/from-json.d.ts +2 -2
  98. package/dist/esm/from-json.js +194 -181
  99. package/dist/esm/index.d.ts +2 -1
  100. package/dist/esm/index.js +2 -1
  101. package/dist/esm/is-message.d.ts +1 -1
  102. package/dist/esm/proto-int64.d.ts +4 -1
  103. package/dist/esm/proto-int64.js +16 -6
  104. package/dist/esm/reflect/error.d.ts +1 -1
  105. package/dist/esm/reflect/guard.d.ts +1 -1
  106. package/dist/esm/reflect/guard.js +4 -4
  107. package/dist/esm/reflect/index.d.ts +0 -1
  108. package/dist/esm/reflect/index.js +0 -1
  109. package/dist/esm/reflect/names.d.ts +1 -1
  110. package/dist/esm/reflect/names.js +1 -1
  111. package/dist/esm/reflect/nested-types.d.ts +1 -1
  112. package/dist/esm/reflect/reflect-check.d.ts +10 -1
  113. package/dist/esm/reflect/reflect-check.js +119 -2
  114. package/dist/esm/reflect/reflect-types.d.ts +3 -41
  115. package/dist/esm/reflect/reflect-types.js +1 -0
  116. package/dist/esm/reflect/reflect.d.ts +1 -1
  117. package/dist/esm/reflect/reflect.js +25 -43
  118. package/dist/esm/reflect/scalar.d.ts +3 -55
  119. package/dist/esm/reflect/scalar.js +14 -205
  120. package/dist/esm/reflect/unsafe.d.ts +1 -17
  121. package/dist/esm/reflect/unsafe.js +1 -17
  122. package/dist/esm/{reflect/registry.d.ts → registry.d.ts} +2 -2
  123. package/dist/esm/{reflect/registry.js → registry.js} +44 -26
  124. package/dist/esm/to-binary.d.ts +1 -1
  125. package/dist/esm/to-binary.js +1 -1
  126. package/dist/esm/to-json.d.ts +7 -6
  127. package/dist/esm/to-json.js +42 -29
  128. package/dist/esm/types.d.ts +1 -1
  129. package/dist/esm/wire/base64-encoding.js +2 -2
  130. package/dist/esm/wire/binary-encoding.d.ts +20 -0
  131. package/dist/esm/wire/binary-encoding.js +68 -1
  132. package/dist/esm/wire/size-delimited.d.ts +1 -1
  133. package/dist/esm/wire/text-format.d.ts +1 -2
  134. package/dist/esm/wire/text-format.js +5 -3
  135. package/dist/esm/wkt/any.d.ts +2 -2
  136. package/dist/esm/wkt/gen/google/protobuf/descriptor_pb.d.ts +6 -0
  137. package/dist/esm/wkt/gen/google/protobuf/descriptor_pb.js +1 -1
  138. package/dist/esm/wkt/wrappers.d.ts +1 -1
  139. package/package.json +1 -1
  140. package/dist/cjs/desc-types.js +0 -15
  141. package/dist/cjs/reflect/assert.d.ts +0 -16
  142. package/dist/cjs/reflect/assert.js +0 -59
  143. package/dist/esm/desc-types.js +0 -14
  144. package/dist/esm/reflect/assert.d.ts +0 -16
  145. package/dist/esm/reflect/assert.js +0 -52
@@ -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 = {
@@ -15,7 +15,6 @@
15
15
  Object.defineProperty(exports, "__esModule", { value: true });
16
16
  exports.isReflectMessage = exports.isReflectMap = exports.isReflectList = exports.isOneofADT = exports.isObject = void 0;
17
17
  const unsafe_js_1 = require("./unsafe.js");
18
- const is_message_js_1 = require("../is-message.js");
19
18
  function isObject(arg) {
20
19
  return arg !== null && typeof arg == "object" && !Array.isArray(arg);
21
20
  }
@@ -71,8 +70,9 @@ exports.isReflectMap = isReflectMap;
71
70
  function isReflectMessage(arg, messageDesc) {
72
71
  return (isObject(arg) &&
73
72
  unsafe_js_1.unsafeLocal in arg &&
74
- "message" in arg &&
75
- (0, is_message_js_1.isMessage)(arg.message) &&
76
- (messageDesc === undefined || arg.message.$typeName == messageDesc.typeName));
73
+ "desc" in arg &&
74
+ isObject(arg.desc) &&
75
+ arg.desc.kind === "message" &&
76
+ (messageDesc === undefined || arg.desc.typeName == messageDesc.typeName));
77
77
  }
78
78
  exports.isReflectMessage = isReflectMessage;
@@ -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; } });
@@ -6,6 +6,6 @@ export declare function protoCamelCase(snakeCase: string): string;
6
6
  /**
7
7
  * Escapes names that are reserved for ECMAScript built-in object properties.
8
8
  *
9
- * Also see safeIdentifier() from @bufbuild/protoplugin/ecmascript.
9
+ * Also see safeIdentifier() from @bufbuild/protoplugin.
10
10
  */
11
11
  export declare function safeObjectProperty(name: string): string;
@@ -66,7 +66,7 @@ const reservedObjectProperties = new Set([
66
66
  /**
67
67
  * Escapes names that are reserved for ECMAScript built-in object properties.
68
68
  *
69
- * Also see safeIdentifier() from @bufbuild/protoplugin/ecmascript.
69
+ * Also see safeIdentifier() from @bufbuild/protoplugin.
70
70
  */
71
71
  function safeObjectProperty(name) {
72
72
  return reservedObjectProperties.has(name) ? name + "$" : name;
@@ -1,4 +1,4 @@
1
- import type { AnyDesc, DescEnum, DescExtension, DescFile, DescMessage, DescService } from "../desc-types.js";
1
+ import type { AnyDesc, DescEnum, DescExtension, DescFile, DescMessage, DescService } from "../descriptors.js";
2
2
  /**
3
3
  * Iterate over all types - enumerations, extensions, services, messages -
4
4
  * and enumerations, extensions and messages nested in messages.
@@ -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
  }
@@ -1,8 +1,8 @@
1
- import type { DescField, DescMessage, DescOneof } from "../desc-types.js";
1
+ import { type DescField, type DescMessage, type DescOneof } from "../descriptors.js";
2
2
  import { FieldError } from "./error.js";
3
3
  import { unsafeLocal } from "./unsafe.js";
4
4
  import type { Message, UnknownField } from "../types.js";
5
- import type { LongType, ScalarValue } from "./scalar.js";
5
+ import type { ScalarValue } from "./scalar.js";
6
6
  /**
7
7
  * ReflectMessage provides dynamic access and manipulation of a message.
8
8
  */
@@ -109,18 +109,6 @@ export interface ReflectMessage {
109
109
  * a valid value. To reset a field, use clear().
110
110
  */
111
111
  set<Field extends DescField>(field: Field, value: ReflectSetValue<Field>): FieldError | undefined;
112
- /**
113
- * Add an item to a list field.
114
- */
115
- addListItem<Field extends DescField & {
116
- fieldKind: "list";
117
- }>(field: Field, value: ReflectAddListItemValue<Field>): FieldError | undefined;
118
- /**
119
- * Set a map entry.
120
- */
121
- setMapEntry<Field extends DescField & {
122
- fieldKind: "map";
123
- }>(field: Field, key: MapEntryKey, value: ReflectSetMapEntryValue<Field>): FieldError | undefined;
124
112
  /**
125
113
  * Returns the unknown fields of the message.
126
114
  */
@@ -230,7 +218,7 @@ export type ReflectGetValue<Field extends DescField = DescField> = (Field extend
230
218
  } ? ReflectMap<MapEntryKey, enumVal> : Field extends {
231
219
  mapKind: "scalar";
232
220
  scalar: infer T;
233
- } ? ReflectMap<MapEntryKey, ScalarValue<T, LongType.BIGINT>> : never) : Field extends {
221
+ } ? ReflectMap<MapEntryKey, ScalarValue<T>> : never) : Field extends {
234
222
  fieldKind: "list";
235
223
  } ? ReflectList : Field extends {
236
224
  fieldKind: "enum";
@@ -255,30 +243,4 @@ export type ReflectSetValue<Field extends DescField = DescField> = (Field extend
255
243
  fieldKind: "scalar";
256
244
  scalar: infer T;
257
245
  } ? ScalarValue<T> : never);
258
- /**
259
- * The type of the "value" argument of ReflectMessage.addListItem()
260
- */
261
- export type ReflectAddListItemValue<Field extends DescField & {
262
- fieldKind: "list";
263
- }> = (Field extends {
264
- listKind: "scalar";
265
- scalar: infer T;
266
- } ? ScalarValue<T> : Field extends {
267
- listKind: "enum";
268
- } ? enumVal : Field extends {
269
- listKind: "message";
270
- } ? ReflectMessage : never);
271
- /**
272
- * The type of the "value" argument of ReflectMessage.setMapEntry()
273
- */
274
- export type ReflectSetMapEntryValue<Field extends DescField & {
275
- fieldKind: "map";
276
- }> = (Field extends {
277
- mapKind: "enum";
278
- } ? enumVal : Field extends {
279
- mapKind: "message";
280
- } ? ReflectMessage : Field extends {
281
- mapKind: "scalar";
282
- scalar: infer T;
283
- } ? ScalarValue<T, LongType.BIGINT> : never);
284
246
  export {};
@@ -1,4 +1,4 @@
1
- import type { DescField, DescMessage } from "../desc-types.js";
1
+ import { type DescField, type DescMessage } from "../descriptors.js";
2
2
  import type { MessageShape } from "../types.js";
3
3
  import type { MapEntryKey, ReflectList, ReflectMap, ReflectMessage } from "./reflect-types.js";
4
4
  /**
@@ -14,6 +14,7 @@
14
14
  // limitations under the License.
15
15
  Object.defineProperty(exports, "__esModule", { value: true });
16
16
  exports.reflectMap = exports.reflectList = exports.reflect = void 0;
17
+ const descriptors_js_1 = require("../descriptors.js");
17
18
  const reflect_check_js_1 = require("./reflect-check.js");
18
19
  const error_js_1 = require("./error.js");
19
20
  const unsafe_js_1 = require("./unsafe.js");
@@ -41,6 +42,8 @@ class ReflectMessageImpl {
41
42
  constructor(messageDesc, message,
42
43
  // TODO either remove this option, or support it in reflect-list and reflect-map as well
43
44
  check = true) {
45
+ this.lists = new Map();
46
+ this.maps = new Map();
44
47
  this.check = check;
45
48
  this.desc = messageDesc;
46
49
  this.message = this[unsafe_js_1.unsafeLocal] = message !== null && message !== void 0 ? message : (0, create_js_1.create)(messageDesc);
@@ -71,11 +74,19 @@ class ReflectMessageImpl {
71
74
  let value = (0, unsafe_js_1.unsafeGet)(this.message, field);
72
75
  switch (field.fieldKind) {
73
76
  case "list":
74
- return new ReflectListImpl(field, value, this.check);
77
+ // eslint-disable-next-line no-case-declarations
78
+ let list = this.lists.get(field);
79
+ if (!list || list[unsafe_js_1.unsafeLocal] !== value) {
80
+ this.lists.set(field, (list = new ReflectListImpl(field, value, this.check)));
81
+ }
82
+ return list;
75
83
  case "map":
76
- // TODO fix types
77
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
78
- return reflectMap(field, value, this.check); // eslint-disable-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-return
84
+ // eslint-disable-next-line no-case-declarations
85
+ let map = this.maps.get(field);
86
+ if (!map || map[unsafe_js_1.unsafeLocal] !== value) {
87
+ this.maps.set(field, (map = new ReflectMapImpl(field, value, this.check)));
88
+ }
89
+ return map;
79
90
  case "message":
80
91
  if (value !== undefined &&
81
92
  !field.oneof &&
@@ -88,7 +99,7 @@ class ReflectMessageImpl {
88
99
  return new ReflectMessageImpl(field.message, value, this.check);
89
100
  case "scalar":
90
101
  return (value === undefined
91
- ? (0, scalar_js_1.scalarZeroValue)(field.scalar, scalar_js_1.LongType.BIGINT)
102
+ ? (0, scalar_js_1.scalarZeroValue)(field.scalar, false)
92
103
  : longToReflect(field, value));
93
104
  case "enum":
94
105
  return (value !== null && value !== void 0 ? value : field.enum.values[0].number);
@@ -102,7 +113,7 @@ class ReflectMessageImpl {
102
113
  return err;
103
114
  }
104
115
  }
105
- let local = value;
116
+ let local;
106
117
  if ((0, guard_js_1.isReflectMap)(value) || (0, guard_js_1.isReflectList)(value)) {
107
118
  local = value[unsafe_js_1.unsafeLocal];
108
119
  }
@@ -116,30 +127,6 @@ class ReflectMessageImpl {
116
127
  (0, unsafe_js_1.unsafeSet)(this.message, field, local);
117
128
  return undefined;
118
129
  }
119
- addListItem(field, value) {
120
- assertOwn(this.message, field);
121
- assertKind(field, "list");
122
- if (this.check) {
123
- if ((0, reflect_check_js_1.checkListItem)(field, 0, value)) {
124
- const arr = (0, unsafe_js_1.unsafeGet)(this.message, field);
125
- return (0, reflect_check_js_1.checkListItem)(field, arr.length, value);
126
- }
127
- }
128
- (0, unsafe_js_1.unsafeAddListItem)(this.message, field, listItemToLocal(field, value));
129
- return undefined;
130
- }
131
- setMapEntry(field, key, value) {
132
- assertOwn(this.message, field);
133
- assertKind(field, "map");
134
- if (this.check) {
135
- const err = (0, reflect_check_js_1.checkMapEntry)(field, key, value);
136
- if (err) {
137
- return err;
138
- }
139
- }
140
- (0, unsafe_js_1.unsafeSetMapEntry)(this.message, field, mapKeyToLocal(key), mapValueToLocal(field, value));
141
- return undefined;
142
- }
143
130
  getUnknown() {
144
131
  return this.message.$unknown;
145
132
  }
@@ -147,11 +134,6 @@ class ReflectMessageImpl {
147
134
  this.message.$unknown = value;
148
135
  }
149
136
  }
150
- function assertKind(field, kind) {
151
- if (field.fieldKind != kind) {
152
- throw new error_js_1.FieldError(field, `${field.toString()} is ${field.fieldKind}`, "ForeignFieldError");
153
- }
154
- }
155
137
  function assertOwn(owner, member) {
156
138
  if (member.parent.typeName !== owner.$typeName) {
157
139
  throw new error_js_1.FieldError(member, `cannot use ${member.toString()} with message ${owner.$typeName}`, "ForeignFieldError");
@@ -342,20 +324,20 @@ function mapKeyToLocal(key) {
342
324
  */
343
325
  function mapKeyToReflect(key, type) {
344
326
  switch (type) {
345
- case scalar_js_1.ScalarType.STRING:
327
+ case descriptors_js_1.ScalarType.STRING:
346
328
  return key;
347
- case scalar_js_1.ScalarType.INT32:
348
- case scalar_js_1.ScalarType.FIXED32:
349
- case scalar_js_1.ScalarType.UINT32:
350
- case scalar_js_1.ScalarType.SFIXED32:
351
- case scalar_js_1.ScalarType.SINT32: {
329
+ case descriptors_js_1.ScalarType.INT32:
330
+ case descriptors_js_1.ScalarType.FIXED32:
331
+ case descriptors_js_1.ScalarType.UINT32:
332
+ case descriptors_js_1.ScalarType.SFIXED32:
333
+ case descriptors_js_1.ScalarType.SINT32: {
352
334
  const n = Number.parseInt(key);
353
335
  if (Number.isFinite(n)) {
354
336
  return n;
355
337
  }
356
338
  break;
357
339
  }
358
- case scalar_js_1.ScalarType.BOOL:
340
+ case descriptors_js_1.ScalarType.BOOL:
359
341
  switch (key) {
360
342
  case "true":
361
343
  return true;
@@ -363,8 +345,8 @@ function mapKeyToReflect(key, type) {
363
345
  return false;
364
346
  }
365
347
  break;
366
- case scalar_js_1.ScalarType.UINT64:
367
- case scalar_js_1.ScalarType.FIXED64:
348
+ case descriptors_js_1.ScalarType.UINT64:
349
+ case descriptors_js_1.ScalarType.FIXED64:
368
350
  try {
369
351
  return proto_int64_js_1.protoInt64.uParse(key);
370
352
  }
@@ -387,19 +369,19 @@ function mapKeyToReflect(key, type) {
387
369
  function longToReflect(field, value) {
388
370
  // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check
389
371
  switch (field.scalar) {
390
- case scalar_js_1.ScalarType.INT64:
391
- case scalar_js_1.ScalarType.SFIXED64:
392
- case scalar_js_1.ScalarType.SINT64:
393
- if ("longType" in field &&
394
- field.longType == scalar_js_1.LongType.STRING &&
372
+ case descriptors_js_1.ScalarType.INT64:
373
+ case descriptors_js_1.ScalarType.SFIXED64:
374
+ case descriptors_js_1.ScalarType.SINT64:
375
+ if ("longAsString" in field &&
376
+ field.longAsString &&
395
377
  typeof value == "string") {
396
378
  value = proto_int64_js_1.protoInt64.parse(value);
397
379
  }
398
380
  break;
399
- case scalar_js_1.ScalarType.FIXED64:
400
- case scalar_js_1.ScalarType.UINT64:
401
- if ("longType" in field &&
402
- field.longType == scalar_js_1.LongType.STRING &&
381
+ case descriptors_js_1.ScalarType.FIXED64:
382
+ case descriptors_js_1.ScalarType.UINT64:
383
+ if ("longAsString" in field &&
384
+ field.longAsString &&
403
385
  typeof value == "string") {
404
386
  value = proto_int64_js_1.protoInt64.uParse(value);
405
387
  }
@@ -410,19 +392,19 @@ function longToReflect(field, value) {
410
392
  function longToLocal(field, value) {
411
393
  // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check
412
394
  switch (field.scalar) {
413
- case scalar_js_1.ScalarType.INT64:
414
- case scalar_js_1.ScalarType.SFIXED64:
415
- case scalar_js_1.ScalarType.SINT64:
416
- if ("longType" in field && field.longType == scalar_js_1.LongType.STRING) {
395
+ case descriptors_js_1.ScalarType.INT64:
396
+ case descriptors_js_1.ScalarType.SFIXED64:
397
+ case descriptors_js_1.ScalarType.SINT64:
398
+ if ("longAsString" in field && field.longAsString) {
417
399
  value = String(value);
418
400
  }
419
401
  else if (typeof value == "string" || typeof value == "number") {
420
402
  value = proto_int64_js_1.protoInt64.parse(value);
421
403
  }
422
404
  break;
423
- case scalar_js_1.ScalarType.FIXED64:
424
- case scalar_js_1.ScalarType.UINT64:
425
- if ("longType" in field && field.longType == scalar_js_1.LongType.STRING) {
405
+ case descriptors_js_1.ScalarType.FIXED64:
406
+ case descriptors_js_1.ScalarType.UINT64:
407
+ if ("longAsString" in field && field.longAsString) {
426
408
  value = String(value);
427
409
  }
428
410
  else if (typeof value == "string" || typeof value == "number") {