2740 lines
85 KiB
TypeScript
2740 lines
85 KiB
TypeScript
// DO NOT EDIT! This is a generated file. Edit the JSDoc in src/*.js instead and run 'npm run types'.
|
|
|
|
export as namespace protobuf;
|
|
|
|
/**
|
|
* Provides common type definitions.
|
|
* Can also be used to provide additional google types or your own custom types.
|
|
* @param name Short name as in `google/protobuf/[name].proto` or full file name
|
|
* @param json JSON definition within `google.protobuf` if a short name, otherwise the file's root definition
|
|
*/
|
|
export function common(name: string, json: { [k: string]: any }): void;
|
|
|
|
export namespace common {
|
|
|
|
/** Properties of a google.protobuf.Any message. */
|
|
interface IAny {
|
|
typeUrl?: string;
|
|
bytes?: Uint8Array;
|
|
}
|
|
|
|
/** Properties of a google.protobuf.Duration message. */
|
|
interface IDuration {
|
|
seconds?: (number|Long);
|
|
nanos?: number;
|
|
}
|
|
|
|
/** Properties of a google.protobuf.Timestamp message. */
|
|
interface ITimestamp {
|
|
seconds?: (number|Long);
|
|
nanos?: number;
|
|
}
|
|
|
|
/** Properties of a google.protobuf.Empty message. */
|
|
interface IEmpty {
|
|
}
|
|
|
|
/** Properties of a google.protobuf.Struct message. */
|
|
interface IStruct {
|
|
fields?: { [k: string]: IValue };
|
|
}
|
|
|
|
/** Properties of a google.protobuf.Value message. */
|
|
interface IValue {
|
|
kind?: string;
|
|
nullValue?: 0;
|
|
numberValue?: number;
|
|
stringValue?: string;
|
|
boolValue?: boolean;
|
|
structValue?: IStruct;
|
|
listValue?: IListValue;
|
|
}
|
|
|
|
/** Properties of a google.protobuf.ListValue message. */
|
|
interface IListValue {
|
|
values?: IValue[];
|
|
}
|
|
|
|
/** Properties of a google.protobuf.DoubleValue message. */
|
|
interface IDoubleValue {
|
|
value?: number;
|
|
}
|
|
|
|
/** Properties of a google.protobuf.FloatValue message. */
|
|
interface IFloatValue {
|
|
value?: number;
|
|
}
|
|
|
|
/** Properties of a google.protobuf.Int64Value message. */
|
|
interface IInt64Value {
|
|
value?: (number|Long);
|
|
}
|
|
|
|
/** Properties of a google.protobuf.UInt64Value message. */
|
|
interface IUInt64Value {
|
|
value?: (number|Long);
|
|
}
|
|
|
|
/** Properties of a google.protobuf.Int32Value message. */
|
|
interface IInt32Value {
|
|
value?: number;
|
|
}
|
|
|
|
/** Properties of a google.protobuf.UInt32Value message. */
|
|
interface IUInt32Value {
|
|
value?: number;
|
|
}
|
|
|
|
/** Properties of a google.protobuf.BoolValue message. */
|
|
interface IBoolValue {
|
|
value?: boolean;
|
|
}
|
|
|
|
/** Properties of a google.protobuf.StringValue message. */
|
|
interface IStringValue {
|
|
value?: string;
|
|
}
|
|
|
|
/** Properties of a google.protobuf.BytesValue message. */
|
|
interface IBytesValue {
|
|
value?: Uint8Array;
|
|
}
|
|
|
|
/**
|
|
* Gets the root definition of the specified common proto file.
|
|
*
|
|
* Bundled definitions are:
|
|
* - google/protobuf/any.proto
|
|
* - google/protobuf/duration.proto
|
|
* - google/protobuf/empty.proto
|
|
* - google/protobuf/field_mask.proto
|
|
* - google/protobuf/struct.proto
|
|
* - google/protobuf/timestamp.proto
|
|
* - google/protobuf/wrappers.proto
|
|
*
|
|
* @param file Proto file name
|
|
* @returns Root definition or `null` if not defined
|
|
*/
|
|
function get(file: string): (INamespace|null);
|
|
}
|
|
|
|
/** Runtime message from/to plain object converters. */
|
|
export namespace converter {
|
|
|
|
/**
|
|
* Generates a plain object to runtime message converter specific to the specified message type.
|
|
* @param mtype Message type
|
|
* @returns Codegen instance
|
|
*/
|
|
function fromObject(mtype: Type): Codegen;
|
|
|
|
/**
|
|
* Generates a runtime message to plain object converter specific to the specified message type.
|
|
* @param mtype Message type
|
|
* @returns Codegen instance
|
|
*/
|
|
function toObject(mtype: Type): Codegen;
|
|
}
|
|
|
|
/**
|
|
* Generates a decoder specific to the specified message type.
|
|
* @param mtype Message type
|
|
* @returns Codegen instance
|
|
*/
|
|
export function decoder(mtype: Type): Codegen;
|
|
|
|
/**
|
|
* Generates an encoder specific to the specified message type.
|
|
* @param mtype Message type
|
|
* @returns Codegen instance
|
|
*/
|
|
export function encoder(mtype: Type): Codegen;
|
|
|
|
/** Reflected enum. */
|
|
export class Enum extends ReflectionObject {
|
|
|
|
/**
|
|
* Constructs a new enum instance.
|
|
* @param name Unique name within its namespace
|
|
* @param [values] Enum values as an object, by name
|
|
* @param [options] Declared options
|
|
* @param [comment] The comment for this enum
|
|
* @param [comments] The value comments for this enum
|
|
*/
|
|
constructor(name: string, values?: { [k: string]: number }, options?: { [k: string]: any }, comment?: string, comments?: { [k: string]: string });
|
|
|
|
/** Enum values by id. */
|
|
public valuesById: { [k: number]: string };
|
|
|
|
/** Enum values by name. */
|
|
public values: { [k: string]: number };
|
|
|
|
/** Enum comment text. */
|
|
public comment: (string|null);
|
|
|
|
/** Value comment texts, if any. */
|
|
public comments: { [k: string]: string };
|
|
|
|
/** Reserved ranges, if any. */
|
|
public reserved: (number[]|string)[];
|
|
|
|
/**
|
|
* Constructs an enum from an enum descriptor.
|
|
* @param name Enum name
|
|
* @param json Enum descriptor
|
|
* @returns Created enum
|
|
* @throws {TypeError} If arguments are invalid
|
|
*/
|
|
public static fromJSON(name: string, json: IEnum): Enum;
|
|
|
|
/**
|
|
* Converts this enum to an enum descriptor.
|
|
* @param [toJSONOptions] JSON conversion options
|
|
* @returns Enum descriptor
|
|
*/
|
|
public toJSON(toJSONOptions?: IToJSONOptions): IEnum;
|
|
|
|
/**
|
|
* Adds a value to this enum.
|
|
* @param name Value name
|
|
* @param id Value id
|
|
* @param [comment] Comment, if any
|
|
* @returns `this`
|
|
* @throws {TypeError} If arguments are invalid
|
|
* @throws {Error} If there is already a value with this name or id
|
|
*/
|
|
public add(name: string, id: number, comment?: string): Enum;
|
|
|
|
/**
|
|
* Removes a value from this enum
|
|
* @param name Value name
|
|
* @returns `this`
|
|
* @throws {TypeError} If arguments are invalid
|
|
* @throws {Error} If `name` is not a name of this enum
|
|
*/
|
|
public remove(name: string): Enum;
|
|
|
|
/**
|
|
* Tests if the specified id is reserved.
|
|
* @param id Id to test
|
|
* @returns `true` if reserved, otherwise `false`
|
|
*/
|
|
public isReservedId(id: number): boolean;
|
|
|
|
/**
|
|
* Tests if the specified name is reserved.
|
|
* @param name Name to test
|
|
* @returns `true` if reserved, otherwise `false`
|
|
*/
|
|
public isReservedName(name: string): boolean;
|
|
}
|
|
|
|
/** Enum descriptor. */
|
|
export interface IEnum {
|
|
|
|
/** Enum values */
|
|
values: { [k: string]: number };
|
|
|
|
/** Enum options */
|
|
options?: { [k: string]: any };
|
|
}
|
|
|
|
/** Reflected message field. */
|
|
export class Field extends FieldBase {
|
|
|
|
/**
|
|
* Constructs a new message field instance. Note that {@link MapField|map fields} have their own class.
|
|
* @param name Unique name within its namespace
|
|
* @param id Unique id within its namespace
|
|
* @param type Value type
|
|
* @param [rule="optional"] Field rule
|
|
* @param [extend] Extended type if different from parent
|
|
* @param [options] Declared options
|
|
*/
|
|
constructor(name: string, id: number, type: string, rule?: (string|{ [k: string]: any }), extend?: (string|{ [k: string]: any }), options?: { [k: string]: any });
|
|
|
|
/**
|
|
* Constructs a field from a field descriptor.
|
|
* @param name Field name
|
|
* @param json Field descriptor
|
|
* @returns Created field
|
|
* @throws {TypeError} If arguments are invalid
|
|
*/
|
|
public static fromJSON(name: string, json: IField): Field;
|
|
|
|
/** Determines whether this field is packed. Only relevant when repeated and working with proto2. */
|
|
public readonly packed: boolean;
|
|
|
|
/**
|
|
* Field decorator (TypeScript).
|
|
* @param fieldId Field id
|
|
* @param fieldType Field type
|
|
* @param [fieldRule="optional"] Field rule
|
|
* @param [defaultValue] Default value
|
|
* @returns Decorator function
|
|
*/
|
|
public static d<T extends number | number[] | Long | Long[] | string | string[] | boolean | boolean[] | Uint8Array | Uint8Array[] | Buffer | Buffer[]>(fieldId: number, fieldType: ("double"|"float"|"int32"|"uint32"|"sint32"|"fixed32"|"sfixed32"|"int64"|"uint64"|"sint64"|"fixed64"|"sfixed64"|"string"|"bool"|"bytes"|object), fieldRule?: ("optional"|"required"|"repeated"), defaultValue?: T): FieldDecorator;
|
|
|
|
/**
|
|
* Field decorator (TypeScript).
|
|
* @param fieldId Field id
|
|
* @param fieldType Field type
|
|
* @param [fieldRule="optional"] Field rule
|
|
* @returns Decorator function
|
|
*/
|
|
public static d<T extends Message<T>>(fieldId: number, fieldType: (Constructor<T>|string), fieldRule?: ("optional"|"required"|"repeated")): FieldDecorator;
|
|
}
|
|
|
|
/** Base class of all reflected message fields. This is not an actual class but here for the sake of having consistent type definitions. */
|
|
export class FieldBase extends ReflectionObject {
|
|
|
|
/**
|
|
* Not an actual constructor. Use {@link Field} instead.
|
|
* @param name Unique name within its namespace
|
|
* @param id Unique id within its namespace
|
|
* @param type Value type
|
|
* @param [rule="optional"] Field rule
|
|
* @param [extend] Extended type if different from parent
|
|
* @param [options] Declared options
|
|
* @param [comment] Comment associated with this field
|
|
*/
|
|
constructor(name: string, id: number, type: string, rule?: (string|{ [k: string]: any }), extend?: (string|{ [k: string]: any }), options?: { [k: string]: any }, comment?: string);
|
|
|
|
/** Field rule, if any. */
|
|
public rule?: string;
|
|
|
|
/** Field type. */
|
|
public type: string;
|
|
|
|
/** Unique field id. */
|
|
public id: number;
|
|
|
|
/** Extended type if different from parent. */
|
|
public extend?: string;
|
|
|
|
/** Whether this field is required. */
|
|
public required: boolean;
|
|
|
|
/** Whether this field is optional. */
|
|
public optional: boolean;
|
|
|
|
/** Whether this field is repeated. */
|
|
public repeated: boolean;
|
|
|
|
/** Whether this field is a map or not. */
|
|
public map: boolean;
|
|
|
|
/** Message this field belongs to. */
|
|
public message: (Type|null);
|
|
|
|
/** OneOf this field belongs to, if any, */
|
|
public partOf: (OneOf|null);
|
|
|
|
/** The field type's default value. */
|
|
public typeDefault: any;
|
|
|
|
/** The field's default value on prototypes. */
|
|
public defaultValue: any;
|
|
|
|
/** Whether this field's value should be treated as a long. */
|
|
public long: boolean;
|
|
|
|
/** Whether this field's value is a buffer. */
|
|
public bytes: boolean;
|
|
|
|
/** Resolved type if not a basic type. */
|
|
public resolvedType: (Type|Enum|null);
|
|
|
|
/** Sister-field within the extended type if a declaring extension field. */
|
|
public extensionField: (Field|null);
|
|
|
|
/** Sister-field within the declaring namespace if an extended field. */
|
|
public declaringField: (Field|null);
|
|
|
|
/** Comment for this field. */
|
|
public comment: (string|null);
|
|
|
|
/**
|
|
* Converts this field to a field descriptor.
|
|
* @param [toJSONOptions] JSON conversion options
|
|
* @returns Field descriptor
|
|
*/
|
|
public toJSON(toJSONOptions?: IToJSONOptions): IField;
|
|
|
|
/**
|
|
* Resolves this field's type references.
|
|
* @returns `this`
|
|
* @throws {Error} If any reference cannot be resolved
|
|
*/
|
|
public resolve(): Field;
|
|
}
|
|
|
|
/** Field descriptor. */
|
|
export interface IField {
|
|
|
|
/** Field rule */
|
|
rule?: string;
|
|
|
|
/** Field type */
|
|
type: string;
|
|
|
|
/** Field id */
|
|
id: number;
|
|
|
|
/** Field options */
|
|
options?: { [k: string]: any };
|
|
}
|
|
|
|
/** Extension field descriptor. */
|
|
export interface IExtensionField extends IField {
|
|
|
|
/** Extended type */
|
|
extend: string;
|
|
}
|
|
|
|
/**
|
|
* Decorator function as returned by {@link Field.d} and {@link MapField.d} (TypeScript).
|
|
* @param prototype Target prototype
|
|
* @param fieldName Field name
|
|
*/
|
|
type FieldDecorator = (prototype: object, fieldName: string) => void;
|
|
|
|
/**
|
|
* A node-style callback as used by {@link load} and {@link Root#load}.
|
|
* @param error Error, if any, otherwise `null`
|
|
* @param [root] Root, if there hasn't been an error
|
|
*/
|
|
type LoadCallback = (error: (Error|null), root?: Root) => void;
|
|
|
|
/**
|
|
* Loads one or multiple .proto or preprocessed .json files into a common root namespace and calls the callback.
|
|
* @param filename One or multiple files to load
|
|
* @param root Root namespace, defaults to create a new one if omitted.
|
|
* @param callback Callback function
|
|
* @see {@link Root#load}
|
|
*/
|
|
export function load(filename: (string|string[]), root: Root, callback: LoadCallback): void;
|
|
|
|
/**
|
|
* Loads one or multiple .proto or preprocessed .json files into a common root namespace and calls the callback.
|
|
* @param filename One or multiple files to load
|
|
* @param callback Callback function
|
|
* @see {@link Root#load}
|
|
*/
|
|
export function load(filename: (string|string[]), callback: LoadCallback): void;
|
|
|
|
/**
|
|
* Loads one or multiple .proto or preprocessed .json files into a common root namespace and returns a promise.
|
|
* @param filename One or multiple files to load
|
|
* @param [root] Root namespace, defaults to create a new one if omitted.
|
|
* @returns Promise
|
|
* @see {@link Root#load}
|
|
*/
|
|
export function load(filename: (string|string[]), root?: Root): Promise<Root>;
|
|
|
|
/**
|
|
* Synchronously loads one or multiple .proto or preprocessed .json files into a common root namespace (node only).
|
|
* @param filename One or multiple files to load
|
|
* @param [root] Root namespace, defaults to create a new one if omitted.
|
|
* @returns Root namespace
|
|
* @throws {Error} If synchronous fetching is not supported (i.e. in browsers) or if a file's syntax is invalid
|
|
* @see {@link Root#loadSync}
|
|
*/
|
|
export function loadSync(filename: (string|string[]), root?: Root): Root;
|
|
|
|
/** Build type, one of `"full"`, `"light"` or `"minimal"`. */
|
|
export const build: string;
|
|
|
|
/** Reconfigures the library according to the environment. */
|
|
export function configure(): void;
|
|
|
|
/** Reflected map field. */
|
|
export class MapField extends FieldBase {
|
|
|
|
/**
|
|
* Constructs a new map field instance.
|
|
* @param name Unique name within its namespace
|
|
* @param id Unique id within its namespace
|
|
* @param keyType Key type
|
|
* @param type Value type
|
|
* @param [options] Declared options
|
|
* @param [comment] Comment associated with this field
|
|
*/
|
|
constructor(name: string, id: number, keyType: string, type: string, options?: { [k: string]: any }, comment?: string);
|
|
|
|
/** Key type. */
|
|
public keyType: string;
|
|
|
|
/** Resolved key type if not a basic type. */
|
|
public resolvedKeyType: (ReflectionObject|null);
|
|
|
|
/**
|
|
* Constructs a map field from a map field descriptor.
|
|
* @param name Field name
|
|
* @param json Map field descriptor
|
|
* @returns Created map field
|
|
* @throws {TypeError} If arguments are invalid
|
|
*/
|
|
public static fromJSON(name: string, json: IMapField): MapField;
|
|
|
|
/**
|
|
* Converts this map field to a map field descriptor.
|
|
* @param [toJSONOptions] JSON conversion options
|
|
* @returns Map field descriptor
|
|
*/
|
|
public toJSON(toJSONOptions?: IToJSONOptions): IMapField;
|
|
|
|
/**
|
|
* Map field decorator (TypeScript).
|
|
* @param fieldId Field id
|
|
* @param fieldKeyType Field key type
|
|
* @param fieldValueType Field value type
|
|
* @returns Decorator function
|
|
*/
|
|
public static d<T extends { [key: string]: number | Long | string | boolean | Uint8Array | Buffer | number[] | Message<{}> }>(fieldId: number, fieldKeyType: ("int32"|"uint32"|"sint32"|"fixed32"|"sfixed32"|"int64"|"uint64"|"sint64"|"fixed64"|"sfixed64"|"bool"|"string"), fieldValueType: ("double"|"float"|"int32"|"uint32"|"sint32"|"fixed32"|"sfixed32"|"int64"|"uint64"|"sint64"|"fixed64"|"sfixed64"|"bool"|"string"|"bytes"|object|Constructor<{}>)): FieldDecorator;
|
|
}
|
|
|
|
/** Map field descriptor. */
|
|
export interface IMapField extends IField {
|
|
|
|
/** Key type */
|
|
keyType: string;
|
|
}
|
|
|
|
/** Extension map field descriptor. */
|
|
export interface IExtensionMapField extends IMapField {
|
|
|
|
/** Extended type */
|
|
extend: string;
|
|
}
|
|
|
|
/** Abstract runtime message. */
|
|
export class Message<T extends object = object> {
|
|
|
|
/**
|
|
* Constructs a new message instance.
|
|
* @param [properties] Properties to set
|
|
*/
|
|
constructor(properties?: Properties<T>);
|
|
|
|
/** Reference to the reflected type. */
|
|
public static readonly $type: Type;
|
|
|
|
/** Reference to the reflected type. */
|
|
public readonly $type: Type;
|
|
|
|
/**
|
|
* Creates a new message of this type using the specified properties.
|
|
* @param [properties] Properties to set
|
|
* @returns Message instance
|
|
*/
|
|
public static create<T extends Message<T>>(this: Constructor<T>, properties?: { [k: string]: any }): Message<T>;
|
|
|
|
/**
|
|
* Encodes a message of this type.
|
|
* @param message Message to encode
|
|
* @param [writer] Writer to use
|
|
* @returns Writer
|
|
*/
|
|
public static encode<T extends Message<T>>(this: Constructor<T>, message: (T|{ [k: string]: any }), writer?: Writer): Writer;
|
|
|
|
/**
|
|
* Encodes a message of this type preceeded by its length as a varint.
|
|
* @param message Message to encode
|
|
* @param [writer] Writer to use
|
|
* @returns Writer
|
|
*/
|
|
public static encodeDelimited<T extends Message<T>>(this: Constructor<T>, message: (T|{ [k: string]: any }), writer?: Writer): Writer;
|
|
|
|
/**
|
|
* Decodes a message of this type.
|
|
* @param reader Reader or buffer to decode
|
|
* @returns Decoded message
|
|
*/
|
|
public static decode<T extends Message<T>>(this: Constructor<T>, reader: (Reader|Uint8Array)): T;
|
|
|
|
/**
|
|
* Decodes a message of this type preceeded by its length as a varint.
|
|
* @param reader Reader or buffer to decode
|
|
* @returns Decoded message
|
|
*/
|
|
public static decodeDelimited<T extends Message<T>>(this: Constructor<T>, reader: (Reader|Uint8Array)): T;
|
|
|
|
/**
|
|
* Verifies a message of this type.
|
|
* @param message Plain object to verify
|
|
* @returns `null` if valid, otherwise the reason why it is not
|
|
*/
|
|
public static verify(message: { [k: string]: any }): (string|null);
|
|
|
|
/**
|
|
* Creates a new message of this type from a plain object. Also converts values to their respective internal types.
|
|
* @param object Plain object
|
|
* @returns Message instance
|
|
*/
|
|
public static fromObject<T extends Message<T>>(this: Constructor<T>, object: { [k: string]: any }): T;
|
|
|
|
/**
|
|
* Creates a plain object from a message of this type. Also converts values to other types if specified.
|
|
* @param message Message instance
|
|
* @param [options] Conversion options
|
|
* @returns Plain object
|
|
*/
|
|
public static toObject<T extends Message<T>>(this: Constructor<T>, message: T, options?: IConversionOptions): { [k: string]: any };
|
|
|
|
/**
|
|
* Converts this message to JSON.
|
|
* @returns JSON object
|
|
*/
|
|
public toJSON(): { [k: string]: any };
|
|
}
|
|
|
|
/** Reflected service method. */
|
|
export class Method extends ReflectionObject {
|
|
|
|
/**
|
|
* Constructs a new service method instance.
|
|
* @param name Method name
|
|
* @param type Method type, usually `"rpc"`
|
|
* @param requestType Request message type
|
|
* @param responseType Response message type
|
|
* @param [requestStream] Whether the request is streamed
|
|
* @param [responseStream] Whether the response is streamed
|
|
* @param [options] Declared options
|
|
* @param [comment] The comment for this method
|
|
* @param [parsedOptions] Declared options, properly parsed into an object
|
|
*/
|
|
constructor(name: string, type: (string|undefined), requestType: string, responseType: string, requestStream?: (boolean|{ [k: string]: any }), responseStream?: (boolean|{ [k: string]: any }), options?: { [k: string]: any }, comment?: string, parsedOptions?: { [k: string]: any });
|
|
|
|
/** Method type. */
|
|
public type: string;
|
|
|
|
/** Request type. */
|
|
public requestType: string;
|
|
|
|
/** Whether requests are streamed or not. */
|
|
public requestStream?: boolean;
|
|
|
|
/** Response type. */
|
|
public responseType: string;
|
|
|
|
/** Whether responses are streamed or not. */
|
|
public responseStream?: boolean;
|
|
|
|
/** Resolved request type. */
|
|
public resolvedRequestType: (Type|null);
|
|
|
|
/** Resolved response type. */
|
|
public resolvedResponseType: (Type|null);
|
|
|
|
/** Comment for this method */
|
|
public comment: (string|null);
|
|
|
|
/** Options properly parsed into an object */
|
|
public parsedOptions: any;
|
|
|
|
/**
|
|
* Constructs a method from a method descriptor.
|
|
* @param name Method name
|
|
* @param json Method descriptor
|
|
* @returns Created method
|
|
* @throws {TypeError} If arguments are invalid
|
|
*/
|
|
public static fromJSON(name: string, json: IMethod): Method;
|
|
|
|
/**
|
|
* Converts this method to a method descriptor.
|
|
* @param [toJSONOptions] JSON conversion options
|
|
* @returns Method descriptor
|
|
*/
|
|
public toJSON(toJSONOptions?: IToJSONOptions): IMethod;
|
|
}
|
|
|
|
/** Method descriptor. */
|
|
export interface IMethod {
|
|
|
|
/** Method type */
|
|
type?: string;
|
|
|
|
/** Request type */
|
|
requestType: string;
|
|
|
|
/** Response type */
|
|
responseType: string;
|
|
|
|
/** Whether requests are streamed */
|
|
requestStream?: boolean;
|
|
|
|
/** Whether responses are streamed */
|
|
responseStream?: boolean;
|
|
|
|
/** Method options */
|
|
options?: { [k: string]: any };
|
|
|
|
/** Method comments */
|
|
comment: string;
|
|
|
|
/** Method options properly parsed into an object */
|
|
parsedOptions?: { [k: string]: any };
|
|
}
|
|
|
|
/** Reflected namespace. */
|
|
export class Namespace extends NamespaceBase {
|
|
|
|
/**
|
|
* Constructs a new namespace instance.
|
|
* @param name Namespace name
|
|
* @param [options] Declared options
|
|
*/
|
|
constructor(name: string, options?: { [k: string]: any });
|
|
|
|
/**
|
|
* Constructs a namespace from JSON.
|
|
* @param name Namespace name
|
|
* @param json JSON object
|
|
* @returns Created namespace
|
|
* @throws {TypeError} If arguments are invalid
|
|
*/
|
|
public static fromJSON(name: string, json: { [k: string]: any }): Namespace;
|
|
|
|
/**
|
|
* Converts an array of reflection objects to JSON.
|
|
* @param array Object array
|
|
* @param [toJSONOptions] JSON conversion options
|
|
* @returns JSON object or `undefined` when array is empty
|
|
*/
|
|
public static arrayToJSON(array: ReflectionObject[], toJSONOptions?: IToJSONOptions): ({ [k: string]: any }|undefined);
|
|
|
|
/**
|
|
* Tests if the specified id is reserved.
|
|
* @param reserved Array of reserved ranges and names
|
|
* @param id Id to test
|
|
* @returns `true` if reserved, otherwise `false`
|
|
*/
|
|
public static isReservedId(reserved: ((number[]|string)[]|undefined), id: number): boolean;
|
|
|
|
/**
|
|
* Tests if the specified name is reserved.
|
|
* @param reserved Array of reserved ranges and names
|
|
* @param name Name to test
|
|
* @returns `true` if reserved, otherwise `false`
|
|
*/
|
|
public static isReservedName(reserved: ((number[]|string)[]|undefined), name: string): boolean;
|
|
}
|
|
|
|
/** Base class of all reflection objects containing nested objects. This is not an actual class but here for the sake of having consistent type definitions. */
|
|
export abstract class NamespaceBase extends ReflectionObject {
|
|
|
|
/** Nested objects by name. */
|
|
public nested?: { [k: string]: ReflectionObject };
|
|
|
|
/** Nested objects of this namespace as an array for iteration. */
|
|
public readonly nestedArray: ReflectionObject[];
|
|
|
|
/**
|
|
* Converts this namespace to a namespace descriptor.
|
|
* @param [toJSONOptions] JSON conversion options
|
|
* @returns Namespace descriptor
|
|
*/
|
|
public toJSON(toJSONOptions?: IToJSONOptions): INamespace;
|
|
|
|
/**
|
|
* Adds nested objects to this namespace from nested object descriptors.
|
|
* @param nestedJson Any nested object descriptors
|
|
* @returns `this`
|
|
*/
|
|
public addJSON(nestedJson: { [k: string]: AnyNestedObject }): Namespace;
|
|
|
|
/**
|
|
* Gets the nested object of the specified name.
|
|
* @param name Nested object name
|
|
* @returns The reflection object or `null` if it doesn't exist
|
|
*/
|
|
public get(name: string): (ReflectionObject|null);
|
|
|
|
/**
|
|
* Gets the values of the nested {@link Enum|enum} of the specified name.
|
|
* This methods differs from {@link Namespace#get|get} in that it returns an enum's values directly and throws instead of returning `null`.
|
|
* @param name Nested enum name
|
|
* @returns Enum values
|
|
* @throws {Error} If there is no such enum
|
|
*/
|
|
public getEnum(name: string): { [k: string]: number };
|
|
|
|
/**
|
|
* Adds a nested object to this namespace.
|
|
* @param object Nested object to add
|
|
* @returns `this`
|
|
* @throws {TypeError} If arguments are invalid
|
|
* @throws {Error} If there is already a nested object with this name
|
|
*/
|
|
public add(object: ReflectionObject): Namespace;
|
|
|
|
/**
|
|
* Removes a nested object from this namespace.
|
|
* @param object Nested object to remove
|
|
* @returns `this`
|
|
* @throws {TypeError} If arguments are invalid
|
|
* @throws {Error} If `object` is not a member of this namespace
|
|
*/
|
|
public remove(object: ReflectionObject): Namespace;
|
|
|
|
/**
|
|
* Defines additial namespaces within this one if not yet existing.
|
|
* @param path Path to create
|
|
* @param [json] Nested types to create from JSON
|
|
* @returns Pointer to the last namespace created or `this` if path is empty
|
|
*/
|
|
public define(path: (string|string[]), json?: any): Namespace;
|
|
|
|
/**
|
|
* Resolves this namespace's and all its nested objects' type references. Useful to validate a reflection tree, but comes at a cost.
|
|
* @returns `this`
|
|
*/
|
|
public resolveAll(): Namespace;
|
|
|
|
/**
|
|
* Recursively looks up the reflection object matching the specified path in the scope of this namespace.
|
|
* @param path Path to look up
|
|
* @param filterTypes Filter types, any combination of the constructors of `protobuf.Type`, `protobuf.Enum`, `protobuf.Service` etc.
|
|
* @param [parentAlreadyChecked=false] If known, whether the parent has already been checked
|
|
* @returns Looked up object or `null` if none could be found
|
|
*/
|
|
public lookup(path: (string|string[]), filterTypes: (any|any[]), parentAlreadyChecked?: boolean): (ReflectionObject|null);
|
|
|
|
/**
|
|
* Looks up the reflection object at the specified path, relative to this namespace.
|
|
* @param path Path to look up
|
|
* @param [parentAlreadyChecked=false] Whether the parent has already been checked
|
|
* @returns Looked up object or `null` if none could be found
|
|
*/
|
|
public lookup(path: (string|string[]), parentAlreadyChecked?: boolean): (ReflectionObject|null);
|
|
|
|
/**
|
|
* Looks up the {@link Type|type} at the specified path, relative to this namespace.
|
|
* Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.
|
|
* @param path Path to look up
|
|
* @returns Looked up type
|
|
* @throws {Error} If `path` does not point to a type
|
|
*/
|
|
public lookupType(path: (string|string[])): Type;
|
|
|
|
/**
|
|
* Looks up the values of the {@link Enum|enum} at the specified path, relative to this namespace.
|
|
* Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.
|
|
* @param path Path to look up
|
|
* @returns Looked up enum
|
|
* @throws {Error} If `path` does not point to an enum
|
|
*/
|
|
public lookupEnum(path: (string|string[])): Enum;
|
|
|
|
/**
|
|
* Looks up the {@link Type|type} or {@link Enum|enum} at the specified path, relative to this namespace.
|
|
* Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.
|
|
* @param path Path to look up
|
|
* @returns Looked up type or enum
|
|
* @throws {Error} If `path` does not point to a type or enum
|
|
*/
|
|
public lookupTypeOrEnum(path: (string|string[])): Type;
|
|
|
|
/**
|
|
* Looks up the {@link Service|service} at the specified path, relative to this namespace.
|
|
* Besides its signature, this methods differs from {@link Namespace#lookup|lookup} in that it throws instead of returning `null`.
|
|
* @param path Path to look up
|
|
* @returns Looked up service
|
|
* @throws {Error} If `path` does not point to a service
|
|
*/
|
|
public lookupService(path: (string|string[])): Service;
|
|
}
|
|
|
|
/** Namespace descriptor. */
|
|
export interface INamespace {
|
|
|
|
/** Namespace options */
|
|
options?: { [k: string]: any };
|
|
|
|
/** Nested object descriptors */
|
|
nested?: { [k: string]: AnyNestedObject };
|
|
}
|
|
|
|
/** Any extension field descriptor. */
|
|
type AnyExtensionField = (IExtensionField|IExtensionMapField);
|
|
|
|
/** Any nested object descriptor. */
|
|
type AnyNestedObject = (IEnum|IType|IService|AnyExtensionField|INamespace);
|
|
|
|
/** Base class of all reflection objects. */
|
|
export abstract class ReflectionObject {
|
|
|
|
/** Options. */
|
|
public options?: { [k: string]: any };
|
|
|
|
/** Parsed Options. */
|
|
public parsedOptions?: { [k: string]: any[] };
|
|
|
|
/** Unique name within its namespace. */
|
|
public name: string;
|
|
|
|
/** Parent namespace. */
|
|
public parent: (Namespace|null);
|
|
|
|
/** Whether already resolved or not. */
|
|
public resolved: boolean;
|
|
|
|
/** Comment text, if any. */
|
|
public comment: (string|null);
|
|
|
|
/** Defining file name. */
|
|
public filename: (string|null);
|
|
|
|
/** Reference to the root namespace. */
|
|
public readonly root: Root;
|
|
|
|
/** Full name including leading dot. */
|
|
public readonly fullName: string;
|
|
|
|
/**
|
|
* Converts this reflection object to its descriptor representation.
|
|
* @returns Descriptor
|
|
*/
|
|
public toJSON(): { [k: string]: any };
|
|
|
|
/**
|
|
* Called when this object is added to a parent.
|
|
* @param parent Parent added to
|
|
*/
|
|
public onAdd(parent: ReflectionObject): void;
|
|
|
|
/**
|
|
* Called when this object is removed from a parent.
|
|
* @param parent Parent removed from
|
|
*/
|
|
public onRemove(parent: ReflectionObject): void;
|
|
|
|
/**
|
|
* Resolves this objects type references.
|
|
* @returns `this`
|
|
*/
|
|
public resolve(): ReflectionObject;
|
|
|
|
/**
|
|
* Gets an option value.
|
|
* @param name Option name
|
|
* @returns Option value or `undefined` if not set
|
|
*/
|
|
public getOption(name: string): any;
|
|
|
|
/**
|
|
* Sets an option.
|
|
* @param name Option name
|
|
* @param value Option value
|
|
* @param [ifNotSet] Sets the option only if it isn't currently set
|
|
* @returns `this`
|
|
*/
|
|
public setOption(name: string, value: any, ifNotSet?: boolean): ReflectionObject;
|
|
|
|
/**
|
|
* Sets a parsed option.
|
|
* @param name parsed Option name
|
|
* @param value Option value
|
|
* @param propName dot '.' delimited full path of property within the option to set. if undefined\empty, will add a new option with that value
|
|
* @returns `this`
|
|
*/
|
|
public setParsedOption(name: string, value: any, propName: string): ReflectionObject;
|
|
|
|
/**
|
|
* Sets multiple options.
|
|
* @param options Options to set
|
|
* @param [ifNotSet] Sets an option only if it isn't currently set
|
|
* @returns `this`
|
|
*/
|
|
public setOptions(options: { [k: string]: any }, ifNotSet?: boolean): ReflectionObject;
|
|
|
|
/**
|
|
* Converts this instance to its string representation.
|
|
* @returns Class name[, space, full name]
|
|
*/
|
|
public toString(): string;
|
|
}
|
|
|
|
/** Reflected oneof. */
|
|
export class OneOf extends ReflectionObject {
|
|
|
|
/**
|
|
* Constructs a new oneof instance.
|
|
* @param name Oneof name
|
|
* @param [fieldNames] Field names
|
|
* @param [options] Declared options
|
|
* @param [comment] Comment associated with this field
|
|
*/
|
|
constructor(name: string, fieldNames?: (string[]|{ [k: string]: any }), options?: { [k: string]: any }, comment?: string);
|
|
|
|
/** Field names that belong to this oneof. */
|
|
public oneof: string[];
|
|
|
|
/** Fields that belong to this oneof as an array for iteration. */
|
|
public readonly fieldsArray: Field[];
|
|
|
|
/** Comment for this field. */
|
|
public comment: (string|null);
|
|
|
|
/**
|
|
* Constructs a oneof from a oneof descriptor.
|
|
* @param name Oneof name
|
|
* @param json Oneof descriptor
|
|
* @returns Created oneof
|
|
* @throws {TypeError} If arguments are invalid
|
|
*/
|
|
public static fromJSON(name: string, json: IOneOf): OneOf;
|
|
|
|
/**
|
|
* Converts this oneof to a oneof descriptor.
|
|
* @param [toJSONOptions] JSON conversion options
|
|
* @returns Oneof descriptor
|
|
*/
|
|
public toJSON(toJSONOptions?: IToJSONOptions): IOneOf;
|
|
|
|
/**
|
|
* Adds a field to this oneof and removes it from its current parent, if any.
|
|
* @param field Field to add
|
|
* @returns `this`
|
|
*/
|
|
public add(field: Field): OneOf;
|
|
|
|
/**
|
|
* Removes a field from this oneof and puts it back to the oneof's parent.
|
|
* @param field Field to remove
|
|
* @returns `this`
|
|
*/
|
|
public remove(field: Field): OneOf;
|
|
|
|
/**
|
|
* OneOf decorator (TypeScript).
|
|
* @param fieldNames Field names
|
|
* @returns Decorator function
|
|
*/
|
|
public static d<T extends string>(...fieldNames: string[]): OneOfDecorator;
|
|
}
|
|
|
|
/** Oneof descriptor. */
|
|
export interface IOneOf {
|
|
|
|
/** Oneof field names */
|
|
oneof: string[];
|
|
|
|
/** Oneof options */
|
|
options?: { [k: string]: any };
|
|
}
|
|
|
|
/**
|
|
* Decorator function as returned by {@link OneOf.d} (TypeScript).
|
|
* @param prototype Target prototype
|
|
* @param oneofName OneOf name
|
|
*/
|
|
type OneOfDecorator = (prototype: object, oneofName: string) => void;
|
|
|
|
/**
|
|
* Parses the given .proto source and returns an object with the parsed contents.
|
|
* @param source Source contents
|
|
* @param [options] Parse options. Defaults to {@link parse.defaults} when omitted.
|
|
* @returns Parser result
|
|
*/
|
|
export function parse(source: string, options?: IParseOptions): IParserResult;
|
|
|
|
/** Result object returned from {@link parse}. */
|
|
export interface IParserResult {
|
|
|
|
/** Package name, if declared */
|
|
package: (string|undefined);
|
|
|
|
/** Imports, if any */
|
|
imports: (string[]|undefined);
|
|
|
|
/** Weak imports, if any */
|
|
weakImports: (string[]|undefined);
|
|
|
|
/** Syntax, if specified (either `"proto2"` or `"proto3"`) */
|
|
syntax: (string|undefined);
|
|
|
|
/** Populated root instance */
|
|
root: Root;
|
|
}
|
|
|
|
/** Options modifying the behavior of {@link parse}. */
|
|
export interface IParseOptions {
|
|
|
|
/** Keeps field casing instead of converting to camel case */
|
|
keepCase?: boolean;
|
|
|
|
/** Recognize double-slash comments in addition to doc-block comments. */
|
|
alternateCommentMode?: boolean;
|
|
|
|
/** Use trailing comment when both leading comment and trailing comment exist. */
|
|
preferTrailingComment?: boolean;
|
|
}
|
|
|
|
/** Options modifying the behavior of JSON serialization. */
|
|
export interface IToJSONOptions {
|
|
|
|
/** Serializes comments. */
|
|
keepComments?: boolean;
|
|
}
|
|
|
|
/**
|
|
* Parses the given .proto source and returns an object with the parsed contents.
|
|
* @param source Source contents
|
|
* @param root Root to populate
|
|
* @param [options] Parse options. Defaults to {@link parse.defaults} when omitted.
|
|
* @returns Parser result
|
|
*/
|
|
export function parse(source: string, root: Root, options?: IParseOptions): IParserResult;
|
|
|
|
/** Wire format reader using `Uint8Array` if available, otherwise `Array`. */
|
|
export class Reader {
|
|
|
|
/**
|
|
* Constructs a new reader instance using the specified buffer.
|
|
* @param buffer Buffer to read from
|
|
*/
|
|
constructor(buffer: Uint8Array);
|
|
|
|
/** Read buffer. */
|
|
public buf: Uint8Array;
|
|
|
|
/** Read buffer position. */
|
|
public pos: number;
|
|
|
|
/** Read buffer length. */
|
|
public len: number;
|
|
|
|
/**
|
|
* Creates a new reader using the specified buffer.
|
|
* @param buffer Buffer to read from
|
|
* @returns A {@link BufferReader} if `buffer` is a Buffer, otherwise a {@link Reader}
|
|
* @throws {Error} If `buffer` is not a valid buffer
|
|
*/
|
|
public static create(buffer: (Uint8Array|Buffer)): (Reader|BufferReader);
|
|
|
|
/**
|
|
* Reads a varint as an unsigned 32 bit value.
|
|
* @returns Value read
|
|
*/
|
|
public uint32(): number;
|
|
|
|
/**
|
|
* Reads a varint as a signed 32 bit value.
|
|
* @returns Value read
|
|
*/
|
|
public int32(): number;
|
|
|
|
/**
|
|
* Reads a zig-zag encoded varint as a signed 32 bit value.
|
|
* @returns Value read
|
|
*/
|
|
public sint32(): number;
|
|
|
|
/**
|
|
* Reads a varint as a signed 64 bit value.
|
|
* @returns Value read
|
|
*/
|
|
public int64(): Long;
|
|
|
|
/**
|
|
* Reads a varint as an unsigned 64 bit value.
|
|
* @returns Value read
|
|
*/
|
|
public uint64(): Long;
|
|
|
|
/**
|
|
* Reads a zig-zag encoded varint as a signed 64 bit value.
|
|
* @returns Value read
|
|
*/
|
|
public sint64(): Long;
|
|
|
|
/**
|
|
* Reads a varint as a boolean.
|
|
* @returns Value read
|
|
*/
|
|
public bool(): boolean;
|
|
|
|
/**
|
|
* Reads fixed 32 bits as an unsigned 32 bit integer.
|
|
* @returns Value read
|
|
*/
|
|
public fixed32(): number;
|
|
|
|
/**
|
|
* Reads fixed 32 bits as a signed 32 bit integer.
|
|
* @returns Value read
|
|
*/
|
|
public sfixed32(): number;
|
|
|
|
/**
|
|
* Reads fixed 64 bits.
|
|
* @returns Value read
|
|
*/
|
|
public fixed64(): Long;
|
|
|
|
/**
|
|
* Reads zig-zag encoded fixed 64 bits.
|
|
* @returns Value read
|
|
*/
|
|
public sfixed64(): Long;
|
|
|
|
/**
|
|
* Reads a float (32 bit) as a number.
|
|
* @returns Value read
|
|
*/
|
|
public float(): number;
|
|
|
|
/**
|
|
* Reads a double (64 bit float) as a number.
|
|
* @returns Value read
|
|
*/
|
|
public double(): number;
|
|
|
|
/**
|
|
* Reads a sequence of bytes preceeded by its length as a varint.
|
|
* @returns Value read
|
|
*/
|
|
public bytes(): Uint8Array;
|
|
|
|
/**
|
|
* Reads a string preceeded by its byte length as a varint.
|
|
* @returns Value read
|
|
*/
|
|
public string(): string;
|
|
|
|
/**
|
|
* Skips the specified number of bytes if specified, otherwise skips a varint.
|
|
* @param [length] Length if known, otherwise a varint is assumed
|
|
* @returns `this`
|
|
*/
|
|
public skip(length?: number): Reader;
|
|
|
|
/**
|
|
* Skips the next element of the specified wire type.
|
|
* @param wireType Wire type received
|
|
* @returns `this`
|
|
*/
|
|
public skipType(wireType: number): Reader;
|
|
}
|
|
|
|
/** Wire format reader using node buffers. */
|
|
export class BufferReader extends Reader {
|
|
|
|
/**
|
|
* Constructs a new buffer reader instance.
|
|
* @param buffer Buffer to read from
|
|
*/
|
|
constructor(buffer: Buffer);
|
|
|
|
/**
|
|
* Reads a sequence of bytes preceeded by its length as a varint.
|
|
* @returns Value read
|
|
*/
|
|
public bytes(): Buffer;
|
|
}
|
|
|
|
/** Root namespace wrapping all types, enums, services, sub-namespaces etc. that belong together. */
|
|
export class Root extends NamespaceBase {
|
|
|
|
/**
|
|
* Constructs a new root namespace instance.
|
|
* @param [options] Top level options
|
|
*/
|
|
constructor(options?: { [k: string]: any });
|
|
|
|
/** Deferred extension fields. */
|
|
public deferred: Field[];
|
|
|
|
/** Resolved file names of loaded files. */
|
|
public files: string[];
|
|
|
|
/**
|
|
* Loads a namespace descriptor into a root namespace.
|
|
* @param json Nameespace descriptor
|
|
* @param [root] Root namespace, defaults to create a new one if omitted
|
|
* @returns Root namespace
|
|
*/
|
|
public static fromJSON(json: INamespace, root?: Root): Root;
|
|
|
|
/**
|
|
* Resolves the path of an imported file, relative to the importing origin.
|
|
* This method exists so you can override it with your own logic in case your imports are scattered over multiple directories.
|
|
* @param origin The file name of the importing file
|
|
* @param target The file name being imported
|
|
* @returns Resolved path to `target` or `null` to skip the file
|
|
*/
|
|
public resolvePath(origin: string, target: string): (string|null);
|
|
|
|
/**
|
|
* Fetch content from file path or url
|
|
* This method exists so you can override it with your own logic.
|
|
* @param path File path or url
|
|
* @param callback Callback function
|
|
*/
|
|
public fetch(path: string, callback: FetchCallback): void;
|
|
|
|
/**
|
|
* Loads one or multiple .proto or preprocessed .json files into this root namespace and calls the callback.
|
|
* @param filename Names of one or multiple files to load
|
|
* @param options Parse options
|
|
* @param callback Callback function
|
|
*/
|
|
public load(filename: (string|string[]), options: IParseOptions, callback: LoadCallback): void;
|
|
|
|
/**
|
|
* Loads one or multiple .proto or preprocessed .json files into this root namespace and calls the callback.
|
|
* @param filename Names of one or multiple files to load
|
|
* @param callback Callback function
|
|
*/
|
|
public load(filename: (string|string[]), callback: LoadCallback): void;
|
|
|
|
/**
|
|
* Loads one or multiple .proto or preprocessed .json files into this root namespace and returns a promise.
|
|
* @param filename Names of one or multiple files to load
|
|
* @param [options] Parse options. Defaults to {@link parse.defaults} when omitted.
|
|
* @returns Promise
|
|
*/
|
|
public load(filename: (string|string[]), options?: IParseOptions): Promise<Root>;
|
|
|
|
/**
|
|
* Synchronously loads one or multiple .proto or preprocessed .json files into this root namespace (node only).
|
|
* @param filename Names of one or multiple files to load
|
|
* @param [options] Parse options. Defaults to {@link parse.defaults} when omitted.
|
|
* @returns Root namespace
|
|
* @throws {Error} If synchronous fetching is not supported (i.e. in browsers) or if a file's syntax is invalid
|
|
*/
|
|
public loadSync(filename: (string|string[]), options?: IParseOptions): Root;
|
|
}
|
|
|
|
/**
|
|
* Named roots.
|
|
* This is where pbjs stores generated structures (the option `-r, --root` specifies a name).
|
|
* Can also be used manually to make roots available accross modules.
|
|
*/
|
|
export let roots: { [k: string]: Root };
|
|
|
|
/** Streaming RPC helpers. */
|
|
export namespace rpc {
|
|
|
|
/**
|
|
* A service method callback as used by {@link rpc.ServiceMethod|ServiceMethod}.
|
|
*
|
|
* Differs from {@link RPCImplCallback} in that it is an actual callback of a service method which may not return `response = null`.
|
|
* @param error Error, if any
|
|
* @param [response] Response message
|
|
*/
|
|
type ServiceMethodCallback<TRes extends Message<TRes>> = (error: (Error|null), response?: TRes) => void;
|
|
|
|
/**
|
|
* A service method part of a {@link rpc.Service} as created by {@link Service.create}.
|
|
* @param request Request message or plain object
|
|
* @param [callback] Node-style callback called with the error, if any, and the response message
|
|
* @returns Promise if `callback` has been omitted, otherwise `undefined`
|
|
*/
|
|
type ServiceMethod<TReq extends Message<TReq>, TRes extends Message<TRes>> = (request: (TReq|Properties<TReq>), callback?: rpc.ServiceMethodCallback<TRes>) => Promise<Message<TRes>>;
|
|
|
|
/** An RPC service as returned by {@link Service#create}. */
|
|
class Service extends util.EventEmitter {
|
|
|
|
/**
|
|
* Constructs a new RPC service instance.
|
|
* @param rpcImpl RPC implementation
|
|
* @param [requestDelimited=false] Whether requests are length-delimited
|
|
* @param [responseDelimited=false] Whether responses are length-delimited
|
|
*/
|
|
constructor(rpcImpl: RPCImpl, requestDelimited?: boolean, responseDelimited?: boolean);
|
|
|
|
/** RPC implementation. Becomes `null` once the service is ended. */
|
|
public rpcImpl: (RPCImpl|null);
|
|
|
|
/** Whether requests are length-delimited. */
|
|
public requestDelimited: boolean;
|
|
|
|
/** Whether responses are length-delimited. */
|
|
public responseDelimited: boolean;
|
|
|
|
/**
|
|
* Calls a service method through {@link rpc.Service#rpcImpl|rpcImpl}.
|
|
* @param method Reflected or static method
|
|
* @param requestCtor Request constructor
|
|
* @param responseCtor Response constructor
|
|
* @param request Request message or plain object
|
|
* @param callback Service callback
|
|
*/
|
|
public rpcCall<TReq extends Message<TReq>, TRes extends Message<TRes>>(method: (Method|rpc.ServiceMethod<TReq, TRes>), requestCtor: Constructor<TReq>, responseCtor: Constructor<TRes>, request: (TReq|Properties<TReq>), callback: rpc.ServiceMethodCallback<TRes>): void;
|
|
|
|
/**
|
|
* Ends this service and emits the `end` event.
|
|
* @param [endedByRPC=false] Whether the service has been ended by the RPC implementation.
|
|
* @returns `this`
|
|
*/
|
|
public end(endedByRPC?: boolean): rpc.Service;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* RPC implementation passed to {@link Service#create} performing a service request on network level, i.e. by utilizing http requests or websockets.
|
|
* @param method Reflected or static method being called
|
|
* @param requestData Request data
|
|
* @param callback Callback function
|
|
*/
|
|
type RPCImpl = (method: (Method|rpc.ServiceMethod<Message<{}>, Message<{}>>), requestData: Uint8Array, callback: RPCImplCallback) => void;
|
|
|
|
/**
|
|
* Node-style callback as used by {@link RPCImpl}.
|
|
* @param error Error, if any, otherwise `null`
|
|
* @param [response] Response data or `null` to signal end of stream, if there hasn't been an error
|
|
*/
|
|
type RPCImplCallback = (error: (Error|null), response?: (Uint8Array|null)) => void;
|
|
|
|
/** Reflected service. */
|
|
export class Service extends NamespaceBase {
|
|
|
|
/**
|
|
* Constructs a new service instance.
|
|
* @param name Service name
|
|
* @param [options] Service options
|
|
* @throws {TypeError} If arguments are invalid
|
|
*/
|
|
constructor(name: string, options?: { [k: string]: any });
|
|
|
|
/** Service methods. */
|
|
public methods: { [k: string]: Method };
|
|
|
|
/**
|
|
* Constructs a service from a service descriptor.
|
|
* @param name Service name
|
|
* @param json Service descriptor
|
|
* @returns Created service
|
|
* @throws {TypeError} If arguments are invalid
|
|
*/
|
|
public static fromJSON(name: string, json: IService): Service;
|
|
|
|
/**
|
|
* Converts this service to a service descriptor.
|
|
* @param [toJSONOptions] JSON conversion options
|
|
* @returns Service descriptor
|
|
*/
|
|
public toJSON(toJSONOptions?: IToJSONOptions): IService;
|
|
|
|
/** Methods of this service as an array for iteration. */
|
|
public readonly methodsArray: Method[];
|
|
|
|
/**
|
|
* Creates a runtime service using the specified rpc implementation.
|
|
* @param rpcImpl RPC implementation
|
|
* @param [requestDelimited=false] Whether requests are length-delimited
|
|
* @param [responseDelimited=false] Whether responses are length-delimited
|
|
* @returns RPC service. Useful where requests and/or responses are streamed.
|
|
*/
|
|
public create(rpcImpl: RPCImpl, requestDelimited?: boolean, responseDelimited?: boolean): rpc.Service;
|
|
}
|
|
|
|
/** Service descriptor. */
|
|
export interface IService extends INamespace {
|
|
|
|
/** Method descriptors */
|
|
methods: { [k: string]: IMethod };
|
|
}
|
|
|
|
/**
|
|
* Gets the next token and advances.
|
|
* @returns Next token or `null` on eof
|
|
*/
|
|
type TokenizerHandleNext = () => (string|null);
|
|
|
|
/**
|
|
* Peeks for the next token.
|
|
* @returns Next token or `null` on eof
|
|
*/
|
|
type TokenizerHandlePeek = () => (string|null);
|
|
|
|
/**
|
|
* Pushes a token back to the stack.
|
|
* @param token Token
|
|
*/
|
|
type TokenizerHandlePush = (token: string) => void;
|
|
|
|
/**
|
|
* Skips the next token.
|
|
* @param expected Expected token
|
|
* @param [optional=false] If optional
|
|
* @returns Whether the token matched
|
|
* @throws {Error} If the token didn't match and is not optional
|
|
*/
|
|
type TokenizerHandleSkip = (expected: string, optional?: boolean) => boolean;
|
|
|
|
/**
|
|
* Gets the comment on the previous line or, alternatively, the line comment on the specified line.
|
|
* @param [line] Line number
|
|
* @returns Comment text or `null` if none
|
|
*/
|
|
type TokenizerHandleCmnt = (line?: number) => (string|null);
|
|
|
|
/** Handle object returned from {@link tokenize}. */
|
|
export interface ITokenizerHandle {
|
|
|
|
/** Gets the next token and advances (`null` on eof) */
|
|
next: TokenizerHandleNext;
|
|
|
|
/** Peeks for the next token (`null` on eof) */
|
|
peek: TokenizerHandlePeek;
|
|
|
|
/** Pushes a token back to the stack */
|
|
push: TokenizerHandlePush;
|
|
|
|
/** Skips a token, returns its presence and advances or, if non-optional and not present, throws */
|
|
skip: TokenizerHandleSkip;
|
|
|
|
/** Gets the comment on the previous line or the line comment on the specified line, if any */
|
|
cmnt: TokenizerHandleCmnt;
|
|
|
|
/** Current line number */
|
|
line: number;
|
|
}
|
|
|
|
/**
|
|
* Tokenizes the given .proto source and returns an object with useful utility functions.
|
|
* @param source Source contents
|
|
* @param alternateCommentMode Whether we should activate alternate comment parsing mode.
|
|
* @returns Tokenizer handle
|
|
*/
|
|
export function tokenize(source: string, alternateCommentMode: boolean): ITokenizerHandle;
|
|
|
|
export namespace tokenize {
|
|
|
|
/**
|
|
* Unescapes a string.
|
|
* @param str String to unescape
|
|
* @returns Unescaped string
|
|
*/
|
|
function unescape(str: string): string;
|
|
}
|
|
|
|
/** Reflected message type. */
|
|
export class Type extends NamespaceBase {
|
|
|
|
/**
|
|
* Constructs a new reflected message type instance.
|
|
* @param name Message name
|
|
* @param [options] Declared options
|
|
*/
|
|
constructor(name: string, options?: { [k: string]: any });
|
|
|
|
/** Message fields. */
|
|
public fields: { [k: string]: Field };
|
|
|
|
/** Oneofs declared within this namespace, if any. */
|
|
public oneofs: { [k: string]: OneOf };
|
|
|
|
/** Extension ranges, if any. */
|
|
public extensions: number[][];
|
|
|
|
/** Reserved ranges, if any. */
|
|
public reserved: (number[]|string)[];
|
|
|
|
/** Message fields by id. */
|
|
public readonly fieldsById: { [k: number]: Field };
|
|
|
|
/** Fields of this message as an array for iteration. */
|
|
public readonly fieldsArray: Field[];
|
|
|
|
/** Oneofs of this message as an array for iteration. */
|
|
public readonly oneofsArray: OneOf[];
|
|
|
|
/**
|
|
* The registered constructor, if any registered, otherwise a generic constructor.
|
|
* Assigning a function replaces the internal constructor. If the function does not extend {@link Message} yet, its prototype will be setup accordingly and static methods will be populated. If it already extends {@link Message}, it will just replace the internal constructor.
|
|
*/
|
|
public ctor: Constructor<{}>;
|
|
|
|
/**
|
|
* Generates a constructor function for the specified type.
|
|
* @param mtype Message type
|
|
* @returns Codegen instance
|
|
*/
|
|
public static generateConstructor(mtype: Type): Codegen;
|
|
|
|
/**
|
|
* Creates a message type from a message type descriptor.
|
|
* @param name Message name
|
|
* @param json Message type descriptor
|
|
* @returns Created message type
|
|
*/
|
|
public static fromJSON(name: string, json: IType): Type;
|
|
|
|
/**
|
|
* Converts this message type to a message type descriptor.
|
|
* @param [toJSONOptions] JSON conversion options
|
|
* @returns Message type descriptor
|
|
*/
|
|
public toJSON(toJSONOptions?: IToJSONOptions): IType;
|
|
|
|
/**
|
|
* Adds a nested object to this type.
|
|
* @param object Nested object to add
|
|
* @returns `this`
|
|
* @throws {TypeError} If arguments are invalid
|
|
* @throws {Error} If there is already a nested object with this name or, if a field, when there is already a field with this id
|
|
*/
|
|
public add(object: ReflectionObject): Type;
|
|
|
|
/**
|
|
* Removes a nested object from this type.
|
|
* @param object Nested object to remove
|
|
* @returns `this`
|
|
* @throws {TypeError} If arguments are invalid
|
|
* @throws {Error} If `object` is not a member of this type
|
|
*/
|
|
public remove(object: ReflectionObject): Type;
|
|
|
|
/**
|
|
* Tests if the specified id is reserved.
|
|
* @param id Id to test
|
|
* @returns `true` if reserved, otherwise `false`
|
|
*/
|
|
public isReservedId(id: number): boolean;
|
|
|
|
/**
|
|
* Tests if the specified name is reserved.
|
|
* @param name Name to test
|
|
* @returns `true` if reserved, otherwise `false`
|
|
*/
|
|
public isReservedName(name: string): boolean;
|
|
|
|
/**
|
|
* Creates a new message of this type using the specified properties.
|
|
* @param [properties] Properties to set
|
|
* @returns Message instance
|
|
*/
|
|
public create(properties?: { [k: string]: any }): Message<{}>;
|
|
|
|
/**
|
|
* Sets up {@link Type#encode|encode}, {@link Type#decode|decode} and {@link Type#verify|verify}.
|
|
* @returns `this`
|
|
*/
|
|
public setup(): Type;
|
|
|
|
/**
|
|
* Encodes a message of this type. Does not implicitly {@link Type#verify|verify} messages.
|
|
* @param message Message instance or plain object
|
|
* @param [writer] Writer to encode to
|
|
* @returns writer
|
|
*/
|
|
public encode(message: (Message<{}>|{ [k: string]: any }), writer?: Writer): Writer;
|
|
|
|
/**
|
|
* Encodes a message of this type preceeded by its byte length as a varint. Does not implicitly {@link Type#verify|verify} messages.
|
|
* @param message Message instance or plain object
|
|
* @param [writer] Writer to encode to
|
|
* @returns writer
|
|
*/
|
|
public encodeDelimited(message: (Message<{}>|{ [k: string]: any }), writer?: Writer): Writer;
|
|
|
|
/**
|
|
* Decodes a message of this type.
|
|
* @param reader Reader or buffer to decode from
|
|
* @param [length] Length of the message, if known beforehand
|
|
* @returns Decoded message
|
|
* @throws {Error} If the payload is not a reader or valid buffer
|
|
* @throws {util.ProtocolError<{}>} If required fields are missing
|
|
*/
|
|
public decode(reader: (Reader|Uint8Array), length?: number): Message<{}>;
|
|
|
|
/**
|
|
* Decodes a message of this type preceeded by its byte length as a varint.
|
|
* @param reader Reader or buffer to decode from
|
|
* @returns Decoded message
|
|
* @throws {Error} If the payload is not a reader or valid buffer
|
|
* @throws {util.ProtocolError} If required fields are missing
|
|
*/
|
|
public decodeDelimited(reader: (Reader|Uint8Array)): Message<{}>;
|
|
|
|
/**
|
|
* Verifies that field values are valid and that required fields are present.
|
|
* @param message Plain object to verify
|
|
* @returns `null` if valid, otherwise the reason why it is not
|
|
*/
|
|
public verify(message: { [k: string]: any }): (null|string);
|
|
|
|
/**
|
|
* Creates a new message of this type from a plain object. Also converts values to their respective internal types.
|
|
* @param object Plain object to convert
|
|
* @returns Message instance
|
|
*/
|
|
public fromObject(object: { [k: string]: any }): Message<{}>;
|
|
|
|
/**
|
|
* Creates a plain object from a message of this type. Also converts values to other types if specified.
|
|
* @param message Message instance
|
|
* @param [options] Conversion options
|
|
* @returns Plain object
|
|
*/
|
|
public toObject(message: Message<{}>, options?: IConversionOptions): { [k: string]: any };
|
|
|
|
/**
|
|
* Type decorator (TypeScript).
|
|
* @param [typeName] Type name, defaults to the constructor's name
|
|
* @returns Decorator function
|
|
*/
|
|
public static d<T extends Message<T>>(typeName?: string): TypeDecorator<T>;
|
|
}
|
|
|
|
/** Message type descriptor. */
|
|
export interface IType extends INamespace {
|
|
|
|
/** Oneof descriptors */
|
|
oneofs?: { [k: string]: IOneOf };
|
|
|
|
/** Field descriptors */
|
|
fields: { [k: string]: IField };
|
|
|
|
/** Extension ranges */
|
|
extensions?: number[][];
|
|
|
|
/** Reserved ranges */
|
|
reserved?: number[][];
|
|
|
|
/** Whether a legacy group or not */
|
|
group?: boolean;
|
|
}
|
|
|
|
/** Conversion options as used by {@link Type#toObject} and {@link Message.toObject}. */
|
|
export interface IConversionOptions {
|
|
|
|
/**
|
|
* Long conversion type.
|
|
* Valid values are `String` and `Number` (the global types).
|
|
* Defaults to copy the present value, which is a possibly unsafe number without and a {@link Long} with a long library.
|
|
*/
|
|
longs?: Function;
|
|
|
|
/**
|
|
* Enum value conversion type.
|
|
* Only valid value is `String` (the global type).
|
|
* Defaults to copy the present value, which is the numeric id.
|
|
*/
|
|
enums?: Function;
|
|
|
|
/**
|
|
* Bytes value conversion type.
|
|
* Valid values are `Array` and (a base64 encoded) `String` (the global types).
|
|
* Defaults to copy the present value, which usually is a Buffer under node and an Uint8Array in the browser.
|
|
*/
|
|
bytes?: Function;
|
|
|
|
/** Also sets default values on the resulting object */
|
|
defaults?: boolean;
|
|
|
|
/** Sets empty arrays for missing repeated fields even if `defaults=false` */
|
|
arrays?: boolean;
|
|
|
|
/** Sets empty objects for missing map fields even if `defaults=false` */
|
|
objects?: boolean;
|
|
|
|
/** Includes virtual oneof properties set to the present field's name, if any */
|
|
oneofs?: boolean;
|
|
|
|
/** Performs additional JSON compatibility conversions, i.e. NaN and Infinity to strings */
|
|
json?: boolean;
|
|
}
|
|
|
|
/**
|
|
* Decorator function as returned by {@link Type.d} (TypeScript).
|
|
* @param target Target constructor
|
|
*/
|
|
type TypeDecorator<T extends Message<T>> = (target: Constructor<T>) => void;
|
|
|
|
/** Common type constants. */
|
|
export namespace types {
|
|
|
|
/** Basic type wire types. */
|
|
const basic: {
|
|
"double": number,
|
|
"float": number,
|
|
"int32": number,
|
|
"uint32": number,
|
|
"sint32": number,
|
|
"fixed32": number,
|
|
"sfixed32": number,
|
|
"int64": number,
|
|
"uint64": number,
|
|
"sint64": number,
|
|
"fixed64": number,
|
|
"sfixed64": number,
|
|
"bool": number,
|
|
"string": number,
|
|
"bytes": number
|
|
};
|
|
|
|
/** Basic type defaults. */
|
|
const defaults: {
|
|
"double": number,
|
|
"float": number,
|
|
"int32": number,
|
|
"uint32": number,
|
|
"sint32": number,
|
|
"fixed32": number,
|
|
"sfixed32": number,
|
|
"int64": number,
|
|
"uint64": number,
|
|
"sint64": number,
|
|
"fixed64": number,
|
|
"sfixed64": number,
|
|
"bool": boolean,
|
|
"string": string,
|
|
"bytes": number[],
|
|
"message": null
|
|
};
|
|
|
|
/** Basic long type wire types. */
|
|
const long: {
|
|
"int64": number,
|
|
"uint64": number,
|
|
"sint64": number,
|
|
"fixed64": number,
|
|
"sfixed64": number
|
|
};
|
|
|
|
/** Allowed types for map keys with their associated wire type. */
|
|
const mapKey: {
|
|
"int32": number,
|
|
"uint32": number,
|
|
"sint32": number,
|
|
"fixed32": number,
|
|
"sfixed32": number,
|
|
"int64": number,
|
|
"uint64": number,
|
|
"sint64": number,
|
|
"fixed64": number,
|
|
"sfixed64": number,
|
|
"bool": number,
|
|
"string": number
|
|
};
|
|
|
|
/** Allowed types for packed repeated fields with their associated wire type. */
|
|
const packed: {
|
|
"double": number,
|
|
"float": number,
|
|
"int32": number,
|
|
"uint32": number,
|
|
"sint32": number,
|
|
"fixed32": number,
|
|
"sfixed32": number,
|
|
"int64": number,
|
|
"uint64": number,
|
|
"sint64": number,
|
|
"fixed64": number,
|
|
"sfixed64": number,
|
|
"bool": number
|
|
};
|
|
}
|
|
|
|
/** Constructor type. */
|
|
export interface Constructor<T> extends Function {
|
|
new(...params: any[]): T; prototype: T;
|
|
}
|
|
|
|
/** Properties type. */
|
|
type Properties<T> = { [P in keyof T]?: T[P] };
|
|
|
|
/**
|
|
* Any compatible Buffer instance.
|
|
* This is a minimal stand-alone definition of a Buffer instance. The actual type is that exported by node's typings.
|
|
*/
|
|
export interface Buffer extends Uint8Array {
|
|
}
|
|
|
|
/**
|
|
* Any compatible Long instance.
|
|
* This is a minimal stand-alone definition of a Long instance. The actual type is that exported by long.js.
|
|
*/
|
|
export interface Long {
|
|
|
|
/** Low bits */
|
|
low: number;
|
|
|
|
/** High bits */
|
|
high: number;
|
|
|
|
/** Whether unsigned or not */
|
|
unsigned: boolean;
|
|
}
|
|
|
|
/**
|
|
* A OneOf getter as returned by {@link util.oneOfGetter}.
|
|
* @returns Set field name, if any
|
|
*/
|
|
type OneOfGetter = () => (string|undefined);
|
|
|
|
/**
|
|
* A OneOf setter as returned by {@link util.oneOfSetter}.
|
|
* @param value Field name
|
|
*/
|
|
type OneOfSetter = (value: (string|undefined)) => void;
|
|
|
|
/** Various utility functions. */
|
|
export namespace util {
|
|
|
|
/** Helper class for working with the low and high bits of a 64 bit value. */
|
|
class LongBits {
|
|
|
|
/**
|
|
* Constructs new long bits.
|
|
* @param lo Low 32 bits, unsigned
|
|
* @param hi High 32 bits, unsigned
|
|
*/
|
|
constructor(lo: number, hi: number);
|
|
|
|
/** Low bits. */
|
|
public lo: number;
|
|
|
|
/** High bits. */
|
|
public hi: number;
|
|
|
|
/** Zero bits. */
|
|
public static zero: util.LongBits;
|
|
|
|
/** Zero hash. */
|
|
public static zeroHash: string;
|
|
|
|
/**
|
|
* Constructs new long bits from the specified number.
|
|
* @param value Value
|
|
* @returns Instance
|
|
*/
|
|
public static fromNumber(value: number): util.LongBits;
|
|
|
|
/**
|
|
* Constructs new long bits from a number, long or string.
|
|
* @param value Value
|
|
* @returns Instance
|
|
*/
|
|
public static from(value: (Long|number|string)): util.LongBits;
|
|
|
|
/**
|
|
* Converts this long bits to a possibly unsafe JavaScript number.
|
|
* @param [unsigned=false] Whether unsigned or not
|
|
* @returns Possibly unsafe number
|
|
*/
|
|
public toNumber(unsigned?: boolean): number;
|
|
|
|
/**
|
|
* Converts this long bits to a long.
|
|
* @param [unsigned=false] Whether unsigned or not
|
|
* @returns Long
|
|
*/
|
|
public toLong(unsigned?: boolean): Long;
|
|
|
|
/**
|
|
* Constructs new long bits from the specified 8 characters long hash.
|
|
* @param hash Hash
|
|
* @returns Bits
|
|
*/
|
|
public static fromHash(hash: string): util.LongBits;
|
|
|
|
/**
|
|
* Converts this long bits to a 8 characters long hash.
|
|
* @returns Hash
|
|
*/
|
|
public toHash(): string;
|
|
|
|
/**
|
|
* Zig-zag encodes this long bits.
|
|
* @returns `this`
|
|
*/
|
|
public zzEncode(): util.LongBits;
|
|
|
|
/**
|
|
* Zig-zag decodes this long bits.
|
|
* @returns `this`
|
|
*/
|
|
public zzDecode(): util.LongBits;
|
|
|
|
/**
|
|
* Calculates the length of this longbits when encoded as a varint.
|
|
* @returns Length
|
|
*/
|
|
public length(): number;
|
|
}
|
|
|
|
/** Whether running within node or not. */
|
|
let isNode: boolean;
|
|
|
|
/** Global object reference. */
|
|
let global: object;
|
|
|
|
/** An immuable empty array. */
|
|
const emptyArray: any[];
|
|
|
|
/** An immutable empty object. */
|
|
const emptyObject: object;
|
|
|
|
/**
|
|
* Tests if the specified value is an integer.
|
|
* @param value Value to test
|
|
* @returns `true` if the value is an integer
|
|
*/
|
|
function isInteger(value: any): boolean;
|
|
|
|
/**
|
|
* Tests if the specified value is a string.
|
|
* @param value Value to test
|
|
* @returns `true` if the value is a string
|
|
*/
|
|
function isString(value: any): boolean;
|
|
|
|
/**
|
|
* Tests if the specified value is a non-null object.
|
|
* @param value Value to test
|
|
* @returns `true` if the value is a non-null object
|
|
*/
|
|
function isObject(value: any): boolean;
|
|
|
|
/**
|
|
* Checks if a property on a message is considered to be present.
|
|
* This is an alias of {@link util.isSet}.
|
|
* @param obj Plain object or message instance
|
|
* @param prop Property name
|
|
* @returns `true` if considered to be present, otherwise `false`
|
|
*/
|
|
function isset(obj: object, prop: string): boolean;
|
|
|
|
/**
|
|
* Checks if a property on a message is considered to be present.
|
|
* @param obj Plain object or message instance
|
|
* @param prop Property name
|
|
* @returns `true` if considered to be present, otherwise `false`
|
|
*/
|
|
function isSet(obj: object, prop: string): boolean;
|
|
|
|
/** Node's Buffer class if available. */
|
|
let Buffer: Constructor<Buffer>;
|
|
|
|
/**
|
|
* Creates a new buffer of whatever type supported by the environment.
|
|
* @param [sizeOrArray=0] Buffer size or number array
|
|
* @returns Buffer
|
|
*/
|
|
function newBuffer(sizeOrArray?: (number|number[])): (Uint8Array|Buffer);
|
|
|
|
/** Array implementation used in the browser. `Uint8Array` if supported, otherwise `Array`. */
|
|
let Array: Constructor<Uint8Array>;
|
|
|
|
/** Long.js's Long class if available. */
|
|
let Long: Constructor<Long>;
|
|
|
|
/** Regular expression used to verify 2 bit (`bool`) map keys. */
|
|
const key2Re: RegExp;
|
|
|
|
/** Regular expression used to verify 32 bit (`int32` etc.) map keys. */
|
|
const key32Re: RegExp;
|
|
|
|
/** Regular expression used to verify 64 bit (`int64` etc.) map keys. */
|
|
const key64Re: RegExp;
|
|
|
|
/**
|
|
* Converts a number or long to an 8 characters long hash string.
|
|
* @param value Value to convert
|
|
* @returns Hash
|
|
*/
|
|
function longToHash(value: (Long|number)): string;
|
|
|
|
/**
|
|
* Converts an 8 characters long hash string to a long or number.
|
|
* @param hash Hash
|
|
* @param [unsigned=false] Whether unsigned or not
|
|
* @returns Original value
|
|
*/
|
|
function longFromHash(hash: string, unsigned?: boolean): (Long|number);
|
|
|
|
/**
|
|
* Merges the properties of the source object into the destination object.
|
|
* @param dst Destination object
|
|
* @param src Source object
|
|
* @param [ifNotSet=false] Merges only if the key is not already set
|
|
* @returns Destination object
|
|
*/
|
|
function merge(dst: { [k: string]: any }, src: { [k: string]: any }, ifNotSet?: boolean): { [k: string]: any };
|
|
|
|
/**
|
|
* Converts the first character of a string to lower case.
|
|
* @param str String to convert
|
|
* @returns Converted string
|
|
*/
|
|
function lcFirst(str: string): string;
|
|
|
|
/**
|
|
* Creates a custom error constructor.
|
|
* @param name Error name
|
|
* @returns Custom error constructor
|
|
*/
|
|
function newError(name: string): Constructor<Error>;
|
|
|
|
/** Error subclass indicating a protocol specifc error. */
|
|
class ProtocolError<T extends Message<T>> extends Error {
|
|
|
|
/**
|
|
* Constructs a new protocol error.
|
|
* @param message Error message
|
|
* @param [properties] Additional properties
|
|
*/
|
|
constructor(message: string, properties?: { [k: string]: any });
|
|
|
|
/** So far decoded message instance. */
|
|
public instance: Message<T>;
|
|
}
|
|
|
|
/**
|
|
* Builds a getter for a oneof's present field name.
|
|
* @param fieldNames Field names
|
|
* @returns Unbound getter
|
|
*/
|
|
function oneOfGetter(fieldNames: string[]): OneOfGetter;
|
|
|
|
/**
|
|
* Builds a setter for a oneof's present field name.
|
|
* @param fieldNames Field names
|
|
* @returns Unbound setter
|
|
*/
|
|
function oneOfSetter(fieldNames: string[]): OneOfSetter;
|
|
|
|
/**
|
|
* Default conversion options used for {@link Message#toJSON} implementations.
|
|
*
|
|
* These options are close to proto3's JSON mapping with the exception that internal types like Any are handled just like messages. More precisely:
|
|
*
|
|
* - Longs become strings
|
|
* - Enums become string keys
|
|
* - Bytes become base64 encoded strings
|
|
* - (Sub-)Messages become plain objects
|
|
* - Maps become plain objects with all string keys
|
|
* - Repeated fields become arrays
|
|
* - NaN and Infinity for float and double fields become strings
|
|
*
|
|
* @see https://developers.google.com/protocol-buffers/docs/proto3?hl=en#json
|
|
*/
|
|
let toJSONOptions: IConversionOptions;
|
|
|
|
/** Node's fs module if available. */
|
|
let fs: { [k: string]: any };
|
|
|
|
/**
|
|
* Converts an object's values to an array.
|
|
* @param object Object to convert
|
|
* @returns Converted array
|
|
*/
|
|
function toArray(object: { [k: string]: any }): any[];
|
|
|
|
/**
|
|
* Converts an array of keys immediately followed by their respective value to an object, omitting undefined values.
|
|
* @param array Array to convert
|
|
* @returns Converted object
|
|
*/
|
|
function toObject(array: any[]): { [k: string]: any };
|
|
|
|
/**
|
|
* Tests whether the specified name is a reserved word in JS.
|
|
* @param name Name to test
|
|
* @returns `true` if reserved, otherwise `false`
|
|
*/
|
|
function isReserved(name: string): boolean;
|
|
|
|
/**
|
|
* Returns a safe property accessor for the specified property name.
|
|
* @param prop Property name
|
|
* @returns Safe accessor
|
|
*/
|
|
function safeProp(prop: string): string;
|
|
|
|
/**
|
|
* Converts the first character of a string to upper case.
|
|
* @param str String to convert
|
|
* @returns Converted string
|
|
*/
|
|
function ucFirst(str: string): string;
|
|
|
|
/**
|
|
* Converts a string to camel case.
|
|
* @param str String to convert
|
|
* @returns Converted string
|
|
*/
|
|
function camelCase(str: string): string;
|
|
|
|
/**
|
|
* Compares reflected fields by id.
|
|
* @param a First field
|
|
* @param b Second field
|
|
* @returns Comparison value
|
|
*/
|
|
function compareFieldsById(a: Field, b: Field): number;
|
|
|
|
/**
|
|
* Decorator helper for types (TypeScript).
|
|
* @param ctor Constructor function
|
|
* @param [typeName] Type name, defaults to the constructor's name
|
|
* @returns Reflected type
|
|
*/
|
|
function decorateType<T extends Message<T>>(ctor: Constructor<T>, typeName?: string): Type;
|
|
|
|
/**
|
|
* Decorator helper for enums (TypeScript).
|
|
* @param object Enum object
|
|
* @returns Reflected enum
|
|
*/
|
|
function decorateEnum(object: object): Enum;
|
|
|
|
/**
|
|
* Sets the value of a property by property path. If a value already exists, it is turned to an array
|
|
* @param dst Destination object
|
|
* @param path dot '.' delimited path of the property to set
|
|
* @param value the value to set
|
|
* @returns Destination object
|
|
*/
|
|
function setProperty(dst: { [k: string]: any }, path: string, value: object): { [k: string]: any };
|
|
|
|
/** Decorator root (TypeScript). */
|
|
let decorateRoot: Root;
|
|
|
|
/**
|
|
* Returns a promise from a node-style callback function.
|
|
* @param fn Function to call
|
|
* @param ctx Function context
|
|
* @param params Function arguments
|
|
* @returns Promisified function
|
|
*/
|
|
function asPromise(fn: asPromiseCallback, ctx: any, ...params: any[]): Promise<any>;
|
|
|
|
/** A minimal base64 implementation for number arrays. */
|
|
namespace base64 {
|
|
|
|
/**
|
|
* Calculates the byte length of a base64 encoded string.
|
|
* @param string Base64 encoded string
|
|
* @returns Byte length
|
|
*/
|
|
function length(string: string): number;
|
|
|
|
/**
|
|
* Encodes a buffer to a base64 encoded string.
|
|
* @param buffer Source buffer
|
|
* @param start Source start
|
|
* @param end Source end
|
|
* @returns Base64 encoded string
|
|
*/
|
|
function encode(buffer: Uint8Array, start: number, end: number): string;
|
|
|
|
/**
|
|
* Decodes a base64 encoded string to a buffer.
|
|
* @param string Source string
|
|
* @param buffer Destination buffer
|
|
* @param offset Destination offset
|
|
* @returns Number of bytes written
|
|
* @throws {Error} If encoding is invalid
|
|
*/
|
|
function decode(string: string, buffer: Uint8Array, offset: number): number;
|
|
|
|
/**
|
|
* Tests if the specified string appears to be base64 encoded.
|
|
* @param string String to test
|
|
* @returns `true` if probably base64 encoded, otherwise false
|
|
*/
|
|
function test(string: string): boolean;
|
|
}
|
|
|
|
/**
|
|
* Begins generating a function.
|
|
* @param functionParams Function parameter names
|
|
* @param [functionName] Function name if not anonymous
|
|
* @returns Appender that appends code to the function's body
|
|
*/
|
|
function codegen(functionParams: string[], functionName?: string): Codegen;
|
|
|
|
namespace codegen {
|
|
|
|
/** When set to `true`, codegen will log generated code to console. Useful for debugging. */
|
|
let verbose: boolean;
|
|
}
|
|
|
|
/**
|
|
* Begins generating a function.
|
|
* @param [functionName] Function name if not anonymous
|
|
* @returns Appender that appends code to the function's body
|
|
*/
|
|
function codegen(functionName?: string): Codegen;
|
|
|
|
/** A minimal event emitter. */
|
|
class EventEmitter {
|
|
|
|
/** Constructs a new event emitter instance. */
|
|
constructor();
|
|
|
|
/**
|
|
* Registers an event listener.
|
|
* @param evt Event name
|
|
* @param fn Listener
|
|
* @param [ctx] Listener context
|
|
* @returns `this`
|
|
*/
|
|
public on(evt: string, fn: EventEmitterListener, ctx?: any): this;
|
|
|
|
/**
|
|
* Removes an event listener or any matching listeners if arguments are omitted.
|
|
* @param [evt] Event name. Removes all listeners if omitted.
|
|
* @param [fn] Listener to remove. Removes all listeners of `evt` if omitted.
|
|
* @returns `this`
|
|
*/
|
|
public off(evt?: string, fn?: EventEmitterListener): this;
|
|
|
|
/**
|
|
* Emits an event by calling its listeners with the specified arguments.
|
|
* @param evt Event name
|
|
* @param args Arguments
|
|
* @returns `this`
|
|
*/
|
|
public emit(evt: string, ...args: any[]): this;
|
|
}
|
|
|
|
/** Reads / writes floats / doubles from / to buffers. */
|
|
namespace float {
|
|
|
|
/**
|
|
* Writes a 32 bit float to a buffer using little endian byte order.
|
|
* @param val Value to write
|
|
* @param buf Target buffer
|
|
* @param pos Target buffer offset
|
|
*/
|
|
function writeFloatLE(val: number, buf: Uint8Array, pos: number): void;
|
|
|
|
/**
|
|
* Writes a 32 bit float to a buffer using big endian byte order.
|
|
* @param val Value to write
|
|
* @param buf Target buffer
|
|
* @param pos Target buffer offset
|
|
*/
|
|
function writeFloatBE(val: number, buf: Uint8Array, pos: number): void;
|
|
|
|
/**
|
|
* Reads a 32 bit float from a buffer using little endian byte order.
|
|
* @param buf Source buffer
|
|
* @param pos Source buffer offset
|
|
* @returns Value read
|
|
*/
|
|
function readFloatLE(buf: Uint8Array, pos: number): number;
|
|
|
|
/**
|
|
* Reads a 32 bit float from a buffer using big endian byte order.
|
|
* @param buf Source buffer
|
|
* @param pos Source buffer offset
|
|
* @returns Value read
|
|
*/
|
|
function readFloatBE(buf: Uint8Array, pos: number): number;
|
|
|
|
/**
|
|
* Writes a 64 bit double to a buffer using little endian byte order.
|
|
* @param val Value to write
|
|
* @param buf Target buffer
|
|
* @param pos Target buffer offset
|
|
*/
|
|
function writeDoubleLE(val: number, buf: Uint8Array, pos: number): void;
|
|
|
|
/**
|
|
* Writes a 64 bit double to a buffer using big endian byte order.
|
|
* @param val Value to write
|
|
* @param buf Target buffer
|
|
* @param pos Target buffer offset
|
|
*/
|
|
function writeDoubleBE(val: number, buf: Uint8Array, pos: number): void;
|
|
|
|
/**
|
|
* Reads a 64 bit double from a buffer using little endian byte order.
|
|
* @param buf Source buffer
|
|
* @param pos Source buffer offset
|
|
* @returns Value read
|
|
*/
|
|
function readDoubleLE(buf: Uint8Array, pos: number): number;
|
|
|
|
/**
|
|
* Reads a 64 bit double from a buffer using big endian byte order.
|
|
* @param buf Source buffer
|
|
* @param pos Source buffer offset
|
|
* @returns Value read
|
|
*/
|
|
function readDoubleBE(buf: Uint8Array, pos: number): number;
|
|
}
|
|
|
|
/**
|
|
* Fetches the contents of a file.
|
|
* @param filename File path or url
|
|
* @param options Fetch options
|
|
* @param callback Callback function
|
|
*/
|
|
function fetch(filename: string, options: IFetchOptions, callback: FetchCallback): void;
|
|
|
|
/**
|
|
* Fetches the contents of a file.
|
|
* @param path File path or url
|
|
* @param callback Callback function
|
|
*/
|
|
function fetch(path: string, callback: FetchCallback): void;
|
|
|
|
/**
|
|
* Fetches the contents of a file.
|
|
* @param path File path or url
|
|
* @param [options] Fetch options
|
|
* @returns Promise
|
|
*/
|
|
function fetch(path: string, options?: IFetchOptions): Promise<(string|Uint8Array)>;
|
|
|
|
/**
|
|
* Requires a module only if available.
|
|
* @param moduleName Module to require
|
|
* @returns Required module if available and not empty, otherwise `null`
|
|
*/
|
|
function inquire(moduleName: string): object;
|
|
|
|
/** A minimal path module to resolve Unix, Windows and URL paths alike. */
|
|
namespace path {
|
|
|
|
/**
|
|
* Tests if the specified path is absolute.
|
|
* @param path Path to test
|
|
* @returns `true` if path is absolute
|
|
*/
|
|
function isAbsolute(path: string): boolean;
|
|
|
|
/**
|
|
* Normalizes the specified path.
|
|
* @param path Path to normalize
|
|
* @returns Normalized path
|
|
*/
|
|
function normalize(path: string): string;
|
|
|
|
/**
|
|
* Resolves the specified include path against the specified origin path.
|
|
* @param originPath Path to the origin file
|
|
* @param includePath Include path relative to origin path
|
|
* @param [alreadyNormalized=false] `true` if both paths are already known to be normalized
|
|
* @returns Path to the include file
|
|
*/
|
|
function resolve(originPath: string, includePath: string, alreadyNormalized?: boolean): string;
|
|
}
|
|
|
|
/**
|
|
* A general purpose buffer pool.
|
|
* @param alloc Allocator
|
|
* @param slice Slicer
|
|
* @param [size=8192] Slab size
|
|
* @returns Pooled allocator
|
|
*/
|
|
function pool(alloc: PoolAllocator, slice: PoolSlicer, size?: number): PoolAllocator;
|
|
|
|
/** A minimal UTF8 implementation for number arrays. */
|
|
namespace utf8 {
|
|
|
|
/**
|
|
* Calculates the UTF8 byte length of a string.
|
|
* @param string String
|
|
* @returns Byte length
|
|
*/
|
|
function length(string: string): number;
|
|
|
|
/**
|
|
* Reads UTF8 bytes as a string.
|
|
* @param buffer Source buffer
|
|
* @param start Source start
|
|
* @param end Source end
|
|
* @returns String read
|
|
*/
|
|
function read(buffer: Uint8Array, start: number, end: number): string;
|
|
|
|
/**
|
|
* Writes a string as UTF8 bytes.
|
|
* @param string Source string
|
|
* @param buffer Destination buffer
|
|
* @param offset Destination offset
|
|
* @returns Bytes written
|
|
*/
|
|
function write(string: string, buffer: Uint8Array, offset: number): number;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Generates a verifier specific to the specified message type.
|
|
* @param mtype Message type
|
|
* @returns Codegen instance
|
|
*/
|
|
export function verifier(mtype: Type): Codegen;
|
|
|
|
/** Wrappers for common types. */
|
|
export const wrappers: { [k: string]: IWrapper };
|
|
|
|
/**
|
|
* From object converter part of an {@link IWrapper}.
|
|
* @param object Plain object
|
|
* @returns Message instance
|
|
*/
|
|
type WrapperFromObjectConverter = (this: Type, object: { [k: string]: any }) => Message<{}>;
|
|
|
|
/**
|
|
* To object converter part of an {@link IWrapper}.
|
|
* @param message Message instance
|
|
* @param [options] Conversion options
|
|
* @returns Plain object
|
|
*/
|
|
type WrapperToObjectConverter = (this: Type, message: Message<{}>, options?: IConversionOptions) => { [k: string]: any };
|
|
|
|
/** Common type wrapper part of {@link wrappers}. */
|
|
export interface IWrapper {
|
|
|
|
/** From object converter */
|
|
fromObject?: WrapperFromObjectConverter;
|
|
|
|
/** To object converter */
|
|
toObject?: WrapperToObjectConverter;
|
|
}
|
|
|
|
/** Wire format writer using `Uint8Array` if available, otherwise `Array`. */
|
|
export class Writer {
|
|
|
|
/** Constructs a new writer instance. */
|
|
constructor();
|
|
|
|
/** Current length. */
|
|
public len: number;
|
|
|
|
/** Operations head. */
|
|
public head: object;
|
|
|
|
/** Operations tail */
|
|
public tail: object;
|
|
|
|
/** Linked forked states. */
|
|
public states: (object|null);
|
|
|
|
/**
|
|
* Creates a new writer.
|
|
* @returns A {@link BufferWriter} when Buffers are supported, otherwise a {@link Writer}
|
|
*/
|
|
public static create(): (BufferWriter|Writer);
|
|
|
|
/**
|
|
* Allocates a buffer of the specified size.
|
|
* @param size Buffer size
|
|
* @returns Buffer
|
|
*/
|
|
public static alloc(size: number): Uint8Array;
|
|
|
|
/**
|
|
* Writes an unsigned 32 bit value as a varint.
|
|
* @param value Value to write
|
|
* @returns `this`
|
|
*/
|
|
public uint32(value: number): Writer;
|
|
|
|
/**
|
|
* Writes a signed 32 bit value as a varint.
|
|
* @param value Value to write
|
|
* @returns `this`
|
|
*/
|
|
public int32(value: number): Writer;
|
|
|
|
/**
|
|
* Writes a 32 bit value as a varint, zig-zag encoded.
|
|
* @param value Value to write
|
|
* @returns `this`
|
|
*/
|
|
public sint32(value: number): Writer;
|
|
|
|
/**
|
|
* Writes an unsigned 64 bit value as a varint.
|
|
* @param value Value to write
|
|
* @returns `this`
|
|
* @throws {TypeError} If `value` is a string and no long library is present.
|
|
*/
|
|
public uint64(value: (Long|number|string)): Writer;
|
|
|
|
/**
|
|
* Writes a signed 64 bit value as a varint.
|
|
* @param value Value to write
|
|
* @returns `this`
|
|
* @throws {TypeError} If `value` is a string and no long library is present.
|
|
*/
|
|
public int64(value: (Long|number|string)): Writer;
|
|
|
|
/**
|
|
* Writes a signed 64 bit value as a varint, zig-zag encoded.
|
|
* @param value Value to write
|
|
* @returns `this`
|
|
* @throws {TypeError} If `value` is a string and no long library is present.
|
|
*/
|
|
public sint64(value: (Long|number|string)): Writer;
|
|
|
|
/**
|
|
* Writes a boolish value as a varint.
|
|
* @param value Value to write
|
|
* @returns `this`
|
|
*/
|
|
public bool(value: boolean): Writer;
|
|
|
|
/**
|
|
* Writes an unsigned 32 bit value as fixed 32 bits.
|
|
* @param value Value to write
|
|
* @returns `this`
|
|
*/
|
|
public fixed32(value: number): Writer;
|
|
|
|
/**
|
|
* Writes a signed 32 bit value as fixed 32 bits.
|
|
* @param value Value to write
|
|
* @returns `this`
|
|
*/
|
|
public sfixed32(value: number): Writer;
|
|
|
|
/**
|
|
* Writes an unsigned 64 bit value as fixed 64 bits.
|
|
* @param value Value to write
|
|
* @returns `this`
|
|
* @throws {TypeError} If `value` is a string and no long library is present.
|
|
*/
|
|
public fixed64(value: (Long|number|string)): Writer;
|
|
|
|
/**
|
|
* Writes a signed 64 bit value as fixed 64 bits.
|
|
* @param value Value to write
|
|
* @returns `this`
|
|
* @throws {TypeError} If `value` is a string and no long library is present.
|
|
*/
|
|
public sfixed64(value: (Long|number|string)): Writer;
|
|
|
|
/**
|
|
* Writes a float (32 bit).
|
|
* @param value Value to write
|
|
* @returns `this`
|
|
*/
|
|
public float(value: number): Writer;
|
|
|
|
/**
|
|
* Writes a double (64 bit float).
|
|
* @param value Value to write
|
|
* @returns `this`
|
|
*/
|
|
public double(value: number): Writer;
|
|
|
|
/**
|
|
* Writes a sequence of bytes.
|
|
* @param value Buffer or base64 encoded string to write
|
|
* @returns `this`
|
|
*/
|
|
public bytes(value: (Uint8Array|string)): Writer;
|
|
|
|
/**
|
|
* Writes a string.
|
|
* @param value Value to write
|
|
* @returns `this`
|
|
*/
|
|
public string(value: string): Writer;
|
|
|
|
/**
|
|
* Forks this writer's state by pushing it to a stack.
|
|
* Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.
|
|
* @returns `this`
|
|
*/
|
|
public fork(): Writer;
|
|
|
|
/**
|
|
* Resets this instance to the last state.
|
|
* @returns `this`
|
|
*/
|
|
public reset(): Writer;
|
|
|
|
/**
|
|
* Resets to the last state and appends the fork state's current write length as a varint followed by its operations.
|
|
* @returns `this`
|
|
*/
|
|
public ldelim(): Writer;
|
|
|
|
/**
|
|
* Finishes the write operation.
|
|
* @returns Finished buffer
|
|
*/
|
|
public finish(): Uint8Array;
|
|
}
|
|
|
|
/** Wire format writer using node buffers. */
|
|
export class BufferWriter extends Writer {
|
|
|
|
/** Constructs a new buffer writer instance. */
|
|
constructor();
|
|
|
|
/**
|
|
* Allocates a buffer of the specified size.
|
|
* @param size Buffer size
|
|
* @returns Buffer
|
|
*/
|
|
public static alloc(size: number): Buffer;
|
|
|
|
/**
|
|
* Finishes the write operation.
|
|
* @returns Finished buffer
|
|
*/
|
|
public finish(): Buffer;
|
|
}
|
|
|
|
/**
|
|
* Callback as used by {@link util.asPromise}.
|
|
* @param error Error, if any
|
|
* @param params Additional arguments
|
|
*/
|
|
type asPromiseCallback = (error: (Error|null), ...params: any[]) => void;
|
|
|
|
/**
|
|
* Appends code to the function's body or finishes generation.
|
|
* @param [formatStringOrScope] Format string or, to finish the function, an object of additional scope variables, if any
|
|
* @param [formatParams] Format parameters
|
|
* @returns Itself or the generated function if finished
|
|
* @throws {Error} If format parameter counts do not match
|
|
*/
|
|
type Codegen = (formatStringOrScope?: (string|{ [k: string]: any }), ...formatParams: any[]) => (Codegen|Function);
|
|
|
|
/**
|
|
* Event listener as used by {@link util.EventEmitter}.
|
|
* @param args Arguments
|
|
*/
|
|
type EventEmitterListener = (...args: any[]) => void;
|
|
|
|
/**
|
|
* Node-style callback as used by {@link util.fetch}.
|
|
* @param error Error, if any, otherwise `null`
|
|
* @param [contents] File contents, if there hasn't been an error
|
|
*/
|
|
type FetchCallback = (error: Error, contents?: string) => void;
|
|
|
|
/** Options as used by {@link util.fetch}. */
|
|
export interface IFetchOptions {
|
|
|
|
/** Whether expecting a binary response */
|
|
binary?: boolean;
|
|
|
|
/** If `true`, forces the use of XMLHttpRequest */
|
|
xhr?: boolean;
|
|
}
|
|
|
|
/**
|
|
* An allocator as used by {@link util.pool}.
|
|
* @param size Buffer size
|
|
* @returns Buffer
|
|
*/
|
|
type PoolAllocator = (size: number) => Uint8Array;
|
|
|
|
/**
|
|
* A slicer as used by {@link util.pool}.
|
|
* @param start Start offset
|
|
* @param end End offset
|
|
* @returns Buffer slice
|
|
*/
|
|
type PoolSlicer = (this: Uint8Array, start: number, end: number) => Uint8Array;
|