Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

documentationjs/zeroarg

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

5 Commits

Repository files navigation

zeroarg

disappearing argument parser

This is admittedly a little πŸ”¬ mad science. The gist is that zeroarg is an argument parser, with yargs at its core, that doesn't require you to touch yargs, or argument-parsing specifics. It aims to infer types and reuse documentation to do that.

Here's an example CLI written with zeroarg:

var zeroarg = require('zeroarg');
zeroarg(() =>
 /**
 * Add numbers together
 * @param {Array<number>} numbers
 */
 function add(numbers) {
 console.log(numbers.reduce((sum, num) => sum + num, 0));
 }
);

This produces proper help material:

Commands:
 run [numbers..]
Options:
 --help Show help [boolean]
Add numbers together

And adds numbers together when you run it:

$ ./examples/add.js run 1 2 3 4
10

Why?

  • Argument parsing still feels like a source of uncertainty in programming: it's like the same as parsing query arguments, except for the CLI: you're getting who knows what from who knows who. Your program has types and expectations - maybe even official types with Flowtype - and yet argument parsers make you redeclare those types, or even allow untyped, unexpected input. What if argument parsers leveraged your program's existing assumptions and treated CLIs more like functions?
  • It's possibly a little less code to write, and one less API to learn! zeroarg's API surface is one function, and it uses existing standards (JSDoc & Flow) to express assumptions about argument types.
  • It's super fun and weird.

API

zeroarg

zeroarg a code-free argument parser

Functions that you provide to zeroarg follow certain rules:

Their arguments work like:

[positionalArgument],
[positionalArgument2],
[variadicPositionalArgument],
[optionsArgument]
  • The first arguments can be positional arguments.
  • The last argument to the method can be an object that receives the flag arguments (like --option). Only the last argument can be an options object.
    • Options can have JSDoc types of string, number, array, and boolean.
    • If you specify a default in JSDoc-land, it becomes a default in yargs
    • If you specify an argument as an enum in JSDoc-land, it becomes choices in yargs

Parameters

  • fn Function a function that returns a function, and has at least one JSDoc comment preceding that function.

Examples

zeroarg(() =>
 /**
 * Hello world
 *\/
 function helloworld() {
 console.log('Hello world');
 }
);

About

disappearing argument parser

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /