import dotenv from 'dotenv' import dotenvExpand from 'dotenv-expand' import path from 'path' import ServerlessError from '../serverless-error.js' const isMissingFileError = (error) => error.code === 'ENOENT' const throwDotenvError = (error, filePath) => { const errorMessage = `Failed to load environment variables from "${filePath}": ${error}` throw new ServerlessError(errorMessage, 'DOTENV_LOAD_ERROR') } const loadDotenvFrom = (envFilePath) => { const config = dotenv.config({ path: envFilePath }) return dotenvExpand.expand(config) } export default (stage) => { const defaultEnvFilePath = path.join(process.cwd(), '.env') const stageEnvFilePath = path.join(process.cwd(), `.env.${stage}`) const { error: stageEnvResultError } = loadDotenvFrom(stageEnvFilePath) if (!stageEnvResultError) return if (!isMissingFileError(stageEnvResultError)) { throwDotenvError(stageEnvResultError, stageEnvFilePath) } const { error: defaultEnvResultError } = loadDotenvFrom(defaultEnvFilePath) if (defaultEnvResultError && !isMissingFileError(defaultEnvResultError)) { throwDotenvError(defaultEnvResultError, defaultEnvFilePath) } }