nl_tokens: / * Create reporter for ProgressPlugin ( used with EMIT_STATS )
pl_tokens: function createProgressHandler ( ) { const startTime = Date . now ( ) ; let lastShownBuildingMessageTime = null ; let lastUnshownBuildingMessage = null ; return ( percentage , msg , ... details ) => { const nowTime = Date . now ( ) ; const timeString = ( ( nowTime - startTime ) / 1000 ) . toFixed ( 1 ) + 's' ; const percentageString = ` ${ Math . floor ( percentage * 100 ) } ` ; const detailsString = details . map ( detail => { if ( ! <mask> ) { return '' ; } if ( detail . length > 40 ) { return `  d tail.s u bstr(  d tail.l e ngth - 3  ) } ; } return detail ; } ) . join ( ' ' ) ; const message = ` ${ timeString } ${ percentageString } ${ msg } ${ detailsString } ` ; // There are plenty of 'building' messages that make the log too long for CircleCI web UI. // Let's throttle the 'building' messages to one per second, while always showing the last one. if ( msg === 'building' ) { if ( lastShownBuildingMessageTime && nowTime - lastShownBuildingMessageTime < 1000 ) { // less than 1000ms since last message: ignore, but store for case it's the last one lastUnshownBuildingMessage = message ; return ; } // the message will be shown and its time recorded lastShownBuildingMessageTime = nowTime ; lastUnshownBuildingMessage = null ; } else if ( lastUnshownBuildingMessage ) { // The last 'building' message should always be shown, no matter the timing. // We do that on the first non-'building' message. console . log ( lastUnshownBuildingMessage ) ; // eslint-disable-line no-console lastUnshownBuildingMessage = null ; } console . log ( message ) ; // eslint-disable-line no-console } ; }