@@ -69,8 +69,28 @@ function listRequiredModules(source) {
6969 } ) ;
7070}
7171
72+ function reportMissingDependencies ( missingDeps ) {
73+ if ( missingDeps . length == 0 ) {
74+ console . log ( chalk . green ( ' no dependency missing from package.json.' ) ) ;
75+ } else {
76+ console . log ( chalk . yellow ( ` ${ missingDeps . length } missing from package.json:` ) ) ;
77+ missingDeps . forEach ( md => console . log ( ` ${ md } ` ) ) ;
78+ exitCode = 1 ;
79+ }
80+ }
81+
82+ function reportExcessiveDependencies ( overDeps ) {
83+ if ( overDeps . length == 0 ) {
84+ console . log ( chalk . green ( ' no excessive dependencies in package.json.' ) ) ;
85+ } else {
86+ console . log ( chalk . yellow ( ` ${ overDeps . length } excessive dependencies in package.json:` ) ) ;
87+ overDeps . forEach ( md => console . log ( ` ${ md } ` ) ) ;
88+ exitCode = 1 ;
89+ }
90+ }
7291
7392let exitCode = 0 ;
93+ const overallDeps = [ ] ;
7494for ( const packageName of Object . keys ( packages ) ) {
7595 console . log ( chalk . green ( `Reading dependencies of "${ packageName } ".` ) ) ;
7696
@@ -92,6 +112,7 @@ for (const packageName of Object.keys(packages)) {
92112 const dependencies = Object . keys ( importMap )
93113 // Filter out the node packages that should not be depended on.
94114 . filter ( x => NODE_PACKAGES . indexOf ( x ) == - 1 ) ;
115+ overallDeps . push ( ...dependencies ) ;
95116
96117 console . log ( chalk . green ( ` found ${ dependencies . length } dependencies...` ) ) ;
97118 const packageJson = JSON . parse ( fs . readFileSync ( packages [ packageName ] . packageJson , 'utf8' ) ) ;
@@ -101,25 +122,30 @@ for (const packageName of Object.keys(packages)) {
101122 . concat ( Object . keys ( packageJson [ 'peerDependencies' ] || { } ) ) ;
102123
103124 const missingDeps = dependencies . filter ( d => allDeps . indexOf ( d ) == - 1 ) ;
104- if ( missingDeps . length == 0 ) {
105- console . log ( chalk . green ( ' no dependency missing from package.json.' ) ) ;
106- } else {
107- console . log ( chalk . yellow ( ` ${ missingDeps . length } missing from package.json:` ) ) ;
108- missingDeps . forEach ( md => console . log ( ` ${ md } ` ) ) ;
109- exitCode = 1 ;
110- }
125+ reportMissingDependencies ( missingDeps ) ;
111126
112127 const overDeps = allDeps . filter ( d => dependencies . indexOf ( d ) == - 1 )
113128 . filter ( x => ANGULAR_PACKAGES . indexOf ( x ) == - 1 ) ;
114- if ( overDeps . length == 0 ) {
115- console . log ( chalk . green ( ' no excessive dependencies in package.json.' ) ) ;
116- } else {
117- console . log ( chalk . yellow ( ` ${ overDeps . length } excessive dependencies in package.json:` ) ) ;
118- overDeps . forEach ( md => console . log ( ` ${ md } ` ) ) ;
119- exitCode = 1 ;
120- }
129+ reportExcessiveDependencies ( overDeps ) ;
121130
122131 console . log ( '' ) ;
123132}
124133
134+ console . log ( chalk . green ( 'Validating root package. [devDependencies ignored]' ) ) ;
135+ const rootPackagePath = path . join ( __dirname , '../../package.json' ) ;
136+ const rootPackageJson = JSON . parse ( fs . readFileSync ( rootPackagePath , 'utf8' ) ) ;
137+ // devDependencies are ignored
138+ const allRootDeps = [ ]
139+ . concat ( Object . keys ( rootPackageJson [ 'dependencies' ] || { } ) )
140+ . concat ( Object . keys ( rootPackageJson [ 'peerDependencies' ] || { } ) ) ;
141+
142+ const internalPackages = Object . keys ( packages ) ;
143+ const missingRootDeps = overallDeps . filter ( d => allRootDeps . indexOf ( d ) == - 1 )
144+ . filter ( d => internalPackages . indexOf ( d ) == - 1 ) ;
145+ reportMissingDependencies ( missingRootDeps ) ;
146+
147+ const overRootDeps = allRootDeps . filter ( d => overallDeps . indexOf ( d ) == - 1 )
148+ . filter ( x => ANGULAR_PACKAGES . indexOf ( x ) == - 1 ) ;
149+ reportExcessiveDependencies ( overRootDeps ) ;
150+
125151process . exit ( exitCode ) ;
0 commit comments