Skip to content

Commit 80b752e

Browse files
authored
🤖 Merge PR DefinitelyTyped#73148 fix(node/dns): add missing 'CAA' rrtype for sync & async resolve() by @hkleungai
1 parent 08b8087 commit 80b752e

File tree

12 files changed

+612
-176
lines changed

12 files changed

+612
-176
lines changed

‎types/node/dns.d.ts‎

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,9 @@ declare module "dns" {
250250
contactemail?: string | undefined;
251251
contactphone?: string | undefined;
252252
}
253+
export interface AnyCaaRecord extends CaaRecord {
254+
type: "CAA";
255+
}
253256
export interface MxRecord {
254257
priority: number;
255258
exchange: string;
@@ -317,6 +320,7 @@ declare module "dns" {
317320
export type AnyRecord =
318321
| AnyARecord
319322
| AnyAaaaRecord
323+
| AnyCaaRecord
320324
| AnyCnameRecord
321325
| AnyMxRecord
322326
| AnyNaptrRecord
@@ -345,12 +349,7 @@ declare module "dns" {
345349
): void;
346350
export function resolve(
347351
hostname: string,
348-
rrtype: "A",
349-
callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void,
350-
): void;
351-
export function resolve(
352-
hostname: string,
353-
rrtype: "AAAA",
352+
rrtype: "A" | "AAAA" | "CNAME" | "NS" | "PTR",
354353
callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void,
355354
): void;
356355
export function resolve(
@@ -360,8 +359,8 @@ declare module "dns" {
360359
): void;
361360
export function resolve(
362361
hostname: string,
363-
rrtype: "CNAME",
364-
callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void,
362+
rrtype: "CAA",
363+
callback: (err: NodeJS.ErrnoException | null, address: CaaRecord[]) => void,
365364
): void;
366365
export function resolve(
367366
hostname: string,
@@ -373,16 +372,6 @@ declare module "dns" {
373372
rrtype: "NAPTR",
374373
callback: (err: NodeJS.ErrnoException | null, addresses: NaptrRecord[]) => void,
375374
): void;
376-
export function resolve(
377-
hostname: string,
378-
rrtype: "NS",
379-
callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void,
380-
): void;
381-
export function resolve(
382-
hostname: string,
383-
rrtype: "PTR",
384-
callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void,
385-
): void;
386375
export function resolve(
387376
hostname: string,
388377
rrtype: "SOA",
@@ -410,6 +399,7 @@ declare module "dns" {
410399
err: NodeJS.ErrnoException | null,
411400
addresses:
412401
| string[]
402+
| CaaRecord[]
413403
| MxRecord[]
414404
| NaptrRecord[]
415405
| SoaRecord
@@ -422,6 +412,7 @@ declare module "dns" {
422412
export namespace resolve {
423413
function __promisify__(hostname: string, rrtype?: "A" | "AAAA" | "CNAME" | "NS" | "PTR"): Promise<string[]>;
424414
function __promisify__(hostname: string, rrtype: "ANY"): Promise<AnyRecord[]>;
415+
function __promisify__(hostname: string, rrtype: "CAA"): Promise<CaaRecord[]>;
425416
function __promisify__(hostname: string, rrtype: "MX"): Promise<MxRecord[]>;
426417
function __promisify__(hostname: string, rrtype: "NAPTR"): Promise<NaptrRecord[]>;
427418
function __promisify__(hostname: string, rrtype: "SOA"): Promise<SoaRecord>;
@@ -432,7 +423,15 @@ declare module "dns" {
432423
hostname: string,
433424
rrtype: string,
434425
): Promise<
435-
string[] | MxRecord[] | NaptrRecord[] | SoaRecord | SrvRecord[] | TlsaRecord[] | string[][] | AnyRecord[]
426+
| string[]
427+
| CaaRecord[]
428+
| MxRecord[]
429+
| NaptrRecord[]
430+
| SoaRecord
431+
| SrvRecord[]
432+
| TlsaRecord[]
433+
| string[][]
434+
| AnyRecord[]
436435
>;
437436
}
438437
/**

‎types/node/dns/promises.d.ts‎

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -127,24 +127,25 @@ declare module "dns/promises" {
127127
* @param [rrtype='A'] Resource record type.
128128
*/
129129
function resolve(hostname: string): Promise<string[]>;
130-
function resolve(hostname: string, rrtype: "A"): Promise<string[]>;
131-
function resolve(hostname: string, rrtype: "AAAA"): Promise<string[]>;
130+
function resolve(hostname: string, rrtype: "A" | "AAAA" | "CNAME" | "NS" | "PTR"): Promise<string[]>;
132131
function resolve(hostname: string, rrtype: "ANY"): Promise<AnyRecord[]>;
133132
function resolve(hostname: string, rrtype: "CAA"): Promise<CaaRecord[]>;
134-
function resolve(hostname: string, rrtype: "CNAME"): Promise<string[]>;
135133
function resolve(hostname: string, rrtype: "MX"): Promise<MxRecord[]>;
136134
function resolve(hostname: string, rrtype: "NAPTR"): Promise<NaptrRecord[]>;
137-
function resolve(hostname: string, rrtype: "NS"): Promise<string[]>;
138-
function resolve(hostname: string, rrtype: "PTR"): Promise<string[]>;
139135
function resolve(hostname: string, rrtype: "SOA"): Promise<SoaRecord>;
140136
function resolve(hostname: string, rrtype: "SRV"): Promise<SrvRecord[]>;
141137
function resolve(hostname: string, rrtype: "TLSA"): Promise<TlsaRecord[]>;
142138
function resolve(hostname: string, rrtype: "TXT"): Promise<string[][]>;
143-
function resolve(
144-
hostname: string,
145-
rrtype: string,
146-
): Promise<
147-
string[] | MxRecord[] | NaptrRecord[] | SoaRecord | SrvRecord[] | TlsaRecord[] | string[][] | AnyRecord[]
139+
function resolve(hostname: string, rrtype: string): Promise<
140+
| string[]
141+
| CaaRecord[]
142+
| MxRecord[]
143+
| NaptrRecord[]
144+
| SoaRecord
145+
| SrvRecord[]
146+
| TlsaRecord[]
147+
| string[][]
148+
| AnyRecord[]
148149
>;
149150
/**
150151
* Uses the DNS protocol to resolve IPv4 addresses (`A` records) for the `hostname`. On success, the `Promise` is resolved with an array of IPv4

‎types/node/test/dns.ts‎

Lines changed: 125 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import {
3939
TIMEOUT,
4040
V4MAPPED,
4141
} from "node:dns";
42+
import { promisify } from "node:util";
4243

4344
lookup("nodejs.org", (err, address, family) => {
4445
const _err: NodeJS.ErrnoException | null = err;
@@ -97,21 +98,130 @@ lookupService("127.0.0.1", 0, (err, hostname, service) => {
9798
const _service: string = service;
9899
});
99100

100-
resolve("nodejs.org", (err, addresses) => {
101-
const _addresses: string[] = addresses;
102-
});
103-
resolve("nodejs.org", "A", (err, addresses) => {
104-
const _addresses: string[] = addresses;
105-
});
106-
resolve("nodejs.org", "AAAA", (err, addresses) => {
107-
const _addresses: string[] = addresses;
108-
});
109-
resolve("nodejs.org", "ANY", (err, addresses) => {
110-
const _addresses: AnyRecord[] = addresses;
111-
});
112-
resolve("nodejs.org", "MX", (err, addresses) => {
113-
const _addresses: MxRecord[] = addresses;
114-
});
101+
{
102+
const resolvePromisified = promisify(resolve);
103+
104+
resolve("nodejs.org", (err, addresses) => {
105+
// $ExpectType ErrnoException | null
106+
err;
107+
// $ExpectType string[]
108+
addresses;
109+
});
110+
// $ExpectType Promise<string[]>
111+
resolvePromisified("nodejs.org");
112+
// $ExpectType Promise<string[]>
113+
promises.resolve("nodejs.org");
114+
115+
resolve("nodejs.org", "" as "A" | "AAAA" | "CNAME" | "NS" | "PTR", (err, addresses) => {
116+
// $ExpectType ErrnoException | null
117+
err;
118+
// $ExpectType string[]
119+
addresses;
120+
});
121+
// $ExpectType Promise<string[]>
122+
resolvePromisified("nodejs.org", "" as "A" | "AAAA" | "CNAME" | "NS" | "PTR");
123+
// $ExpectType Promise<string[]>
124+
promises.resolve("nodejs.org", "" as "A" | "AAAA" | "CNAME" | "NS" | "PTR");
125+
126+
resolve("nodejs.org", "ANY", (err, addresses) => {
127+
// $ExpectType ErrnoException | null
128+
err;
129+
// $ExpectType AnyRecord[]
130+
addresses;
131+
});
132+
// $ExpectType Promise<AnyRecord[]>
133+
resolvePromisified("nodejs.org", "ANY");
134+
// $ExpectType Promise<AnyRecord[]>
135+
promises.resolve("nodejs.org", "ANY");
136+
137+
resolve("nodejs.org", "CAA", (err, addresses) => {
138+
// $ExpectType ErrnoException | null
139+
err;
140+
// $ExpectType CaaRecord[]
141+
addresses;
142+
});
143+
// $ExpectType Promise<CaaRecord[]>
144+
resolvePromisified("nodejs.org", "CAA");
145+
// $ExpectType Promise<CaaRecord[]>
146+
promises.resolve("nodejs.org", "CAA");
147+
148+
resolve("nodejs.org", "MX", (err, addresses) => {
149+
// $ExpectType ErrnoException | null
150+
err;
151+
// $ExpectType MxRecord[]
152+
addresses;
153+
});
154+
// $ExpectType Promise<MxRecord[]>
155+
resolvePromisified("nodejs.org", "MX");
156+
// $ExpectType Promise<MxRecord[]>
157+
promises.resolve("nodejs.org", "MX");
158+
159+
resolve("nodejs.org", "NAPTR", (err, addresses) => {
160+
// $ExpectType ErrnoException | null
161+
err;
162+
// $ExpectType NaptrRecord[]
163+
addresses;
164+
});
165+
// $ExpectType Promise<NaptrRecord[]>
166+
resolvePromisified("nodejs.org", "NAPTR");
167+
// $ExpectType Promise<NaptrRecord[]>
168+
promises.resolve("nodejs.org", "NAPTR");
169+
170+
resolve("nodejs.org", "SOA", (err, addresses) => {
171+
// $ExpectType ErrnoException | null
172+
err;
173+
// $ExpectType SoaRecord
174+
addresses;
175+
});
176+
// $ExpectType Promise<SoaRecord>
177+
resolvePromisified("nodejs.org", "SOA");
178+
// $ExpectType Promise<SoaRecord>
179+
promises.resolve("nodejs.org", "SOA");
180+
181+
resolve("nodejs.org", "SRV", (err, addresses) => {
182+
// $ExpectType ErrnoException | null
183+
err;
184+
// $ExpectType SrvRecord[]
185+
addresses;
186+
});
187+
// $ExpectType Promise<SrvRecord[]>
188+
resolvePromisified("nodejs.org", "SRV");
189+
// $ExpectType Promise<SrvRecord[]>
190+
promises.resolve("nodejs.org", "SRV");
191+
192+
resolve("nodejs.org", "TLSA", (err, addresses) => {
193+
// $ExpectType ErrnoException | null
194+
err;
195+
// $ExpectType TlsaRecord[]
196+
addresses;
197+
});
198+
// $ExpectType Promise<TlsaRecord[]>
199+
resolvePromisified("nodejs.org", "TLSA");
200+
// $ExpectType Promise<TlsaRecord[]>
201+
promises.resolve("nodejs.org", "TLSA");
202+
203+
resolve("nodejs.org", "TXT", (err, addresses) => {
204+
// $ExpectType ErrnoException | null
205+
err;
206+
// $ExpectType string[][]
207+
addresses;
208+
});
209+
// $ExpectType Promise<string[][]>
210+
resolvePromisified("nodejs.org", "TXT");
211+
// $ExpectType Promise<string[][]>
212+
promises.resolve("nodejs.org", "TXT");
213+
214+
resolve("nodejs.org", "unknown", (err, addresses) => {
215+
// $ExpectType ErrnoException | null
216+
err;
217+
// $ExpectType string[] | SoaRecord | AnyRecord[] | CaaRecord[] | MxRecord[] | NaptrRecord[] | SrvRecord[] | TlsaRecord[] | string[][]
218+
addresses;
219+
});
220+
// $ExpectType Promise<string[] | SoaRecord | AnyRecord[] | CaaRecord[] | MxRecord[] | NaptrRecord[] | SrvRecord[] | TlsaRecord[] | string[][]>
221+
resolvePromisified("nodejs.org", "unknown");
222+
// $ExpectType Promise<string[] | SoaRecord | AnyRecord[] | CaaRecord[] | MxRecord[] | NaptrRecord[] | SrvRecord[] | TlsaRecord[] | string[][]>
223+
promises.resolve("nodejs.org", "unknown");
224+
}
115225

116226
resolve4("nodejs.org", (err, addresses) => {
117227
const _addresses: string[] = addresses;

‎types/node/v18/dns.d.ts‎

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,9 @@ declare module "dns" {
240240
contactemail?: string | undefined;
241241
contactphone?: string | undefined;
242242
}
243+
export interface AnyCaaRecord extends CaaRecord {
244+
type: "CAA";
245+
}
243246
export interface MxRecord {
244247
priority: number;
245248
exchange: string;
@@ -298,6 +301,7 @@ declare module "dns" {
298301
export type AnyRecord =
299302
| AnyARecord
300303
| AnyAaaaRecord
304+
| AnyCaaRecord
301305
| AnyCnameRecord
302306
| AnyMxRecord
303307
| AnyNaptrRecord
@@ -325,12 +329,7 @@ declare module "dns" {
325329
): void;
326330
export function resolve(
327331
hostname: string,
328-
rrtype: "A",
329-
callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void,
330-
): void;
331-
export function resolve(
332-
hostname: string,
333-
rrtype: "AAAA",
332+
rrtype: "A" | "AAAA" | "CNAME" | "NS" | "PTR",
334333
callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void,
335334
): void;
336335
export function resolve(
@@ -340,8 +339,8 @@ declare module "dns" {
340339
): void;
341340
export function resolve(
342341
hostname: string,
343-
rrtype: "CNAME",
344-
callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void,
342+
rrtype: "CAA",
343+
callback: (err: NodeJS.ErrnoException | null, address: CaaRecord[]) => void,
345344
): void;
346345
export function resolve(
347346
hostname: string,
@@ -353,16 +352,6 @@ declare module "dns" {
353352
rrtype: "NAPTR",
354353
callback: (err: NodeJS.ErrnoException | null, addresses: NaptrRecord[]) => void,
355354
): void;
356-
export function resolve(
357-
hostname: string,
358-
rrtype: "NS",
359-
callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void,
360-
): void;
361-
export function resolve(
362-
hostname: string,
363-
rrtype: "PTR",
364-
callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void,
365-
): void;
366355
export function resolve(
367356
hostname: string,
368357
rrtype: "SOA",
@@ -383,12 +372,21 @@ declare module "dns" {
383372
rrtype: string,
384373
callback: (
385374
err: NodeJS.ErrnoException | null,
386-
addresses: string[] | MxRecord[] | NaptrRecord[] | SoaRecord | SrvRecord[] | string[][] | AnyRecord[],
375+
addresses:
376+
| string[]
377+
| CaaRecord[]
378+
| MxRecord[]
379+
| NaptrRecord[]
380+
| SoaRecord
381+
| SrvRecord[]
382+
| string[][]
383+
| AnyRecord[],
387384
) => void,
388385
): void;
389386
export namespace resolve {
390387
function __promisify__(hostname: string, rrtype?: "A" | "AAAA" | "CNAME" | "NS" | "PTR"): Promise<string[]>;
391388
function __promisify__(hostname: string, rrtype: "ANY"): Promise<AnyRecord[]>;
389+
function __promisify__(hostname: string, rrtype: "CAA"): Promise<CaaRecord[]>;
392390
function __promisify__(hostname: string, rrtype: "MX"): Promise<MxRecord[]>;
393391
function __promisify__(hostname: string, rrtype: "NAPTR"): Promise<NaptrRecord[]>;
394392
function __promisify__(hostname: string, rrtype: "SOA"): Promise<SoaRecord>;
@@ -397,7 +395,16 @@ declare module "dns" {
397395
function __promisify__(
398396
hostname: string,
399397
rrtype: string,
400-
): Promise<string[] | MxRecord[] | NaptrRecord[] | SoaRecord | SrvRecord[] | string[][] | AnyRecord[]>;
398+
): Promise<
399+
| string[]
400+
| CaaRecord[]
401+
| MxRecord[]
402+
| NaptrRecord[]
403+
| SoaRecord
404+
| SrvRecord[]
405+
| string[][]
406+
| AnyRecord[]
407+
>;
401408
}
402409
/**
403410
* Uses the DNS protocol to resolve a IPv4 addresses (`A` records) for the `hostname`. The `addresses` argument passed to the `callback` function

0 commit comments

Comments
 (0)