diff --git a/docs/content/3.api/4.advanced/1.hooks.md b/docs/content/3.api/4.advanced/1.hooks.md index 04829cdb81c..02c73d2b6ae 100644 --- a/docs/content/3.api/4.advanced/1.hooks.md +++ b/docs/content/3.api/4.advanced/1.hooks.md @@ -31,7 +31,7 @@ Hook | Arguments | Environment | Description # Nuxt Hooks (build time) -Check the [schema source code](https://github.com/nuxt/framework/blob/main/packages/schema/src/types/hooks.ts#L69) for all available hooks. +Check the [schema source code](https://github.com/nuxt/framework/blob/main/packages/schema/src/types/hooks.ts#L53) for all available hooks. :NeedContribution diff --git a/docs/content/3.api/4.advanced/2.kit.md b/docs/content/3.api/4.advanced/2.kit.md index cc5fa45ce1f..59132a038a4 100644 --- a/docs/content/3.api/4.advanced/2.kit.md +++ b/docs/content/3.api/4.advanced/2.kit.md @@ -77,6 +77,8 @@ description: Nuxt Kit provides composable utilities to help interacting with Nux - `addServerHandler (handler)` - `addDevServerHandler (handler)` - `useNitro()` (only usable after `ready` hook) +- `addServerPlugin` +- `addPrerenderRoutes` ### Resolving diff --git a/packages/kit/src/nitro.ts b/packages/kit/src/nitro.ts index d28923280bf..cfa695a1864 100644 --- a/packages/kit/src/nitro.ts +++ b/packages/kit/src/nitro.ts @@ -41,6 +41,25 @@ export function addServerPlugin (plugin: string) { nuxt.options.nitro.plugins.push(normalize(plugin)) } +/** + * Adds routes to be prerendered + */ +export function addPrerenderRoutes (routes: string | string[]) { + const nuxt = useNuxt() + if (!Array.isArray(routes)) { + routes = [routes] + } + routes = routes.filter(Boolean) + if (!routes.length) { + return + } + nuxt.hook('prerender:routes', (ctx) => { + for (const route of routes) { + ctx.routes.add(route) + } + }) +} + /** * Access to the Nitro instance * diff --git a/packages/nuxt/src/core/nitro.ts b/packages/nuxt/src/core/nitro.ts index b13208b6889..4bcf34cde76 100644 --- a/packages/nuxt/src/core/nitro.ts +++ b/packages/nuxt/src/core/nitro.ts @@ -148,6 +148,9 @@ export async function initNitro (nuxt: Nuxt & { _nitro?: Nitro }) { // Connect hooks nuxt.hook('close', () => nitro.hooks.callHook('close')) + nitro.hooks.hook('prerender:routes', (routes) => { + nuxt.callHook('prerender:routes', { routes }) + }) // Setup handlers const devMiddlewareHandler = dynamicEventHandler() diff --git a/packages/schema/src/types/hooks.ts b/packages/schema/src/types/hooks.ts index 6ee9889ac18..dba4939f8c5 100644 --- a/packages/schema/src/types/hooks.ts +++ b/packages/schema/src/types/hooks.ts @@ -96,6 +96,7 @@ export interface NuxtHooks { 'nitro:config': (nitroConfig: NitroConfig) => HookResult 'nitro:init': (nitro: Nitro) => HookResult 'nitro:build:before': (nitro: Nitro) => HookResult + 'prerender:routes': (ctx: { routes: Set }) => HookResult // Nuxi 'build:error': (error: Error) => HookResult