@@ -66,8 +66,7 @@ export class TerminalPanel implements ITerminal {
66
66
67
67
private _terminal ?: ITerminal ;
68
68
private _process ?: WebContainerProcess ;
69
- private _data : string [ ] = [ ] ;
70
- private _input : string [ ] = [ ] ;
69
+ private _data : { data : string ; type : 'input' | 'echo' } [ ] = [ ] ;
71
70
private _onData ?: ( data : string ) => void ;
72
71
73
72
constructor (
@@ -128,24 +127,18 @@ export class TerminalPanel implements ITerminal {
128
127
this . _terminal . reset ( ) ;
129
128
} else {
130
129
this . _data = [ ] ;
131
- this . _input = [ ] ;
132
130
}
133
131
}
134
132
135
- /**
136
- * Write data to stdout.
137
- *
138
- * @internal
139
- */
133
+ /** @internal */
140
134
write ( data : string ) {
141
135
if ( this . _terminal ) {
142
136
this . _terminal . write ( data ) ;
143
137
} else {
144
- this . _data . push ( data ) ;
138
+ this . _data . push ( { data, type : 'echo' } ) ;
145
139
}
146
140
}
147
141
148
- /** Write data to stdin */
149
142
input ( data : string ) {
150
143
if ( this . type !== 'terminal' ) {
151
144
throw new Error ( 'Cannot write data to output-only terminal' ) ;
@@ -154,11 +147,10 @@ export class TerminalPanel implements ITerminal {
154
147
if ( this . _terminal ) {
155
148
this . _terminal . input ( data ) ;
156
149
} else {
157
- this . _input . push ( data ) ;
150
+ this . _data . push ( { data, type : 'input' } ) ;
158
151
}
159
152
}
160
153
161
- /** Callback invoked when data is written to stdin */
162
154
onData ( callback : ( data : string ) => void ) {
163
155
if ( this . _terminal ) {
164
156
this . _terminal . onData ( callback ) ;
@@ -187,16 +179,15 @@ export class TerminalPanel implements ITerminal {
187
179
* @param terminal The terminal.
188
180
*/
189
181
attachTerminal ( terminal : ITerminal ) {
190
- for ( const data of this . _data ) {
191
- terminal . write ( data ) ;
192
- }
193
-
194
- for ( const data of this . _input ) {
195
- terminal . input ( data ) ;
182
+ for ( const { type , data } of this . _data ) {
183
+ if ( type === 'echo' ) {
184
+ terminal . write ( data ) ;
185
+ } else {
186
+ terminal . input ( data ) ;
187
+ }
196
188
}
197
189
198
190
this . _data = [ ] ;
199
- this . _input = [ ] ;
200
191
this . _terminal = terminal ;
201
192
202
193
if ( this . _onData ) {
0 commit comments