0.3.30 • Published 1 month ago

parse-my-command v0.3.30

Weekly downloads
-
License
MIT
Repository
github
Last release
1 month ago

Parse My Command

Parse argv with Commander.js without executing the command

Commander.js doesn't support parsing argv without executing the command. This module provides a workaround for that.

Installation

npm install --save parse-my-command

Usage

import { Command } from "commander";
import { partialParse } from "parse-my-command";

const rootCommand = new Command("root")
  .requiredOption("-a, --option-a <value>", "option a")
  .action(() => {
    throw new Error("This should never get called");
  });

const childCommand = rootCommand
  .command("child")
  .requiredOption("-b, --option-b <value>", "option b")
  .requiredOption("-c, --option-c <value>", "option c")
  .action(() => {
    throw new Error("This should never get called");
  });

const argv = ["node", "index.mjs", "-a", "value1", "child", "-b", "value2"];

const {
  matchedCommand,
  providedOptions,
  missingOptions,
  providedOptionsSources,
} = partialParse(rootCommand, argv);

console.log(matchedCommand.name()); // child
console.log(providedOptions.get(childCommand)); // { optionB: 'value2' }
console.log(missingOptions.get(childCommand)); // Set(1) { 'optionC' }
console.log(providedOptionsSources.get(childCommand)); // Map(1) { 'optionB' => 'cli' }

More examples can be found in the examples directory.

Error Handling

partialParse throws in the following cases:

  1. In all cases where your Command with the default exitCallback would throw an error (e.g. when displaying help)
  2. In all cases where your command would throw an error before an action is executed except for when a required Option (not to be confused with an Argument) is missing (missing options are returned in the result object instead).

How It Works and Limitations

This module works by creating a (best-effort) clone of the command and its subcommands, setting the actions to no-op functions, and then parsing the argv with the cloned instance. This approach might have some limitations:

  1. The implementation might break if Commander.js changes its internals
  2. Custom argument and option processors are assumed to be pure functions
  3. Hook listeners attached to the commands will be ignored
  4. Some edge cases might not be handled correctly (please feel free to open an issue/PR in case you find any)
0.3.30

1 month ago

0.3.29

1 month ago

0.3.28

1 month ago

0.3.27

1 month ago

0.3.26

1 month ago

0.3.25

1 month ago

0.3.24

1 month ago

0.3.23

2 months ago

0.3.22

2 months ago

0.3.20

2 months ago

0.3.21

2 months ago

0.3.19

2 months ago

0.3.18

2 months ago

0.3.17

2 months ago

0.3.16

2 months ago

0.3.15

2 months ago

0.3.14

2 months ago

0.3.13

2 months ago

0.3.12

2 months ago

0.3.11

2 months ago

0.3.9

3 months ago

0.3.10

2 months ago

0.3.8

3 months ago

0.3.7

3 months ago

0.3.6

3 months ago

0.3.5

3 months ago

0.3.4

3 months ago

0.3.3

3 months ago

0.3.2

3 months ago

0.3.1

3 months ago

0.3.0

3 months ago

0.2.96

3 months ago

0.2.97

3 months ago

0.2.95

3 months ago

0.2.94

3 months ago

0.2.93

3 months ago

0.2.92

4 months ago

0.2.91

4 months ago

0.2.90

4 months ago

0.2.89

4 months ago

0.2.88

4 months ago

0.2.87

4 months ago

0.2.86

4 months ago

0.2.85

4 months ago

0.2.84

4 months ago

0.2.83

4 months ago

0.2.82

4 months ago

0.2.81

4 months ago

0.2.80

4 months ago

0.2.79

4 months ago

0.2.78

4 months ago

0.2.77

4 months ago

0.2.76

4 months ago

0.2.75

4 months ago

0.2.74

4 months ago

0.2.73

5 months ago

0.2.72

5 months ago

0.2.71

5 months ago

0.2.69

5 months ago

0.2.70

5 months ago

0.2.68

5 months ago

0.2.67

5 months ago

0.2.66

5 months ago

0.2.65

5 months ago

0.2.64

5 months ago

0.2.63

5 months ago

0.2.62

5 months ago

0.2.61

5 months ago

0.2.60

5 months ago

0.2.27

7 months ago

0.2.26

7 months ago

0.2.25

7 months ago

0.2.24

7 months ago

0.2.23

7 months ago

0.2.22

7 months ago

0.2.21

7 months ago

0.2.20

7 months ago

0.2.19

8 months ago

0.2.18

8 months ago

0.2.17

8 months ago

0.2.52

6 months ago

0.2.51

6 months ago

0.2.50

6 months ago

0.2.16

8 months ago

0.2.59

5 months ago

0.2.15

8 months ago

0.2.58

5 months ago

0.2.56

5 months ago

0.2.55

6 months ago

0.2.54

6 months ago

0.2.53

6 months ago

0.2.41

6 months ago

0.2.40

6 months ago

0.2.49

6 months ago

0.2.48

6 months ago

0.2.47

6 months ago

0.2.46

6 months ago

0.2.45

6 months ago

0.2.44

6 months ago

0.2.43

6 months ago

0.2.42

6 months ago

0.2.39

6 months ago

0.2.30

7 months ago

0.2.38

6 months ago

0.2.37

6 months ago

0.2.36

6 months ago

0.2.35

6 months ago

0.2.34

7 months ago

0.2.33

7 months ago

0.2.32

7 months ago

0.2.31

7 months ago

0.2.29

7 months ago

0.2.28

7 months ago

0.1.11

8 months ago

0.2.14

8 months ago

0.2.13

8 months ago

0.2.12

8 months ago

0.2.11

8 months ago

0.2.10

8 months ago

0.2.1

8 months ago

0.2.0

8 months ago

0.2.7

8 months ago

0.1.8

8 months ago

0.2.6

8 months ago

0.1.7

8 months ago

0.2.9

8 months ago

0.2.8

8 months ago

0.1.9

8 months ago

0.2.3

8 months ago

0.2.2

8 months ago

0.2.5

8 months ago

0.1.6

8 months ago

0.2.4

8 months ago

0.1.5

8 months ago

0.1.4

8 months ago

0.1.3

8 months ago

0.1.2

8 months ago

0.1.1

8 months ago

0.1.0

8 months ago