cli-nano 1.0.2 → 1.1.1

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 CHANGED
@@ -5,6 +5,7 @@
5
5
  [![npm](https://img.shields.io/npm/v/cli-nano.svg)](https://www.npmjs.com/package/cli-nano)
6
6
  [![npm](https://img.shields.io/npm/dy/cli-nano)](https://www.npmjs.com/package/cli-nano)
7
7
  [![npm bundle size](https://img.shields.io/bundlephobia/minzip/cli-nano?color=success&label=gzip)](https://bundlephobia.com/result?p=cli-nano)
8
+ <a href="https://nodejs.org/en/about/previous-releases"><img src="https://img.shields.io/node/v/cli-nano.svg" alt="Node" /></a>
8
9
 
9
10
  ## cli-nano
10
11
 
@@ -87,10 +88,13 @@ const config: Config = {
87
88
  display: {
88
89
  alias: 'D',
89
90
  required: true,
91
+ type: 'boolean',
90
92
  description: 'a required display option',
91
93
  }
92
94
  },
93
95
  version: '0.1.6',
96
+ helpOptLength: 18, // option name length shown in help (defaults to 20)
97
+ helpDescLength: 60, // description length shown in help (defaults to 65)
94
98
  };
95
99
 
96
100
  const args = parseArgs(config);
@@ -100,6 +104,31 @@ console.log(args);
100
104
  // startServer(args);
101
105
  ```
102
106
 
107
+ ### Usage with Type Inference
108
+
109
+ For full TypeScript auto-inference and IntelliSense of parsed arguments, define your config as a `const` and use `as const`:
110
+
111
+ ```ts
112
+ const config = {
113
+ ... // your config object as shown above
114
+ } as const;
115
+
116
+ const args = parseArgs<typeof config>(config);
117
+
118
+ // TypeScript will infer the correct types:
119
+ args.input; // [string, ...string[]] (required, variadic)
120
+ args.port; // number (optional, has default)
121
+ args.verbose; // boolean (optional)
122
+ args.display; // boolean (required)
123
+ ```
124
+
125
+ > **Tip:**
126
+ > Using `as const` preserves literal types and tuple information, so TypeScript can infer required/optional fields and argument types automatically.
127
+ > If you use `const config: Config = { ... }`, you get type checking but not full IntelliSense for parsed arguments.
128
+
129
+ > [!NOTE]
130
+ > For required+variadic positionals, the type is `[string, ...string[]]` (at least one value required). For optional variadic, it's string[]. For non-variadic, it's string.
131
+
103
132
  #### Example CLI Calls
104
133
 
105
134
  ```sh
@@ -146,4 +175,32 @@ See [examples/](examples/) for more usage patterns.
146
175
  `cli-nano` is currently used in these other projects of mine (feel free to edit this list):
147
176
 
148
177
  - [native-copyfiles](https://github.com/ghiscoding/native-copyfiles)
149
- - [remove-glob](https://github.com/ghiscoding/remove-glob)
178
+ - [remove-glob](https://github.com/ghiscoding/remove-glob)
179
+
180
+ ## Help Example
181
+
182
+ You can see below an example of a CLI help (which is the result of calling `--help` with the config shown avove).
183
+
184
+ Please note:
185
+
186
+ - `<option>` → required
187
+ - `[option]` → optional
188
+
189
+ ```
190
+ Usage:
191
+ serve <input..> [port] [options] Start a server with the given options
192
+
193
+ Arguments:
194
+ input serving files or directory <string..>
195
+ port port to bind on [number]
196
+
197
+ Options:
198
+ -d, --dryRun Show what would be done, but do not actually start the se... [boolean]
199
+ -e, --exclude pattern or glob to exclude (may be passed multiple times) [array]
200
+ -r, --rainbow Enable rainbow mode [boolean]
201
+ -V, --verbose print more information to console [boolean]
202
+ --up slice a path off the bottom of the paths [number]
203
+ -D, --display a required display option <boolean>
204
+ -h, --help Show help [boolean]
205
+ -v, --version Show version number [boolean]
206
+ ```
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { Config } from './interfaces.js';
1
+ import type { ArgsResult, Config } from './interfaces.js';
2
2
  export type * from './interfaces.js';
3
- export declare function parseArgs(config: Config): Record<string, any>;
3
+ export declare function parseArgs<C extends Config>(config: C): ArgsResult<C>;
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmB,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAG/D,mBAAmB,iBAAiB,CAAC;AAErC,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAkO7D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE3E,mBAAmB,iBAAiB,CAAC;AAOrC,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAgMpE"}
package/dist/index.js CHANGED
@@ -1,4 +1,7 @@
1
- import { camelToKebab, kebabToCamel, padString } from './utils.js';
1
+ const defaultOptions = {
2
+ help: { alias: 'h', description: 'Show help', type: 'boolean' },
3
+ version: { alias: 'v', description: 'Show version number', type: 'boolean' },
4
+ };
2
5
  export function parseArgs(config) {
3
6
  const { command, options, version } = config;
4
7
  // Normalize args to support --option=value and -o=value
@@ -14,11 +17,10 @@ export function parseArgs(config) {
14
17
  const aliasMap = new Map();
15
18
  for (const [key, opt] of Object.entries(options)) {
16
19
  if (opt.alias) {
17
- const optAlias = opt.alias;
18
- if (aliasMap.has(optAlias)) {
19
- throw new Error(`Duplicate alias detected: "${opt.alias}" used for both "${aliasMap.get(optAlias)}" and "${key}"`);
20
+ if (aliasMap.has(opt.alias)) {
21
+ throw new Error(`Duplicate alias detected: "${opt.alias}" used for both "${aliasMap.get(opt.alias)}" and "${key}"`);
20
22
  }
21
- aliasMap.set(optAlias, key);
23
+ aliasMap.set(opt.alias, key);
22
24
  }
23
25
  }
24
26
  // Handle --help and --version before anything else
@@ -55,7 +57,7 @@ export function parseArgs(config) {
55
57
  const remaining = positionals.length - (i + 1);
56
58
  const values = nonOptionArgs.slice(nonOptionIndex, nonOptionArgs.length - remaining);
57
59
  if (pos.required && values.length === 0) {
58
- const usagePositionals = positionals.map(posArg => `<${posArg.name}>`).join(' ');
60
+ const usagePositionals = buildUsagePositionals(positionals);
59
61
  throw new Error(`Missing required positional argument, i.e.: "${command.name} ${usagePositionals}"`);
60
62
  }
61
63
  result[pos.name] = !pos.required && values.length === 0 && pos.default !== undefined ? pos.default : values;
@@ -74,13 +76,12 @@ export function parseArgs(config) {
74
76
  result[pos.name] = pos.default;
75
77
  }
76
78
  else if (pos.required) {
77
- const usagePositionals = positionals.map(posArg => `<${posArg.name}>`).join(' ');
79
+ const usagePositionals = buildUsagePositionals(positionals);
78
80
  throw new Error(`Missing required positional argument, i.e.: "${command.name} ${usagePositionals}"`);
79
81
  }
80
82
  }
81
83
  }
82
84
  // Handle options
83
- // Start parsing options after all non-option args used for positionals
84
85
  argIndex = 0;
85
86
  const consumedArgs = new Set();
86
87
  // Mark all nonOptionArgs indices as consumed for positionals
@@ -106,52 +107,20 @@ export function parseArgs(config) {
106
107
  continue;
107
108
  }
108
109
  const argOrg = args[argIndex] || '';
109
- let arg = args[argIndex];
110
+ let arg = argOrg;
110
111
  let option;
111
112
  let configKey;
112
113
  if (argOrg.startsWith('-')) {
113
114
  if (argOrg.startsWith('--')) {
114
115
  arg = argOrg.slice(2);
115
- // Try all forms: as-is, kebab-to-camel, camel-to-kebab
116
- option = options[arg] || options[kebabToCamel(arg)] || options[camelToKebab(arg).replace(/-/g, '')];
117
- if (option) {
118
- // Find the actual config key
119
- for (const key of Object.keys(options)) {
120
- if (options[key] === option) {
121
- configKey = key;
122
- break;
123
- }
124
- }
125
- }
126
- if (!option) {
127
- // Try matching aliases in all forms
128
- for (const key of Object.keys(options)) {
129
- const opt = options[key];
130
- if (opt.alias && (opt.alias.includes(arg) || opt.alias.includes(kebabToCamel(arg)) || opt.alias.includes(camelToKebab(arg)))) {
131
- option = opt;
132
- configKey = key;
133
- break;
134
- }
135
- }
136
- }
116
+ [option, configKey] = findOption(options, arg);
137
117
  }
138
118
  else if (argOrg.startsWith('-')) {
139
- // alias
140
119
  arg = argOrg.slice(1);
141
- if (arg) {
142
- const optionKeys = Object.keys(options);
143
- for (let j = 0; j < optionKeys.length; j++) {
144
- const opt = options[optionKeys[j]];
145
- if (opt.alias && (opt.alias === arg || opt.alias === kebabToCamel(arg) || opt.alias === camelToKebab(arg))) {
146
- option = opt;
147
- configKey = optionKeys[j];
148
- break;
149
- }
150
- }
151
- }
120
+ [option, configKey] = findOption(options, arg);
152
121
  }
122
+ // Handle negated boolean in both forms
153
123
  if (!option) {
154
- // Handle negated boolean in both forms
155
124
  const isNegated = arg.startsWith('no-');
156
125
  const optionName = isNegated ? arg.slice(3) : arg;
157
126
  const camelOptionName = kebabToCamel(optionName);
@@ -219,46 +188,68 @@ export function parseArgs(config) {
219
188
  });
220
189
  return result;
221
190
  }
222
- /** print CLI help documentation to the screen */
223
- function printHelp(config) {
224
- const { command, options, version } = config;
225
- // Helper to truncate with ellipsis
226
- function truncateDesc(desc, max) {
227
- return desc.length > max ? `${desc.slice(0, max - 3)}...` : desc;
228
- }
229
- // Build usage string for positionals
230
- const usagePositionals = (command.positionals ?? [])
191
+ /** Format a text to a fixed length, truncating and padding as needed. */
192
+ function formatHelpText(text, max) {
193
+ const truncated = text.length > max ? `${text.slice(0, max - 3)}...` : text;
194
+ return truncated.padEnd(max);
195
+ }
196
+ /** Build the usage string for positionals, e.g. "<input..> [output]" */
197
+ function buildUsagePositionals(positionals = []) {
198
+ return positionals
231
199
  .map(p => {
232
200
  const variadic = p.variadic ? '..' : '';
233
- if (p.required) {
234
- return `<${p.name}${variadic}>`;
235
- }
236
- return `[${p.name}${variadic}]`;
201
+ return p.required ? `<${p.name}${variadic}>` : `[${p.name}${variadic}]`;
237
202
  })
238
203
  .join(' ');
204
+ }
205
+ /** Format the option/argument type for help output */
206
+ function formatOptionType(type, variadic, required) {
207
+ const t = type || 'string';
208
+ const variadicStr = variadic ? '..' : '';
209
+ return required ? `<${t}${variadicStr}>` : `[${t}${variadicStr}]`;
210
+ }
211
+ /** Helper to find an option and its config key by argument name or alias. */
212
+ function findOption(options, arg) {
213
+ // Try all forms: as-is, kebab-to-camel, camel-to-kebab
214
+ const option = options[arg] || options[kebabToCamel(arg)] || options[camelToKebab(arg).replace(/-/g, '')];
215
+ if (option) {
216
+ const configKey = Object.keys(options).find(key => options[key] === option);
217
+ return [option, configKey];
218
+ }
219
+ // Try matching alias in all forms
220
+ for (const key of Object.keys(options)) {
221
+ const opt = options[key];
222
+ if (opt.alias && (opt.alias === arg || opt.alias === kebabToCamel(arg) || opt.alias === camelToKebab(arg))) {
223
+ return [opt, key];
224
+ }
225
+ }
226
+ return [undefined, undefined];
227
+ }
228
+ /** Print CLI help documentation to the screen */
229
+ function printHelp(config) {
230
+ const { command, options, version, helpOptLength = 20, helpDescLength = 65 } = config;
231
+ const usagePositionals = buildUsagePositionals(command.positionals);
239
232
  console.log('Usage:');
240
233
  console.log(` ${command.name} ${usagePositionals} [options] ${command.description}`);
241
- console.log('\nPositionals:');
234
+ console.log('\nArguments:');
242
235
  command.positionals?.forEach(arg => {
243
- let desc = truncateDesc(arg.description, 65);
244
- desc = desc.padEnd(65); // Always pad to 65 chars for alignment
245
- console.log(` ${arg.name.padEnd(20)}${desc} [${arg.type || 'string'}]`);
236
+ console.log(` ${formatHelpText(arg.name, helpOptLength)}${formatHelpText(arg.description, helpDescLength)} ${formatOptionType(arg.type, arg.variadic, arg.required)}`);
246
237
  });
247
238
  console.log('\nOptions:');
248
- Object.keys(options).forEach(key => {
249
- const option = options[key];
250
- const requiredStr = option.required ? '[required]' : '';
239
+ for (const [key, option] of Object.entries({ ...options, ...defaultOptions })) {
251
240
  const aliasStr = option.alias ? `-${option.alias}, ` : '';
252
- let desc = truncateDesc(option.description || '', 65);
253
- desc = desc.padEnd(65); // Always pad to 65 chars for alignment
254
- console.log(` ${aliasStr.padEnd(4)}--${key.padEnd(14)}${desc} [${option.type || 'string'}]${requiredStr}`);
255
- });
256
- // Print default options (help and version)
257
- console.log('\nDefault options:');
258
- console.log(`${padString(' -h, --help', 21)} ${padString('Show help', 65)} [boolean]`);
259
- if (version) {
260
- console.log(`${padString(' -v, --version', 21)} ${padString('Show version number', 65)} [boolean]`);
241
+ if (!version && key === 'version') {
242
+ continue;
243
+ }
244
+ console.log(` ${aliasStr.padEnd(4)}--${formatHelpText(key, helpOptLength - 6)}${formatHelpText(option.description || '', helpDescLength)} ${formatOptionType(option.type, false, option.required)}`);
261
245
  }
262
- console.log('\n');
246
+ }
247
+ /** Utility to convert kebab-case to camelCase */
248
+ function kebabToCamel(str) {
249
+ return str.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
250
+ }
251
+ /** Utility to convert camelCase to kebab-case */
252
+ function camelToKebab(str) {
253
+ return str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();
263
254
  }
264
255
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -3,8 +3,8 @@ export interface ArgumentOptions {
3
3
  type?: 'string' | 'boolean' | 'number' | 'array';
4
4
  /** description of the flag option */
5
5
  description: string;
6
- /** defaults to undefined, provide shorter aliases as command options */
7
- alias?: string | string[];
6
+ /** defaults to undefined, provide shorter alias as command options */
7
+ alias?: string;
8
8
  /** default value for the option if not provided */
9
9
  default?: any;
10
10
  /** defaults to false, is the option required? */
@@ -30,15 +30,63 @@ export interface CommandOptions {
30
30
  /** command description */
31
31
  description: string;
32
32
  /** list of positional arguments */
33
- positionals?: PositionalArgument[];
33
+ positionals?: readonly PositionalArgument[];
34
34
  }
35
35
  /** CLI options */
36
36
  export interface Config {
37
37
  /** CLI definition */
38
38
  command: CommandOptions;
39
+ /** option name length (w/wo alias) shown in the help (defaults to 20) */
40
+ helpOptLength?: number;
41
+ /** description length shown in the help (defaults to 65) */
42
+ helpDescLength?: number;
39
43
  /** CLI list of flag options */
40
44
  options: Record<string, ArgumentOptions>;
41
45
  /** CLI or package version */
42
46
  version?: string;
43
47
  }
48
+ /** Utility type to map ArgumentOptions/PositionalArgument to their value type */
49
+ export type ArgValueType<T extends {
50
+ type?: string;
51
+ default?: any;
52
+ variadic?: boolean;
53
+ required?: boolean;
54
+ }> = T['type'] extends 'boolean' ? boolean : T['type'] extends 'number' ? number : T['type'] extends 'array' ? T extends {
55
+ variadic: true;
56
+ } ? T extends {
57
+ required: true;
58
+ } ? [string, ...string[]] : string[] : string | string[] : T['type'] extends 'string' ? T extends {
59
+ variadic: true;
60
+ } ? T extends {
61
+ required: true;
62
+ } ? [string, ...string[]] : string[] : string : T['type'] extends undefined ? T extends {
63
+ variadic: true;
64
+ } ? T extends {
65
+ required: true;
66
+ } ? [string, ...string[]] : string[] : string : T['default'] extends undefined ? string : T['default'];
67
+ /** Helper to get required keys */
68
+ type RequiredKeys<T> = {
69
+ [K in keyof T]: T[K] extends {
70
+ required: true;
71
+ } ? K : never;
72
+ }[keyof T];
73
+ /** Helper to get optional keys */
74
+ type OptionalKeys<T> = Exclude<keyof T, RequiredKeys<T>>;
75
+ /** Map options record to an object type with required/optional properties */
76
+ export type OptionsToObject<T extends Record<string, any>> = {
77
+ [K in RequiredKeys<T>]: ArgValueType<T[K]>;
78
+ } & {
79
+ [K in OptionalKeys<T>]?: ArgValueType<T[K]>;
80
+ };
81
+ /** Map positionals array to an object type with required/optional properties */
82
+ export type PositionalsToObject<T extends readonly PositionalArgument[] | undefined> = T extends readonly [infer P, ...infer Rest] ? P extends PositionalArgument ? (P['required'] extends true ? {
83
+ [K in P['name']]: ArgValueType<P>;
84
+ } : {
85
+ [K in P['name']]?: ArgValueType<P>;
86
+ }) & PositionalsToObject<Rest extends readonly PositionalArgument[] ? Rest : []> : PositionalsToObject<Rest extends readonly PositionalArgument[] ? Rest : []> : {
87
+ [key: string]: never;
88
+ };
89
+ /** The full result type for parseArgs */
90
+ export type ArgsResult<C extends Config> = PositionalsToObject<C['command']['positionals']> & OptionsToObject<C['options']>;
91
+ export {};
44
92
  //# sourceMappingURL=interfaces.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,kBAAkB;IAClB,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;IAEjD,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;IAEpB,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAE1B,mDAAmD;IACnD,OAAO,CAAC,EAAE,GAAG,CAAC;IAEd,iDAAiD;IACjD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IAEb,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;IAEpB,8BAA8B;IAC9B,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;IAEjD,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,mDAAmD;IACnD,OAAO,CAAC,EAAE,GAAG,CAAC;IAEd,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IAEb,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IAEpB,mCAAmC;IACnC,WAAW,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACpC;AAED,kBAAkB;AAClB,MAAM,WAAW,MAAM;IACrB,qBAAqB;IACrB,OAAO,EAAE,cAAc,CAAC;IAExB,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAEzC,6BAA6B;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cli-nano",
3
- "version": "1.0.2",
3
+ "version": "1.1.1",
4
4
  "description": "Mini command-line tool similar to `yargs` or `parseArgs` from Node.js that accepts positional arguments, flags and options.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -30,6 +30,10 @@
30
30
  "url": "https://github.com/ghiscoding/cli-nano/issues"
31
31
  },
32
32
  "engines": {
33
- "node": ">=20.0.0"
33
+ "node": "^20.0.0 || >=22.0.0"
34
+ },
35
+ "funding": {
36
+ "type": "ko_fi",
37
+ "url": "https://ko-fi.com/ghiscoding"
34
38
  }
35
39
  }
package/src/index.ts CHANGED
@@ -1,9 +1,13 @@
1
- import type { ArgumentOptions, Config } from './interfaces.js';
2
- import { camelToKebab, kebabToCamel, padString } from './utils.js';
1
+ import type { ArgsResult, ArgumentOptions, Config } from './interfaces.js';
3
2
 
4
3
  export type * from './interfaces.js';
5
4
 
6
- export function parseArgs(config: Config): Record<string, any> {
5
+ const defaultOptions: Record<string, ArgumentOptions> = {
6
+ help: { alias: 'h', description: 'Show help', type: 'boolean' },
7
+ version: { alias: 'v', description: 'Show version number', type: 'boolean' },
8
+ };
9
+
10
+ export function parseArgs<C extends Config>(config: C): ArgsResult<C> {
7
11
  const { command, options, version } = config;
8
12
 
9
13
  // Normalize args to support --option=value and -o=value
@@ -20,11 +24,10 @@ export function parseArgs(config: Config): Record<string, any> {
20
24
  const aliasMap = new Map<string, string>();
21
25
  for (const [key, opt] of Object.entries(options)) {
22
26
  if (opt.alias) {
23
- const optAlias = opt.alias as string;
24
- if (aliasMap.has(optAlias)) {
25
- throw new Error(`Duplicate alias detected: "${opt.alias}" used for both "${aliasMap.get(optAlias)}" and "${key}"`);
27
+ if (aliasMap.has(opt.alias)) {
28
+ throw new Error(`Duplicate alias detected: "${opt.alias}" used for both "${aliasMap.get(opt.alias)}" and "${key}"`);
26
29
  }
27
- aliasMap.set(optAlias, key);
30
+ aliasMap.set(opt.alias, key);
28
31
  }
29
32
  }
30
33
 
@@ -65,7 +68,7 @@ export function parseArgs(config: Config): Record<string, any> {
65
68
  const remaining = positionals.length - (i + 1);
66
69
  const values = nonOptionArgs.slice(nonOptionIndex, nonOptionArgs.length - remaining);
67
70
  if (pos.required && values.length === 0) {
68
- const usagePositionals = positionals.map(posArg => `<${posArg.name}>`).join(' ');
71
+ const usagePositionals = buildUsagePositionals(positionals);
69
72
  throw new Error(`Missing required positional argument, i.e.: "${command.name} ${usagePositionals}"`);
70
73
  }
71
74
  result[pos.name] = !pos.required && values.length === 0 && pos.default !== undefined ? pos.default : values;
@@ -81,14 +84,13 @@ export function parseArgs(config: Config): Record<string, any> {
81
84
  } else if (!pos.required && pos.default !== undefined) {
82
85
  result[pos.name] = pos.default;
83
86
  } else if (pos.required) {
84
- const usagePositionals = positionals.map(posArg => `<${posArg.name}>`).join(' ');
87
+ const usagePositionals = buildUsagePositionals(positionals);
85
88
  throw new Error(`Missing required positional argument, i.e.: "${command.name} ${usagePositionals}"`);
86
89
  }
87
90
  }
88
91
  }
89
92
 
90
93
  // Handle options
91
- // Start parsing options after all non-option args used for positionals
92
94
  argIndex = 0;
93
95
  const consumedArgs = new Set<number>();
94
96
  // Mark all nonOptionArgs indices as consumed for positionals
@@ -114,53 +116,21 @@ export function parseArgs(config: Config): Record<string, any> {
114
116
  continue;
115
117
  }
116
118
  const argOrg = args[argIndex] || '';
117
- let arg = args[argIndex];
119
+ let arg = argOrg;
118
120
  let option: ArgumentOptions | undefined;
119
121
  let configKey: string | undefined;
120
122
 
121
123
  if (argOrg.startsWith('-')) {
122
124
  if (argOrg.startsWith('--')) {
123
125
  arg = argOrg.slice(2);
124
- // Try all forms: as-is, kebab-to-camel, camel-to-kebab
125
- option = options[arg] || options[kebabToCamel(arg)] || options[camelToKebab(arg).replace(/-/g, '')];
126
- if (option) {
127
- // Find the actual config key
128
- for (const key of Object.keys(options)) {
129
- if (options[key] === option) {
130
- configKey = key;
131
- break;
132
- }
133
- }
134
- }
135
- if (!option) {
136
- // Try matching aliases in all forms
137
- for (const key of Object.keys(options)) {
138
- const opt = options[key];
139
- if (opt.alias && (opt.alias.includes(arg) || opt.alias.includes(kebabToCamel(arg)) || opt.alias.includes(camelToKebab(arg)))) {
140
- option = opt;
141
- configKey = key;
142
- break;
143
- }
144
- }
145
- }
126
+ [option, configKey] = findOption(options, arg);
146
127
  } else if (argOrg.startsWith('-')) {
147
- // alias
148
128
  arg = argOrg.slice(1);
149
- if (arg) {
150
- const optionKeys = Object.keys(options);
151
- for (let j = 0; j < optionKeys.length; j++) {
152
- const opt = options[optionKeys[j]];
153
- if (opt.alias && (opt.alias === arg || opt.alias === kebabToCamel(arg) || opt.alias === camelToKebab(arg))) {
154
- option = opt;
155
- configKey = optionKeys[j];
156
- break;
157
- }
158
- }
159
- }
129
+ [option, configKey] = findOption(options, arg);
160
130
  }
161
131
 
132
+ // Handle negated boolean in both forms
162
133
  if (!option) {
163
- // Handle negated boolean in both forms
164
134
  const isNegated = arg.startsWith('no-');
165
135
  const optionName = isNegated ? arg.slice(3) : arg;
166
136
  const camelOptionName = kebabToCamel(optionName);
@@ -228,52 +198,82 @@ export function parseArgs(config: Config): Record<string, any> {
228
198
  }
229
199
  });
230
200
 
231
- return result;
201
+ return result as ArgsResult<C>;
232
202
  }
233
203
 
234
- /** print CLI help documentation to the screen */
235
- function printHelp(config: Config) {
236
- const { command, options, version } = config;
237
-
238
- // Helper to truncate with ellipsis
239
- function truncateDesc(desc: string, max: number) {
240
- return desc.length > max ? `${desc.slice(0, max - 3)}...` : desc;
241
- }
204
+ /** Format a text to a fixed length, truncating and padding as needed. */
205
+ function formatHelpText(text: string, max: number) {
206
+ const truncated = text.length > max ? `${text.slice(0, max - 3)}...` : text;
207
+ return truncated.padEnd(max);
208
+ }
242
209
 
243
- // Build usage string for positionals
244
- const usagePositionals = (command.positionals ?? [])
210
+ /** Build the usage string for positionals, e.g. "<input..> [output]" */
211
+ function buildUsagePositionals(positionals: readonly any[] = []) {
212
+ return positionals
245
213
  .map(p => {
246
214
  const variadic = p.variadic ? '..' : '';
247
- if (p.required) {
248
- return `<${p.name}${variadic}>`;
249
- }
250
- return `[${p.name}${variadic}]`;
215
+ return p.required ? `<${p.name}${variadic}>` : `[${p.name}${variadic}]`;
251
216
  })
252
217
  .join(' ');
218
+ }
219
+
220
+ /** Format the option/argument type for help output */
221
+ function formatOptionType(type: string | undefined, variadic?: boolean, required?: boolean) {
222
+ const t = type || 'string';
223
+ const variadicStr = variadic ? '..' : '';
224
+ return required ? `<${t}${variadicStr}>` : `[${t}${variadicStr}]`;
225
+ }
226
+
227
+ /** Helper to find an option and its config key by argument name or alias. */
228
+ function findOption(options: Record<string, ArgumentOptions>, arg: string): [ArgumentOptions | undefined, string | undefined] {
229
+ // Try all forms: as-is, kebab-to-camel, camel-to-kebab
230
+ const option = options[arg] || options[kebabToCamel(arg)] || options[camelToKebab(arg).replace(/-/g, '')];
231
+ if (option) {
232
+ const configKey = Object.keys(options).find(key => options[key] === option);
233
+ return [option, configKey];
234
+ }
235
+ // Try matching alias in all forms
236
+ for (const key of Object.keys(options)) {
237
+ const opt = options[key];
238
+ if (opt.alias && (opt.alias === arg || opt.alias === kebabToCamel(arg) || opt.alias === camelToKebab(arg))) {
239
+ return [opt, key];
240
+ }
241
+ }
242
+ return [undefined, undefined];
243
+ }
244
+
245
+ /** Print CLI help documentation to the screen */
246
+ function printHelp(config: Config) {
247
+ const { command, options, version, helpOptLength = 20, helpDescLength = 65 } = config;
248
+ const usagePositionals = buildUsagePositionals(command.positionals);
249
+
253
250
  console.log('Usage:');
254
251
  console.log(` ${command.name} ${usagePositionals} [options] ${command.description}`);
255
- console.log('\nPositionals:');
252
+ console.log('\nArguments:');
256
253
  command.positionals?.forEach(arg => {
257
- let desc = truncateDesc(arg.description, 65);
258
- desc = desc.padEnd(65); // Always pad to 65 chars for alignment
259
- console.log(` ${arg.name.padEnd(20)}${desc} [${arg.type || 'string'}]`);
254
+ console.log(
255
+ ` ${formatHelpText(arg.name, helpOptLength)}${formatHelpText(arg.description, helpDescLength)} ${formatOptionType(arg.type, arg.variadic, arg.required)}`,
256
+ );
260
257
  });
261
258
 
262
259
  console.log('\nOptions:');
263
- Object.keys(options).forEach(key => {
264
- const option = options[key];
265
- const requiredStr = option.required ? '[required]' : '';
260
+ for (const [key, option] of Object.entries({ ...options, ...defaultOptions })) {
266
261
  const aliasStr = option.alias ? `-${option.alias}, ` : '';
267
- let desc = truncateDesc(option.description || '', 65);
268
- desc = desc.padEnd(65); // Always pad to 65 chars for alignment
269
- console.log(` ${aliasStr.padEnd(4)}--${key.padEnd(14)}${desc} [${option.type || 'string'}]${requiredStr}`);
270
- });
271
-
272
- // Print default options (help and version)
273
- console.log('\nDefault options:');
274
- console.log(`${padString(' -h, --help', 21)} ${padString('Show help', 65)} [boolean]`);
275
- if (version) {
276
- console.log(`${padString(' -v, --version', 21)} ${padString('Show version number', 65)} [boolean]`);
262
+ if (!version && key === 'version') {
263
+ continue;
264
+ }
265
+ console.log(
266
+ ` ${aliasStr.padEnd(4)}--${formatHelpText(key, helpOptLength - 6)}${formatHelpText(option.description || '', helpDescLength)} ${formatOptionType(option.type, false, option.required)}`,
267
+ );
277
268
  }
278
- console.log('\n');
269
+ }
270
+
271
+ /** Utility to convert kebab-case to camelCase */
272
+ function kebabToCamel(str: string) {
273
+ return str.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
274
+ }
275
+
276
+ /** Utility to convert camelCase to kebab-case */
277
+ function camelToKebab(str: string) {
278
+ return str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();
279
279
  }
package/src/interfaces.ts CHANGED
@@ -5,8 +5,8 @@ export interface ArgumentOptions {
5
5
  /** description of the flag option */
6
6
  description: string;
7
7
 
8
- /** defaults to undefined, provide shorter aliases as command options */
9
- alias?: string | string[];
8
+ /** defaults to undefined, provide shorter alias as command options */
9
+ alias?: string;
10
10
 
11
11
  /** default value for the option if not provided */
12
12
  default?: any;
@@ -43,7 +43,7 @@ export interface CommandOptions {
43
43
  description: string;
44
44
 
45
45
  /** list of positional arguments */
46
- positionals?: PositionalArgument[];
46
+ positionals?: readonly PositionalArgument[];
47
47
  }
48
48
 
49
49
  /** CLI options */
@@ -51,9 +51,66 @@ export interface Config {
51
51
  /** CLI definition */
52
52
  command: CommandOptions;
53
53
 
54
+ /** option name length (w/wo alias) shown in the help (defaults to 20) */
55
+ helpOptLength?: number;
56
+
57
+ /** description length shown in the help (defaults to 65) */
58
+ helpDescLength?: number;
59
+
54
60
  /** CLI list of flag options */
55
61
  options: Record<string, ArgumentOptions>;
56
62
 
57
63
  /** CLI or package version */
58
64
  version?: string;
59
65
  }
66
+
67
+ /** Utility type to map ArgumentOptions/PositionalArgument to their value type */
68
+ export type ArgValueType<T extends { type?: string; default?: any; variadic?: boolean; required?: boolean }> = T['type'] extends 'boolean'
69
+ ? boolean
70
+ : T['type'] extends 'number'
71
+ ? number
72
+ : T['type'] extends 'array'
73
+ ? T extends { variadic: true }
74
+ ? T extends { required: true }
75
+ ? [string, ...string[]]
76
+ : string[]
77
+ : string | string[]
78
+ : T['type'] extends 'string'
79
+ ? T extends { variadic: true }
80
+ ? T extends { required: true }
81
+ ? [string, ...string[]]
82
+ : string[]
83
+ : string
84
+ : T['type'] extends undefined
85
+ ? T extends { variadic: true }
86
+ ? T extends { required: true }
87
+ ? [string, ...string[]]
88
+ : string[]
89
+ : string
90
+ : T['default'] extends undefined
91
+ ? string
92
+ : T['default'];
93
+
94
+ /** Helper to get required keys */
95
+ type RequiredKeys<T> = {
96
+ [K in keyof T]: T[K] extends { required: true } ? K : never;
97
+ }[keyof T];
98
+
99
+ /** Helper to get optional keys */
100
+ type OptionalKeys<T> = Exclude<keyof T, RequiredKeys<T>>;
101
+
102
+ /** Map options record to an object type with required/optional properties */
103
+ export type OptionsToObject<T extends Record<string, any>> = { [K in RequiredKeys<T>]: ArgValueType<T[K]> } & {
104
+ [K in OptionalKeys<T>]?: ArgValueType<T[K]>;
105
+ };
106
+
107
+ /** Map positionals array to an object type with required/optional properties */
108
+ export type PositionalsToObject<T extends readonly PositionalArgument[] | undefined> = T extends readonly [infer P, ...infer Rest]
109
+ ? P extends PositionalArgument
110
+ ? (P['required'] extends true ? { [K in P['name']]: ArgValueType<P> } : { [K in P['name']]?: ArgValueType<P> }) &
111
+ PositionalsToObject<Rest extends readonly PositionalArgument[] ? Rest : []>
112
+ : PositionalsToObject<Rest extends readonly PositionalArgument[] ? Rest : []>
113
+ : { [key: string]: never };
114
+
115
+ /** The full result type for parseArgs */
116
+ export type ArgsResult<C extends Config> = PositionalsToObject<C['command']['positionals']> & OptionsToObject<C['options']>;
package/dist/utils.d.ts DELETED
@@ -1,7 +0,0 @@
1
- /** Utility to convert kebab-case to camelCase */
2
- export declare function kebabToCamel(str: string): string;
3
- /** Utility to convert camelCase to kebab-case */
4
- export declare function camelToKebab(str: string): string;
5
- /** add whitespace padding to any input string */
6
- export declare function padString(input: string, padding: number): string;
7
- //# sourceMappingURL=utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,UAEvC;AAED,iDAAiD;AACjD,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,UAEvC;AAED,iDAAiD;AACjD,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,UAEvD"}
package/dist/utils.js DELETED
@@ -1,13 +0,0 @@
1
- /** Utility to convert kebab-case to camelCase */
2
- export function kebabToCamel(str) {
3
- return str.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
4
- }
5
- /** Utility to convert camelCase to kebab-case */
6
- export function camelToKebab(str) {
7
- return str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();
8
- }
9
- /** add whitespace padding to any input string */
10
- export function padString(input, padding) {
11
- return input.padEnd(padding);
12
- }
13
- //# sourceMappingURL=utils.js.map
package/dist/utils.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,OAAO,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,OAAO,GAAG,CAAC,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;AAClE,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,OAAe;IACtD,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC"}
package/src/utils.ts DELETED
@@ -1,14 +0,0 @@
1
- /** Utility to convert kebab-case to camelCase */
2
- export function kebabToCamel(str: string) {
3
- return str.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
4
- }
5
-
6
- /** Utility to convert camelCase to kebab-case */
7
- export function camelToKebab(str: string) {
8
- return str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();
9
- }
10
-
11
- /** add whitespace padding to any input string */
12
- export function padString(input: string, padding: number) {
13
- return input.padEnd(padding);
14
- }