// https://vike.dev/onRenderHtml export { onRenderHtml } import { renderToString as renderToString_ } from '@vue/server-renderer' import type { App } from 'vue' import { escapeInject, dangerouslySkipEscape } from 'vike/server' import { createVueApp } from './createVueApp' import logoUrl from '../assets/img/logo.svg' import type { OnRenderHtmlAsync } from 'vike/types' import { getPageTitle } from './getPageTitle' const onRenderHtml: OnRenderHtmlAsync = async (pageContext): ReturnType => { // This onRenderHtml() hook only supports SSR, see https://vike.dev/render-modes for how to modify // onRenderHtml() to support SPA if (!pageContext.Page) throw new Error('My render() hook expects pageContext.Page to be defined') const app = createVueApp(pageContext) const appHtml = await renderToString(app) const title = getPageTitle(pageContext) const desc = pageContext.data?.description || pageContext.config.description || 'Demo of using Vike' const documentHtml = escapeInject` ${title}
${dangerouslySkipEscape(appHtml)}
` return { documentHtml, pageContext: { // We can add custom pageContext properties here, see https://vike.dev/pageContext#custom } } } async function renderToString(app: App) { let err: unknown // Workaround: renderToString_() swallows errors in production, see https://github.com/vuejs/core/issues/7876 app.config.errorHandler = (err_) => { err = err_ } const appHtml = await renderToString_(app) if (err) throw err return appHtml }