import { useAppConfig, useNitroApp, useNitroOrigin, useRuntimeConfig } from "#imports"; import { defineEventHandler } from "h3"; import { createSiteConfigStack, envSiteConfig } from "site-config-stack"; export default defineEventHandler(async (e) => { if (e.context.siteConfig) return; const runtimeConfig = useRuntimeConfig(e); const config = runtimeConfig["nuxt-site-config"]; const nitroApp = useNitroApp(); const siteConfig = createSiteConfigStack({ debug: config.debug }); const appConfig = useAppConfig(e); 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 (appConfig.site) { siteConfig.push({ _priority: -2, _context: "app:config", ...appConfig.site }); } if (e.context._nitro.routeRules.site) { siteConfig.push({ _context: "route-rules", ...e.context._nitro.routeRules.site }); } const ctx = { siteConfig, event: e }; await nitroApp.hooks.callHook("site-config:init", ctx); e.context.siteConfig = ctx.siteConfig; });