* Fixed ask function
Some checks failed
Publish Library / Build NPM Project (push) Failing after 21s
Publish Library / Publish CDN & Docs (push) Has been skipped
Publish Library / Tag Version (push) Has been skipped

This commit is contained in:
2025-05-12 15:58:02 -04:00
parent 1117c1e3b2
commit 2d1c2034e4
3 changed files with 22 additions and 28 deletions

View File

@ -1,49 +1,43 @@
import readline from 'node:readline';
/**
* Retrieve input form the CLI
* Retrieve input from the CLI
*
* @param {string} prompt Prepend a prompt before the cursor carrot
* @param {boolean} hide Hide user input (replacing with stars)
* @return {Promise<string>} User input
*/
export function ask(prompt: string, hide = false): Promise<string> {
const rl: any = readline.createInterface({
input: process.stdin,
output: process.stdout,
terminal: true
});
export function ask(prompt: string, hide = false) {
const rl: any = readline.createInterface({input: process.stdin, output: process.stdout, terminal: true});
return new Promise((resolve) => {
if (!hide) {
rl.question(prompt, (answer: string) => {
rl.close();
resolve(answer);
rl.close();
});
} else {
rl.output.write(prompt);
let input = '';
// Listen for 'keypress' to handle masking
rl.input.on('keypress', (char: string, key: any) => {
const onKeyPress = (char: string, key: any) => {
if (key && key.name === 'return') {
rl.output.write('\n'); // Submit on new line
rl.input.setRawMode(false);
rl.input.removeListener('keypress', onKeyPress);
rl.close();
resolve(input);
} else if (key && key.name === 'backspace') {
if (input.length > 0) {
input = input.slice(0, -1);
rl.output.write(`\r${prompt}${input.replaceAll(/./g, '*')} \b`);
}
} else {
input += char;
rl.output.write('\b*'); // Mask the input with '*'
if (key && key.name === 'backspace') {
if (input.length > 0) input = input.slice(0, -1);
} else {
input += char;
}
rl.output.write(`\r${prompt}${'*'.repeat(input.length)} `);
}
});
};
// Restore settings
// Attach keypress event
rl.input.on('keypress', onKeyPress);
rl.input.setRawMode(true);
rl.input.resume();
rl.output.write(prompt);
}
});
}