UNPKG

@dazejs/framework

Version:

Daze.js - A powerful web framework for Node.js

49 lines (44 loc) 1.08 kB
import { Request } from '../request'; import { parsePattern } from './helpers'; import { Node } from './node'; import { Route } from './route'; export class Trie { /** * route trie cache map */ routes: Map<string, any> = new Map(); /** * add a route * @param route */ add(route: Route) { for (const method of route.methods) { if (!this.routes.has(method)) { this.routes.set(method, new Node()); } this.register(this.routes.get(method), route); } } /** * register route node * @param rootNode * @param route */ register(rootNode: Node, route: Route) { rootNode.insert(route, route.pieces, 0); } /** * match route by request * @param request */ match(request: Request) { const _method = request.getMethod() || ''; const _path = request.getPath(); const rootNode = this.routes.get(_method); if (!rootNode) return null; const keys = parsePattern(_path); const result = rootNode.search(keys, 0); if (result) return result.route || null; return null; } }