@@ -4,7 +4,8 @@ const fs = require("fs");
44
55const doDebug = false ;
66async function main ( ) {
7- const dependencies = { } ;
7+ const allDependencies = { } ;
8+ const devDependencies = { } ;
89
910 async function exploreModule ( folderPath ) {
1011 const folder = path . basename ( folderPath ) ;
@@ -15,14 +16,23 @@ async function main() {
1516 console . log ( "exploring " , folderPath ) ;
1617 }
1718 const packageJson = JSON . parse ( await fs . promises . readFile ( packageFilename , "utf8" ) ) ;
18- if ( packageJson . dependencies || packageJson . devDependencies ) {
19- const modules = Object . entries ( packageJson . dependencies || [ ] ) . concat (
20- Object . entries ( packageJson . devDependencies || [ ] )
21- ) ;
22- for ( const [ moduleName , version ] of modules ) {
23- dependencies [ moduleName ] = dependencies [ moduleName ] || { } ;
24- dependencies [ moduleName ] [ version ] = dependencies [ moduleName ] [ version ] || [ ] ;
25- dependencies [ moduleName ] [ version ] . push ( folder ) ;
19+ for ( const [ modules , isDevDependencies ] of [
20+ [ packageJson . dependencies ?? { } , false ] ,
21+ [ packageJson . devDependencies ?? { } , true ] ,
22+ ] ) {
23+ const dependencyCollections = [ allDependencies ] ;
24+
25+ // devDependencies are recorded a second time for a redundancy check
26+ if ( isDevDependencies ) {
27+ dependencyCollections . push ( devDependencies ) ;
28+ }
29+
30+ for ( const [ moduleName , version ] of Object . entries ( modules ) ) {
31+ for ( const dependencyCollection of dependencyCollections ) {
32+ dependencyCollection [ moduleName ] ??= { } ;
33+ dependencyCollection [ moduleName ] [ version ] ??= [ ] ;
34+ dependencyCollection [ moduleName ] [ version ] . push ( folder ) ;
35+ }
2636 }
2737 if ( doDebug ) {
2838 console . log ( folder ) ;
@@ -48,22 +58,25 @@ async function main() {
4858
4959 let nbErrors = 0 ;
5060 // finding the packages that are present with multiple versions
51- for ( const [ module , versionPackages ] of Object . entries ( dependencies ) ) {
52- const versions = Object . keys ( versionPackages ) ;
53- if ( versions . length !== 1 ) {
54- console . log ( "Warning module " , module , " has multiple versions " , versions . join ( " " ) ) ;
55- console . log ( versionPackages ) ;
56- nbErrors ++ ;
61+ for ( const collectedDepedencies of [ allDependencies , devDependencies ] ) {
62+ for ( const [ module , versionPackages ] of Object . entries ( collectedDepedencies ) ) {
63+ const versions = Object . keys ( versionPackages ) ;
64+ if ( versions . length !== 1 ) {
65+ console . log ( "Warning module " , module , " has multiple versions " , versions . join ( " " ) ) ;
66+ console . log ( versionPackages ) ;
67+ nbErrors ++ ;
68+ }
5769 }
5870 }
5971 if ( nbErrors > 0 ) {
6072 console . log ( " => Please fix the error above first and rerun" ) ;
6173 process . exit ( 1 ) ;
6274 }
6375
76+ // Check for redundant devDependencies and exit with error if there is a duplicate
6477 const oftenUsedPackages = [ ] ;
6578 const rarelyUsedPackages = [ ] ;
66- for ( const [ module , versionPackages ] of Object . entries ( dependencies ) ) {
79+ for ( const [ module , versionPackages ] of Object . entries ( devDependencies ) ) {
6780 if ( module . match ( / ^ @ n o d e - w o t / ) ) {
6881 continue ;
6982 }
@@ -82,20 +95,16 @@ async function main() {
8295 }
8396 }
8497
85- console . log ( "Good ! the version number of all modules used are all consistent !" ) ;
86-
87- const displayOftenUsedPackages = false ;
88- if ( displayOftenUsedPackages ) {
89- // ---
90- console . log ( "\nSuggestion: now you can manually update the devDependencies section of the main package.json" ) ;
91- console . log (
92- "with the following packages. Those packages are installed more than once in one of the sub modules"
93- ) ;
94-
98+ if ( oftenUsedPackages . length > 0 ) {
99+ console . log ( "The following packages are installed more than once." ) ;
100+ console . log ( "Please move them manually to the devDependencies section of the main package.json." ) ;
95101 console . log ( "-----------\n" ) ;
96102
97103 console . log ( oftenUsedPackages . sort ( ) . join ( "\n" ) ) ;
104+ process . exit ( 1 ) ;
98105 }
106+
107+ console . log ( "Good! The version numbers of all modules used are consistent." ) ;
99108 process . exit ( 0 ) ;
100109}
101110
0 commit comments