Edge

A web standard only application framework,that runs on bun,deno,cloudflare-workers,and many workers. it's fast and lightweight.

install

1npm install @fasteejs/edge

usage

1import Edge,{EdgeResponse} from "@fasteejs/edge" //or import {Edge} from "@fasteejs/edge"
2
3const app = new Edge();
4
5console.log(app)
6//global wares
7app.use((req,res)=>{//no next funtion required
8 req.id="ware1"
9},(req,res)=>{
10  console.log(req.id)
11  return res.json({msg:"success"})
12})
13//bwares route specific wares
14app.use("/api",(req,res)=>{//no next funtion required
15 req.id="ware1"
16},(req,res)=>{
17  console.log(req.id)
18  return res.json({msg:"success"})
19   //or return new EdgeResponse().text("success",200) ;
20   //or return new Response(JSON.stringify({msg:"hi"}))
21   //middleware cannot return {} only on route handler
22  
23})
24/*handler
25a handler must return a response 
26*/
27app.get("/",async (req,res)=>{
28  console.log(req)
29  //object
30  return new Response("hi from server")
31  //or return res.text("hi edge")
32  //or return new EdgeResponse().text("success",200) 
33  //or return {type:"text",data:"success",status:200} 
34  //supported types are json,html,text,stream
35})
36
37export default app //must do

Response

a custom web standard Response object api, all methods are included:

  • json
  • text
  • html
  • stream
1import {EdgeResponse} from "@fasteejs/edge"
2app.get("/",async (req,res)=>{
3 console.log(res)
4  return res.text("hi edge",200)
5  //data and optional status
6  //or return new EdgeResponse().text("hi",200)
7  //or new Response("hi")
8  //or {type:"text",data:"hi",status:200}
9})

Static

serve static folder

1app.useStatic("./public",{
2    etag:true,
3  })
4
5  //serve static with base
6  app.useStatic("/assets","./static",{
7    etag:true
8  })

Router

router enables to split functionality added in v2.0.0;

1const apirouter = app.Router("/api");
2
3  //any code running below this automatically is prefixed
4  apirouter.get("/",async (req,res)=>{
5     return res.text("test api route from router",200);
6  })

Websockets

edge supports native websockets,works on bun,cloudflare and deno.added in v 2.0.0 serves as alternative to socket.io, implement rooms logic with ease.

1const Chatroom = new app.Room("/chat")//room name or path required
2 console.log(Chatroom)
3 Chatroom.onConnected((socket)=>{//runs when client connects
4    console.log(`user connected ${socket.id}`)
5     socket.on("welcome",(socket)=>{
6  console.log(socket.data)
7  socket.emit("welcome",{msg:"too"},(res)=>{
8     console.log(res.success)//if sent successfully
9  })
10 })
11 })
12 Chatroom.onDisconnected((socket)=>{//runs when client disconnects
13  console.log(`user disconnected ${socket}`)
14 })

websockets on client

1const socket = new Websocket("ws://localhost:3000/chat") //port server running on
2
3  socket.onopen=()=>{
4    socket.send(JSON.stringify({event:"welcome",data:{msg:"hi from client"}}))
5  }
6  socket.addEventListener("message",(ev)=>{
7     console.log(ev)
8  })