diff options
Diffstat (limited to 'src/util')
-rw-r--r-- | src/util/cli.js | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/util/cli.js b/src/util/cli.js index d28ef40a..cbcbf7cb 100644 --- a/src/util/cli.js +++ b/src/util/cli.js @@ -277,3 +277,35 @@ export function progressPromiseAll(msgOrMsgFn, array) { ) ); } + +export function progressCallAll(msgOrMsgFn, array) { + if (!array.length) { + return []; + } + + const msgFn = + typeof msgOrMsgFn === 'function' ? msgOrMsgFn : () => msgOrMsgFn; + + let done = 0, + total = array.length; + process.stdout.write(`\r${msgFn()} [0/${total}]`); + const start = Date.now(); + const vals = []; + + for (const fn of array) { + const val = fn(); + done++; + const pc = (Math.round((done / total) * 1000) / 10 + '%').padEnd('99.9%'.length, ' '); + if (done === total) { + const time = Date.now() - start; + process.stdout.write( + `\r\x1b[2m${msgFn()} [${pc}] \x1b[0;32mDone! \x1b[0;2m(${time} ms) \x1b[0m\n` + ); + } else { + process.stdout.write(`\r${msgFn()} [${pc}] `); + } + vals.push(val); + } + + return vals; +} |