@@ -35,7 +35,6 @@ const {
3535const { debug, inherits } = require ( 'util' ) ;
3636const { Buffer } = require ( 'buffer' ) ;
3737const EventEmitter = require ( 'events' ) ;
38- const { StringDecoder } = require ( 'string_decoder' ) ;
3938const {
4039 CSI ,
4140 emitKeys,
@@ -52,6 +51,9 @@ const {
5251 kClearScreenDown
5352} = CSI ;
5453
54+ // Lazy load StringDecoder for startup performance.
55+ let StringDecoder ;
56+
5557const kHistorySize = 30 ;
5658const kMincrlfDelay = 100 ;
5759// \r\n, \n, or \r followed by something other than \n
@@ -73,6 +75,9 @@ function Interface(input, output, completer, terminal) {
7375 return new Interface ( input , output , completer , terminal ) ;
7476 }
7577
78+ if ( StringDecoder === undefined )
79+ StringDecoder = require ( 'string_decoder' ) . StringDecoder ;
80+
7681 this . _sawReturnAt = 0 ;
7782 this . isCompletionEnabled = true ;
7883 this . _sawKeyPress = false ;
@@ -987,6 +992,9 @@ Interface.prototype._ttyWrite = function(s, key) {
987992
988993function emitKeypressEvents ( stream , iface ) {
989994 if ( stream [ KEYPRESS_DECODER ] ) return ;
995+
996+ if ( StringDecoder === undefined )
997+ StringDecoder = require ( 'string_decoder' ) . StringDecoder ;
990998 stream [ KEYPRESS_DECODER ] = new StringDecoder ( 'utf8' ) ;
991999
9921000 stream [ ESCAPE_DECODER ] = emitKeys ( stream ) ;
0 commit comments