@mudah-cli/console 0.7.0 → 0.9.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Mudah Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,42 @@
1
+ # @mudah-cli/console
2
+
3
+ Command system: string signatures, typed dispatch, interactive prompts, and help rendering.
4
+
5
+ Part of [Mudah](https://github.com/thesimonharms/mudah) — an ergonomic, animation-rich CLI
6
+ framework.
7
+
8
+ ## Install
9
+
10
+ ```sh
11
+ npm install @mudah-cli/console
12
+ ```
13
+
14
+ ## Usage
15
+
16
+ ```ts
17
+ import { Command } from '@mudah-cli/console';
18
+
19
+ export default class DeployCommand extends Command {
20
+ signature = 'deploy {branch?} {ref=main} [--force] [--env=production]';
21
+ description = 'Deploy the application';
22
+
23
+ async handle(): Promise<number> {
24
+ this.output.success(`Deploying ${this.arg('branch') ?? 'main'}`);
25
+ if (!this.option('force')) {
26
+ const ok = await this.confirm('Continue?');
27
+ if (!ok) return 1;
28
+ }
29
+ return 0;
30
+ }
31
+ }
32
+ ```
33
+
34
+ Signatures are string-based: `{required}`, `{optional?}`, `{name=default}`, `{paths...}`, `[--flag]`,
35
+ `[--opt=value]`. A colon in the name (`db:status`) puts the command in a group. The kernel parses,
36
+ validates, and injects `input` for you; unknown options and missing args become usage errors
37
+ (exit 2). `parseSignature` / `parseInput` are exported for building your own runner.
38
+
39
+ ## Links
40
+
41
+ - [Full documentation](https://github.com/thesimonharms/mudah#readme)
42
+ - [License: MIT](LICENSE)
package/dist/command.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { UsageError, type Application } from '@mudah-cli/core';
1
+ import { type Application, UsageError } from '@mudah-cli/core';
2
2
  import type { Output } from '@mudah-cli/ui';
3
3
  import { Prompts } from './prompts.js';
4
4
  import { type ParsedInput, type ParsedSignature } from './signature.js';
@@ -24,12 +24,30 @@ export declare abstract class Command {
24
24
  signature: string;
25
25
  /** One-line description for help output. */
26
26
  description: string;
27
+ /**
28
+ * Catalog key for the help description. When the key resolves in the active
29
+ * locale it wins over the literal `description` (see `setLocale`).
30
+ */
31
+ descriptionKey: string;
27
32
  /**
28
33
  * Blurb for the group this command belongs to. Only meaningful on grouped
29
34
  * signatures (`db:migrate`); the first command to set it labels the group
30
35
  * in the command list.
31
36
  */
32
37
  groupDescription: string;
38
+ /** Additional names that also resolve to this command. */
39
+ aliases?: string[];
40
+ /** When set, the command is deprecated; a string is the deprecation reason. */
41
+ deprecated?: boolean | string;
42
+ /**
43
+ * Documented non-zero exit codes. Keys are numeric codes, values are
44
+ * short descriptions. Rendered in `--help` output for each command.
45
+ *
46
+ * ```ts
47
+ * static exitCodes = { 1: 'validation failed', 2: 'network error' };
48
+ * ```
49
+ */
50
+ static exitCodes?: Record<number, string>;
33
51
  /** The application (container, config, events). */
34
52
  app: Application;
35
53
  /** Styled output for the user. */
@@ -43,14 +61,14 @@ export declare abstract class Command {
43
61
  /** Abstract entry point. Return an exit code, or void for 0. */
44
62
  abstract handle(): Promise<number | void> | number | void;
45
63
  /** A positional argument value (or its signature default). */
46
- arg(name: string): string | undefined;
64
+ arg<T extends string | number = string>(name: string): T | undefined;
47
65
  /**
48
66
  * Values collected by a variadic argument (`{paths...}`) — empty when the
49
67
  * argument doesn't exist or collected nothing.
50
68
  */
51
69
  list(name: string): string[];
52
70
  /** An option value: boolean for flags, string for `--opt=value`. */
53
- option<T extends string | boolean>(name: string): T | undefined;
71
+ option<T extends string | number | boolean = string | boolean>(name: string): T | undefined;
54
72
  protected promptsInstance(): Prompts;
55
73
  protected ask(question: string, defaultValue?: string): Promise<string>;
56
74
  protected confirm(question: string, defaultValue?: boolean): Promise<boolean>;
@@ -65,4 +83,5 @@ export declare abstract class Command {
65
83
  */
66
84
  protected usageError(message: string, hint?: string): UsageError;
67
85
  }
68
- export { parseInput, parseSignature, ArgumentParseError, type ParsedInput, type ParsedSignature } from './signature.js';
86
+ export { editDistance, fuzzyRank, suggestCommand } from './fuzzy-match.js';
87
+ export { ArgumentParseError, type CoercionType, coerceValue, type ParsedInput, type ParsedSignature, parseInput, parseSignature, } from './signature.js';
package/dist/command.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { UsageError } from '@mudah-cli/core';
2
2
  import { Prompts } from './prompts.js';
3
- import { parseInput, parseSignature } from './signature.js';
3
+ import { parseSignature } from './signature.js';
4
4
  /**
5
5
  * Base class for all Mudah commands.
6
6
  *
@@ -23,12 +23,30 @@ export class Command {
23
23
  signature = '';
24
24
  /** One-line description for help output. */
25
25
  description = '';
26
+ /**
27
+ * Catalog key for the help description. When the key resolves in the active
28
+ * locale it wins over the literal `description` (see `setLocale`).
29
+ */
30
+ descriptionKey = '';
26
31
  /**
27
32
  * Blurb for the group this command belongs to. Only meaningful on grouped
28
33
  * signatures (`db:migrate`); the first command to set it labels the group
29
34
  * in the command list.
30
35
  */
31
36
  groupDescription = '';
37
+ /** Additional names that also resolve to this command. */
38
+ aliases;
39
+ /** When set, the command is deprecated; a string is the deprecation reason. */
40
+ deprecated;
41
+ /**
42
+ * Documented non-zero exit codes. Keys are numeric codes, values are
43
+ * short descriptions. Rendered in `--help` output for each command.
44
+ *
45
+ * ```ts
46
+ * static exitCodes = { 1: 'validation failed', 2: 'network error' };
47
+ * ```
48
+ */
49
+ static exitCodes;
32
50
  /** The application (container, config, events). */
33
51
  app;
34
52
  /** Styled output for the user. */
@@ -93,5 +111,6 @@ export class Command {
93
111
  });
94
112
  }
95
113
  }
96
- export { parseInput, parseSignature, ArgumentParseError } from './signature.js';
114
+ export { editDistance, fuzzyRank, suggestCommand } from './fuzzy-match.js';
115
+ export { ArgumentParseError, coerceValue, parseInput, parseSignature, } from './signature.js';
97
116
  //# sourceMappingURL=command.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"command.js","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAoB,MAAM,iBAAiB,CAAC;AAE/D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,cAAc,EAA0C,MAAM,gBAAgB,CAAC;AAEpG;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAgB,OAAO;IAC3B,iDAAiD;IACjD,SAAS,GAAG,EAAE,CAAC;IAEf,4CAA4C;IAC5C,WAAW,GAAG,EAAE,CAAC;IAEjB;;;;OAIG;IACH,gBAAgB,GAAG,EAAE,CAAC;IAEtB,mDAAmD;IACnD,GAAG,CAAe;IAClB,kCAAkC;IAClC,MAAM,CAAU;IAChB,0CAA0C;IAC1C,KAAK,CAAe;IAEZ,OAAO,GAAmB,IAAI,CAAC;IAE7B,eAAe;QACvB,OAAO,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAED,8CAA8C;IAC9C,QAAQ,CAAC,GAAgB,EAAE,MAAc,EAAE,KAAkB;QAC3D,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAKD,8DAA8D;IAC9D,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACH,IAAI,CAAC,IAAY;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACtC,CAAC;IAED,oEAAoE;IACpE,MAAM,CAA6B,IAAY;QAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAkB,CAAC;IACnD,CAAC;IAES,eAAe;QACvB,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAES,GAAG,CAAC,QAAgB,EAAE,YAAqB;QACnD,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;IAChE,CAAC;IAES,OAAO,CAAC,QAAgB,EAAE,YAAsB;QACxD,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;IACpE,CAAC;IAES,MAAM,CAAC,QAAgB,EAAE,OAAiB;QAClD,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;IAED,yFAAyF;IAC/E,WAAW,CAAC,QAAgB,EAAE,OAAiB,EAAE,cAAyB;QAClF,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC;IACnF,CAAC;IAED,qEAAqE;IAC3D,QAAQ,CAAC,QAAgB;QACjC,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACnD,CAAC;IAED;;;OAGG;IACO,UAAU,CAAC,OAAe,EAAE,IAAa;QACjD,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE;YAC7B,IAAI;YACJ,KAAK,EAAE,IAAI,CAAC,SAAS;SACtB,CAAC,CAAC;IACL,CAAC;CACF;AAED,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,kBAAkB,EAA0C,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Bounded Levenshtein edit distance. O(n*m) time and O(min(n,m)) space
3
+ * via a rolling row — fine for short command names against a small pool.
4
+ */
5
+ export declare function editDistance(a: string, b: string): number;
6
+ /**
7
+ * Rank a list of candidate names by closeness to `query`. Each score is the
8
+ * edit distance; candidates with a common prefix get a small bonus so
9
+ * `stagi` outranks `prod` against `staging`/`deploy`.
10
+ */
11
+ export declare function fuzzyRank(query: string, candidates: string[]): Array<{
12
+ name: string;
13
+ score: number;
14
+ }>;
15
+ /**
16
+ * Suggest a close match for a typo'd command. Returns the top candidate when
17
+ * it is within `maxDistance` edits and obviously closer than the runner-up.
18
+ *
19
+ * The default of 2 favors one- and two-character typos over random matches;
20
+ * a 4-edit distance to a 4-letter name is half the word wrong, so a generic
21
+ * hint is the more useful message.
22
+ */
23
+ export declare function suggestCommand(typo: string, candidates: string[], maxDistance?: number): string | undefined;
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Bounded Levenshtein edit distance. O(n*m) time and O(min(n,m)) space
3
+ * via a rolling row — fine for short command names against a small pool.
4
+ */
5
+ export function editDistance(a, b) {
6
+ if (a === b)
7
+ return 0;
8
+ if (a.length === 0)
9
+ return b.length;
10
+ if (b.length === 0)
11
+ return a.length;
12
+ // Ensure b is the shorter of the two so the inner loop is small.
13
+ const [s, t] = a.length >= b.length ? [a, b] : [b, a];
14
+ let prev = new Array(t.length + 1);
15
+ let curr = new Array(t.length + 1);
16
+ for (let j = 0; j <= t.length; j++)
17
+ prev[j] = j;
18
+ for (let i = 1; i <= s.length; i++) {
19
+ curr[0] = i;
20
+ for (let j = 1; j <= t.length; j++) {
21
+ const cost = s[i - 1] === t[j - 1] ? 0 : 1;
22
+ curr[j] = Math.min((prev[j] ?? 0) + 1, // delete
23
+ (curr[j - 1] ?? 0) + 1, // insert
24
+ (prev[j - 1] ?? 0) + cost);
25
+ }
26
+ [prev, curr] = [curr, prev];
27
+ }
28
+ return prev[t.length] ?? 0;
29
+ }
30
+ /**
31
+ * Rank a list of candidate names by closeness to `query`. Each score is the
32
+ * edit distance; candidates with a common prefix get a small bonus so
33
+ * `stagi` outranks `prod` against `staging`/`deploy`.
34
+ */
35
+ export function fuzzyRank(query, candidates) {
36
+ const q = query.toLowerCase();
37
+ return candidates
38
+ .map((name) => {
39
+ const lower = name.toLowerCase();
40
+ const distance = editDistance(q, lower);
41
+ const prefixBonus = lower.startsWith(q) ? -1 : 0;
42
+ return { name, score: distance + prefixBonus };
43
+ })
44
+ .sort((a, b) => a.score - b.score);
45
+ }
46
+ /**
47
+ * Suggest a close match for a typo'd command. Returns the top candidate when
48
+ * it is within `maxDistance` edits and obviously closer than the runner-up.
49
+ *
50
+ * The default of 2 favors one- and two-character typos over random matches;
51
+ * a 4-edit distance to a 4-letter name is half the word wrong, so a generic
52
+ * hint is the more useful message.
53
+ */
54
+ export function suggestCommand(typo, candidates, maxDistance = 2) {
55
+ if (candidates.length === 0 || typo.length === 0)
56
+ return undefined;
57
+ const ranked = fuzzyRank(typo, candidates);
58
+ const best = ranked[0];
59
+ const second = ranked[1];
60
+ if (!best || best.score > maxDistance)
61
+ return undefined;
62
+ if (second !== undefined && second.score === best.score)
63
+ return undefined;
64
+ return best.name;
65
+ }
66
+ //# sourceMappingURL=fuzzy-match.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fuzzy-match.js","sourceRoot":"","sources":["../src/fuzzy-match.ts"],"names":[],"mappings":"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"}
package/dist/help.js CHANGED
@@ -15,9 +15,7 @@ export function formatUsage(entry) {
15
15
  }
16
16
  }
17
17
  if (entry.signature.options.length > 0) {
18
- parts.push(entry.signature.options
19
- .map((o) => (o.takesValue ? `--${o.name}=` : `--${o.name}`))
20
- .join(' '));
18
+ parts.push(entry.signature.options.map((o) => (o.takesValue ? `--${o.name}=` : `--${o.name}`)).join(' '));
21
19
  }
22
20
  return parts.join(' ');
23
21
  }
@@ -29,6 +27,10 @@ export function formatCommandRow(entry, width) {
29
27
  /** Render the full command list, with grouped commands under headers. */
30
28
  export function renderCommandList(appName, version, entries, lines) {
31
29
  lines.push(`${appName} v${version}`, '');
30
+ lines.push('NAME');
31
+ lines.push(` ${appName} — command-line interface`, '');
32
+ lines.push('SYNOPSIS');
33
+ lines.push(` ${appName} <command> [options]`, '');
32
34
  if (entries.length === 0) {
33
35
  lines.push('No commands registered.');
34
36
  return;
@@ -71,11 +73,34 @@ function groupEntries(entries) {
71
73
  }
72
74
  /** Render single-command help. */
73
75
  export function renderCommandHelp(appName, entry, lines) {
76
+ lines.push('NAME');
77
+ lines.push(` ${entry.name}${entry.description ? ` — ${entry.description}` : ''}`, '');
78
+ lines.push('SYNOPSIS');
79
+ lines.push(` ${appName} ${formatUsage(entry)}`, '');
74
80
  lines.push(`Usage: ${appName} ${formatUsage(entry)}`, '');
75
81
  if (entry.description) {
82
+ lines.push('DESCRIPTION');
76
83
  lines.push('Description');
77
84
  lines.push(` ${entry.description}`, '');
78
85
  }
86
+ if (entry.deprecated) {
87
+ const reason = typeof entry.deprecated === 'string' && entry.deprecated.length > 0
88
+ ? entry.deprecated
89
+ : 'This command is deprecated.';
90
+ lines.push('Deprecated:');
91
+ lines.push(` ${reason}`, '');
92
+ }
93
+ if (entry.aliases && entry.aliases.length > 0) {
94
+ lines.push('Aliases:');
95
+ lines.push(` ${entry.aliases.join(', ')}`, '');
96
+ }
97
+ if (entry.exitCodes && Object.keys(entry.exitCodes).length > 0) {
98
+ lines.push('Exit codes:');
99
+ for (const [code, desc] of Object.entries(entry.exitCodes)) {
100
+ lines.push(` ${code} ${desc}`);
101
+ }
102
+ lines.push('');
103
+ }
79
104
  if (entry.signature.args.length > 0) {
80
105
  lines.push('Arguments:');
81
106
  const width = Math.max(...entry.signature.args.map((a) => a.name.length)) + 2;
@@ -104,5 +129,10 @@ export function renderCommandHelp(appName, entry, lines) {
104
129
  }
105
130
  lines.push(' --help Show this help');
106
131
  }
132
+ const seeAlso = [...(entry.aliases ?? [])];
133
+ if (seeAlso.length > 0) {
134
+ lines.push('', 'SEE ALSO');
135
+ lines.push(` ${seeAlso.join(', ')}`);
136
+ }
107
137
  }
108
138
  //# sourceMappingURL=help.js.map
package/dist/help.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"help.js","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export { Command } from './command.js';
2
2
  export { renderError } from './errors.js';
3
+ export { editDistance, fuzzyRank, suggestCommand } from './fuzzy-match.js';
3
4
  export { formatCommandRow, formatUsage, renderCommandHelp, renderCommandList } from './help.js';
4
- export { ConsoleKernel, splitCommandName, type CommandEntry, type CommandGroup, type CommandModule, } from './kernel.js';
5
- export { Prompts, type PromptOptions } from './prompts.js';
6
- export { ArgumentParseError, parseInput, parseSignature, type ParsedArg, type ParsedInput, type ParsedOption, type ParsedSignature, } from './signature.js';
5
+ export { type CommandEntry, type CommandGroup, type CommandModule, ConsoleKernel, type ConsoleKernelOptions, splitCommandName, } from './kernel.js';
6
+ export { type PromptOptions, Prompts } from './prompts.js';
7
+ export { ArgumentParseError, type CoercionType, coerceValue, type ParsedArg, type ParsedInput, type ParsedOption, type ParsedSignature, parseInput, parseSignature, } from './signature.js';
package/dist/index.js CHANGED
@@ -1,7 +1,8 @@
1
1
  export { Command } from './command.js';
2
2
  export { renderError } from './errors.js';
3
+ export { editDistance, fuzzyRank, suggestCommand } from './fuzzy-match.js';
3
4
  export { formatCommandRow, formatUsage, renderCommandHelp, renderCommandList } from './help.js';
4
5
  export { ConsoleKernel, splitCommandName, } from './kernel.js';
5
6
  export { Prompts } from './prompts.js';
6
- export { ArgumentParseError, parseInput, parseSignature, } from './signature.js';
7
+ export { ArgumentParseError, coerceValue, parseInput, parseSignature, } from './signature.js';
7
8
  //# 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":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAChG,OAAO,EACL,aAAa,EACb,gBAAgB,GAIjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,OAAO,EAAsB,MAAM,cAAc,CAAC;AAC3D,OAAO,EACL,kBAAkB,EAClB,UAAU,EACV,cAAc,GAKf,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAChG,OAAO,EAIL,aAAa,EAEb,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAsB,OAAO,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EACL,kBAAkB,EAElB,WAAW,EAKX,UAAU,EACV,cAAc,GACf,MAAM,gBAAgB,CAAC"}
package/dist/kernel.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { type Application, type CommandModule } from '@mudah-cli/core';
2
2
  import type { Output } from '@mudah-cli/ui';
3
- import { Command, type ParsedSignature } from './command.js';
3
+ import { type Command, type ParsedSignature } from './command.js';
4
4
  export type { CommandModule } from '@mudah-cli/core';
5
5
  export interface CommandEntry {
6
6
  name: string;
@@ -14,6 +14,12 @@ export interface CommandEntry {
14
14
  group?: string;
15
15
  /** Short blurb for the group, from the first command that declared one. */
16
16
  groupDescription?: string;
17
+ /** Alternate names that resolve to this command. */
18
+ aliases?: string[];
19
+ /** When set, the command is deprecated; a string is the deprecation reason. */
20
+ deprecated?: boolean | string;
21
+ /** Documented non-zero exit codes (code → description). */
22
+ exitCodes?: Record<number, string>;
17
23
  }
18
24
  /** A group of commands sharing a namespace. */
19
25
  export interface CommandGroup {
@@ -36,20 +42,59 @@ export declare function splitCommandName(name: string): {
36
42
  * 4. Inject app/output/input and call `handle()`.
37
43
  * 5. Emit `command.after` with the exit code and duration.
38
44
  *
45
+ * Aliases resolve to the canonical command; lifecycle events and lazy-provider
46
+ * booting always reference the canonical name.
47
+ *
39
48
  * Errors propagate to the caller (the `@mudah-cli/mudah` umbrella renders them and
40
49
  * maps them to exit codes).
41
50
  */
51
+ export interface ConsoleKernelOptions {
52
+ /** File used to persist command history across runs. */
53
+ historyFile?: string;
54
+ /** Max stored history lines. Default 1000. */
55
+ historyLimit?: number;
56
+ }
42
57
  export declare class ConsoleKernel {
43
58
  private readonly app;
44
59
  private readonly output;
45
60
  private readonly commands;
46
- constructor(app: Application, output: Output);
61
+ /** Alias name -> canonical command name. Kept separate from `commands` so the
62
+ * command list never shows alias duplicates. */
63
+ private readonly aliases;
64
+ private readonly _history;
65
+ private readonly historyFile?;
66
+ private readonly historyLimit;
67
+ /** Dispatched argv (most recent last). */
68
+ get history(): readonly string[];
69
+ /** Clear the command history. */
70
+ clearHistory(): void;
71
+ constructor(app: Application, output: Output, options?: ConsoleKernelOptions);
47
72
  /** Register a command module (default export is the command class). */
48
73
  register(module: CommandModule): this;
49
74
  /** All registered commands, sorted by name. */
50
75
  list(): CommandEntry[];
51
76
  has(name: string): boolean;
52
77
  get(name: string): CommandEntry | undefined;
78
+ /**
79
+ * Tab-completion candidates for a partial argv.
80
+ *
81
+ * - `[]` → all command names (including aliases).
82
+ * - `['g']` → commands starting with "g".
83
+ * - `['greet']` → `[]` (command is fully typed).
84
+ * - `['greet', '']` → the command's remaining options plus positional values.
85
+ * - `['greet', '--']` → `['--verbose']` etc. (option flags; `=` appended when the option takes a value).
86
+ * - `['deploy', '--env=pr']` → `['--env=production']` (enum option values).
87
+ * - `['deploy', 'sta']` → `['staging']` (enum positional values).
88
+ * - path/glob arguments complete against the filesystem.
89
+ */
90
+ complete(argv: string[]): string[];
91
+ /** Command names plus aliases, filtered by prefix. */
92
+ private commandCandidates;
93
+ /**
94
+ * Candidates for the token being typed after the command name. Options
95
+ * already present are dropped; `--opt=value` completes the value.
96
+ */
97
+ private completeForCommand;
53
98
  /**
54
99
  * Names of every registered group, sorted. Groups come from `group:name`
55
100
  * command signatures — registering `db:migrate` creates the `db` group.
@@ -61,4 +106,6 @@ export declare class ConsoleKernel {
61
106
  hasGroup(name: string): boolean;
62
107
  /** Dispatch argv (command name + arguments). Returns the exit code. */
63
108
  dispatch(argv: string[]): Promise<number>;
109
+ private loadHistory;
110
+ private persistHistory;
64
111
  }
package/dist/kernel.js CHANGED
@@ -1,5 +1,7 @@
1
- import { UsageError } from '@mudah-cli/core';
2
- import { Command, ArgumentParseError, parseInput, parseSignature, } from './command.js';
1
+ import { mkdirSync, readdirSync, readFileSync, writeFileSync } from 'node:fs';
2
+ import { dirname } from 'node:path';
3
+ import { hasMessage, t, UsageError } from '@mudah-cli/core';
4
+ import { ArgumentParseError, parseInput, parseSignature, suggestCommand, } from './command.js';
3
5
  /** Split `db:migrate` into its group and short name. */
4
6
  export function splitCommandName(name) {
5
7
  const separator = name.indexOf(':');
@@ -13,25 +15,98 @@ function groupDescriptionOf(instance) {
13
15
  return typeof value === 'string' ? value : undefined;
14
16
  }
15
17
  /**
16
- * The console kernel: command registry and dispatcher.
17
- *
18
- * Flow for `dispatch(argv)`:
19
- * 1. Resolve the command by name (UsageError when unknown/missing).
20
- * 2. Emit `command.before`, boot lazy providers for this command.
21
- * 3. Parse argv against the command's signature.
22
- * 4. Inject app/output/input and call `handle()`.
23
- * 5. Emit `command.after` with the exit code and duration.
24
- *
25
- * Errors propagate to the caller (the `@mudah-cli/mudah` umbrella renders them and
26
- * maps them to exit codes).
18
+ * Help text for a command: the locale-resolved `descriptionKey` when it
19
+ * exists, otherwise the literal `description`.
27
20
  */
21
+ function resolveDescription(instance) {
22
+ if (instance.descriptionKey.length > 0 && hasMessage(instance.descriptionKey)) {
23
+ return t(instance.descriptionKey);
24
+ }
25
+ return instance.description ?? '';
26
+ }
27
+ /**
28
+ * Completion values for a positional arg or option: declared enum values, or
29
+ * filesystem entries for `path` / `glob` types.
30
+ */
31
+ function completionValues(spec, partial) {
32
+ if (spec === undefined)
33
+ return [];
34
+ if (spec.type === 'enum' && spec.enumValues !== undefined) {
35
+ return spec.enumValues.filter((value) => value.startsWith(partial));
36
+ }
37
+ if (spec.type === 'path' || spec.type === 'glob')
38
+ return pathCandidates(partial);
39
+ return [];
40
+ }
41
+ /** Directory entries matching the last path segment; directories get a trailing slash. */
42
+ function pathCandidates(partial) {
43
+ const slash = partial.lastIndexOf('/');
44
+ const dir = slash === -1 ? '.' : partial.slice(0, slash) || '/';
45
+ const base = slash === -1 ? partial : partial.slice(slash + 1);
46
+ const prefix = slash === -1 ? '' : `${partial.slice(0, slash)}/`;
47
+ try {
48
+ return readdirSync(dir, { withFileTypes: true })
49
+ .filter((entry) => entry.name.startsWith(base) && !entry.name.startsWith('.'))
50
+ .map((entry) => `${prefix}${entry.name}${entry.isDirectory() ? '/' : ''}`)
51
+ .sort();
52
+ }
53
+ catch {
54
+ // An unreadable directory simply has no candidates.
55
+ return [];
56
+ }
57
+ }
58
+ /** The positional argument the next token would fill, respecting variadics. */
59
+ function positionalArgAt(entry, prior) {
60
+ const args = entry.signature.args;
61
+ if (args.length === 0)
62
+ return undefined;
63
+ const filled = prior.filter((token) => !token.startsWith('-')).length;
64
+ const last = args.at(-1);
65
+ if (last.variadic)
66
+ return filled >= args.length - 1 ? last : args[filled];
67
+ return args[filled];
68
+ }
69
+ /** Filter and dedupe aliases, excluding the canonical name. */
70
+ function normalizeAliases(aliases, canonical) {
71
+ if (!aliases)
72
+ return [];
73
+ const seen = new Set();
74
+ const out = [];
75
+ for (const alias of aliases) {
76
+ if (!alias || alias === canonical)
77
+ continue;
78
+ if (seen.has(alias))
79
+ continue;
80
+ seen.add(alias);
81
+ out.push(alias);
82
+ }
83
+ return out;
84
+ }
28
85
  export class ConsoleKernel {
29
86
  app;
30
87
  output;
31
88
  commands = new Map();
32
- constructor(app, output) {
89
+ /** Alias name -> canonical command name. Kept separate from `commands` so the
90
+ * command list never shows alias duplicates. */
91
+ aliases = new Map();
92
+ _history = [];
93
+ historyFile;
94
+ historyLimit;
95
+ /** Dispatched argv (most recent last). */
96
+ get history() {
97
+ return this._history;
98
+ }
99
+ /** Clear the command history. */
100
+ clearHistory() {
101
+ this._history.length = 0;
102
+ this.persistHistory();
103
+ }
104
+ constructor(app, output, options = {}) {
33
105
  this.app = app;
34
106
  this.output = output;
107
+ this.historyFile = options.historyFile;
108
+ this.historyLimit = options.historyLimit ?? 1000;
109
+ this.loadHistory();
35
110
  }
36
111
  /** Register a command module (default export is the command class). */
37
112
  register(module) {
@@ -52,7 +127,7 @@ export class ConsoleKernel {
52
127
  const entry = {
53
128
  name: signature.name,
54
129
  signature,
55
- description: instance.description ?? '',
130
+ description: resolveDescription(instance),
56
131
  factory: () => new Ctor(),
57
132
  };
58
133
  const group = splitCommandName(signature.name).group;
@@ -62,6 +137,18 @@ export class ConsoleKernel {
62
137
  if (declared !== undefined)
63
138
  entry.groupDescription = declared;
64
139
  }
140
+ const aliasList = normalizeAliases(instance.aliases, signature.name);
141
+ for (const alias of aliasList) {
142
+ // First-wins: an alias that already names a command is left untouched.
143
+ if (this.commands.has(alias) || this.aliases.has(alias))
144
+ continue;
145
+ this.aliases.set(alias, signature.name);
146
+ }
147
+ entry.aliases = aliasList;
148
+ entry.deprecated = instance.deprecated;
149
+ const exitCodesStatic = Ctor.exitCodes;
150
+ if (exitCodesStatic)
151
+ entry.exitCodes = exitCodesStatic;
65
152
  this.commands.set(signature.name, entry);
66
153
  return this;
67
154
  }
@@ -70,10 +157,67 @@ export class ConsoleKernel {
70
157
  return [...this.commands.values()].sort((a, b) => a.name.localeCompare(b.name));
71
158
  }
72
159
  has(name) {
73
- return this.commands.has(name);
160
+ return this.commands.has(name) || this.aliases.has(name);
74
161
  }
75
162
  get(name) {
76
- return this.commands.get(name);
163
+ const canonical = this.aliases.get(name);
164
+ return this.commands.get(canonical ?? name);
165
+ }
166
+ /**
167
+ * Tab-completion candidates for a partial argv.
168
+ *
169
+ * - `[]` → all command names (including aliases).
170
+ * - `['g']` → commands starting with "g".
171
+ * - `['greet']` → `[]` (command is fully typed).
172
+ * - `['greet', '']` → the command's remaining options plus positional values.
173
+ * - `['greet', '--']` → `['--verbose']` etc. (option flags; `=` appended when the option takes a value).
174
+ * - `['deploy', '--env=pr']` → `['--env=production']` (enum option values).
175
+ * - `['deploy', 'sta']` → `['staging']` (enum positional values).
176
+ * - path/glob arguments complete against the filesystem.
177
+ */
178
+ complete(argv) {
179
+ if (argv.length === 0)
180
+ return this.commandCandidates('');
181
+ if (argv.length === 1)
182
+ return this.commandCandidates(argv[0]);
183
+ const entry = this.get(argv[0]);
184
+ if (entry === undefined)
185
+ return [];
186
+ return this.completeForCommand(entry, argv.slice(1));
187
+ }
188
+ /** Command names plus aliases, filtered by prefix. */
189
+ commandCandidates(partial) {
190
+ const names = new Set(this.commands.keys());
191
+ for (const alias of this.aliases.keys())
192
+ names.add(alias);
193
+ return [...names].filter((name) => name.startsWith(partial)).sort();
194
+ }
195
+ /**
196
+ * Candidates for the token being typed after the command name. Options
197
+ * already present are dropped; `--opt=value` completes the value.
198
+ */
199
+ completeForCommand(entry, rest) {
200
+ const partial = rest.at(-1) ?? '';
201
+ const prior = rest.slice(0, -1);
202
+ // `--env=pr` → complete the value of a value-taking option.
203
+ if (partial.startsWith('--')) {
204
+ const eq = partial.indexOf('=');
205
+ if (eq !== -1) {
206
+ const optionName = partial.slice(2, eq);
207
+ const typed = partial.slice(eq + 1);
208
+ const option = entry.signature.options.find((o) => o.name === optionName);
209
+ return completionValues(option, typed).map((value) => `--${optionName}=${value}`);
210
+ }
211
+ }
212
+ const used = new Set(prior.filter((token) => token.startsWith('--')).map((token) => (token.split('=')[0] ?? token).slice(2)));
213
+ const candidates = [];
214
+ for (const option of entry.signature.options) {
215
+ if (used.has(option.name))
216
+ continue;
217
+ candidates.push(option.takesValue ? `--${option.name}=` : `--${option.name}`);
218
+ }
219
+ candidates.push(...completionValues(positionalArgAt(entry, prior), partial));
220
+ return candidates.filter((candidate) => candidate.startsWith(partial));
77
221
  }
78
222
  /**
79
223
  * Names of every registered group, sorted. Groups come from `group:name`
@@ -118,14 +262,21 @@ export class ConsoleKernel {
118
262
  hint: 'Run with --help to see available commands.',
119
263
  });
120
264
  }
121
- const entry = this.commands.get(name);
265
+ const entry = this.get(name);
122
266
  if (!entry) {
123
- throw new UsageError(`Unknown command "${name}".`, {
124
- hint: 'Run with --help to see available commands.',
125
- });
267
+ const suggestion = suggestCommand(name, [...this.commands.keys(), ...this.aliases.keys()]);
268
+ const hint = suggestion
269
+ ? `Did you mean "${suggestion}"?`
270
+ : 'Run with --help to see available commands.';
271
+ throw new UsageError(`Unknown command "${name}".`, { hint });
272
+ }
273
+ if (entry.deprecated) {
274
+ const reason = typeof entry.deprecated === 'string' && entry.deprecated.length > 0 ? entry.deprecated : '';
275
+ this.output.warn(`${entry.name} is deprecated${reason ? `: ${reason}` : ''}.`);
126
276
  }
127
- await this.app.events().emit('command.before', { command: name, argv });
128
- await this.app.bootLazyForCommand(name);
277
+ const canonical = entry.name;
278
+ await this.app.events().emit('command.before', { command: canonical, argv });
279
+ await this.app.bootLazyForCommand(canonical);
129
280
  let input;
130
281
  try {
131
282
  input = parseInput(entry.signature, argv.slice(1));
@@ -144,12 +295,43 @@ export class ConsoleKernel {
144
295
  exitCode = (await command.handle()) ?? 0;
145
296
  }
146
297
  catch (error) {
147
- await this.app.events().emit('command.error', { command: name, error });
298
+ await this.app.events().emit('command.error', { command: canonical, error });
148
299
  throw error;
149
300
  }
150
301
  const durationMs = Math.round(performance.now() - startedAt);
151
- await this.app.events().emit('command.after', { command: name, exitCode, durationMs });
302
+ await this.app.events().emit('command.after', { command: canonical, exitCode, durationMs });
303
+ this._history.push(argv.join(' '));
304
+ this.persistHistory();
152
305
  return exitCode;
153
306
  }
307
+ loadHistory() {
308
+ if (this.historyFile === undefined)
309
+ return;
310
+ try {
311
+ const text = readFileSync(this.historyFile, 'utf8');
312
+ for (const line of text.split('\n')) {
313
+ if (line.length > 0)
314
+ this._history.push(line);
315
+ }
316
+ if (this._history.length > this.historyLimit) {
317
+ this._history.splice(0, this._history.length - this.historyLimit);
318
+ }
319
+ }
320
+ catch {
321
+ // Missing file is a first run.
322
+ }
323
+ }
324
+ persistHistory() {
325
+ if (this.historyFile === undefined)
326
+ return;
327
+ try {
328
+ mkdirSync(dirname(this.historyFile), { recursive: true });
329
+ const lines = this._history.slice(-this.historyLimit);
330
+ writeFileSync(this.historyFile, `${lines.join('\n')}${lines.length > 0 ? '\n' : ''}`, 'utf8');
331
+ }
332
+ catch {
333
+ // A read-only filesystem just means history stays in memory.
334
+ }
335
+ }
154
336
  }
155
337
  //# sourceMappingURL=kernel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"kernel.js","sourceRoot":"","sources":["../src/kernel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kernel.js","sourceRoot":"","sources":["../src/kernel.ts"],"names":[],"mappings":"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"}
package/dist/prompts.js CHANGED
@@ -40,7 +40,10 @@ export class Prompts {
40
40
  return value === 'y' || value === 'yes' || value === 'true' || value === '1';
41
41
  }
42
42
  const def = options.defaultValue ?? false;
43
- const answer = await this.ask(`${question} [${def ? 'Y/n' : 'y/N'}]`, { ...options, defaultValue: undefined });
43
+ const answer = await this.ask(`${question} [${def ? 'Y/n' : 'y/N'}]`, {
44
+ ...options,
45
+ defaultValue: undefined,
46
+ });
44
47
  if (answer === '')
45
48
  return def;
46
49
  return answer.toLowerCase().startsWith('y');
@@ -69,7 +72,9 @@ export class Prompts {
69
72
  const interactive = (options.input ?? process.stdin).isTTY === true;
70
73
  if (!interactive) {
71
74
  writeOut(options.output, `\n${question}\n`);
72
- choices.forEach((choice, i) => writeOut(options.output, ` ${i + 1}. ${choice}\n`));
75
+ choices.forEach((choice, i) => {
76
+ writeOut(options.output, ` ${i + 1}. ${choice}\n`);
77
+ });
73
78
  const answer = await this.ask('Choose', options);
74
79
  const index = Number(answer) - 1;
75
80
  const choice = choices[index];
@@ -98,7 +103,9 @@ export class Prompts {
98
103
  const interactive = (options.input ?? process.stdin).isTTY === true;
99
104
  if (!interactive) {
100
105
  writeOut(options.output, `\n${question}\n`);
101
- choices.forEach((choice, i) => writeOut(options.output, ` ${i + 1}. ${choice}\n`));
106
+ choices.forEach((choice, i) => {
107
+ writeOut(options.output, ` ${i + 1}. ${choice}\n`);
108
+ });
102
109
  const answer = await this.ask('Choose (comma-separated numbers)', options);
103
110
  return parseNumberList(answer, choices.length);
104
111
  }
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAoBhD;;;;;;;;GAQG;AACH,MAAM,OAAO,OAAO;IACV,EAAE,GAA8B,IAAI,CAAC;IAErC,UAAU,CAAC,KAAyB,EAAE,MAA8B;QAC1E,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,IAAI,CAAC,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;gBACjC,KAAK,EAAE,KAAK,IAAI,OAAO,CAAC,KAAK;gBAC7B,MAAM,EAAE,MAAM,IAAI,OAAO,CAAC,MAAM;gBAChC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI;aACvC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAED,iFAAiF;IACjF,KAAK,CAAC,GAAG,CAAC,QAAgB,EAAE,OAAO,GAA8C,EAAE;QACjF,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC,WAAW,CAAC;QAClE,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACtF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,EAAE,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,MAAM,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE;gBAC9C,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7G,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,6BAA6B;IAC7B,KAAK,CAAC,OAAO,CAAC,QAAgB,EAAE,OAAO,GAA+C,EAAE;QACtF,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACtC,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACvD,OAAO,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,GAAG,CAAC;QAC/E,CAAC;QACD,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,IAAI,KAAK,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,EAAE,GAAG,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC;QAC/G,IAAI,MAAM,KAAK,EAAE;YAAE,OAAO,GAAG,CAAC;QAC9B,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,CAAC,QAAgB,EAAE,OAAiB,EAAE,OAAO,GAAkB,EAAE;QAC3E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAClE,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,gEAAgE;IAChE,KAAK,CAAC,WAAW,CAAC,QAAgB,EAAE,OAAiB,EAAE,OAAO,GAAkB,EAAE;QAChF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QAC9F,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACtC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,OAAO,CAAC,WAAW,oBAAoB,CAAC,CAAC;YACxG,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAClC,CAAC;QAED,qEAAqE;QACrE,uEAAuE;QACvE,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC;QACpE,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,QAAQ,IAAI,CAAC,CAAC;YAC5C,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC;YACpF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACjD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,MAAM,IAAI,CAAC,CAAC;YACzE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAClC,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAChF,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;IACtD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,WAAW,CACf,QAAgB,EAChB,OAAiB,EACjB,OAAO,GAAkD,EAAE;QAE3D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC1E,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,CAAC;IACzC,CAAC;IAED,6DAA6D;IAC7D,KAAK,CAAC,kBAAkB,CACtB,QAAgB,EAChB,OAAiB,EACjB,OAAO,GAAkD,EAAE;QAE3D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QACnG,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACtC,OAAO,eAAe,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC;QACpE,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,QAAQ,IAAI,CAAC,CAAC;YAC5C,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC;YACpF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,kCAAkC,EAAE,OAAO,CAAC,CAAC;YAC3E,OAAO,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/E,OAAO,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED,gFAAgF;IAChF,KAAK,CAAC,QAAQ,CAAC,QAAgB,EAAE,OAAO,GAAkB,EAAE;QAC1D,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC,WAAW,CAAC;QAClE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC;QAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;QAEhD,QAAQ,CAAC,MAAM,EAAE,GAAG,QAAQ,GAAG,CAAC,CAAC;QACjC,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YACzB,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YAC1D,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;YAChF,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACvB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,MAAM,GAAI,KAAwC,CAAC,KAAK,IAAI,KAAK,CAAC;QACxE,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACvB,KAAK,CAAC,MAAM,EAAE,CAAC;QACf,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,IAAI,CAAC;YACH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;gBAClC,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;gBAC/B,MAAM,KAAK,GAAG,CAAC,KAAsB,EAAQ,EAAE;oBAC7C,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;wBAC/C,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;4BAC3B,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;4BACzB,OAAO,EAAE,CAAC;4BACV,OAAO;wBACT,CAAC;wBACD,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;4BAC/B,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;wBAC7B,CAAC;6BAAM,IAAI,KAAK,CAAC,EAAE,KAAK,SAAS,IAAI,KAAK,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC;4BACrD,KAAK,IAAI,KAAK,CAAC,EAAE,CAAC;4BAClB,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;wBACxB,CAAC;oBACH,CAAC;gBACH,CAAC,CAAC;gBACF,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC1B,CAAC,CAAC,CAAC;QACL,CAAC;gBAAS,CAAC;YACT,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACzB,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACzB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAED,+EAA+E;AAC/E,SAAS,SAAS,CAChB,QAAgB,EAChB,OAAiB,EACjB,OAA8C;IAE9C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC;IAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAEhD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrF,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAE/B,MAAM,MAAM,GAAG,GAAa,EAAE;YAC5B,MAAM,KAAK,GAAG,CAAC,GAAG,QAAQ,EAAE,CAAC,CAAC;YAC9B,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC5B,MAAM,OAAO,GAAG,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC3C,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,GAAG,GAAG,MAAM,EAAE,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,uCAAuC,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC;YAChH,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QAEF,MAAM,IAAI,GAAG,GAAS,EAAE;YACtB,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;gBACpB,QAAQ,CAAC,MAAM,EAAE,QAAQ,WAAW,SAAS,CAAC,CAAC;YACjD,CAAC;YACD,QAAQ,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7C,WAAW,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC;QAChC,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,CAAC,MAA6C,EAAQ,EAAE;YACtE,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC1B,IAAI,KAAK,CAAC,KAAK;gBAAE,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACzC,QAAQ,CAAC,MAAM,EAAE,QAAQ,WAAW,SAAS,CAAC,CAAC;YAC/C,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CAAC;QAEF,MAAM,MAAM,GAAG,CAAC,KAAsB,EAAQ,EAAE;YAC9C,0DAA0D;YAC1D,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC/C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;oBACnB,KAAK,IAAI;wBACP,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;wBACjC,MAAM;oBACR,KAAK,MAAM;wBACT,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;wBAClD,MAAM;oBACR,KAAK,OAAO;wBACV,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;4BAClB,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;gCAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;;gCAC3C,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;wBAC3B,CAAC;wBACD,MAAM;oBACR,KAAK,OAAO,EAAE,CAAC;wBACb,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAE,CAAC;wBAC/B,OAAO,CACL,OAAO,CAAC,KAAK;4BACX,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;4BACvE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAC7B,CAAC;wBACF,OAAO;oBACT,CAAC;oBACD,KAAK,QAAQ,CAAC;oBACd,KAAK,QAAQ;wBACX,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;wBAC/C,OAAO;oBACT;wBACE,MAAM;gBACV,CAAC;YACH,CAAC;YACD,IAAI,EAAE,CAAC;QACT,CAAC,CAAC;QAEF,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACvB,KAAK,CAAC,MAAM,EAAE,CAAC;QACf,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACzB,IAAI,EAAE,CAAC;IACT,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,eAAe,CAAC,MAAc,EAAE,GAAW;IAClD,MAAM,MAAM,GAAG,MAAM;SAClB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;SACtC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,QAAQ,CAAC,MAAyC,EAAE,IAAY;IACvE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"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"}
@@ -4,12 +4,20 @@ export interface ParsedArg {
4
4
  defaultValue?: string;
5
5
  /** Variadic: collects all remaining positionals (`{paths...}`). */
6
6
  variadic?: boolean;
7
+ /** Optional declared type, e.g. `{count:int}` or `{mode:enum[a,b]}`. */
8
+ type?: CoercionType;
9
+ /** Allowed values for an `enum` argument. */
10
+ enumValues?: string[];
7
11
  }
8
12
  export interface ParsedOption {
9
13
  name: string;
10
14
  /** Takes a value (`--env=production`). */
11
15
  takesValue: boolean;
12
16
  defaultValue?: string;
17
+ /** Optional declared type, e.g. `[port:int]` or `[mode:enum[a,b]]`. */
18
+ type?: CoercionType;
19
+ /** Allowed values for an `enum` option. */
20
+ enumValues?: string[];
13
21
  }
14
22
  export interface ParsedSignature {
15
23
  name: string;
@@ -17,10 +25,10 @@ export interface ParsedSignature {
17
25
  options: ParsedOption[];
18
26
  }
19
27
  export interface ParsedInput {
20
- args: Record<string, string>;
28
+ args: Record<string, string | number>;
21
29
  /** Variadic arg values, keyed by arg name (only for `{name...}`). */
22
30
  lists: Record<string, string[]>;
23
- options: Record<string, string | boolean>;
31
+ options: Record<string, string | number | boolean>;
24
32
  }
25
33
  /**
26
34
  * Parse a command signature string:
@@ -41,3 +49,10 @@ export declare function parseInput(signature: ParsedSignature, argv: string[]):
41
49
  export declare class ArgumentParseError extends Error {
42
50
  constructor(message: string);
43
51
  }
52
+ export type CoercionType = 'int' | 'float' | 'path' | 'glob' | 'enum';
53
+ /**
54
+ * Turn a raw argv string into its typed value for a declared `:type`.
55
+ * Throws `ArgumentParseError` on invalid input so failures surface at parse
56
+ * time with a uniform error.
57
+ */
58
+ export declare function coerceValue(value: string, type: CoercionType | undefined, enumValues?: string[]): string | number;
package/dist/signature.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { resolve as resolvePath } from 'node:path';
1
2
  /**
2
3
  * Parse a command signature string:
3
4
  *
@@ -21,15 +22,22 @@ export function parseSignature(signature) {
21
22
  const inner = match[1];
22
23
  // Non-greedy name so trailing "..." is captured by the variadic group,
23
24
  // not eaten by the name character class.
24
- const parsed = /^([a-zA-Z][\w:.-]*?)(\?)?(\.\.\.)?(?:=(.*))?$/.exec(inner);
25
+ const parsed = /^([a-zA-Z][\w.-]*?)(?::(int|float|path|glob|enum(?:\[[^\]]*\])?))?(\?)?(\.\.\.)?(?:=(.*))?$/.exec(inner);
25
26
  if (!parsed) {
26
27
  throw new Error(`[console] Invalid argument syntax "{${inner}}" in signature "${signature}".`);
27
28
  }
28
- const isVariadic = parsed[3] !== undefined;
29
- if (isVariadic && parsed[4] !== undefined) {
29
+ const rawType = parsed[2] ?? '';
30
+ const isEnum = rawType.startsWith('enum');
31
+ const type = isEnum ? 'enum' : rawType;
32
+ const enumValues = isEnum ? extractEnumValues(rawType) : undefined;
33
+ const isVariadic = parsed[4] !== undefined;
34
+ if (isVariadic && type) {
35
+ throw new Error(`[console] Variadic argument "{${inner}}" cannot declare a type; coerce list elements in the command.`);
36
+ }
37
+ if (isVariadic && parsed[5] !== undefined) {
30
38
  throw new Error(`[console] Variadic argument "{${inner}}" cannot take a default value.`);
31
39
  }
32
- if (isVariadic && parsed[2] === '?') {
40
+ if (isVariadic && parsed[3] === '?') {
33
41
  throw new Error(`[console] Variadic argument "{${inner}}" cannot also be optional.`);
34
42
  }
35
43
  if (isVariadic) {
@@ -40,22 +48,31 @@ export function parseSignature(signature) {
40
48
  }
41
49
  result.args.push({
42
50
  name: parsed[1],
43
- optional: parsed[2] === '?',
51
+ optional: parsed[3] === '?',
44
52
  ...(isVariadic ? { variadic: true } : {}),
45
- defaultValue: parsed[4],
53
+ defaultValue: parsed[5],
54
+ ...(type ? { type: type, enumValues } : {}),
46
55
  });
47
56
  }
48
57
  if (variadicIndex !== -1 && variadicIndex !== result.args.length - 1) {
49
58
  throw new Error(`[console] Variadic argument must be the final argument in signature "${signature}".`);
50
59
  }
51
- for (const match of trimmed.matchAll(/\[-{2}([a-zA-Z][\w-]*)(?:=([^}\]]*))?\]/g)) {
60
+ for (const match of trimmed.matchAll(/\[-{2}([a-zA-Z][\w-]*)(?::(int|float|path|glob|enum(?:\[[^\]]*\])?))?(?:=([^}\]]*))?\]/g)) {
52
61
  const name = match[1];
53
- const takesValue = match[2] !== undefined;
54
- result.options.push({
55
- name,
56
- takesValue,
57
- defaultValue: takesValue ? match[2] : undefined,
58
- });
62
+ const rawType = match[2] ?? '';
63
+ const isEnum = rawType.startsWith('enum');
64
+ const type = isEnum ? 'enum' : rawType;
65
+ const enumValues = isEnum ? extractEnumValues(rawType) : undefined;
66
+ const defaultValue = match[3];
67
+ const takesValue = defaultValue !== undefined || type !== '';
68
+ const option = { name, takesValue };
69
+ if (defaultValue !== undefined)
70
+ option.defaultValue = defaultValue;
71
+ if (type) {
72
+ option.type = type;
73
+ option.enumValues = enumValues;
74
+ }
75
+ result.options.push(option);
59
76
  }
60
77
  return result;
61
78
  }
@@ -76,11 +93,14 @@ export function parseInput(signature, argv) {
76
93
  }
77
94
  if (token.startsWith('--')) {
78
95
  const eq = token.indexOf('=');
96
+ const name = eq === -1 ? token.slice(2) : token.slice(2, eq);
97
+ const option = signature.options.find((o) => o.name === name);
79
98
  if (eq === -1) {
80
- input.options[token.slice(2)] = true;
99
+ input.options[name] = true;
81
100
  }
82
101
  else {
83
- input.options[token.slice(2, eq)] = token.slice(eq + 1);
102
+ const raw = token.slice(eq + 1);
103
+ input.options[name] = option ? coerceValue(raw, option.type, option.enumValues) : raw;
84
104
  }
85
105
  continue;
86
106
  }
@@ -93,7 +113,7 @@ export function parseInput(signature, argv) {
93
113
  throw new ArgumentParseError(`Unknown option "--${name}" for command "${signature.name}".`);
94
114
  }
95
115
  }
96
- const variadic = signature.args.length > 0 && (signature.args.at(-1)?.variadic === true);
116
+ const variadic = signature.args.length > 0 && signature.args.at(-1)?.variadic === true;
97
117
  const fixedArgs = variadic ? signature.args.slice(0, -1) : signature.args;
98
118
  if (!variadic && positionals.length > signature.args.length) {
99
119
  throw new ArgumentParseError(`Too many arguments for "${signature.name}": expected at most ${signature.args.length}.`);
@@ -102,10 +122,10 @@ export function parseInput(signature, argv) {
102
122
  fixedArgs.forEach((arg, index) => {
103
123
  const value = positionals[index];
104
124
  if (value !== undefined) {
105
- input.args[arg.name] = value;
125
+ input.args[arg.name] = coerceValue(value, arg.type, arg.enumValues);
106
126
  }
107
127
  else if (arg.defaultValue !== undefined) {
108
- input.args[arg.name] = arg.defaultValue;
128
+ input.args[arg.name] = coerceValue(arg.defaultValue, arg.type, arg.enumValues);
109
129
  }
110
130
  else if (!arg.optional) {
111
131
  throw new ArgumentParseError(`Missing required argument "${arg.name}" for command "${signature.name}".`);
@@ -123,7 +143,15 @@ export function parseInput(signature, argv) {
123
143
  // Fill options with defaults.
124
144
  for (const option of signature.options) {
125
145
  if (input.options[option.name] === undefined) {
126
- input.options[option.name] = option.takesValue ? (option.defaultValue ?? '') : false;
146
+ if (!option.takesValue) {
147
+ input.options[option.name] = false;
148
+ }
149
+ else if (option.defaultValue !== undefined) {
150
+ input.options[option.name] = coerceValue(option.defaultValue, option.type, option.enumValues);
151
+ }
152
+ else {
153
+ input.options[option.name] = '';
154
+ }
127
155
  }
128
156
  }
129
157
  return input;
@@ -134,4 +162,44 @@ export class ArgumentParseError extends Error {
134
162
  this.name = 'ArgumentParseError';
135
163
  }
136
164
  }
165
+ /**
166
+ * Turn a raw argv string into its typed value for a declared `:type`.
167
+ * Throws `ArgumentParseError` on invalid input so failures surface at parse
168
+ * time with a uniform error.
169
+ */
170
+ export function coerceValue(value, type, enumValues) {
171
+ switch (type) {
172
+ case 'int': {
173
+ const n = Number(value);
174
+ if (!Number.isInteger(n)) {
175
+ throw new ArgumentParseError(`"${value}" is not an integer.`);
176
+ }
177
+ return n;
178
+ }
179
+ case 'float': {
180
+ const n = Number(value);
181
+ if (!Number.isFinite(n)) {
182
+ throw new ArgumentParseError(`"${value}" is not a number.`);
183
+ }
184
+ return n;
185
+ }
186
+ case 'enum': {
187
+ if (enumValues !== undefined && !enumValues.includes(value)) {
188
+ throw new ArgumentParseError(`"${value}" is not one of: ${enumValues.join(', ')}.`);
189
+ }
190
+ return value;
191
+ }
192
+ case 'path':
193
+ return resolvePath(value);
194
+ case 'glob':
195
+ return value;
196
+ default:
197
+ return value;
198
+ }
199
+ }
200
+ /** Pull allowed values out of an `enum[a,b,c]` type token. */
201
+ function extractEnumValues(type) {
202
+ const match = /^enum\[(.*)\]$/.exec(type);
203
+ return match ? match[1].split(',').map((v) => v.trim()) : undefined;
204
+ }
137
205
  //# sourceMappingURL=signature.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"signature.js","sourceRoot":"","sources":["../src/signature.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signature.js","sourceRoot":"","sources":["../src/signature.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,9 +1,25 @@
1
1
  {
2
2
  "name": "@mudah-cli/console",
3
- "version": "0.7.0",
3
+ "version": "0.9.0",
4
4
  "description": "Command system: string signatures, typed dispatch, interactive prompts, and help rendering.",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
+ "author": "Mudah Contributors",
8
+ "homepage": "https://github.com/thesimonharms/mudah#readme",
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git+https://github.com/thesimonharms/mudah.git",
12
+ "directory": "packages/console"
13
+ },
14
+ "keywords": [
15
+ "cli",
16
+ "command",
17
+ "prompt",
18
+ "help",
19
+ "signature",
20
+ "terminal",
21
+ "typescript"
22
+ ],
7
23
  "engines": {
8
24
  "node": ">=26"
9
25
  },
@@ -18,10 +34,10 @@
18
34
  ],
19
35
  "sideEffects": false,
20
36
  "dependencies": {
21
- "@mudah-cli/animation": "^0.7.0",
22
- "@mudah-cli/core": "^0.7.0",
23
- "@mudah-cli/terminal": "^0.7.0",
24
- "@mudah-cli/ui": "^0.7.0"
37
+ "@mudah-cli/animation": "^0.9.0",
38
+ "@mudah-cli/core": "^0.9.0",
39
+ "@mudah-cli/terminal": "^0.9.0",
40
+ "@mudah-cli/ui": "^0.9.0"
25
41
  },
26
42
  "publishConfig": {
27
43
  "access": "public"