Rpc
Constructors
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;fromTaggedRequest
Added in v1.0.0
Source
Signature
declare function fromTaggedRequest<S extends AnyTaggedRequestSchema>(schema: S): From<S>;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
Models
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;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;
}Signature
type Context<R> =
R extends Rpc<infer _Tag, infer _Payload, infer _Success, infer _Error, infer _Middleware>
? _Payload["Context"] | _Success["Context"] | _Error["Context"]
: never;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>>;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>
>;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;Signature
interface From<S extends AnyTaggedRequestSchema> extends Rpc<
S["_tag"],
S,
S["success"],
S["failure"]
> {
constructor(_: never);
}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;
}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;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;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;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>;
}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;Signature
type Tag<R> =
R extends Rpc<infer _Tag, infer _Payload, infer _Success, infer _Error, infer _Middleware>
? _Tag
: never;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
Wrapper
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>;Signature
declare function isWrapper(u: object): u is Wrapper<any>;uninterruptible
Added in v1.0.0
Source
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>;Signature
declare function wrap(options: {
readonly fork?: boolean;
readonly uninterruptible?: boolean;
}): <A extends object>(value: A) => A extends Wrapper<_> ? A : Wrapper<A>;Signature
interface Wrapper<A> {
readonly [WrapperTypeId]: typeof WrapperTypeId;
readonly fork: boolean;
readonly uninterruptible: boolean;
readonly value: A;
}WrapperTypeId
Added in v1.0.0
Source
Signature
declare const WrapperTypeId: unique symbol;WrapperTypeId type
Added in v1.0.0
Source
Signature
type WrapperTypeId = typeof WrapperTypeId;
Represents an implemented rpc.