UNPKG

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