readline: eagerly load string_decoder

There was no point in lazy loading the string_decoder, since it
would be used in all cases anyway.

PR-URL: https://github.com/nodejs/node/pull/30807
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Yongsheng Zhang <zyszys98@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
Ruben Bridgewater 2019-12-05 07:51:47 +01:00 committed by Rich Trott
parent 46aa7d091f
commit 254398a0be

View File

@ -64,8 +64,7 @@ const {
kClearScreenDown
} = CSI;
// Lazy load StringDecoder for startup performance.
let StringDecoder;
const { StringDecoder } = require('string_decoder');
// Lazy load Readable for startup performance.
let Readable;
@ -93,9 +92,6 @@ function Interface(input, output, completer, terminal) {
return new Interface(input, output, completer, terminal);
}
if (StringDecoder === undefined)
StringDecoder = require('string_decoder').StringDecoder;
this._sawReturnAt = 0;
this.isCompletionEnabled = true;
this._sawKeyPress = false;
@ -1131,8 +1127,6 @@ Interface.prototype[Symbol.asyncIterator] = function() {
function emitKeypressEvents(stream, iface) {
if (stream[KEYPRESS_DECODER]) return;
if (StringDecoder === undefined)
StringDecoder = require('string_decoder').StringDecoder;
stream[KEYPRESS_DECODER] = new StringDecoder('utf8');
stream[ESCAPE_DECODER] = emitKeys(stream);
@ -1147,8 +1141,11 @@ function emitKeypressEvents(stream, iface) {
if (r) {
clearTimeout(timeoutId);
let escapeTimeout = ESCAPE_CODE_TIMEOUT;
if (iface) {
iface._sawKeyPress = r.length === 1;
escapeTimeout = iface.escapeCodeTimeout;
}
for (let i = 0; i < r.length; i++) {
@ -1160,10 +1157,7 @@ function emitKeypressEvents(stream, iface) {
stream[ESCAPE_DECODER].next(r[i]);
// Escape letter at the tail position
if (r[i] === kEscape && i + 1 === r.length) {
timeoutId = setTimeout(
escapeCodeTimeout,
iface ? iface.escapeCodeTimeout : ESCAPE_CODE_TIMEOUT
);
timeoutId = setTimeout(escapeCodeTimeout, escapeTimeout);
}
} catch (err) {
// If the generator throws (it could happen in the `keypress`