From 9d45cc3185475f28c6c66d375a0d1200be7a8bd5 Mon Sep 17 00:00:00 2001 From: Ardis Lu Date: Fri, 18 Sep 2026 22:29:56 -0700 Subject: [PATCH] Add log and test for `outFile` and `injectInProcess` intersection --- src/command.js | 3 +++ test/index.test.js | 27 ++++++++++++++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/command.js b/src/command.js index 3b57107..2119874 100644 --- a/src/command.js +++ b/src/command.js @@ -166,6 +166,9 @@ export async function decrypt(options = {}, { args = [] } = {}) { logger.debug?.('All environment variables handled.'); if (injectInProcess) { + if (outFile && outFile !== inFile) { + logger.debug?.('Both injectInProcess and outFile arguments were provided, ignoring outFile.'); + } for (const [envVar, value] of Object.entries(decryptedEnv)) { process.env[envVar] = value; } diff --git a/test/index.test.js b/test/index.test.js index c5e65c7..62ce948 100644 --- a/test/index.test.js +++ b/test/index.test.js @@ -1,5 +1,6 @@ import { suite, test } from 'node:test'; -import { deepStrictEqual, rejects } from 'node:assert'; +import { deepStrictEqual, rejects, ok } from 'node:assert'; +import { existsSync } from 'node:fs'; import { encrypt, decrypt } from '#src/index.js'; import { WINDOW_EXPIRATION_DURATION } from '#src/getPrf.js'; @@ -163,6 +164,30 @@ suite('decrypt', { concurrency: true }, () => { delete process.env.INJECTION_TEST; logger.assertCounts({ debug: 3, info: 0, warn: 0, error: 0 }); }); + test('ignores outFile when injectInProcess is set', async (t) => { + const envFile = await setupEnv(t, INJECTED_ENV); + const outFile = `${envFile}_TEST_OUT.tmp`; + + ok(!existsSync(outFile)); + deepStrictEqual(process.env.INJECTION_TEST, undefined); + await decrypt({ inFile: envFile, injectInProcess: true, outFile }); + ok(!existsSync(outFile)); + deepStrictEqual(process.env.INJECTION_TEST, 'INJECTED'); + delete process.env.INJECTION_TEST; + }); + test('ignores outFile when injectInProcess is set (with logs)', async (t) => { + const envFile = await setupEnv(t, INJECTED_ENV); + const outFile = `${envFile}_TEST_OUT.tmp`; + const logger = new MockLogger(); + + ok(!existsSync(outFile)); + deepStrictEqual(process.env.INJECTION_TEST, undefined); + await decrypt({ inFile: envFile, injectInProcess: true, outFile, logger }); + ok(!existsSync(outFile)); + deepStrictEqual(process.env.INJECTION_TEST, 'INJECTED'); + delete process.env.INJECTION_TEST; + logger.assertCounts({ debug: 4, info: 0, warn: 0, error: 0 }); + }); test('passes through excess args to execute', async (t) => { const envFile = await setupEnv(t, STD_ENV); /** @type {(command: string) => void} */ -- 2.47.3