diff --git a/src/browser/TestUtils.test.ts b/src/browser/TestUtils.test.ts index 1d7b81ca7..1617062dc 100644 --- a/src/browser/TestUtils.test.ts +++ b/src/browser/TestUtils.test.ts @@ -8,7 +8,8 @@ import { ICharacterJoinerService, ICharSizeService, ICoreBrowserService, IMouseS import { IRenderDimensions, IRenderer, IRequestRedrawEvent } from 'browser/renderer/shared/Types'; import { IColorSet, ITerminal, ILinkifier2, IBrowser, IViewport, ICompositionHelper, CharacterJoinerHandler, IBufferRange, ReadonlyColorSet, IBufferElementProvider } from 'browser/Types'; import { IBuffer, IBufferSet } from 'common/buffer/Types'; -import { IBufferLine, ICellData, IAttributeData, ICircularList, XtermListener, ICharset, ITerminalOptions, ColorIndex } from 'common/services/Types'; +import type { ICircularList } from 'common/base/CircularList'; +import { IBufferLine, ICellData, IAttributeData, XtermListener, ICharset, ITerminalOptions, ColorIndex } from 'common/services/Types'; import { Buffer } from 'common/buffer/Buffer'; import * as Browser from 'common/base/Platform'; import { CoreBrowserTerminal } from 'browser/CoreBrowserTerminal'; diff --git a/src/common/REARCHITECTURE.md b/src/common/REARCHITECTURE.md index 0802955a2..047b54555 100644 --- a/src/common/REARCHITECTURE.md +++ b/src/common/REARCHITECTURE.md @@ -42,13 +42,13 @@ flowchart BT | Project | Role | Notable sources | | --- | --- | --- | -| `common/base` | Core utilities (lifecycle, events, platform) | `Async`, `Event`, `Lifecycle`, `Platform`, `StringBuilder`, `Version` | +| `common/base` | Core utilities (lifecycle, events, platform) | `Async`, `Event`, `Lifecycle`, `Platform`, `StringBuilder`, `Version`, `CircularList` | | `common/encoding` | UTF conversion | `TextDecoder` (moved from `input/`) | | `common/data` | Static terminal data | `Charsets`, `EscapeSequences` | | `common/buffer` | Screen buffer | `Buffer`, `BufferLine`, … | | `common/parser` | Escape sequence parser | `EscapeSequenceParser`, … | | `common/input` | Keyboard / write path helpers | `Keyboard`, `WriteBuffer`, … | -| `common/services` | DI services and shared types | `Services`, `Types`, `CircularList`, … | +| `common/services` | DI services and shared types | `Services`, `Types`, `Color`, … | | `common/terminal` | Core terminal + input handler | `CoreTerminal`, `InputHandler`, `WindowsMode` | | `common/public` | Public API adapters | `AddonManager`, buffer API views | diff --git a/src/common/services/CircularList.test.ts b/src/common/base/CircularList.test.ts similarity index 99% rename from src/common/services/CircularList.test.ts rename to src/common/base/CircularList.test.ts index 907577833..5252e3948 100644 --- a/src/common/services/CircularList.test.ts +++ b/src/common/base/CircularList.test.ts @@ -4,7 +4,7 @@ */ import { assert } from 'chai'; -import { CircularList } from 'common/services/CircularList'; +import { CircularList } from 'common/base/CircularList'; describe('CircularList', () => { describe('push', () => { diff --git a/src/common/services/CircularList.ts b/src/common/base/CircularList.ts similarity index 91% rename from src/common/services/CircularList.ts rename to src/common/base/CircularList.ts index 52626161f..3ba30fd14 100644 --- a/src/common/services/CircularList.ts +++ b/src/common/base/CircularList.ts @@ -3,9 +3,8 @@ * @license MIT */ -import { ICircularList } from 'common/services/Types'; import { Disposable } from 'common/base/Lifecycle'; -import { Emitter } from 'common/base/Event'; +import { Emitter, type IEvent } from 'common/base/Event'; export interface IInsertEvent { index: number; @@ -17,6 +16,28 @@ export interface IDeleteEvent { amount: number; } +export interface ICircularList { + length: number; + maxLength: number; + isFull: boolean; + + onDeleteEmitter: Emitter; + onDelete: IEvent; + onInsertEmitter: Emitter; + onInsert: IEvent; + onTrimEmitter: Emitter; + onTrim: IEvent; + + get(index: number): T | undefined; + set(index: number, value: T): void; + push(value: T): void; + recycle(): T; + pop(): T | undefined; + splice(start: number, deleteCount: number, ...items: T[]): void; + trimStart(count: number): void; + shiftElements(start: number, count: number, offset: number): void; +} + /** * Represents a circular list; a list with a maximum size that wraps around when push is called, * overriding values at the start of the list. diff --git a/src/common/buffer/Buffer.test.ts b/src/common/buffer/Buffer.test.ts index 43316089c..b324bdba8 100644 --- a/src/common/buffer/Buffer.test.ts +++ b/src/common/buffer/Buffer.test.ts @@ -5,7 +5,7 @@ import { assert } from 'chai'; import { Buffer } from 'common/buffer/Buffer'; -import { CircularList } from 'common/services/CircularList'; +import { CircularList } from 'common/base/CircularList'; import { MockOptionsService, MockBufferService, MockLogService, createCellData } from 'common/terminal/TestUtils.test'; import { BufferLine, DEFAULT_ATTR_DATA } from 'common/buffer/BufferLine'; import { BufferLineStringCache } from 'common/buffer/BufferLineStringCache'; diff --git a/src/common/buffer/Buffer.ts b/src/common/buffer/Buffer.ts index 8b13ae304..a466f6671 100644 --- a/src/common/buffer/Buffer.ts +++ b/src/common/buffer/Buffer.ts @@ -3,7 +3,7 @@ * @license MIT */ -import { CircularList, IInsertEvent } from 'common/services/CircularList'; +import { CircularList, IInsertEvent } from 'common/base/CircularList'; import { Disposable, toDisposable } from 'common/base/Lifecycle'; import { IdleTaskQueue } from 'common/services/TaskQueue'; import { IAttributeData, IBufferLine, ICellData, ICharset } from 'common/services/Types'; diff --git a/src/common/buffer/BufferReflow.ts b/src/common/buffer/BufferReflow.ts index 8eab5fbb0..3c05b6f43 100644 --- a/src/common/buffer/BufferReflow.ts +++ b/src/common/buffer/BufferReflow.ts @@ -4,7 +4,7 @@ */ import { BufferLine } from 'common/buffer/BufferLine'; -import { CircularList } from 'common/services/CircularList'; +import { CircularList } from 'common/base/CircularList'; import { IBufferLine, ICellData } from 'common/services/Types'; export interface INewLayoutResult { diff --git a/src/common/buffer/Types.ts b/src/common/buffer/Types.ts index 5879505a9..3f240b96f 100644 --- a/src/common/buffer/Types.ts +++ b/src/common/buffer/Types.ts @@ -3,7 +3,8 @@ * @license MIT */ -import { IAttributeData, ICircularList, IBufferLine, ICellData, IMarker, ICharset, IDisposable } from 'common/services/Types'; +import type { ICircularList } from 'common/base/CircularList'; +import { IAttributeData, IBufferLine, ICellData, IMarker, ICharset, IDisposable } from 'common/services/Types'; import type { IEvent } from 'common/base/Event'; // BufferIndex denotes a position in the buffer: [rowIndex, colIndex] diff --git a/src/common/services/DecorationService.ts b/src/common/services/DecorationService.ts index 9d3729871..a86eb5018 100644 --- a/src/common/services/DecorationService.ts +++ b/src/common/services/DecorationService.ts @@ -3,13 +3,13 @@ * @license MIT */ -import type { IDeleteEvent, IInsertEvent } from 'common/services/CircularList'; +import type { ICircularList, IDeleteEvent, IInsertEvent } from 'common/base/CircularList'; import { MicrotaskTimer } from 'common/base/Async'; import { css } from 'common/services/Color'; import { Disposable, DisposableStore, MutableDisposable, toDisposable } from 'common/base/Lifecycle'; import { IBufferService, IDecorationService, IInternalDecoration, ILogService } from 'common/services/Services'; import { SortedList } from 'common/services/SortedList'; -import { IColor, ICircularList } from 'common/services/Types'; +import { IColor } from 'common/services/Types'; import { IDecoration, IDecorationOptions, IMarker } from '@xterm/xterm'; import { Emitter } from 'common/base/Event'; diff --git a/src/common/services/Types.ts b/src/common/services/Types.ts index 44946c9ef..282416b5c 100644 --- a/src/common/services/Types.ts +++ b/src/common/services/Types.ts @@ -3,13 +3,12 @@ * @license MIT */ -import type { IDeleteEvent, IInsertEvent } from 'common/services/CircularList'; import type { UnderlineStyle } from 'common/buffer/Constants'; import type { IBufferSet } from 'common/buffer/Types'; import type { IParams } from 'common/parser/Types'; import type { IMouseStateService, ICoreService, IOptionsService, IUnicodeService } from 'common/services/Services'; import { IFunctionIdentifier, ITerminalOptions as IPublicTerminalOptions } from '@xterm/xterm'; -import type { Emitter, IEvent } from 'common/base/Event'; +import type { IEvent } from 'common/base/Event'; export type { ICharset } from 'common/data/Charsets'; @@ -64,28 +63,6 @@ export interface IScrollEvent { position: number; } -export interface ICircularList { - length: number; - maxLength: number; - isFull: boolean; - - onDeleteEmitter: Emitter; - onDelete: IEvent; - onInsertEmitter: Emitter; - onInsert: IEvent; - onTrimEmitter: Emitter; - onTrim: IEvent; - - get(index: number): T | undefined; - set(index: number, value: T): void; - push(value: T): void; - recycle(): T; - pop(): T | undefined; - splice(start: number, deleteCount: number, ...items: T[]): void; - trimStart(count: number): void; - shiftElements(start: number, count: number, offset: number): void; -} - export const enum KeyboardResultType { SEND_KEY, SELECT_ALL,