Fallback Condition
There are times other than non-TTY environments when you want to fallback to a fallback/silent renderer than the selected renderer.
A function that returns a boolean , or directly a boolean can be passed to Listr for automatically stepping down to the fallbackRenderer or directly to SilentRenderer when the condition is met.
Behavior
TTY or non-TTY Environment
fallbackRenderer will be automatically used whenever you are in a non-TTY environment.
- You can force to use TTY environment via Listr option
forceTTYor set the environment variableLISTR_FORCE_TTY=1.
Coloring
colorette is used as the underlying coloring library. Colors are disabled automatically by underlying the library whenever it is detected as not supported.
- You can set the environment variable
FORCE_COLOR=1to force colors. - You can set the environment variable
NO_COLOR=1to disable colors completely even though your environment supports it. This is very useful for tests.
Unicode
Unicode characters like icons are not used whenever it is detected that your output does not support them.
- You can use the
forceUnicodeoption on Listr or set the environment variableLISTR_FORCE_UNICODE=1to force the usage of the Unicode characters.
WARNING
These checks are primal at best but do not forget that in many cases, your terminal might support any of these UI properties, but the application in between might abstract access to them therefore it can be detected otherwise.
Usage
Example
You can find the related examples here.
Renderer Fallback
You can use the fallbackRendererCondition condition on Listr to determine changing your renderer to the fallback renderer.
import { delay, Listr } from 'listr2'
const tasks = new Listr(
[
{
title: 'This task will execute.',
task: async(ctx, task): Promise<void> => {
task.output = 'test'
await delay(500)
},
rendererOptions: { persistentOutput: true }
}
],
{ concurrent: false, fallbackRendererCondition: (): boolean => 3 < 1 }
)
await tasks.run()Silent Renderer Fallback
You can use the silentRendererCondition condition on Listr to determine changing your renderer to the fallback renderer.
import { delay, Listr } from 'listr2'
const tasks = new Listr(
[
{
title: 'This task will execute.',
task: async(ctx, task): Promise<void> => {
task.output = 'test'
await delay(500)
},
rendererOptions: { persistentOutput: true }
}
],
{ concurrent: false, silentRendererCondition: (): boolean => 3 < 1 }
)
await tasks.run()