diff options
-rw-r--r-- | src/bun.js/node-dns.exports.js | 24 | ||||
-rw-r--r-- | test/js/node/dns/node-dns.test.js | 8 |
2 files changed, 30 insertions, 2 deletions
diff --git a/src/bun.js/node-dns.exports.js b/src/bun.js/node-dns.exports.js index 3bf9bac40..dc05c6c51 100644 --- a/src/bun.js/node-dns.exports.js +++ b/src/bun.js/node-dns.exports.js @@ -16,8 +16,15 @@ function lookup(domain, options, callback) { } dns.lookup(domain, options).then( - ([{ address, family }]) => { - callback(null, address, family); + res => { + res.sort((a, b) => a.family - b.family); + + if (options?.all) { + callback(null, res.map(mapLookupAll)); + } else { + const [{ address, family }] = res; + callback(null, address, family); + } }, error => { callback(error); @@ -453,6 +460,16 @@ const promisifyLookup = res => { return { address, family }; }; +const mapLookupAll = res => { + const { address, family } = res; + return { address, family }; +}; + +const promisifyLookupAll = res => { + res.sort((a, b) => a.family - b.family); + return res.map(mapLookupAll); +}; + const mapResolveX = a => a.address; const promisifyResolveX = res => { @@ -462,6 +479,9 @@ const promisifyResolveX = res => { // promisified versions export const promises = { lookup(domain, options) { + if (options?.all) { + return dns.lookup(domain, options).then(promisifyLookupAll); + } return dns.lookup(domain, options).then(promisifyLookup); }, diff --git a/test/js/node/dns/node-dns.test.js b/test/js/node/dns/node-dns.test.js index 6f4cac22f..754ed2ffc 100644 --- a/test/js/node/dns/node-dns.test.js +++ b/test/js/node/dns/node-dns.test.js @@ -134,6 +134,14 @@ test("dns.lookup (example.com)", done => { }); }); +test("dns.lookup (example.com) with { all: true } #2675", done => { + dns.lookup("example.com", { all: true }, (err, address, family) => { + expect(err).toBeNull(); + expect(Array.isArray(address)).toBe(true); + done(err); + }); +}); + test("dns.lookup (localhost)", done => { dns.lookup("localhost", (err, address, family) => { expect(err).toBeNull(); |