0.0.20 • Published 1 year ago

@bunsvr/router v0.0.20

Weekly downloads
-
License
-
Repository
github
Last release
1 year ago

A router middleware for BunSVR.

import { Router } from "@bunsvr/router";

new Router()
    // Add a handler to route "/home"
    .static("GET", "/home", () => 
        new Response("Hello!"))
    // Return a 404 for all other routes
    .dynamic("", "/(.*)", () => 
        new Response("Not Found"))
    // Serve directly
    .serve();

See the docs here.

Benchmark

You can see the latest benchmark result here.

I recommend benchmarking this on your machine.

Algorithm

The routing algorithm.

Storing handlers

Router handlers are saved into a static map for static routes and an array for dynamic routes.

class Router {
    private statics: Record<string, HandlerFunction>;
    private regexs: [RegExp, HandlerFunction][];
}

Adding handlers

The static(method, path, handler) set the key method + path in Router.statics object to the handler.

The dynamic(method, path, handler) push an array with the RegExp path from method + path as the first element and the handler as the second element to Router.regexs.

Finding routes

Slice the pathname from the full URL using /(?:\w+:)?\/\/[^\/]+([^?]+)/.

Search for method-specific static handler and all-method static handler of the path.

If found returns an array with the handler as the only element.

If there are no static handler of the path loop through the RegExp list and test the path with each RegExp.

If match then returns an array with the handler as the first element and the RegExpExecArray as the second element.

If nothing matches returns an empty array.

Note

This is still experimental.

Stable versions:

  • 0.0.14
  • 0.0.16
0.0.20

1 year ago

0.0.19

1 year ago

0.0.18

1 year ago

0.0.17

1 year ago

0.0.16

1 year ago

0.0.15

1 year ago

0.0.14

1 year ago

0.0.13

1 year ago

0.0.12

1 year ago

0.0.11

1 year ago

0.0.10

1 year ago

0.0.9

1 year ago

0.0.8

1 year ago

0.0.7

1 year ago

0.0.6

1 year ago

0.0.5

1 year ago

0.0.4

1 year ago

0.0.3

1 year ago

0.0.2

1 year ago

0.0.1

1 year ago