diff options
author | Anna Henningsen <anna@addaleax.net> | 2018-09-01 00:09:46 +0200 |
---|---|---|
committer | Anna Henningsen <anna@addaleax.net> | 2018-09-09 16:20:28 +0200 |
commit | 995782c87279e05952559d83237174354646359d (patch) | |
tree | 6b25347497c333b9c2cd3ccc8426ea2b610dfdfb /lib/internal/bootstrap/node.js | |
parent | 56d9cd49f6d580832ad3acd9fd646319dc36b9ed (diff) | |
download | android-node-v8-995782c87279e05952559d83237174354646359d.tar.gz android-node-v8-995782c87279e05952559d83237174354646359d.tar.bz2 android-node-v8-995782c87279e05952559d83237174354646359d.zip |
process: generate list of allowed env flags programmatically
Avoids having a separate, second source of truth on this matter.
PR-URL: https://github.com/nodejs/node/pull/22638
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Diffstat (limited to 'lib/internal/bootstrap/node.js')
-rw-r--r-- | lib/internal/bootstrap/node.js | 45 |
1 files changed, 42 insertions, 3 deletions
diff --git a/lib/internal/bootstrap/node.js b/lib/internal/bootstrap/node.js index 284778becf..128725a532 100644 --- a/lib/internal/bootstrap/node.js +++ b/lib/internal/bootstrap/node.js @@ -671,9 +671,45 @@ const test = Function.call.bind(RegExp.prototype.test); const { - allowedV8EnvironmentFlags, - allowedNodeEnvironmentFlags - } = process.binding('config'); + getOptions, + types: { kV8Option }, + envSettings: { kAllowedInEnvironment } + } = internalBinding('options'); + const { options, aliases } = getOptions(); + + const allowedV8EnvironmentFlags = []; + const allowedNodeEnvironmentFlags = []; + for (const [name, info] of options) { + if (info.envVarSettings === kAllowedInEnvironment) { + if (info.type === kV8Option) { + allowedV8EnvironmentFlags.push(name); + } else { + allowedNodeEnvironmentFlags.push(name); + } + } + } + + for (const [ from, expansion ] of aliases) { + let isAccepted = true; + for (const to of expansion) { + if (!to.startsWith('-')) continue; + const recursiveExpansion = aliases.get(to); + if (recursiveExpansion) { + expansion.push(...recursiveExpansion); + continue; + } + isAccepted = options.get(to).envVarSettings === kAllowedInEnvironment; + if (!isAccepted) break; + } + if (isAccepted) { + let canonical = from; + if (canonical.endsWith('=')) + canonical = canonical.substr(0, canonical.length - 1); + if (canonical.endsWith(' <arg>')) + canonical = canonical.substr(0, canonical.length - 4); + allowedNodeEnvironmentFlags.push(canonical); + } + } const trimLeadingDashes = (flag) => replace(flag, leadingDashesRegex, ''); @@ -711,6 +747,9 @@ // permutations of a flag, including present/missing leading // dash(es) and/or underscores-for-dashes in the case of V8-specific // flags. Strips any values after `=`, inclusive. + // TODO(addaleax): It might be more flexible to run the option parser + // on a dummy option set and see whether it rejects the argument or + // not. if (typeof key === 'string') { key = replace(key, trailingValuesRegex, ''); if (test(leadingDashesRegex, key)) { |