@lvindotexe/router@0.1.3
latest
lvindotexe/routerend-to-end typesafe router, inspired by elysiajs and hono
This package works with Node.js, Deno, BunIt is unknown whether this package works with Cloudflare Workers, Browsers




JSR Score
70%
Published
a year ago (0.1.3)
Router
made an end-to-end typesafe router, since i wanted to understand how backend frameworks work. its mostly just a tree and a middleware stack, the typescript was the hardest part
Usage
installation
# Deno deno add @lvindotexe/router
runtime usage
# Deno const router = new Router().get("/" (c) => c.text("hello world")) Deno.serve((req) => router.request(req))
request validation
currently we use zod for request validation
const app = new Router() .post("/post",(c) => { const {name,age} = c.valid('json') await db.insert(new User({name,age})) return c.text(`${name} inserted`,{status:201}), }, {json:z.object({name:z.string(),age:z.number()})} )
end-to-end typesafety
const app = new Router() .post("/post",(c) => { return c.json(c.valid('json'),{status:201}), }, {json:z.object({name:z.string(),age:z.number()})} ) const client = rc<typeof app>("127.0.0.0.1:8000") const res = await client.post.$post() const {name,age} = await res.json()
decorating context
context is passed to every request handler. it can be extended with any proprty
const app = new Router() .decorate('logger',new Logger()) .get("/",(c) => { c.logger("hello world") return c.text("logged") })
information based on request info can be used to decorate the context
const app = new Router() .state('bearer',(ctx) => { const auth = ctx.headers('authorization') return auth.startsWith("Beaerer") ? auth.slice(7) : null }) .get("/",(c) => { const {bearer} = c return c.text(bearer) })
Add Package
deno add jsr:@lvindotexe/router
Import symbol
import * as router from "@lvindotexe/router";
Import directly with a jsr specifier
import * as router from "jsr:@lvindotexe/router";
Add Package
pnpm i jsr:@lvindotexe/router
pnpm dlx jsr add @lvindotexe/router
Import symbol
import * as router from "@lvindotexe/router";
Add Package
yarn add jsr:@lvindotexe/router
yarn dlx jsr add @lvindotexe/router
Import symbol
import * as router from "@lvindotexe/router";
Add Package
vlt install jsr:@lvindotexe/router
Import symbol
import * as router from "@lvindotexe/router";
Add Package
npx jsr add @lvindotexe/router
Import symbol
import * as router from "@lvindotexe/router";
Add Package
bunx jsr add @lvindotexe/router
Import symbol
import * as router from "@lvindotexe/router";