You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35 lines
1.1 KiB
35 lines
1.1 KiB
import { setup } from '@css-render/vue3-ssr'
|
|
import { defineNuxtPlugin } from '#app'
|
|
|
|
|
|
export default defineNuxtPlugin((nuxtApp) => {
|
|
|
|
if (process.server) {
|
|
const { collect } = setup(nuxtApp.vueApp)
|
|
const originalRenderMeta = nuxtApp.ssrContext?.renderMeta
|
|
// @ts-ignore
|
|
nuxtApp.ssrContext = nuxtApp.ssrContext || {}
|
|
// @ts-ignore
|
|
nuxtApp.ssrContext.renderMeta = () => {
|
|
if (!originalRenderMeta) {
|
|
return {
|
|
headTags: collect()
|
|
}
|
|
}
|
|
const originalMeta = originalRenderMeta()
|
|
if ('then' in originalMeta) {
|
|
return originalMeta.then((resolvedOriginalMeta) => {
|
|
return {
|
|
...resolvedOriginalMeta,
|
|
headTags: resolvedOriginalMeta['headTags'] + collect()
|
|
}
|
|
})
|
|
} else {
|
|
return {
|
|
...originalMeta,
|
|
headTags: originalMeta['headTags'] + collect()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
})
|