import type { GenEnum as GenEnumV1, GenExtension as GenExtensionV1, GenMessage as GenMessageV1 } from "./codegenv1/types.js"; import type { GenEnum as GenEnumV2, GenExtension as GenExtensionV2, GenMessage as GenMessageV2 } from "./codegenv2/types.js"; import type { DescEnum, DescExtension, DescMessage, DescMethod } from "./descriptors.js"; import type { OneofADT } from "./reflect/guard.js"; import type { WireType } from "./wire/index.js"; import type { JsonValue } from "./json-value.js"; /** * The type `Message` contains the properties shared by all messages. */ export type Message = { /** * The fully qualified Protobuf type-name of the message. */ readonly $typeName: TypeName; /** * Unknown fields and extensions stored on the message. */ $unknown?: UnknownField[] | undefined; }; /** * Extract the message type from a message descriptor. */ export type MessageShape = Desc extends GenMessageV1 ? RuntimeShapeV1 : Desc extends GenMessageV2 ? RuntimeShape : Message; /** * Extract the message JSON type from a message descriptor. * * JSON types are only available for code generated with the plugin option * `json_types=true`. If JSON types are unavailable, this type falls back to the * `JsonValue` type. */ export type MessageJsonType = Desc extends GenMessageV1 ? JsonTypeV1 : Desc extends GenMessageV2 ? JsonType : JsonValue; /** * Extract the message Valid type from a message descriptor. * * Valid types are only available for code generated with the plugin option * `valid_types`. If Valid types are unavailable, this type falls back to the * regular message shape. */ export type MessageValidType = Desc extends GenMessageV1 ? RuntimeShapeV1 : Desc extends GenMessageV2 ? ValidType : Desc extends GenMessageV2 ? RuntimeShape : Message; /** * Extract the init type from a message descriptor. * The init type is accepted by the function create(). */ export type MessageInitShape = Desc extends GenMessageV1 ? MessageInit : Desc extends GenMessageV2 ? MessageInit : Record; /** * Extract the enum type of from an enum descriptor. */ export type EnumShape = Desc extends GenEnumV1 ? RuntimeShape : Desc extends GenEnumV2 ? RuntimeShape : number; /** * Extract the enum JSON type from a enum descriptor. */ export type EnumJsonType = Desc extends GenEnumV1 ? JsonType : Desc extends GenEnumV2 ? JsonType : string | null; /** * Extract the value type from an extension descriptor. */ export type ExtensionValueShape = Desc extends GenExtensionV1 ? RuntimeShape : Desc extends GenExtensionV2 ? RuntimeShape : unknown; /** * Extract the type of the extended message from an extension descriptor. */ export type Extendee = Desc extends GenExtensionV1 ? Extendee : Desc extends GenExtensionV2 ? Extendee : Message; /** * Unknown fields are fields that were not recognized during parsing, or * extension. */ export type UnknownField = { readonly no: number; readonly wireType: WireType; readonly data: Uint8Array; }; /** * Describes a streaming RPC declaration. */ export type DescMethodStreaming = DescMethodClientStreaming | DescMethodServerStreaming | DescMethodBiDiStreaming; /** * Describes a unary RPC declaration. */ export type DescMethodUnary = DescMethodTyped<"unary", I, O>; /** * Describes a server streaming RPC declaration. */ export type DescMethodServerStreaming = DescMethodTyped<"server_streaming", I, O>; /** * Describes a client streaming RPC declaration. */ export type DescMethodClientStreaming = DescMethodTyped<"client_streaming", I, O>; /** * Describes a bidi streaming RPC declaration. */ export type DescMethodBiDiStreaming = DescMethodTyped<"bidi_streaming", I, O>; /** * The init type for a message, which makes all fields optional. * The init type is accepted by the function create(). */ type MessageInit = T | { [P in keyof T as P extends "$unknown" ? never : P]?: P extends "$typeName" ? never : FieldInit; }; type FieldInit = F extends (Date | Uint8Array | bigint | boolean | string | number) ? F : F extends Array ? Array> : F extends ReadonlyArray ? ReadonlyArray> : F extends Message ? MessageInit : F extends OneofSelectedMessage ? { case: C; value: MessageInit; } : F extends OneofADT ? F : F extends MapWithMessage ? { [key: string | number]: MessageInit; } : F; type MapWithMessage = { [key: string | number]: V; }; type OneofSelectedMessage = { case: K; value: M; }; type DescMethodTyped = Omit & { /** * One of the four available method types. */ readonly methodKind: K; /** * The message type for requests. */ readonly input: I; /** * The message type for responses. */ readonly output: O; }; export {};