@benpsnyder/analogjs-esm-vite-plugin-nitro
Version:
A Vite plugin for adding a nitro API server
107 lines (106 loc) • 3.67 kB
TypeScript
import { PrerenderRoute } from 'nitropack';
export interface Options {
ssr?: boolean;
ssrBuildDir?: string;
/**
* Prerender the static pages without producing the server output.
*/
static?: boolean;
prerender?: PrerenderOptions;
entryServer?: string;
index?: string;
/**
* Relative path to source files. Default is 'src'.
*/
sourceRoot?: string;
/**
* Absolute path to workspace root. Default is 'process.cwd()'
*/
workspaceRoot?: string;
/**
* Additional page paths to include
*/
additionalPagesDirs?: string[];
/**
* Additional API paths to include
*/
additionalAPIDirs?: string[];
apiPrefix?: string;
/**
* Toggles internal API middleware.
* If disabled, a proxy request is used to route /api
* requests to / in the production server build.
*
* @deprecated
* Use the src/server/routes/api folder
* for API routes.
*/
useAPIMiddleware?: boolean;
}
export interface PrerenderOptions {
/**
* Add additional routes to prerender through crawling page links.
*/
discover?: boolean;
/**
* List of routes to prerender resolved statically or dynamically.
*/
routes?: (string | PrerenderContentDir | PrerenderRouteConfig)[] | (() => Promise<(string | PrerenderContentDir | PrerenderRouteConfig | undefined)[]>);
sitemap?: SitemapConfig;
/** List of functions that run for each route after pre-rendering is complete. */
postRenderingHooks?: ((routes: PrerenderRoute) => Promise<void>)[];
}
export interface SitemapConfig {
host: string;
}
export interface PrerenderContentDir {
/**
* The directory where files should be grabbed from.
* @example `/src/contents/blog`
*/
contentDir: string;
/**
* Transform the matching content files path into a route.
* The function is called for each matching content file within the specified contentDir.
* @param file information of the matching file (`path`, `name`, `extension`, `attributes`)
* @returns a string with the route should be returned (e. g. `/blog/<slug>`) or the value `false`, when the route should not be prerendered.
*/
transform: (file: PrerenderContentFile) => string | false;
/**
* Customize the sitemap definition for the prerendered route
*
* https://www.sitemaps.org/protocol.html#xmlTagDefinitions
*/
sitemap?: PrerenderSitemapConfig | ((file: PrerenderContentFile) => PrerenderSitemapConfig);
}
/**
* @param path the path to the content file
* @param name the basename of the matching content file without the file extension
* @param extension the file extension
* @param attributes the frontmatter attributes extracted from the frontmatter section of the file
* @returns a string with the route should be returned (e. g. `/blog/<slug>`) or the value `false`, when the route should not be prerendered.
*/
export interface PrerenderContentFile {
path: string;
attributes: Record<string, any>;
name: string;
extension: string;
}
export interface PrerenderSitemapConfig {
lastmod?: string;
changefreq?: 'always' | 'hourly' | 'daily' | 'weekly' | 'monthly' | 'yearly' | 'never';
priority?: string;
}
export interface PrerenderRouteConfig {
route: string;
/**
* Customize the sitemap definition for the prerendered route
*
* https://www.sitemaps.org/protocol.html#xmlTagDefinitions
*/
sitemap?: PrerenderSitemapConfig | (() => PrerenderSitemapConfig);
/**
* Prerender static data for the prerendered route
*/
staticData?: boolean;
}