(
explicitEnv: Record<string, string | undefined> = {},
)
| 3 | import path from 'node:path'; |
| 4 | |
| 5 | export function installIsolatedCliTestEnv( |
| 6 | explicitEnv: Record<string, string | undefined> = {}, |
| 7 | ): () => void { |
| 8 | const previousEnv = new Map<string, string | undefined>(); |
| 9 | const explicitKeys = new Set(Object.keys(explicitEnv)); |
| 10 | const tempRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'agent-device-cli-env-')); |
| 11 | const tempHome = path.join(tempRoot, 'home'); |
| 12 | fs.mkdirSync(path.join(tempHome, '.agent-device'), { recursive: true }); |
| 13 | |
| 14 | for (const key of Object.keys(process.env)) { |
| 15 | if (!key.startsWith('AGENT_DEVICE_') || explicitKeys.has(key)) continue; |
| 16 | previousEnv.set(key, process.env[key]); |
| 17 | delete process.env[key]; |
| 18 | } |
| 19 | |
| 20 | if (!explicitKeys.has('HOME')) { |
| 21 | previousEnv.set('HOME', process.env.HOME); |
| 22 | process.env.HOME = tempHome; |
| 23 | } |
| 24 | |
| 25 | for (const [key, value] of Object.entries(explicitEnv)) { |
| 26 | if (!previousEnv.has(key)) { |
| 27 | previousEnv.set(key, process.env[key]); |
| 28 | } |
| 29 | if (value === undefined) { |
| 30 | delete process.env[key]; |
| 31 | } else { |
| 32 | process.env[key] = value; |
| 33 | } |
| 34 | } |
| 35 | |
| 36 | return () => { |
| 37 | for (const [key, value] of previousEnv.entries()) { |
| 38 | if (value === undefined) { |
| 39 | delete process.env[key]; |
| 40 | } else { |
| 41 | process.env[key] = value; |
| 42 | } |
| 43 | } |
| 44 | fs.rmSync(tempRoot, { recursive: true, force: true }); |
| 45 | }; |
| 46 | } |
no test coverage detected