@analogjs/vite-plugin-nitro
Version:
A Vite plugin for adding a nitro API server
55 lines • 2.3 kB
JavaScript
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