Skip to main content

Deno Args

Travis Build Status

Extensible CLI arguments parser for Deno with intelligent TypeScript inference.

Demo and Examples

Demo on YouTube

https://youtu.be/luzgMWrRJxw

Example Code

import args from "https://deno.land/x/args@1.0.7/wrapper.ts";
import {
  EarlyExitFlag,
  Option,
} from "https://deno.land/x/args@1.0.7/flag-types.ts";
import {
  FiniteNumber,
  Choice,
} from "https://deno.land/x/args@1.0.7/value-types.ts";
import {
  PARSE_FAILURE,
} from "https://deno.land/x/args@1.0.7/symbols.ts";

const parser = args
  .describe("Add or subtract two numbers")
  .with(
    EarlyExitFlag("help", {
      describe: "Show help",
      exit() {
        console.log(parser.help());
        return Deno.exit();
      },
    })
  )
  .with(
    Option("a", {
      type: FiniteNumber,
      describe: "Value of a",
    })
  )
  .with(
    Option("b", {
      type: FiniteNumber,
      describe: "Value of b",
    })
  )
  .with(
    Option("operator", {
      type: Choice<"add" | "sub">(
        {
          value: "add",
          describe: "Add two numbers",
        },
        {
          value: "sub",
          describe: "Subtract two numbers",
        }
      ),
      alias: ["o"],
      describe: "Operator to use",
    })
  );

const res = parser.parse(Deno.args);

if (res.tag === PARSE_FAILURE) { // Alternatively, `if (res.error) {`
  console.error("Failed to parse CLI arguments");
  console.error(res.error.toString());
  Deno.exit(1);
} else {
  const { a, b, operator } = res.value;
  switch (operator) {
    case "add":
      console.log(a + b);
    case "sub":
      console.log(a - b);
  }
}

Sample Apps

Become a Patron

My Patreon Page.

Development

All tasks are in Drakefile.ts.

Run all tests

deno -A Drakefile.ts all

Fix files

env UPDATE=true deno -A Drakefile.ts all

License

MIT © Hoàng Văn Khải