UNPKG

@bufbuild/protobuf

Version:

A complete implementation of Protocol Buffers in TypeScript, suitable for web browsers and Node.js.

129 lines (128 loc) 6.15 kB
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<TypeName extends string = string> = { /** * The fully qualified Protobuf type-name of the message. */ readonly $typeName: TypeName; /** * Unknown fields and extensions stored on the message. */ $unknown?: UnknownField[]; }; /** * Extract the message type from a message descriptor. */ export type MessageShape<Desc extends DescMessage> = Desc extends GenMessageV1<infer RuntimeShapeV1> ? RuntimeShapeV1 : Desc extends GenMessageV2<infer RuntimeShape> ? 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 DescMessage> = Desc extends GenMessageV1<Message, infer JsonTypeV1 extends JsonValue> ? JsonTypeV1 : Desc extends GenMessageV2<Message, { jsonType: infer JsonType extends JsonValue; }> ? 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 DescMessage> = Desc extends GenMessageV1<infer RuntimeShapeV1> ? RuntimeShapeV1 : Desc extends GenMessageV2<Message, { validType: infer ValidType extends Message; }> ? ValidType : Desc extends GenMessageV2<infer RuntimeShape> ? RuntimeShape : Message; /** * Extract the init type from a message descriptor. * The init type is accepted by the function create(). */ export type MessageInitShape<Desc extends DescMessage> = Desc extends GenMessageV1<infer RuntimeShape> ? MessageInit<RuntimeShape> : Desc extends GenMessageV2<infer RuntimeShape> ? MessageInit<RuntimeShape> : Record<string, unknown>; /** * Extract the enum type of from an enum descriptor. */ export type EnumShape<Desc extends DescEnum> = Desc extends GenEnumV1<infer RuntimeShape> ? RuntimeShape : Desc extends GenEnumV2<infer RuntimeShape> ? RuntimeShape : number; /** * Extract the enum JSON type from a enum descriptor. */ export type EnumJsonType<Desc extends DescEnum> = Desc extends GenEnumV1<number, infer JsonType> ? JsonType : Desc extends GenEnumV2<number, infer JsonType> ? JsonType : string | null; /** * Extract the value type from an extension descriptor. */ export type ExtensionValueShape<Desc extends DescExtension> = Desc extends GenExtensionV1<Message, infer RuntimeShape> ? RuntimeShape : Desc extends GenExtensionV2<Message, infer RuntimeShape> ? RuntimeShape : unknown; /** * Extract the type of the extended message from an extension descriptor. */ export type Extendee<Desc extends DescExtension> = Desc extends GenExtensionV1<infer Extendee> ? Extendee : Desc extends GenExtensionV2<infer Extendee> ? 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<I extends DescMessage = DescMessage, O extends DescMessage = DescMessage> = DescMethodClientStreaming<I, O> | DescMethodServerStreaming<I, O> | DescMethodBiDiStreaming<I, O>; /** * Describes a unary RPC declaration. */ export type DescMethodUnary<I extends DescMessage = DescMessage, O extends DescMessage = DescMessage> = DescMethodTyped<"unary", I, O>; /** * Describes a server streaming RPC declaration. */ export type DescMethodServerStreaming<I extends DescMessage = DescMessage, O extends DescMessage = DescMessage> = DescMethodTyped<"server_streaming", I, O>; /** * Describes a client streaming RPC declaration. */ export type DescMethodClientStreaming<I extends DescMessage = DescMessage, O extends DescMessage = DescMessage> = DescMethodTyped<"client_streaming", I, O>; /** * Describes a bidi streaming RPC declaration. */ export type DescMethodBiDiStreaming<I extends DescMessage = DescMessage, O extends DescMessage = DescMessage> = 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 extends Message> = T | { [P in keyof T as P extends "$unknown" ? never : P]?: P extends "$typeName" ? never : FieldInit<T[P]>; }; type FieldInit<F> = F extends (Date | Uint8Array | bigint | boolean | string | number) ? F : F extends Array<infer U> ? Array<FieldInit<U>> : F extends ReadonlyArray<infer U> ? ReadonlyArray<FieldInit<U>> : F extends Message ? MessageInit<F> : F extends OneofSelectedMessage<infer C, infer V> ? { case: C; value: MessageInit<V>; } : F extends OneofADT ? F : F extends MapWithMessage<infer V> ? { [key: string | number]: MessageInit<V>; } : F; type MapWithMessage<V extends Message> = { [key: string | number]: V; }; type OneofSelectedMessage<K extends string, M extends Message> = { case: K; value: M; }; type DescMethodTyped<K extends DescMethod["methodKind"], I extends DescMessage, O extends DescMessage> = Omit<DescMethod, "methodKind" | "input" | "output"> & { /** * 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 {};