@@ -3,17 +3,18 @@ import type { PackageJson } from 'type-fest';
33import { getPackageJsonPaths } from './workspace.js' ;
44import semver from 'semver' ;
55import editJsonFile from 'edit-json-file' ;
6+ import { dirname , relative } from 'node:path' ;
67
78export type DependenciesToVersionsSeen = Map <
89 string ,
9- { title : string ; version : string } [ ]
10+ { packageName : string ; version : string } [ ]
1011> ;
1112
1213export type MismatchingDependencyVersions = Array < {
1314 dependency : string ;
1415 versions : {
1516 version : string ;
16- count : number ;
17+ packages : string [ ] ;
1718 } [ ] ;
1819} > ;
1920
@@ -24,12 +25,12 @@ export type MismatchingDependencyVersions = Array<{
2425 *
2526 * {
2627 * 'ember-cli': [
27- * { title : '@scope /package1/package.json ', version: '~3.18.0' },
28- * { title : '@scope/package2/package.json ', version: '~3.18.0' }
28+ * { packageName : '@scope /package1', version: '~3.18.0' },
29+ * { packageName : '@scope/package2', version: '~3.18.0' }
2930 * ]
3031 * 'eslint': [
31- * { title : '@scope/package1/package.json ', version: '^7.0.0' },
32- * { title : '@scope/package2/package.json ', version: '^7.0.0' }
32+ * { packageName : '@scope/package1', version: '^7.0.0' },
33+ * { packageName : '@scope/package2', version: '^7.0.0' }
3334 * ]
3435 * }
3536 */
@@ -38,7 +39,7 @@ export function calculateVersionsForEachDependency(
3839) : DependenciesToVersionsSeen {
3940 const dependenciesToVersionsSeen : DependenciesToVersionsSeen = new Map <
4041 string ,
41- { title : string ; version : string } [ ]
42+ { packageName : string ; version : string } [ ]
4243 > ( ) ;
4344 getPackageJsonPaths ( root ) . forEach ( ( packageJsonPath ) =>
4445 recordDependencyVersionsForPackageJson (
@@ -60,7 +61,7 @@ function recordDependencyVersionsForPackageJson(
6061 return ;
6162 }
6263
63- const title = packageJsonPath . replace ( ` ${ root } /` , '' ) ;
64+ const packageName = dirname ( relative ( root , packageJsonPath ) ) ;
6465 const packageJson : PackageJson = JSON . parse (
6566 readFileSync ( packageJsonPath , 'utf-8' )
6667 ) ;
@@ -72,7 +73,7 @@ function recordDependencyVersionsForPackageJson(
7273 recordDependencyVersion (
7374 dependenciesToVersionsSeen ,
7475 dependency ,
75- title ,
76+ packageName ,
7677 dependencyVersion
7778 ) ;
7879 }
@@ -85,7 +86,7 @@ function recordDependencyVersionsForPackageJson(
8586 recordDependencyVersion (
8687 dependenciesToVersionsSeen ,
8788 dependency ,
88- title ,
89+ packageName ,
8990 dependencyVersion
9091 ) ;
9192 }
@@ -95,7 +96,7 @@ function recordDependencyVersionsForPackageJson(
9596function recordDependencyVersion (
9697 dependenciesToVersionsSeen : DependenciesToVersionsSeen ,
9798 dependency : string ,
98- title : string ,
99+ packageName : string ,
99100 version : string
100101) {
101102 if ( ! dependenciesToVersionsSeen . has ( dependency ) ) {
@@ -105,7 +106,7 @@ function recordDependencyVersion(
105106 /* istanbul ignore if */
106107 if ( list ) {
107108 // `list` should always exist at this point, this if statement is just to please TypeScript.
108- list . push ( { title , version } ) ;
109+ list . push ( { packageName , version } ) ;
109110 }
110111}
111112
@@ -125,13 +126,18 @@ export function calculateMismatchingVersions(
125126 const uniqueVersions = [
126127 ...new Set ( versionList . map ( ( obj ) => obj . version ) ) ,
127128 ] . sort ( ) ;
128- const uniqueVersionsWithCounts = uniqueVersions . map ( ( uniqueVersion ) => ( {
129- version : uniqueVersion ,
130- count : versionList . filter ( ( obj ) => obj . version === uniqueVersion )
131- . length ,
132- } ) ) ;
129+
133130 if ( uniqueVersions . length > 1 ) {
134- return { dependency, versions : uniqueVersionsWithCounts } ;
131+ const uniqueVersionsWithInfo = uniqueVersions . map ( ( uniqueVersion ) => {
132+ const matchingVersions = versionList . filter (
133+ ( obj ) => obj . version === uniqueVersion
134+ ) ;
135+ return {
136+ version : uniqueVersion ,
137+ packages : matchingVersions . map ( ( obj ) => obj . packageName ) . sort ( ) ,
138+ } ;
139+ } ) ;
140+ return { dependency, versions : uniqueVersionsWithInfo } ;
135141 }
136142
137143 return undefined ;
@@ -170,9 +176,7 @@ export function fixMismatchingVersions(
170176 // Return any mismatching versions that are still present after attempting fixes.
171177 return mismatchingVersions
172178 . map ( ( mismatchingVersion ) => {
173- const versions = mismatchingVersion . versions . map (
174- ( versionAndCount ) => versionAndCount . version
175- ) ;
179+ const versions = mismatchingVersion . versions . map ( ( obj ) => obj . version ) ;
176180 let sortedVersions ;
177181 try {
178182 sortedVersions = versions . sort ( compareRanges ) ;
0 commit comments