///
type ReadFn = (buffer: Buffer, cursor: number, _fieldInfo: any, rootNodes: any) => any
type WriteFn = (value: any, buffer: Buffer, offset: number, _fieldInfo: any, rootNode: any) => number
type SizeOfFn = ((value: any, _fieldInfo: any, rootNode: any) => number)
type FieldInfo = string | { type: string, typeArgs: any }
type TypeFunc = [ReadFn, WriteFn, number | SizeOfFn, ?any]
type TypeParams = any
declare interface TypeParamsCounted { count: number | FieldInfo, countType: TypeDef }
type TypeDef = 'native' | TypeFunc | [string, any]
type TypesDef = { [field: string]: TypeDef }
type Protocol = {
types: TypesDef
[field: string]: TypeDef | Protocol
}
type Results = {
value: any,
size: number
}
type ExtendedResults = {
data: any,
metadata: {
size: number
},
buffer: Buffer,
fullBuffer: Buffer
}
declare abstract class TransformSerialization extends Transform {
private proto: ProtoDef
private mainType: string
constructor(proto: ProtoDef, mainType: string)
private _transform(chunk: any, enc: BufferEncoding, cb: CallableFunction): never
}
declare class ProtodefValidator {
constructor(typesSchemas: unknown)
createAjvInstance(typesSchemas): void
addDefaultTypes(): void
addTypes(schemas): void
typeToSchemaName(name: string): string
addType(name: string, schema: unknown): void
validateType(type: unknown): void
validateTypeGoingInside(type: unknown): void
validateProtocol(protocol: unknown): void
}
declare type TypeDefKind = 'native' | 'context' | 'parametrizable'
declare abstract class ProtodefBaseCompiler {
primitiveTypes = {}
native = {}
context = {}
types: TypesDef
scopeStack = []
parameterizableTypes = {}
addNativeType(type: string, fn: CallableFunction): void
addContextType(type: string, fn: CallableFunction): void
addParametrizableType(type: string, maker: CallableFunction): void
addTypes(types: { [key: string]: [TypeDefKind, CallableFunction] }): void
addProtocol(protocolData: Protocol, path: string[]): void
protected addTypesToCompile(types: any): void
protected indent(code: string, indent: string): string
protected getField(name: string): any
generate(): string
compile(code: string): Function
protected wrapCode (code: string, args: string[]): string
protected compileType(type: string | any[]): string
}
declare class ProtodefReadCompiler extends ProtodefBaseCompiler {
private callType(value: string, type: string | any[], offsetExpr: string, args: string[]): string
}
declare class ProtodefWriteCompiler extends ProtodefBaseCompiler {
private callType(value: string, type: string | any[], offsetExpr: string, args: string[]): string
}
declare class ProtodefSizeOfCompiler extends ProtodefBaseCompiler {
private callType(value: string, type: string | any[], args: string[]): string
}
declare class ProtodefCompiler {
readCompiler: ProtodefReadCompiler
writeCompiler: ProtodefWriteCompiler
sizeOfCompiler: ProtodefSizeOfCompiler
addTypes(types: { [key: string]: [TypeDefKind, CallableFunction] }): void
addProtocol(protocolData: Protocol, path: string[]): void
protected addTypesToCompile(types: any): void
addVariable(key: string, val: any): void
compileProtoDefSync(options?: { printCode?: boolean }): CompiledProtoDef
}
declare abstract class AbstractProtoDefInterface {
read: ReadFn
write: WriteFn
sizeOf: SizeOfFn
createPacketBuffer(type: string, packet: any): Buffer
parsePacketBuffer(type: string, buffer: Buffer, offset = 0): ExtendedResults
}
declare class CompiledProtoDef extends AbstractProtoDefInterface {
private sizeOfCtx: SizeOfFn
private writeCtx: WriteFn
private readCtx: ReadFn
constructor(sizeOfCtx: SizeOfFn, writeCtx: WriteFn, readCtx: ReadFn)
setVariable(key: string, val: any): void
}
declare class ProtodefPartialError extends Error {
partialReadError: true
constructor(message?: string)
}
declare module 'protodef' {
export class ProtoDef extends AbstractProtoDefInterface {
private types: TypesDef
constructor(validation: boolean = true)
private addDefaultTypes(): void
addType(name: string, functions: TypeDef, validate = true): void
addTypes(types: TypesDef): void
addProtocol(protocolData: Protocol, path: string[]): void
setVariable(key: string, val: any): void
}
export class Serializer extends TransformSerialization {
private queue: Buffer
createPacketBuffer(packet: any): Buffer
}
export class Parser extends TransformSerialization {
private queue: Buffer
parsePacketBuffer(packet: any): Buffer
}
export class FullPacketParser extends TransformSerialization {
noErrorLogging: boolean
constructor(proto: ProtoDef, mainType: string, noErrorLogging = false)
parsePacketBuffer(packet: any): Buffer
}
export const Compiler: {
ReadCompiler: typeof ProtodefReadCompiler
WriteCompiler: typeof ProtodefWriteCompiler
SizeOfCompiler: typeof ProtodefSizeOfCompiler
ProtoDefCompiler: typeof ProtodefCompiler
CompiledProtodef: typeof CompiledProtodef
}
export const utils: {
getField(countField: string, context: object): any | undefined
getFieldInfo(fieldInfo: FieldInfo): FieldInfo
addErrorField(e: Error & { field: string }, field: string): Error & { field: string }
getCount(buffer: Buffer, offset: number, options: TypeParamsCounted, rootNode: any): { count: number, size: number }
sendCount(len: number, buffer: Buffer, offset: number, options: TypeParamsCounted, rootNode: any): number
calcCount(len: number, options: TypeParamsCounted, rootNode: any): number
tryCatch(tryfn: CallableFunction, catchfn: CallableFunction): any
PartialReadError
}
}