Compare commits

...
Author SHA1 Message Date
Daniel ImmsandCursor 3395d051a9 fix(parser): WASM scratch layout and scan cache for chunked parse
Place parser state above the linked transition table so scans emit ops
correctly, and preserve or clear the WASM scan cache across nested and
reused parse buffers.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-31 15:31:23 -07:00
Daniel ImmsandCursor 31b8409120 fix(parser): chunked WASM scan, op coalescing, and benchmark runtime paths
The WASM scanner could fill its fixed 4096-op buffer on large inputs (e.g. 5MB
of newlines or OSC traffic) and previously failed or appeared hung. ESC op
coalescing also corrupted the lengths field used for dispatch, causing millions
of redundant handler invocations on OSC benchmark data.

WASM scanner (parser.c / parser.h):
- Add scan_offset to ParserScanHeader; scan(offset, length) resumes after a
  partial fill instead of returning -1 for the whole buffer.
- Return early from scan when the op buffer is full; all emit sites use
  emit_or_stop() so scan_offset records where to continue.
- Coalesce consecutive OP_EXECUTE and OP_ESC ops with the same code/ident;
  lengths holds repeat count, starts holds the input index for ESC.
- Keep CSI/DCS hook layout unchanged (lengths = final byte index, starts =
  param arena offset).

TypeScript dispatch (EscapeSequenceParserWasm.ts):
- Drive parsing via runWasmScanChunks(): scan a slice, dispatch ops, advance
  inputOffset to nextOffset until the chunk is consumed.
- Fix ESC dispatch: chunkPos uses starts (input index); escCount uses lengths
  (repeat count). Avoid treating the CSI-style final-byte index as a loop bound.
- Throw if nextOffset does not advance to catch stuck scans.

EscapeSequenceParser.ts:
- Extend _scanCache for chunked scan state; reset() clears inputOffset and
  cached scan data so later parses are not skipped.

Benchmarks:
- Import compiled modules from ../../out/common and ../../out/browser so
  npm run benchmark works without NODE_PATH after path-mapping removal.
- Update benchmark skill notes accordingly.

Build:
- build_parser_wasm.sh selects a clang with wasm32 support (Homebrew LLVM on
  macOS when Xcode clang lacks the target).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-31 15:06:00 -07:00
Cursor AgentandDaniel Imms 3eca55a80d feat(parser): WASM VT500 scanner with ScanResult SOA dispatch
- Add C WASM scanner emitting structure-of-arrays ops (kinds, starts, lengths, aux, params)
- Integrate scan+dispatch in EscapeSequenceParser with async handler resume
- Fix CSI fast-path final byte index, ERROR state reporting, and precedingJoinState for REP
- Add build pipeline (build_parser_wasm.sh, transition table generator, wasm embed)

Co-authored-by: Daniel Imms <Tyriar@users.noreply.github.com>
2026-05-31 21:35:02 +00:00
Daniel Imms 936442c813 Merge pull request #5964 from PerBothner/decoration-test
Avoid "fake markers" in DecorationService.test.ts.
2026-05-31 11:57:36 -07:00
Daniel Imms dfb65ca66f Add mise.toml to .gitignore (#5968)
<!-- CURSOR_AGENT_PR_BODY_BEGIN -->
Ignores local `mise.toml` configuration at the repository root so it is not committed.
<!-- CURSOR_AGENT_PR_BODY_END -->

<div><a href="https://cursor.com/agents/bc-02c1c884-aae2-4267-b29b-fe7b93574ebe"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-web-light.png"><img alt="Open in Web" width="114" height="28" src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a>&nbsp;<a href="https://cursor.com/background-agent?bcId=bc-02c1c884-aae2-4267-b29b-fe7b93574ebe"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-cursor-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-cursor-light.png"><img alt="Open in Cursor" width="131" height="28" src="https://cursor.com/assets/images/open-in-cursor-dark.png"></picture></a>&nbsp;</div>
2026-05-31 10:52:07 -07:00
Per Bothner 35c91cbf2d Merge branch 'master' into decoration-test 2026-05-31 10:13:17 -07:00
Cursor AgentandDaniel Imms 587856e2ca Add mise.toml to .gitignore
Co-authored-by: Daniel Imms <Tyriar@users.noreply.github.com>
2026-05-31 17:08:48 +00:00
Daniel Imms 4aa04c6b3f Merge pull request #5967 from Tyriar/migrate-eslint-to-oxlint-5690
Migrate linting from ESLint to Oxlint (Fixes #5690)
2026-05-31 09:59:34 -07:00
Per Bothner 28eadddb79 Merge branch 'master' into decoration-test 2026-05-31 09:49:20 -07:00
Daniel ImmsandCursor 59d1ec7bf0 Migrate linting from ESLint to Oxlint (Fixes #5690)
Replace the primary lint pipeline with oxlint and oxlint-tsgolint for type-aware TypeScript rules, preserving existing rule behavior from eslint.config.mjs via @oxlint/migrate and targeted jsPlugins (@stylistic/eslint-plugin, eslint-plugin-jsdoc as jsdoc-js, oxlint-plugin-eslint for no-restricted-syntax and object-curly-spacing).

Keep a hybrid ESLint pass (eslint.config.naming.mjs) only for @typescript-eslint/naming-convention until tsgolint implements it (oxc-project/tsgolint#186). Legacy eslint.config.mjs and eslint.config.typings.mjs remain for reference but are no longer used by npm scripts.

Add .oxlintrc.json for src/addons/demo/test and .oxlintrc.typings.json for typings/ (syntax-only, no --type-aware). Update lint, lint-fix, lint-api, and lint-changes to run oxlint first, then naming ESLint. Platform binaries install via oxlint-tsgolint optionalDependencies on Linux, macOS, and Windows.

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

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-31 09:48:32 -07:00
Per Bothner 7c82c1a815 Update more DecorationService tests to use existing bufferService. 2026-05-31 09:48:19 -07:00
Daniel Imms 04a0b7347c Merge pull request #5966 from Tyriar/remove-path-mappings-5896
Remove TypeScript path mappings in favor of relative imports
2026-05-31 09:31:57 -07:00
Daniel ImmsandCursor 5d8da19c44 Keep path mappings for addons after core migration
Follow-up to https://github.com/xtermjs/xterm.js/issues/5896 / PR #5966.

Converting addons to ../../../src/common relative imports broke unit tests:
esbuild emits addon code under addons/*/out-esbuild/ without mirroring the
shared tree, so Node could not load TypeScript sources at runtime
(Cannot find module '../../../src/common/Lifecycle').

Core src/, test/, and headless continue to use relative imports with no
common/* path mappings. Addons keep the prior model until build layout
can share out-esbuild the same way as the main package.

Changes:
- Restore common/* and browser/* paths in addon src/test/benchmark tsconfigs
- Revert addon imports to common/ and browser/ path-mapped specifiers
- Restore NODE_PATH=out-esbuild in bin/test_unit.js for Mocha resolution
- Restore webpack resolve.alias on addons that bundle against out/

Fixes CI test-unit failures on remove-path-mappings-5896.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-31 09:25:12 -07: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
Per Bothner f76c7aa8ea Avoid "fake markers" in DecorationService.test.ts.
Instead we use an actual Marker in an actual Buffer.
2026-05-30 14:07:03 -07:00
190 changed files with 3595 additions and 1141 deletions
+1 -1
View File
@@ -25,4 +25,4 @@ When writing benchmark instructions:
## Notes ## Notes
- Benchmarks run from built JS in `out-test/benchmark/*.benchmark.js`. - Benchmarks run from built JS in `out-test/benchmark/*.benchmark.js`.
- Keep `NODE_PATH=./out` (handled by the npm script). - Benchmark sources import compiled modules from `../../out/common/` and `../../out/browser/` (run `npm run build` first).
+1
View File
@@ -17,6 +17,7 @@ docs/
npm-debug.log npm-debug.log
/.idea/ /.idea/
.env .env
mise.toml
build/ build/
.DS_Store .DS_Store
yarn.lock yarn.lock
+372
View File
@@ -0,0 +1,372 @@
{
"$schema": "./node_modules/oxlint/configuration_schema.json",
"plugins": [
"typescript"
],
"categories": {
"correctness": "off"
},
"options": {
"typeAware": true,
"maxWarnings": 0
},
"env": {
"builtin": true
},
"ignorePatterns": [
"addons/*/src/third-party/*.ts",
"**/out/*",
"**/out-test/*",
"**/out-esbuild/*",
"**/out-esbuild-test/*",
"**/inwasm-sdks/*",
"**/typings/*.d.ts",
"**/node_modules",
"**/*.js",
"**/*.mjs"
],
"rules": {
"constructor-super": "error",
"for-direction": "error",
"getter-return": "error",
"no-async-promise-executor": "error",
"no-case-declarations": "error",
"no-class-assign": "error",
"no-compare-neg-zero": "error",
"no-cond-assign": "error",
"no-const-assign": "error",
"no-constant-binary-expression": "error",
"no-constant-condition": "error",
"no-control-regex": "error",
"no-debugger": "error",
"no-delete-var": "error",
"no-dupe-class-members": "error",
"no-dupe-else-if": "error",
"no-dupe-keys": "error",
"no-duplicate-case": "error",
"no-empty": "error",
"no-empty-character-class": "error",
"no-empty-pattern": "error",
"no-empty-static-block": "error",
"no-ex-assign": "error",
"no-extra-boolean-cast": "error",
"no-fallthrough": "error",
"no-func-assign": "error",
"no-global-assign": "error",
"no-import-assign": "error",
"no-invalid-regexp": "error",
"no-irregular-whitespace": "error",
"no-loss-of-precision": "error",
"no-misleading-character-class": "error",
"no-new-native-nonconstructor": "error",
"no-nonoctal-decimal-escape": "error",
"no-obj-calls": "error",
"no-prototype-builtins": "error",
"no-redeclare": "error",
"no-regex-spaces": "error",
"no-self-assign": "error",
"no-setter-return": "error",
"no-shadow-restricted-names": "error",
"no-sparse-arrays": "error",
"no-this-before-super": "error",
"no-unassigned-vars": "error",
"no-unexpected-multiline": "error",
"no-unreachable": "error",
"no-unsafe-finally": "error",
"no-unsafe-negation": "error",
"no-unsafe-optional-chaining": "error",
"no-unused-labels": "error",
"no-unused-private-class-members": "error",
"no-unused-vars": "error",
"no-useless-backreference": "error",
"no-useless-catch": "error",
"no-useless-escape": "error",
"no-with": "error",
"preserve-caught-error": "error",
"require-yield": "error",
"use-isnan": "error",
"valid-typeof": "error",
"no-array-constructor": "error",
"no-unused-expressions": "error",
"typescript/ban-ts-comment": "error",
"typescript/no-duplicate-enum-values": "error",
"typescript/no-empty-object-type": "error",
"typescript/no-explicit-any": "error",
"typescript/no-extra-non-null-assertion": "error",
"typescript/no-misused-new": "error",
"typescript/no-namespace": "error",
"typescript/no-non-null-asserted-optional-chain": "error",
"typescript/no-require-imports": "error",
"typescript/no-this-alias": "error",
"typescript/no-unnecessary-type-constraint": "error",
"typescript/no-unsafe-declaration-merging": "error",
"typescript/no-unsafe-function-type": "error",
"typescript/no-wrapper-object-types": "error",
"typescript/prefer-as-const": "error",
"typescript/prefer-namespace-keyword": "error",
"typescript/triple-slash-reference": "error"
},
"overrides": [
{
"files": [
"**/*.ts",
"**/*.tsx",
"**/*.mts",
"**/*.cts"
],
"rules": {
"constructor-super": "off",
"getter-return": "off",
"no-class-assign": "off",
"no-const-assign": "off",
"no-dupe-class-members": "off",
"no-dupe-keys": "off",
"no-func-assign": "off",
"no-import-assign": "off",
"no-new-native-nonconstructor": "off",
"no-obj-calls": "off",
"no-redeclare": "off",
"no-setter-return": "off",
"no-this-before-super": "off",
"no-unreachable": "off",
"no-unsafe-negation": "off",
"no-var": "error",
"no-with": "off",
"prefer-const": "error",
"prefer-rest-params": "error",
"prefer-spread": "error"
}
},
{
"files": [
"**/*.ts"
],
"jsPlugins": [
"@stylistic/eslint-plugin",
{
"name": "jsdoc-js",
"specifier": "eslint-plugin-jsdoc"
},
"oxlint-plugin-eslint"
],
"rules": {
"@stylistic/comma-spacing": [
"warn",
{
"before": false,
"after": true
}
],
"@stylistic/indent": [
"warn",
2
],
"@stylistic/semi": [
"warn",
"always"
],
"@stylistic/quotes": [
"warn",
"single",
{
"allowTemplateLiterals": "always"
}
],
"@stylistic/member-delimiter-style": [
"warn",
{
"multiline": {
"delimiter": "semi",
"requireLast": true
},
"singleline": {
"delimiter": "comma",
"requireLast": false
}
}
],
"@stylistic/type-annotation-spacing": "warn",
"@stylistic/space-unary-ops": "warn",
"@stylistic/keyword-spacing": "warn",
"@stylistic/max-len": [
"warn",
{
"code": 1000,
"comments": 100,
"ignoreTrailingComments": true,
"ignoreUrls": true,
"ignorePattern": "^ *((?<vt_comment>(//|\\*) @vt)|(?<table_comment>\\* \\| )|(?<commented_code>// ))"
}
],
"@stylistic/new-parens": "warn",
"@stylistic/no-extra-semi": "error",
"@stylistic/no-trailing-spaces": "warn",
"eslint-js/object-curly-spacing": [
"warn",
"always"
],
"@stylistic/spaced-comment": [
"warn",
"always",
{
"markers": [
"/"
],
"exceptions": [
"-"
]
}
],
"jsdoc-js/check-alignment": "warn",
"jsdoc-js/check-param-names": "warn",
"jsdoc-js/multiline-blocks": "warn",
"jsdoc-js/no-multi-asterisks": "warn",
"eslint-js/one-var": [
"warn",
"never"
],
"eslint-js/no-restricted-syntax": [
"warn",
{
"selector": "CallExpression[callee.name='requestAnimationFrame']",
"message": "The global requestAnimationFrame() should be avoided, call it on the parent window from ICoreBrowserService."
},
{
"selector": "CallExpression[callee.name='cancelAnimationFrame']",
"message": "The global cancelAnimationFrame() should be avoided, call it on the parent window from ICoreBrowserService."
},
{
"selector": "CallExpression > MemberExpression[object.name='window'][property.name='requestAnimationFrame']",
"message": "window.requestAnimationFrame() should be avoided, call it on the parent window from ICoreBrowserService."
},
{
"selector": "CallExpression > MemberExpression[object.name='window'][property.name='cancelAnimationFrame']",
"message": "window.cancelAnimationFrame() should be avoided, call it on the parent window from ICoreBrowserService."
},
{
"selector": "MemberExpression[object.name='window'][property.name='devicePixelRatio']",
"message": "window.devicePixelRatio should be avoided, get it from ICoreBrowserService."
}
],
"curly": [
"warn",
"multi-line"
],
"eqeqeq": [
"warn",
"always"
],
"no-duplicate-imports": "warn",
"no-else-return": [
"warn",
{
"allowElseIf": false
}
],
"no-eval": "warn",
"no-irregular-whitespace": "warn",
"no-restricted-imports": [
"warn",
{
"patterns": [
".*\\/out\\/.*"
]
}
],
"no-unsafe-finally": "warn",
"no-unused-vars": "off",
"no-var": "warn",
"no-empty": "off",
"no-empty-pattern": "off",
"no-cond-assign": "off",
"no-case-declarations": "off",
"for-direction": "off",
"no-prototype-builtins": "off",
"no-useless-escape": "off",
"no-self-assign": "off",
"no-async-promise-executor": "off",
"prefer-rest-params": "off",
"no-control-regex": "off",
"no-fallthrough": "off",
"prefer-spread": "off",
"prefer-const": "warn",
"no-unused-expressions": "off",
"typescript/array-type": [
"warn",
{
"default": "array",
"readonly": "generic"
}
],
"typescript/consistent-type-assertions": "warn",
"typescript/consistent-type-definitions": "warn",
"typescript/explicit-function-return-type": [
"warn",
{
"allowExpressions": true
}
],
"typescript/explicit-member-accessibility": [
"warn",
{
"accessibility": "explicit",
"overrides": {
"constructors": "off"
}
}
],
"typescript/no-confusing-void-expression": [
"warn",
{
"ignoreArrowShorthand": true
}
],
"typescript/no-useless-constructor": "warn",
"typescript/prefer-nullish-coalescing": [
"warn",
{
"ignorePrimitives": true
}
],
"typescript/prefer-namespace-keyword": "warn",
"typescript/no-unused-vars": [
"warn",
{
"vars": "all",
"args": "none"
}
],
"typescript/no-require-imports": "off",
"typescript/no-explicit-any": "off",
"typescript/no-wrapper-object-types": "off",
"typescript/no-empty-object-type": "off",
"typescript/no-unsafe-function-type": "off",
"typescript/no-this-alias": "off",
"typescript/no-namespace": "off",
"typescript/no-duplicate-enum-values": "off"
}
},
{
"files": [
"**/*.api.ts",
"**/*.test.ts"
],
"rules": {
"eslint-js/object-curly-spacing": "off",
"@stylistic/max-len": "off",
"typescript/no-unused-vars": "off",
"typescript/explicit-function-return-type": "off",
"typescript/explicit-member-accessibility": "off"
}
},
{
"files": [
"demo/**/*.ts",
"**/*.benchmark.ts"
],
"rules": {
"typescript/prefer-nullish-coalescing": "off"
}
}
]
}
+120
View File
@@ -0,0 +1,120 @@
{
"$schema": "./node_modules/oxlint/configuration_schema.json",
"options": {
"maxWarnings": 0
},
"env": {
"builtin": true
},
"overrides": [
{
"files": [
"typings/**/*.d.ts"
],
"plugins": [
"typescript"
],
"jsPlugins": [
"@stylistic/eslint-plugin",
{
"name": "jsdoc-js",
"specifier": "eslint-plugin-jsdoc"
},
"oxlint-plugin-eslint"
],
"rules": {
"@stylistic/indent": [
"warn",
2
],
"@stylistic/semi": [
"warn",
"always"
],
"@stylistic/quotes": [
"warn",
"single",
{
"allowTemplateLiterals": "always"
}
],
"@stylistic/member-delimiter-style": [
"warn",
{
"multiline": {
"delimiter": "semi",
"requireLast": true
},
"singleline": {
"delimiter": "comma",
"requireLast": false
}
}
],
"@stylistic/type-annotation-spacing": "warn",
"@stylistic/keyword-spacing": "warn",
"@stylistic/max-len": [
"warn",
{
"code": 1000,
"comments": 80,
"ignoreUrls": true,
"ignorePattern": "^ *(?<ps_description>\\* Ps=)"
}
],
"@stylistic/no-extra-semi": "error",
"@stylistic/no-trailing-spaces": "warn",
"eslint-js/object-curly-spacing": [
"warn",
"always"
],
"@stylistic/spaced-comment": [
"warn",
"always",
{
"markers": [
"/"
],
"exceptions": [
"-"
]
}
],
"@stylistic/comma-dangle": [
"warn",
{
"objects": "never",
"arrays": "never",
"functions": "never"
}
],
"@stylistic/eol-last": "warn",
"curly": [
"warn",
"multi-line"
],
"eqeqeq": [
"warn",
"always"
],
"jsdoc-js/check-alignment": "warn",
"jsdoc-js/check-param-names": "warn",
"no-irregular-whitespace": "warn",
"typescript/array-type": [
"warn",
{
"default": "array",
"readonly": "generic"
}
],
"typescript/explicit-function-return-type": [
"warn",
{
"allowExpressions": true
}
],
"typescript/prefer-namespace-keyword": "warn"
}
}
]
}
-3
View File
@@ -15,9 +15,6 @@
"--recursive", "--recursive",
"${workspaceRoot}/out/**/*.test.js" "${workspaceRoot}/out/**/*.test.js"
], ],
"env": {
"NODE_PATH": "${workspaceRoot}/out"
},
"sourceMaps": true, "sourceMaps": true,
"outFiles": [ "${workspaceRoot}/out/**/*.js" ], "outFiles": [ "${workspaceRoot}/out/**/*.js" ],
"internalConsoleOptions": "openOnSessionStart" "internalConsoleOptions": "openOnSessionStart"
+1
View File
@@ -26,6 +26,7 @@ npm run build && npm run esbuild # Build all TypeScript and bundle
- Integration tests: `npm run test-integration` (Playwright across Chrome/Firefox/WebKit) - Integration tests: `npm run test-integration` (Playwright across Chrome/Firefox/WebKit)
- Integration tests by file: `npm run test-integration -- test/playwright/InputHandler.test.ts`. Never use grep to filter tests, it doesn't work - Integration tests by file: `npm run test-integration -- test/playwright/InputHandler.test.ts`. Never use grep to filter tests, it doesn't work
- Integration tests by addon: `npm run test-integration -- --suite=addon-search`. Suites always follow the format `addon-<something>` - Integration tests by addon: `npm run test-integration -- --suite=addon-search`. Suites always follow the format `addon-<something>`
- Lint: `npm run lint` (oxlint with type-aware rules, then ESLint for `naming-convention` only), `npm run lint-api` for `typings/`, `npm run lint-fix` for oxlint auto-fix
- Lint changes: `npm run lint-changes` to lint only changed files, `npm run lint-changes-fix` to fix them - Lint changes: `npm run lint-changes` to lint only changed files, `npm run lint-changes-fix` to fix them
## Addon Development Pattern ## Addon Development Pattern
+1 -1
View File
@@ -3,7 +3,7 @@
* @license MIT * @license MIT
*/ */
import { IAddImageOpts } from 'Types'; import { IAddImageOpts } from './Types';
import { ImageStorage } from './ImageStorage'; import { ImageStorage } from './ImageStorage';
/** /**
+3 -3
View File
@@ -21,8 +21,8 @@
"package": "../../node_modules/.bin/webpack", "package": "../../node_modules/.bin/webpack",
"prepublishOnly": "npm run package", "prepublishOnly": "npm run package",
"start": "node ../../demo/start", "start": "node ../../demo/start",
"benchmark": "NODE_PATH=../../out:./out:./out-benchmark/ ../../node_modules/.bin/xterm-benchmark -r 5 -c benchmark/benchmark.json", "benchmark": "../../node_modules/.bin/xterm-benchmark -r 5 -c benchmark/benchmark.json",
"benchmark-baseline": "NODE_PATH=../../out:./out:./out-benchmark/ ../../node_modules/.bin/xterm-benchmark -r 5 -c benchmark/benchmark.json --baseline out-benchmark/benchmark/*benchmark.js", "benchmark-baseline": "../../node_modules/.bin/xterm-benchmark -r 5 -c benchmark/benchmark.json --baseline out-benchmark/benchmark/*benchmark.js",
"benchmark-eval": "NODE_PATH=../../out:./out:./out-benchmark/ ../../node_modules/.bin/xterm-benchmark -r 5 -c benchmark/benchmark.json --eval out-benchmark/benchmark/*benchmark.js" "benchmark-eval": "../../node_modules/.bin/xterm-benchmark -r 5 -c benchmark/benchmark.json --eval out-benchmark/benchmark/*benchmark.js"
} }
} }
+3 -3
View File
@@ -21,8 +21,8 @@
"package": "../../node_modules/.bin/webpack", "package": "../../node_modules/.bin/webpack",
"prepublishOnly": "npm run package", "prepublishOnly": "npm run package",
"start": "node ../../demo/start", "start": "node ../../demo/start",
"benchmark": "NODE_PATH=../../out:./out:./out-benchmark/ ../../node_modules/.bin/xterm-benchmark -r 5 -c benchmark/benchmark.json out-benchmark/benchmark/*benchmark.js", "benchmark": "../../node_modules/.bin/xterm-benchmark -r 5 -c benchmark/benchmark.json out-benchmark/benchmark/*benchmark.js",
"benchmark-baseline": "NODE_PATH=../../out:./out:./out-benchmark/ ../../node_modules/.bin/xterm-benchmark -r 5 -c benchmark/benchmark.json --baseline out-benchmark/benchmark/*benchmark.js", "benchmark-baseline": "../../node_modules/.bin/xterm-benchmark -r 5 -c benchmark/benchmark.json --baseline out-benchmark/benchmark/*benchmark.js",
"benchmark-eval": "NODE_PATH=../../out:./out:./out-benchmark/ ../../node_modules/.bin/xterm-benchmark -r 5 -c benchmark/benchmark.json --eval out-benchmark/benchmark/*benchmark.js" "benchmark-eval": "../../node_modules/.bin/xterm-benchmark -r 5 -c benchmark/benchmark.json --eval out-benchmark/benchmark/*benchmark.js"
} }
} }
@@ -5,7 +5,7 @@
import { CustomGlyphDefinitionType, CustomGlyphScaleType, CustomGlyphVectorType, type CustomGlyphCharacterDefinition, type CustomGlyphDefinitionPart, type CustomGlyphPathDrawFunctionDefinition } from './Types'; import { CustomGlyphDefinitionType, CustomGlyphScaleType, CustomGlyphVectorType, type CustomGlyphCharacterDefinition, type CustomGlyphDefinitionPart, type CustomGlyphPathDrawFunctionDefinition } from './Types';
/* eslint-disable max-len */ /* oxlint-disable @stylistic/max-len -- generated glyph path data */
const enum Shapes { const enum Shapes {
/** │ */ TOP_TO_BOTTOM = 'M.5,0 L.5,1', /** │ */ TOP_TO_BOTTOM = 'M.5,0 L.5,1',
+86
View File
@@ -0,0 +1,86 @@
#!/usr/bin/env bash
# Copyright (c) 2026 The xterm.js authors. All rights reserved.
# @license MIT
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
cd "$ROOT"
if [[ ! -f src/common/parser/wasm/transition_table.h ]]; then
npm run build
node bin/gen_parser_transition_table.mjs
fi
WASM_DIR=src/common/parser/wasm
OUT="$WASM_DIR/parser.wasm"
# Apple Clang (Xcode CLT) has no wasm32 target; prefer Homebrew LLVM when needed.
wasm_clang_has_target() {
"$1" --print-targets 2>/dev/null | grep -q 'wasm32'
}
resolve_wasm_toolchain() {
local clang_bin=clang
if wasm_clang_has_target clang; then
:
else
local llvm_prefix=""
if command -v brew >/dev/null 2>&1; then
llvm_prefix="$(brew --prefix llvm 2>/dev/null || true)"
fi
for prefix in "$llvm_prefix" /opt/homebrew/opt/llvm /usr/local/opt/llvm; do
if [[ -n "$prefix" && -x "$prefix/bin/clang" ]] && wasm_clang_has_target "$prefix/bin/clang"; then
clang_bin="$prefix/bin/clang"
local lld_prefix=""
if command -v brew >/dev/null 2>&1; then
lld_prefix="$(brew --prefix lld 2>/dev/null || true)"
fi
for lld_dir in "$lld_prefix/bin" /opt/homebrew/opt/lld/bin /usr/local/opt/lld/bin; do
if [[ -n "$lld_dir" && -x "$lld_dir/lld" ]]; then
PATH="$lld_dir:$(dirname "$clang_bin"):$PATH"
break
fi
done
PATH="$(dirname "$clang_bin"):$PATH"
break
fi
done
if ! wasm_clang_has_target "$clang_bin"; then
echo "error: no clang with wasm32 support found (macOS: brew install llvm lld)" >&2
exit 1
fi
fi
WASM_CLANG="$clang_bin"
}
resolve_wasm_toolchain
"$WASM_CLANG" --target=wasm32-unknown-unknown -O2 -nostdlib -fuse-ld=lld \
-Wl,--no-entry \
-Wl,--export-memory \
-Wl,--export=reset \
-Wl,--export=scan \
-Wl,--export=probe_action \
-Wl,--export=set_state \
-Wl,--export=sync_params_from \
-Wl,--export=export_params_to \
-Wl,--export=get_params_len \
-Wl,--export=get_subparams_len \
-Wl,--export=get_subparams_ptr \
-Wl,--export=get_subparams_idx_ptr \
-Wl,--export=get_input_ptr \
-Wl,--export=get_kinds_ptr \
-Wl,--export=get_starts_ptr \
-Wl,--export=get_lengths_ptr \
-Wl,--export=get_aux_ptr \
-Wl,--export=get_param_starts_ptr \
-Wl,--export=get_param_counts_ptr \
-Wl,--export=get_params_ptr \
-Wl,--export=get_state_ptr \
-Wl,--export=get_header_ptr \
-Wl,--initial-memory=67108864 \
-Wl,--max-memory=67108864 \
"$WASM_DIR/parser.c" -o "$OUT"
node bin/embed_parser_wasm.mjs
echo "Built $OUT"
+23
View File
@@ -0,0 +1,23 @@
/**
* Copyright (c) 2026 The xterm.js authors. All rights reserved.
* @license MIT
*/
import { readFileSync, writeFileSync } from 'fs';
import { join, dirname } from 'path';
import { fileURLToPath } from 'url';
const __dirname = dirname(fileURLToPath(import.meta.url));
const root = join(__dirname, '..');
const wasm = readFileSync(join(root, 'src/common/parser/wasm/parser.wasm'));
const b64 = wasm.toString('base64');
const out = `/**
* Copyright (c) 2026 The xterm.js authors. All rights reserved.
* @license MIT
*/
/** Base64-encoded parser.wasm (generated by bin/build_parser_wasm.sh) */
export const PARSER_WASM_BASE64 = '${b64}';\n`;
writeFileSync(join(root, 'src/common/parser/wasm/parser.wasm.embed.ts'), out);
console.info(`Embedded parser.wasm (${wasm.length} bytes)`);
+34
View File
@@ -0,0 +1,34 @@
/**
* Copyright (c) 2026 The xterm.js authors. All rights reserved.
* @license MIT
*/
// @ts-check
import { writeFileSync } from 'fs';
import { fileURLToPath } from 'url';
import { dirname, join } from 'path';
const __dirname = dirname(fileURLToPath(import.meta.url));
const root = join(__dirname, '..');
// Import compiled transition table
const { VT500_TRANSITION_TABLE } = await import(join(root, 'out/common/parser/EscapeSequenceParser.js'));
const table = VT500_TRANSITION_TABLE.table;
let out = '/* Auto-generated by bin/gen_parser_transition_table.mjs - do not edit */\n';
out += `#ifndef PARSER_TRANSITION_TABLE_H\n#define PARSER_TRANSITION_TABLE_H\n\n`;
out += `#include <stdint.h>\n\n`;
out += `#define PARSER_TABLE_SIZE ${table.length}\n\n`;
out += `static const uint16_t PARSER_TRANSITION_TABLE[PARSER_TABLE_SIZE] = {\n`;
for (let i = 0; i < table.length; i++) {
if (i % 16 === 0) out += ' ';
out += `0x${table[i].toString(16)}`;
out += i < table.length - 1 ? ', ' : '';
if (i % 16 === 15) out += '\n';
}
if (table.length % 16 !== 0) out += '\n';
out += `};\n\n#endif\n`;
const headerPath = join(root, 'src/common/parser/wasm/transition_table.h');
writeFileSync(headerPath, out);
console.info(`Wrote ${headerPath} (${table.length} entries)`);
+41 -11
View File
@@ -33,17 +33,47 @@ if (files.length === 0) {
console.log(`Linting ${files.length} changed file(s)...`); console.log(`Linting ${files.length} changed file(s)...`);
const eslintArgs = ['--max-warnings', '0', '--no-warn-ignored']; const cwd = path.join(__dirname, '..');
if (fix) { const isWin = process.platform === 'win32';
eslintArgs.push('--fix');
/**
* @param {string} command
* @param {string[]} args
* @returns {Promise<void>}
*/
function run(command, args) {
return new Promise(/** @type {(resolve: () => void, reject: (reason: Error) => void) => void} */ ((resolve, reject) => {
const child = spawn(command, args, {
stdio: 'inherit',
cwd,
shell: isWin
});
child.on('close', code => {
if (code === 0) {
resolve();
} else {
reject(new Error(`${command} exited with code ${code}`));
}
});
}));
} }
eslintArgs.push(...files);
const eslint = process.platform === 'win32' ? 'eslint.cmd' : 'eslint'; async function main() {
const child = spawn(eslint, eslintArgs, { const oxlintArgs = ['--type-aware', '--max-warnings', '0'];
stdio: 'inherit', if (fix) {
cwd: path.join(__dirname, '..'), oxlintArgs.push('--fix');
shell: process.platform === 'win32' }
oxlintArgs.push(...files);
const oxlint = isWin ? 'oxlint.cmd' : 'oxlint';
await run(oxlint, oxlintArgs);
const eslintArgs = ['--config', 'eslint.config.naming.mjs', '--max-warnings', '0', ...files];
const eslint = isWin ? 'eslint.cmd' : 'eslint';
await run(eslint, eslintArgs);
}
main().catch(err => {
console.error(err.message);
process.exit(1);
}); });
child.on('close', code => process.exit(code ?? 0));
+1 -1
View File
@@ -8,7 +8,7 @@ const path = require('path');
const COVERAGE_LINES_THRESHOLD = 40; const COVERAGE_LINES_THRESHOLD = 40;
// Add `out` to the NODE_PATH so absolute paths can be resolved. // Add `out-esbuild` to NODE_PATH so addon path-mapped imports (common/*, browser/*) resolve.
const env = { ...process.env }; const env = { ...process.env };
env.NODE_PATH = path.resolve(__dirname, '../out-esbuild'); env.NODE_PATH = path.resolve(__dirname, '../out-esbuild');
+1 -1
View File
@@ -43,7 +43,7 @@ export class GpuWindow extends BaseWindow implements IControlWindow {
} }
private _styleAtlasPage(canvas: HTMLCanvasElement): void { private _styleAtlasPage(canvas: HTMLCanvasElement): void {
// eslint-disable-next-line no-restricted-syntax // oxlint-disable-next-line eslint-js/no-restricted-syntax
const dpr = window.devicePixelRatio; const dpr = window.devicePixelRatio;
canvas.style.width = `${canvas.width / dpr}px`; canvas.style.width = `${canvas.width / dpr}px`;
canvas.style.height = `${canvas.height / dpr}px`; canvas.style.height = `${canvas.height / dpr}px`;
+1 -1
View File
@@ -43,7 +43,7 @@ export class WebglWindow extends BaseWindow implements IControlWindow {
} }
private _styleAtlasPage(canvas: HTMLCanvasElement): void { private _styleAtlasPage(canvas: HTMLCanvasElement): void {
// eslint-disable-next-line no-restricted-syntax // oxlint-disable-next-line eslint-js/no-restricted-syntax
const dpr = window.devicePixelRatio; const dpr = window.devicePixelRatio;
canvas.style.width = `${canvas.width / dpr}px`; canvas.style.width = `${canvas.width / dpr}px`;
canvas.style.height = `${canvas.height / dpr}px`; canvas.style.height = `${canvas.height / dpr}px`;
+42 -14
View File
@@ -2,26 +2,54 @@
"compilerOptions": { "compilerOptions": {
"module": "commonjs", "module": "commonjs",
"target": "es2021", "target": "es2021",
"types": ["node"], "types": [
"node"
],
"outDir": "../out-demo/client", "outDir": "../out-demo/client",
"rootDir": ".", "rootDir": ".",
"sourceMap": true, "sourceMap": true,
"strict": true, "strict": true,
"skipLibCheck": true, "skipLibCheck": true,
"paths": { "paths": {
"@xterm/addon-attach": ["../../addons/addon-attach"], "@xterm/addon-attach": [
"@xterm/addon-clipboard": ["../../addons/addon-clipboard"], "../../addons/addon-attach"
"@xterm/addon-fit": ["../../addons/addon-fit"], ],
"@xterm/addon-image": ["../../addons/addon-image"], "@xterm/addon-clipboard": [
"@xterm/addon-progress": ["../../addons/addon-progress"], "../../addons/addon-clipboard"
"@xterm/addon-search": ["../../addons/addon-search"], ],
"@xterm/addon-serialize": ["../../addons/addon-serialize"], "@xterm/addon-fit": [
"@xterm/addon-web-fonts": ["../../addons/addon-web-fonts"], "../../addons/addon-fit"
"@xterm/addon-web-links": ["../../addons/addon-web-links"], ],
"@xterm/addon-webgl": ["../../addons/addon-webgl"], "@xterm/addon-image": [
"@xterm/addon-unicode11": ["../../addons/addon-unicode11"], "../../addons/addon-image"
"@xterm/addon-unicode-graphemes": ["../../addons/addon-unicode-graphemes"], ],
"@xterm/addon-ligatures": ["../../addons/addon-ligatures"], "@xterm/addon-progress": [
"../../addons/addon-progress"
],
"@xterm/addon-search": [
"../../addons/addon-search"
],
"@xterm/addon-serialize": [
"../../addons/addon-serialize"
],
"@xterm/addon-web-fonts": [
"../../addons/addon-web-fonts"
],
"@xterm/addon-web-links": [
"../../addons/addon-web-links"
],
"@xterm/addon-webgl": [
"../../addons/addon-webgl"
],
"@xterm/addon-unicode11": [
"../../addons/addon-unicode11"
],
"@xterm/addon-unicode-graphemes": [
"../../addons/addon-unicode-graphemes"
],
"@xterm/addon-ligatures": [
"../../addons/addon-ligatures"
],
"*": ["./*"] "*": ["./*"]
} }
}, },
+71
View File
@@ -0,0 +1,71 @@
// @ts-check
import tseslint from 'typescript-eslint';
const ignores = [
'addons/*/src/third-party/*.ts',
'**/out/*',
'**/out-test/*',
'**/out-esbuild/*',
'**/out-esbuild-test/*',
'**/inwasm-sdks/*',
'**/node_modules',
'**/*.js',
'**/*.mjs'
];
const namingConventionMain = [
'warn',
{ selector: 'default', format: ['camelCase'], filter: { regex: '^[a-z]', match: true } },
{ selector: 'variable', format: ['camelCase', 'UPPER_CASE'] },
{ selector: 'variable', filter: '^I.+Service$', format: ['PascalCase'], prefix: ['I'] },
{ selector: 'memberLike', modifiers: ['private'], format: ['camelCase'], leadingUnderscore: 'require' },
{ selector: 'memberLike', modifiers: ['protected'], format: ['camelCase'], leadingUnderscore: 'require' },
{ selector: 'enumMember', format: ['UPPER_CASE'] },
{ selector: 'property', modifiers: ['public'], format: ['camelCase', 'UPPER_CASE'], filter: { regex: '^[a-z]', match: true } },
{ selector: 'method', modifiers: ['public'], format: ['camelCase', 'UPPER_CASE'], custom: { regex: '^on[A-Z].+', match: false } },
{ selector: 'method', modifiers: ['private'], format: ['camelCase'], leadingUnderscore: 'require', custom: { regex: '^on[A-Z].+', match: false } },
{ selector: 'method', modifiers: ['protected'], format: ['camelCase'], leadingUnderscore: 'require', custom: { regex: '^on[A-Z].+', match: false } },
{ selector: 'typeLike', format: ['PascalCase'] },
{ selector: 'interface', format: ['PascalCase'], prefix: ['I'] }
];
const namingConventionTypings = [
'warn',
{ selector: 'typeLike', format: ['PascalCase'] },
{ selector: 'interface', format: ['PascalCase'], prefix: ['I'] }
];
export default tseslint.config(
{
ignores
},
{
files: ['**/*.ts'],
ignores: ['typings/**/*.d.ts', 'addons/**/typings/**'],
plugins: {
'@typescript-eslint': tseslint.plugin
},
languageOptions: {
parser: tseslint.parser,
parserOptions: {
projectService: true,
tsconfigRootDir: import.meta.dirname
}
},
rules: {
'@typescript-eslint/naming-convention': namingConventionMain
}
},
{
files: ['typings/**/*.d.ts'],
plugins: {
'@typescript-eslint': tseslint.plugin
},
languageOptions: {
parser: tseslint.parser
},
rules: {
'@typescript-eslint/naming-convention': namingConventionTypings
}
}
);
+511
View File
@@ -32,6 +32,7 @@
"esbuild": "^0.28.0", "esbuild": "^0.28.0",
"eslint": "^10.3.0", "eslint": "^10.3.0",
"eslint-plugin-jsdoc": "^62.9.0", "eslint-plugin-jsdoc": "^62.9.0",
"eslint-plugin-oxlint": "^1.67.0",
"express": "^5.2.1", "express": "^5.2.1",
"express-ws": "^5.0.2", "express-ws": "^5.0.2",
"jsdom": "^29.1.1", "jsdom": "^29.1.1",
@@ -39,6 +40,9 @@
"mustache": "^4.2.0", "mustache": "^4.2.0",
"node-pty": "^1.2.0-beta.9", "node-pty": "^1.2.0-beta.9",
"nyc": "^18.0.0", "nyc": "^18.0.0",
"oxlint": "^1.67.0",
"oxlint-plugin-eslint": "^1.67.0",
"oxlint-tsgolint": "^0.23.0",
"source-map-loader": "^5.0.0", "source-map-loader": "^5.0.0",
"source-map-support": "^0.5.20", "source-map-support": "^0.5.20",
"ts-loader": "^9.5.7", "ts-loader": "^9.5.7",
@@ -1508,6 +1512,413 @@
"pako": "^2.0.4" "pako": "^2.0.4"
} }
}, },
"node_modules/@oxlint-tsgolint/darwin-arm64": {
"version": "0.23.0",
"resolved": "https://registry.npmjs.org/@oxlint-tsgolint/darwin-arm64/-/darwin-arm64-0.23.0.tgz",
"integrity": "sha512-gOs9PVr2wEg4ox9z0aJo+RKhhImW86YL5N6yav8BK/rgPsIrwN/igSZ+pbRr723NFvUNKde9fgMhRA6JrXAOZw==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"darwin"
]
},
"node_modules/@oxlint-tsgolint/darwin-x64": {
"version": "0.23.0",
"resolved": "https://registry.npmjs.org/@oxlint-tsgolint/darwin-x64/-/darwin-x64-0.23.0.tgz",
"integrity": "sha512-kjJ8B+7n4tB9VJdxS5A9GdJt6/bYpzbu4lXp2uO1S3sRmCB5gDEABlGoiePNApRWaW+xqL4b4xgiE727jSLhuA==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"darwin"
]
},
"node_modules/@oxlint-tsgolint/linux-arm64": {
"version": "0.23.0",
"resolved": "https://registry.npmjs.org/@oxlint-tsgolint/linux-arm64/-/linux-arm64-0.23.0.tgz",
"integrity": "sha512-6dCZuKNu135seMXilkRk9SpCx6i1XgmiipYGalLij5WVRX6ZYS8c4xI7preN/zv9fCXhsQclTIMDu2Y/cytTjw==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@oxlint-tsgolint/linux-x64": {
"version": "0.23.0",
"resolved": "https://registry.npmjs.org/@oxlint-tsgolint/linux-x64/-/linux-x64-0.23.0.tgz",
"integrity": "sha512-3bdilnyA7kmSTjK27rvjIjSxL5SIg3wt7vwNiRkouWB83ytssyKnuGvxSYJxgMEmFpSutzaBzcCUM2jDtPGcgA==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@oxlint-tsgolint/win32-arm64": {
"version": "0.23.0",
"resolved": "https://registry.npmjs.org/@oxlint-tsgolint/win32-arm64/-/win32-arm64-0.23.0.tgz",
"integrity": "sha512-j+OEp44SVYiQ+ZD+uttsX7u6L9SvmbbQ77SO1pSFCcJlsVMeCk8qZsjhKfGKuT/jIA+ipOJMVs/+pqUfObBWNw==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"win32"
]
},
"node_modules/@oxlint-tsgolint/win32-x64": {
"version": "0.23.0",
"resolved": "https://registry.npmjs.org/@oxlint-tsgolint/win32-x64/-/win32-x64-0.23.0.tgz",
"integrity": "sha512-5MyjFuqf+g8OUPJBSGWHJtmoWnzFJYyOg4To9WMQshZYEWig/vtu7JtJ03VWnzHv9LJkAUeApY0gVCOywFR/iQ==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"win32"
]
},
"node_modules/@oxlint/binding-android-arm-eabi": {
"version": "1.67.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm-eabi/-/binding-android-arm-eabi-1.67.0.tgz",
"integrity": "sha512-VrSi571rDv1N8HaEDM+DEX8nmT0y9jJo8tzzW13vsOWTx59xQczCIJx68n2zWOXRT5YKZsOZXp4qkHN/10x4mw==",
"cpu": [
"arm"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"android"
],
"engines": {
"node": "^20.19.0 || >=22.12.0"
}
},
"node_modules/@oxlint/binding-android-arm64": {
"version": "1.67.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm64/-/binding-android-arm64-1.67.0.tgz",
"integrity": "sha512-l6+NdYxMoRohix5r5bbigW16LPicceCwGcQ6LKKuE1kUdjgFfQolJjrJsQYPFetIs78Gxj/G/f5TEGoTCwj9nQ==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"android"
],
"engines": {
"node": "^20.19.0 || >=22.12.0"
}
},
"node_modules/@oxlint/binding-darwin-arm64": {
"version": "1.67.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-arm64/-/binding-darwin-arm64-1.67.0.tgz",
"integrity": "sha512-jOzXxS1AxFxhImLIRbtGIMrEwaXcgMw3gR57WB1cRk8ai+vpr6726kxXqVvlNsrXtJ/FrmOm8RxlC0m8SW24Qg==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": "^20.19.0 || >=22.12.0"
}
},
"node_modules/@oxlint/binding-darwin-x64": {
"version": "1.67.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-x64/-/binding-darwin-x64-1.67.0.tgz",
"integrity": "sha512-3DFAVY94OqjIZHXIPz37yGRSWwOFTAqChQ64/M69GYLawzP0KiwdhDNfqdKKYT0bTR/DNxmMnQsj3ns+8+X/Lg==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": "^20.19.0 || >=22.12.0"
}
},
"node_modules/@oxlint/binding-freebsd-x64": {
"version": "1.67.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-freebsd-x64/-/binding-freebsd-x64-1.67.0.tgz",
"integrity": "sha512-e4dDKZuLu8TR9DEBssWSDahlPgZBwojTTHZUvnjBRJfJJbpxYCjfjKfi0Z1+CSLMiJBwI2yCDtRM1XJQaARjmg==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"freebsd"
],
"engines": {
"node": "^20.19.0 || >=22.12.0"
}
},
"node_modules/@oxlint/binding-linux-arm-gnueabihf": {
"version": "1.67.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.67.0.tgz",
"integrity": "sha512-BKytFdcQzbITV3xlnzDUDTEDtbUMCCiC4EaNTDZ4FyT8gdNvBC4gfiLucXp/sQl0XU3p7syTlorUWVVVBZab2g==",
"cpu": [
"arm"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": "^20.19.0 || >=22.12.0"
}
},
"node_modules/@oxlint/binding-linux-arm-musleabihf": {
"version": "1.67.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-1.67.0.tgz",
"integrity": "sha512-XYAv0esBDX7BpTzRDjVX2Vdj+zndd8ll2dFQiaeQ6zTZr7A8GRDTN7fH3FP3jU+O0vCDx85oH/EtG7BzPgAXuw==",
"cpu": [
"arm"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": "^20.19.0 || >=22.12.0"
}
},
"node_modules/@oxlint/binding-linux-arm64-gnu": {
"version": "1.67.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.67.0.tgz",
"integrity": "sha512-zizRMjA0i6u/2B0evgda04iycu+MoNuf1pBy6Eh+1CjC5wMEG7qN5zdDKTCvFc0KSYSDM9QTG3gjZHirgtQuKg==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": "^20.19.0 || >=22.12.0"
}
},
"node_modules/@oxlint/binding-linux-arm64-musl": {
"version": "1.67.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.67.0.tgz",
"integrity": "sha512-zB/Tf6sUjmmvvbva9Gj3JTJ8rJ9t4I8/U0o6vSRtd0DRIsIuyegBwJAzhSUFQHdMijIRJkW0exs/yBhpw2S20w==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": "^20.19.0 || >=22.12.0"
}
},
"node_modules/@oxlint/binding-linux-ppc64-gnu": {
"version": "1.67.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.67.0.tgz",
"integrity": "sha512-kgU40Gt74CK0TCsF51KZymkIwN9U0BajKsMijB52zPqOeZU9NAHkA/NSQkZDHEaCakx42DxhXkODiAqf2b4Gug==",
"cpu": [
"ppc64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": "^20.19.0 || >=22.12.0"
}
},
"node_modules/@oxlint/binding-linux-riscv64-gnu": {
"version": "1.67.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-1.67.0.tgz",
"integrity": "sha512-tOYhkk/iaG9aD3FvGpBFd1Lrw0x0RaVoJBxjUkfNzS50rC5NS5BteNCwgr8A2zCdADrIIoze6D7u6U5Ic++/iQ==",
"cpu": [
"riscv64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": "^20.19.0 || >=22.12.0"
}
},
"node_modules/@oxlint/binding-linux-riscv64-musl": {
"version": "1.67.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-1.67.0.tgz",
"integrity": "sha512-sEtywrPb+0b+tHYl1SDCrw903fiC4eyKoNqzP3v+f2JT3Xcv4NEYG+P8rj+eEnX7IWhqV/xj8/JmcmVj21CXaA==",
"cpu": [
"riscv64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": "^20.19.0 || >=22.12.0"
}
},
"node_modules/@oxlint/binding-linux-s390x-gnu": {
"version": "1.67.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.67.0.tgz",
"integrity": "sha512-BvR8Moa0zCLxroOx4vZaZN9nUfwAUpSTwjZdxZyKy4bv3PrzrXrxKR/ZQ0L9wNSvlPhnMJeZfa3q5w6ZCTuN6Q==",
"cpu": [
"s390x"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": "^20.19.0 || >=22.12.0"
}
},
"node_modules/@oxlint/binding-linux-x64-gnu": {
"version": "1.67.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.67.0.tgz",
"integrity": "sha512-mm2cxM6fksOpq6l0uFws8BUGKAR4dNa/cZCn37Npq7PFbhD5HDJqWfnoIvTaeRKMy5XdS2tO0MA0qbHDrnXAAA==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": "^20.19.0 || >=22.12.0"
}
},
"node_modules/@oxlint/binding-linux-x64-musl": {
"version": "1.67.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-musl/-/binding-linux-x64-musl-1.67.0.tgz",
"integrity": "sha512-WmbMuLapKyDlobMkXAaAL0Y+Uczh4LETfIfQsUpbId4Ip8Ai82/jqeYTOoUCkuuhBFapgqP253+d83tLKOksJg==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": "^20.19.0 || >=22.12.0"
}
},
"node_modules/@oxlint/binding-openharmony-arm64": {
"version": "1.67.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-openharmony-arm64/-/binding-openharmony-arm64-1.67.0.tgz",
"integrity": "sha512-9g/PqxYJelzzTAOR5Y+RiRqdeydhEuXv2KxNeFcAKQ7UsvnWSY1OP4MsuPMbTO2Pf70tz7mFhl1j13H3fyh+8g==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"openharmony"
],
"engines": {
"node": "^20.19.0 || >=22.12.0"
}
},
"node_modules/@oxlint/binding-win32-arm64-msvc": {
"version": "1.67.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.67.0.tgz",
"integrity": "sha512-2VhwE6Gatb0vJGnN0TBuQMbKCOiZlSQ/zJvVWYLK4a9d4iDiJOen/yVQkGpmsJ90MuH66fzi0kEKI0jRQMDxGA==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": "^20.19.0 || >=22.12.0"
}
},
"node_modules/@oxlint/binding-win32-ia32-msvc": {
"version": "1.67.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.67.0.tgz",
"integrity": "sha512-EQ3VExXfeM1InbE5+JjufhZZTWy+kHUwgt3yZR7gQ47Je/mE0WspQPan0OJznh493L5anM210YNJtH1PXjTSFg==",
"cpu": [
"ia32"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": "^20.19.0 || >=22.12.0"
}
},
"node_modules/@oxlint/binding-win32-x64-msvc": {
"version": "1.67.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.67.0.tgz",
"integrity": "sha512-bw24y+/1MHS4QDkons3YyHkPT9uCMoLHHgQhb+mb8NOjTYwub1CZ+K9Ngr8aO5DMrDrkqHwTzlTwFP2vS8Y/ZQ==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": "^20.19.0 || >=22.12.0"
}
},
"node_modules/@pkgjs/parseargs": { "node_modules/@pkgjs/parseargs": {
"version": "0.11.0", "version": "0.11.0",
"resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
@@ -3652,6 +4063,19 @@
"url": "https://opencollective.com/eslint" "url": "https://opencollective.com/eslint"
} }
}, },
"node_modules/eslint-plugin-oxlint": {
"version": "1.67.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-oxlint/-/eslint-plugin-oxlint-1.67.0.tgz",
"integrity": "sha512-tS/RGy8x2+rIUp7gV8ICgEeSAgFH6Qg7phzCbUblW/dPUsqXkcedrzO0nOaKhce4fvUVDR9uTmWlLkCNSDKcsw==",
"dev": true,
"license": "MIT",
"dependencies": {
"jsonc-parser": "^3.3.1"
},
"peerDependencies": {
"oxlint": "~1.67.0"
}
},
"node_modules/eslint-scope": { "node_modules/eslint-scope": {
"version": "9.1.2", "version": "9.1.2",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz",
@@ -5045,6 +5469,13 @@
"node": ">=6" "node": ">=6"
} }
}, },
"node_modules/jsonc-parser": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz",
"integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==",
"dev": true,
"license": "MIT"
},
"node_modules/keyv": { "node_modules/keyv": {
"version": "4.5.4", "version": "4.5.4",
"resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
@@ -5797,6 +6228,86 @@
"node": ">= 0.8.0" "node": ">= 0.8.0"
} }
}, },
"node_modules/oxlint": {
"version": "1.67.0",
"resolved": "https://registry.npmjs.org/oxlint/-/oxlint-1.67.0.tgz",
"integrity": "sha512-blwwaHPdoH8piQ5/z0KHeoHFR7FZgl12WluKJfu4qFLPkZl6mK04PkLE45Fw1NxfBRSlh40Gu7MkxHUw++ociQ==",
"dev": true,
"license": "MIT",
"bin": {
"oxlint": "bin/oxlint"
},
"engines": {
"node": "^20.19.0 || >=22.12.0"
},
"funding": {
"url": "https://github.com/sponsors/Boshen"
},
"optionalDependencies": {
"@oxlint/binding-android-arm-eabi": "1.67.0",
"@oxlint/binding-android-arm64": "1.67.0",
"@oxlint/binding-darwin-arm64": "1.67.0",
"@oxlint/binding-darwin-x64": "1.67.0",
"@oxlint/binding-freebsd-x64": "1.67.0",
"@oxlint/binding-linux-arm-gnueabihf": "1.67.0",
"@oxlint/binding-linux-arm-musleabihf": "1.67.0",
"@oxlint/binding-linux-arm64-gnu": "1.67.0",
"@oxlint/binding-linux-arm64-musl": "1.67.0",
"@oxlint/binding-linux-ppc64-gnu": "1.67.0",
"@oxlint/binding-linux-riscv64-gnu": "1.67.0",
"@oxlint/binding-linux-riscv64-musl": "1.67.0",
"@oxlint/binding-linux-s390x-gnu": "1.67.0",
"@oxlint/binding-linux-x64-gnu": "1.67.0",
"@oxlint/binding-linux-x64-musl": "1.67.0",
"@oxlint/binding-openharmony-arm64": "1.67.0",
"@oxlint/binding-win32-arm64-msvc": "1.67.0",
"@oxlint/binding-win32-ia32-msvc": "1.67.0",
"@oxlint/binding-win32-x64-msvc": "1.67.0"
},
"peerDependencies": {
"oxlint-tsgolint": ">=0.22.1",
"vite-plus": "*"
},
"peerDependenciesMeta": {
"oxlint-tsgolint": {
"optional": true
},
"vite-plus": {
"optional": true
}
}
},
"node_modules/oxlint-plugin-eslint": {
"version": "1.67.0",
"resolved": "https://registry.npmjs.org/oxlint-plugin-eslint/-/oxlint-plugin-eslint-1.67.0.tgz",
"integrity": "sha512-MfpO9t/l/1qWVKym4sTkz0bhErAkUn/cOOQsFegI5ngQkR1cZEp6G23FKIhGcALoYytPBRmu47yjiEa6XWFBRw==",
"dev": true,
"license": "MIT",
"engines": {
"node": "^20.19.0 || >=22.12.0"
},
"funding": {
"url": "https://github.com/sponsors/Boshen"
}
},
"node_modules/oxlint-tsgolint": {
"version": "0.23.0",
"resolved": "https://registry.npmjs.org/oxlint-tsgolint/-/oxlint-tsgolint-0.23.0.tgz",
"integrity": "sha512-3mBv3CoPbh8dFbzfDGIWa2ytZjn2v+3EX4aKRXjIhsoGFzG8GCjfRirz3rwZf1wYbZzsNLTSgpw8VjQuWdp/jA==",
"dev": true,
"license": "MIT",
"bin": {
"tsgolint": "bin/tsgolint.js"
},
"optionalDependencies": {
"@oxlint-tsgolint/darwin-arm64": "0.23.0",
"@oxlint-tsgolint/darwin-x64": "0.23.0",
"@oxlint-tsgolint/linux-arm64": "0.23.0",
"@oxlint-tsgolint/linux-x64": "0.23.0",
"@oxlint-tsgolint/win32-arm64": "0.23.0",
"@oxlint-tsgolint/win32-x64": "0.23.0"
}
},
"node_modules/p-limit": { "node_modules/p-limit": {
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+11 -6
View File
@@ -34,6 +34,7 @@
"start": "node demo/start", "start": "node demo/start",
"dev": "concurrently -k -p [{name}] -n tsc,esbuild,esbuild-demo-client,esbuild-demo-server,server -c blue,yellow,cyan,green,magenta \"npm:tsc-watch\" \"npm:esbuild-watch\" \"npm:esbuild-demo-client-watch\" \"npm:esbuild-demo-server-watch\" \"npm:start\"", "dev": "concurrently -k -p [{name}] -n tsc,esbuild,esbuild-demo-client,esbuild-demo-server,server -c blue,yellow,cyan,green,magenta \"npm:tsc-watch\" \"npm:esbuild-watch\" \"npm:esbuild-demo-client-watch\" \"npm:esbuild-demo-server-watch\" \"npm:start\"",
"build": "npm run tsc", "build": "npm run tsc",
"build:parser-wasm": "bash bin/build_parser_wasm.sh",
"watch": "npm run tsc-watch", "watch": "npm run tsc-watch",
"tsc": "tsgo -b ./tsconfig.all.json", "tsc": "tsgo -b ./tsconfig.all.json",
"tsc-watch": "tsgo -b -w ./tsconfig.all.json --preserveWatchOutput", "tsc-watch": "tsgo -b -w ./tsconfig.all.json --preserveWatchOutput",
@@ -48,11 +49,11 @@
"esbuild-demo-server-watch": "node bin/esbuild.mjs --demo-server --watch", "esbuild-demo-server-watch": "node bin/esbuild.mjs --demo-server --watch",
"test": "npm run test-unit", "test": "npm run test-unit",
"posttest": "npm run lint", "posttest": "npm run lint",
"lint": "eslint --max-warnings 0 src/ addons/ demo/ test/", "lint": "oxlint --type-aware --max-warnings 0 src addons demo test && eslint --config eslint.config.naming.mjs --max-warnings 0 src addons demo test",
"lint-changes": "node ./bin/lint_changes.js", "lint-changes": "node ./bin/lint_changes.js",
"lint-changes-fix": "node ./bin/lint_changes.js --fix", "lint-changes-fix": "node ./bin/lint_changes.js --fix",
"lint-fix": "eslint --fix src/ addons/ demo/ test/", "lint-fix": "oxlint --type-aware --fix --max-warnings 0 src addons demo test",
"lint-api": "eslint --config eslint.config.typings.mjs --max-warnings 0 typings/", "lint-api": "oxlint --max-warnings 0 -c .oxlintrc.typings.json typings && eslint --config eslint.config.naming.mjs --max-warnings 0 typings",
"test-unit": "node ./bin/test_unit.js", "test-unit": "node ./bin/test_unit.js",
"test-unit-slow-tests": "npm run test-unit | grep \"ms)\"", "test-unit-slow-tests": "npm run test-unit | grep \"ms)\"",
"test-unit-coverage": "node ./bin/test_unit.js --coverage", "test-unit-coverage": "node ./bin/test_unit.js --coverage",
@@ -61,9 +62,9 @@
"test-integration-firefox": "node ./bin/test_integration.js --workers=75% \"--project=FirefoxStable\"", "test-integration-firefox": "node ./bin/test_integration.js --workers=75% \"--project=FirefoxStable\"",
"test-integration-webkit": "node ./bin/test_integration.js --workers=75% \"--project=WebKit\"", "test-integration-webkit": "node ./bin/test_integration.js --workers=75% \"--project=WebKit\"",
"test-integration-debug": "node ./bin/test_integration.js --workers=1 --headed --timeout=30000", "test-integration-debug": "node ./bin/test_integration.js --workers=1 --headed --timeout=30000",
"benchmark": "NODE_PATH=./out xterm-benchmark -r 5 -c test/benchmark/benchmark.json", "benchmark": "xterm-benchmark -r 5 -c test/benchmark/benchmark.json",
"benchmark-baseline": "NODE_PATH=./out xterm-benchmark -r 5 -c test/benchmark/benchmark.json --baseline out-test/benchmark/*benchmark.js", "benchmark-baseline": "xterm-benchmark -r 5 -c test/benchmark/benchmark.json --baseline out-test/benchmark/*benchmark.js",
"benchmark-eval": "NODE_PATH=./out xterm-benchmark -r 5 -c test/benchmark/benchmark.json --eval out-test/benchmark/*benchmark.js", "benchmark-eval": "xterm-benchmark -r 5 -c test/benchmark/benchmark.json --eval out-test/benchmark/*benchmark.js",
"clean": "rm -rf lib out addons/*/lib addons/*/out", "clean": "rm -rf lib out addons/*/lib addons/*/out",
"vtfeatures": "node bin/extract_vtfeatures.js src/*/*.ts src/*/*/*.ts src/*.ts addons/**/src/*.ts", "vtfeatures": "node bin/extract_vtfeatures.js src/*/*.ts src/*/*/*.ts src/*.ts addons/**/src/*.ts",
"prepackage": "npm run build", "prepackage": "npm run build",
@@ -95,6 +96,7 @@
"esbuild": "^0.28.0", "esbuild": "^0.28.0",
"eslint": "^10.3.0", "eslint": "^10.3.0",
"eslint-plugin-jsdoc": "^62.9.0", "eslint-plugin-jsdoc": "^62.9.0",
"eslint-plugin-oxlint": "^1.67.0",
"express": "^5.2.1", "express": "^5.2.1",
"express-ws": "^5.0.2", "express-ws": "^5.0.2",
"jsdom": "^29.1.1", "jsdom": "^29.1.1",
@@ -102,6 +104,9 @@
"mustache": "^4.2.0", "mustache": "^4.2.0",
"node-pty": "^1.2.0-beta.9", "node-pty": "^1.2.0-beta.9",
"nyc": "^18.0.0", "nyc": "^18.0.0",
"oxlint": "^1.67.0",
"oxlint-plugin-eslint": "^1.67.0",
"oxlint-tsgolint": "^0.23.0",
"source-map-loader": "^5.0.0", "source-map-loader": "^5.0.0",
"source-map-support": "^0.5.20", "source-map-support": "^0.5.20",
"ts-loader": "^9.5.7", "ts-loader": "^9.5.7",
+8 -8
View File
@@ -3,14 +3,14 @@
* @license MIT * @license MIT
*/ */
import * as Strings from 'browser/LocalizableStrings'; import * as Strings from './LocalizableStrings';
import { ITerminal, IRenderDebouncer } from 'browser/Types'; import { ITerminal, IRenderDebouncer } from './Types';
import { TimeBasedDebouncer } from 'browser/TimeBasedDebouncer'; import { TimeBasedDebouncer } from './TimeBasedDebouncer';
import { Disposable, toDisposable } from 'common/Lifecycle'; import { Disposable, toDisposable } from '../common/Lifecycle';
import { ICoreBrowserService, IRenderService } from 'browser/services/Services'; import { ICoreBrowserService, IRenderService } from './services/Services';
import { IBuffer } from 'common/buffer/Types'; import { IBuffer } from '../common/buffer/Types';
import { IInstantiationService } from 'common/services/Services'; import { IInstantiationService } from '../common/services/Services';
import { addDisposableListener } from 'browser/Dom'; import { addDisposableListener } from './Dom';
const enum Constants { const enum Constants {
MAX_ROWS_TO_READ = 20 MAX_ROWS_TO_READ = 20
+1 -1
View File
@@ -4,7 +4,7 @@
*/ */
import { assert } from 'chai'; import { assert } from 'chai';
import * as Clipboard from 'browser/Clipboard'; import * as Clipboard from './Clipboard';
describe('evaluatePastedTextProcessing', () => { describe('evaluatePastedTextProcessing', () => {
it('should replace carriage return and/or line feed with carriage return', () => { it('should replace carriage return and/or line feed with carriage return', () => {
+2 -2
View File
@@ -3,8 +3,8 @@
* @license MIT * @license MIT
*/ */
import { ISelectionService } from 'browser/services/Services'; import { ISelectionService } from './services/Services';
import { ICoreService, IOptionsService } from 'common/services/Services'; import { ICoreService, IOptionsService } from '../common/services/Services';
/** /**
* Prepares text to be pasted into the terminal by normalizing the line endings * Prepares text to be pasted into the terminal by normalizing the line endings
+1 -1
View File
@@ -4,7 +4,7 @@
*/ */
import { assert } from 'chai'; import { assert } from 'chai';
import { ColorContrastCache } from 'browser/ColorContrastCache'; import { ColorContrastCache } from './ColorContrastCache';
describe('ColorContrastCache', () => { describe('ColorContrastCache', () => {
let cache: ColorContrastCache; let cache: ColorContrastCache;
+3 -3
View File
@@ -3,9 +3,9 @@
* @license MIT * @license MIT
*/ */
import { IColorContrastCache } from 'browser/Types'; import { IColorContrastCache } from './Types';
import { IColor } from 'common/Types'; import { IColor } from '../common/Types';
import { TwoKeyMap } from 'common/MultiKeyMap'; import { TwoKeyMap } from '../common/MultiKeyMap';
export class ColorContrastCache implements IColorContrastCache { export class ColorContrastCache implements IColorContrastCache {
private _color: TwoKeyMap</* bg */number, /* fg */number, IColor | null> = new TwoKeyMap(); private _color: TwoKeyMap</* bg */number, /* fg */number, IColor | null> = new TwoKeyMap();
+34 -34
View File
@@ -22,43 +22,43 @@
*/ */
import { IDecoration, IDecorationOptions, IDisposable, ILinkProvider, IMarker, IRenderDimensions as IRenderDimensionsApi } from '@xterm/xterm'; import { IDecoration, IDecorationOptions, IDisposable, ILinkProvider, IMarker, IRenderDimensions as IRenderDimensionsApi } from '@xterm/xterm';
import { copyHandler, handlePasteEvent, moveTextAreaUnderMouseCursor, paste, rightClickHandler } from 'browser/Clipboard'; import { copyHandler, handlePasteEvent, moveTextAreaUnderMouseCursor, paste, rightClickHandler } from './Clipboard';
import * as Strings from 'browser/LocalizableStrings'; import * as Strings from './LocalizableStrings';
import { OscLinkProvider } from 'browser/OscLinkProvider'; import { OscLinkProvider } from './OscLinkProvider';
import { CharacterJoinerHandler, CustomKeyEventHandler, CustomWheelEventHandler, IBrowser, IBufferRange, ICompositionHelper, ILinkifier2, ITerminal } from 'browser/Types'; import { CharacterJoinerHandler, CustomKeyEventHandler, CustomWheelEventHandler, IBrowser, IBufferRange, ICompositionHelper, ILinkifier2, ITerminal } from './Types';
import { Viewport } from 'browser/Viewport'; import { Viewport } from './Viewport';
import { BufferDecorationRenderer } from 'browser/decorations/BufferDecorationRenderer'; import { BufferDecorationRenderer } from './decorations/BufferDecorationRenderer';
import { OverviewRulerRenderer } from 'browser/decorations/OverviewRulerRenderer'; import { OverviewRulerRenderer } from './decorations/OverviewRulerRenderer';
import { CompositionHelper } from 'browser/input/CompositionHelper'; import { CompositionHelper } from './input/CompositionHelper';
import { DomRenderer } from 'browser/renderer/dom/DomRenderer'; import { DomRenderer } from './renderer/dom/DomRenderer';
import { IRenderer } from 'browser/renderer/shared/Types'; import { IRenderer } from './renderer/shared/Types';
import { CharSizeService } from 'browser/services/CharSizeService'; import { CharSizeService } from './services/CharSizeService';
import { CharacterJoinerService } from 'browser/services/CharacterJoinerService'; import { CharacterJoinerService } from './services/CharacterJoinerService';
import { CoreBrowserService } from 'browser/services/CoreBrowserService'; import { CoreBrowserService } from './services/CoreBrowserService';
import { LinkProviderService } from 'browser/services/LinkProviderService'; import { LinkProviderService } from './services/LinkProviderService';
import { MouseCoordsService } from 'browser/services/MouseCoordsService'; import { MouseCoordsService } from './services/MouseCoordsService';
import { MouseEventCssClasses, MouseService } from 'browser/services/MouseService'; import { MouseEventCssClasses, MouseService } from './services/MouseService';
import { RenderService } from 'browser/services/RenderService'; import { RenderService } from './services/RenderService';
import { SelectionService } from 'browser/services/SelectionService'; import { SelectionService } from './services/SelectionService';
import { ICharSizeService, ICharacterJoinerService, ICoreBrowserService, IKeyboardService, ILinkProviderService, IMouseCoordsService, IMouseService, IRenderService, ISelectionService, IThemeService } from 'browser/services/Services'; import { ICharSizeService, ICharacterJoinerService, ICoreBrowserService, IKeyboardService, ILinkProviderService, IMouseCoordsService, IMouseService, IRenderService, ISelectionService, IThemeService } from './services/Services';
import { ThemeService } from 'browser/services/ThemeService'; import { ThemeService } from './services/ThemeService';
import { KeyboardService } from 'browser/services/KeyboardService'; import { KeyboardService } from './services/KeyboardService';
import { channels, color, rgb } from 'common/Color'; import { channels, color, rgb } from '../common/Color';
import { CoreTerminal } from 'common/CoreTerminal'; import { CoreTerminal } from '../common/CoreTerminal';
import * as Browser from 'common/Platform'; import * as Browser from '../common/Platform';
import { ColorRequestType, IColorEvent, ITerminalOptions, KeyboardResultType, SpecialColorIndex } from 'common/Types'; import { ColorRequestType, IColorEvent, ITerminalOptions, KeyboardResultType, SpecialColorIndex } from '../common/Types';
import { DEFAULT_ATTR_DATA } from 'common/buffer/BufferLine'; import { DEFAULT_ATTR_DATA } from '../common/buffer/BufferLine';
import { IBuffer } from 'common/buffer/Types'; import { IBuffer } from '../common/buffer/Types';
import { C0, C1ESCAPED } from 'common/data/EscapeSequences'; import { C0, C1ESCAPED } from '../common/data/EscapeSequences';
import { toRgbString } from 'common/input/XParseColor'; import { toRgbString } from '../common/input/XParseColor';
import { DecorationService } from 'common/services/DecorationService'; import { DecorationService } from '../common/services/DecorationService';
import { IDecorationService } from 'common/services/Services'; import { IDecorationService } from '../common/services/Services';
import { WindowsOptionsReportType } from '../common/InputHandler'; import { WindowsOptionsReportType } from '../common/InputHandler';
import { AccessibilityManager } from './AccessibilityManager'; import { AccessibilityManager } from './AccessibilityManager';
import { Linkifier } from './Linkifier'; import { Linkifier } from './Linkifier';
import { Emitter, EventUtils, type IEvent } from 'common/Event'; import { Emitter, EventUtils, type IEvent } from '../common/Event';
import { addDisposableListener } from 'browser/Dom'; import { addDisposableListener } from './Dom';
import { MutableDisposable, toDisposable } from 'common/Lifecycle'; import { MutableDisposable, toDisposable } from '../common/Lifecycle';
export class CoreBrowserTerminal extends CoreTerminal implements ITerminal { export class CoreBrowserTerminal extends CoreTerminal implements ITerminal {
public textarea: HTMLTextAreaElement | undefined; public textarea: HTMLTextAreaElement | undefined;
+2 -2
View File
@@ -5,8 +5,8 @@
* Minimal DOM helpers for xterm.js browser code. * Minimal DOM helpers for xterm.js browser code.
*/ */
import { IntervalTimer } from 'common/Async'; import { IntervalTimer } from '../common/Async';
import { IDisposable } from 'common/Lifecycle'; import { IDisposable } from '../common/Lifecycle';
export function getWindow(e: Node | UIEvent | undefined | null): Window { export function getWindow(e: Node | UIEvent | undefined | null): Window {
const candidateNode = e as Node | undefined | null; const candidateNode = e as Node | undefined | null;
+4 -4
View File
@@ -4,11 +4,11 @@
*/ */
import { assert } from 'chai'; import { assert } from 'chai';
import { IBufferService } from 'common/services/Services'; import { IBufferService } from '../common/services/Services';
import { Linkifier } from './Linkifier'; import { Linkifier } from './Linkifier';
import { MockBufferService } from 'common/TestUtils.test'; import { MockBufferService } from '../common/TestUtils.test';
import { ILink } from 'browser/Types'; import { ILink } from './Types';
import { LinkProviderService } from 'browser/services/LinkProviderService'; import { LinkProviderService } from './services/LinkProviderService';
import jsdom = require('jsdom'); import jsdom = require('jsdom');
class TestLinkifier2 extends Linkifier { class TestLinkifier2 extends Linkifier {
+6 -6
View File
@@ -3,13 +3,13 @@
* @license MIT * @license MIT
*/ */
import { IBufferCellPosition, ILink, ILinkDecorations, ILinkWithState, ILinkifier2, ILinkifierEvent } from 'browser/Types'; import { IBufferCellPosition, ILink, ILinkDecorations, ILinkWithState, ILinkifier2, ILinkifierEvent } from './Types';
import { Disposable, dispose, toDisposable } from 'common/Lifecycle'; import { Disposable, dispose, toDisposable } from '../common/Lifecycle';
import { IDisposable } from 'common/Types'; import { IDisposable } from '../common/Types';
import { IBufferService } from 'common/services/Services'; import { IBufferService } from '../common/services/Services';
import { ILinkProviderService, IMouseCoordsService, IRenderService } from './services/Services'; import { ILinkProviderService, IMouseCoordsService, IRenderService } from './services/Services';
import { Emitter } from 'common/Event'; import { Emitter } from '../common/Event';
import { addDisposableListener } from 'browser/Dom'; import { addDisposableListener } from './Dom';
export class Linkifier extends Disposable implements ILinkifier2 { export class Linkifier extends Disposable implements ILinkifier2 {
public get currentLink(): ILinkWithState | undefined { return this._currentLink; } public get currentLink(): ILinkWithState | undefined { return this._currentLink; }
+5 -5
View File
@@ -4,11 +4,11 @@
*/ */
import { assert } from 'chai'; import { assert } from 'chai';
import { OscLinkProvider } from 'browser/OscLinkProvider'; import { OscLinkProvider } from './OscLinkProvider';
import { ILink } from 'browser/Types'; import { ILink } from './Types';
import { createCellData, MockBufferService, MockOptionsService } from 'common/TestUtils.test'; import { createCellData, MockBufferService, MockOptionsService } from '../common/TestUtils.test';
import { IBufferService, IOscLinkService } from 'common/services/Services'; import { IBufferService, IOscLinkService } from '../common/services/Services';
import { IBufferLine, IOscLinkData } from 'common/Types'; import { IBufferLine, IOscLinkData } from '../common/Types';
class TestOscLinkService implements IOscLinkService { class TestOscLinkService implements IOscLinkService {
public serviceBrand: any; public serviceBrand: any;
+5 -5
View File
@@ -3,11 +3,11 @@
* @license MIT * @license MIT
*/ */
import { IBufferRange, ILink } from 'browser/Types'; import { IBufferRange, ILink } from './Types';
import { ILinkProvider } from 'browser/services/Services'; import { ILinkProvider } from './services/Services';
import { CellData } from 'common/buffer/CellData'; import { CellData } from '../common/buffer/CellData';
import { IBufferLine } from 'common/Types'; import { IBufferLine } from '../common/Types';
import { IBufferService, IOptionsService, IOscLinkService } from 'common/services/Services'; import { IBufferService, IOptionsService, IOscLinkService } from '../common/services/Services';
export class OscLinkProvider implements ILinkProvider { export class OscLinkProvider implements ILinkProvider {
private readonly _workCell = new CellData(); private readonly _workCell = new CellData();
+2 -2
View File
@@ -3,8 +3,8 @@
* @license MIT * @license MIT
*/ */
import { IRenderDebouncerWithCallback } from 'browser/Types'; import { IRenderDebouncerWithCallback } from './Types';
import { ICoreBrowserService } from 'browser/services/Services'; import { ICoreBrowserService } from './services/Services';
/** /**
* Debounces calls to render terminal rows using animation frames. * Debounces calls to render terminal rows using animation frames.
+6 -6
View File
@@ -3,13 +3,13 @@
* @license MIT * @license MIT
*/ */
import { MockCompositionHelper, MockRenderer, MockViewport, TestTerminal } from 'browser/TestUtils.test'; import { MockCompositionHelper, MockRenderer, MockViewport, TestTerminal } from './TestUtils.test';
import type { IBrowser } from 'browser/Types'; import type { IBrowser } from './Types';
import { assert } from 'chai'; import { assert } from 'chai';
import { DEFAULT_ATTR_DATA } from 'common/buffer/BufferLine'; import { DEFAULT_ATTR_DATA } from '../common/buffer/BufferLine';
import { CellData } from 'common/buffer/CellData'; import { CellData } from '../common/buffer/CellData';
import { MockUnicodeService, createCellData } from 'common/TestUtils.test'; import { MockUnicodeService, createCellData } from '../common/TestUtils.test';
import { IMarker } from 'common/Types'; import { IMarker } from '../common/Types';
const INIT_COLS = 80; const INIT_COLS = 80;
const INIT_ROWS = 24; const INIT_ROWS = 24;
+1 -1
View File
@@ -7,7 +7,7 @@ import * as path from 'path';
import * as os from 'os'; import * as os from 'os';
import * as fs from 'fs'; import * as fs from 'fs';
import * as pty from 'node-pty'; import * as pty from 'node-pty';
import { CoreBrowserTerminal } from 'browser/CoreBrowserTerminal'; import { CoreBrowserTerminal } from './CoreBrowserTerminal';
import { IDisposable } from '@xterm/xterm'; import { IDisposable } from '@xterm/xterm';
// all test files expect terminal in 80x25 // all test files expect terminal in 80x25
+15 -15
View File
@@ -4,21 +4,21 @@
*/ */
import { IDisposable, IMarker, ILinkProvider, IDecorationOptions, IDecoration, IRenderDimensions as IRenderDimensionsApi } from '@xterm/xterm'; import { IDisposable, IMarker, ILinkProvider, IDecorationOptions, IDecoration, IRenderDimensions as IRenderDimensionsApi } from '@xterm/xterm';
import { ICharacterJoinerService, ICharSizeService, ICoreBrowserService, IMouseService, IRenderService, ISelectionService, IThemeService } from 'browser/services/Services'; import { ICharacterJoinerService, ICharSizeService, ICoreBrowserService, IMouseService, IRenderService, ISelectionService, IThemeService } from './services/Services';
import { IRenderDimensions, IRenderer, IRequestRedrawEvent } from 'browser/renderer/shared/Types'; import { IRenderDimensions, IRenderer, IRequestRedrawEvent } from './renderer/shared/Types';
import { IColorSet, ITerminal, ILinkifier2, IBrowser, IViewport, ICompositionHelper, CharacterJoinerHandler, IBufferRange, ReadonlyColorSet, IBufferElementProvider } from 'browser/Types'; import { IColorSet, ITerminal, ILinkifier2, IBrowser, IViewport, ICompositionHelper, CharacterJoinerHandler, IBufferRange, ReadonlyColorSet, IBufferElementProvider } from './Types';
import { IBuffer, IBufferSet } from 'common/buffer/Types'; import { IBuffer, IBufferSet } from '../common/buffer/Types';
import { IBufferLine, ICellData, IAttributeData, ICircularList, XtermListener, ICharset, ITerminalOptions, ColorIndex } from 'common/Types'; import { IBufferLine, ICellData, IAttributeData, ICircularList, XtermListener, ICharset, ITerminalOptions, ColorIndex } from '../common/Types';
import { Buffer } from 'common/buffer/Buffer'; import { Buffer } from '../common/buffer/Buffer';
import * as Browser from 'common/Platform'; import * as Browser from '../common/Platform';
import { CoreBrowserTerminal } from 'browser/CoreBrowserTerminal'; import { CoreBrowserTerminal } from './CoreBrowserTerminal';
import { IUnicodeService, IOptionsService, ICoreService, IMouseStateService } from 'common/services/Services'; import { IUnicodeService, IOptionsService, ICoreService, IMouseStateService } from '../common/services/Services';
import { IFunctionIdentifier, IParams } from 'common/parser/Types'; import { IFunctionIdentifier, IParams } from '../common/parser/Types';
import { AttributeData } from 'common/buffer/AttributeData'; import { AttributeData } from '../common/buffer/AttributeData';
import { ISelectionRedrawRequestEvent, ISelectionRequestScrollLinesEvent } from 'browser/selection/Types'; import { ISelectionRedrawRequestEvent, ISelectionRequestScrollLinesEvent } from './selection/Types';
import { css } from 'common/Color'; import { css } from '../common/Color';
import { createRenderDimensions } from 'browser/renderer/shared/RendererUtils'; import { createRenderDimensions } from './renderer/shared/RendererUtils';
import { Emitter, type IEvent } from 'common/Event'; import { Emitter, type IEvent } from '../common/Event';
export class TestTerminal extends CoreBrowserTerminal { export class TestTerminal extends CoreBrowserTerminal {
public get curAttrData(): IAttributeData { return (this as any)._inputHandler._curAttrData; } public get curAttrData(): IAttributeData { return (this as any)._inputHandler._curAttrData; }
+1 -1
View File
@@ -5,7 +5,7 @@
const RENDER_DEBOUNCE_THRESHOLD_MS = 1000; // 1 Second const RENDER_DEBOUNCE_THRESHOLD_MS = 1000; // 1 Second
import { IRenderDebouncer } from 'browser/Types'; import { IRenderDebouncer } from './Types';
/** /**
* Debounces calls to update screen readers to update at most once configurable interval of time. * Debounces calls to update screen readers to update at most once configurable interval of time.
+4 -4
View File
@@ -3,11 +3,11 @@
* @license MIT * @license MIT
*/ */
import { CharData, IColor, ICoreTerminal, ITerminalOptions } from 'common/Types'; import { CharData, IColor, ICoreTerminal, ITerminalOptions } from '../common/Types';
import { IBuffer } from 'common/buffer/Types'; import { IBuffer } from '../common/buffer/Types';
import { IDisposable, IRenderDimensions as IRenderDimensionsApi, Terminal as ITerminalApi } from '@xterm/xterm'; import { IDisposable, IRenderDimensions as IRenderDimensionsApi, Terminal as ITerminalApi } from '@xterm/xterm';
import { channels, css } from 'common/Color'; import { channels, css } from '../common/Color';
import type { IEvent } from 'common/Event'; import type { IEvent } from '../common/Event';
/** /**
* A portion of the public API that are implemented identially internally and simply passed through. * A portion of the public API that are implemented identially internally and simply passed through.
+10 -10
View File
@@ -3,16 +3,16 @@
* @license MIT * @license MIT
*/ */
import { ICoreBrowserService, IRenderService, IThemeService } from 'browser/services/Services'; import { ICoreBrowserService, IRenderService, IThemeService } from './services/Services';
import { ViewportConstants } from 'browser/shared/Constants'; import { ViewportConstants } from './shared/Constants';
import { Disposable, toDisposable } from 'common/Lifecycle'; import { Disposable, toDisposable } from '../common/Lifecycle';
import { IBufferService, ICoreService, IMouseStateService, IOptionsService } from 'common/services/Services'; import { IBufferService, ICoreService, IMouseStateService, IOptionsService } from '../common/services/Services';
import { CoreMouseEventType } from 'common/Types'; import { CoreMouseEventType } from '../common/Types';
import { scheduleAtNextAnimationFrame } from 'browser/Dom'; import { scheduleAtNextAnimationFrame } from './Dom';
import { SmoothScrollableElement } from 'browser/scrollable/scrollableElement'; import { SmoothScrollableElement } from './scrollable/scrollableElement';
import type { IScrollableElementChangeOptions } from 'browser/scrollable/scrollableElementOptions'; import type { IScrollableElementChangeOptions } from './scrollable/scrollableElementOptions';
import { Emitter, EventUtils } from 'common/Event'; import { Emitter, EventUtils } from '../common/Event';
import { Scrollable, ScrollbarVisibility, type IScrollEvent } from 'browser/scrollable/scrollable'; import { Scrollable, ScrollbarVisibility, type IScrollEvent } from './scrollable/scrollable';
export class Viewport extends Disposable { export class Viewport extends Disposable {
@@ -3,9 +3,9 @@
* Licensed under the MIT License. See License.txt in the project root for license information. * Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import { ICoreBrowserService, IRenderService } from 'browser/services/Services'; import { ICoreBrowserService, IRenderService } from '../services/Services';
import { Disposable, toDisposable } from 'common/Lifecycle'; import { Disposable, toDisposable } from '../../common/Lifecycle';
import { IBufferService, IDecorationService, IInternalDecoration } from 'common/services/Services'; import { IBufferService, IDecorationService, IInternalDecoration } from '../../common/services/Services';
export class BufferDecorationRenderer extends Disposable { export class BufferDecorationRenderer extends Disposable {
private readonly _container: HTMLElement; private readonly _container: HTMLElement;
@@ -4,7 +4,7 @@
*/ */
import { assert } from 'chai'; import { assert } from 'chai';
import { ColorZoneStore } from 'browser/decorations/ColorZoneStore'; import { ColorZoneStore } from './ColorZoneStore';
const optionsRedFull = { const optionsRedFull = {
overviewRulerOptions: { overviewRulerOptions: {
+1 -1
View File
@@ -3,7 +3,7 @@
* Licensed under the MIT License. See License.txt in the project root for license information. * Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import { IInternalDecoration } from 'common/services/Services'; import { IInternalDecoration } from '../../common/services/Services';
export interface IColorZoneStore { export interface IColorZoneStore {
readonly zones: IColorZone[]; readonly zones: IColorZone[];
@@ -3,10 +3,10 @@
* Licensed under the MIT License. See License.txt in the project root for license information. * Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import { ColorZoneStore, IColorZone, IColorZoneStore } from 'browser/decorations/ColorZoneStore'; import { ColorZoneStore, IColorZone, IColorZoneStore } from './ColorZoneStore';
import { ICoreBrowserService, IRenderService, IThemeService } from 'browser/services/Services'; import { ICoreBrowserService, IRenderService, IThemeService } from '../services/Services';
import { Disposable, toDisposable } from 'common/Lifecycle'; import { Disposable, toDisposable } from '../../common/Lifecycle';
import { IBufferService, IDecorationService, IOptionsService } from 'common/services/Services'; import { IBufferService, IDecorationService, IOptionsService } from '../../common/services/Services';
const enum Constants { const enum Constants {
OVERVIEW_RULER_BORDER_WIDTH = 1 OVERVIEW_RULER_BORDER_WIDTH = 1
+3 -3
View File
@@ -4,9 +4,9 @@
*/ */
import { assert } from 'chai'; import { assert } from 'chai';
import { CompositionHelper } from 'browser/input/CompositionHelper'; import { CompositionHelper } from './CompositionHelper';
import { MockRenderService } from 'browser/TestUtils.test'; import { MockRenderService } from '../TestUtils.test';
import { MockCoreService, MockBufferService, MockOptionsService } from 'common/TestUtils.test'; import { MockCoreService, MockBufferService, MockOptionsService } from '../../common/TestUtils.test';
describe('CompositionHelper', () => { describe('CompositionHelper', () => {
let compositionHelper: CompositionHelper; let compositionHelper: CompositionHelper;
+3 -3
View File
@@ -3,9 +3,9 @@
* @license MIT * @license MIT
*/ */
import { IRenderService } from 'browser/services/Services'; import { IRenderService } from '../services/Services';
import { IBufferService, ICoreService, IOptionsService } from 'common/services/Services'; import { IBufferService, ICoreService, IOptionsService } from '../../common/services/Services';
import { C0 } from 'common/data/EscapeSequences'; import { C0 } from '../../common/data/EscapeSequences';
interface IPosition { interface IPosition {
start: number; start: number;
+1 -1
View File
@@ -5,7 +5,7 @@
import jsdom = require('jsdom'); import jsdom = require('jsdom');
import { assert } from 'chai'; import { assert } from 'chai';
import { getCoords } from 'browser/input/Mouse'; import { getCoords } from './Mouse';
const CHAR_WIDTH = 10; const CHAR_WIDTH = 10;
const CHAR_HEIGHT = 20; const CHAR_HEIGHT = 20;
+2 -2
View File
@@ -4,8 +4,8 @@
*/ */
import { assert } from 'chai'; import { assert } from 'chai';
import { IBufferService } from 'common/services/Services'; import { IBufferService } from '../../common/services/Services';
import { MockBufferService } from 'common/TestUtils.test'; import { MockBufferService } from '../../common/TestUtils.test';
import { moveToCellSequence } from './MoveToCell'; import { moveToCellSequence } from './MoveToCell';
describe('MoveToCell', () => { describe('MoveToCell', () => {
+2 -2
View File
@@ -3,8 +3,8 @@
* @license MIT * @license MIT
*/ */
import { C0 } from 'common/data/EscapeSequences'; import { C0 } from '../../common/data/EscapeSequences';
import { IBufferService } from 'common/services/Services'; import { IBufferService } from '../../common/services/Services';
const enum Direction { const enum Direction {
UP = 'A', UP = 'A',
+10 -10
View File
@@ -3,17 +3,17 @@
* @license MIT * @license MIT
*/ */
import * as Strings from 'browser/LocalizableStrings'; import * as Strings from '../LocalizableStrings';
import { CoreBrowserTerminal as TerminalCore } from 'browser/CoreBrowserTerminal'; import { CoreBrowserTerminal as TerminalCore } from '../CoreBrowserTerminal';
import { IBufferRange, ITerminal } from 'browser/Types'; import { IBufferRange, ITerminal } from '../Types';
import { Disposable } from 'common/Lifecycle'; import { Disposable } from '../../common/Lifecycle';
import { ITerminalOptions } from 'common/Types'; import { ITerminalOptions } from '../../common/Types';
import { AddonManager } from 'common/public/AddonManager'; import { AddonManager } from '../../common/public/AddonManager';
import { BufferNamespaceApi } from 'common/public/BufferNamespaceApi'; import { BufferNamespaceApi } from '../../common/public/BufferNamespaceApi';
import { ParserApi } from 'common/public/ParserApi'; import { ParserApi } from '../../common/public/ParserApi';
import { UnicodeApi } from 'common/public/UnicodeApi'; import { UnicodeApi } from '../../common/public/UnicodeApi';
import { IBufferNamespace as IBufferNamespaceApi, IDecoration, IDecorationOptions, IDisposable, ILinkProvider, ILocalizableStrings, IMarker, IModes, IParser, IRenderDimensions, ITerminalAddon, Terminal as ITerminalApi, ITerminalInitOnlyOptions, IUnicodeHandling } from '@xterm/xterm'; import { IBufferNamespace as IBufferNamespaceApi, IDecoration, IDecorationOptions, IDisposable, ILinkProvider, ILocalizableStrings, IMarker, IModes, IParser, IRenderDimensions, ITerminalAddon, Terminal as ITerminalApi, ITerminalInitOnlyOptions, IUnicodeHandling } from '@xterm/xterm';
import type { IEvent } from 'common/Event'; import type { IEvent } from '../../common/Event';
/** /**
* The set of options that only have an effect when set in the Terminal constructor. * The set of options that only have an effect when set in the Terminal constructor.
+14 -14
View File
@@ -3,20 +3,20 @@
* @license MIT * @license MIT
*/ */
import { DomRendererRowFactory, RowCss } from 'browser/renderer/dom/DomRendererRowFactory'; import { DomRendererRowFactory, RowCss } from './DomRendererRowFactory';
import { WidthCache } from 'browser/renderer/dom/WidthCache'; import { WidthCache } from './WidthCache';
import { INVERTED_DEFAULT_COLOR, RendererConstants } from 'browser/renderer/shared/Constants'; import { INVERTED_DEFAULT_COLOR, RendererConstants } from '../shared/Constants';
import { createRenderDimensions } from 'browser/renderer/shared/RendererUtils'; import { createRenderDimensions } from '../shared/RendererUtils';
import { createSelectionRenderModel } from 'browser/renderer/shared/SelectionRenderModel'; import { createSelectionRenderModel } from '../shared/SelectionRenderModel';
import { TextBlinkStateManager } from 'browser/renderer/shared/TextBlinkStateManager'; import { TextBlinkStateManager } from '../shared/TextBlinkStateManager';
import { IRenderDimensions, IRenderer, IRequestRedrawEvent, ISelectionRenderModel } from 'browser/renderer/shared/Types'; import { IRenderDimensions, IRenderer, IRequestRedrawEvent, ISelectionRenderModel } from '../shared/Types';
import { ICharSizeService, ICoreBrowserService, IThemeService } from 'browser/services/Services'; import { ICharSizeService, ICoreBrowserService, IThemeService } from '../../services/Services';
import { ILinkifier2, ILinkifierEvent, ITerminal, ReadonlyColorSet } from 'browser/Types'; import { ILinkifier2, ILinkifierEvent, ITerminal, ReadonlyColorSet } from '../../Types';
import { color } from 'common/Color'; import { color } from '../../../common/Color';
import { Disposable, toDisposable } from 'common/Lifecycle'; import { Disposable, toDisposable } from '../../../common/Lifecycle';
import { IBufferService, ICoreService, IInstantiationService, IOptionsService } from 'common/services/Services'; import { IBufferService, ICoreService, IInstantiationService, IOptionsService } from '../../../common/services/Services';
import { Emitter } from 'common/Event'; import { Emitter } from '../../../common/Event';
import { addDisposableListener } from 'browser/Dom'; import { addDisposableListener } from '../../Dom';
const enum Constants { const enum Constants {
@@ -5,15 +5,15 @@
import jsdom = require('jsdom'); import jsdom = require('jsdom');
import { assert } from 'chai'; import { assert } from 'chai';
import { DomRendererRowFactory } from 'browser/renderer/dom/DomRendererRowFactory'; import { DomRendererRowFactory } from './DomRendererRowFactory';
import { NULL_CELL_CODE, NULL_CELL_WIDTH, NULL_CELL_CHAR, DEFAULT_ATTR, FgFlags, BgFlags, Attributes, UnderlineStyle } from 'common/buffer/Constants'; import { NULL_CELL_CODE, NULL_CELL_WIDTH, NULL_CELL_CHAR, DEFAULT_ATTR, FgFlags, BgFlags, Attributes, UnderlineStyle } from '../../../common/buffer/Constants';
import { BufferLine, DEFAULT_ATTR_DATA } from 'common/buffer/BufferLine'; import { BufferLine, DEFAULT_ATTR_DATA } from '../../../common/buffer/BufferLine';
import { BufferLineStringCache } from 'common/buffer/BufferLineStringCache'; import { BufferLineStringCache } from '../../../common/buffer/BufferLineStringCache';
import { IBufferLine } from 'common/Types'; import { IBufferLine } from '../../../common/Types';
import { CellData } from 'common/buffer/CellData'; import { CellData } from '../../../common/buffer/CellData';
import { MockCoreService, MockDecorationService, MockOptionsService, createCellData, NULL_CELL_DATA } from 'common/TestUtils.test'; import { MockCoreService, MockDecorationService, MockOptionsService, createCellData, NULL_CELL_DATA } from '../../../common/TestUtils.test';
import { MockCharacterJoinerService, MockCoreBrowserService, MockThemeService } from 'browser/TestUtils.test'; import { MockCharacterJoinerService, MockCoreBrowserService, MockThemeService } from '../../TestUtils.test';
import { TestWidthCache } from 'browser/renderer/dom/WidthCache.test'; import { TestWidthCache } from './WidthCache.test';
const TEST_STRING_CACHE = new BufferLineStringCache(); const TEST_STRING_CACHE = new BufferLineStringCache();
@@ -3,18 +3,18 @@
* @license MIT * @license MIT
*/ */
import { IBufferLine, ICellData, IColor } from 'common/Types'; import { IBufferLine, ICellData, IColor } from '../../../common/Types';
import { INVERTED_DEFAULT_COLOR } from 'browser/renderer/shared/Constants'; import { INVERTED_DEFAULT_COLOR } from '../shared/Constants';
import { WHITESPACE_CELL_CHAR, Attributes } from 'common/buffer/Constants'; import { WHITESPACE_CELL_CHAR, Attributes } from '../../../common/buffer/Constants';
import { CellData } from 'common/buffer/CellData'; import { CellData } from '../../../common/buffer/CellData';
import { ICoreService, IDecorationService, IOptionsService } from 'common/services/Services'; import { ICoreService, IDecorationService, IOptionsService } from '../../../common/services/Services';
import { channels, color } from 'common/Color'; import { channels, color } from '../../../common/Color';
import { ICharacterJoinerService, ICoreBrowserService, IThemeService } from 'browser/services/Services'; import { ICharacterJoinerService, ICoreBrowserService, IThemeService } from '../../services/Services';
import { JoinedCellData } from 'browser/services/CharacterJoinerService'; import { JoinedCellData } from '../../services/CharacterJoinerService';
import { treatGlyphAsBackgroundColor } from 'browser/renderer/shared/RendererUtils'; import { treatGlyphAsBackgroundColor } from '../shared/RendererUtils';
import { AttributeData } from 'common/buffer/AttributeData'; import { AttributeData } from '../../../common/buffer/AttributeData';
import { WidthCache } from 'browser/renderer/dom/WidthCache'; import { WidthCache } from './WidthCache';
import { IColorContrastCache } from 'browser/Types'; import { IColorContrastCache } from '../../Types';
export const enum RowCss { export const enum RowCss {
@@ -231,7 +231,6 @@ export class DomRendererRowFactory {
} }
charElement = this._document.createElement('span'); charElement = this._document.createElement('span');
cellAmount = 0; cellAmount = 0;
// eslint-disable-next-line no-useless-assignment
text = ''; text = '';
} }
} }
+1 -1
View File
@@ -4,7 +4,7 @@
*/ */
import * as assert from 'assert'; import * as assert from 'assert';
import { IWidthCacheFontVariantCanvas, WidthCache, WidthCacheSettings } from 'browser/renderer/dom/WidthCache'; import { IWidthCacheFontVariantCanvas, WidthCache, WidthCacheSettings } from './WidthCache';
class MockWidthCacheFontVariantCanvas implements IWidthCacheFontVariantCanvas { class MockWidthCacheFontVariantCanvas implements IWidthCacheFontVariantCanvas {
+3 -3
View File
@@ -3,9 +3,9 @@
* @license MIT * @license MIT
*/ */
import { throwIfFalsy } from 'browser/renderer/shared/RendererUtils'; import { throwIfFalsy } from '../shared/RendererUtils';
import { IDisposable } from 'common/Types'; import { IDisposable } from '../../../common/Types';
import { FontWeight } from 'common/services/Services'; import { FontWeight } from '../../../common/services/Services';
export const enum WidthCacheSettings { export const enum WidthCacheSettings {
@@ -3,7 +3,7 @@
* @license MIT * @license MIT
*/ */
import { computeNextVariantOffset } from 'browser/renderer/shared/RendererUtils'; import { computeNextVariantOffset } from './RendererUtils';
import { assert } from 'chai'; import { assert } from 'chai';
describe('RendererUtils', () => { describe('RendererUtils', () => {
+1 -1
View File
@@ -3,7 +3,7 @@
* @license MIT * @license MIT
*/ */
import { IDimensions, IRenderDimensions } from 'browser/renderer/shared/Types'; import { IDimensions, IRenderDimensions } from './Types';
export function throwIfFalsy<T>(value: T | undefined | null): T { export function throwIfFalsy<T>(value: T | undefined | null): T {
if (!value) { if (!value) {
@@ -3,8 +3,8 @@
* @license MIT * @license MIT
*/ */
import { ITerminal } from 'browser/Types'; import { ITerminal } from '../../Types';
import { ISelectionRenderModel } from 'browser/renderer/shared/Types'; import { ISelectionRenderModel } from './Types';
import { Terminal } from '@xterm/xterm'; import { Terminal } from '@xterm/xterm';
class SelectionRenderModel implements ISelectionRenderModel { class SelectionRenderModel implements ISelectionRenderModel {
@@ -4,10 +4,10 @@
*/ */
import { assert } from 'chai'; import { assert } from 'chai';
import { TextBlinkStateManager } from 'browser/renderer/shared/TextBlinkStateManager'; import { TextBlinkStateManager } from './TextBlinkStateManager';
import { MockOptionsService } from 'common/TestUtils.test'; import { MockOptionsService } from '../../../common/TestUtils.test';
import type { ICoreBrowserService } from 'browser/services/Services'; import type { ICoreBrowserService } from '../../services/Services';
import { Emitter } from 'common/Event'; import { Emitter } from '../../../common/Event';
class FakeWindow { class FakeWindow {
public nextId = 1; public nextId = 1;
@@ -3,9 +3,9 @@
* @license MIT * @license MIT
*/ */
import { ICoreBrowserService } from 'browser/services/Services'; import { ICoreBrowserService } from '../../services/Services';
import { Disposable, toDisposable } from 'common/Lifecycle'; import { Disposable, toDisposable } from '../../../common/Lifecycle';
import { IOptionsService } from 'common/services/Services'; import { IOptionsService } from '../../../common/services/Services';
export class TextBlinkStateManager extends Disposable { export class TextBlinkStateManager extends Disposable {
private _intervalDuration: number = 0; private _intervalDuration: number = 0;
+3 -3
View File
@@ -4,9 +4,9 @@
*/ */
import { Terminal } from '@xterm/xterm'; import { Terminal } from '@xterm/xterm';
import { ITerminal } from 'browser/Types'; import { ITerminal } from '../../Types';
import { IDisposable } from 'common/Types'; import { IDisposable } from '../../../common/Types';
import type { IEvent } from 'common/Event'; import type { IEvent } from '../../../common/Event';
export interface IDimensions { export interface IDimensions {
width: number; width: number;
+1 -1
View File
@@ -11,7 +11,7 @@ import { ScrollbarArrow, IScrollbarArrowOptions } from './scrollbarArrow';
import { ScrollbarState } from './scrollbarState'; import { ScrollbarState } from './scrollbarState';
import { ScrollbarVisibilityController } from './scrollbarVisibilityController'; import { ScrollbarVisibilityController } from './scrollbarVisibilityController';
import { Widget } from './widget'; import { Widget } from './widget';
import * as platform from 'common/Platform'; import * as platform from '../../common/Platform';
import { INewScrollPosition, Scrollable, ScrollbarVisibility } from './scrollable'; import { INewScrollPosition, Scrollable, ScrollbarVisibility } from './scrollable';
/** /**
@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import * as dom from '../Dom'; import * as dom from '../Dom';
import { DisposableStore, IDisposable, toDisposable } from 'common/Lifecycle'; import { DisposableStore, IDisposable, toDisposable } from '../../common/Lifecycle';
type PointerMoveCallback = (event: PointerEvent) => void; type PointerMoveCallback = (event: PointerEvent) => void;
type OnStopCallback = () => void; type OnStopCallback = () => void;
+1 -1
View File
@@ -3,7 +3,7 @@
* Licensed under the MIT License. See License.txt in the project root for license information. * Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import * as platform from 'common/Platform'; import * as platform from '../../common/Platform';
interface IWindowChainElement { interface IWindowChainElement {
readonly window: WeakRef<Window>; readonly window: WeakRef<Window>;
+2 -2
View File
@@ -3,8 +3,8 @@
* Licensed under the MIT License. See License.txt in the project root for license information. * Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import { Emitter, IEvent } from 'common/Event'; import { Emitter, IEvent } from '../../common/Event';
import { Disposable, IDisposable } from 'common/Lifecycle'; import { Disposable, IDisposable } from '../../common/Lifecycle';
export const enum ScrollbarVisibility { export const enum ScrollbarVisibility {
AUTO = 1, AUTO = 1,
+4 -4
View File
@@ -11,10 +11,10 @@ import { HorizontalScrollbar } from './horizontalScrollbar';
import { IScrollableElementChangeOptions, IScrollableElementCreationOptions, IScrollableElementResolvedOptions } from './scrollableElementOptions'; import { IScrollableElementChangeOptions, IScrollableElementCreationOptions, IScrollableElementResolvedOptions } from './scrollableElementOptions';
import { VerticalScrollbar } from './verticalScrollbar'; import { VerticalScrollbar } from './verticalScrollbar';
import { Widget } from './widget'; import { Widget } from './widget';
import { TimeoutTimer } from 'common/Async'; import { TimeoutTimer } from '../../common/Async';
import { Emitter, IEvent } from 'common/Event'; import { Emitter, IEvent } from '../../common/Event';
import { IDisposable, dispose } from 'common/Lifecycle'; import { IDisposable, dispose } from '../../common/Lifecycle';
import * as platform from 'common/Platform'; import * as platform from '../../common/Platform';
import { INewScrollDimensions, INewScrollPosition, IScrollDimensions, IScrollPosition, IScrollEvent, Scrollable, ScrollbarVisibility } from './scrollable'; import { INewScrollDimensions, INewScrollPosition, IScrollDimensions, IScrollPosition, IScrollEvent, Scrollable, ScrollbarVisibility } from './scrollable';
// import 'vs/css!./media/scrollbars'; // import 'vs/css!./media/scrollbars';
+1 -1
View File
@@ -5,7 +5,7 @@
import { GlobalPointerMoveMonitor } from './globalPointerMoveMonitor'; import { GlobalPointerMoveMonitor } from './globalPointerMoveMonitor';
import { Widget } from './widget'; import { Widget } from './widget';
import { TimeoutTimer } from 'common/Async'; import { TimeoutTimer } from '../../common/Async';
import * as dom from '../Dom'; import * as dom from '../Dom';
export interface IScrollbarArrowOptions { export interface IScrollbarArrowOptions {
@@ -4,8 +4,8 @@
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import { FastDomNode } from './fastDomNode'; import { FastDomNode } from './fastDomNode';
import { TimeoutTimer } from 'common/Async'; import { TimeoutTimer } from '../../common/Async';
import { Disposable } from 'common/Lifecycle'; import { Disposable } from '../../common/Lifecycle';
import { ScrollbarVisibility } from './scrollable'; import { ScrollbarVisibility } from './scrollable';
export class ScrollbarVisibilityController extends Disposable { export class ScrollbarVisibilityController extends Disposable {
+1 -1
View File
@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import * as DomUtils from '../Dom'; import * as DomUtils from '../Dom';
import { Disposable, IDisposable, toDisposable } from 'common/Lifecycle'; import { Disposable, IDisposable, toDisposable } from '../../common/Lifecycle';
const mainWindow = (typeof window === 'object' ? window : globalThis) as Window & typeof globalThis; const mainWindow = (typeof window === 'object' ? window : globalThis) as Window & typeof globalThis;
+1 -1
View File
@@ -5,7 +5,7 @@
import * as dom from '../Dom'; import * as dom from '../Dom';
import { IMouseEvent, StandardMouseEvent } from './mouseEvent'; import { IMouseEvent, StandardMouseEvent } from './mouseEvent';
import { Disposable } from 'common/Lifecycle'; import { Disposable } from '../../common/Lifecycle';
export abstract class Widget extends Disposable { export abstract class Widget extends Disposable {
+1 -1
View File
@@ -5,7 +5,7 @@
import { assert } from 'chai'; import { assert } from 'chai';
import { SelectionModel } from './SelectionModel'; import { SelectionModel } from './SelectionModel';
import { MockBufferService } from 'common/TestUtils.test'; import { MockBufferService } from '../../common/TestUtils.test';
describe('SelectionModel', () => { describe('SelectionModel', () => {
let model: SelectionModel; let model: SelectionModel;
+1 -1
View File
@@ -3,7 +3,7 @@
* @license MIT * @license MIT
*/ */
import { IBufferService } from 'common/services/Services'; import { IBufferService } from '../../common/services/Services';
/** /**
* Represents a selection within the buffer. This model only cares about column * Represents a selection within the buffer. This model only cares about column
+4 -4
View File
@@ -3,10 +3,10 @@
* @license MIT * @license MIT
*/ */
import { IOptionsService } from 'common/services/Services'; import { IOptionsService } from '../../common/services/Services';
import { ICharSizeService } from 'browser/services/Services'; import { ICharSizeService } from './Services';
import { Disposable } from 'common/Lifecycle'; import { Disposable } from '../../common/Lifecycle';
import { Emitter } from 'common/Event'; import { Emitter } from '../../common/Event';
export class CharSizeService extends Disposable implements ICharSizeService { export class CharSizeService extends Disposable implements ICharSizeService {
public serviceBrand: undefined; public serviceBrand: undefined;
@@ -4,13 +4,13 @@
*/ */
import { assert } from 'chai'; import { assert } from 'chai';
import { ICharacterJoinerService } from 'browser/services/Services'; import { ICharacterJoinerService } from './Services';
import { CharacterJoinerService } from 'browser/services/CharacterJoinerService'; import { CharacterJoinerService } from './CharacterJoinerService';
import { BufferLine } from 'common/buffer/BufferLine'; import { BufferLine } from '../../common/buffer/BufferLine';
import { BufferLineStringCache } from 'common/buffer/BufferLineStringCache'; import { BufferLineStringCache } from '../../common/buffer/BufferLineStringCache';
import { IBufferLine } from 'common/Types'; import { IBufferLine } from '../../common/Types';
import { CellData } from 'common/buffer/CellData'; import { CellData } from '../../common/buffer/CellData';
import { MockBufferService, createCellData } from 'common/TestUtils.test'; import { MockBufferService, createCellData } from '../../common/TestUtils.test';
const TEST_STRING_CACHE = new BufferLineStringCache(); const TEST_STRING_CACHE = new BufferLineStringCache();
@@ -3,13 +3,13 @@
* @license MIT * @license MIT
*/ */
import { IBufferLine, ICellData, CharData } from 'common/Types'; import { IBufferLine, ICellData, CharData } from '../../common/Types';
import { ICharacterJoiner } from 'browser/Types'; import { ICharacterJoiner } from '../Types';
import { AttributeData } from 'common/buffer/AttributeData'; import { AttributeData } from '../../common/buffer/AttributeData';
import { WHITESPACE_CELL_CHAR, Content } from 'common/buffer/Constants'; import { WHITESPACE_CELL_CHAR, Content } from '../../common/buffer/Constants';
import { CellData } from 'common/buffer/CellData'; import { CellData } from '../../common/buffer/CellData';
import { IBufferService } from 'common/services/Services'; import { IBufferService } from '../../common/services/Services';
import { ICharacterJoinerService } from 'browser/services/Services'; import { ICharacterJoinerService } from './Services';
export class JoinedCellData extends AttributeData implements ICellData { export class JoinedCellData extends AttributeData implements ICellData {
private _width: number; private _width: number;
+3 -3
View File
@@ -4,9 +4,9 @@
*/ */
import { ICoreBrowserService } from './Services'; import { ICoreBrowserService } from './Services';
import { Emitter, EventUtils } from 'common/Event'; import { Emitter, EventUtils } from '../../common/Event';
import { addDisposableListener } from 'browser/Dom'; import { addDisposableListener } from '../Dom';
import { Disposable, MutableDisposable, toDisposable } from 'common/Lifecycle'; import { Disposable, MutableDisposable, toDisposable } from '../../common/Lifecycle';
export class CoreBrowserService extends Disposable implements ICoreBrowserService { export class CoreBrowserService extends Disposable implements ICoreBrowserService {
public serviceBrand: undefined; public serviceBrand: undefined;
+7 -7
View File
@@ -3,13 +3,13 @@
* @license MIT * @license MIT
*/ */
import { IKeyboardService } from 'browser/services/Services'; import { IKeyboardService } from './Services';
import { evaluateKeyboardEvent } from 'common/input/Keyboard'; import { evaluateKeyboardEvent } from '../../common/input/Keyboard';
import { KittyKeyboard, KittyKeyboardEventType, KittyKeyboardFlags } from 'common/input/KittyKeyboard'; import { KittyKeyboard, KittyKeyboardEventType, KittyKeyboardFlags } from '../../common/input/KittyKeyboard';
import { Win32InputMode } from 'common/input/Win32InputMode'; import { Win32InputMode } from '../../common/input/Win32InputMode';
import { isMac } from 'common/Platform'; import { isMac } from '../../common/Platform';
import { ICoreService, IOptionsService } from 'common/services/Services'; import { ICoreService, IOptionsService } from '../../common/services/Services';
import { IKeyboardResult } from 'common/Types'; import { IKeyboardResult } from '../../common/Types';
export class KeyboardService implements IKeyboardService { export class KeyboardService implements IKeyboardService {
public serviceBrand: undefined; public serviceBrand: undefined;
+3 -3
View File
@@ -1,6 +1,6 @@
import { ILinkProvider, ILinkProviderService } from 'browser/services/Services'; import { ILinkProvider, ILinkProviderService } from './Services';
import { Disposable, toDisposable } from 'common/Lifecycle'; import { Disposable, toDisposable } from '../../common/Lifecycle';
import { IDisposable } from 'common/Types'; import { IDisposable } from '../../common/Types';
export class LinkProviderService extends Disposable implements ILinkProviderService { export class LinkProviderService extends Disposable implements ILinkProviderService {
declare public serviceBrand: undefined; declare public serviceBrand: undefined;
+3 -3
View File
@@ -3,9 +3,9 @@
* @license MIT * @license MIT
*/ */
import { getWindow } from 'browser/Dom'; import { getWindow } from '../Dom';
import { getCoords, getCoordsRelativeToElement } from 'browser/input/Mouse'; import { getCoords, getCoordsRelativeToElement } from '../input/Mouse';
import { ICharSizeService, IMouseCoordsService, IRenderService } from 'browser/services/Services'; import { ICharSizeService, IMouseCoordsService, IRenderService } from './Services';
export class MouseCoordsService implements IMouseCoordsService { export class MouseCoordsService implements IMouseCoordsService {
public serviceBrand: undefined; public serviceBrand: undefined;
+6 -6
View File
@@ -3,12 +3,12 @@
* @license MIT * @license MIT
*/ */
import { assert } from 'chai'; import { assert } from 'chai';
import { AltMouseCursorController, MouseEventCssClasses, MouseService } from 'browser/services/MouseService'; import { AltMouseCursorController, MouseEventCssClasses, MouseService } from './MouseService';
import { MouseStateService } from 'common/services/MouseStateService'; import { MouseStateService } from '../../common/services/MouseStateService';
import { CoreMouseAction, CoreMouseButton } from 'common/Types'; import { CoreMouseAction, CoreMouseButton } from '../../common/Types';
import { IBufferService, ICoreService, ILogService, IOptionsService } from 'common/services/Services'; import { IBufferService, ICoreService, ILogService, IOptionsService } from '../../common/services/Services';
import { OptionsService } from 'common/services/OptionsService'; import { OptionsService } from '../../common/services/OptionsService';
import { MockCoreBrowserService, MockRenderService, MockSelectionService } from 'browser/TestUtils.test'; import { MockCoreBrowserService, MockRenderService, MockSelectionService } from '../TestUtils.test';
function toBytes(s: string | undefined): number[] { function toBytes(s: string | undefined): number[] {
if (!s) { if (!s) {
+6 -6
View File
@@ -3,13 +3,13 @@
* @license MIT * @license MIT
*/ */
import { addDisposableListener } from 'browser/Dom'; import { addDisposableListener } from '../Dom';
import { IBufferService, IMouseStateService, ICoreService, ILogService, IOptionsService } from 'common/services/Services'; import { IBufferService, IMouseStateService, ICoreService, ILogService, IOptionsService } from '../../common/services/Services';
import { CoreMouseAction, CoreMouseButton, CoreMouseEventType, ICoreMouseEvent, IDisposable } from 'common/Types'; import { CoreMouseAction, CoreMouseButton, CoreMouseEventType, ICoreMouseEvent, IDisposable } from '../../common/Types';
import { C0 } from 'common/data/EscapeSequences'; import { C0 } from '../../common/data/EscapeSequences';
import { DisposableStore, MutableDisposable, toDisposable } from 'common/Lifecycle'; import { DisposableStore, MutableDisposable, toDisposable } from '../../common/Lifecycle';
import { ICoreBrowserService, IMouseCoordsService, IMouseService, IMouseServiceTarget, IRenderService, ISelectionService } from './Services'; import { ICoreBrowserService, IMouseCoordsService, IMouseService, IMouseServiceTarget, IRenderService, ISelectionService } from './Services';
import { Gesture, EventType as GestureEventType, IGestureEvent } from 'browser/scrollable/touch'; import { Gesture, EventType as GestureEventType, IGestureEvent } from '../scrollable/touch';
type RequestedMouseEvents = Record<'mouseup' | 'wheel' | 'mousedrag' | 'mousemove', EventListener | null>; type RequestedMouseEvents = Record<'mouseup' | 'wheel' | 'mousedrag' | 'mousemove', EventListener | null>;
+8 -8
View File
@@ -3,14 +3,14 @@
* @license MIT * @license MIT
*/ */
import { RenderDebouncer } from 'browser/RenderDebouncer'; import { RenderDebouncer } from '../RenderDebouncer';
import { IRenderDebouncerWithCallback } from 'browser/Types'; import { IRenderDebouncerWithCallback } from '../Types';
import { IRenderDimensions, IRenderer } from 'browser/renderer/shared/Types'; import { IRenderDimensions, IRenderer } from '../renderer/shared/Types';
import { ICharSizeService, ICoreBrowserService, IRenderService, IThemeService } from 'browser/services/Services'; import { ICharSizeService, ICoreBrowserService, IRenderService, IThemeService } from './Services';
import { Disposable, MutableDisposable, toDisposable } from 'common/Lifecycle'; import { Disposable, MutableDisposable, toDisposable } from '../../common/Lifecycle';
import { DebouncedIdleTask } from 'common/TaskQueue'; import { DebouncedIdleTask } from '../../common/TaskQueue';
import { IBufferService, ICoreService, IDecorationService, ILogService, IOptionsService } from 'common/services/Services'; import { IBufferService, ICoreService, IDecorationService, ILogService, IOptionsService } from '../../common/services/Services';
import { Emitter } from 'common/Event'; import { Emitter } from '../../common/Event';
interface ISelectionState { interface ISelectionState {
start: [number, number] | undefined; start: [number, number] | undefined;
+10 -10
View File
@@ -5,16 +5,16 @@
import { assert } from 'chai'; import { assert } from 'chai';
import { SelectionService, SelectionMode } from './SelectionService'; import { SelectionService, SelectionMode } from './SelectionService';
import { SelectionModel } from 'browser/selection/SelectionModel'; import { SelectionModel } from '../selection/SelectionModel';
import { IBufferLine } from 'common/Types'; import { IBufferLine } from '../../common/Types';
import { MockBufferService, MockOptionsService, MockCoreService, MockMouseStateService, createCellData } from 'common/TestUtils.test'; import { MockBufferService, MockOptionsService, MockCoreService, MockMouseStateService, createCellData } from '../../common/TestUtils.test';
import { BufferLine } from 'common/buffer/BufferLine'; import { BufferLine } from '../../common/buffer/BufferLine';
import { BufferLineStringCache } from 'common/buffer/BufferLineStringCache'; import { BufferLineStringCache } from '../../common/buffer/BufferLineStringCache';
import { IBufferService, IOptionsService } from 'common/services/Services'; import { IBufferService, IOptionsService } from '../../common/services/Services';
import { MockCoreBrowserService, MockMouseService, MockRenderService } from 'browser/TestUtils.test'; import { MockCoreBrowserService, MockMouseService, MockRenderService } from '../TestUtils.test';
import { CellData } from 'common/buffer/CellData'; import { CellData } from '../../common/buffer/CellData';
import { IBuffer } from 'common/buffer/Types'; import { IBuffer } from '../../common/buffer/Types';
import { IRenderService } from 'browser/services/Services'; import { IRenderService } from './Services';
const TEST_STRING_CACHE = new BufferLineStringCache(); const TEST_STRING_CACHE = new BufferLineStringCache();
+14 -14
View File
@@ -3,20 +3,20 @@
* @license MIT * @license MIT
*/ */
import { IBufferRange, ILinkifier2 } from 'browser/Types'; import { IBufferRange, ILinkifier2 } from '../Types';
import { getCoordsRelativeToElement } from 'browser/input/Mouse'; import { getCoordsRelativeToElement } from '../input/Mouse';
import { moveToCellSequence } from 'browser/input/MoveToCell'; import { moveToCellSequence } from '../input/MoveToCell';
import { SelectionModel } from 'browser/selection/SelectionModel'; import { SelectionModel } from '../selection/SelectionModel';
import { ISelectionRedrawRequestEvent, ISelectionRequestScrollLinesEvent } from 'browser/selection/Types'; import { ISelectionRedrawRequestEvent, ISelectionRequestScrollLinesEvent } from '../selection/Types';
import { ICoreBrowserService, IMouseCoordsService, IRenderService, ISelectionService } from 'browser/services/Services'; import { ICoreBrowserService, IMouseCoordsService, IRenderService, ISelectionService } from './Services';
import { Disposable, MutableDisposable, toDisposable } from 'common/Lifecycle'; import { Disposable, MutableDisposable, toDisposable } from '../../common/Lifecycle';
import * as Browser from 'common/Platform'; import * as Browser from '../../common/Platform';
import { IBufferLine, ICellData, IDisposable } from 'common/Types'; import { IBufferLine, ICellData, IDisposable } from '../../common/Types';
import { getRangeLength } from 'common/buffer/BufferRange'; import { getRangeLength } from '../../common/buffer/BufferRange';
import { CellData } from 'common/buffer/CellData'; import { CellData } from '../../common/buffer/CellData';
import { IBuffer } from 'common/buffer/Types'; import { IBuffer } from '../../common/buffer/Types';
import { IBufferService, ICoreService, IMouseStateService, IOptionsService } from 'common/services/Services'; import { IBufferService, ICoreService, IMouseStateService, IOptionsService } from '../../common/services/Services';
import { Emitter } from 'common/Event'; import { Emitter } from '../../common/Event';
const enum Constants { const enum Constants {
/** /**
+6 -6
View File
@@ -3,12 +3,12 @@
* @license MIT * @license MIT
*/ */
import { IRenderDimensions, IRenderer } from 'browser/renderer/shared/Types'; import { IRenderDimensions, IRenderer } from '../renderer/shared/Types';
import { IColorSet, ILink, ReadonlyColorSet } from 'browser/Types'; import { IColorSet, ILink, ReadonlyColorSet } from '../Types';
import { ISelectionRedrawRequestEvent as ISelectionRequestRedrawEvent, ISelectionRequestScrollLinesEvent } from 'browser/selection/Types'; import { ISelectionRedrawRequestEvent as ISelectionRequestRedrawEvent, ISelectionRequestScrollLinesEvent } from '../selection/Types';
import { createDecorator } from 'common/services/ServiceRegistry'; import { createDecorator } from '../../common/services/ServiceRegistry';
import { AllColorIndex, IDisposable, IKeyboardResult } from 'common/Types'; import { AllColorIndex, IDisposable, IKeyboardResult } from '../../common/Types';
import type { IEvent } from 'common/Event'; import type { IEvent } from '../../common/Event';
export const ICharSizeService = createDecorator<ICharSizeService>('CharSizeService'); export const ICharSizeService = createDecorator<ICharSizeService>('CharSizeService');
export interface ICharSizeService { export interface ICharSizeService {
+3 -3
View File
@@ -5,9 +5,9 @@
import jsdom = require('jsdom'); import jsdom = require('jsdom');
import { assert } from 'chai'; import { assert } from 'chai';
import { ThemeService } from 'browser/services/ThemeService'; import { ThemeService } from './ThemeService';
import { OptionsService } from 'common/services/OptionsService'; import { OptionsService } from '../../common/services/OptionsService';
import { DEFAULT_ANSI_COLORS } from 'browser/Types'; import { DEFAULT_ANSI_COLORS } from '../Types';
describe('ThemeService', () => { describe('ThemeService', () => {
let themeService: ThemeService; let themeService: ThemeService;
+8 -8
View File
@@ -3,14 +3,14 @@
* @license MIT * @license MIT
*/ */
import { ColorContrastCache } from 'browser/ColorContrastCache'; import { ColorContrastCache } from '../ColorContrastCache';
import { IThemeService } from 'browser/services/Services'; import { IThemeService } from './Services';
import { DEFAULT_ANSI_COLORS, IColorContrastCache, IColorSet, ReadonlyColorSet } from 'browser/Types'; import { DEFAULT_ANSI_COLORS, IColorContrastCache, IColorSet, ReadonlyColorSet } from '../Types';
import { color, css, NULL_COLOR } from 'common/Color'; import { color, css, NULL_COLOR } from '../../common/Color';
import { Disposable } from 'common/Lifecycle'; import { Disposable } from '../../common/Lifecycle';
import { IOptionsService, ITheme } from 'common/services/Services'; import { IOptionsService, ITheme } from '../../common/services/Services';
import { AllColorIndex, IColor, SpecialColorIndex } from 'common/Types'; import { AllColorIndex, IColor, SpecialColorIndex } from '../../common/Types';
import { Emitter } from 'common/Event'; import { Emitter } from '../../common/Event';
interface IRestoreColorSet { interface IRestoreColorSet {
foreground: IColor; foreground: IColor;
+4 -6
View File
@@ -9,17 +9,15 @@
"types": [ "types": [
"../../node_modules/@types/mocha" "../../node_modules/@types/mocha"
], ],
"skipLibCheck": true, "skipLibCheck": true
"paths": {
"common/*": [ "./../common/*" ],
"*": [ "./../*" ]
}
}, },
"include": [ "include": [
"./**/*", "./**/*",
"../../typings/xterm.d.ts" "../../typings/xterm.d.ts"
], ],
"references": [ "references": [
{ "path": "../common" } {
"path": "../common"
}
] ]
} }
+1 -1
View File
@@ -5,7 +5,7 @@
* Minimal async helpers for xterm.js core. * Minimal async helpers for xterm.js core.
*/ */
import { DisposableStore, IDisposable, toDisposable } from 'common/Lifecycle'; import { DisposableStore, IDisposable, toDisposable } from './Lifecycle';
export function timeout(millis: number): Promise<void> { export function timeout(millis: number): Promise<void> {
return new Promise(resolve => setTimeout(resolve, millis)); return new Promise(resolve => setTimeout(resolve, millis));
+1 -1
View File
@@ -4,7 +4,7 @@
*/ */
import { assert } from 'chai'; import { assert } from 'chai';
import { CircularList } from 'common/CircularList'; import { CircularList } from './CircularList';
describe('CircularList', () => { describe('CircularList', () => {
describe('push', () => { describe('push', () => {
+3 -3
View File
@@ -3,9 +3,9 @@
* @license MIT * @license MIT
*/ */
import { ICircularList } from 'common/Types'; import { ICircularList } from './Types';
import { Disposable } from 'common/Lifecycle'; import { Disposable } from './Lifecycle';
import { Emitter } from 'common/Event'; import { Emitter } from './Event';
export interface IInsertEvent { export interface IInsertEvent {
index: number; index: number;
+1 -1
View File
@@ -4,7 +4,7 @@
*/ */
import { assert } from 'chai'; import { assert } from 'chai';
import { channels, color, css, rgb, rgba, toPaddedHex, contrastRatio } from 'common/Color'; import { channels, color, css, rgb, rgba, toPaddedHex, contrastRatio } from './Color';
describe('Color', () => { describe('Color', () => {
+1 -1
View File
@@ -3,7 +3,7 @@
* @license MIT * @license MIT
*/ */
import { IColor, IColorRGB } from 'common/Types'; import { IColor, IColorRGB } from './Types';
let $r = 0; let $r = 0;
let $g = 0; let $g = 0;
+18 -18
View File
@@ -21,24 +21,24 @@
* http://linux.die.net/man/7/urxvt * http://linux.die.net/man/7/urxvt
*/ */
import { IInstantiationService, IOptionsService, IBufferService, ILogService, ICharsetService, ICoreService, IMouseStateService, IUnicodeService, LogLevelEnum, ITerminalOptions, IOscLinkService } from 'common/services/Services'; import { IInstantiationService, IOptionsService, IBufferService, ILogService, ICharsetService, ICoreService, IMouseStateService, IUnicodeService, LogLevelEnum, ITerminalOptions, IOscLinkService } from './services/Services';
import { InstantiationService } from 'common/services/InstantiationService'; import { InstantiationService } from './services/InstantiationService';
import { LogService } from 'common/services/LogService'; import { LogService } from './services/LogService';
import { BufferService, BufferServiceConstants } from 'common/services/BufferService'; import { BufferService, BufferServiceConstants } from './services/BufferService';
import { OptionsService } from 'common/services/OptionsService'; import { OptionsService } from './services/OptionsService';
import { IDisposable, IAttributeData, ICoreTerminal, IScrollEvent } from 'common/Types'; import { IDisposable, IAttributeData, ICoreTerminal, IScrollEvent } from './Types';
import { CoreService } from 'common/services/CoreService'; import { CoreService } from './services/CoreService';
import { MouseStateService } from 'common/services/MouseStateService'; import { MouseStateService } from './services/MouseStateService';
import { UnicodeService } from 'common/services/UnicodeService'; import { UnicodeService } from './services/UnicodeService';
import { CharsetService } from 'common/services/CharsetService'; import { CharsetService } from './services/CharsetService';
import { updateWindowsModeWrappedState } from 'common/WindowsMode'; import { updateWindowsModeWrappedState } from './WindowsMode';
import { IFunctionIdentifier, IParams } from 'common/parser/Types'; import { IFunctionIdentifier, IParams } from './parser/Types';
import { IBufferSet } from 'common/buffer/Types'; import { IBufferSet } from './buffer/Types';
import { InputHandler } from 'common/InputHandler'; import { InputHandler } from './InputHandler';
import { WriteBuffer } from 'common/input/WriteBuffer'; import { WriteBuffer } from './input/WriteBuffer';
import { OscLinkService } from 'common/services/OscLinkService'; import { OscLinkService } from './services/OscLinkService';
import { Emitter, EventUtils, type IEvent } from 'common/Event'; import { Emitter, EventUtils, type IEvent } from './Event';
import { Disposable, MutableDisposable, toDisposable } from 'common/Lifecycle'; import { Disposable, MutableDisposable, toDisposable } from './Lifecycle';
// Only trigger this warning a single time per session // Only trigger this warning a single time per session
let hasWriteSyncWarnHappened = false; let hasWriteSyncWarnHappened = false;
+1 -1
View File
@@ -4,7 +4,7 @@
*/ */
import { assert } from 'chai'; import { assert } from 'chai';
import { Emitter } from 'common/Event'; import { Emitter } from './Event';
describe('Emitter', () => { describe('Emitter', () => {
it('should fire with 0 listeners without error', () => { it('should fire with 0 listeners without error', () => {
+1 -1
View File
@@ -6,7 +6,7 @@
* Simplified from VS Code's event.ts - no leak detection/profiling. * Simplified from VS Code's event.ts - no leak detection/profiling.
*/ */
import { IDisposable, DisposableStore, toDisposable } from 'common/Lifecycle'; import { IDisposable, DisposableStore, toDisposable } from './Lifecycle';
export interface IEvent<T> { export interface IEvent<T> {
(listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore): IDisposable; (listener: (e: T) => any, thisArgs?: any, disposables?: IDisposable[] | DisposableStore): IDisposable;
+13 -13
View File
@@ -4,19 +4,19 @@
*/ */
import { assert } from 'chai'; import { assert } from 'chai';
import { InputHandler } from 'common/InputHandler'; import { InputHandler } from './InputHandler';
import { IBufferLine, IAttributeData, IColorEvent, ColorRequestType, SpecialColorIndex } from 'common/Types'; import { IBufferLine, IAttributeData, IColorEvent, ColorRequestType, SpecialColorIndex } from './Types';
import { DEFAULT_ATTR_DATA } from 'common/buffer/BufferLine'; import { DEFAULT_ATTR_DATA } from './buffer/BufferLine';
import { CellData } from 'common/buffer/CellData'; import { CellData } from './buffer/CellData';
import { Attributes, BgFlags, UnderlineStyle } from 'common/buffer/Constants'; import { Attributes, BgFlags, UnderlineStyle } from './buffer/Constants';
import { AttributeData, ExtendedAttrs } from 'common/buffer/AttributeData'; import { AttributeData, ExtendedAttrs } from './buffer/AttributeData';
import { Params } from 'common/parser/Params'; import { Params } from './parser/Params';
import { MockCoreService, MockBufferService, MockOptionsService, MockLogService, MockMouseStateService, MockCharsetService, MockUnicodeService, MockOscLinkService, extendedAttributes } from 'common/TestUtils.test'; import { MockCoreService, MockBufferService, MockOptionsService, MockLogService, MockMouseStateService, MockCharsetService, MockUnicodeService, MockOscLinkService, extendedAttributes } from './TestUtils.test';
import { IBufferService, ICoreService, type IOscLinkService } from 'common/services/Services'; import { IBufferService, ICoreService, type IOscLinkService } from './services/Services';
import { DEFAULT_OPTIONS } from 'common/services/OptionsService'; import { DEFAULT_OPTIONS } from './services/OptionsService';
import { BufferService } from 'common/services/BufferService'; import { BufferService } from './services/BufferService';
import { CoreService } from 'common/services/CoreService'; import { CoreService } from './services/CoreService';
import { OscLinkService } from 'common/services/OscLinkService'; import { OscLinkService } from './services/OscLinkService';
function getCursor(bufferService: IBufferService): number[] { function getCursor(bufferService: IBufferService): number[] {
+20 -20
View File
@@ -4,26 +4,26 @@
* @license MIT * @license MIT
*/ */
import { IInputHandler, IAttributeData, IDisposable, IWindowOptions, IColorEvent, IParseStack, ColorIndex, ColorRequestType, SpecialColorIndex } from 'common/Types'; import { IInputHandler, IAttributeData, IDisposable, IWindowOptions, IColorEvent, IParseStack, ColorIndex, ColorRequestType, SpecialColorIndex } from './Types';
import { C0, C1 } from 'common/data/EscapeSequences'; import { C0, C1 } from './data/EscapeSequences';
import { CHARSETS, DEFAULT_CHARSET } from 'common/data/Charsets'; import { CHARSETS, DEFAULT_CHARSET } from './data/Charsets';
import { EscapeSequenceParser } from 'common/parser/EscapeSequenceParser'; import { EscapeSequenceParser } from './parser/EscapeSequenceParser';
import { Disposable } from 'common/Lifecycle'; import { Disposable } from './Lifecycle';
import { StringToUtf32, stringFromCodePoint, Utf8ToUtf32 } from 'common/input/TextDecoder'; import { StringToUtf32, stringFromCodePoint, Utf8ToUtf32 } from './input/TextDecoder';
import { BufferLine, DEFAULT_ATTR_DATA } from 'common/buffer/BufferLine'; import { BufferLine, DEFAULT_ATTR_DATA } from './buffer/BufferLine';
import { IParsingState, IEscapeSequenceParser, IParams, IFunctionIdentifier } from 'common/parser/Types'; import { IParsingState, IEscapeSequenceParser, IParams, IFunctionIdentifier } from './parser/Types';
import { NULL_CELL_CODE, NULL_CELL_WIDTH, Attributes, FgFlags, BgFlags, Content, UnderlineStyle } from 'common/buffer/Constants'; import { NULL_CELL_CODE, NULL_CELL_WIDTH, Attributes, FgFlags, BgFlags, Content, UnderlineStyle } from './buffer/Constants';
import { CellData } from 'common/buffer/CellData'; import { CellData } from './buffer/CellData';
import { AttributeData } from 'common/buffer/AttributeData'; import { AttributeData } from './buffer/AttributeData';
import { ICoreService, IBufferService, IOptionsService, ILogService, IMouseStateService, ICharsetService, IUnicodeService, LogLevelEnum, IOscLinkService } from 'common/services/Services'; import { ICoreService, IBufferService, IOptionsService, ILogService, IMouseStateService, ICharsetService, IUnicodeService, LogLevelEnum, IOscLinkService } from './services/Services';
import { UnicodeService } from 'common/services/UnicodeService'; import { UnicodeService } from './services/UnicodeService';
import { OscHandler } from 'common/parser/OscParser'; import { OscHandler } from './parser/OscParser';
import { DcsHandler } from 'common/parser/DcsParser'; import { DcsHandler } from './parser/DcsParser';
import { ApcHandler } from 'common/parser/ApcParser'; import { ApcHandler } from './parser/ApcParser';
import { IBuffer } from 'common/buffer/Types'; import { IBuffer } from './buffer/Types';
import { parseColor } from 'common/input/XParseColor'; import { parseColor } from './input/XParseColor';
import { Emitter } from 'common/Event'; import { Emitter } from './Event';
import { XTERM_VERSION } from 'common/Version'; import { XTERM_VERSION } from './Version';
/** /**
* Map collect to glevel. Used in `selectCharset`. * Map collect to glevel. Used in `selectCharset`.
+1 -1
View File
@@ -4,7 +4,7 @@
*/ */
import { assert } from 'chai'; import { assert } from 'chai';
import { FourKeyMap, TwoKeyMap } from 'common/MultiKeyMap'; import { FourKeyMap, TwoKeyMap } from './MultiKeyMap';
const strictEqual = assert.strictEqual; const strictEqual = assert.strictEqual;
+2 -2
View File
@@ -4,8 +4,8 @@
*/ */
import { assert } from 'chai'; import { assert } from 'chai';
import { SortedList } from 'common/SortedList'; import { SortedList } from './SortedList';
import { MockLogService } from 'common/TestUtils.test'; import { MockLogService } from './TestUtils.test';
const deepStrictEqual = assert.deepStrictEqual; const deepStrictEqual = assert.deepStrictEqual;
+2 -2
View File
@@ -3,8 +3,8 @@
* @license MIT * @license MIT
*/ */
import { IdleTaskQueue } from 'common/TaskQueue'; import { IdleTaskQueue } from './TaskQueue';
import type { ILogService } from 'common/services/Services'; import type { ILogService } from './services/Services';
// Work variables to avoid garbage collection. // Work variables to avoid garbage collection.
let i = 0; let i = 0;

Some files were not shown because too many files have changed in this diff Show More