From 2f8825a935bfdf21ca592284556cd86c1552ac8d Mon Sep 17 00:00:00 2001 From: Matt Mastracci Date: Wed, 24 Apr 2024 15:45:49 -0400 Subject: feat: Add `deno serve` subcommand (#23511) By default, `deno serve` will assign port 8000 (like `Deno.serve`). Users may choose a different port using `--port`. `deno serve /tmp/file.ts` `server.ts`: ```ts export default { fetch(req) { return new Response("hello world!\n"); }, }; ``` --- ext/http/00_serve.ts | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'ext') diff --git a/ext/http/00_serve.ts b/ext/http/00_serve.ts index 1063f9691..d19b62dde 100644 --- a/ext/http/00_serve.ts +++ b/ext/http/00_serve.ts @@ -791,8 +791,37 @@ internals.upgradeHttpRaw = upgradeHttpRaw; internals.serveHttpOnListener = serveHttpOnListener; internals.serveHttpOnConnection = serveHttpOnConnection; +function registerDeclarativeServer(exports) { + if (ObjectHasOwn(exports, "fetch")) { + if (typeof exports.fetch !== "function" || exports.fetch.length !== 1) { + throw new TypeError( + "Invalid type for fetch: must be a function with a single parameter", + ); + } + return ({ servePort, serveHost }) => { + Deno.serve({ + port: servePort, + hostname: serveHost, + onListen: ({ port, hostname }) => { + console.debug( + `%cdeno serve%c: Listening on %chttp://${hostname}:${port}/%c`, + "color: green", + "color: inherit", + "color: yellow", + "color: inherit", + ); + }, + handler: (req) => { + return exports.fetch(req); + }, + }); + }; + } +} + export { addTrailers, + registerDeclarativeServer, serve, serveHttpOnConnection, serveHttpOnListener, -- cgit v1.2.3