From 2e0517c0addc05678e59906d91d72cc8f4860547 Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Fri, 4 Aug 2023 12:59:40 +0200 Subject: [PATCH] feat: allow more Node.js cli flags in main process (#39344) * feat: allow more Node.js cli flags in main process * docs: update cli switch documentation --- docs/api/command-line-switches.md | 30 +++++++++++++++++++---- shell/common/node_bindings.cc | 40 +++++++++++++++++++------------ 2 files changed, 51 insertions(+), 19 deletions(-) diff --git a/docs/api/command-line-switches.md b/docs/api/command-line-switches.md index e99f223b2f5f..ee5e746420c2 100644 --- a/docs/api/command-line-switches.md +++ b/docs/api/command-line-switches.md @@ -241,19 +241,25 @@ Electron supports some of the [CLI flags][node-cli] supported by Node.js. **Note:** Passing unsupported command line switches to Electron when it is not running in `ELECTRON_RUN_AS_NODE` will have no effect. -### --inspect-brk\[=\[host:]port] +### `--inspect-brk\[=\[host:]port]` Activate inspector on host:port and break at start of user script. Default host:port is 127.0.0.1:9229. Aliased to `--debug-brk=[host:]port`. -### --inspect-port=\[host:]port +#### `--inspect-brk-node[=[host:]port]` + +Activate inspector on `host:port` and break at start of the first internal +JavaScript script executed when the inspector is available. +Default `host:port` is `127.0.0.1:9229`. + +### `--inspect-port=\[host:]port` Set the `host:port` to be used when the inspector is activated. Useful when activating the inspector by sending the SIGUSR1 signal. Default host is `127.0.0.1`. Aliased to `--debug-port=[host:]port`. -### --inspect\[=\[host:]port] +### `--inspect\[=\[host:]port]` Activate inspector on `host:port`. Default is `127.0.0.1:9229`. @@ -263,12 +269,28 @@ See the [Debugging the Main Process][debugging-main-process] guide for more deta Aliased to `--debug[=[host:]port`. -### --inspect-publish-uid=stderr,http +### `--inspect-publish-uid=stderr,http` Specify ways of the inspector web socket url exposure. By default inspector websocket url is available in stderr and under /json/list endpoint on http://host:port/json/list. +### `--no-deprecation` + +Silence deprecation warnings. + +### `--throw-deprecation` + +Throw errors for deprecations. + +### `--trace-deprecation` + +Print stack traces for deprecations. + +### `--trace-warnings` + +Print stack traces for process warnings (including deprecations). + [app]: app.md [append-switch]: command-line.md#commandlineappendswitchswitch-value [debugging-main-process]: ../tutorial/debugging-main-process.md diff --git a/shell/common/node_bindings.cc b/shell/common/node_bindings.cc index 583a7a33345c..d3670ed26998 100644 --- a/shell/common/node_bindings.cc +++ b/shell/common/node_bindings.cc @@ -228,21 +228,30 @@ void ErrorMessageListener(v8::Local message, } } -// Only allow DebugOptions in non-ELECTRON_RUN_AS_NODE mode. +// Only allow a specific subset of options in non-ELECTRON_RUN_AS_NODE mode. // If node CLI inspect support is disabled, allow no debug options. -bool IsAllowedDebugOption(base::StringPiece option) { - static constexpr auto options = base::MakeFixedFlatSet({ - "--debug", - "--debug-brk", - "--debug-port", - "--inspect", - "--inspect-brk", - "--inspect-brk-node", - "--inspect-port", - "--inspect-publish-uid", - }); +bool IsAllowedOption(base::StringPiece option) { + static constexpr auto debug_options = + base::MakeFixedFlatSet({ + "--debug", + "--debug-brk", + "--debug-port", + "--inspect", + "--inspect-brk", + "--inspect-brk-node", + "--inspect-port", + "--inspect-publish-uid", + }); - return electron::fuses::IsNodeCliInspectEnabled() && options.contains(option); + // This should be aligned with what's possible to set via the process object. + static constexpr auto options = base::MakeFixedFlatSet( + {"--trace-warnings", "--trace-deprecation", "--throw-deprecation", + "--no-deprecation"}); + + if (debug_options.contains(option)) + return electron::fuses::IsNodeCliInspectEnabled(); + + return options.contains(option); } // Initialize NODE_OPTIONS to pass to Node.js @@ -395,8 +404,9 @@ void NodeBindings::SetNodeCliFlags() { #endif const auto stripped = base::StringPiece(option).substr(0, option.find('=')); - // Only allow in no-op (--) option or DebugOptions - if (IsAllowedDebugOption(stripped) || stripped == "--") + // Only allow in no-op (--) option or a small set of debug + // and trace related options. + if (IsAllowedOption(stripped) || stripped == "--") args.push_back(option); }