@@ -122,35 +122,31 @@ export class AotPlugin implements Tapable {
122
122
) ;
123
123
}
124
124
125
+ // Default exclude to **/*.spec.ts files.
126
+ if ( ! options . hasOwnProperty ( 'exclude' ) ) {
127
+ options [ 'exclude' ] = [ '**/*.spec.ts' ] ;
128
+ }
129
+
130
+ // Add custom excludes to default TypeScript excludes.
131
+ if ( options . hasOwnProperty ( 'exclude' ) ) {
132
+ // If the tsconfig doesn't contain any excludes, we must add the default ones before adding
133
+ // any extra ones (otherwise we'd include all of these which can cause unexpected errors).
134
+ // This is the same logic as present in TypeScript.
135
+ if ( ! tsConfigJson . exclude ) {
136
+ tsConfigJson [ 'exclude' ] = [ 'node_modules' , 'bower_components' , 'jspm_packages' ] ;
137
+ if ( tsConfigJson . compilerOptions && tsConfigJson . compilerOptions . outDir ) {
138
+ tsConfigJson . exclude . push ( tsConfigJson . compilerOptions . outDir ) ;
139
+ }
140
+ }
141
+
142
+ // Join our custom excludes with the existing ones.
143
+ tsConfigJson . exclude = tsConfigJson . exclude . concat ( options . exclude ) ;
144
+ }
145
+
125
146
const tsConfig = ts . parseJsonConfigFileContent (
126
147
tsConfigJson , ts . sys , basePath , null , this . _tsConfigPath ) ;
127
148
128
149
let fileNames = tsConfig . fileNames ;
129
- if ( options . hasOwnProperty ( 'exclude' ) ) {
130
- let exclude : string [ ] = typeof options . exclude == 'string'
131
- ? [ options . exclude as string ] : ( options . exclude as string [ ] ) ;
132
-
133
- exclude . forEach ( ( pattern : string ) => {
134
- const basePathPattern = '(' + basePath . replace ( / \\ / g, '/' )
135
- . replace ( / [ \- \[ \] \/ { } ( ) + ? . \\ ^ $ | * ] / g, '\\$&' ) + ')?' ;
136
- pattern = pattern
137
- // Replace windows path separators with forward slashes.
138
- . replace ( / \\ / g, '/' )
139
- // Escape characters that are used normally in regexes, except stars.
140
- . replace ( / [ \- \[ \] { } ( ) + ? . \\ ^ $ | ] / g, '\\$&' )
141
- // Two stars replacement.
142
- . replace ( / \* \* / g, '(?:.*)' )
143
- // One star replacement.
144
- . replace ( / \* / g, '(?:[^/]*)' )
145
- // Escape characters from the basePath and make sure it's forward slashes.
146
- . replace ( / ^ / , basePathPattern ) ;
147
-
148
- const re = new RegExp ( '^' + pattern + '$' ) ;
149
- fileNames = fileNames . filter ( x => ! x . replace ( / \\ / g, '/' ) . match ( re ) ) ;
150
- } ) ;
151
- } else {
152
- fileNames = fileNames . filter ( fileName => ! / \. s p e c \. t s $ / . test ( fileName ) ) ;
153
- }
154
150
this . _rootFilePath = fileNames ;
155
151
156
152
// Check the genDir. We generate a default gendir that's under basepath; it will generate
0 commit comments