UNPKG

nuxt-resource-hints

Version:

Nuxt module that adds HTTP header resource hints for resources in your Nuxt App.

48 lines (45 loc) 1.49 kB
import { defineNuxtModule, createResolver, addServerPlugin, useNitro } from '@nuxt/kit'; import { createDefu } from 'defu'; const defuReplaceArray = createDefu((obj, key, value) => { if (Array.isArray(obj[key]) || Array.isArray(value)) { obj[key] = value; return true; } }); const module$1 = defineNuxtModule({ meta: { name: "resource-hints", configKey: "resourceHints" }, // Default configuration options of the Nuxt module defaults: {}, setup(_options, _nuxt) { const { resolve } = createResolver(import.meta.url); addServerPlugin(resolve("./runtime/nitro/plugins/nitro-resource-link")); _nuxt.hook("nitro:init", (nitro) => { nitro.hooks.hook("prerender:done", async () => { nitro.options.serverAssets.push({ baseName: "nuxt-resource-hints", dir: createResolver(_nuxt.options.buildDir).resolve( "./nuxt-resource-hints" ) }); const preRenderedHeaders = await nitro.storage.getItem( "build:nuxt-resource-hints:headers.json" ) || {}; const preRenderedHeadersRouteRules = Object.fromEntries( Object.entries(preRenderedHeaders).map(([route, headers]) => [ route, { headers } ]) ); const n = useNitro(); n.options.routeRules = defuReplaceArray( preRenderedHeadersRouteRules, n.options.routeRules ); }); }); } }); export { module$1 as default };