@topcli/spinner
v2.1.2
Published
Asynchronous CLI Spinner. Allow to create and manage simultaneous/multiple spinners at a time.
Downloads
4,381
Readme
Spinner
Asynchronous CLI Spinner. This package has been created to handle simultaneous/multiple spinner at a time. The package has been inspired by Ora but in Asynchronous.
All available spinners are part of cli-spinners package.
Requirements
- Node.js v18 or higher
Getting Started
This package is available in the Node Package Repository and can be easily installed with npm or yarn.
$ npm i @topcli/spinner
# or
$ yarn add @topcli/spinner
Usage example
Create and wait multiple spinner at a time.
import * as timers from "node:timers/promises";
import { Spinner } from "@topcli/spinner";
async function fnWithSpinner(withPrefix, succeed = true) {
const spinner = new Spinner()
.start("Start working!", { withPrefix });
await timers.setTimeout(1000);
spinner.text = "Work in progress...";
await timers.setTimeout(1000);
if (succeed) {
spinner.succeed(`All done in ${spinner.elapsedTime.toFixed(2)}ms !`);
}
else {
spinner.failed("Something wrong happened !");
}
}
await Promise.allSettled([
fnWithSpinner(),
fnWithSpinner("Item 1"),
fnWithSpinner("Item 2", false)
]);
Spinner.reset(); // reset internal count
console.log("All spinners finished!");
If you want to only achieve one Spinner by one Spinner, use it like Ora (it will work)
const spinner = new Spinner().start("Start working!");
await timers.setTimeout(1_000);
spinner.text = "Work in progress...";
await timers.setTimeout(1_000);
spinner.succeed("All done !");
👀 When you are working on a CLI that can be used as an API too, the verbose option allow you to disable the Spinner.
API
Create a new Spinner. The options payload is described by the following TypeScript interface:
export interface ISpinnerOptions {
/**
* Spinner name (from cli-spinners lib)
*
* @default "dots"
*/
name?: cliSpinners.SpinnerName;
/**
* Spinner frame color
*
* @default "white"
*/
color?: string;
/**
* Do not log anything when disabled
*
* @default true
*/
verbose?: boolean;
}
👀 Check cli-spinners for all the spinner name.
new Spinner({ name: "dots2" });
Start the spinner and optionaly write the text passed as first parameter.
The options payload is described by the following TypeScript interface:
export interface IStartOptions {
withPrefix?: string;
}
Stop the spinner in the CLI, write the text passed in param and mark it as succeed with a symbol.
Stop the spinner in the CLI, write the text passed in param and mark it as failed with a symbol.
Contributors ✨
Thanks goes to these wonderful people (emoji key):
License
MIT