1
- import kleur from 'kleur' ;
2
1
import {
3
2
Worker ,
4
3
isMainThread ,
@@ -33,42 +32,46 @@ export const run = async <T extends Target>(
33
32
throw new Error ( 'Worker can only be run from the main thread' ) ;
34
33
}
35
34
36
- const worker = new Worker ( __filename , {
37
- workerData : {
38
- target,
39
- data,
40
- } satisfies WorkerData < T > ,
41
- env : {
42
- ...process . env ,
43
- FORCE_COLOR : process . stdout . isTTY ? '1' : '0' ,
44
- } ,
45
- } ) ;
35
+ return new Promise < void > ( ( resolve , reject ) => {
36
+ const worker = new Worker ( __filename , {
37
+ workerData : {
38
+ target,
39
+ data,
40
+ } satisfies WorkerData < T > ,
41
+ env : {
42
+ ...process . env ,
43
+ FORCE_COLOR : process . stdout . isTTY ? '1' : '0' ,
44
+ } ,
45
+ } ) ;
46
46
47
- worker . on ( 'message' , ( message ) => {
48
- switch ( message . type ) {
49
- case 'info' :
50
- report . info ( message . message ) ;
51
- break ;
52
- case 'warn' :
53
- report . warn ( message . message ) ;
54
- break ;
55
- case 'error' :
56
- report . error ( message . message ) ;
57
- break ;
58
- case 'success' :
59
- report . success ( message . message ) ;
60
- break ;
61
- }
62
- } ) ;
47
+ worker . on ( 'message' , ( message ) => {
48
+ switch ( message . type ) {
49
+ case 'info' :
50
+ report . info ( message . message ) ;
51
+ break ;
52
+ case 'warn' :
53
+ report . warn ( message . message ) ;
54
+ break ;
55
+ case 'error' :
56
+ report . error ( message . message ) ;
57
+ break ;
58
+ case 'success' :
59
+ report . success ( message . message ) ;
60
+ break ;
61
+ }
62
+ } ) ;
63
63
64
- worker . on ( 'error' , ( error ) => {
65
- report . error ( error . message ) ;
66
- } ) ;
64
+ worker . on ( 'error' , ( error ) => {
65
+ reject ( error ) ;
66
+ } ) ;
67
67
68
- worker . on ( 'exit' , ( code ) => {
69
- if ( code !== 0 ) {
70
- report . error ( `exited with code ${ kleur . red ( code ) } ` ) ;
71
- }
68
+ worker . on ( 'exit' , ( code ) => {
69
+ if ( code !== 0 ) {
70
+ reject ( new Error ( `Worker exited with code ${ code } ` ) ) ;
71
+ } else {
72
+ resolve ( ) ;
73
+ }
74
+ } ) ;
72
75
} ) ;
73
76
} ;
74
77
@@ -84,10 +87,7 @@ if (!isMainThread) {
84
87
85
88
if ( target in targets ) {
86
89
// @ts -expect-error - typescript doesn't support correlated union types https://github.com/microsoft/TypeScript/issues/30581
87
- targets [ target ] ( { ...data , report } ) . catch ( ( error ) => {
88
- console . log ( error ) ;
89
- process . exit ( 1 ) ;
90
- } ) ;
90
+ targets [ target ] ( { ...data , report } ) ;
91
91
} else {
92
92
throw new Error ( `Unknown target: ${ target } ` ) ;
93
93
}
0 commit comments