@@ -4,18 +4,19 @@ import type { IDEFrontendState } from '@gitpod/gitpod-protocol/lib/ide-frontend-
44
55import type ReconnectingWebSocket from "reconnecting-websocket" ;
66import fetchBuilder from "fetch-retry" ;
7- import type { Terminal , ITerminalOptions , ITerminalAddon } from "xterm" ;
7+ import type { Terminal , ITerminalOptions , ITerminalAddon } from "@xterm/ xterm" ;
88
9- import { AttachAddon } from "xterm- addon-attach" ;
10- import { FitAddon } from "xterm- addon-fit" ;
9+ import { AttachAddon } from "@ xterm/ addon-attach" ;
10+ import { FitAddon } from "@ xterm/ addon-fit" ;
1111
1212import { resizeRemoteTerminal } from "./lib/remote" ;
1313import { IXtermWindow } from "./lib/types" ;
1414import { webLinksHandler } from "./lib/addons" ;
1515import { initiateRemoteCommunicationChannelSocket } from "./lib/remote" ;
1616import { Emitter } from '@gitpod/gitpod-protocol/lib/util/event' ;
1717import { DisposableCollection } from '@gitpod/gitpod-protocol/lib/util/disposable' ;
18- import { debounce , isWindows } from './lib/helpers' ;
18+ import { isWindows } from './lib/helpers' ;
19+ import debounce from "lodash/debounce"
1920
2021const onDidChangeState = new Emitter < void > ( ) ;
2122let state : IDEFrontendState = "initializing" as IDEFrontendState ;
@@ -24,11 +25,11 @@ const maxReconnectionRetries = 50;
2425
2526const fetchOptions = {
2627 retries : maxReconnectionRetries ,
27- retryDelay : ( attempt : number , _error : Error , _response : Response ) => {
28+ retryDelay : ( attempt : number , _error : Error | null , _response : Response | null ) => {
2829 return Math . pow ( 1.25 , attempt ) * 200 ;
2930 } ,
30- retryOn : ( attempt : number , error : Error , response : Response ) => {
31- if ( error !== null || response . status >= 400 ) {
31+ retryOn : ( attempt : number , error : Error | null , response : Response | null ) => {
32+ if ( error !== null || ( response ? .status ?? 0 ) >= 400 ) {
3233 console . log ( `retrying, attempt number ${ attempt + 1 } , ${ ( Math . pow ( 1.25 , attempt ) * 300 ) / 1000 } ` ) ;
3334 return true ;
3435 } else {
@@ -59,17 +60,17 @@ export const webSocketSettings: ReconnectingWebSocket['_options'] = {
5960const extraTerminalAddons : { [ key : string ] : ITerminalAddon } = { } ;
6061
6162( async ( ) => {
62- extraTerminalAddons [ 'ligatures' ] = new ( await import ( "xterm- addon-ligatures" ) ) . LigaturesAddon ( ) ;
63- extraTerminalAddons [ 'unicode' ] = new ( await import ( "xterm- addon-unicode11" ) ) . Unicode11Addon ( ) ;
64- extraTerminalAddons [ 'webLinks' ] = new ( await import ( "xterm- addon-web-links" ) ) . WebLinksAddon ( webLinksHandler ) ;
63+ extraTerminalAddons [ 'ligatures' ] = new ( await import ( "@ xterm/ addon-ligatures" ) ) . LigaturesAddon ( ) ;
64+ extraTerminalAddons [ 'unicode' ] = new ( await import ( "@ xterm/ addon-unicode11" ) ) . Unicode11Addon ( ) ;
65+ extraTerminalAddons [ 'webLinks' ] = new ( await import ( "@ xterm/ addon-web-links" ) ) . WebLinksAddon ( webLinksHandler ) ;
6566} ) ( )
6667
6768async function initAddons ( term : Terminal ) : Promise < void > {
6869 for ( const addon of Object . values ( extraTerminalAddons ) ) {
6970 term . loadAddon ( addon ) ;
7071 }
7172
72- const webglRenderer = new ( await import ( "xterm- addon-webgl" ) ) . WebglAddon ;
73+ const webglRenderer = new ( await import ( "@ xterm/ addon-webgl" ) ) . WebglAddon ;
7374 try {
7475 term . loadAddon ( webglRenderer ) ;
7576 console . debug ( "Loaded webgl renderer" ) ;
@@ -79,7 +80,7 @@ async function initAddons(term: Terminal): Promise<void> {
7980 } catch ( e ) {
8081 console . warn ( `Webgl renderer could not be loaded. Falling back to the canvas renderer type.` , e ) ;
8182 webglRenderer . dispose ( ) ;
82- const canvasRenderer = new ( await import ( "xterm- addon-canvas" ) ) . CanvasAddon ;
83+ const canvasRenderer = new ( await import ( "@ xterm/ addon-canvas" ) ) . CanvasAddon ;
8384 term . loadAddon ( canvasRenderer ) ;
8485 }
8586
@@ -133,7 +134,7 @@ async function createTerminal(element: HTMLElement, toDispose: DisposableCollect
133134 element . removeChild ( element . children [ 0 ] ) ;
134135 }
135136
136- const { Terminal } = ( await import ( "xterm" ) ) ;
137+ const { Terminal } = ( await import ( "@xterm/ xterm" ) ) ;
137138
138139 term = new Terminal ( {
139140 windowsMode : isWindows ,
@@ -191,7 +192,7 @@ async function createTerminal(element: HTMLElement, toDispose: DisposableCollect
191192 throw new Error ( "Couldn't set up a remote connection to the terminal process" ) ;
192193 }
193194
194- const debouncedUpdateTerminalSize = debounce ( ( ) => updateTerminalSize ( term ) , 200 , true ) ;
195+ const debouncedUpdateTerminalSize = debounce ( ( ) => updateTerminalSize ( term ) , 200 , { trailing : true } ) ;
195196 window . onresize = ( ) => debouncedUpdateTerminalSize ( ) ;
196197
197198 return { terminal : term , socket : terminalSocket } ;
0 commit comments