11import * as core from '@actions/core' ;
2- import { calculateTotalDependencySizeIncrease } from '../npm.js' ;
2+ import { type ParsedLockFile , traverse } from 'lockparse' ;
3+ import {
4+ calculateTotalDependencySizeIncrease ,
5+ fetchPackageMetadata
6+ } from '../npm.js' ;
37import { formatBytes } from '../common.js' ;
48
59export async function scanForDependencySize (
610 messages : string [ ] ,
711 threshold : number ,
812 currentDeps : Map < string , Set < string > > ,
9- baseDeps : Map < string , Set < string > >
13+ baseDeps : Map < string , Set < string > > ,
14+ currentLockFile : ParsedLockFile
1015) : Promise < void > {
1116 const newVersions : Array < {
1217 name : string ;
@@ -17,6 +22,37 @@ export async function scanForDependencySize(
1722 name : string ;
1823 version : string ;
1924 } > = [ ] ;
25+ const skippedVersions = new Map < string , Set < string > > ( ) ;
26+ const allOptionalVersions = new Map < string , Set < string > > ( ) ;
27+
28+ for ( const pkg of currentLockFile . packages ) {
29+ traverse ( pkg , {
30+ optionalDependency : ( node ) => {
31+ const entry = allOptionalVersions . get ( node . name ) ?? new Set < string > ( ) ;
32+ entry . add ( node . version ) ;
33+ allOptionalVersions . set ( node . name , entry ) ;
34+ }
35+ } ) ;
36+ }
37+
38+ for ( const [ pkg , versions ] of allOptionalVersions ) {
39+ for ( const version of versions ) {
40+ const pkgMeta = await fetchPackageMetadata ( pkg , version ) ;
41+ if (
42+ pkgMeta &&
43+ ( ( pkgMeta . os &&
44+ pkgMeta . os . length > 0 &&
45+ ! pkgMeta . os . includes ( 'linux' ) ) ||
46+ ( pkgMeta . cpu &&
47+ pkgMeta . cpu . length > 0 &&
48+ ! pkgMeta . cpu . includes ( 'x64' ) ) )
49+ ) {
50+ const entry = skippedVersions . get ( pkg ) ?? new Set < string > ( ) ;
51+ entry . add ( version ) ;
52+ skippedVersions . set ( pkg , entry ) ;
53+ }
54+ }
55+ }
2056
2157 for ( const [ packageName , currentVersionSet ] of currentDeps ) {
2258 const baseVersionSet = baseDeps . get ( packageName ) ;
0 commit comments