diff options
author | Matt Mastracci <matthew@mastracci.com> | 2023-05-19 15:14:40 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-19 15:14:40 -0600 |
commit | 7f5290b6946fececec5ec3acd85e67cd16960b8e (patch) | |
tree | 45e561e24f9dcf38b23b4ed88c3e14f56808c652 /cli | |
parent | af72a9c6576cab16128a89d3c9cd5f57cd0d2504 (diff) |
feat(ext/http): ref/unref for server (#19197)
Add `ref` and `unref` to return value from `Deno.serve`. Unblocks #3326.
Diffstat (limited to 'cli')
-rw-r--r-- | cli/tests/unit/serve_test.ts | 16 | ||||
-rw-r--r-- | cli/tsc/dts/lib.deno.unstable.d.ts | 12 |
2 files changed, 28 insertions, 0 deletions
diff --git a/cli/tests/unit/serve_test.ts b/cli/tests/unit/serve_test.ts index 0f97e17b8..c26d3f751 100644 --- a/cli/tests/unit/serve_test.ts +++ b/cli/tests/unit/serve_test.ts @@ -10,6 +10,7 @@ import { assertThrows, Deferred, deferred, + execCode, fail, } from "./test_util.ts"; @@ -56,6 +57,21 @@ Deno.test(async function httpServerShutsDownPortBeforeResolving() { listener!.close(); }); +Deno.test( + { permissions: { read: true, run: true } }, + async function httpServerUnref() { + const [statusCode, _output] = await execCode(` + async function main() { + const server = Deno.serve({ port: 4501, handler: () => null }); + server.unref(); + await server.finished; // This doesn't block the program from exiting + } + main(); + `); + assertEquals(statusCode, 0); + }, +); + Deno.test(async function httpServerCanResolveHostnames() { const ac = new AbortController(); const listeningPromise = deferred(); diff --git a/cli/tsc/dts/lib.deno.unstable.d.ts b/cli/tsc/dts/lib.deno.unstable.d.ts index c0c0d16ad..70d7ef7c4 100644 --- a/cli/tsc/dts/lib.deno.unstable.d.ts +++ b/cli/tsc/dts/lib.deno.unstable.d.ts @@ -1312,7 +1312,19 @@ declare namespace Deno { * the signal passed to {@linkcode ServeOptions.signal}. */ finished: Promise<void>; + + /** + * Make the server block the event loop from finishing. + * + * Note: the server blocks the event loop from finishing by default. + * This method is only meaningful after `.unref()` is called. + */ + ref(): void; + + /** Make the server not block the event loop from finishing. */ + unref(): void; } + /** **UNSTABLE**: New API, yet to be vetted. * * Serves HTTP requests with the given handler. |