EdgeAIG's picture
download
raw
5.42 kB
/**
* Describes an Effect HTTP API as groups of endpoints.
*
* An `HttpApi` value is data: it has an identifier, annotations, and groups of
* endpoints that describe request inputs, responses, middleware, and route
* metadata. The same description can be used by server builders, generated
* clients, URL builders, OpenAPI generation, and reflection tools.
*
* @since 4.0.0
*/
import type { NonEmptyReadonlyArray } from "../../Array.ts";
import * as Context from "../../Context.ts";
import { type Pipeable } from "../../Pipeable.ts";
import * as Predicate from "../../Predicate.ts";
import * as Record from "../../Record.ts";
import type * as Schema from "../../Schema.ts";
import type { PathInput } from "../http/HttpRouter.ts";
import * as HttpApiEndpoint from "./HttpApiEndpoint.ts";
import type * as HttpApiGroup from "./HttpApiGroup.ts";
import type * as HttpApiMiddleware from "./HttpApiMiddleware.ts";
declare const TypeId = "~effect/httpapi/HttpApi";
/**
* Returns `true` when a value is an `HttpApi`.
*
* @category guards
* @since 4.0.0
*/
export declare const isHttpApi: (u: unknown) => u is Any;
/**
* An `HttpApi` is a collection of HTTP API groups and endpoints that represents a
* portion of your domain.
*
* **When to use**
*
* Use when endpoint implementations can be provided with `HttpApiBuilder.group`, and the
* completed API can be registered with `HttpApiBuilder.layer`.
*
* @category models
* @since 4.0.0
*/
export interface HttpApi<out Id extends string, out Groups extends HttpApiGroup.Any = never> extends Pipeable {
new (_: never): {};
readonly [TypeId]: typeof TypeId;
readonly identifier: Id;
readonly groups: Record.ReadonlyRecord<string, Groups>;
readonly annotations: Context.Context<never>;
/**
* Add a `HttpApiGroup` to the `HttpApi`.
*/
add<const A extends NonEmptyReadonlyArray<HttpApiGroup.Any>>(...groups: A): HttpApi<Id, Groups | A[number]>;
/**
* Add another `HttpApi` to the `HttpApi`.
*/
addHttpApi<Id2 extends string, Groups2 extends HttpApiGroup.Any>(api: HttpApi<Id2, Groups2>): HttpApi<Id, Groups | Groups2>;
/**
* Prefix all endpoints in the `HttpApi`.
*/
prefix<const Prefix extends PathInput>(prefix: Prefix): HttpApi<Id, HttpApiGroup.AddPrefix<Groups, Prefix>>;
/**
* Adds a middleware to every endpoint currently in the `HttpApi`.
*
* **Gotchas**
*
* Endpoints added after this method is called do not receive the middleware.
*/
middleware<I extends HttpApiMiddleware.AnyId, S>(middleware: Context.Key<I, S>): HttpApi<Id, HttpApiGroup.AddMiddleware<Groups, I>>;
/**
* Annotate the `HttpApi`.
*/
annotate<I, S>(tag: Context.Key<I, S>, value: S): HttpApi<Id, Groups>;
/**
* Annotate the `HttpApi` with a Context.
*/
annotateMerge<I>(context: Context.Context<I>): HttpApi<Id, Groups>;
}
/**
* An `HttpApi` value with its identifier and group types erased.
*
* @category models
* @since 4.0.0
*/
export interface Any {
readonly [TypeId]: typeof TypeId;
}
/**
* An `HttpApi` with broad identifier and group types while retaining the concrete
* runtime properties used by implementation helpers.
*
* @category models
* @since 4.0.0
*/
export type AnyWithProps = HttpApi<string, HttpApiGroup.AnyWithProps>;
/**
* Creates an empty `HttpApi` with the supplied identifier.
*
* **When to use**
*
* Use when you need to start defining an HTTP API, add groups with `add` or
* `addHttpApi`, provide endpoint implementations with `HttpApiBuilder.group`,
* and register the API with `HttpApiBuilder.layer`.
*
* @category constructors
* @since 4.0.0
*/
export declare const make: <const Id extends string>(identifier: Id) => HttpApi<Id, never>;
/**
* Describes the groups and endpoints in an `HttpApi`.
*
* **Details**
*
* The callbacks receive each group or endpoint with merged annotations, endpoint
* middleware, and response schemas grouped by HTTP status.
*
* @category reflection
* @since 4.0.0
*/
export declare const reflect: <Id extends string, Groups extends HttpApiGroup.Any>(self: HttpApi<Id, Groups>, options: {
readonly predicate?: Predicate.Predicate<{
readonly endpoint: HttpApiEndpoint.AnyWithProps;
readonly group: HttpApiGroup.AnyWithProps;
}> | undefined;
readonly onGroup: (options: {
readonly group: HttpApiGroup.AnyWithProps;
readonly mergedAnnotations: Context.Context<never>;
}) => void;
readonly onEndpoint: (options: {
readonly group: HttpApiGroup.AnyWithProps;
readonly endpoint: HttpApiEndpoint.AnyWithProps;
readonly mergedAnnotations: Context.Context<never>;
readonly middleware: ReadonlySet<HttpApiMiddleware.AnyService>;
readonly successes: ReadonlyMap<number, readonly [Schema.Top, ...Array<Schema.Top>]>;
readonly errors: ReadonlyMap<number, readonly [Schema.Top, ...Array<Schema.Top>]>;
}) => void;
}) => void;
declare const AdditionalSchemas_base: Context.ServiceClass<AdditionalSchemas, "effect/httpapi/HttpApi/AdditionalSchemas", readonly Schema.Top[]>;
/**
* Adds additional schemas to components/schemas.
* The provided schemas must have a `identifier` annotation.
*
* @category services
* @since 4.0.0
*/
export declare class AdditionalSchemas extends AdditionalSchemas_base {
}
export {};
//# sourceMappingURL=HttpApi.d.ts.map

Xet Storage Details

Size:
5.42 kB
·
Xet hash:
aaf7df14d4680e34cbb7ba12d1cdeae32da3fd1c4b01275d13831579431bf31e

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