diff --git a/Jenkinsfile b/Jenkinsfile
index 465ef69836..128fdeb4e9 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -123,7 +123,7 @@ axes.values().combinations {
mavenOptions.add(0, "-Dsurefire.excludesFile=${excludesFile}")
}
withChecks(name: 'Tests', includeStage: true) {
- realtimeJUnit(healthScaleFactor: 20.0, testResults: '*/target/surefire-reports/*.xml') {
+ realtimeJUnit(healthScaleFactor: 20.0, testResults: '*/target/surefire-reports/*.xml,target/vitest-reports/*.xml') {
infra.runMaven(mavenOptions, jdk)
if (isUnix()) {
sh 'git add . && git diff --exit-code HEAD'
diff --git a/package.json b/package.json
index 033895dcdc..e706114d73 100644
--- a/package.json
+++ b/package.json
@@ -14,6 +14,8 @@
"prod": "webpack --config webpack.config.js --mode=production",
"build": "yarn prod",
"start": "yarn dev --watch",
+ "test": "vitest run",
+ "test:watch": "vitest",
"lint:js": "eslint . && prettier --check .",
"lint:js-ci": "eslint . -f checkstyle -o target/eslint-warnings.xml",
"lint:css": "stylelint src/main/scss",
@@ -36,6 +38,7 @@
"eslint-formatter-checkstyle": "9.0.1",
"globals": "17.11.0",
"handlebars-loader": "1.7.3",
+ "jsdom": "30.0.1",
"mini-css-extract-plugin": "2.10.2",
"postcss": "8.5.26",
"postcss-loader": "8.2.1",
@@ -48,6 +51,7 @@
"stylelint": "17.14.1",
"stylelint-checkstyle-reporter": "1.1.1",
"stylelint-config-standard-scss": "17.0.0",
+ "vitest": "4.1.10",
"webpack": "5.109.2",
"webpack-cli": "7.2.2",
"webpack-remove-empty-scripts": "1.1.1"
diff --git a/pom.xml b/pom.xml
index fdf64a8529..18d8eea45c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -500,6 +500,16 @@ THE SOFTWARE.
${skip.frontend}
+
+ yarn test
+
+ corepack
+
+ test
+
+ yarn test
+
+
diff --git a/src/test/js/form-checker.test.js b/src/test/js/form-checker.test.js
new file mode 100644
index 0000000000..d1da1300af
--- /dev/null
+++ b/src/test/js/form-checker.test.js
@@ -0,0 +1,150 @@
+import hudsonBehaviorSource from "../../../war/src/main/webapp/scripts/hudson-behavior.js?raw";
+import { beforeEach, describe, expect, it, vi } from "vitest";
+
+/**
+ * hudson-behavior.js is a classic script that publishes its API (FormChecker,
+ * updateValidationArea, …) as globals, so evaluate it in the global scope
+ * rather than importing it as a module.
+ */
+function loadHudsonBehavior() {
+ globalThis.Behaviour = {
+ register: () => {},
+ specify: () => {},
+ applySubtree: () => {},
+ };
+ // indirect eval, so that the top level `var`s of the script become globals
+ (0, eval)(hudsonBehaviorSource);
+}
+
+describe("FormChecker.delayedCheck", () => {
+ /** The requests handed to fetch, each one settled by the test. */
+ let requests;
+
+ beforeEach(() => {
+ loadHudsonBehavior();
+ // http2 raises this, but the tests rely on checks being serialized
+ FormChecker.maxParallel = 1;
+
+ requests = [];
+ globalThis.fetch = vi.fn(
+ (url, options) =>
+ new Promise((resolve, reject) => {
+ requests.push({ url, options, resolve, reject });
+ }),
+ );
+ });
+
+ /** Lets the pending promise callbacks of FormChecker run. */
+ function settle() {
+ return new Promise((resolve) => setTimeout(resolve, 0));
+ }
+
+ function respondWith(request, body) {
+ request.resolve({ text: () => Promise.resolve(body) });
+ return settle();
+ }
+
+ function abort(request) {
+ const error = new Error("The operation was aborted.");
+ error.name = "AbortError";
+ request.reject(error);
+ return settle();
+ }
+
+ function validationArea() {
+ return document.createElement("div");
+ }
+
+ function requestedUrls() {
+ return requests.map((request) => request.url);
+ }
+
+ it("runs the queued checks in order and fills in the validation areas", async () => {
+ const first = validationArea();
+ const second = validationArea();
+
+ FormChecker.delayedCheck("/check-first", "post", first);
+ FormChecker.delayedCheck("/check-second", "post", second);
+
+ expect(requestedUrls()).toEqual(["/check-first"]);
+
+ await respondWith(requests[0], "first
");
+
+ expect(first.innerHTML).toBe("first
");
+ expect(requestedUrls()).toEqual(["/check-first", "/check-second"]);
+
+ await respondWith(requests[1], "second
");
+
+ expect(second.innerHTML).toBe("second
");
+ expect(FormChecker.queue).toHaveLength(0);
+ expect(FormChecker.inProgress).toBe(0);
+ });
+
+ it("never sends a queued check that was aborted while waiting", async () => {
+ const inFlight = validationArea();
+ const outdated = validationArea();
+ const controller = new AbortController();
+
+ FormChecker.delayedCheck("/in-flight", "post", inFlight);
+ FormChecker.delayedCheck("/outdated", "post", outdated, controller);
+ controller.abort();
+
+ await respondWith(requests[0], "in flight
");
+
+ expect(requestedUrls()).toEqual(["/in-flight"]);
+ expect(inFlight.innerHTML).toBe("in flight
");
+ expect(outdated.innerHTML).toBe("");
+ expect(FormChecker.queue).toHaveLength(0);
+ expect(FormChecker.inProgress).toBe(0);
+ });
+
+ it("drops an in flight check that was aborted and carries on with the next one", async () => {
+ const outdated = validationArea();
+ const current = validationArea();
+ const controller = new AbortController();
+
+ FormChecker.delayedCheck("/outdated", "post", outdated, controller);
+ FormChecker.delayedCheck("/current", "post", current);
+
+ expect(requests[0].options.signal).toBe(controller.signal);
+
+ controller.abort();
+ await abort(requests[0]);
+
+ expect(outdated.innerHTML).toBe("");
+
+ await respondWith(requests[1], "current
");
+
+ expect(current.innerHTML).toBe("current
");
+ expect(FormChecker.inProgress).toBe(0);
+ });
+
+ it("discards the response of a check aborted after the server replied", async () => {
+ const target = validationArea();
+ const controller = new AbortController();
+
+ // a bare AbortSignal is accepted as well as an AbortController
+ FormChecker.delayedCheck("/check", "post", target, controller.signal);
+
+ expect(requests[0].options.signal).toBe(controller.signal);
+
+ controller.abort();
+ await respondWith(requests[0], "too late
");
+
+ expect(target.innerHTML).toBe("");
+ expect(FormChecker.inProgress).toBe(0);
+ });
+
+ it("ignores an abort argument that is neither a controller nor a signal", async () => {
+ const target = validationArea();
+
+ FormChecker.delayedCheck("/check", "post", target, {});
+
+ expect(requests[0].options.signal).toBeUndefined();
+
+ await respondWith(requests[0], "ok
");
+
+ expect(target.innerHTML).toBe("ok
");
+ expect(FormChecker.inProgress).toBe(0);
+ });
+});
diff --git a/vitest.config.mjs b/vitest.config.mjs
new file mode 100644
index 0000000000..dcdb97d2e2
--- /dev/null
+++ b/vitest.config.mjs
@@ -0,0 +1,12 @@
+import { defineConfig } from "vitest/config";
+
+export default defineConfig({
+ test: {
+ environment: "jsdom",
+ include: ["src/test/js/**/*.test.js"],
+ // published by the Jenkinsfile; kept out of */target/surefire-reports so
+ // that Launchable does not try to parse it as Maven output
+ reporters: ["default", "junit"],
+ outputFile: { junit: "target/vitest-reports/junit.xml" },
+ },
+});
diff --git a/war/src/main/webapp/scripts/hudson-behavior.js b/war/src/main/webapp/scripts/hudson-behavior.js
index 44ea664bc0..e4c35c54e6 100644
--- a/war/src/main/webapp/scripts/hudson-behavior.js
+++ b/war/src/main/webapp/scripts/hudson-behavior.js
@@ -222,13 +222,28 @@ var FormChecker = {
* HTTP method. GET or POST. I haven't confirmed specifics, but some browsers seem to cache GET requests.
* @param target
* HTML element whose innerHTML will be overwritten when the check is completed.
+ * @param abort
+ * Optional AbortController, or the AbortSignal of one, used to cancel the check
+ * while it is queued or in flight.
*/
- delayedCheck: function (url, method, target) {
+ delayedCheck: function (url, method, target, abort) {
if (url == null || method == null || target == null) {
// don't know whether we should throw an exception or ignore this. some broken plugins have illegal parameters
return;
}
- this.queue.push({ url: url, method: method, target: target });
+ var signal = null;
+ if (abort != null) {
+ signal = abort.signal || abort;
+ if (typeof signal.aborted !== "boolean") {
+ signal = null;
+ }
+ }
+ this.queue.push({
+ url: url,
+ method: method,
+ target: target,
+ signal: signal,
+ });
this.schedule();
},
@@ -236,19 +251,38 @@ var FormChecker = {
const method = params.method.toLowerCase();
if (method !== "get") {
var idx = url.indexOf("?");
- params.parameters = url.substring(idx + 1);
- url = url.substring(0, idx);
+ if (idx >= 0) {
+ params.parameters = url.substring(idx + 1);
+ url = url.substring(0, idx);
+ } else {
+ params.parameters = "";
+ }
}
- fetch(url, {
+ var requestParams = {
method: params.method,
headers: crumb.wrap({
"Content-Type": "application/x-www-form-urlencoded",
}),
body: method !== "get" ? params.parameters : null,
- }).then((response) => {
- params.onComplete(response);
- });
+ };
+ if (params.signal != null) {
+ requestParams.signal = params.signal;
+ }
+
+ fetch(url, requestParams)
+ .then((response) => {
+ params.onComplete(response);
+ })
+ .catch((error) => {
+ if (params.onError != null) {
+ params.onError(error);
+ return;
+ }
+ if (error && error.name !== "AbortError") {
+ console.warn(error);
+ }
+ });
},
schedule: function () {
@@ -259,19 +293,55 @@ var FormChecker = {
return;
}
- var next = this.queue.shift();
- this.sendRequest(next.url, {
- method: next.method,
- onComplete: function (x) {
- x.text().then((responseText) => {
- updateValidationArea(next.target, responseText);
- FormChecker.inProgress--;
- FormChecker.schedule();
- layoutUpdateCallback.call();
- });
- },
- });
+ var next = null;
+ while (this.queue.length > 0 && next == null) {
+ var queued = this.queue.shift();
+ if (!(queued.signal && queued.signal.aborted)) {
+ next = queued;
+ }
+ }
+ if (next == null) {
+ return;
+ }
+
this.inProgress++;
+ var completeRequest = function () {
+ FormChecker.inProgress--;
+ FormChecker.schedule();
+ };
+
+ try {
+ this.sendRequest(next.url, {
+ method: next.method,
+ signal: next.signal,
+ onComplete: function (x) {
+ x.text()
+ .then((responseText) => {
+ if (!(next.signal && next.signal.aborted)) {
+ updateValidationArea(next.target, responseText);
+ layoutUpdateCallback.call();
+ }
+ })
+ .catch((error) => {
+ if (error && error.name !== "AbortError") {
+ console.warn(error);
+ }
+ })
+ .then(completeRequest);
+ },
+ onError: function (error) {
+ if (error && error.name !== "AbortError") {
+ console.warn(error);
+ }
+ completeRequest();
+ },
+ });
+ } catch (error) {
+ if (error && error.name !== "AbortError") {
+ console.warn(error);
+ }
+ completeRequest();
+ }
},
};
diff --git a/yarn.lock b/yarn.lock
index 884238f980..517d4c3524 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -5,6 +5,31 @@ __metadata:
version: 10
cacheKey: 10c0
+"@asamuzakjp/css-color@npm:^6.0.5":
+ version: 6.0.7
+ resolution: "@asamuzakjp/css-color@npm:6.0.7"
+ dependencies:
+ "@csstools/css-calc": "npm:^3.3.0"
+ "@csstools/css-color-parser": "npm:^4.1.10"
+ "@csstools/css-parser-algorithms": "npm:^4.0.0"
+ "@csstools/css-tokenizer": "npm:^4.0.0"
+ lru-cache: "npm:^11.5.2"
+ checksum: 10c0/1f83d5b56624ca1d4cf7031bb29cfe08fe903c7acdf8e4cd7c84bb7cd122b0836bf12cd3929f0038537281c24fdb5f3c8cc8827e9b0909b3ad50842ad131eb4a
+ languageName: node
+ linkType: hard
+
+"@asamuzakjp/dom-selector@npm:^8.3.0":
+ version: 8.3.2
+ resolution: "@asamuzakjp/dom-selector@npm:8.3.2"
+ dependencies:
+ bidi-js: "npm:^1.0.3"
+ css-tree: "npm:^3.2.1"
+ is-potential-custom-element-name: "npm:^1.0.1"
+ lru-cache: "npm:^11.5.2"
+ checksum: 10c0/f39e2cee4e6ef034af405e0fe272c8e3d27dcf8cc123fd6a5801a9dea3f8bbdfeee05a1a58e08f364ca8f7608a2749bd6e21c61265e15c2a0e6dd913e2f63bba
+ languageName: node
+ linkType: hard
+
"@babel/cli@npm:8.0.4":
version: 8.0.4
resolution: "@babel/cli@npm:8.0.4"
@@ -1099,6 +1124,17 @@ __metadata:
languageName: node
linkType: hard
+"@bramus/specificity@npm:^2.4.2":
+ version: 2.4.2
+ resolution: "@bramus/specificity@npm:2.4.2"
+ dependencies:
+ css-tree: "npm:^3.0.0"
+ bin:
+ specificity: bin/cli.js
+ checksum: 10c0/c5f4e04e0bca0d2202598207a5eb0733c8109d12a68a329caa26373bec598d99db5bb785b8865fefa00fc01b08c6068138807ceb11a948fe15e904ed6cf4ba72
+ languageName: node
+ linkType: hard
+
"@cacheable/memory@npm:^2.2.0":
version: 2.2.0
resolution: "@cacheable/memory@npm:2.2.0"
@@ -1189,6 +1225,18 @@ __metadata:
languageName: node
linkType: hard
+"@csstools/css-syntax-patches-for-csstree@npm:^1.1.7":
+ version: 1.1.8
+ resolution: "@csstools/css-syntax-patches-for-csstree@npm:1.1.8"
+ peerDependencies:
+ css-tree: ^3.2.1
+ peerDependenciesMeta:
+ css-tree:
+ optional: true
+ checksum: 10c0/9330105ea3959f40196f31e105cbaf1e4a2bc2db681e08efc9415da36f2e6aa626dc2ad6fff9fc7758d79ce54dfc2332284aa05db9463dc611bf56221f7e19cc
+ languageName: node
+ linkType: hard
+
"@csstools/css-tokenizer@npm:^4.0.0":
version: 4.0.0
resolution: "@csstools/css-tokenizer@npm:4.0.0"
@@ -1866,6 +1914,18 @@ __metadata:
languageName: node
linkType: hard
+"@exodus/bytes@npm:^1.11.0, @exodus/bytes@npm:^1.15.1, @exodus/bytes@npm:^1.6.0":
+ version: 1.15.1
+ resolution: "@exodus/bytes@npm:1.15.1"
+ peerDependencies:
+ "@noble/hashes": ^1.8.0 || ^2.0.0
+ peerDependenciesMeta:
+ "@noble/hashes":
+ optional: true
+ checksum: 10c0/333056a6953bbf875d9f3b86c32314de29458d842e5f56f6ef8034b18c2d9660184550093d1bae5de0064043d5e23f54cc03148798d9d29cf5167ac03f2e9f8c
+ languageName: node
+ linkType: hard
+
"@humanfs/core@npm:^0.19.2":
version: 0.19.2
resolution: "@humanfs/core@npm:0.19.2"
@@ -1977,7 +2037,7 @@ __metadata:
languageName: node
linkType: hard
-"@jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0":
+"@jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0, @jridgewell/sourcemap-codec@npm:^1.5.5":
version: 1.5.5
resolution: "@jridgewell/sourcemap-codec@npm:1.5.5"
checksum: 10c0/f9e538f302b63c0ebc06eecb1dd9918dd4289ed36147a0ddce35d6ea4d7ebbda243cda7b2213b6a5e1d8087a298d5cf630fb2bd39329cdecb82017023f6081a0
@@ -2077,6 +2137,13 @@ __metadata:
languageName: node
linkType: hard
+"@oxc-project/types@npm:=0.144.0":
+ version: 0.144.0
+ resolution: "@oxc-project/types@npm:0.144.0"
+ checksum: 10c0/997c6c33f09706af604ece0e99c698965757887aca4b42c5fb5ddcb11c39876c1e824b188b1e6582276355468a9b13f955d3b822d3b532cd6bedbeb64b603ff0
+ languageName: node
+ linkType: hard
+
"@parcel/watcher-android-arm64@npm:2.6.0":
version: 2.6.0
resolution: "@parcel/watcher-android-arm64@npm:2.6.0"
@@ -2218,6 +2285,111 @@ __metadata:
languageName: node
linkType: hard
+"@rolldown/binding-android-arm64@npm:1.2.4":
+ version: 1.2.4
+ resolution: "@rolldown/binding-android-arm64@npm:1.2.4"
+ conditions: os=android & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@rolldown/binding-darwin-arm64@npm:1.2.4":
+ version: 1.2.4
+ resolution: "@rolldown/binding-darwin-arm64@npm:1.2.4"
+ conditions: os=darwin & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@rolldown/binding-darwin-x64@npm:1.2.4":
+ version: 1.2.4
+ resolution: "@rolldown/binding-darwin-x64@npm:1.2.4"
+ conditions: os=darwin & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@rolldown/binding-freebsd-x64@npm:1.2.4":
+ version: 1.2.4
+ resolution: "@rolldown/binding-freebsd-x64@npm:1.2.4"
+ conditions: os=freebsd & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@rolldown/binding-linux-arm-gnueabihf@npm:1.2.4":
+ version: 1.2.4
+ resolution: "@rolldown/binding-linux-arm-gnueabihf@npm:1.2.4"
+ conditions: os=linux & cpu=arm
+ languageName: node
+ linkType: hard
+
+"@rolldown/binding-linux-arm64-gnu@npm:1.2.4":
+ version: 1.2.4
+ resolution: "@rolldown/binding-linux-arm64-gnu@npm:1.2.4"
+ conditions: os=linux & cpu=arm64 & libc=glibc
+ languageName: node
+ linkType: hard
+
+"@rolldown/binding-linux-arm64-musl@npm:1.2.4":
+ version: 1.2.4
+ resolution: "@rolldown/binding-linux-arm64-musl@npm:1.2.4"
+ conditions: os=linux & cpu=arm64 & libc=musl
+ languageName: node
+ linkType: hard
+
+"@rolldown/binding-linux-ppc64-gnu@npm:1.2.4":
+ version: 1.2.4
+ resolution: "@rolldown/binding-linux-ppc64-gnu@npm:1.2.4"
+ conditions: os=linux & cpu=ppc64 & libc=glibc
+ languageName: node
+ linkType: hard
+
+"@rolldown/binding-linux-s390x-gnu@npm:1.2.4":
+ version: 1.2.4
+ resolution: "@rolldown/binding-linux-s390x-gnu@npm:1.2.4"
+ conditions: os=linux & cpu=s390x & libc=glibc
+ languageName: node
+ linkType: hard
+
+"@rolldown/binding-linux-x64-gnu@npm:1.2.4":
+ version: 1.2.4
+ resolution: "@rolldown/binding-linux-x64-gnu@npm:1.2.4"
+ conditions: os=linux & cpu=x64 & libc=glibc
+ languageName: node
+ linkType: hard
+
+"@rolldown/binding-linux-x64-musl@npm:1.2.4":
+ version: 1.2.4
+ resolution: "@rolldown/binding-linux-x64-musl@npm:1.2.4"
+ conditions: os=linux & cpu=x64 & libc=musl
+ languageName: node
+ linkType: hard
+
+"@rolldown/binding-openharmony-arm64@npm:1.2.4":
+ version: 1.2.4
+ resolution: "@rolldown/binding-openharmony-arm64@npm:1.2.4"
+ conditions: os=openharmony & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@rolldown/binding-win32-arm64-msvc@npm:1.2.4":
+ version: 1.2.4
+ resolution: "@rolldown/binding-win32-arm64-msvc@npm:1.2.4"
+ conditions: os=win32 & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@rolldown/binding-win32-x64-msvc@npm:1.2.4":
+ version: 1.2.4
+ resolution: "@rolldown/binding-win32-x64-msvc@npm:1.2.4"
+ conditions: os=win32 & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@rolldown/pluginutils@npm:^1.0.0":
+ version: 1.0.1
+ resolution: "@rolldown/pluginutils@npm:1.0.1"
+ checksum: 10c0/99d9b06d90196823e4d8c841f258db7a16e5dbba5824a2962b05d907b79f1ba929d56f22dd744fd530936e568c865ee56a719dc31e57e13bc0a8eb4764a8d8dd
+ languageName: node
+ linkType: hard
+
"@sinclair/typebox@npm:^0.34.0":
version: 0.34.52
resolution: "@sinclair/typebox@npm:0.34.52"
@@ -2232,6 +2404,30 @@ __metadata:
languageName: node
linkType: hard
+"@standard-schema/spec@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "@standard-schema/spec@npm:1.1.0"
+ checksum: 10c0/d90f55acde4b2deb983529c87e8025fa693de1a5e8b49ecc6eb84d1fd96328add0e03d7d551442156c7432fd78165b2c26ff561b970a9a881f046abb78d6a526
+ languageName: node
+ linkType: hard
+
+"@types/chai@npm:^5.2.2":
+ version: 5.2.3
+ resolution: "@types/chai@npm:5.2.3"
+ dependencies:
+ "@types/deep-eql": "npm:*"
+ assertion-error: "npm:^2.0.1"
+ checksum: 10c0/e0ef1de3b6f8045a5e473e867c8565788c444271409d155588504840ad1a53611011f85072188c2833941189400228c1745d78323dac13fcede9c2b28bacfb2f
+ languageName: node
+ linkType: hard
+
+"@types/deep-eql@npm:*":
+ version: 4.0.2
+ resolution: "@types/deep-eql@npm:4.0.2"
+ checksum: 10c0/bf3f811843117900d7084b9d0c852da9a044d12eb40e6de73b552598a6843c21291a8a381b0532644574beecd5e3491c5ff3a0365ab86b15d59862c025384844
+ languageName: node
+ linkType: hard
+
"@types/esrecurse@npm:^4.3.1":
version: 4.3.1
resolution: "@types/esrecurse@npm:4.3.1"
@@ -2239,7 +2435,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/estree@npm:^1.0.6, @types/estree@npm:^1.0.8":
+"@types/estree@npm:^1.0.0, @types/estree@npm:^1.0.6, @types/estree@npm:^1.0.8":
version: 1.0.9
resolution: "@types/estree@npm:1.0.9"
checksum: 10c0/3ad3286ca2988cd550dafb8f2ad599c8474868e954fa601a36655bdfefd8039f7c714b8c1c7f2ae219ffbd58bd4660e66fa7479a0120fc02d4777057d4865387
@@ -2341,6 +2537,88 @@ __metadata:
languageName: node
linkType: hard
+"@vitest/expect@npm:4.1.10":
+ version: 4.1.10
+ resolution: "@vitest/expect@npm:4.1.10"
+ dependencies:
+ "@standard-schema/spec": "npm:^1.1.0"
+ "@types/chai": "npm:^5.2.2"
+ "@vitest/spy": "npm:4.1.10"
+ "@vitest/utils": "npm:4.1.10"
+ chai: "npm:^6.2.2"
+ tinyrainbow: "npm:^3.1.0"
+ checksum: 10c0/a817ad0d9bd6a039776a7228d54fb8319c17e4af15917407f5566ac61781a8511f591d302519d6999217399915bc3c0290028189fc73f5c38f80cb01b6f19c8d
+ languageName: node
+ linkType: hard
+
+"@vitest/mocker@npm:4.1.10":
+ version: 4.1.10
+ resolution: "@vitest/mocker@npm:4.1.10"
+ dependencies:
+ "@vitest/spy": "npm:4.1.10"
+ estree-walker: "npm:^3.0.3"
+ magic-string: "npm:^0.30.21"
+ peerDependencies:
+ msw: ^2.4.9
+ vite: ^6.0.0 || ^7.0.0 || ^8.0.0
+ peerDependenciesMeta:
+ msw:
+ optional: true
+ vite:
+ optional: true
+ checksum: 10c0/4aa70b0df58681652e2e28093437fb2e8f4d02a6d03f5619abc266ac1c5ae5f43326148061d13ae6e071e0f6cfcf7634659af63644de8ce098a7c98949a3d1ad
+ languageName: node
+ linkType: hard
+
+"@vitest/pretty-format@npm:4.1.10":
+ version: 4.1.10
+ resolution: "@vitest/pretty-format@npm:4.1.10"
+ dependencies:
+ tinyrainbow: "npm:^3.1.0"
+ checksum: 10c0/1a5daba730ffe23f2000bff484b4b2842f3b178d93663cb487b215516b8d3b62caa3e2bb2a3c63307b61a9fe58fb9bfff38559bc0c5e49d8aa403d6803a1d918
+ languageName: node
+ linkType: hard
+
+"@vitest/runner@npm:4.1.10":
+ version: 4.1.10
+ resolution: "@vitest/runner@npm:4.1.10"
+ dependencies:
+ "@vitest/utils": "npm:4.1.10"
+ pathe: "npm:^2.0.3"
+ checksum: 10c0/554b72639de9694271b99be8ae273fe12ec793093ec91cce143816cd1187d40b7138a4d9d4de4f456cfca9567de986825bff97e107c05b9eb4abc130e854286d
+ languageName: node
+ linkType: hard
+
+"@vitest/snapshot@npm:4.1.10":
+ version: 4.1.10
+ resolution: "@vitest/snapshot@npm:4.1.10"
+ dependencies:
+ "@vitest/pretty-format": "npm:4.1.10"
+ "@vitest/utils": "npm:4.1.10"
+ magic-string: "npm:^0.30.21"
+ pathe: "npm:^2.0.3"
+ checksum: 10c0/e71398725f51af5fd0c07bb4b957d0f987daf9b4c564ac24cb2a4d1afde1a6939f535ac17761a32dcc41b0a1e6d4088af66dc44df89fdebebb92aabed1a92b5f
+ languageName: node
+ linkType: hard
+
+"@vitest/spy@npm:4.1.10":
+ version: 4.1.10
+ resolution: "@vitest/spy@npm:4.1.10"
+ checksum: 10c0/e5c08012560af6727fd66741c5cda25560d7c5442103d0c83e4276a9b0dd90b9da6cdf823a461195229a16c6ff87768ce788a68d0fa29dea73ee285618668178
+ languageName: node
+ linkType: hard
+
+"@vitest/utils@npm:4.1.10":
+ version: 4.1.10
+ resolution: "@vitest/utils@npm:4.1.10"
+ dependencies:
+ "@vitest/pretty-format": "npm:4.1.10"
+ convert-source-map: "npm:^2.0.0"
+ tinyrainbow: "npm:^3.1.0"
+ checksum: 10c0/05b0ecec6997ec22fc08377e57dbd8fa37992e05961f3a7a916d98b1ab56d15c2a87dbd83d392b628242bdc156b1705e7fa60a3bf0c54bdb51158c153e05fc5d
+ languageName: node
+ linkType: hard
+
"@webassemblyjs/ast@npm:1.14.1, @webassemblyjs/ast@npm:^1.14.1":
version: 1.14.1
resolution: "@webassemblyjs/ast@npm:1.14.1"
@@ -2642,6 +2920,13 @@ __metadata:
languageName: node
linkType: hard
+"assertion-error@npm:^2.0.1":
+ version: 2.0.1
+ resolution: "assertion-error@npm:2.0.1"
+ checksum: 10c0/bbbcb117ac6480138f8c93cf7f535614282dea9dc828f540cdece85e3c665e8f78958b96afac52f29ff883c72638e6a87d469ecc9fe5bc902df03ed24a55dba8
+ languageName: node
+ linkType: hard
+
"astral-regex@npm:^2.0.0":
version: 2.0.0
resolution: "astral-regex@npm:2.0.0"
@@ -2726,6 +3011,15 @@ __metadata:
languageName: node
linkType: hard
+"bidi-js@npm:^1.0.3":
+ version: 1.0.3
+ resolution: "bidi-js@npm:1.0.3"
+ dependencies:
+ require-from-string: "npm:^2.0.2"
+ checksum: 10c0/fdddea4aa4120a34285486f2267526cd9298b6e8b773ad25e765d4f104b6d7437ab4ba542e6939e3ac834a7570bcf121ee2cf6d3ae7cd7082c4b5bedc8f271e1
+ languageName: node
+ linkType: hard
+
"big.js@npm:^5.2.2":
version: 5.2.2
resolution: "big.js@npm:5.2.2"
@@ -2829,6 +3123,13 @@ __metadata:
languageName: node
linkType: hard
+"chai@npm:^6.2.2":
+ version: 6.2.2
+ resolution: "chai@npm:6.2.2"
+ checksum: 10c0/e6c69e5f0c11dffe6ea13d0290936ebb68fcc1ad688b8e952e131df6a6d5797d5e860bc55cef1aca2e950c3e1f96daf79e9d5a70fb7dbaab4e46355e2635ed53
+ languageName: node
+ linkType: hard
+
"chalk@npm:^4.1.2":
version: 4.1.2
resolution: "chalk@npm:4.1.2"
@@ -3101,7 +3402,7 @@ __metadata:
languageName: node
linkType: hard
-"css-tree@npm:^3.0.1, css-tree@npm:^3.2.1":
+"css-tree@npm:^3.0.0, css-tree@npm:^3.0.1, css-tree@npm:^3.2.1":
version: 3.2.1
resolution: "css-tree@npm:3.2.1"
dependencies:
@@ -3214,6 +3515,16 @@ __metadata:
languageName: node
linkType: hard
+"data-urls@npm:^7.0.0":
+ version: 7.0.0
+ resolution: "data-urls@npm:7.0.0"
+ dependencies:
+ whatwg-mimetype: "npm:^5.0.0"
+ whatwg-url: "npm:^16.0.0"
+ checksum: 10c0/08d88ef50d8966a070ffdaa703e1e4b29f01bb2da364dfbc1612b1c2a4caa8045802c9532d81347b21781100132addb36a585071c8323b12cce97973961dee9f
+ languageName: node
+ linkType: hard
+
"debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.4.3":
version: 4.4.3
resolution: "debug@npm:4.4.3"
@@ -3226,6 +3537,13 @@ __metadata:
languageName: node
linkType: hard
+"decimal.js@npm:^10.6.0":
+ version: 10.6.0
+ resolution: "decimal.js@npm:10.6.0"
+ checksum: 10c0/07d69fbcc54167a340d2d97de95f546f9ff1f69d2b45a02fd7a5292412df3cd9eb7e23065e532a318f5474a2e1bccf8392fdf0443ef467f97f3bf8cb0477e5aa
+ languageName: node
+ linkType: hard
+
"deep-is@npm:^0.1.3":
version: 0.1.4
resolution: "deep-is@npm:0.1.4"
@@ -3338,6 +3656,13 @@ __metadata:
languageName: node
linkType: hard
+"entities@npm:^8.0.0":
+ version: 8.0.0
+ resolution: "entities@npm:8.0.0"
+ checksum: 10c0/938e631664c19451823344a351aeeafd74fae2d5fa51e4d5b6ff635afaefd4bacf0f609989888c04c42733f46ffdac15211608267ebb02488005891a4793e94d
+ languageName: node
+ linkType: hard
+
"env-paths@npm:^2.2.0, env-paths@npm:^2.2.1":
version: 2.2.1
resolution: "env-paths@npm:2.2.1"
@@ -3370,6 +3695,13 @@ __metadata:
languageName: node
linkType: hard
+"es-module-lexer@npm:^2.0.0":
+ version: 2.3.2
+ resolution: "es-module-lexer@npm:2.3.2"
+ checksum: 10c0/5e7389424c43478439f12f9a6aca1750f6f99afa384fc3de329f4a45f152ab156671055008adaafc74960877abf8cc338aeebf6bed8c21297b146fd6eb7a22f8
+ languageName: node
+ linkType: hard
+
"es-module-lexer@npm:^2.1.0":
version: 2.3.1
resolution: "es-module-lexer@npm:2.3.1"
@@ -3543,6 +3875,15 @@ __metadata:
languageName: node
linkType: hard
+"estree-walker@npm:^3.0.3":
+ version: 3.0.3
+ resolution: "estree-walker@npm:3.0.3"
+ dependencies:
+ "@types/estree": "npm:^1.0.0"
+ checksum: 10c0/c12e3c2b2642d2bcae7d5aa495c60fa2f299160946535763969a1c83fc74518ffa9c2cd3a8b69ac56aea547df6a8aac25f729a342992ef0bbac5f1c73e78995d
+ languageName: node
+ linkType: hard
+
"esutils@npm:^2.0.2":
version: 2.0.3
resolution: "esutils@npm:2.0.3"
@@ -3557,6 +3898,13 @@ __metadata:
languageName: node
linkType: hard
+"expect-type@npm:^1.3.0":
+ version: 1.4.0
+ resolution: "expect-type@npm:1.4.0"
+ checksum: 10c0/d40d76b8570695d36587beb3cc28494da2ca3ec8f04e67f5622ed2d372d850e401a9adef19c6835e1a8173903f157c79540b34c7b3fbd7cd8ce726cc903c57b7
+ languageName: node
+ linkType: hard
+
"exponential-backoff@npm:^3.1.1":
version: 3.1.3
resolution: "exponential-backoff@npm:3.1.3"
@@ -3738,6 +4086,25 @@ __metadata:
languageName: node
linkType: hard
+"fsevents@npm:~2.3.3":
+ version: 2.3.3
+ resolution: "fsevents@npm:2.3.3"
+ dependencies:
+ node-gyp: "npm:latest"
+ checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60
+ conditions: os=darwin
+ languageName: node
+ linkType: hard
+
+"fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin":
+ version: 2.3.3
+ resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1"
+ dependencies:
+ node-gyp: "npm:latest"
+ conditions: os=darwin
+ languageName: node
+ linkType: hard
+
"function-bind@npm:^1.1.2":
version: 1.1.2
resolution: "function-bind@npm:1.1.2"
@@ -3962,6 +4329,15 @@ __metadata:
languageName: node
linkType: hard
+"html-encoding-sniffer@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "html-encoding-sniffer@npm:6.0.0"
+ dependencies:
+ "@exodus/bytes": "npm:^1.6.0"
+ checksum: 10c0/66dc3f6f5539cc3beb814fcbfae7eacf4ec38cf824d6e1425b72039b51a40f4456bd8541ba66f4f4fe09cdf885ab5cd5bae6ec6339d6895a930b2fdb83c53025
+ languageName: node
+ linkType: hard
+
"html-tags@npm:^5.1.0":
version: 5.1.0
resolution: "html-tags@npm:5.1.0"
@@ -4160,6 +4536,13 @@ __metadata:
languageName: node
linkType: hard
+"is-potential-custom-element-name@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "is-potential-custom-element-name@npm:1.0.1"
+ checksum: 10c0/b73e2f22bc863b0939941d369486d308b43d7aef1f9439705e3582bfccaa4516406865e32c968a35f97a99396dac84e2624e67b0a16b0a15086a785e16ce7db9
+ languageName: node
+ linkType: hard
+
"isexe@npm:^2.0.0":
version: 2.0.0
resolution: "isexe@npm:2.0.0"
@@ -4201,6 +4584,7 @@ __metadata:
handlebars-loader: "npm:1.7.3"
hotkeys-js: "npm:3.12.2"
jquery: "npm:4.0.0"
+ jsdom: "npm:30.0.1"
lodash: "npm:4.18.1"
mini-css-extract-plugin: "npm:2.10.2"
postcss: "npm:8.5.26"
@@ -4216,6 +4600,7 @@ __metadata:
stylelint-checkstyle-reporter: "npm:1.1.1"
stylelint-config-standard-scss: "npm:17.0.0"
tippy.js: "npm:6.3.7"
+ vitest: "npm:4.1.10"
webpack: "npm:5.109.2"
webpack-cli: "npm:7.2.2"
webpack-remove-empty-scripts: "npm:1.1.1"
@@ -4321,6 +4706,40 @@ __metadata:
languageName: node
linkType: hard
+"jsdom@npm:30.0.1":
+ version: 30.0.1
+ resolution: "jsdom@npm:30.0.1"
+ dependencies:
+ "@asamuzakjp/css-color": "npm:^6.0.5"
+ "@asamuzakjp/dom-selector": "npm:^8.3.0"
+ "@bramus/specificity": "npm:^2.4.2"
+ "@csstools/css-syntax-patches-for-csstree": "npm:^1.1.7"
+ "@exodus/bytes": "npm:^1.15.1"
+ css-tree: "npm:^3.2.1"
+ data-urls: "npm:^7.0.0"
+ decimal.js: "npm:^10.6.0"
+ html-encoding-sniffer: "npm:^6.0.0"
+ is-potential-custom-element-name: "npm:^1.0.1"
+ lru-cache: "npm:^11.5.2"
+ parse5: "npm:^8.0.1"
+ saxes: "npm:^6.0.0"
+ symbol-tree: "npm:^3.2.4"
+ tough-cookie: "npm:^6.0.2"
+ undici: "npm:^8.9.0"
+ w3c-xmlserializer: "npm:^5.0.0"
+ webidl-conversions: "npm:^8.0.1"
+ whatwg-mimetype: "npm:^5.0.0"
+ whatwg-url: "npm:^17.1.0"
+ xml-name-validator: "npm:^5.0.0"
+ peerDependencies:
+ canvas: ^3.2.3
+ peerDependenciesMeta:
+ canvas:
+ optional: true
+ checksum: 10c0/2e3c04c30da46f373259b33ffb1a7786d351370aada3bfa3d7766dc97956659727dc78f49e01813b313e873d32851c842dc319b89d099f9e9decb55339dca155
+ languageName: node
+ linkType: hard
+
"jsesc@npm:^3.0.2, jsesc@npm:~3.1.0":
version: 3.1.0
resolution: "jsesc@npm:3.1.0"
@@ -4427,6 +4846,126 @@ __metadata:
languageName: node
linkType: hard
+"lightningcss-android-arm64@npm:1.33.0":
+ version: 1.33.0
+ resolution: "lightningcss-android-arm64@npm:1.33.0"
+ conditions: os=android & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"lightningcss-darwin-arm64@npm:1.33.0":
+ version: 1.33.0
+ resolution: "lightningcss-darwin-arm64@npm:1.33.0"
+ conditions: os=darwin & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"lightningcss-darwin-x64@npm:1.33.0":
+ version: 1.33.0
+ resolution: "lightningcss-darwin-x64@npm:1.33.0"
+ conditions: os=darwin & cpu=x64
+ languageName: node
+ linkType: hard
+
+"lightningcss-freebsd-x64@npm:1.33.0":
+ version: 1.33.0
+ resolution: "lightningcss-freebsd-x64@npm:1.33.0"
+ conditions: os=freebsd & cpu=x64
+ languageName: node
+ linkType: hard
+
+"lightningcss-linux-arm-gnueabihf@npm:1.33.0":
+ version: 1.33.0
+ resolution: "lightningcss-linux-arm-gnueabihf@npm:1.33.0"
+ conditions: os=linux & cpu=arm
+ languageName: node
+ linkType: hard
+
+"lightningcss-linux-arm64-gnu@npm:1.33.0":
+ version: 1.33.0
+ resolution: "lightningcss-linux-arm64-gnu@npm:1.33.0"
+ conditions: os=linux & cpu=arm64 & libc=glibc
+ languageName: node
+ linkType: hard
+
+"lightningcss-linux-arm64-musl@npm:1.33.0":
+ version: 1.33.0
+ resolution: "lightningcss-linux-arm64-musl@npm:1.33.0"
+ conditions: os=linux & cpu=arm64 & libc=musl
+ languageName: node
+ linkType: hard
+
+"lightningcss-linux-x64-gnu@npm:1.33.0":
+ version: 1.33.0
+ resolution: "lightningcss-linux-x64-gnu@npm:1.33.0"
+ conditions: os=linux & cpu=x64 & libc=glibc
+ languageName: node
+ linkType: hard
+
+"lightningcss-linux-x64-musl@npm:1.33.0":
+ version: 1.33.0
+ resolution: "lightningcss-linux-x64-musl@npm:1.33.0"
+ conditions: os=linux & cpu=x64 & libc=musl
+ languageName: node
+ linkType: hard
+
+"lightningcss-win32-arm64-msvc@npm:1.33.0":
+ version: 1.33.0
+ resolution: "lightningcss-win32-arm64-msvc@npm:1.33.0"
+ conditions: os=win32 & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"lightningcss-win32-x64-msvc@npm:1.33.0":
+ version: 1.33.0
+ resolution: "lightningcss-win32-x64-msvc@npm:1.33.0"
+ conditions: os=win32 & cpu=x64
+ languageName: node
+ linkType: hard
+
+"lightningcss@npm:^1.33.0":
+ version: 1.33.0
+ resolution: "lightningcss@npm:1.33.0"
+ dependencies:
+ detect-libc: "npm:^2.0.3"
+ lightningcss-android-arm64: "npm:1.33.0"
+ lightningcss-darwin-arm64: "npm:1.33.0"
+ lightningcss-darwin-x64: "npm:1.33.0"
+ lightningcss-freebsd-x64: "npm:1.33.0"
+ lightningcss-linux-arm-gnueabihf: "npm:1.33.0"
+ lightningcss-linux-arm64-gnu: "npm:1.33.0"
+ lightningcss-linux-arm64-musl: "npm:1.33.0"
+ lightningcss-linux-x64-gnu: "npm:1.33.0"
+ lightningcss-linux-x64-musl: "npm:1.33.0"
+ lightningcss-win32-arm64-msvc: "npm:1.33.0"
+ lightningcss-win32-x64-msvc: "npm:1.33.0"
+ dependenciesMeta:
+ lightningcss-android-arm64:
+ optional: true
+ lightningcss-darwin-arm64:
+ optional: true
+ lightningcss-darwin-x64:
+ optional: true
+ lightningcss-freebsd-x64:
+ optional: true
+ lightningcss-linux-arm-gnueabihf:
+ optional: true
+ lightningcss-linux-arm64-gnu:
+ optional: true
+ lightningcss-linux-arm64-musl:
+ optional: true
+ lightningcss-linux-x64-gnu:
+ optional: true
+ lightningcss-linux-x64-musl:
+ optional: true
+ lightningcss-win32-arm64-msvc:
+ optional: true
+ lightningcss-win32-x64-msvc:
+ optional: true
+ checksum: 10c0/ce1f8279fbae636dbf37fa6e7385d5f98ed881d72af3362f24afbd4685e19c1fcdfecf17e5dd77f2ebee3d0c23ade276230d85842d07292229a2cffba8ff20a3
+ languageName: node
+ linkType: hard
+
"lilconfig@npm:^3.1.3":
version: 3.1.3
resolution: "lilconfig@npm:3.1.3"
@@ -4505,13 +5044,22 @@ __metadata:
languageName: node
linkType: hard
-"lru-cache@npm:^11.0.0":
+"lru-cache@npm:^11.0.0, lru-cache@npm:^11.5.2":
version: 11.5.2
resolution: "lru-cache@npm:11.5.2"
checksum: 10c0/ece1ad731f5b655e85d67047d04bfc13823dc77aa61c5454924a9869ba600a0104e39cc33d726021feef812bc347ca34a5608a5eb1972a5dd0870b7ecd42c3f2
languageName: node
linkType: hard
+"magic-string@npm:^0.30.21":
+ version: 0.30.21
+ resolution: "magic-string@npm:0.30.21"
+ dependencies:
+ "@jridgewell/sourcemap-codec": "npm:^1.5.5"
+ checksum: 10c0/299378e38f9a270069fc62358522ddfb44e94244baa0d6a8980ab2a9b2490a1d03b236b447eee309e17eb3bddfa482c61259d47960eb018a904f0ded52780c4a
+ languageName: node
+ linkType: hard
+
"mathml-tag-names@npm:^4.0.0":
version: 4.0.0
resolution: "mathml-tag-names@npm:4.0.0"
@@ -4864,6 +5412,15 @@ __metadata:
languageName: node
linkType: hard
+"parse5@npm:^8.0.1":
+ version: 8.0.1
+ resolution: "parse5@npm:8.0.1"
+ dependencies:
+ entities: "npm:^8.0.0"
+ checksum: 10c0/c3c1c5aab55f6e4be5245599790e56e64be7764a4a0edd7f98db4fe3bb380f63add752fa047dff0496446c25f4104f0c7c1967723de640bde92306a7bb67ed2f
+ languageName: node
+ linkType: hard
+
"path-exists@npm:^4.0.0":
version: 4.0.0
resolution: "path-exists@npm:4.0.0"
@@ -4909,6 +5466,13 @@ __metadata:
languageName: node
linkType: hard
+"pathe@npm:^2.0.3":
+ version: 2.0.3
+ resolution: "pathe@npm:2.0.3"
+ checksum: 10c0/c118dc5a8b5c4166011b2b70608762e260085180bb9e33e80a50dcdb1e78c010b1624f4280c492c92b05fc276715a4c357d1f9edc570f8f1b3d90b6839ebaca1
+ languageName: node
+ linkType: hard
+
"picocolors@npm:^1.1.1":
version: 1.1.1
resolution: "picocolors@npm:1.1.1"
@@ -4923,7 +5487,7 @@ __metadata:
languageName: node
linkType: hard
-"picomatch@npm:^4.0.3, picomatch@npm:^4.0.4":
+"picomatch@npm:^4.0.3, picomatch@npm:^4.0.4, picomatch@npm:^4.0.5":
version: 4.0.5
resolution: "picomatch@npm:4.0.5"
checksum: 10c0/947bc6b6e1ff1e6c5aaf95b107a0839d12802f4f7b867663f67d47accba939ca1cb582cf99dfc30438efa1c4648ac5990967e783e8929c36b03e8440704ef1bd
@@ -5766,7 +6330,7 @@ __metadata:
languageName: node
linkType: hard
-"postcss@npm:8.5.26, postcss@npm:^8.4.40, postcss@npm:^8.5.16":
+"postcss@npm:8.5.26, postcss@npm:^8.4.40, postcss@npm:^8.5.16, postcss@npm:^8.5.25":
version: 8.5.26
resolution: "postcss@npm:8.5.26"
dependencies:
@@ -5800,7 +6364,7 @@ __metadata:
languageName: node
linkType: hard
-"punycode@npm:^2.1.0":
+"punycode@npm:^2.1.0, punycode@npm:^2.3.1":
version: 2.3.1
resolution: "punycode@npm:2.3.1"
checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9
@@ -5963,6 +6527,61 @@ __metadata:
languageName: node
linkType: hard
+"rolldown@npm:~1.2.1":
+ version: 1.2.4
+ resolution: "rolldown@npm:1.2.4"
+ dependencies:
+ "@oxc-project/types": "npm:=0.144.0"
+ "@rolldown/binding-android-arm64": "npm:1.2.4"
+ "@rolldown/binding-darwin-arm64": "npm:1.2.4"
+ "@rolldown/binding-darwin-x64": "npm:1.2.4"
+ "@rolldown/binding-freebsd-x64": "npm:1.2.4"
+ "@rolldown/binding-linux-arm-gnueabihf": "npm:1.2.4"
+ "@rolldown/binding-linux-arm64-gnu": "npm:1.2.4"
+ "@rolldown/binding-linux-arm64-musl": "npm:1.2.4"
+ "@rolldown/binding-linux-ppc64-gnu": "npm:1.2.4"
+ "@rolldown/binding-linux-s390x-gnu": "npm:1.2.4"
+ "@rolldown/binding-linux-x64-gnu": "npm:1.2.4"
+ "@rolldown/binding-linux-x64-musl": "npm:1.2.4"
+ "@rolldown/binding-openharmony-arm64": "npm:1.2.4"
+ "@rolldown/binding-win32-arm64-msvc": "npm:1.2.4"
+ "@rolldown/binding-win32-x64-msvc": "npm:1.2.4"
+ "@rolldown/pluginutils": "npm:^1.0.0"
+ dependenciesMeta:
+ "@rolldown/binding-android-arm64":
+ optional: true
+ "@rolldown/binding-darwin-arm64":
+ optional: true
+ "@rolldown/binding-darwin-x64":
+ optional: true
+ "@rolldown/binding-freebsd-x64":
+ optional: true
+ "@rolldown/binding-linux-arm-gnueabihf":
+ optional: true
+ "@rolldown/binding-linux-arm64-gnu":
+ optional: true
+ "@rolldown/binding-linux-arm64-musl":
+ optional: true
+ "@rolldown/binding-linux-ppc64-gnu":
+ optional: true
+ "@rolldown/binding-linux-s390x-gnu":
+ optional: true
+ "@rolldown/binding-linux-x64-gnu":
+ optional: true
+ "@rolldown/binding-linux-x64-musl":
+ optional: true
+ "@rolldown/binding-openharmony-arm64":
+ optional: true
+ "@rolldown/binding-win32-arm64-msvc":
+ optional: true
+ "@rolldown/binding-win32-x64-msvc":
+ optional: true
+ bin:
+ rolldown: ./bin/cli.mjs
+ checksum: 10c0/438c2222db940fab6e2db1f1cf84ab27c83310959e056fa389d7e2208bcbf58929f970f4dca5bd9c255f319bf657ef1a4a7ea6725213491d28764d867e5407a4
+ languageName: node
+ linkType: hard
+
"run-parallel@npm:^1.1.9":
version: 1.2.0
resolution: "run-parallel@npm:1.2.0"
@@ -6017,6 +6636,15 @@ __metadata:
languageName: node
linkType: hard
+"saxes@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "saxes@npm:6.0.0"
+ dependencies:
+ xmlchars: "npm:^2.2.0"
+ checksum: 10c0/3847b839f060ef3476eb8623d099aa502ad658f5c40fd60c105ebce86d244389b0d76fcae30f4d0c728d7705ceb2f7e9b34bb54717b6a7dbedaf5dad2d9a4b74
+ languageName: node
+ linkType: hard
+
"schema-utils@npm:^4.0.0, schema-utils@npm:^4.2.0, schema-utils@npm:^4.3.0, schema-utils@npm:^4.3.3":
version: 4.3.3
resolution: "schema-utils@npm:4.3.3"
@@ -6070,6 +6698,13 @@ __metadata:
languageName: node
linkType: hard
+"siginfo@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "siginfo@npm:2.0.0"
+ checksum: 10c0/3def8f8e516fbb34cb6ae415b07ccc5d9c018d85b4b8611e3dc6f8be6d1899f693a4382913c9ed51a06babb5201639d76453ab297d1c54a456544acf5c892e34
+ languageName: node
+ linkType: hard
+
"signal-exit@npm:^4.0.1":
version: 4.1.0
resolution: "signal-exit@npm:4.1.0"
@@ -6133,6 +6768,20 @@ __metadata:
languageName: node
linkType: hard
+"stackback@npm:0.0.2":
+ version: 0.0.2
+ resolution: "stackback@npm:0.0.2"
+ checksum: 10c0/89a1416668f950236dd5ac9f9a6b2588e1b9b62b1b6ad8dff1bfc5d1a15dbf0aafc9b52d2226d00c28dffff212da464eaeebfc6b7578b9d180cef3e3782c5983
+ languageName: node
+ linkType: hard
+
+"std-env@npm:^4.0.0-rc.1":
+ version: 4.2.0
+ resolution: "std-env@npm:4.2.0"
+ checksum: 10c0/40ac525ce7b7c556abc332a7376f14356eeb1a7f17f6ff9a003eb9f52326ff1f3745d3e1b43452675b1ec6fcc319f1b1d6f3b0d386cf3f91058479ad883cff69
+ languageName: node
+ linkType: hard
+
"string-width@npm:^4.2.3":
version: 4.2.3
resolution: "string-width@npm:4.2.3"
@@ -6390,6 +7039,13 @@ __metadata:
languageName: node
linkType: hard
+"symbol-tree@npm:^3.2.4":
+ version: 3.2.4
+ resolution: "symbol-tree@npm:3.2.4"
+ checksum: 10c0/dfbe201ae09ac6053d163578778c53aa860a784147ecf95705de0cd23f42c851e1be7889241495e95c37cabb058edb1052f141387bef68f705afc8f9dd358509
+ languageName: node
+ linkType: hard
+
"table@npm:^6.9.0":
version: 6.9.0
resolution: "table@npm:6.9.0"
@@ -6437,7 +7093,21 @@ __metadata:
languageName: node
linkType: hard
-"tinyglobby@npm:^0.2.12":
+"tinybench@npm:^2.9.0":
+ version: 2.9.0
+ resolution: "tinybench@npm:2.9.0"
+ checksum: 10c0/c3500b0f60d2eb8db65250afe750b66d51623057ee88720b7f064894a6cb7eb93360ca824a60a31ab16dab30c7b1f06efe0795b352e37914a9d4bad86386a20c
+ languageName: node
+ linkType: hard
+
+"tinyexec@npm:^1.0.2":
+ version: 1.3.0
+ resolution: "tinyexec@npm:1.3.0"
+ checksum: 10c0/e9b89f97489d2aab2cef408da279e6b32547e738d1275032ccb8fd0028a006d93eb70fc51c6cffd9fc2f5aca6c2a273d8b6f73b52d46ee5116da6b94969ef958
+ languageName: node
+ linkType: hard
+
+"tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.15, tinyglobby@npm:^0.2.17":
version: 0.2.17
resolution: "tinyglobby@npm:0.2.17"
dependencies:
@@ -6447,6 +7117,13 @@ __metadata:
languageName: node
linkType: hard
+"tinyrainbow@npm:^3.1.0":
+ version: 3.1.1
+ resolution: "tinyrainbow@npm:3.1.1"
+ checksum: 10c0/f9d2743832c6191f753408f36224fe817620b8abcef572b2e570204c673a901d753ff84ca8e7b88f9c79e934295b3ffc6fcbc56a06f126e24e1ec6186dcad40d
+ languageName: node
+ linkType: hard
+
"tippy.js@npm:6.3.7":
version: 6.3.7
resolution: "tippy.js@npm:6.3.7"
@@ -6456,6 +7133,24 @@ __metadata:
languageName: node
linkType: hard
+"tldts-core@npm:^7.4.10":
+ version: 7.4.10
+ resolution: "tldts-core@npm:7.4.10"
+ checksum: 10c0/a5f42aad8aa8adfc57d33e9bd5c43094e9de226dce4851867ea7014d8679040b4c01c500b9947595ab22cdfe9783ea5d88a7c0be2092d19a14f75c7cd4671181
+ languageName: node
+ linkType: hard
+
+"tldts@npm:^7.0.5":
+ version: 7.4.10
+ resolution: "tldts@npm:7.4.10"
+ dependencies:
+ tldts-core: "npm:^7.4.10"
+ bin:
+ tldts: bin/cli.js
+ checksum: 10c0/a9a85d260bd0bfd046794f140667aae0975da4a3aa805d180b0808b672a6fa7de0fc9f36110c3bdeed87ad780e961e1e5bb1ed8b41f8aa3ad5d5fb469e70ba38
+ languageName: node
+ linkType: hard
+
"to-regex-range@npm:^5.0.1":
version: 5.0.1
resolution: "to-regex-range@npm:5.0.1"
@@ -6465,6 +7160,24 @@ __metadata:
languageName: node
linkType: hard
+"tough-cookie@npm:^6.0.2":
+ version: 6.0.2
+ resolution: "tough-cookie@npm:6.0.2"
+ dependencies:
+ tldts: "npm:^7.0.5"
+ checksum: 10c0/5ff521a476a3c540821352125a5d481c8d2fe16035de7e0efda4df120f290c95500a0e9b51ea0aa56343955be482e014c30f5ba73e04b93ba138e4e855cb9e89
+ languageName: node
+ linkType: hard
+
+"tr46@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "tr46@npm:6.0.0"
+ dependencies:
+ punycode: "npm:^2.3.1"
+ checksum: 10c0/83130df2f649228aa91c17754b66248030a3af34911d713b5ea417066fa338aa4bc8668d06bd98aa21a2210f43fc0a3db8b9099e7747fb5830e40e39a6a1058e
+ languageName: node
+ linkType: hard
+
"type-check@npm:^0.4.0, type-check@npm:~0.4.0":
version: 0.4.0
resolution: "type-check@npm:0.4.0"
@@ -6490,7 +7203,7 @@ __metadata:
languageName: node
linkType: hard
-"undici@npm:^8.4.1":
+"undici@npm:^8.4.1, undici@npm:^8.9.0":
version: 8.10.0
resolution: "undici@npm:8.10.0"
checksum: 10c0/37ae2b1db8f65c3a003504e2040e96887b99f9db16ba07dcf49c37ed8b7f8c72f4452f2d46f52f7c9e49518fe8325e3b5e7e02ac3a2424886bd67d4b62a0ecab
@@ -6565,6 +7278,140 @@ __metadata:
languageName: node
linkType: hard
+"vite@npm:^6.0.0 || ^7.0.0 || ^8.0.0":
+ version: 8.2.1
+ resolution: "vite@npm:8.2.1"
+ dependencies:
+ fsevents: "npm:~2.3.3"
+ lightningcss: "npm:^1.33.0"
+ picomatch: "npm:^4.0.5"
+ postcss: "npm:^8.5.25"
+ rolldown: "npm:~1.2.1"
+ tinyglobby: "npm:^0.2.17"
+ peerDependencies:
+ "@types/node": ^20.19.0 || >=22.12.0
+ "@vitejs/devtools": ^0.4.0
+ esbuild: ^0.27.0 || ^0.28.0
+ jiti: ">=1.21.0"
+ less: ^4.0.0
+ sass: ^1.70.0
+ sass-embedded: ^1.70.0
+ stylus: ">=0.54.8"
+ sugarss: ^5.0.0
+ terser: ^5.16.0
+ tsx: ^4.8.1
+ yaml: ^2.4.2
+ dependenciesMeta:
+ fsevents:
+ optional: true
+ peerDependenciesMeta:
+ "@types/node":
+ optional: true
+ "@vitejs/devtools":
+ optional: true
+ esbuild:
+ optional: true
+ jiti:
+ optional: true
+ less:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ tsx:
+ optional: true
+ yaml:
+ optional: true
+ bin:
+ vite: bin/vite.js
+ checksum: 10c0/e958dd07502deeb552f04dba59418ff1eb63183add416fd7a3e3badabf5d36edc6834b94c916f9f9233f976bb1671e3e9989d90e869059af07b0d43f7fc078c2
+ languageName: node
+ linkType: hard
+
+"vitest@npm:4.1.10":
+ version: 4.1.10
+ resolution: "vitest@npm:4.1.10"
+ dependencies:
+ "@vitest/expect": "npm:4.1.10"
+ "@vitest/mocker": "npm:4.1.10"
+ "@vitest/pretty-format": "npm:4.1.10"
+ "@vitest/runner": "npm:4.1.10"
+ "@vitest/snapshot": "npm:4.1.10"
+ "@vitest/spy": "npm:4.1.10"
+ "@vitest/utils": "npm:4.1.10"
+ es-module-lexer: "npm:^2.0.0"
+ expect-type: "npm:^1.3.0"
+ magic-string: "npm:^0.30.21"
+ obug: "npm:^2.1.1"
+ pathe: "npm:^2.0.3"
+ picomatch: "npm:^4.0.3"
+ std-env: "npm:^4.0.0-rc.1"
+ tinybench: "npm:^2.9.0"
+ tinyexec: "npm:^1.0.2"
+ tinyglobby: "npm:^0.2.15"
+ tinyrainbow: "npm:^3.1.0"
+ vite: "npm:^6.0.0 || ^7.0.0 || ^8.0.0"
+ why-is-node-running: "npm:^2.3.0"
+ peerDependencies:
+ "@edge-runtime/vm": "*"
+ "@opentelemetry/api": ^1.9.0
+ "@types/node": ^20.0.0 || ^22.0.0 || >=24.0.0
+ "@vitest/browser-playwright": 4.1.10
+ "@vitest/browser-preview": 4.1.10
+ "@vitest/browser-webdriverio": 4.1.10
+ "@vitest/coverage-istanbul": 4.1.10
+ "@vitest/coverage-v8": 4.1.10
+ "@vitest/ui": 4.1.10
+ happy-dom: "*"
+ jsdom: "*"
+ vite: ^6.0.0 || ^7.0.0 || ^8.0.0
+ peerDependenciesMeta:
+ "@edge-runtime/vm":
+ optional: true
+ "@opentelemetry/api":
+ optional: true
+ "@types/node":
+ optional: true
+ "@vitest/browser-playwright":
+ optional: true
+ "@vitest/browser-preview":
+ optional: true
+ "@vitest/browser-webdriverio":
+ optional: true
+ "@vitest/coverage-istanbul":
+ optional: true
+ "@vitest/coverage-v8":
+ optional: true
+ "@vitest/ui":
+ optional: true
+ happy-dom:
+ optional: true
+ jsdom:
+ optional: true
+ vite:
+ optional: false
+ bin:
+ vitest: ./vitest.mjs
+ checksum: 10c0/ff07294a57f9c62f3b503f7cf88a52ee0753ed26389a49cda430387a3898f39d80af47180b0af19e27acab5bd11ae95706bd4b44ce8befc97d3ae49af6ca4fc1
+ languageName: node
+ linkType: hard
+
+"w3c-xmlserializer@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "w3c-xmlserializer@npm:5.0.0"
+ dependencies:
+ xml-name-validator: "npm:^5.0.0"
+ checksum: 10c0/8712774c1aeb62dec22928bf1cdfd11426c2c9383a1a63f2bcae18db87ca574165a0fbe96b312b73652149167ac6c7f4cf5409f2eb101d9c805efe0e4bae798b
+ languageName: node
+ linkType: hard
+
"watchpack@npm:^2.5.2":
version: 2.5.2
resolution: "watchpack@npm:2.5.2"
@@ -6574,6 +7421,13 @@ __metadata:
languageName: node
linkType: hard
+"webidl-conversions@npm:^8.0.1":
+ version: 8.0.1
+ resolution: "webidl-conversions@npm:8.0.1"
+ checksum: 10c0/3f6f327ca5fa0c065ed8ed0ef3b72f33623376e68f958e9b7bd0df49fdb0b908139ac2338d19fb45bd0e05595bda96cb6d1622222a8b413daa38a17aacc4dd46
+ languageName: node
+ linkType: hard
+
"webpack-cli@npm:7.2.2":
version: 7.2.2
resolution: "webpack-cli@npm:7.2.2"
@@ -6672,6 +7526,35 @@ __metadata:
languageName: node
linkType: hard
+"whatwg-mimetype@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "whatwg-mimetype@npm:5.0.0"
+ checksum: 10c0/eead164fe73a00dd82f817af6fc0bd22e9c273e1d55bf4bc6bdf2da7ad8127fca82ef00ea6a37892f5f5641f8e34128e09508f92126086baba126b9e0d57feb4
+ languageName: node
+ linkType: hard
+
+"whatwg-url@npm:^16.0.0":
+ version: 16.0.1
+ resolution: "whatwg-url@npm:16.0.1"
+ dependencies:
+ "@exodus/bytes": "npm:^1.11.0"
+ tr46: "npm:^6.0.0"
+ webidl-conversions: "npm:^8.0.1"
+ checksum: 10c0/e75565566abf3a2cdbd9f06c965dbcccee6ec4e9f0d3728ad5e08ceb9944279848bcaa211d35a29cb6d2df1e467dd05cfb59fbddf8a0adcd7d0bce9ffb703fd2
+ languageName: node
+ linkType: hard
+
+"whatwg-url@npm:^17.1.0":
+ version: 17.1.0
+ resolution: "whatwg-url@npm:17.1.0"
+ dependencies:
+ "@exodus/bytes": "npm:^1.15.1"
+ tr46: "npm:^6.0.0"
+ webidl-conversions: "npm:^8.0.1"
+ checksum: 10c0/08fe809e90e1d20f6de631c9cdf312623fe5526731dc176ad38967c7d0f34e6e9700cbc0bad5ecd3d5ea8c62737a487883948e85937432f3a598746d8e05e80e
+ languageName: node
+ linkType: hard
+
"which@npm:^1.3.1":
version: 1.3.1
resolution: "which@npm:1.3.1"
@@ -6705,6 +7588,18 @@ __metadata:
languageName: node
linkType: hard
+"why-is-node-running@npm:^2.3.0":
+ version: 2.3.0
+ resolution: "why-is-node-running@npm:2.3.0"
+ dependencies:
+ siginfo: "npm:^2.0.0"
+ stackback: "npm:0.0.2"
+ bin:
+ why-is-node-running: cli.js
+ checksum: 10c0/1cde0b01b827d2cf4cb11db962f3958b9175d5d9e7ac7361d1a7b0e2dc6069a263e69118bd974c4f6d0a890ef4eedfe34cf3d5167ec14203dbc9a18620537054
+ languageName: node
+ linkType: hard
+
"wildcard@npm:^2.0.1":
version: 2.0.1
resolution: "wildcard@npm:2.0.1"
@@ -6749,6 +7644,13 @@ __metadata:
languageName: node
linkType: hard
+"xml-name-validator@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "xml-name-validator@npm:5.0.0"
+ checksum: 10c0/3fcf44e7b73fb18be917fdd4ccffff3639373c7cb83f8fc35df6001fecba7942f1dbead29d91ebb8315e2f2ff786b508f0c9dc0215b6353f9983c6b7d62cb1f5
+ languageName: node
+ linkType: hard
+
"xmlbuilder2@npm:3.1.1":
version: 3.1.1
resolution: "xmlbuilder2@npm:3.1.1"
@@ -6761,6 +7663,13 @@ __metadata:
languageName: node
linkType: hard
+"xmlchars@npm:^2.2.0":
+ version: 2.2.0
+ resolution: "xmlchars@npm:2.2.0"
+ checksum: 10c0/b64b535861a6f310c5d9bfa10834cf49127c71922c297da9d4d1b45eeaae40bf9b4363275876088fbe2667e5db028d2cd4f8ee72eed9bede840a67d57dab7593
+ languageName: node
+ linkType: hard
+
"yallist@npm:^5.0.0":
version: 5.0.0
resolution: "yallist@npm:5.0.0"