Skip to content

Commit e722439

Browse files
committed
fix: move all definitions to @npmcli/config package
1 parent 6a9bf73 commit e722439

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+490
-3263
lines changed

DEPENDENCIES.md

+10-5
Original file line numberDiff line numberDiff line change
@@ -187,11 +187,13 @@ graph LR;
187187
npmcli-config-->nopt;
188188
npmcli-config-->npmcli-eslint-config["@npmcli/eslint-config"];
189189
npmcli-config-->npmcli-map-workspaces["@npmcli/map-workspaces"];
190+
npmcli-config-->npmcli-mock-globals["@npmcli/mock-globals"];
190191
npmcli-config-->npmcli-template-oss["@npmcli/template-oss"];
191192
npmcli-config-->proc-log;
192193
npmcli-config-->read-package-json-fast;
193194
npmcli-config-->semver;
194195
npmcli-docs-->ignore-walk;
196+
npmcli-docs-->npmcli-config["@npmcli/config"];
195197
npmcli-docs-->npmcli-eslint-config["@npmcli/eslint-config"];
196198
npmcli-docs-->npmcli-template-oss["@npmcli/template-oss"];
197199
npmcli-docs-->semver;
@@ -644,10 +646,12 @@ graph LR;
644646
npmcli-arborist-->tcompare;
645647
npmcli-arborist-->treeverse;
646648
npmcli-arborist-->walk-up-path;
649+
npmcli-config-->ci-info;
647650
npmcli-config-->ini;
648651
npmcli-config-->nopt;
649652
npmcli-config-->npmcli-eslint-config["@npmcli/eslint-config"];
650653
npmcli-config-->npmcli-map-workspaces["@npmcli/map-workspaces"];
654+
npmcli-config-->npmcli-mock-globals["@npmcli/mock-globals"];
651655
npmcli-config-->npmcli-template-oss["@npmcli/template-oss"];
652656
npmcli-config-->proc-log;
653657
npmcli-config-->read-package-json-fast;
@@ -659,6 +663,7 @@ graph LR;
659663
npmcli-docs-->ignore-walk;
660664
npmcli-docs-->isaacs-string-locale-compare["@isaacs/string-locale-compare"];
661665
npmcli-docs-->jsdom;
666+
npmcli-docs-->npmcli-config["@npmcli/config"];
662667
npmcli-docs-->npmcli-eslint-config["@npmcli/eslint-config"];
663668
npmcli-docs-->npmcli-template-oss["@npmcli/template-oss"];
664669
npmcli-docs-->rehype-stringify;
@@ -826,8 +831,8 @@ packages higher up the chain.
826831
- @npmcli/arborist
827832
- @npmcli/metavuln-calculator
828833
- pacote, libnpmhook, libnpmorg, libnpmsearch, libnpmteam, npm-profile
829-
- npm-registry-fetch, @npmcli/package-json, libnpmversion
830-
- @npmcli/git, make-fetch-happen, @npmcli/config, init-package-json
831-
- @npmcli/installed-package-contents, @npmcli/map-workspaces, cacache, npm-pick-manifest, @npmcli/run-script, read-package-json, promzard
832-
- @npmcli/docs, @npmcli/fs, npm-bundled, read-package-json-fast, unique-filename, npm-install-checks, npm-package-arg, npm-packlist, normalize-package-data, bin-links, nopt, npmlog, parse-conflict-json, @npmcli/mock-globals, read
833-
- @npmcli/eslint-config, @npmcli/template-oss, ignore-walk, semver, npm-normalize-package-bin, @npmcli/name-from-folder, json-parse-even-better-errors, fs-minipass, ssri, unique-slug, @npmcli/promise-spawn, hosted-git-info, proc-log, validate-npm-package-name, @npmcli/node-gyp, minipass-fetch, @npmcli/query, cmd-shim, read-cmd-shim, write-file-atomic, abbrev, are-we-there-yet, gauge, minify-registry-metadata, ini, @npmcli/disparity-colors, mute-stream, npm-audit-report, npm-user-validate
834+
- @npmcli/docs, npm-registry-fetch, @npmcli/package-json, libnpmversion
835+
- @npmcli/config, @npmcli/git, make-fetch-happen, init-package-json
836+
- @npmcli/map-workspaces, @npmcli/installed-package-contents, cacache, npm-pick-manifest, @npmcli/run-script, read-package-json, promzard
837+
- read-package-json-fast, nopt, @npmcli/mock-globals, @npmcli/fs, npm-bundled, unique-filename, npm-install-checks, npm-package-arg, npm-packlist, normalize-package-data, bin-links, npmlog, parse-conflict-json, read
838+
- @npmcli/name-from-folder, json-parse-even-better-errors, npm-normalize-package-bin, ini, abbrev, proc-log, semver, @npmcli/eslint-config, @npmcli/template-oss, ignore-walk, fs-minipass, ssri, unique-slug, @npmcli/promise-spawn, hosted-git-info, validate-npm-package-name, @npmcli/node-gyp, minipass-fetch, @npmcli/query, cmd-shim, read-cmd-shim, write-file-atomic, are-we-there-yet, gauge, minify-registry-metadata, @npmcli/disparity-colors, mute-stream, npm-audit-report, npm-user-validate

bin/npx-cli.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ const removed = new Set([
2424
...removedOpts,
2525
])
2626

27-
const { definitions, shorthands } = require('../lib/utils/config/index.js')
27+
const { definitions, shorthands } = require('@npmcli/config/lib/definitions')
2828
const npmSwitches = Object.entries(definitions)
2929
.filter(([key, { type }]) => type === Boolean ||
3030
(Array.isArray(type) && type.includes(Boolean)))

docs/lib/index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ const { join, basename, resolve } = require('path')
33
const transformHTML = require('./transform-html.js')
44
const { version } = require('../../lib/npm.js')
55
const { aliases } = require('../../lib/utils/cmd-list')
6-
const { shorthands, definitions } = require('../../lib/utils/config/index.js')
6+
const { shorthands, definitions } = require('@npmcli/config/lib/definitions')
77

88
const DOC_EXT = '.md'
99

docs/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
},
2222
"devDependencies": {
2323
"@isaacs/string-locale-compare": "^1.1.0",
24+
"@npmcli/config": "^6.1.7",
2425
"@npmcli/eslint-config": "^4.0.0",
2526
"@npmcli/template-oss": "4.14.1",
2627
"front-matter": "^4.0.2",

lib/base-command.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
const { relative } = require('path')
44

5-
const definitions = require('./utils/config/definitions.js')
5+
const { definitions } = require('@npmcli/config/lib/definitions')
66
const getWorkspaces = require('./workspaces/get-workspaces.js')
77
const { aliases: cmdAliases } = require('./utils/cmd-list')
88

lib/commands/completion.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ const nopt = require('nopt')
3434
const { resolve } = require('path')
3535

3636
const Npm = require('../npm.js')
37-
const { definitions, shorthands } = require('../utils/config/index.js')
37+
const { definitions, shorthands } = require('@npmcli/config/lib/definitions')
3838
const { commands, aliases, deref } = require('../utils/cmd-list.js')
3939
const configNames = Object.keys(definitions)
4040
const shorthandNames = Object.keys(shorthands)

lib/commands/config.js

+3-5
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
1-
// don't expand so that we only assemble the set of defaults when needed
2-
const configDefs = require('../utils/config/index.js')
3-
41
const { mkdir, readFile, writeFile } = require('fs/promises')
52
const { dirname, resolve } = require('path')
63
const { spawn } = require('child_process')
74
const { EOL } = require('os')
85
const ini = require('ini')
96
const localeCompare = require('@isaacs/string-locale-compare')('en')
107
const pkgJson = require('@npmcli/package-json')
8+
const { defaults, definitions } = require('@npmcli/config/lib/definitions')
119
const log = require('../utils/log-shim.js')
1210

1311
// These are the configs that we can nerf-dart. Not all of them currently even
@@ -102,7 +100,7 @@ class Config extends BaseCommand {
102100
case 'get':
103101
case 'delete':
104102
case 'rm':
105-
return Object.keys(configDefs.definitions)
103+
return Object.keys(definitions)
106104
case 'edit':
107105
case 'list':
108106
case 'ls':
@@ -219,7 +217,7 @@ class Config extends BaseCommand {
219217
const data = (
220218
await readFile(file, 'utf8').catch(() => '')
221219
).replace(/\r\n/g, '\n')
222-
const entries = Object.entries(configDefs.defaults)
220+
const entries = Object.entries(defaults)
223221
const defData = entries.reduce((str, [key, val]) => {
224222
const obj = { [key]: val }
225223
const i = ini.stringify(obj)

lib/commands/doctor.js

+4-6
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,7 @@ const semver = require('semver')
99
const { promisify } = require('util')
1010
const log = require('../utils/log-shim.js')
1111
const ping = require('../utils/ping.js')
12-
const {
13-
registry: { default: defaultRegistry },
14-
} = require('../utils/config/definitions.js')
12+
const { defaults } = require('@npmcli/config/lib/definitions')
1513
const lstat = promisify(fs.lstat)
1614
const readdir = promisify(fs.readdir)
1715
const access = promisify(fs.access)
@@ -364,10 +362,10 @@ class Doctor extends BaseCommand {
364362
}
365363

366364
async checkNpmRegistry () {
367-
if (this.npm.flatOptions.registry !== defaultRegistry) {
368-
throw `Try \`npm config set registry=${defaultRegistry}\``
365+
if (this.npm.flatOptions.registry !== defaults.registry) {
366+
throw `Try \`npm config set registry=${defaults.registry}\``
369367
} else {
370-
return `using default registry (${defaultRegistry})`
368+
return `using default registry (${defaults.registry})`
371369
}
372370
}
373371

lib/commands/publish.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ const { getContents, logTar } = require('../utils/tar.js')
1515
// keys that npm supports in .npmrc files and elsewhere. We *may* want to
1616
// revisit this at some point, and have a minimal set that's a SemVer-major
1717
// change that ought to get a RFC written on it.
18-
const { flatten } = require('../utils/config/index.js')
18+
const { flatten } = require('@npmcli/config/lib/definitions')
1919
const pkgJson = require('@npmcli/package-json')
2020

2121
const BaseCommand = require('../base-command.js')

lib/commands/unpublish.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ const npa = require('npm-package-arg')
44
const npmFetch = require('npm-registry-fetch')
55
const pkgJson = require('@npmcli/package-json')
66

7-
const { flatten } = require('../utils/config/index.js')
7+
const { flatten } = require('@npmcli/config/lib/definitions')
88
const getIdentity = require('../utils/get-identity.js')
99
const log = require('../utils/log-shim')
1010
const otplease = require('../utils/otplease.js')

lib/npm.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ const fs = require('fs/promises')
66
// Patch the global fs module here at the app level
77
require('graceful-fs').gracefulify(require('fs'))
88

9-
const { definitions, flatten, shorthands } = require('./utils/config/index.js')
9+
const { definitions, flatten, shorthands } = require('@npmcli/config/lib/definitions')
1010
const usage = require('./utils/npm-usage.js')
1111
const LogFile = require('./utils/log-file.js')
1212
const Timers = require('./utils/timers.js')

package-lock.json

+3
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,7 @@
182182
"license": "ISC",
183183
"devDependencies": {
184184
"@isaacs/string-locale-compare": "^1.1.0",
185+
"@npmcli/config": "^6.1.7",
185186
"@npmcli/eslint-config": "^4.0.0",
186187
"@npmcli/template-oss": "4.14.1",
187188
"front-matter": "^4.0.2",
@@ -15668,6 +15669,7 @@
1566815669
"license": "ISC",
1566915670
"dependencies": {
1567015671
"@npmcli/map-workspaces": "^3.0.2",
15672+
"ci-info": "^3.8.0",
1567115673
"ini": "^4.1.0",
1567215674
"nopt": "^7.0.0",
1567315675
"proc-log": "^3.0.0",
@@ -15677,6 +15679,7 @@
1567715679
},
1567815680
"devDependencies": {
1567915681
"@npmcli/eslint-config": "^4.0.0",
15682+
"@npmcli/mock-globals": "^1.0.0",
1568015683
"@npmcli/template-oss": "4.14.1",
1568115684
"tap": "^16.3.4"
1568215685
},

scripts/fish-completion.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ const fs = require('fs/promises')
33
const { resolve } = require('path')
44

55
const { commands, aliases } = require('../lib/utils/cmd-list.js')
6-
const { definitions } = require('../lib/utils/config/index.js')
6+
const { definitions } = require('@npmcli/config/lib/definitions')
77

88
async function main () {
99
const file = resolve(__dirname, '..', 'lib', 'utils', 'completion.fish')

tap-snapshots/test/lib/commands/config.js.test.cjs

+15
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ exports[`test/lib/commands/config.js TAP config list --json > output matches sna
161161
"workspaces": null,
162162
"workspaces-update": true,
163163
"yes": null,
164+
"npm-version": "{NPM-VERSION}",
164165
"metrics-registry": "https://registry.npmjs.org/"
165166
}
166167
`
@@ -256,6 +257,7 @@ message = "%s"
256257
metrics-registry = "https://registry.npmjs.org/"
257258
node-options = null
258259
noproxy = [""]
260+
npm-version = "{NPM-VERSION}"
259261
offline = false
260262
omit = []
261263
omit-lockfile-registry-resolved = false
@@ -341,6 +343,18 @@ userconfig = "{HOME}/.npmrc"
341343
`
342344

343345
exports[`test/lib/commands/config.js TAP config list > output matches snapshot 1`] = `
346+
; "global" config from {GLOBALPREFIX}/npmrc
347+
348+
globalloaded = "yes"
349+
350+
; "user" config from {HOME}/.npmrc
351+
352+
userloaded = "yes"
353+
354+
; "project" config from {LOCALPREFIX}/.npmrc
355+
356+
projectloaded = "yes"
357+
344358
; "cli" config from command line options
345359
346360
cache = "{NPMDIR}/test/lib/commands/tap-testdir-config-config-list-sandbox/cache"
@@ -383,6 +397,7 @@ global-prefix = "{LOCALPREFIX}"
383397
globalconfig = "{GLOBALPREFIX}/npmrc"
384398
init-module = "{HOME}/.npm-init.js"
385399
local-prefix = "{LOCALPREFIX}"
400+
npm-version = "{NPM-VERSION}"
386401
; prefix = "{LOCALPREFIX}" ; overridden by cli
387402
user-agent = "npm/{NPM-VERSION} node/{NODE-VERSION} {PLATFORM} {ARCH} workspaces/false"
388403
; userconfig = "{HOME}/.npmrc" ; overridden by cli

tap-snapshots/test/lib/docs.js.test.cjs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2390,7 +2390,7 @@ Object {
23902390
"noProxy": "",
23912391
"npmBin": "{CWD}/{TESTDIR}/docs.js",
23922392
"npmCommand": "version",
2393-
"npmVersion": "1.1.1",
2393+
"npmVersion": "3.3.3",
23942394
"npxCache": "{CWD}/cache/_npx",
23952395
"offline": false,
23962396
"omit": Array [],

test/fixtures/mock-npm.js

+36-20
Original file line numberDiff line numberDiff line change
@@ -47,19 +47,28 @@ const setGlobalNodeModules = (globalDir) => {
4747
return globalDir
4848
}
4949

50-
const getMockNpm = async (t, { mocks, init, load, npm: npmOpts }) => {
51-
const mock = {
52-
...mockLogs(mocks),
53-
outputs: [],
54-
outputErrors: [],
55-
joinedOutput: () => mock.outputs.map(o => o.join(' ')).join('\n'),
56-
}
57-
58-
const Npm = tmock(t, '{LIB}/npm.js', {
50+
const buildMocks = (t, mocks) => {
51+
const allMocks = {
5952
'{LIB}/utils/update-notifier.js': async () => {},
6053
...mocks,
61-
...mock.logMocks,
62-
})
54+
}
55+
// The definitions must be mocked since they are a singleton that reads from
56+
// process and environs to build defaults in order to break the requiure
57+
// cache. We also need to mock them with any mocks that were passed in for the
58+
// test in case those mocks are for things like ci-info which is used there.
59+
const definitions = '@npmcli/config/lib/definitions'
60+
allMocks[definitions] = tmock(t, definitions, allMocks)
61+
62+
return allMocks
63+
}
64+
65+
const getMockNpm = async (t, { mocks, init, load, npm: npmOpts }) => {
66+
const { logMocks, logs, display } = mockLogs(mocks)
67+
const allMocks = buildMocks(t, { ...mocks, ...logMocks })
68+
const Npm = tmock(t, '{LIB}/npm.js', allMocks)
69+
70+
const outputs = []
71+
const outputErrors = []
6372

6473
class MockNpm extends Npm {
6574
async exec (...args) {
@@ -86,23 +95,29 @@ const getMockNpm = async (t, { mocks, init, load, npm: npmOpts }) => {
8695
}
8796

8897
output (...args) {
89-
mock.outputs.push(args)
98+
outputs.push(args)
9099
}
91100

92101
outputError (...args) {
93-
mock.outputErrors.push(args)
102+
outputErrors.push(args)
94103
}
95104
}
96105

97-
mock.Npm = MockNpm
98-
if (init) {
99-
mock.npm = new MockNpm(npmOpts)
100-
if (load) {
101-
await mock.npm.load()
102-
}
106+
const npm = init ? new MockNpm(npmOpts) : null
107+
if (npm && load) {
108+
await npm.load()
103109
}
104110

105-
return mock
111+
return {
112+
Npm: MockNpm,
113+
npm,
114+
outputs,
115+
outputErrors,
116+
joinedOutput: () => outputs.map(o => o.join(' ')).join('\n'),
117+
logMocks,
118+
logs,
119+
display,
120+
}
106121
}
107122

108123
const mockNpms = new Map()
@@ -127,6 +142,7 @@ const setupMockNpm = async (t, {
127142
globals = {},
128143
npm: npmOpts = {},
129144
argv: rawArgv = [],
145+
...r
130146
} = {}) => {
131147
// easy to accidentally forget to pass in tap
132148
if (!(t instanceof tap.Test)) {

test/fixtures/sandbox.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ class Sandbox extends EventEmitter {
8181
get: this[_get].bind(this),
8282
set: this[_set].bind(this),
8383
})
84-
this[_proxy].env = {}
84+
this[_proxy].env = { ...options.env }
8585
this[_proxy].argv = []
8686

8787
test.cleanSnapshot = this.cleanSnapshot.bind(this)
@@ -262,7 +262,9 @@ class Sandbox extends EventEmitter {
262262

263263
const mockedLogs = mockLogs(this[_mocks])
264264
this[_logs] = mockedLogs.logs
265+
const definitions = this[_test].mock('@npmcli/config/lib/definitions')
265266
const Npm = this[_test].mock('../../lib/npm.js', {
267+
'@npmcli/config/lib/definitions': definitions,
266268
'../../lib/utils/update-notifier.js': async () => {},
267269
...this[_mocks],
268270
...mockedLogs.logMocks,
@@ -313,7 +315,9 @@ class Sandbox extends EventEmitter {
313315

314316
const mockedLogs = mockLogs(this[_mocks])
315317
this[_logs] = mockedLogs.logs
318+
const definitions = this[_test].mock('@npmcli/config/lib/definitions')
316319
const Npm = this[_test].mock('../../lib/npm.js', {
320+
'@npmcli/config/lib/definitions': definitions,
317321
'../../lib/utils/update-notifier.js': async () => {},
318322
...this[_mocks],
319323
...mockedLogs.logMocks,

test/lib/cli-entry.js

-5
Original file line numberDiff line numberDiff line change
@@ -135,11 +135,6 @@ t.test('load error calls error handler', async t => {
135135
const err = new Error('test load error')
136136
const { cli, exitHandlerCalled } = await cliMock(t, {
137137
mocks: {
138-
'{LIB}/utils/config/index.js': {
139-
definitions: null,
140-
flatten: null,
141-
shorthands: null,
142-
},
143138
'@npmcli/config': class BadConfig {
144139
async load () {
145140
throw err

0 commit comments

Comments
 (0)