Skip to content

How to add a banner to your usage guide

Lloyd Brookes edited this page Jun 30, 2019 · 1 revision

A banner is created by adding the raw: true property to your content. This flag disables any formatting on the content, displaying it raw as supplied.

Header

Demonstrates a banner at the top. This example also adds a synopsis section.

Code

const chalk = require('chalk')
const getUsage = require('command-line-usage')
const header =
`██▀███  ▓█████ ▓█████▄  ██▀███   █    ██  ███▄ ▄███▓
▓██ ▒ ██▒▓█   ▀ ▒██▀ ██▌▓██ ▒ ██▒ ██  ▓██▒▓██▒▀█▀ ██▒
▓██ ░▄█ ▒▒███   ░██   █▌▓██ ░▄█ ▒▓██  ▒██░▓██    ▓██░
▒██▀▀█▄  ▒▓█  ▄ ░▓█▄   ▌▒██▀▀█▄  ▓▓█  ░██░▒██    ▒██
░██▓ ▒██▒░▒████▒░▒████▓ ░██▓ ▒██▒▒▒█████▓ ▒██▒   ░██▒
░ ▒▓ ░▒▓░░░ ▒░ ░ ▒▒▓  ▒ ░ ▒▓ ░▒▓░░▒▓▒ ▒ ▒ ░ ▒░   ░  ░
 ░▒ ░ ▒░ ░ ░  ░ ░ ▒  ▒   ░▒ ░ ▒░░░▒░ ░ ░ ░  ░      ░
 ░░   ░    ░    ░ ░  ░   ░░   ░  ░░░ ░ ░ ░      ░
  ░        ░  ░   ░       ░        ░            ░
                ░                                   `

const sections = [
  {
    content: chalk.red(header),
    raw: true
  },
  {
    header: 'Synopsis',
    content: [
      '$ example [{bold --timeout} {underline ms}] {bold --src} {underline file} ...',
      '$ example {bold --help}'
    ]
  }
]

console.log(getUsage(sections))

Output

usage

Footer

Demonstrates a footer banner.

Code

const getUsage = require('command-line-usage')
const wales = '\u001b[49m\n\u001b[48;5;231m\u001b[38;5;231m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄\u001b[49m\n\u001b[48;5;231m▄▄▄▄▄▄▄▄▄▄▄▄▄\u001b[38;5;125m▄\u001b[38;5;161m▄▄▄▄\u001b[48;5;181m\u001b[38;5;125m▄\u001b[48;5;125m\u001b[38;5;161m▄\u001b[48;5;231m\u001b[38;5;231m▄▄▄▄▄▄▄▄▄\u001b[38;5;188m▄\u001b[38;5;125m▄\u001b[48;5;138m\u001b[38;5;161m▄\u001b[48;5;181m\u001b[38;5;231m▄\u001b[48;5;231m▄▄▄▄\u001b[38;5;95m▄\u001b[38;5;139m▄\u001b[48;5;145m\u001b[38;5;231m▄\u001b[48;5;231m▄▄▄▄▄▄▄▄▄▄\u001b[49m\n\u001b[48;5;231m▄▄▄▄▄▄\u001b[38;5;125m▄\u001b[38;5;145m▄\u001b[38;5;231m▄\u001b[38;5;188m▄\u001b[48;5;161m\u001b[38;5;231m▄\u001b[38;5;145m▄\u001b[48;5;125m\u001b[38;5;161m▄\u001b[48;5;161m\u001b[38;5;89m▄\u001b[48;5;59m\u001b[38;5;131m▄\u001b[48;5;125m\u001b[38;5;161m▄\u001b[48;5;161m▄\u001b[38;5;125m▄\u001b[38;5;161m▄\u001b[48;5;231m\u001b[38;5;131m▄\u001b[38;5;231m▄▄▄▄▄▄\u001b[38;5;188m▄\u001b[38;5;161m▄\u001b[48;5;125m▄▄\u001b[48;5;161m▄▄\u001b[48;5;145m\u001b[38;5;125m▄\u001b[48;5;231m▄\u001b[48;5;145m\u001b[38;5;161m▄\u001b[48;5;125m▄\u001b[48;5;161m▄\u001b[48;5;145m\u001b[38;5;231m▄\u001b[48;5;231m▄▄▄▄▄\u001b[38;5;161m▄\u001b[38;5;231m▄▄▄▄▄▄\u001b[49m\n\u001b[48;5;231m▄▄▄▄▄▄▄\u001b[48;5;161m▄\u001b[48;5;125m\u001b[38;5;125m▄\u001b[48;5;181m\u001b[38;5;188m▄\u001b[38;5;181m▄\u001b[48;5;145m\u001b[38;5;145m▄\u001b[48;5;132m\u001b[38;5;89m▄\u001b[48;5;131m▄\u001b[48;5;161m\u001b[38;5;161m▄\u001b[48;5;125m\u001b[38;5;125m▄\u001b[48;5;161m▄\u001b[38;5;161m▄▄▄\u001b[48;5;188m\u001b[38;5;125m▄\u001b[48;5;231m\u001b[38;5;231m▄▄▄\u001b[38;5;161m▄\u001b[48;5;132m▄\u001b[48;5;161m▄▄▄\u001b[48;5;125m\u001b[38;5;125m▄\u001b[48;5;161m\u001b[38;5;161m▄\u001b[48;5;125m▄\u001b[48;5;161m▄\u001b[38;5;125m▄▄▄▄\u001b[48;5;188m\u001b[38;5;231m▄\u001b[48;5;231m▄▄▄\u001b[38;5;161m▄\u001b[48;5;161m\u001b[38;5;125m▄\u001b[38;5;161m▄\u001b[48;5;231m\u001b[38;5;231m▄▄▄▄▄▄\u001b[49m\n\u001b[48;5;231m▄▄▄▄▄\u001b[38;5;145m▄\u001b[38;5;231m▄\u001b[48;5;138m▄\u001b[48;5;231m\u001b[38;5;138m▄\u001b[38;5;188m▄\u001b[38;5;231m▄▄\u001b[48;5;131m\u001b[38;5;188m▄\u001b[38;5;231m▄\u001b[48;5;231m\u001b[38;5;145m▄\u001b[48;5;161m\u001b[38;5;161m▄\u001b[48;5;89m▄\u001b[48;5;161m▄▄\u001b[48;5;181m▄\u001b[48;5;231m\u001b[38;5;145m▄\u001b[38;5;231m▄▄\u001b[48;5;161m\u001b[38;5;161m▄\u001b[38;5;125m▄\u001b[38;5;161m▄▄\u001b[48;5;125m\u001b[38;5;125m▄\u001b[38;5;161m▄▄\u001b[48;5;161m▄\u001b[48;5;125m▄\u001b[48;5;161m▄▄▄\u001b[48;5;131m\u001b[38;5;231m▄\u001b[48;5;231m▄▄▄\u001b[38;5;188m▄\u001b[48;5;161m\u001b[38;5;231m▄\u001b[38;5;145m▄\u001b[38;5;161m▄\u001b[38;5;131m▄\u001b[48;5;231m\u001b[38;5;188m▄\u001b[38;5;231m▄▄▄▄▄\u001b[49m\n\u001b[48;5;231m▄▄▄▄▄▄\u001b[48;5;161m\u001b[38;5;161m▄\u001b[48;5;138m\u001b[38;5;89m▄\u001b[38;5;125m▄\u001b[48;5;161m\u001b[38;5;138m▄\u001b[48;5;231m\u001b[38;5;231m▄▄▄\u001b[38;5;139m▄\u001b[48;5;161m\u001b[38;5;161m▄\u001b[38;5;125m▄\u001b[48;5;125m▄\u001b[48;5;161m\u001b[38;5;161m▄▄\u001b[48;5;231m▄\u001b[38;5;231m▄▄▄\u001b[48;5;161m\u001b[38;5;125m▄\u001b[38;5;161m▄\u001b[38;5;125m▄\u001b[48;5;125m\u001b[38;5;161m▄▄▄\u001b[38;5;125m▄\u001b[48;5;161m▄▄\u001b[38;5;161m▄\u001b[38;5;125m▄\u001b[48;5;131m\u001b[38;5;161m▄\u001b[48;5;231m\u001b[38;5;231m▄\u001b[38;5;188m▄\u001b[48;5;161m\u001b[38;5;161m▄\u001b[38;5;188m▄\u001b[38;5;231m▄\u001b[38;5;161m▄\u001b[48;5;125m▄\u001b[48;5;145m\u001b[38;5;188m▄\u001b[48;5;231m\u001b[38;5;231m▄\u001b[48;5;188m▄\u001b[48;5;231m▄▄▄▄▄\u001b[49m\n\u001b[48;5;231m▄▄▄▄▄▄▄\u001b[48;5;161m\u001b[38;5;161m▄\u001b[48;5;89m▄\u001b[48;5;231m\u001b[38;5;231m▄▄▄▄\u001b[48;5;161m\u001b[38;5;161m▄▄\u001b[48;5;125m\u001b[38;5;125m▄\u001b[38;5;88m▄\u001b[48;5;89m\u001b[38;5;125m▄\u001b[48;5;161m▄\u001b[48;5;231m\u001b[38;5;161m▄▄\u001b[48;5;188m▄\u001b[48;5;131m▄\u001b[48;5;161m▄\u001b[38;5;125m▄\u001b[48;5;125m\u001b[38;5;161m▄\u001b[48;5;161m▄\u001b[48;5;125m\u001b[38;5;125m▄\u001b[48;5;161m\u001b[38;5;161m▄\u001b[38;5;125m▄\u001b[38;5;161m▄▄\u001b[38;5;231m▄\u001b[48;5;145m▄\u001b[48;5;231m▄▄▄\u001b[48;5;161m▄\u001b[38;5;188m▄\u001b[48;5;125m▄\u001b[38;5;161m▄\u001b[48;5;161m▄\u001b[48;5;138m\u001b[38;5;181m▄\u001b[48;5;231m\u001b[38;5;231m▄▄▄▄▄▄▄\u001b[49m\n\u001b[48;5;231m\u001b[38;5;35m▄▄▄▄▄▄\u001b[38;5;161m▄\u001b[48;5;161m\u001b[38;5;29m▄\u001b[38;5;161m▄\u001b[48;5;231m▄\u001b[38;5;35m▄▄\u001b[48;5;145m\u001b[38;5;65m▄\u001b[48;5;161m\u001b[38;5;161m▄\u001b[48;5;125m▄\u001b[38;5;125m▄▄\u001b[48;5;161m\u001b[38;5;161m▄\u001b[48;5;125m▄\u001b[48;5;161m\u001b[38;5;125m▄\u001b[38;5;161m▄\u001b[48;5;125m\u001b[38;5;125m▄\u001b[38;5;161m▄▄\u001b[48;5;161m\u001b[38;5;125m▄\u001b[48;5;125m\u001b[38;5;161m▄\u001b[38;5;125m▄\u001b[48;5;161m\u001b[38;5;161m▄▄▄\u001b[48;5;125m\u001b[38;5;125m▄▄\u001b[48;5;161m\u001b[38;5;161m▄▄\u001b[38;5;125m▄\u001b[38;5;161m▄▄▄▄▄\u001b[38;5;125m▄\u001b[38;5;35m▄\u001b[48;5;231m▄▄▄▄▄▄▄▄\u001b[49m\n\u001b[48;5;35m▄▄▄▄▄▄\u001b[48;5;95m▄\u001b[48;5;35m▄\u001b[48;5;161m▄\u001b[48;5;89m\u001b[38;5;161m▄\u001b[48;5;161m\u001b[38;5;125m▄\u001b[48;5;29m\u001b[38;5;161m▄\u001b[48;5;35m▄\u001b[48;5;125m▄▄\u001b[38;5;125m▄\u001b[48;5;161m\u001b[38;5;161m▄\u001b[38;5;125m▄\u001b[38;5;161m▄\u001b[48;5;125m▄\u001b[48;5;161m▄\u001b[38;5;125m▄\u001b[38;5;161m▄▄\u001b[48;5;125m\u001b[38;5;89m▄\u001b[48;5;161m\u001b[38;5;125m▄▄\u001b[48;5;125m\u001b[38;5;161m▄▄\u001b[48;5;161m▄▄\u001b[48;5;125m▄\u001b[48;5;161m\u001b[38;5;125m▄\u001b[38;5;161m▄▄\u001b[48;5;125m▄\u001b[48;5;161m▄\u001b[38;5;35m▄\u001b[48;5;125m▄\u001b[48;5;35m▄▄▄▄▄▄▄▄▄▄▄\u001b[49m\n\u001b[48;5;35m▄▄▄▄▄▄▄▄▄▄\u001b[48;5;161m\u001b[38;5;29m▄\u001b[38;5;161m▄▄\u001b[38;5;125m▄\u001b[38;5;161m▄\u001b[48;5;125m▄\u001b[48;5;161m\u001b[38;5;89m▄\u001b[48;5;125m\u001b[38;5;125m▄\u001b[48;5;161m\u001b[38;5;161m▄\u001b[48;5;125m\u001b[38;5;125m▄▄\u001b[48;5;89m\u001b[38;5;161m▄\u001b[48;5;125m\u001b[38;5;125m▄\u001b[48;5;161m\u001b[38;5;161m▄\u001b[48;5;125m\u001b[38;5;125m▄\u001b[48;5;161m▄\u001b[48;5;125m\u001b[38;5;161m▄\u001b[48;5;161m▄▄\u001b[38;5;35m▄\u001b[48;5;65m▄\u001b[48;5;125m▄\u001b[48;5;161m\u001b[38;5;29m▄\u001b[38;5;125m▄\u001b[38;5;89m▄\u001b[38;5;161m▄\u001b[48;5;125m▄\u001b[48;5;161m▄▄\u001b[48;5;35m\u001b[38;5;125m▄\u001b[38;5;65m▄\u001b[38;5;35m▄▄▄▄▄▄▄▄▄\u001b[49m\n\u001b[48;5;35m▄▄▄▄▄▄▄▄▄▄▄\u001b[48;5;161m\u001b[38;5;65m▄\u001b[48;5;125m\u001b[38;5;35m▄\u001b[48;5;35m▄\u001b[38;5;125m▄\u001b[48;5;125m▄\u001b[48;5;161m\u001b[38;5;161m▄\u001b[38;5;29m▄\u001b[38;5;161m▄\u001b[38;5;35m▄\u001b[48;5;125m▄\u001b[48;5;131m▄\u001b[48;5;35m▄\u001b[48;5;95m▄\u001b[48;5;161m\u001b[38;5;125m▄▄\u001b[38;5;161m▄\u001b[38;5;125m▄\u001b[38;5;161m▄\u001b[48;5;35m▄▄\u001b[38;5;95m▄\u001b[38;5;35m▄▄▄▄▄\u001b[48;5;125m\u001b[38;5;59m▄\u001b[38;5;125m▄\u001b[48;5;29m\u001b[38;5;65m▄\u001b[48;5;35m\u001b[38;5;35m▄▄▄▄▄▄▄▄▄▄\u001b[49m\n\u001b[48;5;35m▄▄▄▄▄▄▄▄▄▄▄▄▄▄\u001b[48;5;161m\u001b[38;5;125m▄\u001b[38;5;65m▄\u001b[48;5;65m\u001b[38;5;35m▄\u001b[48;5;35m▄\u001b[48;5;161m▄\u001b[48;5;35m▄\u001b[38;5;65m▄\u001b[38;5;89m▄\u001b[38;5;29m▄\u001b[38;5;35m▄▄\u001b[48;5;65m▄\u001b[48;5;89m\u001b[38;5;59m▄\u001b[48;5;161m\u001b[38;5;161m▄▄▄\u001b[48;5;95m\u001b[38;5;35m▄▄\u001b[48;5;29m▄\u001b[48;5;35m\u001b[38;5;59m▄\u001b[38;5;35m▄▄▄\u001b[48;5;65m\u001b[38;5;161m▄\u001b[48;5;125m▄\u001b[48;5;29m\u001b[38;5;35m▄\u001b[48;5;35m▄▄▄▄▄▄▄▄▄▄\u001b[49m\n\u001b[48;5;35m▄▄▄▄▄▄▄▄\u001b[48;5;29m\u001b[38;5;125m▄\u001b[48;5;125m\u001b[38;5;161m▄\u001b[48;5;161m\u001b[38;5;125m▄\u001b[48;5;29m\u001b[38;5;161m▄\u001b[48;5;65m▄\u001b[48;5;161m▄\u001b[38;5;125m▄\u001b[48;5;35m\u001b[38;5;29m▄\u001b[38;5;35m▄▄▄\u001b[38;5;29m▄\u001b[38;5;88m▄\u001b[38;5;125m▄\u001b[48;5;95m\u001b[38;5;161m▄\u001b[48;5;125m\u001b[38;5;125m▄\u001b[48;5;95m\u001b[38;5;161m▄\u001b[48;5;161m▄\u001b[48;5;125m\u001b[38;5;59m▄\u001b[48;5;161m\u001b[38;5;35m▄\u001b[48;5;95m▄\u001b[48;5;35m▄▄▄\u001b[38;5;95m▄\u001b[48;5;95m\u001b[38;5;125m▄\u001b[48;5;161m▄\u001b[48;5;35m\u001b[38;5;161m▄▄\u001b[48;5;161m▄▄\u001b[48;5;35m\u001b[38;5;29m▄\u001b[38;5;35m▄▄▄▄▄▄▄▄▄▄\u001b[49m\n\u001b[48;5;35m▄▄▄▄▄▄▄▄▄\u001b[48;5;125m▄\u001b[48;5;161m▄\u001b[48;5;65m▄\u001b[48;5;29m▄\u001b[48;5;35m▄▄\u001b[48;5;161m▄\u001b[48;5;65m▄\u001b[48;5;35m▄▄▄\u001b[48;5;65m▄\u001b[48;5;89m▄\u001b[48;5;35m▄▄▄▄\u001b[48;5;29m▄\u001b[48;5;125m▄\u001b[48;5;89m▄\u001b[48;5;35m▄▄▄▄\u001b[48;5;95m▄\u001b[48;5;161m▄\u001b[48;5;35m▄\u001b[48;5;65m▄\u001b[48;5;35m▄▄\u001b[48;5;95m▄\u001b[48;5;131m▄\u001b[48;5;35m▄▄▄▄▄▄▄▄▄\u001b[49m\n\u001b[48;5;35m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄\u001b[49m\n\u001b[39m                                                  '

const optionDefinitions = [
  {
    name: 'help',
    description: 'Display this usage guide.',
    alias: 'h',
    type: Boolean
  },
  {
    name: 'src',
    description: 'The input files to process. This is some additional text existing solely to demonstrate word-wrapping, nothing more, nothing less. And nothing in between.',
    type: String,
    multiple: true,
    defaultOption: true,
    typeLabel: '{underline file} ...'
  },
  {
    name: 'timeout',
    description: 'Timeout value in ms.',
    alias: 't',
    type: Number,
    typeLabel: '{underline ms}'
  }
]

const sections = [
  {
    header: 'A typical app',
    content: 'Generates something {italic very} important.'
  },
  {
    header: 'Synopsis',
    content: [
      '$ example [{bold --timeout} {underline ms}] {bold --src} {underline file} ...',
      '$ example {bold --help}'
    ]
  },
  {
    header: 'Options',
    optionList: optionDefinitions
  },
  {
    content: [
      '{italic This app was tested by dragons in Wales.}',
      '',
      wales
    ],
    raw: true
  }
]

console.log(getUsage(sections))

Output

usage