Skip to content

Commit 6b90170

Browse files
committed
v6.1.0 / 2020-10-15
- Manually wrangle node args so that we can handle `--` args coming before `-` args (Fixes #236)
1 parent 8515c0e commit 6b90170

File tree

4 files changed

+57
-9
lines changed

4 files changed

+57
-9
lines changed

CHANGELOG.md

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

3+
## v6.1.0 / 2020-10-15
4+
5+
- Manually wrangle node args so that we can handle `--` args coming before `-` args (Fixes #236)
6+
37
## v6.0.0 / 2020-10-14
48

59
- Support ESModules in node v12.11.1+ using `get-source-loader.mjs` and `resolve-loader.mjs` for earlier versions (Fixes #212)

lib/cli.js

+22-8
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,22 @@ function resolvePath(unresolvedPath) {
99
return path.resolve(process.cwd(), unresolvedPath);
1010
}
1111

12+
const doubleDash = s => /^--/.test(s);
13+
const dash = s => /^-[^-]*$/.test(s);
14+
1215
function getFirstNonOptionArgIndex(args) {
1316
for (let i = 2; i < args.length; i += 1) {
14-
if (args[i][0] != '-') return i;
17+
if (!doubleDash(args[i]) && !dash(args[i]) && !dash(args[i - 1] || '')) return i;
1518
}
1619

17-
return args.length;
20+
return args.length - 1;
1821
}
1922

2023
module.exports = argv => {
21-
const nodeArgs = [];
24+
const unknownArgs = [];
2225

2326
const scriptIndex = getFirstNonOptionArgIndex(argv);
27+
2428
const script = argv[scriptIndex];
2529
const scriptArgs = argv.slice(scriptIndex + 1);
2630
const devArgs = argv.slice(2, scriptIndex);
@@ -29,15 +33,25 @@ module.exports = argv => {
2933
boolean: ['clear', 'dedupe', 'fork', 'notify', 'poll', 'respawn', 'vm'],
3034
string: ['graceful_ipc', 'ignore', 'timestamp'],
3135
default: getConfig(script),
32-
unknown: function (arg) {
33-
const argKeys = Object.keys(minimist([arg]));
36+
unknown: arg => {
37+
const key = Object.keys(minimist([arg]))[1];
3438

35-
if (configKeys.some(k => argKeys.includes(k))) {
36-
return true;
39+
if (!configKeys.includes(key)) {
40+
unknownArgs.push({ arg, key });
3741
}
42+
}
43+
});
3844

39-
nodeArgs.push(arg);
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]);
4049
}
50+
return out;
51+
}, []);
52+
53+
unknownArgs.forEach(({ key }) => {
54+
delete opts[key];
4155
});
4256

4357
opts.ignore = [...Array.isArray(opts.ignore) ? opts.ignore : [opts.ignore]].map(resolvePath);

package.json

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

test/cli.js

+30
Original file line numberDiff line numberDiff line change
@@ -50,3 +50,33 @@ tap.test('cli overrides .node-dev.json from false to true', t => {
5050
t.is(notify, true);
5151
t.done();
5252
});
53+
54+
tap.test('-r ts-node/register --inspect test/fixture/server.js', t => {
55+
const argv = 'node bin/node-dev -r ts-node/register --inspect test/fixture/server.js'.split(' ');
56+
const { nodeArgs } = cli(argv);
57+
t.ok(nodeArgs.includes('--inspect'));
58+
t.ok(nodeArgs.includes('-r'));
59+
t.done();
60+
});
61+
62+
tap.test('--inspect -r ts-node/register test/fixture/server.js', t => {
63+
const argv = 'node bin/node-dev --inspect -r ts-node/register test/fixture/server.js'.split(' ');
64+
const { nodeArgs } = cli(argv);
65+
t.ok(nodeArgs.includes('--inspect'));
66+
t.ok(nodeArgs.includes('-r'));
67+
t.done();
68+
});
69+
70+
tap.test('--expose_gc gc.js foo', t => {
71+
const argv = 'node bin/node-dev --expose_gc test/fixture/gc.js foo'.split(' ');
72+
const { nodeArgs } = cli(argv);
73+
t.ok(nodeArgs.includes('--expose_gc'));
74+
t.done();
75+
});
76+
77+
tap.test('--require=coffeescript/register server.coffee', t => {
78+
const argv = 'node bin/node-dev --require=coffeescript/register test/fixture/server.coffee'.split(' ');
79+
const { nodeArgs } = cli(argv);
80+
t.ok(nodeArgs.includes('--require=coffeescript/register'));
81+
t.done();
82+
});

0 commit comments

Comments
 (0)