/** * @since 1.0.0 */ import type * as Deferred from "effect/Deferred"; import type * as Effect from "effect/Effect"; import { type Pipeable } from "effect/Pipeable"; import type { Request } from "effect/Request"; import type * as Schema from "effect/Schema"; /** * @since 1.0.0 * @category type ids */ export declare const TypeId: unique symbol; /** * @since 1.0.0 * @category type ids */ export type TypeId = typeof TypeId; /** * @since 1.0.0 * @category models */ export interface TaggedRequest extends Request { readonly _tag: Tag; } /** * @since 1.0.0 * @category models */ export declare namespace TaggedRequest { /** * @since 1.0.0 * @category models */ type Any = TaggedRequest | TaggedRequest; } /** * @since 1.0.0 * @category models */ export interface Procedure extends Pipeable { readonly [TypeId]: TypeId; readonly tag: Request["_tag"]; readonly handler: Handler; } /** * @since 1.0.0 * @category type ids */ export declare const SerializableTypeId: unique symbol; /** * @since 1.0.0 * @category type ids */ export type SerializableTypeId = typeof SerializableTypeId; /** * @since 1.0.0 * @category refinements */ export declare const isSerializable: (u: unknown) => u is SerializableProcedure; /** * @since 1.0.0 * @category models */ export interface SerializableProcedure extends Procedure { readonly [SerializableTypeId]: SerializableTypeId; readonly schema: Schema.Schema; } /** * @since 1.0.0 * @category symbols */ export declare const NoReply: unique symbol; /** * @since 1.0.0 * @category symbols */ export type NoReply = typeof NoReply; /** * @since 1.0.0 * @category models */ export type Handler = (context: Procedure.Context) => Effect.Effect | NoReply, state: State], Request.Error, R>; /** * @since 1.0.0 * @category models */ export declare namespace Procedure { /** * @since 1.0.0 * @category models */ interface BaseContext { readonly fork: (effect: Effect.Effect) => Effect.Effect; readonly forkOne: { (id: string): (effect: Effect.Effect) => Effect.Effect; (effect: Effect.Effect, id: string): Effect.Effect; }; readonly forkReplace: { (id: string): (effect: Effect.Effect) => Effect.Effect; (effect: Effect.Effect, id: string): Effect.Effect; }; readonly unsafeSend: (request: Req) => Effect.Effect; readonly unsafeSendAwait: (request: Req) => Effect.Effect, Request.Error>; } /** * @since 1.0.0 * @category models */ interface ContextProto extends BaseContext { readonly send: (request: Req) => Effect.Effect; readonly sendAwait: (request: Req) => Effect.Effect, Request.Error>; readonly forkWith: { (state: State): (effect: Effect.Effect) => Effect.Effect; (effect: Effect.Effect, state: State): Effect.Effect; }; readonly forkOneWith: { (id: string, state: State): (effect: Effect.Effect) => Effect.Effect; (effect: Effect.Effect, id: string, state: State): Effect.Effect; }; readonly forkReplaceWith: { (id: string, state: State): (effect: Effect.Effect) => Effect.Effect; (effect: Effect.Effect, id: string, state: State): Effect.Effect; }; } /** * @since 1.0.0 * @category models */ interface Context extends ContextProto { readonly request: Request; readonly state: State; readonly deferred: Deferred.Deferred, Request.Error>; } /** * @since 1.0.0 * @category models */ type InferRequest

= P extends Procedure ? Req : never; /** * @since 1.0.0 * @category models */ type InferContext

= P extends Procedure ? R : never; } /** * @since 1.0.0 * @category constructors */ export declare const make: () => () => (tag: Req["_tag"], handler: Handler) => Procedure; /** * @since 1.0.0 * @category constructors */ export declare const makeSerializable: () => (schema: Schema.Schema & { readonly _tag: Req["_tag"]; }, handler: Handler) => SerializableProcedure>; //# sourceMappingURL=Procedure.d.ts.map