UNPKG

23.3 kBTypeScriptView Raw
1type ByteSource = ArrayBuffer | Uint8Array | number[] | string;
2type ScalarFieldType = boolean | number | string;
3type RepeatedFieldType = ScalarFieldType[] | Uint8Array[];
4type AnyFieldType = ScalarFieldType | RepeatedFieldType | Uint8Array;
5type FieldValue = string | number | boolean | Uint8Array | FieldValueArray | undefined;
6interface FieldValueArray extends Array<FieldValue> {}
7type ReadonlyFieldValue = string | number | boolean | Uint8Array | ReadonlyFieldValueArray | undefined;
8interface ReadonlyFieldValueArray extends ReadonlyArray<FieldValue> {}
9
10export abstract class Message {
11 getJsPbMessageId(): string | undefined;
12 static initialize(
13 msg: Message,
14 data: Message.MessageArray,
15 messageId: string | number,
16 suggestedPivot: number,
17 repeatedFields?: number[] | null,
18 oneofFields?: number[][] | null,
19 ): void;
20 static toObjectList<T extends Message>(
21 field: T[],
22 toObjectFn: (includeInstance: boolean, data: T) => {},
23 includeInstance?: boolean,
24 ): Array<{}>;
25 static toObjectExtension(
26 msg: Message,
27 obj: {},
28 extensions: { [key: number]: ExtensionFieldInfo<Message> },
29 getExtensionFn: (fieldInfo: ExtensionFieldInfo<Message>) => Message,
30 includeInstance?: boolean,
31 ): void;
32 serializeBinaryExtensions(
33 proto: Message,
34 writer: BinaryWriter,
35 extensions: { [key: number]: ExtensionFieldBinaryInfo<Message> },
36 getExtensionFn: <T>(fieldInfo: ExtensionFieldInfo<T>) => T,
37 ): void;
38 readBinaryExtension(
39 proto: Message,
40 reader: BinaryReader,
41 extensions: { [key: number]: ExtensionFieldBinaryInfo<Message> },
42 setExtensionFn: <T>(fieldInfo: ExtensionFieldInfo<T>, val: T) => void,
43 ): void;
44 static getField(msg: Message, fieldNumber: number): FieldValue | null;
45 static getOptionalFloatingPointField(msg: Message, fieldNumber: number): number | undefined;
46 static getRepeatedFloatingPointField(msg: Message, fieldNumber: number): number[];
47 static bytesAsB64(bytes: Uint8Array): string;
48 static bytesAsU8(str: string): Uint8Array;
49 static bytesListAsB64(bytesList: Uint8Array[]): string[];
50 static bytesListAsU8(strList: string[]): Uint8Array[];
51 static getFieldWithDefault<T>(msg: Message, fieldNumber: number, defaultValue: T): T;
52 static getMapField(
53 msg: Message,
54 fieldNumber: number,
55 noLazyCreate: boolean,
56 valueCtor?: typeof Message,
57 ): Map<any, any>;
58 static setField(
59 msg: Message,
60 fieldNumber: number,
61 value: ReadonlyFieldValue,
62 ): void;
63 static addToRepeatedField(
64 msg: Message,
65 fieldNumber: number,
66 value: any,
67 index?: number,
68 ): void;
69 static setOneofField(
70 msg: Message,
71 fieldNumber: number,
72 oneof: number[],
73 value: ReadonlyFieldValue,
74 ): void;
75 static computeOneofCase(msg: Message, oneof: number[]): number;
76 static getWrapperField<T extends Message>(
77 msg: Message,
78 ctor: { new(): T },
79 fieldNumber: number,
80 required?: number,
81 ): T;
82 static getRepeatedWrapperField<T extends Message>(
83 msg: Message,
84 ctor: { new(): T },
85 fieldNumber: number,
86 ): T[];
87 static setWrapperField<T extends Message>(
88 msg: Message,
89 fieldNumber: number,
90 value?: T | Map<any, any>,
91 ): void;
92 static setOneofWrapperField(
93 msg: Message,
94 fieldNumber: number,
95 oneof: number[],
96 value: any,
97 ): void;
98 static setRepeatedWrapperField<T extends Message>(
99 msg: Message,
100 fieldNumber: number,
101 value?: readonly T[],
102 ): void;
103 static addToRepeatedWrapperField<T extends Message>(
104 msg: Message,
105 fieldNumber: number,
106 value: T | undefined,
107 ctor: { new(): T },
108 index?: number,
109 ): T;
110 static toMap(
111 field: any[],
112 mapKeyGetterFn: (field: any) => string,
113 toObjectFn?: Message.StaticToObject,
114 includeInstance?: boolean,
115 ): void;
116 toArray(): Message.MessageArray;
117 toString(): string;
118 getExtension<T>(fieldInfo: ExtensionFieldInfo<T>): T;
119 setExtension<T>(fieldInfo: ExtensionFieldInfo<T>, value: T): void;
120 static difference<T extends Message>(m1: T, m2: T): T;
121 static equals(m1: Message, m2: Message): boolean;
122 static compareExtensions(extension1: {}, extension2: {}): boolean;
123 static compareFields(field1: any, field2: any): boolean;
124 cloneMessage(): this;
125 clone(): this;
126 static clone<T extends Message>(msg: T): T;
127 static cloneMessage<T extends Message>(msg: T): T;
128 static copyInto(fromMessage: Message, toMessage: Message): void;
129 static registerMessageType(id: number, constructor: typeof Message): void;
130
131 abstract serializeBinary(): Uint8Array;
132 abstract toObject(includeInstance?: boolean): {};
133
134 // These are `abstract static`, but that isn't allowed. Subclasses of Message will have these methods and properties
135 // and not having them on Message makes using this class for its intended purpose quite difficult.
136 static deserializeBinary(bytes: Uint8Array): Message;
137 static deserializeBinaryFromReader(message: Message, reader: BinaryReader): Message;
138 static serializeBinaryToWriter(message: Message, writer: BinaryWriter): void;
139 static toObject(includeInstance: boolean, msg: Message): {};
140 static extensions: { [key: number]: ExtensionFieldInfo<Message> };
141 static extensionsBinary: { [key: number]: ExtensionFieldBinaryInfo<Message> };
142}
143
144export namespace Message {
145 type MessageArray = any[]; // This type needs to reference itself
146 type StaticToObject = (includeInstance: boolean, msg: Message) => {};
147}
148
149export class ExtensionFieldInfo<T> {
150 fieldIndex: number;
151 fieldName: number;
152 ctor: typeof Message;
153 toObjectFn: Message.StaticToObject;
154 isRepeated: number;
155 constructor(
156 fieldIndex: number,
157 fieldName: { [key: string]: number },
158 ctor: typeof Message,
159 toObjectFn: Message.StaticToObject,
160 isRepeated: number,
161 );
162 isMessageType(): boolean;
163}
164
165export class ExtensionFieldBinaryInfo<T> {
166 fieldInfo: ExtensionFieldInfo<T>;
167 binaryReaderFn: BinaryRead;
168 binaryWriterFn: BinaryWrite;
169 opt_binaryMessageSerializeFn: (msg: Message, writer: BinaryWriter) => void;
170 opt_binaryMessageDeserializeFn: (msg: Message, reader: BinaryReader) => Message;
171 opt_isPacked: boolean;
172 constructor(
173 fieldInfo: ExtensionFieldInfo<T>,
174 binaryReaderFn: BinaryRead,
175 binaryWriterFn: BinaryWrite,
176 opt_binaryMessageSerializeFn: (msg: Message, writer: BinaryWriter) => void,
177 opt_binaryMessageDeserializeFn: (msg: Message, reader: BinaryReader) => Message,
178 opt_isPacked: boolean,
179 );
180}
181
182export class Map<K, V> {
183 constructor(
184 arr: Array<[K, V]>,
185 valueCtor?: { new(init: any): V },
186 );
187 toArray(): Array<[K, V]>;
188 toObject(includeInstance?: boolean): Array<[K, V]>;
189 toObject<VO>(
190 includeInstance: boolean,
191 valueToObject: (includeInstance: boolean, valueWrapper: V) => VO,
192 ): Array<[K, VO]>;
193 static fromObject<TK, TV>(
194 entries: Array<[TK, TV]>,
195 valueCtor: any,
196 valueFromObject: any,
197 ): Map<TK, TV>;
198 getLength(): number;
199 clear(): void;
200 del(key: K): boolean;
201 getEntryList(): Array<[K, V]>;
202 entries(): Map.Iterator<[K, V]>;
203 keys(): Map.Iterator<K>;
204 values(): Map.Iterator<V>;
205 forEach(
206 callback: (entry: V, key: K) => void,
207 thisArg?: {},
208 ): void;
209 set(key: K, value: V): this;
210 get(key: K): V | undefined;
211 has(key: K): boolean;
212 serializeBinary(
213 fieldNumber: number,
214 writer: BinaryWriter,
215 keyWriterFn: (field: number, key: K) => void,
216 valueWriterFn: (field: number, value: V, writerCallback: BinaryWriteCallback) => void,
217 writeCallback?: BinaryWriteCallback,
218 ): void;
219 static deserializeBinary<K, V>(
220 map: Map<K, V>,
221 reader: BinaryReader,
222 keyReaderFn: (reader: BinaryReader) => K,
223 valueReaderFn: (reader: BinaryReader, value: any, readerCallback: BinaryReadCallback) => V,
224 readCallback?: BinaryReadCallback,
225 defaultKey?: K,
226 defaultValue?: V,
227 ): void;
228}
229
230export namespace Map {
231 // This is implemented by jspb.Map.ArrayIteratorIterable_, but that class shouldn't be exported
232 interface Iterator<T> {
233 [Symbol.iterator](): Iterator<T>;
234 next(): IteratorResult<T>;
235 }
236 interface IteratorResult<T> {
237 done: boolean;
238 value: T;
239 }
240}
241
242type BinaryReadReader = (msg: any, binaryReader: BinaryReader) => void;
243
244type BinaryRead = (msg: any, reader: BinaryReadReader) => any;
245
246type BinaryReadCallback = (value: any, binaryReader: BinaryReader) => void;
247
248type BinaryWriteCallback = (value: any, binaryWriter: BinaryWriter) => void;
249
250type BinaryWrite = (fieldNumber: number, value: any, writerCallback: BinaryWriteCallback) => void;
251
252export class BinaryReader {
253 constructor(bytes?: ByteSource, start?: number, length?: number);
254 static alloc(bytes?: ByteSource, start?: number, length?: number): BinaryReader;
255 alloc(bytes?: ByteSource, start?: number, length?: number): BinaryReader;
256 free(): void;
257 getFieldCursor(): number;
258 getCursor(): number;
259 getBuffer(): Uint8Array;
260 getFieldNumber(): number;
261 getWireType(): BinaryConstants.WireType;
262 isDelimited(): boolean;
263 isEndGroup(): boolean;
264 getError(): boolean;
265 setBlock(bytes?: ByteSource, start?: number, length?: number): void;
266 reset(): void;
267 advance(count: number): void;
268 nextField(): boolean;
269 unskipHeader(): void;
270 skipMatchingFields(): void;
271 skipVarintField(): void;
272 skipDelimitedField(): void;
273 skipFixed32Field(): void;
274 skipFixed64Field(): void;
275 skipGroup(): void;
276 skipField(): void;
277 registerReadCallback(callbackName: string, callback: (binaryReader: BinaryReader) => any): void;
278 runReadCallback(callbackName: string): any;
279 readAny(fieldType: BinaryConstants.FieldType): AnyFieldType;
280 readMessage: BinaryRead;
281 readGroup(field: number, message: Message, reader: BinaryReadReader): void;
282 getFieldDecoder(): BinaryDecoder;
283 readInt32(): number;
284 readInt32String(): string;
285 readInt64(): number;
286 readInt64String(): string;
287 readUint32(): number;
288 readUint32String(): string;
289 readUint64(): number;
290 readUint64String(): string;
291 readSint32(): number;
292 readSint64(): number;
293 readSint64String(): string;
294 readFixed32(): number;
295 readFixed64(): number;
296 readFixed64String(): string;
297 readSfixed32(): number;
298 readSfixed32String(): string;
299 readSfixed64(): number;
300 readSfixed64String(): string;
301 readFloat(): number;
302 readDouble(): number;
303 readBool(): boolean;
304 readEnum(): number;
305 readString(): string;
306 readBytes(): Uint8Array;
307 readVarintHash64(): string;
308 readFixedHash64(): string;
309 readPackedInt32(): number[];
310 readPackedInt32String(): string[];
311 readPackedInt64(): number[];
312 readPackedInt64String(): string[];
313 readPackedUint32(): number[];
314 readPackedUint32String(): string[];
315 readPackedUint64(): number[];
316 readPackedUint64String(): string[];
317 readPackedSint32(): number[];
318 readPackedSint64(): number[];
319 readPackedSint64String(): string[];
320 readPackedFixed32(): number[];
321 readPackedFixed64(): number[];
322 readPackedFixed64String(): string[];
323 readPackedSfixed32(): number[];
324 readPackedSfixed64(): number[];
325 readPackedSfixed64String(): string[];
326 readPackedFloat(): number[];
327 readPackedDouble(): number[];
328 readPackedBool(): boolean[];
329 readPackedEnum(): number[];
330 readPackedVarintHash64(): string[];
331 readPackedFixedHash64(): string[];
332}
333
334export class BinaryWriter {
335 constructor();
336 writeSerializedMessage(bytes: Uint8Array, start: number, end: number): void;
337 maybeWriteSerializedMessage(bytes?: Uint8Array, start?: number, end?: number): void;
338 reset(): void;
339 getResultBuffer(): Uint8Array;
340 getResultBase64String(): string;
341 beginSubMessage(field: number): void;
342 endSubMessage(field: number): void;
343 writeAny(fieldType: BinaryConstants.FieldType, field: number, value: AnyFieldType): void;
344 writeInt32(field: number, value?: number): void;
345 writeInt32String(field: number, value?: string): void;
346 writeInt64(field: number, value?: number): void;
347 writeInt64String(field: number, value?: string): void;
348 writeUint32(field: number, value?: number): void;
349 writeUint32String(field: number, value?: string): void;
350 writeUint64(field: number, value?: number): void;
351 writeUint64String(field: number, value?: string): void;
352 writeSint32(field: number, value?: number): void;
353 writeSint64(field: number, value?: number): void;
354 writeSint64String(field: number, value?: string): void;
355 writeFixed32(field: number, value?: number): void;
356 writeFixed64(field: number, value?: number): void;
357 writeFixed64String(field: number, value?: string): void;
358 writeSfixed32(field: number, value?: number): void;
359 writeSfixed64(field: number, value?: number): void;
360 writeSfixed64String(field: number, value?: string): void;
361 writeFloat(field: number, value?: number): void;
362 writeDouble(field: number, value?: number): void;
363 writeBool(field: number, value?: boolean): void;
364 writeEnum(field: number, value?: number): void;
365 writeString(field: number, value?: string): void;
366 writeBytes(field: number, value?: ByteSource): void;
367 writeMessage: BinaryWrite;
368 writeGroup(field: number, value: any, writeCallback: BinaryWriteCallback): void;
369 writeFixedHash64(field: number, value?: string): void;
370 writeVarintHash64(field: number, value?: string): void;
371 writeRepeatedInt32(field: number, value?: readonly number[]): void;
372 writeRepeatedInt32String(field: number, value?: readonly string[]): void;
373 writeRepeatedInt64(field: number, value?: readonly number[]): void;
374 writeRepeatedInt64String(field: number, value?: readonly string[]): void;
375 writeRepeatedUint32(field: number, value?: readonly number[]): void;
376 writeRepeatedUint32String(field: number, value?: readonly string[]): void;
377 writeRepeatedUint64(field: number, value?: readonly number[]): void;
378 writeRepeatedUint64String(field: number, value?: readonly string[]): void;
379 writeRepeatedSint32(field: number, value?: readonly number[]): void;
380 writeRepeatedSint64(field: number, value?: readonly number[]): void;
381 writeRepeatedSint64String(field: number, value?: readonly string[]): void;
382 writeRepeatedFixed32(field: number, value?: readonly number[]): void;
383 writeRepeatedFixed64(field: number, value?: readonly number[]): void;
384 writeRepeatedFixed64String(field: number, value?: readonly string[]): void;
385 writeRepeatedSfixed32(field: number, value?: readonly number[]): void;
386 writeRepeatedSfixed64(field: number, value?: readonly number[]): void;
387 writeRepeatedSfixed64String(field: number, value?: readonly string[]): void;
388 writeRepeatedFloat(field: number, value?: readonly number[]): void;
389 writeRepeatedDouble(field: number, value?: readonly number[]): void;
390 writeRepeatedBool(field: number, value?: readonly boolean[]): void;
391 writeRepeatedEnum(field: number, value?: readonly number[]): void;
392 writeRepeatedString(field: number, value?: readonly string[]): void;
393 writeRepeatedBytes(field: number, value?: readonly ByteSource[]): void;
394 writeRepeatedMessage(field: number, value: readonly Message[], writerCallback: BinaryWriteCallback): void;
395 writeRepeatedGroup(field: number, value: readonly Message[], writerCallback: BinaryWriteCallback): void;
396 writeRepeatedFixedHash64(field: number, value?: readonly string[]): void;
397 writeRepeatedVarintHash64(field: number, value?: readonly string[]): void;
398 writePackedInt32(field: number, value?: readonly number[]): void;
399 writePackedInt32String(field: number, value?: readonly string[]): void;
400 writePackedInt64(field: number, value?: readonly number[]): void;
401 writePackedInt64String(field: number, value?: readonly string[]): void;
402 writePackedUint32(field: number, value?: readonly number[]): void;
403 writePackedUint32String(field: number, value?: readonly string[]): void;
404 writePackedUint64(field: number, value?: readonly number[]): void;
405 writePackedUint64String(field: number, value?: readonly string[]): void;
406 writePackedSint32(field: number, value?: readonly number[]): void;
407 writePackedSint64(field: number, value?: readonly number[]): void;
408 writePackedSint64String(field: number, value?: readonly string[]): void;
409 writePackedFixed32(field: number, value?: readonly number[]): void;
410 writePackedFixed64(field: number, value?: readonly number[]): void;
411 writePackedFixed64String(field: number, value?: readonly string[]): void;
412 writePackedSfixed32(field: number, value?: readonly number[]): void;
413 writePackedSfixed64(field: number, value?: readonly number[]): void;
414 writePackedSfixed64String(field: number, value?: readonly string[]): void;
415 writePackedFloat(field: number, value?: readonly number[]): void;
416 writePackedDouble(field: number, value?: readonly number[]): void;
417 writePackedBool(field: number, value?: readonly boolean[]): void;
418 writePackedEnum(field: number, value?: readonly number[]): void;
419 writePackedFixedHash64(field: number, value?: readonly string[]): void;
420 writePackedVarintHash64(field: number, value?: readonly string[]): void;
421}
422
423export class BinaryEncoder {
424 constructor();
425 length(): number;
426 end(): number[];
427 writeSplitVarint64(lowBits: number, highBits: number): void;
428 writeSplitFixed64(lowBits: number, highBits: number): void;
429 writeUnsignedVarint32(value: number): void;
430 writeSignedVarint32(value: number): void;
431 writeUnsignedVarint64(value: number): void;
432 writeSignedVarint64(value: number): void;
433 writeZigzagVarint32(value: number): void;
434 writeZigzagVarint64(value: number): void;
435 writeZigzagVarint64String(value: string): void;
436 writeUint8(value: number): void;
437 writeUint16(value: number): void;
438 writeUint32(value: number): void;
439 writeUint64(value: number): void;
440 writeInt8(value: number): void;
441 writeInt16(value: number): void;
442 writeInt32(value: number): void;
443 writeInt64(value: number): void;
444 writeInt64String(value: string): void;
445 writeFloat(value: number): void;
446 writeDouble(value: number): void;
447 writeBool(value: boolean): void;
448 writeEnum(value: number): void;
449 writeBytes(bytes: Uint8Array): void;
450 writeVarintHash64(hash: string): void;
451 writeFixedHash64(hash: string): void;
452 writeString(value: string): number;
453}
454
455export class BinaryDecoder {
456 constructor(bytes?: ByteSource, start?: number, length?: number);
457 static alloc(bytes?: ByteSource, start?: number, length?: number): BinaryDecoder;
458 free(): void;
459 clone(): BinaryDecoder;
460 clear(): void;
461 getBuffer(): Uint8Array;
462 setBlock(data: ByteSource, start?: number, length?: number): void;
463 getEnd(): number;
464 setEnd(end: number): void;
465 reset(): void;
466 getCursor(): number;
467 setCursor(cursor: number): void;
468 advance(count: number): void;
469 atEnd(): boolean;
470 pastEnd(): boolean;
471 getError(): boolean;
472 skipVarint(): void;
473 unskipVarint(value: number): void;
474 readUnsignedVarint32(): number;
475 readSignedVarint32(): number;
476 readUnsignedVarint32String(): number;
477 readSignedVarint32String(): number;
478 readZigzagVarint32(): number;
479 readUnsignedVarint64(): number;
480 readUnsignedVarint64String(): number;
481 readSignedVarint64(): number;
482 readSignedVarint64String(): number;
483 readZigzagVarint64(): number;
484 readZigzagVarint64String(): number;
485 readUint8(): number;
486 readUint16(): number;
487 readUint32(): number;
488 readUint64(): number;
489 readUint64String(): string;
490 readInt8(): number;
491 readInt16(): number;
492 readInt32(): number;
493 readInt64(): number;
494 readInt64String(): string;
495 readFloat(): number;
496 readDouble(): number;
497 readBool(): boolean;
498 readEnum(): number;
499 readString(length: number): string;
500 readStringWithLength(): string;
501 readBytes(length: number): Uint8Array;
502 readVarintHash64(): string;
503 readFixedHash64(): string;
504}
505
506export class BinaryIterator {
507 constructor(
508 decoder?: BinaryDecoder,
509 next?: () => number | boolean | string | null,
510 elements?: Array<number | boolean | string>,
511 );
512 static alloc(
513 decoder?: BinaryDecoder,
514 next?: () => number | boolean | string | null,
515 elements?: Array<number | boolean | string>,
516 ): BinaryIterator;
517 free(): void;
518 clear(): void;
519 get(): ScalarFieldType | null;
520 atEnd(): boolean;
521 next(): ScalarFieldType | null;
522}
523
524export namespace BinaryConstants {
525 enum FieldType {
526 INVALID = -1,
527 DOUBLE = 1,
528 FLOAT = 2,
529 INT64 = 3,
530 UINT64 = 4,
531 INT32 = 5,
532 FIXED64 = 6,
533 FIXED32 = 7,
534 BOOL = 8,
535 STRING = 9,
536 GROUP = 10,
537 MESSAGE = 11,
538 BYTES = 12,
539 UINT32 = 13,
540 ENUM = 14,
541 SFIXED32 = 15,
542 SFIXED64 = 16,
543 SINT32 = 17,
544 SINT64 = 18,
545 FHASH64 = 30,
546 VHASH64 = 31,
547 }
548
549 enum WireType {
550 INVALID = -1,
551 VARINT = 0,
552 FIXED64 = 1,
553 DELIMITED = 2,
554 START_GROUP = 3,
555 END_GROUP = 4,
556 FIXED32 = 5,
557 }
558
559 const FieldTypeToWireType: (fieldType: FieldType) => WireType;
560
561 const INVALID_FIELD_NUMBER: number;
562 const FLOAT32_EPS: number;
563 const FLOAT32_MIN: number;
564 const FLOAT32_MAX: number;
565 const FLOAT64_EPS: number;
566 const FLOAT64_MIN: number;
567 const FLOAT64_MAX: number;
568 const TWO_TO_20: number;
569 const TWO_TO_23: number;
570 const TWO_TO_31: number;
571 const TWO_TO_32: number;
572 const TWO_TO_52: number;
573 const TWO_TO_63: number;
574 const TWO_TO_64: number;
575 const ZERO_HASH: string;
576}
577
578export namespace arith {
579 class UInt64 {
580 lo: number;
581 hi: number;
582 constructor(lo: number, hi: number);
583 cmp(other: UInt64): number;
584 rightShift(): UInt64;
585 leftShift(): UInt64;
586 msb(): boolean;
587 lsb(): boolean;
588 zero(): boolean;
589 add(other: UInt64): UInt64;
590 sub(other: UInt64): UInt64;
591 static mul32x32(a: number, b: number): UInt64;
592 mul(a: number): UInt64;
593 div(divisor: number): [UInt64, UInt64];
594 toString(): string;
595 static fromString(str: string): UInt64;
596 clone(): UInt64;
597 }
598
599 class Int64 {
600 lo: number;
601 hi: number;
602 constructor(lo: number, hi: number);
603 add(other: Int64): Int64;
604 sub(other: Int64): Int64;
605 clone(): Int64;
606 toString(): string;
607 static fromString(str: string): Int64;
608 }
609}
610
611// jspb.utils package excluded as it likely shouldn't be called by user code