Skip to content

RpcGroup

10 exports Added in v1.0.0 Source

Groups

Any interface

Added in v1.0.0 Source

Signature

interface Any {
  readonly [TypeId]: typeof TypeId;
}

HandlerContext type

Added in v1.0.0 Source

Signature

type HandlerContext<Rpcs extends Rpc.Any, K extends Rpcs["_tag"], Handler> = [
  Rpc.IsStream<Rpcs, K>,
] extends [true]
  ? Handler extends (
      ...args: any
    ) =>
      | Stream.Stream<infer _A, infer _E, infer _R>
      | Rpc.Wrapper<Stream.Stream<infer _A, infer _E, infer _R>>
      | Effect.Effect<ReadonlyMailbox<infer _A, infer _E>, infer _EX, infer _R>
      | Rpc.Wrapper<Effect.Effect<ReadonlyMailbox<infer _A, infer _E>, infer _EX, infer _R>>
    ? Exclude<Rpc.ExcludeProvides<_R, Rpcs, K>, Scope>
    : never
  : Handler extends (
        ...args: any
      ) =>
        | Effect.Effect<infer _A, infer _E, infer _R>
        | Rpc.Wrapper<Effect.Effect<infer _A, infer _E, infer _R>>
    ? Rpc.ExcludeProvides<_R, Rpcs, K>
    : never;

HandlerFrom type

Added in v1.0.0 Source

Signature

type HandlerFrom<Rpc extends Rpc.Any, Tag extends Rpc["_tag"]> =
  Extract<
    Rpc,
    {
      readonly _tag: Tag;
    }
  > extends infer Current
    ? Current extends Rpc.Any
      ? Rpc.ToHandlerFn<Current>
      : never
    : never;

HandlersContext type

Added in v1.0.0 Source

Signature

type HandlersContext<Rpcs extends Rpc.Any, Handlers> = keyof Handlers extends infer K
  ? K extends keyof Handlers & string
    ? HandlerContext<Rpcs, K, Handlers[K]>
    : never
  : never;

HandlersFrom type

Added in v1.0.0 Source

Signature

type HandlersFrom<Rpc extends Rpc.Any> = { [Current in Rpc]: Rpc.ToHandlerFn<Current> };

make

Added in v1.0.0 Source

Signature

declare function make<Rpcs extends readonly Array<Any>>(...rpcs: Rpcs): RpcGroup<Rpcs[number]>

RpcGroup interface

Added in v1.0.0 Source

Signature

interface RpcGroup<in out R extends Rpc.Any> extends Pipeable {
  constructor(_: never);
  readonly [TypeId]: typeof TypeId;
  readonly annotations: Context<never>;
  readonly requests: ReadonlyMap<string, R>;
  accessHandler<Tag extends string>(tag: Tag): Effect<(payload: Payload<Extract<R, {
    readonly _tag: Tag;
  }>>, headers: Headers) => ResultFrom<Extract<R, {
    readonly _tag: Tag;
  }>, never>, never, Handler<Tag>>;
  add<Rpcs2 extends readonly Array<Any>>(...rpcs: Rpcs2): RpcGroup<R | Rpcs2[number]>;
  annotate<I, S>(tag: Tag<I, S>, value: S): RpcGroup<R>;
  annotateContext<S>(context: Context<S>): RpcGroup<R>;
  annotateRpcs<I, S>(tag: Tag<I, S>, value: S): RpcGroup<R>;
  annotateRpcsContext<S>(context: Context<S>): RpcGroup<R>;
  merge<Groups extends readonly Array<Any>>(...groups: Groups): RpcGroup<R | Rpcs<Groups[number]>>;
  middleware<M extends TagClassAny>(middleware: M): RpcGroup<AddMiddleware<R, M>>;
  of<Handlers extends HandlersFrom<R>>(handlers: Handlers): Handlers;
  prefix<Prefix extends string>(prefix: Prefix): RpcGroup<Prefixed<R, Prefix>>;
  toHandlersContext<Handlers extends HandlersFrom<R>, EX = never, RX = never>(build: Handlers | Effect<Handlers, EX, RX>): Effect<Context<ToHandler<R>>, EX, RX | HandlersContext<R, Handlers>>;
  toLayer<Handlers extends HandlersFrom<R>, EX = never, RX = never>(build: Handlers | Effect<Handlers, EX, RX>): Layer<ToHandler<R>, EX, Exclude<RX, Scope> | HandlersContext<R, Handlers>>;
  toLayerHandler<Tag extends string, Handler extends never, EX = never, RX = never>(tag: Tag, build: Handler | Effect<Handler, EX, RX>): Layer<Handler<Tag>, EX, Exclude<RX, Scope> | HandlerContext<R, Tag, Handler>>;
}

Rpcs type

Added in v1.0.0 Source

Signature

type Rpcs<Group> = Group extends RpcGroup<infer R> ? (string extends R["_tag"] ? never : R) : never;

Type Ids

TypeId

Added in v1.0.0 Source

Signature

declare const TypeId: unique symbol;

TypeId type

Added in v1.0.0 Source

Signature

type TypeId = typeof TypeId;