Skip to content
This repository was archived by the owner on Apr 7, 2021. It is now read-only.

Commit 46f10fe

Browse files
committed
fix(args): accept argv as arg and fix minor bugs
1 parent 6af1435 commit 46f10fe

File tree

1 file changed

+23
-17
lines changed

1 file changed

+23
-17
lines changed

parse-args.js

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ const yargs = require('yargs')
77
const usage = `$0 [--package|-p <package>] [--cache <path>] [--userconfig <path>] [-c <string>] [--shell <string>] [--shell-auto-fallback [<shell>]] [--ignore-existing] [--version|-v] [--] <command>[@version] [command-arg]...`
88

99
module.exports = parseArgs
10-
function parseArgs () {
10+
function parseArgs (argv) {
11+
argv = argv || process.argv
1112
const parser = yargs
1213
.usage(`Execute a binary from an npm package\n${usage}`)
1314
.option('package', {
@@ -49,12 +50,11 @@ function parseArgs () {
4950

5051
const opts = parser.getOptions()
5152
const bools = new Set(opts.boolean)
52-
const raw = process.argv
5353

5454
let cmdIndex
5555
let hasDashDash
56-
for (let i = 2; i < raw.length; i++) {
57-
const opt = raw[i]
56+
for (let i = 2; i < argv.length; i++) {
57+
const opt = argv[i]
5858
if (opt === '--') {
5959
hasDashDash = true
6060
break
@@ -68,19 +68,21 @@ function parseArgs () {
6868
}
6969
}
7070
if (cmdIndex) {
71-
const parsed = parser.parse(process.argv.slice(0, cmdIndex))
72-
const parsedCmd = npa(process.argv[cmdIndex])
71+
const parsed = parser.parse(argv.slice(0, cmdIndex))
72+
const parsedCmd = npa(argv[cmdIndex])
7373
parsed.command = parsed.package
74-
? process.argv[cmdIndex]
74+
? argv[cmdIndex]
7575
: guessCmdName(parsedCmd)
76-
parsed.cmdOpts = process.argv.slice(cmdIndex + 1)
76+
parsed.cmdOpts = argv.slice(cmdIndex + 1)
7777
parsed.packageRequested = !!parsed.package
78-
parsed.cmdHadVersion = parsedCmd.name !== parsedCmd.raw
79-
const pkg = parsed.package || process.argv[cmdIndex]
78+
parsed.cmdHadVersion = parsed.package
79+
? false
80+
: parsedCmd.name !== parsedCmd.raw
81+
const pkg = parsed.package || argv[cmdIndex]
8082
parsed.p = parsed.package = npa(pkg).toString()
8183
return parsed
8284
} else {
83-
const parsed = parser.argv
85+
const parsed = parser.parse(argv)
8486
if (parsed.call) {
8587
const splitCmd = parsed.call.trim().split(/\s+/)
8688
const parsedCmd = npa(splitCmd[0])
@@ -89,18 +91,24 @@ function parseArgs () {
8991
: guessCmdName(parsedCmd)
9092
parsed.cmdOpts = splitCmd.slice(1)
9193
parsed.packageRequested = !!parsed.package
92-
parsed.cmdHadVersion = parsedCmd.name !== parsedCmd.raw
94+
parsed.cmdHadVersion = parsed.package
95+
? false
96+
: parsedCmd.name !== parsedCmd.raw
9397
const pkg = parsed.package || splitCmd[0]
9498
parsed.p = parsed.package = npa(pkg).toString()
9599
} else if (hasDashDash) {
96-
const splitCmd = parsed._
100+
const splitCmd = parsed._.slice(2)
97101
const parsedCmd = npa(splitCmd[0])
98102
parsed.command = parsed.package
99103
? splitCmd[0]
100104
: guessCmdName(parsedCmd)
101105
parsed.cmdOpts = splitCmd.slice(1)
102106
parsed.packageRequested = !!parsed.package
103-
parsed.cmdHadVersion = parsedCmd.name !== parsedCmd.raw
107+
parsed.cmdHadVersion = parsed.package
108+
? false
109+
: parsedCmd.name !== parsedCmd.raw
110+
const pkg = parsed.package || splitCmd[0]
111+
parsed.p = parsed.package = npa(pkg).toString()
104112
}
105113
return parsed
106114
}
@@ -117,9 +125,7 @@ function guessCmdName (spec) {
117125
return spec.hosted.project
118126
} else if (spec.type === 'git') {
119127
const match = spec.fetchSpec.match(/([a-z0-9-]+)(?:\.git)?$/i)
120-
if (match && match[1]) {
121-
return match[1]
122-
}
128+
return match[1]
123129
} else if (spec.type === 'directory') {
124130
return path.basename(spec.fetchSpec)
125131
} else if (spec.type === 'file' || spec.type === 'remote') {

0 commit comments

Comments
 (0)