@@ -20,6 +20,7 @@ const {
2020} = require ( 'internal/errors' ) ;
2121const { isIP } = require ( 'internal/net' ) ;
2222const { getOptionValue } = require ( 'internal/options' ) ;
23+ const { emitExperimentalWarning } = require ( 'internal/util' ) ;
2324const {
2425 validateArray,
2526 validateInt32,
@@ -62,6 +63,12 @@ function validateTries(options) {
6263 return tries ;
6364}
6465
66+ function validateCacheMaxTTL ( options ) {
67+ const { cacheMaxTTL = defaultCacheMaxTTL } = { ...options } ;
68+ validateUint32 ( cacheMaxTTL , 'options.cacheMaxTTL' ) ;
69+ return cacheMaxTTL ;
70+ }
71+
6572const kSerializeResolver = Symbol ( 'dns:resolver:serialize' ) ;
6673const kDeserializeResolver = Symbol ( 'dns:resolver:deserialize' ) ;
6774const kSnapshotStates = Symbol ( 'dns:resolver:config' ) ;
@@ -75,17 +82,21 @@ class ResolverBase {
7582 const timeout = validateTimeout ( options ) ;
7683 const tries = validateTries ( options ) ;
7784 const maxTimeout = validateMaxTimeout ( options ) ;
85+ const cacheMaxTTL = validateCacheMaxTTL ( options ) ;
86+ if ( cacheMaxTTL > 0 && options ?. cacheMaxTTL !== undefined ) {
87+ emitExperimentalWarning ( 'dns.Resolver cacheMaxTTL' ) ;
88+ }
7889 // If we are building snapshot, save the states of the resolver along
7990 // the way.
8091 if ( isBuildingSnapshot ( ) ) {
81- this [ kSnapshotStates ] = { timeout, tries, maxTimeout } ;
92+ this [ kSnapshotStates ] = { timeout, tries, maxTimeout, cacheMaxTTL } ;
8293 }
83- this [ kInitializeHandle ] ( timeout , tries , maxTimeout ) ;
94+ this [ kInitializeHandle ] ( timeout , tries , maxTimeout , cacheMaxTTL ) ;
8495 }
8596
86- [ kInitializeHandle ] ( timeout , tries , maxTimeout ) {
97+ [ kInitializeHandle ] ( timeout , tries , maxTimeout , cacheMaxTTL ) {
8798 const { ChannelWrap } = lazyBinding ( ) ;
88- this . _handle = new ChannelWrap ( timeout , tries , maxTimeout ) ;
99+ this . _handle = new ChannelWrap ( timeout , tries , maxTimeout , cacheMaxTTL ) ;
89100 }
90101
91102 cancel ( ) {
@@ -195,8 +206,8 @@ class ResolverBase {
195206 }
196207
197208 [ kDeserializeResolver ] ( ) {
198- const { timeout, tries, maxTimeout, localAddress, servers } = this [ kSnapshotStates ] ;
199- this [ kInitializeHandle ] ( timeout , tries , maxTimeout ) ;
209+ const { timeout, tries, maxTimeout, cacheMaxTTL , localAddress, servers } = this [ kSnapshotStates ] ;
210+ this [ kInitializeHandle ] ( timeout , tries , maxTimeout , cacheMaxTTL ) ;
200211 if ( localAddress ) {
201212 const { ipv4, ipv6 } = localAddress ;
202213 this . _handle . setLocalAddress ( ipv4 , ipv6 ) ;
@@ -209,6 +220,8 @@ class ResolverBase {
209220
210221let defaultResolver ;
211222let dnsOrder ;
223+ let defaultCacheMaxTTL = 0 ;
224+ let useCares = false ;
212225const validDnsOrders = [ 'verbatim' , 'ipv4first' , 'ipv6first' ] ;
213226const validFamilies = [ 0 , 4 , 6 ] ;
214227
@@ -222,6 +235,17 @@ function initializeDns() {
222235 dnsOrder = orderFromCLI ;
223236 }
224237
238+ const cacheMaxTTLFromCLI = getOptionValue ( '--experimental-dns-cache-max-ttl' ) ;
239+ if ( cacheMaxTTLFromCLI > 0 ) {
240+ emitExperimentalWarning ( '--experimental-dns-cache-max-ttl' ) ;
241+ defaultCacheMaxTTL = cacheMaxTTLFromCLI ;
242+ }
243+
244+ if ( getOptionValue ( '--experimental-dns-lookup-cares' ) ) {
245+ emitExperimentalWarning ( '--experimental-dns-lookup-cares' ) ;
246+ useCares = true ;
247+ }
248+
225249 if ( ! isBuildingSnapshot ( ) ) {
226250 return ;
227251 }
@@ -340,6 +364,10 @@ const errorCodes = {
340364 CANCELLED : 'ECANCELLED' ,
341365} ;
342366
367+ function getUseCares ( ) {
368+ return useCares ;
369+ }
370+
343371module . exports = {
344372 bindDefaultResolver,
345373 getDefaultResolver,
@@ -349,6 +377,7 @@ module.exports = {
349377 validateTries,
350378 getDefaultResultOrder,
351379 setDefaultResultOrder,
380+ getUseCares,
352381 errorCodes,
353382 createResolverClass,
354383 initializeDns,
0 commit comments