url-route-handler
Version:
The library provides a flexible and efficient way to map URL patterns to their respective handler methods. By defining a set of URL patterns and the corresponding handler functions, this package allows seamless routing, ensuring that each url is processed
1 lines • 7.83 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","sources":["../../src/route-layer.ts","../../src/router.ts"],"sourcesContent":["import { pathToRegexp } from 'path-to-regexp';\r\nimport { UrlOptions } from './types/url.type';\r\n\r\nexport class RouteLayer {\r\n handle: (...args: any) => any;\r\n name: any;\r\n params: any;\r\n path: any;\r\n regexp: RegExp;\r\n keys: any;\r\n\r\n constructor(path: string, options: Record<string, any>, callback: (obj: UrlOptions, ...args: any) => any) {\r\n options = options || {};\r\n this.handle = callback;\r\n this.name = callback.name || '<anonymous>';\r\n const { regexp, keys } = pathToRegexp(path, options);\r\n this.regexp = regexp;\r\n this.keys = keys;\r\n }\r\n\r\n match (path: string) {\r\n let match: any;\r\n if (path != null) {\r\n if (path === '/') {\r\n this.params = {};\r\n this.path = '';\r\n return true;\r\n }\r\n\r\n if (path === '/*') {\r\n this.params = { '0': decodeParam(path) }\r\n this.path = path;\r\n return true;\r\n }\r\n match = this.regexp.exec(path);\r\n }\r\n\r\n if (!match) {\r\n this.params = undefined;\r\n this.path = undefined;\r\n return false;\r\n }\r\n\r\n // store values\r\n this.params = {};\r\n this.path = match[0];\r\n\r\n // iterate matches\r\n var keys = this.keys;\r\n var params = this.params;\r\n\r\n for (var i = 1; i < match.length; i++) {\r\n var key = keys[i - 1];\r\n var prop = key.name;\r\n var val = decodeParam(match[i]);\r\n\r\n if (val !== undefined || !(Object.hasOwnProperty.call(params, prop))) {\r\n params[prop] = val;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n handleError (err: any) {\r\n return {\r\n status: 'error',\r\n message: err.message,\r\n };\r\n }\r\n\r\n handleRequest (urlObj: UrlOptions, ...args: any) {\r\n try {\r\n const result = this.handle(urlObj, ...args);\r\n if (isPromise(result)) {\r\n return result.then((res: any) => {\r\n return {\r\n status: 'success',\r\n data: res,\r\n };\r\n }).catch((err: any) => {\r\n return this.handleError(err);\r\n });\r\n }\r\n return {\r\n status: 'success',\r\n data: result,\r\n };\r\n } catch (err: any) {\r\n return this.handleError(err);\r\n }\r\n }\r\n}\r\n\r\nfunction isPromise(obj: any) {\r\n return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';\r\n}\r\n\r\nfunction decodeParam (val: any) {\r\n if (typeof val !== 'string' || val.length === 0) {\r\n return val;\r\n }\r\n\r\n try {\r\n return decodeURIComponent(val);\r\n } catch (err) {\r\n if (err instanceof URIError) {\r\n err.message = 'Failed to decode param \\'' + val + '\\'';\r\n (err as any).status = 400;\r\n }\r\n throw err;\r\n }\r\n}\r\n","import { RouteLayer } from \"./route-layer\";\r\nimport { UrlOptions } from \"./types/url.type\";\r\n\r\nexport class Router {\r\n layers: RouteLayer[] = [];\r\n\r\n use(path: string, callback: (obj: UrlOptions, ...args: any) => any) {\r\n this.layers.push(new RouteLayer(path, {}, callback));\r\n }\r\n\r\n handle(url: string, ...args: any) {\r\n const urlObj = new URL(url, 'http://localhost');\r\n for (const layer of this.layers) {\r\n if (layer.match(urlObj.pathname)) {\r\n const queryParam: Record<string, string> = {};\r\n urlObj.searchParams?.forEach((value, key) => {\r\n queryParam[key] = value;\r\n });\r\n return layer.handleRequest({\r\n url: urlObj.href,\r\n host: urlObj.host,\r\n origin: urlObj.origin,\r\n pathname: urlObj.pathname,\r\n protocol: urlObj.protocol,\r\n query: queryParam,\r\n params: { ...layer.params },\r\n hash: urlObj.hash?.slice(1),\r\n }, ...args);\r\n }\r\n }\r\n return {\r\n status: 'error',\r\n message: 'No route found',\r\n }\r\n }\r\n}"],"names":["pathToRegexp"],"mappings":"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"}