Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
111e284
[email protected]
ruyadorno Mar 18, 2021
33c8536
[email protected]
ruyadorno Mar 18, 2021
af7eaac
[email protected]
ruyadorno Mar 18, 2021
9166230
@npmcli/[email protected]
ruyadorno Mar 18, 2021
f06c12e
[email protected]
ruyadorno Mar 18, 2021
966057c
[email protected]
ruyadorno Mar 18, 2021
b395763
[email protected]
ruyadorno Mar 18, 2021
46e14bd
chore(config): remove flatOptions references
wraithgar Mar 9, 2021
8cce428
fix(publish): handle case where multiple config list is present
kenrick95 Mar 15, 2021
6598bfe
New consolidated config definitions
isaacs Mar 15, 2021
68db124
Auto-generate 'npm help 7 config' from actual definitions
isaacs Mar 15, 2021
f52c51d
@npmcli/[email protected]
isaacs Mar 15, 2021
7c89e74
update lib/*.js to use new config structures
isaacs Mar 15, 2021
aaafab8
Remove old config definitions and flattening logic
isaacs Mar 16, 2021
a8d0751
[email protected]
isaacs Mar 18, 2021
41facf6
feat(help): refactor npm help/help-search
wraithgar Mar 11, 2021
ad65bd9
docs(configuring-npm): Fix broken link
Mar 13, 2021
0a331ac
bump version in v7 bug template
jansepke Mar 15, 2021
78cb830
docs: add asdf-nodejs as a viable version manager
augustobmoura Mar 15, 2021
7e99515
chore: fix rebuild win tests
ruyadorno Mar 18, 2021
fc8a1ff
fix(tests): go back to mockNpm in test
wraithgar Mar 18, 2021
b419bfb
Update test-coverage command
chowkapow Mar 15, 2021
8a38afe
docs(package-json): document default main behavior
klausbayrhammer Mar 16, 2021
33c4189
feat: add run-script workspaces
ruyadorno Mar 7, 2021
d98edd1
restore npm.flatOptions.npmCommand
isaacs Mar 18, 2021
e94a458
fix(suggestions): clarify Unknown command output
wraithgar Mar 19, 2021
629aaf3
[email protected]
wraithgar Mar 22, 2021
b876442
fix(usage): tie usage to config
wraithgar Mar 19, 2021
e1b3b31
feat: add exec workspaces
ruyadorno Mar 7, 2021
93a061d
fix(usage): add action items to error output
wraithgar Mar 22, 2021
15ee1ae
fix: yes config
ruyadorno Mar 22, 2021
b7b4491
fix: which config
ruyadorno Mar 22, 2021
4fb6e2f
fix: npm birthday
ruyadorno Mar 22, 2021
1924eb4
[email protected]
wraithgar Mar 23, 2021
8e4621d
fix(run-script): remove log.disableProgress
ruyadorno Mar 23, 2021
f76e7c2
[email protected]
ruyadorno Mar 23, 2021
4928512
[email protected]
ruyadorno Mar 23, 2021
7b5606b
@npmcli/[email protected]
ruyadorno Mar 23, 2021
b043bf9
fix docs generation for yes config
ruyadorno Mar 23, 2021
7706557
docs: changelog for v7.7.0
ruyadorno Mar 23, 2021
0364be0
update AUTHORS
ruyadorno Mar 23, 2021
581b60b
7.7.0
ruyadorno Mar 23, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
fix(usage): tie usage to config
This starts us down the path of tying the params our commands accept to
their config items.  For now it is optional, and not every current
config item would cleanly render if we added them today.

The ones that are added here DO render nicely, and we can iterate from
here.  We can also at a later date do the same kind of appraoch with our
positional args.

PR-URL: #2908
Credit: @wraithgar
Close: #2908
Reviewed-by: @nlf, @isaacs
  • Loading branch information
wraithgar committed Mar 22, 2021
commit b876442241b9d366a0541714bbee1ae50d6746fd
30 changes: 30 additions & 0 deletions docs/content/using-npm/config.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,8 @@ The following shorthands are parsed on the command-line:
* `-H`: `--usage`
* `--help`: `--usage`
* `-v`: `--version`
* `-w`: `--workspace`
* `--ws`: `--workspaces`
* `-y`: `--yes`

<!-- AUTOGENERATED CONFIG SHORTHANDS END -->
Expand Down Expand Up @@ -1311,6 +1313,34 @@ The program to use to view help content.

Set to `"browser"` to view html help content in the default web browser.

#### `which`

* Default: null
* Type: null or Number

If there are multiple funding sources, which 1-indexed source URL to open.

#### `workspace`

* Default:
* Type: String (can be set multiple times)

Enable running a command in the context of the configured workspaces of the
current project while filtering by running only the workspaces defined by
this configuration option.

Valid values for the `workspace` config are either: - Workspace names - Path
to a workspace directory - Path to a parent workspace directory (will result
to selecting all of the nested workspaces)

#### `workspaces`

* Default: false
* Type: Boolean

Enable running a command in the context of **all** the configured
workspaces.

#### `yes`

* Default: false
Expand Down
8 changes: 6 additions & 2 deletions lib/adduser.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,12 @@ class AddUser extends BaseCommand {
return 'adduser'
}

static get usage () {
return ['[--registry=url] [--scope=@orgname] [--always-auth]']
static get params () {
return [
'registry',
'scope',
'always-auth',
]
}

exec (args, cb) {
Expand Down
14 changes: 11 additions & 3 deletions lib/audit.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,21 @@ class Audit extends BaseCommand {
}

/* istanbul ignore next - see test/lib/load-all-commands.js */
static get usage () {
static get params () {
return [
'[--json] [--production]',
'fix [--force|--package-lock-only|--dry-run|--production|--only=(dev|prod)]',
'dry-run',
'force',
'json',
'package-lock-only',
'production',
]
}

/* istanbul ignore next - see test/lib/load-all-commands.js */
static get usage () {
return ['[fix]']
}

async completion (opts) {
const argv = opts.conf.argv.remain

Expand Down
4 changes: 4 additions & 0 deletions lib/base-command.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
// Base class for npm.commands[cmd]
const usageUtil = require('./utils/usage.js')
const ConfigDefinitions = require('./utils/config/definitions.js')

class BaseCommand {
constructor (npm) {
Expand All @@ -25,6 +26,9 @@ class BaseCommand {
else
usage = `${usage}${this.constructor.usage.map(u => `npm ${this.constructor.name} ${u}`).join('\n')}`

if (this.constructor.params)
usage = `${usage}\n\nOptions:\n[${this.constructor.params.map(p => ConfigDefinitions[p].usage).join('] [')}]`

// Mostly this just appends aliases, this could be more clear
usage = usageUtil(this.constructor.name, usage)
usage = `${usage}\n\nRun "npm help ${this.constructor.name}" for more info`
Expand Down
4 changes: 2 additions & 2 deletions lib/bin.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ class Bin extends BaseCommand {
return 'bin'
}

static get usage () {
return ['[-g]']
static get params () {
return ['global']
}

exec (args, cb) {
Expand Down
12 changes: 11 additions & 1 deletion lib/fund.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,19 @@ class Fund extends BaseCommand {
return 'fund'
}

/* istanbul ignore next - see test/lib/load-all-commands.js */
static get params () {
return [
'json',
'browser',
'unicode',
'which',
]
}

/* istanbul ignore next - see test/lib/load-all-commands.js */
static get usage () {
return ['[--json] [--browser] [--unicode] [[<@scope>/]<pkg> [--which=<fundingSourceNumber>]']
return ['[[<@scope>/]<pkg>]']
}

/* istanbul ignore next - see test/lib/load-all-commands.js */
Expand Down
10 changes: 9 additions & 1 deletion lib/install.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,14 @@ class Install extends BaseCommand {
return 'install'
}

/* istanbul ignore next - see test/lib/load-all-commands.js */
static get params () {
return [
'save',
'save-exact',
]
}

/* istanbul ignore next - see test/lib/load-all-commands.js */
static get usage () {
return [
Expand All @@ -33,7 +41,7 @@ class Install extends BaseCommand {
'<tarball file>',
'<tarball url>',
'<git:// url>',
'<github username>/<github project> [--save-prod|--save-dev|--save-optional|--save-peer] [--save-exact] [--no-save]',
'<github username>/<github project>',
]
}

Expand Down
7 changes: 5 additions & 2 deletions lib/logout.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,11 @@ class Logout extends BaseCommand {
}

/* istanbul ignore next - see test/lib/load-all-commands.js */
static get usage () {
return ['[--registry=<url>] [--scope=<@scope>]']
static get params () {
return [
'registry',
'scope',
]
}

exec (args, cb) {
Expand Down
7 changes: 6 additions & 1 deletion lib/pack.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,14 @@ class Pack extends BaseCommand {
return 'pack'
}

/* istanbul ignore next - see test/lib/load-all-commands.js */
static get params () {
return ['dry-run']
}

/* istanbul ignore next - see test/lib/load-all-commands.js */
static get usage () {
return ['[[<@scope>/]<pkg>...] [--dry-run]']
return ['[[<@scope>/]<pkg>...]']
}

exec (args, cb) {
Expand Down
5 changes: 5 additions & 0 deletions lib/ping.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,11 @@ class Ping extends BaseCommand {
return 'Ping npm registry'
}

/* istanbul ignore next - see test/lib/load-all-commands.js */
static get params () {
return ['registry']
}

/* istanbul ignore next - see test/lib/load-all-commands.js */
static get name () {
return 'ping'
Expand Down
7 changes: 6 additions & 1 deletion lib/prune.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,14 @@ class Prune extends BaseCommand {
return 'prune'
}

/* istanbul ignore next - see test/lib/load-all-commands.js */
static get params () {
return ['production']
}

/* istanbul ignore next - see test/lib/load-all-commands.js */
static get usage () {
return ['[[<@scope>/]<pkg>...] [--production]']
return ['[[<@scope>/]<pkg>...]']
}

exec (args, cb) {
Expand Down
7 changes: 6 additions & 1 deletion lib/publish.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,15 @@ class Publish extends BaseCommand {
return 'publish'
}

/* istanbul ignore next - see test/lib/load-all-commands.js */
static get params () {
return ['tag', 'access', 'dry-run']
}

/* istanbul ignore next - see test/lib/load-all-commands.js */
static get usage () {
return [
'[<folder>] [--tag <tag>] [--access <public|restricted>] [--dry-run]',
'[<folder>]',
]
}

Expand Down
4 changes: 2 additions & 2 deletions lib/root.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ class Root extends BaseCommand {
}

/* istanbul ignore next - see test/lib/load-all-commands.js */
static get usage () {
return ['[-g]']
static get params () {
return ['global']
}

exec (args, cb) {
Expand Down
12 changes: 11 additions & 1 deletion lib/search.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,19 @@ class Search extends BaseCommand {
return 'search'
}

/* istanbul ignore next - see test/lib/load-all-commands.js */
static get params () {
return [
'long',
'json',
'parseable',
'description',
]
}

/* istanbul ignore next - see test/lib/load-all-commands.js */
static get usage () {
return ['[-l|--long] [--json] [--parseable] [--no-description] [search terms ...]']
return ['[search terms ...]']
}

exec (args, cb) {
Expand Down
7 changes: 6 additions & 1 deletion lib/uninstall.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,14 @@ class Uninstall extends BaseCommand {
return 'uninstall'
}

/* istanbul ignore next - see test/lib/load-all-commands.js */
static get params () {
return ['save']
}

/* istanbul ignore next - see test/lib/load-all-commands.js */
static get usage () {
return ['[<@scope>/]<pkg>[@<version>]... [-S|--save|--no-save]']
return ['[<@scope>/]<pkg>...']
}

/* istanbul ignore next - see test/lib/load-all-commands.js */
Expand Down
7 changes: 6 additions & 1 deletion lib/update.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,14 @@ class Update extends BaseCommand {
return 'update'
}

/* istanbul ignore next - see test/lib/load-all-commands.js */
static get params () {
return ['global']
}

/* istanbul ignore next - see test/lib/load-all-commands.js */
static get usage () {
return ['[-g] [<pkg>...]']
return ['[<pkg>...]']
}

/* istanbul ignore next - see test/lib/load-all-commands.js */
Expand Down
36 changes: 32 additions & 4 deletions lib/utils/config/definition.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,16 @@ const required = [

const allowed = [
'default',
'type',
'defaultDescription',
'deprecated',
'description',
'flatten',
'hint',
'key',
'short',
'type',
'typeDescription',
'defaultDescription',
'deprecated',
'key',
'usage',
]

const {
Expand All @@ -43,6 +45,10 @@ class Definition {
this.defaultDescription = describeValue(this.default)
if (!this.typeDescription)
this.typeDescription = describeType(this.type)
if (!this.hint)
this.hint = `<${this.key}>`
if (!this.usage)
this.usage = describeUsage(this)
}

validate () {
Expand Down Expand Up @@ -73,6 +79,28 @@ ${description}
}
}

// Usage for a single param, abstracted because we have arrays of types in
// config definition
const paramUsage = (type, def) => {
let key = `--${def.key}`
if (def.short && typeof def.short === 'string')
key = `-${def.short}|${key}`
if (type === Boolean)
return `${key}`
else
return `${key} ${def.hint}`
}

const describeUsage = (def) => {
if (Array.isArray(def.type)) {
if (!def.type.some(d => d !== null && typeof d !== 'string'))
return `--${def.key} <${def.type.filter(d => d).join('|')}>`
else
return def.type.filter(d => d).map((t) => paramUsage(t, def)).join('|')
}
return paramUsage(def.type, def)
}

const describeType = type => {
if (Array.isArray(type)) {
const descriptions = type
Expand Down
Loading