diff --git a/package-lock.json b/package-lock.json index 57ae84f..f3a8c06 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { - "name": "@ztimson/css-utils", - "version": "1.1.1", + "name": "@ztimson/node-utils", + "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "@ztimson/css-utils", - "version": "1.1.1", + "name": "@ztimson/node-utils", + "version": "1.0.0", "license": "MIT", "devDependencies": { "@types/node": "^22.10.1", diff --git a/package.json b/package.json index de6f0ce..8664201 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@ztimson/node-utils", - "version": "1.0.0", + "version": "1.0.1", "description": "CSS Utility Classes", "author": "ztimson", "license": "MIT", diff --git a/src/input.ts b/src/input.ts index e27f8b4..d4a5b71 100644 --- a/src/input.ts +++ b/src/input.ts @@ -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} User input */ -export function ask(prompt: string, hide = false): Promise { - 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); } }); }