@mudah-cli/console 0.1.0 → 0.2.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/dist/command.d.ts CHANGED
@@ -38,12 +38,21 @@ export declare abstract class Command {
38
38
  abstract handle(): Promise<number | void> | number | void;
39
39
  /** A positional argument value (or its signature default). */
40
40
  arg(name: string): string | undefined;
41
+ /**
42
+ * Values collected by a variadic argument (`{paths...}`) — empty when the
43
+ * argument doesn't exist or collected nothing.
44
+ */
45
+ list(name: string): string[];
41
46
  /** An option value: boolean for flags, string for `--opt=value`. */
42
47
  option<T extends string | boolean>(name: string): T | undefined;
43
48
  protected promptsInstance(): Prompts;
44
49
  protected ask(question: string, defaultValue?: string): Promise<string>;
45
50
  protected confirm(question: string, defaultValue?: boolean): Promise<boolean>;
46
51
  protected select(question: string, choices: string[]): Promise<string>;
52
+ /** Pick any number of choices (arrow keys + space on a TTY, numbered menu otherwise). */
53
+ protected multiselect(question: string, choices: string[], defaultChecked?: number[]): Promise<string[]>;
54
+ /** Masked text entry — the value is never echoed to the terminal. */
55
+ protected password(question: string): Promise<string>;
47
56
  /**
48
57
  * Render a usage error with this command's usage line. Commands call this
49
58
  * when their own validation fails.
package/dist/command.js CHANGED
@@ -43,6 +43,13 @@ export class Command {
43
43
  arg(name) {
44
44
  return this.input.args[name];
45
45
  }
46
+ /**
47
+ * Values collected by a variadic argument (`{paths...}`) — empty when the
48
+ * argument doesn't exist or collected nothing.
49
+ */
50
+ list(name) {
51
+ return this.input.lists[name] ?? [];
52
+ }
46
53
  /** An option value: boolean for flags, string for `--opt=value`. */
47
54
  option(name) {
48
55
  return this.input.options[name];
@@ -61,6 +68,14 @@ export class Command {
61
68
  select(question, choices) {
62
69
  return this.promptsInstance().select(question, choices);
63
70
  }
71
+ /** Pick any number of choices (arrow keys + space on a TTY, numbered menu otherwise). */
72
+ multiselect(question, choices, defaultChecked) {
73
+ return this.promptsInstance().multiselect(question, choices, { defaultChecked });
74
+ }
75
+ /** Masked text entry — the value is never echoed to the terminal. */
76
+ password(question) {
77
+ return this.promptsInstance().password(question);
78
+ }
64
79
  /**
65
80
  * Render a usage error with this command's usage line. Commands call this
66
81
  * when their own validation fails.
@@ -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,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,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;;;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":"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,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"}
package/dist/help.js CHANGED
@@ -3,6 +3,10 @@ import { visibleLength } from '@mudah-cli/ui';
3
3
  export function formatUsage(entry) {
4
4
  const parts = [entry.signature.name];
5
5
  for (const arg of entry.signature.args) {
6
+ if (arg.variadic) {
7
+ parts.push(`{${arg.name}...}`);
8
+ continue;
9
+ }
6
10
  if (arg.optional) {
7
11
  parts.push(arg.defaultValue !== undefined ? `{${arg.name}=${arg.defaultValue}}` : `{${arg.name}?}`);
8
12
  }
@@ -47,7 +51,13 @@ export function renderCommandHelp(appName, entry, lines) {
47
51
  lines.push('Arguments:');
48
52
  const width = Math.max(...entry.signature.args.map((a) => a.name.length)) + 2;
49
53
  for (const arg of entry.signature.args) {
50
- const kind = arg.optional ? (arg.defaultValue !== undefined ? `optional (default: ${arg.defaultValue})` : 'optional') : 'required';
54
+ const kind = arg.variadic
55
+ ? 'one or more (variadic)'
56
+ : arg.optional
57
+ ? arg.defaultValue !== undefined
58
+ ? `optional (default: ${arg.defaultValue})`
59
+ : 'optional'
60
+ : 'required';
51
61
  lines.push(` ${arg.name + ' '.repeat(Math.max(1, width - arg.name.length))} ${kind}`);
52
62
  }
53
63
  lines.push('');
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/prompts.d.ts CHANGED
@@ -1,13 +1,22 @@
1
1
  export interface PromptOptions {
2
2
  input?: NodeJS.ReadStream;
3
3
  output?: NodeJS.WritableStream;
4
- /** Bypasses the raw-mode UI entirely (used in tests and non-interactive runs). */
4
+ /** Bypasses the interactive UI entirely (tests and non-interactive runs). */
5
5
  forcedValue?: string;
6
6
  }
7
+ /** What the caller gets back from an interactive select. */
8
+ export interface SelectResult {
9
+ index: number;
10
+ value: string;
11
+ }
7
12
  /**
8
- * Minimal interactive prompts built on `node:readline` (text/confirm) and a
9
- * numbered fallback for selects. Raw-mode arrow-key selection lands in v0.2;
10
- * the interface is already designed for it.
13
+ * Interactive prompts.
14
+ *
15
+ * - Non-TTY (piped/CI) or `forcedValue` set: no raw mode is touched; answers
16
+ * come from defaults/forced values, and list prompts fall back to numbered
17
+ * menus over readline so piped scripts keep working.
18
+ * - TTY: text uses readline; select/multiselect run a raw-mode arrow-key UI
19
+ * through {@link KeyParser} (↑↓ move, space toggles, enter submits).
11
20
  */
12
21
  export declare class Prompts {
13
22
  private rl;
@@ -20,8 +29,24 @@ export declare class Prompts {
20
29
  confirm(question: string, options?: PromptOptions & {
21
30
  defaultValue?: boolean;
22
31
  }): Promise<boolean>;
23
- /** Pick one of the choices by index (1-based). Returns the choice value. */
32
+ /**
33
+ * Pick one choice. Arrow keys on a TTY; numbered menu otherwise.
34
+ * `forcedValue` accepts a 1-based number.
35
+ */
24
36
  select(question: string, choices: string[], options?: PromptOptions): Promise<string>;
25
- /** Close the underlying readline interface. */
26
- dispose(): void;
37
+ /** Like {@link select} but returns the chosen index as well. */
38
+ selectIndex(question: string, choices: string[], options?: PromptOptions): Promise<SelectResult>;
39
+ /**
40
+ * Pick any number of choices (space toggles, enter submits). Returns
41
+ * checked values in display order; comma-separated fallback when piped.
42
+ */
43
+ multiselect(question: string, choices: string[], options?: PromptOptions & {
44
+ defaultChecked?: number[];
45
+ }): Promise<string[]>;
46
+ /** Like {@link multiselect} but returns selected indices. */
47
+ multiSelectIndices(question: string, choices: string[], options?: PromptOptions & {
48
+ defaultChecked?: number[];
49
+ }): Promise<number[]>;
50
+ /** Masked free-text question. No local echo on TTYs; asterisk feedback only. */
51
+ password(question: string, options?: PromptOptions): Promise<string>;
27
52
  }
package/dist/prompts.js CHANGED
@@ -1,14 +1,23 @@
1
1
  import * as readline from 'node:readline';
2
+ import { KeyParser } from '@mudah-cli/terminal';
2
3
  /**
3
- * Minimal interactive prompts built on `node:readline` (text/confirm) and a
4
- * numbered fallback for selects. Raw-mode arrow-key selection lands in v0.2;
5
- * the interface is already designed for it.
4
+ * Interactive prompts.
5
+ *
6
+ * - Non-TTY (piped/CI) or `forcedValue` set: no raw mode is touched; answers
7
+ * come from defaults/forced values, and list prompts fall back to numbered
8
+ * menus over readline so piped scripts keep working.
9
+ * - TTY: text uses readline; select/multiselect run a raw-mode arrow-key UI
10
+ * through {@link KeyParser} (↑↓ move, space toggles, enter submits).
6
11
  */
7
12
  export class Prompts {
8
13
  rl = null;
9
- makeReader() {
14
+ makeReader(input, output) {
10
15
  if (!this.rl) {
11
- this.rl = readline.createInterface({ input: process.stdin, output: process.stdout, terminal: process.stdin.isTTY === true });
16
+ this.rl = readline.createInterface({
17
+ input: input ?? process.stdin,
18
+ output: output ?? process.stdout,
19
+ terminal: process.stdin.isTTY === true,
20
+ });
12
21
  }
13
22
  return this.rl;
14
23
  }
@@ -16,7 +25,7 @@ export class Prompts {
16
25
  async ask(question, options = {}) {
17
26
  if (options.forcedValue !== undefined)
18
27
  return options.forcedValue;
19
- const rl = this.makeReader();
28
+ const rl = this.makeReader(options.input, options.output);
20
29
  const suffix = options.defaultValue !== undefined ? ` (${options.defaultValue})` : '';
21
30
  return new Promise((resolve) => {
22
31
  rl.question(`${question}${suffix} `, (answer) => {
@@ -36,30 +45,194 @@ export class Prompts {
36
45
  return def;
37
46
  return answer.toLowerCase().startsWith('y');
38
47
  }
39
- /** Pick one of the choices by index (1-based). Returns the choice value. */
48
+ /**
49
+ * Pick one choice. Arrow keys on a TTY; numbered menu otherwise.
50
+ * `forcedValue` accepts a 1-based number.
51
+ */
40
52
  async select(question, choices, options = {}) {
53
+ const result = await this.selectIndex(question, choices, options);
54
+ return result.value;
55
+ }
56
+ /** Like {@link select} but returns the chosen index as well. */
57
+ async selectIndex(question, choices, options = {}) {
58
+ if (choices.length === 0)
59
+ throw new Error('[console] select() requires at least one choice.');
41
60
  if (options.forcedValue !== undefined) {
42
- const choice = choices[Number(options.forcedValue) - 1];
61
+ const index = Number(options.forcedValue) - 1;
62
+ const choice = choices[index];
43
63
  if (!choice)
44
64
  throw new Error(`[console] Forced select value "${options.forcedValue}" is out of range.`);
45
- return choice;
65
+ return { index, value: choice };
46
66
  }
47
- process.stderr.write(`\n${question}\n`);
48
- choices.forEach((choice, i) => {
49
- process.stderr.write(` ${i + 1}. ${choice}\n`);
50
- });
51
- const answer = await this.ask('Choose', options);
52
- const index = Number(answer) - 1;
53
- const choice = choices[index];
54
- if (!choice) {
55
- throw new Error(`[console] Invalid selection "${answer}".`);
67
+ // A caller-provided input stream decides interactivity (fake TTYs in
68
+ // tests); plain process.stdin falls back to numbered menus when piped.
69
+ const interactive = (options.input ?? process.stdin).isTTY === true;
70
+ if (!interactive) {
71
+ writeOut(options.output, `\n${question}\n`);
72
+ choices.forEach((choice, i) => writeOut(options.output, ` ${i + 1}. ${choice}\n`));
73
+ const answer = await this.ask('Choose', options);
74
+ const index = Number(answer) - 1;
75
+ const choice = choices[index];
76
+ if (!choice)
77
+ throw new Error(`[console] Invalid selection "${answer}".`);
78
+ return { index, value: choice };
56
79
  }
57
- return choice;
80
+ const result = await rawSelect(question, choices, { ...options, multi: false });
81
+ return { index: result.index, value: result.value };
82
+ }
83
+ /**
84
+ * Pick any number of choices (space toggles, enter submits). Returns
85
+ * checked values in display order; comma-separated fallback when piped.
86
+ */
87
+ async multiselect(question, choices, options = {}) {
88
+ const indices = await this.multiSelectIndices(question, choices, options);
89
+ return indices.map((i) => choices[i]);
58
90
  }
59
- /** Close the underlying readline interface. */
60
- dispose() {
61
- this.rl?.close();
62
- this.rl = null;
91
+ /** Like {@link multiselect} but returns selected indices. */
92
+ async multiSelectIndices(question, choices, options = {}) {
93
+ if (choices.length === 0)
94
+ throw new Error('[console] multiselect() requires at least one choice.');
95
+ if (options.forcedValue !== undefined) {
96
+ return parseNumberList(options.forcedValue, choices.length);
97
+ }
98
+ const interactive = (options.input ?? process.stdin).isTTY === true;
99
+ if (!interactive) {
100
+ writeOut(options.output, `\n${question}\n`);
101
+ choices.forEach((choice, i) => writeOut(options.output, ` ${i + 1}. ${choice}\n`));
102
+ const answer = await this.ask('Choose (comma-separated numbers)', options);
103
+ return parseNumberList(answer, choices.length);
104
+ }
105
+ const result = await rawSelect(question, choices, { ...options, multi: true });
106
+ return result.indices ?? [];
63
107
  }
108
+ /** Masked free-text question. No local echo on TTYs; asterisk feedback only. */
109
+ async password(question, options = {}) {
110
+ if (options.forcedValue !== undefined)
111
+ return options.forcedValue;
112
+ const input = options.input ?? process.stdin;
113
+ const output = options.output ?? process.stdout;
114
+ writeOut(output, `${question} `);
115
+ if (input.isTTY !== true) {
116
+ const rl = this.makeReader(options.input, options.output);
117
+ const answer = await new Promise((resolve) => rl.question('', resolve));
118
+ writeOut(output, '\n');
119
+ return answer;
120
+ }
121
+ const wasRaw = input.isRaw ?? false;
122
+ input.setRawMode(true);
123
+ input.resume();
124
+ let value = '';
125
+ try {
126
+ await new Promise((resolve) => {
127
+ const parser = new KeyParser();
128
+ const onKey = (chunk) => {
129
+ for (const event of parser.feed(String(chunk))) {
130
+ if (event.name === 'enter') {
131
+ input.off('data', onKey);
132
+ resolve();
133
+ return;
134
+ }
135
+ if (event.name === 'backspace') {
136
+ value = value.slice(0, -1);
137
+ }
138
+ else if (event.ch !== undefined && event.ch >= ' ') {
139
+ value += event.ch;
140
+ writeOut(output, '*');
141
+ }
142
+ }
143
+ };
144
+ input.on('data', onKey);
145
+ });
146
+ }
147
+ finally {
148
+ input.setRawMode(wasRaw);
149
+ writeOut(output, '\n');
150
+ }
151
+ return value;
152
+ }
153
+ }
154
+ /** The shared raw-mode arrow-key picker used by select/multiselect on TTYs. */
155
+ function rawSelect(question, choices, options) {
156
+ const input = options.input ?? process.stdin;
157
+ const output = options.output ?? process.stdout;
158
+ return new Promise((resolve) => {
159
+ let cursor = 0;
160
+ const checked = new Set(options.multi ? (options.defaultChecked ?? []) : []);
161
+ let frameHeight = 0;
162
+ const parser = new KeyParser();
163
+ const render = () => {
164
+ const lines = [`${question}`];
165
+ choices.forEach((choice, i) => {
166
+ const pointer = i === cursor ? '❯ ' : ' ';
167
+ const box = options.multi ? (checked.has(i) ? '[x] ' : '[ ] ') : '';
168
+ lines.push(`${pointer}${box}${choice}`);
169
+ });
170
+ lines.push('', options.multi ? 'space toggle · ↑↓ move · enter submit' : '↑↓ move · enter choose · esc cancel');
171
+ return lines;
172
+ };
173
+ const draw = () => {
174
+ if (frameHeight > 0) {
175
+ writeOut(output, `\x1b[${frameHeight}A\x1b[J`);
176
+ }
177
+ writeOut(output, `${render().join('\n')}\n`);
178
+ frameHeight = render().length;
179
+ };
180
+ const cleanup = (result) => {
181
+ input.off('data', onData);
182
+ if (input.isTTY)
183
+ input.setRawMode(false);
184
+ writeOut(output, `\x1b[${frameHeight}A\x1b[J`);
185
+ resolve(result);
186
+ };
187
+ const onData = (chunk) => {
188
+ // One parser across chunks so split sequences reassemble.
189
+ for (const event of parser.feed(String(chunk))) {
190
+ switch (event.name) {
191
+ case 'up':
192
+ cursor = Math.max(0, cursor - 1);
193
+ break;
194
+ case 'down':
195
+ cursor = Math.min(choices.length - 1, cursor + 1);
196
+ break;
197
+ case 'space':
198
+ if (options.multi) {
199
+ if (checked.has(cursor))
200
+ checked.delete(cursor);
201
+ else
202
+ checked.add(cursor);
203
+ }
204
+ break;
205
+ case 'enter': {
206
+ const value = choices[cursor];
207
+ cleanup(options.multi
208
+ ? { index: cursor, value, indices: [...checked].sort((a, b) => a - b) }
209
+ : { index: cursor, value });
210
+ return;
211
+ }
212
+ case 'escape':
213
+ case 'ctrl+c':
214
+ cleanup({ index: -1, value: '', indices: [] });
215
+ return;
216
+ default:
217
+ break;
218
+ }
219
+ }
220
+ draw();
221
+ };
222
+ input.setRawMode(true);
223
+ input.resume();
224
+ input.on('data', onData);
225
+ draw();
226
+ });
227
+ }
228
+ function parseNumberList(answer, max) {
229
+ const parsed = answer
230
+ .split(',')
231
+ .map((part) => Number(part.trim()) - 1)
232
+ .filter((index) => index >= 0 && index < max);
233
+ return [...new Set(parsed)].sort((a, b) => a - b);
234
+ }
235
+ function writeOut(stream, text) {
236
+ stream?.write(text);
64
237
  }
65
238
  //# sourceMappingURL=prompts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAS1C;;;;GAIG;AACH,MAAM,OAAO,OAAO;IACV,EAAE,GAA8B,IAAI,CAAC;IAErC,UAAU;QAChB,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,IAAI,CAAC,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC,CAAC;QAC/H,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,EAAE,CAAC;QAC7B,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,4EAA4E;IAC5E,KAAK,CAAC,MAAM,CAAC,QAAgB,EAAE,OAAiB,EAAE,OAAO,GAAkB,EAAE;QAC3E,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;YACxD,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,OAAO,CAAC,WAAW,oBAAoB,CAAC,CAAC;YACxG,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC;QACxC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,gCAAgC,MAAM,IAAI,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,+CAA+C;IAC/C,OAAO;QACL,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC;QACjB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;IACjB,CAAC;CACF"}
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,8 @@ export interface ParsedArg {
2
2
  name: string;
3
3
  optional: boolean;
4
4
  defaultValue?: string;
5
+ /** Variadic: collects all remaining positionals (`{paths...}`). */
6
+ variadic?: boolean;
5
7
  }
6
8
  export interface ParsedOption {
7
9
  name: string;
@@ -16,6 +18,8 @@ export interface ParsedSignature {
16
18
  }
17
19
  export interface ParsedInput {
18
20
  args: Record<string, string>;
21
+ /** Variadic arg values, keyed by arg name (only for `{name...}`). */
22
+ lists: Record<string, string[]>;
19
23
  options: Record<string, string | boolean>;
20
24
  }
21
25
  /**
@@ -23,13 +27,15 @@ export interface ParsedInput {
23
27
  *
24
28
  * ```
25
29
  * deploy {branch?} {ref=main} [--force] [--env=production]
30
+ * convert {paths...} [--to=webp]
26
31
  * ```
27
32
  */
28
33
  export declare function parseSignature(signature: string): ParsedSignature;
29
34
  /**
30
35
  * Parse raw argv (everything after the command name) against a parsed
31
36
  * signature. Positional values fill args in order; `--name` / `--name=value`
32
- * fill options. Throws `ArgumentParseError` on violations.
37
+ * fill options. A trailing variadic arg collects all remaining positionals.
38
+ * Throws `ArgumentParseError` on violations.
33
39
  */
34
40
  export declare function parseInput(signature: ParsedSignature, argv: string[]): ParsedInput;
35
41
  export declare class ArgumentParseError extends Error {
package/dist/signature.js CHANGED
@@ -3,6 +3,7 @@
3
3
  *
4
4
  * ```
5
5
  * deploy {branch?} {ref=main} [--force] [--env=production]
6
+ * convert {paths...} [--to=webp]
6
7
  * ```
7
8
  */
8
9
  export function parseSignature(signature) {
@@ -10,18 +11,38 @@ export function parseSignature(signature) {
10
11
  const trimmed = signature.trim();
11
12
  const firstSpace = trimmed.search(/\s/);
12
13
  result.name = firstSpace === -1 ? trimmed : trimmed.slice(0, firstSpace);
14
+ let variadicIndex = -1;
13
15
  for (const match of trimmed.matchAll(/\{([^{}]+)\}/g)) {
14
16
  const inner = match[1];
15
- const parsed = /^([a-zA-Z][\w:.-]*)(\?)?(?:=(.*))?$/.exec(inner);
17
+ // Non-greedy name so trailing "..." is captured by the variadic group,
18
+ // not eaten by the name character class.
19
+ const parsed = /^([a-zA-Z][\w:.-]*?)(\?)?(\.\.\.)?(?:=(.*))?$/.exec(inner);
16
20
  if (!parsed) {
17
21
  throw new Error(`[console] Invalid argument syntax "{${inner}}" in signature "${signature}".`);
18
22
  }
23
+ const isVariadic = parsed[3] !== undefined;
24
+ if (isVariadic && parsed[4] !== undefined) {
25
+ throw new Error(`[console] Variadic argument "{${inner}}" cannot take a default value.`);
26
+ }
27
+ if (isVariadic && parsed[2] === '?') {
28
+ throw new Error(`[console] Variadic argument "{${inner}}" cannot also be optional.`);
29
+ }
30
+ if (isVariadic) {
31
+ if (variadicIndex !== -1) {
32
+ throw new Error(`[console] Only one variadic argument is allowed in signature "${signature}".`);
33
+ }
34
+ variadicIndex = result.args.length;
35
+ }
19
36
  result.args.push({
20
37
  name: parsed[1],
21
38
  optional: parsed[2] === '?',
22
- defaultValue: parsed[3],
39
+ ...(isVariadic ? { variadic: true } : {}),
40
+ defaultValue: parsed[4],
23
41
  });
24
42
  }
43
+ if (variadicIndex !== -1 && variadicIndex !== result.args.length - 1) {
44
+ throw new Error(`[console] Variadic argument must be the final argument in signature "${signature}".`);
45
+ }
25
46
  for (const match of trimmed.matchAll(/\[-{2}([a-zA-Z][\w-]*)(?:=([^}\]]*))?\]/g)) {
26
47
  const name = match[1];
27
48
  const takesValue = match[2] !== undefined;
@@ -36,10 +57,11 @@ export function parseSignature(signature) {
36
57
  /**
37
58
  * Parse raw argv (everything after the command name) against a parsed
38
59
  * signature. Positional values fill args in order; `--name` / `--name=value`
39
- * fill options. Throws `ArgumentParseError` on violations.
60
+ * fill options. A trailing variadic arg collects all remaining positionals.
61
+ * Throws `ArgumentParseError` on violations.
40
62
  */
41
63
  export function parseInput(signature, argv) {
42
- const input = { args: {}, options: {} };
64
+ const input = { args: {}, lists: {}, options: {} };
43
65
  const positionals = [];
44
66
  for (let i = 0; i < argv.length; i++) {
45
67
  const token = argv[i];
@@ -66,11 +88,13 @@ export function parseInput(signature, argv) {
66
88
  throw new ArgumentParseError(`Unknown option "--${name}" for command "${signature.name}".`);
67
89
  }
68
90
  }
69
- // Fill args.
70
- if (positionals.length > signature.args.length) {
91
+ const variadic = signature.args.length > 0 && (signature.args.at(-1)?.variadic === true);
92
+ const fixedArgs = variadic ? signature.args.slice(0, -1) : signature.args;
93
+ if (!variadic && positionals.length > signature.args.length) {
71
94
  throw new ArgumentParseError(`Too many arguments for "${signature.name}": expected at most ${signature.args.length}.`);
72
95
  }
73
- signature.args.forEach((arg, index) => {
96
+ // Fixed args consume positionals in order.
97
+ fixedArgs.forEach((arg, index) => {
74
98
  const value = positionals[index];
75
99
  if (value !== undefined) {
76
100
  input.args[arg.name] = value;
@@ -82,6 +106,15 @@ export function parseInput(signature, argv) {
82
106
  throw new ArgumentParseError(`Missing required argument "${arg.name}" for command "${signature.name}".`);
83
107
  }
84
108
  });
109
+ // The variadic arg collects everything left.
110
+ if (variadic) {
111
+ const collected = positionals.slice(fixedArgs.length);
112
+ const variadicName = signature.args.at(-1).name;
113
+ if (collected.length === 0) {
114
+ throw new ArgumentParseError(`Missing required argument "${variadicName}..." for command "${signature.name}".`);
115
+ }
116
+ input.lists[variadicName] = collected;
117
+ }
85
118
  // Fill options with defaults.
86
119
  for (const option of signature.options) {
87
120
  if (input.options[option.name] === undefined) {
@@ -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":"AA4BA;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC9C,MAAM,MAAM,GAAoB,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAEpE,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;IACjC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,CAAC,IAAI,GAAG,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAEzE,IAAI,aAAa,GAAG,CAAC,CAAC,CAAC;IACvB,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QACtD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACxB,uEAAuE;QACvE,yCAAyC;QACzC,MAAM,MAAM,GAAG,+CAA+C,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3E,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,uCAAuC,KAAK,oBAAoB,SAAS,IAAI,CAAC,CAAC;QACjG,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC;QAC3C,IAAI,UAAU,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,iCAAiC,KAAK,iCAAiC,CAAC,CAAC;QAC3F,CAAC;QACD,IAAI,UAAU,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,iCAAiC,KAAK,6BAA6B,CAAC,CAAC;QACvF,CAAC;QACD,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,iEAAiE,SAAS,IAAI,CAAC,CAAC;YAClG,CAAC;YACD,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QACrC,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,MAAM,CAAC,CAAC,CAAE;YAChB,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG;YAC3B,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;SACxB,CAAC,CAAC;IACL,CAAC;IACD,IAAI,aAAa,KAAK,CAAC,CAAC,IAAI,aAAa,KAAK,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrE,MAAM,IAAI,KAAK,CAAC,wEAAwE,SAAS,IAAI,CAAC,CAAC;IACzG,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,0CAA0C,CAAC,EAAE,CAAC;QACjF,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACvB,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC;QAC1C,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;YAClB,IAAI;YACJ,UAAU;YACV,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;SAChD,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,SAA0B,EAAE,IAAc;IACnE,MAAM,KAAK,GAAgB,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAEhE,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACvB,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACvC,MAAM;QACR,CAAC;QACD,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;gBACd,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC1D,CAAC;YACD,SAAS;QACX,CAAC;QACD,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,4BAA4B;IAC5B,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACnE,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,kBAAkB,CAAC,qBAAqB,IAAI,kBAAkB,SAAS,CAAC,IAAI,IAAI,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,KAAK,IAAI,CAAC,CAAC;IACzF,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC;IAE1E,IAAI,CAAC,QAAQ,IAAI,WAAW,CAAC,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAC5D,MAAM,IAAI,kBAAkB,CAC1B,2BAA2B,SAAS,CAAC,IAAI,uBAAuB,SAAS,CAAC,IAAI,CAAC,MAAM,GAAG,CACzF,CAAC;IACJ,CAAC;IAED,2CAA2C;IAC3C,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QAC/B,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QAC/B,CAAC;aAAM,IAAI,GAAG,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,YAAY,CAAC;QAC1C,CAAC;aAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YACzB,MAAM,IAAI,kBAAkB,CAAC,8BAA8B,GAAG,CAAC,IAAI,kBAAkB,SAAS,CAAC,IAAI,IAAI,CAAC,CAAC;QAC3G,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,6CAA6C;IAC7C,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACtD,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC;QACjD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,kBAAkB,CAC1B,8BAA8B,YAAY,qBAAqB,SAAS,CAAC,IAAI,IAAI,CAClF,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC;IACxC,CAAC;IAED,8BAA8B;IAC9B,KAAK,MAAM,MAAM,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;QACvC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YAC7C,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACvF,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mudah-cli/console",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Command system: string signatures, typed dispatch, interactive prompts, and help rendering.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -18,10 +18,10 @@
18
18
  ],
19
19
  "sideEffects": false,
20
20
  "dependencies": {
21
- "@mudah-cli/animation": "^0.1.0",
22
- "@mudah-cli/core": "^0.1.0",
23
- "@mudah-cli/terminal": "^0.1.0",
24
- "@mudah-cli/ui": "^0.1.0"
21
+ "@mudah-cli/animation": "^0.2.0",
22
+ "@mudah-cli/core": "^0.2.0",
23
+ "@mudah-cli/terminal": "^0.2.0",
24
+ "@mudah-cli/ui": "^0.2.0"
25
25
  },
26
26
  "publishConfig": {
27
27
  "access": "public"