UNPKG

@digicms/cms

Version:

An open source headless CMS solution to create and manage your own API. It provides a powerful dashboard and features to make your life easier. Databases supported: MySQL, MariaDB, PostgreSQL, SQLite

107 lines (90 loc) 2.58 kB
'use strict'; const _ = require('lodash'); const createRouteScopeGenerator = (namespace) => (route) => { const prefix = namespace.endsWith('::') ? namespace : `${namespace}.`; if (typeof route.handler === 'string') { _.defaultsDeep(route, { config: { auth: { scope: [`${route.handler.startsWith(prefix) ? '' : prefix}${route.handler}`], }, }, }); } }; /** * Register all routes * @param {import('../../').Strapi} strapi */ module.exports = (strapi) => { registerAdminRoutes(strapi); registerAPIRoutes(strapi); registerPluginRoutes(strapi); }; /** * Register admin routes * @param {import('../../').Strapi} strapi */ const registerAdminRoutes = (strapi) => { const generateRouteScope = createRouteScopeGenerator(`admin::`); strapi.admin.routes.forEach((route) => { generateRouteScope(route); route.info = { pluginName: 'admin' }; }); strapi.server.routes({ type: 'admin', prefix: '/admin', routes: strapi.admin.routes, }); }; /** * Register plugin routes * @param {import('../../').Strapi} strapi */ const registerPluginRoutes = (strapi) => { for (const pluginName of Object.keys(strapi.plugins)) { const plugin = strapi.plugins[pluginName]; const generateRouteScope = createRouteScopeGenerator(`plugin::${pluginName}`); if (Array.isArray(plugin.routes)) { plugin.routes.forEach((route) => { generateRouteScope(route); route.info = { pluginName }; }); strapi.server.routes({ type: 'admin', prefix: `/${pluginName}`, routes: plugin.routes, }); } else { _.forEach(plugin.routes, (router) => { router.type = router.type || 'admin'; router.prefix = `/${pluginName}`; router.routes.forEach((route) => { generateRouteScope(route); route.info = { pluginName }; }); strapi.server.routes(router); }); } } }; /** * Register api routes * @param {import('../../').Strapi} strapi */ const registerAPIRoutes = (strapi) => { for (const apiName of Object.keys(strapi.api)) { const api = strapi.api[apiName]; const generateRouteScope = createRouteScopeGenerator(`api::${apiName}`); _.forEach(api.routes, (router) => { // TODO: remove once auth setup // pass meta down to compose endpoint router.type = 'content-api'; router.routes.forEach((route) => { generateRouteScope(route); route.info = { apiName }; }); return strapi.server.routes(router); }); } };