diff options
Diffstat (limited to 'examples/html-rewriter.ts')
-rw-r--r-- | examples/html-rewriter.ts | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/examples/html-rewriter.ts b/examples/html-rewriter.ts new file mode 100644 index 000000000..2b370c5ed --- /dev/null +++ b/examples/html-rewriter.ts @@ -0,0 +1,47 @@ +// Start a fast HTTP server from a function +Bun.serve({ + async fetch(req) { + if (!(req.url.startsWith("/https://") || req.url.startsWith("/http://"))) { + return new Response( + "Enter a path that starts with https:// or http://\n", + { + status: 400, + } + ); + } + + const url = new URL(req.url.substring(1)); + const response = await fetch(url.toString(), req.clone()); + + if (!response.headers.get("Content-Type").includes("html")) { + return response; + } + + return new HTMLRewriter() + .on("a[href]", { + element(element: Element) { + element.setAttribute( + "href", + "https://www.youtube.com/watch?v=dQw4w9WgXcQ" + ); + }, + }) + .transform(response); + }, + + // this is called when fetch() throws or rejects + // error(err: Error) { + // }, + + // this boolean enables the bun's default error handler + // sometime after the initial release, it will auto reload as well + development: process.env.NODE_ENV !== "production", + // note: this isn't node, but for compatibility bun supports process.env + more stuff in process + + // SSL is enabled if these two are set + // certFile: './cert.pem', + // keyFile: './key.pem', + + port: 8080, // number or string + hostname: "localhost", // defaults to 0.0.0.0 +}); |