Browse Source

feat: support dns-result-order Node.js cli flag (#39376)

* feat: support dns-result-order Node.js cli flag

* chore: update docs

Co-authored-by: Erick Zhao <[email protected]>

* chore: remove patch

---------

Co-authored-by: Erick Zhao <[email protected]>
Robo 1 year ago
parent
commit
bee5d94886

+ 9 - 0
docs/api/command-line-switches.md

@@ -291,6 +291,15 @@ Print stack traces for deprecations.
 
 Print stack traces for process warnings (including deprecations).
 
+### `--dns-result-order=order`
+
+Set the default value of the `verbatim` parameter in the Node.js [`dns.lookup()`](https://nodejs.org/api/dns.html#dnslookuphostname-options-callback) and [`dnsPromises.lookup()`](https://nodejs.org/api/dns.html#dnspromiseslookuphostname-options) functions. The value could be:
+
+* `ipv4first`: sets default `verbatim` `false`.
+* `verbatim`: sets default `verbatim` `true`.
+
+The default is `verbatim` and `dns.setDefaultResultOrder()` have higher priority than `--dns-result-order`.
+
 [app]: app.md
 [append-switch]: command-line.md#commandlineappendswitchswitch-value
 [debugging-main-process]: ../tutorial/debugging-main-process.md

+ 7 - 3
shell/common/node_bindings.cc

@@ -244,9 +244,13 @@ bool IsAllowedOption(base::StringPiece option) {
       });
 
   // This should be aligned with what's possible to set via the process object.
-  static constexpr auto options = base::MakeFixedFlatSet<base::StringPiece>(
-      {"--trace-warnings", "--trace-deprecation", "--throw-deprecation",
-       "--no-deprecation"});
+  static constexpr auto options = base::MakeFixedFlatSet<base::StringPiece>({
+      "--trace-warnings",
+      "--trace-deprecation",
+      "--throw-deprecation",
+      "--no-deprecation",
+      "--dns-result-order",
+  });
 
   if (debug_options.contains(option))
     return electron::fuses::IsNodeCliInspectEnabled();

+ 24 - 0
spec/api-utility-process-spec.ts

@@ -257,6 +257,30 @@ describe('utilityProcess module', () => {
       child.stdout!.on('data', listener);
     });
 
+    it('supports changing dns verbatim with --dns-result-order', (done) => {
+      const child = utilityProcess.fork(path.join(fixturesPath, 'dns-result-order.js'), [], {
+        stdio: 'pipe',
+        execArgv: ['--dns-result-order=ipv4first']
+      });
+
+      let output = '';
+      const cleanup = () => {
+        child.stderr!.removeListener('data', listener);
+        child.stdout!.removeListener('data', listener);
+        child.once('exit', () => { done(); });
+        child.kill();
+      };
+
+      const listener = (data: Buffer) => {
+        output += data;
+        expect(output.trim()).to.contain('ipv4first', 'default verbatim should be ipv4first');
+        cleanup();
+      };
+
+      child.stderr!.on('data', listener);
+      child.stdout!.on('data', listener);
+    });
+
     ifit(process.platform !== 'win32')('supports redirecting stdout to parent process', async () => {
       const result = 'Output from utility process';
       const appProcess = childProcess.spawn(process.execPath, [path.join(fixturesPath, 'inherit-stdout'), `--payload=${result}`]);

+ 3 - 0
spec/fixtures/api/utility-process/dns-result-order.js

@@ -0,0 +1,3 @@
+const dns = require('node:dns');
+console.log(dns.getDefaultResultOrder());
+process.exit(0);