2025-09-05 14:59:21 +08:00

51 lines
1.5 KiB
JavaScript

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