UNPKG

nuxt

Version:

Nuxt is a free and open-source framework with an intuitive and extendable way to create type-safe, performant and production-grade full-stack web applications and websites with Vue.js.

36 lines (35 loc) 1.15 kB
import { defineNuxtPlugin } from "../nuxt.js"; import { loadPayload } from "../composables/payload.js"; import { onNuxtReady } from "../composables/ready.js"; import { useRouter } from "../composables/router.js"; import { getAppManifest } from "../composables/manifest.js"; import { appManifest as isAppManifestEnabled } from "#build/nuxt.config.mjs"; export default defineNuxtPlugin({ name: "nuxt:payload", setup(nuxtApp) { if (import.meta.dev) { return; } 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(() => { 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, 1e3); } }); } });