New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@slimio/async-cli-spinner

Package Overview
Dependencies
Maintainers
4
Versions
15
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@slimio/async-cli-spinner

Asynchronous CLI Spinner. Allow to create and manage simultaneous/multiple spinners at a time.

  • 0.5.2
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
47
decreased by-39.74%
Maintainers
4
Weekly downloads
 
Created
Source

Async-cli-spinner

version Maintenance MIT dep size Known Vulnerabilities Build Status Greenkeeper badge

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 v12 or higher

Getting Started

This package is available in the Node Package Repository and can be easily installed with npm or yarn.

$ npm i @slimio/async-cli-spinner
# or
$ yarn add @slimio/async-cli-spinner

Usage example

Create and wait multiple spinner at a time.

const { promisify } = require("util");
const Spinner = require("@slimio/async-cli-spinner");

const sleep = promisify(setTimeout);

async function fnWithSpinner(prefixText, succeed = true) {
    const spinner = new Spinner({ prefixText }).start("Start working!");

    await sleep(1000);
    spinner.text = "Work in progress...";
    await sleep(1000);

    if (succeed) {
        spinner.succeed(`All done in ${spinner.elapsedTime.toFixed(2)}ms !`);
    }
    else {
        spinner.failed("Something wrong happened !");
    }
}

Spinner.startAll([
    fnWithSpinner,
    Spinner.create(fnWithSpinner),
    Spinner.create(fnWithSpinner, "Item 1"),
    Spinner.create(fnWithSpinner, "Item 2", false)
])
.then(() => console.log("All spinners finished!"))
.catch(console.error);

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 sleep(1000);
spinner.text = "Work in progress...";

await sleep(1000);
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

Spinner line structure : ${spinner} ${prefixText} - ${text}

Properties :

declare namespace Spinner {
    public spinner: cliSpinners.Spinner;
    public prefixText: string;
    public text: string;
    public color: string;
    public started: boolean;
    public startTime: number;
    public stream: TTY.WriteStream;
    public readonly elapsedTime: number;
}
  • spinner: spinner type (default: "dots")
  • prefixText: mostly used to differentiate each spinner
  • text: you can change text at any moment.
  • color: spinner color
  • elapsedTime: time elapsed since start() call
constructor(options?: Spinner.options)

Create a new Spinner object. options is described by the following TypeScript interface:

declare namespace Spinner {
    interface spinnerObj {
        frames: string[];
        interval: number;
    }

    interface options {
        spinner: SpinnerObj | Spinner.spinners;
        text: string;
        prefixText: string;
        color: string;
        verbose: boolean;
    }
}

👀 Look cli-spinners for all kind of available spinners.

Example:

const Spinner = require("@slimio/async-cli-spinner");

const spinner = new Spinner();
const dotsSpinner = new Spinner({ spinner: "dots" });
static startAll(functions: Spinner.Handler[], options?: Spinner.startOpt): Promise<any[]>
Start all functions with spinners passed in array.

⚠️ Only accept functions that return a Promise.

Options is described by the following TypeScript interface:

declare namespace Spinner {
    type RecapSet = "none" | "error" | "always";

    interface startOpt {
        recap: RecapSet;
        rejects: boolean;
    }
}

Default recap : always

static create(fn: Spinner.Handler, args?: any): Function|[Function, ...any]
This method allow to pass arguments to our spinner function. This method prevent execute function to earlier.
async function fnWithSpinner(prefixText) {
    const spinner = new Spinner({ prefixText }).start("Start working!");

    await new Promise((resolve) => setTimeout(resolve, 1000));
    spinner.text = "Work in progress...";

    await new Promise((resolve) => setTimeout(resolve, 1000));
    spinner.succeed("All done !");
}

Spinner.startAll([
    fnWithSpinner("Item 1"), // <-- Wrong, it's executed directly, not in startAll
    Spinner.create(fnWithSpinner, "Item 2") // <-- What you should do
])
.then(() => console.log("All spinners finished!"))
.catch(console.error);

start(text?: string): Spinner

Start the spinner in the CLI and write the text passed in param.

const Spinner = require("@slimio/async-cli-spinner");

async function fnWithSpinner() {
    const spinner = new Spinner().start("Start working!");
}

Spinner.startAll([
    fnWithSpinner
])
.then(() => console.log("All spinners finished!"))
.catch(console.error);
succeed(text?: string): void

Stop the spinner in the CLI, write the text passed in param and mark it as succeed with a symbol.

const Spinner = require("@slimio/async-cli-spinner");

async function fnWithSpinner() {
    const spinner = new Spinner().start("Start working!");

    await new Promise((resolve) => setTimeout(resolve, 1000));
    spinner.succeed("All done !");
}

Spinner.startAll([
    fnWithSpinner
])
.then(() => console.log("All spinners finished!"))
.catch(console.error);
failed(text?: string): void

Stop the spinner in the CLI, write the text passed in param and mark it as failed with a symbol.

const Spinner = require("@slimio/async-cli-spinner");

async function fnWithSpinner() {
    const spinner = new Spinner().start("Start working!");

    await new Promise((resolve) => setTimeout(resolve, 1000));
    spinner.failed("Something wrong happened !");
}

Spinner.startAll([
    fnWithSpinner
])
.then(() => console.log("All spinners finished!"))
.catch(console.error);

⚠️ Functions start(), succeed() and failed() are supposed to be executed in a function which return a promise and will be called by Spinner.startAll().

Dependencies

NameRefactoringSecurity RiskUsage
@slimio/isMinorLowType checker
@slimio/wcwidth⚠️MajorLowGet CLI columns for special characters
ansi-regexMinorLowGet ANSI code
cli-cursor⚠️MajorHighShow/Hide CLI cursor
cli-spinnersMinorLowBunch of spinner
kleurMinorLowCLI color
strip-ansiMinorLowANSI escape codes

License

MIT

Keywords

FAQs

Package last updated on 26 Feb 2020

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc