@@ -26,10 +26,13 @@ async function buildResponse(
2626 options ?: Partial < types . PluginOptions > ,
2727) : Promise < types . PluginResponse > {
2828 const deps = depsAnalysis . depTree . dependencies ;
29- const dockerfilePkgs = dockerfileAnalysis ?. dockerfilePackages ?? { } ;
29+ const dockerfilePkgs =
30+ dockerfileAnalysis ?. dockerfilePackages ||
31+ depsAnalysis . autoDetectedUserInstructions ?. dockerfilePackages ||
32+ { } ;
3033
3134 /** WARNING! Mutates the depTree.dependencies! */
32- annotateLayerIds ( deps , dockerfilePkgs ) ;
35+ annotateWithLayerIds ( deps , dockerfilePkgs ) ;
3336
3437 const finalDeps = excludeBaseImageDeps (
3538 deps ,
@@ -202,17 +205,12 @@ async function buildResponse(
202205 autoDetectedLayers &&
203206 Object . keys ( autoDetectedLayers ) . length > 0
204207 ) {
205- const autoDetectedPackagesWithChildren = mapDepTreeToDockerfilePackages (
206- autoDetectedPackages ,
207- deps ,
208- ) ;
209-
210208 const autoDetectedUserInstructionsFact : facts . AutoDetectedUserInstructionsFact =
211209 {
212210 type : "autoDetectedUserInstructions" ,
213211 data : {
214212 dockerfileLayers : autoDetectedLayers ,
215- dockerfilePackages : autoDetectedPackagesWithChildren ! ,
213+ dockerfilePackages : autoDetectedPackages ! ,
216214 } ,
217215 } ;
218216 additionalFacts . push ( autoDetectedUserInstructionsFact ) ;
@@ -350,51 +348,6 @@ function packageSource(depKey: string): string {
350348 return depKey . split ( "/" ) [ 0 ] ;
351349}
352350
353- function collectTransitiveDepKeys ( pkg : types . DepTreeDep ) : string [ ] {
354- if ( ! pkg . dependencies || Object . keys ( pkg . dependencies ) . length === 0 ) {
355- return [ ] ;
356- }
357- const keys = Object . keys ( pkg . dependencies ) ;
358- const nested : string [ ] = [ ] ;
359- for ( const key of keys ) {
360- const childKeys = collectTransitiveDepKeys ( pkg . dependencies ! [ key ] ) ;
361- for ( const childKey of childKeys ) {
362- nested . push ( childKey ) ;
363- }
364- }
365- return keys . concat ( nested ) ;
366- }
367-
368- // Maps each dependency key (and its transitives) that matches a dockerfile-
369- // installed package to that package's instruction.
370- export function mapDepTreeToDockerfilePackages (
371- dockerfilePkgs : DockerFilePackages ,
372- deps : { [ depName : string ] : types . DepTreeDep } ,
373- ) : DockerFilePackages {
374- if ( ! dockerfilePkgs ) {
375- return { } ;
376- }
377-
378- for ( const rootKey of Object . keys ( deps ) ) {
379- const source = packageSource ( rootKey ) ;
380- const instruction = dockerfilePkgs [ rootKey ] || dockerfilePkgs [ source ] ;
381- if ( ! instruction ) {
382- continue ;
383- }
384-
385- // Ensure the instruction data is stored under the key that matches the
386- // dependency tree.
387- dockerfilePkgs [ rootKey ] = instruction ;
388-
389- const transitiveKeys = collectTransitiveDepKeys ( deps [ rootKey ] ) ;
390- for ( const key of transitiveKeys ) {
391- dockerfilePkgs [ key ] = instruction ;
392- }
393- }
394-
395- return dockerfilePkgs ;
396- }
397-
398351// If excludeBaseImageVulns is true, only retain dependencies that are
399352// dockerfile-introduced, as defined by dockerfilePkgs.
400353function excludeBaseImageDeps (
@@ -419,10 +372,7 @@ function excludeBaseImageDeps(
419372 } , { } ) ;
420373}
421374
422- // Annotates dockerfile-introduced dependencies and sub-dependencies with the
423- // instruction ID. A dependency is identified as dockerfile-introduced if the
424- // dependency key or source was found in a dockerfile installation instruction.
425- function annotateLayerIds (
375+ function annotateWithLayerIds (
426376 deps : { [ depName : string ] : types . DepTreeDep } ,
427377 dockerfilePkgs : DockerFilePackages | undefined ,
428378) : void {
0 commit comments