UNPKG

nuxt-site-config

Version:

Shared site configuration for Nuxt 3 modules.

57 lines (56 loc) 1.8 kB
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; });