{"version":3,"file":"register-routes.mjs","sources":["../../../src/services/server/register-routes.ts"],"sourcesContent":["import _ from 'lodash';\nimport type { Core } from '@strapi/types';\n\nconst createRouteScopeGenerator = (namespace: string) => (route: Core.RouteInput) => {\n  const prefix = namespace.endsWith('::') ? namespace : `${namespace}.`;\n\n  if (typeof route.handler === 'string') {\n    _.defaultsDeep(route, {\n      config: {\n        auth: {\n          scope: [`${route.handler.startsWith(prefix) ? '' : prefix}${route.handler}`],\n        },\n      },\n    });\n  }\n};\n\n/**\n * Register all routes\n */\nexport default (strapi: Core.Strapi) => {\n  registerAdminRoutes(strapi);\n  registerAPIRoutes(strapi);\n  registerPluginRoutes(strapi);\n};\n\n/**\n * Register admin routes\n * @param {import('../../').Strapi} strapi\n */\nconst registerAdminRoutes = (strapi: Core.Strapi) => {\n  const generateRouteScope = createRouteScopeGenerator(`admin::`);\n\n  // Instantiate function-like routers\n  // Mutate admin.routes in-place and make sure router factories are instantiated correctly\n  strapi.admin.routes = instantiateRouterInputs(strapi.admin.routes, strapi);\n\n  _.forEach(strapi.admin.routes, (router) => {\n    router.type = router.type || 'admin';\n    router.prefix = router.prefix || `/admin`;\n    router.routes.forEach((route) => {\n      generateRouteScope(route);\n      route.info = { pluginName: 'admin' };\n    });\n    strapi.server.routes(router);\n  });\n};\n\n/**\n * Register plugin routes\n * @param {import('../../').Strapi} strapi\n */\nconst registerPluginRoutes = (strapi: Core.Strapi) => {\n  for (const pluginName of Object.keys(strapi.plugins)) {\n    const plugin = strapi.plugins[pluginName];\n\n    const generateRouteScope = createRouteScopeGenerator(`plugin::${pluginName}`);\n\n    if (Array.isArray(plugin.routes)) {\n      plugin.routes.forEach((route) => {\n        generateRouteScope(route);\n        route.info = { pluginName };\n      });\n      strapi.contentAPI.applyExtraParamsToRoutes(plugin.routes);\n\n      strapi.server.routes({\n        type: 'admin',\n        prefix: `/${pluginName}`,\n        routes: plugin.routes,\n      });\n    } else {\n      // Instantiate function-like routers\n      // Mutate plugin.routes in-place and make sure router factories are instantiated correctly\n      plugin.routes = instantiateRouterInputs(plugin.routes, strapi);\n\n      _.forEach(plugin.routes, (router) => {\n        router.type = router.type ?? 'admin';\n        router.prefix = router.prefix ?? `/${pluginName}`;\n        router.routes.forEach((route) => {\n          generateRouteScope(route);\n          route.info = { pluginName };\n        });\n        strapi.contentAPI.applyExtraParamsToRoutes(router.routes ?? []);\n\n        strapi.server.routes(router);\n      });\n    }\n  }\n};\n\n/**\n * Register api routes\n */\nconst registerAPIRoutes = (strapi: Core.Strapi) => {\n  for (const apiName of Object.keys(strapi.apis)) {\n    const api = strapi.api(apiName);\n\n    const generateRouteScope = createRouteScopeGenerator(`api::${apiName}`);\n\n    // Mutate api.routes in-place and make sure router factories are instantiated correctly\n    api.routes = instantiateRouterInputs(api.routes, strapi);\n\n    _.forEach(api.routes, (router) => {\n      // TODO: remove once auth setup\n      // pass meta down to compose endpoint\n      router.type = 'content-api';\n      router.routes?.forEach((route) => {\n        generateRouteScope(route);\n        route.info = { apiName };\n      });\n      strapi.contentAPI.applyExtraParamsToRoutes(router.routes ?? []);\n\n      return strapi.server.routes(router);\n    });\n  }\n};\n\nconst instantiateRouterInputs = (\n  routers: Record<string, Core.RouterConfig>,\n  strapi: Core.Strapi\n): Record<string, Core.Router> => {\n  const entries = Object.entries(routers);\n\n  return entries.reduce((record, [key, inputOrCallback]) => {\n    const isCallback = typeof inputOrCallback === 'function';\n\n    return { ...record, [key]: isCallback ? inputOrCallback({ strapi }) : inputOrCallback };\n  }, {});\n};\n"],"names":["createRouteScopeGenerator","namespace","route","prefix","endsWith","handler","_","defaultsDeep","config","auth","scope","startsWith","strapi","registerAdminRoutes","registerAPIRoutes","registerPluginRoutes","generateRouteScope","admin","routes","instantiateRouterInputs","forEach","router","type","info","pluginName","server","Object","keys","plugins","plugin","Array","isArray","contentAPI","applyExtraParamsToRoutes","apiName","apis","api","routers","entries","reduce","record","key","inputOrCallback","isCallback"],"mappings":";;AAGA,MAAMA,yBAAAA,GAA4B,CAACC,SAAAA,GAAsB,CAACC,KAAAA,GAAAA;QACxD,MAAMC,MAAAA,GAASF,UAAUG,QAAQ,CAAC,QAAQH,SAAAA,GAAY,CAAA,EAAGA,SAAAA,CAAU,CAAC,CAAC;AAErE,QAAA,IAAI,OAAOC,KAAAA,CAAMG,OAAO,KAAK,QAAA,EAAU;YACrCC,CAAAA,CAAEC,YAAY,CAACL,KAAAA,EAAO;gBACpBM,MAAAA,EAAQ;oBACNC,IAAAA,EAAM;wBACJC,KAAAA,EAAO;4BAAC,CAAA,EAAGR,KAAAA,CAAMG,OAAO,CAACM,UAAU,CAACR,UAAU,EAAA,GAAKA,MAAAA,CAAAA,EAASD,KAAAA,CAAMG,OAAO,CAAA;AAAG;AAC9E;AACF;AACF,aAAA,CAAA;AACF,QAAA;AACF,IAAA,CAAA;AAEA;;IAGA,wBAAe,CAAA,CAACO,MAAAA,GAAAA;IACdC,mBAAAA,CAAoBD,MAAAA,CAAAA;IACpBE,iBAAAA,CAAkBF,MAAAA,CAAAA;IAClBG,oBAAAA,CAAqBH,MAAAA,CAAAA;AACvB,CAAA;AAEA;;;IAIA,MAAMC,sBAAsB,CAACD,MAAAA,GAAAA;AAC3B,IAAA,MAAMI,kBAAAA,GAAqBhB,yBAAAA,CAA0B,CAAC,OAAO,CAAC,CAAA;;;IAI9DY,MAAAA,CAAOK,KAAK,CAACC,MAAM,GAAGC,wBAAwBP,MAAAA,CAAOK,KAAK,CAACC,MAAM,EAAEN,MAAAA,CAAAA;AAEnEN,IAAAA,CAAAA,CAAEc,OAAO,CAACR,MAAAA,CAAOK,KAAK,CAACC,MAAM,EAAE,CAACG,MAAAA,GAAAA;AAC9BA,QAAAA,MAAAA,CAAOC,IAAI,GAAGD,MAAAA,CAAOC,IAAI,IAAI,OAAA;AAC7BD,QAAAA,MAAAA,CAAOlB,MAAM,GAAGkB,MAAAA,CAAOlB,MAAM,IAAI,CAAC,MAAM,CAAC;AACzCkB,QAAAA,MAAAA,CAAOH,MAAM,CAACE,OAAO,CAAC,CAAClB,KAAAA,GAAAA;YACrBc,kBAAAA,CAAmBd,KAAAA,CAAAA;AACnBA,YAAAA,KAAAA,CAAMqB,IAAI,GAAG;gBAAEC,UAAAA,EAAY;AAAQ,aAAA;AACrC,QAAA,CAAA,CAAA;QACAZ,MAAAA,CAAOa,MAAM,CAACP,MAAM,CAACG,MAAAA,CAAAA;AACvB,IAAA,CAAA,CAAA;AACF,CAAA;AAEA;;;IAIA,MAAMN,uBAAuB,CAACH,MAAAA,GAAAA;AAC5B,IAAA,KAAK,MAAMY,UAAAA,IAAcE,MAAAA,CAAOC,IAAI,CAACf,MAAAA,CAAOgB,OAAO,CAAA,CAAG;AACpD,QAAA,MAAMC,MAAAA,GAASjB,MAAAA,CAAOgB,OAAO,CAACJ,UAAAA,CAAW;AAEzC,QAAA,MAAMR,kBAAAA,GAAqBhB,yBAAAA,CAA0B,CAAC,QAAQ,EAAEwB,UAAAA,CAAAA,CAAY,CAAA;AAE5E,QAAA,IAAIM,KAAAA,CAAMC,OAAO,CAACF,MAAAA,CAAOX,MAAM,CAAA,EAAG;AAChCW,YAAAA,MAAAA,CAAOX,MAAM,CAACE,OAAO,CAAC,CAAClB,KAAAA,GAAAA;gBACrBc,kBAAAA,CAAmBd,KAAAA,CAAAA;AACnBA,gBAAAA,KAAAA,CAAMqB,IAAI,GAAG;AAAEC,oBAAAA;AAAW,iBAAA;AAC5B,YAAA,CAAA,CAAA;AACAZ,YAAAA,MAAAA,CAAOoB,UAAU,CAACC,wBAAwB,CAACJ,OAAOX,MAAM,CAAA;YAExDN,MAAAA,CAAOa,MAAM,CAACP,MAAM,CAAC;gBACnBI,IAAAA,EAAM,OAAA;gBACNnB,MAAAA,EAAQ,CAAC,CAAC,EAAEqB,UAAAA,CAAAA,CAAY;AACxBN,gBAAAA,MAAAA,EAAQW,OAAOX;AACjB,aAAA,CAAA;QACF,CAAA,MAAO;;;AAGLW,YAAAA,MAAAA,CAAOX,MAAM,GAAGC,uBAAAA,CAAwBU,MAAAA,CAAOX,MAAM,EAAEN,MAAAA,CAAAA;AAEvDN,YAAAA,CAAAA,CAAEc,OAAO,CAACS,MAAAA,CAAOX,MAAM,EAAE,CAACG,MAAAA,GAAAA;AACxBA,gBAAAA,MAAAA,CAAOC,IAAI,GAAGD,MAAAA,CAAOC,IAAI,IAAI,OAAA;gBAC7BD,MAAAA,CAAOlB,MAAM,GAAGkB,MAAAA,CAAOlB,MAAM,IAAI,CAAC,CAAC,EAAEqB,UAAAA,CAAAA,CAAY;AACjDH,gBAAAA,MAAAA,CAAOH,MAAM,CAACE,OAAO,CAAC,CAAClB,KAAAA,GAAAA;oBACrBc,kBAAAA,CAAmBd,KAAAA,CAAAA;AACnBA,oBAAAA,KAAAA,CAAMqB,IAAI,GAAG;AAAEC,wBAAAA;AAAW,qBAAA;AAC5B,gBAAA,CAAA,CAAA;AACAZ,gBAAAA,MAAAA,CAAOoB,UAAU,CAACC,wBAAwB,CAACZ,MAAAA,CAAOH,MAAM,IAAI,EAAE,CAAA;gBAE9DN,MAAAA,CAAOa,MAAM,CAACP,MAAM,CAACG,MAAAA,CAAAA;AACvB,YAAA,CAAA,CAAA;AACF,QAAA;AACF,IAAA;AACF,CAAA;AAEA;;IAGA,MAAMP,oBAAoB,CAACF,MAAAA,GAAAA;AACzB,IAAA,KAAK,MAAMsB,OAAAA,IAAWR,MAAAA,CAAOC,IAAI,CAACf,MAAAA,CAAOuB,IAAI,CAAA,CAAG;QAC9C,MAAMC,GAAAA,GAAMxB,MAAAA,CAAOwB,GAAG,CAACF,OAAAA,CAAAA;AAEvB,QAAA,MAAMlB,kBAAAA,GAAqBhB,yBAAAA,CAA0B,CAAC,KAAK,EAAEkC,OAAAA,CAAAA,CAAS,CAAA;;AAGtEE,QAAAA,GAAAA,CAAIlB,MAAM,GAAGC,uBAAAA,CAAwBiB,GAAAA,CAAIlB,MAAM,EAAEN,MAAAA,CAAAA;AAEjDN,QAAAA,CAAAA,CAAEc,OAAO,CAACgB,GAAAA,CAAIlB,MAAM,EAAE,CAACG,MAAAA,GAAAA;;;AAGrBA,YAAAA,MAAAA,CAAOC,IAAI,GAAG,aAAA;YACdD,MAAAA,CAAOH,MAAM,EAAEE,OAAAA,CAAQ,CAAClB,KAAAA,GAAAA;gBACtBc,kBAAAA,CAAmBd,KAAAA,CAAAA;AACnBA,gBAAAA,KAAAA,CAAMqB,IAAI,GAAG;AAAEW,oBAAAA;AAAQ,iBAAA;AACzB,YAAA,CAAA,CAAA;AACAtB,YAAAA,MAAAA,CAAOoB,UAAU,CAACC,wBAAwB,CAACZ,MAAAA,CAAOH,MAAM,IAAI,EAAE,CAAA;AAE9D,YAAA,OAAON,MAAAA,CAAOa,MAAM,CAACP,MAAM,CAACG,MAAAA,CAAAA;AAC9B,QAAA,CAAA,CAAA;AACF,IAAA;AACF,CAAA;AAEA,MAAMF,uBAAAA,GAA0B,CAC9BkB,OAAAA,EACAzB,MAAAA,GAAAA;IAEA,MAAM0B,OAAAA,GAAUZ,MAAAA,CAAOY,OAAO,CAACD,OAAAA,CAAAA;AAE/B,IAAA,OAAOC,QAAQC,MAAM,CAAC,CAACC,MAAAA,EAAQ,CAACC,KAAKC,eAAAA,CAAgB,GAAA;QACnD,MAAMC,UAAAA,GAAa,OAAOD,eAAAA,KAAoB,UAAA;QAE9C,OAAO;AAAE,YAAA,GAAGF,MAAM;YAAE,CAACC,GAAAA,GAAME,UAAAA,GAAaD,eAAAA,CAAgB;AAAE9B,gBAAAA;aAAO,CAAA,GAAK8B;AAAgB,SAAA;AACxF,IAAA,CAAA,EAAG,EAAC,CAAA;AACN,CAAA;;;;"}