Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# node-dev

## v6.2.0 / 2020-10-15

- Handle multiple values of arguments in command line (Fixes #238)

## v6.1.0 / 2020-10-15

- Manually wrangle node args so that we can handle `--` args coming before `-` args (Fixes #236)
Expand Down
27 changes: 23 additions & 4 deletions lib/cli.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,17 @@ function getFirstNonOptionArgIndex(args) {
return args.length - 1;
}

function unique(k) {
const seen = [];
return o => {
if (!seen.includes(o[k])) {
seen.push(o[k]);
return true;
}
return false;
};
}

module.exports = argv => {
const unknownArgs = [];

Expand All @@ -42,11 +53,19 @@ module.exports = argv => {
}
});

const nodeArgs = unknownArgs.reduce((out, { arg, key }) => {
out.push(arg);
if (typeof opts[key] !== 'boolean' && !arg.includes('=')) {
out.push(opts[key]);
const nodeArgs = unknownArgs.filter(unique('key')).reduce((out, { arg, key }) => {
const value = opts[key];

if (typeof value !== 'boolean' && !arg.includes('=')) {
if (Array.isArray(value)) {
value.forEach(v => out.push(arg, v));
} else {
out.push(arg, value);
}
} else {
out.push(arg);
}

return out;
}, []);

Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "node-dev",
"version": "6.1.0",
"version": "6.2.0",
"description": "Restarts your app when files are modified",
"keywords": [
"restart",
Expand Down
21 changes: 13 additions & 8 deletions test/cli.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,29 +54,34 @@ tap.test('cli overrides .node-dev.json from false to true', t => {
tap.test('-r ts-node/register --inspect test/fixture/server.js', t => {
const argv = 'node bin/node-dev -r ts-node/register --inspect test/fixture/server.js'.split(' ');
const { nodeArgs } = cli(argv);
t.ok(nodeArgs.includes('--inspect'));
t.ok(nodeArgs.includes('-r'));
t.deepEqual(nodeArgs, ['-r', 'ts-node/register', '--inspect']);
t.done();
});

tap.test('--inspect -r ts-node/register test/fixture/server.js', t => {
const argv = 'node bin/node-dev --inspect -r ts-node/register test/fixture/server.js'.split(' ');
const { nodeArgs } = cli(argv);
t.ok(nodeArgs.includes('--inspect'));
t.ok(nodeArgs.includes('-r'));
t.deepEqual(nodeArgs, ['--inspect', '-r', 'ts-node/register']);
t.done();
});

tap.test('--expose_gc gc.js foo', t => {
const argv = 'node bin/node-dev --expose_gc test/fixture/gc.js foo'.split(' ');
const argv = 'node bin/node-dev --expose_gc test/fixture/gc.js test/fixture/foo'.split(' ');
const { nodeArgs } = cli(argv);
t.ok(nodeArgs.includes('--expose_gc'));
t.deepEqual(nodeArgs, ['--expose_gc']);
t.done();
});

tap.test('--require=coffeescript/register server.coffee', t => {
tap.test('--require=coffeescript/register test/fixture/server.coffee', t => {
const argv = 'node bin/node-dev --require=coffeescript/register test/fixture/server.coffee'.split(' ');
const { nodeArgs } = cli(argv);
t.ok(nodeArgs.includes('--require=coffeescript/register'));
t.deepEqual(nodeArgs, ['--require=coffeescript/register']);
t.done();
});

tap.test('-r coffeescript/register -r ts-node/register test/fixture/server.coffee', t => {
const argv = 'node bin/node-dev -r coffeescript/register -r ts-node/register test/fixture/server.coffee'.split(' ');
const { nodeArgs } = cli(argv);
t.deepEqual(nodeArgs, ['-r', 'coffeescript/register', '-r', 'ts-node/register']);
t.done();
});