/** Codec to encode and decode protobuf messages */ type Codec = { encode(app: TApp): TProto; decode(proto: TProto): TApp; }; type CodecType = ReturnType; type CodecProto = ReturnType; type Evaluate = T extends infer O ? { [K in keyof O]: O[K]; } : never; type TPropertyKey = string | symbol; type TProperties = Record; type OptionalPropertyKeys = { [K in keyof T]: undefined extends T[K] ? K : never; }[keyof T]; type RequiredPropertyKeys = keyof Omit>; type _MessageCodecType = { [K in keyof T]: CodecType; }; type _MessageCodecProto = { [K in keyof T]: CodecProto; }; type MessageCodecType = _MessageCodecType extends infer R ? Evaluate & Required>>> : never; type MessageCodecProto = _MessageCodecProto extends infer R ? Evaluate & Required>>> : never; type MessageCodec = Codec, MessageCodecProto>; declare function MessageCodec(schema: T): MessageCodec; type ArrayCodec = T extends Codec ? Codec : never; declare function ArrayCodec, TApp, TProto>(t: T): ArrayCodec; type MutableArrayCodec, TApp, TProto> = T extends Codec ? Codec : never; declare function MutableArrayCodec, TApp, TProto>(t: T): MutableArrayCodec; type OptionalCodec = T extends Codec ? Codec : never; declare function OptionalCodec(t: T): OptionalCodec; type RequiredCodec = T extends Codec ? TApp extends undefined ? never : Codec : never; declare function RequiredCodec(t: T): RequiredCodec; type NullOrCodec = T extends Codec ? Codec : never; declare function NullOrCodec(t: T): NullOrCodec; type BigIntCodec = CodecType; declare const BigIntCodec: Codec; type NumberCodec = CodecType; declare const NumberCodec: Codec; type Uint8ArrayCodec = CodecType; declare const Uint8ArrayCodec: Codec; type DateCodec = CodecType; declare const DateCodec: Codec; type BooleanCodec = CodecType; declare const BooleanCodec: Codec; type StringCodec = CodecType; declare const StringCodec: Codec; type UndefinedCodec = CodecType; declare const UndefinedCodec: Codec; type Literal = string | number | boolean | null | undefined; type LiteralCodec = T extends Codec ? Codec : never; declare const LiteralCodec: (value: L) => LiteralCodec, L>; type LiteralUnionCodec = T extends Codec ? Codec : never; declare const LiteralUnionCodec: (values: L) => LiteralUnionCodec, L>; type AppVariantMap = { [K in keyof TVariants]: { [P in TTag]: K; } & (CodecType extends UndefinedCodec ? {} : { [P in K & TPropertyKey]: CodecType; }); }; type VariantCodecType = AppVariantMap[keyof TVariants]; type ProtoVariantMap = { [K in keyof TVariants]: { [P in TDiscriminator]: K; } & { [P in K & TPropertyKey]: CodecProto; }; }; type VariantCodecProto = ProtoVariantMap[keyof TVariants]; type VariantCodec = T extends Codec ? Codec : never; declare const VariantCodec: , VariantCodecProto>>(options: { tag: TTag; discriminator: TDiscriminator; variants: TVariants; }) => VariantCodec; type OneOfCodec = VariantCodec, VariantCodecProto<"$case", TVariants>>, "_tag", "$case">; declare function OneOfCodec(variants: TVariants): OneOfCodec; export { ArrayCodec, BigIntCodec, BooleanCodec, DateCodec, LiteralCodec, LiteralUnionCodec, MessageCodec, MutableArrayCodec, NullOrCodec, NumberCodec, OneOfCodec, OptionalCodec, RequiredCodec, StringCodec, Uint8ArrayCodec, UndefinedCodec, VariantCodec }; export type { Codec, CodecProto, CodecType, Evaluate };