adminjs
Version:
Admin panel for apps written in node.js
170 lines (167 loc) • 4.82 kB
JavaScript
import path from 'path';
import * as url from 'url';
import { createRequire } from 'node:module';
import AppController from '../../controllers/app-controller.js';
import ApiController from '../../controllers/api-controller.js';
import { COMPONENTS_OUTPUT_PATH, NODE_ENV } from '../../bundler/utils/constants.js';
const __dirname = url.fileURLToPath(new URL('.', import.meta.url));
const ASSETS_ROOT = `${__dirname}/../lib/../../../frontend/assets/`;
/**
* A function which resolves the path to AdminJS design system bundle.
*
* @returns {string} resolved path to AdminJS design system bundle
*/
const resolveDesignSystemBundle = () => {
const require = createRequire(import.meta.url);
return path.join(path.parse(require.resolve('@adminjs/design-system')).dir, `../bundle.${NODE_ENV}.js`);
};
/**
* Type representing the AdminJS.Router
* @memberof Router
* @alias RouterType
*/
/**
* @load ./router.doc.md
* @namespace
*/
export const Router = {
assets: [{
path: '/frontend/assets/icomoon.css',
src: path.join(ASSETS_ROOT, 'styles/icomoon.css')
}, {
path: '/frontend/assets/icomoon.eot',
src: path.join(ASSETS_ROOT, 'fonts/icomoon.eot')
}, {
path: '/frontend/assets/icomoon.svg',
src: path.join(ASSETS_ROOT, 'fonts/icomoon.svg')
}, {
path: '/frontend/assets/icomoon.ttf',
src: path.join(ASSETS_ROOT, 'fonts/icomoon.ttf')
}, {
path: '/frontend/assets/icomoon.woff',
src: path.join(ASSETS_ROOT, 'fonts/icomoon.woff')
}, {
path: '/frontend/assets/app.bundle.js',
src: path.join(ASSETS_ROOT, `scripts/app-bundle.${NODE_ENV}.js`)
}, {
path: '/frontend/assets/global.bundle.js',
src: path.join(ASSETS_ROOT, `scripts/global-bundle.${NODE_ENV}.js`)
}, {
path: '/frontend/assets/design-system.bundle.js',
src: resolveDesignSystemBundle()
}, {
path: '/frontend/assets/logo.svg',
src: path.join(ASSETS_ROOT, 'images/logo.svg')
}, {
path: '/frontend/assets/logo-mini.svg',
src: path.join(ASSETS_ROOT, 'images/logo-mini.svg')
}],
routes: [{
method: 'GET',
path: '',
Controller: AppController,
action: 'index'
}, {
method: 'GET',
path: '/resources/{resourceId}',
Controller: AppController,
action: 'resource'
}, {
method: 'GET',
path: '/api/resources/{resourceId}/search/{query}',
Controller: ApiController,
action: 'search'
}, {
method: 'GET',
path: '/resources/{resourceId}/actions/{action}',
Controller: AppController,
action: 'resourceAction'
}, {
method: 'GET',
path: '/api/resources/{resourceId}/actions/{action}',
Controller: ApiController,
action: 'resourceAction'
}, {
method: 'GET',
path: '/api/resources/{resourceId}/actions/{action}/{query}',
Controller: ApiController,
action: 'resourceAction'
}, {
method: 'POST',
path: '/api/resources/{resourceId}/actions/{action}',
Controller: ApiController,
action: 'resourceAction'
}, {
method: 'GET',
path: '/resources/{resourceId}/records/{recordId}/{action}',
Controller: AppController,
action: 'recordAction'
}, {
method: 'GET',
path: '/api/resources/{resourceId}/records/{recordId}/{action}',
Controller: ApiController,
action: 'recordAction'
}, {
method: 'POST',
path: '/api/resources/{resourceId}/records/{recordId}/{action}',
Controller: ApiController,
action: 'recordAction'
}, {
method: 'GET',
path: '/resources/{resourceId}/bulk/{action}',
Controller: AppController,
action: 'bulkAction'
}, {
method: 'GET',
path: '/api/resources/{resourceId}/bulk/{action}',
Controller: ApiController,
action: 'bulkAction'
}, {
method: 'POST',
path: '/api/resources/{resourceId}/bulk/{action}',
Controller: ApiController,
action: 'bulkAction'
}, {
method: 'GET',
path: '/api/resources/{resourceId}/search',
Controller: ApiController,
action: 'search'
}, {
method: 'GET',
path: '/api/dashboard',
Controller: ApiController,
action: 'dashboard'
},
// Pages
{
method: 'GET',
path: '/pages/{pageName}',
Controller: AppController,
action: 'page'
}, {
method: 'GET',
path: '/api/pages/{pageName}',
Controller: ApiController,
action: 'page'
}, {
method: 'POST',
path: '/api/pages/{pageName}',
Controller: ApiController,
action: 'page'
}]
};
if (process.env.NODE_ENV === 'production') {
Router.assets.push({
path: '/frontend/assets/components.bundle.js',
src: COMPONENTS_OUTPUT_PATH
});
} else {
Router.routes.push({
method: 'GET',
path: '/frontend/assets/components.bundle.js',
Controller: AppController,
action: 'bundleComponents',
contentType: 'text/javascript;charset=utf-8'
});
}
export default Router;