GithubHelp home page GithubHelp logo

voxpelli / peowly Goto Github PK

View Code? Open in Web Editor NEW
2.0 2.0 0.0 39 KB

meow inspired parseArgs() based CLI parser. Also contains help text helpers

License: MIT License

Shell 0.79% JavaScript 99.21%
cli cli-parser nodejs parseargs

peowly's Introduction

peowly

npm version npm downloads neostandard javascript style Module type: ESM Types in JS Follow @voxpelli@mastodon.social

meow inspired parseArgs() based CLI parser. Also contains help text helpers

Usage

Simple

const { flags } = peowly({
  options: {
    fix: {
      description: 'Fixes stuff',
      type: 'boolean',
    },
  },
});

Example

See example/basic.js

API

peowly()

peowly(options): { flags, input, remainderArgs, showHelp }

Meta Options

  • description - string | false - a description that will be prefixed to the help text (defaults to pkg.description, deactivated by false)
  • examples - see HelpMessageInfo
  • help - string - the help text to show on --help, preferably generated with formatHelpMessage() (defaults to being rendered with formatHelpMessage() using available data)
  • indent - see HelpMessageInfo
  • name - string - the name of the CLI command. Used by a couple of other defaults. (defaults to the first key in pkg.bin and else to pkg.name)
  • pkg - PackageJsonLike - a package.json which some meta data can be derived from
  • processTitle - string | false - sets the process.title to this (defaults to name, deactivated by false)
  • usage - see HelpMessageInfo
  • version - string - the version to show on --version (defaults to pkg.version)

Parser Options

  • args - string[] - same as for parseArgs() (defaults to process.argv with execPath and filename removed)
  • options - Flags - superset of that of parseArgs(). Every option / flag is expected to have a description string property in addition to what parseArgs() require and they may have a listGroup string property as well
  • returnRemainderArgs - boolean - if set, then all parts of args that doesn't match a flag in options will be returned as remainderArgs, which can eg. be forwarded to another parser

formatHelpMessage()

formatHelpMessage(name: string, info?: HelpMessageInfo): string

Arguments

  • name - string - the name of the CLI command

HelpMessageInfo

  • aliases - HelpListBasic - list of help items to join with commands but with group name defaulting to 'Aliases' and other group names being prefixed with ' Aliases'
  • commands - HelpListBasic - list of help items to add prior to the flags list and with a default group name of 'Commands'
  • examples - (string | { prefix?: string, suffix?: string })[] - will be added as examples on individual lines prefixed with $ ${name} or, if provided as prefix and suffix, then the prefix will go inbetween $ and the name and the suffix after that, separated by spaces
  • flags - HelpList - the flags to output in the help, compatible with Flags
  • indent - number - the number of spaces to indent the help text with (defaults to 2)
  • noDefaultFlags - boolean - excludes the default flags from the help text
  • usage - string - what, if anything, that follows the $ ${name} in 'Usage' headline in the initial help text

Types

import type { AnyFlag } from 'peowly';

interface HelpListBasicItem {
  listGroup?: string;
  description: string;
}

type HelpListItem = AnyFlag | HelpListBasicItem;

type HelpListBasic = Record<string, HelpListBasicItem>;

type HelpList = Record<string, HelpListItem | string>;

defaultFlags

Contains the definition of the two default flags --help and --version.

formatHelpList()

Most of the time you should use formatHelpMessage() instead.

function formatHelpList(list: HelpList, indent: number, options?: HelpListOptions): string

Arguments

  • list - HelpList - the list that represents the flags, see types in formatHelpMessage()
  • indent - number - how far to indent the list

HelpListOptions

  • fixedPadName - boolean - when set, padName will be treated as a fixed rather than minimum padding
  • keyPrefix - string - a prefix for the name
  • padName - number - the minimum padding between names and descriptions
  • shortFlagPrefix - string - a prefix for a shortFlag (defaults to '-')

formatFlagList()

function formatFlagList(list: HelpList, indent: number, options?: HelpListOptions): string

Same as formatHelpList() but with the keyPrefix option defaulting to '--'.

formatGroupedHelpList()

formatGroupedHelpList(list: HelpList, indent: number, options?: HelpListGroupOptions): string

Similar to formatHelpList() but prints help items grouped and has some additional options to support it in that.

HelpListGroupOptions

Same as HelpListOptions but with these additional options:

  • alignWithinGroups - boolean - when set (and unless fixedPadName is set) the padding between name and description will be calculated within each group instead of across all groups
  • defaultGroupName - string - the default group name where all items that have no explicit group belonging will be placed (defaults to 'Default')
  • defaultGroupOrderFirst - boolean - if set the default group is added at the start rather than at the end

formatGroupedFlagList()

formatGroupedFlagList(list: HelpList, indent: number, options?: HelpListGroupOptions): string

Same as formatGroupedHelpList() but with the keyPrefix option defaulting to '--' and defaultGroup defaulting to 'Options'.

Similar modules

  • argsclopts - also concerned with generating help texts for parseArgs()
  • meow - a more full fledged alternative and name inspiration (p as in parseArgs, eow as in meow, ly to avoid being perceived as a typejacking)
  • meow-with-subcommands - a companion module to meow that provides the same help functionality as this module
  • peowly-commands - a companion module to this module that makes it on par with meow-with-subcommands

See also

  • parseArgs() - the node.js API this module is built around. Available since v18.3.0 and v16.17.0, non-experimental since v20.0.0.

peowly's People

Contributors

github-actions[bot] avatar renovate[bot] avatar voxpelli avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

peowly's Issues

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Detected dependencies

github-actions
.github/workflows/compliance.yml
  • mtfoley/pr-compliance-action 11b664f0fcf2c4ce954f05ccfcaab6e52b529f86
.github/workflows/lint.yml
.github/workflows/nodejs.yml
.github/workflows/release-please.yml
.github/workflows/ts-internal.yml
npm
package.json
  • @types/chai ^4.3.16
  • @types/mocha ^10.0.6
  • @types/node ^18.19.37
  • @voxpelli/eslint-config ^20.0.0-beta.1
  • @voxpelli/tsconfig ^12.0.1
  • c8 ^10.1.2
  • chai ^4.4.1
  • eslint ^9.5.0
  • husky ^9.0.11
  • installed-check ^9.3.0
  • knip ^5.22.0
  • mocha ^10.4.0
  • npm-run-all2 ^6.2.0
  • ts-ignore-import ^4.0.1
  • type-coverage ^2.29.0
  • typescript ~5.5.2
  • validate-conventional-commit ^1.0.3
  • node >=18.6.0

  • Check this box to trigger a request for Renovate to run again on this repository

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.