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
JavaScript
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 };