{"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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"}