Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7c6f793aa2 | ||
|
|
f22ef02831 | ||
|
|
c569e5ab19 | ||
|
|
9a65429a30 |
@@ -17,7 +17,6 @@ docs/
|
|||||||
npm-debug.log
|
npm-debug.log
|
||||||
/.idea/
|
/.idea/
|
||||||
.env
|
.env
|
||||||
mise.toml
|
|
||||||
build/
|
build/
|
||||||
.DS_Store
|
.DS_Store
|
||||||
yarn.lock
|
yarn.lock
|
||||||
|
|||||||
-374
@@ -1,374 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "./node_modules/oxlint/configuration_schema.json",
|
|
||||||
"plugins": [
|
|
||||||
"import",
|
|
||||||
"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",
|
|
||||||
"import/no-cycle": "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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,120 +0,0 @@
|
|||||||
{
|
|
||||||
"$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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
Vendored
+3
@@ -15,6 +15,9 @@
|
|||||||
"--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"
|
||||||
|
|||||||
@@ -2,10 +2,13 @@
|
|||||||
|
|
||||||
## Architecture Overview
|
## Architecture Overview
|
||||||
|
|
||||||
**Core Structure**: xterm.js is a multi-target terminal emulator with three main distributions:
|
**Core Structure**: xterm.js is a multi-target terminal emulator with these main source areas:
|
||||||
- `src/browser/`: Full-featured browser terminal with DOM rendering
|
- `src/primitives/`: Building blocks (buffer, parser, input, data, utilities); TypeScript project `src/primitives/tsconfig.json`
|
||||||
- `src/headless/`: Server-side terminal for Node.js (no DOM)
|
- `src/runtime/`: Services, `CoreTerminal`, `InputHandler`, public API adapters; TypeScript project `src/runtime/tsconfig.json`
|
||||||
- `src/common/`: Shared core logic (parsing, buffer management, terminal state)
|
- `src/target-browser/`: Browser terminal with DOM rendering
|
||||||
|
- `src/target-headless/`: Node terminal without DOM
|
||||||
|
|
||||||
|
See `src/ARCHITECTURE.md` for the dependency graph and import-path conventions (`common/*`, `target-browser/*`, `target-headless/*`).
|
||||||
|
|
||||||
**Key Classes**:
|
**Key Classes**:
|
||||||
- `Terminal` (browser/headless): Public API wrapper
|
- `Terminal` (browser/headless): Public API wrapper
|
||||||
@@ -26,7 +29,6 @@ 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
@@ -39,7 +39,7 @@ The preferred way to report bugs or request features is to use
|
|||||||
|
|
||||||
It's pretty common for maintainers of large open source projects to suffer from burnout, especially when needing to triage a large number of incoming issues instead of actually building things. Here are some of the steps we take to try mitigate this:
|
It's pretty common for maintainers of large open source projects to suffer from burnout, especially when needing to triage a large number of incoming issues instead of actually building things. Here are some of the steps we take to try mitigate this:
|
||||||
|
|
||||||
- Support questions live in [GH discussions](https://github.com/xtermjs/xterm.js/discussions), issues may be transferred there without further comment and core maintainers may or may not participate in discussions.
|
- Support questions live in [GH discussions](https://github.com/xtermjs/xterm.js/discussions), issues may be transfered there without further comment and core maintainers may or may not participate in discussions.
|
||||||
- Issues are strictly for well defined features or bugs that are _actionable_.
|
- Issues are strictly for well defined features or bugs that are _actionable_.
|
||||||
- Sometimes features are out of scope. A common example of this is a niche feature that the pricipal implementation ([VS Code](https://code.visualstudio.com/)) won't leverage and therefore would be difficult to maintain and likely suffer from bitrot. The reporter may not agree with this, but you could always create an addon if that works or maintain your own fork if it comes to that.
|
- Sometimes features are out of scope. A common example of this is a niche feature that the pricipal implementation ([VS Code](https://code.visualstudio.com/)) won't leverage and therefore would be difficult to maintain and likely suffer from bitrot. The reporter may not agree with this, but you could always create an addon if that works or maintain your own fork if it comes to that.
|
||||||
- If a feature does not have a clear way forward or needs more discussion it may be closed ro moved to a discussion.
|
- If a feature does not have a clear way forward or needs more discussion it may be closed ro moved to a discussion.
|
||||||
|
|||||||
@@ -11,10 +11,11 @@
|
|||||||
"removeComments": true,
|
"removeComments": true,
|
||||||
"paths": {
|
"paths": {
|
||||||
"common/*": [
|
"common/*": [
|
||||||
"../../../src/common/*"
|
"../../../src/primitives/*",
|
||||||
|
"../../../src/runtime/*",
|
||||||
],
|
],
|
||||||
"browser/*": [
|
"target-browser/*": [
|
||||||
"../../../src/browser/*"
|
"../../../src/target-browser/*"
|
||||||
],
|
],
|
||||||
"*": [
|
"*": [
|
||||||
"./*"
|
"./*"
|
||||||
@@ -31,10 +32,10 @@
|
|||||||
],
|
],
|
||||||
"references": [
|
"references": [
|
||||||
{
|
{
|
||||||
"path": "../../../src/common"
|
"path": "../../../src"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "../../../src/browser"
|
"path": "../../../src/target-browser"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "../../../test/playwright"
|
"path": "../../../test/playwright"
|
||||||
|
|||||||
@@ -15,8 +15,8 @@
|
|||||||
"../../../node_modules/@types/mocha"
|
"../../../node_modules/@types/mocha"
|
||||||
],
|
],
|
||||||
"paths": {
|
"paths": {
|
||||||
"browser/*": [
|
"target-browser/*": [
|
||||||
"../../../src/browser/*"
|
"../../../src/target-browser/*"
|
||||||
],
|
],
|
||||||
"@xterm/addon-clipboard": [
|
"@xterm/addon-clipboard": [
|
||||||
"../typings/addon-clipboard.d.ts"
|
"../typings/addon-clipboard.d.ts"
|
||||||
@@ -29,7 +29,7 @@
|
|||||||
],
|
],
|
||||||
"references": [
|
"references": [
|
||||||
{
|
{
|
||||||
"path": "../../../src/browser"
|
"path": "../../../src/target-browser"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,10 +11,11 @@
|
|||||||
"removeComments": true,
|
"removeComments": true,
|
||||||
"paths": {
|
"paths": {
|
||||||
"common/*": [
|
"common/*": [
|
||||||
"../../../src/common/*"
|
"../../../src/primitives/*",
|
||||||
|
"../../../src/runtime/*",
|
||||||
],
|
],
|
||||||
"browser/*": [
|
"target-browser/*": [
|
||||||
"../../../src/browser/*"
|
"../../../src/target-browser/*"
|
||||||
],
|
],
|
||||||
"*": [
|
"*": [
|
||||||
"./*"
|
"./*"
|
||||||
@@ -31,10 +32,10 @@
|
|||||||
],
|
],
|
||||||
"references": [
|
"references": [
|
||||||
{
|
{
|
||||||
"path": "../../../src/common"
|
"path": "../../../src"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "../../../src/browser"
|
"path": "../../../src/target-browser"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "../../../test/playwright"
|
"path": "../../../test/playwright"
|
||||||
|
|||||||
+1
-1
@@ -82,7 +82,7 @@ declare module '@xterm/addon-clipboard' {
|
|||||||
/**
|
/**
|
||||||
* The clipboard provider interface that enables xterm.js to access the browser clipboard.
|
* The clipboard provider interface that enables xterm.js to access the browser clipboard.
|
||||||
*
|
*
|
||||||
* Note that this clipboard provider does not implement own cut buffers as xterm does,
|
* Note this this clipboard provider does not implement own cut buffers as xterm does,
|
||||||
* but redirect the selection parameter always to navigator.clipboard.
|
* but redirect the selection parameter always to navigator.clipboard.
|
||||||
*/
|
*/
|
||||||
export class BrowserClipboardProvider implements IClipboardProvider{
|
export class BrowserClipboardProvider implements IClipboardProvider{
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
import type { Terminal, ITerminalAddon, IRenderDimensions } from '@xterm/xterm';
|
import type { Terminal, ITerminalAddon, IRenderDimensions } from '@xterm/xterm';
|
||||||
import type { FitAddon as IFitApi } from '@xterm/addon-fit';
|
import type { FitAddon as IFitApi } from '@xterm/addon-fit';
|
||||||
import { ViewportConstants } from 'browser/shared/Constants';
|
import { ViewportConstants } from 'target-browser/shared/Constants';
|
||||||
|
|
||||||
interface ITerminalDimensions {
|
interface ITerminalDimensions {
|
||||||
/**
|
/**
|
||||||
@@ -74,14 +74,14 @@ export class FitAddon implements ITerminalAddon, IFitApi {
|
|||||||
: (this._terminal.options.scrollbar?.width ?? ViewportConstants.DEFAULT_SCROLL_BAR_WIDTH));
|
: (this._terminal.options.scrollbar?.width ?? ViewportConstants.DEFAULT_SCROLL_BAR_WIDTH));
|
||||||
|
|
||||||
const parentElementStyle = _getComputedStyle(this._terminal.element.parentElement);
|
const parentElementStyle = _getComputedStyle(this._terminal.element.parentElement);
|
||||||
const parentElementHeight = Math.max(0, parseInt(parentElementStyle.getPropertyValue('height'), 10) || 0);
|
const parentElementHeight = parseInt(parentElementStyle.getPropertyValue('height'));
|
||||||
const parentElementWidth = Math.max(0, parseInt(parentElementStyle.getPropertyValue('width'), 10) || 0);
|
const parentElementWidth = Math.max(0, parseInt(parentElementStyle.getPropertyValue('width')));
|
||||||
const elementStyle = _getComputedStyle(this._terminal.element);
|
const elementStyle = _getComputedStyle(this._terminal.element);
|
||||||
const elementPadding = {
|
const elementPadding = {
|
||||||
top: parseInt(elementStyle.getPropertyValue('padding-top'), 10) || 0,
|
top: parseInt(elementStyle.getPropertyValue('padding-top')),
|
||||||
bottom: parseInt(elementStyle.getPropertyValue('padding-bottom'), 10) || 0,
|
bottom: parseInt(elementStyle.getPropertyValue('padding-bottom')),
|
||||||
right: parseInt(elementStyle.getPropertyValue('padding-right'), 10) || 0,
|
right: parseInt(elementStyle.getPropertyValue('padding-right')),
|
||||||
left: parseInt(elementStyle.getPropertyValue('padding-left'), 10) || 0
|
left: parseInt(elementStyle.getPropertyValue('padding-left'))
|
||||||
};
|
};
|
||||||
const elementPaddingVer = elementPadding.top + elementPadding.bottom;
|
const elementPaddingVer = elementPadding.top + elementPadding.bottom;
|
||||||
const elementPaddingHor = elementPadding.right + elementPadding.left;
|
const elementPaddingHor = elementPadding.right + elementPadding.left;
|
||||||
|
|||||||
@@ -15,8 +15,8 @@
|
|||||||
"../../../node_modules/@types/mocha"
|
"../../../node_modules/@types/mocha"
|
||||||
],
|
],
|
||||||
"paths": {
|
"paths": {
|
||||||
"browser/*": [
|
"target-browser/*": [
|
||||||
"../../../src/browser/*"
|
"../../../src/target-browser/*"
|
||||||
],
|
],
|
||||||
"@xterm/addon-fit": [
|
"@xterm/addon-fit": [
|
||||||
"../typings/addon-fit.d.ts"
|
"../typings/addon-fit.d.ts"
|
||||||
@@ -29,7 +29,7 @@
|
|||||||
],
|
],
|
||||||
"references": [
|
"references": [
|
||||||
{
|
{
|
||||||
"path": "../../../src/browser"
|
"path": "../../../src/target-browser"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,10 +11,11 @@
|
|||||||
"removeComments": true,
|
"removeComments": true,
|
||||||
"paths": {
|
"paths": {
|
||||||
"common/*": [
|
"common/*": [
|
||||||
"../../../src/common/*"
|
"../../../src/primitives/*",
|
||||||
|
"../../../src/runtime/*",
|
||||||
],
|
],
|
||||||
"browser/*": [
|
"target-browser/*": [
|
||||||
"../../../src/browser/*"
|
"../../../src/target-browser/*"
|
||||||
],
|
],
|
||||||
"*": [
|
"*": [
|
||||||
"./*"
|
"./*"
|
||||||
@@ -31,10 +32,10 @@
|
|||||||
],
|
],
|
||||||
"references": [
|
"references": [
|
||||||
{
|
{
|
||||||
"path": "../../../src/common"
|
"path": "../../../src"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "../../../src/browser"
|
"path": "../../../src/target-browser"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "../../../test/playwright"
|
"path": "../../../test/playwright"
|
||||||
|
|||||||
@@ -222,8 +222,8 @@ export class IIPHandler implements IOscHandler, IResetHandler {
|
|||||||
|
|
||||||
private _dim(s: string, total: number, cdim: number): number {
|
private _dim(s: string, total: number, cdim: number): number {
|
||||||
if (s === 'auto') return 0;
|
if (s === 'auto') return 0;
|
||||||
if (s.endsWith('%')) return parseInt(s.slice(0, -1), 10) * total / 100;
|
if (s.endsWith('%')) return parseInt(s.slice(0, -1)) * total / 100;
|
||||||
if (s.endsWith('px')) return parseInt(s.slice(0, -2), 10);
|
if (s.endsWith('px')) return parseInt(s.slice(0, -2));
|
||||||
return parseInt(s, 10) * cdim;
|
return parseInt(s) * cdim;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
* @license MIT
|
* @license MIT
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { IAddImageOpts } from './Types';
|
import { IAddImageOpts } from 'Types';
|
||||||
import { ImageStorage } from './ImageStorage';
|
import { ImageStorage } from './ImageStorage';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -9,11 +9,10 @@ import { IDisposable, IMarker, Terminal } from '@xterm/xterm';
|
|||||||
import { Attributes, BgFlags, Content, ExtFlags, UnderlineStyle } from 'common/buffer/Constants';
|
import { Attributes, BgFlags, Content, ExtFlags, UnderlineStyle } from 'common/buffer/Constants';
|
||||||
import type { AttributeData } from 'common/buffer/AttributeData';
|
import type { AttributeData } from 'common/buffer/AttributeData';
|
||||||
import type { IParams, IDcsHandler, IOscHandler, IApcHandler, IEscapeSequenceParser } from 'common/parser/Types';
|
import type { IParams, IDcsHandler, IOscHandler, IApcHandler, IEscapeSequenceParser } from 'common/parser/Types';
|
||||||
import type { IInputHandler } from 'common/Types';
|
import type { IBufferLine, IExtendedAttrs, IInputHandler } from 'common/Types';
|
||||||
import type { IBufferLine, IExtendedAttrs } from 'common/buffer/Types';
|
import type { ITerminal, ReadonlyColorSet } from 'target-browser/Types';
|
||||||
import type { ITerminal, ReadonlyColorSet } from 'browser/Types';
|
import type { IRenderDimensions } from 'target-browser/renderer/shared/Types';
|
||||||
import type { IRenderDimensions } from 'browser/renderer/shared/Types';
|
import type { ICoreBrowserService, IRenderService, IThemeService } from 'target-browser/services/Services';
|
||||||
import type { ICoreBrowserService, IRenderService, IThemeService } from 'browser/services/Services';
|
|
||||||
|
|
||||||
export const enum Cell {
|
export const enum Cell {
|
||||||
CONTENT = 0, // codepoint and wcwidth information (enum Content)
|
CONTENT = 0, // codepoint and wcwidth information (enum Content)
|
||||||
|
|||||||
@@ -168,7 +168,7 @@ export function parseKittyCommand(data: string): IKittyCommand {
|
|||||||
cmd.deleteSelector = value;
|
cmd.deleteSelector = value;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
const numValue = parseInt(value, 10);
|
const numValue = parseInt(value);
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case KittyKey.FORMAT: cmd.format = numValue; break;
|
case KittyKey.FORMAT: cmd.format = numValue; break;
|
||||||
case KittyKey.ID: cmd.id = numValue; break;
|
case KittyKey.ID: cmd.id = numValue; break;
|
||||||
|
|||||||
@@ -12,8 +12,11 @@
|
|||||||
"../../../node_modules/@types/mocha"
|
"../../../node_modules/@types/mocha"
|
||||||
],
|
],
|
||||||
"paths": {
|
"paths": {
|
||||||
"browser/*": [ "../../../src/browser/*" ],
|
"target-browser/*": [ "../../../src/target-browser/*" ],
|
||||||
"common/*": [ "../../../src/common/*" ],
|
"common/*": [
|
||||||
|
"../../../src/primitives/*",
|
||||||
|
"../../../src/runtime/*",
|
||||||
|
],
|
||||||
"@xterm/addon-image": [ "../typings/addon-image.d.ts" ],
|
"@xterm/addon-image": [ "../typings/addon-image.d.ts" ],
|
||||||
"*": [ "./*" ]
|
"*": [ "./*" ]
|
||||||
}
|
}
|
||||||
@@ -23,7 +26,7 @@
|
|||||||
"../../../typings/xterm.d.ts"
|
"../../../typings/xterm.d.ts"
|
||||||
],
|
],
|
||||||
"references": [
|
"references": [
|
||||||
{ "path": "../../../src/browser" },
|
{ "path": "../../../src/target-browser" },
|
||||||
{ "path": "../../../src/common" }
|
{ "path": "../../../src" }
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,10 +11,11 @@
|
|||||||
"removeComments": true,
|
"removeComments": true,
|
||||||
"paths": {
|
"paths": {
|
||||||
"common/*": [
|
"common/*": [
|
||||||
"../../../src/common/*"
|
"../../../src/primitives/*",
|
||||||
|
"../../../src/runtime/*",
|
||||||
],
|
],
|
||||||
"browser/*": [
|
"target-browser/*": [
|
||||||
"../../../src/browser/*"
|
"../../../src/target-browser/*"
|
||||||
],
|
],
|
||||||
"*": [
|
"*": [
|
||||||
"./*"
|
"./*"
|
||||||
@@ -31,10 +32,10 @@
|
|||||||
],
|
],
|
||||||
"references": [
|
"references": [
|
||||||
{
|
{
|
||||||
"path": "../../../src/common"
|
"path": "../../../src"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "../../../src/browser"
|
"path": "../../../src/target-browser"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "../../../test/playwright"
|
"path": "../../../test/playwright"
|
||||||
|
|||||||
@@ -25,8 +25,11 @@ const addon = {
|
|||||||
modules: ['./node_modules'],
|
modules: ['./node_modules'],
|
||||||
extensions: [ '.js' ],
|
extensions: [ '.js' ],
|
||||||
alias: {
|
alias: {
|
||||||
common: path.resolve('../../out/common'),
|
common: [
|
||||||
browser: path.resolve('../../out/browser'),
|
path.resolve('../../out/runtime'),
|
||||||
|
path.resolve('../../out/primitives'),
|
||||||
|
],
|
||||||
|
browser: path.resolve('../../out/target-browser'),
|
||||||
vs: path.resolve('../../out/vs')
|
vs: path.resolve('../../out/vs')
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ const CACHE_SIZE = 100000;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Enable ligature support for the provided Terminal instance. To function
|
* Enable ligature support for the provided Terminal instance. To function
|
||||||
* properly, this must be called after `open()` is called on the terminal. If
|
* properly, this must be called after `open()` is called on the therminal. If
|
||||||
* the font currently in use supports ligatures, the terminal will automatically
|
* the font currently in use supports ligatures, the terminal will automatically
|
||||||
* start to render them.
|
* start to render them.
|
||||||
* @param term Terminal instance from xterm.js
|
* @param term Terminal instance from xterm.js
|
||||||
|
|||||||
@@ -16,10 +16,11 @@
|
|||||||
],
|
],
|
||||||
"paths": {
|
"paths": {
|
||||||
"common/*": [
|
"common/*": [
|
||||||
"../../../src/common/*"
|
"../../../src/primitives/*",
|
||||||
|
"../../../src/runtime/*",
|
||||||
],
|
],
|
||||||
"browser/*": [
|
"target-browser/*": [
|
||||||
"../../../src/browser/*"
|
"../../../src/target-browser/*"
|
||||||
],
|
],
|
||||||
"@xterm/addon-progress": [
|
"@xterm/addon-progress": [
|
||||||
"../typings/addon-progress.d.ts"
|
"../typings/addon-progress.d.ts"
|
||||||
@@ -32,10 +33,10 @@
|
|||||||
],
|
],
|
||||||
"references": [
|
"references": [
|
||||||
{
|
{
|
||||||
"path": "../../../src/browser"
|
"path": "../../../src/target-browser"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "../../../src/common"
|
"path": "../../../src"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,10 +11,11 @@
|
|||||||
"removeComments": true,
|
"removeComments": true,
|
||||||
"paths": {
|
"paths": {
|
||||||
"common/*": [
|
"common/*": [
|
||||||
"../../../src/common/*"
|
"../../../src/primitives/*",
|
||||||
|
"../../../src/runtime/*",
|
||||||
],
|
],
|
||||||
"browser/*": [
|
"target-browser/*": [
|
||||||
"../../../src/browser/*"
|
"../../../src/target-browser/*"
|
||||||
],
|
],
|
||||||
"*": [
|
"*": [
|
||||||
"./*"
|
"./*"
|
||||||
@@ -31,10 +32,10 @@
|
|||||||
],
|
],
|
||||||
"references": [
|
"references": [
|
||||||
{
|
{
|
||||||
"path": "../../../src/common"
|
"path": "../../../src"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "../../../src/browser"
|
"path": "../../../src/target-browser"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "../../../test/playwright"
|
"path": "../../../test/playwright"
|
||||||
|
|||||||
@@ -25,8 +25,11 @@ module.exports = {
|
|||||||
modules: ['./node_modules'],
|
modules: ['./node_modules'],
|
||||||
extensions: [ '.js' ],
|
extensions: [ '.js' ],
|
||||||
alias: {
|
alias: {
|
||||||
common: path.resolve('../../out/common'),
|
common: [
|
||||||
browser: path.resolve('../../out/browser'),
|
path.resolve('../../out/runtime'),
|
||||||
|
path.resolve('../../out/primitives'),
|
||||||
|
],
|
||||||
|
browser: path.resolve('../../out/target-browser'),
|
||||||
vs: path.resolve('../../out/vs')
|
vs: path.resolve('../../out/vs')
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
import { assert } from 'chai';
|
import { assert } from 'chai';
|
||||||
import { SearchEngine } from './SearchEngine';
|
import { SearchEngine } from './SearchEngine';
|
||||||
import { SearchLineCache } from './SearchLineCache';
|
import { SearchLineCache } from './SearchLineCache';
|
||||||
import { Terminal } from 'browser/public/Terminal';
|
import { Terminal } from 'target-browser/public/Terminal';
|
||||||
import type { ISearchOptions } from '@xterm/addon-search';
|
import type { ISearchOptions } from '@xterm/addon-search';
|
||||||
import { DisposableStore } from 'common/Lifecycle';
|
import { DisposableStore } from 'common/Lifecycle';
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
import { assert } from 'chai';
|
import { assert } from 'chai';
|
||||||
import { SearchLineCache, LineCacheEntry } from './SearchLineCache';
|
import { SearchLineCache, LineCacheEntry } from './SearchLineCache';
|
||||||
import { Terminal } from 'browser/public/Terminal';
|
import { Terminal } from 'target-browser/public/Terminal';
|
||||||
import { timeout } from 'common/Async';
|
import { timeout } from 'common/Async';
|
||||||
|
|
||||||
function writeP(terminal: Terminal, data: string): Promise<void> {
|
function writeP(terminal: Terminal, data: string): Promise<void> {
|
||||||
|
|||||||
@@ -16,10 +16,11 @@
|
|||||||
],
|
],
|
||||||
"paths": {
|
"paths": {
|
||||||
"common/*": [
|
"common/*": [
|
||||||
"../../../src/common/*"
|
"../../../src/primitives/*",
|
||||||
|
"../../../src/runtime/*",
|
||||||
],
|
],
|
||||||
"browser/*": [
|
"target-browser/*": [
|
||||||
"../../../src/browser/*"
|
"../../../src/target-browser/*"
|
||||||
],
|
],
|
||||||
"@xterm/addon-search" : [
|
"@xterm/addon-search" : [
|
||||||
"../typings/addon-search.d.ts"
|
"../typings/addon-search.d.ts"
|
||||||
@@ -32,10 +33,10 @@
|
|||||||
],
|
],
|
||||||
"references": [
|
"references": [
|
||||||
{
|
{
|
||||||
"path": "../../../src/common"
|
"path": "../../../src"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "../../../src/browser"
|
"path": "../../../src/target-browser"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,10 +11,11 @@
|
|||||||
"removeComments": true,
|
"removeComments": true,
|
||||||
"paths": {
|
"paths": {
|
||||||
"common/*": [
|
"common/*": [
|
||||||
"../../../src/common/*"
|
"../../../src/primitives/*",
|
||||||
|
"../../../src/runtime/*",
|
||||||
],
|
],
|
||||||
"browser/*": [
|
"target-browser/*": [
|
||||||
"../../../src/browser/*"
|
"../../../src/target-browser/*"
|
||||||
],
|
],
|
||||||
"*": [
|
"*": [
|
||||||
"./*"
|
"./*"
|
||||||
@@ -31,10 +32,10 @@
|
|||||||
],
|
],
|
||||||
"references": [
|
"references": [
|
||||||
{
|
{
|
||||||
"path": "../../../src/common"
|
"path": "../../../src"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "../../../src/browser"
|
"path": "../../../src/target-browser"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "../../../test/playwright"
|
"path": "../../../test/playwright"
|
||||||
|
|||||||
@@ -25,7 +25,10 @@ module.exports = {
|
|||||||
modules: ['./node_modules'],
|
modules: ['./node_modules'],
|
||||||
extensions: [ '.js' ],
|
extensions: [ '.js' ],
|
||||||
alias: {
|
alias: {
|
||||||
common: path.resolve('../../out/common'),
|
common: [
|
||||||
|
path.resolve('../../out/runtime'),
|
||||||
|
path.resolve('../../out/primitives'),
|
||||||
|
],
|
||||||
vs: path.resolve('../../out/vs')
|
vs: path.resolve('../../out/vs')
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import { perfContext, before, ThroughputRuntimeCase } from 'xterm-benchmark';
|
|||||||
|
|
||||||
import { spawn } from 'node-pty';
|
import { spawn } from 'node-pty';
|
||||||
import { Utf8ToUtf32, stringFromCodePoint } from 'common/input/TextDecoder';
|
import { Utf8ToUtf32, stringFromCodePoint } from 'common/input/TextDecoder';
|
||||||
import { Terminal } from 'browser/public/Terminal';
|
import { Terminal } from 'target-browser/public/Terminal';
|
||||||
import { SerializeAddon } from 'SerializeAddon';
|
import { SerializeAddon } from 'SerializeAddon';
|
||||||
|
|
||||||
class TestTerminal extends Terminal {
|
class TestTerminal extends Terminal {
|
||||||
|
|||||||
@@ -12,8 +12,11 @@
|
|||||||
"target": "es2021",
|
"target": "es2021",
|
||||||
"module": "nodenext",
|
"module": "nodenext",
|
||||||
"paths": {
|
"paths": {
|
||||||
"common/*": ["../../../src/common/*"],
|
"common/*": [
|
||||||
"browser/*": ["../../../src/browser/*"],
|
"../../../src/primitives/*",
|
||||||
|
"../../../src/runtime/*",
|
||||||
|
],
|
||||||
|
"target-browser/*": ["../../../src/target-browser/*"],
|
||||||
"SerializeAddon": ["../src/SerializeAddon"],
|
"SerializeAddon": ["../src/SerializeAddon"],
|
||||||
"@xterm/addon-serialize": [
|
"@xterm/addon-serialize": [
|
||||||
"../typings/addon-serialize.d.ts"
|
"../typings/addon-serialize.d.ts"
|
||||||
@@ -23,7 +26,7 @@
|
|||||||
"include": ["../**/*", "../../../typings/xterm.d.ts"],
|
"include": ["../**/*", "../../../typings/xterm.d.ts"],
|
||||||
"exclude": ["../../../**/*test.ts", "../../**/*api.ts"],
|
"exclude": ["../../../**/*test.ts", "../../**/*api.ts"],
|
||||||
"references": [
|
"references": [
|
||||||
{ "path": "../../../src/common" },
|
{ "path": "../../../src" },
|
||||||
{ "path": "../../../src/browser" }
|
{ "path": "../../../src/target-browser" }
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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_modules/.bin/xterm-benchmark -r 5 -c benchmark/benchmark.json",
|
"benchmark": "NODE_PATH=../../out:./out:./out-benchmark/ ../../node_modules/.bin/xterm-benchmark -r 5 -c benchmark/benchmark.json",
|
||||||
"benchmark-baseline": "../../node_modules/.bin/xterm-benchmark -r 5 -c benchmark/benchmark.json --baseline 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-eval": "../../node_modules/.bin/xterm-benchmark -r 5 -c benchmark/benchmark.json --eval 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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,10 +6,10 @@
|
|||||||
import jsdom = require('jsdom');
|
import jsdom = require('jsdom');
|
||||||
import { assert } from 'chai';
|
import { assert } from 'chai';
|
||||||
import { SerializeAddon } from './SerializeAddon';
|
import { SerializeAddon } from './SerializeAddon';
|
||||||
import { Terminal } from 'browser/public/Terminal';
|
import { Terminal } from 'target-browser/public/Terminal';
|
||||||
import { SelectionModel } from 'browser/selection/SelectionModel';
|
import { SelectionModel } from 'target-browser/selection/SelectionModel';
|
||||||
import { IBufferService } from 'common/services/Services';
|
import { IBufferService } from 'common/services/Services';
|
||||||
import { ThemeService } from 'browser/services/ThemeService';
|
import { ThemeService } from 'target-browser/services/ThemeService';
|
||||||
|
|
||||||
function sgr(...seq: string[]): string {
|
function sgr(...seq: string[]): string {
|
||||||
return `\x1b[${seq.join(';')}m`;
|
return `\x1b[${seq.join(';')}m`;
|
||||||
|
|||||||
@@ -7,9 +7,8 @@
|
|||||||
|
|
||||||
import type { IBuffer, IBufferCell, IBufferRange, ITerminalAddon, Terminal } from '@xterm/xterm';
|
import type { IBuffer, IBufferCell, IBufferRange, ITerminalAddon, Terminal } from '@xterm/xterm';
|
||||||
import type { IHTMLSerializeOptions, SerializeAddon as ISerializeApi, ISerializeOptions, ISerializeRange } from '@xterm/addon-serialize';
|
import type { IHTMLSerializeOptions, SerializeAddon as ISerializeApi, ISerializeOptions, ISerializeRange } from '@xterm/addon-serialize';
|
||||||
import { IColor } from 'common/Types';
|
import { IAttributeData, IColor } from 'common/Types';
|
||||||
import { IAttributeData } from 'common/buffer/Types';
|
import { DEFAULT_ANSI_COLORS } from 'target-browser/Types';
|
||||||
import { DEFAULT_ANSI_COLORS } from 'browser/Types';
|
|
||||||
import { UnderlineStyle } from 'common/buffer/Constants';
|
import { UnderlineStyle } from 'common/buffer/Constants';
|
||||||
|
|
||||||
function constrain(value: number, low: number, high: number): number {
|
function constrain(value: number, low: number, high: number): number {
|
||||||
@@ -173,7 +172,7 @@ class StringSerializeHandler extends BaseSerializeHandler {
|
|||||||
private _thisRowLastSecondChar: IBufferCell = this._buffer.getNullCell();
|
private _thisRowLastSecondChar: IBufferCell = this._buffer.getNullCell();
|
||||||
private _nextRowFirstChar: IBufferCell = this._buffer.getNullCell();
|
private _nextRowFirstChar: IBufferCell = this._buffer.getNullCell();
|
||||||
protected _rowEnd(row: number, isLastRow: boolean): void {
|
protected _rowEnd(row: number, isLastRow: boolean): void {
|
||||||
// if there is colorful empty cell at line end, we must pad it back, or the color block
|
// if there is colorful empty cell at line end, whe must pad it back, or the the color block
|
||||||
// will missing
|
// will missing
|
||||||
if (this._nullCellCount > 0 && !equalBg(this._cursorStyle, this._backgroundCell)) {
|
if (this._nullCellCount > 0 && !equalBg(this._cursorStyle, this._backgroundCell)) {
|
||||||
// use clear right to set background.
|
// use clear right to set background.
|
||||||
@@ -221,7 +220,7 @@ class StringSerializeHandler extends BaseSerializeHandler {
|
|||||||
// you can't use control sequence to move cursor to (x === row)
|
// you can't use control sequence to move cursor to (x === row)
|
||||||
(thisRowLastChar.getChars() || thisRowLastChar.getWidth() === 0) &&
|
(thisRowLastChar.getChars() || thisRowLastChar.getWidth() === 0) &&
|
||||||
// change background of the first wrapped cell also affects BCE
|
// change background of the first wrapped cell also affects BCE
|
||||||
// so we mark it as invalid to simplify the process to determine line separator
|
// so we mark it as invalid to simply the process to determine line separator
|
||||||
equalBg(thisRowLastChar, nextRowFirstChar)
|
equalBg(thisRowLastChar, nextRowFirstChar)
|
||||||
) {
|
) {
|
||||||
isValid = true;
|
isValid = true;
|
||||||
@@ -233,7 +232,7 @@ class StringSerializeHandler extends BaseSerializeHandler {
|
|||||||
isNextRowFirstCharDoubleWidth &&
|
isNextRowFirstCharDoubleWidth &&
|
||||||
(thisRowLastSecondChar.getChars() || thisRowLastSecondChar.getWidth() === 0) &&
|
(thisRowLastSecondChar.getChars() || thisRowLastSecondChar.getWidth() === 0) &&
|
||||||
// change background of the first wrapped cell also affects BCE
|
// change background of the first wrapped cell also affects BCE
|
||||||
// so we mark it as invalid to simplify the process to determine line separator
|
// so we mark it as invalid to simply the process to determine line separator
|
||||||
equalBg(thisRowLastChar, nextRowFirstChar) &&
|
equalBg(thisRowLastChar, nextRowFirstChar) &&
|
||||||
equalBg(thisRowLastSecondChar, nextRowFirstChar)
|
equalBg(thisRowLastSecondChar, nextRowFirstChar)
|
||||||
) {
|
) {
|
||||||
|
|||||||
@@ -12,10 +12,11 @@
|
|||||||
"removeComments": true,
|
"removeComments": true,
|
||||||
"paths": {
|
"paths": {
|
||||||
"common/*": [
|
"common/*": [
|
||||||
"../../../src/common/*"
|
"../../../src/primitives/*",
|
||||||
|
"../../../src/runtime/*",
|
||||||
],
|
],
|
||||||
"browser/*": [
|
"target-browser/*": [
|
||||||
"../../../src/browser/*"
|
"../../../src/target-browser/*"
|
||||||
],
|
],
|
||||||
"@xterm/addon-serialize": [
|
"@xterm/addon-serialize": [
|
||||||
"../typings/addon-serialize.d.ts"
|
"../typings/addon-serialize.d.ts"
|
||||||
@@ -33,10 +34,10 @@
|
|||||||
],
|
],
|
||||||
"references": [
|
"references": [
|
||||||
{
|
{
|
||||||
"path": "../../../src/common"
|
"path": "../../../src"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "../../../src/browser"
|
"path": "../../../src/target-browser"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -192,7 +192,7 @@ test.describe('SerializeAddon', () => {
|
|||||||
const cols = 10;
|
const cols = 10;
|
||||||
const line = '+'.repeat(cols);
|
const line = '+'.repeat(cols);
|
||||||
const lines: string[] = [
|
const lines: string[] = [
|
||||||
sgr(FG_P16_GREEN) + line, // Workaround: If we clear all flags at the end, serialize will use \x1b[0m to clear instead of the specific disable sequence
|
sgr(FG_P16_GREEN) + line, // Workaround: If we clear all flags a the end, serialize will use \x1b[0m to clear instead of the sepcific disable sequence
|
||||||
sgr(INVERSE) + line,
|
sgr(INVERSE) + line,
|
||||||
sgr(BOLD) + line,
|
sgr(BOLD) + line,
|
||||||
sgr(UNDERLINED) + line,
|
sgr(UNDERLINED) + line,
|
||||||
|
|||||||
@@ -11,10 +11,11 @@
|
|||||||
"removeComments": true,
|
"removeComments": true,
|
||||||
"paths": {
|
"paths": {
|
||||||
"common/*": [
|
"common/*": [
|
||||||
"../../../src/common/*"
|
"../../../src/primitives/*",
|
||||||
|
"../../../src/runtime/*",
|
||||||
],
|
],
|
||||||
"browser/*": [
|
"target-browser/*": [
|
||||||
"../../../src/browser/*"
|
"../../../src/target-browser/*"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"strict": true,
|
"strict": true,
|
||||||
@@ -28,10 +29,10 @@
|
|||||||
],
|
],
|
||||||
"references": [
|
"references": [
|
||||||
{
|
{
|
||||||
"path": "../../../src/common"
|
"path": "../../../src"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "../../../src/browser"
|
"path": "../../../src/target-browser"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "../../../test/playwright"
|
"path": "../../../test/playwright"
|
||||||
|
|||||||
@@ -25,8 +25,11 @@ module.exports = {
|
|||||||
modules: ['./node_modules'],
|
modules: ['./node_modules'],
|
||||||
extensions: [ '.js' ],
|
extensions: [ '.js' ],
|
||||||
alias: {
|
alias: {
|
||||||
common: path.resolve('../../out/common'),
|
common: [
|
||||||
browser: path.resolve('../../out/browser')
|
path.resolve('../../out/runtime'),
|
||||||
|
path.resolve('../../out/primitives'),
|
||||||
|
],
|
||||||
|
browser: path.resolve('../../out/target-browser')
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
output: {
|
output: {
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import { perfContext, before, ThroughputRuntimeCase } from 'xterm-benchmark';
|
|||||||
|
|
||||||
import { spawn } from 'node-pty';
|
import { spawn } from 'node-pty';
|
||||||
import { Utf8ToUtf32, stringFromCodePoint } from 'common/input/TextDecoder';
|
import { Utf8ToUtf32, stringFromCodePoint } from 'common/input/TextDecoder';
|
||||||
import { CoreBrowserTerminal } from 'browser/CoreBrowserTerminal';
|
import { CoreBrowserTerminal } from 'target-browser/CoreBrowserTerminal';
|
||||||
import { UnicodeGraphemeProvider } from 'UnicodeGraphemeProvider';
|
import { UnicodeGraphemeProvider } from 'UnicodeGraphemeProvider';
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -9,8 +9,11 @@
|
|||||||
"target": "es2015",
|
"target": "es2015",
|
||||||
"module": "nodenext",
|
"module": "nodenext",
|
||||||
"paths": {
|
"paths": {
|
||||||
"common/*": ["../../../src/common/*"],
|
"common/*": [
|
||||||
"browser/*": ["../../../src/browser/*"],
|
"../../../src/primitives/*",
|
||||||
|
"../../../src/runtime/*",
|
||||||
|
],
|
||||||
|
"target-browser/*": ["../../../src/target-browser/*"],
|
||||||
"UnicodeGraphemeProvider": ["../src/UnicodeGraphemeProvider"],
|
"UnicodeGraphemeProvider": ["../src/UnicodeGraphemeProvider"],
|
||||||
"@xterm/addon-unicode-graphemes": [
|
"@xterm/addon-unicode-graphemes": [
|
||||||
"../typings/addon-unicode-graphemes.d.ts"
|
"../typings/addon-unicode-graphemes.d.ts"
|
||||||
@@ -20,7 +23,7 @@
|
|||||||
"include": ["../**/*", "../../../typings/xterm.d.ts"],
|
"include": ["../**/*", "../../../typings/xterm.d.ts"],
|
||||||
"exclude": ["../../../**/*test.ts", "../../**/*api.ts"],
|
"exclude": ["../../../**/*test.ts", "../../**/*api.ts"],
|
||||||
"references": [
|
"references": [
|
||||||
{ "path": "../../../src/common" },
|
{ "path": "../../../src" },
|
||||||
{ "path": "../../../src/browser" }
|
{ "path": "../../../src/target-browser" }
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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_modules/.bin/xterm-benchmark -r 5 -c benchmark/benchmark.json out-benchmark/benchmark/*benchmark.js",
|
"benchmark": "NODE_PATH=../../out:./out:./out-benchmark/ ../../node_modules/.bin/xterm-benchmark -r 5 -c benchmark/benchmark.json 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-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-eval": "../../node_modules/.bin/xterm-benchmark -r 5 -c benchmark/benchmark.json --eval 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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,8 +4,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { IUnicodeVersionProvider } from '@xterm/xterm';
|
import { IUnicodeVersionProvider } from '@xterm/xterm';
|
||||||
import { UnicodeCharProperties, UnicodeCharWidth } from 'common/services/Services';
|
import { createPropertyValue, extractCharKind, extractWidth } from 'common/input/UnicodeProperties';
|
||||||
import { UnicodeService } from 'common/services/UnicodeService';
|
import { UnicodeCharProperties, UnicodeCharWidth } from 'common/input/UnicodeTypes';
|
||||||
import * as UC from './third-party/UnicodeProperties';
|
import * as UC from './third-party/UnicodeProperties';
|
||||||
|
|
||||||
export class UnicodeGraphemeProvider implements IUnicodeVersionProvider {
|
export class UnicodeGraphemeProvider implements IUnicodeVersionProvider {
|
||||||
@@ -19,7 +19,7 @@ export class UnicodeGraphemeProvider implements IUnicodeVersionProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static readonly _plainNarrowProperties: UnicodeCharProperties
|
private static readonly _plainNarrowProperties: UnicodeCharProperties
|
||||||
= UnicodeService.createPropertyValue(UC.GRAPHEME_BREAK_Other, 1, false);
|
= createPropertyValue(UC.GRAPHEME_BREAK_Other, 1, false);
|
||||||
|
|
||||||
public charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties {
|
public charProperties(codepoint: number, preceding: UnicodeCharProperties): UnicodeCharProperties {
|
||||||
// Optimize the simple ASCII case, under the condition that
|
// Optimize the simple ASCII case, under the condition that
|
||||||
@@ -39,9 +39,9 @@ export class UnicodeGraphemeProvider implements IUnicodeVersionProvider {
|
|||||||
w = 1;
|
w = 1;
|
||||||
}
|
}
|
||||||
if (preceding !== 0) {
|
if (preceding !== 0) {
|
||||||
const oldWidth = UnicodeService.extractWidth(preceding);
|
const oldWidth = extractWidth(preceding);
|
||||||
if (this.handleGraphemes) {
|
if (this.handleGraphemes) {
|
||||||
charInfo = UC.shouldJoin(UnicodeService.extractCharKind(preceding), charInfo);
|
charInfo = UC.shouldJoin(extractCharKind(preceding), charInfo);
|
||||||
} else {
|
} else {
|
||||||
charInfo = w === 0 ? 1 : 0;
|
charInfo = w === 0 ? 1 : 0;
|
||||||
}
|
}
|
||||||
@@ -54,7 +54,7 @@ export class UnicodeGraphemeProvider implements IUnicodeVersionProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return UnicodeService.createPropertyValue(charInfo, w, shouldJoin);
|
return createPropertyValue(charInfo, w, shouldJoin);
|
||||||
}
|
}
|
||||||
|
|
||||||
public wcwidth(codepoint: number): UnicodeCharWidth {
|
public wcwidth(codepoint: number): UnicodeCharWidth {
|
||||||
|
|||||||
@@ -13,7 +13,8 @@
|
|||||||
"strict": true,
|
"strict": true,
|
||||||
"paths": {
|
"paths": {
|
||||||
"common/*": [
|
"common/*": [
|
||||||
"../../../src/common/*"
|
"../../../src/primitives/*",
|
||||||
|
"../../../src/runtime/*",
|
||||||
],
|
],
|
||||||
"@xterm/addon-unicode-graphemes": [
|
"@xterm/addon-unicode-graphemes": [
|
||||||
"../typings/addon-unicode-graphemes.d.ts"
|
"../typings/addon-unicode-graphemes.d.ts"
|
||||||
@@ -29,7 +30,7 @@
|
|||||||
],
|
],
|
||||||
"references": [
|
"references": [
|
||||||
{
|
{
|
||||||
"path": "../../../src/common"
|
"path": "../../../src"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,10 +11,11 @@
|
|||||||
"removeComments": true,
|
"removeComments": true,
|
||||||
"paths": {
|
"paths": {
|
||||||
"common/*": [
|
"common/*": [
|
||||||
"../../../src/common/*"
|
"../../../src/primitives/*",
|
||||||
|
"../../../src/runtime/*",
|
||||||
],
|
],
|
||||||
"browser/*": [
|
"target-browser/*": [
|
||||||
"../../../src/browser/*"
|
"../../../src/target-browser/*"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"strict": true,
|
"strict": true,
|
||||||
@@ -28,10 +29,10 @@
|
|||||||
],
|
],
|
||||||
"references": [
|
"references": [
|
||||||
{
|
{
|
||||||
"path": "../../../src/common"
|
"path": "../../../src"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "../../../src/browser"
|
"path": "../../../src/target-browser"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "../../../test/playwright"
|
"path": "../../../test/playwright"
|
||||||
|
|||||||
@@ -25,7 +25,10 @@ module.exports = {
|
|||||||
modules: ['./node_modules'],
|
modules: ['./node_modules'],
|
||||||
extensions: [ '.js' ],
|
extensions: [ '.js' ],
|
||||||
alias: {
|
alias: {
|
||||||
common: path.resolve('../../out/common'),
|
common: [
|
||||||
|
path.resolve('../../out/runtime'),
|
||||||
|
path.resolve('../../out/primitives'),
|
||||||
|
],
|
||||||
vs: path.resolve('../../out/vs')
|
vs: path.resolve('../../out/vs')
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -4,8 +4,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { IUnicodeVersionProvider } from '@xterm/xterm';
|
import { IUnicodeVersionProvider } from '@xterm/xterm';
|
||||||
import { UnicodeCharProperties, UnicodeCharWidth } from 'common/services/Services';
|
import { createPropertyValue, extractWidth } from 'common/input/UnicodeProperties';
|
||||||
import { UnicodeService } from 'common/services/UnicodeService';
|
import { UnicodeCharProperties, UnicodeCharWidth } from 'common/input/UnicodeTypes';
|
||||||
|
|
||||||
const BMP_COMBINING = [
|
const BMP_COMBINING = [
|
||||||
[0x0300, 0x036F], [0x0483, 0x0489], [0x0591, 0x05BD],
|
[0x0300, 0x036F], [0x0483, 0x0489], [0x0591, 0x05BD],
|
||||||
@@ -223,13 +223,13 @@ export class UnicodeV11 implements IUnicodeVersionProvider {
|
|||||||
let width = this.wcwidth(codepoint);
|
let width = this.wcwidth(codepoint);
|
||||||
let shouldJoin = width === 0 && preceding !== 0;
|
let shouldJoin = width === 0 && preceding !== 0;
|
||||||
if (shouldJoin) {
|
if (shouldJoin) {
|
||||||
const oldWidth = UnicodeService.extractWidth(preceding);
|
const oldWidth = extractWidth(preceding);
|
||||||
if (oldWidth === 0) {
|
if (oldWidth === 0) {
|
||||||
shouldJoin = false;
|
shouldJoin = false;
|
||||||
} else if (oldWidth > width) {
|
} else if (oldWidth > width) {
|
||||||
width = oldWidth;
|
width = oldWidth;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return UnicodeService.createPropertyValue(0, width, shouldJoin);
|
return createPropertyValue(0, width, shouldJoin);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,8 @@
|
|||||||
"strict": true,
|
"strict": true,
|
||||||
"paths": {
|
"paths": {
|
||||||
"common/*": [
|
"common/*": [
|
||||||
"../../../src/common/*"
|
"../../../src/primitives/*",
|
||||||
|
"../../../src/runtime/*",
|
||||||
],
|
],
|
||||||
"@xterm/addon-unicode11": [
|
"@xterm/addon-unicode11": [
|
||||||
"../typings/addon-unicode11.d.ts"
|
"../typings/addon-unicode11.d.ts"
|
||||||
@@ -32,7 +33,7 @@
|
|||||||
],
|
],
|
||||||
"references": [
|
"references": [
|
||||||
{
|
{
|
||||||
"path": "../../../src/common"
|
"path": "../../../src"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,10 +11,11 @@
|
|||||||
"removeComments": true,
|
"removeComments": true,
|
||||||
"paths": {
|
"paths": {
|
||||||
"common/*": [
|
"common/*": [
|
||||||
"../../../src/common/*"
|
"../../../src/primitives/*",
|
||||||
|
"../../../src/runtime/*",
|
||||||
],
|
],
|
||||||
"browser/*": [
|
"target-browser/*": [
|
||||||
"../../../src/browser/*"
|
"../../../src/target-browser/*"
|
||||||
],
|
],
|
||||||
"*": [
|
"*": [
|
||||||
"./*"
|
"./*"
|
||||||
@@ -31,10 +32,10 @@
|
|||||||
],
|
],
|
||||||
"references": [
|
"references": [
|
||||||
{
|
{
|
||||||
"path": "../../../src/common"
|
"path": "../../../src"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "../../../src/browser"
|
"path": "../../../src/target-browser"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "../../../test/playwright"
|
"path": "../../../test/playwright"
|
||||||
|
|||||||
@@ -25,7 +25,10 @@ module.exports = {
|
|||||||
modules: ['./node_modules'],
|
modules: ['./node_modules'],
|
||||||
extensions: [ '.js' ],
|
extensions: [ '.js' ],
|
||||||
alias: {
|
alias: {
|
||||||
common: path.resolve('../../out/common'),
|
common: [
|
||||||
|
path.resolve('../../out/runtime'),
|
||||||
|
path.resolve('../../out/primitives'),
|
||||||
|
],
|
||||||
vs: path.resolve('../../out/vs')
|
vs: path.resolve('../../out/vs')
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -11,10 +11,11 @@
|
|||||||
"removeComments": true,
|
"removeComments": true,
|
||||||
"paths": {
|
"paths": {
|
||||||
"common/*": [
|
"common/*": [
|
||||||
"../../../src/common/*"
|
"../../../src/primitives/*",
|
||||||
|
"../../../src/runtime/*",
|
||||||
],
|
],
|
||||||
"browser/*": [
|
"target-browser/*": [
|
||||||
"../../../src/browser/*"
|
"../../../src/target-browser/*"
|
||||||
],
|
],
|
||||||
"*": [
|
"*": [
|
||||||
"./*"
|
"./*"
|
||||||
@@ -31,10 +32,10 @@
|
|||||||
],
|
],
|
||||||
"references": [
|
"references": [
|
||||||
{
|
{
|
||||||
"path": "../../../src/common"
|
"path": "../../../src"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "../../../src/browser"
|
"path": "../../../src/target-browser"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "../../../test/playwright"
|
"path": "../../../test/playwright"
|
||||||
|
|||||||
@@ -11,10 +11,11 @@
|
|||||||
"removeComments": true,
|
"removeComments": true,
|
||||||
"paths": {
|
"paths": {
|
||||||
"common/*": [
|
"common/*": [
|
||||||
"../../../src/common/*"
|
"../../../src/primitives/*",
|
||||||
|
"../../../src/runtime/*",
|
||||||
],
|
],
|
||||||
"browser/*": [
|
"target-browser/*": [
|
||||||
"../../../src/browser/*"
|
"../../../src/target-browser/*"
|
||||||
],
|
],
|
||||||
"*": [
|
"*": [
|
||||||
"./*"
|
"./*"
|
||||||
@@ -31,10 +32,10 @@
|
|||||||
],
|
],
|
||||||
"references": [
|
"references": [
|
||||||
{
|
{
|
||||||
"path": "../../../src/common"
|
"path": "../../../src"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "../../../src/browser"
|
"path": "../../../src/target-browser"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "../../../test/playwright"
|
"path": "../../../test/playwright"
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
import { ISelectionRenderModel } from 'browser/renderer/shared/Types';
|
import { ISelectionRenderModel } from 'target-browser/renderer/shared/Types';
|
||||||
import { ICoreBrowserService, IThemeService } from 'browser/services/Services';
|
import { ICoreBrowserService, IThemeService } from 'target-browser/services/Services';
|
||||||
import { ReadonlyColorSet } from 'browser/Types';
|
import { ReadonlyColorSet } from 'target-browser/Types';
|
||||||
import { Attributes, BgFlags, ExtFlags, FgFlags, NULL_CELL_CODE, UnderlineStyle } from 'common/buffer/Constants';
|
import { Attributes, BgFlags, ExtFlags, FgFlags, NULL_CELL_CODE, UnderlineStyle } from 'common/buffer/Constants';
|
||||||
import { IDecorationService, IOptionsService } from 'common/services/Services';
|
import { IDecorationService, IOptionsService } from 'common/services/Services';
|
||||||
import { ICellData } from 'common/buffer/Types';
|
import { ICellData } from 'common/Types';
|
||||||
import { Terminal } from '@xterm/xterm';
|
import { Terminal } from '@xterm/xterm';
|
||||||
import { rgba } from 'common/Color';
|
import { rgba } from 'common/Color';
|
||||||
import { treatGlyphAsBackgroundColor } from 'browser/renderer/shared/RendererUtils';
|
import { treatGlyphAsBackgroundColor } from 'target-browser/renderer/shared/RendererUtils';
|
||||||
import { blockPatternCodepoints } from './customGlyphs/CustomGlyphDefinitions';
|
import { blockPatternCodepoints } from './customGlyphs/CustomGlyphDefinitions';
|
||||||
|
|
||||||
// Work variables to avoid garbage collection
|
// Work variables to avoid garbage collection
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
import { TextureAtlas } from './TextureAtlas';
|
import { TextureAtlas } from './TextureAtlas';
|
||||||
import { ITerminalOptions, Terminal } from '@xterm/xterm';
|
import { ITerminalOptions, Terminal } from '@xterm/xterm';
|
||||||
import { ITerminal, ReadonlyColorSet } from 'browser/Types';
|
import { ITerminal, ReadonlyColorSet } from 'target-browser/Types';
|
||||||
import { ICharAtlasConfig, ITextureAtlas } from './Types';
|
import { ICharAtlasConfig, ITextureAtlas } from './Types';
|
||||||
import { generateConfig, configEquals } from './CharAtlasUtils';
|
import { generateConfig, configEquals } from './CharAtlasUtils';
|
||||||
import type { ILogService } from 'common/services/Services';
|
import type { ILogService } from 'common/services/Services';
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
import { ICharAtlasConfig } from './Types';
|
import { ICharAtlasConfig } from './Types';
|
||||||
import { Attributes } from 'common/buffer/Constants';
|
import { Attributes } from 'common/buffer/Constants';
|
||||||
import { ITerminalOptions } from '@xterm/xterm';
|
import { ITerminalOptions } from '@xterm/xterm';
|
||||||
import { IColorSet, ReadonlyColorSet } from 'browser/Types';
|
import { IColorSet, ReadonlyColorSet } from 'target-browser/Types';
|
||||||
import { NULL_COLOR } from 'common/Color';
|
import { NULL_COLOR } from 'common/Color';
|
||||||
|
|
||||||
export function generateConfig(deviceCellWidth: number, deviceCellHeight: number, deviceCharWidth: number, deviceCharHeight: number, options: Required<ITerminalOptions>, colors: ReadonlyColorSet, devicePixelRatio: number, deviceMaxTextureSize: number, customGlyphs: boolean = true): ICharAtlasConfig {
|
export function generateConfig(deviceCellWidth: number, deviceCellHeight: number, deviceCharWidth: number, deviceCharHeight: number, options: Required<ITerminalOptions>, colors: ReadonlyColorSet, devicePixelRatio: number, deviceMaxTextureSize: number, customGlyphs: boolean = true): ICharAtlasConfig {
|
||||||
|
|||||||
@@ -3,8 +3,8 @@
|
|||||||
* @license MIT
|
* @license MIT
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { RendererConstants } from 'browser/renderer/shared/Constants';
|
import { RendererConstants } from 'target-browser/renderer/shared/Constants';
|
||||||
import { ICoreBrowserService } from 'browser/services/Services';
|
import { ICoreBrowserService } from 'target-browser/services/Services';
|
||||||
|
|
||||||
const enum Constants {
|
const enum Constants {
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -3,14 +3,14 @@
|
|||||||
* @license MIT
|
* @license MIT
|
||||||
*/
|
*/
|
||||||
import { TextureAtlas } from './TextureAtlas';
|
import { TextureAtlas } from './TextureAtlas';
|
||||||
import { IRenderDimensions } from 'browser/renderer/shared/Types';
|
import { IRenderDimensions } from 'target-browser/renderer/shared/Types';
|
||||||
import { NULL_CELL_CODE } from 'common/buffer/Constants';
|
import { NULL_CELL_CODE } from 'common/buffer/Constants';
|
||||||
import { Disposable, toDisposable } from 'common/Lifecycle';
|
import { Disposable, toDisposable } from 'common/Lifecycle';
|
||||||
import { Terminal } from '@xterm/xterm';
|
import { Terminal } from '@xterm/xterm';
|
||||||
import { IRenderModel, IWebGL2RenderingContext, IWebGLVertexArrayObject, type IRasterizedGlyph, type ITextureAtlas } from './Types';
|
import { IRenderModel, IWebGL2RenderingContext, IWebGLVertexArrayObject, type IRasterizedGlyph, type ITextureAtlas } from './Types';
|
||||||
import { createProgram, GLTexture, PROJECTION_MATRIX } from './WebglUtils';
|
import { createProgram, GLTexture, PROJECTION_MATRIX } from './WebglUtils';
|
||||||
import type { ILogService, IOptionsService } from 'common/services/Services';
|
import type { ILogService, IOptionsService } from 'common/services/Services';
|
||||||
import { allowRescaling, throwIfFalsy } from 'browser/renderer/shared/RendererUtils';
|
import { allowRescaling, throwIfFalsy } from 'target-browser/renderer/shared/RendererUtils';
|
||||||
|
|
||||||
interface IVertices {
|
interface IVertices {
|
||||||
attributes: Float32Array;
|
attributes: Float32Array;
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
* @license MIT
|
* @license MIT
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { IRenderDimensions } from 'browser/renderer/shared/Types';
|
import { IRenderDimensions } from 'target-browser/renderer/shared/Types';
|
||||||
import { IThemeService } from 'browser/services/Services';
|
import { IThemeService } from 'target-browser/services/Services';
|
||||||
import { ReadonlyColorSet } from 'browser/Types';
|
import { ReadonlyColorSet } from 'target-browser/Types';
|
||||||
import { Attributes, FgFlags } from 'common/buffer/Constants';
|
import { Attributes, FgFlags } from 'common/buffer/Constants';
|
||||||
import { Disposable, toDisposable } from 'common/Lifecycle';
|
import { Disposable, toDisposable } from 'common/Lifecycle';
|
||||||
import { IColor } from 'common/Types';
|
import { IColor } from 'common/Types';
|
||||||
@@ -13,7 +13,7 @@ import { Terminal } from '@xterm/xterm';
|
|||||||
import { RenderModelConstants } from './RenderModel';
|
import { RenderModelConstants } from './RenderModel';
|
||||||
import { IRenderModel, IWebGL2RenderingContext, IWebGLVertexArrayObject } from './Types';
|
import { IRenderModel, IWebGL2RenderingContext, IWebGLVertexArrayObject } from './Types';
|
||||||
import { createProgram, expandFloat32Array, PROJECTION_MATRIX } from './WebglUtils';
|
import { createProgram, expandFloat32Array, PROJECTION_MATRIX } from './WebglUtils';
|
||||||
import { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';
|
import { throwIfFalsy } from 'target-browser/renderer/shared/RendererUtils';
|
||||||
import type { ILogService } from 'common/services/Services';
|
import type { ILogService } from 'common/services/Services';
|
||||||
|
|
||||||
const enum VertexAttribLocations {
|
const enum VertexAttribLocations {
|
||||||
|
|||||||
@@ -4,8 +4,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { ICursorRenderModel, IRenderModel } from './Types';
|
import { ICursorRenderModel, IRenderModel } from './Types';
|
||||||
import { ISelectionRenderModel } from 'browser/renderer/shared/Types';
|
import { ISelectionRenderModel } from 'target-browser/renderer/shared/Types';
|
||||||
import { createSelectionRenderModel } from 'browser/renderer/shared/SelectionRenderModel';
|
import { createSelectionRenderModel } from 'target-browser/renderer/shared/SelectionRenderModel';
|
||||||
|
|
||||||
export const enum RenderModelConstants {
|
export const enum RenderModelConstants {
|
||||||
INDICIES_PER_CELL = 4,
|
INDICIES_PER_CELL = 4,
|
||||||
|
|||||||
@@ -3,10 +3,10 @@
|
|||||||
* @license MIT
|
* @license MIT
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { IColorContrastCache } from 'browser/Types';
|
import { IColorContrastCache } from 'target-browser/Types';
|
||||||
import { DIM_OPACITY, TEXT_BASELINE } from './Constants';
|
import { DIM_OPACITY, TEXT_BASELINE } from './Constants';
|
||||||
import { tryDrawCustomGlyph } from './customGlyphs/CustomGlyphRasterizer';
|
import { tryDrawCustomGlyph } from './customGlyphs/CustomGlyphRasterizer';
|
||||||
import { computeNextVariantOffset, treatGlyphAsBackgroundColor, isPowerlineGlyph, isRestrictedPowerlineGlyph, throwIfFalsy } from 'browser/renderer/shared/RendererUtils';
|
import { computeNextVariantOffset, treatGlyphAsBackgroundColor, isPowerlineGlyph, isRestrictedPowerlineGlyph, throwIfFalsy } from 'target-browser/renderer/shared/RendererUtils';
|
||||||
import { IBoundingBox, ICharAtlasConfig, IRasterizedGlyph, ITextureAtlas } from './Types';
|
import { IBoundingBox, ICharAtlasConfig, IRasterizedGlyph, ITextureAtlas } from './Types';
|
||||||
import { NULL_COLOR, channels, color, rgba } from 'common/Color';
|
import { NULL_COLOR, channels, color, rgba } from 'common/Color';
|
||||||
import { FourKeyMap } from 'common/MultiKeyMap';
|
import { FourKeyMap } from 'common/MultiKeyMap';
|
||||||
@@ -1125,7 +1125,7 @@ function clearColor(imageData: ImageData, bg: IColor, fg: IColor, enableThreshol
|
|||||||
// were covered (fg=#8ae234, bg=#c4a000).
|
// were covered (fg=#8ae234, bg=#c4a000).
|
||||||
const threshold = Math.floor((Math.abs(r - fgR) + Math.abs(g - fgG) + Math.abs(b - fgB)) / 12);
|
const threshold = Math.floor((Math.abs(r - fgR) + Math.abs(g - fgG) + Math.abs(b - fgB)) / 12);
|
||||||
|
|
||||||
// Set alpha channel of relevant pixels to 0
|
// Set alpha channel of relevent pixels to 0
|
||||||
let isEmpty = true;
|
let isEmpty = true;
|
||||||
for (let offset = 0; offset < imageData.data.length; offset += 4) {
|
for (let offset = 0; offset < imageData.data.length; offset += 4) {
|
||||||
// Check exact match
|
// Check exact match
|
||||||
|
|||||||
@@ -4,8 +4,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { FontWeight } from '@xterm/xterm';
|
import { FontWeight } from '@xterm/xterm';
|
||||||
import { IColorSet } from 'browser/Types';
|
import { IColorSet } from 'target-browser/Types';
|
||||||
import { ISelectionRenderModel } from 'browser/renderer/shared/Types';
|
import { ISelectionRenderModel } from 'target-browser/renderer/shared/Types';
|
||||||
import { CursorInactiveStyle, CursorStyle, type IDisposable } from 'common/Types';
|
import { CursorInactiveStyle, CursorStyle, type IDisposable } from 'common/Types';
|
||||||
import type { IEvent } from 'common/Event';
|
import type { IEvent } from 'common/Event';
|
||||||
|
|
||||||
|
|||||||
@@ -5,8 +5,8 @@
|
|||||||
|
|
||||||
import type { ITerminalAddon, Terminal } from '@xterm/xterm';
|
import type { ITerminalAddon, Terminal } from '@xterm/xterm';
|
||||||
import type { IWebglAddonOptions, WebglAddon as IWebglApi } from '@xterm/addon-webgl';
|
import type { IWebglAddonOptions, WebglAddon as IWebglApi } from '@xterm/addon-webgl';
|
||||||
import { ICharacterJoinerService, ICharSizeService, ICoreBrowserService, IRenderService, IThemeService } from 'browser/services/Services';
|
import { ICharacterJoinerService, ICharSizeService, ICoreBrowserService, IRenderService, IThemeService } from 'target-browser/services/Services';
|
||||||
import { ITerminal } from 'browser/Types';
|
import { ITerminal } from 'target-browser/Types';
|
||||||
import { Disposable, toDisposable } from 'common/Lifecycle';
|
import { Disposable, toDisposable } from 'common/Lifecycle';
|
||||||
import { getSafariVersion, isSafari } from 'common/Platform';
|
import { getSafariVersion, isSafari } from 'common/Platform';
|
||||||
import { ICoreService, IDecorationService, ILogService, IOptionsService } from 'common/services/Services';
|
import { ICoreService, IDecorationService, ILogService, IOptionsService } from 'common/services/Services';
|
||||||
@@ -40,7 +40,7 @@ export class WebglAddon extends Disposable implements ITerminalAddon, IWebglApi
|
|||||||
};
|
};
|
||||||
const gl = document.createElement('canvas').getContext('webgl2', contextAttributes) as IWebGL2RenderingContext;
|
const gl = document.createElement('canvas').getContext('webgl2', contextAttributes) as IWebGL2RenderingContext;
|
||||||
if (!gl) {
|
if (!gl) {
|
||||||
throw new Error('WebGL2 is only supported on Safari 16 and above');
|
throw new Error('Webgl2 is only supported on Safari 16 and above');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
super();
|
super();
|
||||||
|
|||||||
@@ -3,18 +3,18 @@
|
|||||||
* @license MIT
|
* @license MIT
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { ITerminal } from 'browser/Types';
|
import { ITerminal } from 'target-browser/Types';
|
||||||
import { CellColorResolver } from './CellColorResolver';
|
import { CellColorResolver } from './CellColorResolver';
|
||||||
import { acquireTextureAtlas, removeTerminalFromCache } from './CharAtlasCache';
|
import { acquireTextureAtlas, removeTerminalFromCache } from './CharAtlasCache';
|
||||||
import { CursorBlinkStateManager } from './CursorBlinkStateManager';
|
import { CursorBlinkStateManager } from './CursorBlinkStateManager';
|
||||||
import { observeDevicePixelDimensions } from './DevicePixelObserver';
|
import { observeDevicePixelDimensions } from './DevicePixelObserver';
|
||||||
import { IRenderDimensions, IRenderer, IRequestRedrawEvent } from 'browser/renderer/shared/Types';
|
import { IRenderDimensions, IRenderer, IRequestRedrawEvent } from 'target-browser/renderer/shared/Types';
|
||||||
import { ICharSizeService, ICharacterJoinerService, ICoreBrowserService, IThemeService } from 'browser/services/Services';
|
import { ICharSizeService, ICharacterJoinerService, ICoreBrowserService, IThemeService } from 'target-browser/services/Services';
|
||||||
import { CharData, IBufferLine, ICellData } from 'common/buffer/Types';
|
import { CharData, IBufferLine, ICellData } from 'common/Types';
|
||||||
import { AttributeData } from 'common/buffer/AttributeData';
|
import { AttributeData } from 'common/buffer/AttributeData';
|
||||||
import { CellData } from 'common/buffer/CellData';
|
import { CellData } from 'common/buffer/CellData';
|
||||||
import { Attributes, Content, FgFlags, NULL_CELL_CHAR, NULL_CELL_CODE } from 'common/buffer/Constants';
|
import { Attributes, Content, FgFlags, NULL_CELL_CHAR, NULL_CELL_CODE } from 'common/buffer/Constants';
|
||||||
import { TextBlinkStateManager } from 'browser/renderer/shared/TextBlinkStateManager';
|
import { TextBlinkStateManager } from 'target-browser/renderer/shared/TextBlinkStateManager';
|
||||||
import { ICoreService, IDecorationService, ILogService, IOptionsService } from 'common/services/Services';
|
import { ICoreService, IDecorationService, ILogService, IOptionsService } from 'common/services/Services';
|
||||||
import { Terminal } from '@xterm/xterm';
|
import { Terminal } from '@xterm/xterm';
|
||||||
import { GlyphRenderer } from './GlyphRenderer';
|
import { GlyphRenderer } from './GlyphRenderer';
|
||||||
@@ -24,9 +24,9 @@ import { IWebGL2RenderingContext, type ITextureAtlas } from './Types';
|
|||||||
import { LinkRenderLayer } from './renderLayer/LinkRenderLayer';
|
import { LinkRenderLayer } from './renderLayer/LinkRenderLayer';
|
||||||
import { IRenderLayer } from './renderLayer/Types';
|
import { IRenderLayer } from './renderLayer/Types';
|
||||||
import { Emitter, EventUtils } from 'common/Event';
|
import { Emitter, EventUtils } from 'common/Event';
|
||||||
import { addDisposableListener } from 'browser/Dom';
|
import { addDisposableListener } from 'target-browser/Dom';
|
||||||
import { combinedDisposable, Disposable, MutableDisposable, toDisposable } from 'common/Lifecycle';
|
import { combinedDisposable, Disposable, MutableDisposable, toDisposable } from 'common/Lifecycle';
|
||||||
import { createRenderDimensions } from 'browser/renderer/shared/RendererUtils';
|
import { createRenderDimensions } from 'target-browser/renderer/shared/RendererUtils';
|
||||||
|
|
||||||
const enum Constants {
|
const enum Constants {
|
||||||
MERGE_RETRY_LIMIT = 32
|
MERGE_RETRY_LIMIT = 32
|
||||||
@@ -664,10 +664,10 @@ export class WebglRenderer extends Disposable implements IRenderer {
|
|||||||
this.dimensions.device.canvas.height = this._terminal.rows * this.dimensions.device.cell.height;
|
this.dimensions.device.canvas.height = this._terminal.rows * this.dimensions.device.cell.height;
|
||||||
this.dimensions.device.canvas.width = this._terminal.cols * this.dimensions.device.cell.width;
|
this.dimensions.device.canvas.width = this._terminal.cols * this.dimensions.device.cell.width;
|
||||||
|
|
||||||
// The size of the canvas on the page. It's important that this rounds to nearest integer
|
// The the size of the canvas on the page. It's important that this rounds to nearest integer
|
||||||
// and not ceils as browsers often have floating point precision issues where
|
// and not ceils as browsers often have floating point precision issues where
|
||||||
// `window.devicePixelRatio` ends up being something like `1.100000023841858` for example, when
|
// `window.devicePixelRatio` ends up being something like `1.100000023841858` for example, when
|
||||||
// it's actually 1.1. Ceiling may cause blurriness as the backing canvas image is 1 pixel too
|
// it's actually 1.1. Ceiling may causes blurriness as the backing canvas image is 1 pixel too
|
||||||
// large for the canvas element size.
|
// large for the canvas element size.
|
||||||
this.dimensions.css.canvas.height = Math.round(this.dimensions.device.canvas.height / this._devicePixelRatio);
|
this.dimensions.css.canvas.height = Math.round(this.dimensions.device.canvas.height / this._devicePixelRatio);
|
||||||
this.dimensions.css.canvas.width = Math.round(this.dimensions.device.canvas.width / this._devicePixelRatio);
|
this.dimensions.css.canvas.width = Math.round(this.dimensions.device.canvas.width / this._devicePixelRatio);
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
* @license MIT
|
* @license MIT
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';
|
import { throwIfFalsy } from 'target-browser/renderer/shared/RendererUtils';
|
||||||
import type { ILogService } from 'common/services/Services';
|
import type { ILogService } from 'common/services/Services';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|
||||||
/* oxlint-disable @stylistic/max-len -- generated glyph path data */
|
/* eslint-disable max-len */
|
||||||
|
|
||||||
const enum Shapes {
|
const enum Shapes {
|
||||||
/** │ */ TOP_TO_BOTTOM = 'M.5,0 L.5,1',
|
/** │ */ TOP_TO_BOTTOM = 'M.5,0 L.5,1',
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
* @license MIT
|
* @license MIT
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';
|
import { throwIfFalsy } from 'target-browser/renderer/shared/RendererUtils';
|
||||||
import type { ILogService } from 'common/services/Services';
|
import type { ILogService } from 'common/services/Services';
|
||||||
import { customGlyphDefinitions } from './CustomGlyphDefinitions';
|
import { customGlyphDefinitions } from './CustomGlyphDefinitions';
|
||||||
import { CustomGlyphDefinitionType, CustomGlyphScaleType, CustomGlyphVectorType, type CustomGlyphDefinitionPart, type CustomGlyphPathDrawFunctionDefinition, type CustomGlyphPatternDefinition, type ICustomGlyphSolidOctantBlockVector, type ICustomGlyphVectorShape } from './Types';
|
import { CustomGlyphDefinitionType, CustomGlyphScaleType, CustomGlyphVectorType, type CustomGlyphDefinitionPart, type CustomGlyphPathDrawFunctionDefinition, type CustomGlyphPatternDefinition, type ICustomGlyphSolidOctantBlockVector, type ICustomGlyphVectorShape } from './Types';
|
||||||
@@ -221,8 +221,8 @@ function drawPathDefinitionCharacter(
|
|||||||
const rx = parseFloat(args[0]) * deviceCellWidth;
|
const rx = parseFloat(args[0]) * deviceCellWidth;
|
||||||
const ry = parseFloat(args[1]) * deviceCellHeight;
|
const ry = parseFloat(args[1]) * deviceCellHeight;
|
||||||
const xAxisRotation = parseFloat(args[2]) * Math.PI / 180;
|
const xAxisRotation = parseFloat(args[2]) * Math.PI / 180;
|
||||||
const largeArcFlag = parseInt(args[3], 10);
|
const largeArcFlag = parseInt(args[3]);
|
||||||
const sweepFlag = parseInt(args[4], 10);
|
const sweepFlag = parseInt(args[4]);
|
||||||
const x = xOffset + parseFloat(args[5]) * deviceCellWidth;
|
const x = xOffset + parseFloat(args[5]) * deviceCellWidth;
|
||||||
const y = yOffset + parseFloat(args[6]) * deviceCellHeight;
|
const y = yOffset + parseFloat(args[6]) * deviceCellHeight;
|
||||||
drawSvgArc(ctx, currentX, currentY, rx, ry, xAxisRotation, largeArcFlag, sweepFlag, x, y);
|
drawSvgArc(ctx, currentX, currentY, rx, ry, xAxisRotation, largeArcFlag, sweepFlag, x, y);
|
||||||
|
|||||||
@@ -3,16 +3,16 @@
|
|||||||
* @license MIT
|
* @license MIT
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { ReadonlyColorSet } from 'browser/Types';
|
import { ReadonlyColorSet } from 'target-browser/Types';
|
||||||
import { acquireTextureAtlas } from '../CharAtlasCache';
|
import { acquireTextureAtlas } from '../CharAtlasCache';
|
||||||
import { IRenderDimensions } from 'browser/renderer/shared/Types';
|
import { IRenderDimensions } from 'target-browser/renderer/shared/Types';
|
||||||
import { ICoreBrowserService, IThemeService } from 'browser/services/Services';
|
import { ICoreBrowserService, IThemeService } from 'target-browser/services/Services';
|
||||||
import { Disposable, toDisposable } from 'common/Lifecycle';
|
import { Disposable, toDisposable } from 'common/Lifecycle';
|
||||||
import { CellData } from 'common/buffer/CellData';
|
import { CellData } from 'common/buffer/CellData';
|
||||||
import { IOptionsService } from 'common/services/Services';
|
import { IOptionsService } from 'common/services/Services';
|
||||||
import { Terminal } from '@xterm/xterm';
|
import { Terminal } from '@xterm/xterm';
|
||||||
import { IRenderLayer } from './Types';
|
import { IRenderLayer } from './Types';
|
||||||
import { throwIfFalsy } from 'browser/renderer/shared/RendererUtils';
|
import { throwIfFalsy } from 'target-browser/renderer/shared/RendererUtils';
|
||||||
import { TEXT_BASELINE } from '../Constants';
|
import { TEXT_BASELINE } from '../Constants';
|
||||||
import type { ITextureAtlas } from '../Types';
|
import type { ITextureAtlas } from '../Types';
|
||||||
|
|
||||||
|
|||||||
@@ -4,10 +4,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { is256Color } from '../CharAtlasUtils';
|
import { is256Color } from '../CharAtlasUtils';
|
||||||
import { INVERTED_DEFAULT_COLOR } from 'browser/renderer/shared/Constants';
|
import { INVERTED_DEFAULT_COLOR } from 'target-browser/renderer/shared/Constants';
|
||||||
import { IRenderDimensions } from 'browser/renderer/shared/Types';
|
import { IRenderDimensions } from 'target-browser/renderer/shared/Types';
|
||||||
import { ICoreBrowserService, IThemeService } from 'browser/services/Services';
|
import { ICoreBrowserService, IThemeService } from 'target-browser/services/Services';
|
||||||
import { ILinkifier2, ILinkifierEvent } from 'browser/Types';
|
import { ILinkifier2, ILinkifierEvent } from 'target-browser/Types';
|
||||||
import { IOptionsService } from 'common/services/Services';
|
import { IOptionsService } from 'common/services/Services';
|
||||||
import { Terminal } from '@xterm/xterm';
|
import { Terminal } from '@xterm/xterm';
|
||||||
import { BaseRenderLayer } from './BaseRenderLayer';
|
import { BaseRenderLayer } from './BaseRenderLayer';
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { IDisposable, Terminal } from '@xterm/xterm';
|
import { IDisposable, Terminal } from '@xterm/xterm';
|
||||||
import { IRenderDimensions } from 'browser/renderer/shared/Types';
|
import { IRenderDimensions } from 'target-browser/renderer/shared/Types';
|
||||||
|
|
||||||
export interface IRenderLayer extends IDisposable {
|
export interface IRenderLayer extends IDisposable {
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -12,10 +12,11 @@
|
|||||||
"removeComments": true,
|
"removeComments": true,
|
||||||
"paths": {
|
"paths": {
|
||||||
"common/*": [
|
"common/*": [
|
||||||
"../../../src/common/*"
|
"../../../src/primitives/*",
|
||||||
|
"../../../src/runtime/*",
|
||||||
],
|
],
|
||||||
"browser/*": [
|
"target-browser/*": [
|
||||||
"../../../src/browser/*"
|
"../../../src/target-browser/*"
|
||||||
],
|
],
|
||||||
"@xterm/addon-webgl": [
|
"@xterm/addon-webgl": [
|
||||||
"../typings/addon-webgl.d.ts"
|
"../typings/addon-webgl.d.ts"
|
||||||
@@ -36,10 +37,10 @@
|
|||||||
],
|
],
|
||||||
"references": [
|
"references": [
|
||||||
{
|
{
|
||||||
"path": "../../../src/common"
|
"path": "../../../src"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "../../../src/browser"
|
"path": "../../../src/target-browser"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,10 +11,11 @@
|
|||||||
"removeComments": true,
|
"removeComments": true,
|
||||||
"paths": {
|
"paths": {
|
||||||
"common/*": [
|
"common/*": [
|
||||||
"../../../src/common/*"
|
"../../../src/primitives/*",
|
||||||
|
"../../../src/runtime/*",
|
||||||
],
|
],
|
||||||
"browser/*": [
|
"target-browser/*": [
|
||||||
"../../../src/browser/*"
|
"../../../src/target-browser/*"
|
||||||
],
|
],
|
||||||
"*": [
|
"*": [
|
||||||
"./*"
|
"./*"
|
||||||
@@ -32,10 +33,10 @@
|
|||||||
],
|
],
|
||||||
"references": [
|
"references": [
|
||||||
{
|
{
|
||||||
"path": "../../../src/common"
|
"path": "../../../src"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "../../../src/browser"
|
"path": "../../../src/target-browser"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "../../../test/playwright"
|
"path": "../../../test/playwright"
|
||||||
|
|||||||
+2
-2
@@ -23,12 +23,12 @@ declare module '@xterm/addon-webgl' {
|
|||||||
public readonly onChangeTextureAtlas: IEvent<HTMLCanvasElement>;
|
public readonly onChangeTextureAtlas: IEvent<HTMLCanvasElement>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An event that is fired when a new page is added to the texture atlas.
|
* An event that is fired when the a new page is added to the texture atlas.
|
||||||
*/
|
*/
|
||||||
public readonly onAddTextureAtlasCanvas: IEvent<HTMLCanvasElement>;
|
public readonly onAddTextureAtlasCanvas: IEvent<HTMLCanvasElement>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An event that is fired when a page is removed from the texture atlas.
|
* An event that is fired when the a page is removed from the texture atlas.
|
||||||
*/
|
*/
|
||||||
public readonly onRemoveTextureAtlasCanvas: IEvent<HTMLCanvasElement>;
|
public readonly onRemoveTextureAtlasCanvas: IEvent<HTMLCanvasElement>;
|
||||||
|
|
||||||
|
|||||||
@@ -25,8 +25,11 @@ module.exports = {
|
|||||||
modules: ['./node_modules'],
|
modules: ['./node_modules'],
|
||||||
extensions: [ '.js' ],
|
extensions: [ '.js' ],
|
||||||
alias: {
|
alias: {
|
||||||
common: path.resolve('../../out/common'),
|
common: [
|
||||||
browser: path.resolve('../../out/browser'),
|
path.resolve('../../out/runtime'),
|
||||||
|
path.resolve('../../out/primitives'),
|
||||||
|
],
|
||||||
|
browser: path.resolve('../../out/target-browser'),
|
||||||
vs: path.resolve('../../out/vs')
|
vs: path.resolve('../../out/vs')
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
+37
-13
@@ -92,6 +92,9 @@ let outConfig = {
|
|||||||
}
|
}
|
||||||
let skipOut = false;
|
let skipOut = false;
|
||||||
|
|
||||||
|
/** @type {esbuild.BuildOptions[] | undefined} */
|
||||||
|
let outBuilds;
|
||||||
|
|
||||||
/** @type {esbuild.BuildOptions} */
|
/** @type {esbuild.BuildOptions} */
|
||||||
let outTestConfig = {
|
let outTestConfig = {
|
||||||
format: 'cjs',
|
format: 'cjs',
|
||||||
@@ -171,7 +174,7 @@ if (config.addon) {
|
|||||||
} else if (config.isHeadless) {
|
} else if (config.isHeadless) {
|
||||||
bundleConfig = {
|
bundleConfig = {
|
||||||
...bundleConfig,
|
...bundleConfig,
|
||||||
entryPoints: [`src/headless/public/Terminal.ts`],
|
entryPoints: [`src/target-headless/public/Terminal.ts`],
|
||||||
outfile: `headless/lib-headless/xterm-headless.mjs`
|
outfile: `headless/lib-headless/xterm-headless.mjs`
|
||||||
};
|
};
|
||||||
outConfig = {
|
outConfig = {
|
||||||
@@ -183,18 +186,35 @@ if (config.addon) {
|
|||||||
} else {
|
} else {
|
||||||
bundleConfig = {
|
bundleConfig = {
|
||||||
...bundleConfig,
|
...bundleConfig,
|
||||||
entryPoints: [`src/browser/public/Terminal.ts`],
|
entryPoints: [`src/target-browser/public/Terminal.ts`],
|
||||||
outfile: `lib/xterm.mjs`
|
outfile: `lib/xterm.mjs`
|
||||||
};
|
};
|
||||||
outConfig = {
|
outBuilds = [
|
||||||
...outConfig,
|
{
|
||||||
entryPoints: [
|
...outConfig,
|
||||||
'src/browser/**/*.ts',
|
entryPoints: ['src/primitives/**/*.ts'],
|
||||||
'src/common/**/*.ts',
|
outbase: 'src/primitives',
|
||||||
'src/headless/**/*.ts'
|
outdir: 'out-esbuild/common',
|
||||||
],
|
},
|
||||||
outdir: 'out-esbuild/'
|
{
|
||||||
};
|
...outConfig,
|
||||||
|
entryPoints: ['src/runtime/**/*.ts'],
|
||||||
|
outbase: 'src/runtime',
|
||||||
|
outdir: 'out-esbuild/common',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
...outConfig,
|
||||||
|
entryPoints: ['src/target-browser/**/*.ts'],
|
||||||
|
outbase: 'src',
|
||||||
|
outdir: 'out-esbuild',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
...outConfig,
|
||||||
|
entryPoints: ['src/target-headless/**/*.ts'],
|
||||||
|
outbase: 'src',
|
||||||
|
outdir: 'out-esbuild',
|
||||||
|
},
|
||||||
|
];
|
||||||
outTestConfig = {
|
outTestConfig = {
|
||||||
...outConfig,
|
...outConfig,
|
||||||
entryPoints: ['test/**/*.ts'],
|
entryPoints: ['test/**/*.ts'],
|
||||||
@@ -205,7 +225,9 @@ if (config.addon) {
|
|||||||
if (config.isWatch) {
|
if (config.isWatch) {
|
||||||
context(bundleConfig).then(e => e.watch());
|
context(bundleConfig).then(e => e.watch());
|
||||||
if (!skipOut) {
|
if (!skipOut) {
|
||||||
context(outConfig).then(e => e.watch());
|
for (const buildConfig of outBuilds ?? [outConfig]) {
|
||||||
|
context(buildConfig).then(e => e.watch());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!skipOutTest) {
|
if (!skipOutTest) {
|
||||||
context(outTestConfig).then(e => e.watch());
|
context(outTestConfig).then(e => e.watch());
|
||||||
@@ -213,7 +235,9 @@ if (config.isWatch) {
|
|||||||
} else {
|
} else {
|
||||||
await build(bundleConfig);
|
await build(bundleConfig);
|
||||||
if (!skipOut) {
|
if (!skipOut) {
|
||||||
await build(outConfig);
|
for (const buildConfig of outBuilds ?? [outConfig]) {
|
||||||
|
await build(buildConfig);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!skipOutTest) {
|
if (!skipOutTest) {
|
||||||
await build(outTestConfig);
|
await build(outTestConfig);
|
||||||
|
|||||||
+11
-41
@@ -33,47 +33,17 @@ if (files.length === 0) {
|
|||||||
|
|
||||||
console.log(`Linting ${files.length} changed file(s)...`);
|
console.log(`Linting ${files.length} changed file(s)...`);
|
||||||
|
|
||||||
const cwd = path.join(__dirname, '..');
|
const eslintArgs = ['--max-warnings', '0', '--no-warn-ignored'];
|
||||||
const isWin = process.platform === 'win32';
|
if (fix) {
|
||||||
|
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);
|
||||||
|
|
||||||
async function main() {
|
const eslint = process.platform === 'win32' ? 'eslint.cmd' : 'eslint';
|
||||||
const oxlintArgs = ['--type-aware', '--max-warnings', '0'];
|
const child = spawn(eslint, eslintArgs, {
|
||||||
if (fix) {
|
stdio: 'inherit',
|
||||||
oxlintArgs.push('--fix');
|
cwd: path.join(__dirname, '..'),
|
||||||
}
|
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
@@ -81,7 +81,7 @@ function checkAndPublishPackage(packageDir, repoCommit, peerDependencies, update
|
|||||||
|
|
||||||
// Update Version.ts with the new version
|
// Update Version.ts with the new version
|
||||||
if (updateVersionTs) {
|
if (updateVersionTs) {
|
||||||
const versionTsPath = path.join(packageDir, 'src/common/Version.ts');
|
const versionTsPath = path.join(packageDir, 'src/primitives/Version.ts');
|
||||||
const versionTsContent = fs.readFileSync(versionTsPath, 'utf8');
|
const versionTsContent = fs.readFileSync(versionTsPath, 'utf8');
|
||||||
const updatedVersionTs = versionTsContent.replace(
|
const updatedVersionTs = versionTsContent.replace(
|
||||||
/export const XTERM_VERSION = '[^']+';/,
|
/export const XTERM_VERSION = '[^']+';/,
|
||||||
|
|||||||
+1
-1
@@ -8,7 +8,7 @@ const path = require('path');
|
|||||||
|
|
||||||
const COVERAGE_LINES_THRESHOLD = 40;
|
const COVERAGE_LINES_THRESHOLD = 40;
|
||||||
|
|
||||||
// Add `out-esbuild` to NODE_PATH so addon path-mapped imports (common/*, browser/*) resolve.
|
// Add `out` to the NODE_PATH so absolute paths can be resolved.
|
||||||
const env = { ...process.env };
|
const env = { ...process.env };
|
||||||
env.NODE_PATH = path.resolve(__dirname, '../out-esbuild');
|
env.NODE_PATH = path.resolve(__dirname, '../out-esbuild');
|
||||||
|
|
||||||
|
|||||||
@@ -38,4 +38,4 @@ function findUnusedSymbols(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Example usage
|
// Example usage
|
||||||
findUnusedSymbols("./src/browser/tsconfig.json");
|
findUnusedSymbols("./src/target-browser/tsconfig.json");
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ export class GpuWindow extends BaseWindow implements IControlWindow {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private _styleAtlasPage(canvas: HTMLCanvasElement): void {
|
private _styleAtlasPage(canvas: HTMLCanvasElement): void {
|
||||||
// oxlint-disable-next-line eslint-js/no-restricted-syntax
|
// eslint-disable-next-line 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`;
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ export class WebglWindow extends BaseWindow implements IControlWindow {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private _styleAtlasPage(canvas: HTMLCanvasElement): void {
|
private _styleAtlasPage(canvas: HTMLCanvasElement): void {
|
||||||
// oxlint-disable-next-line eslint-js/no-restricted-syntax
|
// eslint-disable-next-line 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`;
|
||||||
|
|||||||
+14
-42
@@ -2,54 +2,26 @@
|
|||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"module": "commonjs",
|
"module": "commonjs",
|
||||||
"target": "es2021",
|
"target": "es2021",
|
||||||
"types": [
|
"types": ["node"],
|
||||||
"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": [
|
"@xterm/addon-attach": ["../../addons/addon-attach"],
|
||||||
"../../addons/addon-attach"
|
"@xterm/addon-clipboard": ["../../addons/addon-clipboard"],
|
||||||
],
|
"@xterm/addon-fit": ["../../addons/addon-fit"],
|
||||||
"@xterm/addon-clipboard": [
|
"@xterm/addon-image": ["../../addons/addon-image"],
|
||||||
"../../addons/addon-clipboard"
|
"@xterm/addon-progress": ["../../addons/addon-progress"],
|
||||||
],
|
"@xterm/addon-search": ["../../addons/addon-search"],
|
||||||
"@xterm/addon-fit": [
|
"@xterm/addon-serialize": ["../../addons/addon-serialize"],
|
||||||
"../../addons/addon-fit"
|
"@xterm/addon-web-fonts": ["../../addons/addon-web-fonts"],
|
||||||
],
|
"@xterm/addon-web-links": ["../../addons/addon-web-links"],
|
||||||
"@xterm/addon-image": [
|
"@xterm/addon-webgl": ["../../addons/addon-webgl"],
|
||||||
"../../addons/addon-image"
|
"@xterm/addon-unicode11": ["../../addons/addon-unicode11"],
|
||||||
],
|
"@xterm/addon-unicode-graphemes": ["../../addons/addon-unicode-graphemes"],
|
||||||
"@xterm/addon-progress": [
|
"@xterm/addon-ligatures": ["../../addons/addon-ligatures"],
|
||||||
"../../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"
|
|
||||||
],
|
|
||||||
"*": ["./*"]
|
"*": ["./*"]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,71 +0,0 @@
|
|||||||
// @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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
Generated
-511
@@ -32,7 +32,6 @@
|
|||||||
"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",
|
||||||
@@ -40,9 +39,6 @@
|
|||||||
"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",
|
||||||
@@ -1512,413 +1508,6 @@
|
|||||||
"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",
|
||||||
@@ -4063,19 +3652,6 @@
|
|||||||
"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",
|
||||||
@@ -5469,13 +5045,6 @@
|
|||||||
"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",
|
||||||
@@ -6228,86 +5797,6 @@
|
|||||||
"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",
|
||||||
|
|||||||
+6
-10
@@ -48,11 +48,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": "oxlint --type-aware --max-warnings 0 src addons demo test && eslint --config eslint.config.naming.mjs --max-warnings 0 src addons demo test",
|
"lint": "eslint --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": "oxlint --type-aware --fix --max-warnings 0 src addons demo test",
|
"lint-fix": "eslint --fix src/ addons/ demo/ test/",
|
||||||
"lint-api": "oxlint --max-warnings 0 -c .oxlintrc.typings.json typings && eslint --config eslint.config.naming.mjs --max-warnings 0 typings",
|
"lint-api": "eslint --config eslint.config.typings.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 +61,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": "xterm-benchmark -r 5 -c test/benchmark/benchmark.json",
|
"benchmark": "NODE_PATH=./out xterm-benchmark -r 5 -c test/benchmark/benchmark.json",
|
||||||
"benchmark-baseline": "xterm-benchmark -r 5 -c test/benchmark/benchmark.json --baseline out-test/benchmark/*benchmark.js",
|
"benchmark-baseline": "NODE_PATH=./out xterm-benchmark -r 5 -c test/benchmark/benchmark.json --baseline out-test/benchmark/*benchmark.js",
|
||||||
"benchmark-eval": "xterm-benchmark -r 5 -c test/benchmark/benchmark.json --eval 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",
|
||||||
"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,7 +95,6 @@
|
|||||||
"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",
|
||||||
@@ -103,9 +102,6 @@
|
|||||||
"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",
|
||||||
|
|||||||
@@ -0,0 +1,70 @@
|
|||||||
|
# xterm.js source architecture
|
||||||
|
|
||||||
|
This document describes how `src/` is organized. The layout follows [issue #5963](https://github.com/xtermjs/xterm.js/issues/5963): **primitives** and **runtime** as separate TypeScript composite projects, with **target-browser** and **target-headless** as platform entry points.
|
||||||
|
|
||||||
|
## Dependency graph
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart BT
|
||||||
|
primitives["primitives<br/>building blocks"]
|
||||||
|
runtime["runtime<br/>services, integration"]
|
||||||
|
targetBrowser["target-browser<br/>DOM terminal"]
|
||||||
|
targetHeadless["target-headless<br/>Node terminal"]
|
||||||
|
|
||||||
|
runtime --> primitives
|
||||||
|
targetBrowser --> runtime
|
||||||
|
targetHeadless --> runtime
|
||||||
|
```
|
||||||
|
|
||||||
|
## TypeScript projects
|
||||||
|
|
||||||
|
| Project | `tsconfig` | Output | Role |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| Primitives | `src/primitives/tsconfig.json` | `out/primitives/` | Buffer, parser, input helpers, static data, shared utilities. Must not import from `runtime/`. |
|
||||||
|
| Runtime | `src/runtime/tsconfig.json` | `out/runtime/` | Services (DI), `CoreTerminal`, `InputHandler`, public API adapters, `Types.ts`. References primitives. |
|
||||||
|
| Source (solution) | `src/tsconfig.json` | — | Solution root; references primitives + runtime only. |
|
||||||
|
| Target browser | `src/target-browser/tsconfig.json` | `out/target-browser/` | Browser rendering, input, public `Terminal`. References `src/`. |
|
||||||
|
| Target headless | `src/target-headless/tsconfig.json` | `out/target-headless/` | Headless terminal. References `src/`. |
|
||||||
|
|
||||||
|
Unit test files (`**/*.test.ts`) are excluded from composite library builds; they are compiled via esbuild for `npm run test-unit`.
|
||||||
|
|
||||||
|
## `primitives/`
|
||||||
|
|
||||||
|
| Area | Contents |
|
||||||
|
| --- | --- |
|
||||||
|
| Root utilities | `Async`, `CircularList`, `Color`, `ColorTypes`, `Event`, `KeyboardTypes`, `Lifecycle`, `MultiKeyMap`, `Platform`, `SortedList`, `StringBuilder`, `TaskQueue`, `TerminalOptions`, `Version` |
|
||||||
|
| `buffer/` | Screen buffer, `CellTypes`, `BufferService` / `BufferOptions` / `BufferLog` interfaces (buffer-layer contracts) |
|
||||||
|
| `data/` | `Charsets`, `EscapeSequences` |
|
||||||
|
| `input/` | UTF decoding, keyboard helpers, `UnicodeTypes`, `UnicodeProperties` |
|
||||||
|
| `parser/` | Escape-sequence parser |
|
||||||
|
|
||||||
|
Primitives depend only on other primitives (and `@xterm/xterm` typings where needed). Buffer code uses `IBufferService` from `common/buffer/BufferService`, not `common/services/Services`.
|
||||||
|
|
||||||
|
## `runtime/`
|
||||||
|
|
||||||
|
| Area | Contents |
|
||||||
|
| --- | --- |
|
||||||
|
| `services/` | DI implementations (`BufferService`, `OptionsService`, …) |
|
||||||
|
| `public/` | Public API adapters (`AddonManager`, buffer/parser views) |
|
||||||
|
| Root | `CoreTerminal`, `InputHandler`, `WindowsMode`, `Types.ts`, `TestUtils.test.ts` |
|
||||||
|
|
||||||
|
`Types.ts` re-exports primitive types and adds integration types (`IInputHandler`, `ICoreTerminal`, mouse/color helpers, etc.).
|
||||||
|
|
||||||
|
## Import paths
|
||||||
|
|
||||||
|
Source keeps the `common/...` prefix (logical module name, not a physical `common/` folder). Each project's `paths` in `tsconfig.json` map that prefix to `primitives/` and/or `runtime/`.
|
||||||
|
|
||||||
|
Platform code uses:
|
||||||
|
|
||||||
|
- `target-browser/...` — browser terminal
|
||||||
|
- `target-headless/...` — Node terminal
|
||||||
|
|
||||||
|
## Published packages vs source folders
|
||||||
|
|
||||||
|
The npm package directory `headless/` (e.g. `headless/lib-headless/`) is unchanged; only the **source** tree uses `src/target-headless/`.
|
||||||
|
|
||||||
|
## Related issues
|
||||||
|
|
||||||
|
- [#5963](https://github.com/xtermjs/xterm.js/issues/5963) — module split
|
||||||
|
- [#5896](https://github.com/xtermjs/xterm.js/issues/5896) — relative imports
|
||||||
|
- [#5897](https://github.com/xtermjs/xterm.js/issues/5897) — `import/no-cycle` lint
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
{
|
|
||||||
"extends": "../tsconfig-library-base",
|
|
||||||
"compilerOptions": {
|
|
||||||
"lib": [
|
|
||||||
"dom",
|
|
||||||
"es2021"
|
|
||||||
],
|
|
||||||
"outDir": "../../out",
|
|
||||||
"types": [
|
|
||||||
"../../node_modules/@types/mocha"
|
|
||||||
],
|
|
||||||
"skipLibCheck": true
|
|
||||||
},
|
|
||||||
"include": [
|
|
||||||
"./**/*",
|
|
||||||
"../../typings/xterm.d.ts"
|
|
||||||
],
|
|
||||||
"references": [
|
|
||||||
{
|
|
||||||
"path": "../common"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,202 +0,0 @@
|
|||||||
/**
|
|
||||||
* Copyright (c) 2019 The xterm.js authors. All rights reserved.
|
|
||||||
* @license MIT
|
|
||||||
*/
|
|
||||||
|
|
||||||
import type { IEvent } from '../Event';
|
|
||||||
import type { ICircularList } from '../CircularList';
|
|
||||||
import type { ICharset } from '../Types';
|
|
||||||
import type { IDisposable } from '../Lifecycle';
|
|
||||||
import type { UnderlineStyle } from './Constants';
|
|
||||||
|
|
||||||
// BufferIndex denotes a position in the buffer: [rowIndex, colIndex]
|
|
||||||
export type BufferIndex = [number, number];
|
|
||||||
|
|
||||||
export type CharData = [attr: number, char: string, width: number, code: number];
|
|
||||||
|
|
||||||
export interface IExtendedAttrs {
|
|
||||||
ext: number;
|
|
||||||
underlineStyle: UnderlineStyle;
|
|
||||||
underlineColor: number;
|
|
||||||
underlineVariantOffset: number;
|
|
||||||
urlId: number;
|
|
||||||
clone(): IExtendedAttrs;
|
|
||||||
isEmpty(): boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An object that represents all attributes of a cell.
|
|
||||||
*/
|
|
||||||
export interface IAttributeData {
|
|
||||||
/**
|
|
||||||
* "fg" is a 32-bit unsigned integer that stores the foreground color of the cell in the 24 least
|
|
||||||
* significant bits and additional flags in the remaining 8 bits.
|
|
||||||
*/
|
|
||||||
fg: number;
|
|
||||||
/**
|
|
||||||
* "bg" is a 32-bit unsigned integer that stores the background color of the cell in the 24 least
|
|
||||||
* significant bits and additional flags in the remaining 8 bits.
|
|
||||||
*/
|
|
||||||
bg: number;
|
|
||||||
/**
|
|
||||||
* "extended", aka "ext", stores extended attributes beyond those available in fg and bg. This
|
|
||||||
* data is optional on a cell and encodes less common data.
|
|
||||||
*/
|
|
||||||
extended: IExtendedAttrs;
|
|
||||||
|
|
||||||
clone(): IAttributeData;
|
|
||||||
|
|
||||||
// flags
|
|
||||||
isInverse(): number;
|
|
||||||
isBold(): number;
|
|
||||||
isUnderline(): number;
|
|
||||||
isBlink(): number;
|
|
||||||
isInvisible(): number;
|
|
||||||
isItalic(): number;
|
|
||||||
isDim(): number;
|
|
||||||
isStrikethrough(): number;
|
|
||||||
isProtected(): number;
|
|
||||||
isOverline(): number;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The color mode of the foreground color which determines how to decode {@link getFgColor},
|
|
||||||
* possible values include {@link Attributes.CM_DEFAULT}, {@link Attributes.CM_P16},
|
|
||||||
* {@link Attributes.CM_P256} and {@link Attributes.CM_RGB}.
|
|
||||||
*/
|
|
||||||
getFgColorMode(): number;
|
|
||||||
/**
|
|
||||||
* The color mode of the background color which determines how to decode {@link getBgColor},
|
|
||||||
* possible values include {@link Attributes.CM_DEFAULT}, {@link Attributes.CM_P16},
|
|
||||||
* {@link Attributes.CM_P256} and {@link Attributes.CM_RGB}.
|
|
||||||
*/
|
|
||||||
getBgColorMode(): number;
|
|
||||||
isFgRGB(): boolean;
|
|
||||||
isBgRGB(): boolean;
|
|
||||||
isFgPalette(): boolean;
|
|
||||||
isBgPalette(): boolean;
|
|
||||||
isFgDefault(): boolean;
|
|
||||||
isBgDefault(): boolean;
|
|
||||||
isAttributeDefault(): boolean;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets an integer representation of the foreground color, how to decode the color depends on the
|
|
||||||
* color mode {@link getFgColorMode}.
|
|
||||||
*/
|
|
||||||
getFgColor(): number;
|
|
||||||
/**
|
|
||||||
* Gets an integer representation of the background color, how to decode the color depends on the
|
|
||||||
* color mode {@link getBgColorMode}.
|
|
||||||
*/
|
|
||||||
getBgColor(): number;
|
|
||||||
|
|
||||||
// extended attrs
|
|
||||||
hasExtendedAttrs(): number;
|
|
||||||
updateExtended(): void;
|
|
||||||
getUnderlineColor(): number;
|
|
||||||
getUnderlineColorMode(): number;
|
|
||||||
isUnderlineColorRGB(): boolean;
|
|
||||||
isUnderlineColorPalette(): boolean;
|
|
||||||
isUnderlineColorDefault(): boolean;
|
|
||||||
getUnderlineStyle(): number;
|
|
||||||
getUnderlineVariantOffset(): number;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Cell data */
|
|
||||||
export interface ICellData extends IAttributeData {
|
|
||||||
content: number;
|
|
||||||
combinedData: string;
|
|
||||||
isCombined(): number;
|
|
||||||
getWidth(): number;
|
|
||||||
getChars(): string;
|
|
||||||
getCode(): number;
|
|
||||||
setFromCharData(value: CharData): void;
|
|
||||||
getAsCharData(): CharData;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Interface for a line in the terminal buffer.
|
|
||||||
*/
|
|
||||||
export interface IBufferLine {
|
|
||||||
length: number;
|
|
||||||
isWrapped: boolean;
|
|
||||||
get(index: number): CharData;
|
|
||||||
set(index: number, value: CharData): void;
|
|
||||||
loadCell(index: number, cell: ICellData): ICellData;
|
|
||||||
setCell(index: number, cell: ICellData): void;
|
|
||||||
setCellFromCodepoint(index: number, codePoint: number, width: number, attrs: IAttributeData): void;
|
|
||||||
addCodepointToCell(index: number, codePoint: number, width: number): void;
|
|
||||||
insertCells(pos: number, n: number, ch: ICellData): void;
|
|
||||||
deleteCells(pos: number, n: number, fill: ICellData): void;
|
|
||||||
replaceCells(start: number, end: number, fill: ICellData, respectProtect?: boolean): void;
|
|
||||||
resize(cols: number, fill: ICellData): boolean;
|
|
||||||
cleanupMemory(): number;
|
|
||||||
fill(fillCellData: ICellData, respectProtect?: boolean): void;
|
|
||||||
copyFrom(line: IBufferLine): void;
|
|
||||||
clone(): IBufferLine;
|
|
||||||
getTrimmedLength(): number;
|
|
||||||
getNoBgTrimmedLength(): number;
|
|
||||||
translateToString(trimRight?: boolean, startCol?: number, endCol?: number, outColumns?: number[]): string;
|
|
||||||
|
|
||||||
/* direct access to cell attrs */
|
|
||||||
getWidth(index: number): number;
|
|
||||||
hasWidth(index: number): number;
|
|
||||||
getFg(index: number): number;
|
|
||||||
getBg(index: number): number;
|
|
||||||
hasContent(index: number): number;
|
|
||||||
getCodePoint(index: number): number;
|
|
||||||
isCombined(index: number): number;
|
|
||||||
getString(index: number): string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface IMarker extends IDisposable {
|
|
||||||
readonly id: number;
|
|
||||||
readonly isDisposed: boolean;
|
|
||||||
readonly line: number;
|
|
||||||
onDispose: IEvent<void>;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface IBuffer {
|
|
||||||
readonly lines: ICircularList<IBufferLine>;
|
|
||||||
ydisp: number;
|
|
||||||
ybase: number;
|
|
||||||
y: number;
|
|
||||||
x: number;
|
|
||||||
tabs: any;
|
|
||||||
scrollBottom: number;
|
|
||||||
scrollTop: number;
|
|
||||||
hasScrollback: boolean;
|
|
||||||
savedY: number;
|
|
||||||
savedX: number;
|
|
||||||
savedCharset: ICharset | undefined;
|
|
||||||
savedCharsets: (ICharset | undefined)[];
|
|
||||||
savedGlevel: number;
|
|
||||||
savedOriginMode: boolean;
|
|
||||||
savedWraparoundMode: boolean;
|
|
||||||
savedCurAttrData: IAttributeData;
|
|
||||||
isCursorInViewport: boolean;
|
|
||||||
markers: IMarker[];
|
|
||||||
translateBufferLineToString(lineIndex: number, trimRight: boolean, startCol?: number, endCol?: number): string;
|
|
||||||
getWrappedRangeForLine(y: number): { first: number, last: number };
|
|
||||||
nextStop(x?: number): number;
|
|
||||||
prevStop(x?: number): number;
|
|
||||||
getBlankLine(attr: IAttributeData, isWrapped?: boolean): IBufferLine;
|
|
||||||
getNullCell(attr?: IAttributeData): ICellData;
|
|
||||||
getWhitespaceCell(attr?: IAttributeData): ICellData;
|
|
||||||
addMarker(y: number): IMarker;
|
|
||||||
clearMarkers(y: number): void;
|
|
||||||
clearAllMarkers(): void;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface IBufferSet extends IDisposable {
|
|
||||||
alt: IBuffer;
|
|
||||||
normal: IBuffer;
|
|
||||||
active: IBuffer;
|
|
||||||
|
|
||||||
onBufferActivate: IEvent<{ activeBuffer: IBuffer, inactiveBuffer: IBuffer }>;
|
|
||||||
|
|
||||||
activateNormalBuffer(): void;
|
|
||||||
activateAltBuffer(fillAttr?: IAttributeData): void;
|
|
||||||
reset(): void;
|
|
||||||
resize(newCols: number, newRows: number): void;
|
|
||||||
setupTabStops(i?: number): void;
|
|
||||||
}
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
{
|
|
||||||
"extends": "../tsconfig-library-base",
|
|
||||||
"compilerOptions": {
|
|
||||||
"lib": [
|
|
||||||
"es2015",
|
|
||||||
"es2016.Array.Include",
|
|
||||||
"es2019.string",
|
|
||||||
"es2021.weakref"
|
|
||||||
],
|
|
||||||
"outDir": "../../out",
|
|
||||||
"types": [
|
|
||||||
"../../node_modules/@types/mocha"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"include": [
|
|
||||||
"./**/*",
|
|
||||||
"../../typings/xterm.d.ts"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
{
|
|
||||||
"extends": "../tsconfig-library-base",
|
|
||||||
"compilerOptions": {
|
|
||||||
"lib": [
|
|
||||||
"es2015",
|
|
||||||
"es2016.Array.Include",
|
|
||||||
"es2021.weakref"
|
|
||||||
],
|
|
||||||
"outDir": "../../out",
|
|
||||||
"types": [
|
|
||||||
"../../node_modules/@types/mocha",
|
|
||||||
"../../node_modules/@types/node"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"include": [
|
|
||||||
"./**/*",
|
|
||||||
"../../typings/xterm.d.ts", // common/Types.d.ts imports from '@xterm/xterm'
|
|
||||||
"../../typings/xterm-headless.d.ts"
|
|
||||||
],
|
|
||||||
"references": [
|
|
||||||
{ "path": "../common" }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
* Minimal async helpers for xterm.js core.
|
* Minimal async helpers for xterm.js core.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { DisposableStore, IDisposable, toDisposable } from './Lifecycle';
|
import { DisposableStore, IDisposable, toDisposable } from 'common/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));
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { assert } from 'chai';
|
import { assert } from 'chai';
|
||||||
import { CircularList } from './CircularList';
|
import { CircularList } from 'common/CircularList';
|
||||||
|
|
||||||
describe('CircularList', () => {
|
describe('CircularList', () => {
|
||||||
describe('push', () => {
|
describe('push', () => {
|
||||||
@@ -3,18 +3,8 @@
|
|||||||
* @license MIT
|
* @license MIT
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { Disposable } from './Lifecycle';
|
import { Disposable } from 'common/Lifecycle';
|
||||||
import { Emitter, type IEvent } from './Event';
|
import { Emitter, type IEvent } from 'common/Event';
|
||||||
|
|
||||||
export interface IInsertEvent {
|
|
||||||
index: number;
|
|
||||||
amount: number;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface IDeleteEvent {
|
|
||||||
index: number;
|
|
||||||
amount: number;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface ICircularList<T> {
|
export interface ICircularList<T> {
|
||||||
length: number;
|
length: number;
|
||||||
@@ -38,6 +28,16 @@ export interface ICircularList<T> {
|
|||||||
shiftElements(start: number, count: number, offset: number): void;
|
shiftElements(start: number, count: number, offset: number): void;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface IInsertEvent {
|
||||||
|
index: number;
|
||||||
|
amount: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface IDeleteEvent {
|
||||||
|
index: number;
|
||||||
|
amount: number;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a circular list; a list with a maximum size that wraps around when push is called,
|
* Represents a circular list; a list with a maximum size that wraps around when push is called,
|
||||||
* overriding values at the start of the list.
|
* overriding values at the start of the list.
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { assert } from 'chai';
|
import { assert } from 'chai';
|
||||||
import { channels, color, css, rgb, rgba, toPaddedHex, contrastRatio } from './Color';
|
import { channels, color, css, rgb, rgba, toPaddedHex, contrastRatio } from 'common/Color';
|
||||||
|
|
||||||
describe('Color', () => {
|
describe('Color', () => {
|
||||||
|
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
* @license MIT
|
* @license MIT
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { IColor, IColorRGB } from './Types';
|
import { IColor, IColorRGB } from 'common/ColorTypes';
|
||||||
|
|
||||||
let $r = 0;
|
let $r = 0;
|
||||||
let $g = 0;
|
let $g = 0;
|
||||||
@@ -177,9 +177,9 @@ export namespace css {
|
|||||||
// Formats: rgb() or rgba()
|
// Formats: rgb() or rgba()
|
||||||
const rgbaMatch = css.match(/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(,\s*(0|1|\d?\.(\d+))\s*)?\)/);
|
const rgbaMatch = css.match(/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(,\s*(0|1|\d?\.(\d+))\s*)?\)/);
|
||||||
if (rgbaMatch) {
|
if (rgbaMatch) {
|
||||||
$r = parseInt(rgbaMatch[1], 10);
|
$r = parseInt(rgbaMatch[1]);
|
||||||
$g = parseInt(rgbaMatch[2], 10);
|
$g = parseInt(rgbaMatch[2]);
|
||||||
$b = parseInt(rgbaMatch[3], 10);
|
$b = parseInt(rgbaMatch[3]);
|
||||||
$a = Math.round((rgbaMatch[5] === undefined ? 1 : parseFloat(rgbaMatch[5])) * 0xFF);
|
$a = Math.round((rgbaMatch[5] === undefined ? 1 : parseFloat(rgbaMatch[5])) * 0xFF);
|
||||||
return channels.toColor($r, $g, $b, $a);
|
return channels.toColor($r, $g, $b, $a);
|
||||||
}
|
}
|
||||||
@@ -373,7 +373,7 @@ export function toPaddedHex(c: number): string {
|
|||||||
/**
|
/**
|
||||||
* Gets the contrast ratio between two relative luminance values.
|
* Gets the contrast ratio between two relative luminance values.
|
||||||
* @param l1 The first relative luminance.
|
* @param l1 The first relative luminance.
|
||||||
* @param l2 The second relative luminance.
|
* @param l2 The first relative luminance.
|
||||||
* @see https://www.w3.org/TR/WCAG20/#contrast-ratiodef
|
* @see https://www.w3.org/TR/WCAG20/#contrast-ratiodef
|
||||||
*/
|
*/
|
||||||
export function contrastRatio(l1: number, l2: number): number {
|
export function contrastRatio(l1: number, l2: number): number {
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2018 The xterm.js authors. All rights reserved.
|
||||||
|
* @license MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
export interface IColor {
|
||||||
|
readonly css: string;
|
||||||
|
readonly rgba: number; // 32-bit int with rgba in each byte
|
||||||
|
}
|
||||||
|
|
||||||
|
export type IColorRGB = [red: number, green: number, blue: number];
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { assert } from 'chai';
|
import { assert } from 'chai';
|
||||||
import { Emitter } from './Event';
|
import { Emitter } from 'common/Event';
|
||||||
|
|
||||||
describe('Emitter', () => {
|
describe('Emitter', () => {
|
||||||
it('should fire with 0 listeners without error', () => {
|
it('should fire with 0 listeners without error', () => {
|
||||||
@@ -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 './Lifecycle';
|
import { IDisposable, DisposableStore, toDisposable } from 'common/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;
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2018 The xterm.js authors. All rights reserved.
|
||||||
|
* @license MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
export interface IKeyboardEvent {
|
||||||
|
altKey: boolean;
|
||||||
|
ctrlKey: boolean;
|
||||||
|
shiftKey: boolean;
|
||||||
|
metaKey: boolean;
|
||||||
|
/** @deprecated See KeyboardEvent.keyCode */
|
||||||
|
keyCode: number;
|
||||||
|
key: string;
|
||||||
|
type: string;
|
||||||
|
code: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const enum KeyboardResultType {
|
||||||
|
SEND_KEY,
|
||||||
|
SELECT_ALL,
|
||||||
|
PAGE_UP,
|
||||||
|
PAGE_DOWN
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface IKeyboardResult {
|
||||||
|
type: KeyboardResultType;
|
||||||
|
cancel: boolean;
|
||||||
|
key: string | undefined;
|
||||||
|
}
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { assert } from 'chai';
|
import { assert } from 'chai';
|
||||||
import { FourKeyMap, TwoKeyMap } from './MultiKeyMap';
|
import { FourKeyMap, TwoKeyMap } from 'common/MultiKeyMap';
|
||||||
|
|
||||||
const strictEqual = assert.strictEqual;
|
const strictEqual = assert.strictEqual;
|
||||||
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user