11import { parentPort } from 'node:worker_threads' ;
22
3- import type { Compilation } from 'webpack' ;
4- import type { FederationConfig } from '../models' ;
3+ import type { FederationConfig , LogLevel } from '../models' ;
54import { type CompileTypesParams , compileTypes } from './compileTypes' ;
65import { rewritePathsWithExposedFederatedModules } from './rewritePathsWithExposedFederatedModules' ;
7- import { sendLog , workerLogger } from './workerLogger' ;
8-
9- export type LogLevel = keyof Pick <
10- Compilation [ 'logger' ] ,
11- 'log' | 'info' | 'warn' | 'error' | 'debug'
12- > ;
6+ import { workerLogger } from './workerLogger' ;
137
148type CompileTypesWorkerResultMessageError = {
159 status : 'error' ;
@@ -20,36 +14,48 @@ export type CompileTypesWorkerMessage = CompileTypesParams & {
2014 federationConfig : FederationConfig ;
2115} ;
2216
17+ export type ExitMessage = {
18+ type : 'exit' ;
19+ } ;
20+
2321export type CompileTypesWorkerResultMessage =
2422 | { status : 'success' }
2523 | { status : 'failure' }
2624 | CompileTypesWorkerResultMessageError
2725 | { status : 'log' ; level : LogLevel ; message : string } ;
2826
29- parentPort ?. on ( 'message' , ( { federationConfig, ...params } : CompileTypesWorkerMessage ) => {
27+ parentPort ?. on ( 'message' , ( message : CompileTypesWorkerMessage | ExitMessage ) => {
28+ if ( ( message as ExitMessage ) . type === 'exit' ) {
29+ workerLogger . log ( 'Exiting by request' ) ;
30+ process . exit ( 0 ) ;
31+ }
32+
33+ const { federationConfig, ...params } = message as CompileTypesWorkerMessage ;
34+
3035 try {
31- let startTime = performance . now ( ) ;
36+ const startTime = performance . now ( ) ;
3237 const { isSuccess, typeDefinitions } = compileTypes ( params , workerLogger ) ;
3338
3439 if ( isSuccess ) {
35- let endTime = performance . now ( ) ;
36- let timeTakenInSeconds = ( endTime - startTime ) / 1000 ;
37- sendLog ( 'log' , `Types compilation completed in ${ timeTakenInSeconds . toFixed ( 2 ) } seconds` ) ;
40+ const timeTakenInSeconds = ( ( performance . now ( ) - startTime ) / 1000 ) . toFixed ( 2 ) ;
41+ workerLogger . log ( `Types compilation completed in ${ timeTakenInSeconds } seconds` ) ;
3842
39- sendLog (
40- 'log' ,
43+ workerLogger . log (
4144 `Replacing paths with names of exposed federate modules in typings file: ${ params . outFile } ` ,
4245 ) ;
43- startTime = performance . now ( ) ;
46+ const rewriteStartTime = performance . now ( ) ;
4447 rewritePathsWithExposedFederatedModules (
4548 federationConfig ,
4649 params . outFile ,
4750 typeDefinitions ,
4851 workerLogger ,
4952 ) ;
50- endTime = performance . now ( ) ;
51- timeTakenInSeconds = ( endTime - startTime ) / 1000 ;
52- sendLog ( 'log' , `Typings file rewritten in ${ timeTakenInSeconds . toFixed ( 2 ) } seconds` ) ;
53+ const rewriteTimeTakenInSeconds = ( ( performance . now ( ) - rewriteStartTime ) / 1000 ) . toFixed ( 2 ) ;
54+ workerLogger . log ( `Typings file rewritten in ${ rewriteTimeTakenInSeconds } seconds` ) ;
55+
56+ workerLogger . info (
57+ `Types compilation and modification completed in ${ timeTakenInSeconds } + ${ rewriteTimeTakenInSeconds } seconds` ,
58+ ) ;
5359
5460 parentPort ?. postMessage ( { status : 'success' } satisfies CompileTypesWorkerResultMessage ) ;
5561 } else {
0 commit comments