@aminnairi/natural

Parse options using a natural language

Usage no npm install needed!

<script type="module">
  import aminnairiNatural from 'https://cdn.skypack.dev/@aminnairi/natural';
</script>

README

node-natural

Parse options using a natural language

Tests Publish

Requirements

  • Node

Usage

$ npm install @aminnairi/natural
$ touch hello
#!/usr/bin/env node

import {createNaturalOptionParser} from "@aminnairi/natural";

const parse = createNaturalOptionParser([
  {name: "help", option: "help", isBoolean: true, isMultiple: false},
  {name: "name", option: "name", isBoolean: false, isMultiple: false},
  {name: "countries", option: "country", isBoolean: false, isMultiple: true}
]);

const [parsed, unknown, lone] = parse(process.argv.slice(2));

if (lone.length > 0) {
  console.error(`Lone argument: ${lone[0]}`);
  process.exit(1);
}

if (unknown.length > 0) {
  console.error(`Unknown argument: ${unknown[0]}`);
  process.exit(2);
}

if (parsed.name === undefined) {
  console.error(`Missing argument: name`);
  process.exit(3);
}

if (parsed.help) {
  console.log("Usage:");
  console.log("  hello name You");
  console.log("  hello name You country France");
  console.log("  hello name You country France country Spain");
  process.exit(0);
}

if ((parsed.countries ?? []).length > 0) {
  console.log(`Hello ${parsed.name} from ${parsed.countries.join(", ")}!`);
  process.exit(0);
}

console.log(`Hello ${parsed.name}!`);
$ chmod +x hello

$ ./hello
Missing argument: name

$ ./hello name
Lone argument: name

$ ./hello name You hello
Unknown argument: hello

$ ./hello name You
Hello You!

$ ./hello name You country France
Hello You from France!

$ ./hello name You country France country Spain
Hello You from France, Spain!

$ ./hello name You country France country Spain help
Usage:
  hello name You
  hello name You country France
  hello name You country France country Spain