adminjs
Version:
Admin panel for apps written in node.js
45 lines (38 loc) • 1.48 kB
text/typescript
import * as path from 'path'
import slash from 'slash'
import AdminJS from '../../adminjs.js'
/**
* Generates entry file for all UsersComponents.
* Entry consists of 3 parts:
* 1. Setup AdminJS.UserComponents map.
* 2. List of all environmental variables passed to AdminJS in configuration option.
* 3. Imports of user components defined by ComponentLoader.
*
* @param {AdminJS} admin
* @param {String} entryPath path to folder where entry file is located
* @return {String} content of an entry file
*
* @private
*/
const generateUserComponentEntry = (admin: AdminJS, entryPath: string): string => {
const { env = {} } = admin.options
admin.componentLoader.__unsafe_merge(AdminJS.__unsafe_staticComponentLoader)
const components = admin.componentLoader.getComponents()
const absoluteEntryPath = path.resolve(entryPath)
const setupPart = 'AdminJS.UserComponents = {}\n'
const envPart = Object.keys(env).map((envKey) => (
`AdminJS.env.${envKey} = ${JSON.stringify(env[envKey])}\n`
)).join('')
const componentsPart = Object.keys(components || {}).map((componentId) => {
const componentUrl = path.relative(
absoluteEntryPath,
components[componentId],
)
return [
`import ${componentId} from '${slash(componentUrl)}'`,
`AdminJS.UserComponents.${componentId} = ${componentId}`,
].join('\n')
}).join('\n')
return setupPart + envPart + componentsPart
}
export default generateUserComponentEntry