@@ -42,7 +42,7 @@ class VerifySignatures {
4242 }
4343
4444 // Prefetch and cache public keys from used registries
45- const registries = this . findAllRegistryUrls ( this . edges , this . npm . flatOptions )
45+ const registries = this . findAllRegistryUrls ( this . edges )
4646 for ( const registry of registries ) {
4747 const keys = await this . getKeys ( { registry } )
4848 if ( keys ) {
@@ -122,15 +122,15 @@ class VerifySignatures {
122122 }
123123 }
124124
125- findAllRegistryUrls ( edges , opts ) {
125+ findAllRegistryUrls ( edges ) {
126126 return new Set ( Array . from ( edges , ( edge ) => {
127127 let alias = false
128128 try {
129129 alias = npa ( edge . spec ) . subSpec
130130 } catch ( err ) {
131131 }
132132 const spec = npa ( alias ? alias . name : edge . name )
133- return fetch . pickRegistry ( spec , opts )
133+ return this . getSpecRegistry ( spec )
134134 } ) )
135135 }
136136
@@ -176,35 +176,63 @@ class VerifySignatures {
176176 } )
177177 }
178178
179- async getVerifiedInfo ( edge ) {
179+ getEdgeType ( edge ) {
180+ return edge . optional ? 'optionalDependencies'
181+ : edge . peer ? 'peerDependencies'
182+ : edge . dev ? 'devDependencies'
183+ : 'dependencies'
184+ }
185+
186+ getEdgeSpec ( edge ) {
180187 let alias = false
181188 try {
182189 alias = npa ( edge . spec ) . subSpec
183190 } catch ( err ) {
184191 }
185- const spec = npa ( alias ? alias . name : edge . name )
186- const node = edge . to || edge
187- const { location } = node
188- const { version } = node . package || { }
189-
190- const type = edge . optional ? 'optionalDependencies'
191- : edge . peer ? 'peerDependencies'
192- : edge . dev ? 'devDependencies'
193- : 'dependencies'
194-
195- // Skip local workspaces
196- if ( node . isWorkspace ) {
192+ let spec
193+ try {
194+ spec = npa ( `${ alias ? alias . name : edge . name } @${ edge . spec } ` )
195+ } catch ( _ ) {
196+ // Skip packages with invalid spec
197197 return
198198 }
199+ return spec
200+ }
201+
202+ buildRegistryConfig ( registry ) {
203+ const keys = this . keys . get ( registry ) || [ ]
204+ const registryConfig = { }
205+ const parsedRegistry = new URL ( registry )
206+ const regKey = `//${ parsedRegistry . host } ${ parsedRegistry . pathname } `
207+ registryConfig [ `${ regKey } :_keys` ] = keys
208+ return registryConfig
209+ }
199210
211+ getSpecRegistry ( spec ) {
212+ return fetch . pickRegistry ( spec , this . npm . flatOptions )
213+ }
214+
215+ async getVerifiedInfo ( edge ) {
216+ const type = this . getEdgeType ( edge )
200217 // Skip potentially optional packages that are not on disk, as these could
201218 // be omitted during install
202219 if ( edge . error === 'MISSING' && type !== 'dependencies' ) {
203220 return
204221 }
205222
206- // Skip packages that don't have a installed version, e.g. optonal dependencies
207- if ( ! version ) {
223+ const spec = this . getEdgeSpec ( edge )
224+ // Skip invalid spec's
225+ if ( ! spec ) {
226+ return
227+ }
228+ const node = edge . to || edge
229+ const { location } = node
230+ const name = spec . name
231+ const { version } = node . package || { }
232+
233+ if ( node . isWorkspace || // Skip local workspaces packages
234+ ! version || // Skip packages that don't have a installed version, e.g. optonal dependencies
235+ ! spec . registry ) { // Skip if not from registry, e.g. git package
208236 return
209237 }
210238
@@ -214,32 +242,16 @@ class VerifySignatures {
214242 }
215243 }
216244
217- // Skip if the package is not in a registry, e.g. git or local workspace package
218- try {
219- if ( ! npa ( `${ alias ? alias . name : edge . name } @${ edge . spec } ` ) . registry ) {
220- return null
221- }
222- } catch ( err ) {
223- return null
224- }
225-
226245 this . audited += 1
227- const name = spec . name
228-
229- const registry = fetch . pickRegistry ( spec , this . npm . flatOptions )
230- const keys = this . keys . get ( registry ) || [ ]
231246
247+ const registry = this . getSpecRegistry ( spec )
232248 try {
233- const registryConfig = { }
234- const parsedRegistry = new URL ( registry )
235- const regKey = `//${ parsedRegistry . host } ${ parsedRegistry . pathname } `
236- registryConfig [ `${ regKey } :_keys` ] = keys
237249 const {
238250 _integrity : integrity ,
239251 _signatures,
240252 _resolved : resolved ,
241253 } = await pacote . manifest ( `${ name } @${ version } ` , {
242- verifySignatures : true , ...registryConfig , ...this . npm . flatOptions ,
254+ verifySignatures : true , ...this . buildRegistryConfig ( registry ) , ...this . npm . flatOptions ,
243255 } )
244256 const signatures = _signatures || [ ]
245257
0 commit comments