node
node copied to clipboard
Expose `process.env.NODE_OPTIONS` parser to user land
What is the problem this feature will solve?
Node.js has an internal parser for correctly parsing and validating the process.env.NODE_OPTIONS
variable. I'd like to expose this parser to user land as something like util.parseNodeOptions
.
What is the feature you are proposing to solve the problem?
The exact parser code is here: https://github.com/nodejs/node/blob/c29d53c5cfc63c5a876084e788d70c9e87bed880/src/node_options.cc#L1401
The solution should create a new C++ function that accesses the NODE_OPTIONS
environment variable from the Environment
so that we do not incur an unnecessary serialization cost passing the NODE_OPTIONS
from JS.
Calling the function should return the list of strings.
The function should throw any error it encounters during the parsing process.
I will contribute this feature myself soon 👍
What alternatives have you considered?
We required this functionality for a recent bug in Next.js. I was able to solve that issue by manually converting the C++ parser to JS and using that.
The PR introducing the fix: https://github.com/vercel/next.js/pull/65046
The JS parser implementation itself: https://github.com/vercel/next.js/blob/270a9db0567808db5d53e7a18c7be0a4710796e8/packages/next/src/server/lib/utils.ts#L59-L113
Note that ParseNodeOptionsEnvVar only splits the argument string into a vector of strings by whitespaces. It's not a full parser (i.e. doesn't validate and assign values).
That is okay. I think providing even the consistent whitespace/quote parsing is important. The core of the issue we ran into in Next.js was because we didn't understand the parsing rules for process.env.NODE_OPTIONS
.
I'd have to go and look at the code again, but there was something else that was validating the parsed options. That could be valuable to export as well.