EdgeAIG's picture
download
raw
8.39 kB
/**
* Middleware services for the unstable RPC runtime.
*
* A middleware service wraps server handler execution and can also install a
* client-side wrapper for generated clients. Its metadata records the services
* provided to downstream handlers, the services required by the middleware
* implementation, the schema for server-visible failures, the client-only error
* type, and whether generated clients must require the matching client layer.
*
* @since 4.0.0
*/
import * as Context from "../../Context.ts";
import * as Effect from "../../Effect.ts";
import * as Layer from "../../Layer.ts";
import * as Schema from "../../Schema.ts";
import { Scope } from "../../Scope.ts";
import type { unhandled } from "../../Types.ts";
import type { Headers } from "../http/Headers.ts";
import type * as Rpc from "./Rpc.ts";
import type { Request, RequestId } from "./RpcMessage.ts";
/**
* The literal type id used to identify RPC middleware service classes.
*
* @category type IDs
* @since 4.0.0
*/
export type TypeId = "~effect/rpc/RpcMiddleware";
/**
* The runtime type id used to attach and inspect RPC middleware metadata.
*
* @category type IDs
* @since 4.0.0
*/
export declare const TypeId: TypeId;
/**
* The server-side RPC middleware function shape, wrapping a handler effect with
* access to request metadata and translating provided services into required
* services.
*
* @category models
* @since 4.0.0
*/
export interface RpcMiddleware<Provides, E, Requires> {
(effect: Effect.Effect<SuccessValue, E | unhandled, Provides>, options: {
readonly client: Rpc.ServerClient;
readonly requestId: RequestId;
readonly rpc: Rpc.AnyWithProps;
readonly payload: unknown;
readonly headers: Headers;
}): Effect.Effect<SuccessValue, unhandled | E, Requires | Scope>;
}
/**
* Marker success type used by RPC middleware to represent successful completion
* without exposing the handler's concrete success value.
*
* @category models
* @since 4.0.0
*/
export interface SuccessValue {
readonly _: unique symbol;
}
/**
* The client-side RPC middleware function shape, allowing outgoing requests to
* be inspected or modified before calling `next`.
*
* @category models
* @since 4.0.0
*/
export interface RpcMiddlewareClient<E, CE, R> {
(options: {
readonly rpc: Rpc.AnyWithProps;
readonly request: Request<Rpc.Any>;
readonly next: (request: Request<Rpc.Any>) => Effect.Effect<SuccessValue, unhandled | E>;
}): Effect.Effect<SuccessValue, unhandled | E | CE, R>;
}
/**
* Marker service requirement indicating that a middleware has a client-side
* implementation available for an RPC client.
*
* @category models
* @since 4.0.0
*/
export interface ForClient<Id> {
readonly _: unique symbol;
readonly id: Id;
}
/**
* An erased server-side RPC middleware function, useful when the concrete
* provided services, errors, and requirements are not needed.
*
* @category models
* @since 4.0.0
*/
export interface Any {
(effect: Effect.Effect<SuccessValue, any, any>, options: {
readonly client: Rpc.ServerClient;
readonly requestId: RequestId;
readonly rpc: Rpc.AnyWithProps;
readonly payload: unknown;
readonly headers: Headers;
}): Effect.Effect<SuccessValue, any, any>;
}
/**
* A type-level carrier for RPC middleware metadata, including provided
* services, required services, error schema, and client error type.
*
* @category models
* @since 4.0.0
*/
export interface AnyId {
readonly [TypeId]: {
readonly provides: any;
readonly requires: any;
readonly error: Schema.Top;
readonly clientError: any;
};
}
/**
* The `Context.Service` class shape created for an RPC middleware, including
* its error schema, service metadata, and client-side requirement marker.
*
* @category models
* @since 4.0.0
*/
export interface ServiceClass<Self, Name extends string, Provides, E extends Schema.Top, ClientError, Requires, RequiredForClient extends boolean> extends Context.Service<Self, RpcMiddleware<Provides, E["Type"], Requires>> {
new (_: never): Context.ServiceClass.Shape<Name, RpcMiddleware<Provides, E["Type"], Requires>> & {
readonly [TypeId]: {
readonly error: E;
readonly provides: Provides;
readonly requires: Requires;
readonly clientError: ClientError;
};
};
readonly [TypeId]: typeof TypeId;
readonly error: E;
readonly requiredForClient: RequiredForClient;
readonly "~ClientError": ClientError;
}
/**
* Extracts the services provided by an RPC middleware.
*
* @category models
* @since 4.0.0
*/
export type Provides<A> = A extends {
readonly [TypeId]: {
readonly provides: infer P;
};
} ? P : never;
/**
* Extracts the services required by an RPC middleware.
*
* @category models
* @since 4.0.0
*/
export type Requires<A> = A extends {
readonly [TypeId]: {
readonly requires: infer R;
};
} ? R : never;
/**
* Applies a middleware's service transformation to an RPC environment by
* removing services the middleware provides and adding services it requires.
*
* @category models
* @since 4.0.0
*/
export type ApplyServices<A, R> = Exclude<R, Provides<A>> | Requires<A>;
/**
* Extracts the error schema associated with an RPC middleware.
*
* @category models
* @since 4.0.0
*/
export type ErrorSchema<A> = A extends {
readonly [TypeId]: {
readonly error: infer E;
};
} ? E extends Schema.Top ? E : never : never;
/**
* Extracts the decoded error type produced by an RPC middleware.
*
* @category models
* @since 4.0.0
*/
export type Error<A> = ErrorSchema<A>["Type"];
/**
* Extracts the encoding services required by a middleware's error schema.
*
* @category models
* @since 4.0.0
*/
export type ErrorServicesEncode<A> = ErrorSchema<A>["EncodingServices"];
/**
* Extracts the decoding services required by a middleware's error schema.
*
* @category models
* @since 4.0.0
*/
export type ErrorServicesDecode<A> = ErrorSchema<A>["DecodingServices"];
/**
* An erased RPC middleware context key carrying middleware metadata.
*
* @category models
* @since 4.0.0
*/
export interface AnyService extends Context.Key<any, any> {
readonly [TypeId]: typeof TypeId;
readonly error: Schema.Top;
readonly requiredForClient: boolean;
readonly "~ClientError": any;
}
/**
* An erased RPC middleware context key whose service value is a server-side
* middleware function.
*
* @category models
* @since 4.0.0
*/
export interface AnyServiceWithProps extends Context.Key<any, RpcMiddleware<any, any, any>> {
readonly [TypeId]: typeof TypeId;
readonly error: Schema.Top;
readonly requiredForClient: boolean;
readonly "~ClientError": any;
}
/**
* Creates a typed RPC middleware service class, with optional service
* requirements, provided services, error schema, and client-side requirement
* metadata.
*
* @category constructors
* @since 4.0.0
*/
export declare const Service: <Self, Config extends {
requires?: any;
provides?: any;
clientError?: any;
} = {
requires: never;
provides: never;
clientError: never;
}>() => <const Name extends string, Error extends Schema.Top = Schema.Never, const RequiredForClient extends boolean = false>(id: Name, options?: {
readonly error?: Error | undefined;
readonly requiredForClient?: RequiredForClient | undefined;
} | undefined) => ServiceClass<Self, Name, "provides" extends keyof Config ? Config["provides"] : never, Error, "clientError" extends keyof Config ? Config["clientError"] : never, "requires" extends keyof Config ? Config["requires"] : never, RequiredForClient>;
/**
* Provides the client-side implementation for an RPC middleware service,
* capturing the layer's environment and merging it into each middleware
* invocation.
*
* @category client
* @since 4.0.0
*/
export declare const layerClient: <Id extends AnyId, S, R, EX = never, RX = never>(tag: Context.Key<Id, S>, service: RpcMiddlewareClient<Id[TypeId]["error"]["Type"], Id[TypeId]["clientError"], R> | Effect.Effect<RpcMiddlewareClient<Id[TypeId]["error"]["Type"], Id[TypeId]["clientError"], R>, EX, RX>) => Layer.Layer<ForClient<Id>, EX, R | Exclude<RX, Scope>>;
//# sourceMappingURL=RpcMiddleware.d.ts.map

Xet Storage Details

Size:
8.39 kB
·
Xet hash:
a8199efbbf7248678a5d44beb2dd55f3ecb50f92fe2451490aed038251fc59f2

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.