File tree Expand file tree Collapse file tree 2 files changed +27
-0
lines changed Expand file tree Collapse file tree 2 files changed +27
-0
lines changed Original file line number Diff line number Diff line change @@ -4,6 +4,7 @@ export interface ITerminal {
4
4
5
5
reset : ( ) => void ;
6
6
write : ( data : string ) => void ;
7
+ input : ( data : string ) => void ;
7
8
onData : ( cb : ( data : string ) => void ) => void ;
8
9
}
9
10
Original file line number Diff line number Diff line change @@ -67,6 +67,7 @@ export class TerminalPanel implements ITerminal {
67
67
private _terminal ?: ITerminal ;
68
68
private _process ?: WebContainerProcess ;
69
69
private _data : string [ ] = [ ] ;
70
+ private _input : string [ ] = [ ] ;
70
71
private _onData ?: ( data : string ) => void ;
71
72
72
73
constructor (
@@ -127,9 +128,15 @@ export class TerminalPanel implements ITerminal {
127
128
this . _terminal . reset ( ) ;
128
129
} else {
129
130
this . _data = [ ] ;
131
+ this . _input = [ ] ;
130
132
}
131
133
}
132
134
135
+ /**
136
+ * Write data to stdout.
137
+ *
138
+ * @internal
139
+ */
133
140
write ( data : string ) {
134
141
if ( this . _terminal ) {
135
142
this . _terminal . write ( data ) ;
@@ -138,6 +145,20 @@ export class TerminalPanel implements ITerminal {
138
145
}
139
146
}
140
147
148
+ /** Write data to stdin */
149
+ input ( data : string ) {
150
+ if ( this . type !== 'terminal' ) {
151
+ throw new Error ( 'Cannot write data to output-only terminal' ) ;
152
+ }
153
+
154
+ if ( this . _terminal ) {
155
+ this . _terminal . input ( data ) ;
156
+ } else {
157
+ this . _input . push ( data ) ;
158
+ }
159
+ }
160
+
161
+ /** Callback invoked when data is written to stdin */
141
162
onData ( callback : ( data : string ) => void ) {
142
163
if ( this . _terminal ) {
143
164
this . _terminal . onData ( callback ) ;
@@ -170,7 +191,12 @@ export class TerminalPanel implements ITerminal {
170
191
terminal . write ( data ) ;
171
192
}
172
193
194
+ for ( const data of this . _input ) {
195
+ terminal . input ( data ) ;
196
+ }
197
+
173
198
this . _data = [ ] ;
199
+ this . _input = [ ] ;
174
200
this . _terminal = terminal ;
175
201
176
202
if ( this . _onData ) {
You can’t perform that action at this time.
0 commit comments