diff --git a/README.md b/README.md
index 286e6797c..a60bfbe80 100644
--- a/README.md
+++ b/README.md
@@ -99,7 +99,7 @@ await MathJax.init({
loader: {load: ['input/tex', 'output/svg']}
});
const svg = await MathJax.tex2svgPromise('\\frac{1}{x^2-1}', {display: true});
-console.log(MathJax.startup.adaptor.outerHTML(svg));
+console.log(MathJax.startup.adaptor.serializeXML(svg));
```
@@ -119,7 +119,7 @@ MathJax.init({
loader: {load: ['input/tex', 'output/svg']}
}).then(() => {
const svg = MathJax.tex2svg('\\frac{1}{x^2-1}', {display: true});
- console.log(MathJax.startup.adaptor.outerHTML(svg));
+ console.log(MathJax.startup.adaptor.serializeXML(svg));
}).catch((err) => console.log(err.message));
```
diff --git a/components/bin/copy b/components/bin/copy
index 8f41e5a08..f3bb6fc16 100755
--- a/components/bin/copy
+++ b/components/bin/copy
@@ -48,11 +48,10 @@ const bundle = (process.argv[3] || 'bundle');
const json = path.resolve(process.argv[4] || '.', 'config.json');
let configs = require(json).copy;
if (!configs) process.exit();
-const wd = path.dirname(json);
-process.chdir(wd);
if (!Array.isArray(configs)) {
configs = [configs];
}
+process.chdir(path.dirname(json));
/**
* Get the directory for node modules (either the parent of the MathJax directory,
@@ -61,6 +60,13 @@ if (!Array.isArray(configs)) {
const parent = path.resolve(__dirname, '..', '..');
const nodeDir = (dir => (fs.existsSync(dir) ? dir : path.resolve(parent, '..')))(path.join(parent, 'node_modules'));
+/**
+ * Other top-level directories
+ */
+const tsDir = path.resolve(parent, 'ts');
+const jsDir = path.resolve(parent, target);
+const bundleDir = path.resolve(parent, bundle);
+
/**
* Copy a file or directory tree
*
@@ -84,14 +90,28 @@ function copyFile(from, to, name, space) {
}
}
+/**
+ * @param {string} name The file name to process
+ * @returns {string} The name with paths replaced by full directories
+ */
+function resolvePaths(name) {
+ return path.resolve(
+ process.cwd(),
+ name.replace(/^\[node\]/, nodeDir)
+ .replace(/^\[ts\]/, tsDir)
+ .replace(/^\[js\]/, jsDir)
+ .replace(/^\[bundle\]/, bundleDir)
+ );
+}
+
/**
* Handle the copying for a given configuration
*
* @param {{from: string, to: string, copy: string[]}} config The configuration for the copy operation
*/
function processConfig(config) {
- const to = path.resolve(wd, config.to.replace(/\/bundle(\/|$)/, '/' + bundle + '$1'));
- const from = path.resolve(wd, config.from.replace(/\[node\]/, nodeDir));
+ const to = resolvePaths(config.to);
+ const from = resolvePaths(config.from);
for (const name of config.copy) {
copyFile(from, to, name, '');
}
diff --git a/components/bin/pack b/components/bin/pack
index 4a91ab5de..22236ed7d 100755
--- a/components/bin/pack
+++ b/components/bin/pack
@@ -74,9 +74,9 @@ async function readJSON(dir) {
return new Promise((ok, fail) => {
const buffer = [];
const child = spawn(
- 'npx',
+ 'node',
[
- 'webpack',
+ require.resolve(path.join('webpack', 'bin', 'webpack.js')),
'--env', `dir=${path.relative(packDir, path.resolve(dir))}`,
'--env', `bundle=${bundle}`,
'--json',
@@ -84,7 +84,7 @@ async function readJSON(dir) {
],
{
cwd: packDir,
- shell: true,
+ shell: process.platform === 'Win32',
}
);
child.stdout.on('data', (data) => buffer.push(String(data)));
diff --git a/components/mjs/a11y/sre/worker/config.json b/components/mjs/a11y/sre/worker/config.json
index c1303a29f..69b8c1079 100644
--- a/components/mjs/a11y/sre/worker/config.json
+++ b/components/mjs/a11y/sre/worker/config.json
@@ -3,8 +3,8 @@
"name": "sre/speech-worker"
},
"copy": {
- "to": "../../../../../bundle/sre",
- "from": "../../../../../ts/a11y/sre",
+ "to": "[bundle]/sre",
+ "from": "[ts]/a11y/sre",
"copy": [
"require.mjs",
"require.d.mts"
diff --git a/components/mjs/input/mml/extensions/mml3/config.json b/components/mjs/input/mml/extensions/mml3/config.json
index 4a0f06a9a..8afb7362f 100644
--- a/components/mjs/input/mml/extensions/mml3/config.json
+++ b/components/mjs/input/mml/extensions/mml3/config.json
@@ -6,8 +6,8 @@
"excludeSubdirs": true
},
"copy": {
- "to": "../../../../../../bundle/input/mml/extensions",
- "from": "../../../../../../ts/input/mathml/mml3",
+ "to": "[bundle]/input/mml/extensions",
+ "from": "[ts]/input/mathml/mml3",
"copy": [
"mml3.sef.json"
]
diff --git a/components/mjs/node-main/config.json b/components/mjs/node-main/config.json
index da639e122..e5c5cea38 100644
--- a/components/mjs/node-main/config.json
+++ b/components/mjs/node-main/config.json
@@ -1,6 +1,6 @@
{
"copy": {
- "to": "../../../bundle",
+ "to": "[bundle]",
"from": ".",
"copy": [
"node-main.mjs",
diff --git a/components/mjs/output/util.js b/components/mjs/output/util.js
index 9b462a0ec..dd2aa52b0 100644
--- a/components/mjs/output/util.js
+++ b/components/mjs/output/util.js
@@ -1,12 +1,20 @@
import {combineDefaults, combineWithMathJax} from '#js/components/global.js';
import {Package} from '#js/components/package.js';
import {hasWindow} from '#js/util/context.js';
+import {mathjax} from '#js/mathjax.js'
export function configFont(font, jax, config, extension = '') {
- const path = (config.fontPath || `[fonts]/%%FONT%%-font${extension}`);
+ const version =
+ (MathJax.config.loader?.paths?.fonts || '').substring(0, 24) === 'https://cdn.jsdelivr.net'
+ ? `@%%VERSION%%` : '';
+ const path = (config.fontPath || `[fonts]/%%FONT%%-font${extension}${version}`);
const name = (font.match(/^[a-z]+:/) ? (font.match(/[^/:\\]*$/) || [jax])[0] : font);
combineDefaults(MathJax.config.loader, 'paths', {
- [name+extension]: (name === font ? path.replace(/%%FONT%%/g, font) : font)
+ [name+extension]: (
+ name === font
+ ? path.replace(/%%FONT%%/g, font).replace(/%%VERSION%%/g, mathjax.version)
+ : font
+ )
});
return `[${name}${extension}]`;
}
diff --git a/components/mjs/require/config.json b/components/mjs/require/config.json
index 599ec23e9..7e23a1374 100644
--- a/components/mjs/require/config.json
+++ b/components/mjs/require/config.json
@@ -1,6 +1,6 @@
{
"copy": {
- "to": "../../../bundle",
+ "to": "[bundle]",
"from": "../..",
"copy": [
"require.mjs"
diff --git a/components/mjs/source.js b/components/mjs/source.js
index ab4e056da..b6596c3c3 100644
--- a/components/mjs/source.js
+++ b/components/mjs/source.js
@@ -82,6 +82,7 @@ export const source = {
'[mathmaps]': `${src}/../../bundle/sre/mathmaps`,
'ui/lazy': `${src}/ui/lazy/lazy.js`,
'ui/menu': `${src}/ui/menu/menu.js`,
+ 'ui/no-dark-mode': `${src}/ui/nodarkmode/nodarkmode.js`,
'ui/safe': `${src}/ui/safe/safe.js`,
'mml-chtml': `${src}/mml-chtml/mml-chtml.js`,
'mml-chtml-nofont': `${src}/mml-chtml-nofont/mml-chtml-nofont.js`,
diff --git a/components/mjs/sre/config.json b/components/mjs/sre/config.json
index 5cca64ca2..ba603b8d9 100644
--- a/components/mjs/sre/config.json
+++ b/components/mjs/sre/config.json
@@ -1,6 +1,6 @@
{
"copy": {
- "to": "../../../bundle/sre",
+ "to": "[bundle]/sre",
"from": "[node]/speech-rule-engine/lib",
"copy": [
"mathmaps"
diff --git a/components/mjs/ui/no-dark-mode/config.json b/components/mjs/ui/no-dark-mode/config.json
new file mode 100644
index 000000000..8b649ae17
--- /dev/null
+++ b/components/mjs/ui/no-dark-mode/config.json
@@ -0,0 +1,5 @@
+{
+ "webpack": {
+ "name": "ui/no-dark-mode"
+ }
+}
diff --git a/components/mjs/ui/no-dark-mode/no-dark-mode.js b/components/mjs/ui/no-dark-mode/no-dark-mode.js
new file mode 100644
index 000000000..f3fdf6eb9
--- /dev/null
+++ b/components/mjs/ui/no-dark-mode/no-dark-mode.js
@@ -0,0 +1,7 @@
+import {VERSION} from '#js/components/version.js';
+import '#js/ui/no-dark-mode/no-dark-mode.js';
+
+if (MathJax.loader) {
+ MathJax.loader.checkVersion('ui/no-dark-mode', VERSION, 'extension');
+}
+
diff --git a/package.json b/package.json
index c80f1d28d..3dde7b367 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@mathjax/src",
- "version": "4.1.0",
+ "version": "4.1.1",
"description": "Beautiful and accessible math in all browsers. MathJax is an open-source JavaScript display engine for LaTeX, MathML, and AsciiMath notation that works in all browsers and in server-side node applications. This package includes the source code as well as the packaged components.",
"keywords": [
"MathJax",
@@ -142,21 +142,21 @@
"@eslint/js": "^9.39.2",
"@xmldom/xmldom": "^0.8.11",
"copyfiles": "^2.4.1",
- "diff": "^8.0.2",
+ "diff": "^8.0.3",
"eslint": "^9.39.2",
"eslint-formatter-unix": "^9.0.1",
- "eslint-plugin-jsdoc": "^61.5.0",
- "eslint-plugin-prettier": "^5.5.4",
+ "eslint-plugin-jsdoc": "^62.5.5",
+ "eslint-plugin-prettier": "^5.5.5",
"husky": "^9.1.7",
"lint-staged": "^16.2.7",
- "prettier": "^3.7.4",
- "rimraf": "^6.1.2",
+ "prettier": "^3.8.1",
+ "rimraf": "^6.1.3",
"terser-webpack-plugin": "^5.3.16",
- "typedoc": "^0.28.15",
+ "typedoc": "^0.28.17",
"typescript": "^5.9.3",
- "typescript-eslint": "^8.50.0",
+ "typescript-eslint": "^8.56.0",
"typescript-tools": "^0.3.1",
- "webpack": "^5.103.0",
+ "webpack": "^5.105.2",
"webpack-cli": "^6.0.1",
"wicked-good-xpath": "^1.3.0",
"xslt3": "^2.7.0"
@@ -168,9 +168,9 @@
]
},
"dependencies": {
- "@mathjax/mathjax-newcm-font": "4.1.0",
+ "@mathjax/mathjax-newcm-font": "4.1.1",
"mhchemparser": "^4.2.1",
"mj-context-menu": "^1.0.0",
- "speech-rule-engine": "5.0.0-beta.3"
+ "speech-rule-engine": "5.0.0-beta.6"
}
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 22da6d912..bb9d6519a 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -9,8 +9,8 @@ importers:
.:
dependencies:
'@mathjax/mathjax-newcm-font':
- specifier: 4.1.0
- version: 4.1.0
+ specifier: 4.1.1
+ version: 4.1.1
mhchemparser:
specifier: ^4.2.1
version: 4.2.1
@@ -18,8 +18,8 @@ importers:
specifier: ^1.0.0
version: 1.0.0
speech-rule-engine:
- specifier: 5.0.0-beta.3
- version: 5.0.0-beta.3
+ specifier: 5.0.0-beta.6
+ version: 5.0.0-beta.6
devDependencies:
'@eslint/js':
specifier: ^9.39.2
@@ -31,8 +31,8 @@ importers:
specifier: ^2.4.1
version: 2.4.1
diff:
- specifier: ^8.0.2
- version: 8.0.2
+ specifier: ^8.0.3
+ version: 8.0.3
eslint:
specifier: ^9.39.2
version: 9.39.2
@@ -40,11 +40,11 @@ importers:
specifier: ^9.0.1
version: 9.0.1
eslint-plugin-jsdoc:
- specifier: ^61.5.0
- version: 61.5.0(eslint@9.39.2)
+ specifier: ^62.5.5
+ version: 62.5.5(eslint@9.39.2)
eslint-plugin-prettier:
- specifier: ^5.5.4
- version: 5.5.4(@types/eslint@9.6.1)(eslint@9.39.2)(prettier@3.7.4)
+ specifier: ^5.5.5
+ version: 5.5.5(@types/eslint@9.6.1)(eslint@9.39.2)(prettier@3.8.1)
husky:
specifier: ^9.1.7
version: 9.1.7
@@ -52,32 +52,32 @@ importers:
specifier: ^16.2.7
version: 16.2.7
prettier:
- specifier: ^3.7.4
- version: 3.7.4
+ specifier: ^3.8.1
+ version: 3.8.1
rimraf:
- specifier: ^6.1.2
- version: 6.1.2
+ specifier: ^6.1.3
+ version: 6.1.3
terser-webpack-plugin:
specifier: ^5.3.16
- version: 5.3.16(webpack@5.103.0)
+ version: 5.3.16(webpack@5.105.2)
typedoc:
- specifier: ^0.28.15
- version: 0.28.15(typescript@5.9.3)
+ specifier: ^0.28.17
+ version: 0.28.17(typescript@5.9.3)
typescript:
specifier: ^5.9.3
version: 5.9.3
typescript-eslint:
- specifier: ^8.50.0
- version: 8.50.0(eslint@9.39.2)(typescript@5.9.3)
+ specifier: ^8.56.0
+ version: 8.56.0(eslint@9.39.2)(typescript@5.9.3)
typescript-tools:
specifier: ^0.3.1
version: 0.3.1
webpack:
- specifier: ^5.103.0
- version: 5.103.0(webpack-cli@6.0.1)
+ specifier: ^5.105.2
+ version: 5.105.2(webpack-cli@6.0.1)
webpack-cli:
specifier: ^6.0.1
- version: 6.0.1(webpack@5.103.0)
+ version: 6.0.1(webpack@5.105.2)
wicked-good-xpath:
specifier: ^1.3.0
version: 1.3.0
@@ -91,22 +91,22 @@ packages:
resolution: {integrity: sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==}
engines: {node: '>=14.17.0'}
- '@es-joy/jsdoccomment@0.76.0':
- resolution: {integrity: sha512-g+RihtzFgGTx2WYCuTHbdOXJeAlGnROws0TeALx9ow/ZmOROOZkVg5wp/B44n0WJgI4SQFP1eWM2iRPlU2Y14w==}
- engines: {node: '>=20.11.0'}
+ '@es-joy/jsdoccomment@0.84.0':
+ resolution: {integrity: sha512-0xew1CxOam0gV5OMjh2KjFQZsKL2bByX1+q4j3E73MpYIdyUxcZb/xQct9ccUb+ve5KGUYbCUxyPnYB7RbuP+w==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
'@es-joy/resolve.exports@1.2.0':
resolution: {integrity: sha512-Q9hjxWI5xBM+qW2enxfe8wDKdFWMfd0Z29k5ZJnuBqD/CasY5Zryj09aCA6owbGATWz+39p5uIdaHXpopOcG8g==}
engines: {node: '>=10'}
- '@eslint-community/eslint-utils@4.9.0':
- resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==}
+ '@eslint-community/eslint-utils@4.9.1':
+ resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
- '@eslint-community/regexpp@4.12.1':
- resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
+ '@eslint-community/regexpp@4.12.2':
+ resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
'@eslint/config-array@0.21.1':
@@ -121,8 +121,8 @@ packages:
resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/eslintrc@3.3.1':
- resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
+ '@eslint/eslintrc@3.3.3':
+ resolution: {integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/js@9.39.2':
@@ -137,76 +137,63 @@ packages:
resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@gerrit0/mini-shiki@3.20.0':
- resolution: {integrity: sha512-Wa57i+bMpK6PGJZ1f2myxo3iO+K/kZikcyvH8NIqNNZhQUbDav7V9LQmWOXhf946mz5c1NZ19WMsGYiDKTryzQ==}
+ '@gerrit0/mini-shiki@3.22.0':
+ resolution: {integrity: sha512-jMpciqEVUBKE1QwU64S4saNMzpsSza6diNCk4MWAeCxO2+LFi2FIFmL2S0VDLzEJCxuvCbU783xi8Hp/gkM5CQ==}
'@humanfs/core@0.19.1':
resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
engines: {node: '>=18.18.0'}
- '@humanfs/node@0.16.6':
- resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==}
+ '@humanfs/node@0.16.7':
+ resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==}
engines: {node: '>=18.18.0'}
'@humanwhocodes/module-importer@1.0.1':
resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
engines: {node: '>=12.22'}
- '@humanwhocodes/retry@0.3.1':
- resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
- engines: {node: '>=18.18'}
-
'@humanwhocodes/retry@0.4.3':
resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
engines: {node: '>=18.18'}
- '@isaacs/balanced-match@4.0.1':
- resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==}
- engines: {node: 20 || >=22}
-
- '@isaacs/brace-expansion@5.0.0':
- resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==}
- engines: {node: 20 || >=22}
+ '@isaacs/cliui@9.0.0':
+ resolution: {integrity: sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==}
+ engines: {node: '>=18'}
- '@jridgewell/gen-mapping@0.3.8':
- resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
- engines: {node: '>=6.0.0'}
+ '@jridgewell/gen-mapping@0.3.13':
+ resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
'@jridgewell/resolve-uri@3.1.2':
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
engines: {node: '>=6.0.0'}
- '@jridgewell/set-array@1.2.1':
- resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
- engines: {node: '>=6.0.0'}
+ '@jridgewell/source-map@0.3.11':
+ resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==}
- '@jridgewell/source-map@0.3.6':
- resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==}
+ '@jridgewell/sourcemap-codec@1.5.5':
+ resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
- '@jridgewell/sourcemap-codec@1.5.0':
- resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
+ '@jridgewell/trace-mapping@0.3.31':
+ resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
- '@jridgewell/trace-mapping@0.3.25':
- resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
+ '@mathjax/mathjax-newcm-font@4.1.1':
+ resolution: {integrity: sha512-LeV5AWzoR7k/k2tg5mW0Ad3Jr9oK9guW/zBUIP8aoiIZcZIhvAV9dlbtUSqSe1wgEBUP1KOcJXcrE/NxOqkxlQ==}
- '@mathjax/mathjax-newcm-font@4.1.0':
- resolution: {integrity: sha512-n10AwYubUa2hyOzxSRzkwRrgCVns083zkentryXICMPKaWT/watfvK2sUk5D9Bow9mpDfoqb5EWApuUvqnlzaw==}
-
- '@pkgr/core@0.2.7':
- resolution: {integrity: sha512-YLT9Zo3oNPJoBjBc4q8G2mjU4tqIbf5CEOORbUUr48dCD9q3umJ3IPlVqOqDakPfd2HuwccBaqlGhN4Gmr5OWg==}
+ '@pkgr/core@0.2.9':
+ resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==}
engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
- '@shikijs/engine-oniguruma@3.20.0':
- resolution: {integrity: sha512-Yx3gy7xLzM0ZOjqoxciHjA7dAt5tyzJE3L4uQoM83agahy+PlW244XJSrmJRSBvGYELDhYXPacD4R/cauV5bzQ==}
+ '@shikijs/engine-oniguruma@3.22.0':
+ resolution: {integrity: sha512-DyXsOG0vGtNtl7ygvabHd7Mt5EY8gCNqR9Y7Lpbbd/PbJvgWrqaKzH1JW6H6qFkuUa8aCxoiYVv8/YfFljiQxA==}
- '@shikijs/langs@3.20.0':
- resolution: {integrity: sha512-le+bssCxcSHrygCWuOrYJHvjus6zhQ2K7q/0mgjiffRbkhM4o1EWu2m+29l0yEsHDbWaWPNnDUTRVVBvBBeKaA==}
+ '@shikijs/langs@3.22.0':
+ resolution: {integrity: sha512-x/42TfhWmp6H00T6uwVrdTJGKgNdFbrEdhaDwSR5fd5zhQ1Q46bHq9EO61SCEWJR0HY7z2HNDMaBZp8JRmKiIA==}
- '@shikijs/themes@3.20.0':
- resolution: {integrity: sha512-U1NSU7Sl26Q7ErRvJUouArxfM2euWqq1xaSrbqMu2iqa+tSp0D1Yah8216sDYbdDHw4C8b75UpE65eWorm2erQ==}
+ '@shikijs/themes@3.22.0':
+ resolution: {integrity: sha512-o+tlOKqsr6FE4+mYJG08tfCFDS+3CG20HbldXeVoyP+cYSUxDhrFf3GPjE60U55iOkkjbpY2uC3It/eeja35/g==}
- '@shikijs/types@3.20.0':
- resolution: {integrity: sha512-lhYAATn10nkZcBQ0BlzSbJA3wcmL5MXUUF8d2Zzon6saZDlToKaiRX60n2+ZaHJCmXEcZRWNzn+k9vplr8Jhsw==}
+ '@shikijs/types@3.22.0':
+ resolution: {integrity: sha512-491iAekgKDBFE67z70Ok5a8KBMsQ2IJwOWw3us/7ffQkIBCyOQfm/aNwVMBUriP02QshIfgHCBSIYAl3u2eWjg==}
'@shikijs/vscode-textmate@10.0.2':
resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==}
@@ -230,69 +217,69 @@ packages:
'@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
- '@types/node@22.15.30':
- resolution: {integrity: sha512-6Q7lr06bEHdlfplU6YRbgG1SFBdlsfNC4/lX+SkhiTs0cpJkOElmWls8PxDFv4yY/xKb8Y6SO0OmSX4wgqTZbA==}
+ '@types/node@25.2.3':
+ resolution: {integrity: sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ==}
'@types/unist@3.0.3':
resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
- '@typescript-eslint/eslint-plugin@8.50.0':
- resolution: {integrity: sha512-O7QnmOXYKVtPrfYzMolrCTfkezCJS9+ljLdKW/+DCvRsc3UAz+sbH6Xcsv7p30+0OwUbeWfUDAQE0vpabZ3QLg==}
+ '@typescript-eslint/eslint-plugin@8.56.0':
+ resolution: {integrity: sha512-lRyPDLzNCuae71A3t9NEINBiTn7swyOhvUj3MyUOxb8x6g6vPEFoOU+ZRmGMusNC3X3YMhqMIX7i8ShqhT74Pw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- '@typescript-eslint/parser': ^8.50.0
- eslint: ^8.57.0 || ^9.0.0
+ '@typescript-eslint/parser': ^8.56.0
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/parser@8.50.0':
- resolution: {integrity: sha512-6/cmF2piao+f6wSxUsJLZjck7OQsYyRtcOZS02k7XINSNlz93v6emM8WutDQSXnroG2xwYlEVHJI+cPA7CPM3Q==}
+ '@typescript-eslint/parser@8.56.0':
+ resolution: {integrity: sha512-IgSWvLobTDOjnaxAfDTIHaECbkNlAlKv2j5SjpB2v7QHKv1FIfjwMy8FsDbVfDX/KjmCmYICcw7uGaXLhtsLNg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- eslint: ^8.57.0 || ^9.0.0
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/project-service@8.50.0':
- resolution: {integrity: sha512-Cg/nQcL1BcoTijEWyx4mkVC56r8dj44bFDvBdygifuS20f3OZCHmFbjF34DPSi07kwlFvqfv/xOLnJ5DquxSGQ==}
+ '@typescript-eslint/project-service@8.56.0':
+ resolution: {integrity: sha512-M3rnyL1vIQOMeWxTWIW096/TtVP+8W3p/XnaFflhmcFp+U4zlxUxWj4XwNs6HbDeTtN4yun0GNTTDBw/SvufKg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/scope-manager@8.50.0':
- resolution: {integrity: sha512-xCwfuCZjhIqy7+HKxBLrDVT5q/iq7XBVBXLn57RTIIpelLtEIZHXAF/Upa3+gaCpeV1NNS5Z9A+ID6jn50VD4A==}
+ '@typescript-eslint/scope-manager@8.56.0':
+ resolution: {integrity: sha512-7UiO/XwMHquH+ZzfVCfUNkIXlp/yQjjnlYUyYz7pfvlK3/EyyN6BK+emDmGNyQLBtLGaYrTAI6KOw8tFucWL2w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/tsconfig-utils@8.50.0':
- resolution: {integrity: sha512-vxd3G/ybKTSlm31MOA96gqvrRGv9RJ7LGtZCn2Vrc5htA0zCDvcMqUkifcjrWNNKXHUU3WCkYOzzVSFBd0wa2w==}
+ '@typescript-eslint/tsconfig-utils@8.56.0':
+ resolution: {integrity: sha512-bSJoIIt4o3lKXD3xmDh9chZcjCz5Lk8xS7Rxn+6l5/pKrDpkCwtQNQQwZ2qRPk7TkUYhrq3WPIHXOXlbXP0itg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/type-utils@8.50.0':
- resolution: {integrity: sha512-7OciHT2lKCewR0mFoBrvZJ4AXTMe/sYOe87289WAViOocEmDjjv8MvIOT2XESuKj9jp8u3SZYUSh89QA4S1kQw==}
+ '@typescript-eslint/type-utils@8.56.0':
+ resolution: {integrity: sha512-qX2L3HWOU2nuDs6GzglBeuFXviDODreS58tLY/BALPC7iu3Fa+J7EOTwnX9PdNBxUI7Uh0ntP0YWGnxCkXzmfA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- eslint: ^8.57.0 || ^9.0.0
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/types@8.50.0':
- resolution: {integrity: sha512-iX1mgmGrXdANhhITbpp2QQM2fGehBse9LbTf0sidWK6yg/NE+uhV5dfU1g6EYPlcReYmkE9QLPq/2irKAmtS9w==}
+ '@typescript-eslint/types@8.56.0':
+ resolution: {integrity: sha512-DBsLPs3GsWhX5HylbP9HNG15U0bnwut55Lx12bHB9MpXxQ+R5GC8MwQe+N1UFXxAeQDvEsEDY6ZYwX03K7Z6HQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/typescript-estree@8.50.0':
- resolution: {integrity: sha512-W7SVAGBR/IX7zm1t70Yujpbk+zdPq/u4soeFSknWFdXIFuWsBGBOUu/Tn/I6KHSKvSh91OiMuaSnYp3mtPt5IQ==}
+ '@typescript-eslint/typescript-estree@8.56.0':
+ resolution: {integrity: sha512-ex1nTUMWrseMltXUHmR2GAQ4d+WjkZCT4f+4bVsps8QEdh0vlBsaCokKTPlnqBFqqGaxilDNJG7b8dolW2m43Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/utils@8.50.0':
- resolution: {integrity: sha512-87KgUXET09CRjGCi2Ejxy3PULXna63/bMYv72tCAlDJC3Yqwln0HiFJ3VJMst2+mEtNtZu5oFvX4qJGjKsnAgg==}
+ '@typescript-eslint/utils@8.56.0':
+ resolution: {integrity: sha512-RZ3Qsmi2nFGsS+n+kjLAYDPVlrzf7UhTffrDIKr+h2yzAlYP/y5ZulU0yeDEPItos2Ph46JAL5P/On3pe7kDIQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- eslint: ^8.57.0 || ^9.0.0
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/visitor-keys@8.50.0':
- resolution: {integrity: sha512-Xzmnb58+Db78gT/CCj/PVCvK+zxbnsw6F+O1oheYszJbBSdEjVhQi3C/Xttzxgi/GLmpvOggRs1RFpiJ8+c34Q==}
+ '@typescript-eslint/visitor-keys@8.56.0':
+ resolution: {integrity: sha512-q+SL+b+05Ud6LbEE35qe4A99P+htKTKVbyiNEe45eCbJFyh/HVK9QXwlrbz+Q4L8SOW4roxSVwXYj4DMBT7Ieg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@webassemblyjs/ast@1.14.1':
@@ -411,27 +398,27 @@ packages:
ajv@6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
- ajv@8.17.1:
- resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
+ ajv@8.18.0:
+ resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==}
- ansi-escapes@7.0.0:
- resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==}
+ ansi-escapes@7.3.0:
+ resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==}
engines: {node: '>=18'}
ansi-regex@5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
- ansi-regex@6.1.0:
- resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
+ ansi-regex@6.2.2:
+ resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==}
engines: {node: '>=12'}
ansi-styles@4.3.0:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
engines: {node: '>=8'}
- ansi-styles@6.2.1:
- resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
+ ansi-styles@6.2.3:
+ resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==}
engines: {node: '>=12'}
are-docs-informative@0.0.2:
@@ -444,21 +431,29 @@ packages:
asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
- axios@1.9.0:
- resolution: {integrity: sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==}
+ axios@1.13.5:
+ resolution: {integrity: sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==}
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
- baseline-browser-mapping@2.9.7:
- resolution: {integrity: sha512-k9xFKplee6KIio3IDbwj+uaCLpqzOwakOgmqzPezM0sFJlFKcg30vk2wOiAJtkTSfx0SSQDSe8q+mWA/fSH5Zg==}
+ balanced-match@4.0.2:
+ resolution: {integrity: sha512-x0K50QvKQ97fdEz2kPehIerj+YTeptKF9hyYkKf6egnwmMWAkADiO0QCzSp0R5xN8FTZgYaBfSaue46Ej62nMg==}
+ engines: {node: 20 || >=22}
+
+ baseline-browser-mapping@2.9.19:
+ resolution: {integrity: sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==}
hasBin: true
- brace-expansion@1.1.11:
- resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+ brace-expansion@1.1.12:
+ resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
- brace-expansion@2.0.1:
- resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+ brace-expansion@2.0.2:
+ resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
+
+ brace-expansion@5.0.2:
+ resolution: {integrity: sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw==}
+ engines: {node: 20 || >=22}
braces@3.0.3:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
@@ -480,8 +475,8 @@ packages:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
- caniuse-lite@1.0.30001760:
- resolution: {integrity: sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw==}
+ caniuse-lite@1.0.30001770:
+ resolution: {integrity: sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw==}
chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
@@ -528,11 +523,15 @@ packages:
resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==}
engines: {node: '>=20'}
+ commander@14.0.3:
+ resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==}
+ engines: {node: '>=20'}
+
commander@2.20.3:
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
- comment-parser@1.4.1:
- resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==}
+ comment-parser@1.4.5:
+ resolution: {integrity: sha512-aRDkn3uyIlCFfk5NUA+VdwMmMsh8JGhc4hapfV4yxymHGQ3BVskMQfoXGpCo5IoBuQ9tS5iiVKhCpTcB4pW4qw==}
engines: {node: '>= 12.0.0'}
concat-map@0.0.1:
@@ -549,15 +548,6 @@ packages:
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
engines: {node: '>= 8'}
- debug@4.4.1:
- resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
- engines: {node: '>=6.0'}
- peerDependencies:
- supports-color: '*'
- peerDependenciesMeta:
- supports-color:
- optional: true
-
debug@4.4.3:
resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
engines: {node: '>=6.0'}
@@ -574,33 +564,33 @@ packages:
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
engines: {node: '>=0.4.0'}
- diff@8.0.2:
- resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==}
+ diff@8.0.3:
+ resolution: {integrity: sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==}
engines: {node: '>=0.3.1'}
dunder-proto@1.0.1:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'}
- electron-to-chromium@1.5.267:
- resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==}
+ electron-to-chromium@1.5.286:
+ resolution: {integrity: sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==}
- emoji-regex@10.4.0:
- resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==}
+ emoji-regex@10.6.0:
+ resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==}
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
- enhanced-resolve@5.18.1:
- resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==}
+ enhanced-resolve@5.19.0:
+ resolution: {integrity: sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==}
engines: {node: '>=10.13.0'}
entities@4.5.0:
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
engines: {node: '>=0.12'}
- envinfo@7.14.0:
- resolution: {integrity: sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==}
+ envinfo@7.21.0:
+ resolution: {integrity: sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow==}
engines: {node: '>=4'}
hasBin: true
@@ -616,8 +606,8 @@ packages:
resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
engines: {node: '>= 0.4'}
- es-module-lexer@1.7.0:
- resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
+ es-module-lexer@2.0.0:
+ resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==}
es-object-atoms@1.1.1:
resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
@@ -639,14 +629,14 @@ packages:
resolution: {integrity: sha512-6trzj/OL0Q2B5mw3dqryAmQWzo5vVfL9YkaJdw3laouSgbs83TsSz9GFN+1/7lMUlUkBY+8mVEWelkAQoKnlcA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- eslint-plugin-jsdoc@61.5.0:
- resolution: {integrity: sha512-PR81eOGq4S7diVnV9xzFSBE4CDENRQGP0Lckkek8AdHtbj+6Bm0cItwlFnxsLFriJHspiE3mpu8U20eODyToIg==}
- engines: {node: '>=20.11.0'}
+ eslint-plugin-jsdoc@62.5.5:
+ resolution: {integrity: sha512-aRp0KVW26imgPqn17oSDnJdA3tlu+6D/xI/pqWzK5qDPQbldQ1Hsg84dYAsFyvGJhI+u/sGvzgGjMjlKQtUG/Q==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
peerDependencies:
eslint: ^7.0.0 || ^8.0.0 || ^9.0.0
- eslint-plugin-prettier@5.5.4:
- resolution: {integrity: sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==}
+ eslint-plugin-prettier@5.5.5:
+ resolution: {integrity: sha512-hscXkbqUZ2sPithAuLm5MXL+Wph+U7wHngPBv9OMWwlP8iaflyxpjTYZkmdgB4/vPIhemRlBEoLrH7UC1n7aUw==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
'@types/eslint': '>=8.0.0'
@@ -675,6 +665,10 @@ packages:
resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ eslint-visitor-keys@5.0.0:
+ resolution: {integrity: sha512-A0XeIi7CXU7nPlfHS9loMYEKxUaONu/hTEzHTGba9Huu94Cq1hPivf+DE5erJozZOky0LfvXAyrV/tcswpLI0Q==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+
eslint@9.39.2:
resolution: {integrity: sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -689,8 +683,12 @@ packages:
resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- esquery@1.6.0:
- resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
+ espree@11.1.0:
+ resolution: {integrity: sha512-WFWYhO1fV4iYkqOOvq8FbqIhr2pYfoDY0kCotMkDeNtGpiGGkZ1iov2u8ydjtgM8yF8rzK7oaTbw2NAzbAbehw==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+
+ esquery@1.7.0:
+ resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==}
engines: {node: '>=0.10'}
esrecurse@4.3.0:
@@ -709,8 +707,8 @@ packages:
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
engines: {node: '>=0.10.0'}
- eventemitter3@5.0.1:
- resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+ eventemitter3@5.0.4:
+ resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==}
events@3.3.0:
resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
@@ -728,8 +726,8 @@ packages:
fast-levenshtein@2.0.6:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
- fast-uri@3.0.6:
- resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==}
+ fast-uri@3.1.0:
+ resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==}
fastest-levenshtein@1.0.16:
resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==}
@@ -771,8 +769,8 @@ packages:
flatted@3.3.3:
resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
- follow-redirects@1.15.9:
- resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==}
+ follow-redirects@1.15.11:
+ resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==}
engines: {node: '>=4.0'}
peerDependencies:
debug: '*'
@@ -780,8 +778,8 @@ packages:
debug:
optional: true
- form-data@4.0.3:
- resolution: {integrity: sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==}
+ form-data@4.0.5:
+ resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==}
engines: {node: '>= 6'}
fs.realpath@1.0.0:
@@ -794,8 +792,8 @@ packages:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
- get-east-asian-width@1.3.0:
- resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==}
+ get-east-asian-width@1.4.0:
+ resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==}
engines: {node: '>=18'}
get-intrinsic@1.3.0:
@@ -813,13 +811,13 @@ packages:
glob-to-regexp@0.4.1:
resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
- glob@13.0.0:
- resolution: {integrity: sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==}
+ glob@13.0.4:
+ resolution: {integrity: sha512-KACie1EOs9BIOMtenFaxwmYODWA3/fTfGSUnLhMJpXRntu1g+uL/Xvub5f8SCTppvo9q62Qy4LeOoUiaL54G5A==}
engines: {node: 20 || >=22}
glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
- deprecated: Glob versions prior to v9 are no longer supported
+ deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
globals@14.0.0:
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
@@ -900,8 +898,8 @@ packages:
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
engines: {node: '>=8'}
- is-fullwidth-code-point@5.0.0:
- resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==}
+ is-fullwidth-code-point@5.1.0:
+ resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==}
engines: {node: '>=18'}
is-glob@4.0.3:
@@ -929,16 +927,20 @@ packages:
resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==}
engines: {node: '>=0.10.0'}
+ jackspeak@4.2.3:
+ resolution: {integrity: sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==}
+ engines: {node: 20 || >=22}
+
jest-worker@27.5.1:
resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
engines: {node: '>= 10.13.0'}
- js-yaml@4.1.0:
- resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ js-yaml@4.1.1:
+ resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==}
hasBin: true
- jsdoc-type-pratt-parser@6.10.0:
- resolution: {integrity: sha512-+LexoTRyYui5iOhJGn13N9ZazL23nAHGkXsa1p/C8yeq79WRfLBag6ZZ0FQG2aRoc9yfo59JT9EYCQonOkHKkQ==}
+ jsdoc-type-pratt-parser@7.1.1:
+ resolution: {integrity: sha512-/2uqY7x6bsrpi3i9LVU6J89352C0rpMk0as8trXxCtvd4kPk1ke/Eyif6wqfSLvoNJqcDG9Vk4UsXgygzCt2xA==}
engines: {node: '>=20.0.0'}
json-buffer@3.0.1:
@@ -998,15 +1000,15 @@ packages:
resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==}
engines: {node: '>=18'}
- lru-cache@11.2.4:
- resolution: {integrity: sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==}
+ lru-cache@11.2.6:
+ resolution: {integrity: sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==}
engines: {node: 20 || >=22}
lunr@2.3.9:
resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==}
- markdown-it@14.1.0:
- resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==}
+ markdown-it@14.1.1:
+ resolution: {integrity: sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==}
hasBin: true
math-intrinsics@1.1.0:
@@ -1038,8 +1040,8 @@ packages:
resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==}
engines: {node: '>=18'}
- minimatch@10.1.1:
- resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==}
+ minimatch@10.2.1:
+ resolution: {integrity: sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A==}
engines: {node: 20 || >=22}
minimatch@3.1.2:
@@ -1170,12 +1172,12 @@ packages:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
- prettier-linter-helpers@1.0.0:
- resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==}
+ prettier-linter-helpers@1.0.1:
+ resolution: {integrity: sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==}
engines: {node: '>=6.0.0'}
- prettier@3.7.4:
- resolution: {integrity: sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==}
+ prettier@3.8.1:
+ resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==}
engines: {node: '>=14'}
hasBin: true
@@ -1230,8 +1232,8 @@ packages:
resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
engines: {node: '>=8'}
- resolve@1.22.10:
- resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
+ resolve@1.22.11:
+ resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==}
engines: {node: '>= 0.4'}
hasBin: true
@@ -1242,8 +1244,8 @@ packages:
rfdc@1.4.1:
resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
- rimraf@6.1.2:
- resolution: {integrity: sha512-cFCkPslJv7BAXJsYlK1dZsbP8/ZNLkCAQ0bi1hf5EKX2QHegmDFEFA6QhuYJlk7UDdc+02JjO80YSOrWPpw06g==}
+ rimraf@6.1.3:
+ resolution: {integrity: sha512-LKg+Cr2ZF61fkcaK1UdkH2yEBBKnYjTyWzTJT6KNPcSPaiT7HSdhtMXQuN5wkTX0Xu72KQ1l8S42rlmexS2hSA==}
engines: {node: 20 || >=22}
hasBin: true
@@ -1256,16 +1258,12 @@ packages:
saxon-js@2.7.0:
resolution: {integrity: sha512-uGAv7H85EuWtAyyXVezXBg3/j2UvhEfT3N9+sqkGwCJVW33KlkadllDCdES/asCDklUo0UlM6178tZ0n3GPZjQ==}
- schema-utils@4.3.2:
- resolution: {integrity: sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==}
- engines: {node: '>= 10.13.0'}
-
schema-utils@4.3.3:
resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==}
engines: {node: '>= 10.13.0'}
- semver@7.7.3:
- resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==}
+ semver@7.7.4:
+ resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==}
engines: {node: '>=10'}
hasBin: true
@@ -1288,8 +1286,8 @@ packages:
resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
engines: {node: '>=14'}
- slice-ansi@7.1.0:
- resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==}
+ slice-ansi@7.1.2:
+ resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==}
engines: {node: '>=18'}
source-map-support@0.5.21:
@@ -1305,11 +1303,11 @@ packages:
spdx-expression-parse@4.0.0:
resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==}
- spdx-license-ids@3.0.21:
- resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==}
+ spdx-license-ids@3.0.22:
+ resolution: {integrity: sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==}
- speech-rule-engine@5.0.0-beta.3:
- resolution: {integrity: sha512-wSrjCo8h4SJmGtjicD0OrTuCNH/wEaMsV+ktA1D9C2IPnensiP4pfPv+DnEZDMbauC5SCSE1prP5KA0z/W8bLg==}
+ speech-rule-engine@5.0.0-beta.6:
+ resolution: {integrity: sha512-ohK2DizQ9s/JeiHhIraATNBwYpg2jSlSIF4Sq8pgHgSqMq2tkLRZLUq1BT2DjnmCWzkKeGSOaz6t/KzDGRGhPg==}
hasBin: true
string-argv@0.3.2:
@@ -1324,8 +1322,8 @@ packages:
resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
engines: {node: '>=18'}
- string-width@8.1.0:
- resolution: {integrity: sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==}
+ string-width@8.1.1:
+ resolution: {integrity: sha512-KpqHIdDL9KwYk22wEOg/VIqYbrnLeSApsKT/bSj6Ez7pn3CftUiLAv2Lccpq1ALcpLV9UX1Ppn92npZWu2w/aw==}
engines: {node: '>=20'}
string_decoder@0.10.31:
@@ -1338,8 +1336,8 @@ packages:
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
engines: {node: '>=8'}
- strip-ansi@7.1.0:
- resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
+ strip-ansi@7.1.2:
+ resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==}
engines: {node: '>=12'}
strip-json-comments@3.1.1:
@@ -1358,8 +1356,8 @@ packages:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
- synckit@0.11.8:
- resolution: {integrity: sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==}
+ synckit@0.11.12:
+ resolution: {integrity: sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==}
engines: {node: ^14.18.0 || >=16.0.0}
tapable@2.3.0:
@@ -1382,8 +1380,8 @@ packages:
uglify-js:
optional: true
- terser@5.41.0:
- resolution: {integrity: sha512-H406eLPXpZbAX14+B8psIuvIr8+3c+2hkuYzpMkoE0ij+NdsVATbA78vb8neA/eqrj7rywa2pIkdmWRsXW6wmw==}
+ terser@5.46.0:
+ resolution: {integrity: sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==}
engines: {node: '>=10'}
hasBin: true
@@ -1402,8 +1400,8 @@ packages:
resolution: {integrity: sha512-41wJyvKep3yT2tyPqX/4blcfybknGB4D+oETKLs7Q76UiPqRpUJK3hr1nxelyYO0PHKVzJwlu0aCeEAsGI6rpw==}
engines: {node: '>=20'}
- ts-api-utils@2.1.0:
- resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==}
+ ts-api-utils@2.4.0:
+ resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==}
engines: {node: '>=18.12'}
peerDependencies:
typescript: '>=4.8.4'
@@ -1412,18 +1410,18 @@ packages:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'}
- typedoc@0.28.15:
- resolution: {integrity: sha512-mw2/2vTL7MlT+BVo43lOsufkkd2CJO4zeOSuWQQsiXoV2VuEn7f6IZp2jsUDPmBMABpgR0R5jlcJ2OGEFYmkyg==}
+ typedoc@0.28.17:
+ resolution: {integrity: sha512-ZkJ2G7mZrbxrKxinTQMjFqsCoYY6a5Luwv2GKbTnBCEgV2ihYm5CflA9JnJAwH0pZWavqfYxmDkFHPt4yx2oDQ==}
engines: {node: '>= 18', pnpm: '>= 10'}
hasBin: true
peerDependencies:
typescript: 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x || 5.9.x
- typescript-eslint@8.50.0:
- resolution: {integrity: sha512-Q1/6yNUmCpH94fbgMUMg2/BSAr/6U7GBk61kZTv1/asghQOWOjTlp9K8mixS5NcJmm2creY+UFfGeW/+OcA64A==}
+ typescript-eslint@8.56.0:
+ resolution: {integrity: sha512-c7toRLrotJ9oixgdW7liukZpsnq5CZ7PuKztubGYlNppuTqhIoWfhgHo/7EU0v06gS2l/x0i2NEFK1qMIf0rIg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- eslint: ^8.57.0 || ^9.0.0
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
typescript: '>=4.8.4 <6.0.0'
typescript-tools@0.3.1:
@@ -1438,15 +1436,15 @@ packages:
uc.micro@2.1.0:
resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==}
- undici-types@6.21.0:
- resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+ undici-types@7.16.0:
+ resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==}
untildify@4.0.0:
resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==}
engines: {node: '>=8'}
- update-browserslist-db@1.2.2:
- resolution: {integrity: sha512-E85pfNzMQ9jpKkA7+TJAi4TJN+tBCuWh5rUcS/sv6cFi+1q9LYDwDI5dpUL0u/73EElyQ8d3TEaeW4sPedBqYA==}
+ update-browserslist-db@1.2.3:
+ resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==}
hasBin: true
peerDependencies:
browserslist: '>= 4.21.0'
@@ -1457,8 +1455,8 @@ packages:
util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
- watchpack@2.4.4:
- resolution: {integrity: sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==}
+ watchpack@2.5.1:
+ resolution: {integrity: sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==}
engines: {node: '>=10.13.0'}
webpack-cli@6.0.1:
@@ -1479,12 +1477,12 @@ packages:
resolution: {integrity: sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==}
engines: {node: '>=18.0.0'}
- webpack-sources@3.3.3:
- resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==}
+ webpack-sources@3.3.4:
+ resolution: {integrity: sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==}
engines: {node: '>=10.13.0'}
- webpack@5.103.0:
- resolution: {integrity: sha512-HU1JOuV1OavsZ+mfigY0j8d1TgQgbZ6M+J75zDkpEAwYeXjWSqrGJtgnPblJjd/mAyTNQ7ygw0MiKOn6etz8yw==}
+ webpack@5.105.2:
+ resolution: {integrity: sha512-dRXm0a2qcHPUBEzVk8uph0xWSjV/xZxenQQbLwnwP7caQCYpqG1qddwlyEkIDkYn0K8tvmcrZ+bOrzoQ3HxCDw==}
engines: {node: '>=10.13.0'}
hasBin: true
peerDependencies:
@@ -1512,8 +1510,8 @@ packages:
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
engines: {node: '>=10'}
- wrap-ansi@9.0.0:
- resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==}
+ wrap-ansi@9.0.2:
+ resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==}
engines: {node: '>=18'}
wrappy@1.0.2:
@@ -1552,27 +1550,27 @@ snapshots:
'@discoveryjs/json-ext@0.6.3': {}
- '@es-joy/jsdoccomment@0.76.0':
+ '@es-joy/jsdoccomment@0.84.0':
dependencies:
'@types/estree': 1.0.8
- '@typescript-eslint/types': 8.50.0
- comment-parser: 1.4.1
- esquery: 1.6.0
- jsdoc-type-pratt-parser: 6.10.0
+ '@typescript-eslint/types': 8.56.0
+ comment-parser: 1.4.5
+ esquery: 1.7.0
+ jsdoc-type-pratt-parser: 7.1.1
'@es-joy/resolve.exports@1.2.0': {}
- '@eslint-community/eslint-utils@4.9.0(eslint@9.39.2)':
+ '@eslint-community/eslint-utils@4.9.1(eslint@9.39.2)':
dependencies:
eslint: 9.39.2
eslint-visitor-keys: 3.4.3
- '@eslint-community/regexpp@4.12.1': {}
+ '@eslint-community/regexpp@4.12.2': {}
'@eslint/config-array@0.21.1':
dependencies:
'@eslint/object-schema': 2.1.7
- debug: 4.4.1
+ debug: 4.4.3
minimatch: 3.1.2
transitivePeerDependencies:
- supports-color
@@ -1585,15 +1583,15 @@ snapshots:
dependencies:
'@types/json-schema': 7.0.15
- '@eslint/eslintrc@3.3.1':
+ '@eslint/eslintrc@3.3.3':
dependencies:
ajv: 6.12.6
- debug: 4.4.1
+ debug: 4.4.3
espree: 10.4.0
globals: 14.0.0
ignore: 5.3.2
import-fresh: 3.3.1
- js-yaml: 4.1.0
+ js-yaml: 4.1.1
minimatch: 3.1.2
strip-json-comments: 3.1.1
transitivePeerDependencies:
@@ -1608,73 +1606,64 @@ snapshots:
'@eslint/core': 0.17.0
levn: 0.4.1
- '@gerrit0/mini-shiki@3.20.0':
+ '@gerrit0/mini-shiki@3.22.0':
dependencies:
- '@shikijs/engine-oniguruma': 3.20.0
- '@shikijs/langs': 3.20.0
- '@shikijs/themes': 3.20.0
- '@shikijs/types': 3.20.0
+ '@shikijs/engine-oniguruma': 3.22.0
+ '@shikijs/langs': 3.22.0
+ '@shikijs/themes': 3.22.0
+ '@shikijs/types': 3.22.0
'@shikijs/vscode-textmate': 10.0.2
'@humanfs/core@0.19.1': {}
- '@humanfs/node@0.16.6':
+ '@humanfs/node@0.16.7':
dependencies:
'@humanfs/core': 0.19.1
- '@humanwhocodes/retry': 0.3.1
+ '@humanwhocodes/retry': 0.4.3
'@humanwhocodes/module-importer@1.0.1': {}
- '@humanwhocodes/retry@0.3.1': {}
-
'@humanwhocodes/retry@0.4.3': {}
- '@isaacs/balanced-match@4.0.1': {}
-
- '@isaacs/brace-expansion@5.0.0':
- dependencies:
- '@isaacs/balanced-match': 4.0.1
+ '@isaacs/cliui@9.0.0': {}
- '@jridgewell/gen-mapping@0.3.8':
+ '@jridgewell/gen-mapping@0.3.13':
dependencies:
- '@jridgewell/set-array': 1.2.1
- '@jridgewell/sourcemap-codec': 1.5.0
- '@jridgewell/trace-mapping': 0.3.25
+ '@jridgewell/sourcemap-codec': 1.5.5
+ '@jridgewell/trace-mapping': 0.3.31
'@jridgewell/resolve-uri@3.1.2': {}
- '@jridgewell/set-array@1.2.1': {}
-
- '@jridgewell/source-map@0.3.6':
+ '@jridgewell/source-map@0.3.11':
dependencies:
- '@jridgewell/gen-mapping': 0.3.8
- '@jridgewell/trace-mapping': 0.3.25
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
- '@jridgewell/sourcemap-codec@1.5.0': {}
+ '@jridgewell/sourcemap-codec@1.5.5': {}
- '@jridgewell/trace-mapping@0.3.25':
+ '@jridgewell/trace-mapping@0.3.31':
dependencies:
'@jridgewell/resolve-uri': 3.1.2
- '@jridgewell/sourcemap-codec': 1.5.0
+ '@jridgewell/sourcemap-codec': 1.5.5
- '@mathjax/mathjax-newcm-font@4.1.0': {}
+ '@mathjax/mathjax-newcm-font@4.1.1': {}
- '@pkgr/core@0.2.7': {}
+ '@pkgr/core@0.2.9': {}
- '@shikijs/engine-oniguruma@3.20.0':
+ '@shikijs/engine-oniguruma@3.22.0':
dependencies:
- '@shikijs/types': 3.20.0
+ '@shikijs/types': 3.22.0
'@shikijs/vscode-textmate': 10.0.2
- '@shikijs/langs@3.20.0':
+ '@shikijs/langs@3.22.0':
dependencies:
- '@shikijs/types': 3.20.0
+ '@shikijs/types': 3.22.0
- '@shikijs/themes@3.20.0':
+ '@shikijs/themes@3.22.0':
dependencies:
- '@shikijs/types': 3.20.0
+ '@shikijs/types': 3.22.0
- '@shikijs/types@3.20.0':
+ '@shikijs/types@3.22.0':
dependencies:
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
@@ -1701,102 +1690,102 @@ snapshots:
'@types/json-schema@7.0.15': {}
- '@types/node@22.15.30':
+ '@types/node@25.2.3':
dependencies:
- undici-types: 6.21.0
+ undici-types: 7.16.0
'@types/unist@3.0.3': {}
- '@typescript-eslint/eslint-plugin@8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3)':
+ '@typescript-eslint/eslint-plugin@8.56.0(@typescript-eslint/parser@8.56.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3)':
dependencies:
- '@eslint-community/regexpp': 4.12.1
- '@typescript-eslint/parser': 8.50.0(eslint@9.39.2)(typescript@5.9.3)
- '@typescript-eslint/scope-manager': 8.50.0
- '@typescript-eslint/type-utils': 8.50.0(eslint@9.39.2)(typescript@5.9.3)
- '@typescript-eslint/utils': 8.50.0(eslint@9.39.2)(typescript@5.9.3)
- '@typescript-eslint/visitor-keys': 8.50.0
+ '@eslint-community/regexpp': 4.12.2
+ '@typescript-eslint/parser': 8.56.0(eslint@9.39.2)(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.56.0
+ '@typescript-eslint/type-utils': 8.56.0(eslint@9.39.2)(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.56.0(eslint@9.39.2)(typescript@5.9.3)
+ '@typescript-eslint/visitor-keys': 8.56.0
eslint: 9.39.2
ignore: 7.0.5
natural-compare: 1.4.0
- ts-api-utils: 2.1.0(typescript@5.9.3)
+ ts-api-utils: 2.4.0(typescript@5.9.3)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.50.0(eslint@9.39.2)(typescript@5.9.3)':
+ '@typescript-eslint/parser@8.56.0(eslint@9.39.2)(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/scope-manager': 8.50.0
- '@typescript-eslint/types': 8.50.0
- '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.3)
- '@typescript-eslint/visitor-keys': 8.50.0
+ '@typescript-eslint/scope-manager': 8.56.0
+ '@typescript-eslint/types': 8.56.0
+ '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3)
+ '@typescript-eslint/visitor-keys': 8.56.0
debug: 4.4.3
eslint: 9.39.2
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/project-service@8.50.0(typescript@5.9.3)':
+ '@typescript-eslint/project-service@8.56.0(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/tsconfig-utils': 8.50.0(typescript@5.9.3)
- '@typescript-eslint/types': 8.50.0
+ '@typescript-eslint/tsconfig-utils': 8.56.0(typescript@5.9.3)
+ '@typescript-eslint/types': 8.56.0
debug: 4.4.3
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/scope-manager@8.50.0':
+ '@typescript-eslint/scope-manager@8.56.0':
dependencies:
- '@typescript-eslint/types': 8.50.0
- '@typescript-eslint/visitor-keys': 8.50.0
+ '@typescript-eslint/types': 8.56.0
+ '@typescript-eslint/visitor-keys': 8.56.0
- '@typescript-eslint/tsconfig-utils@8.50.0(typescript@5.9.3)':
+ '@typescript-eslint/tsconfig-utils@8.56.0(typescript@5.9.3)':
dependencies:
typescript: 5.9.3
- '@typescript-eslint/type-utils@8.50.0(eslint@9.39.2)(typescript@5.9.3)':
+ '@typescript-eslint/type-utils@8.56.0(eslint@9.39.2)(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/types': 8.50.0
- '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.3)
- '@typescript-eslint/utils': 8.50.0(eslint@9.39.2)(typescript@5.9.3)
+ '@typescript-eslint/types': 8.56.0
+ '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.56.0(eslint@9.39.2)(typescript@5.9.3)
debug: 4.4.3
eslint: 9.39.2
- ts-api-utils: 2.1.0(typescript@5.9.3)
+ ts-api-utils: 2.4.0(typescript@5.9.3)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/types@8.50.0': {}
+ '@typescript-eslint/types@8.56.0': {}
- '@typescript-eslint/typescript-estree@8.50.0(typescript@5.9.3)':
+ '@typescript-eslint/typescript-estree@8.56.0(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/project-service': 8.50.0(typescript@5.9.3)
- '@typescript-eslint/tsconfig-utils': 8.50.0(typescript@5.9.3)
- '@typescript-eslint/types': 8.50.0
- '@typescript-eslint/visitor-keys': 8.50.0
+ '@typescript-eslint/project-service': 8.56.0(typescript@5.9.3)
+ '@typescript-eslint/tsconfig-utils': 8.56.0(typescript@5.9.3)
+ '@typescript-eslint/types': 8.56.0
+ '@typescript-eslint/visitor-keys': 8.56.0
debug: 4.4.3
minimatch: 9.0.5
- semver: 7.7.3
+ semver: 7.7.4
tinyglobby: 0.2.15
- ts-api-utils: 2.1.0(typescript@5.9.3)
+ ts-api-utils: 2.4.0(typescript@5.9.3)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.50.0(eslint@9.39.2)(typescript@5.9.3)':
+ '@typescript-eslint/utils@8.56.0(eslint@9.39.2)(typescript@5.9.3)':
dependencies:
- '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2)
- '@typescript-eslint/scope-manager': 8.50.0
- '@typescript-eslint/types': 8.50.0
- '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.3)
+ '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2)
+ '@typescript-eslint/scope-manager': 8.56.0
+ '@typescript-eslint/types': 8.56.0
+ '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3)
eslint: 9.39.2
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/visitor-keys@8.50.0':
+ '@typescript-eslint/visitor-keys@8.56.0':
dependencies:
- '@typescript-eslint/types': 8.50.0
- eslint-visitor-keys: 4.2.1
+ '@typescript-eslint/types': 8.56.0
+ eslint-visitor-keys: 5.0.0
'@webassemblyjs/ast@1.14.1':
dependencies:
@@ -1874,20 +1863,20 @@ snapshots:
'@webassemblyjs/ast': 1.14.1
'@xtuc/long': 4.2.2
- '@webpack-cli/configtest@3.0.1(webpack-cli@6.0.1)(webpack@5.103.0)':
+ '@webpack-cli/configtest@3.0.1(webpack-cli@6.0.1)(webpack@5.105.2)':
dependencies:
- webpack: 5.103.0(webpack-cli@6.0.1)
- webpack-cli: 6.0.1(webpack@5.103.0)
+ webpack: 5.105.2(webpack-cli@6.0.1)
+ webpack-cli: 6.0.1(webpack@5.105.2)
- '@webpack-cli/info@3.0.1(webpack-cli@6.0.1)(webpack@5.103.0)':
+ '@webpack-cli/info@3.0.1(webpack-cli@6.0.1)(webpack@5.105.2)':
dependencies:
- webpack: 5.103.0(webpack-cli@6.0.1)
- webpack-cli: 6.0.1(webpack@5.103.0)
+ webpack: 5.105.2(webpack-cli@6.0.1)
+ webpack-cli: 6.0.1(webpack@5.105.2)
- '@webpack-cli/serve@3.0.1(webpack-cli@6.0.1)(webpack@5.103.0)':
+ '@webpack-cli/serve@3.0.1(webpack-cli@6.0.1)(webpack@5.105.2)':
dependencies:
- webpack: 5.103.0(webpack-cli@6.0.1)
- webpack-cli: 6.0.1(webpack@5.103.0)
+ webpack: 5.105.2(webpack-cli@6.0.1)
+ webpack-cli: 6.0.1(webpack@5.105.2)
'@xmldom/xmldom@0.8.11': {}
@@ -1907,13 +1896,13 @@ snapshots:
acorn@8.15.0: {}
- ajv-formats@2.1.1(ajv@8.17.1):
+ ajv-formats@2.1.1(ajv@8.18.0):
optionalDependencies:
- ajv: 8.17.1
+ ajv: 8.18.0
- ajv-keywords@5.1.0(ajv@8.17.1):
+ ajv-keywords@5.1.0(ajv@8.18.0):
dependencies:
- ajv: 8.17.1
+ ajv: 8.18.0
fast-deep-equal: 3.1.3
ajv@6.12.6:
@@ -1923,26 +1912,26 @@ snapshots:
json-schema-traverse: 0.4.1
uri-js: 4.4.1
- ajv@8.17.1:
+ ajv@8.18.0:
dependencies:
fast-deep-equal: 3.1.3
- fast-uri: 3.0.6
+ fast-uri: 3.1.0
json-schema-traverse: 1.0.0
require-from-string: 2.0.2
- ansi-escapes@7.0.0:
+ ansi-escapes@7.3.0:
dependencies:
environment: 1.1.0
ansi-regex@5.0.1: {}
- ansi-regex@6.1.0: {}
+ ansi-regex@6.2.2: {}
ansi-styles@4.3.0:
dependencies:
color-convert: 2.0.1
- ansi-styles@6.2.1: {}
+ ansi-styles@6.2.3: {}
are-docs-informative@0.0.2: {}
@@ -1950,38 +1939,46 @@ snapshots:
asynckit@0.4.0: {}
- axios@1.9.0:
+ axios@1.13.5:
dependencies:
- follow-redirects: 1.15.9
- form-data: 4.0.3
+ follow-redirects: 1.15.11
+ form-data: 4.0.5
proxy-from-env: 1.1.0
transitivePeerDependencies:
- debug
balanced-match@1.0.2: {}
- baseline-browser-mapping@2.9.7: {}
+ balanced-match@4.0.2:
+ dependencies:
+ jackspeak: 4.2.3
- brace-expansion@1.1.11:
+ baseline-browser-mapping@2.9.19: {}
+
+ brace-expansion@1.1.12:
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
- brace-expansion@2.0.1:
+ brace-expansion@2.0.2:
dependencies:
balanced-match: 1.0.2
+ brace-expansion@5.0.2:
+ dependencies:
+ balanced-match: 4.0.2
+
braces@3.0.3:
dependencies:
fill-range: 7.1.1
browserslist@4.28.1:
dependencies:
- baseline-browser-mapping: 2.9.7
- caniuse-lite: 1.0.30001760
- electron-to-chromium: 1.5.267
+ baseline-browser-mapping: 2.9.19
+ caniuse-lite: 1.0.30001770
+ electron-to-chromium: 1.5.286
node-releases: 2.0.27
- update-browserslist-db: 1.2.2(browserslist@4.28.1)
+ update-browserslist-db: 1.2.3(browserslist@4.28.1)
buffer-from@1.1.2: {}
@@ -1992,7 +1989,7 @@ snapshots:
callsites@3.1.0: {}
- caniuse-lite@1.0.30001760: {}
+ caniuse-lite@1.0.30001770: {}
chalk@4.1.2:
dependencies:
@@ -2007,8 +2004,8 @@ snapshots:
cli-truncate@5.1.1:
dependencies:
- slice-ansi: 7.1.0
- string-width: 8.1.0
+ slice-ansi: 7.1.2
+ string-width: 8.1.1
cliui@7.0.4:
dependencies:
@@ -2038,9 +2035,11 @@ snapshots:
commander@14.0.2: {}
+ commander@14.0.3: {}
+
commander@2.20.3: {}
- comment-parser@1.4.1: {}
+ comment-parser@1.4.5: {}
concat-map@0.0.1: {}
@@ -2062,10 +2061,6 @@ snapshots:
shebang-command: 2.0.0
which: 2.0.2
- debug@4.4.1:
- dependencies:
- ms: 2.1.3
-
debug@4.4.3:
dependencies:
ms: 2.1.3
@@ -2074,7 +2069,7 @@ snapshots:
delayed-stream@1.0.0: {}
- diff@8.0.2: {}
+ diff@8.0.3: {}
dunder-proto@1.0.1:
dependencies:
@@ -2082,20 +2077,20 @@ snapshots:
es-errors: 1.3.0
gopd: 1.2.0
- electron-to-chromium@1.5.267: {}
+ electron-to-chromium@1.5.286: {}
- emoji-regex@10.4.0: {}
+ emoji-regex@10.6.0: {}
emoji-regex@8.0.0: {}
- enhanced-resolve@5.18.1:
+ enhanced-resolve@5.19.0:
dependencies:
graceful-fs: 4.2.11
tapable: 2.3.0
entities@4.5.0: {}
- envinfo@7.14.0: {}
+ envinfo@7.21.0: {}
environment@1.1.0: {}
@@ -2103,7 +2098,7 @@ snapshots:
es-errors@1.3.0: {}
- es-module-lexer@1.7.0: {}
+ es-module-lexer@2.0.0: {}
es-object-atoms@1.1.1:
dependencies:
@@ -2122,32 +2117,32 @@ snapshots:
eslint-formatter-unix@9.0.1: {}
- eslint-plugin-jsdoc@61.5.0(eslint@9.39.2):
+ eslint-plugin-jsdoc@62.5.5(eslint@9.39.2):
dependencies:
- '@es-joy/jsdoccomment': 0.76.0
+ '@es-joy/jsdoccomment': 0.84.0
'@es-joy/resolve.exports': 1.2.0
are-docs-informative: 0.0.2
- comment-parser: 1.4.1
+ comment-parser: 1.4.5
debug: 4.4.3
escape-string-regexp: 4.0.0
eslint: 9.39.2
- espree: 10.4.0
- esquery: 1.6.0
+ espree: 11.1.0
+ esquery: 1.7.0
html-entities: 2.6.0
object-deep-merge: 2.0.0
parse-imports-exports: 0.2.4
- semver: 7.7.3
+ semver: 7.7.4
spdx-expression-parse: 4.0.0
to-valid-identifier: 1.0.0
transitivePeerDependencies:
- supports-color
- eslint-plugin-prettier@5.5.4(@types/eslint@9.6.1)(eslint@9.39.2)(prettier@3.7.4):
+ eslint-plugin-prettier@5.5.5(@types/eslint@9.6.1)(eslint@9.39.2)(prettier@3.8.1):
dependencies:
eslint: 9.39.2
- prettier: 3.7.4
- prettier-linter-helpers: 1.0.0
- synckit: 0.11.8
+ prettier: 3.8.1
+ prettier-linter-helpers: 1.0.1
+ synckit: 0.11.12
optionalDependencies:
'@types/eslint': 9.6.1
@@ -2165,29 +2160,31 @@ snapshots:
eslint-visitor-keys@4.2.1: {}
+ eslint-visitor-keys@5.0.0: {}
+
eslint@9.39.2:
dependencies:
- '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2)
- '@eslint-community/regexpp': 4.12.1
+ '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2)
+ '@eslint-community/regexpp': 4.12.2
'@eslint/config-array': 0.21.1
'@eslint/config-helpers': 0.4.2
'@eslint/core': 0.17.0
- '@eslint/eslintrc': 3.3.1
+ '@eslint/eslintrc': 3.3.3
'@eslint/js': 9.39.2
'@eslint/plugin-kit': 0.4.1
- '@humanfs/node': 0.16.6
+ '@humanfs/node': 0.16.7
'@humanwhocodes/module-importer': 1.0.1
'@humanwhocodes/retry': 0.4.3
'@types/estree': 1.0.8
ajv: 6.12.6
chalk: 4.1.2
cross-spawn: 7.0.6
- debug: 4.4.1
+ debug: 4.4.3
escape-string-regexp: 4.0.0
eslint-scope: 8.4.0
eslint-visitor-keys: 4.2.1
espree: 10.4.0
- esquery: 1.6.0
+ esquery: 1.7.0
esutils: 2.0.3
fast-deep-equal: 3.1.3
file-entry-cache: 8.0.0
@@ -2210,7 +2207,13 @@ snapshots:
acorn-jsx: 5.3.2(acorn@8.15.0)
eslint-visitor-keys: 4.2.1
- esquery@1.6.0:
+ espree@11.1.0:
+ dependencies:
+ acorn: 8.15.0
+ acorn-jsx: 5.3.2(acorn@8.15.0)
+ eslint-visitor-keys: 5.0.0
+
+ esquery@1.7.0:
dependencies:
estraverse: 5.3.0
@@ -2224,7 +2227,7 @@ snapshots:
esutils@2.0.3: {}
- eventemitter3@5.0.1: {}
+ eventemitter3@5.0.4: {}
events@3.3.0: {}
@@ -2236,7 +2239,7 @@ snapshots:
fast-levenshtein@2.0.6: {}
- fast-uri@3.0.6: {}
+ fast-uri@3.1.0: {}
fastest-levenshtein@1.0.16: {}
@@ -2271,9 +2274,9 @@ snapshots:
flatted@3.3.3: {}
- follow-redirects@1.15.9: {}
+ follow-redirects@1.15.11: {}
- form-data@4.0.3:
+ form-data@4.0.5:
dependencies:
asynckit: 0.4.0
combined-stream: 1.0.8
@@ -2287,7 +2290,7 @@ snapshots:
get-caller-file@2.0.5: {}
- get-east-asian-width@1.3.0: {}
+ get-east-asian-width@1.4.0: {}
get-intrinsic@1.3.0:
dependencies:
@@ -2313,9 +2316,9 @@ snapshots:
glob-to-regexp@0.4.1: {}
- glob@13.0.0:
+ glob@13.0.4:
dependencies:
- minimatch: 10.1.1
+ minimatch: 10.2.1
minipass: 7.1.2
path-scurry: 2.0.1
@@ -2383,9 +2386,9 @@ snapshots:
is-fullwidth-code-point@3.0.0: {}
- is-fullwidth-code-point@5.0.0:
+ is-fullwidth-code-point@5.1.0:
dependencies:
- get-east-asian-width: 1.3.0
+ get-east-asian-width: 1.4.0
is-glob@4.0.3:
dependencies:
@@ -2405,17 +2408,21 @@ snapshots:
isobject@3.0.1: {}
+ jackspeak@4.2.3:
+ dependencies:
+ '@isaacs/cliui': 9.0.0
+
jest-worker@27.5.1:
dependencies:
- '@types/node': 22.15.30
+ '@types/node': 25.2.3
merge-stream: 2.0.0
supports-color: 8.1.1
- js-yaml@4.1.0:
+ js-yaml@4.1.1:
dependencies:
argparse: 2.0.1
- jsdoc-type-pratt-parser@6.10.0: {}
+ jsdoc-type-pratt-parser@7.1.1: {}
json-buffer@3.0.1: {}
@@ -2444,7 +2451,7 @@ snapshots:
lint-staged@16.2.7:
dependencies:
- commander: 14.0.2
+ commander: 14.0.3
listr2: 9.0.5
micromatch: 4.0.8
nano-spawn: 2.0.0
@@ -2456,10 +2463,10 @@ snapshots:
dependencies:
cli-truncate: 5.1.1
colorette: 2.0.20
- eventemitter3: 5.0.1
+ eventemitter3: 5.0.4
log-update: 6.1.0
rfdc: 1.4.1
- wrap-ansi: 9.0.0
+ wrap-ansi: 9.0.2
loader-runner@4.3.1: {}
@@ -2475,17 +2482,17 @@ snapshots:
log-update@6.1.0:
dependencies:
- ansi-escapes: 7.0.0
+ ansi-escapes: 7.3.0
cli-cursor: 5.0.0
- slice-ansi: 7.1.0
- strip-ansi: 7.1.0
- wrap-ansi: 9.0.0
+ slice-ansi: 7.1.2
+ strip-ansi: 7.1.2
+ wrap-ansi: 9.0.2
- lru-cache@11.2.4: {}
+ lru-cache@11.2.6: {}
lunr@2.3.9: {}
- markdown-it@14.1.0:
+ markdown-it@14.1.1:
dependencies:
argparse: 2.0.1
entities: 4.5.0
@@ -2515,23 +2522,23 @@ snapshots:
mimic-function@5.0.1: {}
- minimatch@10.1.1:
+ minimatch@10.2.1:
dependencies:
- '@isaacs/brace-expansion': 5.0.0
+ brace-expansion: 5.0.2
minimatch@3.1.2:
dependencies:
- brace-expansion: 1.1.11
+ brace-expansion: 1.1.12
minimatch@9.0.5:
dependencies:
- brace-expansion: 2.0.1
+ brace-expansion: 2.0.2
minipass@7.1.2: {}
mj-context-menu@1.0.0:
dependencies:
- rimraf: 6.1.2
+ rimraf: 6.1.3
mkdirp@1.0.4: {}
@@ -2609,7 +2616,7 @@ snapshots:
path-scurry@2.0.1:
dependencies:
- lru-cache: 11.2.4
+ lru-cache: 11.2.6
minipass: 7.1.2
picocolors@1.1.1: {}
@@ -2626,11 +2633,11 @@ snapshots:
prelude-ls@1.2.1: {}
- prettier-linter-helpers@1.0.0:
+ prettier-linter-helpers@1.0.1:
dependencies:
fast-diff: 1.3.0
- prettier@3.7.4: {}
+ prettier@3.8.1: {}
process-nextick-args@2.0.1: {}
@@ -2663,7 +2670,7 @@ snapshots:
rechoir@0.8.0:
dependencies:
- resolve: 1.22.10
+ resolve: 1.22.11
require-directory@2.1.1: {}
@@ -2679,7 +2686,7 @@ snapshots:
resolve-from@5.0.0: {}
- resolve@1.22.10:
+ resolve@1.22.11:
dependencies:
is-core-module: 2.16.1
path-parse: 1.0.7
@@ -2692,9 +2699,9 @@ snapshots:
rfdc@1.4.1: {}
- rimraf@6.1.2:
+ rimraf@6.1.3:
dependencies:
- glob: 13.0.0
+ glob: 13.0.4
package-json-from-dist: 1.0.1
safe-buffer@5.1.2: {}
@@ -2703,25 +2710,18 @@ snapshots:
saxon-js@2.7.0:
dependencies:
- axios: 1.9.0
+ axios: 1.13.5
transitivePeerDependencies:
- debug
- schema-utils@4.3.2:
- dependencies:
- '@types/json-schema': 7.0.15
- ajv: 8.17.1
- ajv-formats: 2.1.1(ajv@8.17.1)
- ajv-keywords: 5.1.0(ajv@8.17.1)
-
schema-utils@4.3.3:
dependencies:
'@types/json-schema': 7.0.15
- ajv: 8.17.1
- ajv-formats: 2.1.1(ajv@8.17.1)
- ajv-keywords: 5.1.0(ajv@8.17.1)
+ ajv: 8.18.0
+ ajv-formats: 2.1.1(ajv@8.18.0)
+ ajv-keywords: 5.1.0(ajv@8.18.0)
- semver@7.7.3: {}
+ semver@7.7.4: {}
serialize-javascript@6.0.2:
dependencies:
@@ -2739,10 +2739,10 @@ snapshots:
signal-exit@4.1.0: {}
- slice-ansi@7.1.0:
+ slice-ansi@7.1.2:
dependencies:
- ansi-styles: 6.2.1
- is-fullwidth-code-point: 5.0.0
+ ansi-styles: 6.2.3
+ is-fullwidth-code-point: 5.1.0
source-map-support@0.5.21:
dependencies:
@@ -2756,11 +2756,11 @@ snapshots:
spdx-expression-parse@4.0.0:
dependencies:
spdx-exceptions: 2.5.0
- spdx-license-ids: 3.0.21
+ spdx-license-ids: 3.0.22
- spdx-license-ids@3.0.21: {}
+ spdx-license-ids@3.0.22: {}
- speech-rule-engine@5.0.0-beta.3:
+ speech-rule-engine@5.0.0-beta.6:
dependencies:
'@xmldom/xmldom': 0.9.8
commander: 14.0.2
@@ -2776,14 +2776,14 @@ snapshots:
string-width@7.2.0:
dependencies:
- emoji-regex: 10.4.0
- get-east-asian-width: 1.3.0
- strip-ansi: 7.1.0
+ emoji-regex: 10.6.0
+ get-east-asian-width: 1.4.0
+ strip-ansi: 7.1.2
- string-width@8.1.0:
+ string-width@8.1.1:
dependencies:
- get-east-asian-width: 1.3.0
- strip-ansi: 7.1.0
+ get-east-asian-width: 1.4.0
+ strip-ansi: 7.1.2
string_decoder@0.10.31: {}
@@ -2795,9 +2795,9 @@ snapshots:
dependencies:
ansi-regex: 5.0.1
- strip-ansi@7.1.0:
+ strip-ansi@7.1.2:
dependencies:
- ansi-regex: 6.1.0
+ ansi-regex: 6.2.2
strip-json-comments@3.1.1: {}
@@ -2811,24 +2811,24 @@ snapshots:
supports-preserve-symlinks-flag@1.0.0: {}
- synckit@0.11.8:
+ synckit@0.11.12:
dependencies:
- '@pkgr/core': 0.2.7
+ '@pkgr/core': 0.2.9
tapable@2.3.0: {}
- terser-webpack-plugin@5.3.16(webpack@5.103.0):
+ terser-webpack-plugin@5.3.16(webpack@5.105.2):
dependencies:
- '@jridgewell/trace-mapping': 0.3.25
+ '@jridgewell/trace-mapping': 0.3.31
jest-worker: 27.5.1
- schema-utils: 4.3.2
+ schema-utils: 4.3.3
serialize-javascript: 6.0.2
- terser: 5.41.0
- webpack: 5.103.0(webpack-cli@6.0.1)
+ terser: 5.46.0
+ webpack: 5.105.2(webpack-cli@6.0.1)
- terser@5.41.0:
+ terser@5.46.0:
dependencies:
- '@jridgewell/source-map': 0.3.6
+ '@jridgewell/source-map': 0.3.11
acorn: 8.15.0
commander: 2.20.3
source-map-support: 0.5.21
@@ -2852,7 +2852,7 @@ snapshots:
'@sindresorhus/base62': 1.0.0
reserved-identifiers: 1.2.0
- ts-api-utils@2.1.0(typescript@5.9.3):
+ ts-api-utils@2.4.0(typescript@5.9.3):
dependencies:
typescript: 5.9.3
@@ -2860,21 +2860,21 @@ snapshots:
dependencies:
prelude-ls: 1.2.1
- typedoc@0.28.15(typescript@5.9.3):
+ typedoc@0.28.17(typescript@5.9.3):
dependencies:
- '@gerrit0/mini-shiki': 3.20.0
+ '@gerrit0/mini-shiki': 3.22.0
lunr: 2.3.9
- markdown-it: 14.1.0
+ markdown-it: 14.1.1
minimatch: 9.0.5
typescript: 5.9.3
yaml: 2.8.2
- typescript-eslint@8.50.0(eslint@9.39.2)(typescript@5.9.3):
+ typescript-eslint@8.56.0(eslint@9.39.2)(typescript@5.9.3):
dependencies:
- '@typescript-eslint/eslint-plugin': 8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3)
- '@typescript-eslint/parser': 8.50.0(eslint@9.39.2)(typescript@5.9.3)
- '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.3)
- '@typescript-eslint/utils': 8.50.0(eslint@9.39.2)(typescript@5.9.3)
+ '@typescript-eslint/eslint-plugin': 8.56.0(@typescript-eslint/parser@8.56.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3)
+ '@typescript-eslint/parser': 8.56.0(eslint@9.39.2)(typescript@5.9.3)
+ '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.56.0(eslint@9.39.2)(typescript@5.9.3)
eslint: 9.39.2
typescript: 5.9.3
transitivePeerDependencies:
@@ -2886,11 +2886,11 @@ snapshots:
uc.micro@2.1.0: {}
- undici-types@6.21.0: {}
+ undici-types@7.16.0: {}
untildify@4.0.0: {}
- update-browserslist-db@1.2.2(browserslist@4.28.1):
+ update-browserslist-db@1.2.3(browserslist@4.28.1):
dependencies:
browserslist: 4.28.1
escalade: 3.2.0
@@ -2902,26 +2902,26 @@ snapshots:
util-deprecate@1.0.2: {}
- watchpack@2.4.4:
+ watchpack@2.5.1:
dependencies:
glob-to-regexp: 0.4.1
graceful-fs: 4.2.11
- webpack-cli@6.0.1(webpack@5.103.0):
+ webpack-cli@6.0.1(webpack@5.105.2):
dependencies:
'@discoveryjs/json-ext': 0.6.3
- '@webpack-cli/configtest': 3.0.1(webpack-cli@6.0.1)(webpack@5.103.0)
- '@webpack-cli/info': 3.0.1(webpack-cli@6.0.1)(webpack@5.103.0)
- '@webpack-cli/serve': 3.0.1(webpack-cli@6.0.1)(webpack@5.103.0)
+ '@webpack-cli/configtest': 3.0.1(webpack-cli@6.0.1)(webpack@5.105.2)
+ '@webpack-cli/info': 3.0.1(webpack-cli@6.0.1)(webpack@5.105.2)
+ '@webpack-cli/serve': 3.0.1(webpack-cli@6.0.1)(webpack@5.105.2)
colorette: 2.0.20
commander: 12.1.0
cross-spawn: 7.0.6
- envinfo: 7.14.0
+ envinfo: 7.21.0
fastest-levenshtein: 1.0.16
import-local: 3.2.0
interpret: 3.1.1
rechoir: 0.8.0
- webpack: 5.103.0(webpack-cli@6.0.1)
+ webpack: 5.105.2(webpack-cli@6.0.1)
webpack-merge: 6.0.1
webpack-merge@6.0.1:
@@ -2930,9 +2930,9 @@ snapshots:
flat: 5.0.2
wildcard: 2.0.1
- webpack-sources@3.3.3: {}
+ webpack-sources@3.3.4: {}
- webpack@5.103.0(webpack-cli@6.0.1):
+ webpack@5.105.2(webpack-cli@6.0.1):
dependencies:
'@types/eslint-scope': 3.7.7
'@types/estree': 1.0.8
@@ -2944,8 +2944,8 @@ snapshots:
acorn-import-phases: 1.0.4(acorn@8.15.0)
browserslist: 4.28.1
chrome-trace-event: 1.0.4
- enhanced-resolve: 5.18.1
- es-module-lexer: 1.7.0
+ enhanced-resolve: 5.19.0
+ es-module-lexer: 2.0.0
eslint-scope: 5.1.1
events: 3.3.0
glob-to-regexp: 0.4.1
@@ -2956,11 +2956,11 @@ snapshots:
neo-async: 2.6.2
schema-utils: 4.3.3
tapable: 2.3.0
- terser-webpack-plugin: 5.3.16(webpack@5.103.0)
- watchpack: 2.4.4
- webpack-sources: 3.3.3
+ terser-webpack-plugin: 5.3.16(webpack@5.105.2)
+ watchpack: 2.5.1
+ webpack-sources: 3.3.4
optionalDependencies:
- webpack-cli: 6.0.1(webpack@5.103.0)
+ webpack-cli: 6.0.1(webpack@5.105.2)
transitivePeerDependencies:
- '@swc/core'
- esbuild
@@ -2982,17 +2982,17 @@ snapshots:
string-width: 4.2.3
strip-ansi: 6.0.1
- wrap-ansi@9.0.0:
+ wrap-ansi@9.0.2:
dependencies:
- ansi-styles: 6.2.1
+ ansi-styles: 6.2.3
string-width: 7.2.0
- strip-ansi: 7.1.0
+ strip-ansi: 7.1.2
wrappy@1.0.2: {}
xslt3@2.7.0:
dependencies:
- axios: 1.9.0
+ axios: 1.13.5
saxon-js: 2.7.0
transitivePeerDependencies:
- debug
diff --git a/testsuite/package.json b/testsuite/package.json
index b77609b5d..176a5d822 100644
--- a/testsuite/package.json
+++ b/testsuite/package.json
@@ -14,10 +14,10 @@
},
"dependencies": {
"@jest/globals": "^29.7.0",
- "@mathjax/mathjax-bbm-font-extension": "^4.0.0",
+ "@mathjax/mathjax-bbm-font-extension": "^4.1.1",
"@types/jest": "^29.5.14",
"jest": "^29.7.0",
- "ts-jest": "^29.3.4",
+ "ts-jest": "^29.4.6",
"ts-node": "^10.9.2",
"xml-js": "^1.6.11"
}
diff --git a/testsuite/pnpm-lock.yaml b/testsuite/pnpm-lock.yaml
index 6d5af4376..698110a77 100644
--- a/testsuite/pnpm-lock.yaml
+++ b/testsuite/pnpm-lock.yaml
@@ -12,8 +12,8 @@ importers:
specifier: ^29.7.0
version: 29.7.0
'@mathjax/mathjax-bbm-font-extension':
- specifier: ^4.0.0
- version: 4.0.0
+ specifier: ^4.1.1
+ version: 4.1.1
'@types/jest':
specifier: ^29.5.14
version: 29.5.14
@@ -21,8 +21,8 @@ importers:
specifier: ^29.7.0
version: 29.7.0(@types/node@22.15.29)(ts-node@10.9.2(@types/node@22.15.29)(typescript@5.4.5))
ts-jest:
- specifier: ^29.3.4
- version: 29.3.4(@babel/core@7.27.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.27.4))(jest@29.7.0(@types/node@22.15.29)(ts-node@10.9.2(@types/node@22.15.29)(typescript@5.4.5)))(typescript@5.4.5)
+ specifier: ^29.4.6
+ version: 29.4.6(@babel/core@7.27.4)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.27.4))(jest-util@30.2.0)(jest@29.7.0(@types/node@22.15.29)(ts-node@10.9.2(@types/node@22.15.29)(typescript@5.4.5)))(typescript@5.4.5)
ts-node:
specifier: ^10.9.2
version: 10.9.2(@types/node@22.15.29)(typescript@5.4.5)
@@ -242,6 +242,10 @@ packages:
resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@jest/pattern@30.0.1':
+ resolution: {integrity: sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
'@jest/reporters@29.7.0':
resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -255,6 +259,10 @@ packages:
resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@jest/schemas@30.0.5':
+ resolution: {integrity: sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
'@jest/source-map@29.6.3':
resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -271,10 +279,18 @@ packages:
resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@jest/transform@30.2.0':
+ resolution: {integrity: sha512-XsauDV82o5qXbhalKxD7p4TZYYdwcaEXC77PPD2HixEFF+6YGppjrAAQurTl2ECWcEomHBMMNS9AH3kcCFx8jA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
'@jest/types@29.6.3':
resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@jest/types@30.2.0':
+ resolution: {integrity: sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
'@jridgewell/gen-mapping@0.3.8':
resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
engines: {node: '>=6.0.0'}
@@ -296,12 +312,15 @@ packages:
'@jridgewell/trace-mapping@0.3.9':
resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
- '@mathjax/mathjax-bbm-font-extension@4.0.0':
- resolution: {integrity: sha512-4ElFHV3T4oXP9DhyLXcvnAfqqmjf4lINFvShXFkcx7/va/TUL3EpZm/s130JQH3Sp5xX6UG09wY2/dcLONLfjQ==}
+ '@mathjax/mathjax-bbm-font-extension@4.1.1':
+ resolution: {integrity: sha512-TGH3Tf/CWMBNBgg6XXCt2eQdtabfJ96eMkLnvZYvqD4OEw1loqMMTCWDCYbnyZonUTZtqRtX00X14SuLnDOJ6w==}
'@sinclair/typebox@0.27.8':
resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
+ '@sinclair/typebox@0.34.48':
+ resolution: {integrity: sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA==}
+
'@sinonjs/commons@3.0.1':
resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==}
@@ -359,6 +378,9 @@ packages:
'@types/yargs@17.0.33':
resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==}
+ '@ungap/structured-clone@1.3.0':
+ resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
+
acorn-walk@8.3.4:
resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==}
engines: {node: '>=0.4.0'}
@@ -394,27 +416,38 @@ packages:
argparse@1.0.10:
resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
- async@3.2.6:
- resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
-
babel-jest@29.7.0:
resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
peerDependencies:
'@babel/core': ^7.8.0
+ babel-jest@30.2.0:
+ resolution: {integrity: sha512-0YiBEOxWqKkSQWL9nNGGEgndoeL0ZpWrbLMNL5u/Kaxrli3Eaxlt3ZtIDktEvXt4L/R9r3ODr2zKwGM/2BjxVw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ peerDependencies:
+ '@babel/core': ^7.11.0 || ^8.0.0-0
+
babel-plugin-istanbul@6.1.1:
resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==}
engines: {node: '>=8'}
+ babel-plugin-istanbul@7.0.1:
+ resolution: {integrity: sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==}
+ engines: {node: '>=12'}
+
babel-plugin-jest-hoist@29.6.3:
resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- babel-preset-current-node-syntax@1.1.0:
- resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==}
+ babel-plugin-jest-hoist@30.2.0:
+ resolution: {integrity: sha512-ftzhzSGMUnOzcCXd6WHdBGMyuwy15Wnn0iyyWGKgBDLxf9/s5ABuraCSpBX2uG0jUg4rqJnxsLc5+oYBqoxVaA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ babel-preset-current-node-syntax@1.2.0:
+ resolution: {integrity: sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==}
peerDependencies:
- '@babel/core': ^7.0.0
+ '@babel/core': ^7.0.0 || ^8.0.0-0
babel-preset-jest@29.6.3:
resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==}
@@ -422,15 +455,18 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0
+ babel-preset-jest@30.2.0:
+ resolution: {integrity: sha512-US4Z3NOieAQumwFnYdUWKvUKh8+YSnS/gB3t6YBiz0bskpu7Pine8pPCheNxlPEW4wnUkma2a94YuW2q3guvCQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ peerDependencies:
+ '@babel/core': ^7.11.0 || ^8.0.0-beta.1
+
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
brace-expansion@1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
- brace-expansion@2.0.1:
- resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
-
braces@3.0.3:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
@@ -477,6 +513,10 @@ packages:
resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
engines: {node: '>=8'}
+ ci-info@4.4.0:
+ resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==}
+ engines: {node: '>=8'}
+
cjs-module-lexer@1.4.3:
resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==}
@@ -549,11 +589,6 @@ packages:
resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
engines: {node: '>=0.3.1'}
- ejs@3.1.10:
- resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==}
- engines: {node: '>=0.10.0'}
- hasBin: true
-
electron-to-chromium@1.5.165:
resolution: {integrity: sha512-naiMx1Z6Nb2TxPU6fiFrUrDTjyPMLdTtaOd2oLmG8zVSg2hCWGkhPyxwk+qRmZ1ytwVqUv0u7ZcDA5+ALhaUtw==}
@@ -598,9 +633,6 @@ packages:
fb-watchman@2.0.2:
resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==}
- filelist@1.0.4:
- resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==}
-
fill-range@7.1.1:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
@@ -647,6 +679,11 @@ packages:
graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+ handlebars@4.7.8:
+ resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==}
+ engines: {node: '>=0.4.7'}
+ hasBin: true
+
has-flag@4.0.0:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
engines: {node: '>=8'}
@@ -728,11 +765,6 @@ packages:
resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==}
engines: {node: '>=8'}
- jake@10.9.2:
- resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==}
- engines: {node: '>=10'}
- hasBin: true
-
jest-changed-files@29.7.0:
resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -787,6 +819,10 @@ packages:
resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-haste-map@30.2.0:
+ resolution: {integrity: sha512-sQA/jCb9kNt+neM0anSj6eZhLZUIhQgwDt7cPGjumgLM4rXsfb9kpnlacmvZz3Q5tb80nS+oG/if+NBKrHC+Xw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
jest-leak-detector@29.7.0:
resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -816,6 +852,10 @@ packages:
resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-regex-util@30.0.1:
+ resolution: {integrity: sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
jest-resolve-dependencies@29.7.0:
resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -840,6 +880,10 @@ packages:
resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-util@30.2.0:
+ resolution: {integrity: sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
jest-validate@29.7.0:
resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -852,6 +896,10 @@ packages:
resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-worker@30.2.0:
+ resolution: {integrity: sha512-0Q4Uk8WF7BUwqXHuAjc23vmopWJw5WH7w2tqBoUOZpOjW/ZnR44GXXd1r82RvnmI2GZge3ivrYXk/BE2+VtW2g==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
jest@29.7.0:
resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -927,9 +975,8 @@ packages:
minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
- minimatch@5.1.6:
- resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
- engines: {node: '>=10'}
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
@@ -937,6 +984,9 @@ packages:
natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+ neo-async@2.6.2:
+ resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
+
node-int64@0.4.0:
resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
@@ -1000,6 +1050,10 @@ packages:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'}
+ picomatch@4.0.3:
+ resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
+ engines: {node: '>=12'}
+
pirates@4.0.7:
resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==}
engines: {node: '>= 6'}
@@ -1038,8 +1092,8 @@ packages:
resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==}
engines: {node: '>=10'}
- resolve@1.22.10:
- resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
+ resolve@1.22.11:
+ resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==}
engines: {node: '>= 0.4'}
hasBin: true
@@ -1055,6 +1109,11 @@ packages:
engines: {node: '>=10'}
hasBin: true
+ semver@7.7.3:
+ resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==}
+ engines: {node: '>=10'}
+ hasBin: true
+
shebang-command@2.0.0:
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
engines: {node: '>=8'}
@@ -1066,6 +1125,10 @@ packages:
signal-exit@3.0.7:
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
+ signal-exit@4.1.0:
+ resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
+ engines: {node: '>=14'}
+
sisteransi@1.0.5:
resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
@@ -1134,17 +1197,18 @@ packages:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
- ts-jest@29.3.4:
- resolution: {integrity: sha512-Iqbrm8IXOmV+ggWHOTEbjwyCf2xZlUMv5npExksXohL+tk8va4Fjhb+X2+Rt9NBmgO7bJ8WpnMLOwih/DnMlFA==}
+ ts-jest@29.4.6:
+ resolution: {integrity: sha512-fSpWtOO/1AjSNQguk43hb/JCo16oJDnMJf3CdEGNkqsEX3t0KX96xvyX1D7PfLCpVoKu4MfVrqUkFyblYoY4lA==}
engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0}
hasBin: true
peerDependencies:
'@babel/core': '>=7.0.0-beta.0 <8'
- '@jest/transform': ^29.0.0
- '@jest/types': ^29.0.0
- babel-jest: ^29.0.0
+ '@jest/transform': ^29.0.0 || ^30.0.0
+ '@jest/types': ^29.0.0 || ^30.0.0
+ babel-jest: ^29.0.0 || ^30.0.0
esbuild: '*'
- jest: ^29.0.0
+ jest: ^29.0.0 || ^30.0.0
+ jest-util: ^29.0.0 || ^30.0.0
typescript: '>=4.3 <6'
peerDependenciesMeta:
'@babel/core':
@@ -1157,6 +1221,8 @@ packages:
optional: true
esbuild:
optional: true
+ jest-util:
+ optional: true
ts-node@10.9.2:
resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==}
@@ -1189,6 +1255,11 @@ packages:
engines: {node: '>=14.17'}
hasBin: true
+ uglify-js@3.19.3:
+ resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==}
+ engines: {node: '>=0.8.0'}
+ hasBin: true
+
undici-types@6.21.0:
resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
@@ -1213,6 +1284,9 @@ packages:
engines: {node: '>= 8'}
hasBin: true
+ wordwrap@1.0.0:
+ resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
+
wrap-ansi@7.0.0:
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
engines: {node: '>=10'}
@@ -1224,6 +1298,10 @@ packages:
resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==}
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+ write-file-atomic@5.0.1:
+ resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
xml-js@1.6.11:
resolution: {integrity: sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==}
hasBin: true
@@ -1539,6 +1617,12 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@jest/pattern@30.0.1':
+ dependencies:
+ '@types/node': 22.15.29
+ jest-regex-util: 30.0.1
+ optional: true
+
'@jest/reporters@29.7.0':
dependencies:
'@bcoe/v8-coverage': 0.2.3
@@ -1572,6 +1656,11 @@ snapshots:
dependencies:
'@sinclair/typebox': 0.27.8
+ '@jest/schemas@30.0.5':
+ dependencies:
+ '@sinclair/typebox': 0.34.48
+ optional: true
+
'@jest/source-map@29.6.3':
dependencies:
'@jridgewell/trace-mapping': 0.3.25
@@ -1612,6 +1701,27 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@jest/transform@30.2.0':
+ dependencies:
+ '@babel/core': 7.27.4
+ '@jest/types': 30.2.0
+ '@jridgewell/trace-mapping': 0.3.25
+ babel-plugin-istanbul: 7.0.1
+ chalk: 4.1.2
+ convert-source-map: 2.0.0
+ fast-json-stable-stringify: 2.1.0
+ graceful-fs: 4.2.11
+ jest-haste-map: 30.2.0
+ jest-regex-util: 30.0.1
+ jest-util: 30.2.0
+ micromatch: 4.0.8
+ pirates: 4.0.7
+ slash: 3.0.0
+ write-file-atomic: 5.0.1
+ transitivePeerDependencies:
+ - supports-color
+ optional: true
+
'@jest/types@29.6.3':
dependencies:
'@jest/schemas': 29.6.3
@@ -1621,6 +1731,17 @@ snapshots:
'@types/yargs': 17.0.33
chalk: 4.1.2
+ '@jest/types@30.2.0':
+ dependencies:
+ '@jest/pattern': 30.0.1
+ '@jest/schemas': 30.0.5
+ '@types/istanbul-lib-coverage': 2.0.6
+ '@types/istanbul-reports': 3.0.4
+ '@types/node': 22.15.29
+ '@types/yargs': 17.0.33
+ chalk: 4.1.2
+ optional: true
+
'@jridgewell/gen-mapping@0.3.8':
dependencies:
'@jridgewell/set-array': 1.2.1
@@ -1643,10 +1764,13 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.0
- '@mathjax/mathjax-bbm-font-extension@4.0.0': {}
+ '@mathjax/mathjax-bbm-font-extension@4.1.1': {}
'@sinclair/typebox@0.27.8': {}
+ '@sinclair/typebox@0.34.48':
+ optional: true
+
'@sinonjs/commons@3.0.1':
dependencies:
type-detect: 4.0.8
@@ -1715,6 +1839,9 @@ snapshots:
dependencies:
'@types/yargs-parser': 21.0.3
+ '@ungap/structured-clone@1.3.0':
+ optional: true
+
acorn-walk@8.3.4:
dependencies:
acorn: 8.14.1
@@ -1744,8 +1871,6 @@ snapshots:
dependencies:
sprintf-js: 1.0.3
- async@3.2.6: {}
-
babel-jest@29.7.0(@babel/core@7.27.4):
dependencies:
'@babel/core': 7.27.4
@@ -1759,6 +1884,20 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ babel-jest@30.2.0(@babel/core@7.27.4):
+ dependencies:
+ '@babel/core': 7.27.4
+ '@jest/transform': 30.2.0
+ '@types/babel__core': 7.20.5
+ babel-plugin-istanbul: 7.0.1
+ babel-preset-jest: 30.2.0(@babel/core@7.27.4)
+ chalk: 4.1.2
+ graceful-fs: 4.2.11
+ slash: 3.0.0
+ transitivePeerDependencies:
+ - supports-color
+ optional: true
+
babel-plugin-istanbul@6.1.1:
dependencies:
'@babel/helper-plugin-utils': 7.27.1
@@ -1769,6 +1908,17 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ babel-plugin-istanbul@7.0.1:
+ dependencies:
+ '@babel/helper-plugin-utils': 7.27.1
+ '@istanbuljs/load-nyc-config': 1.1.0
+ '@istanbuljs/schema': 0.1.3
+ istanbul-lib-instrument: 6.0.3
+ test-exclude: 6.0.0
+ transitivePeerDependencies:
+ - supports-color
+ optional: true
+
babel-plugin-jest-hoist@29.6.3:
dependencies:
'@babel/template': 7.27.2
@@ -1776,7 +1926,12 @@ snapshots:
'@types/babel__core': 7.20.5
'@types/babel__traverse': 7.20.7
- babel-preset-current-node-syntax@1.1.0(@babel/core@7.27.4):
+ babel-plugin-jest-hoist@30.2.0:
+ dependencies:
+ '@types/babel__core': 7.20.5
+ optional: true
+
+ babel-preset-current-node-syntax@1.2.0(@babel/core@7.27.4):
dependencies:
'@babel/core': 7.27.4
'@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.27.4)
@@ -1799,7 +1954,14 @@ snapshots:
dependencies:
'@babel/core': 7.27.4
babel-plugin-jest-hoist: 29.6.3
- babel-preset-current-node-syntax: 1.1.0(@babel/core@7.27.4)
+ babel-preset-current-node-syntax: 1.2.0(@babel/core@7.27.4)
+
+ babel-preset-jest@30.2.0(@babel/core@7.27.4):
+ dependencies:
+ '@babel/core': 7.27.4
+ babel-plugin-jest-hoist: 30.2.0
+ babel-preset-current-node-syntax: 1.2.0(@babel/core@7.27.4)
+ optional: true
balanced-match@1.0.2: {}
@@ -1808,10 +1970,6 @@ snapshots:
balanced-match: 1.0.2
concat-map: 0.0.1
- brace-expansion@2.0.1:
- dependencies:
- balanced-match: 1.0.2
-
braces@3.0.3:
dependencies:
fill-range: 7.1.1
@@ -1850,6 +2008,9 @@ snapshots:
ci-info@3.9.0: {}
+ ci-info@4.4.0:
+ optional: true
+
cjs-module-lexer@1.4.3: {}
cliui@8.0.1:
@@ -1909,10 +2070,6 @@ snapshots:
diff@4.0.2: {}
- ejs@3.1.10:
- dependencies:
- jake: 10.9.2
-
electron-to-chromium@1.5.165: {}
emittery@0.13.1: {}
@@ -1957,10 +2114,6 @@ snapshots:
dependencies:
bser: 2.1.1
- filelist@1.0.4:
- dependencies:
- minimatch: 5.1.6
-
fill-range@7.1.1:
dependencies:
to-regex-range: 5.0.1
@@ -1998,6 +2151,15 @@ snapshots:
graceful-fs@4.2.11: {}
+ handlebars@4.7.8:
+ dependencies:
+ minimist: 1.2.8
+ neo-async: 2.6.2
+ source-map: 0.6.1
+ wordwrap: 1.0.0
+ optionalDependencies:
+ uglify-js: 3.19.3
+
has-flag@4.0.0: {}
hasown@2.0.2:
@@ -2079,13 +2241,6 @@ snapshots:
html-escaper: 2.0.2
istanbul-lib-report: 3.0.1
- jake@10.9.2:
- dependencies:
- async: 3.2.6
- chalk: 4.1.2
- filelist: 1.0.4
- minimatch: 3.1.2
-
jest-changed-files@29.7.0:
dependencies:
execa: 5.1.1
@@ -2214,6 +2369,22 @@ snapshots:
optionalDependencies:
fsevents: 2.3.3
+ jest-haste-map@30.2.0:
+ dependencies:
+ '@jest/types': 30.2.0
+ '@types/node': 22.15.29
+ anymatch: 3.1.3
+ fb-watchman: 2.0.2
+ graceful-fs: 4.2.11
+ jest-regex-util: 30.0.1
+ jest-util: 30.2.0
+ jest-worker: 30.2.0
+ micromatch: 4.0.8
+ walker: 1.0.8
+ optionalDependencies:
+ fsevents: 2.3.3
+ optional: true
+
jest-leak-detector@29.7.0:
dependencies:
jest-get-type: 29.6.3
@@ -2250,6 +2421,9 @@ snapshots:
jest-regex-util@29.6.3: {}
+ jest-regex-util@30.0.1:
+ optional: true
+
jest-resolve-dependencies@29.7.0:
dependencies:
jest-regex-util: 29.6.3
@@ -2265,7 +2439,7 @@ snapshots:
jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0)
jest-util: 29.7.0
jest-validate: 29.7.0
- resolve: 1.22.10
+ resolve: 1.22.11
resolve.exports: 2.0.3
slash: 3.0.0
@@ -2332,7 +2506,7 @@ snapshots:
'@jest/expect-utils': 29.7.0
'@jest/transform': 29.7.0
'@jest/types': 29.6.3
- babel-preset-current-node-syntax: 1.1.0(@babel/core@7.27.4)
+ babel-preset-current-node-syntax: 1.2.0(@babel/core@7.27.4)
chalk: 4.1.2
expect: 29.7.0
graceful-fs: 4.2.11
@@ -2343,7 +2517,7 @@ snapshots:
jest-util: 29.7.0
natural-compare: 1.4.0
pretty-format: 29.7.0
- semver: 7.7.2
+ semver: 7.7.3
transitivePeerDependencies:
- supports-color
@@ -2356,6 +2530,16 @@ snapshots:
graceful-fs: 4.2.11
picomatch: 2.3.1
+ jest-util@30.2.0:
+ dependencies:
+ '@jest/types': 30.2.0
+ '@types/node': 22.15.29
+ chalk: 4.1.2
+ ci-info: 4.4.0
+ graceful-fs: 4.2.11
+ picomatch: 4.0.3
+ optional: true
+
jest-validate@29.7.0:
dependencies:
'@jest/types': 29.6.3
@@ -2383,6 +2567,15 @@ snapshots:
merge-stream: 2.0.0
supports-color: 8.1.1
+ jest-worker@30.2.0:
+ dependencies:
+ '@types/node': 22.15.29
+ '@ungap/structured-clone': 1.3.0
+ jest-util: 30.2.0
+ merge-stream: 2.0.0
+ supports-color: 8.1.1
+ optional: true
+
jest@29.7.0(@types/node@22.15.29)(ts-node@10.9.2(@types/node@22.15.29)(typescript@5.4.5)):
dependencies:
'@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.15.29)(typescript@5.4.5))
@@ -2426,7 +2619,7 @@ snapshots:
make-dir@4.0.0:
dependencies:
- semver: 7.7.2
+ semver: 7.7.3
make-error@1.3.6: {}
@@ -2447,14 +2640,14 @@ snapshots:
dependencies:
brace-expansion: 1.1.11
- minimatch@5.1.6:
- dependencies:
- brace-expansion: 2.0.1
+ minimist@1.2.8: {}
ms@2.1.3: {}
natural-compare@1.4.0: {}
+ neo-async@2.6.2: {}
+
node-int64@0.4.0: {}
node-releases@2.0.19: {}
@@ -2506,6 +2699,9 @@ snapshots:
picomatch@2.3.1: {}
+ picomatch@4.0.3:
+ optional: true
+
pirates@4.0.7: {}
pkg-dir@4.2.0:
@@ -2537,7 +2733,7 @@ snapshots:
resolve.exports@2.0.3: {}
- resolve@1.22.10:
+ resolve@1.22.11:
dependencies:
is-core-module: 2.16.1
path-parse: 1.0.7
@@ -2549,6 +2745,8 @@ snapshots:
semver@7.7.2: {}
+ semver@7.7.3: {}
+
shebang-command@2.0.0:
dependencies:
shebang-regex: 3.0.0
@@ -2557,6 +2755,9 @@ snapshots:
signal-exit@3.0.7: {}
+ signal-exit@4.1.0:
+ optional: true
+
sisteransi@1.0.5: {}
slash@3.0.0: {}
@@ -2617,25 +2818,25 @@ snapshots:
dependencies:
is-number: 7.0.0
- ts-jest@29.3.4(@babel/core@7.27.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.27.4))(jest@29.7.0(@types/node@22.15.29)(ts-node@10.9.2(@types/node@22.15.29)(typescript@5.4.5)))(typescript@5.4.5):
+ ts-jest@29.4.6(@babel/core@7.27.4)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.27.4))(jest-util@30.2.0)(jest@29.7.0(@types/node@22.15.29)(ts-node@10.9.2(@types/node@22.15.29)(typescript@5.4.5)))(typescript@5.4.5):
dependencies:
bs-logger: 0.2.6
- ejs: 3.1.10
fast-json-stable-stringify: 2.1.0
+ handlebars: 4.7.8
jest: 29.7.0(@types/node@22.15.29)(ts-node@10.9.2(@types/node@22.15.29)(typescript@5.4.5))
- jest-util: 29.7.0
json5: 2.2.3
lodash.memoize: 4.1.2
make-error: 1.3.6
- semver: 7.7.2
+ semver: 7.7.3
type-fest: 4.41.0
typescript: 5.4.5
yargs-parser: 21.1.1
optionalDependencies:
'@babel/core': 7.27.4
- '@jest/transform': 29.7.0
- '@jest/types': 29.6.3
- babel-jest: 29.7.0(@babel/core@7.27.4)
+ '@jest/transform': 30.2.0
+ '@jest/types': 30.2.0
+ babel-jest: 30.2.0(@babel/core@7.27.4)
+ jest-util: 30.2.0
ts-node@10.9.2(@types/node@22.15.29)(typescript@5.4.5):
dependencies:
@@ -2663,6 +2864,9 @@ snapshots:
typescript@5.4.5: {}
+ uglify-js@3.19.3:
+ optional: true
+
undici-types@6.21.0: {}
update-browserslist-db@1.1.3(browserslist@4.25.0):
@@ -2687,6 +2891,8 @@ snapshots:
dependencies:
isexe: 2.0.0
+ wordwrap@1.0.0: {}
+
wrap-ansi@7.0.0:
dependencies:
ansi-styles: 4.3.0
@@ -2700,6 +2906,12 @@ snapshots:
imurmurhash: 0.1.4
signal-exit: 3.0.7
+ write-file-atomic@5.0.1:
+ dependencies:
+ imurmurhash: 0.1.4
+ signal-exit: 4.1.0
+ optional: true
+
xml-js@1.6.11:
dependencies:
sax: 1.4.1
diff --git a/testsuite/src/constants.js b/testsuite/src/constants.js
index ed7778d84..0623df1bd 100644
--- a/testsuite/src/constants.js
+++ b/testsuite/src/constants.js
@@ -1 +1,5 @@
-export const tmpJsonFile = '/tmp/test.json';
+import * as os from 'os';
+
+export const tmpJsonFile = os.tmpdir() + '/test.json';
+export const ESC = '\u001B';
+
diff --git a/testsuite/src/texReporter.js b/testsuite/src/texReporter.js
index 1f037fb44..1fb0c0c83 100644
--- a/testsuite/src/texReporter.js
+++ b/testsuite/src/texReporter.js
@@ -2,11 +2,9 @@
* Custom reporter for tex macro coverage.
*/
-import {tmpJsonFile} from './constants.js';
+import { tmpJsonFile, ESC } from './constants.js';
import * as fs from 'fs';
-const ESC = '\u001B';
-
export default class TexReporter {
constructor(globalConfig, reporterOptions, reporterContext) {
diff --git a/testsuite/tests/input/tex/Base.test.ts b/testsuite/tests/input/tex/Base.test.ts
index c10f7c389..98418eff0 100644
--- a/testsuite/tests/input/tex/Base.test.ts
+++ b/testsuite/tests/input/tex/Base.test.ts
@@ -4371,8 +4371,8 @@ describe('Multirel', () => {
tex2mml('a||b'),
``
);
@@ -4765,7 +4765,7 @@ describe('Other', () => {
toXmlMatch(
tex2mml('|'),
``
);
});
@@ -4777,7 +4777,7 @@ describe('Other', () => {
tex2mml('a|b'),
``
);
@@ -5194,7 +5194,7 @@ describe('Base Complex', () => {
|
q
- |
+ |
<
1
@@ -7928,7 +7928,7 @@ describe('Mathchar0mo', () => {
toXmlMatch(
tex2mml('\\surd'),
``
);
});
@@ -12191,7 +12191,7 @@ describe('Character Class Changes', () => {
/********************************************************************************/
- it('Mathop No Apply', () => {
+ it('Mathop No Apply I', () => {
toXmlMatch(
tex2mml('\\mathop{} x'),
``
);
@@ -628,7 +628,7 @@ describe('Braket', () => {
⟩
- |
+ |
b
`
);
diff --git a/testsuite/tests/input/tex/Mathtools.test.ts b/testsuite/tests/input/tex/Mathtools.test.ts
index b1974e6d7..68e08d165 100644
--- a/testsuite/tests/input/tex/Mathtools.test.ts
+++ b/testsuite/tests/input/tex/Mathtools.test.ts
@@ -6285,7 +6285,7 @@ describe('Mathtools options', () => {
[
x
]
- |
+ |
|
diff --git a/testsuite/tests/input/tex/Physics.test.ts b/testsuite/tests/input/tex/Physics.test.ts
index 0ec2cce60..a9b8424f9 100644
--- a/testsuite/tests/input/tex/Physics.test.ts
+++ b/testsuite/tests/input/tex/Physics.test.ts
@@ -3876,7 +3876,7 @@ describe('Physics3_4', () => {
`
sin
- |
+ |
x
y
@@ -4336,7 +4336,7 @@ describe('Physics3_5', () => {
Res
- |
+ |
x
y
@@ -4531,7 +4531,7 @@ describe('Physics3_6', () => {
P
- |
+ |
∫
f
(
@@ -4745,7 +4745,7 @@ describe('Physics3_7', () => {
Re
- |
+ |
x
y
@@ -4908,7 +4908,7 @@ describe('Physics3_7', () => {
Im
- |
+ |
x
y
diff --git a/testsuite/tests/util/Context-node.test.ts b/testsuite/tests/util/Context-node.test.ts
index 4c5fc15fe..a0bcc1564 100644
--- a/testsuite/tests/util/Context-node.test.ts
+++ b/testsuite/tests/util/Context-node.test.ts
@@ -19,7 +19,7 @@ describe('context object', () => {
test('context', () => {
if (OS === 'Windows') {
- expect(context.path('C:\\test.js')).toBe('C:/test.js');
+ expect(context.path('C:\\test.js')).toBe('file://C:/test.js');
} else {
expect(context.path('C:\\test.js')).toBe('C:\\test.js');
}
diff --git a/testsuite/tests/util/Context-windows.test.ts b/testsuite/tests/util/Context-windows.test.ts
index 8b8550e40..68a6bbee8 100644
--- a/testsuite/tests/util/Context-windows.test.ts
+++ b/testsuite/tests/util/Context-windows.test.ts
@@ -7,9 +7,10 @@ describe('context object', () => {
test('context', async () => {
let {context, hasWindow} = await import("#js/util/context.js");
- expect(context.path('C:\\test.js')).toBe('C:/test.js');
- expect(context.path('/C:/test.js')).toBe('C:/test.js');
- expect(context.path('/test.js')).toBe('/test.js');
+ expect(context.path('C:\\test.js')).toBe('file://C:/test.js');
+ expect(context.path('/C:/test.js')).toBe('file://C:/test.js');
+ expect(context.path('/test.js')).toBe('file:///test.js');
+ expect(context.path('./test.js')).toBe('./test.js');
delete context.path;
expect(context).toEqual({window: window, document: window.document, os: 'Windows'});
expect(hasWindow).toBe(true);
diff --git a/testsuite/tests/util/Styles.test.ts b/testsuite/tests/util/Styles.test.ts
index adcd0b459..1c5cdc381 100644
--- a/testsuite/tests/util/Styles.test.ts
+++ b/testsuite/tests/util/Styles.test.ts
@@ -311,11 +311,14 @@ describe('CssStyles object', () => {
cssTest('border-radius: 3px', {
'border-radius': '3px',
});
- cssTest('background: red; background-clip: none', {
- 'background': 'red',
- 'background-clip': 'none',
+ cssTest('border-color: red', {
+ 'border-bottom-color': 'red',
+ 'border-color': 'red',
+ 'border-left-color': 'red',
+ 'border-right-color': 'red',
+ 'border-top-color': 'red',
});
- cssTest(' border-top: inset blue 2px; border: 3px solid red', {
+ cssTest('border-top: inset blue 2px; border: 3px solid red', {
'border': '3px solid red',
'border-top': '3px solid red',
'border-top-color': 'red',
@@ -342,6 +345,13 @@ describe('CssStyles object', () => {
}, 'border-top: 3px solid red;');
});
+ test('background', () => {
+ cssTest('background: red; background-clip: none', {
+ 'background': 'red',
+ 'background-clip': 'none',
+ });
+ });
+
test('font', () => {
cssFontTest('font-family: arial', {'font-family': 'arial'});
cssFontTest('font-size: 120%', {'font-size': '120%'});
@@ -429,6 +439,9 @@ describe('CssStyles object', () => {
'font-family': 'arial',
'font-style': 'italic'
});
+ cssFontTest('font-size-adjust: none', {
+ 'font-size-adjust': 'none',
+ });
});
test('get()', () => {
diff --git a/ts/a11y/explorer.ts b/ts/a11y/explorer.ts
index 598a13195..e6d1e8349 100644
--- a/ts/a11y/explorer.ts
+++ b/ts/a11y/explorer.ts
@@ -369,6 +369,7 @@ export function ExplorerMathDocumentMixin<
brailleCombine: false, // combine Braille with speech output
help: true, // include "press h for help" messages on focus
roleDescription: 'math', // the role description to use for math expressions
+ inTabOrder: true, // true if expressin get tabindex = 0
tabSelects: 'all', // 'all' for whole expression, 'last' for last explored node
}
};
diff --git a/ts/a11y/explorer/ExplorerPool.ts b/ts/a11y/explorer/ExplorerPool.ts
index e631eb8fc..56fb1a3a7 100644
--- a/ts/a11y/explorer/ExplorerPool.ts
+++ b/ts/a11y/explorer/ExplorerPool.ts
@@ -372,7 +372,7 @@ export class ExplorerPool {
protected setSecondaryHighlighter() {
this.secondaryHighlighter = getHighlighter(
LiveRegion.priority.secondary,
- { color: 'red' },
+ { color: 'red', alpha: 0.8 },
{ color: 'black' },
this.document.outputJax.name
);
diff --git a/ts/a11y/explorer/KeyExplorer.ts b/ts/a11y/explorer/KeyExplorer.ts
index 2fe7c8591..9ee36f197 100644
--- a/ts/a11y/explorer/KeyExplorer.ts
+++ b/ts/a11y/explorer/KeyExplorer.ts
@@ -301,7 +301,7 @@ export class SpeechExplorer
*/
protected static keyMap: Map = new Map([
['Tab', [(explorer, event) => explorer.tabKey(event)]],
- ['Escape', [(explorer) => explorer.escapeKey()]],
+ ['Escape', [(explorer, event) => explorer.escapeKey(event)]],
['Enter', [(explorer, event) => explorer.enterKey(event)]],
['Home', [(explorer) => explorer.homeKey()]],
[
@@ -468,6 +468,11 @@ export class SpeechExplorer
*/
protected anchors: HTMLElement[];
+ /**
+ * The elements that are focusable for tab navigation
+ */
+ protected tabs: HTMLElement[];
+
/**
* Whether the expression was focused by a back tab
*/
@@ -498,7 +503,8 @@ export class SpeechExplorer
/**
* @override
*/
- public FocusIn(_event: FocusEvent) {
+ public FocusIn(event: FocusEvent) {
+ if ((event.target as HTMLElement).closest('mjx-html')) return;
if (this.item.outputData.nofocus) {
//
// we are refocusing after a menu or dialog box has closed
@@ -508,7 +514,7 @@ export class SpeechExplorer
}
if (!this.clicked) {
this.Start();
- this.backTab = _event.target === this.img;
+ this.backTab = event.target === this.img;
}
this.clicked = null;
}
@@ -639,8 +645,7 @@ export class SpeechExplorer
// focus on the clicked element when focusin occurs
// start the explorer if this isn't a link
//
- if (!clicked || this.node.contains(clicked)) {
- this.stopEvent(event);
+ if (!this.clicked && (!clicked || this.node.contains(clicked))) {
this.refocus = clicked;
if (!this.triggerLinkMouse()) {
this.Start();
@@ -658,7 +663,6 @@ export class SpeechExplorer
if (hasModifiers(event) || event.buttons === 2 || direction !== 'none') {
this.FocusOut(null);
} else {
- this.stopEvent(event);
this.refocus = this.rootNode();
this.Start();
}
@@ -696,50 +700,110 @@ export class SpeechExplorer
/**
* Stop exploring and focus the top element
*
- * @returns {boolean} Don't cancel the event
+ * @param {KeyboardEvent} event The event for the escape key
+ * @returns {boolean} Don't cancel the event
*/
- protected escapeKey(): boolean {
- this.Stop();
- this.focusTop();
- this.setCurrent(null);
+ protected escapeKey(event: KeyboardEvent): void | boolean {
+ if ((event.target as HTMLElement).closest('mjx-html')) {
+ this.refocus = (event.target as HTMLElement).closest(nav);
+ this.Start();
+ } else {
+ this.Stop();
+ this.focusTop();
+ this.setCurrent(null);
+ }
return true;
}
/**
- * Tab to the next internal link, if any, and stop the event from
- * propagating, or if no more links, let it propagate so that the
- * browser moves to the next focusable item.
+ * Tab to the next internal link or focusable HTML elelemt, if any,
+ * and stop the event from propagating, or if no more focusable
+ * elements, let it propagate so that the browser moves to the next
+ * focusable item.
*
* @param {KeyboardEvent} event The event for the enter key
* @returns {void | boolean} False means play the honk sound
*/
protected tabKey(event: KeyboardEvent): void | boolean {
- if (this.anchors.length === 0 || !this.current) return true;
+ //
+ // Get the currently active element in the expression
+ //
+ const active =
+ this.current ??
+ (this.node.contains(document.activeElement)
+ ? document.activeElement
+ : null);
+ if (this.tabs.length === 0 || !active) return true;
+ //
+ // If we back tabbed into the expression, tab to the first focusable item.
+ //
if (this.backTab) {
if (!event.shiftKey) return true;
- const link = this.linkFor(this.anchors[this.anchors.length - 1]);
- if (this.anchors.length === 1 && link === this.current) {
- return true;
- }
- this.setCurrent(link);
+ this.tabTo(this.tabs[this.tabs.length - 1]);
return;
}
- const [anchors, position, current] = event.shiftKey
+ //
+ // Otherwise, look through the list of focusable items to find the
+ // next one after (or before) the active item, and tab to it.
+ //
+ const [tabs, position, current] = event.shiftKey
? [
- this.anchors.slice(0).reverse(),
+ this.tabs.slice(0).reverse(),
Node.DOCUMENT_POSITION_PRECEDING,
- this.isLink() ? this.getAnchor() : this.current,
+ this.current && this.isLink() ? this.getAnchor() : active,
]
- : [this.anchors, Node.DOCUMENT_POSITION_FOLLOWING, this.current];
- for (const anchor of anchors) {
- if (current.compareDocumentPosition(anchor) & position) {
- this.setCurrent(this.linkFor(anchor));
+ : [this.tabs, Node.DOCUMENT_POSITION_FOLLOWING, active];
+ for (const tab of tabs) {
+ if (current.compareDocumentPosition(tab) & position) {
+ this.tabTo(tab);
return;
}
}
+ //
+ // If we are shift-tabbing from the root node, set up to tab out of
+ // the expression.
+ //
+ if (event.shiftKey && this.current === this.rootNode()) {
+ this.tabOut();
+ }
+ //
+ // Process the tab as normal
+ //
return true;
}
+ /**
+ * @param {HTMLElement} node The node within the expression to receive the focus
+ */
+ protected tabTo(node: HTMLElement) {
+ if (node.getAttribute('data-mjx-href')) {
+ this.setCurrent(this.linkFor(node));
+ } else {
+ node.focus();
+ }
+ }
+
+ /**
+ * Shift-Tab to previous focusable element (by temporarily making
+ * any focusable elements in the expression have display none, so
+ * they will be skipped by tabbing).
+ */
+ protected tabOut() {
+ const html = Array.from(
+ this.node.querySelectorAll('mjx-html')
+ ) as HTMLElement[];
+ if (html.length) {
+ html.forEach((node) => {
+ node.style.display = 'none';
+ });
+ setTimeout(() => {
+ html.forEach((node) => {
+ node.style.display = '';
+ });
+ }, 0);
+ }
+ }
+
/**
* Process Enter key events
*
@@ -752,11 +816,18 @@ export class SpeechExplorer
this.Stop();
} else {
const expandable = this.actionable(this.current);
- if (!expandable) {
- return false;
+ if (expandable) {
+ this.refocus = expandable;
+ expandable.dispatchEvent(new Event('click'));
+ return;
+ }
+ const tabs = this.getInternalTabs(this.current).filter(
+ (node) => !node.getAttribute('data-mjx-href')
+ );
+ if (tabs.length) {
+ tabs[0].focus();
+ return;
}
- this.refocus = expandable;
- expandable.dispatchEvent(new Event('click'));
}
} else {
this.Start();
@@ -1277,7 +1348,7 @@ export class SpeechExplorer
if (this.img) {
this.node.append(this.img);
}
- this.node.setAttribute('tabindex', '0');
+ this.node.setAttribute('tabindex', this.tabIndex);
}
}
@@ -1387,6 +1458,7 @@ export class SpeechExplorer
}
container.appendChild(this.img);
this.adjustAnchors();
+ this.getTabs();
}
/**
@@ -1429,6 +1501,25 @@ export class SpeechExplorer
this.anchors = [];
}
+ /**
+ * Find all the focusable elements in the expression (for tabbing)
+ */
+ protected getTabs() {
+ this.tabs = this.getInternalTabs(this.node);
+ }
+
+ /**
+ * @param {HTMLElement} node The node whose internal focusable elements are to be found
+ * @returns {HTMLElement[]} The list of focusable element within the given one
+ */
+ protected getInternalTabs(node: HTMLElement): HTMLElement[] {
+ return Array.from(
+ node.querySelectorAll(
+ 'button, [data-mjx-href], input, select, textarea, [tabindex]:not([tabindex="-1"],mjx-speech)'
+ )
+ );
+ }
+
/**
* Set focus on the current node
*/
@@ -1903,13 +1994,20 @@ export class SpeechExplorer
this.magnifyRegion.Update(this.current);
}
+ /**
+ * @returns {string} The tabIndex to use when not exploring
+ */
+ protected get tabIndex(): string {
+ return this.document.options.a11y.inTabOrder ? '0' : '-1';
+ }
+
/**
* @override
*/
public Attach() {
if (this.attached) return;
super.Attach();
- this.node.setAttribute('tabindex', '0');
+ this.node.setAttribute('tabindex', this.tabIndex);
this.attached = true;
}
@@ -1923,7 +2021,7 @@ export class SpeechExplorer
this.node.removeAttribute('aria-label');
this.img?.remove();
if (this.active) {
- this.node.setAttribute('tabindex', '0');
+ this.node.setAttribute('tabindex', this.tabIndex);
}
this.attached = false;
}
@@ -1941,10 +2039,37 @@ export class SpeechExplorer
public AddEvents() {
if (!this.eventsAttached) {
super.AddEvents();
+ this.addHtmlEvents();
this.eventsAttached = true;
}
}
+ /**
+ * Prevent clicks in mjx-html nodes from propagating, so clicks in
+ * HTML input elements or other selectable nodes will stop
+ * the explorer from processing the click.
+ */
+ protected addHtmlEvents() {
+ for (const html of Array.from(this.node.querySelectorAll('mjx-html'))) {
+ const stop = (event: Event) => {
+ if (html.contains(document.activeElement)) {
+ if (event instanceof KeyboardEvent) {
+ this.clicked = null;
+ if (event.key !== 'Tab' && event.key !== 'Escape') {
+ event.stopPropagation();
+ }
+ } else {
+ this.clicked = event.target as HTMLElement;
+ }
+ }
+ };
+ html.addEventListener('mousedown', stop);
+ html.addEventListener('click', stop);
+ html.addEventListener('keydown', stop);
+ html.addEventListener('dblclick', stop);
+ }
+ }
+
/********************************************************************/
/*
* Actions and links
diff --git a/ts/a11y/speech/WebWorker.ts b/ts/a11y/speech/WebWorker.ts
index 72a54c5aa..1f9b1c01b 100644
--- a/ts/a11y/speech/WebWorker.ts
+++ b/ts/a11y/speech/WebWorker.ts
@@ -334,13 +334,11 @@ export class WorkerHandler {
adaptor.setAttribute(node, 'data-semantic-type', 'dummy');
this.setSpecialAttributes(node, sid, '');
}
- this.setSpeechAttributes(
- adaptor.childNodes(container)[0],
- '',
- data,
- speech,
- braille
- );
+ for (const child of adaptor.childNodes(container)) {
+ if (adaptor.kind(child) === 'mjx-math' || adaptor.kind(child) === 'svg') {
+ this.setSpeechAttributes(child, '', data, speech, braille);
+ }
+ }
if (speech) {
if (data.label) {
adaptor.setAttribute(container, SemAttr.SPEECH, data.label);
diff --git a/ts/components/version.ts b/ts/components/version.ts
index b6fc39d1d..5c62f4846 100644
--- a/ts/components/version.ts
+++ b/ts/components/version.ts
@@ -22,4 +22,4 @@
* @author dpvc@mathjax.org (Davide Cervone)
*/
-export const VERSION = '4.1.0';
+export const VERSION = '4.1.1';
diff --git a/ts/core/MmlTree/MmlNode.ts b/ts/core/MmlTree/MmlNode.ts
index 2c94e6810..5ee7ed3ef 100644
--- a/ts/core/MmlTree/MmlNode.ts
+++ b/ts/core/MmlTree/MmlNode.ts
@@ -144,6 +144,7 @@ export interface MmlNode extends Node {
readonly isSpacelike: boolean;
readonly linebreakContainer: boolean;
readonly linebreakAlign: string;
+ readonly isEmpty: boolean;
/**
* The expected number of children (-1 means use inferred mrow)
@@ -540,6 +541,16 @@ export abstract class AbstractMmlNode
return 'data-align';
}
+ /**
+ * @returns {string} True if all child nodes are empty
+ */
+ public get isEmpty(): boolean {
+ for (const child of this.childNodes) {
+ if (!child.isEmpty) return false;
+ }
+ return true;
+ }
+
/**
* @returns {number} The number of children allowed, or Infinity for any number,
* or -1 for when an inferred row is needed for the children.
@@ -1023,6 +1034,18 @@ export abstract class AbstractMmlTokenNode extends AbstractMmlNode {
return true;
}
+ /**
+ * @override
+ */
+ public get isEmpty() {
+ for (const child of this.childNodes) {
+ if (!(child instanceof TextNode) || child.getText().length) {
+ return false;
+ }
+ }
+ return true;
+ }
+
/**
* Get the text of the token node (skipping mglyphs, and combining
* multiple text nodes)
@@ -1182,10 +1205,11 @@ export abstract class AbstractMmlBaseNode extends AbstractMmlNode {
if (this.isEmbellished || base.isKind('mi')) {
result = base.setTeXclass(prev);
this.updateTeXclass(this.core());
- } else if (base.isKind('TeXAtom')) {
- this.texClass = base.texClass;
} else {
base.setTeXclass(null);
+ if (base.isKind('TeXAtom')) {
+ this.texClass = base.texClass;
+ }
}
}
for (const child of this.childNodes.slice(1)) {
@@ -1227,6 +1251,13 @@ export abstract class AbstractMmlEmptyNode
return false;
}
+ /**
+ * @returns {boolean} Is empty
+ */
+ public get isEmpty(): boolean {
+ return true;
+ }
+
/**
* @returns {boolean} Not embellished
*/
diff --git a/ts/core/MmlTree/MmlNodes/mfenced.ts b/ts/core/MmlTree/MmlNodes/mfenced.ts
index 570bf1510..e6d3851d6 100644
--- a/ts/core/MmlTree/MmlNodes/mfenced.ts
+++ b/ts/core/MmlTree/MmlNodes/mfenced.ts
@@ -96,7 +96,9 @@ export class MmlMfenced extends AbstractMmlNode {
if (this.close) {
prev = this.close.setTeXclass(prev);
}
- this.updateTeXclass(this.open);
+ if (!this.open || !this.close) {
+ this.updateTeXclass(this.open || this.childNodes[0] || this.close);
+ }
return prev;
}
diff --git a/ts/input/tex/FilterUtil.ts b/ts/input/tex/FilterUtil.ts
index aeab0530d..0a297f4cb 100644
--- a/ts/input/tex/FilterUtil.ts
+++ b/ts/input/tex/FilterUtil.ts
@@ -187,10 +187,7 @@ const FilterUtil = {
const attribs = mml.attributes;
attribs.unset(TexConstant.Attr.LATEXITEM);
for (const key of attribs.getExplicitNames()) {
- if (
- !keep.has(key) &&
- attribs.get(key) === mml.attributes.getInherited(key)
- ) {
+ if (!keep.has(key) && attribs.get(key) === attribs.getInherited(key)) {
attribs.unset(key);
}
}
diff --git a/ts/input/tex/base/BaseItems.ts b/ts/input/tex/base/BaseItems.ts
index 960fa3a2a..7e89a15d9 100644
--- a/ts/input/tex/base/BaseItems.ts
+++ b/ts/input/tex/base/BaseItems.ts
@@ -788,7 +788,7 @@ export class FnItem extends BaseItem {
}
}
// @test Mathop Apply, Mathop No Apply
- if (top.isKind('TeXAtom') && top.childNodes[0].childNodes.length === 0) {
+ if (top.isKind('TeXAtom') && top.isEmpty) {
return [[top, item], true];
}
// @test Named Function, Named Function Arg
diff --git a/ts/input/tex/base/BaseMappings.ts b/ts/input/tex/base/BaseMappings.ts
index 41264a434..e5bc0bb78 100644
--- a/ts/input/tex/base/BaseMappings.ts
+++ b/ts/input/tex/base/BaseMappings.ts
@@ -169,7 +169,7 @@ new sm.CharacterMap('mathchar0mi', ParseMethods.mathchar0mi, {
* Macros for operators.
*/
new sm.CharacterMap('mathchar0mo', ParseMethods.mathchar0mo, {
- surd: '\u221A',
+ surd: ['\u221A', { symmetric: true }],
// big ops
coprod: ['\u2210', { movesupsub: true }],
diff --git a/ts/input/tex/base/BaseMethods.ts b/ts/input/tex/base/BaseMethods.ts
index 0dc9c1b9d..197ec9788 100644
--- a/ts/input/tex/base/BaseMethods.ts
+++ b/ts/input/tex/base/BaseMethods.ts
@@ -152,14 +152,14 @@ const BaseMethods: { [key: string]: ParseMethod } = {
* @param {string} c The parsed character.
*/
Bar(parser: TexParser, c: string) {
- parser.Push(
- parser.create(
- 'token',
- 'mo',
- { stretchy: false, texClass: TEXCLASS.ORD },
- c
- )
+ const mo = parser.create(
+ 'token',
+ 'mo',
+ { stretchy: false, texClass: TEXCLASS.ORD },
+ c
);
+ mo.setProperty('keep-attrs', 'stretchy');
+ parser.Push(mo);
},
/**
diff --git a/ts/input/tex/mathtools/MathtoolsUtil.ts b/ts/input/tex/mathtools/MathtoolsUtil.ts
index b7dc01f4b..3134c888b 100644
--- a/ts/input/tex/mathtools/MathtoolsUtil.ts
+++ b/ts/input/tex/mathtools/MathtoolsUtil.ts
@@ -158,7 +158,7 @@ export const MathtoolsUtil = {
parser.stack.env,
parser.configuration
).mml();
- return mml.isKind('TeXAtom') && mml.childNodes[0].childNodes.length === 0
+ return mml.isKind('TeXAtom') && mml.isEmpty
? parser.create('node', 'none')
: mml;
},
diff --git a/ts/output/chtml/Wrappers/mfrac.ts b/ts/output/chtml/Wrappers/mfrac.ts
index 7d061c517..6f4102f6a 100644
--- a/ts/output/chtml/Wrappers/mfrac.ts
+++ b/ts/output/chtml/Wrappers/mfrac.ts
@@ -388,12 +388,12 @@ export const ChtmlMfrac = (function (): ChtmlMfracClass {
//
// Place the parts
//
- const { u, v, delta, nbox, dbox } = this.getBevelData(display);
+ const { u, v, delta } = this.getBevelData(display);
if (u) {
- adaptor.setStyle(num, 'verticalAlign', this.em(u / nbox.scale));
+ adaptor.setStyle(num, 'verticalAlign', this.em(u));
}
if (v) {
- adaptor.setStyle(den, 'verticalAlign', this.em(v / dbox.scale));
+ adaptor.setStyle(den, 'verticalAlign', this.em(v));
}
const dx = this.em(-delta / 2);
adaptor.setStyle(this.bevel.dom[0], 'marginLeft', dx);
diff --git a/ts/output/common.ts b/ts/output/common.ts
index 2fe819740..5fc2ef288 100644
--- a/ts/output/common.ts
+++ b/ts/output/common.ts
@@ -645,6 +645,7 @@ export abstract class CommonOutputJax<
if (!node) return;
node.removeProperty('forcebreak');
node.removeProperty('breakable');
+ node.coreMO().removeProperty('forcebreak');
if (node.getProperty('process-breaks')) {
node.removeProperty('process-breaks');
for (const child of node.childNodes) {
diff --git a/ts/output/common/Wrappers/mtable.ts b/ts/output/common/Wrappers/mtable.ts
index 3c908ad44..1456340e3 100644
--- a/ts/output/common/Wrappers/mtable.ts
+++ b/ts/output/common/Wrappers/mtable.ts
@@ -717,10 +717,11 @@ export function CommonMtableMixin<
//
const TW = this.getTableData().W;
for (const child of stretchy) {
- const w = child.getBBox().w;
+ let w = child.getBBox().w;
child
.coreMO()
.getStretchedVariant([Math.max(W, w) / child.coreRScale()]);
+ w = child.getBBox().w;
if (w > TW[i]) {
TW[i] = w;
}
diff --git a/ts/output/svg.ts b/ts/output/svg.ts
index c712059c1..63a0c12c3 100644
--- a/ts/output/svg.ts
+++ b/ts/output/svg.ts
@@ -141,7 +141,11 @@ export class SVG extends CommonOutputJax<
* @override
*/
get forceInlineBreaks() {
- return true; // We need to break up the output into several separate SVGs
+ //
+ // When inlinebreaks are enabled, we need to break up the output
+ // into several separate SVGs.
+ //
+ return this.options.linebreaks.inline;
}
/**
diff --git a/ts/output/svg/Wrapper.ts b/ts/output/svg/Wrapper.ts
index d6bd6a9ab..dc4980d94 100644
--- a/ts/output/svg/Wrapper.ts
+++ b/ts/output/svg/Wrapper.ts
@@ -155,7 +155,13 @@ export class SvgWrapper extends CommonWrapper<
* @returns {boolean} True when embellished output is produced, false if not
*/
public toEmbellishedSVG(parents: N[]): boolean {
- if (parents.length <= 1 || !this.node.isEmbellished) return false;
+ if (
+ parents.length <= 1 ||
+ !this.node.isEmbellished ||
+ this.node.parent.isEmbellished
+ ) {
+ return false;
+ }
const style = this.coreMO().embellishedBreakStyle;
//
// At the end of the first line or beginning of the second,
diff --git a/ts/ui/dialog/DraggableDialog.ts b/ts/ui/dialog/DraggableDialog.ts
index e7090e898..c04b72d7c 100644
--- a/ts/ui/dialog/DraggableDialog.ts
+++ b/ts/ui/dialog/DraggableDialog.ts
@@ -207,7 +207,7 @@ export class DraggableDialog {
display: 'flex',
'flex-direction': 'column',
'align-items': 'center',
- position: 'relative',
+ position: 'fixed',
top: '-4%',
},
'.mjx-dialog.mjx-moving': {
@@ -420,10 +420,10 @@ export class DraggableDialog {
border: '2px inset #7C7C7C',
'background-color': '#222025',
},
- 'a[href]': {
+ '.mjx-dialog a[href]': {
color: '#86A7F5',
},
- 'a[href]:visited': {
+ '.mjx-dialog a[href]:visited': {
color: '#DD98E2',
},
'mjx-dialog kbd': {
diff --git a/ts/ui/menu/Menu.ts b/ts/ui/menu/Menu.ts
index 6c8b260a2..8e77dbe6e 100644
--- a/ts/ui/menu/Menu.ts
+++ b/ts/ui/menu/Menu.ts
@@ -84,7 +84,6 @@ export interface MenuSettings {
autocollapse: boolean;
collapsible: boolean;
enrich: boolean;
- inTabOrder: boolean;
assistiveMml: boolean;
// A11y settings
backgroundColor: string;
@@ -99,6 +98,7 @@ export interface MenuSettings {
infoPrefix: boolean;
infoRole: boolean;
infoType: boolean;
+ inTabOrder: boolean;
locale: string;
magnification: string;
magnify: string;
@@ -153,7 +153,6 @@ export class Menu {
autocollapse: false,
collapsible: false,
enrich: true,
- inTabOrder: true,
assistiveMml: false,
speech: true,
braille: true,
@@ -162,6 +161,7 @@ export class Menu {
brailleCombine: false,
speechRules: 'clearspeak-default',
roleDescription: 'math',
+ inTabOrder: true,
tabSelects: 'all',
help: true,
},
@@ -669,7 +669,7 @@ export class Menu {
this.variable('enrich', (enrich) =>
this.setEnrichment(enrich)
),
- this.variable('inTabOrder', (tab) => this.setTabOrder(tab)),
+ this.a11yVar('inTabOrder', (tab) => this.setTabOrder(tab)),
this.a11yVar('tabSelects'),
this.variable('assistiveMml', (mml) =>
this.setAssistiveMml(mml)
@@ -1087,12 +1087,7 @@ export class Menu {
this.settings.renderer.replace(/[^a-zA-Z0-9]/g, '') || 'CHTML';
(Menu._loadingPromise || Promise.resolve()).then(() => {
const settings = this.settings;
- const options = this.document.outputJax.options;
- options.scale = parseFloat(settings.scale);
- options.displayOverflow = settings.overflow.toLowerCase();
- if (options.linebreaks) {
- options.linebreaks.inline = settings.breakInline;
- }
+ this.applyRendererOptions(this.document.outputJax);
if (!settings.speechRules) {
const sre = this.document.options.sre;
settings.speechRules = `${sre.domain || 'clearspeak'}-${sre.style || 'default'}`;
@@ -1143,6 +1138,7 @@ export class Menu {
*/
protected setRenderer(jax: string, rerender: boolean = true): Promise {
if (Object.hasOwn(this.jax, jax) && this.jax[jax]) {
+ this.applyRendererOptions(this.jax[jax]);
return this.setOutputJax(jax, rerender);
}
const name = jax.toLowerCase();
@@ -1153,7 +1149,7 @@ export class Menu {
return fail(new Error(`Component ${name} not loaded`));
}
startup.useOutput(name, true);
- startup.output = startup.getOutputJax();
+ startup.output = this.applyRendererOptions(startup.getOutputJax());
startup.output.setAdaptor(this.document.adaptor);
startup.output.initialize();
this.jax[jax] = startup.output;
@@ -1164,6 +1160,23 @@ export class Menu {
});
}
+ /**
+ * @param {OutputJax} output The output jax to adjust.
+ * @returns {OutputJax} The adjusted output jax.
+ */
+ protected applyRendererOptions(
+ output: OutputJax
+ ): OutputJax {
+ const settings = this.settings;
+ const options = output.options;
+ options.scale = parseFloat(settings.scale);
+ options.displayOverflow = settings.overflow.toLowerCase();
+ if (options.linebreaks) {
+ options.linebreaks.inline = settings.breakInline;
+ }
+ return output;
+ }
+
/**
* Set up the new jax and link it to the document,
* load any needed extensions, and then rerender the math, if needed
diff --git a/ts/ui/no-dark-mode/no-dark-mode.ts b/ts/ui/no-dark-mode/no-dark-mode.ts
new file mode 100644
index 000000000..f30f4c242
--- /dev/null
+++ b/ts/ui/no-dark-mode/no-dark-mode.ts
@@ -0,0 +1,97 @@
+/*************************************************************
+ *
+ * Copyright (c) 2026 The MathJax Consortium
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @file An extension to disable dark mode for sites that don't support that
+ *
+ * @author dpvc@mathjax.org (Davide Cervone)
+ */
+
+import { MathJax } from '../../components/global.js';
+import { MathJaxObject } from '../../components/startup.js';
+import { AbstractHandler } from '../../core/Handler.js';
+
+[
+ [
+ MathJax._.ui?.dialog,
+ 'core',
+ () => {
+ const { DraggableDialog } = MathJax._.ui.dialog.DraggableDialog;
+ delete DraggableDialog.styles['@media (prefers-color-scheme: dark)'];
+ },
+ ],
+
+ [
+ MathJax._.a11y?.explorer,
+ 'a11y/explorer',
+ () => {
+ const Region = MathJax._.a11y.explorer.Region;
+ for (const region of ['LiveRegion', 'HoverRegion', 'ToolTip']) {
+ Region[region].style.styles['@media (prefers-color-scheme: dark)'] = {};
+ }
+ Region.LiveRegion.style.styles['@media (prefers-color-scheme: dark)'][
+ 'mjx-ignore'
+ ] = { ignore: 1 };
+ (MathJax as MathJaxObject).startup.extendHandler(
+ (handler: AbstractHandler) => {
+ delete (handler.documentClass as any).speechStyles[
+ '@media (prefers-color-scheme: dark) /* explorer */'
+ ];
+ return handler;
+ }
+ );
+ },
+ ],
+
+ [
+ MathJax._.output?.chtml,
+ 'output/chtml',
+ () => {
+ const { CHTML } = MathJax._.output.chtml_ts;
+ delete CHTML.commonStyles['@media (prefers-color-scheme: dark)'];
+ const { ChtmlMaction } = MathJax._.output.chtml.Wrappers.maction;
+ delete ChtmlMaction.styles[
+ '@media (prefers-color-scheme: dark) /* chtml maction */'
+ ];
+ },
+ ],
+
+ [
+ MathJax._.output?.svg,
+ 'output/svg',
+ () => {
+ const { SVG } = MathJax._.output.svg_ts;
+ delete SVG.commonStyles['@media (prefers-color-scheme: dark)'];
+ const { SvgMaction } = MathJax._.output.svg.Wrappers.maction;
+ delete SvgMaction.styles[
+ '@media (prefers-color-scheme: dark) /* svg maction */'
+ ];
+ },
+ ],
+].forEach(([immediate, extension, ready]) => {
+ if (immediate) {
+ ready();
+ } else {
+ const config = MathJax.config.loader;
+ config[extension] ??= {};
+ const check = config[extension].checkReady;
+ config[extension].checkReady = async () => {
+ if (check) await check();
+ return ready();
+ };
+ }
+});
diff --git a/ts/util/Styles.ts b/ts/util/Styles.ts
index 72576c58b..e7eff21f9 100644
--- a/ts/util/Styles.ts
+++ b/ts/util/Styles.ts
@@ -33,8 +33,10 @@ export type StyleList = { [name: string]: string };
/* prettier-ignore */
export type connection = {
children: string[], // suffix names to add to the base name
+ parts?: string[], // suffix names for sub-parts
split: (name: string) => void, // function to split the value for the children
combine: (name: string) => void // function to combine the child values when one changes
+ subPart?: boolean // true means children combine to a different parent
};
/**
@@ -53,7 +55,7 @@ export const WSC = ['width', 'style', 'color'];
* Split a style at spaces (taking quotation marks and commas into account)
*
* @param {string} text The combined styles to be split at spaces
- * @returns {string[]} Array of parts of the style (separated by spaces)
+ * @returns {string[]} Array of parts of the style (separated by spaces)
*/
function splitSpaces(text: string): string[] {
const parts = text.split(/((?:'[^'\n]*'|"[^"\n]*"|,[\s\n]|[^\s\n])*)/g);
@@ -105,7 +107,7 @@ function combineTRBL(name: string) {
const children = Styles.connect[name].children;
const parts = [] as string[];
for (const child of children) {
- const part = this.styles[name + '-' + child];
+ const part = this.styles[this.childName(name, child)];
if (!part) {
delete this.styles[name];
return;
@@ -124,6 +126,18 @@ function combineTRBL(name: string) {
this.styles[name] = parts.join(' ');
}
+/**
+ * Combine styles for a given border part (e.g., border-color)
+ *
+ * @param {string} name The name of the part to process
+ */
+function combinePart(name: string) {
+ combineTRBL.call(this, name);
+ this.combineChildren(name);
+ combineSame.call(this, name);
+ this.combineParent(name);
+}
+
/*********************************************************/
/**
* Use the same value for all children
@@ -143,6 +157,7 @@ function splitSame(name: string) {
* @param {string} name The style to be processed
*/
function combineSame(name: string) {
+ if (!Styles.connect[name]) return;
const children = [...Styles.connect[name].children];
const value = this.styles[this.childName(name, children.shift())];
for (const child of children) {
@@ -151,7 +166,9 @@ function combineSame(name: string) {
return;
}
}
- this.styles[name] = value;
+ if (value) {
+ this.styles[name] = value;
+ }
}
/*********************************************************/
@@ -198,7 +215,7 @@ function combineWSC(name: string) {
parts.push(value);
}
}
- if (parts.length) {
+ if (parts.length > 1) {
this.styles[name] = parts.join(' ');
} else {
delete this.styles[name];
@@ -373,6 +390,7 @@ export class Styles {
border: {
children: TRBL,
+ parts: WSC,
split: splitSame,
combine: combineSame,
},
@@ -399,17 +417,20 @@ export class Styles {
'border-width': {
children: TRBL,
split: splitTRBL,
- combine: null, // means its children combine to a different parent
+ combine: combinePart,
+ subPart: true,
},
'border-style': {
children: TRBL,
split: splitTRBL,
- combine: null, // means its children combine to a different parent
+ combine: combinePart,
+ subPart: true,
},
'border-color': {
children: TRBL,
split: splitTRBL,
- combine: null, // means its children combine to a different parent
+ combine: combinePart,
+ subPart: true,
},
font: {
@@ -469,9 +490,12 @@ export class Styles {
for (const name of Object.keys(this.styles)) {
const parent = this.parentName(name);
const cname = name.replace(/.*-/, '');
+ const pname = this.childName(this.parentName(parent), cname);
if (
- !this.styles[parent] ||
- !Styles.connect[parent]?.children?.includes(cname)
+ this.styles[name] &&
+ !this.styles[pname] &&
+ (!this.styles[parent] ||
+ !Styles.connect[parent]?.children?.includes(cname))
) {
styles.push(`${name}: ${this.styles[name]};`);
}
@@ -493,37 +517,49 @@ export class Styles {
public set(name: string, value: string | number | boolean) {
name = this.normalizeName(name);
this.setStyle(name, String(value));
- //
- // If there is no combine function, the children combine to
- // a separate parent (e.g., border-width sets border-top-width, etc.
- // and combines to border-top)
- //
- if (Styles.connect[name] && !Styles.connect[name].combine) {
- this.combineChildren(name);
- delete this.styles[name];
+ const connect = Styles.connect[name];
+ if (connect?.subPart) {
+ connect.combine.call(this, name);
+ return;
}
- //
- // If we just changed a child, we need to try to combine
- // it with its parent's other children
- //
+ this.combineParent(name);
+ if (name.match(/-.*-/)) {
+ const pname = name.replace(/-.*-/, '-');
+ combineSame.call(this, pname);
+ }
+ }
+
+ /**
+ * When we change a child, we need to try to combine
+ * it with its parent's other children.
+ *
+ * @param {string} name The child that was changed
+ */
+ public combineParent(name: string) {
while (name.match(/-/)) {
const cname = name;
name = this.parentName(name);
+ const connect = Styles.connect[name];
if (
!Styles.connect[cname] &&
- !Styles.connect[name]?.children?.includes(
- cname.substring(name.length + 1)
- )
+ !connect?.children?.includes(cname.substring(name.length + 1))
) {
break;
}
- Styles.connect[name].combine.call(this, name);
+ connect.combine.call(this, name);
+ }
+ if (!this.styles[name]) {
+ return;
+ }
+ const connect = Styles.connect[name];
+ for (const cname of connect?.parts || []) {
+ delete this.styles[this.childName(name, cname)];
}
}
/**
* @param {string} name The name of the style to get
- * @returns {string} The value of the style (or empty string if not defined)
+ * @returns {string} The value of the style (or empty string if not defined)
*/
public get(name: string): string {
name = this.normalizeName(name);
@@ -536,7 +572,7 @@ export class Styles {
*/
protected setStyle(name: string, value: string) {
this.styles[name] = this.sanitizeValue(value);
- if (Styles.connect[name] && Styles.connect[name].children) {
+ if (Styles.connect[name]?.children) {
Styles.connect[name].split.call(this, name);
}
if (value === '') {
@@ -577,10 +613,10 @@ export class Styles {
return child;
}
//
- // For non-combining styles, like border-width, insert
- // the child name before the find word, e.g., border-top-width
+ // For sub-part styles, like border-width, insert
+ // the child name before the final word, e.g., border-top-width
//
- if (Styles.connect[name] && !Styles.connect[name].combine) {
+ if (Styles.connect[name]?.subPart) {
child += name.replace(/.*-/, '-');
name = this.parentName(name);
}
@@ -589,7 +625,7 @@ export class Styles {
/**
* @param {string} name The name of a style to normalize
- * @returns {string} The name converted from CamelCase to lowercase with dashes
+ * @returns {string} The name converted from CamelCase to lowercase with dashes
*/
protected normalizeName(name: string): string {
return name.replace(/[A-Z]/g, (c) => '-' + c.toLowerCase());
diff --git a/ts/util/asyncLoad/system.ts b/ts/util/asyncLoad/system.ts
index 42b227b9a..c950babe9 100644
--- a/ts/util/asyncLoad/system.ts
+++ b/ts/util/asyncLoad/system.ts
@@ -27,7 +27,12 @@ import { context } from '../context.js';
declare const System: { import: (name: string, url?: string) => any };
declare const __dirname: string;
-let root = 'file://' + context.path(__dirname).replace(/\/[^/]*\/[^/]*$/, '/');
+let root =
+ 'file://' +
+ context
+ .path(__dirname)
+ .replace(/\/[^/]*\/[^/]*$/, '/')
+ .replace(/^file:\/\//, '');
if (!mathjax.asyncLoad && typeof System !== 'undefined' && System.import) {
mathjax.asyncLoad = (name: string) => {
diff --git a/ts/util/context.ts b/ts/util/context.ts
index 4f5b216b3..284785aaa 100644
--- a/ts/util/context.ts
+++ b/ts/util/context.ts
@@ -75,6 +75,6 @@ export const context = {
if (context.os === 'Windows') {
context.path = (file: string) =>
file.match(/^[/\\]?[a-zA-Z]:[/\\]/)
- ? file.replace(/\\/g, '/').replace(/^\//, '')
- : file;
+ ? 'file://' + file.replace(/\\/g, '/').replace(/^\//, '')
+ : file.replace(/^\//, 'file:///');
}