{"version":3,"sources":["../../../src/server/routes.ts","/home/runner/work/equipped/equipped/dist/cjs/server/routes.cjs"],"names":[],"mappings":"AAAA,iNAAkB;AAElB;AACC;AAAA,uCAQM;AAEP,SAAS,YAAA,CAAA,GAAgB,OAAA,EAAqB;AAE7C,EAAA,MAAM,EAAA,EAAU;AAAA,IACf,MAAA,EAAQ,EAAA;AAAA,IACR,OAAA,EAAS,EAAA;AAAA,IACT,KAAA,EAAO,EAAA;AAAA,IACP,IAAA,EAAM,EAAA;AAAA,IACN,OAAA,EAAS,EAAA;AAAA,IACT,QAAA,EAAU,EAAA;AAAA,IACV,eAAA,EAAiB,EAAA;AAAA,IACjB,eAAA,EAAiB,EAAA;AAAA,IACjB,iBAAA,EAAmB,EAAA;AAAA,IACnB,kBAAA,EAAoB;AAAA,EACrB,CAAA;AACA,EAAA,SAAS,KAAA,CAAsC,GAAA,EAAe,GAAA,EAAQ;AACrE,IAAA,GAAA,CAAI,CAAC,GAAA,EAAK,OAAO,GAAA;AACjB,IAAA,GAAA,CAAI,CAAC,GAAA,EAAK,OAAO,GAAA;AACjB,IAAA,GAAA,CAAI,OAAO,IAAA,IAAQ,QAAA,EAAU,OAAO,GAAA;AACpC,IAAA,GAAA,CAAI,OAAO,IAAA,IAAQ,QAAA,EAAU,OAAO,GAAA;AACpC,IAAA,GAAA,CAAI,OAAO,IAAA,IAAQ,UAAA,EAAY,OAAO,GAAA;AACtC,IAAA,OAAO,WAAA,CAAE,KAAA,CAAM,GAAA,EAAK,GAAU,CAAA;AAAA,EAC/B;AACA,EAAA,OAAO,MAAA,CAAO,WAAA;AAAA,IACb,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,GAAA,EAAA,GAAQ;AAAA,MAC3B,GAAA;AAAA,MACA,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,EAAA,GAAM,CAAA,CAAE,GAAG,CAAyB,CAAA,CAAE,MAAA,CAAoC,KAAA,EAAO,IAAI;AAAA,IACnG,CAAC;AAAA,EACF,CAAA;AACD;AAEA,MAAM,YAAA,EAAc,CAAyC,MAAA,EAAyB,MAAA,EAAA,GACrF,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,EAAA,GAAA,CAAW;AAAA,EACtB,GAAG,MAAA;AAAA,EACH,GAAG,KAAA;AAAA,EACH,IAAA,EAAM,CAAA,EAAA;AACN,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACC;AAEU;AACZ,EAAA;AACA,EAAA;AACA,EAAA;AAEA,EAAA;AACM,IAAA;AACN,EAAA;AAEM,EAAA;AACL,IAAA;AAEE,MAAA;AACA,MAAA;AACA,MAAA;AACD,IAAA;AACF,EAAA;AAEO,iBAAA;AACD,kBAAA;AACC,kBAAA;AACD,kBAAA;AACN,kBAAA;AACA,kBAAA;AACA,kBAAA;AAEA,EAAA;AACC,IAAA;AACD,EAAA;AAEI,EAAA;AACH,IAAA;AACD,EAAA;AACD;AClBS;AACA;AACA","file":"/home/runner/work/equipped/equipped/dist/cjs/server/routes.cjs","sourcesContent":["import { v } from 'valleyed'\n\nimport {\n\tMethods,\n\ttype MergeRouteDefs,\n\ttype MethodsEnum,\n\ttype Route,\n\ttype RouteConfig,\n\ttype RouteDef,\n\ttype RouteDefHandler,\n\ttype RouterConfig,\n} from './types'\n\nfunction mergeSchemas(...schemas: RouteDef[]) {\n\ttype Keys = Record<keyof RouteDef, string>\n\tconst k: Keys = {\n\t\tparams: '',\n\t\theaders: '',\n\t\tquery: '',\n\t\tbody: '',\n\t\tcookies: '',\n\t\tresponse: '',\n\t\tresponseHeaders: '',\n\t\tresponseCookies: '',\n\t\tdefaultStatusCode: '',\n\t\tdefaultContentType: '',\n\t}\n\tfunction merge<T extends RouteDef[keyof Keys]>(acc: T | null, cur: T) {\n\t\tif (!acc) return cur\n\t\tif (!cur) return acc\n\t\tif (typeof acc === 'number') return cur\n\t\tif (typeof acc === 'string') return cur\n\t\tif (typeof acc === 'function') return cur\n\t\treturn v.merge(acc, cur as any)\n\t}\n\treturn Object.fromEntries(\n\t\tObject.keys(k).map((key) => [\n\t\t\tkey,\n\t\t\tschemas.map((s) => s[key] as RouteDef[keyof Keys]).reduce<RouteDef[keyof Keys] | null>(merge, null),\n\t\t]),\n\t) as RouteDef\n}\n\nconst groupRoutes = <T extends RouteDef, R extends RouteDef>(config: RouterConfig<T>, routes: Route<R>[]) =>\n\troutes.map((route) => ({\n\t\t...config,\n\t\t...route,\n\t\tpath: `${config.path}/${route.path}`,\n\t\tgroups: [...(config.groups ?? []), ...(route.groups ?? [])],\n\t\tmiddlewares: [...(config.middlewares ?? []), ...(route.middlewares ?? [])],\n\t\tresponseMiddlewares: [...(config.responseMiddlewares ?? []), ...(route.responseMiddlewares ?? [])],\n\t\tschema: mergeSchemas(config.schema ?? {}, route.schema ?? {}),\n\t\tsecurity: [...(config.security ?? []), ...(route.security ?? [])],\n\t})) as Route<MergeRouteDefs<T, R>>[]\n\nexport class Router<T extends RouteDef> {\n\t#config: RouterConfig<T> = { path: '' }\n\t#routes: Route<any>[] = []\n\t#children: Router<any>[] = []\n\n\tconstructor(config: RouterConfig<T> = { path: '' }) {\n\t\tthis.#config = config\n\t}\n\n\t#wrap(method: MethodsEnum) {\n\t\treturn <R extends RouteDef>(path: string, config: RouteConfig<R> = {}) =>\n\t\t\t(handler: RouteDefHandler<MergeRouteDefs<T, R>>) => {\n\t\t\t\tconst route = groupRoutes(this.#config, [{ ...config, path, method, handler: handler as any }])[0]\n\t\t\t\tthis.#routes.push(route)\n\t\t\t\treturn route\n\t\t\t}\n\t}\n\n\thead = this.#wrap(Methods.head)\n\tget = this.#wrap(Methods.get)\n\tpost = this.#wrap(Methods.post)\n\tput = this.#wrap(Methods.put)\n\tpatch = this.#wrap(Methods.patch)\n\tdelete = this.#wrap(Methods.delete)\n\toptions = this.#wrap(Methods.options)\n\n\tnest(...routers: Router<any>[]) {\n\t\trouters.forEach((router) => this.#children.push(router))\n\t}\n\n\tget routes() {\n\t\treturn [...this.#routes].concat(this.#children.flatMap((child) => groupRoutes(this.#config, child.routes)))\n\t}\n}\n",null]}