Remove TypeScript path mappings in favor of relative imports

Fixes https://github.com/xtermjs/xterm.js/issues/5896

TypeScript path mappings for common/*, browser/*, and headless/*
were not rewritten in emitted JavaScript, which forced webpack resolve
aliases and NODE_PATH workarounds so runtime could resolve modules.
That added build complexity and broke tooling such as ESLint import/no-cycle.

Changes:
- Convert ~750 imports across src/, addons/, and test/ to relative paths
- Remove common/browser/headless paths and src catch-all mappings from tsconfigs
  (keep @xterm/addon-* demo and addon typings paths)
- Remove webpack resolve.alias for common, browser, headless, and vs
- Drop NODE_PATH from unit tests, benchmarks, and VS Code launch config
- Fix addon-image IIPImageStorage to import ./Types after removing catch-all *

Verified: npm run build, esbuild, package, package-headless
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Daniel Imms
2026-05-31 09:16:10 -07:00
co-authored by Cursor
parent 43e8365f0e
commit 17ad33dc3d
234 changed files with 867 additions and 1005 deletions
+2 -2
View File
@@ -1,7 +1,7 @@
import { assert } from 'chai';
import { evaluateKeyboardEvent } from 'common/input/Keyboard';
import { IKeyboardResult, IKeyboardEvent } from 'common/Types';
import { evaluateKeyboardEvent } from './Keyboard';
import { IKeyboardResult, IKeyboardEvent } from '../Types';
/**
* A helper function for testing which allows passing in a partial event and defaults will be filled
+2 -2
View File
@@ -4,8 +4,8 @@
* @license MIT
*/
import { IKeyboardEvent, IKeyboardResult, KeyboardResultType } from 'common/Types';
import { C0 } from 'common/data/EscapeSequences';
import { IKeyboardEvent, IKeyboardResult, KeyboardResultType } from '../Types';
import { C0 } from '../data/EscapeSequences';
// reg + shift key mappings for digits and special chars
const KEYCODE_KEY_MAPPINGS: { [key: number]: [string, string]} = {
+2 -2
View File
@@ -1,7 +1,7 @@
import { assert } from 'chai';
import { KittyKeyboard, KittyKeyboardEventType, KittyKeyboardFlags } from 'common/input/KittyKeyboard';
import { IKeyboardEvent } from 'common/Types';
import { KittyKeyboard, KittyKeyboardEventType, KittyKeyboardFlags } from './KittyKeyboard';
import { IKeyboardEvent } from '../Types';
function createEvent(partialEvent: Partial<IKeyboardEvent> = {}): IKeyboardEvent {
return {
+2 -2
View File
@@ -6,8 +6,8 @@
* @see https://sw.kovidgoyal.net/kitty/keyboard-protocol/
*/
import { IKeyboardEvent, IKeyboardResult, KeyboardResultType } from 'common/Types';
import { C0 } from 'common/data/EscapeSequences';
import { IKeyboardEvent, IKeyboardResult, KeyboardResultType } from '../Types';
import { C0 } from '../data/EscapeSequences';
/**
* Kitty keyboard protocol enhancement flags (bitfield).
+1 -1
View File
@@ -4,7 +4,7 @@
*/
import { assert } from 'chai';
import { StringToUtf32, stringFromCodePoint, Utf8ToUtf32, utf32ToString } from 'common/input/TextDecoder';
import { StringToUtf32, stringFromCodePoint, Utf8ToUtf32, utf32ToString } from './TextDecoder';
// convert UTF32 codepoints to string
+1 -1
View File
@@ -4,7 +4,7 @@
*/
import { assert } from 'chai';
import { UnicodeV6 } from 'common/input/UnicodeV6';
import { UnicodeV6 } from './UnicodeV6';
it('wcwidth should match all values from the old implementation', function(): void {
// new implementation
+2 -2
View File
@@ -2,8 +2,8 @@
* Copyright (c) 2019 The xterm.js authors. All rights reserved.
* @license MIT
*/
import { IUnicodeVersionProvider, UnicodeCharProperties, UnicodeCharWidth } from 'common/services/Services';
import { UnicodeService } from 'common/services/UnicodeService';
import { IUnicodeVersionProvider, UnicodeCharProperties, UnicodeCharWidth } from '../services/Services';
import { UnicodeService } from '../services/UnicodeService';
const BMP_COMBINING = [
[0x0300, 0x036F], [0x0483, 0x0486], [0x0488, 0x0489],
+2 -2
View File
@@ -4,8 +4,8 @@
*/
import { assert } from 'chai';
import { Win32InputMode, Win32ControlKeyState } from 'common/input/Win32InputMode';
import { IKeyboardEvent, KeyboardResultType } from 'common/Types';
import { Win32InputMode, Win32ControlKeyState } from './Win32InputMode';
import { IKeyboardEvent, KeyboardResultType } from '../Types';
type EventOpts = Partial<IKeyboardEvent>;
const ev = (opts: EventOpts): IKeyboardEvent => ({
+2 -2
View File
@@ -14,8 +14,8 @@
* Rc: Repeat count (usually 1)
*/
import { IKeyboardEvent, IKeyboardResult, KeyboardResultType } from 'common/Types';
import { C0 } from 'common/data/EscapeSequences';
import { IKeyboardEvent, IKeyboardResult, KeyboardResultType } from '../Types';
import { C0 } from '../data/EscapeSequences';
/**
* Win32 control key state flags (from Windows API).
+3 -3
View File
@@ -4,9 +4,9 @@
* @license MIT
*/
import { TimeoutTimer } from 'common/Async';
import { Disposable, toDisposable } from 'common/Lifecycle';
import { Emitter } from 'common/Event';
import { TimeoutTimer } from '../Async';
import { Disposable, toDisposable } from '../Lifecycle';
import { Emitter } from '../Event';
const enum Constants {
/**
+1 -1
View File
@@ -4,7 +4,7 @@
*/
import { assert } from 'chai';
import { parseColor, toRgbString } from 'common/input/XParseColor';
import { parseColor, toRgbString } from './XParseColor';
describe('XParseColor', () => {
describe('parseColor', () => {