From 80ce33f9ef1c3c8eceea79a5cff3c9938e5b6ec2 Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Sat, 8 Jun 2019 21:33:02 -0700 Subject: [PATCH] Rename EventEmitter2 to EventEmitter Fixes #2029 --- src/InputHandler.ts | 10 +++---- src/Linkifier.ts | 8 +++--- src/SelectionManager.ts | 8 +++--- src/Terminal.ts | 28 +++++++++---------- src/TestUtils.test.ts | 6 ++-- src/Types.ts | 6 ++-- src/browser/TestUtils.test.ts | 4 +-- src/browser/services/CharSizeService.ts | 4 +-- src/browser/services/RenderService.ts | 8 +++--- src/browser/services/Services.d.ts | 2 +- src/common/CircularList.ts | 8 +++--- ...tEmitter2.test.ts => EventEmitter.test.ts} | 8 +++--- .../{EventEmitter2.ts => EventEmitter.ts} | 2 +- src/common/TestUtils.test.ts | 4 +-- src/common/Types.ts | 8 +++--- src/common/buffer/BufferSet.ts | 4 +-- src/common/buffer/Marker.ts | 4 +-- src/common/buffer/Types.ts | 2 +- src/common/services/OptionsService.ts | 4 +-- src/common/services/Services.d.ts | 2 +- src/public/Terminal.ts | 2 +- 21 files changed, 66 insertions(+), 66 deletions(-) rename src/common/{EventEmitter2.test.ts => EventEmitter.test.ts} (81%) rename src/common/{EventEmitter2.ts => EventEmitter.ts} (97%) diff --git a/src/InputHandler.ts b/src/InputHandler.ts index 2b592aa7..5ea20caf 100644 --- a/src/InputHandler.ts +++ b/src/InputHandler.ts @@ -14,7 +14,7 @@ import { Disposable } from 'common/Lifecycle'; import { concat } from 'common/TypedArrayUtils'; import { StringToUtf32, stringFromCodePoint, utf32ToString, Utf8ToUtf32 } from 'common/input/TextDecoder'; import { CellData, Attributes, FgFlags, BgFlags, AttributeData, NULL_CELL_WIDTH, NULL_CELL_CODE, DEFAULT_ATTR_DATA } from 'common/buffer/BufferLine'; -import { EventEmitter2, IEvent } from 'common/EventEmitter2'; +import { EventEmitter, IEvent } from 'common/EventEmitter'; import { IParsingState, IDcsHandler, IEscapeSequenceParser } from 'common/parser/Types'; /** @@ -108,13 +108,13 @@ export class InputHandler extends Disposable implements IInputHandler { private _utf8Decoder: Utf8ToUtf32 = new Utf8ToUtf32(); private _workCell: CellData = new CellData(); - private _onCursorMove = new EventEmitter2(); + private _onCursorMove = new EventEmitter(); public get onCursorMove(): IEvent { return this._onCursorMove.event; } - private _onData = new EventEmitter2(); + private _onData = new EventEmitter(); public get onData(): IEvent { return this._onData.event; } - private _onLineFeed = new EventEmitter2(); + private _onLineFeed = new EventEmitter(); public get onLineFeed(): IEvent { return this._onLineFeed.event; } - private _onScroll = new EventEmitter2(); + private _onScroll = new EventEmitter(); public get onScroll(): IEvent { return this._onScroll.event; } constructor( diff --git a/src/Linkifier.ts b/src/Linkifier.ts index 50794a58..c11849de 100644 --- a/src/Linkifier.ts +++ b/src/Linkifier.ts @@ -7,7 +7,7 @@ import { ILinkifierEvent, ILinkMatcher, LinkMatcherHandler, ILinkMatcherOptions, import { IBufferStringIteratorResult } from 'common/buffer/Types'; import { MouseZone } from './MouseZoneManager'; import { getStringCellWidth } from 'common/CharWidth'; -import { EventEmitter2, IEvent } from 'common/EventEmitter2'; +import { EventEmitter, IEvent } from 'common/EventEmitter'; /** * The Linkifier applies links to rows shortly after they have been refreshed. @@ -34,11 +34,11 @@ export class Linkifier implements ILinkifier { private _nextLinkMatcherId = 0; private _rowsToLinkify: { start: number, end: number }; - private _onLinkHover = new EventEmitter2(); + private _onLinkHover = new EventEmitter(); public get onLinkHover(): IEvent { return this._onLinkHover.event; } - private _onLinkLeave = new EventEmitter2(); + private _onLinkLeave = new EventEmitter(); public get onLinkLeave(): IEvent { return this._onLinkLeave.event; } - private _onLinkTooltip = new EventEmitter2(); + private _onLinkTooltip = new EventEmitter(); public get onLinkTooltip(): IEvent { return this._onLinkTooltip.event; } constructor( diff --git a/src/SelectionManager.ts b/src/SelectionManager.ts index 1a8d6b6c..ef16f5c5 100644 --- a/src/SelectionManager.ts +++ b/src/SelectionManager.ts @@ -12,7 +12,7 @@ import { SelectionModel } from './SelectionModel'; import { AltClickHandler } from './handlers/AltClickHandler'; import { CellData } from 'common/buffer/BufferLine'; import { IDisposable } from 'xterm'; -import { EventEmitter2, IEvent } from 'common/EventEmitter2'; +import { EventEmitter, IEvent } from 'common/EventEmitter'; import { ICharSizeService } from 'browser/services/Services'; import { IBufferService } from 'common/services/Services'; @@ -110,11 +110,11 @@ export class SelectionManager implements ISelectionManager { private _mouseDownTimeStamp: number; - private _onLinuxMouseSelection = new EventEmitter2(); + private _onLinuxMouseSelection = new EventEmitter(); public get onLinuxMouseSelection(): IEvent { return this._onLinuxMouseSelection.event; } - private _onRedrawRequest = new EventEmitter2(); + private _onRedrawRequest = new EventEmitter(); public get onRedrawRequest(): IEvent { return this._onRedrawRequest.event; } - private _onSelectionChange = new EventEmitter2(); + private _onSelectionChange = new EventEmitter(); public get onSelectionChange(): IEvent { return this._onSelectionChange.event; } constructor( diff --git a/src/Terminal.ts b/src/Terminal.ts index f99b6a9d..9d27e0f5 100644 --- a/src/Terminal.ts +++ b/src/Terminal.ts @@ -45,7 +45,7 @@ import { removeTerminalFromCache } from './renderer/atlas/CharAtlasCache'; import { DomRenderer } from './renderer/dom/DomRenderer'; import { IKeyboardEvent, KeyboardResultType, ICharset, IBufferLine, IAttributeData } from 'common/Types'; import { evaluateKeyboardEvent } from 'common/input/Keyboard'; -import { EventEmitter2, IEvent } from 'common/EventEmitter2'; +import { EventEmitter, IEvent } from 'common/EventEmitter'; import { Attributes, DEFAULT_ATTR_DATA } from 'common/buffer/BufferLine'; import { applyWindowsMode } from './WindowsMode'; import { ColorManager } from 'browser/ColorManager'; @@ -190,32 +190,32 @@ export class Terminal extends Disposable implements ITerminal, IDisposable, IInp public get cols(): number { return this._bufferService.cols; } public get rows(): number { return this._bufferService.rows; } - private _onCursorMove = new EventEmitter2(); + private _onCursorMove = new EventEmitter(); public get onCursorMove(): IEvent { return this._onCursorMove.event; } - private _onData = new EventEmitter2(); + private _onData = new EventEmitter(); public get onData(): IEvent { return this._onData.event; } - private _onKey = new EventEmitter2<{ key: string, domEvent: KeyboardEvent }>(); + private _onKey = new EventEmitter<{ key: string, domEvent: KeyboardEvent }>(); public get onKey(): IEvent<{ key: string, domEvent: KeyboardEvent }> { return this._onKey.event; } - private _onLineFeed = new EventEmitter2(); + private _onLineFeed = new EventEmitter(); public get onLineFeed(): IEvent { return this._onLineFeed.event; } - private _onRender = new EventEmitter2<{ start: number, end: number }>(); + private _onRender = new EventEmitter<{ start: number, end: number }>(); public get onRender(): IEvent<{ start: number, end: number }> { return this._onRender.event; } - private _onResize = new EventEmitter2<{ cols: number, rows: number }>(); + private _onResize = new EventEmitter<{ cols: number, rows: number }>(); public get onResize(): IEvent<{ cols: number, rows: number }> { return this._onResize.event; } - private _onScroll = new EventEmitter2(); + private _onScroll = new EventEmitter(); public get onScroll(): IEvent { return this._onScroll.event; } - private _onSelectionChange = new EventEmitter2(); + private _onSelectionChange = new EventEmitter(); public get onSelectionChange(): IEvent { return this._onSelectionChange.event; } - private _onTitleChange = new EventEmitter2(); + private _onTitleChange = new EventEmitter(); public get onTitleChange(): IEvent { return this._onTitleChange.event; } - private _onFocus = new EventEmitter2(); + private _onFocus = new EventEmitter(); public get onFocus(): IEvent { return this._onFocus.event; } - private _onBlur = new EventEmitter2(); + private _onBlur = new EventEmitter(); public get onBlur(): IEvent { return this._onBlur.event; } - public onA11yCharEmitter = new EventEmitter2(); + public onA11yCharEmitter = new EventEmitter(); public get onA11yChar(): IEvent { return this.onA11yCharEmitter.event; } - public onA11yTabEmitter = new EventEmitter2(); + public onA11yTabEmitter = new EventEmitter(); public get onA11yTab(): IEvent { return this.onA11yTabEmitter.event; } /** diff --git a/src/TestUtils.test.ts b/src/TestUtils.test.ts index 4f293eed..6afd018d 100644 --- a/src/TestUtils.test.ts +++ b/src/TestUtils.test.ts @@ -14,7 +14,7 @@ import { Terminal } from './Terminal'; import { AttributeData } from 'common/buffer/BufferLine'; import { IColorManager, IColorSet, IMouseHelper } from 'browser/Types'; import { IOptionsService } from 'common/services/Services'; -import { EventEmitter2 } from 'common/EventEmitter2'; +import { EventEmitter } from 'common/EventEmitter'; export class TestTerminal extends Terminal { writeSync(data: string): void { @@ -186,8 +186,8 @@ export class MockTerminal implements ITerminal { } export class MockInputHandlingTerminal implements IInputHandlingTerminal { - onA11yCharEmitter: EventEmitter2; - onA11yTabEmitter: EventEmitter2; + onA11yCharEmitter: EventEmitter; + onA11yTabEmitter: EventEmitter; element: HTMLElement; options: ITerminalOptions = {}; cols: number; diff --git a/src/Types.ts b/src/Types.ts index 536f7cca..a3435614 100644 --- a/src/Types.ts +++ b/src/Types.ts @@ -5,7 +5,7 @@ import { ITerminalOptions as IPublicTerminalOptions, IDisposable, IMarker, ISelectionPosition } from 'xterm'; import { ICharset, IAttributeData, CharData } from 'common/Types'; -import { IEvent, EventEmitter2 } from 'common/EventEmitter2'; +import { IEvent, EventEmitter } from 'common/EventEmitter'; import { IColorSet, IMouseHelper } from 'browser/Types'; import { IOptionsService } from 'common/services/Services'; import { IBuffer, IBufferSet } from 'common/buffer/Types'; @@ -54,8 +54,8 @@ export interface IInputHandlingTerminal { viewport: IViewport; selectionManager: ISelectionManager; - onA11yCharEmitter: EventEmitter2; - onA11yTabEmitter: EventEmitter2; + onA11yCharEmitter: EventEmitter; + onA11yTabEmitter: EventEmitter; bell(): void; focus(): void; diff --git a/src/browser/TestUtils.test.ts b/src/browser/TestUtils.test.ts index 7c965c8d..b286295b 100644 --- a/src/browser/TestUtils.test.ts +++ b/src/browser/TestUtils.test.ts @@ -3,12 +3,12 @@ * @license MIT */ -import { IEvent, EventEmitter2 } from 'common/EventEmitter2'; +import { IEvent, EventEmitter } from 'common/EventEmitter'; import { ICharSizeService } from 'browser/services/Services'; export class MockCharSizeService implements ICharSizeService { get hasValidSize(): boolean { return this.width > 0 && this.height > 0; } - onCharSizeChange: IEvent = new EventEmitter2().event; + onCharSizeChange: IEvent = new EventEmitter().event; constructor(public width: number, public height: number) {} measure(): void {} } diff --git a/src/browser/services/CharSizeService.ts b/src/browser/services/CharSizeService.ts index 9312e383..42920bfa 100644 --- a/src/browser/services/CharSizeService.ts +++ b/src/browser/services/CharSizeService.ts @@ -4,7 +4,7 @@ */ import { IOptionsService } from 'common/services/Services'; -import { IEvent, EventEmitter2 } from 'common/EventEmitter2'; +import { IEvent, EventEmitter } from 'common/EventEmitter'; import { ICharSizeService } from 'browser/services/Services'; export class CharSizeService implements ICharSizeService { @@ -14,7 +14,7 @@ export class CharSizeService implements ICharSizeService { public get hasValidSize(): boolean { return this.width > 0 && this.height > 0; } - private _onCharSizeChange = new EventEmitter2(); + private _onCharSizeChange = new EventEmitter(); public get onCharSizeChange(): IEvent { return this._onCharSizeChange.event; } constructor( diff --git a/src/browser/services/RenderService.ts b/src/browser/services/RenderService.ts index 5930569d..5035ed3d 100644 --- a/src/browser/services/RenderService.ts +++ b/src/browser/services/RenderService.ts @@ -5,7 +5,7 @@ import { IRenderer, IRenderDimensions, CharacterJoinerHandler } from 'browser/renderer/Types'; import { RenderDebouncer } from 'browser/RenderDebouncer'; -import { EventEmitter2, IEvent } from 'common/EventEmitter2'; +import { EventEmitter, IEvent } from 'common/EventEmitter'; import { Disposable } from 'common/Lifecycle'; import { ScreenDprMonitor } from 'browser/ScreenDprMonitor'; import { addDisposableDomListener } from 'browser/Lifecycle'; @@ -22,11 +22,11 @@ export class RenderService extends Disposable implements IRenderService { private _canvasWidth: number = 0; private _canvasHeight: number = 0; - private _onDimensionsChange = new EventEmitter2(); + private _onDimensionsChange = new EventEmitter(); public get onDimensionsChange(): IEvent { return this._onDimensionsChange.event; } - private _onRender = new EventEmitter2<{ start: number, end: number }>(); + private _onRender = new EventEmitter<{ start: number, end: number }>(); public get onRender(): IEvent<{ start: number, end: number }> { return this._onRender.event; } - private _onRefreshRequest = new EventEmitter2<{ start: number, end: number }>(); + private _onRefreshRequest = new EventEmitter<{ start: number, end: number }>(); public get onRefreshRequest(): IEvent<{ start: number, end: number }> { return this._onRefreshRequest.event; } public get dimensions(): IRenderDimensions { return this._renderer.dimensions; } diff --git a/src/browser/services/Services.d.ts b/src/browser/services/Services.d.ts index 6bdf383a..1916572c 100644 --- a/src/browser/services/Services.d.ts +++ b/src/browser/services/Services.d.ts @@ -3,7 +3,7 @@ * @license MIT */ -import { IEvent } from 'common/EventEmitter2'; +import { IEvent } from 'common/EventEmitter'; import { IRenderDimensions, IRenderer, CharacterJoinerHandler } from 'browser/renderer/Types'; import { IColorSet } from 'browser/Types'; diff --git a/src/common/CircularList.ts b/src/common/CircularList.ts index 88e714b8..d4ad3fce 100644 --- a/src/common/CircularList.ts +++ b/src/common/CircularList.ts @@ -4,7 +4,7 @@ */ import { ICircularList } from 'common/Types'; -import { EventEmitter2, IEvent } from 'common/EventEmitter2'; +import { EventEmitter, IEvent } from 'common/EventEmitter'; export interface IInsertEvent { index: number; @@ -25,11 +25,11 @@ export class CircularList implements ICircularList { private _startIndex: number; private _length: number; - public onDeleteEmitter = new EventEmitter2(); + public onDeleteEmitter = new EventEmitter(); public get onDelete(): IEvent { return this.onDeleteEmitter.event; } - public onInsertEmitter = new EventEmitter2(); + public onInsertEmitter = new EventEmitter(); public get onInsert(): IEvent { return this.onInsertEmitter.event; } - public onTrimEmitter = new EventEmitter2(); + public onTrimEmitter = new EventEmitter(); public get onTrim(): IEvent { return this.onTrimEmitter.event; } constructor( diff --git a/src/common/EventEmitter2.test.ts b/src/common/EventEmitter.test.ts similarity index 81% rename from src/common/EventEmitter2.test.ts rename to src/common/EventEmitter.test.ts index bd8b5dea..e9013a99 100644 --- a/src/common/EventEmitter2.test.ts +++ b/src/common/EventEmitter.test.ts @@ -4,12 +4,12 @@ */ import { assert } from 'chai'; -import { EventEmitter2 } from 'common/EventEmitter2'; +import { EventEmitter } from 'common/EventEmitter'; -describe('EventEmitter2', () => { +describe('EventEmitter', () => { it('should fire listeners multiple times', () => { const order: string[] = []; - const emitter = new EventEmitter2(); + const emitter = new EventEmitter(); emitter.event(data => order.push(data + 'a')); emitter.event(data => order.push(data + 'b')); emitter.fire(1); @@ -19,7 +19,7 @@ describe('EventEmitter2', () => { it('should not fire listeners once disposed', () => { const order: string[] = []; - const emitter = new EventEmitter2(); + const emitter = new EventEmitter(); emitter.event(data => order.push(data + 'a')); const disposeB = emitter.event(data => order.push(data + 'b')); emitter.event(data => order.push(data + 'c')); diff --git a/src/common/EventEmitter2.ts b/src/common/EventEmitter.ts similarity index 97% rename from src/common/EventEmitter2.ts rename to src/common/EventEmitter.ts index fcbef969..efc101ce 100644 --- a/src/common/EventEmitter2.ts +++ b/src/common/EventEmitter.ts @@ -13,7 +13,7 @@ export interface IEvent { (listener: (e: T) => any): IDisposable; } -export class EventEmitter2 { +export class EventEmitter { private _listeners: IListener[] = []; private _event?: IEvent; diff --git a/src/common/TestUtils.test.ts b/src/common/TestUtils.test.ts index 0a0cb6a4..0bb56ee3 100644 --- a/src/common/TestUtils.test.ts +++ b/src/common/TestUtils.test.ts @@ -4,7 +4,7 @@ */ import { IBufferService, IOptionsService, ITerminalOptions, IPartialTerminalOptions } from 'common/services/Services'; -import { IEvent, EventEmitter2 } from 'common/EventEmitter2'; +import { IEvent, EventEmitter } from 'common/EventEmitter'; import { clone } from 'common/Clone'; import { DEFAULT_OPTIONS } from 'common/services/OptionsService'; @@ -21,7 +21,7 @@ export class MockBufferService implements IBufferService { export class MockOptionsService implements IOptionsService { options: ITerminalOptions = clone(DEFAULT_OPTIONS); - onOptionChange: IEvent = new EventEmitter2().event; + onOptionChange: IEvent = new EventEmitter().event; constructor(testOptions: IPartialTerminalOptions) { Object.keys(testOptions).forEach(key => this.options[key] = (testOptions)[key]); } diff --git a/src/common/Types.ts b/src/common/Types.ts index 67d449e5..b29515d4 100644 --- a/src/common/Types.ts +++ b/src/common/Types.ts @@ -3,7 +3,7 @@ * @license MIT */ -import { IEvent, EventEmitter2 } from 'common/EventEmitter2'; +import { IEvent, EventEmitter } from 'common/EventEmitter'; import { IDeleteEvent, IInsertEvent } from 'common/CircularList'; export const DEFAULT_COLOR = 256; @@ -40,11 +40,11 @@ export interface ICircularList { maxLength: number; isFull: boolean; - onDeleteEmitter: EventEmitter2; + onDeleteEmitter: EventEmitter; onDelete: IEvent; - onInsertEmitter: EventEmitter2; + onInsertEmitter: EventEmitter; onInsert: IEvent; - onTrimEmitter: EventEmitter2; + onTrimEmitter: EventEmitter; onTrim: IEvent; get(index: number): T | undefined; diff --git a/src/common/buffer/BufferSet.ts b/src/common/buffer/BufferSet.ts index cc8fe737..50e6e505 100644 --- a/src/common/buffer/BufferSet.ts +++ b/src/common/buffer/BufferSet.ts @@ -6,7 +6,7 @@ import { IBuffer, IBufferSet } from 'common/buffer/Types'; import { IAttributeData } from 'common/Types'; import { Buffer } from 'common/buffer/Buffer'; -import { EventEmitter2, IEvent } from 'common/EventEmitter2'; +import { EventEmitter, IEvent } from 'common/EventEmitter'; import { IOptionsService, IBufferService } from 'common/services/Services'; /** @@ -19,7 +19,7 @@ export class BufferSet implements IBufferSet { private _activeBuffer: Buffer; - private _onBufferActivate = new EventEmitter2<{activeBuffer: IBuffer, inactiveBuffer: IBuffer}>(); + private _onBufferActivate = new EventEmitter<{activeBuffer: IBuffer, inactiveBuffer: IBuffer}>(); public get onBufferActivate(): IEvent<{activeBuffer: IBuffer, inactiveBuffer: IBuffer}> { return this._onBufferActivate.event; } /** diff --git a/src/common/buffer/Marker.ts b/src/common/buffer/Marker.ts index 51c5d7f8..7f52ac99 100644 --- a/src/common/buffer/Marker.ts +++ b/src/common/buffer/Marker.ts @@ -3,7 +3,7 @@ * @license MIT */ -import { EventEmitter2, IEvent } from 'common/EventEmitter2'; +import { EventEmitter, IEvent } from 'common/EventEmitter'; import { Disposable } from 'common/Lifecycle'; import { IMarker } from 'common/Types'; @@ -15,7 +15,7 @@ export class Marker extends Disposable implements IMarker { public get id(): number { return this._id; } - private _onDispose = new EventEmitter2(); + private _onDispose = new EventEmitter(); public get onDispose(): IEvent { return this._onDispose.event; } constructor( diff --git a/src/common/buffer/Types.ts b/src/common/buffer/Types.ts index 37ce2b7e..4b4bb85f 100644 --- a/src/common/buffer/Types.ts +++ b/src/common/buffer/Types.ts @@ -4,7 +4,7 @@ */ import { IAttributeData, ICircularList, IBufferLine, ICellData } from 'common/Types'; -import { IEvent } from 'common/EventEmitter2'; +import { IEvent } from 'common/EventEmitter'; // BufferIndex denotes a position in the buffer: [rowIndex, colIndex] export type BufferIndex = [number, number]; diff --git a/src/common/services/OptionsService.ts b/src/common/services/OptionsService.ts index d518aae6..2d2a08f0 100644 --- a/src/common/services/OptionsService.ts +++ b/src/common/services/OptionsService.ts @@ -4,7 +4,7 @@ */ import { IOptionsService, ITerminalOptions, IPartialTerminalOptions } from 'common/services/Services'; -import { EventEmitter2, IEvent } from 'common/EventEmitter2'; +import { EventEmitter, IEvent } from 'common/EventEmitter'; import { isMac } from 'common/Platform'; import { clone } from 'common/Clone'; @@ -57,7 +57,7 @@ const CONSTRUCTOR_ONLY_OPTIONS = ['cols', 'rows']; export class OptionsService implements IOptionsService { public options: ITerminalOptions; - private _onOptionChange = new EventEmitter2(); + private _onOptionChange = new EventEmitter(); public get onOptionChange(): IEvent { return this._onOptionChange.event; } constructor(options: IPartialTerminalOptions) { diff --git a/src/common/services/Services.d.ts b/src/common/services/Services.d.ts index 8ebc0308..0c7f92bd 100644 --- a/src/common/services/Services.d.ts +++ b/src/common/services/Services.d.ts @@ -3,7 +3,7 @@ * @license MIT */ -import { IEvent } from 'common/EventEmitter2'; +import { IEvent } from 'common/EventEmitter'; export interface IBufferService { readonly cols: number; diff --git a/src/public/Terminal.ts b/src/public/Terminal.ts index 2ccbdef6..1c019b16 100644 --- a/src/public/Terminal.ts +++ b/src/public/Terminal.ts @@ -9,7 +9,7 @@ import { IBufferLine } from 'common/Types'; import { IBuffer } from 'common/buffer/Types'; import { Terminal as TerminalCore } from '../Terminal'; import * as Strings from '../Strings'; -import { IEvent } from 'common/EventEmitter2'; +import { IEvent } from 'common/EventEmitter'; import { AddonManager } from './AddonManager'; export class Terminal implements ITerminalApi {