Skip to content

Commit 8f0a454

Browse files
authored
V2: Speed up reflect with classes (#837)
1 parent fa88bfd commit 8f0a454

3 files changed

Lines changed: 365 additions & 249 deletions

File tree

packages/protobuf-bench/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,5 @@ server would usually do.
1010

1111
| code generator | bundle size | minified | compressed |
1212
|---------------------|------------------------:|-----------------------:|-------------------:|
13-
| protobuf-es | 126,105 b | 65,235 b | 15,901 b |
13+
| protobuf-es | 126,685 b | 66,254 b | 15,996 b |
1414
| protobuf-javascript | 394,384 b | 288,654 b | 45,122 b |

packages/protobuf/src/reflect/reflect-types.ts

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ export interface ReflectMessage {
144144
*/
145145
addListItem<Field extends DescField & { fieldKind: "list" }>(
146146
field: Field,
147-
value: NewListItem<Field>,
147+
value: ReflectAddListItemValue<Field>,
148148
): FieldError | undefined;
149149

150150
/**
@@ -153,7 +153,7 @@ export interface ReflectMessage {
153153
setMapEntry<Field extends DescField & { fieldKind: "map" }>(
154154
field: Field,
155155
key: MapEntryKey,
156-
value: NewMapEntryValue<Field>,
156+
value: ReflectSetMapEntryValue<Field>,
157157
): FieldError | undefined;
158158

159159
/**
@@ -264,12 +264,18 @@ export interface ReflectMap<K extends MapEntryKey = MapEntryKey, V = unknown>
264264
[unsafeLocal]: Record<string, unknown>;
265265
}
266266

267+
/**
268+
* A ReflectMap key.
269+
*/
267270
export type MapEntryKey = string | number | bigint | boolean;
268271

269272
type enumVal = number;
270273

274+
/**
275+
* The return type of ReflectMessage.get()
276+
*/
271277
// prettier-ignore
272-
type ReflectGetValue<Field extends DescField = DescField> = (
278+
export type ReflectGetValue<Field extends DescField = DescField> = (
273279
Field extends { fieldKind: "map" } ? (
274280
Field extends { mapKind: "message" } ? ReflectMap<MapEntryKey, ReflectMessage> :
275281
Field extends { mapKind: "enum" } ? ReflectMap<MapEntryKey, enumVal> :
@@ -283,8 +289,11 @@ type ReflectGetValue<Field extends DescField = DescField> = (
283289
never
284290
);
285291

292+
/**
293+
* The type of the "value" argument of ReflectMessage.set()
294+
*/
286295
// prettier-ignore
287-
type ReflectSetValue<Field extends DescField = DescField> = (
296+
export type ReflectSetValue<Field extends DescField = DescField> = (
288297
Field extends { fieldKind: "map" } ? ReflectMap :
289298
Field extends { fieldKind: "list" } ? ReflectList :
290299
Field extends { fieldKind: "enum" } ? number :
@@ -293,16 +302,22 @@ type ReflectSetValue<Field extends DescField = DescField> = (
293302
never
294303
);
295304

305+
/**
306+
* The type of the "value" argument of ReflectMessage.addListItem()
307+
*/
296308
// prettier-ignore
297-
type NewListItem<Field extends DescField & { fieldKind: "list" }> = (
309+
export type ReflectAddListItemValue<Field extends DescField & { fieldKind: "list" }> = (
298310
Field extends { listKind: "scalar"; scalar: infer T } ? ScalarValue<T> :
299311
Field extends { listKind: "enum" } ? enumVal :
300312
Field extends { listKind: "message" } ? ReflectMessage :
301313
never
302314
);
303315

316+
/**
317+
* The type of the "value" argument of ReflectMessage.setMapEntry()
318+
*/
304319
// prettier-ignore
305-
type NewMapEntryValue<Field extends DescField & { fieldKind: "map" }> = (
320+
export type ReflectSetMapEntryValue<Field extends DescField & { fieldKind: "map" }> = (
306321
Field extends { mapKind: "enum" } ? enumVal :
307322
Field extends { mapKind: "message" } ? ReflectMessage :
308323
Field extends { mapKind: "scalar"; scalar: infer T } ? ScalarValue<T, LongType.BIGINT> :

0 commit comments

Comments
 (0)