@@ -17,12 +17,11 @@ import {
1717} from "@nodesecure/mama" ;
1818import { getNpmRegistryURL } from "@nodesecure/npm-registry-sdk" ;
1919import type Config from "@npmcli/config" ;
20- import semver from "semver" ;
2120
2221// Import Internal Dependencies
2322import {
24- getDependenciesWarnings ,
2523 addMissingVersionFlags ,
24+ getDependenciesWarnings ,
2625 getUsedDeps ,
2726 getManifestLinks ,
2827 NPM_TOKEN
@@ -48,7 +47,7 @@ import type {
4847 Options ,
4948 Payload
5049} from "./types.ts" ;
51- import { parseSemverRange } from "./utils/parseSemverRange .ts" ;
50+ import { HighlightedPackages } from "./extractors/probes/HighlightedPackagesExtractor.class .ts" ;
5251
5352// CONSTANTS
5453const kDefaultDependencyVersionFields = {
@@ -185,7 +184,6 @@ export async function depWalker(
185184 } ;
186185
187186 const dependencies : Map < string , Dependency > = new Map ( ) ;
188- const highlightedPackages : Set < string > = new Set ( ) ;
189187 const identifiersToHighlight = new Set < string > ( options . highlight ?. identifiers ?? [ ] ) ;
190188 const npmTreeWalker = new npm . TreeWalker ( {
191189 registry,
@@ -363,6 +361,7 @@ export async function depWalker(
363361 // We do this because it "seem" impossible to link all dependencies in the first walk.
364362 // Because we are dealing with package only one time it may happen sometimes.
365363 const globalWarnings : GlobalWarning [ ] = [ ] ;
364+ const highlightedPackagesExtractor = new HighlightedPackages ( options . highlight ?. packages ?? { } ) ;
366365 for ( const [ packageName , dependency ] of dependencies ) {
367366 const metadataIntegrities = dependency . metadata ?. integrity ?? { } ;
368367
@@ -388,22 +387,12 @@ export async function depWalker(
388387 } ) ;
389388 }
390389 }
391- const semverRanges = parseSemverRange ( options . highlight ?. packages ?? { } ) ;
392390 for ( const version of Object . entries ( dependency . versions ) ) {
393391 const [ verStr , verDescriptor ] = version as [ string , DependencyVersion ] ;
394- const packageRange = semverRanges ?. [ packageName ] ;
395- const org = parseNpmSpec ( packageName ) ?. org ;
396- const isScopeHighlighted = org !== null && `@${ org } ` in semverRanges ;
397-
398- if (
399- ( packageRange && semver . satisfies ( verStr , packageRange ) ) ||
400- isScopeHighlighted
401- ) {
402- highlightedPackages . add ( `${ packageName } @${ verStr } ` ) ;
403- }
404392 verDescriptor . flags . push (
405393 ...addMissingVersionFlags ( new Set ( verDescriptor . flags ) , dependency )
406394 ) ;
395+ highlightedPackagesExtractor . next ( verStr , verDescriptor , { name : packageName , dependency } ) ;
407396
408397 if ( isLocalManifest ( verDescriptor , mama , packageName ) ) {
409398 const author = mama . author ;
@@ -439,9 +428,10 @@ export async function depWalker(
439428 isRemoteScanning
440429 ) ;
441430 payload . warnings = globalWarnings . concat ( dependencyConfusionWarnings as GlobalWarning [ ] ) . concat ( warnings ) ;
431+ const { highlightedPackages } = highlightedPackagesExtractor . done ( ) ;
442432 payload . highlighted = {
443433 contacts : illuminated ,
444- packages : [ ... highlightedPackages ] ,
434+ packages : highlightedPackages ,
445435 identifiers : extractHighlightedIdentifiers ( collectables , identifiersToHighlight )
446436 } ;
447437 payload . dependencies = Object . fromEntries ( dependencies ) ;
0 commit comments