diff --git a/.eslintrc.json b/.eslintrc.json index 491ee8f7..e72d576a 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -216,6 +216,10 @@ ], "no-trailing-spaces": "warn", "no-unsafe-finally": "warn", + "no-unused-vars": ["warn", { + "vars": "all", + "args": "none" + }], "no-var": "warn", "one-var": [ "warn", @@ -237,10 +241,14 @@ }, "overrides": [ { - "files": ["**/*.test.ts"], + "files": [ + "**/*.api.ts", + "**/*.test.ts" + ], "rules": { "object-curly-spacing": "off", - "max-len": "off" + "max-len": "off", + "no-unused-vars": "off" } } ] diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index eaf22d67..cd465c01 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -9,6 +9,7 @@ on: jobs: build: runs-on: ubuntu-latest + timeout-minutes: 10 steps: - uses: actions/checkout@v3 - name: Use Node.js 18.x @@ -55,6 +56,7 @@ jobs: lint: runs-on: ubuntu-latest + timeout-minutes: 10 steps: - uses: actions/checkout@v3 - name: Use Node.js 18.x @@ -63,21 +65,37 @@ jobs: node-version: 18.x cache: 'yarn' - name: Install dependencies - run: yarn --frozen-lockfile + run: | + yarn --frozen-lockfile + yarn install-addons - name: Lint code run: yarn lint - name: Lint API run: yarn lint-api - unit-tests: - needs: build + test-unit-parallel: + timeout-minutes: 20 strategy: matrix: - node-version: [16, 18] + node-version: [18] runs-on: [ubuntu, macos, windows] runs-on: ${{ matrix.runs-on }}-latest steps: - uses: actions/checkout@v3 + - name: Use Node.js ${{ matrix.node-version }}.x + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }}.x + cache: 'yarn' + - name: Install dependencies + run: | + yarn --frozen-lockfile + yarn install-addons + - name: Wait for build job + uses: NathanFirmo/wait-for-other-job@v1.1.1 + with: + token: ${{ secrets.GITHUB_TOKEN }} + job: build - uses: actions/download-artifact@v3 with: name: build-artifacts @@ -89,26 +107,68 @@ jobs: run: 7z x compressed-build.zip -aoa -o${{ github.workspace }} - name: Print directory structure run: ls -R + - name: Unit tests + run: yarn test-unit --forbid-only + + test-unit: + needs: build + timeout-minutes: 20 + strategy: + matrix: + node-version: [16] + runs-on: [ubuntu, macos, windows] + runs-on: ${{ matrix.runs-on }}-latest + steps: + - uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node-version }}.x uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }}.x cache: 'yarn' - name: Install dependencies - run: yarn --frozen-lockfile + run: | + yarn --frozen-lockfile + yarn install-addons + - uses: actions/download-artifact@v3 + with: + name: build-artifacts + - name: Unzip artifacts (Linux, macOS) + if: runner.os != 'Windows' + run: unzip -o compressed-build.zip + - name: Unzip artifacts (Windows) + if: runner.os == 'Windows' + run: 7z x compressed-build.zip -aoa -o${{ github.workspace }} + - name: Print directory structure + run: ls -R - name: Unit tests run: yarn test-unit --forbid-only - integration-tests: - needs: build + test-api-parallel: + timeout-minutes: 20 strategy: matrix: - node-version: [18] - runs-on: [ubuntu, windows] # macos is flaky + node-version: [18] # just one as integration tests are about testing in browser + runs-on: [ubuntu] # macos is flaky browser: [chromium, firefox] runs-on: ${{ matrix.runs-on }}-latest steps: - uses: actions/checkout@v3 + - name: Use Node.js ${{ matrix.node-version }}.x + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }}.x + cache: 'yarn' + - name: Install dependencies + run: | + yarn --frozen-lockfile + yarn install-addons + - name: Install playwright + run: npx playwright install + - name: Wait for build job + uses: NathanFirmo/wait-for-other-job@v1.1.1 + with: + token: ${{ secrets.GITHUB_TOKEN }} + job: build - uses: actions/download-artifact@v3 with: name: build-artifacts @@ -120,14 +180,41 @@ jobs: run: 7z x compressed-build.zip -aoa -o${{ github.workspace }} - name: Print directory structure run: ls -R + - name: Integration tests (${{ matrix.browser }}) + run: yarn test-api-${{ matrix.browser }} --headless --forbid-only + + test-api: + needs: build + timeout-minutes: 20 + strategy: + matrix: + node-version: [18] # just one as integration tests are about testing in browser + runs-on: [windows] # macos is flaky + browser: [chromium, firefox] + runs-on: ${{ matrix.runs-on }}-latest + steps: + - uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node-version }}.x uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }}.x cache: 'yarn' - name: Install dependencies - run: yarn --frozen-lockfile + run: | + yarn --frozen-lockfile + yarn install-addons - name: Install playwright run: npx playwright install + - uses: actions/download-artifact@v3 + with: + name: build-artifacts + - name: Unzip artifacts (Linux, macOS) + if: runner.os != 'Windows' + run: unzip -o compressed-build.zip + - name: Unzip artifacts (Windows) + if: runner.os == 'Windows' + run: 7z x compressed-build.zip -aoa -o${{ github.workspace }} + - name: Print directory structure + run: ls -R - name: Integration tests (${{ matrix.browser }}) run: yarn test-api-${{ matrix.browser }} --headless --forbid-only diff --git a/addons/xterm-addon-canvas/src/CanvasAddon.ts b/addons/xterm-addon-canvas/src/CanvasAddon.ts index d6136174..91438a4c 100644 --- a/addons/xterm-addon-canvas/src/CanvasAddon.ts +++ b/addons/xterm-addon-canvas/src/CanvasAddon.ts @@ -3,13 +3,14 @@ * @license MIT */ -import { ICharacterJoinerService, ICharSizeService, ICoreBrowserService, IRenderService, ISelectionService, IThemeService } from 'browser/services/Services'; +import { ICharacterJoinerService, ICharSizeService, ICoreBrowserService, IRenderService, IThemeService } from 'browser/services/Services'; import { ITerminal } from 'browser/Types'; -import { CanvasRenderer } from './CanvasRenderer'; -import { IBufferService, ICoreService, IDecorationService, IOptionsService } from 'common/services/Services'; -import { ITerminalAddon, Terminal } from 'xterm'; import { EventEmitter, forwardEvent } from 'common/EventEmitter'; import { Disposable, toDisposable } from 'common/Lifecycle'; +import { setTraceLogger } from 'common/services/LogService'; +import { IBufferService, IDecorationService, ILogService } from 'common/services/Services'; +import { ITerminalAddon, Terminal } from 'xterm'; +import { CanvasRenderer } from './CanvasRenderer'; export class CanvasAddon extends Disposable implements ITerminalAddon { private _terminal?: Terminal; @@ -44,8 +45,13 @@ export class CanvasAddon extends Disposable implements ITerminalAddon { const charSizeService: ICharSizeService = unsafeCore._charSizeService; const coreBrowserService: ICoreBrowserService = unsafeCore._coreBrowserService; const decorationService: IDecorationService = unsafeCore._decorationService; + const logService: ILogService = unsafeCore._logService; const themeService: IThemeService = unsafeCore._themeService; + // Set trace logger just in case it hasn't been yet which could happen when the addon is + // bundled separately to the core module + setTraceLogger(logService); + this._renderer = new CanvasRenderer(terminal, screenElement, linkifier, bufferService, charSizeService, optionsService, characterJoinerService, coreService, coreBrowserService, decorationService, themeService); this.register(forwardEvent(this._renderer.onChangeTextureAtlas, this._onChangeTextureAtlas)); this.register(forwardEvent(this._renderer.onAddTextureAtlasCanvas, this._onAddTextureAtlasCanvas)); diff --git a/addons/xterm-addon-canvas/src/CanvasRenderer.ts b/addons/xterm-addon-canvas/src/CanvasRenderer.ts index 2109654e..cd05f921 100644 --- a/addons/xterm-addon-canvas/src/CanvasRenderer.ts +++ b/addons/xterm-addon-canvas/src/CanvasRenderer.ts @@ -3,12 +3,12 @@ * @license MIT */ +import { ILinkifier2 } from 'browser/Types'; import { removeTerminalFromCache } from 'browser/renderer/shared/CharAtlasCache'; import { observeDevicePixelDimensions } from 'browser/renderer/shared/DevicePixelObserver'; import { createRenderDimensions } from 'browser/renderer/shared/RendererUtils'; import { IRenderDimensions, IRenderer, IRequestRedrawEvent } from 'browser/renderer/shared/Types'; -import { ICharacterJoinerService, ICharSizeService, ICoreBrowserService, ISelectionService, IThemeService } from 'browser/services/Services'; -import { ILinkifier2 } from 'browser/Types'; +import { ICharSizeService, ICharacterJoinerService, ICoreBrowserService, IThemeService } from 'browser/services/Services'; import { EventEmitter, forwardEvent } from 'common/EventEmitter'; import { Disposable, toDisposable } from 'common/Lifecycle'; import { IBufferService, ICoreService, IDecorationService, IOptionsService } from 'common/services/Services'; diff --git a/addons/xterm-addon-canvas/src/CursorRenderLayer.ts b/addons/xterm-addon-canvas/src/CursorRenderLayer.ts index 2ef1d072..9f4ac896 100644 --- a/addons/xterm-addon-canvas/src/CursorRenderLayer.ts +++ b/addons/xterm-addon-canvas/src/CursorRenderLayer.ts @@ -3,18 +3,17 @@ * @license MIT */ +import { CursorBlinkStateManager } from 'browser/renderer/shared/CursorBlinkStateManager'; import { IRenderDimensions, IRequestRedrawEvent } from 'browser/renderer/shared/Types'; -import { BaseRenderLayer } from './BaseRenderLayer'; -import { ICellData } from 'common/Types'; -import { CellData } from 'common/buffer/CellData'; -import { IColorSet, ReadonlyColorSet } from 'browser/Types'; -import { IBufferService, IOptionsService, ICoreService, IDecorationService } from 'common/services/Services'; -import { IEventEmitter } from 'common/EventEmitter'; import { ICoreBrowserService, IThemeService } from 'browser/services/Services'; -import { Terminal } from 'xterm'; +import { IEventEmitter } from 'common/EventEmitter'; import { toDisposable } from 'common/Lifecycle'; import { isFirefox } from 'common/Platform'; -import { CursorBlinkStateManager } from 'browser/renderer/shared/CursorBlinkStateManager'; +import { ICellData } from 'common/Types'; +import { CellData } from 'common/buffer/CellData'; +import { IBufferService, ICoreService, IDecorationService, IOptionsService } from 'common/services/Services'; +import { Terminal } from 'xterm'; +import { BaseRenderLayer } from './BaseRenderLayer'; interface ICursorState { x: number; @@ -24,11 +23,6 @@ interface ICursorState { width: number; } -/** - * The time between cursor blinks. - */ -const BLINK_INTERVAL = 600; - export class CursorRenderLayer extends BaseRenderLayer { private _state: ICursorState; private _cursorRenderers: {[key: string]: (x: number, y: number, cell: ICellData) => void}; diff --git a/addons/xterm-addon-canvas/src/LinkRenderLayer.ts b/addons/xterm-addon-canvas/src/LinkRenderLayer.ts index 2d4c217c..882f7d8c 100644 --- a/addons/xterm-addon-canvas/src/LinkRenderLayer.ts +++ b/addons/xterm-addon-canvas/src/LinkRenderLayer.ts @@ -3,14 +3,14 @@ * @license MIT */ -import { IRenderDimensions } from 'browser/renderer/shared/Types'; -import { BaseRenderLayer } from './BaseRenderLayer'; -import { INVERTED_DEFAULT_COLOR } from 'browser/renderer/shared/Constants'; -import { ICoreBrowserService, IThemeService } from 'browser/services/Services'; -import { IColorSet, ILinkifierEvent, ILinkifier2, ReadonlyColorSet } from 'browser/Types'; -import { IBufferService, IDecorationService, IOptionsService } from 'common/services/Services'; +import { ILinkifier2, ILinkifierEvent } from 'browser/Types'; import { is256Color } from 'browser/renderer/shared/CharAtlasUtils'; +import { INVERTED_DEFAULT_COLOR } from 'browser/renderer/shared/Constants'; +import { IRenderDimensions } from 'browser/renderer/shared/Types'; +import { ICoreBrowserService, IThemeService } from 'browser/services/Services'; +import { IBufferService, IDecorationService, IOptionsService } from 'common/services/Services'; import { Terminal } from 'xterm'; +import { BaseRenderLayer } from './BaseRenderLayer'; export class LinkRenderLayer extends BaseRenderLayer { private _state: ILinkifierEvent | undefined; diff --git a/addons/xterm-addon-canvas/src/TextRenderLayer.ts b/addons/xterm-addon-canvas/src/TextRenderLayer.ts index 0066cc7d..46d052f3 100644 --- a/addons/xterm-addon-canvas/src/TextRenderLayer.ts +++ b/addons/xterm-addon-canvas/src/TextRenderLayer.ts @@ -4,18 +4,16 @@ */ import { IRenderDimensions } from 'browser/renderer/shared/Types'; -import { CharData, ICellData } from 'common/Types'; -import { GridCache } from './GridCache'; -import { BaseRenderLayer } from './BaseRenderLayer'; -import { AttributeData } from 'common/buffer/AttributeData'; -import { NULL_CELL_CODE, Content, UnderlineStyle } from 'common/buffer/Constants'; -import { IColorSet, ReadonlyColorSet } from 'browser/Types'; -import { CellData } from 'common/buffer/CellData'; -import { IOptionsService, IBufferService, IDecorationService } from 'common/services/Services'; -import { ICharacterJoinerService, ICoreBrowserService, IThemeService } from 'browser/services/Services'; import { JoinedCellData } from 'browser/services/CharacterJoinerService'; -import { color, css } from 'common/Color'; +import { ICharacterJoinerService, ICoreBrowserService, IThemeService } from 'browser/services/Services'; +import { CharData, ICellData } from 'common/Types'; +import { AttributeData } from 'common/buffer/AttributeData'; +import { CellData } from 'common/buffer/CellData'; +import { Content, NULL_CELL_CODE } from 'common/buffer/Constants'; +import { IBufferService, IDecorationService, IOptionsService } from 'common/services/Services'; import { Terminal } from 'xterm'; +import { BaseRenderLayer } from './BaseRenderLayer'; +import { GridCache } from './GridCache'; /** * This CharData looks like a null character, which will forc a clear and render diff --git a/addons/xterm-addon-serialize/src/SerializeAddon.ts b/addons/xterm-addon-serialize/src/SerializeAddon.ts index 737d529a..ace31315 100644 --- a/addons/xterm-addon-serialize/src/SerializeAddon.ts +++ b/addons/xterm-addon-serialize/src/SerializeAddon.ts @@ -5,10 +5,9 @@ * (EXPERIMENTAL) This Addon is still under development */ -import { Terminal, ITerminalAddon, IBuffer, IBufferCell, IBufferRange } from 'xterm'; -import { IColorSet } from 'browser/Types'; -import { IAttributeData, IColor } from 'common/Types'; import { DEFAULT_ANSI_COLORS } from 'browser/services/ThemeService'; +import { IAttributeData, IColor } from 'common/Types'; +import { IBuffer, IBufferCell, IBufferRange, ITerminalAddon, Terminal } from 'xterm'; function constrain(value: number, low: number, high: number): number { return Math.max(low, Math.min(value, high)); diff --git a/addons/xterm-addon-serialize/test/SerializeAddon.api.ts b/addons/xterm-addon-serialize/test/SerializeAddon.api.ts index 5128910a..522d3010 100644 --- a/addons/xterm-addon-serialize/test/SerializeAddon.api.ts +++ b/addons/xterm-addon-serialize/test/SerializeAddon.api.ts @@ -204,7 +204,6 @@ describe('SerializeAddon', () => { sgr(NO_INVISIBLE) + line, sgr(NO_STRIKETHROUGH) + line ]; - const rows = lines.length; await writeSync(page, lines.join('\\r\\n')); assert.equal(await page.evaluate(`serializeAddon.serialize();`), lines.join('\r\n')); }); @@ -593,7 +592,6 @@ const FG_RGB_GREEN = '38;2;0;255;0'; const FG_RGB_YELLOW = '38;2;255;255;0'; const FG_RESET = '39'; - const BG_P16_RED = '41'; const BG_P16_GREEN = '42'; const BG_P16_YELLOW = '43'; diff --git a/addons/xterm-addon-webgl/src/GlyphRenderer.ts b/addons/xterm-addon-webgl/src/GlyphRenderer.ts index 269d9374..4dc80d33 100644 --- a/addons/xterm-addon-webgl/src/GlyphRenderer.ts +++ b/addons/xterm-addon-webgl/src/GlyphRenderer.ts @@ -3,16 +3,15 @@ * @license MIT */ -import { createProgram, GLTexture, PROJECTION_MATRIX } from './WebglUtils'; -import { IWebGL2RenderingContext, IWebGLVertexArrayObject, IRenderModel } from './Types'; -import { NULL_CELL_CODE } from 'common/buffer/Constants'; -import { Terminal } from 'xterm'; -import { IRasterizedGlyph, IRenderDimensions, ITextureAtlas } from 'browser/renderer/shared/Types'; -import { Disposable, toDisposable } from 'common/Lifecycle'; import { throwIfFalsy } from 'browser/renderer/shared/RendererUtils'; import { TextureAtlas } from 'browser/renderer/shared/TextureAtlas'; -import { ILogService } from 'common/services/Services'; +import { IRasterizedGlyph, IRenderDimensions, ITextureAtlas } from 'browser/renderer/shared/Types'; +import { NULL_CELL_CODE } from 'common/buffer/Constants'; +import { Disposable, toDisposable } from 'common/Lifecycle'; import { traceCall } from 'common/services/LogService'; +import { Terminal } from 'xterm'; +import { IRenderModel, IWebGL2RenderingContext, IWebGLVertexArrayObject } from './Types'; +import { createProgram, GLTexture, PROJECTION_MATRIX } from './WebglUtils'; interface IVertices { attributes: Float32Array; diff --git a/addons/xterm-addon-webgl/src/RectangleRenderer.ts b/addons/xterm-addon-webgl/src/RectangleRenderer.ts index b2e5d0fa..5e9c364e 100644 --- a/addons/xterm-addon-webgl/src/RectangleRenderer.ts +++ b/addons/xterm-addon-webgl/src/RectangleRenderer.ts @@ -3,18 +3,17 @@ * @license MIT */ -import { createProgram, expandFloat32Array, PROJECTION_MATRIX } from './WebglUtils'; -import { IRenderModel, IWebGLVertexArrayObject, IWebGL2RenderingContext } from './Types'; -import { Attributes, BgFlags, FgFlags } from 'common/buffer/Constants'; -import { Terminal } from 'xterm'; -import { IColor } from 'common/Types'; -import { IColorSet, ReadonlyColorSet } from 'browser/Types'; -import { IRenderDimensions } from 'browser/renderer/shared/Types'; -import { RENDER_MODEL_BG_OFFSET, RENDER_MODEL_FG_OFFSET, RENDER_MODEL_INDICIES_PER_CELL } from './RenderModel'; -import { Disposable, toDisposable } from 'common/Lifecycle'; -import { DIM_OPACITY } from 'browser/renderer/shared/Constants'; import { throwIfFalsy } from 'browser/renderer/shared/RendererUtils'; +import { IRenderDimensions } from 'browser/renderer/shared/Types'; import { IThemeService } from 'browser/services/Services'; +import { ReadonlyColorSet } from 'browser/Types'; +import { Attributes, FgFlags } from 'common/buffer/Constants'; +import { Disposable, toDisposable } from 'common/Lifecycle'; +import { IColor } from 'common/Types'; +import { Terminal } from 'xterm'; +import { RENDER_MODEL_BG_OFFSET, RENDER_MODEL_FG_OFFSET, RENDER_MODEL_INDICIES_PER_CELL } from './RenderModel'; +import { IRenderModel, IWebGL2RenderingContext, IWebGLVertexArrayObject } from './Types'; +import { createProgram, expandFloat32Array, PROJECTION_MATRIX } from './WebglUtils'; const enum VertexAttribLocations { POSITION = 0, @@ -67,7 +66,6 @@ class Vertices { // Work variables to avoid garbage collection let $rgba = 0; -let $isDefault = false; let $x1 = 0; let $y1 = 0; let $r = 0; @@ -310,7 +308,6 @@ export class RectangleRenderer extends Disposable { } private _updateRectangle(vertices: Vertices, offset: number, fg: number, bg: number, startX: number, endX: number, y: number): void { - $isDefault = false; if (fg & FgFlags.INVERSE) { switch (fg & Attributes.CM_MASK) { case Attributes.CM_P16: @@ -336,7 +333,6 @@ export class RectangleRenderer extends Disposable { case Attributes.CM_DEFAULT: default: $rgba = this._themeService.colors.background.rgba; - $isDefault = true; } } diff --git a/addons/xterm-addon-webgl/src/WebglRenderer.ts b/addons/xterm-addon-webgl/src/WebglRenderer.ts index ae770410..20db5faf 100644 --- a/addons/xterm-addon-webgl/src/WebglRenderer.ts +++ b/addons/xterm-addon-webgl/src/WebglRenderer.ts @@ -4,30 +4,29 @@ */ import { addDisposableDomListener } from 'browser/Lifecycle'; +import { ITerminal } from 'browser/Types'; import { CellColorResolver } from 'browser/renderer/shared/CellColorResolver'; import { acquireTextureAtlas, removeTerminalFromCache } from 'browser/renderer/shared/CharAtlasCache'; +import { CursorBlinkStateManager } from 'browser/renderer/shared/CursorBlinkStateManager'; import { observeDevicePixelDimensions } from 'browser/renderer/shared/DevicePixelObserver'; -import { createRenderDimensions, throwIfFalsy } from 'browser/renderer/shared/RendererUtils'; -import { TextureAtlas } from 'browser/renderer/shared/TextureAtlas'; +import { createRenderDimensions } from 'browser/renderer/shared/RendererUtils'; import { IRenderDimensions, IRenderer, IRequestRedrawEvent, ITextureAtlas } from 'browser/renderer/shared/Types'; -import { ICharacterJoinerService, ICharSizeService, ICoreBrowserService, IThemeService } from 'browser/services/Services'; -import { ITerminal } from 'browser/Types'; +import { ICharSizeService, ICharacterJoinerService, ICoreBrowserService, IThemeService } from 'browser/services/Services'; +import { EventEmitter, forwardEvent } from 'common/EventEmitter'; +import { Disposable, MutableDisposable, getDisposeArrayDisposable, toDisposable } from 'common/Lifecycle'; +import { CharData, IBufferLine, ICellData } from 'common/Types'; import { AttributeData } from 'common/buffer/AttributeData'; import { CellData } from 'common/buffer/CellData'; import { Attributes, Content, NULL_CELL_CHAR, NULL_CELL_CODE } from 'common/buffer/Constants'; -import { EventEmitter, forwardEvent } from 'common/EventEmitter'; -import { Disposable, MutableDisposable, getDisposeArrayDisposable, toDisposable } from 'common/Lifecycle'; -import { ICoreService, IDecorationService, ILogService, IOptionsService } from 'common/services/Services'; -import { CharData, IBufferLine, ICellData } from 'common/Types'; +import { traceCall } from 'common/services/LogService'; +import { ICoreService, IDecorationService, IOptionsService } from 'common/services/Services'; import { IDisposable, Terminal } from 'xterm'; import { GlyphRenderer } from './GlyphRenderer'; import { RectangleRenderer } from './RectangleRenderer'; -import { CursorBlinkStateManager } from 'browser/renderer/shared/CursorBlinkStateManager'; +import { COMBINED_CHAR_BIT_MASK, RENDER_MODEL_BG_OFFSET, RENDER_MODEL_EXT_OFFSET, RENDER_MODEL_FG_OFFSET, RENDER_MODEL_INDICIES_PER_CELL, RenderModel } from './RenderModel'; +import { IWebGL2RenderingContext } from './Types'; import { LinkRenderLayer } from './renderLayer/LinkRenderLayer'; import { IRenderLayer } from './renderLayer/Types'; -import { COMBINED_CHAR_BIT_MASK, RenderModel, RENDER_MODEL_BG_OFFSET, RENDER_MODEL_EXT_OFFSET, RENDER_MODEL_FG_OFFSET, RENDER_MODEL_INDICIES_PER_CELL } from './RenderModel'; -import { IWebGL2RenderingContext } from './Types'; -import { traceCall } from 'common/services/LogService'; export class WebglRenderer extends Disposable implements IRenderer { private _renderLayers: IRenderLayer[]; diff --git a/addons/xterm-addon-webgl/src/renderLayer/BaseRenderLayer.ts b/addons/xterm-addon-webgl/src/renderLayer/BaseRenderLayer.ts index 6296e2f1..f5449c4d 100644 --- a/addons/xterm-addon-webgl/src/renderLayer/BaseRenderLayer.ts +++ b/addons/xterm-addon-webgl/src/renderLayer/BaseRenderLayer.ts @@ -3,17 +3,17 @@ * @license MIT */ -import { IRenderLayer } from './Types'; +import { ReadonlyColorSet } from 'browser/Types'; import { acquireTextureAtlas } from 'browser/renderer/shared/CharAtlasCache'; -import { Terminal } from 'xterm'; -import { IColorSet, ReadonlyColorSet } from 'browser/Types'; import { TEXT_BASELINE } from 'browser/renderer/shared/Constants'; -import { ICoreBrowserService, IThemeService } from 'browser/services/Services'; -import { IRenderDimensions, ITextureAtlas } from 'browser/renderer/shared/Types'; -import { CellData } from 'common/buffer/CellData'; import { throwIfFalsy } from 'browser/renderer/shared/RendererUtils'; +import { IRenderDimensions, ITextureAtlas } from 'browser/renderer/shared/Types'; +import { ICoreBrowserService, IThemeService } from 'browser/services/Services'; import { Disposable, toDisposable } from 'common/Lifecycle'; +import { CellData } from 'common/buffer/CellData'; import { IOptionsService } from 'common/services/Services'; +import { Terminal } from 'xterm'; +import { IRenderLayer } from './Types'; export abstract class BaseRenderLayer extends Disposable implements IRenderLayer { private _canvas: HTMLCanvasElement; diff --git a/addons/xterm-addon-webgl/test/WebglRenderer.api.ts b/addons/xterm-addon-webgl/test/WebglRenderer.api.ts index 8d84b200..5d9cc0f0 100644 --- a/addons/xterm-addon-webgl/test/WebglRenderer.api.ts +++ b/addons/xterm-addon-webgl/test/WebglRenderer.api.ts @@ -6,7 +6,7 @@ import { assert } from 'chai'; import { Browser, Page } from 'playwright'; import { ITheme } from 'xterm'; -import { getBrowserType, launchBrowser, openTerminal, pollFor, timeout, writeSync } from '../../../out-test/api/TestUtils'; +import { getBrowserType, launchBrowser, openTerminal, pollFor, writeSync } from '../../../out-test/api/TestUtils'; import { ITerminalOptions } from '../../../src/common/Types'; const APP = 'http://127.0.0.1:3001/test'; diff --git a/package.json b/package.json index 4fb383fd..be507b6e 100644 --- a/package.json +++ b/package.json @@ -41,8 +41,9 @@ "test-unit-coverage": "node ./bin/test.js --coverage", "test-unit-dev": "cross-env NODE_PATH='./out' mocha", "build": "tsc -b ./tsconfig.all.json", + "install-addons": "node ./bin/install-addons.js", + "presetup": "npm run install-addons", "setup": "npm run build", - "postinstall": "node ./bin/install-addons.js", "postsetup": "npm run inwasm", "prepublishOnly": "npm run package", "watch": "tsc -b -w ./tsconfig.all.json --preserveWatchOutput", diff --git a/src/browser/Linkifier2.ts b/src/browser/Linkifier2.ts index 64467426..28002e04 100644 --- a/src/browser/Linkifier2.ts +++ b/src/browser/Linkifier2.ts @@ -3,13 +3,13 @@ * @license MIT */ -import { ILinkifier2, ILinkProvider, IBufferCellPosition, ILink, ILinkifierEvent, ILinkDecorations, ILinkWithState } from 'browser/Types'; -import { IDisposable } from 'common/Types'; -import { IMouseService, IRenderService } from './services/Services'; -import { IBufferService } from 'common/services/Services'; -import { EventEmitter, IEvent } from 'common/EventEmitter'; -import { Disposable, getDisposeArrayDisposable, disposeArray, toDisposable } from 'common/Lifecycle'; import { addDisposableDomListener } from 'browser/Lifecycle'; +import { IBufferCellPosition, ILink, ILinkDecorations, ILinkProvider, ILinkWithState, ILinkifier2, ILinkifierEvent } from 'browser/Types'; +import { EventEmitter } from 'common/EventEmitter'; +import { Disposable, disposeArray, getDisposeArrayDisposable, toDisposable } from 'common/Lifecycle'; +import { IDisposable } from 'common/Types'; +import { IBufferService } from 'common/services/Services'; +import { IMouseService, IRenderService } from './services/Services'; export class Linkifier2 extends Disposable implements ILinkifier2 { private _element: HTMLElement | undefined; diff --git a/src/browser/Terminal.ts b/src/browser/Terminal.ts index b17f0dd8..24dace2f 100644 --- a/src/browser/Terminal.ts +++ b/src/browser/Terminal.ts @@ -21,42 +21,42 @@ * http://linux.die.net/man/7/urxvt */ -import { ICompositionHelper, ITerminal, IBrowser, CustomKeyEventHandler, IViewport, ILinkifier2, CharacterJoinerHandler, IBufferRange, IBufferElementProvider } from 'browser/Types'; -import { IRenderer } from 'browser/renderer/shared/Types'; -import { CompositionHelper } from 'browser/input/CompositionHelper'; -import { Viewport } from 'browser/Viewport'; -import { rightClickHandler, moveTextAreaUnderMouseCursor, handlePasteEvent, copyHandler, paste } from 'browser/Clipboard'; -import { C0, C1_ESCAPED } from 'common/data/EscapeSequences'; -import { WindowsOptionsReportType } from '../common/InputHandler'; -import { SelectionService } from 'browser/services/SelectionService'; -import * as Browser from 'common/Platform'; +import { copyHandler, handlePasteEvent, moveTextAreaUnderMouseCursor, paste, rightClickHandler } from 'browser/Clipboard'; import { addDisposableDomListener } from 'browser/Lifecycle'; -import * as Strings from 'browser/LocalizableStrings'; -import { AccessibilityManager } from './AccessibilityManager'; -import { ITheme, IMarker, IDisposable, ILinkProvider, IDecorationOptions, IDecoration } from 'xterm'; -import { DomRenderer } from 'browser/renderer/dom/DomRenderer'; -import { KeyboardResultType, CoreMouseEventType, CoreMouseButton, CoreMouseAction, ITerminalOptions, ScrollSource, IColorEvent, ColorIndex, ColorRequestType, SpecialColorIndex } from 'common/Types'; -import { evaluateKeyboardEvent } from 'common/input/Keyboard'; -import { EventEmitter, IEvent, forwardEvent } from 'common/EventEmitter'; -import { DEFAULT_ATTR_DATA } from 'common/buffer/BufferLine'; -import { RenderService } from 'browser/services/RenderService'; -import { ICharSizeService, IRenderService, IMouseService, ISelectionService, ICoreBrowserService, ICharacterJoinerService, IThemeService } from 'browser/services/Services'; -import { CharSizeService } from 'browser/services/CharSizeService'; -import { IBuffer } from 'common/buffer/Types'; -import { MouseService } from 'browser/services/MouseService'; import { Linkifier2 } from 'browser/Linkifier2'; -import { CoreBrowserService } from 'browser/services/CoreBrowserService'; -import { CoreTerminal } from 'common/CoreTerminal'; -import { color, rgba } from 'common/Color'; -import { CharacterJoinerService } from 'browser/services/CharacterJoinerService'; -import { toRgbString } from 'common/input/XParseColor'; +import * as Strings from 'browser/LocalizableStrings'; +import { OscLinkProvider } from 'browser/OscLinkProvider'; +import { CharacterJoinerHandler, CustomKeyEventHandler, IBrowser, IBufferRange, ICompositionHelper, ILinkifier2, ITerminal, IViewport } from 'browser/Types'; +import { Viewport } from 'browser/Viewport'; import { BufferDecorationRenderer } from 'browser/decorations/BufferDecorationRenderer'; import { OverviewRulerRenderer } from 'browser/decorations/OverviewRulerRenderer'; +import { CompositionHelper } from 'browser/input/CompositionHelper'; +import { DomRenderer } from 'browser/renderer/dom/DomRenderer'; +import { IRenderer } from 'browser/renderer/shared/Types'; +import { CharSizeService } from 'browser/services/CharSizeService'; +import { CharacterJoinerService } from 'browser/services/CharacterJoinerService'; +import { CoreBrowserService } from 'browser/services/CoreBrowserService'; +import { MouseService } from 'browser/services/MouseService'; +import { RenderService } from 'browser/services/RenderService'; +import { SelectionService } from 'browser/services/SelectionService'; +import { ICharSizeService, ICharacterJoinerService, ICoreBrowserService, IMouseService, IRenderService, ISelectionService, IThemeService } from 'browser/services/Services'; +import { ThemeService } from 'browser/services/ThemeService'; +import { color, rgba } from 'common/Color'; +import { CoreTerminal } from 'common/CoreTerminal'; +import { EventEmitter, IEvent, forwardEvent } from 'common/EventEmitter'; +import { toDisposable } from 'common/Lifecycle'; +import * as Browser from 'common/Platform'; +import { ColorRequestType, CoreMouseAction, CoreMouseButton, CoreMouseEventType, IColorEvent, ITerminalOptions, KeyboardResultType, ScrollSource, SpecialColorIndex } from 'common/Types'; +import { DEFAULT_ATTR_DATA } from 'common/buffer/BufferLine'; +import { IBuffer } from 'common/buffer/Types'; +import { C0, C1_ESCAPED } from 'common/data/EscapeSequences'; +import { evaluateKeyboardEvent } from 'common/input/Keyboard'; +import { toRgbString } from 'common/input/XParseColor'; import { DecorationService } from 'common/services/DecorationService'; import { IDecorationService } from 'common/services/Services'; -import { OscLinkProvider } from 'browser/OscLinkProvider'; -import { toDisposable } from 'common/Lifecycle'; -import { ThemeService } from 'browser/services/ThemeService'; +import { IDecoration, IDecorationOptions, IDisposable, ILinkProvider, IMarker } from 'xterm'; +import { WindowsOptionsReportType } from '../common/InputHandler'; +import { AccessibilityManager } from './AccessibilityManager'; // Let it work inside Node.js for automated testing purposes. const document: Document = (typeof window !== 'undefined') ? window.document : null as any; diff --git a/src/browser/Types.d.ts b/src/browser/Types.d.ts index 776790cd..f2b5e220 100644 --- a/src/browser/Types.d.ts +++ b/src/browser/Types.d.ts @@ -3,12 +3,11 @@ * @license MIT */ -import { IDecorationOptions, IDecoration, IDisposable, IMarker, Terminal as ITerminalApi } from 'xterm'; import { IEvent } from 'common/EventEmitter'; -import { ICoreTerminal, CharData, ITerminalOptions, IColor } from 'common/Types'; -import { IMouseService, IRenderService } from './services/Services'; +import { CharData, IColor, ICoreTerminal, ITerminalOptions } from 'common/Types'; import { IBuffer } from 'common/buffer/Types'; -import { IFunctionIdentifier, IParams } from 'common/parser/Types'; +import { IDisposable, Terminal as ITerminalApi } from 'xterm'; +import { IMouseService, IRenderService } from './services/Services'; /** * A portion of the public API that are implemented identially internally and simply passed through. diff --git a/src/browser/Viewport.ts b/src/browser/Viewport.ts index 7c1ae945..c6e8732f 100644 --- a/src/browser/Viewport.ts +++ b/src/browser/Viewport.ts @@ -3,14 +3,14 @@ * @license MIT */ -import { Disposable } from 'common/Lifecycle'; import { addDisposableDomListener } from 'browser/Lifecycle'; -import { IColorSet, IViewport, ReadonlyColorSet } from 'browser/Types'; -import { ICharSizeService, ICoreBrowserService, IRenderService, IThemeService } from 'browser/services/Services'; -import { IBufferService, IOptionsService } from 'common/services/Services'; -import { IBuffer } from 'common/buffer/Types'; +import { IViewport, ReadonlyColorSet } from 'browser/Types'; import { IRenderDimensions } from 'browser/renderer/shared/Types'; +import { ICharSizeService, ICoreBrowserService, IRenderService, IThemeService } from 'browser/services/Services'; import { EventEmitter } from 'common/EventEmitter'; +import { Disposable } from 'common/Lifecycle'; +import { IBuffer } from 'common/buffer/Types'; +import { IBufferService, IOptionsService } from 'common/services/Services'; const FALLBACK_SCROLL_BAR_WIDTH = 15; @@ -279,6 +279,9 @@ export class Viewport extends Disposable implements IViewport { } public scrollLines(disp: number): void { + if (disp === 0) { + return; + } if (!this._optionsService.rawOptions.smoothScrollDuration) { this._onRequestScrollLines.fire({ amount: disp, suppressScrollEvent: false }); } else { diff --git a/src/browser/public/Terminal.ts b/src/browser/public/Terminal.ts index 77f8fdde..4db5f7aa 100644 --- a/src/browser/public/Terminal.ts +++ b/src/browser/public/Terminal.ts @@ -3,17 +3,17 @@ * @license MIT */ -import { Terminal as ITerminalApi, IMarker, IDisposable, ILocalizableStrings, ITerminalAddon, IBufferNamespace as IBufferNamespaceApi, IParser, ILinkProvider, IUnicodeHandling, IModes, IDecorationOptions, IDecoration, IBufferElementProvider, ITerminalInitOnlyOptions } from 'xterm'; -import { IBufferRange, ITerminal } from 'browser/Types'; -import { Terminal as TerminalCore } from 'browser/Terminal'; import * as Strings from 'browser/LocalizableStrings'; +import { Terminal as TerminalCore } from 'browser/Terminal'; +import { IBufferRange, ITerminal } from 'browser/Types'; import { IEvent } from 'common/EventEmitter'; -import { ParserApi } from 'common/public/ParserApi'; -import { UnicodeApi } from 'common/public/UnicodeApi'; +import { Disposable } from 'common/Lifecycle'; +import { ITerminalOptions } from 'common/Types'; import { AddonManager } from 'common/public/AddonManager'; import { BufferNamespaceApi } from 'common/public/BufferNamespaceApi'; -import { ITerminalOptions } from 'common/Types'; -import { Disposable } from 'common/Lifecycle'; +import { ParserApi } from 'common/public/ParserApi'; +import { UnicodeApi } from 'common/public/UnicodeApi'; +import { IBufferNamespace as IBufferNamespaceApi, IDecoration, IDecorationOptions, IDisposable, ILinkProvider, ILocalizableStrings, IMarker, IModes, IParser, ITerminalAddon, Terminal as ITerminalApi, ITerminalInitOnlyOptions, IUnicodeHandling } from 'xterm'; /** * The set of options that only have an effect when set in the Terminal constructor. diff --git a/src/browser/renderer/shared/CellColorResolver.ts b/src/browser/renderer/shared/CellColorResolver.ts index ae5019e2..66e6a344 100644 --- a/src/browser/renderer/shared/CellColorResolver.ts +++ b/src/browser/renderer/shared/CellColorResolver.ts @@ -1,6 +1,6 @@ import { ISelectionRenderModel } from 'browser/renderer/shared/Types'; import { ICoreBrowserService, IThemeService } from 'browser/services/Services'; -import { IColorSet, ReadonlyColorSet } from 'browser/Types'; +import { ReadonlyColorSet } from 'browser/Types'; import { Attributes, BgFlags, FgFlags } from 'common/buffer/Constants'; import { IDecorationService } from 'common/services/Services'; import { ICellData } from 'common/Types'; diff --git a/src/browser/renderer/shared/RendererUtils.ts b/src/browser/renderer/shared/RendererUtils.ts index 052f2894..70c9ad86 100644 --- a/src/browser/renderer/shared/RendererUtils.ts +++ b/src/browser/renderer/shared/RendererUtils.ts @@ -3,7 +3,7 @@ * @license MIT */ -import { IDimensions, IOffset, IRenderDimensions } from 'browser/renderer/shared/Types'; +import { IDimensions, IRenderDimensions } from 'browser/renderer/shared/Types'; export function throwIfFalsy(value: T | undefined | null): T { if (!value) { diff --git a/src/browser/renderer/shared/TextureAtlas.ts b/src/browser/renderer/shared/TextureAtlas.ts index 3ee21519..c7b85a7e 100644 --- a/src/browser/renderer/shared/TextureAtlas.ts +++ b/src/browser/renderer/shared/TextureAtlas.ts @@ -3,20 +3,20 @@ * @license MIT */ +import { IColorContrastCache } from 'browser/Types'; import { DIM_OPACITY, TEXT_BASELINE } from 'browser/renderer/shared/Constants'; -import { DEFAULT_COLOR, Attributes, DEFAULT_EXT, UnderlineStyle } from 'common/buffer/Constants'; -import { IColor } from 'common/Types'; -import { AttributeData } from 'common/buffer/AttributeData'; -import { color, NULL_COLOR, rgba } from 'common/Color'; import { tryDrawCustomChar } from 'browser/renderer/shared/CustomGlyphs'; import { excludeFromContrastRatioDemands, isPowerlineGlyph, isRestrictedPowerlineGlyph, throwIfFalsy } from 'browser/renderer/shared/RendererUtils'; -import { IUnicodeService } from 'common/services/Services'; +import { IBoundingBox, ICharAtlasConfig, IRasterizedGlyph, ITextureAtlas } from 'browser/renderer/shared/Types'; +import { NULL_COLOR, color, rgba } from 'common/Color'; +import { EventEmitter } from 'common/EventEmitter'; import { FourKeyMap } from 'common/MultiKeyMap'; import { IdleTaskQueue } from 'common/TaskQueue'; -import { IBoundingBox, ICharAtlasConfig, IRasterizedGlyph, IRequestRedrawEvent, ITextureAtlas } from 'browser/renderer/shared/Types'; -import { EventEmitter } from 'common/EventEmitter'; -import { IColorContrastCache } from 'browser/Types'; +import { IColor } from 'common/Types'; +import { AttributeData } from 'common/buffer/AttributeData'; +import { Attributes, DEFAULT_COLOR, DEFAULT_EXT, UnderlineStyle } from 'common/buffer/Constants'; import { traceCall } from 'common/services/LogService'; +import { IUnicodeService } from 'common/services/Services'; /** * A shared object which is used to draw nothing for a particular cell. diff --git a/src/browser/services/RenderService.ts b/src/browser/services/RenderService.ts index c31d061a..41f0c9b5 100644 --- a/src/browser/services/RenderService.ts +++ b/src/browser/services/RenderService.ts @@ -3,17 +3,16 @@ * @license MIT */ -import { IRenderer, IRenderDimensions } from 'browser/renderer/shared/Types'; -import { RenderDebouncer } from 'browser/RenderDebouncer'; -import { EventEmitter, IEvent } from 'common/EventEmitter'; -import { Disposable } from 'common/Lifecycle'; -import { ScreenDprMonitor } from 'browser/ScreenDprMonitor'; import { addDisposableDomListener } from 'browser/Lifecycle'; -import { IColorSet, IRenderDebouncerWithCallback, ReadonlyColorSet } from 'browser/Types'; -import { IOptionsService, IBufferService, IDecorationService } from 'common/services/Services'; +import { RenderDebouncer } from 'browser/RenderDebouncer'; +import { ScreenDprMonitor } from 'browser/ScreenDprMonitor'; +import { IRenderDebouncerWithCallback } from 'browser/Types'; +import { IRenderDimensions, IRenderer } from 'browser/renderer/shared/Types'; import { ICharSizeService, ICoreBrowserService, IRenderService, IThemeService } from 'browser/services/Services'; +import { EventEmitter } from 'common/EventEmitter'; +import { Disposable } from 'common/Lifecycle'; import { DebouncedIdleTask } from 'common/TaskQueue'; -import { ThemeService } from 'browser/services/ThemeService'; +import { IBufferService, IDecorationService, IOptionsService } from 'common/services/Services'; interface ISelectionState { start: [number, number] | undefined; diff --git a/src/browser/services/SelectionService.ts b/src/browser/services/SelectionService.ts index 486c1941..e6a14cb6 100644 --- a/src/browser/services/SelectionService.ts +++ b/src/browser/services/SelectionService.ts @@ -3,20 +3,20 @@ * @license MIT */ -import { ISelectionRedrawRequestEvent, ISelectionRequestScrollLinesEvent } from 'browser/selection/Types'; -import { IBuffer } from 'common/buffer/Types'; -import { IBufferLine, IDisposable } from 'common/Types'; -import * as Browser from 'common/Platform'; -import { SelectionModel } from 'browser/selection/SelectionModel'; -import { CellData } from 'common/buffer/CellData'; -import { EventEmitter, IEvent } from 'common/EventEmitter'; -import { IMouseService, ISelectionService, IRenderService, ICoreBrowserService } from 'browser/services/Services'; import { IBufferRange, ILinkifier2 } from 'browser/Types'; -import { IBufferService, IOptionsService, ICoreService } from 'common/services/Services'; import { getCoordsRelativeToElement } from 'browser/input/Mouse'; import { moveToCellSequence } from 'browser/input/MoveToCell'; +import { SelectionModel } from 'browser/selection/SelectionModel'; +import { ISelectionRedrawRequestEvent, ISelectionRequestScrollLinesEvent } from 'browser/selection/Types'; +import { ICoreBrowserService, IMouseService, IRenderService, ISelectionService } from 'browser/services/Services'; +import { EventEmitter } from 'common/EventEmitter'; import { Disposable, toDisposable } from 'common/Lifecycle'; +import * as Browser from 'common/Platform'; +import { IBufferLine, IDisposable } from 'common/Types'; import { getRangeLength } from 'common/buffer/BufferRange'; +import { CellData } from 'common/buffer/CellData'; +import { IBuffer } from 'common/buffer/Types'; +import { IBufferService, ICoreService, IOptionsService } from 'common/services/Services'; /** * The number of pixels the mouse needs to be above or below the viewport in diff --git a/src/browser/services/ThemeService.ts b/src/browser/services/ThemeService.ts index 58c9f354..199b3ace 100644 --- a/src/browser/services/ThemeService.ts +++ b/src/browser/services/ThemeService.ts @@ -10,7 +10,7 @@ import { channels, color, css, NULL_COLOR } from 'common/Color'; import { EventEmitter } from 'common/EventEmitter'; import { Disposable } from 'common/Lifecycle'; import { IOptionsService, ITheme } from 'common/services/Services'; -import { ColorIndex, SpecialColorIndex, IColor, AllColorIndex } from 'common/Types'; +import { AllColorIndex, IColor, SpecialColorIndex } from 'common/Types'; interface IRestoreColorSet { foreground: IColor; diff --git a/src/common/Types.d.ts b/src/common/Types.d.ts index b05ceeaf..fc8fdf4e 100644 --- a/src/common/Types.d.ts +++ b/src/common/Types.d.ts @@ -3,13 +3,13 @@ * @license MIT */ -import { IFunctionIdentifier, ITerminalOptions as IPublicTerminalOptions } from 'xterm'; -import { IEvent, IEventEmitter } from 'common/EventEmitter'; import { IDeleteEvent, IInsertEvent } from 'common/CircularList'; +import { IEvent, IEventEmitter } from 'common/EventEmitter'; +import { Attributes, UnderlineStyle } from 'common/buffer/Constants'; // eslint-disable-line no-unused-vars +import { IBufferSet } from 'common/buffer/Types'; import { IParams } from 'common/parser/Types'; import { ICoreMouseService, ICoreService, IOptionsService, IUnicodeService } from 'common/services/Services'; -import { IBufferSet } from 'common/buffer/Types'; -import { Attributes, UnderlineStyle } from 'common/buffer/Constants'; +import { IFunctionIdentifier, ITerminalOptions as IPublicTerminalOptions } from 'xterm'; export interface ICoreTerminal { coreMouseService: ICoreMouseService; @@ -544,7 +544,7 @@ export interface IInputHandler { /** ESC # 8 */ screenAlignmentPattern(): boolean; } -interface IParseStack { +export interface IParseStack { paused: boolean; cursorStartX: number; cursorStartY: number; diff --git a/src/common/buffer/Buffer.ts b/src/common/buffer/Buffer.ts index a82a4569..250c96bc 100644 --- a/src/common/buffer/Buffer.ts +++ b/src/common/buffer/Buffer.ts @@ -4,17 +4,17 @@ */ import { CircularList, IInsertEvent } from 'common/CircularList'; -import { IBuffer } from 'common/buffer/Types'; -import { IBufferLine, ICellData, IAttributeData, ICharset } from 'common/Types'; -import { BufferLine, DEFAULT_ATTR_DATA } from 'common/buffer/BufferLine'; -import { CellData } from 'common/buffer/CellData'; -import { NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE, WHITESPACE_CELL_CHAR, WHITESPACE_CELL_WIDTH, WHITESPACE_CELL_CODE, CHAR_DATA_WIDTH_INDEX, CHAR_DATA_CHAR_INDEX } from 'common/buffer/Constants'; -import { reflowLargerApplyNewLayout, reflowLargerCreateNewLayout, reflowLargerGetLinesToRemove, reflowSmallerGetNewLineLengths, getWrappedLineTrimmedLength } from 'common/buffer/BufferReflow'; -import { Marker } from 'common/buffer/Marker'; -import { IOptionsService, IBufferService } from 'common/services/Services'; -import { DEFAULT_CHARSET } from 'common/data/Charsets'; -import { ExtendedAttrs } from 'common/buffer/AttributeData'; import { IdleTaskQueue } from 'common/TaskQueue'; +import { IAttributeData, IBufferLine, ICellData, ICharset } from 'common/Types'; +import { ExtendedAttrs } from 'common/buffer/AttributeData'; +import { BufferLine, DEFAULT_ATTR_DATA } from 'common/buffer/BufferLine'; +import { getWrappedLineTrimmedLength, reflowLargerApplyNewLayout, reflowLargerCreateNewLayout, reflowLargerGetLinesToRemove, reflowSmallerGetNewLineLengths } from 'common/buffer/BufferReflow'; +import { CellData } from 'common/buffer/CellData'; +import { NULL_CELL_CHAR, NULL_CELL_CODE, NULL_CELL_WIDTH, WHITESPACE_CELL_CHAR, WHITESPACE_CELL_CODE, WHITESPACE_CELL_WIDTH } from 'common/buffer/Constants'; +import { Marker } from 'common/buffer/Marker'; +import { IBuffer } from 'common/buffer/Types'; +import { DEFAULT_CHARSET } from 'common/data/Charsets'; +import { IBufferService, IOptionsService } from 'common/services/Services'; export const MAX_BUFFER_SIZE = 4294967295; // 2^32 - 1 diff --git a/src/common/buffer/BufferLine.ts b/src/common/buffer/BufferLine.ts index 9c48700a..a268f2bc 100644 --- a/src/common/buffer/BufferLine.ts +++ b/src/common/buffer/BufferLine.ts @@ -3,11 +3,11 @@ * @license MIT */ -import { CharData, IBufferLine, ICellData, IAttributeData, IExtendedAttrs } from 'common/Types'; -import { stringFromCodePoint } from 'common/input/TextDecoder'; -import { CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, CHAR_DATA_ATTR_INDEX, NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE, WHITESPACE_CELL_CHAR, Content, BgFlags, FgFlags, Attributes } from 'common/buffer/Constants'; -import { CellData } from 'common/buffer/CellData'; +import { CharData, IAttributeData, IBufferLine, ICellData, IExtendedAttrs } from 'common/Types'; import { AttributeData, ExtendedAttrs } from 'common/buffer/AttributeData'; +import { CellData } from 'common/buffer/CellData'; +import { Attributes, BgFlags, CHAR_DATA_ATTR_INDEX, CHAR_DATA_CHAR_INDEX, CHAR_DATA_WIDTH_INDEX, Content, NULL_CELL_CHAR, NULL_CELL_CODE, NULL_CELL_WIDTH, WHITESPACE_CELL_CHAR } from 'common/buffer/Constants'; +import { stringFromCodePoint } from 'common/input/TextDecoder'; /** * buffer memory layout: diff --git a/src/common/buffer/BufferSet.ts b/src/common/buffer/BufferSet.ts index da902aff..61165fa1 100644 --- a/src/common/buffer/BufferSet.ts +++ b/src/common/buffer/BufferSet.ts @@ -3,12 +3,12 @@ * @license MIT */ -import { IBuffer, IBufferSet } from 'common/buffer/Types'; +import { EventEmitter } from 'common/EventEmitter'; +import { Disposable } from 'common/Lifecycle'; import { IAttributeData } from 'common/Types'; import { Buffer } from 'common/buffer/Buffer'; -import { EventEmitter, IEvent } from 'common/EventEmitter'; -import { IOptionsService, IBufferService } from 'common/services/Services'; -import { Disposable } from 'common/Lifecycle'; +import { IBuffer, IBufferSet } from 'common/buffer/Types'; +import { IBufferService, IOptionsService } from 'common/services/Services'; /** * The BufferSet represents the set of two buffers used by xterm terminals (normal and alt) and diff --git a/src/common/input/WriteBuffer.ts b/src/common/input/WriteBuffer.ts index 6c3dbf64..ac0730cb 100644 --- a/src/common/input/WriteBuffer.ts +++ b/src/common/input/WriteBuffer.ts @@ -4,7 +4,7 @@ * @license MIT */ -import { EventEmitter, IEvent } from 'common/EventEmitter'; +import { EventEmitter } from 'common/EventEmitter'; import { Disposable } from 'common/Lifecycle'; declare const setTimeout: (handler: () => void, timeout?: number) => void; diff --git a/src/common/services/BufferService.ts b/src/common/services/BufferService.ts index 7d8e2846..d20d0cea 100644 --- a/src/common/services/BufferService.ts +++ b/src/common/services/BufferService.ts @@ -3,12 +3,12 @@ * @license MIT */ -import { IBufferService, IOptionsService } from 'common/services/Services'; -import { BufferSet } from 'common/buffer/BufferSet'; -import { IBufferSet, IBuffer } from 'common/buffer/Types'; -import { EventEmitter, IEventEmitter, IEvent } from 'common/EventEmitter'; +import { EventEmitter } from 'common/EventEmitter'; import { Disposable } from 'common/Lifecycle'; import { IAttributeData, IBufferLine, ScrollSource } from 'common/Types'; +import { BufferSet } from 'common/buffer/BufferSet'; +import { IBuffer, IBufferSet } from 'common/buffer/Types'; +import { IBufferService, IOptionsService } from 'common/services/Services'; export const MINIMUM_COLS = 2; // Less than 2 can mess with wide chars export const MINIMUM_ROWS = 1; diff --git a/src/common/services/CoreService.ts b/src/common/services/CoreService.ts index 5299fb0d..71985a17 100644 --- a/src/common/services/CoreService.ts +++ b/src/common/services/CoreService.ts @@ -3,11 +3,11 @@ * @license MIT */ -import { ICoreService, ILogService, IOptionsService, IBufferService } from 'common/services/Services'; -import { EventEmitter, IEvent } from 'common/EventEmitter'; -import { IDecPrivateModes, IModes } from 'common/Types'; import { clone } from 'common/Clone'; +import { EventEmitter } from 'common/EventEmitter'; import { Disposable } from 'common/Lifecycle'; +import { IDecPrivateModes, IModes } from 'common/Types'; +import { IBufferService, ICoreService, ILogService, IOptionsService } from 'common/services/Services'; const DEFAULT_MODES: IModes = Object.freeze({ insertMode: false diff --git a/src/common/services/DecorationService.ts b/src/common/services/DecorationService.ts index ed96fb35..36faa509 100644 --- a/src/common/services/DecorationService.ts +++ b/src/common/services/DecorationService.ts @@ -9,7 +9,7 @@ import { Disposable, toDisposable } from 'common/Lifecycle'; import { IDecorationService, IInternalDecoration } from 'common/services/Services'; import { SortedList } from 'common/SortedList'; import { IColor } from 'common/Types'; -import { IDecorationOptions, IDecoration, IMarker, IEvent } from 'xterm'; +import { IDecoration, IDecorationOptions, IMarker } from 'xterm'; // Work variables to avoid garbage collection let $xmin = 0; diff --git a/src/common/services/OptionsService.ts b/src/common/services/OptionsService.ts index fb4251d9..3c572445 100644 --- a/src/common/services/OptionsService.ts +++ b/src/common/services/OptionsService.ts @@ -3,11 +3,11 @@ * @license MIT */ -import { IOptionsService, ITerminalOptions, FontWeight } from 'common/services/Services'; -import { EventEmitter, IEvent } from 'common/EventEmitter'; +import { EventEmitter } from 'common/EventEmitter'; +import { Disposable } from 'common/Lifecycle'; import { isMac } from 'common/Platform'; import { CursorStyle, IDisposable } from 'common/Types'; -import { Disposable } from 'common/Lifecycle'; +import { FontWeight, IOptionsService, ITerminalOptions } from 'common/services/Services'; export const DEFAULT_OPTIONS: Readonly> = { cols: 80, diff --git a/src/common/services/UnicodeService.ts b/src/common/services/UnicodeService.ts index e38eb2a7..767eecaf 100644 --- a/src/common/services/UnicodeService.ts +++ b/src/common/services/UnicodeService.ts @@ -2,9 +2,10 @@ * Copyright (c) 2019 The xterm.js authors. All rights reserved. * @license MIT */ -import { IUnicodeService, IUnicodeVersionProvider, UnicodeCharProperties, UnicodeCharWidth } from 'common/services/Services'; -import { EventEmitter, IEvent } from 'common/EventEmitter'; + +import { EventEmitter } from 'common/EventEmitter'; import { UnicodeV6 } from 'common/input/UnicodeV6'; +import { IUnicodeService, IUnicodeVersionProvider, UnicodeCharProperties, UnicodeCharWidth } from 'common/services/Services'; export class UnicodeService implements IUnicodeService { public serviceBrand: any;