aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Anton Golub <golub.anton@gmail.com> 2023-10-31 09:54:48 +0300
committerGravatar GitHub <noreply@github.com> 2023-10-30 23:54:48 -0700
commit732650d6a43d235d36a9bf8717766e012f445461 (patch)
treef8a3fa8806412cec30510a1489709da1225197a9
parentb29d68bbaf8d759a9063d32944776064bf732659 (diff)
downloadbun-732650d6a43d235d36a9bf8717766e012f445461.tar.gz
bun-732650d6a43d235d36a9bf8717766e012f445461.tar.zst
bun-732650d6a43d235d36a9bf8717766e012f445461.zip
fix: provide nodejs compat for dns methods wrapped with util.promisify (#6748)
* fix: add nodejs compat for dns methods wrapping with util.promisify * fix: use single symbol for util.promisify.custom * style: linting
-rw-r--r--src/js/node/dns.js23
-rw-r--r--src/js/node/util.js2
-rw-r--r--test/js/node/dns/node-dns.test.js29
-rw-r--r--test/js/node/util/util-promisify.test.js1
4 files changed, 53 insertions, 2 deletions
diff --git a/src/js/node/dns.js b/src/js/node/dns.js
index e82e6a4b5..3f8787742 100644
--- a/src/js/node/dns.js
+++ b/src/js/node/dns.js
@@ -1,6 +1,7 @@
// Hardcoded module "node:dns"
// only resolve4, resolve, lookup, resolve6, resolveSrv, and reverse are implemented.
const dns = Bun.dns;
+const utilPromisifyCustomSymbol = Symbol.for("nodejs.util.promisify.custom");
function getServers() {
return dns.getServers();
@@ -683,6 +684,28 @@ for (const key of ["resolveAny"]) {
promises[key] = () => Promise.resolve(undefined);
}
+// Compatibility with util.promisify(dns[method])
+for (const [method, pMethod] of [
+ [lookup, promises.lookup],
+ [lookupService, promises.lookupService],
+ [resolve, promises.resolve],
+ [reverse, promises.reverse],
+ [resolve4, promises.resolve4],
+ [resolve6, promises.resolve6],
+ [resolveAny, promises.resolveAny],
+ [resolveCname, promises.resolveCname],
+ [resolveCaa, promises.resolveCaa],
+ [resolveMx, promises.resolveMx],
+ [resolveNs, promises.resolveNs],
+ [resolvePtr, promises.resolvePtr],
+ [resolveSoa, promises.resolveSoa],
+ [resolveSrv, promises.resolveSrv],
+ [resolveTxt, promises.resolveTxt],
+ [resolveNaptr, promises.resolveNaptr],
+]) {
+ method[utilPromisifyCustomSymbol] = pMethod;
+}
+
export default {
// these are wrong
ADDRCONFIG: 0,
diff --git a/src/js/node/util.js b/src/js/node/util.js
index dae341448..2002eed25 100644
--- a/src/js/node/util.js
+++ b/src/js/node/util.js
@@ -147,7 +147,7 @@ var _extend = function (origin, add) {
}
return origin;
};
-var kCustomPromisifiedSymbol = Symbol.for("util.promisify.custom");
+var kCustomPromisifiedSymbol = Symbol.for("nodejs.util.promisify.custom");
var promisify = function promisify(original) {
if (typeof original !== "function") throw new TypeError('The "original" argument must be of type Function');
if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {
diff --git a/test/js/node/dns/node-dns.test.js b/test/js/node/dns/node-dns.test.js
index 1988e9155..edf58308a 100644
--- a/test/js/node/dns/node-dns.test.js
+++ b/test/js/node/dns/node-dns.test.js
@@ -3,6 +3,7 @@ import * as dns from "node:dns";
import * as dns_promises from "node:dns/promises";
import * as fs from "node:fs";
import * as os from "node:os";
+import * as util from "node:util";
// TODO:
test("it exists", () => {
@@ -405,3 +406,31 @@ describe("lookup deprecated behavior", () => {
});
});
});
+
+describe("uses `dns.promises` implementations for `util.promisify` factory", () => {
+ it.each([
+ "lookup",
+ "lookupService",
+ "resolve",
+ "reverse",
+ "resolve4",
+ "resolve6",
+ "resolveAny",
+ "resolveCname",
+ "resolveCaa",
+ "resolveMx",
+ "resolveNs",
+ "resolvePtr",
+ "resolveSoa",
+ "resolveSrv",
+ "resolveTxt",
+ "resolveNaptr",
+ ])("%s", method => {
+ expect(dns[method][util.promisify.custom]).toBe(dns_promises[method]);
+ expect(dns.promises[method]).toBe(dns_promises[method]);
+ });
+
+ it("util.promisify(dns.lookup) acts like dns.promises.lookup", async () => {
+ expect(await util.promisify(dns.lookup)("example.com")).toEqual(await dns.promises.lookup("example.com"));
+ });
+});
diff --git a/test/js/node/util/util-promisify.test.js b/test/js/node/util/util-promisify.test.js
index 518e8b7ad..556659619 100644
--- a/test/js/node/util/util-promisify.test.js
+++ b/test/js/node/util/util-promisify.test.js
@@ -88,7 +88,6 @@ describe("util.promisify", () => {
function promisifiedFn() {}
- // TODO: register shared symbol promisify.custom
// util.promisify.custom is a shared symbol which can be accessed
// as `Symbol.for("nodejs.util.promisify.custom")`.
const kCustomPromisifiedSymbol = Symbol.for("nodejs.util.promisify.custom");