export function captureEnv(keys: string[]) { const snapshot = new Map(); for (const key of keys) { snapshot.set(key, process.env[key]); } return { restore() { for (const [key, value] of snapshot) { if (value === undefined) { delete process.env[key]; } else { process.env[key] = value; } } }, }; } function applyEnvValues(env: Record): void { for (const [key, value] of Object.entries(env)) { if (value === undefined) { delete process.env[key]; } else { process.env[key] = value; } } } export function captureFullEnv() { const snapshot: Record = { ...process.env }; return { restore() { for (const key of Object.keys(process.env)) { if (!(key in snapshot)) { delete process.env[key]; } } for (const [key, value] of Object.entries(snapshot)) { if (value === undefined) { delete process.env[key]; } else { process.env[key] = value; } } }, }; } export function withEnv(env: Record, fn: () => T): T { const snapshot = captureEnv(Object.keys(env)); try { applyEnvValues(env); return fn(); } finally { snapshot.restore(); } } export async function withEnvAsync( env: Record, fn: () => Promise, ): Promise { const snapshot = captureEnv(Object.keys(env)); try { applyEnvValues(env); return await fn(); } finally { snapshot.restore(); } }