EdgeAIG's picture
download
raw
6.25 kB
/**
* Connects typed `HttpApi` clients to atoms.
*
* The service created here exposes the generated HTTP API client plus
* atom-based query and mutation helpers. Query atoms call endpoints and track
* their asynchronous result, while mutations run endpoint calls that can
* invalidate reactivity keys after a successful request. Query atoms can also be
* cached, serialized for hydration, and kept alive with a time-to-live.
*
* @since 4.0.0
*/
import * as Context from "../../Context.ts";
import * as Duration from "../../Duration.ts";
import * as Effect from "../../Effect.ts";
import * as Layer from "../../Layer.ts";
import type { ReadonlyRecord } from "../../Record.ts";
import * as Schema from "../../Schema.ts";
import type { Simplify } from "../../Types.ts";
import type * as HttpClient from "../http/HttpClient.ts";
import type { HttpClientResponse } from "../http/HttpClientResponse.ts";
import type * as HttpApi from "../httpapi/HttpApi.ts";
import * as HttpApiClient from "../httpapi/HttpApiClient.ts";
import * as HttpApiEndpoint from "../httpapi/HttpApiEndpoint.ts";
import type * as HttpApiGroup from "../httpapi/HttpApiGroup.ts";
import type * as HttpApiMiddleware from "../httpapi/HttpApiMiddleware.ts";
import * as AsyncResult from "./AsyncResult.ts";
import * as Atom from "./Atom.ts";
/**
* A `Context.Service` for an HTTP API client integrated with atom reactivity.
*
* **Details**
*
* It exposes the generated HTTP API client, an atom runtime, mutation helpers that
* return `AtomResultFn`s, and query helpers that return atoms of endpoint results.
*
* @category models
* @since 4.0.0
*/
export interface AtomHttpApiClient<Self, Id extends string, Groups extends HttpApiGroup.Any> extends Context.Service<Self, HttpApiClient.Client<Groups, never, never>> {
new (_: never): Context.ServiceClass.Shape<Id, HttpApiClient.Client<Groups, never, never>>;
readonly runtime: Atom.AtomRuntime<Self>;
readonly mutation: <GroupName extends HttpApiGroup.Name<Groups>, Name extends HttpApiEndpoint.Name<HttpApiGroup.Endpoints<Group>>, Group extends HttpApiGroup.Any = HttpApiGroup.WithName<Groups, GroupName>, Endpoint extends HttpApiEndpoint.Any = HttpApiEndpoint.WithName<HttpApiGroup.Endpoints<Group>, Name>, const ResponseMode extends HttpApiEndpoint.ClientResponseMode = HttpApiEndpoint.ClientResponseMode>(group: GroupName, endpoint: Name, options?: {
readonly responseMode?: ResponseMode | undefined;
}) => [Endpoint] extends [
HttpApiEndpoint.HttpApiEndpoint<infer _Name, infer _Method, infer _Path, infer _Params, infer _Query, infer _Payload, infer _Headers, infer _Success, infer _Error, infer _Middleware, infer _RE>
] ? Atom.AtomResultFn<Simplify<HttpApiEndpoint.ClientRequest<_Params, _Query, _Payload, _Headers, "decoded-only"> & {
readonly reactivityKeys?: ReadonlyArray<unknown> | ReadonlyRecord<string, ReadonlyArray<unknown>> | undefined;
}>, ResponseByMode<Extract<_Success, Schema.Top>["Type"], ResponseMode>, ErrorByMode<_Error, _Middleware, ResponseMode>> : never;
readonly query: <GroupName extends HttpApiGroup.Name<Groups>, Name extends HttpApiEndpoint.Name<HttpApiGroup.Endpoints<Group>>, Group extends HttpApiGroup.Any = HttpApiGroup.WithName<Groups, GroupName>, Endpoint extends HttpApiEndpoint.Any = HttpApiEndpoint.WithName<HttpApiGroup.Endpoints<Group>, Name>, const ResponseMode extends HttpApiEndpoint.ClientResponseMode = "decoded-only">(group: GroupName, endpoint: Name, request: [Endpoint] extends [
HttpApiEndpoint.HttpApiEndpoint<infer _Name, infer _Method, infer _Path, infer _Params, infer _Query, infer _Payload, infer _Headers, infer _Success, infer _Error, infer _R, infer _RE>
] ? Simplify<HttpApiEndpoint.ClientRequest<_Params, _Query, _Payload, _Headers, ResponseMode> & {
readonly reactivityKeys?: ReadonlyArray<unknown> | ReadonlyRecord<string, ReadonlyArray<unknown>> | undefined;
readonly timeToLive?: Duration.Input | undefined;
readonly serializationKey?: string | undefined;
}> : never) => [Endpoint] extends [
HttpApiEndpoint.HttpApiEndpoint<infer _Name, infer _Method, infer _Path, infer _Params, infer _Query, infer _Payload, infer _Headers, infer _Success, infer _Error, infer _Middleware, infer _RE>
] ? Atom.Atom<AsyncResult.AsyncResult<ResponseByMode<Extract<_Success, Schema.Top>["Type"], ResponseMode>, ErrorByMode<_Error, _Middleware, ResponseMode>>> : never;
}
declare global {
interface ErrorConstructor {
stackTraceLimit: number;
}
}
/**
* Creates a `Context.Service` class for an HTTP API client backed by an atom
* runtime.
*
* **Details**
*
* The options provide the API definition, HTTP client layer, optional client and
* response transforms, base URL, and runtime factory used by the query and
* mutation helpers.
*
* @category constructors
* @since 4.0.0
*/
export declare const Service: <Self>() => <const Id extends string, ApiId extends string, Groups extends HttpApiGroup.Any>(id: Id, options: {
readonly api: HttpApi.HttpApi<ApiId, Groups>;
readonly httpClient: Layer.Layer<HttpApiGroup.ClientServices<Groups> | HttpClient.HttpClient> | ((get: Atom.AtomContext) => Layer.Layer<HttpApiGroup.ClientServices<Groups> | HttpClient.HttpClient>);
readonly transformClient?: ((client: HttpClient.HttpClient) => HttpClient.HttpClient) | undefined;
readonly transformResponse?: ((effect: Effect.Effect<unknown, unknown, unknown>) => Effect.Effect<unknown, unknown, unknown>) | undefined;
readonly baseUrl?: URL | string | undefined;
readonly runtime?: Atom.RuntimeFactory | undefined;
}) => AtomHttpApiClient<Self, Id, Groups>;
type ResponseByMode<Success, ResponseMode extends HttpApiEndpoint.ClientResponseMode> = [ResponseMode] extends [
"decoded-and-response"
] ? [Success, HttpClientResponse] : [ResponseMode] extends ["response-only"] ? HttpClientResponse : Success;
type ErrorByMode<Error extends Schema.Top, Middleware, ResponseMode extends HttpApiEndpoint.ClientResponseMode> = HttpApiMiddleware.Error<Middleware> | HttpApiMiddleware.ClientError<Middleware> | ([ResponseMode] extends ["response-only"] ? never : Error["Type"]);
export {};
//# sourceMappingURL=AtomHttpApi.d.ts.map

Xet Storage Details

Size:
6.25 kB
·
Xet hash:
7f94e2ce3b67db7efbd497b9e5209aac9f28a07ac1688361334d21105b1283e4

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