48 lines
1.6 KiB
JavaScript
48 lines
1.6 KiB
JavaScript
import { fileURLToPath } from "node:url";
|
|
import { loadEnv } from "vite";
|
|
const isValidIdentifierRe = /^[_$a-zA-Z][\w$]*$/;
|
|
function getPrivateEnv(fullEnv, astroConfig, useRawValues) {
|
|
const viteConfig = astroConfig.vite;
|
|
let envPrefixes = ["PUBLIC_"];
|
|
if (viteConfig.envPrefix) {
|
|
envPrefixes = Array.isArray(viteConfig.envPrefix) ? viteConfig.envPrefix : [viteConfig.envPrefix];
|
|
}
|
|
const privateEnv = {};
|
|
for (const key in fullEnv) {
|
|
if (isValidIdentifierRe.test(key) && envPrefixes.every((prefix) => !key.startsWith(prefix))) {
|
|
if (typeof process.env[key] !== "undefined") {
|
|
let value = process.env[key];
|
|
if (typeof value !== "string") {
|
|
value = `${value}`;
|
|
}
|
|
if (!useRawValues && (value === "0" || value === "1" || value === "true" || value === "false")) {
|
|
privateEnv[key] = value;
|
|
} else {
|
|
privateEnv[key] = `process.env.${key}`;
|
|
}
|
|
} else {
|
|
privateEnv[key] = JSON.stringify(fullEnv[key]);
|
|
}
|
|
}
|
|
}
|
|
return privateEnv;
|
|
}
|
|
function getEnv(mode, config, useRawValues) {
|
|
const loaded = loadEnv(mode, config.vite.envDir ?? fileURLToPath(config.root), "");
|
|
const privateEnv = getPrivateEnv(loaded, config, useRawValues);
|
|
return { loaded, privateEnv };
|
|
}
|
|
const createEnvLoader = (mode, config, useRawValues) => {
|
|
let { loaded, privateEnv } = getEnv(mode, config, useRawValues);
|
|
return {
|
|
get: () => {
|
|
({ loaded, privateEnv } = getEnv(mode, config, useRawValues));
|
|
return loaded;
|
|
},
|
|
getPrivateEnv: () => privateEnv
|
|
};
|
|
};
|
|
export {
|
|
createEnvLoader
|
|
};
|