From 1415b4bdeeaabb6e0ba12b6b1b0cc56502bd64ab Mon Sep 17 00:00:00 2001 From: Gar Date: Thu, 25 Mar 2021 09:00:24 -0700 Subject: [PATCH] fix(config): properly translate user-agent This config item is a bit of a unique one, as it can be set as a template, but then gets translated and also populated to process.env.npm_config_user_agent. This adds that logic back in during the flattening. PR-URL: https://github.com/npm/cli/pull/2964 Credit: @wraithgar Close: #2964 Reviewed-by: @nlf --- lib/utils/config/definitions.js | 5 +++++ test/lib/utils/config/definitions.js | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/lib/utils/config/definitions.js b/lib/utils/config/definitions.js index 67a830448e311..ec54d731beb4c 100644 --- a/lib/utils/config/definitions.js +++ b/lib/utils/config/definitions.js @@ -1970,6 +1970,11 @@ define('user-agent', { .replace(/\{arch\}/gi, process.arch) .replace(/\{ci\}/gi, ciName ? `ci/${ciName}` : '') .trim() + // user-agent is a unique kind of config item that gets set from a template + // and ends up translated. Because of this, the normal "should we set this + // to process.env also doesn't work + obj[key] = flatOptions.userAgent + process.env.npm_config_user_agent = flatOptions.userAgent }, }) diff --git a/test/lib/utils/config/definitions.js b/test/lib/utils/config/definitions.js index b6e1d1d01529e..49e51ace1aa30 100644 --- a/test/lib/utils/config/definitions.js +++ b/test/lib/utils/config/definitions.js @@ -733,10 +733,16 @@ t.test('user-agent', t => { `${process.platform} ${process.arch}` definitions['user-agent'].flatten('user-agent', obj, flat) t.equal(flat.userAgent, expectNoCI) + t.equal(process.env.npm_config_user_agent, flat.userAgent, 'npm_user_config environment is set') + t.equal(obj['user-agent'], flat.userAgent, 'config user-agent template is translated') + obj['ci-name'] = 'foo' + obj['user-agent'] = definitions['user-agent'].default const expectCI = `${expectNoCI} ci/foo` definitions['user-agent'].flatten('user-agent', obj, flat) t.equal(flat.userAgent, expectCI) + t.equal(process.env.npm_config_user_agent, flat.userAgent, 'npm_user_config environment is set') + t.equal(obj['user-agent'], flat.userAgent, 'config user-agent template is translated') t.end() })