withEnv
uses process
Run fn with these environment variables set (or, undefined, unset), and put them back after.
export async function withEnv<T>( vars: Record<string, string | undefined>, fn: () => Promise<T>, ): Promise<T> { const was = Object.fromEntries(Object.keys(vars).map((k) => [k, process.env[k]])); for (const [k, v] of Object.entries(vars)) if (v === undefined) delete process.env[k]; else process.env[k] = v; try { return await fn(); } finally { for (const [k, v] of Object.entries(was)) if (v === undefined) delete process.env[k]; else process.env[k] = v; } }