116 lines
3.8 KiB
JavaScript
116 lines
3.8 KiB
JavaScript
|
|
'use strict';
|
||
|
|
|
||
|
|
const kit = require('@nuxt/kit');
|
||
|
|
const pkgTypes = require('pkg-types');
|
||
|
|
const siteConfigStack = require('site-config-stack');
|
||
|
|
const stdEnv = require('std-env');
|
||
|
|
const ufo = require('ufo');
|
||
|
|
|
||
|
|
async function initSiteConfig(nuxt = kit.tryUseNuxt()) {
|
||
|
|
if (!nuxt)
|
||
|
|
return;
|
||
|
|
let siteConfig = nuxt._siteConfig;
|
||
|
|
if (siteConfig)
|
||
|
|
return siteConfig;
|
||
|
|
siteConfig = siteConfigStack.createSiteConfigStack();
|
||
|
|
const rootDir = nuxt?.options.rootDir || process.cwd?.() || false;
|
||
|
|
siteConfig.push({
|
||
|
|
_context: "system",
|
||
|
|
_priority: -15,
|
||
|
|
name: rootDir ? rootDir.split("/").pop() : void 0,
|
||
|
|
env: process.env.NODE_ENV
|
||
|
|
});
|
||
|
|
if (rootDir) {
|
||
|
|
const pkgJson = await pkgTypes.readPackageJSON(void 0, { startingFrom: rootDir });
|
||
|
|
if (pkgJson) {
|
||
|
|
siteConfig.push({
|
||
|
|
_context: "package.json",
|
||
|
|
_priority: -10,
|
||
|
|
name: pkgJson.name,
|
||
|
|
description: pkgJson.description
|
||
|
|
});
|
||
|
|
}
|
||
|
|
}
|
||
|
|
siteConfig.push({
|
||
|
|
_context: "vendorEnv",
|
||
|
|
_priority: -5,
|
||
|
|
url: [
|
||
|
|
// vercel
|
||
|
|
process.env.VERCEL_URL,
|
||
|
|
process.env.NUXT_ENV_VERCEL_URL,
|
||
|
|
// netlify
|
||
|
|
process.env.URL,
|
||
|
|
// cloudflare pages
|
||
|
|
process.env.CF_PAGES_URL
|
||
|
|
].find((k) => Boolean(k)),
|
||
|
|
name: [
|
||
|
|
// vercel
|
||
|
|
process.env.NUXT_ENV_VERCEL_GIT_REPO_SLUG,
|
||
|
|
// netlify
|
||
|
|
process.env.SITE_NAME
|
||
|
|
].find((k) => Boolean(k))
|
||
|
|
});
|
||
|
|
const runtimeConfig = nuxt.options.runtimeConfig;
|
||
|
|
const runtimeConfigEnvKeys = [
|
||
|
|
...Object.entries(runtimeConfig.site || {}).filter(([k]) => k.startsWith("site")).map(([k, v]) => [k.replace(/^site/, ""), v]),
|
||
|
|
...Object.entries([...Object.entries(runtimeConfig), ...Object.entries(runtimeConfig.public)]).filter(([k]) => k.startsWith("site")).map(([k, v]) => [k.replace(/^site/, ""), v])
|
||
|
|
];
|
||
|
|
siteConfig.push({
|
||
|
|
_priority: -2,
|
||
|
|
_context: "legacyRuntimeConfig",
|
||
|
|
...Object.fromEntries(runtimeConfigEnvKeys)
|
||
|
|
});
|
||
|
|
siteConfig.push({
|
||
|
|
_context: "buildEnv",
|
||
|
|
_priority: -1,
|
||
|
|
...siteConfigStack.envSiteConfig(process.env)
|
||
|
|
});
|
||
|
|
nuxt._siteConfig = siteConfig;
|
||
|
|
return siteConfig;
|
||
|
|
}
|
||
|
|
async function installNuxtSiteConfig(nuxt = kit.tryUseNuxt()) {
|
||
|
|
await kit.installModule(await kit.resolvePath("nuxt-site-config"));
|
||
|
|
await initSiteConfig(nuxt);
|
||
|
|
}
|
||
|
|
function getSiteConfigStack(nuxt = kit.tryUseNuxt()) {
|
||
|
|
if (!nuxt)
|
||
|
|
throw new Error("Nuxt context is missing.");
|
||
|
|
if (!nuxt._siteConfig)
|
||
|
|
throw new Error("Site config is not initialized. Make sure you are running your module after nuxt-site-config.");
|
||
|
|
return nuxt._siteConfig;
|
||
|
|
}
|
||
|
|
function updateSiteConfig(input, nuxt = kit.tryUseNuxt()) {
|
||
|
|
const container = getSiteConfigStack(nuxt);
|
||
|
|
container.push(input);
|
||
|
|
}
|
||
|
|
function useSiteConfig(nuxt = kit.tryUseNuxt()) {
|
||
|
|
const container = getSiteConfigStack(nuxt);
|
||
|
|
return container.get();
|
||
|
|
}
|
||
|
|
|
||
|
|
function useNitroOrigin() {
|
||
|
|
const cert = stdEnv.env.NITRO_SSL_CERT;
|
||
|
|
const key = stdEnv.env.NITRO_SSL_KEY;
|
||
|
|
let host = stdEnv.env.NITRO_HOST || stdEnv.env.HOST || false;
|
||
|
|
let port = stdEnv.env.NITRO_PORT || stdEnv.env.PORT || (stdEnv.isDevelopment ? 3e3 : false);
|
||
|
|
let protocol = cert && key || !stdEnv.isDevelopment ? "https" : "http";
|
||
|
|
if ((stdEnv.isDevelopment || stdEnv.env.prerender) && stdEnv.env.NUXT_VITE_NODE_OPTIONS) {
|
||
|
|
const origin = JSON.parse(stdEnv.env.NUXT_VITE_NODE_OPTIONS).baseURL.replace("/__nuxt_vite_node__", "");
|
||
|
|
host = ufo.withoutProtocol(origin);
|
||
|
|
protocol = origin.includes("https") ? "https" : "http";
|
||
|
|
}
|
||
|
|
if (typeof host === "string" && host.includes(":")) {
|
||
|
|
port = host.split(":").pop();
|
||
|
|
host = host.split(":")[0];
|
||
|
|
}
|
||
|
|
port = port ? `:${port}` : "";
|
||
|
|
return `${protocol}://${host}${port}/`;
|
||
|
|
}
|
||
|
|
|
||
|
|
exports.getSiteConfigStack = getSiteConfigStack;
|
||
|
|
exports.initSiteConfig = initSiteConfig;
|
||
|
|
exports.installNuxtSiteConfig = installNuxtSiteConfig;
|
||
|
|
exports.updateSiteConfig = updateSiteConfig;
|
||
|
|
exports.useNitroOrigin = useNitroOrigin;
|
||
|
|
exports.useSiteConfig = useSiteConfig;
|