clef-parse
TypeScript icon, indicating that this package has built-in type declarations

0.6.0 • Public • Published

clef-parse

The argv parser behind cleffa and clefairy.

Usage

As a node.js library

import { parseArgv } from "clef-parse";

// Sample argv
const result = parseArgv([
  "--bundle",
  "--input",
  "index.js",
  "--output",
  "bundle.js",
  "-v",
]);
console.log(result);
// Logs:
// {
//   options: { bundle: true, input: 'index.js', output: 'bundle.js', v: true },
//   positionalArgs: []
// }

// Optionally, you can provide type hints that will help the parser coerce values:
const result2 = parseArgv(
  ["--bundle", "--input", "index.js", "--output", "bundle.js", "-v"],
  {
    bundle: Boolean,
    input: String,
    output: String,
    v: Boolean,
  },
);
console.log(result2);
// Logs:
// {
//   options: { bundle: true, input: 'index.js', output: 'bundle.js', v: true },
//   positionalArgs: []
// }

// Valid hints are Number, Boolean, String, or Path. Number, Boolean, and String are the standard JS globals, but Path is the class from the npm package "nice-path", which is re-exported by clef-parse:
import { Path } from "clef-parse";

// When you provide the Path hint, clef-parse will interpret the input string as a path (relative to cwd unless it's absolute), and return a `Path` object. It will always be an absolute path.
const result3 = parseArgv(
  ["--bundle", "--input", "index.js", "--output", "bundle.js", "-v"],
  {
    bundle: Boolean,
    input: Path,
    output: Path,
    v: Boolean,
  },
);
console.log(result3);
// Logs (for example):
// {
//   options: {
//     bundle: true,
//     input: Path {
//       segments: [
//         "",
//         "home",
//         "suchipi",
//         "Code",
//         "clef-parse",
//         "index.js",
//       ],
//       separator: "/",
//     },
//     output: Path {
//       segments: [
//         "",
//         "home",
//         "suchipi",
//         "Code",
//         "clef-parse",
//         "bundle.js",
//       ],
//       separator: "/",
//     },
//     v: true
//   },
//   positionalArgs: []
// }

// If you don't provide hints, clef-parse will do its best to guess.

See the TypeScript types in the source code for more information.

As a CLI tool

$ npm install -g clef-parse
$ clef-parse one two --three-four=five
{
  "options": {
    "threeFour": "five"
  },
  "positionalArgs": [
    "one",
    "two"
  ]
}

To specify hints with the CLI tool, use environment variables named like CLEF_PARSE_HINT_<option name goes here>. For instance:

# Without any hints specified, --with-batteries is parsed as a string:
$ clef-parse some stuff --with-batteries yeah yup
{
  "options": {
    "withBatteries": "yeah"
  },
  "positionalArgs": [
    "some",
    "stuff",
    "yup"
  ]
}
# But specifying the hint as boolean treats the next value as a positional arg:
$ env CLEF_PARSE_HINT_WITH_BATTERIES=Boolean clef-parse some stuff --with-batteries yeah yup
{
  "options": {
    "withBatteries": true
  },
  "positionalArgs": [
    "some",
    "stuff",
    "yeah",
    "yup"
  ]
}

License

MIT

Package Sidebar

Install

npm i clef-parse

Weekly Downloads

43

Version

0.6.0

License

MIT

Unpacked Size

13.7 kB

Total Files

11

Last publish

Collaborators

  • suchipi