import { styleText } from 'node:util'; import type { EruditMode } from '@erudit-js/core/mode'; import { setupServerLogger } from './logger'; import { setupServerRuntimeConfig } from './config'; import { setupServerLanguage } from './language/setup'; import { setupServerDatabase } from './db/setup'; import { setupServerImporter } from './importer'; import { setupServerRepository } from './repository'; import { setupServerContentNav } from './content/nav/setup'; import { buildServerErudit, tryServerWatchProject } from './build'; import { setupServerPaths } from './path'; let serverSetupPromise: Promise; export default defineNitroPlugin((nitro) => { serverSetupPromise = setupServer(); nitro.hooks.hook('request', async (event) => { await serverSetupPromise; await ERUDIT.buildPromise; if (ERUDIT.buildError) { const accept = getHeader(event, 'accept') || ''; if (accept.includes('text/html')) { function escapeHtml(str: string) { return str .replace(/&/g, '&') .replace(//g, '>') .replace(/"/g, '"') .replace(/'/g, '''); } event.node.res.end(` Erudit Build Error

Erudit Build Error

${escapeHtml(ERUDIT.buildError.stack || '')}
    
`); } } }); nitro.hooks.hook('close', async () => {}); }); async function setupServer() { try { const runtimeConfig = useRuntimeConfig(); ERUDIT.mode = runtimeConfig.public.eruditMode as EruditMode; await setupServerPaths(); await setupServerRuntimeConfig(); await setupServerLogger(); await setupServerImporter(); await setupServerLanguage(); await setupServerDatabase(); await setupServerRepository(); await setupServerContentNav(); ERUDIT.log.success(styleText('green', 'Setup Complete!')); await tryServerWatchProject(); await buildServerErudit(); } catch (buildError) { if (buildError instanceof Error) { ERUDIT.buildError = buildError; } else { ERUDIT.buildError = createError({ statusCode: 500, statusMessage: 'Unknown Erudit Server Error', message: typeof buildError === 'string' ? buildError : 'An unknown error occurred!', }); } } }