import { dom } from '@fortawesome/fontawesome-svg-core'; import { ServerStyleSheets, ThemeProvider } from '@mui/styles'; import path from 'path'; import React from 'react'; import { renderToString } from 'react-dom/server'; import { StaticRouter } from 'react-router'; import { type ArticleContent, PageArticleContext } from '../components/PageArticle.js'; import type { Config } from '../config/Config.js'; import { ConfigContext } from '../config/index.js'; import App from '../containers/App.js'; import theme from '../theme.js'; import type RouterMode from './RouterMode.js'; import StaticRouterWithSuffix from './StaticRouterWithSuffix.js'; const insertIntoSkeleton = (html: string, css: string, baseUrl: string, config: Config) => ` ${config.title ?? 'Documentation'} ${css ? `` : ''}
${html}
${config.shouldEnhance ? `` : ''} `; const render = (url: string, config: Config, article?: ArticleContent) => { // eslint-disable-next-line @typescript-eslint/init-declarations let elem: React.ReactElement; const baseUrl = path.posix.join('/', config.baseUrl || '').replace(/\/?$/, '/'); // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition const routerMode: RouterMode = config.routerMode || 'server'; const sheets = new ServerStyleSheets(); const joinedUrl = path.posix.join(baseUrl, url); switch (routerMode) { case 'htmlSuffix': { elem = ( ); break; } case 'htaccess': case 'subDirectories': case 'server': { elem = ( ); break; } default: elem = <>; } return insertIntoSkeleton(renderToString(sheets.collect(elem)), sheets.toString(), baseUrl, config); }; export default render;