nuxt-site-config
Version:
Shared site configuration for Nuxt 3 modules.
57 lines (56 loc) • 1.8 kB
JavaScript
import { eventHandler } from "h3";
import { useNitroApp, useRuntimeConfig } from "nitropack/runtime";
import { createSiteConfigStack, envSiteConfig } from "site-config-stack";
import { parseURL } from "ufo";
import { useNitroOrigin } from "../composables/useNitroOrigin.js";
export default eventHandler(async (e) => {
if (e.context._initedSiteConfig)
return;
const runtimeConfig = useRuntimeConfig(e);
const config = runtimeConfig["nuxt-site-config"];
const nitroApp = useNitroApp();
const siteConfig = e.context.siteConfig || createSiteConfigStack({
debug: config.debug
});
const nitroOrigin = useNitroOrigin(e);
e.context.siteConfigNitroOrigin = nitroOrigin;
if (!import.meta.prerender) {
siteConfig.push({
_context: "nitro:init",
_priority: -4,
url: nitroOrigin
});
}
siteConfig.push({
_context: "runtimeEnv",
_priority: 0,
...runtimeConfig.site || {},
...runtimeConfig.public.site || {},
// @ts-expect-error untyped
...envSiteConfig(import.meta.env)
// just in-case, shouldn't be needed
});
const buildStack = config.stack || [];
buildStack.forEach((c) => siteConfig.push(c));
if (e.context._nitro.routeRules.site) {
siteConfig.push({
_context: "route-rules",
...e.context._nitro.routeRules.site
});
}
if (config.multiTenancy) {
const host = parseURL(nitroOrigin).host;
const tenant = config.multiTenancy?.find((t) => t.hosts.includes(host));
if (tenant) {
siteConfig.push({
_context: `multi-tenancy:${host}`,
_priority: 0,
...tenant.config
});
}
}
const ctx = { siteConfig, event: e };
await nitroApp.hooks.callHook("site-config:init", ctx);
e.context.siteConfig = ctx.siteConfig;
e.context._initedSiteConfig = true;
});