UNPKG

@analogjs/vite-plugin-nitro

Version:

A Vite plugin for adding a nitro API server

55 lines 2.3 kB
import { copyPublicAssets, prerender } from 'nitropack'; import { createNitro, build, prepare } from 'nitropack'; import { existsSync, mkdirSync, unlinkSync, writeFileSync } from 'node:fs'; import { dirname, join } from 'node:path'; import { addPostRenderingHooks } from './hooks/post-rendering-hook.js'; export async function buildServer(options, nitroConfig, routeSourceFiles) { const nitro = await createNitro({ dev: false, preset: process.env['BUILD_PRESET'], ...nitroConfig, }); if (options?.prerender?.postRenderingHooks) { addPostRenderingHooks(nitro, options.prerender.postRenderingHooks); } await prepare(nitro); await copyPublicAssets(nitro); if (options?.ssr && nitroConfig?.prerender?.routes && (nitroConfig?.prerender?.routes.find((route) => route === '/') || nitroConfig?.prerender?.routes?.length === 0)) { const indexFileExts = ['', '.br', '.gz']; indexFileExts.forEach((fileExt) => { // Remove the root index.html(.br|.gz) files const indexFilePath = `${nitroConfig?.output?.publicDir}/index.html${fileExt ? `${fileExt}` : ''}`; if (existsSync(indexFilePath)) { unlinkSync(indexFilePath); } }); } if (nitroConfig?.prerender?.routes && nitroConfig?.prerender?.routes?.length > 0) { console.log(`Prerendering static pages...`); await prerender(nitro); } if (routeSourceFiles && Object.keys(routeSourceFiles).length > 0) { const publicDir = nitroConfig?.output?.publicDir; if (!publicDir) { throw new Error('Nitro public output directory is required to write route source files.'); } for (const [route, content] of Object.entries(routeSourceFiles)) { const outputPath = join(publicDir, `${route}.md`); const outputDir = dirname(outputPath); if (!existsSync(outputDir)) { mkdirSync(outputDir, { recursive: true }); } writeFileSync(outputPath, content, 'utf8'); } } if (!options?.static) { console.log('Building Server...'); await build(nitro); } await nitro.close(); } //# sourceMappingURL=build-server.js.map