11export type RecurseFunction = ( progressPrefix : string , inner : ( recurse : RecurseFunction ) => Promise < void > ) => Promise < void > ;
22
3- export function createRecurse ( ) : RecurseFunction {
3+ export type CollectedError = {
4+ context : string ,
5+ error : unknown ,
6+ } ;
7+
8+ export function createRecurse ( options : { noBail : boolean } ) : { recurse : RecurseFunction , collectedErrors : CollectedError [ ] } {
49 let lastProgress = performance . now ( ) - 9999999999 ;
10+ const collectedErrors : CollectedError [ ] = [ ] ;
511
612 const _recurse = async (
713 progressPrefix : string | ( ( ...args : any [ ] ) => void ) ,
814 inner : Parameters < RecurseFunction > [ 1 ] ,
15+ contextPath : string = "" ,
916 ) : Promise < void > => {
1017 const progressFunc = typeof progressPrefix === "function" ? progressPrefix : ( ...args : any [ ] ) => {
1118 console . log ( `${ progressPrefix } ` , ...args ) ;
1219 } ;
20+ const currentContext = typeof progressPrefix === "string" ? progressPrefix : contextPath ;
1321 if ( performance . now ( ) - lastProgress > 1000 ) {
1422 progressFunc ( ) ;
1523 lastProgress = performance . now ( ) ;
@@ -19,14 +27,24 @@ export function createRecurse(): RecurseFunction {
1927 ( progressPrefix , inner ) => _recurse (
2028 ( ...args ) => progressFunc ( progressPrefix , ...args ) ,
2129 inner ,
30+ `${ currentContext } > ${ typeof progressPrefix === "string" ? progressPrefix : "" } ` ,
2231 ) ,
2332 ) ;
2433 } catch ( error ) {
2534 progressFunc ( `\x1b[41mERROR\x1b[0m!` ) ;
26- throw error ;
35+ if ( options . noBail ) {
36+ collectedErrors . push ( {
37+ context : currentContext ,
38+ error,
39+ } ) ;
40+ } else {
41+ throw error ;
42+ }
2743 }
2844 } ;
2945
30- return _recurse ;
46+ const recurse : RecurseFunction = ( progressPrefix , inner ) => _recurse ( progressPrefix , inner , progressPrefix ) ;
47+
48+ return { recurse, collectedErrors } ;
3149}
3250
0 commit comments