EdgeAIG's picture
download
raw
10.8 kB
/**
* Service for serving Effect HTTP responses on a concrete HTTP server.
*
* Platform adapters provide `HttpServer`, and routers or applications consume
* it to run an `HttpServerResponse` effect for each incoming request. The
* service exposes the listening address, while this module also includes helpers
* for address formatting, server logging, and clients that target the current
* server in tests.
*
* @since 4.0.0
*/
import * as Context from "../../Context.ts";
import * as Effect from "../../Effect.ts";
import * as FileSystem from "../../FileSystem.ts";
import * as Layer from "../../Layer.ts";
import * as Path from "../../Path.ts";
import type * as Scope from "../../Scope.ts";
import * as Etag from "./Etag.ts";
import * as HttpClient from "./HttpClient.ts";
import type * as Middleware from "./HttpMiddleware.ts";
import * as HttpPlatform from "./HttpPlatform.ts";
import type { HttpServerRequest } from "./HttpServerRequest.ts";
import type { HttpServerResponse } from "./HttpServerResponse.ts";
declare const HttpServer_base: Context.ServiceClass<HttpServer, "effect/http/HttpServer", {
readonly serve: {
<E, R>(effect: Effect.Effect<HttpServerResponse, E, R>): Effect.Effect<void, never, Exclude<R, HttpServerRequest> | Scope.Scope>;
<E, R, App extends Effect.Effect<HttpServerResponse, any, any>>(effect: Effect.Effect<HttpServerResponse, E, R>, middleware: Middleware.HttpMiddleware.Applied<App, E, R>): Effect.Effect<void, never, Exclude<R, HttpServerRequest> | Scope.Scope>;
};
readonly address: Address;
}>;
/**
* Service tag for an HTTP server runtime.
*
* **Details**
*
* The service can serve an HTTP response effect and exposes the address where the
* server is listening.
*
* @category models
* @since 4.0.0
*/
export declare class HttpServer extends HttpServer_base {
}
/**
* Address where an HTTP server is listening.
*
* **Details**
*
* The address is either a TCP host and port or a Unix domain socket path.
*
* @category address
* @since 4.0.0
*/
export type Address = UnixAddress | TcpAddress;
/**
* TCP address for an HTTP server, identified by hostname and port.
*
* @category address
* @since 4.0.0
*/
export interface TcpAddress {
readonly _tag: "TcpAddress";
readonly hostname: string;
readonly port: number;
}
/**
* Unix domain socket address for an HTTP server.
*
* @category address
* @since 4.0.0
*/
export interface UnixAddress {
readonly _tag: "UnixAddress";
readonly path: string;
}
/**
* Constructs an `HttpServer` service from a serving implementation and listening
* address.
*
* @category constructors
* @since 4.0.0
*/
export declare const make: (options: {
readonly serve: (httpEffect: Effect.Effect<HttpServerResponse, unknown, HttpServerRequest | Scope.Scope>, middleware?: Middleware.HttpMiddleware) => Effect.Effect<void, never, Scope.Scope>;
readonly address: Address;
}) => HttpServer["Service"];
/**
* Creates a layer that starts serving an HTTP response effect with the current
* `HttpServer`.
*
* **Details**
*
* The request service is supplied by the server for each request; the returned
* layer still requires the server, a scope, and any non-request dependencies of
* the response effect or middleware.
*
* @category accessors
* @since 4.0.0
*/
export declare const serve: {
/**
* Creates a layer that starts serving an HTTP response effect with the current
* `HttpServer`.
*
* **Details**
*
* The request service is supplied by the server for each request; the returned
* layer still requires the server, a scope, and any non-request dependencies of
* the response effect or middleware.
*
* @category accessors
* @since 4.0.0
*/
(): <E, R>(effect: Effect.Effect<HttpServerResponse, E, R>) => Layer.Layer<never, never, HttpServer | Exclude<R, HttpServerRequest | Scope.Scope>>;
/**
* Creates a layer that starts serving an HTTP response effect with the current
* `HttpServer`.
*
* **Details**
*
* The request service is supplied by the server for each request; the returned
* layer still requires the server, a scope, and any non-request dependencies of
* the response effect or middleware.
*
* @category accessors
* @since 4.0.0
*/
<E, R, App extends Effect.Effect<HttpServerResponse, any, any>>(middleware: Middleware.HttpMiddleware.Applied<App, E, R>): (effect: Effect.Effect<HttpServerResponse, E, R>) => Layer.Layer<never, never, HttpServer | Exclude<Effect.Services<App>, HttpServerRequest | Scope.Scope>>;
/**
* Creates a layer that starts serving an HTTP response effect with the current
* `HttpServer`.
*
* **Details**
*
* The request service is supplied by the server for each request; the returned
* layer still requires the server, a scope, and any non-request dependencies of
* the response effect or middleware.
*
* @category accessors
* @since 4.0.0
*/
<E, R>(effect: Effect.Effect<HttpServerResponse, E, R>): Layer.Layer<never, never, HttpServer | Exclude<R, HttpServerRequest | Scope.Scope>>;
/**
* Creates a layer that starts serving an HTTP response effect with the current
* `HttpServer`.
*
* **Details**
*
* The request service is supplied by the server for each request; the returned
* layer still requires the server, a scope, and any non-request dependencies of
* the response effect or middleware.
*
* @category accessors
* @since 4.0.0
*/
<E, R, App extends Effect.Effect<HttpServerResponse, any, any>>(effect: Effect.Effect<HttpServerResponse, E, R>, middleware: Middleware.HttpMiddleware.Applied<App, E, R>): Layer.Layer<never, never, HttpServer | Exclude<Effect.Services<App>, HttpServerRequest | Scope.Scope>>;
};
/**
* Effect that starts serving an HTTP response effect with the current
* `HttpServer`.
*
* **Details**
*
* The request service is supplied by the server for each request; the effect
* requires a scope and any non-request dependencies of the response effect or
* middleware.
*
* @category accessors
* @since 4.0.0
*/
export declare const serveEffect: {
/**
* Effect that starts serving an HTTP response effect with the current
* `HttpServer`.
*
* **Details**
*
* The request service is supplied by the server for each request; the effect
* requires a scope and any non-request dependencies of the response effect or
* middleware.
*
* @category accessors
* @since 4.0.0
*/
(): <E, R>(effect: Effect.Effect<HttpServerResponse, E, R>) => Effect.Effect<void, never, Scope.Scope | HttpServer | Exclude<R, HttpServerRequest>>;
/**
* Effect that starts serving an HTTP response effect with the current
* `HttpServer`.
*
* **Details**
*
* The request service is supplied by the server for each request; the effect
* requires a scope and any non-request dependencies of the response effect or
* middleware.
*
* @category accessors
* @since 4.0.0
*/
<E, R, App extends Effect.Effect<HttpServerResponse, any, any>>(middleware: Middleware.HttpMiddleware.Applied<App, E, R>): (effect: Effect.Effect<HttpServerResponse, E, R>) => Effect.Effect<void, never, Scope.Scope | HttpServer | Exclude<Effect.Services<App>, HttpServerRequest>>;
/**
* Effect that starts serving an HTTP response effect with the current
* `HttpServer`.
*
* **Details**
*
* The request service is supplied by the server for each request; the effect
* requires a scope and any non-request dependencies of the response effect or
* middleware.
*
* @category accessors
* @since 4.0.0
*/
<E, R>(effect: Effect.Effect<HttpServerResponse, E, R>): Effect.Effect<void, never, Scope.Scope | HttpServer | Exclude<R, HttpServerRequest>>;
/**
* Effect that starts serving an HTTP response effect with the current
* `HttpServer`.
*
* **Details**
*
* The request service is supplied by the server for each request; the effect
* requires a scope and any non-request dependencies of the response effect or
* middleware.
*
* @category accessors
* @since 4.0.0
*/
<E, R, App extends Effect.Effect<HttpServerResponse, any, any>>(effect: Effect.Effect<HttpServerResponse, E, R>, middleware: Middleware.HttpMiddleware.Applied<App, E, R>): Effect.Effect<void, never, Scope.Scope | HttpServer | Exclude<Effect.Services<App>, HttpServerRequest>>;
};
/**
* Formats a server address as a display string.
*
* **Details**
*
* TCP addresses are formatted as `http://host:port`; Unix socket addresses are
* formatted as `unix://path`.
*
* @category address
* @since 4.0.0
*/
export declare const formatAddress: (address: Address) => string;
/**
* Reads the current server address, formats it with `formatAddress`, and passes
* the formatted address to the supplied effectful function.
*
* @category address
* @since 4.0.0
*/
export declare const addressFormattedWith: <A, E, R>(f: (address: string) => Effect.Effect<A, E, R>) => Effect.Effect<A, E, HttpServer | R>;
/**
* Logs the formatted address of the current HTTP server.
*
* @category address
* @since 4.0.0
*/
export declare const logAddress: Effect.Effect<void, never, HttpServer>;
/**
* Adds address logging to a layer that provides an `HttpServer`.
*
* @category address
* @since 4.0.0
*/
export declare const withLogAddress: <A, E, R>(layer: Layer.Layer<A, E, R>) => Layer.Layer<A, E, R | Exclude<HttpServer, A>>;
/**
* Builds an `HttpClient` that sends requests to the current test HTTP server.
*
* **Details**
*
* For TCP servers, requests are prefixed with the server URL and `0.0.0.0` is
* rewritten to `127.0.0.1`.
*
* **Gotchas**
*
* Unix socket addresses are not supported.
*
* @category testing
* @since 4.0.0
*/
export declare const makeTestClient: Effect.Effect<HttpClient.HttpClient, never, HttpServer | HttpClient.HttpClient>;
/**
* Layer that provides the test `HttpClient` created by `makeTestClient`.
*
* @category testing
* @since 4.0.0
*/
export declare const layerTestClient: Layer.Layer<HttpClient.HttpClient, never, HttpServer | HttpClient.HttpClient>;
/**
* Layer that provides the platform services commonly needed by HTTP
* server tests.
*
* **Details**
*
* It includes `HttpPlatform`, `Path`, a weak ETag generator, and a no-op
* `FileSystem`.
*
* @category testing
* @since 4.0.0
*/
export declare const layerServices: Layer.Layer<Path.Path | HttpPlatform.HttpPlatform | FileSystem.FileSystem | Etag.Generator>;
export {};
//# sourceMappingURL=HttpServer.d.ts.map

Xet Storage Details

Size:
10.8 kB
·
Xet hash:
7a593196777a919703ff0ac52c13b197f68735b233976a2237814be786ca47f5

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