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>
88 lines
2.6 KiB
TypeScript
88 lines
2.6 KiB
TypeScript
/**
|
|
* Copyright (c) 2026 The xterm.js authors. All rights reserved.
|
|
* @license MIT
|
|
*/
|
|
|
|
import { assert } from 'chai';
|
|
import { configEquals } from './CharAtlasUtils';
|
|
import { ICharAtlasConfig } from './Types';
|
|
import { NULL_COLOR } from '../../../src/common/Color';
|
|
import { IColor } from '../../../src/common/Types';
|
|
|
|
function createTestConfig(overrides: Partial<ICharAtlasConfig> = {}): ICharAtlasConfig {
|
|
const color: IColor = { css: '#ffffff', rgba: 0xffffffff };
|
|
const contrastCache = {
|
|
clear: () => {},
|
|
setCss: () => {},
|
|
getCss: () => undefined,
|
|
setColor: () => {},
|
|
getColor: () => undefined
|
|
};
|
|
const colors = {
|
|
foreground: color,
|
|
background: color,
|
|
cursor: NULL_COLOR,
|
|
cursorAccent: NULL_COLOR,
|
|
selectionForeground: undefined,
|
|
selectionBackgroundTransparent: NULL_COLOR,
|
|
selectionBackgroundOpaque: NULL_COLOR,
|
|
selectionInactiveBackgroundTransparent: NULL_COLOR,
|
|
selectionInactiveBackgroundOpaque: NULL_COLOR,
|
|
overviewRulerBorder: NULL_COLOR,
|
|
scrollbarSliderBackground: NULL_COLOR,
|
|
scrollbarSliderHoverBackground: NULL_COLOR,
|
|
scrollbarSliderActiveBackground: NULL_COLOR,
|
|
ansi: new Array(256).fill(color),
|
|
contrastCache,
|
|
halfContrastCache: contrastCache
|
|
};
|
|
return {
|
|
customGlyphs: true,
|
|
devicePixelRatio: 1,
|
|
deviceMaxTextureSize: 4096,
|
|
letterSpacing: 0,
|
|
lineHeight: 1,
|
|
fontSize: 15,
|
|
fontFamily: 'monospace',
|
|
fontWeight: 'normal',
|
|
fontWeightBold: 'bold',
|
|
deviceCellWidth: 10,
|
|
deviceCellHeight: 20,
|
|
deviceCharWidth: 8,
|
|
deviceCharHeight: 16,
|
|
allowTransparency: false,
|
|
drawBoldTextInBrightColors: true,
|
|
minimumContrastRatio: 1,
|
|
colors,
|
|
...overrides
|
|
};
|
|
}
|
|
|
|
describe('CharAtlasUtils', () => {
|
|
describe('configEquals', () => {
|
|
it('should return true for identical configs', () => {
|
|
const a = createTestConfig();
|
|
const b = createTestConfig();
|
|
assert.ok(configEquals(a, b));
|
|
});
|
|
|
|
it('should return false when deviceMaxTextureSize differs', () => {
|
|
const a = createTestConfig();
|
|
const b = createTestConfig({ deviceMaxTextureSize: 8192 });
|
|
assert.ok(!configEquals(a, b));
|
|
});
|
|
|
|
it('should return false when deviceCellWidth differs', () => {
|
|
const a = createTestConfig();
|
|
const b = createTestConfig({ deviceCellWidth: 11 });
|
|
assert.ok(!configEquals(a, b));
|
|
});
|
|
|
|
it('should return false when deviceCellHeight differs', () => {
|
|
const a = createTestConfig();
|
|
const b = createTestConfig({ deviceCellHeight: 21 });
|
|
assert.ok(!configEquals(a, b));
|
|
});
|
|
});
|
|
});
|