Commit Graph
14 Commits
Author SHA1 Message Date
Daniel ImmsandCursor fd6a339bcb fix(browser): place imports before module const in TimeBasedDebouncer
RENDER_DEBOUNCE_THRESHOLD_MS was declared above the import, which
breaks ES module conventions and can confuse tooling. Move the import
to the top of the module after the license header.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-01 15:28:12 +00:00
Daniel ImmsandCursor a97b77af3f fix(browser): cancel trailing debounce timeout on immediate refresh
TimeBasedDebouncer can schedule a trailing setTimeout when refresh
requests are throttled. If the debounce window later elapses and an
immediate refresh runs, that pending timeout was left armed and could
fire afterward, causing a duplicate _innerRefresh (e.g. extra live
region updates for screen readers).

Clear any pending timeout and reset _additionalRefreshRequested before
running the immediate refresh path.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-01 15:28:11 +00:00
Daniel ImmsandCursor 275d6d8a80 fix(browser): reset TimeBasedDebouncer state on dispose
dispose() cleared the pending timeout but left _refreshTimeoutID and
_additionalRefreshRequested set. After dispose, a stale timeout id or
trailing-refresh flag could confuse a new instance or tests. Match
RenderDebouncer by clearing the timeout id and reset the trailing flag.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-01 15:27:58 +00:00
Daniel ImmsandCursor 17ad33dc3d 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>
2026-05-31 09:16:10 -07:00
Daniel Imms bad7e329df Add @typescript-eslint/prefer-nullish-coalescing eslint rule 2026-01-31 08:43:05 -08:00
Daniel Imms 98e234992b Prefer performance.now() over Date.now()
performance.now() is faster than Date.now() as there's no need to
consult the system clock. The more important part of this is that
performance.now() is monotonic and is guaranteed to never to backwards.
2025-11-23 08:32:35 -08:00
Samuel Sampson 42e0fcda29 Fix lint error due to private variable 2021-08-17 22:26:14 +00:00
Samuel Sampson e778df672a Don't clear timeouts in TimeBasedDebouncer if they've already been executed. 2021-08-17 22:20:04 +00:00
Samuel Sampson ae58302dfa Allow render debounce interval to be configured at construction time in TimeBasedDebouncer 2021-08-17 22:09:51 +00:00
Samuel Sampson 9f24cf7e72 Cancel queued refreshes in TimeBasedDebouncer on dispose 2021-08-17 21:28:58 +00:00
Samuel Sampson f1849cafaf Introduce IRenderDebouncer interface, unifying RenderDebouncer and TimeBasedDebouncer types 2021-08-17 20:50:47 +00:00
Samuel Sampson 732927b0e2 Add back IDisposable implementation in TimeBasedDebouncer for the ease of interoperability with RenderDebouncer 2021-07-29 20:20:02 +00:00
Samuel Sampson 4a9ecb33bd Remove unneeded dispose method from TimeBasedDebouncer 2021-07-29 19:58:59 +00:00
Samuel Sampson e82f475c9b Separate the regular render debouncer from a Time-Based debouncer to be used to update Screen Readers 2021-07-29 19:57:51 +00:00