summaryrefslogtreecommitdiff
path: root/ext/http/00_serve.ts
diff options
context:
space:
mode:
authorMatt Mastracci <matthew@mastracci.com>2024-04-24 15:45:49 -0400
committerGitHub <noreply@github.com>2024-04-24 19:45:49 +0000
commit2f8825a935bfdf21ca592284556cd86c1552ac8d (patch)
tree68beddeb5547861212be188f126113e6b1afc1df /ext/http/00_serve.ts
parentc1bd9503dd0288a3c209ca2724d2a1de9d5d122b (diff)
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"); }, }; ```
Diffstat (limited to 'ext/http/00_serve.ts')
-rw-r--r--ext/http/00_serve.ts29
1 files changed, 29 insertions, 0 deletions
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,