[babel-node] Do not hardcode node flags (#9914)

This commit is contained in:
Nicolò Ribaudo 2019-05-04 23:40:06 +02:00 committed by GitHub
parent eae7a33316
commit 5da94bff87
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 28 additions and 42 deletions

View File

@ -23,6 +23,7 @@
"@babel/register": "^7.0.0", "@babel/register": "^7.0.0",
"commander": "^2.8.1", "commander": "^2.8.1",
"lodash": "^4.17.11", "lodash": "^4.17.11",
"node-environment-flags": "^1.0.5",
"v8flags": "^3.1.1" "v8flags": "^3.1.1"
}, },
"peerDependencies": { "peerDependencies": {

View File

@ -6,6 +6,10 @@
import getV8Flags from "v8flags"; import getV8Flags from "v8flags";
import path from "path"; import path from "path";
// TODO: When support for node < 10.10 will be dropped, this package
// can be replaced with process.allowedNodeEnvironmentFlags
import allowedNodeEnvironmentFlags from "node-environment-flags";
let args = [path.join(__dirname, "_babel-node")]; let args = [path.join(__dirname, "_babel-node")];
let babelArgs = process.argv.slice(2); let babelArgs = process.argv.slice(2);
@ -24,7 +28,9 @@ if (argSeparator > -1) {
* that only the flag is returned. * that only the flag is returned.
*/ */
function getNormalizedV8Flag(arg) { function getNormalizedV8Flag(arg) {
const matches = arg.match(/--(.+)/); // v8 uses the "no" prefix to negate boolean flags (e.g. --nolezy),
// but they are not listed by v8flags
const matches = arg.match(/--(?:no)?(.+)/);
if (matches) { if (matches) {
return `--${matches[1].replace(/-/g, "_")}`; return `--${matches[1].replace(/-/g, "_")}`;
@ -33,51 +39,30 @@ function getNormalizedV8Flag(arg) {
return arg; return arg;
} }
// These are aliases for node options defined by babel-node.
const aliases = new Map([["-d", "--debug"], ["-gc", "--expose-gc"]]);
getV8Flags(function(err, v8Flags) { getV8Flags(function(err, v8Flags) {
babelArgs.forEach(function(arg, index) { for (let i = 0; i < babelArgs.length; i++) {
const arg = babelArgs[i];
const flag = arg.split("=")[0]; const flag = arg.split("=")[0];
switch (flag) { if (flag === "-r" || flag === "--require") {
case "-d":
args.unshift("--debug");
break;
case "debug":
case "--debug":
case "--debug-brk":
case "--inspect":
case "--inspect-brk":
case "--experimental-modules":
args.unshift(arg);
break;
case "-r":
case "--require":
args.push(flag); args.push(flag);
args.push(babelArgs[index + 1]); args.push(babelArgs[++i]);
delete babelArgs[index + 1]; } else if (aliases.has(flag)) {
break; args.unshift(aliases.get(flag));
} else if (
case "-gc": flag === "debug" || // node debug foo.js
args.unshift("--expose-gc"); flag === "inspect" ||
break;
case "--nolazy":
args.unshift(flag);
break;
default:
if (
v8Flags.indexOf(getNormalizedV8Flag(flag)) >= 0 || v8Flags.indexOf(getNormalizedV8Flag(flag)) >= 0 ||
arg.indexOf("--trace") === 0 allowedNodeEnvironmentFlags.has(flag)
) { ) {
args.unshift(arg); args.unshift(arg);
} else { } else {
args.push(arg); args.push(arg);
} }
break;
} }
});
// append arguments passed after -- // append arguments passed after --
if (argSeparator > -1) { if (argSeparator > -1) {