From 7477c2d70639962a40c7333e766b4a4b4aa75ddd Mon Sep 17 00:00:00 2001 From: Nathan Whitaker <17734409+nathanwhit@users.noreply.github.com> Date: Thu, 12 Sep 2024 16:32:28 -0700 Subject: [PATCH] feat(serve): Support second parameter in deno serve (#25606) Closes #24099 --- cli/tsc/dts/lib.deno.ns.d.ts | 4 +--- ext/http/00_serve.ts | 4 ++-- tests/specs/serve/basic/__test__.jsonc | 4 ++-- tests/specs/serve/basic/main.out | 1 + tests/specs/serve/basic/main.ts | 2 +- tests/specs/serve/basic/main_not_win.out | 1 + tests/specs/serve/conn_info/__test__.jsonc | 6 ++++++ tests/specs/serve/conn_info/main.out | 3 +++ tests/specs/serve/conn_info/main.ts | 19 +++++++++++++++++++ 9 files changed, 36 insertions(+), 8 deletions(-) create mode 100644 tests/specs/serve/conn_info/__test__.jsonc create mode 100644 tests/specs/serve/conn_info/main.out create mode 100644 tests/specs/serve/conn_info/main.ts diff --git a/cli/tsc/dts/lib.deno.ns.d.ts b/cli/tsc/dts/lib.deno.ns.d.ts index 00eff1e233..e287f7afc0 100644 --- a/cli/tsc/dts/lib.deno.ns.d.ts +++ b/cli/tsc/dts/lib.deno.ns.d.ts @@ -5090,9 +5090,7 @@ declare namespace Deno { * * @category HTTP Server */ - fetch: ( - request: Request, - ) => Response | Promise; + fetch: ServeHandler; } /** Options which can be set when calling {@linkcode Deno.serve}. diff --git a/ext/http/00_serve.ts b/ext/http/00_serve.ts index be1f1f8096..a49ab2790a 100644 --- a/ext/http/00_serve.ts +++ b/ext/http/00_serve.ts @@ -880,8 +880,8 @@ function registerDeclarativeServer(exports) { ); } }, - handler: (req) => { - return exports.fetch(req); + handler: (req, connInfo) => { + return exports.fetch(req, connInfo); }, }); }; diff --git a/tests/specs/serve/basic/__test__.jsonc b/tests/specs/serve/basic/__test__.jsonc index a8eaca0b6d..be63f793aa 100644 --- a/tests/specs/serve/basic/__test__.jsonc +++ b/tests/specs/serve/basic/__test__.jsonc @@ -3,12 +3,12 @@ "tests": { "basic_win": { "if": "windows", - "args": "serve --host 0.0.0.0 --port 12345 main.ts", + "args": "serve --check --host 0.0.0.0 --port 12345 main.ts", "output": "main.out" }, "basic_not_win": { "if": "unix", - "args": "serve --host 0.0.0.0 --port 12345 main.ts", + "args": "serve --check --host 0.0.0.0 --port 12345 main.ts", "output": "main_not_win.out" } } diff --git a/tests/specs/serve/basic/main.out b/tests/specs/serve/basic/main.out index e79d76af53..8247920e20 100644 --- a/tests/specs/serve/basic/main.out +++ b/tests/specs/serve/basic/main.out @@ -1 +1,2 @@ +Check [WILDCARD] deno serve: Listening on http://localhost:12345/ diff --git a/tests/specs/serve/basic/main.ts b/tests/specs/serve/basic/main.ts index 9e299ab219..8aa061b1e9 100644 --- a/tests/specs/serve/basic/main.ts +++ b/tests/specs/serve/basic/main.ts @@ -15,4 +15,4 @@ export default { fetch(req) { return new Response("Hello world!"); }, -}; +} satisfies Deno.ServeDefaultExport; diff --git a/tests/specs/serve/basic/main_not_win.out b/tests/specs/serve/basic/main_not_win.out index cbfd3395eb..6b4a66750f 100644 --- a/tests/specs/serve/basic/main_not_win.out +++ b/tests/specs/serve/basic/main_not_win.out @@ -1 +1,2 @@ +Check [WILDCARD] deno serve: Listening on http://0.0.0.0:12345/ diff --git a/tests/specs/serve/conn_info/__test__.jsonc b/tests/specs/serve/conn_info/__test__.jsonc new file mode 100644 index 0000000000..faefad0ad9 --- /dev/null +++ b/tests/specs/serve/conn_info/__test__.jsonc @@ -0,0 +1,6 @@ +{ + "args": "serve --check --port 12468 main.ts", + "output": "main.out", + "tempDir": true, + "exitCode": 0 +} diff --git a/tests/specs/serve/conn_info/main.out b/tests/specs/serve/conn_info/main.out new file mode 100644 index 0000000000..790c4775dc --- /dev/null +++ b/tests/specs/serve/conn_info/main.out @@ -0,0 +1,3 @@ +Check [WILDCARD]main.ts +deno serve: Listening on http://[WILDCARD] +ServeHandlerInfo {} diff --git a/tests/specs/serve/conn_info/main.ts b/tests/specs/serve/conn_info/main.ts new file mode 100644 index 0000000000..dbc1b7f070 --- /dev/null +++ b/tests/specs/serve/conn_info/main.ts @@ -0,0 +1,19 @@ +(async () => { + for (let i = 0; i < 1000; i++) { + try { + const resp = await fetch("http://localhost:12468/"); + Deno.exit(0); + } catch { + await new Promise((r) => setTimeout(r, 10)); + } + } + + Deno.exit(2); +})(); + +export default { + fetch(request, connInfo) { + console.log(connInfo); + return new Response("Hello world!"); + }, +} satisfies Deno.ServeDefaultExport;