Display multiple simultaneous animated spinners in node terminal applications
npm install twisters
or
yarn add twisters
If you use TypeScript, @types/node
must also be installed:
npm install -D @types/node
or
yarn add -D @types/node
const chalk = require('chalk');
const { Twisters } = require('twisters');
// Create a twisters instance to manage messages
const twisters = new Twisters();
// Add a message (messages are active by default)
twisters.put('a', {
text: 'Hello world!'
});
setTimeout(() => {
// Update the message
twisters.put('a', {
// Text can optionally be styled with any ANSI library
text: chalk.yellow('This text has been updated')
});
}, 2000);
setTimeout(() => {
// Update the message again
twisters.put('a', {
// Spinner is not shown when active is false
active: false,
// Display a yellow prefix before the text
text: `${chalk.yellow('+')} Done (4s)`
});
}, 4000);
The Twisters class constructor takes an optional options
argument. Defaults are used if corresponding values are not defined, which means this:
const { Twisters } = require('twisters');
const twisters = new Twisters();
is equivalent to this:
const {
Twisters,
LineBuffer,
terminalSupportsUnicode,
dots,
dashes
} = require('twisters');
const twisters = new Twisters({
spinner: terminalSupportsUnicode() ? dots : dashes,
flushInactive: true,
pinActive: false,
messageDefaults: {
active: true,
removed: false,
render: (message, frame) => {
const { active, text } = message;
return active && frame ? `${frame} ${text}` : text;
}
},
buffer: new LineBuffer({
EOL: '\n',
disable: !!process.env.CI,
discardStdin: true,
handleSigint: true,
stream: process.stderr,
truncate: true,
wordWrap: false
})
});
See the documentation for details:
Care must be taken with messages that contain tab (\t
) characters.
See tabStop for details.
See the examples-js and examples-ts packages
See README in the repository root