From 19ed0d368e8f2ca864bf10d3f844db4b9faec719 Mon Sep 17 00:00:00 2001 From: seb Date: Fri, 15 Apr 2022 16:17:33 +0200 Subject: [PATCH] feat(nuxt3): pass rendered HTML to hook --- docs/content/3.api/4.advanced/1.hooks.md | 1 + packages/nuxt3/src/app/nuxt.ts | 1 + packages/nuxt3/src/core/runtime/nitro/renderer.ts | 1 + 3 files changed, 3 insertions(+) diff --git a/docs/content/3.api/4.advanced/1.hooks.md b/docs/content/3.api/4.advanced/1.hooks.md index 83f8dd48411..80f3004e307 100644 --- a/docs/content/3.api/4.advanced/1.hooks.md +++ b/docs/content/3.api/4.advanced/1.hooks.md @@ -16,6 +16,7 @@ Hook | Arguments | Description `app:suspense:resolve` | `appComponent` | On [Suspense](https://vuejs.org/guide/built-ins/suspense.html#suspense) resolved event `page:start` | `pageComponent` | On [Suspense](https://vuejs.org/guide/built-ins/suspense.html#suspense) pending event `page:finish` | `pageComponent` | On [Suspense](https://vuejs.org/guide/built-ins/suspense.html#suspense) resolved event +`page:rendered` | `html` | When SSR rendering for the whole page is done `meta:register` | `metaRenderers` | (internal) `vue:setup` | - | (internal) diff --git a/packages/nuxt3/src/app/nuxt.ts b/packages/nuxt3/src/app/nuxt.ts index 10c247d6813..310c5bd0fbb 100644 --- a/packages/nuxt3/src/app/nuxt.ts +++ b/packages/nuxt3/src/app/nuxt.ts @@ -23,6 +23,7 @@ export interface RuntimeNuxtHooks { 'app:beforeMount': (app: App) => HookResult 'app:mounted': (app: App) => HookResult 'app:rendered': () => HookResult + 'page:rendered': (html: string) => HookResult 'app:suspense:resolve': (Component?: VNode) => HookResult 'app:error': (err: any) => HookResult 'app:error:cleared': (options: { redirect?: string }) => HookResult diff --git a/packages/nuxt3/src/core/runtime/nitro/renderer.ts b/packages/nuxt3/src/core/runtime/nitro/renderer.ts index 1c7927e2b4b..97f3aa03597 100644 --- a/packages/nuxt3/src/core/runtime/nitro/renderer.ts +++ b/packages/nuxt3/src/core/runtime/nitro/renderer.ts @@ -133,6 +133,7 @@ export default eventHandler(async (event) => { event.res.setHeader('Content-Type', 'text/javascript;charset=UTF-8') } else { data = await renderHTML(payload, rendered, ssrContext) + await ssrContext.nuxt.hooks.callHook('page:rendered')(data) event.res.setHeader('Content-Type', 'text/html;charset=UTF-8') }