exit on interrupt
This commit is contained in:
@ -31,6 +31,7 @@ interface SourceConfig {
|
||||
args?: boolean;
|
||||
interactive?: boolean;
|
||||
configs?: string[];
|
||||
exit_on_interrupt?: boolean;
|
||||
}
|
||||
|
||||
export class InteractiveOptions extends Persistent {
|
||||
@ -62,6 +63,11 @@ export class InteractiveOptions extends Persistent {
|
||||
this.properties[option.name] = option.type_validation.persistent_type;
|
||||
}
|
||||
|
||||
const exit_on_interrupt
|
||||
= typeof source_config.exit_on_interrupt === 'boolean'
|
||||
? source_config.exit_on_interrupt
|
||||
: false;
|
||||
|
||||
if (
|
||||
typeof source_config.configs !== 'undefined'
|
||||
&& Array.isArray (source_config.configs)
|
||||
@ -72,7 +78,7 @@ export class InteractiveOptions extends Persistent {
|
||||
if (source_config.args !== false)
|
||||
this.sources.push (new ArgSource);
|
||||
if (source_config.interactive !== false)
|
||||
this.sources.push (new InteractiveSource);
|
||||
this.sources.push (new InteractiveSource (exit_on_interrupt));
|
||||
}
|
||||
|
||||
public async parse (): Promise<Record<string, unknown>> {
|
||||
|
@ -12,6 +12,13 @@ import { OptionProcess, Option } from '../Option';
|
||||
import { OptionSource } from './OptionSource';
|
||||
|
||||
export class InteractiveSource extends OptionSource {
|
||||
private _exit_on_interrupt: boolean;
|
||||
|
||||
public constructor (exit_on_interrupt: boolean) {
|
||||
super ();
|
||||
this._exit_on_interrupt = exit_on_interrupt;
|
||||
}
|
||||
|
||||
private get_message (opt: Option): string {
|
||||
return typeof opt.message === 'undefined'
|
||||
? `input ${opt.name}`
|
||||
@ -72,7 +79,12 @@ export class InteractiveSource extends OptionSource {
|
||||
for (const opt of options) {
|
||||
while (!opt.filled) {
|
||||
// eslint-disable-next-line no-await-in-loop
|
||||
await this.prompt (opt);
|
||||
await this.prompt (opt)
|
||||
.catch ((e) => {
|
||||
if (this._exit_on_interrupt)
|
||||
process.exit (0);
|
||||
throw e;
|
||||
});
|
||||
if (!opt.filled)
|
||||
console.log ('input was invalid');
|
||||
}
|
||||
|
Reference in New Issue
Block a user