UNPKG

15.2 kBTypeScriptView Raw
1// Type definitions for ProtoBuf.js 5.0.1
2// Project: https://github.com/dcodeIO/ProtoBuf.js
3// Definitions by: Panu Horsmalahti <https://github.com/panuhorsmalahti>
4// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
5
6/// <reference types="bytebuffer" />
7/// <reference types="node" />
8
9declare namespace ProtoBuf {
10 // ==========
11 // protobufjs/src/ProtoBuf.js
12
13 var Builder: Builder;
14 var Long: LongStatic;
15 var DotProto: DotProto;
16 var Reflect: Reflect;
17 var Util: Util;
18 var convertFieldsToCamelCase: boolean;
19
20 // var Lang: Lang; TODO: implement interface Lang
21
22 export function loadJson(json: string, builder?: ProtoBuilder | string | {},
23 filename?: string | {}): ProtoBuilder;
24
25 export function loadJsonFile(filename: string | {},
26 callback?: (error: any, builder: ProtoBuilder) => void,
27 builder?: ProtoBuilder): ProtoBuilder;
28
29 export function loadProto(proto: string, builder?: ProtoBuilder | string | {},
30 filename?: string | {}): ProtoBuilder;
31
32 export function loadProtoFile(filePath: string | {},
33 callback?: (error: any, builder: ProtoBuilder) => void,
34 builder?: ProtoBuilder): ProtoBuilder;
35
36 export function newBuilder(options?: {[key: string]: any}): ProtoBuilder;
37
38 export interface LongStatic {
39 new(low?: number, high?: number, unsigned?:boolean): Long;
40
41 MAX_UNSIGNED_VALUE: Long;
42 MAX_VALUE: Long;
43 MIN_VALUE: Long;
44 NEG_ONE: Long;
45 ONE: Long;
46 UONE: Long;
47 UZERO: Long;
48 ZERO: Long;
49
50 fromBits(lowBits: number, highBits: number, unsigned?: boolean): Long;
51 fromInt(value: number, unsigned?: boolean): Long;
52 fromNumber(value: number, unsigned?: boolean): Long;
53 fromString(str: string, unsigned?: boolean | number, radix?: number): Long;
54 fromValue(val: Long | number | string): Long;
55
56 isLong(obj: any): boolean;
57 }
58
59 // Based on https://github.com/dcodeIO/Long.js and https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/long/long.d.ts
60 export interface Long {
61 high: number;
62 low: number;
63 unsigned :boolean;
64
65 add(other: Long | number | string): Long;
66 and(other: Long | number | string): Long;
67 compare(other: Long | number | string): number;
68 div(divisor: Long | number | string): Long;
69 equals(other: Long | number | string): boolean;
70 getHighBits(): number;
71 getHighBitsUnsigned(): number;
72 getLowBits(): number;
73 getLowBitsUnsigned(): number;
74 getNumBitsAbs(): number;
75 greaterThan(other: Long | number | string): boolean;
76 greaterThanOrEqual(other: Long | number | string): boolean;
77 isEven(): boolean;
78 isNegative(): boolean;
79 isOdd(): boolean;
80 isPositive(): boolean;
81 isZero(): boolean;
82 lessThan(other: Long | number | string): boolean;
83 lessThanOrEqual(other: Long | number | string): boolean;
84 modulo(divisor: Long | number | string): Long;
85 multiply(multiplier: Long | number | string): Long;
86 negate(): Long;
87 not(): Long;
88 notEquals(other: Long | number | string): boolean;
89 or(other: Long | number | string): Long;
90 shiftLeft(numBits: number | Long): Long;
91 shiftRight(numBits: number | Long): Long;
92 shiftRightUnsigned(numBits: number | Long): Long;
93 subtract(other: Long | number | string): Long;
94 toInt(): number;
95 toNumber(): number;
96 toSigned(): Long;
97 toString(radix?: number): string;
98 toUnsigned(): Long;
99 xor(other: Long | number | string): Long;
100 }
101
102 // ==========
103 // protobufjs/src/ProtoBuf/Builder.js
104
105 export interface Builder {
106 new(options?: {[key: string]: any}): ProtoBuilder;
107 Message: Message;
108 Service: Service;
109 isValidMessage(def: {[key: string]: any}): boolean;
110 isValidMessageField(def: {[key: string]: any}): boolean;
111 isValidEnum(def: {[key: string]: any}): boolean;
112 isValidService(def: {[key: string]: any}): boolean;
113 isValidExtend(def: {[key: string]: any}): boolean;
114 }
115
116 /**
117 * TODO: Confirm that message needs no further implementation
118 */
119 export interface Message {
120 new(values?: {[key: string]: any}, var_args?: string[]): Message;
121 $add(key: string, value: any, noAssert?: boolean): Message;
122 $get<T>(key: string): T;
123 $set(key: string | {[key: string]: any}, value?: any | boolean, noAssert?: boolean): void;
124 add(key: string, value: any, noAssert?: boolean): Message;
125 calculate(): number;
126 encode(buffer?: ByteBuffer | boolean, noVerify?: boolean): ByteBuffer;
127 encode64(): string;
128 encodeAB(): ArrayBuffer;
129 encodeNB(): Buffer;
130 encodeHex(): string;
131 encodeJSON(): string;
132 encodeDelimited(buffer?: ByteBuffer | boolean, noVerify?: boolean): ByteBuffer;
133 get<T>(key: string, noAssert?: boolean): T;
134 set(key: string | {[key: string]: any}, value?: any | boolean, noAssert?: boolean): void;
135 toArrayBuffer(): ArrayBuffer;
136 toBase64(): string;
137 toBuffer(): Buffer;
138 toHex(): string;
139 toRaw(binaryAsBase64?: boolean, longsAsStrings?: boolean): {[key: string]: any};
140 toString(): string;
141 [field: string]: any;
142 }
143
144 /**
145 * TODO: Implement service interface
146 */
147 export interface Service {
148 new(rpcImpl?: Function): Service;
149 }
150
151
152 // ==========
153 // meta objects for constructing protobufs
154
155 export interface ProtoBuilder {
156 ns: ReflectNamespace;
157 ptr: ReflectNamespace;
158 resolved: boolean;
159 result: ProtoBuf;
160 files: string[];
161 importRoot: string;
162 options: {[key: string]: any};
163 syntax: string;
164 reset(): void;
165 define(pkg: string, options?: {[key: string]: any}): ProtoBuilder;
166 create(defs?: {[key: string]: any}[]): ProtoBuilder;
167 resolveAll(): void;
168 build(path?: string | [string]): MetaMessage<Message>;
169 build<T>(path?: string | [string]): MetaMessage<T>;
170 lookup(path?: string): ReflectT;
171 }
172
173 export interface ProtoBuf {
174 [package: string]: {[key: string]: MetaMessage<Message> | any};
175 }
176
177 export interface MetaMessage<T> {
178 new(values?: {[key: string]: any}, var_args?: string[]): T & Message;
179 decode(buffer: ArrayBuffer | ByteBuffer | Buffer | string, length?: number | string, enc?: string): T & Message;
180 decodeDelimited(buffer: ByteBuffer | ArrayBuffer | Buffer | string, enc?: string): T & Message;
181 decode64(str: string): T & Message;
182 decodeHex(str: string): T & Message;
183 decodeJSON(str: string): T & Message;
184 }
185
186 // ==========
187 // protobufjs/src/ProtoBuf/DotProto.js
188
189 export interface DotProto {
190 Parser: Parser;
191 Tokenizer: Tokenizer;
192 }
193
194 export interface Parser {
195 new(proto: string): Parser;
196 tn: Tokenizer;
197 parse(): MetaProto;
198 toString(): string;
199 }
200
201 export interface Tokenizer {
202 new(proto: string): Tokenizer;
203 source: string;
204 index: number;
205 line: number;
206 stack: string[];
207 readingString: boolean;
208 stringEndsWith: string;
209 next(): string;
210 peek(): string;
211 toString(): string;
212 }
213
214 // ==========
215 // proto meta information returned by the Parser
216
217 export interface MetaProto {
218 package: string;
219 messages: ProtoMessage[];
220 enums: ProtoEnum[];
221 imports: string[];
222 options: {[key: string]: any};
223 services: ProtoService[];
224 }
225
226 export interface ProtoEnum {
227 name: string;
228 values: ProtoEnumValue[];
229 options: {[key: string]: any};
230 }
231
232 export interface ProtoEnumValue {
233 name: string;
234 id: string;
235 }
236
237 export interface ProtoField {
238 rule: string;
239 options: {[key: string]: any};
240 type: string;
241 name: string;
242 id: number;
243 oneof?: string;
244 }
245
246 export interface ProtoMessage {
247 name: string;
248 isGroup?: boolean;
249 fields: ProtoField[];
250 enums: ProtoEnum[];
251 messages: ProtoMessage[];
252 options: {[key: string]: any};
253 oneofs: {[key: string]:number[]};
254 }
255
256 export interface ProtoRpcService {
257 request: string;
258 response: string;
259 options: {[key: string]: any};
260 }
261
262 export interface ProtoService {
263 name: string;
264 rpc: {[key: string]:ProtoRpcService};
265 options: {[key: string]: any};
266 }
267
268 // ==========
269 // protobufjs/src/ProtoBuf/Util.js
270
271 export interface Util {
272 IS_NODE: boolean
273 fetch(path: string, callback?: (data: string) => any): string;
274 toCamelCase(str: string): string;
275 XHR(): XMLHttpRequest;
276 }
277
278 // ==========
279 // protobufjs/src/ProtoBuf/Reflect.js
280
281 export interface Reflect {
282 T: ReflectT;
283 Namespace: ReflectNamespace;
284 Message: ReflectMessage;
285 Enum: ReflectEnum;
286 Extension: ReflectExtension;
287 Service: ReflectService;
288 }
289
290 export interface ReflectT {
291 new(builder?: ProtoBuilder, parent?: ReflectT, name?: string): ReflectT;
292 builder: ProtoBuilder;
293 parent: ReflectT;
294 name: string;
295 fqn(): string;
296 toString(includeClass?: boolean): string;
297 }
298
299 export interface ReflectNamespace extends ReflectT {
300 new(builder?: ProtoBuilder, parent?: ReflectNamespace, name?: string,
301 options?: {[key: string]: any}): ReflectNamespace;
302 className: string;
303 children: ReflectT[];
304 options: {[key: string]: any};
305 syntax: string;
306 getChildren(type?: ReflectT): ReflectT[];
307 addChild(child: ReflectT): void;
308 getChild(nameOrId?: string | number): ReflectT;
309 resolve(qn: string, excludeFields?: boolean): ReflectNamespace;
310 build(): ProtoBuf;
311 buildOpt(): {[key: string]: any};
312 getOption(name?: string): any;
313 }
314
315 export interface ReflectMessage extends ReflectNamespace {
316 new(builder?: ProtoBuilder, parent?: ReflectNamespace, name?: string,
317 options?: {[key: string]: any}, isGroup?: boolean): ReflectMessage;
318 Field: ReflectField; // NOTE: only for new ProtoBuf.Reflect.Message.Field();
319 ExtensionField: ReflectExtensionField; // NOTE: only for
320 // new ProtoBuf.Reflect.Message.ExtensionField();
321 OneOf: ReflectOneOf; // NOTE: only for new ProtoBuf.Reflect.Message.OneOf();
322 extensions: number[];
323 clazz(): MetaMessage<Message>;
324 isGroup: boolean;
325 build(rebuild?: boolean): MetaMessage<Message>|any;
326 build<T>(rebuild?: boolean): MetaMessage<T>|any;
327 encode(message: Message, buffer: Buffer, noVerify?: boolean): Buffer;
328 calculate(message: Message): number;
329 decode(buffer: Buffer, length?: number, expectedGroupEndId?: number): Message;
330 }
331
332 export interface ReflectEnum extends ReflectNamespace {
333 new(builder?: ProtoBuilder, parent?: ReflectT, name?: string,
334 options?: {[key: string]: any}): ReflectEnum;
335 Value: ReflectValue; // NOTE: only for new ProtoBuf.Reflect.Enum.Value();
336 object: {[key: string]:number};
337 build(): {[key: string]: any};
338 }
339
340 export interface ReflectExtension extends ReflectT {
341 new(builder?: ProtoBuilder, parent?: ReflectT, name?: string,
342 field?: ReflectField): ReflectExtension;
343 field: ReflectField;
344 }
345
346 export interface ReflectService extends ReflectNamespace {
347 new(): ReflectService;
348 Method: ReflectMethod; // NOTE: only for new ProtoBuf.Reflect.Service.Method();
349 RPCMethod: ReflectRPCMethod; // NOTE: only for new ProtoBuf.Reflect.Service.RPCMethod();
350 clazz(): Function;
351 build(rebuild?: boolean): Function|any;
352 }
353
354 // TODO: check that the runtime instance of this type reflects this definition
355 export interface ReflectField extends ReflectT {
356 new(builder: ProtoBuilder, message: ReflectMessage, rule: string, type: string,
357 name: string, id: number, options: {[key: string]: any}, oneof: ReflectOneOf): ReflectField;
358 className: string;
359 required: boolean;
360 repeated: boolean;
361 type: string | WireTuple;
362 resolvedType: ReflectT;
363 id: number;
364 options: {[key: string]: any};
365 defaultValue: any;
366 oneof: ReflectOneOf;
367 originalName: string;
368 build(): {[key: string]: any};
369 mkLong(value: any, unsigned?: boolean): number;
370 verifyValue(value: any, skipRepeated?: boolean): any;
371 encode(value: any, buffer: Buffer): Buffer;
372 encodeValue(value: any, buffer: Buffer): Buffer;
373 calculate(value: any): number;
374 calculateValue(value: any): number;
375 decode(wireType: number, buffer: Buffer, skipRepeated?: boolean): any;
376 }
377
378 export interface WireTuple {
379 name: string;
380 wireType: number;
381 }
382
383 // TODO: check that the runtime instance of this type reflects this definition
384 export interface ReflectExtensionField extends ReflectField {
385 new(builder: ProtoBuilder, message: ReflectMessage, rule: string, type: string,
386 name: string, id: number, options: {[key: string]: any}): ReflectExtensionField;
387 extension: ReflectExtension;
388 }
389
390 export interface ReflectOneOf extends ReflectT {
391 new(builder?: ProtoBuilder, message?: ReflectMessage, name?: string): ReflectOneOf;
392 fields: ReflectField[];
393 }
394
395 export interface ReflectValue extends ReflectT {
396 new(builder?: ProtoBuilder, enm?: ReflectEnum, name?: string, id?: number): ReflectValue;
397 className: string;
398 id: number;
399 }
400
401 export interface ReflectMethod extends ReflectT {
402 new(builder?: ProtoBuilder, svc?: ReflectService, name?: string,
403 options?: {[key: string]: any}): ReflectMethod;
404 className: string;
405 options: {[key: string]: any};
406 buildOpt(): {[key: string]: any};
407 }
408
409 export interface ReflectRPCMethod extends ReflectMethod {
410 new(builder?: ProtoBuilder, svc?: ReflectService, name?: string, request?: string,
411 response?: string, options?: {[key: string]: any}): ReflectRPCMethod;
412 requestName: string;
413 responseName: string;
414 resolvedRequestType: ReflectMessage;
415 resolvedResponseType: ReflectMessage;
416 }
417
418}
419
420declare module "protobufjs" {
421 export = ProtoBuf;
422}
423
424declare module "protobufjs/dist/protobuf-light" {
425 export = ProtoBuf;
426}