@@ -190,8 +190,83 @@ function loadConfigVars(
190190
191191 return definitions ;
192192}
193+
194+ /**
195+ * React Compiler logger that tracks compilation statistics
196+ */
197+ class ReactCompilerLogger {
198+ private compiledCount = 0 ;
199+
200+ private skippedCount = 0 ;
201+
202+ private errorCount = 0 ;
203+
204+ private compiledFiles : string [ ] = [ ] ;
205+
206+ private skippedFiles : string [ ] = [ ] ;
207+
208+ private errorFiles : string [ ] = [ ] ;
209+
210+ logEvent (
211+ filename : string | null ,
212+ event : { kind : string ; detail : { options : { category : string } } } ,
213+ ) {
214+ if ( filename === null ) {
215+ return ;
216+ }
217+ switch ( event . kind ) {
218+ case 'CompileSuccess' :
219+ this . compiledCount ++ ;
220+ this . compiledFiles . push ( filename ) ;
221+ console . log ( `✅ Compiled: ${ filename } ` ) ;
222+ break ;
223+ case 'CompileSkip' :
224+ this . skippedCount ++ ;
225+ this . skippedFiles . push ( filename ) ;
226+ break ;
227+ case 'CompileError' :
228+ this . errorCount ++ ;
229+ this . errorFiles . push ( filename ) ;
230+ if ( event . detail ?. options ?. category !== 'Todo' ) {
231+ console . error (
232+ `❌ React Compiler error in ${ filename } : ${ JSON . stringify ( event . detail ?. options ) || 'Unknown error' } ` ,
233+ ) ;
234+ }
235+ break ;
236+ default :
237+ // Ignore other event types
238+ break ;
239+ }
240+ }
241+
242+ getStats ( ) {
243+ return {
244+ compiled : this . compiledCount ,
245+ skipped : this . skippedCount ,
246+ errors : this . errorCount ,
247+ total : this . compiledCount + this . skippedCount + this . errorCount ,
248+ compiledFiles : this . compiledFiles ,
249+ skippedFiles : this . skippedFiles ,
250+ errorFiles : this . errorFiles ,
251+ } ;
252+ }
253+
254+ logSummary ( ) {
255+ const stats = this . getStats ( ) ;
256+ console . log ( '\n📊 React Compiler Statistics:' ) ;
257+ console . log ( ` ✅ Compiled: ${ stats . compiled } files` ) ;
258+ console . log ( ` ⏭️ Skipped: ${ stats . skipped } files` ) ;
259+ console . log ( ` ❌ Errors: ${ stats . errors } files` ) ;
260+ console . log ( ` 📦 Total processed: ${ stats . total } files` ) ;
261+ }
262+ }
263+
264+ // Create a singleton logger instance
265+ const reactCompilerLogger = new ReactCompilerLogger ( ) ;
266+
193267export const reactCompilerOptions = {
194268 target : '17' ,
269+ logger : reactCompilerLogger ,
195270 sources : ( filename ) => {
196271 const excludePatterns = [
197272 '.test.' ,
@@ -212,3 +287,10 @@ export const reactCompilerOptions = {
212287 return true ;
213288 } ,
214289} as const satisfies ReactCompilerLoaderOption ;
290+
291+ /**
292+ * Get the React Compiler logger instance for accessing statistics
293+ */
294+ export function getReactCompilerLogger ( ) : ReactCompilerLogger {
295+ return reactCompilerLogger ;
296+ }
0 commit comments