{"version":3,"sources":["../../../src/server/routes.ts"],"names":["k","merge","acc","cur","key","s","groupRoutes","config","routes","route"],"mappings":"AAAA,iNAAkB,8CAalB,SAEC,CAAA,CAAA,GAAMA,CAAAA,CAAU,CACf,MAAA,CAAQ,CAAA,CAAA,MACR,CAAA,EAAS,CAAA,OACT,CAAO,EAAA,CACP,KAAM,CAAA,EACN,CAAA,IAAA,CAAA,EAAS,CAAA,OACT,CAAA,EAAA,CAAU,QACV,CAAA,EAAA,CAAA,eACA,CAAA,EAAA,CAAA,eACA,CAAA,EAAA,CAAA,iBACA,CAAA,EAAA,CAAA,kBAED,CAAA,EAAA,CAAA,CAASC,SACR,CAAA,CAAA,CAAA,CAAA,CAAKC,CAAAA,CACAC,OACD,CAAA,CAAOD,CAAAA,CAAAA,OAAQ,CAAA,EAAA,QACRA,EAAAA,OAAQ,CAAA,EAAA,QACRA,EAAAA,OAAQ,CAAA,EAAA,UACV,CAAA,CAAMA,CAAAA,WAAKC,CAAU,KAC/B,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,OAAO,MAAA,CAAA,WACN,CAAA,MAAQ,CAAA,IAAKC,CAAAA,CAAQ,CAC3BA,CAAAA,GACQ,CAAA,CAAA,EAAKC,CAAAA,CAAAA,CAAMA,CAAAA,CAAED,GAA4B,CAAE,CAAA,EAAA,CAAA,CAAA,CAAA,CAAoCH,CAAAA,CAAO,MAC9F,CACF,CACD,CAEA,IAAA,CAAA,CAAMK,CAAAA,CAAc,CAAyCC,MAC5DC,CAAAA,CAAO,CAAA,CAAA,CAAA,CAAKC,CAAAA,EAAAA,CAAW,CACtB,GAAGF,CAAAA,CACH,EAAA,CAAGE,CAAAA,GACH,CAAA,CAAA,GAAM,CAAGF,CAAAA,IAAO,CAAI,CAAA,EAAA","file":"/home/runner/work/equipped/equipped/dist/cjs/server/routes.min.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"]}