mirror of
https://github.com/denoland/deno.git
synced 2024-11-25 15:29:32 -05:00
BREAKING(dts): improve types for Deno.serve
(#25369)
This significantly simplifies the types for `Deno.serve`. The following types become generic over the address type: - ServeHandlerInfo - ServeHandler - ServeOptions - ServeInit The following types are removed entirely: - ServeTlsOptions - ServeUnixOptions - ServeUnixHandlerInfo - ServeUnixHandler
This commit is contained in:
parent
1a82b0f808
commit
90338eff8d
2 changed files with 47 additions and 209 deletions
244
cli/tsc/dts/lib.deno.ns.d.ts
vendored
244
cli/tsc/dts/lib.deno.ns.d.ts
vendored
|
@ -6064,9 +6064,11 @@ declare namespace Deno {
|
||||||
*
|
*
|
||||||
* @category HTTP Server
|
* @category HTTP Server
|
||||||
*/
|
*/
|
||||||
export interface ServeHandlerInfo {
|
export interface ServeHandlerInfo<Addr extends Deno.Addr = Deno.Addr> {
|
||||||
/** The remote address of the connection. */
|
/** The remote address of the connection. */
|
||||||
remoteAddr: Deno.NetAddr;
|
remoteAddr: Addr;
|
||||||
|
/** The completion promise */
|
||||||
|
completed: Promise<void>;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** A handler for HTTP requests. Consumes a request and returns a response.
|
/** A handler for HTTP requests. Consumes a request and returns a response.
|
||||||
|
@ -6077,9 +6079,9 @@ declare namespace Deno {
|
||||||
*
|
*
|
||||||
* @category HTTP Server
|
* @category HTTP Server
|
||||||
*/
|
*/
|
||||||
export type ServeHandler = (
|
export type ServeHandler<Addr extends Deno.Addr = Deno.Addr> = (
|
||||||
request: Request,
|
request: Request,
|
||||||
info: ServeHandlerInfo,
|
info: ServeHandlerInfo<Addr>,
|
||||||
) => Response | Promise<Response>;
|
) => Response | Promise<Response>;
|
||||||
|
|
||||||
/** Interface that module run with `deno serve` subcommand must conform to.
|
/** Interface that module run with `deno serve` subcommand must conform to.
|
||||||
|
@ -6115,7 +6117,27 @@ declare namespace Deno {
|
||||||
*
|
*
|
||||||
* @category HTTP Server
|
* @category HTTP Server
|
||||||
*/
|
*/
|
||||||
export interface ServeOptions {
|
export interface ServeOptions<Addr extends Deno.Addr = Deno.Addr> {
|
||||||
|
/** An {@linkcode AbortSignal} to close the server and all connections. */
|
||||||
|
signal?: AbortSignal;
|
||||||
|
|
||||||
|
/** The handler to invoke when route handlers throw an error. */
|
||||||
|
onError?: (error: unknown) => Response | Promise<Response>;
|
||||||
|
|
||||||
|
/** The callback which is called when the server starts listening. */
|
||||||
|
onListen?: (localAddr: Addr) => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Options that can be passed to `Deno.serve` to create a server listening on
|
||||||
|
* a TCP port.
|
||||||
|
*
|
||||||
|
* @category HTTP Server
|
||||||
|
*/
|
||||||
|
export interface ServeTcpOptions extends ServeOptions<Deno.NetAddr> {
|
||||||
|
/** The transport to use. */
|
||||||
|
transport?: "tcp";
|
||||||
|
|
||||||
/** The port to listen on.
|
/** The port to listen on.
|
||||||
*
|
*
|
||||||
* Set to `0` to listen on any available port.
|
* Set to `0` to listen on any available port.
|
||||||
|
@ -6133,109 +6155,37 @@ declare namespace Deno {
|
||||||
* @default {"0.0.0.0"} */
|
* @default {"0.0.0.0"} */
|
||||||
hostname?: string;
|
hostname?: string;
|
||||||
|
|
||||||
/** An {@linkcode AbortSignal} to close the server and all connections. */
|
|
||||||
signal?: AbortSignal;
|
|
||||||
|
|
||||||
/** Sets `SO_REUSEPORT` on POSIX systems. */
|
/** Sets `SO_REUSEPORT` on POSIX systems. */
|
||||||
reusePort?: boolean;
|
reusePort?: boolean;
|
||||||
|
|
||||||
/** The handler to invoke when route handlers throw an error. */
|
|
||||||
onError?: (error: unknown) => Response | Promise<Response>;
|
|
||||||
|
|
||||||
/** The callback which is called when the server starts listening. */
|
|
||||||
onListen?: (localAddr: Deno.NetAddr) => void;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Additional options which are used when opening a TLS (HTTPS) server.
|
/**
|
||||||
|
* Options that can be passed to `Deno.serve` to create a server listening on
|
||||||
|
* a Unix domain socket.
|
||||||
*
|
*
|
||||||
* @category HTTP Server
|
* @category HTTP Server
|
||||||
*/
|
*/
|
||||||
export interface ServeTlsOptions extends ServeOptions {
|
export interface ServeUnixOptions extends ServeOptions<Deno.UnixAddr> {
|
||||||
/**
|
/** The transport to use. */
|
||||||
* Server private key in PEM format. Use {@linkcode TlsCertifiedKeyOptions} instead.
|
transport?: "unix";
|
||||||
*
|
|
||||||
* @deprecated This will be removed in Deno 2.0. See the
|
|
||||||
* {@link https://docs.deno.com/runtime/manual/advanced/migrate_deprecations | Deno 1.x to 2.x Migration Guide}
|
|
||||||
* for migration instructions.
|
|
||||||
*/
|
|
||||||
cert?: string;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Cert chain in PEM format. Use {@linkcode TlsCertifiedKeyOptions} instead.
|
|
||||||
*
|
|
||||||
* @deprecated This will be removed in Deno 2.0. See the
|
|
||||||
* {@link https://docs.deno.com/runtime/manual/advanced/migrate_deprecations | Deno 1.x to 2.x Migration Guide}
|
|
||||||
* for migration instructions.
|
|
||||||
*/
|
|
||||||
key?: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @category HTTP Server
|
|
||||||
*/
|
|
||||||
export interface ServeInit {
|
|
||||||
/** The handler to invoke to process each incoming request. */
|
|
||||||
handler: ServeHandler;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @category HTTP Server
|
|
||||||
*/
|
|
||||||
export interface ServeTlsInit {
|
|
||||||
/** The handler to invoke to process each incoming request. */
|
|
||||||
handler: ServeHandler;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @category HTTP Server */
|
|
||||||
export interface ServeUnixOptions {
|
|
||||||
/** The unix domain socket path to listen on. */
|
/** The unix domain socket path to listen on. */
|
||||||
path: string;
|
path: string;
|
||||||
|
|
||||||
/** An {@linkcode AbortSignal} to close the server and all connections. */
|
|
||||||
signal?: AbortSignal;
|
|
||||||
|
|
||||||
/** The handler to invoke when route handlers throw an error. */
|
|
||||||
onError?: (error: unknown) => Response | Promise<Response>;
|
|
||||||
|
|
||||||
/** The callback which is called when the server starts listening. */
|
|
||||||
onListen?: (localAddr: Deno.UnixAddr) => void;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Information for a unix domain socket HTTP request.
|
|
||||||
*
|
|
||||||
* @category HTTP Server
|
|
||||||
*/
|
|
||||||
export interface ServeUnixHandlerInfo {
|
|
||||||
/** The remote address of the connection. */
|
|
||||||
remoteAddr: Deno.UnixAddr;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** A handler for unix domain socket HTTP requests. Consumes a request and returns a response.
|
|
||||||
*
|
|
||||||
* If a handler throws, the server calling the handler will assume the impact
|
|
||||||
* of the error is isolated to the individual request. It will catch the error
|
|
||||||
* and if necessary will close the underlying connection.
|
|
||||||
*
|
|
||||||
* @category HTTP Server
|
|
||||||
*/
|
|
||||||
export type ServeUnixHandler = (
|
|
||||||
request: Request,
|
|
||||||
info: ServeUnixHandlerInfo,
|
|
||||||
) => Response | Promise<Response>;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @category HTTP Server
|
* @category HTTP Server
|
||||||
*/
|
*/
|
||||||
export interface ServeUnixInit {
|
export interface ServeInit<Addr extends Deno.Addr = Deno.Addr> {
|
||||||
/** The handler to invoke to process each incoming request. */
|
/** The handler to invoke to process each incoming request. */
|
||||||
handler: ServeUnixHandler;
|
handler: ServeHandler<Addr>;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** An instance of the server created using `Deno.serve()` API.
|
/** An instance of the server created using `Deno.serve()` API.
|
||||||
*
|
*
|
||||||
* @category HTTP Server
|
* @category HTTP Server
|
||||||
*/
|
*/
|
||||||
export interface HttpServer<A extends Deno.Addr = Deno.Addr>
|
export interface HttpServer<Addr extends Deno.Addr = Deno.Addr>
|
||||||
extends AsyncDisposable {
|
extends AsyncDisposable {
|
||||||
/** A promise that resolves once server finishes - eg. when aborted using
|
/** A promise that resolves once server finishes - eg. when aborted using
|
||||||
* the signal passed to {@linkcode ServeOptions.signal}.
|
* the signal passed to {@linkcode ServeOptions.signal}.
|
||||||
|
@ -6243,7 +6193,7 @@ declare namespace Deno {
|
||||||
finished: Promise<void>;
|
finished: Promise<void>;
|
||||||
|
|
||||||
/** The local address this server is listening on. */
|
/** The local address this server is listening on. */
|
||||||
addr: A;
|
addr: Addr;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Make the server block the event loop from finishing.
|
* Make the server block the event loop from finishing.
|
||||||
|
@ -6262,15 +6212,6 @@ declare namespace Deno {
|
||||||
shutdown(): Promise<void>;
|
shutdown(): Promise<void>;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @category HTTP Server
|
|
||||||
*
|
|
||||||
* @deprecated This will be removed in Deno 2.0. See the
|
|
||||||
* {@link https://docs.deno.com/runtime/manual/advanced/migrate_deprecations | Deno 1.x to 2.x Migration Guide}
|
|
||||||
* for migration instructions.
|
|
||||||
*/
|
|
||||||
export type Server = HttpServer;
|
|
||||||
|
|
||||||
/** Serves HTTP requests with the given handler.
|
/** Serves HTTP requests with the given handler.
|
||||||
*
|
*
|
||||||
* The below example serves with the port `8000` on hostname `"127.0.0.1"`.
|
* The below example serves with the port `8000` on hostname `"127.0.0.1"`.
|
||||||
|
@ -6281,7 +6222,9 @@ declare namespace Deno {
|
||||||
*
|
*
|
||||||
* @category HTTP Server
|
* @category HTTP Server
|
||||||
*/
|
*/
|
||||||
export function serve(handler: ServeHandler): HttpServer<Deno.NetAddr>;
|
export function serve(
|
||||||
|
handler: ServeHandler<Deno.NetAddr>,
|
||||||
|
): HttpServer<Deno.NetAddr>;
|
||||||
/** Serves HTTP requests with the given option bag and handler.
|
/** Serves HTTP requests with the given option bag and handler.
|
||||||
*
|
*
|
||||||
* You can specify the socket path with `path` option.
|
* You can specify the socket path with `path` option.
|
||||||
|
@ -6329,68 +6272,8 @@ declare namespace Deno {
|
||||||
*/
|
*/
|
||||||
export function serve(
|
export function serve(
|
||||||
options: ServeUnixOptions,
|
options: ServeUnixOptions,
|
||||||
handler: ServeUnixHandler,
|
handler: ServeHandler<Deno.UnixAddr>,
|
||||||
): HttpServer<Deno.UnixAddr>;
|
): HttpServer<Deno.UnixAddr>;
|
||||||
/** Serves HTTP requests with the given option bag and handler.
|
|
||||||
*
|
|
||||||
* You can specify an object with a port and hostname option, which is the
|
|
||||||
* address to listen on. The default is port `8000` on hostname `"127.0.0.1"`.
|
|
||||||
*
|
|
||||||
* You can change the address to listen on using the `hostname` and `port`
|
|
||||||
* options. The below example serves on port `3000` and hostname `"0.0.0.0"`.
|
|
||||||
*
|
|
||||||
* ```ts
|
|
||||||
* Deno.serve(
|
|
||||||
* { port: 3000, hostname: "0.0.0.0" },
|
|
||||||
* (_req) => new Response("Hello, world")
|
|
||||||
* );
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* You can stop the server with an {@linkcode AbortSignal}. The abort signal
|
|
||||||
* needs to be passed as the `signal` option in the options bag. The server
|
|
||||||
* aborts when the abort signal is aborted. To wait for the server to close,
|
|
||||||
* await the promise returned from the `Deno.serve` API.
|
|
||||||
*
|
|
||||||
* ```ts
|
|
||||||
* const ac = new AbortController();
|
|
||||||
*
|
|
||||||
* const server = Deno.serve(
|
|
||||||
* { signal: ac.signal },
|
|
||||||
* (_req) => new Response("Hello, world")
|
|
||||||
* );
|
|
||||||
* server.finished.then(() => console.log("Server closed"));
|
|
||||||
*
|
|
||||||
* console.log("Closing server...");
|
|
||||||
* ac.abort();
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* By default `Deno.serve` prints the message
|
|
||||||
* `Listening on http://<hostname>:<port>/` on listening. If you like to
|
|
||||||
* change this behavior, you can specify a custom `onListen` callback.
|
|
||||||
*
|
|
||||||
* ```ts
|
|
||||||
* Deno.serve({
|
|
||||||
* onListen({ port, hostname }) {
|
|
||||||
* console.log(`Server started at http://${hostname}:${port}`);
|
|
||||||
* // ... more info specific to your server ..
|
|
||||||
* },
|
|
||||||
* }, (_req) => new Response("Hello, world"));
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* To enable TLS you must specify the `key` and `cert` options.
|
|
||||||
*
|
|
||||||
* ```ts
|
|
||||||
* const cert = "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n";
|
|
||||||
* const key = "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n";
|
|
||||||
* Deno.serve({ cert, key }, (_req) => new Response("Hello, world"));
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* @category HTTP Server
|
|
||||||
*/
|
|
||||||
export function serve(
|
|
||||||
options: ServeOptions,
|
|
||||||
handler: ServeHandler,
|
|
||||||
): HttpServer<Deno.NetAddr>;
|
|
||||||
/** Serves HTTP requests with the given option bag and handler.
|
/** Serves HTTP requests with the given option bag and handler.
|
||||||
*
|
*
|
||||||
* You can specify an object with a port and hostname option, which is the
|
* You can specify an object with a port and hostname option, which is the
|
||||||
|
@ -6449,9 +6332,9 @@ declare namespace Deno {
|
||||||
*/
|
*/
|
||||||
export function serve(
|
export function serve(
|
||||||
options:
|
options:
|
||||||
| ServeTlsOptions
|
| ServeTcpOptions
|
||||||
| (ServeTlsOptions & TlsCertifiedKeyOptions),
|
| (ServeTcpOptions & TlsCertifiedKeyOptions),
|
||||||
handler: ServeHandler,
|
handler: ServeHandler<Deno.NetAddr>,
|
||||||
): HttpServer<Deno.NetAddr>;
|
): HttpServer<Deno.NetAddr>;
|
||||||
/** Serves HTTP requests with the given option bag.
|
/** Serves HTTP requests with the given option bag.
|
||||||
*
|
*
|
||||||
|
@ -6478,7 +6361,7 @@ declare namespace Deno {
|
||||||
* @category HTTP Server
|
* @category HTTP Server
|
||||||
*/
|
*/
|
||||||
export function serve(
|
export function serve(
|
||||||
options: ServeUnixInit & ServeUnixOptions,
|
options: ServeUnixOptions & ServeInit<Deno.UnixAddr>,
|
||||||
): HttpServer<Deno.UnixAddr>;
|
): HttpServer<Deno.UnixAddr>;
|
||||||
/** Serves HTTP requests with the given option bag.
|
/** Serves HTTP requests with the given option bag.
|
||||||
*
|
*
|
||||||
|
@ -6507,40 +6390,7 @@ declare namespace Deno {
|
||||||
*/
|
*/
|
||||||
export function serve(
|
export function serve(
|
||||||
options:
|
options:
|
||||||
& ServeInit
|
& (ServeTcpOptions | (ServeTcpOptions & TlsCertifiedKeyOptions))
|
||||||
& ServeOptions,
|
& ServeInit<Deno.NetAddr>,
|
||||||
): HttpServer<Deno.NetAddr>;
|
|
||||||
/** Serves HTTP requests with the given option bag.
|
|
||||||
*
|
|
||||||
* You can specify an object with a port and hostname option, which is the
|
|
||||||
* address to listen on. The default is port `8000` on hostname `"127.0.0.1"`.
|
|
||||||
*
|
|
||||||
* ```ts
|
|
||||||
* const ac = new AbortController();
|
|
||||||
*
|
|
||||||
* const server = Deno.serve({
|
|
||||||
* port: 3000,
|
|
||||||
* hostname: "0.0.0.0",
|
|
||||||
* handler: (_req) => new Response("Hello, world"),
|
|
||||||
* signal: ac.signal,
|
|
||||||
* onListen({ port, hostname }) {
|
|
||||||
* console.log(`Server started at http://${hostname}:${port}`);
|
|
||||||
* },
|
|
||||||
* });
|
|
||||||
* server.finished.then(() => console.log("Server closed"));
|
|
||||||
*
|
|
||||||
* console.log("Closing server...");
|
|
||||||
* ac.abort();
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* @category HTTP Server
|
|
||||||
*/
|
|
||||||
export function serve(
|
|
||||||
options:
|
|
||||||
& ServeTlsInit
|
|
||||||
& (
|
|
||||||
| ServeTlsOptions
|
|
||||||
| (ServeTlsOptions & TlsCertifiedKeyOptions)
|
|
||||||
),
|
|
||||||
): HttpServer<Deno.NetAddr>;
|
): HttpServer<Deno.NetAddr>;
|
||||||
}
|
}
|
||||||
|
|
12
cli/tsc/dts/lib.deno.unstable.d.ts
vendored
12
cli/tsc/dts/lib.deno.unstable.d.ts
vendored
|
@ -10,18 +10,6 @@
|
||||||
declare namespace Deno {
|
declare namespace Deno {
|
||||||
export {}; // stop default export type behavior
|
export {}; // stop default export type behavior
|
||||||
|
|
||||||
/** Information for a HTTP request.
|
|
||||||
*
|
|
||||||
* @category HTTP Server
|
|
||||||
* @experimental
|
|
||||||
*/
|
|
||||||
export interface ServeHandlerInfo {
|
|
||||||
/** The remote address of the connection. */
|
|
||||||
remoteAddr: Deno.NetAddr;
|
|
||||||
/** The completion promise */
|
|
||||||
completed: Promise<void>;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** **UNSTABLE**: New API, yet to be vetted.
|
/** **UNSTABLE**: New API, yet to be vetted.
|
||||||
*
|
*
|
||||||
* Retrieve the process umask. If `mask` is provided, sets the process umask.
|
* Retrieve the process umask. If `mask` is provided, sets the process umask.
|
||||||
|
|
Loading…
Reference in a new issue