@bufbuild/protobuf 2.0.0-alpha.3 → 2.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/clone.d.ts +1 -1
- package/dist/cjs/clone.js +9 -17
- package/dist/cjs/codegenv1/embed.js +25 -25
- package/dist/cjs/codegenv1/enum.d.ts +2 -1
- package/dist/cjs/codegenv1/file.js +1 -1
- package/dist/cjs/codegenv1/message.d.ts +2 -1
- package/dist/cjs/codegenv1/scalar.d.ts +4 -0
- package/dist/cjs/codegenv1/scalar.js +30 -1
- package/dist/cjs/codegenv1/symbols.d.ts +10 -0
- package/dist/cjs/codegenv1/symbols.js +2 -0
- package/dist/cjs/codegenv1/types.d.ts +7 -5
- package/dist/cjs/codegenv1/types.js +2 -1
- package/dist/cjs/create.d.ts +1 -1
- package/dist/cjs/create.js +47 -20
- package/dist/cjs/equals.d.ts +1 -1
- package/dist/cjs/equals.js +8 -15
- package/dist/cjs/from-binary.d.ts +2 -2
- package/dist/cjs/from-binary.js +17 -14
- package/dist/cjs/from-json.d.ts +14 -6
- package/dist/cjs/from-json.js +51 -55
- package/dist/cjs/is-message.d.ts +1 -1
- package/dist/cjs/is-message.js +3 -3
- package/dist/cjs/reflect/guard.js +4 -4
- package/dist/cjs/reflect/reflect-types.d.ts +13 -80
- package/dist/cjs/reflect/reflect.d.ts +29 -18
- package/dist/cjs/reflect/reflect.js +183 -78
- package/dist/cjs/reflect/scalar.d.ts +1 -1
- package/dist/cjs/reflect/unsafe.d.ts +0 -16
- package/dist/cjs/reflect/unsafe.js +1 -19
- package/dist/cjs/registry.d.ts +18 -2
- package/dist/cjs/registry.js +62 -60
- package/dist/cjs/to-binary.d.ts +1 -1
- package/dist/cjs/to-binary.js +2 -2
- package/dist/cjs/to-json.d.ts +14 -4
- package/dist/cjs/to-json.js +26 -13
- package/dist/cjs/types.d.ts +9 -0
- package/dist/cjs/wire/binary-encoding.js +30 -9
- package/dist/cjs/wkt/any.d.ts +7 -7
- package/dist/cjs/wkt/any.js +5 -5
- package/dist/cjs/wkt/gen/google/protobuf/any_pb.d.ts +9 -3
- package/dist/cjs/wkt/gen/google/protobuf/any_pb.js +4 -4
- package/dist/cjs/wkt/gen/google/protobuf/api_pb.d.ts +88 -9
- package/dist/cjs/wkt/gen/google/protobuf/api_pb.js +8 -8
- package/dist/cjs/wkt/gen/google/protobuf/compiler/plugin_pb.d.ts +107 -11
- package/dist/cjs/wkt/gen/google/protobuf/compiler/plugin_pb.js +11 -11
- package/dist/cjs/wkt/gen/google/protobuf/descriptor_pb.d.ts +1005 -92
- package/dist/cjs/wkt/gen/google/protobuf/descriptor_pb.js +86 -86
- package/dist/cjs/wkt/gen/google/protobuf/duration_pb.d.ts +7 -3
- package/dist/cjs/wkt/gen/google/protobuf/duration_pb.js +4 -4
- package/dist/cjs/wkt/gen/google/protobuf/empty_pb.d.ts +7 -3
- package/dist/cjs/wkt/gen/google/protobuf/empty_pb.js +4 -4
- package/dist/cjs/wkt/gen/google/protobuf/field_mask_pb.d.ts +7 -3
- package/dist/cjs/wkt/gen/google/protobuf/field_mask_pb.js +4 -4
- package/dist/cjs/wkt/gen/google/protobuf/source_context_pb.d.ts +12 -3
- package/dist/cjs/wkt/gen/google/protobuf/source_context_pb.js +4 -4
- package/dist/cjs/wkt/gen/google/protobuf/struct_pb.d.ts +25 -8
- package/dist/cjs/wkt/gen/google/protobuf/struct_pb.js +9 -9
- package/dist/cjs/wkt/gen/google/protobuf/timestamp_pb.d.ts +7 -3
- package/dist/cjs/wkt/gen/google/protobuf/timestamp_pb.js +4 -4
- package/dist/cjs/wkt/gen/google/protobuf/type_pb.d.ts +165 -16
- package/dist/cjs/wkt/gen/google/protobuf/type_pb.js +15 -15
- package/dist/cjs/wkt/gen/google/protobuf/wrappers_pb.d.ts +55 -19
- package/dist/cjs/wkt/gen/google/protobuf/wrappers_pb.js +20 -20
- package/dist/cjs/wkt/timestamp.js +1 -2
- package/dist/esm/clone.d.ts +1 -1
- package/dist/esm/clone.js +9 -17
- package/dist/esm/codegenv1/embed.js +26 -26
- package/dist/esm/codegenv1/enum.d.ts +2 -1
- package/dist/esm/codegenv1/file.js +2 -2
- package/dist/esm/codegenv1/message.d.ts +2 -1
- package/dist/esm/codegenv1/scalar.d.ts +4 -0
- package/dist/esm/codegenv1/scalar.js +28 -0
- package/dist/esm/codegenv1/symbols.d.ts +10 -0
- package/dist/esm/codegenv1/symbols.js +2 -0
- package/dist/esm/codegenv1/types.d.ts +7 -5
- package/dist/esm/codegenv1/types.js +2 -1
- package/dist/esm/create.d.ts +1 -1
- package/dist/esm/create.js +47 -20
- package/dist/esm/equals.d.ts +1 -1
- package/dist/esm/equals.js +8 -15
- package/dist/esm/from-binary.d.ts +2 -2
- package/dist/esm/from-binary.js +17 -14
- package/dist/esm/from-json.d.ts +14 -6
- package/dist/esm/from-json.js +49 -55
- package/dist/esm/is-message.d.ts +1 -1
- package/dist/esm/is-message.js +3 -3
- package/dist/esm/reflect/guard.js +4 -4
- package/dist/esm/reflect/reflect-types.d.ts +13 -80
- package/dist/esm/reflect/reflect-types.js +0 -1
- package/dist/esm/reflect/reflect.d.ts +29 -18
- package/dist/esm/reflect/reflect.js +185 -80
- package/dist/esm/reflect/scalar.d.ts +1 -1
- package/dist/esm/reflect/unsafe.d.ts +0 -16
- package/dist/esm/reflect/unsafe.js +0 -16
- package/dist/esm/registry.d.ts +18 -2
- package/dist/esm/registry.js +60 -59
- package/dist/esm/to-binary.d.ts +1 -1
- package/dist/esm/to-binary.js +2 -2
- package/dist/esm/to-json.d.ts +14 -4
- package/dist/esm/to-json.js +24 -12
- package/dist/esm/types.d.ts +9 -0
- package/dist/esm/wire/binary-encoding.js +30 -9
- package/dist/esm/wkt/any.d.ts +7 -7
- package/dist/esm/wkt/any.js +6 -6
- package/dist/esm/wkt/gen/google/protobuf/any_pb.d.ts +9 -3
- package/dist/esm/wkt/gen/google/protobuf/any_pb.js +3 -3
- package/dist/esm/wkt/gen/google/protobuf/api_pb.d.ts +88 -9
- package/dist/esm/wkt/gen/google/protobuf/api_pb.js +9 -9
- package/dist/esm/wkt/gen/google/protobuf/compiler/plugin_pb.d.ts +107 -11
- package/dist/esm/wkt/gen/google/protobuf/compiler/plugin_pb.js +11 -11
- package/dist/esm/wkt/gen/google/protobuf/descriptor_pb.d.ts +1005 -92
- package/dist/esm/wkt/gen/google/protobuf/descriptor_pb.js +84 -84
- package/dist/esm/wkt/gen/google/protobuf/duration_pb.d.ts +7 -3
- package/dist/esm/wkt/gen/google/protobuf/duration_pb.js +3 -3
- package/dist/esm/wkt/gen/google/protobuf/empty_pb.d.ts +7 -3
- package/dist/esm/wkt/gen/google/protobuf/empty_pb.js +3 -3
- package/dist/esm/wkt/gen/google/protobuf/field_mask_pb.d.ts +7 -3
- package/dist/esm/wkt/gen/google/protobuf/field_mask_pb.js +3 -3
- package/dist/esm/wkt/gen/google/protobuf/source_context_pb.d.ts +12 -3
- package/dist/esm/wkt/gen/google/protobuf/source_context_pb.js +3 -3
- package/dist/esm/wkt/gen/google/protobuf/struct_pb.d.ts +25 -8
- package/dist/esm/wkt/gen/google/protobuf/struct_pb.js +8 -8
- package/dist/esm/wkt/gen/google/protobuf/timestamp_pb.d.ts +7 -3
- package/dist/esm/wkt/gen/google/protobuf/timestamp_pb.js +3 -3
- package/dist/esm/wkt/gen/google/protobuf/type_pb.d.ts +165 -16
- package/dist/esm/wkt/gen/google/protobuf/type_pb.js +16 -16
- package/dist/esm/wkt/gen/google/protobuf/wrappers_pb.d.ts +55 -19
- package/dist/esm/wkt/gen/google/protobuf/wrappers_pb.js +19 -19
- package/dist/esm/wkt/timestamp.js +2 -3
- package/package.json +2 -2
package/dist/esm/is-message.js
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* Determine whether the given `arg` is a message.
|
|
16
16
|
* If `desc` is set, determine whether `arg` is this specific message.
|
|
17
17
|
*/
|
|
18
|
-
export function isMessage(arg,
|
|
18
|
+
export function isMessage(arg, schema) {
|
|
19
19
|
const isMessage = arg !== null &&
|
|
20
20
|
typeof arg == "object" &&
|
|
21
21
|
"$typeName" in arg &&
|
|
@@ -23,8 +23,8 @@ export function isMessage(arg, desc) {
|
|
|
23
23
|
if (!isMessage) {
|
|
24
24
|
return false;
|
|
25
25
|
}
|
|
26
|
-
if (
|
|
26
|
+
if (schema === undefined) {
|
|
27
27
|
return true;
|
|
28
28
|
}
|
|
29
|
-
return
|
|
29
|
+
return schema.typeName === arg.$typeName;
|
|
30
30
|
}
|
|
@@ -12,7 +12,6 @@
|
|
|
12
12
|
// See the License for the specific language governing permissions and
|
|
13
13
|
// limitations under the License.
|
|
14
14
|
import { unsafeLocal } from "./unsafe.js";
|
|
15
|
-
import { isMessage } from "../is-message.js";
|
|
16
15
|
export function isObject(arg) {
|
|
17
16
|
return arg !== null && typeof arg == "object" && !Array.isArray(arg);
|
|
18
17
|
}
|
|
@@ -64,7 +63,8 @@ export function isReflectMap(arg, field) {
|
|
|
64
63
|
export function isReflectMessage(arg, messageDesc) {
|
|
65
64
|
return (isObject(arg) &&
|
|
66
65
|
unsafeLocal in arg &&
|
|
67
|
-
"
|
|
68
|
-
|
|
69
|
-
|
|
66
|
+
"desc" in arg &&
|
|
67
|
+
isObject(arg.desc) &&
|
|
68
|
+
arg.desc.kind === "message" &&
|
|
69
|
+
(messageDesc === undefined || arg.desc.typeName == messageDesc.typeName));
|
|
70
70
|
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { type DescField, type DescMessage, type DescOneof } from "../descriptors.js";
|
|
2
|
-
import { FieldError } from "./error.js";
|
|
3
2
|
import { unsafeLocal } from "./unsafe.js";
|
|
4
3
|
import type { Message, UnknownField } from "../types.js";
|
|
5
4
|
import type { ScalarValue } from "./scalar.js";
|
|
@@ -87,7 +86,7 @@ export interface ReflectMessage {
|
|
|
87
86
|
* Note that get() never returns `undefined`. To determine whether a field is
|
|
88
87
|
* set, use isSet().
|
|
89
88
|
*/
|
|
90
|
-
get<Field extends DescField>(field: Field):
|
|
89
|
+
get<Field extends DescField>(field: Field): ReflectMessageGet<Field>;
|
|
91
90
|
/**
|
|
92
91
|
* Set a field value.
|
|
93
92
|
*
|
|
@@ -105,22 +104,10 @@ export interface ReflectMessage {
|
|
|
105
104
|
* - Map fields:
|
|
106
105
|
* ReflectMap.
|
|
107
106
|
*
|
|
108
|
-
*
|
|
107
|
+
* Throws an error if the value is invalid for the field. `undefined` is not
|
|
109
108
|
* a valid value. To reset a field, use clear().
|
|
110
109
|
*/
|
|
111
|
-
set<Field extends DescField>(field: Field, value:
|
|
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;
|
|
110
|
+
set<Field extends DescField>(field: Field, value: unknown): void;
|
|
124
111
|
/**
|
|
125
112
|
* Returns the unknown fields of the message.
|
|
126
113
|
*/
|
|
@@ -159,16 +146,16 @@ export interface ReflectList<V = unknown> extends Iterable<V> {
|
|
|
159
146
|
*/
|
|
160
147
|
get(index: number): V | undefined;
|
|
161
148
|
/**
|
|
162
|
-
* Adds an item
|
|
163
|
-
*
|
|
149
|
+
* Adds an item at the end of the list.
|
|
150
|
+
* Throws an error if an item is invalid for this list.
|
|
164
151
|
*/
|
|
165
|
-
add(
|
|
152
|
+
add(item: V): void;
|
|
166
153
|
/**
|
|
167
154
|
* Replaces the item at the specified index with the specified item.
|
|
168
|
-
*
|
|
169
|
-
*
|
|
155
|
+
* Throws an error if the index is out of range (index < 0 || index >= size).
|
|
156
|
+
* Throws an error if the item is invalid for this list.
|
|
170
157
|
*/
|
|
171
|
-
set(index: number, item: V):
|
|
158
|
+
set(index: number, item: V): void;
|
|
172
159
|
/**
|
|
173
160
|
* Removes all items from the list.
|
|
174
161
|
*/
|
|
@@ -190,7 +177,7 @@ export interface ReflectList<V = unknown> extends Iterable<V> {
|
|
|
190
177
|
* ReflectMap converts keys to their closest possible type in TypeScript.
|
|
191
178
|
* - Messages are wrapped in a ReflectMessage.
|
|
192
179
|
*/
|
|
193
|
-
export interface ReflectMap<K
|
|
180
|
+
export interface ReflectMap<K = unknown, V = unknown> extends ReadonlyMap<K, V> {
|
|
194
181
|
/**
|
|
195
182
|
* Returns the map field.
|
|
196
183
|
*/
|
|
@@ -204,46 +191,19 @@ export interface ReflectMap<K extends MapEntryKey = MapEntryKey, V = unknown> ex
|
|
|
204
191
|
delete(key: K): boolean;
|
|
205
192
|
/**
|
|
206
193
|
* Sets or replaces the item at the specified key with the specified value.
|
|
207
|
-
*
|
|
194
|
+
* Throws an error if the key or value is invalid for this map.
|
|
208
195
|
*/
|
|
209
|
-
set(key: K, value: V):
|
|
196
|
+
set(key: K, value: V): this;
|
|
210
197
|
/**
|
|
211
198
|
* Removes all entries from the map.
|
|
212
199
|
*/
|
|
213
200
|
clear(): void;
|
|
214
201
|
[unsafeLocal]: Record<string, unknown>;
|
|
215
202
|
}
|
|
216
|
-
/**
|
|
217
|
-
* A ReflectMap key.
|
|
218
|
-
*/
|
|
219
|
-
export type MapEntryKey = string | number | bigint | boolean;
|
|
220
|
-
type enumVal = number;
|
|
221
203
|
/**
|
|
222
204
|
* The return type of ReflectMessage.get()
|
|
223
205
|
*/
|
|
224
|
-
export type
|
|
225
|
-
fieldKind: "map";
|
|
226
|
-
} ? (Field extends {
|
|
227
|
-
mapKind: "message";
|
|
228
|
-
} ? ReflectMap<MapEntryKey, ReflectMessage> : Field extends {
|
|
229
|
-
mapKind: "enum";
|
|
230
|
-
} ? ReflectMap<MapEntryKey, enumVal> : Field extends {
|
|
231
|
-
mapKind: "scalar";
|
|
232
|
-
scalar: infer T;
|
|
233
|
-
} ? ReflectMap<MapEntryKey, ScalarValue<T>> : never) : Field extends {
|
|
234
|
-
fieldKind: "list";
|
|
235
|
-
} ? ReflectList : Field extends {
|
|
236
|
-
fieldKind: "enum";
|
|
237
|
-
} ? number : Field extends {
|
|
238
|
-
fieldKind: "message";
|
|
239
|
-
} ? ReflectMessage : Field extends {
|
|
240
|
-
fieldKind: "scalar";
|
|
241
|
-
scalar: infer T;
|
|
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 {
|
|
206
|
+
export type ReflectMessageGet<Field extends DescField = DescField> = (Field extends {
|
|
247
207
|
fieldKind: "map";
|
|
248
208
|
} ? ReflectMap : Field extends {
|
|
249
209
|
fieldKind: "list";
|
|
@@ -255,30 +215,3 @@ export type ReflectSetValue<Field extends DescField = DescField> = (Field extend
|
|
|
255
215
|
fieldKind: "scalar";
|
|
256
216
|
scalar: infer T;
|
|
257
217
|
} ? 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> : never);
|
|
284
|
-
export {};
|
|
@@ -1,32 +1,43 @@
|
|
|
1
1
|
import { type DescField, type DescMessage } from "../descriptors.js";
|
|
2
2
|
import type { MessageShape } from "../types.js";
|
|
3
|
-
import type {
|
|
3
|
+
import type { ReflectList, ReflectMap, ReflectMessage } from "./reflect-types.js";
|
|
4
4
|
/**
|
|
5
5
|
* Create a ReflectMessage.
|
|
6
6
|
*/
|
|
7
|
-
export declare function reflect<Desc extends DescMessage>(messageDesc: Desc, message?: MessageShape<Desc>,
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
* improved by disabling validation by setting disableFieldValueCheck to
|
|
17
|
-
* `false`.
|
|
18
|
-
*/
|
|
19
|
-
disableFieldValueCheck?: boolean;
|
|
20
|
-
}): ReflectMessage;
|
|
7
|
+
export declare function reflect<Desc extends DescMessage>(messageDesc: Desc, message?: MessageShape<Desc>,
|
|
8
|
+
/**
|
|
9
|
+
* By default, field values are validated when setting them. For example,
|
|
10
|
+
* a value for an uint32 field must be a ECMAScript Number >= 0.
|
|
11
|
+
*
|
|
12
|
+
* When field values are trusted, performance can be improved by disabling
|
|
13
|
+
* checks.
|
|
14
|
+
*/
|
|
15
|
+
check?: boolean): ReflectMessage;
|
|
21
16
|
/**
|
|
22
17
|
* Create a ReflectList.
|
|
23
18
|
*/
|
|
24
19
|
export declare function reflectList<V>(field: DescField & {
|
|
25
20
|
fieldKind: "list";
|
|
26
|
-
}, unsafeInput?: unknown[],
|
|
21
|
+
}, unsafeInput?: unknown[],
|
|
22
|
+
/**
|
|
23
|
+
* By default, field values are validated when setting them. For example,
|
|
24
|
+
* a value for an uint32 field must be a ECMAScript Number >= 0.
|
|
25
|
+
*
|
|
26
|
+
* When field values are trusted, performance can be improved by disabling
|
|
27
|
+
* checks.
|
|
28
|
+
*/
|
|
29
|
+
check?: boolean): ReflectList<V>;
|
|
27
30
|
/**
|
|
28
31
|
* Create a ReflectMap.
|
|
29
32
|
*/
|
|
30
|
-
export declare function reflectMap<K
|
|
33
|
+
export declare function reflectMap<K = unknown, V = unknown>(field: DescField & {
|
|
31
34
|
fieldKind: "map";
|
|
32
|
-
}, unsafeInput?: Record<string, unknown>,
|
|
35
|
+
}, unsafeInput?: Record<string, unknown>,
|
|
36
|
+
/**
|
|
37
|
+
* By default, field values are validated when setting them. For example,
|
|
38
|
+
* a value for an uint32 field must be a ECMAScript Number >= 0.
|
|
39
|
+
*
|
|
40
|
+
* When field values are trusted, performance can be improved by disabling
|
|
41
|
+
* checks.
|
|
42
|
+
*/
|
|
43
|
+
check?: boolean): ReflectMap<K, V>;
|
|
@@ -14,19 +14,25 @@
|
|
|
14
14
|
import { ScalarType, } from "../descriptors.js";
|
|
15
15
|
import { checkField, checkListItem, checkMapEntry } from "./reflect-check.js";
|
|
16
16
|
import { FieldError } from "./error.js";
|
|
17
|
-
import {
|
|
17
|
+
import { unsafeClear, unsafeGet, unsafeIsSet, unsafeLocal, unsafeOneofCase, unsafeSet, } from "./unsafe.js";
|
|
18
18
|
import { create } from "../create.js";
|
|
19
19
|
import { isWrapper, isWrapperDesc } from "../wkt/wrappers.js";
|
|
20
20
|
import { scalarZeroValue } from "./scalar.js";
|
|
21
21
|
import { protoInt64 } from "../proto-int64.js";
|
|
22
|
-
import { isReflectList, isReflectMap, isReflectMessage } from "./guard.js";
|
|
22
|
+
import { isObject, isReflectList, isReflectMap, isReflectMessage, } from "./guard.js";
|
|
23
23
|
/**
|
|
24
24
|
* Create a ReflectMessage.
|
|
25
25
|
*/
|
|
26
26
|
export function reflect(messageDesc, message,
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
/**
|
|
28
|
+
* By default, field values are validated when setting them. For example,
|
|
29
|
+
* a value for an uint32 field must be a ECMAScript Number >= 0.
|
|
30
|
+
*
|
|
31
|
+
* When field values are trusted, performance can be improved by disabling
|
|
32
|
+
* checks.
|
|
33
|
+
*/
|
|
34
|
+
check = true) {
|
|
35
|
+
return new ReflectMessageImpl(messageDesc, message, check);
|
|
30
36
|
}
|
|
31
37
|
class ReflectMessageImpl {
|
|
32
38
|
get sortedFields() {
|
|
@@ -35,9 +41,9 @@ class ReflectMessageImpl {
|
|
|
35
41
|
.concat()
|
|
36
42
|
.sort((a, b) => a.number - b.number)));
|
|
37
43
|
}
|
|
38
|
-
constructor(messageDesc, message,
|
|
39
|
-
|
|
40
|
-
|
|
44
|
+
constructor(messageDesc, message, check = true) {
|
|
45
|
+
this.lists = new Map();
|
|
46
|
+
this.maps = new Map();
|
|
41
47
|
this.check = check;
|
|
42
48
|
this.desc = messageDesc;
|
|
43
49
|
this.message = this[unsafeLocal] = message !== null && message !== void 0 ? message : create(messageDesc);
|
|
@@ -65,24 +71,24 @@ class ReflectMessageImpl {
|
|
|
65
71
|
}
|
|
66
72
|
get(field) {
|
|
67
73
|
assertOwn(this.message, field);
|
|
68
|
-
|
|
74
|
+
const value = unsafeGet(this.message, field);
|
|
69
75
|
switch (field.fieldKind) {
|
|
70
76
|
case "list":
|
|
71
|
-
|
|
77
|
+
// eslint-disable-next-line no-case-declarations
|
|
78
|
+
let list = this.lists.get(field);
|
|
79
|
+
if (!list || list[unsafeLocal] !== value) {
|
|
80
|
+
this.lists.set(field, (list = new ReflectListImpl(field, value, this.check)));
|
|
81
|
+
}
|
|
82
|
+
return list;
|
|
72
83
|
case "map":
|
|
73
|
-
//
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
if (value !== undefined &&
|
|
78
|
-
!field.oneof &&
|
|
79
|
-
isWrapperDesc(field.message)) {
|
|
80
|
-
value = {
|
|
81
|
-
$typeName: field.message.typeName,
|
|
82
|
-
value: longToReflect(field.message.fields[0], value),
|
|
83
|
-
};
|
|
84
|
+
// eslint-disable-next-line no-case-declarations
|
|
85
|
+
let map = this.maps.get(field);
|
|
86
|
+
if (!map || map[unsafeLocal] !== value) {
|
|
87
|
+
this.maps.set(field, (map = new ReflectMapImpl(field, value, this.check)));
|
|
84
88
|
}
|
|
85
|
-
return
|
|
89
|
+
return map;
|
|
90
|
+
case "message":
|
|
91
|
+
return messageToReflect(field, value, this.check);
|
|
86
92
|
case "scalar":
|
|
87
93
|
return (value === undefined
|
|
88
94
|
? scalarZeroValue(field.scalar, false)
|
|
@@ -96,46 +102,20 @@ class ReflectMessageImpl {
|
|
|
96
102
|
if (this.check) {
|
|
97
103
|
const err = checkField(field, value);
|
|
98
104
|
if (err) {
|
|
99
|
-
|
|
105
|
+
throw err;
|
|
100
106
|
}
|
|
101
107
|
}
|
|
102
108
|
let local;
|
|
103
|
-
if (
|
|
104
|
-
local = value
|
|
109
|
+
if (field.fieldKind == "message") {
|
|
110
|
+
local = messageToLocal(field, value);
|
|
105
111
|
}
|
|
106
|
-
else if (
|
|
107
|
-
|
|
108
|
-
local = !field.oneof && isWrapper(msg) ? msg.value : msg;
|
|
112
|
+
else if (isReflectMap(value) || isReflectList(value)) {
|
|
113
|
+
local = value[unsafeLocal];
|
|
109
114
|
}
|
|
110
115
|
else {
|
|
111
116
|
local = longToLocal(field, value);
|
|
112
117
|
}
|
|
113
118
|
unsafeSet(this.message, field, local);
|
|
114
|
-
return undefined;
|
|
115
|
-
}
|
|
116
|
-
addListItem(field, value) {
|
|
117
|
-
assertOwn(this.message, field);
|
|
118
|
-
assertKind(field, "list");
|
|
119
|
-
if (this.check) {
|
|
120
|
-
if (checkListItem(field, 0, value)) {
|
|
121
|
-
const arr = unsafeGet(this.message, field);
|
|
122
|
-
return checkListItem(field, arr.length, value);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
unsafeAddListItem(this.message, field, listItemToLocal(field, value));
|
|
126
|
-
return undefined;
|
|
127
|
-
}
|
|
128
|
-
setMapEntry(field, key, value) {
|
|
129
|
-
assertOwn(this.message, field);
|
|
130
|
-
assertKind(field, "map");
|
|
131
|
-
if (this.check) {
|
|
132
|
-
const err = checkMapEntry(field, key, value);
|
|
133
|
-
if (err) {
|
|
134
|
-
return err;
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
unsafeSetMapEntry(this.message, field, mapKeyToLocal(key), mapValueToLocal(field, value));
|
|
138
|
-
return undefined;
|
|
139
119
|
}
|
|
140
120
|
getUnknown() {
|
|
141
121
|
return this.message.$unknown;
|
|
@@ -144,11 +124,6 @@ class ReflectMessageImpl {
|
|
|
144
124
|
this.message.$unknown = value;
|
|
145
125
|
}
|
|
146
126
|
}
|
|
147
|
-
function assertKind(field, kind) {
|
|
148
|
-
if (field.fieldKind != kind) {
|
|
149
|
-
throw new FieldError(field, `${field.toString()} is ${field.fieldKind}`, "ForeignFieldError");
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
127
|
function assertOwn(owner, member) {
|
|
153
128
|
if (member.parent.typeName !== owner.$typeName) {
|
|
154
129
|
throw new FieldError(member, `cannot use ${member.toString()} with message ${owner.$typeName}`, "ForeignFieldError");
|
|
@@ -157,7 +132,15 @@ function assertOwn(owner, member) {
|
|
|
157
132
|
/**
|
|
158
133
|
* Create a ReflectList.
|
|
159
134
|
*/
|
|
160
|
-
export function reflectList(field, unsafeInput,
|
|
135
|
+
export function reflectList(field, unsafeInput,
|
|
136
|
+
/**
|
|
137
|
+
* By default, field values are validated when setting them. For example,
|
|
138
|
+
* a value for an uint32 field must be a ECMAScript Number >= 0.
|
|
139
|
+
*
|
|
140
|
+
* When field values are trusted, performance can be improved by disabling
|
|
141
|
+
* checks.
|
|
142
|
+
*/
|
|
143
|
+
check = true) {
|
|
161
144
|
return new ReflectListImpl(field, unsafeInput !== null && unsafeInput !== void 0 ? unsafeInput : [], check);
|
|
162
145
|
}
|
|
163
146
|
class ReflectListImpl {
|
|
@@ -180,29 +163,24 @@ class ReflectListImpl {
|
|
|
180
163
|
}
|
|
181
164
|
set(index, item) {
|
|
182
165
|
if (index < 0 || index >= this._arr.length) {
|
|
183
|
-
|
|
166
|
+
throw new FieldError(this._field, `list item #${index + 1}: out of range`);
|
|
184
167
|
}
|
|
185
168
|
if (this.check) {
|
|
186
169
|
const err = checkListItem(this._field, index, item);
|
|
187
170
|
if (err) {
|
|
188
|
-
|
|
171
|
+
throw err;
|
|
189
172
|
}
|
|
190
173
|
}
|
|
191
174
|
this._arr[index] = listItemToLocal(this._field, item);
|
|
192
|
-
return undefined;
|
|
193
175
|
}
|
|
194
|
-
add(
|
|
176
|
+
add(item) {
|
|
195
177
|
if (this.check) {
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
return err;
|
|
200
|
-
}
|
|
178
|
+
const err = checkListItem(this._field, this._arr.length, item);
|
|
179
|
+
if (err) {
|
|
180
|
+
throw err;
|
|
201
181
|
}
|
|
202
182
|
}
|
|
203
|
-
|
|
204
|
-
this._arr.push(listItemToLocal(this._field, item));
|
|
205
|
-
}
|
|
183
|
+
this._arr.push(listItemToLocal(this._field, item));
|
|
206
184
|
return undefined;
|
|
207
185
|
}
|
|
208
186
|
clear() {
|
|
@@ -228,7 +206,15 @@ class ReflectListImpl {
|
|
|
228
206
|
/**
|
|
229
207
|
* Create a ReflectMap.
|
|
230
208
|
*/
|
|
231
|
-
export function reflectMap(field, unsafeInput,
|
|
209
|
+
export function reflectMap(field, unsafeInput,
|
|
210
|
+
/**
|
|
211
|
+
* By default, field values are validated when setting them. For example,
|
|
212
|
+
* a value for an uint32 field must be a ECMAScript Number >= 0.
|
|
213
|
+
*
|
|
214
|
+
* When field values are trusted, performance can be improved by disabling
|
|
215
|
+
* checks.
|
|
216
|
+
*/
|
|
217
|
+
check = true) {
|
|
232
218
|
return new ReflectMapImpl(field, unsafeInput, check);
|
|
233
219
|
}
|
|
234
220
|
class ReflectMapImpl {
|
|
@@ -244,11 +230,11 @@ class ReflectMapImpl {
|
|
|
244
230
|
if (this.check) {
|
|
245
231
|
const err = checkMapEntry(this._field, key, value);
|
|
246
232
|
if (err) {
|
|
247
|
-
|
|
233
|
+
throw err;
|
|
248
234
|
}
|
|
249
235
|
}
|
|
250
236
|
this.obj[mapKeyToLocal(key)] = mapValueToLocal(this._field, value);
|
|
251
|
-
return
|
|
237
|
+
return this;
|
|
252
238
|
}
|
|
253
239
|
delete(key) {
|
|
254
240
|
const k = mapKeyToLocal(key);
|
|
@@ -303,27 +289,68 @@ class ReflectMapImpl {
|
|
|
303
289
|
}
|
|
304
290
|
}
|
|
305
291
|
}
|
|
292
|
+
function messageToLocal(field, value) {
|
|
293
|
+
if (!isReflectMessage(value)) {
|
|
294
|
+
return value;
|
|
295
|
+
}
|
|
296
|
+
if (isWrapper(value.message) &&
|
|
297
|
+
!field.oneof &&
|
|
298
|
+
field.fieldKind == "message") {
|
|
299
|
+
// Types from google/protobuf/wrappers.proto are unwrapped when used in
|
|
300
|
+
// a singular field that is not part of a oneof group.
|
|
301
|
+
return value.message.value;
|
|
302
|
+
}
|
|
303
|
+
if (value.desc.typeName == "google.protobuf.Struct" &&
|
|
304
|
+
field.parent.typeName != "google.protobuf.Value") {
|
|
305
|
+
// google.protobuf.Struct is represented with JsonObject when used in a
|
|
306
|
+
// field, except when used in google.protobuf.Value.
|
|
307
|
+
return wktStructToLocal(value.message);
|
|
308
|
+
}
|
|
309
|
+
return value.message;
|
|
310
|
+
}
|
|
311
|
+
function messageToReflect(field, value, check) {
|
|
312
|
+
if (value !== undefined) {
|
|
313
|
+
if (isWrapperDesc(field.message) &&
|
|
314
|
+
!field.oneof &&
|
|
315
|
+
field.fieldKind == "message") {
|
|
316
|
+
// Types from google/protobuf/wrappers.proto are unwrapped when used in
|
|
317
|
+
// a singular field that is not part of a oneof group.
|
|
318
|
+
value = {
|
|
319
|
+
$typeName: field.message.typeName,
|
|
320
|
+
value: longToReflect(field.message.fields[0], value),
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
else if (field.message.typeName == "google.protobuf.Struct" &&
|
|
324
|
+
field.parent.typeName != "google.protobuf.Value" &&
|
|
325
|
+
isObject(value)) {
|
|
326
|
+
// google.protobuf.Struct is represented with JsonObject when used in a
|
|
327
|
+
// field, except when used in google.protobuf.Value.
|
|
328
|
+
value = wktStructToReflect(value);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
return new ReflectMessageImpl(field.message, value, check);
|
|
332
|
+
}
|
|
306
333
|
function listItemToLocal(field, value) {
|
|
307
|
-
if (
|
|
308
|
-
return value
|
|
334
|
+
if (field.listKind == "message") {
|
|
335
|
+
return messageToLocal(field, value);
|
|
309
336
|
}
|
|
310
337
|
return longToLocal(field, value);
|
|
311
338
|
}
|
|
312
339
|
function listItemToReflect(field, value, check) {
|
|
313
340
|
if (field.listKind == "message") {
|
|
314
|
-
return
|
|
341
|
+
return messageToReflect(field, value, check);
|
|
315
342
|
}
|
|
316
343
|
return longToReflect(field, value);
|
|
317
344
|
}
|
|
318
345
|
function mapValueToLocal(field, value) {
|
|
319
|
-
if (
|
|
320
|
-
return value
|
|
346
|
+
if (field.mapKind == "message") {
|
|
347
|
+
return messageToLocal(field, value);
|
|
321
348
|
}
|
|
322
349
|
return longToLocal(field, value);
|
|
323
350
|
}
|
|
324
351
|
function mapValueToReflect(field, value, check) {
|
|
325
352
|
if (field.mapKind == "message") {
|
|
326
|
-
return
|
|
353
|
+
return messageToReflect(field, value, check);
|
|
327
354
|
}
|
|
328
355
|
return value;
|
|
329
356
|
}
|
|
@@ -427,3 +454,81 @@ function longToLocal(field, value) {
|
|
|
427
454
|
}
|
|
428
455
|
return value;
|
|
429
456
|
}
|
|
457
|
+
function wktStructToReflect(json) {
|
|
458
|
+
const struct = {
|
|
459
|
+
$typeName: "google.protobuf.Struct",
|
|
460
|
+
fields: {},
|
|
461
|
+
};
|
|
462
|
+
if (isObject(json)) {
|
|
463
|
+
for (const [k, v] of Object.entries(json)) {
|
|
464
|
+
struct.fields[k] = wktValueToReflect(v);
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
return struct;
|
|
468
|
+
}
|
|
469
|
+
function wktStructToLocal(val) {
|
|
470
|
+
const json = {};
|
|
471
|
+
for (const [k, v] of Object.entries(val.fields)) {
|
|
472
|
+
json[k] = wktValueToLocal(v);
|
|
473
|
+
}
|
|
474
|
+
return json;
|
|
475
|
+
}
|
|
476
|
+
function wktValueToLocal(val) {
|
|
477
|
+
switch (val.kind.case) {
|
|
478
|
+
case "structValue":
|
|
479
|
+
return wktStructToLocal(val.kind.value);
|
|
480
|
+
case "listValue":
|
|
481
|
+
return val.kind.value.values.map(wktValueToLocal);
|
|
482
|
+
case "nullValue":
|
|
483
|
+
case undefined:
|
|
484
|
+
return null;
|
|
485
|
+
default:
|
|
486
|
+
return val.kind.value;
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
function wktValueToReflect(json) {
|
|
490
|
+
const value = {
|
|
491
|
+
$typeName: "google.protobuf.Value",
|
|
492
|
+
kind: { case: undefined },
|
|
493
|
+
};
|
|
494
|
+
// eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check -- invalid input is unselected kind
|
|
495
|
+
switch (typeof json) {
|
|
496
|
+
case "number":
|
|
497
|
+
value.kind = { case: "numberValue", value: json };
|
|
498
|
+
break;
|
|
499
|
+
case "string":
|
|
500
|
+
value.kind = { case: "stringValue", value: json };
|
|
501
|
+
break;
|
|
502
|
+
case "boolean":
|
|
503
|
+
value.kind = { case: "boolValue", value: json };
|
|
504
|
+
break;
|
|
505
|
+
case "object":
|
|
506
|
+
if (json === null) {
|
|
507
|
+
const nullValue = 0;
|
|
508
|
+
value.kind = { case: "nullValue", value: nullValue };
|
|
509
|
+
}
|
|
510
|
+
else if (Array.isArray(json)) {
|
|
511
|
+
const listValue = {
|
|
512
|
+
$typeName: "google.protobuf.ListValue",
|
|
513
|
+
values: [],
|
|
514
|
+
};
|
|
515
|
+
if (Array.isArray(json)) {
|
|
516
|
+
for (const e of json) {
|
|
517
|
+
listValue.values.push(wktValueToReflect(e));
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
value.kind = {
|
|
521
|
+
case: "listValue",
|
|
522
|
+
value: listValue,
|
|
523
|
+
};
|
|
524
|
+
}
|
|
525
|
+
else {
|
|
526
|
+
value.kind = {
|
|
527
|
+
case: "structValue",
|
|
528
|
+
value: wktStructToReflect(json),
|
|
529
|
+
};
|
|
530
|
+
}
|
|
531
|
+
break;
|
|
532
|
+
}
|
|
533
|
+
return value;
|
|
534
|
+
}
|
|
@@ -6,7 +6,7 @@ export type ScalarValue<T = ScalarType, LongAsString extends boolean = false> =
|
|
|
6
6
|
/**
|
|
7
7
|
* Returns true if both scalar values are equal.
|
|
8
8
|
*/
|
|
9
|
-
export declare function scalarEquals(type: ScalarType, a:
|
|
9
|
+
export declare function scalarEquals(type: ScalarType, a: ScalarValue | undefined, b: ScalarValue | undefined): boolean;
|
|
10
10
|
/**
|
|
11
11
|
* Returns the zero value for the given scalar type.
|
|
12
12
|
*/
|
|
@@ -40,19 +40,3 @@ export declare function unsafeSet(target: Record<string, unknown>, field: DescFi
|
|
|
40
40
|
*/
|
|
41
41
|
export declare function unsafeClear(target: Record<string, any>, // eslint-disable-line @typescript-eslint/no-explicit-any -- `any` is the best choice for dynamic access
|
|
42
42
|
field: DescField): void;
|
|
43
|
-
/**
|
|
44
|
-
* Add an item to a list field.
|
|
45
|
-
*
|
|
46
|
-
* @private
|
|
47
|
-
*/
|
|
48
|
-
export declare function unsafeAddListItem(target: Record<string, unknown>, field: DescField & {
|
|
49
|
-
fieldKind: "list";
|
|
50
|
-
}, value: unknown): void;
|
|
51
|
-
/**
|
|
52
|
-
* Set a map entry.
|
|
53
|
-
*
|
|
54
|
-
* @private
|
|
55
|
-
*/
|
|
56
|
-
export declare function unsafeSetMapEntry(target: Record<string, unknown>, field: DescField & {
|
|
57
|
-
fieldKind: "map";
|
|
58
|
-
}, key: string | number, value: unknown): void;
|