@@ -53,7 +53,10 @@ export function mergeCA(...args: (NodeJSCAOption | undefined)[]): string {
53
53
54
54
const pemWithParsedCache = new WeakMap <
55
55
string [ ] ,
56
- { pem : string ; parsed : X509Certificate | null } [ ]
56
+ {
57
+ ca : string [ ] ;
58
+ messages : string [ ] ;
59
+ }
57
60
> ( ) ;
58
61
// TODO(COMPASS-8253): Remove this in favor of OpenSSL's X509_V_FLAG_PARTIAL_CHAIN
59
62
// See linked tickets for details on why we need this (tl;dr: the system certificate
@@ -63,25 +66,29 @@ export function removeCertificatesWithoutIssuer(ca: string[]): {
63
66
ca : string [ ] ;
64
67
messages : string [ ] ;
65
68
} {
66
- const messages : string [ ] = [ ] ;
67
- let caWithParsedCerts =
68
- pemWithParsedCache . get ( ca ) ??
69
- ca . map ( ( pem ) => {
70
- let parsed : X509Certificate | null = null ;
71
- try {
72
- parsed = new X509Certificate ( pem ) ;
73
- } catch ( err : unknown ) {
74
- messages . push (
75
- `Unable to parse certificate: ${
76
- err && typeof err === 'object' && 'message' in err
77
- ? String ( err . message )
78
- : String ( err )
79
- } `
80
- ) ;
69
+ let result :
70
+ | {
71
+ ca : string [ ] ;
72
+ messages : string [ ] ;
81
73
}
82
- return { pem, parsed } ;
83
- } ) ;
84
- pemWithParsedCache . set ( ca , caWithParsedCerts ) ;
74
+ | undefined = pemWithParsedCache . get ( ca ) ;
75
+
76
+ const messages : string [ ] = [ ] ;
77
+ let caWithParsedCerts = ca . map ( ( pem ) => {
78
+ let parsed : X509Certificate | null = null ;
79
+ try {
80
+ parsed = new X509Certificate ( pem ) ;
81
+ } catch ( err : unknown ) {
82
+ messages . push (
83
+ `Unable to parse certificate: ${
84
+ err && typeof err === 'object' && 'message' in err
85
+ ? String ( err . message )
86
+ : String ( err )
87
+ } `
88
+ ) ;
89
+ }
90
+ return { pem, parsed } ;
91
+ } ) ;
85
92
caWithParsedCerts = caWithParsedCerts . filter ( ( { parsed } ) => {
86
93
const keep =
87
94
! parsed ||
@@ -96,7 +103,9 @@ export function removeCertificatesWithoutIssuer(ca: string[]): {
96
103
}
97
104
return keep ;
98
105
} ) ;
99
- return { ca : caWithParsedCerts . map ( ( { pem } ) => pem ) , messages } ;
106
+ result = { ca : caWithParsedCerts . map ( ( { pem } ) => pem ) , messages } ;
107
+ pemWithParsedCache . set ( ca , result ) ;
108
+ return result ;
100
109
}
101
110
102
111
// Thin wrapper around system-ca, which merges:
0 commit comments