diff options
author | 2023-10-31 09:54:48 +0300 | |
---|---|---|
committer | 2023-10-30 23:54:48 -0700 | |
commit | 732650d6a43d235d36a9bf8717766e012f445461 (patch) | |
tree | f8a3fa8806412cec30510a1489709da1225197a9 | |
parent | b29d68bbaf8d759a9063d32944776064bf732659 (diff) | |
download | bun-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.js | 23 | ||||
-rw-r--r-- | src/js/node/util.js | 2 | ||||
-rw-r--r-- | test/js/node/dns/node-dns.test.js | 29 | ||||
-rw-r--r-- | test/js/node/util/util-promisify.test.js | 1 |
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"); |