Nevermore: a Poet's Mantra

    cli-step

    1.0.2 • Public • Published

    Cli steps ⛹

    This module makes it super simple to show animated steps on the terminal and also track the time spent to perform those steps.

    Highly inspired by yarn

    Some bragging 🤘🏻

    Below is the output of couple of examples of what you can do with cli-step.

    Yarn style output

    Publish to npm

    Usage ✍️

    Grab it from npm.

    npm i cli-step
     
    # yarn 
    yarn add cli-step
    const Steps = require('cli-step')
     
    const totalNumberOfSteps = 4
    const steps = new Steps(totalNumberOfSteps)
     
    const step1 = steps
        .advance('Resolving packages', 'mag')
        .start()
     
    // perform your task
    step1.stop()
     
    const step2 = steps
        .advance('Fetching packages', 'truck')
        .start()
     
    // peform next task
    step2.stop()

    Note 🗒️

    Cli steps doesn't gives you any functionality on how to perform certain actions, it's just a module to show animated steps of the tasks you are executing.

    So think of it as the UI layer for your command line app.

    Why? 🤷‍♂️

    1. To produce consistent output
    2. Everyone loves emoji's
    3. Record time taken to perform all the steps.

    API 👇🏻

    Here's the list of methods you can call to tweak the output.

    advance(text, emoji, helpLabel)

    • text ( String ) [required] The text to be printed on the terminal. It is required
    • emoji (String) [optional] Emoji to be printed just before the text. The emoji name must one of the available emojis from this list
    • helpLabel (String) [optional] The help label to be printed in DIM color. For example showing the command used to execute the task
    const steps = new Steps(4)
    const stepInstance = steps.advance(text, emoji, helpLabel)

    startRecording

    Optionally, you can start recording the time which can later be used to know the time taken to execute all the tasks. Used in yarn example

    const steps = new Steps(4)
    steps.startRecording()
     
    // perform all tasks
     
    const nanoSeconds = steps.stopRecording()

    stopRecording

    Used to stop recording the time. The return value is the time spent between startRecording and stopRecording in nano seconds.

    A single step ☝️

    Everytime you call advance it returns an instance of the step class, which can be used to tweak the output, complete a step and so on.

    const step1 = steps.advance('Linting...', null, 'npm run lint')
     
    step1.start() // start the animation
     
    try {
     // perform task
     
     step1.success('Successfully linted', 'white_check_mark')
    } catch (error) {
      step1.error('Unable to lint', 'x')
    }

    start

    The start method starts the animation for a given step.

    step.start()

    success(text, emoji)

    • text ( String ) [optional] Optionally change the text on step completion
    • emoji (String) [optional] Optionally change the emoji on step completion
    step1.complete()
     
    // or change text
    step1.complete('Success')
     
    // or change text and emoji
    step1.complete('Success', 'white_check_mark')

    error(text, emoji)

    • text ( String ) [optional] Optionally change the text on error
    • emoji (String) [optional] Optionally change the emoji on error
    step1.error()
     
    // or change text
    step1.error('Ohh no!')
     
    // or change text and emoji
    step1.error('Ohh no!', 'x')

    stop()

    Same as error and complete but instead doesn't accept any params and just stops the animation.

    update(text)

    • text ( String ) [required] Update the step text during animation.
    step1.start()
     
    // after a while
    step1.update('Changing the text')

    Spinner 🤸‍♂️

    The cli-spinner module is used to show the loading icon. You can tweak the behaviour by accessing the spinner property on the step instance.

    const Steps = require('cli-step')
    const steps = new Steps(1)
     
    const step = steps.advance('Eating banana', 'banana')
     
    // update the spinner string
    step.spinner.setSpinnerString(10)
     
    // start animation
    step.start()

    Props 🎉

    The module is possible because of

    Install

    npm i cli-step

    DownloadsWeekly Downloads

    5,203

    Version

    1.0.2

    License

    MIT

    Last publish

    Collaborators

    • virk