diff --git a/deno.json b/deno.json index abec100..05614e8 100644 --- a/deno.json +++ b/deno.json @@ -1,7 +1,7 @@ { "name": "@bearmetal/router", "description": "A simple router for Deno", - "version": "0.1.1", + "version": "0.1.2", "stable": true, "repository": "https://github.com/emmaos/bearmetal", "files": [ @@ -9,7 +9,10 @@ "README.md", "LICENSE" ], - "exports": "./mod.ts", + "exports": { + ".": "./mod.ts", + "./types": "./types.ts" + }, "imports": { "@std/assert": "jsr:@std/assert@^1.0.7", "@std/testing": "jsr:@std/testing@^1.0.4" diff --git a/router.ts b/router.ts index 3ebfc21..6b18c57 100644 --- a/router.ts +++ b/router.ts @@ -1,34 +1,4 @@ -interface RouterContext { - url: URL; - params: Record; - state: Record; - pattern: URLPattern; - request: Request; -} - -type Handler = (req: Request, ctx: RouterContext) => Promise | Response; -type Middleware = (ctx: RouterContext, next: () => Promise) => Promise; - -interface RouteConfig { - pattern: URLPattern; - handlers: { [method: string]: Handler }; -} - -interface MiddlewareConfig { - pattern: URLPattern; - handler: Middleware; - // Add path for sorting - path: string; -} - -interface RouteConfigurator { - get(handler: Handler): RouteConfigurator; - post(handler: Handler): RouteConfigurator; - put(handler: Handler): RouteConfigurator; - delete(handler: Handler): RouteConfigurator; - patch(handler: Handler): RouteConfigurator; - options(handler: Handler): RouteConfigurator; -} +import type { Handler, Middleware, MiddlewareConfig, RouteConfig, RouteConfigurator, RouterContext } from "./types.ts"; /** * A simple router for Deno @@ -327,7 +297,7 @@ if (import.meta.main) { console.log('Starting server...'); const router = new Router(); router.route('/users') - .get((ctx) => { + .get((_ctx) => { return new Response('GET /users'); }) // .post((ctx) => { diff --git a/types.ts b/types.ts new file mode 100644 index 0000000..111c3e8 --- /dev/null +++ b/types.ts @@ -0,0 +1,30 @@ +export interface RouterContext { + url: URL; + params: Record; + state: Record; + pattern: URLPattern; + request: Request; +} + +export type Handler = (req: Request, ctx: RouterContext) => Promise | Response; +export type Middleware = (ctx: RouterContext, next: () => Promise) => Promise; + +export interface RouteConfig { + pattern: URLPattern; + handlers: { [method: string]: Handler }; +} + +export interface MiddlewareConfig { + pattern: URLPattern; + handler: Middleware; + path: string; +} + +export interface RouteConfigurator { + get(handler: Handler): RouteConfigurator; + post(handler: Handler): RouteConfigurator; + put(handler: Handler): RouteConfigurator; + delete(handler: Handler): RouteConfigurator; + patch(handler: Handler): RouteConfigurator; + options(handler: Handler): RouteConfigurator; +} \ No newline at end of file