@@ -69,8 +69,28 @@ function listRequiredModules(source) {
69
69
} ) ;
70
70
}
71
71
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
+ }
72
91
73
92
let exitCode = 0 ;
93
+ const overallDeps = [ ] ;
74
94
for ( const packageName of Object . keys ( packages ) ) {
75
95
console . log ( chalk . green ( `Reading dependencies of "${ packageName } ".` ) ) ;
76
96
@@ -92,6 +112,7 @@ for (const packageName of Object.keys(packages)) {
92
112
const dependencies = Object . keys ( importMap )
93
113
// Filter out the node packages that should not be depended on.
94
114
. filter ( x => NODE_PACKAGES . indexOf ( x ) == - 1 ) ;
115
+ overallDeps . push ( ...dependencies ) ;
95
116
96
117
console . log ( chalk . green ( ` found ${ dependencies . length } dependencies...` ) ) ;
97
118
const packageJson = JSON . parse ( fs . readFileSync ( packages [ packageName ] . packageJson , 'utf8' ) ) ;
@@ -101,25 +122,30 @@ for (const packageName of Object.keys(packages)) {
101
122
. concat ( Object . keys ( packageJson [ 'peerDependencies' ] || { } ) ) ;
102
123
103
124
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 ) ;
111
126
112
127
const overDeps = allDeps . filter ( d => dependencies . indexOf ( d ) == - 1 )
113
128
. 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 ) ;
121
130
122
131
console . log ( '' ) ;
123
132
}
124
133
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
+
125
151
process . exit ( exitCode ) ;
0 commit comments