@@ -299,8 +299,8 @@ export interface RetryOptions {
299
299
maxRetryAfter ?: number ;
300
300
}
301
301
302
- export type CreateConnectionFunction = ( options : NativeRequestOptions , oncreate : ( error : Error , socket : Socket ) => void ) => Socket ;
303
- export type CheckServerIdentityFunction = ( hostname : string , certificate : DetailedPeerCertificate ) => Error | void ;
302
+ export type CreateConnectionFunction = ( options : NativeRequestOptions , oncreate : ( error : NodeJS . ErrnoException , socket : Socket ) => void ) => Socket ;
303
+ export type CheckServerIdentityFunction = ( hostname : string , certificate : DetailedPeerCertificate ) => NodeJS . ErrnoException | void ;
304
304
305
305
export interface CacheOptions {
306
306
shared ?: boolean ;
@@ -768,7 +768,7 @@ export default class Options {
768
768
private _merging : boolean ;
769
769
private readonly _init : OptionsInit [ ] ;
770
770
771
- constructor ( input ?: string | URL | OptionsInit , options ?: OptionsInit , defaults ?: Options | OptionsInit ) {
771
+ constructor ( input ?: string | URL | OptionsInit , options ?: OptionsInit , defaults ?: Options ) {
772
772
assert . any ( [ is . string , is . urlInstance , is . object , is . undefined ] , input ) ;
773
773
assert . any ( [ is . object , is . undefined ] , options ) ;
774
774
assert . any ( [ is . object , is . undefined ] , defaults ) ;
@@ -777,8 +777,8 @@ export default class Options {
777
777
throw new TypeError ( 'The defaults must be passed as the third argument' ) ;
778
778
}
779
779
780
- this . _internals = cloneInternals ( ( defaults as Options ) ?. _internals ?? defaults ?? defaultInternals ) ;
781
- this . _init = [ ...( ( defaults as Options ) ?. _init ?? [ ] ) ] ;
780
+ this . _internals = cloneInternals ( defaults ?. _internals ?? defaults ?? defaultInternals ) ;
781
+ this . _init = [ ...( defaults ?. _init ?? [ ] ) ] ;
782
782
this . _merging = false ;
783
783
this . _unixOptions = undefined ;
784
784
@@ -1495,24 +1495,30 @@ export default class Options {
1495
1495
throw new Error ( `Unexpected hook event: ${ knownHookEvent } ` ) ;
1496
1496
}
1497
1497
1498
- const hooks : unknown [ ] = value [ knownHookEvent as keyof Hooks ] ;
1498
+ const typedKnownHookEvent = knownHookEvent as keyof Hooks ;
1499
+ const typedValue = value as Hooks ;
1500
+ const hooks = typedValue [ typedKnownHookEvent ] ;
1501
+
1499
1502
assert . any ( [ is . array , is . undefined ] , hooks ) ;
1500
1503
1501
- for ( const hook of hooks ) {
1502
- assert . function_ ( hook ) ;
1504
+ if ( hooks ) {
1505
+ for ( const hook of hooks ) {
1506
+ assert . function_ ( hook ) ;
1507
+ }
1503
1508
}
1504
1509
1505
1510
if ( this . _merging ) {
1506
1511
if ( hooks ) {
1507
1512
// @ts -expect-error FIXME
1508
- this . _internals . hooks [ knownHookEvent ] . push ( ...hooks ) ;
1513
+ this . _internals . hooks [ typedKnownHookEvent ] . push ( ...hooks ) ;
1509
1514
}
1510
- } else if ( hooks ) {
1511
- // @ts -expect-error FIXME
1512
- this . _internals . hooks [ knownHookEvent ] = [ ...hooks ] ;
1513
1515
} else {
1516
+ if ( ! hooks ) {
1517
+ throw new Error ( `Missing hook event: ${ knownHookEvent } ` ) ;
1518
+ }
1519
+
1514
1520
// @ts -expect-error FIXME
1515
- this . _internals . hooks [ knownHookEvent ] = [ ] ;
1521
+ this . _internals . hooks [ knownHookEvent ] = [ ... hooks ] ;
1516
1522
}
1517
1523
}
1518
1524
}
@@ -2257,51 +2263,3 @@ export default class Options {
2257
2263
Object . freeze ( options . context ) ;
2258
2264
}
2259
2265
}
2260
-
2261
- // It's user responsibility to make sensitive data in `context` non-enumerable
2262
- const nonEnumerableProperties = new Set ( [
2263
- // Functions
2264
- 'constructor' ,
2265
- 'merge' ,
2266
- 'tryMerge' ,
2267
- 'createNativeRequestOptions' ,
2268
- 'getRequestFunction' ,
2269
- 'getFallbackRequestFunction' ,
2270
- 'freeze' ,
2271
-
2272
- // Payload
2273
- 'body' ,
2274
- 'form' ,
2275
- 'json' ,
2276
-
2277
- // Getters that always throw
2278
- 'auth' ,
2279
- 'followRedirects' ,
2280
- 'searchParameters' ,
2281
-
2282
- // May contain sensitive data
2283
- 'username' ,
2284
- 'password' ,
2285
- 'headers' ,
2286
- 'searchParams' ,
2287
- 'url' ,
2288
-
2289
- // Privates
2290
- '_unixOptions' ,
2291
- '_internals' ,
2292
- '_merging' ,
2293
- '_init' ,
2294
- ] ) ;
2295
-
2296
- // We want all the properties to be enumerable, so people instead doing
2297
- // `util.inspect(options, {getters: true, showHidden: true})`
2298
- // can do just `util.inspect(options, {getters: true})`.
2299
- const propertyDescriptors : PropertyDescriptorMap = { } ;
2300
- const keys = Object . getOwnPropertyNames ( Options . prototype ) . filter ( property => ! nonEnumerableProperties . has ( property ) ) ;
2301
- const makeEnumerable = { enumerable : true } ;
2302
-
2303
- for ( const key of keys ) {
2304
- propertyDescriptors [ key ] = makeEnumerable ;
2305
- }
2306
-
2307
- Object . defineProperties ( Options . prototype , propertyDescriptors ) ;
0 commit comments