From 5dd596e6942b68ea40a64111999e1f3450860c63 Mon Sep 17 00:00:00 2001 From: Gar Date: Wed, 12 Oct 2022 12:57:00 -0700 Subject: [PATCH] fix(config): remove `node-version` and `npm-version` BREAKING CHANGE: the `node-version` and `npm-version` configs have been removed. These are only used sparingly by arborist to determine if optional dependencies should be installed, and during engines checks (which are only warnings unless `engine-strict` is true. --- lib/npm.js | 7 +++-- lib/utils/config/definitions.js | 26 +++---------------- .../test/lib/commands/config.js.test.cjs | 18 +++++-------- test/fixtures/sandbox.js | 2 ++ test/lib/commands/config.js | 14 +++++----- test/lib/utils/config/definitions.js | 13 ++-------- 6 files changed, 26 insertions(+), 54 deletions(-) diff --git a/lib/npm.js b/lib/npm.js index fe2ce5c6b818c..a922aafaf936e 100644 --- a/lib/npm.js +++ b/lib/npm.js @@ -311,9 +311,12 @@ class Npm extends EventEmitter { get flatOptions () { const { flat } = this.config - // the Arborist constructor is used almost everywhere we call pacote, it's easiest - // to attach it to flatOptions so it goes everywhere without having to touch every call + // the Arborist constructor is used almost everywhere we call pacote, it's + // easiest to attach it to flatOptions so it goes everywhere without having + // to touch every call flat.Arborist = Arborist + flat.nodeVersion = process.version + flat.npmVersion = pkg.version if (this.command) { flat.npmCommand = this.command } diff --git a/lib/utils/config/definitions.js b/lib/utils/config/definitions.js index 6d92651eb95f3..c9d76249c7b1e 100644 --- a/lib/utils/config/definitions.js +++ b/lib/utils/config/definitions.js @@ -1314,16 +1314,6 @@ define('node-options', { `, }) -define('node-version', { - default: process.version, - defaultDescription: 'Node.js `process.version` value', - type: semver, - description: ` - The node version to use when checking a package's \`engines\` setting. - `, - flatten, -}) - define('noproxy', { default: '', defaultDescription: ` @@ -1344,16 +1334,6 @@ define('noproxy', { }, }) -define('npm-version', { - default: npmVersion, - defaultDescription: 'Output of `npm --version`', - type: semver, - description: ` - The npm version to use when checking a package's \`engines\` setting. - `, - flatten, -}) - define('offline', { default: false, type: Boolean, @@ -2044,7 +2024,7 @@ define('tag-version-prefix', { type: String, description: ` If set, alters the prefix used when tagging a new version when performing - a version increment using \`npm-version\`. To remove the prefix + a version increment using \`npm version\`. To remove the prefix altogether, set it to the empty string: \`""\`. Because other tools may rely on the convention that npm version tags look @@ -2166,8 +2146,8 @@ define('user-agent', { inWorkspaces = true } flatOptions.userAgent = - value.replace(/\{node-version\}/gi, obj['node-version']) - .replace(/\{npm-version\}/gi, obj['npm-version']) + value.replace(/\{node-version\}/gi, process.version) + .replace(/\{npm-version\}/gi, npmVersion) .replace(/\{platform\}/gi, process.platform) .replace(/\{arch\}/gi, process.arch) .replace(/\{workspaces\}/gi, inWorkspaces) diff --git a/tap-snapshots/test/lib/commands/config.js.test.cjs b/tap-snapshots/test/lib/commands/config.js.test.cjs index 116ccea3a12ef..25e917fb23d87 100644 --- a/tap-snapshots/test/lib/commands/config.js.test.cjs +++ b/tap-snapshots/test/lib/commands/config.js.test.cjs @@ -96,11 +96,9 @@ exports[`test/lib/commands/config.js TAP config list --json > output matches sna "maxsockets": 15, "message": "%s", "node-options": null, - "node-version": "{NODE-VERSION}", "noproxy": [ "" ], - "npm-version": "{NPM-VERSION}", "offline": false, "omit": [], "omit-lockfile-registry-resolved": false, @@ -252,9 +250,7 @@ maxsockets = 15 message = "%s" metrics-registry = "https://registry.npmjs.org/" node-options = null -node-version = "{NODE-VERSION}" noproxy = [""] -npm-version = "{NPM-VERSION}" offline = false omit = [] omit-lockfile-registry-resolved = false @@ -344,9 +340,9 @@ prefix = "{LOCALPREFIX}" userconfig = "{HOME}/.npmrc" ; node bin location = {EXECPATH} -; node version = {NODE-VERSION} +; node version = {PROCESS_VERSION} ; npm local prefix = {LOCALPREFIX} -; npm version = {NPM-VERSION} +; npm version = {NPM_VERSION} ; cwd = {NPMDIR} ; HOME = {HOME} ; Run \`npm config ls -l\` to show all defaults. @@ -360,9 +356,9 @@ prefix = "{LOCALPREFIX}" userconfig = "{HOME}/.npmrc" ; node bin location = {EXECPATH} -; node version = {NODE-VERSION} +; node version = {PROCESS_VERSION} ; npm local prefix = {LOCALPREFIX} -; npm version = {NPM-VERSION} +; npm version = {NPM_VERSION} ; cwd = {NPMDIR} ; HOME = {HOME} ; Run \`npm config ls -l\` to show all defaults. @@ -380,7 +376,7 @@ globalconfig = "{GLOBALPREFIX}/npmrc" init-module = "{HOME}/.npm-init.js" local-prefix = "{LOCALPREFIX}" ; prefix = "{LOCALPREFIX}" ; overridden by cli -user-agent = "npm/{NPM-VERSION} node/{NODE-VERSION} {PLATFORM} {ARCH} workspaces/false" +user-agent = "npm/9.0.0-pre.4 node/v18.10.0 {PLATFORM} {ARCH} workspaces/false" ; userconfig = "{HOME}/.npmrc" ; overridden by cli ; "cli" config from command line options @@ -391,9 +387,9 @@ prefix = "{LOCALPREFIX}" userconfig = "{HOME}/.npmrc" ; node bin location = {EXECPATH} -; node version = {NODE-VERSION} +; node version = v18.10.0 ; npm local prefix = {LOCALPREFIX} -; npm version = {NPM-VERSION} +; npm version = 9.0.0-pre.4 ; cwd = {NPMDIR} ; HOME = {HOME} ; Run \`npm config ls -l\` to show all defaults. diff --git a/test/fixtures/sandbox.js b/test/fixtures/sandbox.js index 7e57468e0c5bb..01e760a60d88c 100644 --- a/test/fixtures/sandbox.js +++ b/test/fixtures/sandbox.js @@ -155,6 +155,8 @@ class Sandbox extends EventEmitter { .split(normalize(homedir())).join('{REALHOME}') .split(this[_proxy].platform).join('{PLATFORM}') .split(this[_proxy].arch).join('{ARCH}') + .replace(process.version, '{PROCESS_VERSION}') + .replace(this[_npm].version, '{NPM_VERSION}') // We do the defaults after everything else so that they don't cause the // other cleaners to miss values we would have clobbered here. For diff --git a/test/lib/commands/config.js b/test/lib/commands/config.js index 42df8b52d8e57..61e47244e890c 100644 --- a/test/lib/commands/config.js +++ b/test/lib/commands/config.js @@ -330,21 +330,21 @@ t.test('config get no args', async t => { t.test('config get single key', async t => { const sandbox = new Sandbox(t) - await sandbox.run('config', ['get', 'node-version']) - t.equal(sandbox.output, sandbox.config.get('node-version'), 'should get the value') + await sandbox.run('config', ['get', 'all']) + t.equal(sandbox.output, `${sandbox.config.get('all')}`, 'should get the value') }) t.test('config get multiple keys', async t => { const sandbox = new Sandbox(t) - await sandbox.run('config', ['get', 'node-version', 'npm-version']) + await sandbox.run('config', ['get', 'yes', 'all']) t.ok( - sandbox.output.includes(`node-version=${sandbox.config.get('node-version')}`), - 'outputs node-version' + sandbox.output.includes(`yes=${sandbox.config.get('yes')}`), + 'outputs yes' ) t.ok( - sandbox.output.includes(`npm-version=${sandbox.config.get('npm-version')}`), - 'outputs npm-version' + sandbox.output.includes(`all=${sandbox.config.get('all')}`), + 'outputs all' ) }) diff --git a/test/lib/utils/config/definitions.js b/test/lib/utils/config/definitions.js index 4b0f502b816ce..07d029c0290bb 100644 --- a/test/lib/utils/config/definitions.js +++ b/test/lib/utils/config/definitions.js @@ -1,6 +1,7 @@ const t = require('tap') const { resolve } = require('path') const mockGlobals = require('../../../fixtures/mock-globals') +const pkg = require('../../../../package.json') // have to fake the node version, or else it'll only pass on this one mockGlobals(t, { 'process.version': 'v14.8.0', 'process.env.NODE_ENV': undefined }) @@ -9,14 +10,6 @@ const mockDefs = (mocks = {}) => t.mock('../../../../lib/utils/config/definition const isWin = (isWindows) => ({ '../../../../lib/utils/is-windows.js': { isWindows } }) -t.test('node and npm versions', t => { - const definitions = mockDefs() - const pkg = require('../../../../package.json') - t.equal(definitions['npm-version'].default, pkg.version, 'npm-version default') - t.equal(definitions['node-version'].default, process.version, 'node-version default') - t.end() -}) - t.test('basic flattening function camelCases from css-case', t => { const flat = {} const obj = { 'prefer-online': true } @@ -745,11 +738,9 @@ t.test('detect CI', t => { t.test('user-agent', t => { const obj = { 'user-agent': mockDefs()['user-agent'].default, - 'npm-version': '1.2.3', - 'node-version': '9.8.7', } const flat = {} - const expectNoCI = `npm/1.2.3 node/9.8.7 ` + + const expectNoCI = `npm/${pkg.version} node/${process.version} ` + `${process.platform} ${process.arch} workspaces/false` mockDefs()['user-agent'].flatten('user-agent', obj, flat) t.equal(flat.userAgent, expectNoCI)