cli-forge 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,11 @@
1
+ # cli-forge
2
+
3
+ This library was generated with [Nx](https://nx.dev).
4
+
5
+ ## Building
6
+
7
+ Run `nx build cli-forge` to build the library.
8
+
9
+ ## Running unit tests
10
+
11
+ Run `nx test cli-forge` to execute the unit tests via [Vitest](https://vitest.dev/).
package/package.json ADDED
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "cli-forge",
3
+ "version": "0.1.0",
4
+ "dependencies": {
5
+ "tslib": "^2.3.0"
6
+ },
7
+ "type": "commonjs",
8
+ "main": "./src/index.js",
9
+ "typings": "./src/index.d.ts",
10
+ "types": "./src/index.d.ts"
11
+ }
package/src/index.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from './lib/cli-forge';
package/src/index.js ADDED
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./lib/cli-forge"), exports);
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/cli-forge/src/index.ts"],"names":[],"mappings":";;;AAAA,0DAAgC"}
@@ -0,0 +1,35 @@
1
+ import { ArrayOptionConfig, OptionConfig, ParsedArgs } from '@cli-forge/parser';
2
+ type CLICommandOptions<TInitial extends ParsedArgs, TArgs extends TInitial> = {
3
+ description?: string;
4
+ builder?: (parser: CLI<TInitial>) => CLI<TArgs>;
5
+ handler: (args: TArgs) => void;
6
+ };
7
+ export declare class CLI<T extends ParsedArgs> {
8
+ name: string;
9
+ protected configuration?: CLICommandOptions<T, T> | undefined;
10
+ private commands;
11
+ private commandChain;
12
+ private requiresCommand;
13
+ private parser;
14
+ constructor(name: string, configuration?: CLICommandOptions<T, T> | undefined);
15
+ command<TArgs extends T>(key: string, options: CLICommandOptions<T, TArgs>): this;
16
+ option<TOption extends string, TOptionConfig extends OptionConfig>(name: TOption, config: TOptionConfig): CLI<T & { [key in TOption]: TOptionConfig["coerce"] extends (value: string) => infer TCoerce ? TCoerce : {
17
+ string: string;
18
+ number: number;
19
+ boolean: boolean;
20
+ array: (TOptionConfig extends ArrayOptionConfig<string | number> ? TOptionConfig["items"] extends "string" ? string : number : never)[];
21
+ }[TOptionConfig["type"]]; }>;
22
+ positional<TOption extends string, TOptionConfig extends OptionConfig>(name: TOption, config: TOptionConfig): CLI<T & { [key in TOption]: {
23
+ string: string;
24
+ number: number;
25
+ boolean: boolean;
26
+ array: (TOptionConfig extends ArrayOptionConfig<string | number> ? TOptionConfig["items"] extends "string" ? string : number : never)[];
27
+ }[TOptionConfig["type"]]; }>;
28
+ demandCommand(): this;
29
+ formatHelp(): string;
30
+ printHelp(): void;
31
+ runCommand<T extends ParsedArgs>(cmd: CLI<T>, args: T): Promise<void>;
32
+ forge(args?: string[]): Promise<void>;
33
+ }
34
+ export declare function cli(name: string): CLI<ParsedArgs>;
35
+ export default cli;
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CLI = void 0;
4
+ exports.cli = cli;
5
+ const tslib_1 = require("tslib");
6
+ const parser_1 = require("@cli-forge/parser");
7
+ class CLI {
8
+ constructor(name, configuration) {
9
+ this.name = name;
10
+ this.configuration = configuration;
11
+ this.commands = {};
12
+ this.commandChain = [];
13
+ this.requiresCommand = false;
14
+ this.parser = new parser_1.ArgvParser({
15
+ unmatchedParser: (arg, tokens, parser) => {
16
+ var _a, _b;
17
+ let currentCommand = this;
18
+ for (const command of this.commandChain) {
19
+ currentCommand = currentCommand.commands[command];
20
+ }
21
+ const command = currentCommand.commands[arg];
22
+ if (command && command.configuration) {
23
+ (_b = (_a = command.configuration).builder) === null || _b === void 0 ? void 0 : _b.call(_a, command);
24
+ this.commandChain.push(arg);
25
+ return true;
26
+ }
27
+ return false;
28
+ },
29
+ }).option('help', {
30
+ type: 'boolean',
31
+ alias: ['-h'],
32
+ description: 'Show help for the current command',
33
+ });
34
+ }
35
+ command(key, options) {
36
+ if (key === '$0') {
37
+ this.configuration = Object.assign(Object.assign({}, this.configuration), { builder: options.builder, handler: options.handler, description: options.description });
38
+ }
39
+ this.commands[key] = new CLI(key, options);
40
+ this.commands[key].parser = this.parser;
41
+ return this;
42
+ }
43
+ option(name, config) {
44
+ this.parser.option(name, config);
45
+ return this;
46
+ }
47
+ positional(name, config) {
48
+ this.parser.option(name, config);
49
+ return this;
50
+ }
51
+ demandCommand() {
52
+ this.requiresCommand = true;
53
+ return this;
54
+ }
55
+ formatHelp() {
56
+ var _a, _b;
57
+ const help = [];
58
+ let command = this;
59
+ for (const key of this.commandChain) {
60
+ command = command.commands[key];
61
+ }
62
+ help.push(`Usage: ${[this.name, ...this.commandChain].join(' ')}`);
63
+ if ((_a = command.configuration) === null || _a === void 0 ? void 0 : _a.description) {
64
+ help.push(command.configuration.description);
65
+ }
66
+ if (Object.keys(command.commands).length > 0) {
67
+ help.push('');
68
+ help.push('Commands:');
69
+ }
70
+ for (const key in command.commands) {
71
+ const subcommand = command.commands[key];
72
+ help.push(` ${key}${((_b = subcommand.configuration) === null || _b === void 0 ? void 0 : _b.description)
73
+ ? ' - ' + subcommand.configuration.description
74
+ : ''}`);
75
+ }
76
+ if (Object.keys(this.parser.configuredOptions).length > 0) {
77
+ help.push('');
78
+ help.push('Options:');
79
+ }
80
+ for (const key in this.parser.configuredOptions) {
81
+ const option = this.parser.configuredOptions[key];
82
+ help.push(` --${key}${option.description ? ' - ' + option.description : ''}`);
83
+ }
84
+ if (Object.keys(command.commands).length > 0) {
85
+ help.push(' ');
86
+ help.push(`Run \`${[this.name, ...this.commandChain].join(' ')} [command] --help\` for more information on a command`);
87
+ }
88
+ return help.join('\n');
89
+ }
90
+ printHelp() {
91
+ console.log(this.formatHelp());
92
+ }
93
+ runCommand(cmd, args) {
94
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
95
+ try {
96
+ if (cmd.requiresCommand) {
97
+ throw new Error(`${[this.name, ...this.commandChain].join(' ')} requires a command`);
98
+ }
99
+ yield cmd.configuration.handler(args);
100
+ }
101
+ catch (_a) {
102
+ process.exitCode = 1;
103
+ this.printHelp();
104
+ }
105
+ });
106
+ }
107
+ forge() {
108
+ return tslib_1.__awaiter(this, arguments, void 0, function* (args = process.argv.slice(2)) {
109
+ var _a, _b, _c;
110
+ // Parsing the args does two things:
111
+ // - builds argv to pass to handler
112
+ // - fills the command chain + registers commands
113
+ const argv = this.parser.parse(args);
114
+ let currentCommand = this;
115
+ for (const command of this.commandChain) {
116
+ currentCommand = currentCommand.commands[command];
117
+ }
118
+ if (argv.help) {
119
+ this.printHelp();
120
+ return;
121
+ }
122
+ const finalArgV = currentCommand === this
123
+ ? ((_c = (_b = (_a = this.configuration) === null || _a === void 0 ? void 0 : _a.builder) === null || _b === void 0 ? void 0 : _b.call(_a, this).parser) !== null && _c !== void 0 ? _c : this.parser).parse(args)
124
+ : argv;
125
+ yield this.runCommand(currentCommand, finalArgV);
126
+ });
127
+ }
128
+ }
129
+ exports.CLI = CLI;
130
+ function cli(name) {
131
+ return new CLI(name);
132
+ }
133
+ exports.default = cli;
134
+ //# sourceMappingURL=cli-forge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-forge.js","sourceRoot":"","sources":["../../../../../packages/cli-forge/src/lib/cli-forge.ts"],"names":[],"mappings":";;;AAuMA,kBAEC;;AAzMD,8CAK2B;AAQ3B,MAAa,GAAG;IAwBd,YACS,IAAY,EACT,aAAuC;QAD1C,SAAI,GAAJ,IAAI,CAAQ;QACT,kBAAa,GAAb,aAAa,CAA0B;QAzB3C,aAAQ,GAA6B,EAAE,CAAC;QACxC,iBAAY,GAAa,EAAE,CAAC;QAC5B,oBAAe,GAAY,KAAK,CAAC;QACjC,WAAM,GAAG,IAAI,mBAAU,CAAI;YACjC,eAAe,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;;gBACvC,IAAI,cAAc,GAAa,IAAI,CAAC;gBACpC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;oBACxC,cAAc,GAAG,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACpD,CAAC;gBACD,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAC7C,IAAI,OAAO,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;oBACrC,MAAA,MAAA,OAAO,CAAC,aAAa,EAAC,OAAO,mDAAG,OAAO,CAAC,CAAC;oBACzC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC5B,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;SACF,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;YAChB,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,CAAC,IAAI,CAAC;YACb,WAAW,EAAE,mCAAmC;SACjD,CAAC,CAAC;IAKA,CAAC;IAEJ,OAAO,CAAkB,GAAW,EAAE,OAAoC;QACxE,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,IAAI,CAAC,aAAa,mCACb,IAAI,CAAC,aAAa,KACrB,OAAO,EAAE,OAAO,CAAC,OAAc,EAC/B,OAAO,EAAE,OAAO,CAAC,OAAc,EAC/B,WAAW,EAAE,OAAO,CAAC,WAAW,GACjC,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAQ,GAAG,EAAE,OAAO,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CACJ,IAAa,EACb,MAAqB;QAErB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACjC,OAAO,IAiBN,CAAC;IACJ,CAAC;IAED,UAAU,CACR,IAAa,EACb,MAAqB;QAErB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACjC,OAAO,IAaN,CAAC;IACJ,CAAC;IAED,aAAa;QACX,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU;;QACR,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACpC,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAgB,CAAC;QACjD,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnE,IAAI,MAAA,OAAO,CAAC,aAAa,0CAAE,WAAW,EAAE,CAAC;YACvC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7C,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACzB,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACnC,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACzC,IAAI,CAAC,IAAI,CACP,KAAK,GAAG,GACN,CAAA,MAAA,UAAU,CAAC,aAAa,0CAAE,WAAW;gBACnC,CAAC,CAAC,KAAK,GAAG,UAAU,CAAC,aAAa,CAAC,WAAW;gBAC9C,CAAC,CAAC,EACN,EAAE,CACH,CAAC;QACJ,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1D,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACxB,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;YAChD,MAAM,MAAM,GAAI,IAAI,CAAC,MAAM,CAAC,iBAAyB,CACnD,GAAG,CACY,CAAC;YAClB,IAAI,CAAC,IAAI,CACP,OAAO,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CACpE,CAAC;QACJ,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACf,IAAI,CAAC,IAAI,CACP,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAC7C,GAAG,CACJ,uDAAuD,CACzD,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,SAAS;QACP,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IACjC,CAAC;IAEK,UAAU,CAAuB,GAAW,EAAE,IAAO;;YACzD,IAAI,CAAC;gBACH,IAAI,GAAG,CAAC,eAAe,EAAE,CAAC;oBACxB,MAAM,IAAI,KAAK,CACb,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,qBAAqB,CACpE,CAAC;gBACJ,CAAC;gBACD,MAAM,GAAG,CAAC,aAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACzC,CAAC;YAAC,WAAM,CAAC;gBACP,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACrB,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,CAAC;QACH,CAAC;KAAA;IAEK,KAAK;qEAAC,OAAiB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;;YAChD,oCAAoC;YACpC,mCAAmC;YACnC,iDAAiD;YACjD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,cAAc,GAAa,IAAI,CAAC;YACpC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACxC,cAAc,GAAG,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACpD,CAAC;YACD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjB,OAAO;YACT,CAAC;YAED,MAAM,SAAS,GACb,cAAc,KAAK,IAAI;gBACrB,CAAC,CAAC,CAAC,MAAA,MAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,OAAO,mDAAG,IAAI,EAAE,MAAM,mCAAI,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAC/D,IAAI,CACL;gBACH,CAAC,CAAC,IAAI,CAAC;YAEX,MAAM,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;QACnD,CAAC;KAAA;CACF;AAxLD,kBAwLC;AAED,SAAgB,GAAG,CAAC,IAAY;IAC9B,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;AACvB,CAAC;AAED,kBAAe,GAAG,CAAC"}