aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/bun.js/node-dns.exports.js24
-rw-r--r--test/js/node/dns/node-dns.test.js8
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();