{"version":3,"sources":["../src/createRouter.ts","../src/logger.ts"],"names":[],"mappings":";AAAA,SAAS,oBAAyB;AAiB3B,IAAM,eAAe,MAAkB;AAC1C,QAAM,SAAkB,CAAC;AACzB,QAAM,gBAAgC,CAAC;AAEvC,QAAM,SAAqB;AAAA,IACvB,IAAI,SAAS;AACT,aAAO;AAAA,IACX;AAAA,IACA,IAAI,gBAAgB;AAChB,aAAO;AAAA,IACX;AAAA,IACA,UAAU,CAAC,YAA0B;AACjC,oBAAc,KAAK,OAAO;AAC1B,aAAO;AAAA,IACX;AAAA,IACA,KAAK,IAAI,SAAwB;AAC7B,YAAM,OAAO,OAAO,KAAK,CAAC,MAAM,WAAW,KAAK,CAAC,IAAI;AACrD,YAAM,cAAc,CAAC,GAAG,IAAI,EAAE,KAAK,YAAY;AAE/C,UAAI,aAAa;AACb,oBAAY,OAAO,QAAQ,WAAS;AAChC,gBAAM,WAAW,UAAU,GAAG,IAAI,IAAI,MAAM,IAAI,EAAE;AAClD,gBAAM,OAAc,CAAC;AACrB,gBAAM,SAAS,aAAa,UAAU,IAAI;AAC1C,iBAAO,KAAK;AAAA,YACR,SAAS,MAAM;AAAA,YACf,QAAQ,MAAM;AAAA,YACd,MAAM;AAAA,YACN;AAAA,YACA;AAAA,UACJ,CAAC;AAAA,QACL,CAAC;AAAA,MACL,WAAW,UAAU,KAAK,CAAC,CAAC,GAAG;AAC3B,eAAO,KAAK;AAAA,UACR,MAAM;AAAA,UACN,SAAS,KAAK,CAAC;AAAA,UACf,QAAQ;AAAA,UACR,MAAM,CAAC;AAAA,QACX,CAAC;AAAA,MACL;AACA,aAAO;AAAA,IACX;AAAA,IACA,QAAQ,CAAC,QAAQ,MAAM,YAAY;AAC/B,YAAM,OAAc,CAAC;AACrB,YAAM,SAAS,aAAa,MAAM,IAAI;AACtC,aAAO,KAAK;AAAA,QACR,QAAQ,OAAO,YAAY;AAAA,QAC3B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ,CAAC;AACD,aAAO;AAAA,IACX;AAAA,IACA,QAAQ,CAAC,MAAM,YAAY,OAAO,OAAO,UAAU,MAAM,OAAO;AAAA,IAChE,KAAK,CAAC,MAAM,YAAY,OAAO,OAAO,OAAO,MAAM,OAAO;AAAA,IAC1D,MAAM,CAAC,MAAM,YAAY,OAAO,OAAO,QAAQ,MAAM,OAAO;AAAA,IAC5D,OAAO,CAAC,MAAM,YAAY,OAAO,OAAO,SAAS,MAAM,OAAO;AAAA,IAC9D,MAAM,CAAC,MAAM,YAAY,OAAO,OAAO,QAAQ,MAAM,OAAO;AAAA,IAC5D,KAAK,CAAC,MAAM,YAAY,OAAO,OAAO,OAAO,MAAM,OAAO;AAAA,IAC1D,SAAS,CAAC,MAAM,YAAY,OAAO,OAAO,WAAW,MAAM,OAAO;AAAA,EACtE;AACA,SAAO;AACX;AAEA,IAAM,eAAe,CAAC,MAA8D;AAChF,SAAO,OAAO,MAAM,YAAY,YAAY;AAChD;AAEO,IAAM,YAAY,CAAC,MAAmE;AACzF,SAAO,OAAO,MAAM,YAAY,EAAE,YAAY;AAClD;AAEA,IAAM,YAAY,CAAC,MAAc,EAAE,QAAQ,SAAS,GAAG;;;AC1FvD,OAAO,WAAW;AAElB,IAAM,aAAa;AAEZ,IAAM,SAAS,MAAM,UAAU;AAE/B,IAAM,eAAe,MAAM;AAC9B,QAAM,OAAO,UAAU;AAC3B","sourcesContent":["import { pathToRegexp, Key } from 'path-to-regexp'\nimport { type Methods } from './methods'\nimport {\n    Handler,\n    RestRouter,\n    UseHandler,\n    UseRouter,\n    UseRouterWithPath,\n    Route,\n    ErrorHandler,\n} from './types'\n\ntype UseParameters =\n    | Parameters<UseRouter>\n    | Parameters<UseHandler<string>>\n    | Parameters<UseRouterWithPath<string>>\n\nexport const createRouter = (): RestRouter => {\n    const routes: Route[] = []\n    const errorHandlers: ErrorHandler[] = []\n\n    const router: RestRouter = {\n        get routes() {\n            return routes\n        },\n        get errorHandlers() {\n            return errorHandlers\n        },\n        useError: (handler: ErrorHandler) => {\n            errorHandlers.push(handler)\n            return router\n        },\n        use: (...args: UseParameters) => {\n            const path = typeof args[0] === 'string' ? args[0] : ''\n            const childRouter = [...args].find(isRestRouter)\n\n            if (childRouter) {\n                childRouter.routes.forEach(route => {\n                    const fullPath = cleanPath(`${path}/${route.path}`)\n                    const keys: Key[] = []\n                    const regexp = pathToRegexp(fullPath, keys)\n                    routes.push({\n                        handler: route.handler,\n                        method: route.method,\n                        path: fullPath,\n                        keys,\n                        regexp,\n                    })\n                })\n            } else if (isHandler(args[0])) {\n                routes.push({\n                    path: null,\n                    handler: args[0],\n                    regexp: /.*/,\n                    keys: [],\n                })\n            }\n            return router\n        },\n        METHOD: (method, path, handler) => {\n            const keys: Key[] = []\n            const regexp = pathToRegexp(path, keys)\n            routes.push({\n                method: method.toUpperCase() as Methods,\n                path,\n                handler: handler as Handler<string>,\n                regexp,\n                keys,\n            })\n            return router\n        },\n        delete: (path, handler) => router.METHOD('DELETE', path, handler),\n        get: (path, handler) => router.METHOD('GET', path, handler),\n        head: (path, handler) => router.METHOD('HEAD', path, handler),\n        patch: (path, handler) => router.METHOD('PATCH', path, handler),\n        post: (path, handler) => router.METHOD('POST', path, handler),\n        put: (path, handler) => router.METHOD('PUT', path, handler),\n        options: (path, handler) => router.METHOD('OPTIONS', path, handler),\n    }\n    return router\n}\n\nconst isRestRouter = (o: RestRouter | string | Handler<string>): o is RestRouter => {\n    return typeof o !== 'string' && 'routes' in o\n}\n\nexport const isHandler = (o: RestRouter | string | Handler<string>): o is Handler<string> => {\n    return typeof o !== 'string' && !('routes' in o)\n}\n\nconst cleanPath = (s: string) => s.replace(/\\/\\//g, '/')\n","import debug from 'debug'\n\nconst loggerName = '@fakehost/rest'\n\nexport const logger = debug(loggerName)\n\nexport const enableLogger = () => {\n    debug.enable(loggerName)\n}\n"]}