Skip to content

Commit d1f7bf6

Browse files
committed
v6.2.0 / 2020-10-15
- Handle multiple values of arguments in command line (Fixes #238)
1 parent 6b90170 commit d1f7bf6

File tree

4 files changed

+41
-13
lines changed

4 files changed

+41
-13
lines changed

CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# node-dev
22

3+
## v6.2.0 / 2020-10-15
4+
5+
- Handle multiple values of arguments in command line (Fixes #238)
6+
37
## v6.1.0 / 2020-10-15
48

59
- Manually wrangle node args so that we can handle `--` args coming before `-` args (Fixes #236)

lib/cli.js

+23-4
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,17 @@ function getFirstNonOptionArgIndex(args) {
2020
return args.length - 1;
2121
}
2222

23+
function unique(k) {
24+
const seen = [];
25+
return o => {
26+
if (!seen.includes(o[k])) {
27+
seen.push(o[k]);
28+
return true;
29+
}
30+
return false;
31+
};
32+
}
33+
2334
module.exports = argv => {
2435
const unknownArgs = [];
2536

@@ -42,11 +53,19 @@ module.exports = argv => {
4253
}
4354
});
4455

45-
const nodeArgs = unknownArgs.reduce((out, { arg, key }) => {
46-
out.push(arg);
47-
if (typeof opts[key] !== 'boolean' && !arg.includes('=')) {
48-
out.push(opts[key]);
56+
const nodeArgs = unknownArgs.filter(unique('key')).reduce((out, { arg, key }) => {
57+
const value = opts[key];
58+
59+
if (typeof value !== 'boolean' && !arg.includes('=')) {
60+
if (Array.isArray(value)) {
61+
value.forEach(v => out.push(arg, v));
62+
} else {
63+
out.push(arg, value);
64+
}
65+
} else {
66+
out.push(arg);
4967
}
68+
5069
return out;
5170
}, []);
5271

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "node-dev",
3-
"version": "6.1.0",
3+
"version": "6.2.0",
44
"description": "Restarts your app when files are modified",
55
"keywords": [
66
"restart",

test/cli.js

+13-8
Original file line numberDiff line numberDiff line change
@@ -54,29 +54,34 @@ tap.test('cli overrides .node-dev.json from false to true', t => {
5454
tap.test('-r ts-node/register --inspect test/fixture/server.js', t => {
5555
const argv = 'node bin/node-dev -r ts-node/register --inspect test/fixture/server.js'.split(' ');
5656
const { nodeArgs } = cli(argv);
57-
t.ok(nodeArgs.includes('--inspect'));
58-
t.ok(nodeArgs.includes('-r'));
57+
t.deepEqual(nodeArgs, ['-r', 'ts-node/register', '--inspect']);
5958
t.done();
6059
});
6160

6261
tap.test('--inspect -r ts-node/register test/fixture/server.js', t => {
6362
const argv = 'node bin/node-dev --inspect -r ts-node/register test/fixture/server.js'.split(' ');
6463
const { nodeArgs } = cli(argv);
65-
t.ok(nodeArgs.includes('--inspect'));
66-
t.ok(nodeArgs.includes('-r'));
64+
t.deepEqual(nodeArgs, ['--inspect', '-r', 'ts-node/register']);
6765
t.done();
6866
});
6967

7068
tap.test('--expose_gc gc.js foo', t => {
71-
const argv = 'node bin/node-dev --expose_gc test/fixture/gc.js foo'.split(' ');
69+
const argv = 'node bin/node-dev --expose_gc test/fixture/gc.js test/fixture/foo'.split(' ');
7270
const { nodeArgs } = cli(argv);
73-
t.ok(nodeArgs.includes('--expose_gc'));
71+
t.deepEqual(nodeArgs, ['--expose_gc']);
7472
t.done();
7573
});
7674

77-
tap.test('--require=coffeescript/register server.coffee', t => {
75+
tap.test('--require=coffeescript/register test/fixture/server.coffee', t => {
7876
const argv = 'node bin/node-dev --require=coffeescript/register test/fixture/server.coffee'.split(' ');
7977
const { nodeArgs } = cli(argv);
80-
t.ok(nodeArgs.includes('--require=coffeescript/register'));
78+
t.deepEqual(nodeArgs, ['--require=coffeescript/register']);
79+
t.done();
80+
});
81+
82+
tap.test('-r coffeescript/register -r ts-node/register test/fixture/server.coffee', t => {
83+
const argv = 'node bin/node-dev -r coffeescript/register -r ts-node/register test/fixture/server.coffee'.split(' ');
84+
const { nodeArgs } = cli(argv);
85+
t.deepEqual(nodeArgs, ['-r', 'coffeescript/register', '-r', 'ts-node/register']);
8186
t.done();
8287
});

0 commit comments

Comments
 (0)