From 481a959adbda695622a15aac9506a3fc0feee739 Mon Sep 17 00:00:00 2001 From: Antoine du Hamel Date: Wed, 14 Sep 2022 21:10:53 +0200 Subject: [PATCH] readline: remove `question` method from `InterfaceConstructor` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit That method is overwritten in both `require('node:readline').Interface.prototype` and `require('node:readline/promises').Interface.prototype`, and is very much not useful outside of interacting with TTY, removing it from the parent class could enable the use of `InterfaceConstructor` in other contexts (such as interacting with files). PR-URL: https://github.com/nodejs/node/pull/44606 Reviewed-By: Joyee Cheung Reviewed-By: Michaƫl Zasso --- doc/api/readline.md | 55 ------------------------------ lib/internal/readline/interface.js | 4 ++- lib/readline.js | 7 ++-- lib/readline/promises.js | 3 +- 4 files changed, 8 insertions(+), 61 deletions(-) diff --git a/doc/api/readline.md b/doc/api/readline.md index 443d89f8b49390..b4ac0b3bf5f264 100644 --- a/doc/api/readline.md +++ b/doc/api/readline.md @@ -303,61 +303,6 @@ paused. If the `InterfaceConstructor` was created with `output` set to `null` or `undefined` the prompt is not written. -### `rl.question(query[, options], callback)` - - - -* `query` {string} A statement or query to write to `output`, prepended to the - prompt. -* `options` {Object} - * `signal` {AbortSignal} Optionally allows the `question()` to be canceled - using an `AbortController`. -* `callback` {Function} A callback function that is invoked with the user's - input in response to the `query`. - -The `rl.question()` method displays the `query` by writing it to the `output`, -waits for user input to be provided on `input`, then invokes the `callback` -function passing the provided input as the first argument. - -When called, `rl.question()` will resume the `input` stream if it has been -paused. - -If the `InterfaceConstructor` was created with `output` set to `null` or -`undefined` the `query` is not written. - -The `callback` function passed to `rl.question()` does not follow the typical -pattern of accepting an `Error` object or `null` as the first argument. -The `callback` is called with the provided answer as the only argument. - -An error will be thrown if calling `rl.question()` after `rl.close()`. - -Example usage: - -```js -rl.question('What is your favorite food? ', (answer) => { - console.log(`Oh, so your favorite food is ${answer}`); -}); -``` - -Using an `AbortController` to cancel a question. - -```js -const ac = new AbortController(); -const signal = ac.signal; - -rl.question('What is your favorite food? ', { signal }, (answer) => { - console.log(`Oh, so your favorite food is ${answer}`); -}); - -signal.addEventListener('abort', () => { - console.log('The food question timed out'); -}, { once: true }); - -setTimeout(() => ac.abort(), 10000); -``` - ### `rl.resume()`