RouteKit ·
RouteKit is a set of tools for generating lightweight and efficient routers.
packages | NPM version |
---|---|
routekit | |
routekit-resolver |
$ npm install -D routekit
Create a routes file: routes.build.js
#!/usr/bin/env node
import { r, emitter } from "routekit";
const enum Location { Home, UserView, UserEdit }
process.stdout.write(emitter()(
r("/", Location.Home),
r("/user/:id", Location.UserView),
r("/user/:id/edit", Location.UserEdit),
));
Run routes.build.js
file
$ node routes.build.js > routes.js
And it will generate routes.js
file with a compact flattened trie.
const ROUTES = {
f: [35, 38, 33, 7],
p: ["user/", "/edit"],
s: [0, 1, 2],
};
Emitter generates flattened tries that can be used by routekit-resolver
for matching urls.
export function emitter<T>(name = "ROUTES"): (...routes: Route<T>[]) => string;
export function injector<T>(src: string): (...routes: Route<T>[]) => string;
inject
function injects code blocks into existing code using incode package.
This function is using routekit
prefix to detect injectable regions.
NPM package routekit-resolver
provides a commonjs, es2015 modules and TypeScript typings.
npm install routekit-resolver
import { resolve } from "routekit-resolver";
// routekit:emit("routes")
const ROUTES = {
f: [35, 38, 33, 7],
p: ["user/", "/edit"],
s: [0, 1, 2],
};
// routekit:end
const match = (path) => resolve(ROUTES, path);
match("/user/123");
// {
// state: 1,
// vars: ["123"],
// }
export interface ResolveResult<T> {
readonly state: T;
readonly vars: string[];
}
export function resolve<T>(map: RouteMap<T>, path: string): ResolveResult<T> | null;
resolve()
function has 2 parameters:
map
is a flattened trie generated by routekit.path
is a path that should be resolved.
When resolve function returns null
value it means that no match was found.