Refactor prompt timeout plugin to reduce nesting
All checks were successful
build-and-push / lint (push) Successful in 4s
build-and-push / sonar (push) Successful in 11s
build-and-push / docker (push) Successful in 1m11s

This commit is contained in:
nocci 2025-12-30 14:56:50 +00:00
parent 69282c63d5
commit 37ffd09545

View file

@ -92,19 +92,22 @@ export const stealth = async context => {
// alternative inquirer is big (node_modules 29MB, enquirer 9.7MB, prompts 9.8MB, none 9.4MB) and slower
// open issue: prevents handleSIGINT() to work if prompt is cancelled with Ctrl-C instead of Escape: https://github.com/enquirer/enquirer/issues/372
import Enquirer from 'enquirer'; const enquirer = new Enquirer();
const timeoutPlugin = defaultTimeout => enquirer => { // cancel prompt after timeout ms; can be disabled per prompt via options.timeout = 0
const onPrompt = prompt => {
const effectiveTimeout = prompt.options?.timeout ?? defaultTimeout;
if (!effectiveTimeout) return;
const t = setTimeout(() => {
prompt.hint = () => 'timeout';
const timeoutHint = () => 'timeout';
const cancelPromptWithHint = prompt => {
prompt.hint = timeoutHint;
prompt.cancel();
}, effectiveTimeout);
const clear = () => clearTimeout(t);
prompt.on('submit', clear);
prompt.on('cancel', clear);
};
enquirer.on('prompt', onPrompt);
const applyPromptTimeout = (prompt, timeout) => {
if (!timeout) return;
const timer = setTimeout(cancelPromptWithHint, timeout, prompt);
const clearTimer = () => clearTimeout(timer);
prompt.on('submit', clearTimer);
prompt.on('cancel', clearTimer);
};
// cancel prompt after timeout ms; can be disabled per prompt via options.timeout = 0
const timeoutPlugin = defaultTimeout => enquirerInstance => {
const onPrompt = prompt => applyPromptTimeout(prompt, prompt.options?.timeout ?? defaultTimeout);
enquirerInstance.on('prompt', onPrompt);
};
enquirer.use(timeoutPlugin(cfg.login_timeout));
// single prompt that just returns the non-empty value instead of an object