@@ -25,6 +25,7 @@ const CachedSource = require("webpack-sources").CachedSource;
2525const Stats = require ( "./Stats" ) ;
2626const Semaphore = require ( "./util/Semaphore" ) ;
2727const Queue = require ( "./util/Queue" ) ;
28+ const SortableSet = require ( "./util/SortableSet" ) ;
2829
2930function byId ( a , b ) {
3031 if ( a . id < b . id ) return - 1 ;
@@ -47,6 +48,12 @@ function iterationOfArrayCallback(arr, fn) {
4748 }
4849}
4950
51+ function addAllToSet ( set , otherSet ) {
52+ for ( const item of otherSet ) {
53+ set . add ( item ) ;
54+ }
55+ }
56+
5057class Compilation extends Tapable {
5158 constructor ( compiler ) {
5259 super ( ) ;
@@ -1254,55 +1261,38 @@ class Compilation extends Tapable {
12541261 }
12551262
12561263 summarizeDependencies ( ) {
1257- function filterDups ( array ) {
1258- const newArray = [ ] ;
1259- for ( let i = 0 ; i < array . length ; i ++ ) {
1260- if ( i === 0 || array [ i - 1 ] !== array [ i ] )
1261- newArray . push ( array [ i ] ) ;
1262- }
1263- return newArray ;
1264- }
1265- this . fileDependencies = ( this . compilationDependencies || [ ] ) . slice ( ) ;
1266- this . contextDependencies = [ ] ;
1267- this . missingDependencies = [ ] ;
1264+ this . fileDependencies = new SortableSet ( this . compilationDependencies ) ;
1265+ this . contextDependencies = new SortableSet ( ) ;
1266+ this . missingDependencies = new SortableSet ( ) ;
12681267
12691268 const children = this . children ;
12701269 for ( let indexChildren = 0 ; indexChildren < children . length ; indexChildren ++ ) {
12711270 const child = children [ indexChildren ] ;
12721271
1273- this . fileDependencies = this . fileDependencies . concat ( child . fileDependencies ) ;
1274- this . contextDependencies = this . contextDependencies . concat ( child . contextDependencies ) ;
1275- this . missingDependencies = this . missingDependencies . concat ( child . missingDependencies ) ;
1272+ addAllToSet ( this . fileDependencies , child . fileDependencies ) ;
1273+ addAllToSet ( this . contextDependencies , child . contextDependencies ) ;
1274+ addAllToSet ( this . missingDependencies , child . missingDependencies ) ;
12761275 }
12771276
12781277 const modules = this . modules ;
12791278 for ( let indexModule = 0 ; indexModule < modules . length ; indexModule ++ ) {
12801279 const module = modules [ indexModule ] ;
12811280
12821281 if ( module . fileDependencies ) {
1283- const fileDependencies = module . fileDependencies ;
1284- for ( let indexFileDep = 0 ; indexFileDep < fileDependencies . length ; indexFileDep ++ ) {
1285- this . fileDependencies . push ( fileDependencies [ indexFileDep ] ) ;
1286- }
1282+ addAllToSet ( this . fileDependencies , module . fileDependencies ) ;
12871283 }
12881284 if ( module . contextDependencies ) {
1289- const contextDependencies = module . contextDependencies ;
1290- for ( let indexContextDep = 0 ; indexContextDep < contextDependencies . length ; indexContextDep ++ ) {
1291- this . contextDependencies . push ( contextDependencies [ indexContextDep ] ) ;
1292- }
1285+ addAllToSet ( this . contextDependencies , module . contextDependencies ) ;
12931286 }
12941287 }
12951288 this . errors . forEach ( error => {
1296- if ( Array . isArray ( error . missing ) ) {
1297- error . missing . forEach ( item => this . missingDependencies . push ( item ) ) ;
1289+ if ( typeof error . missing === "object" && error . missing && error . missing [ Symbol . iterator ] ) {
1290+ addAllToSet ( this . missingDependencies , error . missing ) ;
12981291 }
12991292 } ) ;
13001293 this . fileDependencies . sort ( ) ;
1301- this . fileDependencies = filterDups ( this . fileDependencies ) ;
13021294 this . contextDependencies . sort ( ) ;
1303- this . contextDependencies = filterDups ( this . contextDependencies ) ;
13041295 this . missingDependencies . sort ( ) ;
1305- this . missingDependencies = filterDups ( this . missingDependencies ) ;
13061296 }
13071297
13081298 createHash ( ) {
0 commit comments