cli-forge 0.6.0 → 0.8.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.
Files changed (37) hide show
  1. package/bin/cli.js +3 -1
  2. package/bin/cli.js.map +1 -1
  3. package/bin/commands/generate-documentation.d.ts +2 -2
  4. package/bin/commands/generate-documentation.js +42 -13
  5. package/bin/commands/generate-documentation.js.map +1 -1
  6. package/bin/commands/init.d.ts +2 -2
  7. package/bin/commands/init.js +103 -13
  8. package/bin/commands/init.js.map +1 -1
  9. package/package.json +2 -2
  10. package/src/index.d.ts +4 -1
  11. package/src/index.js +9 -4
  12. package/src/index.js.map +1 -1
  13. package/src/lib/cli-option-groups.d.ts +7 -0
  14. package/src/lib/cli-option-groups.js +62 -0
  15. package/src/lib/cli-option-groups.js.map +1 -0
  16. package/src/lib/composable-builder.d.ts +3 -0
  17. package/src/lib/composable-builder.js +7 -0
  18. package/src/lib/composable-builder.js.map +1 -0
  19. package/src/lib/documentation.d.ts +15 -21
  20. package/src/lib/documentation.js +34 -2
  21. package/src/lib/documentation.js.map +1 -1
  22. package/src/lib/format-help.d.ts +2 -0
  23. package/src/lib/format-help.js +114 -0
  24. package/src/lib/format-help.js.map +1 -0
  25. package/src/lib/interactive-shell.d.ts +2 -2
  26. package/src/lib/interactive-shell.js +4 -1
  27. package/src/lib/interactive-shell.js.map +1 -1
  28. package/src/lib/internal-cli.d.ts +122 -0
  29. package/src/lib/{cli-forge.js → internal-cli.js} +63 -111
  30. package/src/lib/internal-cli.js.map +1 -0
  31. package/src/lib/{cli-forge.d.ts → public-api.d.ts} +60 -114
  32. package/src/lib/public-api.js +15 -0
  33. package/src/lib/public-api.js.map +1 -0
  34. package/src/lib/test-harness.d.ts +1 -1
  35. package/src/lib/test-harness.js +5 -3
  36. package/src/lib/test-harness.js.map +1 -1
  37. package/src/lib/cli-forge.js.map +0 -1
@@ -1,30 +1,4 @@
1
- import { ArrayOptionConfig, OptionConfig, ParsedArgs } from '@cli-forge/parser';
2
- export interface CLIHandlerContext {
3
- command: CLI<any>;
4
- }
5
- export type CLICommandOptions<TInitial extends ParsedArgs, TArgs extends TInitial = TInitial> = {
6
- description?: string;
7
- builder?: (parser: CLI<TInitial>) => CLI<TArgs>;
8
- handler?: (args: TArgs, context: CLIHandlerContext) => void | Promise<void>;
9
- usage?: string;
10
- examples?: string[];
11
- };
12
- export type Command<TInitial extends ParsedArgs = any, TArgs extends TInitial = TInitial> = ({
13
- name: string;
14
- } & CLICommandOptions<TInitial, TArgs>) | CLI<TArgs>;
15
- /**
16
- * Error Handler for CLI applications. Error handlers should re-throw the error if they cannot handle it.
17
- *
18
- * @param e The error that was thrown.
19
- * @param actions Actions that can be taken by the error handler. Prefer using these over process.exit for better support of interactive shells.
20
- */
21
- export type ErrorHandler = (e: unknown, actions: {
22
- /**
23
- * Exits the process immediately.
24
- * @param code
25
- */
26
- exit: (code?: number) => void;
27
- }) => void;
1
+ import { OptionConfig, OptionConfigToType, ParsedArgs } from '@cli-forge/parser';
28
2
  /**
29
3
  * The interface for a CLI application or subcommands.
30
4
  *
@@ -86,13 +60,8 @@ export interface CLI<TArgs extends ParsedArgs = ParsedArgs> {
86
60
  * @param config Configuration for the option. See {@link OptionConfig}.
87
61
  * @returns Updated CLI instance with the new option registered.
88
62
  */
89
- option<TOption extends string, TOptionConfig extends OptionConfig>(name: TOption, config: TOptionConfig): CLI<TArgs & {
90
- [key in TOption]: TOptionConfig['coerce'] extends (value: string) => infer TCoerce ? TCoerce : {
91
- string: string;
92
- number: number;
93
- boolean: boolean;
94
- array: (TOptionConfig extends ArrayOptionConfig<string | number> ? TOptionConfig['items'] extends 'string' ? string : number : never)[];
95
- }[TOptionConfig['type']];
63
+ option<TOption extends string, const TOptionConfig extends OptionConfig>(name: TOption, config: TOptionConfig): CLI<TArgs & {
64
+ [key in TOption]: OptionConfigToType<TOptionConfig>;
96
65
  }>;
97
66
  /**
98
67
  * Registers a new positional argument for the CLI command. This argument will be accessible
@@ -101,13 +70,8 @@ export interface CLI<TArgs extends ParsedArgs = ParsedArgs> {
101
70
  * @param config Configuration for the positional argument. See {@link OptionConfig}.
102
71
  * @returns Updated CLI instance with the new positional argument registered.
103
72
  */
104
- positional<TOption extends string, TOptionConfig extends OptionConfig>(name: TOption, config: TOptionConfig): CLI<TArgs & {
105
- [key in TOption]: TOptionConfig['coerce'] extends (value: string) => infer TCoerce ? TCoerce : {
106
- string: string;
107
- number: number;
108
- boolean: boolean;
109
- array: (TOptionConfig extends ArrayOptionConfig<string | number> ? TOptionConfig['items'] extends 'string' ? string : number : never)[];
110
- }[TOptionConfig['type']];
73
+ positional<TOption extends string, const TOptionConfig extends OptionConfig>(name: TOption, config: TOptionConfig): CLI<TArgs & {
74
+ [key in TOption]: OptionConfigToType<TOptionConfig>;
111
75
  }>;
112
76
  /**
113
77
  * Adds support for reading CLI options from environment variables.
@@ -151,6 +115,13 @@ export interface CLI<TArgs extends ParsedArgs = ParsedArgs> {
151
115
  * Prints help text to stdout.
152
116
  */
153
117
  printHelp(): void;
118
+ group({ label, keys, sortOrder, }: {
119
+ label: string;
120
+ keys: (keyof TArgs)[];
121
+ sortOrder: number;
122
+ }): CLI<TArgs>;
123
+ group(label: string, keys: (keyof TArgs)[]): CLI<TArgs>;
124
+ middleware(callback: (args: TArgs) => void): CLI<TArgs>;
154
125
  /**
155
126
  * Parses argv and executes the CLI
156
127
  * @param args argv. Defaults to process.argv.slice(2)
@@ -158,99 +129,74 @@ export interface CLI<TArgs extends ParsedArgs = ParsedArgs> {
158
129
  */
159
130
  forge(args?: string[]): Promise<TArgs>;
160
131
  }
132
+ export interface CLIHandlerContext {
133
+ command: CLI<any>;
134
+ }
161
135
  /**
162
- * The base class for a CLI application. This class is used to define the structure of the CLI.
163
- *
164
- * {@link cli} is provided as a small helper function to create a new CLI instance.
165
- *
166
- * @example
167
- * ```ts
168
- * import { cli } from 'cli-forge';
169
- *
170
- * cli('basic-cli').command('hello', {
171
- * builder: (args) =>
172
- * args.option('name', {
173
- * type: 'string',
174
- * }),
175
- * handler: (args) => {
176
- * console.log(`Hello, ${args.name}!`);
177
- * }).forge();
178
- * ```
136
+ * Represents the configuration needed to create a CLI command.
179
137
  */
180
- export declare class InternalCLI<TArgs extends ParsedArgs = ParsedArgs> implements CLI<TArgs> {
181
- name: string;
138
+ export interface CLICommandOptions<
139
+ /**
140
+ * The type of the arguments that are already registered before `builder` is invoked.
141
+ */
142
+ TInitial extends ParsedArgs,
143
+ /**
144
+ * The type of the arguments that are registered after `builder` is invoked, and the type that is passed to the handler.
145
+ */
146
+ TArgs extends TInitial = TInitial> {
182
147
  /**
183
- * For internal use only. Stick to properties available on {@link CLI}.
148
+ * The command description. This will be displayed in the help text and generated docs.
184
149
  */
185
- registeredCommands: Record<string, InternalCLI<any>>;
150
+ description?: string;
186
151
  /**
187
- * For internal use only. Stick to properties available on {@link CLI}.
152
+ * The command builder. This function is called before the command is executed, and is used to register options and positional parameters.
153
+ * @param parser The parser instance to register options and positionals with.
188
154
  */
189
- commandChain: string[];
190
- private requiresCommand;
191
- private _configuration?;
192
- private _versionOverride?;
193
- private registeredErrorHandlers;
194
- get configuration(): CLICommandOptions<any, any> | undefined;
195
- private set configuration(value);
196
- private parser;
155
+ builder?: (parser: CLI<TInitial>) => CLI<TArgs>;
197
156
  /**
198
- * @param name What should the name of the cli command be?
199
- * @param configuration Configuration for the current CLI command.
157
+ * The command handler. This function is called when the command is executed.
158
+ * @param args The parsed arguments.
159
+ * @param context Context for the handler. Contains the command instance.
200
160
  */
201
- constructor(name: string, rootCommandConfiguration?: CLICommandOptions<TArgs>);
202
- withRootCommandConfiguration<TRootCommandArgs extends TArgs>(configuration: CLICommandOptions<TArgs, TRootCommandArgs>): InternalCLI<TArgs>;
203
- command<TCommandArgs extends TArgs>(cmd: Command<TArgs, TCommandArgs>): CLI<TArgs>;
204
- command<TCommandArgs extends TArgs>(key: string, options: CLICommandOptions<TArgs, TCommandArgs>): CLI<TArgs>;
205
- commands(commands: Command[]): CLI<TArgs>;
206
- commands(...commands: Command[]): CLI<TArgs>;
207
- option<TOption extends string, TOptionConfig extends OptionConfig>(name: TOption, config: TOptionConfig): any;
208
- positional<TOption extends string, TOptionConfig extends OptionConfig>(name: TOption, config: TOptionConfig): any;
209
- conflicts(...args: [string, string, ...string[]]): CLI<TArgs>;
210
- implies(option: string, ...impliedOptions: string[]): CLI<TArgs>;
211
- env(prefix?: string): this;
212
- demandCommand(): this;
213
- usage(usageText: string): this;
214
- examples(...examples: string[]): this;
215
- version(version?: string): this;
161
+ handler?: (args: TArgs, context: CLIHandlerContext) => void | Promise<void>;
216
162
  /**
217
- * Gets help text for the current command as a string.
218
- * @returns Help text for the current command.
163
+ * The usage text for the command. This text will be displayed in place of the default usage text in the help text and generated docs.
219
164
  */
220
- formatHelp(): string;
165
+ usage?: string;
221
166
  /**
222
- * Prints help text for the current command to the console.
167
+ * Examples to display in the help text and generated docs.
223
168
  */
224
- printHelp(): void;
169
+ examples?: string[];
225
170
  /**
226
- * Runs the current command.
227
- * @param cmd The command to run.
228
- * @param args The arguments to pass to the command.
171
+ * Hides the command from the help text and generated docs. Useful primarily for experimental or internal commands.
229
172
  */
230
- runCommand<T extends ParsedArgs>(cmd: InternalCLI<T>, args: T, originalArgV: string[]): Promise<void>;
231
- enableInteractiveShell(): this;
232
- private versionHandler;
233
- private withErrorHandlers;
234
- errorHandler(handler: ErrorHandler): this;
173
+ hidden?: boolean;
235
174
  /**
236
- * Parses argv and executes the CLI
237
- * @param args argv. Defaults to process.argv.slice(2)
238
- * @returns Promise that resolves when the handler completes.
175
+ * The epilogue text for the command. This text will be displayed at the end of the help text and generated docs.
239
176
  */
240
- forge: (args?: string[]) => Promise<Awaited<TArgs>>;
241
- getParser(): import("@cli-forge/parser").ReadonlyArgvParser<TArgs & {
242
- help: boolean;
243
- } & {
244
- version: boolean;
245
- }>;
246
- getSubcommands(): Readonly<Record<string, InternalCLI>>;
247
- clone(): InternalCLI<TArgs>;
177
+ epilogue?: string;
248
178
  }
179
+ export type Command<TInitial extends ParsedArgs = any, TArgs extends TInitial = TInitial> = ({
180
+ name: string;
181
+ } & CLICommandOptions<TInitial, TArgs>) | CLI<TArgs>;
182
+ /**
183
+ * Error Handler for CLI applications. Error handlers should re-throw the error if they cannot handle it.
184
+ *
185
+ * @param e The error that was thrown.
186
+ * @param actions Actions that can be taken by the error handler. Prefer using these over process.exit for better support of interactive shells.
187
+ */
188
+ export type ErrorHandler = (e: unknown, actions: {
189
+ /**
190
+ * Exits the process immediately.
191
+ * @param code
192
+ */
193
+ exit: (code?: number) => void;
194
+ }) => void;
249
195
  /**
250
- * Constructs a CLI instance. See {@link InternalCLI} for more information.
196
+ * Constructs a CLI instance. See {@link CLI} for more information.
251
197
  * @param name Name for the top level CLI
252
198
  * @param rootCommandConfiguration Configuration used when running the bare CLI. e.g. npx my-cli, rather than npx my-cli [cmd]
253
- * @returns A {@link InternalCLI} instance.
199
+ * @returns A {@link CLI} instance.
254
200
  */
255
201
  export declare function cli<TArgs extends ParsedArgs>(name: string, rootCommandConfiguration?: CLICommandOptions<ParsedArgs, TArgs>): CLI<TArgs>;
256
202
  export default cli;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cli = cli;
4
+ const internal_cli_1 = require("./internal-cli");
5
+ /**
6
+ * Constructs a CLI instance. See {@link CLI} for more information.
7
+ * @param name Name for the top level CLI
8
+ * @param rootCommandConfiguration Configuration used when running the bare CLI. e.g. npx my-cli, rather than npx my-cli [cmd]
9
+ * @returns A {@link CLI} instance.
10
+ */
11
+ function cli(name, rootCommandConfiguration) {
12
+ return new internal_cli_1.InternalCLI(name, rootCommandConfiguration);
13
+ }
14
+ exports.default = cli;
15
+ //# sourceMappingURL=public-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public-api.js","sourceRoot":"","sources":["../../../../../packages/cli-forge/src/lib/public-api.ts"],"names":[],"mappings":";;AAuQA,kBAKC;AAtQD,iDAA6C;AA2P7C;;;;;GAKG;AACH,SAAgB,GAAG,CACjB,IAAY,EACZ,wBAA+D;IAE/D,OAAO,IAAI,0BAAW,CAAC,IAAI,EAAE,wBAAwB,CAAsB,CAAC;AAC9E,CAAC;AAED,kBAAe,GAAG,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { ParsedArgs } from '@cli-forge/parser';
2
- import { CLI } from './cli-forge';
2
+ import { CLI } from './public-api';
3
3
  export type TestHarnessParseResult<T extends ParsedArgs> = {
4
4
  /**
5
5
  * Parsed arguments. Note the the typing of this is based on the CLI typings,
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TestHarness = void 0;
4
- const cli_forge_1 = require("./cli-forge");
4
+ const internal_cli_1 = require("./internal-cli");
5
5
  /**
6
6
  * Utility for testing CLI instances. Can check argument parsing and validation, including
7
7
  * command chain resolution.
@@ -9,7 +9,7 @@ const cli_forge_1 = require("./cli-forge");
9
9
  class TestHarness {
10
10
  cli;
11
11
  constructor(cli) {
12
- if (cli instanceof cli_forge_1.InternalCLI) {
12
+ if (cli instanceof internal_cli_1.InternalCLI) {
13
13
  this.cli = cli;
14
14
  mockHandler(cli);
15
15
  }
@@ -28,7 +28,9 @@ class TestHarness {
28
28
  exports.TestHarness = TestHarness;
29
29
  function mockHandler(cli) {
30
30
  if (cli.configuration?.handler) {
31
- cli.configuration.handler = () => { };
31
+ cli.configuration.handler = () => {
32
+ // Mocked, should do nothing.
33
+ };
32
34
  }
33
35
  for (const command in cli.registeredCommands) {
34
36
  mockHandler(cli.registeredCommands[command]);
@@ -1 +1 @@
1
- {"version":3,"file":"test-harness.js","sourceRoot":"","sources":["../../../../../packages/cli-forge/src/lib/test-harness.ts"],"names":[],"mappings":";;;AACA,2CAA+C;AA6B/C;;;GAGG;AACH,MAAa,WAAW;IACd,GAAG,CAAiB;IAE5B,YAAY,GAAW;QACrB,IAAI,GAAG,YAAY,uBAAW,EAAE,CAAC;YAC/B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;YACf,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CACb,mEAAmE,CACpE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAc;QACxB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAExC,OAAO;YACL,IAAI,EAAE,IAAI;YACV,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY;SACpC,CAAC;IACJ,CAAC;CACF;AAtBD,kCAsBC;AAED,SAAS,WAAW,CAAC,GAAgB;IACnC,IAAI,GAAG,CAAC,aAAa,EAAE,OAAO,EAAE,CAAC;QAC/B,GAAG,CAAC,aAAa,CAAC,OAAO,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;IACvC,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,GAAG,CAAC,kBAAkB,EAAE,CAAC;QAC7C,WAAW,CAAC,GAAG,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"test-harness.js","sourceRoot":"","sources":["../../../../../packages/cli-forge/src/lib/test-harness.ts"],"names":[],"mappings":";;;AACA,iDAA6C;AA8B7C;;;GAGG;AACH,MAAa,WAAW;IACd,GAAG,CAAiB;IAE5B,YAAY,GAAW;QACrB,IAAI,GAAG,YAAY,0BAAW,EAAE,CAAC;YAC/B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;YACf,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CACb,mEAAmE,CACpE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAc;QACxB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAExC,OAAO;YACL,IAAI,EAAE,IAAI;YACV,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY;SACpC,CAAC;IACJ,CAAC;CACF;AAtBD,kCAsBC;AAED,SAAS,WAAW,CAAC,GAAgB;IACnC,IAAI,GAAG,CAAC,aAAa,EAAE,OAAO,EAAE,CAAC;QAC/B,GAAG,CAAC,aAAa,CAAC,OAAO,GAAG,GAAG,EAAE;YAC/B,6BAA6B;QAC/B,CAAC,CAAC;IACJ,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,GAAG,CAAC,kBAAkB,EAAE,CAAC;QAC7C,WAAW,CAAC,GAAG,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli-forge.js","sourceRoot":"","sources":["../../../../../packages/cli-forge/src/lib/cli-forge.ts"],"names":[],"mappings":"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"}