UNPKG

nitropack

Version:

Build and Deploy Universal JavaScript Servers

46 lines (45 loc) • 1.49 kB
import destr from "destr"; import { snakeCase } from "scule"; import { appConfig as _appConfig } from "#internal/nitro/virtual/app-config"; const _runtimeConfig = process.env.RUNTIME_CONFIG; const ENV_PREFIX = "NITRO_"; const ENV_PREFIX_ALT = _runtimeConfig.nitro.envPrefix ?? process.env.NITRO_ENV_PREFIX ?? "_"; overrideConfig(_runtimeConfig); const runtimeConfig = deepFreeze(_runtimeConfig); export default runtimeConfig; export const useRuntimeConfig = () => runtimeConfig; const appConfig = deepFreeze(_appConfig); export const useAppConfig = () => appConfig; function getEnv(key) { const envKey = snakeCase(key).toUpperCase(); return destr( process.env[ENV_PREFIX + envKey] ?? process.env[ENV_PREFIX_ALT + envKey] ); } function isObject(input) { return typeof input === "object" && !Array.isArray(input); } function overrideConfig(obj, parentKey = "") { for (const key in obj) { const subKey = parentKey ? `${parentKey}_${key}` : key; const envValue = getEnv(subKey); if (isObject(obj[key])) { if (isObject(envValue)) { obj[key] = { ...obj[key], ...envValue }; } overrideConfig(obj[key], subKey); } else { obj[key] = envValue ?? obj[key]; } } } function deepFreeze(object) { const propNames = Object.getOwnPropertyNames(object); for (const name of propNames) { const value = object[name]; if (value && typeof value === "object") { deepFreeze(value); } } return Object.freeze(object); }