@@ -15,7 +15,8 @@ var Console = require('console').Console;
15
15
var semver = require ( 'semver' )
16
16
require ( 'colors' ) ;
17
17
18
- const console = new Console ( process . stderr ) ;
18
+ const stderrConsole = new Console ( process . stderr ) ;
19
+ const stdoutConsole = new Console ( process . stdout ) ;
19
20
20
21
var pushArray = function ( arr , toPush ) {
21
22
Array . prototype . splice . apply ( arr , [ 0 , 0 ] . concat ( toPush ) ) ;
@@ -25,8 +26,16 @@ function hasOwnProperty(obj, property) {
25
26
return Object . prototype . hasOwnProperty . call ( obj , property )
26
27
}
27
28
29
+ enum LogLevel {
30
+ INFO = 1 ,
31
+ WARN = 2 ,
32
+ ERROR = 3
33
+ }
34
+
28
35
interface LoaderOptions {
29
36
silent : boolean ;
37
+ logLevel : string ;
38
+ logInfoToStdOut : boolean ;
30
39
instance : string ;
31
40
compiler : string ;
32
41
configFileName : string ;
@@ -149,8 +158,34 @@ function findConfigFile(compiler: typeof typescript, searchPath: string, configF
149
158
function ensureTypeScriptInstance ( loaderOptions : LoaderOptions , loader : any ) : { instance ?: TSInstance , error ?: WebpackError } {
150
159
151
160
function log ( ...messages : string [ ] ) : void {
161
+ logToConsole ( stdoutConsole , messages ) ;
162
+ }
163
+
164
+ function logToConsole ( logConsole :any , messages : string [ ] ) : void {
152
165
if ( ! loaderOptions . silent ) {
153
- console . log . apply ( console , messages ) ;
166
+ console . log . apply ( logConsole , messages ) ;
167
+ }
168
+ }
169
+
170
+ function logInfo ( ...messages : string [ ] ) : void {
171
+ if ( LogLevel [ loaderOptions . logLevel ] <= LogLevel . INFO ) {
172
+ if ( loaderOptions . logInfoToStdOut ) {
173
+ logToConsole ( stdoutConsole , messages ) ;
174
+ } else {
175
+ logToConsole ( stderrConsole , messages ) ;
176
+ }
177
+ }
178
+ }
179
+
180
+ function logError ( ...messages : string [ ] ) : void {
181
+ if ( LogLevel [ loaderOptions . logLevel ] <= LogLevel . ERROR ) {
182
+ logToConsole ( stderrConsole , messages ) ;
183
+ }
184
+ }
185
+
186
+ function logWarning ( ...messages : string [ ] ) : void {
187
+ if ( LogLevel [ loaderOptions . logLevel ] <= LogLevel . WARN ) {
188
+ logToConsole ( stderrConsole , messages ) ;
154
189
}
155
190
}
156
191
@@ -180,11 +215,11 @@ function ensureTypeScriptInstance(loaderOptions: LoaderOptions, loader: any): {
180
215
compilerCompatible = true ;
181
216
}
182
217
else {
183
- log ( `${ motd } . This version is incompatible with ts-loader. Please upgrade to the latest version of TypeScript.` . red ) ;
218
+ logError ( `${ motd } . This version is incompatible with ts-loader. Please upgrade to the latest version of TypeScript.` . red ) ;
184
219
}
185
220
}
186
221
else {
187
- log ( `${ motd } . This version may or may not be compatible with ts-loader.` . yellow ) ;
222
+ logWarning ( `${ motd } . This version may or may not be compatible with ts-loader.` . yellow ) ;
188
223
}
189
224
190
225
var files = < TSFiles > { } ;
@@ -211,8 +246,8 @@ function ensureTypeScriptInstance(loaderOptions: LoaderOptions, loader: any): {
211
246
error ?: typescript . Diagnostic ;
212
247
} ;
213
248
if ( configFilePath ) {
214
- if ( compilerCompatible ) log ( `${ motd } and ${ configFilePath } ` . green )
215
- else log ( `ts-loader: Using config file at ${ configFilePath } ` . green )
249
+ if ( compilerCompatible ) logInfo ( `${ motd } and ${ configFilePath } ` . green )
250
+ else logInfo ( `ts-loader: Using config file at ${ configFilePath } ` . green )
216
251
217
252
// HACK: relies on the fact that passing an extra argument won't break
218
253
// the old API that has a single parameter
@@ -227,7 +262,7 @@ function ensureTypeScriptInstance(loaderOptions: LoaderOptions, loader: any): {
227
262
}
228
263
}
229
264
else {
230
- if ( compilerCompatible ) log ( motd . green )
265
+ if ( compilerCompatible ) logInfo ( motd . green )
231
266
232
267
configFile = {
233
268
config : {
@@ -556,13 +591,16 @@ function loader(contents) {
556
591
557
592
var options = objectAssign < LoaderOptions > ( { } , {
558
593
silent : false ,
594
+ logLevel : 'INFO' ,
595
+ logInfoToStdOut : false ,
559
596
instance : 'default' ,
560
597
compiler : 'typescript' ,
561
598
configFileName : 'tsconfig.json' ,
562
599
transpileOnly : false ,
563
600
compilerOptions : { }
564
601
} , configFileOptions , queryOptions ) ;
565
602
options . ignoreDiagnostics = arrify ( options . ignoreDiagnostics ) . map ( Number ) ;
603
+ options . logLevel = options . logLevel . toUpperCase ( ) ;
566
604
567
605
// differentiate the TypeScript instance based on the webpack instance
568
606
var webpackIndex = webpackInstances . indexOf ( this . _compiler ) ;
0 commit comments