From 9195369746adc479d354e5d0362c265cc0d9894e Mon Sep 17 00:00:00 2001 From: Yuxuan Zhang Date: Sat, 30 Dec 2023 19:32:02 -0500 Subject: [PATCH] expose updateHandle for subtasks --- src/node/utils/task.ts | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/node/utils/task.ts b/src/node/utils/task.ts index 9ceb247a..1466454b 100644 --- a/src/node/utils/task.ts +++ b/src/node/utils/task.ts @@ -5,7 +5,17 @@ import c from 'picocolors' export const okMark = c.green('✓') export const failMark = c.red('✖') -export type UpdateHandle = (done: number, total?: number) => any +export type UpdateHandle = ( + done?: number, + total?: number, + subtask?: string +) => any + +let updateHandle: UpdateHandle | null = null + +export const updateCurrentTask: UpdateHandle = (...args) => { + updateHandle?.(...args) +} export async function task( taskName: string, @@ -14,14 +24,17 @@ export async function task( const spinner = ora({ discardStdin: false }) spinner.start(taskName + '...') - const updateHandle: UpdateHandle = (done, total) => { - if (total === undefined) { - spinner.text = `${taskName} [ ${done} ]` + updateHandle = (done, total, subtask) => { + const taskFullName = subtask ? `${taskName} - ${subtask}` : taskName + if (done === undefined) { + spinner.text = taskFullName + '...' + } else if (total === undefined) { + spinner.text = `${taskFullName} [ ${done} ]` } else { // match length to display them in same width const _total = `${total}` const _done = `${done}`.padStart(_total.length, ' ') - spinner.text = `${taskName} [ ${_done} / ${_total} ]` + spinner.text = `${taskFullName} [ ${_done} / ${_total} ]` } } @@ -34,6 +47,7 @@ export async function task( success = false throw e } finally { + updateHandle = null const timeEnd = performance.now() const duration = humanizeDuration(timeEnd - timeStart, { maxDecimalPoints: 2