diff --git a/google-protobuf/google-protobuf-tests.ts b/google-protobuf/google-protobuf-tests.ts
new file mode 100644
index 0000000000..796969b2b3
--- /dev/null
+++ b/google-protobuf/google-protobuf-tests.ts
@@ -0,0 +1,139 @@
+import * as jspb from "google-protobuf";
+
+/* This is a typescript version of a simple generated class from a proto file that is shown below. In order to make
+ this ES5 JS file into TypeScript there have been quite a few modifications, but the same calls are made to the library
+ classes.
+
+ // FILE: simple.proto
+ syntax = "proto3";
+
+ package examplecom;
+
+ message MySimple {
+ string my_string = 1;
+ bool my_bool = 2;
+ repeated string some_labels = 3;
+ }
+*/
+
+class MySimple extends jspb.Message {
+ constructor(opt_data?: any) {
+ super(); // This isn't actually called in the JS version of this file, but it's required by TS
+ jspb.Message.initialize(this, opt_data, 0, -1, MySimple.repeatedFields_, null);
+ };
+
+ static repeatedFields_ = [3];
+
+ toObject(opt_includeInstance: boolean) {
+ return MySimple.toObject(opt_includeInstance, this);
+ };
+
+ static toObject(includeInstance: boolean, msg: MySimple) {
+ const obj = {
+ myString: jspb.Message.getFieldWithDefault(msg, 1, ""),
+ myBool: jspb.Message.getFieldWithDefault(msg, 2, false),
+ someLabelsList: jspb.Message.getField(msg, 3),
+ };
+
+ if (includeInstance) {
+ // This is commented out because it's not valid in TS, but it's a simple append to an object
+ // obj['$jspbMessageInstance'] = msg;
+ }
+ return obj;
+ };
+
+ static deserializeBinary(bytes: Uint8Array) {
+ const reader = new jspb.BinaryReader(bytes);
+ const msg = new MySimple();
+ return MySimple.deserializeBinaryFromReader(msg, reader);
+ };
+
+ static deserializeBinaryFromReader(msg: MySimple, reader: jspb.BinaryReader) {
+ while (reader.nextField()) {
+ if (reader.isEndGroup()) {
+ break;
+ }
+ const field = reader.getFieldNumber();
+ switch (field) {
+ case 1:
+ const value1 = (reader.readString());
+ msg.setMyString(value1);
+ break;
+ case 2:
+ const value2 = (reader.readBool());
+ msg.setMyBool(value2);
+ break;
+ case 3:
+ const value3 = (reader.readString());
+ msg.addSomeLabels(value3);
+ break;
+ default:
+ reader.skipField();
+ break;
+ }
+ }
+ return msg;
+ };
+
+ serializeBinary(): Uint8Array {
+ const writer = new jspb.BinaryWriter();
+ MySimple.serializeBinaryToWriter(this, writer);
+ return writer.getResultBuffer();
+ };
+
+ static serializeBinaryToWriter(message: MySimple, writer: jspb.BinaryWriter) {
+ let f1 = message.getMyString();
+ if (f1.length > 0) {
+ writer.writeString(
+ 1,
+ f1,
+ );
+ }
+ const f2 = message.getMyBool();
+ if (f2) {
+ writer.writeBool(
+ 2,
+ f2,
+ );
+ }
+ const f3 = message.getSomeLabelsList();
+ if (f3.length > 0) {
+ writer.writeRepeatedString(
+ 3,
+ f3,
+ );
+ }
+ }
+
+ getMyString(): string {
+ return jspb.Message.getFieldWithDefault(this, 1, "");
+ }
+
+ setMyString(value: string) {
+ jspb.Message.setField(this, 1, value);
+ }
+
+ getMyBool(): boolean {
+ return jspb.Message.getFieldWithDefault(this, 2, false);
+ }
+
+ setMyBool(value: boolean) {
+ jspb.Message.setField(this, 2, value);
+ }
+
+ getSomeLabelsList(): string[] {
+ return jspb.Message.getField(this, 3);
+ }
+
+ setSomeLabelsList(value: string[]) {
+ jspb.Message.setField(this, 3, value || []);
+ }
+
+ addSomeLabels(value: string, opt_index?: number) {
+ jspb.Message.addToRepeatedField(this, 3, value, opt_index);
+ }
+
+ clearSomeLabelsList() {
+ this.setSomeLabelsList([]);
+ }
+}
diff --git a/google-protobuf/index.d.ts b/google-protobuf/index.d.ts
new file mode 100644
index 0000000000..f40780ed8a
--- /dev/null
+++ b/google-protobuf/index.d.ts
@@ -0,0 +1,675 @@
+// Type definitions for google-protobuf 3.2
+// Project: https://github.com/google/google-protobuf
+// Definitions by: Marcus Longmuir
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+
+type ByteSource = ArrayBuffer|Uint8Array|number[]|string;
+type ScalarFieldType = boolean|number|string;
+type RepeatedFieldType = ScalarFieldType[] | Uint8Array[];
+type AnyFieldType = ScalarFieldType | RepeatedFieldType | Uint8Array;
+type FieldValue = (string|number|boolean|Uint8Array|any/*This should be Array, but that isn't allowed*/|undefined)
+
+export class Message {
+ getJsPbMessageId(): (string | undefined);
+ static initialize(msg: Message,
+ data: Message.MessageArray,
+ messageId: (string | number),
+ suggestedPivot: number,
+ repeatedFields: number[],
+ oneofFields?: number[][] | null): void;
+ static toObjectList(field: T[],
+ toObjectFn: (includeInstance: boolean,
+ data: T) => {},
+ includeInstance?: boolean): {}[];
+ static toObjectExtension(msg: Message,
+ obj: {},
+ extensions: {[key: number]: ExtensionFieldInfo},
+ getExtensionFn: (fieldInfo: ExtensionFieldInfo) => Message,
+ includeInstance?: boolean): void;
+ serializeBinaryExtensions(proto: Message,
+ writer: BinaryWriter,
+ extensions: {[key: number]: ExtensionFieldBinaryInfo},
+ getExtensionFn: (fieldInfo: ExtensionFieldInfo) => T): void
+ readBinaryExtension(proto: Message,
+ reader: BinaryReader,
+ extensions: {[key: number]: ExtensionFieldBinaryInfo},
+ setExtensionFn: (fieldInfo: ExtensionFieldInfo,
+ val: T) => void): void
+ static getField(msg: Message,
+ fieldNumber: number): FieldValue|null;
+ static getOptionalFloatingPointField(msg: Message,
+ fieldNumber: number): (number | undefined);
+ static getRepeatedFloatingPointField(msg: Message,
+ fieldNumber: number): number[];
+ static bytesAsB64(bytes: Uint8Array): string;
+ static bytesAsU8(str: string): Uint8Array;
+ static bytesListAsB64(bytesList: Uint8Array[]): string[];
+ static bytesListAsU8(strList: string[]): Uint8Array[];
+ static getFieldWithDefault(msg: Message,
+ fieldNumber: number,
+ defaultValue: T): T;
+ static getMapField(msg: Message,
+ fieldNumber: number,
+ noLazyCreate: boolean,
+ valueCtor: typeof Message): Map;
+ static setField(msg: Message,
+ fieldNumber: number,
+ value: FieldValue): void;
+ static addToRepeatedField(msg: Message,
+ fieldNumber: number,
+ value: any,
+ index?: number): void;
+ static setOneofField(msg: Message,
+ fieldNumber: number,
+ oneof: number[],
+ value: FieldValue): void;
+ static computeOneofCase(msg: Message,
+ oneof: number[]): number;
+ static getWrapperField(msg: Message,
+ ctor: typeof Message,
+ fieldNumber: number,
+ required?: number): Message;
+ static getRepeatedWrapperField(msg: Message,
+ ctor: typeof Message,
+ fieldNumber: number): Message[];
+ static setWrapperField(msg: Message,
+ fieldNumber: number,
+ value?: (Message|Map)): void;
+ static setOneofWrapperField(msg: Message,
+ fieldNumber: number,
+ oneof: number[],
+ value: any): void;
+ static setRepeatedWrapperField(msg: Message,
+ fieldNumber: number,
+ value: any): void;
+ static addToRepeatedWrapperField(msg: Message,
+ fieldNumber: number,
+ value: any,
+ ctor: typeof Message,
+ index: number): any;
+ static toMap(field: any[],
+ mapKeyGetterFn: (field: any) => string,
+ toObjectFn?: Message.StaticToObject,
+ includeInstance?: boolean): void;
+ toArray(): Message.MessageArray;
+ toString(): string;
+ getExtension(fieldInfo: ExtensionFieldInfo): T;
+ setExtension(fieldInfo: ExtensionFieldInfo,
+ value: T): void;
+ static difference(m1: T,
+ m2: T): T;
+ static equals(m1: Message,
+ m2: Message): boolean;
+ static compareExtensions(extension1: {},
+ extension2: {}): boolean;
+ static compareFields(field1: any,
+ field2: any): boolean;
+ cloneMessage(): Message;
+ clone(): Message;
+ static clone(msg: T): T;
+ static cloneMessage(msg: T): T;
+ static copyInto(fromMessage: Message,
+ toMessage: Message): void;
+ static registerMessageType(id: number,
+ constructor: typeof Message): void;
+}
+
+export namespace Message {
+ export type MessageArray = any[]; // This type needs to reference itself
+ interface StaticToObject {
+ (includeInstance: boolean,
+ msg: Message): {};
+ }
+}
+
+export class ExtensionFieldInfo {
+ fieldIndex: number;
+ fieldName: number;
+ ctor: typeof Message;
+ toObjectFn: Message.StaticToObject;
+ isRepeated: number;
+ constructor(fieldIndex: number,
+ fieldName: {[key: string]: number},
+ ctor: typeof Message,
+ toObjectFn: Message.StaticToObject,
+ isRepeated: number);
+ isMessageType(): boolean;
+}
+
+export class ExtensionFieldBinaryInfo {
+ fieldInfo: ExtensionFieldInfo;
+ binaryReaderFn: BinaryRead;
+ binaryWriterFn: BinaryWrite;
+ opt_binaryMessageSerializeFn: (msg: Message,
+ writer: BinaryWriter) => void;
+ opt_binaryMessageDeserializeFn: (msg: Message,
+ reader: BinaryReader) => Message;
+ opt_isPacked: boolean;
+ constructor(fieldInfo: ExtensionFieldInfo,
+ binaryReaderFn: BinaryRead,
+ binaryWriterFn: BinaryWrite,
+ opt_binaryMessageSerializeFn: (msg: Message,
+ writer: BinaryWriter) => void,
+ opt_binaryMessageDeserializeFn: (msg: Message,
+ reader: BinaryReader) => Message,
+ opt_isPacked: boolean);
+}
+
+export class Map {
+ constructor(arr: Array<[K, V]>,
+ valueCtor?: {new(init: any): V});
+ toArray(): Array<[K, V]>;
+ toObject(includeInstance: boolean,
+ valueToObject: (includeInstance: boolean) => any): Array<[K, V]>;
+ static fromObject(entries: Array<[K, V]>,
+ valueCtor: any,
+ valueFromObject: any): Map;
+ getLength(): number;
+ clear(): void;
+ del(key: K): boolean;
+ getEntryList(): Array<[K, V]>;
+ entries(): Map.Iterator<[K, V]>;
+ keys(): Map.Iterator;
+ forEach(callback: (entry: V,
+ key: K) => void,
+ thisArg?: {}): void;
+ set(key: K,
+ value: V): void;
+ get(key: K): (V | undefined);
+ has(key: K): boolean;
+}
+
+export namespace Map {
+ // This is implemented by jspb.Map.ArrayIteratorIterable_, but that class shouldn't be exported
+ interface Iterator {
+ next(): IteratorResult;
+ }
+ type IteratorResult = {
+ done: boolean,
+ value: T,
+ }
+}
+
+interface BinaryReadReader {
+ (msg: any,
+ binaryReader: BinaryReader): void;
+}
+
+interface BinaryRead {
+ (msg: any,
+ reader: BinaryReadReader): void;
+}
+
+interface BinaryWriteCallback {
+ (value: any,
+ binaryWriter: BinaryWriter): void;
+}
+
+interface BinaryWrite {
+ (fieldNumber: number,
+ value: any,
+ writerCallback: BinaryWriteCallback): void;
+}
+
+export class BinaryReader {
+ constructor(bytes?: ByteSource,
+ start?: number,
+ length?: number);
+ static alloc(bytes?: ByteSource,
+ start?: number,
+ length?: number): BinaryReader;
+ alloc(bytes?: ByteSource,
+ start?: number,
+ length?: number): BinaryReader;
+ free(): void;
+ getFieldCursor(): number;
+ getCursor(): number;
+ getBuffer(): Uint8Array;
+ getFieldNumber(): number;
+ getWireType(): BinaryConstants.WireType;
+ isEndGroup(): boolean;
+ getError(): boolean;
+ setBlock(bytes?: ByteSource,
+ start?: number,
+ length?: number): void;
+ reset(): void;
+ advance(count: number): void;
+ nextField(): boolean;
+ unskipHeader(): void;
+ skipMatchingFields(): void;
+ skipVarintField(): void;
+ skipDelimitedField(): void;
+ skipFixed32Field(): void;
+ skipFixed64Field(): void;
+ skipGroup(): void;
+ skipField(): void;
+ registerReadCallback(callbackName: string,
+ callback: (binaryReader: BinaryReader) => any): void;
+ runReadCallback(callbackName: string): any;
+ readAny(fieldType: BinaryConstants.FieldType): AnyFieldType;
+ readMessage: BinaryRead;
+ readGroup(field: number,
+ message: Message,
+ reader: BinaryReadReader): void;
+ getFieldDecoder(): BinaryDecoder;
+ readInt32(): number;
+ readInt32String(): string;
+ readInt64(): number;
+ readInt64String(): string;
+ readUint32(): number;
+ readUint32String(): string;
+ readUint64(): number;
+ readUint64String(): string;
+ readSint32(): number;
+ readSint64(): number;
+ readSint64String(): string;
+ readFixed32(): number;
+ readFixed64(): number;
+ readFixed64String(): string;
+ readSfixed32(): number;
+ readSfixed32String(): string;
+ readSfixed64(): number;
+ readSfixed64String(): string;
+ readFloat(): number;
+ readDouble(): number;
+ readBool(): boolean;
+ readEnum(): number;
+ readString(): string;
+ readBytes(): Uint8Array;
+ readVarintHash64(): string;
+ readFixedHash64(): string;
+ readPackedInt32(): number[];
+ readPackedInt32String(): string[];
+ readPackedInt64(): number[];
+ readPackedInt64String(): string[];
+ readPackedUint32(): number[];
+ readPackedUint32String(): string[];
+ readPackedUint64(): number[];
+ readPackedUint64String(): string[];
+ readPackedSint32(): number[];
+ readPackedSint64(): number[];
+ readPackedSint64String(): string[];
+ readPackedFixed32(): number[];
+ readPackedFixed64(): number[];
+ readPackedFixed64String(): string[];
+ readPackedSfixed32(): number[];
+ readPackedSfixed64(): number[];
+ readPackedSfixed64String(): string[];
+ readPackedFloat(): number[];
+ readPackedDouble(): number[];
+ readPackedBool(): boolean[];
+ readPackedEnum(): number[];
+ readPackedVarintHash64(): string[];
+ readPackedFixedHash64(): string[];
+}
+
+export class BinaryWriter {
+ constructor();
+ writeSerializedMessage(bytes: Uint8Array,
+ start: number,
+ end: number): void;
+ maybeWriteSerializedMessage(bytes?: Uint8Array,
+ start?: number,
+ end?: number): void;
+ reset(): void;
+ getResultBuffer(): Uint8Array;
+ getResultBase64String(): string;
+ beginSubMessage(field: number): void;
+ endSubMessage(field: number): void;
+ writeAny(fieldType: BinaryConstants.FieldType,
+ field: number,
+ value: AnyFieldType): void;
+ writeInt32(field: number,
+ value?: number): void;
+ writeInt32String(field: number,
+ value?: string): void;
+ writeInt64(field: number,
+ value?: number): void;
+ writeInt64String(field: number,
+ value?: string): void;
+ writeUint32(field: number,
+ value?: number): void;
+ writeUint32String(field: number,
+ value?: string): void;
+ writeUint64(field: number,
+ value?: number): void;
+ writeUint64String(field: number,
+ value?: string): void;
+ writeSint32(field: number,
+ value?: number): void;
+ writeSint64(field: number,
+ value?: number): void;
+ writeSint64String(field: number,
+ value?: string): void;
+ writeFixed32(field: number,
+ value?: number): void;
+ writeFixed64(field: number,
+ value?: number): void;
+ writeFixed64String(field: number,
+ value?: string): void;
+ writeSfixed32(field: number,
+ value?: number): void;
+ writeSfixed64(field: number,
+ value?: number): void;
+ writeSfixed64String(field: number,
+ value?: string): void;
+ writeFloat(field: number,
+ value?: number): void;
+ writeDouble(field: number,
+ value?: number): void;
+ writeBool(field: number,
+ value?: boolean): void;
+ writeEnum(field: number,
+ value?: number): void;
+ writeString(field: number,
+ value?: string): void;
+ writeBytes(field: number,
+ value?: ByteSource): void;
+ writeMessage: BinaryWrite;
+ writeGroup(field: number,
+ value: any,
+ writeCallback: BinaryWriteCallback): void;
+ writeFixedHash64(field: number,
+ value?: string): void;
+ writeVarintHash64(field: number,
+ value?: string): void;
+ writeRepeatedInt32(field: number,
+ value?: number[]): void;
+ writeRepeatedInt32String(field: number,
+ value?: string[]): void;
+ writeRepeatedInt64(field: number,
+ value?: number[]): void;
+ writeRepeatedInt64String(field: number,
+ value?: string[]): void;
+ writeRepeatedUint32(field: number,
+ value?: number[]): void;
+ writeRepeatedUint32String(field: number,
+ value?: string[]): void;
+ writeRepeatedUint64(field: number,
+ value?: number[]): void;
+ writeRepeatedUint64String(field: number,
+ value?: string[]): void;
+ writeRepeatedSint32(field: number,
+ value?: number[]): void;
+ writeRepeatedSint64(field: number,
+ value?: number[]): void;
+ writeRepeatedSint64String(field: number,
+ value?: string[]): void;
+ writeRepeatedFixed32(field: number,
+ value?: number[]): void;
+ writeRepeatedFixed64(field: number,
+ value?: number[]): void;
+ writeRepeatedFixed64String(field: number,
+ value?: string[]): void;
+ writeRepeatedSfixed32(field: number,
+ value?: number[]): void;
+ writeRepeatedSfixed64(field: number,
+ value?: number[]): void;
+ writeRepeatedSfixed64String(field: number,
+ value?: string[]): void;
+ writeRepeatedFloat(field: number,
+ value?: number[]): void;
+ writeRepeatedDouble(field: number,
+ value?: number[]): void;
+ writeRepeatedBool(field: number,
+ value?: boolean[]): void;
+ writeRepeatedEnum(field: number,
+ value?: number[]): void;
+ writeRepeatedString(field: number,
+ value?: string[]): void;
+ writeRepeatedBytes(field: number,
+ value?: ByteSource[]): void;
+ writeRepeatedMessage(field: number,
+ value: Message[],
+ writerCallback: BinaryWriteCallback): void;
+ writeRepeatedGroup(field: number,
+ value: Message[],
+ writerCallback: BinaryWriteCallback): void;
+ writeRepeatedFixedHash64(field: number,
+ value?: string[]): void;
+ writeRepeatedVarintHash64(field: number,
+ value?: string[]): void;
+ writePackedInt32(field: number,
+ value?: number[]): void;
+ writePackedInt32String(field: number,
+ value?: string[]): void;
+ writePackedInt64(field: number,
+ value?: number[]): void;
+ writePackedInt64String(field: number,
+ value?: string[]): void;
+ writePackedUint32(field: number,
+ value?: number[]): void;
+ writePackedUint32String(field: number,
+ value?: string[]): void;
+ writePackedUint64(field: number,
+ value?: number[]): void;
+ writePackedUint64String(field: number,
+ value?: string[]): void;
+ writePackedSint32(field: number,
+ value?: number[]): void;
+ writePackedSint64(field: number,
+ value?: number[]): void;
+ writePackedSint64String(field: number,
+ value?: string[]): void;
+ writePackedFixed32(field: number,
+ value?: number[]): void;
+ writePackedFixed64(field: number,
+ value?: number[]): void;
+ writePackedFixed64String(field: number,
+ value?: string[]): void;
+ writePackedSfixed32(field: number,
+ value?: number[]): void;
+ writePackedSfixed64(field: number,
+ value?: number[]): void;
+ writePackedSfixed64String(field: number,
+ value?: string[]): void;
+ writePackedFloat(field: number,
+ value?: number[]): void;
+ writePackedDouble(field: number,
+ value?: number[]): void;
+ writePackedBool(field: number,
+ value?: boolean[]): void;
+ writePackedEnum(field: number,
+ value?: number[]): void;
+ writePackedFixedHash64(field: number,
+ value?: string[]): void;
+ writePackedVarintHash64(field: number,
+ value?: string[]): void;
+}
+
+export class BinaryEncoder {
+ constructor();
+ length(): number;
+ end(): number[];
+ writeSplitVarint64(lowBits: number,
+ highBits: number): void;
+ writeSplitFixed64(lowBits: number,
+ highBits: number): void;
+ writeUnsignedVarint32(value: number): void;
+ writeSignedVarint32(value: number): void;
+ writeUnsignedVarint64(value: number): void;
+ writeSignedVarint64(value: number): void;
+ writeZigzagVarint32(value: number): void;
+ writeZigzagVarint64(value: number): void;
+ writeZigzagVarint64String(value: string): void;
+ writeUint8(value: number): void;
+ writeUint16(value: number): void;
+ writeUint32(value: number): void;
+ writeUint64(value: number): void;
+ writeInt8(value: number): void;
+ writeInt16(value: number): void;
+ writeInt32(value: number): void;
+ writeInt64(value: number): void;
+ writeInt64String(value: string): void;
+ writeFloat(value: number): void;
+ writeDouble(value: number): void;
+ writeBool(value: boolean): void;
+ writeEnum(value: number): void;
+ writeBytes(bytes: Uint8Array): void;
+ writeVarintHash64(hash: string): void;
+ writeFixedHash64(hash: string): void;
+ writeString(value: string): number;
+}
+
+export class BinaryDecoder {
+ constructor(bytes?: ByteSource,
+ start?: number,
+ length?: number)
+ static alloc(bytes?: ByteSource,
+ start?: number,
+ length?: number): BinaryDecoder;
+ free(): void;
+ clone(): BinaryDecoder;
+ clear(): void;
+ getBuffer(): Uint8Array;
+ setBlock(data: ByteSource,
+ start?: number,
+ length?: number): void;
+ getEnd(): number;
+ setEnd(end: number): void;
+ reset(): void;
+ getCursor(): number;
+ setCursor(cursor: number): void;
+ advance(count: number): void;
+ atEnd(): boolean;
+ pastEnd(): boolean;
+ getError(): boolean;
+ skipVarint(): void;
+ unskipVarint(value: number): void;
+ readUnsignedVarint32(): number;
+ readSignedVarint32(): number;
+ readUnsignedVarint32String(): number;
+ readSignedVarint32String(): number;
+ readZigzagVarint32(): number;
+ readUnsignedVarint64(): number;
+ readUnsignedVarint64String(): number;
+ readSignedVarint64(): number;
+ readSignedVarint64String(): number;
+ readZigzagVarint64(): number;
+ readZigzagVarint64String(): number;
+ readUint8(): number;
+ readUint16(): number;
+ readUint32(): number;
+ readUint64(): number;
+ readUint64String(): string;
+ readInt8(): number;
+ readInt16(): number;
+ readInt32(): number;
+ readInt64(): number;
+ readInt64String(): string;
+ readFloat(): number;
+ readDouble(): number;
+ readBool(): boolean;
+ readEnum(): number;
+ readString(length: number): string;
+ readStringWithLength(): string;
+ readBytes(length: number): Uint8Array;
+ readVarintHash64(): string;
+ readFixedHash64(): string;
+}
+
+export class BinaryIterator {
+ constructor(decoder?: BinaryDecoder,
+ next?: () => number|boolean|string|null,
+ elements?: Array)
+ static alloc(decoder?: BinaryDecoder,
+ next?: () => number|boolean|string|null,
+ elements?: Array): BinaryIterator;
+ free(): void;
+ clear(): void;
+ get(): (ScalarFieldType | null);
+ atEnd(): boolean;
+ next(): (ScalarFieldType | null);
+}
+
+export namespace BinaryConstants {
+ export enum FieldType {
+ INVALID = -1,
+ DOUBLE = 1,
+ FLOAT = 2,
+ INT64 = 3,
+ UINT64 = 4,
+ INT32 = 5,
+ FIXED64 = 6,
+ FIXED32 = 7,
+ BOOL = 8,
+ STRING = 9,
+ GROUP = 10,
+ MESSAGE = 11,
+ BYTES = 12,
+ UINT32 = 13,
+ ENUM = 14,
+ SFIXED32 = 15,
+ SFIXED64 = 16,
+ SINT32 = 17,
+ SINT64 = 18,
+ FHASH64 = 30,
+ VHASH64 = 31,
+ }
+
+ export enum WireType {
+ INVALID = -1,
+ VARINT = 0,
+ FIXED64 = 1,
+ DELIMITED = 2,
+ START_GROUP = 3,
+ END_GROUP = 4,
+ FIXED32 = 5,
+ }
+
+ const FieldTypeToWireType: (fieldType: FieldType) => WireType;
+
+ const INVALID_FIELD_NUMBER: number;
+ const FLOAT32_EPS: number;
+ const FLOAT32_MIN: number;
+ const FLOAT32_MAX: number;
+ const FLOAT64_EPS: number;
+ const FLOAT64_MIN: number;
+ const FLOAT64_MAX: number;
+ const TWO_TO_20: number;
+ const TWO_TO_23: number;
+ const TWO_TO_31: number;
+ const TWO_TO_32: number;
+ const TWO_TO_52: number;
+ const TWO_TO_63: number;
+ const TWO_TO_64: number;
+ const ZERO_HASH: string;
+}
+
+export namespace arith {
+ export class UInt64 {
+ lo: number;
+ hi: number;
+ constructor(lo: number,
+ hi: number);
+ cmp(other: UInt64): number;
+ rightShift(): UInt64;
+ leftShift(): UInt64;
+ msb(): boolean;
+ lsb(): boolean;
+ zero(): boolean;
+ add(other: UInt64): UInt64;
+ sub(other: UInt64): UInt64;
+ static mul32x32(a: number,
+ b: number): UInt64;
+ mul(a: number): UInt64;
+ div(divisor: number): [UInt64, UInt64];
+ toString(): string;
+ static fromString(str: string): UInt64;
+ clone(): UInt64;
+ }
+
+ export class Int64 {
+ lo: number;
+ hi: number;
+ constructor(lo: number,
+ hi: number);
+ add(other: Int64): Int64;
+ sub(other: Int64): Int64;
+ clone(): Int64;
+ toString(): string;
+ static fromString(str: string): Int64;
+ }
+}
+
+// jspb.utils package excluded as it likely shouldn't be called by user code
\ No newline at end of file
diff --git a/google-protobuf/tsconfig.json b/google-protobuf/tsconfig.json
new file mode 100644
index 0000000000..269fec20d9
--- /dev/null
+++ b/google-protobuf/tsconfig.json
@@ -0,0 +1,22 @@
+{
+ "compilerOptions": {
+ "module": "commonjs",
+ "lib": [
+ "es6"
+ ],
+ "noImplicitAny": true,
+ "noImplicitThis": true,
+ "strictNullChecks": true,
+ "baseUrl": "../",
+ "typeRoots": [
+ "../"
+ ],
+ "types": [],
+ "noEmit": true,
+ "forceConsistentCasingInFileNames": true
+ },
+ "files": [
+ "index.d.ts",
+ "google-protobuf-tests.ts"
+ ]
+}
\ No newline at end of file
diff --git a/google-protobuf/tslint.json b/google-protobuf/tslint.json
new file mode 100644
index 0000000000..fdc7cdc370
--- /dev/null
+++ b/google-protobuf/tslint.json
@@ -0,0 +1,3 @@
+{
+ "extends": "../tslint.json"
+}
\ No newline at end of file