UNPKG

lean4-code-actions

Version:

Refactorings and snippets for Lean 4

48 lines (41 loc) 1.42 kB
import { DotenvParseOutput, parse } from 'dotenv' import { PathLike } from 'fs' import { readFile } from 'fs/promises' import * as process from 'process' import { merge } from 'remeda' import ProcessEnv = NodeJS.ProcessEnv export type Env = Record<string, string | undefined> & ProcessEnv /** * NOTE: This function modifies process.env */ export async function updateProcessEnv(dir: string = process.cwd()): Promise<void> { const config = await getEnvConfig(dir) Object.assign(process.env, config) } /** * We have to use process.env because Next.js rewrites exact strings that start with `process.env` */ export async function hackProcessEnv(env: Env) { Object.assign(process.env, env) } export async function getEnv(dir: string = process.cwd()): Promise<Env> { const config = await getEnvConfig(dir) return merge(config, process.env) } export async function getEnvConfig(dir: string) { const configs = await Promise.all([ getEnvFromFileMaybe(`${dir}/.env`), getEnvFromFileMaybe(`${dir}/.env.development`), getEnvFromFileMaybe(`${dir}/.env.local`), ]) return configs.reduce((fullConfig, partialConfig) => merge(fullConfig, partialConfig), {}) } export async function getEnvFromFileMaybe(filename: PathLike): Promise<DotenvParseOutput> { return readFile(filename).then(parse).catch((e) => { if (e.code === 'ENOENT') { return {} } else { throw e } }) }