mirror of
https://github.com/nuxt/nuxt.git
synced 2025-03-09 03:03:18 +00:00
37 lines
1.2 KiB
TypeScript
37 lines
1.2 KiB
TypeScript
import { defineNuxtPlugin } from '../nuxt'
|
|
import { loadPayload } from '../composables/payload'
|
|
import { onNuxtReady } from '../composables/ready'
|
|
import { useRouter } from '../composables/router'
|
|
import { getAppManifest } from '../composables/manifest'
|
|
// @ts-expect-error virtual file
|
|
import { appManifest as isAppManifestEnabled } from '#build/nuxt.config.mjs'
|
|
|
|
export default defineNuxtPlugin({
|
|
name: 'nuxt:payload',
|
|
setup (nuxtApp) {
|
|
// TODO: Support dev
|
|
if (import.meta.dev) { return }
|
|
|
|
// Load payload after middleware & once final route is resolved
|
|
useRouter().beforeResolve(async (to, from) => {
|
|
if (to.path === from.path) { return }
|
|
const payload = await loadPayload(to.path)
|
|
if (!payload) { return }
|
|
Object.assign(nuxtApp.static.data, payload.data)
|
|
})
|
|
|
|
onNuxtReady(() => {
|
|
// Load payload into cache
|
|
nuxtApp.hooks.hook('link:prefetch', async (url) => {
|
|
const { hostname } = new URL(url, window.location.href)
|
|
if (hostname === window.location.hostname) {
|
|
await loadPayload(url)
|
|
}
|
|
})
|
|
if (isAppManifestEnabled && navigator.connection?.effectiveType !== 'slow-2g') {
|
|
setTimeout(getAppManifest, 1000)
|
|
}
|
|
})
|
|
},
|
|
})
|