@@ -613,31 +613,26 @@ export class AngularCompilerPlugin {
613
613
// - __ng_typecheck__.ts will never be requested.
614
614
const fileExcludeRegExp = / ( \. ( d | n g f a c t o r y | n g s t y l e | n g s u m m a r y ) \. t s | n g _ t y p e c h e c k _ _ \. t s ) $ / ;
615
615
616
- const usedFiles = new Set < string > ( ) ;
617
- for ( const compilationModule of compilation . modules ) {
618
- if ( ! compilationModule . resource ) {
619
- continue ;
616
+ // Start with a set of all the source file names we care about.
617
+ const unusedSourceFileNames = new Set (
618
+ program . getSourceFiles ( )
619
+ . map ( x => this . _compilerHost . denormalizePath ( x . fileName ) )
620
+ . filter ( f => ! ( fileExcludeRegExp . test ( f ) || this . _unusedFiles . has ( f ) ) ) ,
621
+ ) ;
622
+ // This function removes a source file name and all its dependencies from the set.
623
+ const removeSourceFile = ( fileName : string ) => {
624
+ if ( unusedSourceFileNames . has ( fileName ) ) {
625
+ unusedSourceFileNames . delete ( fileName ) ;
626
+ this . getDependencies ( fileName , false ) . forEach ( f => removeSourceFile ( f ) ) ;
620
627
}
628
+ } ;
621
629
622
- usedFiles . add ( forwardSlashPath ( compilationModule . resource ) ) ;
623
-
624
- // We need the below for dependencies which
625
- // are not emitted such as type only TS files
626
- for ( const dependency of compilationModule . buildInfo . fileDependencies ) {
627
- usedFiles . add ( forwardSlashPath ( dependency ) ) ;
628
- }
629
- }
630
-
631
- const sourceFiles = program . getSourceFiles ( ) ;
632
- for ( const { fileName } of sourceFiles ) {
633
- if (
634
- fileExcludeRegExp . test ( fileName )
635
- || usedFiles . has ( fileName )
636
- || this . _unusedFiles . has ( fileName )
637
- ) {
638
- continue ;
639
- }
630
+ // Go over all the modules in the webpack compilation and remove them from the set.
631
+ compilation . modules . forEach ( m => m . resource ? removeSourceFile ( m . resource ) : null ) ;
640
632
633
+ // Anything that remains is unused, because it wasn't referenced directly or transitively
634
+ // on the files in the compilation.
635
+ for ( const fileName of unusedSourceFileNames ) {
641
636
compilation . warnings . push (
642
637
`${ fileName } is part of the TypeScript compilation but it's unused.\n` +
643
638
`Add only entry points to the 'files' or 'include' properties in your tsconfig.` ,
@@ -1207,7 +1202,7 @@ export class AngularCompilerPlugin {
1207
1202
return { outputText, sourceMap, errorDependencies } ;
1208
1203
}
1209
1204
1210
- getDependencies ( fileName : string ) : string [ ] {
1205
+ getDependencies ( fileName : string , includeResources = true ) : string [ ] {
1211
1206
const resolvedFileName = this . _compilerHost . resolve ( fileName ) ;
1212
1207
const sourceFile = this . _compilerHost . getSourceFile ( resolvedFileName , ts . ScriptTarget . Latest ) ;
1213
1208
if ( ! sourceFile ) {
@@ -1241,14 +1236,19 @@ export class AngularCompilerPlugin {
1241
1236
} )
1242
1237
. filter ( x => x ) as string [ ] ;
1243
1238
1244
- const resourceImports = findResources ( sourceFile )
1245
- . map ( resourcePath => resolve ( dirname ( resolvedFileName ) , normalize ( resourcePath ) ) ) ;
1239
+ let resourceImports : string [ ] = [ ] , resourceDependencies : string [ ] = [ ] ;
1240
+ if ( includeResources ) {
1241
+ resourceImports = findResources ( sourceFile )
1242
+ . map ( resourcePath => resolve ( dirname ( resolvedFileName ) , normalize ( resourcePath ) ) ) ;
1243
+ resourceDependencies =
1244
+ this . getResourceDependencies ( this . _compilerHost . denormalizePath ( resolvedFileName ) ) ;
1245
+ }
1246
1246
1247
1247
// These paths are meant to be used by the loader so we must denormalize them.
1248
1248
const uniqueDependencies = new Set ( [
1249
1249
...esImports ,
1250
1250
...resourceImports ,
1251
- ...this . getResourceDependencies ( this . _compilerHost . denormalizePath ( resolvedFileName ) ) ,
1251
+ ...resourceDependencies ,
1252
1252
] . map ( ( p ) => p && this . _compilerHost . denormalizePath ( p ) ) ) ;
1253
1253
1254
1254
return [ ...uniqueDependencies ] ;
0 commit comments