node/deps/npm/lib/utils/config.js
Ruy Adorno d3906ae294
deps: upgrade npm to 7.5.0
PR-URL: https://github.com/nodejs/node/pull/37117
Reviewed-By: Myles Borins <myles.borins@gmail.com>
Reviewed-By: Yongsheng Zhang <zyszys98@gmail.com>
Reviewed-By: Juan José Arboleda <soyjuanarbol@gmail.com>
2021-01-29 23:49:44 -05:00

395 lines
9.5 KiB
JavaScript

// defaults, types, and shorthands
const {
typeDefs: {
semver: { type: semver },
Umask: { type: Umask },
url: { type: url },
path: { type: path },
},
} = require('@npmcli/config')
const { version: npmVersion } = require('../../package.json')
const ciDetect = require('@npmcli/ci-detect')
const ciName = ciDetect()
const isWindows = require('./is-windows.js')
const editor = process.env.EDITOR ||
process.env.VISUAL ||
(isWindows ? 'notepad.exe' : 'vi')
const shell = isWindows ? process.env.ComSpec || 'cmd'
: process.env.SHELL || 'sh'
const { tmpdir, networkInterfaces } = require('os')
const getLocalAddresses = () => {
try {
return Object.values(networkInterfaces()).map(
int => int.map(({ address }) => address)
).reduce((set, addrs) => set.concat(addrs), [undefined])
} catch (e) {
return [undefined]
}
}
const unicode = /UTF-?8$/i.test(
process.env.LC_ALL || process.env.LC_CTYPE || process.env.LANG
)
// use LOCALAPPDATA on Windows, if set
// https://github.com/npm/cli/pull/899
const cacheRoot = (isWindows && process.env.LOCALAPPDATA) || '~'
const cacheExtra = isWindows ? 'npm-cache' : '.npm'
const cache = `${cacheRoot}/${cacheExtra}`
const defaults = {
access: null,
all: false,
'allow-same-version': false,
also: null,
'always-auth': false,
audit: true,
'audit-level': null,
_auth: null,
'auth-type': 'legacy',
before: null,
'bin-links': true,
browser: null,
ca: null,
cache,
'cache-lock-retries': 10,
'cache-lock-stale': 60000,
'cache-lock-wait': 10000,
'cache-max': Infinity,
'cache-min': 10,
cafile: null,
call: '',
cert: null,
'ci-name': ciName || null,
cidr: null,
color: process.env.NO_COLOR == null,
'commit-hooks': true,
depth: null,
description: true,
dev: false,
diff: [],
'diff-unified': null,
'diff-ignore-all-space': false,
'diff-name-only': false,
'diff-no-prefix': false,
'diff-src-prefix': '',
'diff-dst-prefix': '',
'diff-text': false,
'dry-run': false,
editor,
'engine-strict': false,
'fetch-retries': 2,
'fetch-retry-factor': 10,
'fetch-retry-maxtimeout': 60000,
'fetch-retry-mintimeout': 10000,
'fetch-timeout': 5 * 60 * 1000,
force: false,
'foreground-script': false,
'format-package-lock': true,
fund: true,
git: 'git',
'git-tag-version': true,
global: false,
'global-style': false,
// `globalconfig` has its default defined outside of this module
heading: 'npm',
'https-proxy': null,
'if-present': false,
'ignore-prepublish': false,
'ignore-scripts': false,
include: [],
'include-staged': false,
'init-author-email': '',
'init-author-name': '',
'init-author-url': '',
'init-license': 'ISC',
'init-module': '~/.npm-init.js',
'init-version': '1.0.0',
'init.author.email': '',
'init.author.name': '',
'init.author.url': '',
'init.license': 'ISC',
'init.module': '~/.npm-init.js',
'init.version': '1.0.0',
json: false,
key: null,
'legacy-bundling': false,
'legacy-peer-deps': false,
link: false,
'local-address': undefined,
loglevel: 'notice',
'logs-max': 10,
long: false,
maxsockets: 50,
message: '%s',
'node-options': null,
'node-version': process.version,
noproxy: null,
'npm-version': npmVersion,
offline: false,
omit: [],
only: null,
optional: true,
otp: null,
package: [],
'package-lock': true,
'package-lock-only': false,
parseable: false,
'prefer-offline': false,
'prefer-online': false,
// `prefix` has its default defined outside of this module
preid: '',
production: process.env.NODE_ENV === 'production',
progress: !ciName,
proxy: null,
'read-only': false,
'rebuild-bundle': true,
registry: 'https://registry.npmjs.org/',
rollback: true,
save: true,
'save-bundle': false,
'save-dev': false,
'save-exact': false,
'save-optional': false,
'save-prefix': '^',
'save-prod': false,
scope: '',
'script-shell': null,
'scripts-prepend-node-path': 'warn-only',
searchexclude: null,
searchlimit: 20,
searchopts: '',
searchstaleness: 15 * 60,
shell,
shrinkwrap: true,
'sign-git-commit': false,
'sign-git-tag': false,
'sso-poll-frequency': 500,
'sso-type': 'oauth',
'strict-peer-deps': false,
'strict-ssl': true,
tag: 'latest',
'tag-version-prefix': 'v',
timing: false,
tmp: tmpdir(),
umask: 0,
unicode,
'update-notifier': true,
usage: false,
'user-agent': 'npm/{npm-version} ' +
'node/{node-version} ' +
'{platform} ' +
'{arch} ' +
'{ci}',
userconfig: '~/.npmrc',
version: false,
versions: false,
viewer: isWindows ? 'browser' : 'man',
}
const types = {
access: [null, 'restricted', 'public'],
all: Boolean,
'allow-same-version': Boolean,
also: [null, 'dev', 'development'],
_auth: [null, String],
'always-auth': Boolean,
audit: Boolean,
'audit-level': ['low', 'moderate', 'high', 'critical', 'none', null],
'auth-type': ['legacy', 'sso', 'saml', 'oauth'],
before: [null, Date],
'bin-links': Boolean,
browser: [null, Boolean, String],
ca: [null, String, Array],
cache: path,
'cache-lock-retries': Number,
'cache-lock-stale': Number,
'cache-lock-wait': Number,
'cache-max': Number,
'cache-min': Number,
cafile: path,
call: String,
cert: [null, String],
'ci-name': [null, String],
cidr: [null, String, Array],
color: ['always', Boolean],
'commit-hooks': Boolean,
depth: [null, Number],
description: Boolean,
dev: Boolean,
diff: [String, Array],
'diff-unified': [null, Number],
'diff-ignore-all-space': Boolean,
'diff-name-only': Boolean,
'diff-no-prefix': Boolean,
'diff-src-prefix': String,
'diff-dst-prefix': String,
'diff-text': Boolean,
'dry-run': Boolean,
editor: String,
'engine-strict': Boolean,
'fetch-retries': Number,
'fetch-retry-factor': Number,
'fetch-retry-maxtimeout': Number,
'fetch-retry-mintimeout': Number,
'fetch-timeout': Number,
force: Boolean,
'foreground-script': Boolean,
'format-package-lock': Boolean,
fund: Boolean,
git: String,
'git-tag-version': Boolean,
global: Boolean,
'global-style': Boolean,
globalconfig: path,
heading: String,
'https-proxy': [null, url],
'if-present': Boolean,
'ignore-prepublish': Boolean,
'ignore-scripts': Boolean,
include: [Array, 'prod', 'dev', 'optional', 'peer'],
'include-staged': Boolean,
'init-author-email': String,
'init-author-name': String,
'init-author-url': ['', url],
'init-license': String,
'init-module': path,
'init-version': semver,
'init.author.email': String,
'init.author.name': String,
'init.author.url': ['', url],
'init.license': String,
'init.module': path,
'init.version': semver,
json: Boolean,
key: [null, String],
'legacy-bundling': Boolean,
'legacy-peer-deps': Boolean,
link: Boolean,
'local-address': getLocalAddresses(),
loglevel: [
'silent',
'error',
'warn',
'notice',
'http',
'timing',
'info',
'verbose',
'silly',
],
'logs-max': Number,
long: Boolean,
maxsockets: Number,
message: String,
'node-options': [null, String],
'node-version': [null, semver],
noproxy: [null, String, Array],
'npm-version': semver,
offline: Boolean,
omit: [Array, 'dev', 'optional', 'peer'],
only: [null, 'dev', 'development', 'prod', 'production'],
optional: Boolean,
otp: [null, String],
package: [String, Array],
'package-lock': Boolean,
'package-lock-only': Boolean,
parseable: Boolean,
'prefer-offline': Boolean,
'prefer-online': Boolean,
prefix: path,
preid: String,
production: Boolean,
progress: Boolean,
proxy: [null, false, url], // allow proxy to be disabled explicitly
'read-only': Boolean,
'rebuild-bundle': Boolean,
registry: [null, url],
rollback: Boolean,
save: Boolean,
'save-bundle': Boolean,
'save-dev': Boolean,
'save-exact': Boolean,
'save-optional': Boolean,
'save-prefix': String,
'save-prod': Boolean,
scope: String,
'script-shell': [null, String],
'scripts-prepend-node-path': [Boolean, 'auto', 'warn-only'],
searchexclude: [null, String],
searchlimit: Number,
searchopts: String,
searchstaleness: Number,
shell: String,
shrinkwrap: Boolean,
'sign-git-commit': Boolean,
'sign-git-tag': Boolean,
'sso-poll-frequency': Number,
'sso-type': [null, 'oauth', 'saml'],
'strict-peer-deps': Boolean,
'strict-ssl': Boolean,
tag: String,
'tag-version-prefix': String,
timing: Boolean,
tmp: path,
umask: Umask,
unicode: Boolean,
'update-notifier': Boolean,
usage: Boolean,
'user-agent': String,
userconfig: path,
version: Boolean,
versions: Boolean,
viewer: String,
}
const shorthands = {
'?': ['--usage'],
a: ['--all'],
B: ['--save-bundle'],
C: ['--prefix'],
c: ['--call'],
D: ['--save-dev'],
d: ['--loglevel', 'info'],
dd: ['--loglevel', 'verbose'],
ddd: ['--loglevel', 'silly'],
desc: ['--description'],
E: ['--save-exact'],
'enjoy-by': ['--before'],
f: ['--force'],
g: ['--global'],
H: ['--usage'],
h: ['--usage'],
help: ['--usage'],
l: ['--long'],
local: ['--no-global'],
m: ['--message'],
n: ['--no-yes'],
'no-desc': ['--no-description'],
'no-reg': ['--no-registry'],
noreg: ['--no-registry'],
O: ['--save-optional'],
P: ['--save-prod'],
p: ['--parseable'],
porcelain: ['--parseable'],
q: ['--loglevel', 'warn'],
quiet: ['--loglevel', 'warn'],
readonly: ['--read-only'],
reg: ['--registry'],
S: ['--save'],
s: ['--loglevel', 'silent'],
silent: ['--loglevel', 'silent'],
v: ['--version'],
verbose: ['--loglevel', 'verbose'],
y: ['--yes'],
}
module.exports = { defaults, types, shorthands }