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