Skip to content

Rpc

50 exports Added in v1.0.0 Source

Constructors

AnySchema interface

Added in v1.0.0 Source

Signature

interface AnySchema extends Pipeable {
  [key: number]: any;
  readonly annotations: any;
  readonly ast: AST;
  readonly Context: any;
  readonly Encoded: any;
  readonly make?: (params: any, ...rest: readonly Array<any>) => any;
  readonly Type: any;
}

AnyTaggedRequestSchema interface

Added in v1.0.0 Source

Signature

interface AnyTaggedRequestSchema extends AnySchema {
  [key: number]: any;
  readonly _tag: string;
  readonly failure: All;
  readonly success: Any;
}

exitSchema

Added in v1.0.0 Source

Signature

declare function exitSchema<R extends Any>(self: R): any;

Signature

declare function fromTaggedRequest<S extends AnyTaggedRequestSchema>(schema: S): From<S>;

make

Added in v1.0.0 Source

Signature

declare function make<
  Tag extends string,
  Payload extends any = Void,
  Success extends Any = Void,
  Error extends All = Never,
  Stream extends boolean = false,
>(
  tag: Tag,
  options?: {
    readonly defect?: any;
    readonly error?: Error;
    readonly payload?: Payload;
    readonly primaryKey?: [Payload] extends [Fields]
      ? (
          payload: Simplify<
            View<
              NoInfer<Payload>,
              "Type",
              TypeOptionalKeys<NoInfer<Payload>>,
              TypeMutableKeys<NoInfer<Payload>>
            >
          >,
        ) => string
      : never;
    readonly stream?: Stream;
    readonly success?: Success;
  },
): Rpc<
  Tag,
  Payload extends Fields ? Struct<Payload> : Payload,
  Stream extends true ? Stream<Success, Error> : Success,
  Stream extends true ? Never : Error
>;

Guards

isRpc

Added in v1.0.0 Source

Signature

declare function isRpc(u: unknown): u is Rpc<any, any, any, Never, never>;

Models

AddError type

Added in v1.0.0 Source

Signature

type AddError<R extends Any, Error extends Schema.Schema.All> =
  R extends Rpc<infer _Tag, infer _Payload, infer _Success, infer _Error, infer _Middleware>
    ? Rpc<_Tag, _Payload, _Success, _Error | Error, _Middleware>
    : never;

AddMiddleware type

Added in v1.0.0 Source

Signature

type AddMiddleware<R extends Any, Middleware extends RpcMiddleware.TagClassAny> =
  R extends Rpc<infer _Tag, infer _Payload, infer _Success, infer _Error, infer _Middleware>
    ? Rpc<_Tag, _Payload, _Success, _Error, _Middleware | Middleware>
    : never;

Any interface

Added in v1.0.0 Source

Signature

interface Any extends Pipeable {
  readonly _tag: string;
  readonly [TypeId]: typeof TypeId;
  readonly key: string;
}

AnyWithProps interface

Added in v1.0.0 Source

Signature

interface AnyWithProps {
  readonly _tag: string;
  readonly [TypeId]: typeof TypeId;
  readonly annotations: Context<never>;
  readonly defectSchema: any;
  readonly errorSchema: All;
  readonly key: string;
  readonly middlewares: ReadonlySet<TagClassAnyWithProps>;
  readonly payloadSchema: AnySchema;
  readonly successSchema: Any;
}

Context type

Added in v1.0.0 Source

Signature

type Context<R> =
  R extends Rpc<infer _Tag, infer _Payload, infer _Success, infer _Error, infer _Middleware>
    ? _Payload["Context"] | _Success["Context"] | _Error["Context"]
    : never;

Error type

Added in v1.0.0 Source

Signature

type Error<R> = Schema.Schema.Type<ErrorSchema<R>>;

ErrorEncoded type

Added in v1.0.0 Source

Signature

type ErrorEncoded<R> = Schema.Schema.Encoded<ErrorSchema<R>>;

ErrorExit type

Added in v1.0.0 Source

Signature

type ErrorExit<R> =
  SuccessSchema<R> extends RpcSchema.Stream<infer _A, infer _E> ? _E["Type"] | Error<R> : Error<R>;

ErrorExitEncoded type

Added in v1.0.0 Source

Signature

type ErrorExitEncoded<R> =
  SuccessSchema<R> extends RpcSchema.Stream<infer _A, infer _E>
    ? _E["Encoded"] | ErrorEncoded<R>
    : ErrorEncoded<R>;

ErrorSchema type

Added in v1.0.0 Source

Signature

type ErrorSchema<R> =
  R extends Rpc<infer _Tag, infer _Payload, infer _Success, infer _Error, infer _Middleware>
    ? _Error | _Middleware
    : never;

ExcludeProvides type

Added in v1.0.0 Source

Signature

type ExcludeProvides<Env, R extends Any, Tag extends string> = Exclude<
  Env,
  ExtractProvides<R, Tag>
>;

Exit type

Added in v1.0.0 Source

Signature

type Exit<R> = Exit_<SuccessExit<R>, ErrorExit<R>>;

ExitEncoded type

Added in v1.0.0 Source

Signature

type ExitEncoded<R, Defect = unknown> = Schema.ExitEncoded<
  SuccessExitEncoded<R>,
  ErrorExitEncoded<R>,
  Defect
>;

ExtractProvides type

Added in v1.0.0 Source

Signature

type ExtractProvides<R extends Any, Tag extends string> =
  R extends Rpc<Tag, infer _Payload, infer _Success, infer _Error, infer _Middleware>
    ? _Middleware extends {
        readonly provides: Context_.Tag<infer _I, infer _S>;
      }
      ? _I
      : never
    : never;

ExtractTag type

Added in v1.0.0 Source

Signature

type ExtractTag<R extends Any, Tag extends string> =
  R extends Rpc<Tag, infer _Payload, infer _Success, infer _Error, infer _Middleware> ? R : never;

From interface

Added in v1.0.0 Source

Signature

interface From<S extends AnyTaggedRequestSchema> extends Rpc<
  S["_tag"],
  S,
  S["success"],
  S["failure"]
> {
  constructor(_: never);
}

Handler interface

Added in v1.0.0 Source

Represents an implemented rpc.

Signature

interface Handler<Tag extends string> {
  readonly _: typeof _;
  readonly context: never;
  readonly handler: (
    request: any,
    options: {
      readonly clientId: number;
      readonly headers: Headers;
    },
  ) => Effect<any, any, never> | Stream<any, any, never>;
  readonly tag: Tag;
}

IsStream type

Added in v1.0.0 Source

Signature

type IsStream<R extends Any, Tag extends string> =
  R extends Rpc<
    Tag,
    infer _Payload,
    RpcSchema.Stream<infer _A, infer _E>,
    infer _Error,
    infer _Middleware
  >
    ? true
    : never;

Middleware type

Added in v1.0.0 Source

Signature

type Middleware<R> =
  R extends Rpc<infer _Tag, infer _Payload, infer _Success, infer _Error, infer _Middleware>
    ? Context_.Tag.Identifier<_Middleware>
    : never;

MiddlewareClient type

Added in v1.0.0 Source

Signature

type MiddlewareClient<R> =
  R extends Rpc<infer _Tag, infer _Payload, infer _Success, infer _Error, infer _Middleware>
    ? _Middleware extends {
        readonly requiredForClient: true;
      }
      ? RpcMiddleware.ForClient<Context_.Tag.Identifier<_Middleware>>
      : never
    : never;

Payload type

Added in v1.0.0 Source

Signature

type Payload<R> =
  R extends Rpc<infer _Tag, infer _Payload, infer _Success, infer _Error, infer _Middleware>
    ? _Payload["Type"]
    : never;

PayloadConstructor type

Added in v1.0.0 Source

Signature

type PayloadConstructor<R> =
  R extends Rpc<infer _Tag, infer _Payload, infer _Success, infer _Error, infer _Middleware>
    ? _Payload extends {
        readonly fields: Schema.Struct.Fields;
      }
      ? Schema.Simplify<Schema.Struct.Constructor<_Payload["fields"]>>
      : _Payload["Type"]
    : never;

Prefixed type

Added in v1.0.0 Source

Signature

type Prefixed<Rpcs extends Any, Prefix extends string> =
  Rpcs extends Rpc<infer _Tag, infer _Payload, infer _Success, infer _Error, infer _Middleware>
    ? Rpc<`${Prefix}${_Tag}`, _Payload, _Success, _Error, _Middleware>
    : never;

ResultFrom type

Added in v1.0.0 Source

Signature

type ResultFrom<R extends Any, Context> =
  R extends Rpc<infer _Tag, infer _Payload, infer _Success, infer _Error, infer _Middleware>
    ? [_Success] extends [RpcSchema.Stream<infer _SA, infer _SE>]
      ?
          | Stream<_SA["Type"], _SE["Type"] | _Error["Type"], Context>
          | Effect<
              ReadonlyMailbox<_SA["Type"], _SE["Type"] | _Error["Type"]>,
              _SE["Type"] | Schema.Schema.Type<_Error>,
              Context
            >
      : Effect<_Success["Type"], _Error["Type"], Context>
    : never;

Rpc interface

Added in v1.0.0 Source

Represents an API endpoint. An API endpoint is mapped to a single route on the underlying HttpRouter.

Signature

interface Rpc<
  in out Tag extends string,
  out Payload extends AnySchema = typeof Schema.Void,
  out Success extends Schema.Schema.Any = typeof Schema.Void,
  out Error extends Schema.Schema.All = typeof Schema.Never,
  out Middleware extends RpcMiddleware.TagClassAny = never,
> extends Pipeable {
  constructor(_: never);
  readonly _tag: Tag;
  readonly [TypeId]: typeof TypeId;
  readonly annotations: Context<never>;
  readonly defectSchema: any;
  readonly errorSchema: Error;
  readonly key: string;
  readonly middlewares: ReadonlySet<Middleware>;
  readonly payloadSchema: Payload;
  readonly successSchema: Success;
  annotate<I, S>(tag: Tag<I, S>, value: S): Rpc<Tag, Payload, Success, Error, Middleware>;
  annotateContext<I>(context: Context<I>): Rpc<Tag, Payload, Success, Error, Middleware>;
  middleware<M extends TagClassAny>(
    middleware: M,
  ): Rpc<Tag, Payload, Success, Error, Middleware | M>;
  prefix<Prefix extends string>(
    prefix: Prefix,
  ): Rpc<`${Prefix}${Tag}`, Payload, Success, Error, Middleware>;
  setError<E extends Any>(schema: E): Rpc<Tag, Payload, Success, E, Middleware>;
  setPayload<P extends Fields | Struct<any>>(
    schema: P,
  ): Rpc<
    Tag,
    P extends Struct<_> ? P : P extends Fields ? Struct<P> : never,
    Success,
    Error,
    Middleware
  >;
  setSuccess<S extends Any>(schema: S): Rpc<Tag, Payload, S, Error, Middleware>;
}

Success type

Added in v1.0.0 Source

Signature

type Success<R> =
  R extends Rpc<infer _Tag, infer _Payload, infer _Success, infer _Error, infer _Middleware>
    ? _Success["Type"]
    : never;

SuccessChunk type

Added in v1.0.0 Source

Signature

type SuccessChunk<R> = Success<R> extends Stream<infer _A, infer _E, infer _Env> ? _A : never;

SuccessChunkEncoded type

Added in v1.0.0 Source

Signature

type SuccessChunkEncoded<R> =
  SuccessEncoded<R> extends Stream<infer _A, infer _E, infer _Env> ? _A : never;

SuccessEncoded type

Added in v1.0.0 Source

Signature

type SuccessEncoded<R> =
  R extends Rpc<infer _Tag, infer _Payload, infer _Success, infer _Error, infer _Middleware>
    ? _Success["Encoded"]
    : never;

SuccessExit type

Added in v1.0.0 Source

Signature

type SuccessExit<R> =
  SuccessSchema<R> extends infer S
    ? S extends RpcSchema.Stream<infer _A, infer _E>
      ? void
      : Schema.Schema.Type<S>
    : never;

SuccessExitEncoded type

Added in v1.0.0 Source

Signature

type SuccessExitEncoded<R> =
  SuccessSchema<R> extends infer S
    ? S extends RpcSchema.Stream<infer _A, infer _E>
      ? void
      : Schema.Schema.Encoded<S>
    : never;

SuccessSchema type

Added in v1.0.0 Source

Signature

type SuccessSchema<R> =
  R extends Rpc<infer _Tag, infer _Payload, infer _Success, infer _Error, infer _Middleware>
    ? _Success
    : never;

Tag type

Added in v1.0.0 Source

Signature

type Tag<R> =
  R extends Rpc<infer _Tag, infer _Payload, infer _Success, infer _Error, infer _Middleware>
    ? _Tag
    : never;

ToHandler type

Added in v1.0.0 Source

Signature

type ToHandler<R extends Any> =
  R extends Rpc<infer _Tag, infer _Payload, infer _Success, infer _Error, infer _Middleware>
    ? Handler<_Tag>
    : never;

ToHandlerFn type

Added in v1.0.0 Source

Signature

type ToHandlerFn<Current extends Any, R = any> = (
  payload: Payload<Current>,
  options: {
    readonly clientId: number;
    readonly headers: Headers;
  },
) => ResultFrom<Current, R> | Wrapper<ResultFrom<Current, R>>;

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;

Wrapper

fork

Added in v1.0.0 Source

You can use fork to wrap a response Effect or Stream, to ensure that the response is executed concurrently regardless of the RpcServer concurrency setting.

Signature

declare const fork: <A extends object>(value: A) => A extends Wrapper<infer _> ? A : Wrapper<A>;

isWrapper

Added in v1.0.0 Source

Signature

declare function isWrapper(u: object): u is Wrapper<any>;

You can use uninterruptible to wrap a response Effect or Stream, to ensure that it is executed inside an uninterruptible region.

Signature

declare const uninterruptible: <A extends object>(
  value: A,
) => A extends Wrapper<infer _> ? A : Wrapper<A>;

wrap

Added in v1.0.0 Source

Signature

declare function wrap(options: {
  readonly fork?: boolean;
  readonly uninterruptible?: boolean;
}): <A extends object>(value: A) => A extends Wrapper<_> ? A : Wrapper<A>;

Wrapper interface

Added in v1.0.0 Source

Signature

interface Wrapper<A> {
  readonly [WrapperTypeId]: typeof WrapperTypeId;
  readonly fork: boolean;
  readonly uninterruptible: boolean;
  readonly value: A;
}

Signature

declare const WrapperTypeId: unique symbol;

WrapperTypeId type

Added in v1.0.0 Source

Signature

type WrapperTypeId = typeof WrapperTypeId;