diff --git a/lib/web/device_trust.go b/lib/web/device_trust.go
index e3f66eb471875..acd6fb9eac23d 100644
--- a/lib/web/device_trust.go
+++ b/lib/web/device_trust.go
@@ -100,6 +100,12 @@ func (h *Handler) deviceWebConfirm(w http.ResponseWriter, r *http.Request, _ htt
// It returns a full URL if the unsafeRedirectURI points to SAML IdP SSO endpoint.
// In any other case, as long as the redirect URL is parsable, it returns
// a path ensuring its prefixed with "/web".
+//
+// Nobody seems to know why we need to prepend the base path to the URL, so we keep doing it. It
+// might be related to the URLs we get from SSO redirects [1], but it's unclear why we'd be getting
+// a URL that's missing the base path and becomes valid only after appending the base path.
+//
+// [1]: https://github.com/gravitational/teleport/pull/47221#discussion_r1792248868
func (h *Handler) getRedirectURL(host, unsafeRedirectURI string) (string, error) {
const (
basePath = "/web"
@@ -145,7 +151,11 @@ func (h *Handler) getRedirectURL(host, unsafeRedirectURI string) (string, error)
// Prepend "/web" only if it's not already present
if !strings.HasPrefix(cleanPath, basePath) {
- return path.Join(basePath, cleanPath), nil
+ cleanPath = path.Join(basePath, cleanPath)
+ }
+
+ if parsedURL.RawQuery != "" {
+ return cleanPath + "?" + parsedURL.RawQuery, nil
}
return cleanPath, nil
}
diff --git a/lib/web/device_trust_test.go b/lib/web/device_trust_test.go
index 940fe402339c4..b3ca8eeb8a95f 100644
--- a/lib/web/device_trust_test.go
+++ b/lib/web/device_trust_test.go
@@ -22,6 +22,7 @@ import (
"io"
"net/http"
"net/url"
+ "strings"
"sync"
"testing"
@@ -51,7 +52,6 @@ func TestHandler_DeviceWebConfirm(t *testing.T) {
name string
redirectURI string
expectedRedirectTo string
- redirectsToFullURL bool
statusCode int
}{
{
@@ -89,6 +89,12 @@ func TestHandler_DeviceWebConfirm(t *testing.T) {
expectedRedirectTo: "/web",
statusCode: http.StatusSeeOther,
},
+ {
+ name: "with empty path with query params",
+ redirectURI: "https://example.com/?foo=bar",
+ expectedRedirectTo: "/web?foo=bar",
+ statusCode: http.StatusSeeOther,
+ },
{
name: "with relative path",
redirectURI: "/custom/path",
@@ -105,27 +111,53 @@ func TestHandler_DeviceWebConfirm(t *testing.T) {
name: "saml idp service provider initiated sso endpoint",
redirectURI: fmt.Sprintf("https://%s/enterprise/saml-idp/sso?SAMLRequest=example-authn-request", proxy.webURL.Host),
expectedRedirectTo: fmt.Sprintf("https://%s/enterprise/saml-idp/sso?SAMLRequest=example-authn-request", proxy.webURL.Host),
- redirectsToFullURL: true,
statusCode: http.StatusSeeOther,
},
{
name: "saml idp identity provider initiated sso endpoint",
redirectURI: fmt.Sprintf("https://%s/enterprise/saml-idp/login/example-app", proxy.webURL.Host),
expectedRedirectTo: fmt.Sprintf("https://%s/enterprise/saml-idp/login/example-app", proxy.webURL.Host),
- redirectsToFullURL: true,
statusCode: http.StatusSeeOther,
},
{
- name: "saml idp sso endpoint with redirect_uri pointing to a different host",
- redirectURI: "https://example.com/enterprise/saml-idp/sso?SAMLRequest=example-authn-request",
- redirectsToFullURL: true,
- statusCode: http.StatusBadRequest,
+ name: "saml idp sso endpoint with redirect_uri pointing to a different host",
+ redirectURI: "https://example.com/enterprise/saml-idp/sso?SAMLRequest=example-authn-request",
+ statusCode: http.StatusBadRequest,
+ },
+ {
+ name: "saml idp sso endpoint with redirect_uri pointing to a malformed URL",
+ redirectURI: "https://%s.//example.com/enterprise/saml-idp/sso?SAMLRequest=example-authn-request",
+ statusCode: http.StatusBadRequest,
+ },
+ {
+ name: "query params with base path",
+ redirectURI: "/web/foo?bar=quux",
+ expectedRedirectTo: "/web/foo?bar=quux",
+ statusCode: http.StatusSeeOther,
+ },
+ {
+ name: "query params without base path",
+ redirectURI: "/foo?bar=quux",
+ expectedRedirectTo: "/web/foo?bar=quux",
+ statusCode: http.StatusSeeOther,
+ },
+ {
+ name: "query params with base path in full URL",
+ redirectURI: "https://example.com/web/foo?bar=quux",
+ expectedRedirectTo: "/web/foo?bar=quux",
+ statusCode: http.StatusSeeOther,
},
{
- name: "saml idp sso endpoint with redirect_uri pointing to a malformed URL",
- redirectURI: "https://%s.//example.com/enterprise/saml-idp/sso?SAMLRequest=example-authn-request",
- redirectsToFullURL: true,
- statusCode: http.StatusBadRequest,
+ name: "query params without base path in full URL",
+ redirectURI: "https://example.com/foo?bar=quux",
+ expectedRedirectTo: "/web/foo?bar=quux",
+ statusCode: http.StatusSeeOther,
+ },
+ {
+ name: "query params with nested URL with query params",
+ redirectURI: "https://teleport.example.com:3030/web/launch/dumper.teleport.example.com?path=%2Fhello&query=custom_url%3Dhttps%253A%252F%252Fcluster.example.com%253A3030%252Fweb%252Fcluster%252Fenterprise-local%252Fresources%253Fsort%253Dname%25253Adesc%2526pinnedOnly%253Dfalse%2526kinds%253Dapp",
+ expectedRedirectTo: "/web/launch/dumper.teleport.example.com?path=%2Fhello&query=custom_url%3Dhttps%253A%252F%252Fcluster.example.com%253A3030%252Fweb%252Fcluster%252Fenterprise-local%252Fresources%253Fsort%253Dname%25253Adesc%2526pinnedOnly%253Dfalse%2526kinds%253Dapp",
+ statusCode: http.StatusSeeOther,
},
}
@@ -143,10 +175,12 @@ func TestHandler_DeviceWebConfirm(t *testing.T) {
httpClient := webClient.HTTPClient()
httpClient.CheckRedirect = func(req *http.Request, via []*http.Request) error {
redirected = true
- actualRedirectTo = req.URL.Path
- if test.redirectsToFullURL {
- actualRedirectTo = req.URL.String()
+ isExpectRedirectToRelative := strings.HasPrefix(test.expectedRedirectTo, "/")
+ if isExpectRedirectToRelative {
+ req.URL.Scheme = ""
+ req.URL.Host = ""
}
+ actualRedirectTo = req.URL.String()
return http.ErrUseLastResponse
}
diff --git a/package.json b/package.json
index 728e3ce686cfc..6b9e6edd9295e 100644
--- a/package.json
+++ b/package.json
@@ -32,8 +32,7 @@
"private": true,
"pnpm": {
"overrides": {
- "@bundled-es-modules/cookie>cookie": "0.7.1",
- "jsdom@^20.0.3>nwsapi@^2": "2.2.9"
+ "@bundled-es-modules/cookie>cookie": "0.7.1"
}
},
"devDependencies": {
@@ -41,11 +40,11 @@
"@ianvs/prettier-plugin-sort-imports": "^4.4.0",
"@storybook/react-vite": "^9.0.17",
"@storybook/test-runner": "^0.23.0",
- "@testing-library/jest-dom": "^6.5.0",
+ "@testing-library/jest-dom": "^6.9.1",
"@testing-library/react": "^16.0.0",
"@testing-library/user-event": "^14.5.2",
"@types/history": "^4.7.11",
- "@types/jest": "^29.5.13",
+ "@types/jest": "^30.0.0",
"@types/node": "^22.14.0",
"@types/react": "^18.3.10",
"@types/react-dom": "^18.3.0",
@@ -54,7 +53,7 @@
"@types/react-router-dom": "^5.1.1",
"@types/react-transition-group": "^4.4.11",
"@types/wicg-file-system-access": "^2023.10.5",
- "jest": "^29.7.0",
+ "jest": "^30.2.0",
"jest-canvas-mock": "^2.5.2",
"jsdom-testing-mocks": "^1.13.1",
"msw": "^2.4.9",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index bee277fbda3b4..e2b67b75f3a6d 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -6,7 +6,6 @@ settings:
overrides:
'@bundled-es-modules/cookie>cookie': 0.7.1
- jsdom@^20.0.3>nwsapi@^2: 2.2.9
pnpmfileChecksum: sha256-UhbfH9wqbTOi0Lx+Gm0eQ8EkqLSQxYCWXAFDAbl28uo=
@@ -121,8 +120,8 @@ importers:
specifier: ^0.23.0
version: 0.23.0(@types/node@22.14.1)(babel-plugin-macros@3.1.0)(storybook@9.1.17(@testing-library/dom@10.1.0)(msw@2.4.9(typescript@5.7.2))(prettier@3.7.3)(vite@5.4.8(@types/node@22.14.1)))
'@testing-library/jest-dom':
- specifier: ^6.5.0
- version: 6.5.0
+ specifier: ^6.9.1
+ version: 6.9.1
'@testing-library/react':
specifier: ^16.0.0
version: 16.0.1(@testing-library/dom@10.1.0)(@types/react-dom@18.3.0)(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -133,8 +132,8 @@ importers:
specifier: ^4.7.11
version: 4.7.11
'@types/jest':
- specifier: ^29.5.13
- version: 29.5.13
+ specifier: ^30.0.0
+ version: 30.0.0
'@types/node':
specifier: ^22.14.0
version: 22.14.1
@@ -160,8 +159,8 @@ importers:
specifier: ^2023.10.5
version: 2023.10.5
jest:
- specifier: ^29.7.0
- version: 29.7.0(@types/node@22.14.1)(babel-plugin-macros@3.1.0)
+ specifier: ^30.2.0
+ version: 30.2.0(@types/node@22.14.1)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.9))
jest-canvas-mock:
specifier: ^2.5.2
version: 2.5.2
@@ -241,19 +240,19 @@ importers:
version: 8.57.0
eslint-import-resolver-typescript:
specifier: ^3.6.3
- version: 3.6.3(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.7.2))(eslint-plugin-import@2.30.0)(eslint@8.57.0)
+ version: 3.6.3(eslint-plugin-import@2.30.0)(eslint@8.57.0)
eslint-plugin-babel:
specifier: ^5.3.1
version: 5.3.1(eslint@8.57.0)
eslint-plugin-import:
specifier: ^2.30.0
- version: 2.30.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)
+ version: 2.30.0(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)
eslint-plugin-jest:
- specifier: ^28.8.3
- version: 28.8.3(@typescript-eslint/eslint-plugin@7.14.1(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0)(jest@29.7.0(@types/node@22.14.1)(babel-plugin-macros@3.1.0))(typescript@5.7.2)
+ specifier: ^29.2.1
+ version: 29.12.1(eslint@8.57.0)(jest@30.2.0(@types/node@22.14.1)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.9)))(typescript@5.7.2)
eslint-plugin-jest-dom:
- specifier: ^5.4.0
- version: 5.4.0(@testing-library/dom@10.1.0)(eslint@8.57.0)
+ specifier: ^5.5.0
+ version: 5.5.0(@testing-library/dom@10.1.0)(eslint@8.57.0)
eslint-plugin-react:
specifier: ^7.37.0
version: 7.37.0(eslint@8.57.0)
@@ -265,10 +264,10 @@ importers:
version: 6.3.0(eslint@8.57.0)(typescript@5.7.2)
eslint-plugin-unused-imports:
specifier: ^3.2.0
- version: 3.2.0(@typescript-eslint/eslint-plugin@7.14.1(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0)
+ version: 3.2.0(eslint@8.57.0)
jest-environment-jsdom:
- specifier: ^29.7.0
- version: 29.7.0
+ specifier: ^30.2.0
+ version: 30.2.0
jest-fail-on-console:
specifier: ^3.3.0
version: 3.3.0
@@ -530,6 +529,9 @@ packages:
resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
engines: {node: '>=6.0.0'}
+ '@asamuzakjp/css-color@3.2.0':
+ resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==}
+
'@babel/code-frame@7.26.2':
resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==}
engines: {node: '>=6.9.0'}
@@ -796,6 +798,12 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-syntax-jsx@7.27.1':
+ resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-syntax-logical-assignment-operators@7.10.4':
resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
peerDependencies:
@@ -844,6 +852,12 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-syntax-typescript@7.27.1':
+ resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-syntax-unicode-sets-regex@7.18.6':
resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==}
engines: {node: '>=6.9.0'}
@@ -1279,6 +1293,34 @@ packages:
resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==}
engines: {node: '>=0.1.90'}
+ '@csstools/color-helpers@5.1.0':
+ resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==}
+ engines: {node: '>=18'}
+
+ '@csstools/css-calc@2.1.4':
+ resolution: {integrity: sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@csstools/css-parser-algorithms': ^3.0.5
+ '@csstools/css-tokenizer': ^3.0.4
+
+ '@csstools/css-color-parser@3.1.0':
+ resolution: {integrity: sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@csstools/css-parser-algorithms': ^3.0.5
+ '@csstools/css-tokenizer': ^3.0.4
+
+ '@csstools/css-parser-algorithms@3.0.5':
+ resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@csstools/css-tokenizer': ^3.0.4
+
+ '@csstools/css-tokenizer@3.0.4':
+ resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==}
+ engines: {node: '>=18'}
+
'@dabh/diagnostics@2.0.2':
resolution: {integrity: sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==}
@@ -1323,6 +1365,15 @@ packages:
resolution: {integrity: sha512-fKpv9kg4SPmt+hY7SVBnIYULE9QJl8L3sCfcBsnqbJwwBwAeTLokJ9TRt9y7bK0JAzIW2y78TVVjvnQEms/yyA==}
engines: {node: '>=16.4'}
+ '@emnapi/core@1.8.1':
+ resolution: {integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==}
+
+ '@emnapi/runtime@1.8.1':
+ resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==}
+
+ '@emnapi/wasi-threads@1.1.0':
+ resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==}
+
'@emotion/babel-plugin@11.12.0':
resolution: {integrity: sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw==}
@@ -1676,6 +1727,12 @@ packages:
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+ '@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.10.1':
resolution: {integrity: sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
@@ -1785,6 +1842,10 @@ packages:
resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@jest/console@30.2.0':
+ resolution: {integrity: sha512-+O1ifRjkvYIkBqASKWgLxrpEhQAAE7hY77ALLUufSk5717KfOShg6IbqLmdsLMPdUiFvA2kTs0R7YZy+l0IzZQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
'@jest/core@29.7.0':
resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -1794,30 +1855,81 @@ packages:
node-notifier:
optional: true
+ '@jest/core@30.2.0':
+ resolution: {integrity: sha512-03W6IhuhjqTlpzh/ojut/pDB2LPRygyWX8ExpgHtQA8H/3K7+1vKmcINx5UzeOX1se6YEsBsOHQ1CRzf3fOwTQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ peerDependencies:
+ node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
+ peerDependenciesMeta:
+ node-notifier:
+ optional: true
+
'@jest/create-cache-key-function@29.7.0':
resolution: {integrity: sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@jest/diff-sequences@30.0.1':
+ resolution: {integrity: sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/environment-jsdom-abstract@30.2.0':
+ resolution: {integrity: sha512-kazxw2L9IPuZpQ0mEt9lu9Z98SqR74xcagANmMBU16X0lS23yPc0+S6hGLUz8kVRlomZEs/5S/Zlpqwf5yu6OQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ peerDependencies:
+ canvas: ^3.0.0
+ jsdom: '*'
+ peerDependenciesMeta:
+ canvas:
+ optional: true
+
'@jest/environment@29.7.0':
resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@jest/environment@30.2.0':
+ resolution: {integrity: sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
'@jest/expect-utils@29.7.0':
resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@jest/expect-utils@30.2.0':
+ resolution: {integrity: sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
'@jest/expect@29.7.0':
resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@jest/expect@30.2.0':
+ resolution: {integrity: sha512-V9yxQK5erfzx99Sf+7LbhBwNWEZ9eZay8qQ9+JSC0TrMR1pMDHLMY+BnVPacWU6Jamrh252/IKo4F1Xn/zfiqA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
'@jest/fake-timers@29.7.0':
resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@jest/fake-timers@30.2.0':
+ resolution: {integrity: sha512-HI3tRLjRxAbBy0VO8dqqm7Hb2mIa8d5bg/NJkyQcOk7V118ObQML8RC5luTF/Zsg4474a+gDvhce7eTnP4GhYw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/get-type@30.1.0':
+ resolution: {integrity: sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
'@jest/globals@29.7.0':
resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@jest/globals@30.2.0':
+ resolution: {integrity: sha512-b63wmnKPaK+6ZZfpYhz9K61oybvbI1aMcIs80++JI1O1rR1vaxHUCNqo3ITu6NU0d4V34yZFoHMn/uoKr/Rwfw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.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}
@@ -1827,30 +1939,67 @@ packages:
node-notifier:
optional: true
+ '@jest/reporters@30.2.0':
+ resolution: {integrity: sha512-DRyW6baWPqKMa9CzeiBjHwjd8XeAyco2Vt8XbcLFjiwCOEKOvy82GJ8QQnJE9ofsxCMPjH4MfH8fCWIHHDKpAQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ peerDependencies:
+ node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
+ peerDependenciesMeta:
+ node-notifier:
+ optional: true
+
'@jest/schemas@29.6.3':
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/snapshot-utils@30.2.0':
+ resolution: {integrity: sha512-0aVxM3RH6DaiLcjj/b0KrIBZhSX1373Xci4l3cW5xiUWPctZ59zQ7jj4rqcJQ/Z8JuN/4wX3FpJSa3RssVvCug==}
+ 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}
+ '@jest/source-map@30.0.1':
+ resolution: {integrity: sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
'@jest/test-result@29.7.0':
resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@jest/test-result@30.2.0':
+ resolution: {integrity: sha512-RF+Z+0CCHkARz5HT9mcQCBulb1wgCP3FBvl9VFokMX27acKphwyQsNuWH3c+ojd1LeWBLoTYoxF0zm6S/66mjg==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
'@jest/test-sequencer@29.7.0':
resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@jest/test-sequencer@30.2.0':
+ resolution: {integrity: sha512-wXKgU/lk8fKXMu/l5Hog1R61bL4q5GCdT6OJvdAFz1P+QrpoFuLU68eoKuVc4RbrTtNnTL5FByhWdLgOPSph+Q==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
'@jest/transform@29.7.0':
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}
+
'@joshwooding/vite-plugin-react-docgen-typescript@0.6.1':
resolution: {integrity: sha512-J4BaTocTOYFkMHIra1JDWrMWpNmBl4EkplIwHEsV8aeUOtdWjwSnln9U7twjMFTAEB7mptNtSKyVi1Y2W9sDJw==}
peerDependencies:
@@ -1908,6 +2057,9 @@ packages:
resolution: {integrity: sha512-SSnyl/4ni/2ViHKkiZb8eajA/eN1DNFaHjhGiLUdZvDz6PKF4COSf/17xqSz64nOo2Ia29SA6B2KNCsyCbVmaQ==}
engines: {node: '>=18'}
+ '@napi-rs/wasm-runtime@0.2.12':
+ resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==}
+
'@nivo/annotations@0.87.0':
resolution: {integrity: sha512-4Xk/soEmi706iOKszjX1EcGLBNIvhMifCYXOuLIFlMAXqhw1x2YS7PxickVSskdSzJCwJX4NgQ/R/9u6nxc5OA==}
peerDependencies:
@@ -2098,6 +2250,10 @@ packages:
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
+ '@pkgr/core@0.2.9':
+ resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==}
+ engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
+
'@playwright/test@1.56.1':
resolution: {integrity: sha512-vSMYtL/zOcFpvJCW71Q/OEGQb7KYBPAdKh35WNSkaZA75JlAO8ED8UN6GUNTm3drWomcbcqRPFqQbLae8yBTdg==}
engines: {node: '>=18'}
@@ -2290,6 +2446,9 @@ packages:
'@sinclair/typebox@0.27.8':
resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
+ '@sinclair/typebox@0.34.46':
+ resolution: {integrity: sha512-kiW7CtS/NkdvTUjkjUJo7d5JsFfbJ14YjdhDk9KoEgK6nFjKNXZPrX0jfLA8ZlET4cFLHxOZ/0vFKOP+bOxIOQ==}
+
'@sindresorhus/is@4.6.0':
resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==}
engines: {node: '>=10'}
@@ -2297,9 +2456,15 @@ packages:
'@sinonjs/commons@3.0.0':
resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==}
+ '@sinonjs/commons@3.0.1':
+ resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==}
+
'@sinonjs/fake-timers@10.3.0':
resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==}
+ '@sinonjs/fake-timers@13.0.5':
+ resolution: {integrity: sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==}
+
'@storybook/builder-vite@9.0.17':
resolution: {integrity: sha512-lyuvgGhb0NaVk1tdB4xwzky6+YXQfxlxfNQqENYZ9uYQZdPfErMa4ZTXVQTV+CQHAa2NL+p/dG2JPAeu39e9UA==}
peerDependencies:
@@ -2492,12 +2657,8 @@ packages:
resolution: {integrity: sha512-wdsYKy5zupPyLCW2Je5DLHSxSfbIp6h80WoHOQc+RPtmPGA52O9x5MJEkv92Sjonpq+poOAtUKhh1kBGAXBrNA==}
engines: {node: '>=18'}
- '@testing-library/jest-dom@6.5.0':
- resolution: {integrity: sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==}
- engines: {node: '>=14', npm: '>=6', yarn: '>=1'}
-
- '@testing-library/jest-dom@6.6.3':
- resolution: {integrity: sha512-IteBhl4XqYNkM54f4ejhLRJiZNqcSCoXUOG2CPK7qbD322KjQozM4kHQOfkG2oln9b9HTYqs+Sae8vBATubxxA==}
+ '@testing-library/jest-dom@6.9.1':
+ resolution: {integrity: sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==}
engines: {node: '>=14', npm: '>=6', yarn: '>=1'}
'@testing-library/react@16.0.1':
@@ -2531,6 +2692,9 @@ packages:
resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==}
engines: {node: '>= 10'}
+ '@tybys/wasm-util@0.10.1':
+ resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
+
'@types/aria-query@5.0.4':
resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==}
@@ -2612,17 +2776,20 @@ packages:
'@types/istanbul-lib-coverage@2.0.3':
resolution: {integrity: sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==}
+ '@types/istanbul-lib-coverage@2.0.6':
+ resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==}
+
'@types/istanbul-lib-report@3.0.0':
resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==}
'@types/istanbul-reports@3.0.1':
resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==}
- '@types/jest@29.5.13':
- resolution: {integrity: sha512-wd+MVEZCHt23V0/L642O5APvspWply/rGY5BcW4SUETo2UzPU3Z26qr8jC2qxpimI2jjx9h7+2cj2FwIr01bXg==}
+ '@types/istanbul-reports@3.0.4':
+ resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==}
- '@types/jsdom@20.0.1':
- resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==}
+ '@types/jest@30.0.0':
+ resolution: {integrity: sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==}
'@types/jsdom@21.1.7':
resolution: {integrity: sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==}
@@ -2739,6 +2906,9 @@ packages:
'@types/yargs@17.0.29':
resolution: {integrity: sha512-nacjqA3ee9zRF/++a3FUY1suHTFKZeHba2n8WeDw9cCVdmzmHpIxyzOJBcpHvvEmS8E9KqWlSnWHUkOrkhWcvA==}
+ '@types/yargs@17.0.35':
+ resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==}
+
'@types/yauzl@2.10.0':
resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==}
@@ -2763,6 +2933,12 @@ packages:
typescript:
optional: true
+ '@typescript-eslint/project-service@8.52.0':
+ resolution: {integrity: sha512-xD0MfdSdEmeFa3OmVqonHi+Cciab96ls1UhIF/qX/O/gPu5KXD0bY9lu33jj04fjzrXHcuvjBcBC+D3SNSadaw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ typescript: '>=4.8.4 <6.0.0'
+
'@typescript-eslint/scope-manager@5.62.0':
resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -2771,6 +2947,16 @@ packages:
resolution: {integrity: sha512-gPrFSsoYcsffYXTOZ+hT7fyJr95rdVe4kGVX1ps/dJ+DfmlnjFN/GcMxXcVkeHDKqsq6uAcVaQaIi3cFffmAbA==}
engines: {node: ^18.18.0 || >=20.0.0}
+ '@typescript-eslint/scope-manager@8.52.0':
+ resolution: {integrity: sha512-ixxqmmCcc1Nf8S0mS0TkJ/3LKcC8mruYJPOU6Ia2F/zUUR4pApW7LzrpU3JmtePbRUTes9bEqRc1Gg4iyRnDzA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@typescript-eslint/tsconfig-utils@8.52.0':
+ resolution: {integrity: sha512-jl+8fzr/SdzdxWJznq5nvoI7qn2tNYV/ZBAEcaFMVXf+K6jmXvAFrgo/+5rxgnL152f//pDEAYAhhBAZGrVfwg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ typescript: '>=4.8.4 <6.0.0'
+
'@typescript-eslint/type-utils@7.14.1':
resolution: {integrity: sha512-/MzmgNd3nnbDbOi3LfasXWWe292+iuo+umJ0bCCMCPc1jLO/z2BQmWUUUXvXLbrQey/JgzdF/OV+I5bzEGwJkQ==}
engines: {node: ^18.18.0 || >=20.0.0}
@@ -2789,6 +2975,10 @@ packages:
resolution: {integrity: sha512-mL7zNEOQybo5R3AavY+Am7KLv8BorIv7HCYS5rKoNZKQD9tsfGUpO4KdAn3sSUvTiS4PQkr2+K0KJbxj8H9NDg==}
engines: {node: ^18.18.0 || >=20.0.0}
+ '@typescript-eslint/types@8.52.0':
+ resolution: {integrity: sha512-LWQV1V4q9V4cT4H5JCIx3481iIFxH1UkVk+ZkGGAV1ZGcjGI9IoFOfg3O6ywz8QqCDEp7Inlg6kovMofsNRaGg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
'@typescript-eslint/typescript-estree@5.62.0':
resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -2807,6 +2997,12 @@ packages:
typescript:
optional: true
+ '@typescript-eslint/typescript-estree@8.52.0':
+ resolution: {integrity: sha512-XP3LClsCc0FsTK5/frGjolyADTh3QmsLp6nKd476xNI9CsSsLnmn4f0jrzNoAulmxlmNIpeXuHYeEQv61Q6qeQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ typescript: '>=4.8.4 <6.0.0'
+
'@typescript-eslint/utils@5.62.0':
resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -2819,6 +3015,13 @@ packages:
peerDependencies:
eslint: ^8.56.0
+ '@typescript-eslint/utils@8.52.0':
+ resolution: {integrity: sha512-wYndVMWkweqHpEpwPhwqE2lnD2DxC6WVLupU/DOt/0/v+/+iQbbzO3jOHjmBMnhu0DgLULvOaU4h4pwHYi2oRQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <6.0.0'
+
'@typescript-eslint/visitor-keys@5.62.0':
resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -2827,6 +3030,10 @@ packages:
resolution: {integrity: sha512-Crb+F75U1JAEtBeQGxSKwI60hZmmzaqA3z9sYsVm8X7W5cwLEm5bRe0/uXS6+MR/y8CVpKSR/ontIAIEPFcEkA==}
engines: {node: ^18.18.0 || >=20.0.0}
+ '@typescript-eslint/visitor-keys@8.52.0':
+ resolution: {integrity: sha512-ink3/Zofus34nmBsPjow63FP5M7IGff0RKAgqR6+CFpdk22M7aLwC9gOcLGYqr7MczLPzZVERW9hRog3O4n1sQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
'@uiw/codemirror-extensions-basic-setup@4.23.3':
resolution: {integrity: sha512-nEMjgbCyeLx+UQgOGAAoUWYFE34z5TlyaKNszuig/BddYFDb0WKcgmC37bDFxR2dZssf3K/lwGWLpXnGKXePbA==}
peerDependencies:
@@ -2848,6 +3055,112 @@ packages:
'@ungap/structured-clone@1.2.0':
resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
+ '@ungap/structured-clone@1.3.0':
+ resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
+
+ '@unrs/resolver-binding-android-arm-eabi@1.11.1':
+ resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==}
+ cpu: [arm]
+ os: [android]
+
+ '@unrs/resolver-binding-android-arm64@1.11.1':
+ resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==}
+ cpu: [arm64]
+ os: [android]
+
+ '@unrs/resolver-binding-darwin-arm64@1.11.1':
+ resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@unrs/resolver-binding-darwin-x64@1.11.1':
+ resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@unrs/resolver-binding-freebsd-x64@1.11.1':
+ resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1':
+ resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==}
+ cpu: [arm]
+ os: [linux]
+
+ '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1':
+ resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==}
+ cpu: [arm]
+ os: [linux]
+
+ '@unrs/resolver-binding-linux-arm64-gnu@1.11.1':
+ resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@unrs/resolver-binding-linux-arm64-musl@1.11.1':
+ resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1':
+ resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1':
+ resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
+
+ '@unrs/resolver-binding-linux-riscv64-musl@1.11.1':
+ resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [musl]
+
+ '@unrs/resolver-binding-linux-s390x-gnu@1.11.1':
+ resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@unrs/resolver-binding-linux-x64-gnu@1.11.1':
+ resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@unrs/resolver-binding-linux-x64-musl@1.11.1':
+ resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@unrs/resolver-binding-wasm32-wasi@1.11.1':
+ resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+
+ '@unrs/resolver-binding-win32-arm64-msvc@1.11.1':
+ resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@unrs/resolver-binding-win32-ia32-msvc@1.11.1':
+ resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==}
+ cpu: [ia32]
+ os: [win32]
+
+ '@unrs/resolver-binding-win32-x64-msvc@1.11.1':
+ resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==}
+ cpu: [x64]
+ os: [win32]
+
'@vitejs/plugin-react-swc@3.7.1':
resolution: {integrity: sha512-vgWOY0i1EROUK0Ctg1hwhtC3SdcDjZcdit4Ups4aPkDcB1jYhmo+RMYWY87cmXMhvtD5uf8lV89j2w16vkdSVg==}
peerDependencies:
@@ -2913,19 +3226,12 @@ packages:
'@xterm/xterm@5.5.0':
resolution: {integrity: sha512-hqJHYaQb5OptNunnyAnkHyM8aCjZ1MEIDTQu1iIbbTD/xops91NB5yq1ZK/dC2JDbVWtF23zUtl9JE2NqwT87A==}
- abab@2.0.6:
- resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==}
- deprecated: Use your platform's native atob() and btoa() methods instead
-
abbrev@1.1.1:
resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==}
ace-builds@1.36.2:
resolution: {integrity: sha512-eqqfbGwx/GKjM/EnFu4QtQ+d2NNBu84MGgxoG8R5iyFpcVeQ4p9YlTL+ZzdEJqhdkASqoqOxCSNNGyB6lvMm+A==}
- acorn-globals@7.0.1:
- resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==}
-
acorn-import-attributes@1.9.5:
resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==}
peerDependencies:
@@ -2936,10 +3242,6 @@ packages:
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
- acorn-walk@8.3.4:
- resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==}
- engines: {node: '>=0.4.0'}
-
acorn@8.12.1:
resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==}
engines: {node: '>=0.4.0'}
@@ -3113,14 +3415,28 @@ packages:
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-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-plugin-macros@3.1.0:
resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==}
engines: {node: '>=10', npm: '>=6'}
@@ -3158,12 +3474,23 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0
+ babel-preset-current-node-syntax@1.2.0:
+ resolution: {integrity: sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==}
+ peerDependencies:
+ '@babel/core': ^7.0.0 || ^8.0.0-0
+
babel-preset-jest@29.6.3:
resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
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==}
@@ -3305,6 +3632,10 @@ packages:
resolution: {integrity: sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==}
engines: {node: '>=10'}
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
camelize@1.0.1:
resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==}
@@ -3319,10 +3650,6 @@ packages:
resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
engines: {node: '>=4'}
- chalk@3.0.0:
- resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==}
- engines: {node: '>=8'}
-
chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines: {node: '>=10'}
@@ -3353,9 +3680,16 @@ packages:
ci-info@3.3.0:
resolution: {integrity: sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==}
+ ci-info@4.3.1:
+ resolution: {integrity: sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==}
+ engines: {node: '>=8'}
+
cjs-module-lexer@1.3.1:
resolution: {integrity: sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==}
+ cjs-module-lexer@2.2.0:
+ resolution: {integrity: sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==}
+
clean-stack@2.2.0:
resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==}
engines: {node: '>=6'}
@@ -3400,6 +3734,9 @@ packages:
collect-v8-coverage@1.0.1:
resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==}
+ collect-v8-coverage@1.0.3:
+ resolution: {integrity: sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==}
+
color-convert@1.9.3:
resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
@@ -3523,20 +3860,14 @@ packages:
resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==}
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
- cssom@0.3.8:
- resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==}
-
- cssom@0.5.0:
- resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==}
-
- cssstyle@2.3.0:
- resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==}
- engines: {node: '>=8'}
-
cssstyle@4.1.0:
resolution: {integrity: sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==}
engines: {node: '>=18'}
+ cssstyle@4.6.0:
+ resolution: {integrity: sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==}
+ engines: {node: '>=18'}
+
csstype@3.1.3:
resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
@@ -3599,10 +3930,6 @@ packages:
resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==}
engines: {node: '>=12'}
- data-urls@3.0.2:
- resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==}
- engines: {node: '>=12'}
-
data-urls@5.0.0:
resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==}
engines: {node: '>=18'}
@@ -3640,6 +3967,15 @@ packages:
supports-color:
optional: true
+ debug@4.4.3:
+ resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
decamelize@1.2.0:
resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
engines: {node: '>=0.10.0'}
@@ -3647,6 +3983,9 @@ packages:
decimal.js@10.4.3:
resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==}
+ decimal.js@10.6.0:
+ resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==}
+
decompress-response@6.0.0:
resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
engines: {node: '>=10'}
@@ -3659,6 +3998,14 @@ packages:
babel-plugin-macros:
optional: true
+ dedent@1.7.1:
+ resolution: {integrity: sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg==}
+ peerDependencies:
+ babel-plugin-macros: ^3.1.0
+ peerDependenciesMeta:
+ babel-plugin-macros:
+ optional: true
+
deep-eql@5.0.2:
resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
engines: {node: '>=6'}
@@ -3670,6 +4017,10 @@ packages:
resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==}
engines: {node: '>=0.10.0'}
+ deepmerge@4.3.1:
+ resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
+ engines: {node: '>=0.10.0'}
+
default-require-extensions@3.0.1:
resolution: {integrity: sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==}
engines: {node: '>=8'}
@@ -3767,11 +4118,6 @@ packages:
domelementtype@2.3.0:
resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
- domexception@4.0.0:
- resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==}
- engines: {node: '>=12'}
- deprecated: Use your platform's native DOMException instead
-
domhandler@2.4.2:
resolution: {integrity: sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==}
@@ -3868,6 +4214,10 @@ packages:
resolution: {integrity: sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==}
engines: {node: '>=0.12'}
+ entities@6.0.1:
+ resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
+ engines: {node: '>=0.12'}
+
env-paths@2.2.1:
resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
engines: {node: '>=6'}
@@ -3944,11 +4294,6 @@ packages:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
- escodegen@2.1.0:
- resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==}
- engines: {node: '>=6.0'}
- hasBin: true
-
eslint-import-resolver-node@0.3.9:
resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
@@ -4002,8 +4347,8 @@ packages:
'@typescript-eslint/parser':
optional: true
- eslint-plugin-jest-dom@5.4.0:
- resolution: {integrity: sha512-yBqvFsnpS5Sybjoq61cJiUsenRkC9K32hYQBFS9doBR7nbQZZ5FyO+X7MlmfM1C48Ejx/qTuOCgukDUNyzKZ7A==}
+ eslint-plugin-jest-dom@5.5.0:
+ resolution: {integrity: sha512-CRlXfchTr7EgC3tDI7MGHY6QjdJU5Vv2RPaeeGtkXUHnKZf04kgzMPIJUXt4qKCvYWVVIEo9ut9Oq1vgXAykEA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6', yarn: '>=1'}
peerDependencies:
'@testing-library/dom': ^8.0.0 || ^9.0.0 || ^10.0.0
@@ -4012,12 +4357,12 @@ packages:
'@testing-library/dom':
optional: true
- eslint-plugin-jest@28.8.3:
- resolution: {integrity: sha512-HIQ3t9hASLKm2IhIOqnu+ifw7uLZkIlR7RYNv7fMcEi/p0CIiJmfriStQS2LDkgtY4nyLbIZAD+JL347Yc2ETQ==}
- engines: {node: ^16.10.0 || ^18.12.0 || >=20.0.0}
+ eslint-plugin-jest@29.12.1:
+ resolution: {integrity: sha512-Rxo7r4jSANMBkXLICJKS0gjacgyopfNAsoS0e3R9AHnjoKuQOaaPfmsDJPi8UWwygI099OV/K/JhpYRVkxD4AA==}
+ engines: {node: ^20.12.0 || ^22.0.0 || >=24.0.0}
peerDependencies:
- '@typescript-eslint/eslint-plugin': ^6.0.0 || ^7.0.0 || ^8.0.0
- eslint: ^7.0.0 || ^8.0.0 || ^9.0.0
+ '@typescript-eslint/eslint-plugin': ^8.0.0
+ eslint: ^8.57.0 || ^9.0.0
jest: '*'
peerDependenciesMeta:
'@typescript-eslint/eslint-plugin':
@@ -4069,6 +4414,10 @@ packages:
resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ eslint-visitor-keys@4.2.1:
+ resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
eslint@8.57.0:
resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -4121,6 +4470,10 @@ packages:
resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
engines: {node: '>=10'}
+ exit-x@0.2.2:
+ resolution: {integrity: sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==}
+ engines: {node: '>= 0.8.0'}
+
exit@0.1.2:
resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==}
engines: {node: '>= 0.8.0'}
@@ -4136,6 +4489,10 @@ packages:
resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ expect@30.2.0:
+ resolution: {integrity: sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
exponential-backoff@3.1.1:
resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==}
@@ -4170,9 +4527,21 @@ packages:
fb-watchman@2.0.1:
resolution: {integrity: sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==}
+ fb-watchman@2.0.2:
+ resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==}
+
fd-slicer@1.1.0:
resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==}
+ fdir@6.5.0:
+ resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ picomatch: ^3 || ^4
+ peerDependenciesMeta:
+ picomatch:
+ optional: true
+
fecha@4.2.1:
resolution: {integrity: sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==}
@@ -4466,10 +4835,6 @@ packages:
resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==}
engines: {node: '>=10'}
- html-encoding-sniffer@3.0.0:
- resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==}
- engines: {node: '>=12'}
-
html-encoding-sniffer@4.0.0:
resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==}
engines: {node: '>=18'}
@@ -4503,6 +4868,10 @@ packages:
resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==}
engines: {node: '>= 14'}
+ https-proxy-agent@7.0.6:
+ resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==}
+ engines: {node: '>= 14'}
+
human-signals@2.1.0:
resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
engines: {node: '>=10.17.0'}
@@ -4541,6 +4910,11 @@ packages:
engines: {node: '>=8'}
hasBin: true
+ import-local@3.2.0:
+ resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==}
+ engines: {node: '>=8'}
+ hasBin: true
+
imurmurhash@0.1.4:
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
engines: {node: '>=0.8.19'}
@@ -4780,6 +5154,10 @@ packages:
resolution: {integrity: sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==}
engines: {node: '>=10'}
+ istanbul-lib-instrument@6.0.3:
+ resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==}
+ engines: {node: '>=10'}
+
istanbul-lib-processinfo@2.0.3:
resolution: {integrity: sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==}
engines: {node: '>=8'}
@@ -4792,6 +5170,10 @@ packages:
resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==}
engines: {node: '>=10'}
+ istanbul-lib-source-maps@5.0.6:
+ resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==}
+ engines: {node: '>=10'}
+
istanbul-reports@3.1.5:
resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==}
engines: {node: '>=8'}
@@ -4815,10 +5197,18 @@ packages:
resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-changed-files@30.2.0:
+ resolution: {integrity: sha512-L8lR1ChrRnSdfeOvTrwZMlnWV8G/LLjQ0nG9MBclwWZidA2N5FviRki0Bvh20WRMOX31/JYvzdqTJrk5oBdydQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
jest-circus@29.7.0:
resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-circus@30.2.0:
+ resolution: {integrity: sha512-Fh0096NC3ZkFx05EP2OXCxJAREVxj1BcW/i6EWqqymcgYKWjyyDpral3fMxVcHXg6oZM7iULer9wGRFvfpl+Tg==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
jest-cli@29.7.0:
resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -4829,6 +5219,16 @@ packages:
node-notifier:
optional: true
+ jest-cli@30.2.0:
+ resolution: {integrity: sha512-Os9ukIvADX/A9sLt6Zse3+nmHtHaE6hqOsjQtNiugFTbKRHYIYtZXNGNK9NChseXy7djFPjndX1tL0sCTlfpAA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ hasBin: true
+ peerDependencies:
+ node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
+ peerDependenciesMeta:
+ node-notifier:
+ optional: true
+
jest-config@29.7.0:
resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -4841,23 +5241,50 @@ packages:
ts-node:
optional: true
+ jest-config@30.2.0:
+ resolution: {integrity: sha512-g4WkyzFQVWHtu6uqGmQR4CQxz/CH3yDSlhzXMWzNjDx843gYjReZnMRanjRCq5XZFuQrGDxgUaiYWE8BRfVckA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ peerDependencies:
+ '@types/node': '*'
+ esbuild-register: '>=3.4.0'
+ ts-node: '>=9.0.0'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ esbuild-register:
+ optional: true
+ ts-node:
+ optional: true
+
jest-diff@29.7.0:
resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-diff@30.2.0:
+ resolution: {integrity: sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
jest-docblock@29.7.0:
resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-docblock@30.2.0:
+ resolution: {integrity: sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
jest-each@29.7.0:
resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- jest-environment-jsdom@29.7.0:
- resolution: {integrity: sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-each@30.2.0:
+ resolution: {integrity: sha512-lpWlJlM7bCUf1mfmuqTA8+j2lNURW9eNafOy99knBM01i5CQeY5UH1vZjgT9071nDJac1M4XsbyI44oNOdhlDQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-environment-jsdom@30.2.0:
+ resolution: {integrity: sha512-zbBTiqr2Vl78pKp/laGBREYzbZx9ZtqPjOK4++lL4BNDhxRnahg51HtoDrk9/VjIy9IthNEWdKVd7H5bqBhiWQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
peerDependencies:
- canvas: ^2.5.0
+ canvas: ^3.0.0
peerDependenciesMeta:
canvas:
optional: true
@@ -4866,6 +5293,10 @@ packages:
resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-environment-node@30.2.0:
+ resolution: {integrity: sha512-ElU8v92QJ9UrYsKrxDIKCxu6PfNj4Hdcktcn0JX12zqNdqWHB0N+hwOnnBBXvjLd2vApZtuLUGs1QSY+MsXoNA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
jest-fail-on-console@3.3.0:
resolution: {integrity: sha512-J9rnFQvQwkcGJw01zCEKe2Uag+E926lFgIyaQGep2LqhQH7OCRHyD+tm/jnNoKlSRnOBO60DmzMjeQAVI3f5cw==}
@@ -4877,6 +5308,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-junit@16.0.0:
resolution: {integrity: sha512-A94mmw6NfJab4Fg/BlvVOUXzXgF0XIH6EmTgJ5NDPp4xoKq0Kr7sErb+4Xs9nZvu58pJojz5RFGpqnZYJTrRfQ==}
engines: {node: '>=10.12.0'}
@@ -4885,18 +5320,34 @@ packages:
resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-leak-detector@30.2.0:
+ resolution: {integrity: sha512-M6jKAjyzjHG0SrQgwhgZGy9hFazcudwCNovY/9HPIicmNSBuockPSedAP9vlPK6ONFJ1zfyH/M2/YYJxOz5cdQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
jest-matcher-utils@29.7.0:
resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-matcher-utils@30.2.0:
+ resolution: {integrity: sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
jest-message-util@29.7.0:
resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-message-util@30.2.0:
+ resolution: {integrity: sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
jest-mock@29.7.0:
resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-mock@30.2.0:
+ resolution: {integrity: sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
jest-playwright-preset@4.0.0:
resolution: {integrity: sha512-+dGZ1X2KqtwXaabVjTGxy0a3VzYfvYsWaRcuO8vMhyclHSOpGSI1+5cmlqzzCwQ3+fv0EjkTc7I5aV9lo08dYw==}
peerDependencies:
@@ -4914,29 +5365,58 @@ packages:
jest-resolve:
optional: true
- jest-process-manager@0.4.0:
- resolution: {integrity: sha512-80Y6snDyb0p8GG83pDxGI/kQzwVTkCxc7ep5FPe/F6JYdvRDhwr6RzRmPSP7SEwuLhxo80lBS/NqOdUIbHIfhw==}
-
- jest-regex-util@29.6.3:
- resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==}
+ jest-pnp-resolver@1.2.3:
+ resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==}
+ engines: {node: '>=6'}
+ peerDependencies:
+ jest-resolve: '*'
+ peerDependenciesMeta:
+ jest-resolve:
+ optional: true
+
+ jest-process-manager@0.4.0:
+ resolution: {integrity: sha512-80Y6snDyb0p8GG83pDxGI/kQzwVTkCxc7ep5FPe/F6JYdvRDhwr6RzRmPSP7SEwuLhxo80lBS/NqOdUIbHIfhw==}
+
+ jest-regex-util@29.6.3:
+ 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}
+ jest-resolve-dependencies@30.2.0:
+ resolution: {integrity: sha512-xTOIGug/0RmIe3mmCqCT95yO0vj6JURrn1TKWlNbhiAefJRWINNPgwVkrVgt/YaerPzY3iItufd80v3lOrFJ2w==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
jest-resolve@29.7.0:
resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-resolve@30.2.0:
+ resolution: {integrity: sha512-TCrHSxPlx3tBY3hWNtRQKbtgLhsXa1WmbJEqBlTBrGafd5fiQFByy2GNCEoGR+Tns8d15GaL9cxEzKOO3GEb2A==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
jest-runner@29.7.0:
resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-runner@30.2.0:
+ resolution: {integrity: sha512-PqvZ2B2XEyPEbclp+gV6KO/F1FIFSbIwewRgmROCMBo/aZ6J1w8Qypoj2pEOcg3G2HzLlaP6VUtvwCI8dM3oqQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
jest-runtime@29.7.0:
resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-runtime@30.2.0:
+ resolution: {integrity: sha512-p1+GVX/PJqTucvsmERPMgCPvQJpFt4hFbM+VN3n8TMo47decMUcJbt+rgzwrEme0MQUA/R+1de2axftTHkKckg==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
jest-serializer-html@7.1.0:
resolution: {integrity: sha512-xYL2qC7kmoYHJo8MYqJkzrl/Fdlx+fat4U1AqYg+kafqwcKPiMkOcjWHPKhueuNEgr+uemhGc+jqXYiwCyRyLA==}
@@ -4944,6 +5424,10 @@ packages:
resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-snapshot@30.2.0:
+ resolution: {integrity: sha512-5WEtTy2jXPFypadKNpbNkZ72puZCa6UjSr/7djeecHWOu7iYhSXSnHScT8wBz3Rn8Ena5d5RYRcsyKIeqG1IyA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
jest-styled-components@7.2.0:
resolution: {integrity: sha512-gwyyveNjvuRA0pyhbQoydXZllLZESs2VuL5fXCabzh0buHPAOUfANtW7n5YMPmdC0sH3VB7h2eUGZ23+tjvaBA==}
engines: {node: '>= 12'}
@@ -4954,10 +5438,18 @@ 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}
+ jest-validate@30.2.0:
+ resolution: {integrity: sha512-FBGWi7dP2hpdi8nBoWxSsLvBFewKAg0+uSQwBaof4Y4DPgBabXgpSYC5/lR7VmnIlSpASmCi/ntRWPbv7089Pw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
jest-watch-typeahead@2.2.2:
resolution: {integrity: sha512-+QgOFW4o5Xlgd6jGS5X37i08tuuXNW8X0CV9WNFi+3n8ExCIP+E1melYhvYLjv5fE6D0yyzk74vsSO8I6GqtvQ==}
engines: {node: ^14.17.0 || ^16.10.0 || >=18.0.0}
@@ -4968,6 +5460,10 @@ packages:
resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ jest-watcher@30.2.0:
+ resolution: {integrity: sha512-PYxa28dxJ9g777pGm/7PrbnMeA0Jr7osHP9bS7eJy9DuAjMgdGtxgf0uKMyoIsTWAkIbUW5hSDdJ3urmgXBqxg==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
jest-websocket-mock@2.5.0:
resolution: {integrity: sha512-a+UJGfowNIWvtIKIQBHoEWIUqRxxQHFx4CXT+R5KxxKBtEQ5rS3pPOV/5299sHzqbmeCzxxY5qE4+yfXePePig==}
@@ -4975,6 +5471,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}
@@ -4985,6 +5485,16 @@ packages:
node-notifier:
optional: true
+ jest@30.2.0:
+ resolution: {integrity: sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ hasBin: true
+ peerDependencies:
+ node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
+ peerDependenciesMeta:
+ node-notifier:
+ optional: true
+
joi@17.13.3:
resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==}
@@ -5006,20 +5516,20 @@ packages:
resolution: {integrity: sha512-8BAsnuoO4DLGTf7LDbSm8fcx5CUHSv4h+bdUbwyt6rMYAXWjeHLRx9f8sYiSxoOTXy3S1e06pe87KER39o1ckA==}
engines: {node: '>=14'}
- jsdom@20.0.3:
- resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==}
- engines: {node: '>=14'}
+ jsdom@25.0.1:
+ resolution: {integrity: sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==}
+ engines: {node: '>=18'}
peerDependencies:
- canvas: ^2.5.0
+ canvas: ^2.11.2
peerDependenciesMeta:
canvas:
optional: true
- jsdom@25.0.1:
- resolution: {integrity: sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==}
+ jsdom@26.1.0:
+ resolution: {integrity: sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==}
engines: {node: '>=18'}
peerDependencies:
- canvas: ^2.11.2
+ canvas: ^3.0.0
peerDependenciesMeta:
canvas:
optional: true
@@ -5335,6 +5845,11 @@ packages:
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
+ napi-postinstall@0.3.4:
+ resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==}
+ engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
+ hasBin: true
+
natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
@@ -5396,8 +5911,8 @@ packages:
nwsapi@2.2.13:
resolution: {integrity: sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==}
- nwsapi@2.2.9:
- resolution: {integrity: sha512-2f3F0SEEer8bBu0dsNCFF50N0cTThV1nWFYcEYFZttdW0lDAoybv9cQoK7X7/68Z89S7FoRrVjP1LPX4XRf9vg==}
+ nwsapi@2.2.23:
+ resolution: {integrity: sha512-7wfH4sLbt4M0gCDzGE6vzQBo0bfTKjU7Sfpqy/7gs1qBfYz2vEJH6vXcBKpO3+6Yu1telwd0t9HpyOoLEQQbIQ==}
nyc@15.1.0:
resolution: {integrity: sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==}
@@ -5531,6 +6046,9 @@ packages:
parse5@7.1.2:
resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==}
+ parse5@7.3.0:
+ resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
+
path-exists@4.0.0:
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
engines: {node: '>=8'}
@@ -5582,10 +6100,18 @@ 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.6:
resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
engines: {node: '>= 6'}
+ pirates@4.0.7:
+ resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==}
+ engines: {node: '>= 6'}
+
pkg-dir@4.2.0:
resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
engines: {node: '>=8'}
@@ -5641,6 +6167,10 @@ packages:
resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ pretty-format@30.2.0:
+ resolution: {integrity: sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
proc-log@2.0.1:
resolution: {integrity: sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==}
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
@@ -5692,6 +6222,9 @@ packages:
pure-rand@6.0.4:
resolution: {integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==}
+ pure-rand@7.0.1:
+ resolution: {integrity: sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==}
+
querystringify@2.2.0:
resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==}
@@ -5937,6 +6470,9 @@ packages:
rrweb-cssom@0.7.1:
resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==}
+ rrweb-cssom@0.8.0:
+ resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==}
+
run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
@@ -5997,6 +6533,11 @@ packages:
engines: {node: '>=10'}
hasBin: true
+ semver@7.7.3:
+ resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==}
+ engines: {node: '>=10'}
+ hasBin: true
+
serialize-error@7.0.1:
resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==}
engines: {node: '>=10'}
@@ -6280,6 +6821,10 @@ packages:
symbol-tree@3.2.4:
resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
+ synckit@0.11.11:
+ resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+
tabbable@6.2.0:
resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==}
@@ -6325,6 +6870,10 @@ packages:
tiny-warning@1.0.3:
resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==}
+ tinyglobby@0.2.15:
+ resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
+ engines: {node: '>=12.0.0'}
+
tinyrainbow@2.0.0:
resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==}
engines: {node: '>=14.0.0'}
@@ -6362,14 +6911,18 @@ packages:
resolution: {integrity: sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==}
engines: {node: '>=16'}
- tr46@3.0.0:
- resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==}
- engines: {node: '>=12'}
+ tough-cookie@5.1.2:
+ resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==}
+ engines: {node: '>=16'}
tr46@5.0.0:
resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==}
engines: {node: '>=18'}
+ tr46@5.1.1:
+ resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==}
+ engines: {node: '>=18'}
+
tree-kill@1.2.2:
resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
hasBin: true
@@ -6386,6 +6939,12 @@ packages:
peerDependencies:
typescript: '>=4.2.0'
+ ts-api-utils@2.4.0:
+ resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==}
+ engines: {node: '>=18.12'}
+ peerDependencies:
+ typescript: '>=4.8.4'
+
ts-dedent@2.2.0:
resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==}
engines: {node: '>=6.10'}
@@ -6540,6 +7099,9 @@ packages:
webpack-sources:
optional: true
+ unrs-resolver@1.11.1:
+ resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==}
+
update-browserslist-db@1.1.3:
resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
hasBin: true
@@ -6635,10 +7197,6 @@ packages:
w3c-keyname@2.2.8:
resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==}
- w3c-xmlserializer@4.0.0:
- resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==}
- engines: {node: '>=14'}
-
w3c-xmlserializer@5.0.0:
resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==}
engines: {node: '>=18'}
@@ -6666,33 +7224,26 @@ packages:
webpack-virtual-modules@0.6.2:
resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
- whatwg-encoding@2.0.0:
- resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==}
- engines: {node: '>=12'}
-
whatwg-encoding@3.1.1:
resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==}
engines: {node: '>=18'}
+ deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation
whatwg-fetch@3.6.20:
resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==}
- whatwg-mimetype@3.0.0:
- resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==}
- engines: {node: '>=12'}
-
whatwg-mimetype@4.0.0:
resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==}
engines: {node: '>=18'}
- whatwg-url@11.0.0:
- resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==}
- engines: {node: '>=12'}
-
whatwg-url@14.0.0:
resolution: {integrity: sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==}
engines: {node: '>=18'}
+ whatwg-url@14.2.0:
+ resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==}
+ engines: {node: '>=18'}
+
which-boxed-primitive@1.1.1:
resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==}
engines: {node: '>= 0.4'}
@@ -6756,6 +7307,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}
+
ws@8.18.0:
resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==}
engines: {node: '>=10.0.0'}
@@ -6768,10 +7323,6 @@ packages:
utf-8-validate:
optional: true
- xml-name-validator@4.0.0:
- resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
- engines: {node: '>=12'}
-
xml-name-validator@5.0.0:
resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==}
engines: {node: '>=18'}
@@ -6853,6 +7404,14 @@ snapshots:
'@jridgewell/gen-mapping': 0.3.5
'@jridgewell/trace-mapping': 0.3.25
+ '@asamuzakjp/css-color@3.2.0':
+ dependencies:
+ '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-tokenizer': 3.0.4
+ lru-cache: 10.4.3
+
'@babel/code-frame@7.26.2':
dependencies:
'@babel/helper-validator-identifier': 7.25.9
@@ -7146,21 +7705,41 @@ snapshots:
'@babel/core': 7.26.10
'@babel/helper-plugin-utils': 7.26.5
+ '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.28.3)':
+ dependencies:
+ '@babel/core': 7.28.3
+ '@babel/helper-plugin-utils': 7.26.5
+
'@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.10)':
dependencies:
'@babel/core': 7.26.10
'@babel/helper-plugin-utils': 7.26.5
+ '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.28.3)':
+ dependencies:
+ '@babel/core': 7.28.3
+ '@babel/helper-plugin-utils': 7.26.5
+
'@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.10)':
dependencies:
'@babel/core': 7.26.10
'@babel/helper-plugin-utils': 7.26.5
+ '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.3)':
+ dependencies:
+ '@babel/core': 7.28.3
+ '@babel/helper-plugin-utils': 7.26.5
+
'@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.10)':
dependencies:
'@babel/core': 7.26.10
'@babel/helper-plugin-utils': 7.26.5
+ '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.28.3)':
+ dependencies:
+ '@babel/core': 7.28.3
+ '@babel/helper-plugin-utils': 7.26.5
+
'@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.26.10)':
dependencies:
'@babel/core': 7.26.10
@@ -7181,66 +7760,131 @@ snapshots:
'@babel/core': 7.26.10
'@babel/helper-plugin-utils': 7.26.5
+ '@babel/plugin-syntax-import-attributes@7.24.7(@babel/core@7.28.3)':
+ dependencies:
+ '@babel/core': 7.28.3
+ '@babel/helper-plugin-utils': 7.26.5
+
'@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.10)':
dependencies:
'@babel/core': 7.26.10
'@babel/helper-plugin-utils': 7.26.5
+ '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.3)':
+ dependencies:
+ '@babel/core': 7.28.3
+ '@babel/helper-plugin-utils': 7.26.5
+
'@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.10)':
dependencies:
'@babel/core': 7.26.10
'@babel/helper-plugin-utils': 7.26.5
+ '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.28.3)':
+ dependencies:
+ '@babel/core': 7.28.3
+ '@babel/helper-plugin-utils': 7.26.5
+
'@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.26.10)':
dependencies:
'@babel/core': 7.26.10
'@babel/helper-plugin-utils': 7.26.5
+ '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.3)':
+ dependencies:
+ '@babel/core': 7.28.3
+ '@babel/helper-plugin-utils': 7.27.1
+
'@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.10)':
dependencies:
'@babel/core': 7.26.10
'@babel/helper-plugin-utils': 7.26.5
+ '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.28.3)':
+ dependencies:
+ '@babel/core': 7.28.3
+ '@babel/helper-plugin-utils': 7.26.5
+
'@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.10)':
dependencies:
'@babel/core': 7.26.10
'@babel/helper-plugin-utils': 7.26.5
+ '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.28.3)':
+ dependencies:
+ '@babel/core': 7.28.3
+ '@babel/helper-plugin-utils': 7.26.5
+
'@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.10)':
dependencies:
'@babel/core': 7.26.10
'@babel/helper-plugin-utils': 7.26.5
+ '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.28.3)':
+ dependencies:
+ '@babel/core': 7.28.3
+ '@babel/helper-plugin-utils': 7.26.5
+
'@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.10)':
dependencies:
'@babel/core': 7.26.10
'@babel/helper-plugin-utils': 7.26.5
+ '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.28.3)':
+ dependencies:
+ '@babel/core': 7.28.3
+ '@babel/helper-plugin-utils': 7.26.5
+
'@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.10)':
dependencies:
'@babel/core': 7.26.10
'@babel/helper-plugin-utils': 7.26.5
+ '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.28.3)':
+ dependencies:
+ '@babel/core': 7.28.3
+ '@babel/helper-plugin-utils': 7.26.5
+
'@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.10)':
dependencies:
'@babel/core': 7.26.10
'@babel/helper-plugin-utils': 7.26.5
+ '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.28.3)':
+ dependencies:
+ '@babel/core': 7.28.3
+ '@babel/helper-plugin-utils': 7.26.5
+
'@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.10)':
dependencies:
'@babel/core': 7.26.10
'@babel/helper-plugin-utils': 7.26.5
+ '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.3)':
+ dependencies:
+ '@babel/core': 7.28.3
+ '@babel/helper-plugin-utils': 7.26.5
+
'@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.10)':
dependencies:
'@babel/core': 7.26.10
'@babel/helper-plugin-utils': 7.26.5
+ '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.28.3)':
+ dependencies:
+ '@babel/core': 7.28.3
+ '@babel/helper-plugin-utils': 7.26.5
+
'@babel/plugin-syntax-typescript@7.24.7(@babel/core@7.26.10)':
dependencies:
'@babel/core': 7.26.10
'@babel/helper-plugin-utils': 7.26.5
+ '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.3)':
+ dependencies:
+ '@babel/core': 7.28.3
+ '@babel/helper-plugin-utils': 7.27.1
+
'@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.10)':
dependencies:
'@babel/core': 7.26.10
@@ -7869,6 +8513,26 @@ snapshots:
'@colors/colors@1.6.0': {}
+ '@csstools/color-helpers@5.1.0': {}
+
+ '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)':
+ dependencies:
+ '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-tokenizer': 3.0.4
+
+ '@csstools/css-color-parser@3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)':
+ dependencies:
+ '@csstools/color-helpers': 5.1.0
+ '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-tokenizer': 3.0.4
+
+ '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)':
+ dependencies:
+ '@csstools/css-tokenizer': 3.0.4
+
+ '@csstools/css-tokenizer@3.0.4': {}
+
'@dabh/diagnostics@2.0.2':
dependencies:
colorspace: 1.1.4
@@ -7973,6 +8637,22 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@emnapi/core@1.8.1':
+ dependencies:
+ '@emnapi/wasi-threads': 1.1.0
+ tslib: 2.7.0
+ optional: true
+
+ '@emnapi/runtime@1.8.1':
+ dependencies:
+ tslib: 2.7.0
+ optional: true
+
+ '@emnapi/wasi-threads@1.1.0':
+ dependencies:
+ tslib: 2.7.0
+ optional: true
+
'@emotion/babel-plugin@11.12.0':
dependencies:
'@babel/helper-module-imports': 7.25.9
@@ -8201,6 +8881,11 @@ snapshots:
eslint: 8.57.0
eslint-visitor-keys: 3.4.3
+ '@eslint-community/eslint-utils@4.9.1(eslint@8.57.0)':
+ dependencies:
+ eslint: 8.57.0
+ eslint-visitor-keys: 3.4.3
+
'@eslint-community/regexpp@4.10.1': {}
'@eslint/eslintrc@2.1.4':
@@ -8345,6 +9030,15 @@ snapshots:
jest-util: 29.7.0
slash: 3.0.0
+ '@jest/console@30.2.0':
+ dependencies:
+ '@jest/types': 30.2.0
+ '@types/node': 22.14.1
+ chalk: 4.1.2
+ jest-message-util: 30.2.0
+ jest-util: 30.2.0
+ slash: 3.0.0
+
'@jest/core@29.7.0(babel-plugin-macros@3.1.0)':
dependencies:
'@jest/console': 29.7.0
@@ -8380,10 +9074,59 @@ snapshots:
- supports-color
- ts-node
+ '@jest/core@30.2.0(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.9))':
+ dependencies:
+ '@jest/console': 30.2.0
+ '@jest/pattern': 30.0.1
+ '@jest/reporters': 30.2.0
+ '@jest/test-result': 30.2.0
+ '@jest/transform': 30.2.0
+ '@jest/types': 30.2.0
+ '@types/node': 22.14.1
+ ansi-escapes: 4.3.2
+ chalk: 4.1.2
+ ci-info: 4.3.1
+ exit-x: 0.2.2
+ graceful-fs: 4.2.11
+ jest-changed-files: 30.2.0
+ jest-config: 30.2.0(@types/node@22.14.1)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.9))
+ jest-haste-map: 30.2.0
+ jest-message-util: 30.2.0
+ jest-regex-util: 30.0.1
+ jest-resolve: 30.2.0
+ jest-resolve-dependencies: 30.2.0
+ jest-runner: 30.2.0
+ jest-runtime: 30.2.0
+ jest-snapshot: 30.2.0
+ jest-util: 30.2.0
+ jest-validate: 30.2.0
+ jest-watcher: 30.2.0
+ micromatch: 4.0.8
+ pretty-format: 30.2.0
+ slash: 3.0.0
+ transitivePeerDependencies:
+ - babel-plugin-macros
+ - esbuild-register
+ - supports-color
+ - ts-node
+
'@jest/create-cache-key-function@29.7.0':
dependencies:
'@jest/types': 29.6.3
+ '@jest/diff-sequences@30.0.1': {}
+
+ '@jest/environment-jsdom-abstract@30.2.0(jsdom@26.1.0)':
+ dependencies:
+ '@jest/environment': 30.2.0
+ '@jest/fake-timers': 30.2.0
+ '@jest/types': 30.2.0
+ '@types/jsdom': 21.1.7
+ '@types/node': 22.14.1
+ jest-mock: 30.2.0
+ jest-util: 30.2.0
+ jsdom: 26.1.0
+
'@jest/environment@29.7.0':
dependencies:
'@jest/fake-timers': 29.7.0
@@ -8391,10 +9134,21 @@ snapshots:
'@types/node': 22.14.1
jest-mock: 29.7.0
+ '@jest/environment@30.2.0':
+ dependencies:
+ '@jest/fake-timers': 30.2.0
+ '@jest/types': 30.2.0
+ '@types/node': 22.14.1
+ jest-mock: 30.2.0
+
'@jest/expect-utils@29.7.0':
dependencies:
jest-get-type: 29.6.3
+ '@jest/expect-utils@30.2.0':
+ dependencies:
+ '@jest/get-type': 30.1.0
+
'@jest/expect@29.7.0':
dependencies:
expect: 29.7.0
@@ -8402,6 +9156,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@jest/expect@30.2.0':
+ dependencies:
+ expect: 30.2.0
+ jest-snapshot: 30.2.0
+ transitivePeerDependencies:
+ - supports-color
+
'@jest/fake-timers@29.7.0':
dependencies:
'@jest/types': 29.6.3
@@ -8411,6 +9172,17 @@ snapshots:
jest-mock: 29.7.0
jest-util: 29.7.0
+ '@jest/fake-timers@30.2.0':
+ dependencies:
+ '@jest/types': 30.2.0
+ '@sinonjs/fake-timers': 13.0.5
+ '@types/node': 22.14.1
+ jest-message-util: 30.2.0
+ jest-mock: 30.2.0
+ jest-util: 30.2.0
+
+ '@jest/get-type@30.1.0': {}
+
'@jest/globals@29.7.0':
dependencies:
'@jest/environment': 29.7.0
@@ -8420,6 +9192,20 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@jest/globals@30.2.0':
+ dependencies:
+ '@jest/environment': 30.2.0
+ '@jest/expect': 30.2.0
+ '@jest/types': 30.2.0
+ jest-mock: 30.2.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@jest/pattern@30.0.1':
+ dependencies:
+ '@types/node': 22.14.1
+ jest-regex-util: 30.0.1
+
'@jest/reporters@29.7.0':
dependencies:
'@bcoe/v8-coverage': 0.2.3
@@ -8427,7 +9213,7 @@ snapshots:
'@jest/test-result': 29.7.0
'@jest/transform': 29.7.0
'@jest/types': 29.6.3
- '@jridgewell/trace-mapping': 0.3.25
+ '@jridgewell/trace-mapping': 0.3.30
'@types/node': 22.14.1
chalk: 4.1.2
collect-v8-coverage: 1.0.1
@@ -8449,13 +9235,58 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@jest/reporters@30.2.0':
+ dependencies:
+ '@bcoe/v8-coverage': 0.2.3
+ '@jest/console': 30.2.0
+ '@jest/test-result': 30.2.0
+ '@jest/transform': 30.2.0
+ '@jest/types': 30.2.0
+ '@jridgewell/trace-mapping': 0.3.30
+ '@types/node': 22.14.1
+ chalk: 4.1.2
+ collect-v8-coverage: 1.0.3
+ exit-x: 0.2.2
+ glob: 10.5.0
+ graceful-fs: 4.2.11
+ istanbul-lib-coverage: 3.2.0
+ istanbul-lib-instrument: 6.0.1
+ istanbul-lib-report: 3.0.0
+ istanbul-lib-source-maps: 5.0.6
+ istanbul-reports: 3.1.5
+ jest-message-util: 30.2.0
+ jest-util: 30.2.0
+ jest-worker: 30.2.0
+ slash: 3.0.0
+ string-length: 4.0.2
+ v8-to-istanbul: 9.1.3
+ transitivePeerDependencies:
+ - supports-color
+
'@jest/schemas@29.6.3':
dependencies:
'@sinclair/typebox': 0.27.8
+ '@jest/schemas@30.0.5':
+ dependencies:
+ '@sinclair/typebox': 0.34.46
+
+ '@jest/snapshot-utils@30.2.0':
+ dependencies:
+ '@jest/types': 30.2.0
+ chalk: 4.1.2
+ graceful-fs: 4.2.11
+ natural-compare: 1.4.0
+
'@jest/source-map@29.6.3':
dependencies:
- '@jridgewell/trace-mapping': 0.3.25
+ '@jridgewell/trace-mapping': 0.3.30
+ callsites: 3.1.0
+ graceful-fs: 4.2.11
+
+ '@jest/source-map@30.0.1':
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.30
callsites: 3.1.0
graceful-fs: 4.2.11
@@ -8466,6 +9297,13 @@ snapshots:
'@types/istanbul-lib-coverage': 2.0.3
collect-v8-coverage: 1.0.1
+ '@jest/test-result@30.2.0':
+ dependencies:
+ '@jest/console': 30.2.0
+ '@jest/types': 30.2.0
+ '@types/istanbul-lib-coverage': 2.0.6
+ collect-v8-coverage: 1.0.3
+
'@jest/test-sequencer@29.7.0':
dependencies:
'@jest/test-result': 29.7.0
@@ -8473,11 +9311,18 @@ snapshots:
jest-haste-map: 29.7.0
slash: 3.0.0
+ '@jest/test-sequencer@30.2.0':
+ dependencies:
+ '@jest/test-result': 30.2.0
+ graceful-fs: 4.2.11
+ jest-haste-map: 30.2.0
+ slash: 3.0.0
+
'@jest/transform@29.7.0':
dependencies:
- '@babel/core': 7.26.10
+ '@babel/core': 7.28.3
'@jest/types': 29.6.3
- '@jridgewell/trace-mapping': 0.3.25
+ '@jridgewell/trace-mapping': 0.3.30
babel-plugin-istanbul: 6.1.1
chalk: 4.1.2
convert-source-map: 2.0.0
@@ -8493,15 +9338,45 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@jest/types@29.6.3':
+ '@jest/transform@30.2.0':
dependencies:
- '@jest/schemas': 29.6.3
+ '@babel/core': 7.28.3
+ '@jest/types': 30.2.0
+ '@jridgewell/trace-mapping': 0.3.30
+ 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
+
+ '@jest/types@29.6.3':
+ dependencies:
+ '@jest/schemas': 29.6.3
'@types/istanbul-lib-coverage': 2.0.3
'@types/istanbul-reports': 3.0.1
'@types/node': 22.14.1
'@types/yargs': 17.0.29
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.14.1
+ '@types/yargs': 17.0.35
+ chalk: 4.1.2
+
'@joshwooding/vite-plugin-react-docgen-typescript@0.6.1(typescript@5.7.2)(vite@5.4.8(@types/node@22.14.1))':
dependencies:
glob: 10.5.0
@@ -8572,6 +9447,13 @@ snapshots:
outvariant: 1.4.3
strict-event-emitter: 0.5.1
+ '@napi-rs/wasm-runtime@0.2.12':
+ dependencies:
+ '@emnapi/core': 1.8.1
+ '@emnapi/runtime': 1.8.1
+ '@tybys/wasm-util': 0.10.1
+ optional: true
+
'@nivo/annotations@0.87.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@nivo/colors': 0.87.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -8854,6 +9736,8 @@ snapshots:
'@pkgjs/parseargs@0.11.0':
optional: true
+ '@pkgr/core@0.2.9': {}
+
'@playwright/test@1.56.1':
dependencies:
playwright: 1.56.1
@@ -8996,16 +9880,26 @@ snapshots:
'@sinclair/typebox@0.27.8': {}
+ '@sinclair/typebox@0.34.46': {}
+
'@sindresorhus/is@4.6.0': {}
'@sinonjs/commons@3.0.0':
dependencies:
type-detect: 4.0.8
+ '@sinonjs/commons@3.0.1':
+ dependencies:
+ type-detect: 4.0.8
+
'@sinonjs/fake-timers@10.3.0':
dependencies:
'@sinonjs/commons': 3.0.0
+ '@sinonjs/fake-timers@13.0.5':
+ dependencies:
+ '@sinonjs/commons': 3.0.1
+
'@storybook/builder-vite@9.0.17(storybook@9.1.17(@testing-library/dom@10.1.0)(msw@2.4.9(typescript@5.7.2))(prettier@3.7.3)(vite@5.4.8(@types/node@22.14.1)))(vite@5.4.8(@types/node@22.14.1))':
dependencies:
'@storybook/csf-plugin': 9.0.17(storybook@9.1.17(@testing-library/dom@10.1.0)(msw@2.4.9(typescript@5.7.2))(prettier@3.7.3)(vite@5.4.8(@types/node@22.14.1)))
@@ -9218,7 +10112,7 @@ snapshots:
'@testing-library/dom@10.1.0':
dependencies:
- '@babel/code-frame': 7.26.2
+ '@babel/code-frame': 7.27.1
'@babel/runtime': 7.26.10
'@types/aria-query': 5.0.4
aria-query: 5.3.0
@@ -9227,24 +10121,13 @@ snapshots:
lz-string: 1.5.0
pretty-format: 27.5.1
- '@testing-library/jest-dom@6.5.0':
+ '@testing-library/jest-dom@6.9.1':
dependencies:
'@adobe/css-tools': 4.4.0
aria-query: 5.3.0
- chalk: 3.0.0
css.escape: 1.5.1
dom-accessibility-api: 0.6.3
- lodash: 4.17.21
- redent: 3.0.0
-
- '@testing-library/jest-dom@6.6.3':
- dependencies:
- '@adobe/css-tools': 4.4.0
- aria-query: 5.3.0
- chalk: 3.0.0
- css.escape: 1.5.1
- dom-accessibility-api: 0.6.3
- lodash: 4.17.21
+ picocolors: 1.1.1
redent: 3.0.0
'@testing-library/react@16.0.1(@testing-library/dom@10.1.0)(@types/react-dom@18.3.0)(@types/react@18.3.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
@@ -9267,6 +10150,11 @@ snapshots:
'@tootallnate/once@2.0.0': {}
+ '@tybys/wasm-util@0.10.1':
+ dependencies:
+ tslib: 2.7.0
+ optional: true
+
'@types/aria-query@5.0.4': {}
'@types/babel__core@7.20.5':
@@ -9351,24 +10239,24 @@ snapshots:
'@types/istanbul-lib-coverage@2.0.3': {}
+ '@types/istanbul-lib-coverage@2.0.6': {}
+
'@types/istanbul-lib-report@3.0.0':
dependencies:
- '@types/istanbul-lib-coverage': 2.0.3
+ '@types/istanbul-lib-coverage': 2.0.6
'@types/istanbul-reports@3.0.1':
dependencies:
'@types/istanbul-lib-report': 3.0.0
- '@types/jest@29.5.13':
+ '@types/istanbul-reports@3.0.4':
dependencies:
- expect: 29.7.0
- pretty-format: 29.7.0
+ '@types/istanbul-lib-report': 3.0.0
- '@types/jsdom@20.0.1':
+ '@types/jest@30.0.0':
dependencies:
- '@types/node': 22.14.1
- '@types/tough-cookie': 4.0.5
- parse5: 7.1.2
+ expect: 30.2.0
+ pretty-format: 30.2.0
'@types/jsdom@21.1.7':
dependencies:
@@ -9494,6 +10382,10 @@ snapshots:
dependencies:
'@types/yargs-parser': 20.2.1
+ '@types/yargs@17.0.35':
+ dependencies:
+ '@types/yargs-parser': 20.2.1
+
'@types/yauzl@2.10.0':
dependencies:
'@types/node': 22.14.1
@@ -9530,6 +10422,15 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@typescript-eslint/project-service@8.52.0(typescript@5.7.2)':
+ dependencies:
+ '@typescript-eslint/tsconfig-utils': 8.52.0(typescript@5.7.2)
+ '@typescript-eslint/types': 8.52.0
+ debug: 4.4.3
+ typescript: 5.7.2
+ transitivePeerDependencies:
+ - supports-color
+
'@typescript-eslint/scope-manager@5.62.0':
dependencies:
'@typescript-eslint/types': 5.62.0
@@ -9540,6 +10441,15 @@ snapshots:
'@typescript-eslint/types': 7.14.1
'@typescript-eslint/visitor-keys': 7.14.1
+ '@typescript-eslint/scope-manager@8.52.0':
+ dependencies:
+ '@typescript-eslint/types': 8.52.0
+ '@typescript-eslint/visitor-keys': 8.52.0
+
+ '@typescript-eslint/tsconfig-utils@8.52.0(typescript@5.7.2)':
+ dependencies:
+ typescript: 5.7.2
+
'@typescript-eslint/type-utils@7.14.1(eslint@8.57.0)(typescript@5.7.2)':
dependencies:
'@typescript-eslint/typescript-estree': 7.14.1(typescript@5.7.2)
@@ -9556,6 +10466,8 @@ snapshots:
'@typescript-eslint/types@7.14.1': {}
+ '@typescript-eslint/types@8.52.0': {}
+
'@typescript-eslint/typescript-estree@5.62.0(typescript@5.7.2)':
dependencies:
'@typescript-eslint/types': 5.62.0
@@ -9585,6 +10497,21 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@typescript-eslint/typescript-estree@8.52.0(typescript@5.7.2)':
+ dependencies:
+ '@typescript-eslint/project-service': 8.52.0(typescript@5.7.2)
+ '@typescript-eslint/tsconfig-utils': 8.52.0(typescript@5.7.2)
+ '@typescript-eslint/types': 8.52.0
+ '@typescript-eslint/visitor-keys': 8.52.0
+ debug: 4.4.3
+ minimatch: 9.0.5
+ semver: 7.7.3
+ tinyglobby: 0.2.15
+ ts-api-utils: 2.4.0(typescript@5.7.2)
+ typescript: 5.7.2
+ transitivePeerDependencies:
+ - supports-color
+
'@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.7.2)':
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
@@ -9611,6 +10538,17 @@ snapshots:
- supports-color
- typescript
+ '@typescript-eslint/utils@8.52.0(eslint@8.57.0)(typescript@5.7.2)':
+ dependencies:
+ '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.0)
+ '@typescript-eslint/scope-manager': 8.52.0
+ '@typescript-eslint/types': 8.52.0
+ '@typescript-eslint/typescript-estree': 8.52.0(typescript@5.7.2)
+ eslint: 8.57.0
+ typescript: 5.7.2
+ transitivePeerDependencies:
+ - supports-color
+
'@typescript-eslint/visitor-keys@5.62.0':
dependencies:
'@typescript-eslint/types': 5.62.0
@@ -9621,6 +10559,11 @@ snapshots:
'@typescript-eslint/types': 7.14.1
eslint-visitor-keys: 3.4.3
+ '@typescript-eslint/visitor-keys@8.52.0':
+ dependencies:
+ '@typescript-eslint/types': 8.52.0
+ eslint-visitor-keys: 4.2.1
+
'@uiw/codemirror-extensions-basic-setup@4.23.3(@codemirror/autocomplete@6.18.1(@codemirror/view@6.34.1))(@codemirror/view@6.34.1)':
dependencies:
'@codemirror/autocomplete': 6.18.1(@codemirror/view@6.34.1)
@@ -9653,6 +10596,67 @@ snapshots:
'@ungap/structured-clone@1.2.0': {}
+ '@ungap/structured-clone@1.3.0': {}
+
+ '@unrs/resolver-binding-android-arm-eabi@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-android-arm64@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-darwin-arm64@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-darwin-x64@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-freebsd-x64@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-arm64-gnu@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-arm64-musl@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-riscv64-musl@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-s390x-gnu@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-x64-gnu@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-x64-musl@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-wasm32-wasi@1.11.1':
+ dependencies:
+ '@napi-rs/wasm-runtime': 0.2.12
+ optional: true
+
+ '@unrs/resolver-binding-win32-arm64-msvc@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-win32-ia32-msvc@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-win32-x64-msvc@1.11.1':
+ optional: true
+
'@vitejs/plugin-react-swc@3.7.1(vite@5.4.8(@types/node@22.14.1))':
dependencies:
'@swc/core': 1.7.26
@@ -9719,17 +10723,10 @@ snapshots:
'@xterm/xterm@5.5.0': {}
- abab@2.0.6: {}
-
abbrev@1.1.1: {}
ace-builds@1.36.2: {}
- acorn-globals@7.0.1:
- dependencies:
- acorn: 8.12.1
- acorn-walk: 8.3.4
-
acorn-import-attributes@1.9.5(acorn@8.12.1):
dependencies:
acorn: 8.12.1
@@ -9738,10 +10735,6 @@ snapshots:
dependencies:
acorn: 8.12.1
- acorn-walk@8.3.4:
- dependencies:
- acorn: 8.12.1
-
acorn@8.12.1: {}
agent-base@6.0.2:
@@ -9958,13 +10951,26 @@ snapshots:
b4a@1.6.4: {}
- babel-jest@29.7.0(@babel/core@7.26.10):
+ babel-jest@29.7.0(@babel/core@7.28.3):
dependencies:
- '@babel/core': 7.26.10
+ '@babel/core': 7.28.3
'@jest/transform': 29.7.0
'@types/babel__core': 7.20.5
babel-plugin-istanbul: 6.1.1
- babel-preset-jest: 29.6.3(@babel/core@7.26.10)
+ babel-preset-jest: 29.6.3(@babel/core@7.28.3)
+ chalk: 4.1.2
+ graceful-fs: 4.2.11
+ slash: 3.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-jest@30.2.0(@babel/core@7.28.3):
+ dependencies:
+ '@babel/core': 7.28.3
+ '@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.28.3)
chalk: 4.1.2
graceful-fs: 4.2.11
slash: 3.0.0
@@ -9981,13 +10987,27 @@ 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
+
babel-plugin-jest-hoist@29.6.3:
dependencies:
'@babel/template': 7.26.9
- '@babel/types': 7.26.10
+ '@babel/types': 7.28.2
'@types/babel__core': 7.20.5
'@types/babel__traverse': 7.20.6
+ babel-plugin-jest-hoist@30.2.0:
+ dependencies:
+ '@types/babel__core': 7.20.5
+
babel-plugin-macros@3.1.0:
dependencies:
'@babel/runtime': 7.26.10
@@ -10057,11 +11077,52 @@ snapshots:
'@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.10)
'@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.10)
- babel-preset-jest@29.6.3(@babel/core@7.26.10):
+ babel-preset-current-node-syntax@1.0.1(@babel/core@7.28.3):
dependencies:
- '@babel/core': 7.26.10
+ '@babel/core': 7.28.3
+ '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.3)
+ '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.28.3)
+ '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.28.3)
+ '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.3)
+ '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.3)
+ '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.3)
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.3)
+ '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.3)
+ '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.3)
+ '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.3)
+ '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.3)
+ '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.3)
+
+ babel-preset-current-node-syntax@1.2.0(@babel/core@7.28.3):
+ dependencies:
+ '@babel/core': 7.28.3
+ '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.3)
+ '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.28.3)
+ '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.28.3)
+ '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.28.3)
+ '@babel/plugin-syntax-import-attributes': 7.24.7(@babel/core@7.28.3)
+ '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.3)
+ '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.3)
+ '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.3)
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.3)
+ '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.3)
+ '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.3)
+ '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.3)
+ '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.3)
+ '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.3)
+ '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.3)
+
+ babel-preset-jest@29.6.3(@babel/core@7.28.3):
+ dependencies:
+ '@babel/core': 7.28.3
babel-plugin-jest-hoist: 29.6.3
- babel-preset-current-node-syntax: 1.0.1(@babel/core@7.26.10)
+ babel-preset-current-node-syntax: 1.0.1(@babel/core@7.28.3)
+
+ babel-preset-jest@30.2.0(@babel/core@7.28.3):
+ dependencies:
+ '@babel/core': 7.28.3
+ babel-plugin-jest-hoist: 30.2.0
+ babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.3)
balanced-match@1.0.2: {}
@@ -10255,6 +11316,8 @@ snapshots:
camelcase@6.2.1: {}
+ camelcase@6.3.0: {}
+
camelize@1.0.1: {}
caniuse-lite@1.0.30001702: {}
@@ -10273,11 +11336,6 @@ snapshots:
escape-string-regexp: 1.0.5
supports-color: 5.5.0
- chalk@3.0.0:
- dependencies:
- ansi-styles: 4.3.0
- supports-color: 7.2.0
-
chalk@4.1.2:
dependencies:
ansi-styles: 4.3.0
@@ -10297,8 +11355,12 @@ snapshots:
ci-info@3.3.0: {}
+ ci-info@4.3.1: {}
+
cjs-module-lexer@1.3.1: {}
+ cjs-module-lexer@2.2.0: {}
+
clean-stack@2.2.0: {}
cli-cursor@3.1.0:
@@ -10347,6 +11409,8 @@ snapshots:
collect-v8-coverage@1.0.1: {}
+ collect-v8-coverage@1.0.3: {}
+
color-convert@1.9.3:
dependencies:
color-name: 1.1.3
@@ -10487,18 +11551,15 @@ snapshots:
dependencies:
css-tree: 2.2.1
- cssom@0.3.8: {}
-
- cssom@0.5.0: {}
-
- cssstyle@2.3.0:
- dependencies:
- cssom: 0.3.8
-
cssstyle@4.1.0:
dependencies:
rrweb-cssom: 0.7.1
+ cssstyle@4.6.0:
+ dependencies:
+ '@asamuzakjp/css-color': 3.2.0
+ rrweb-cssom: 0.8.0
+
csstype@3.1.3: {}
cwd@0.10.0:
@@ -10561,16 +11622,10 @@ snapshots:
dependencies:
d3-array: 3.2.4
- data-urls@3.0.2:
- dependencies:
- abab: 2.0.6
- whatwg-mimetype: 3.0.0
- whatwg-url: 11.0.0
-
data-urls@5.0.0:
dependencies:
whatwg-mimetype: 4.0.0
- whatwg-url: 14.0.0
+ whatwg-url: 14.2.0
data-view-buffer@1.0.2:
dependencies:
@@ -10600,10 +11655,16 @@ snapshots:
dependencies:
ms: 2.1.3
+ debug@4.4.3:
+ dependencies:
+ ms: 2.1.3
+
decamelize@1.2.0: {}
decimal.js@10.4.3: {}
+ decimal.js@10.6.0: {}
+
decompress-response@6.0.0:
dependencies:
mimic-response: 3.1.0
@@ -10612,12 +11673,18 @@ snapshots:
optionalDependencies:
babel-plugin-macros: 3.1.0
+ dedent@1.7.1(babel-plugin-macros@3.1.0):
+ optionalDependencies:
+ babel-plugin-macros: 3.1.0
+
deep-eql@5.0.2: {}
deep-is@0.1.4: {}
deepmerge@4.2.2: {}
+ deepmerge@4.3.1: {}
+
default-require-extensions@3.0.1:
dependencies:
strip-bom: 4.0.0
@@ -10733,10 +11800,6 @@ snapshots:
domelementtype@2.3.0: {}
- domexception@4.0.0:
- dependencies:
- webidl-conversions: 7.0.0
-
domhandler@2.4.2:
dependencies:
domelementtype: 1.3.1
@@ -10869,6 +11932,8 @@ snapshots:
entities@4.4.0: {}
+ entities@6.0.1: {}
+
env-paths@2.2.1: {}
err-code@2.0.3: {}
@@ -11045,14 +12110,6 @@ snapshots:
escape-string-regexp@4.0.0: {}
- escodegen@2.1.0:
- dependencies:
- esprima: 4.0.1
- estraverse: 5.3.0
- esutils: 2.0.3
- optionalDependencies:
- source-map: 0.6.1
-
eslint-import-resolver-node@0.3.9:
dependencies:
debug: 3.2.7
@@ -11061,33 +12118,32 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.7.2))(eslint-plugin-import@2.30.0)(eslint@8.57.0):
+ eslint-import-resolver-typescript@3.6.3(eslint-plugin-import@2.30.0)(eslint@8.57.0):
dependencies:
'@nolyfill/is-core-module': 1.0.39
debug: 4.4.0
enhanced-resolve: 5.17.0
eslint: 8.57.0
- eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)
+ eslint-module-utils: 2.12.0(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)
fast-glob: 3.3.2
get-tsconfig: 4.8.0
is-bun-module: 1.1.0
is-glob: 4.0.3
optionalDependencies:
- eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)
+ eslint-plugin-import: 2.30.0(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)
transitivePeerDependencies:
- '@typescript-eslint/parser'
- eslint-import-resolver-node
- eslint-import-resolver-webpack
- supports-color
- eslint-module-utils@2.12.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0):
+ eslint-module-utils@2.12.0(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0):
dependencies:
debug: 3.2.7
optionalDependencies:
- '@typescript-eslint/parser': 7.14.1(eslint@8.57.0)(typescript@5.7.2)
eslint: 8.57.0
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.7.2))(eslint-plugin-import@2.30.0)(eslint@8.57.0)
+ eslint-import-resolver-typescript: 3.6.3(eslint-plugin-import@2.30.0)(eslint@8.57.0)
transitivePeerDependencies:
- supports-color
@@ -11096,7 +12152,7 @@ snapshots:
eslint: 8.57.0
eslint-rule-composer: 0.3.0
- eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0):
+ eslint-plugin-import@2.30.0(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.8
@@ -11107,7 +12163,7 @@ snapshots:
doctrine: 2.1.0
eslint: 8.57.0
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)
+ eslint-module-utils: 2.12.0(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)
hasown: 2.0.2
is-core-module: 2.15.1
is-glob: 4.0.3
@@ -11117,14 +12173,12 @@ snapshots:
object.values: 1.2.0
semver: 6.3.1
tsconfig-paths: 3.15.0
- optionalDependencies:
- '@typescript-eslint/parser': 7.14.1(eslint@8.57.0)(typescript@5.7.2)
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
- supports-color
- eslint-plugin-jest-dom@5.4.0(@testing-library/dom@10.1.0)(eslint@8.57.0):
+ eslint-plugin-jest-dom@5.5.0(@testing-library/dom@10.1.0)(eslint@8.57.0):
dependencies:
'@babel/runtime': 7.26.10
eslint: 8.57.0
@@ -11132,13 +12186,12 @@ snapshots:
optionalDependencies:
'@testing-library/dom': 10.1.0
- eslint-plugin-jest@28.8.3(@typescript-eslint/eslint-plugin@7.14.1(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0)(jest@29.7.0(@types/node@22.14.1)(babel-plugin-macros@3.1.0))(typescript@5.7.2):
+ eslint-plugin-jest@29.12.1(eslint@8.57.0)(jest@30.2.0(@types/node@22.14.1)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.9)))(typescript@5.7.2):
dependencies:
- '@typescript-eslint/utils': 7.14.1(eslint@8.57.0)(typescript@5.7.2)
+ '@typescript-eslint/utils': 8.52.0(eslint@8.57.0)(typescript@5.7.2)
eslint: 8.57.0
optionalDependencies:
- '@typescript-eslint/eslint-plugin': 7.14.1(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0)(typescript@5.7.2)
- jest: 29.7.0(@types/node@22.14.1)(babel-plugin-macros@3.1.0)
+ jest: 30.2.0(@types/node@22.14.1)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.9))
transitivePeerDependencies:
- supports-color
- typescript
@@ -11177,12 +12230,10 @@ snapshots:
- supports-color
- typescript
- eslint-plugin-unused-imports@3.2.0(@typescript-eslint/eslint-plugin@7.14.1(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0):
+ eslint-plugin-unused-imports@3.2.0(eslint@8.57.0):
dependencies:
eslint: 8.57.0
eslint-rule-composer: 0.3.0
- optionalDependencies:
- '@typescript-eslint/eslint-plugin': 7.14.1(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0)(typescript@5.7.2)
eslint-rule-composer@0.3.0: {}
@@ -11198,6 +12249,8 @@ snapshots:
eslint-visitor-keys@3.4.3: {}
+ eslint-visitor-keys@4.2.1: {}
+
eslint@8.57.0:
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
@@ -11288,6 +12341,8 @@ snapshots:
signal-exit: 3.0.7
strip-final-newline: 2.0.0
+ exit-x@0.2.2: {}
+
exit@0.1.2: {}
expand-tilde@1.2.2:
@@ -11304,6 +12359,15 @@ snapshots:
jest-message-util: 29.7.0
jest-util: 29.7.0
+ expect@30.2.0:
+ dependencies:
+ '@jest/expect-utils': 30.2.0
+ '@jest/get-type': 30.1.0
+ jest-matcher-utils: 30.2.0
+ jest-message-util: 30.2.0
+ jest-mock: 30.2.0
+ jest-util: 30.2.0
+
exponential-backoff@3.1.1: {}
extract-zip@2.0.1:
@@ -11343,10 +12407,18 @@ snapshots:
dependencies:
bser: 2.1.1
+ fb-watchman@2.0.2:
+ dependencies:
+ bser: 2.1.1
+
fd-slicer@1.1.0:
dependencies:
pend: 1.2.0
+ fdir@6.5.0(picomatch@4.0.3):
+ optionalDependencies:
+ picomatch: 4.0.3
+
fecha@4.2.1: {}
file-entry-cache@6.0.1:
@@ -11685,10 +12757,6 @@ snapshots:
dependencies:
lru-cache: 6.0.0
- html-encoding-sniffer@3.0.0:
- dependencies:
- whatwg-encoding: 2.0.0
-
html-encoding-sniffer@4.0.0:
dependencies:
whatwg-encoding: 3.1.1
@@ -11740,6 +12808,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ https-proxy-agent@7.0.6:
+ dependencies:
+ agent-base: 7.1.3
+ debug: 4.4.0
+ transitivePeerDependencies:
+ - supports-color
+
human-signals@2.1.0: {}
humanize-ms@1.2.1:
@@ -11779,6 +12854,11 @@ snapshots:
pkg-dir: 4.2.0
resolve-cwd: 3.0.0
+ import-local@3.2.0:
+ dependencies:
+ pkg-dir: 4.2.0
+ resolve-cwd: 3.0.0
+
imurmurhash@0.1.4: {}
indent-string@4.0.0: {}
@@ -11978,8 +13058,8 @@ snapshots:
istanbul-lib-instrument@5.1.0:
dependencies:
- '@babel/core': 7.26.10
- '@babel/parser': 7.26.10
+ '@babel/core': 7.28.3
+ '@babel/parser': 7.28.3
'@istanbuljs/schema': 0.1.3
istanbul-lib-coverage: 3.2.0
semver: 6.3.1
@@ -11988,8 +13068,18 @@ snapshots:
istanbul-lib-instrument@6.0.1:
dependencies:
- '@babel/core': 7.26.10
- '@babel/parser': 7.26.10
+ '@babel/core': 7.28.3
+ '@babel/parser': 7.28.3
+ '@istanbuljs/schema': 0.1.3
+ istanbul-lib-coverage: 3.2.0
+ semver: 7.7.2
+ transitivePeerDependencies:
+ - supports-color
+
+ istanbul-lib-instrument@6.0.3:
+ dependencies:
+ '@babel/core': 7.28.3
+ '@babel/parser': 7.28.3
'@istanbuljs/schema': 0.1.3
istanbul-lib-coverage: 3.2.0
semver: 7.7.2
@@ -12019,6 +13109,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ istanbul-lib-source-maps@5.0.6:
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.30
+ debug: 4.4.0
+ istanbul-lib-coverage: 3.2.0
+ transitivePeerDependencies:
+ - supports-color
+
istanbul-reports@3.1.5:
dependencies:
html-escaper: 2.0.2
@@ -12056,6 +13154,12 @@ snapshots:
jest-util: 29.7.0
p-limit: 3.1.0
+ jest-changed-files@30.2.0:
+ dependencies:
+ execa: 5.1.1
+ jest-util: 30.2.0
+ p-limit: 3.1.0
+
jest-circus@29.7.0(babel-plugin-macros@3.1.0):
dependencies:
'@jest/environment': 29.7.0
@@ -12082,6 +13186,32 @@ snapshots:
- babel-plugin-macros
- supports-color
+ jest-circus@30.2.0(babel-plugin-macros@3.1.0):
+ dependencies:
+ '@jest/environment': 30.2.0
+ '@jest/expect': 30.2.0
+ '@jest/test-result': 30.2.0
+ '@jest/types': 30.2.0
+ '@types/node': 22.14.1
+ chalk: 4.1.2
+ co: 4.6.0
+ dedent: 1.7.1(babel-plugin-macros@3.1.0)
+ is-generator-fn: 2.1.0
+ jest-each: 30.2.0
+ jest-matcher-utils: 30.2.0
+ jest-message-util: 30.2.0
+ jest-runtime: 30.2.0
+ jest-snapshot: 30.2.0
+ jest-util: 30.2.0
+ p-limit: 3.1.0
+ pretty-format: 30.2.0
+ pure-rand: 7.0.1
+ slash: 3.0.0
+ stack-utils: 2.0.6
+ transitivePeerDependencies:
+ - babel-plugin-macros
+ - supports-color
+
jest-cli@29.7.0(@types/node@22.14.1)(babel-plugin-macros@3.1.0):
dependencies:
'@jest/core': 29.7.0(babel-plugin-macros@3.1.0)
@@ -12101,12 +13231,31 @@ snapshots:
- supports-color
- ts-node
+ jest-cli@30.2.0(@types/node@22.14.1)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.9)):
+ dependencies:
+ '@jest/core': 30.2.0(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.9))
+ '@jest/test-result': 30.2.0
+ '@jest/types': 30.2.0
+ chalk: 4.1.2
+ exit-x: 0.2.2
+ import-local: 3.2.0
+ jest-config: 30.2.0(@types/node@22.14.1)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.9))
+ jest-util: 30.2.0
+ jest-validate: 30.2.0
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - '@types/node'
+ - babel-plugin-macros
+ - esbuild-register
+ - supports-color
+ - ts-node
+
jest-config@29.7.0(@types/node@22.14.1)(babel-plugin-macros@3.1.0):
dependencies:
- '@babel/core': 7.26.10
+ '@babel/core': 7.28.3
'@jest/test-sequencer': 29.7.0
'@jest/types': 29.6.3
- babel-jest: 29.7.0(@babel/core@7.26.10)
+ babel-jest: 29.7.0(@babel/core@7.28.3)
chalk: 4.1.2
ci-info: 3.3.0
deepmerge: 4.2.2
@@ -12131,6 +13280,39 @@ snapshots:
- babel-plugin-macros
- supports-color
+ jest-config@30.2.0(@types/node@22.14.1)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.9)):
+ dependencies:
+ '@babel/core': 7.28.3
+ '@jest/get-type': 30.1.0
+ '@jest/pattern': 30.0.1
+ '@jest/test-sequencer': 30.2.0
+ '@jest/types': 30.2.0
+ babel-jest: 30.2.0(@babel/core@7.28.3)
+ chalk: 4.1.2
+ ci-info: 4.3.1
+ deepmerge: 4.3.1
+ glob: 10.5.0
+ graceful-fs: 4.2.11
+ jest-circus: 30.2.0(babel-plugin-macros@3.1.0)
+ jest-docblock: 30.2.0
+ jest-environment-node: 30.2.0
+ jest-regex-util: 30.0.1
+ jest-resolve: 30.2.0
+ jest-runner: 30.2.0
+ jest-util: 30.2.0
+ jest-validate: 30.2.0
+ micromatch: 4.0.8
+ parse-json: 5.2.0
+ pretty-format: 30.2.0
+ slash: 3.0.0
+ strip-json-comments: 3.1.1
+ optionalDependencies:
+ '@types/node': 22.14.1
+ esbuild-register: 3.6.0(esbuild@0.25.9)
+ transitivePeerDependencies:
+ - babel-plugin-macros
+ - supports-color
+
jest-diff@29.7.0:
dependencies:
chalk: 4.1.2
@@ -12138,10 +13320,21 @@ snapshots:
jest-get-type: 29.6.3
pretty-format: 29.7.0
+ jest-diff@30.2.0:
+ dependencies:
+ '@jest/diff-sequences': 30.0.1
+ '@jest/get-type': 30.1.0
+ chalk: 4.1.2
+ pretty-format: 30.2.0
+
jest-docblock@29.7.0:
dependencies:
detect-newline: 3.1.0
+ jest-docblock@30.2.0:
+ dependencies:
+ detect-newline: 3.1.0
+
jest-each@29.7.0:
dependencies:
'@jest/types': 29.6.3
@@ -12150,16 +13343,21 @@ snapshots:
jest-util: 29.7.0
pretty-format: 29.7.0
- jest-environment-jsdom@29.7.0:
+ jest-each@30.2.0:
dependencies:
- '@jest/environment': 29.7.0
- '@jest/fake-timers': 29.7.0
- '@jest/types': 29.6.3
- '@types/jsdom': 20.0.1
+ '@jest/get-type': 30.1.0
+ '@jest/types': 30.2.0
+ chalk: 4.1.2
+ jest-util: 30.2.0
+ pretty-format: 30.2.0
+
+ jest-environment-jsdom@30.2.0:
+ dependencies:
+ '@jest/environment': 30.2.0
+ '@jest/environment-jsdom-abstract': 30.2.0(jsdom@26.1.0)
+ '@types/jsdom': 21.1.7
'@types/node': 22.14.1
- jest-mock: 29.7.0
- jest-util: 29.7.0
- jsdom: 20.0.3
+ jsdom: 26.1.0
transitivePeerDependencies:
- bufferutil
- supports-color
@@ -12174,6 +13372,16 @@ snapshots:
jest-mock: 29.7.0
jest-util: 29.7.0
+ jest-environment-node@30.2.0:
+ dependencies:
+ '@jest/environment': 30.2.0
+ '@jest/fake-timers': 30.2.0
+ '@jest/types': 30.2.0
+ '@types/node': 22.14.1
+ jest-mock: 30.2.0
+ jest-util: 30.2.0
+ jest-validate: 30.2.0
+
jest-fail-on-console@3.3.0: {}
jest-get-type@29.6.3: {}
@@ -12194,6 +13402,21 @@ snapshots:
optionalDependencies:
fsevents: 2.3.3
+ jest-haste-map@30.2.0:
+ dependencies:
+ '@jest/types': 30.2.0
+ '@types/node': 22.14.1
+ 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
+
jest-junit@16.0.0:
dependencies:
mkdirp: 1.0.4
@@ -12206,6 +13429,11 @@ snapshots:
jest-get-type: 29.6.3
pretty-format: 29.7.0
+ jest-leak-detector@30.2.0:
+ dependencies:
+ '@jest/get-type': 30.1.0
+ pretty-format: 30.2.0
+
jest-matcher-utils@29.7.0:
dependencies:
chalk: 4.1.2
@@ -12213,9 +13441,16 @@ snapshots:
jest-get-type: 29.6.3
pretty-format: 29.7.0
+ jest-matcher-utils@30.2.0:
+ dependencies:
+ '@jest/get-type': 30.1.0
+ chalk: 4.1.2
+ jest-diff: 30.2.0
+ pretty-format: 30.2.0
+
jest-message-util@29.7.0:
dependencies:
- '@babel/code-frame': 7.26.2
+ '@babel/code-frame': 7.27.1
'@jest/types': 29.6.3
'@types/stack-utils': 2.0.3
chalk: 4.1.2
@@ -12225,12 +13460,30 @@ snapshots:
slash: 3.0.0
stack-utils: 2.0.6
+ jest-message-util@30.2.0:
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ '@jest/types': 30.2.0
+ '@types/stack-utils': 2.0.3
+ chalk: 4.1.2
+ graceful-fs: 4.2.11
+ micromatch: 4.0.8
+ pretty-format: 30.2.0
+ slash: 3.0.0
+ stack-utils: 2.0.6
+
jest-mock@29.7.0:
dependencies:
'@jest/types': 29.6.3
'@types/node': 22.14.1
jest-util: 29.7.0
+ jest-mock@30.2.0:
+ dependencies:
+ '@jest/types': 30.2.0
+ '@types/node': 22.14.1
+ jest-util: 30.2.0
+
jest-playwright-preset@4.0.0(jest-circus@29.7.0(babel-plugin-macros@3.1.0))(jest-environment-node@29.7.0)(jest-runner@29.7.0)(jest@29.7.0(@types/node@22.14.1)(babel-plugin-macros@3.1.0)):
dependencies:
expect-playwright: 0.8.0
@@ -12251,6 +13504,10 @@ snapshots:
optionalDependencies:
jest-resolve: 29.7.0
+ jest-pnp-resolver@1.2.3(jest-resolve@30.2.0):
+ optionalDependencies:
+ jest-resolve: 30.2.0
+
jest-process-manager@0.4.0:
dependencies:
'@types/wait-on': 5.3.4
@@ -12269,6 +13526,8 @@ snapshots:
jest-regex-util@29.6.3: {}
+ jest-regex-util@30.0.1: {}
+
jest-resolve-dependencies@29.7.0:
dependencies:
jest-regex-util: 29.6.3
@@ -12276,6 +13535,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ jest-resolve-dependencies@30.2.0:
+ dependencies:
+ jest-regex-util: 30.0.1
+ jest-snapshot: 30.2.0
+ transitivePeerDependencies:
+ - supports-color
+
jest-resolve@29.7.0:
dependencies:
chalk: 4.1.2
@@ -12288,6 +13554,17 @@ snapshots:
resolve.exports: 2.0.2
slash: 3.0.0
+ jest-resolve@30.2.0:
+ dependencies:
+ chalk: 4.1.2
+ graceful-fs: 4.2.11
+ jest-haste-map: 30.2.0
+ jest-pnp-resolver: 1.2.3(jest-resolve@30.2.0)
+ jest-util: 30.2.0
+ jest-validate: 30.2.0
+ slash: 3.0.0
+ unrs-resolver: 1.11.1
+
jest-runner@29.7.0:
dependencies:
'@jest/console': 29.7.0
@@ -12314,6 +13591,33 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ jest-runner@30.2.0:
+ dependencies:
+ '@jest/console': 30.2.0
+ '@jest/environment': 30.2.0
+ '@jest/test-result': 30.2.0
+ '@jest/transform': 30.2.0
+ '@jest/types': 30.2.0
+ '@types/node': 22.14.1
+ chalk: 4.1.2
+ emittery: 0.13.1
+ exit-x: 0.2.2
+ graceful-fs: 4.2.11
+ jest-docblock: 30.2.0
+ jest-environment-node: 30.2.0
+ jest-haste-map: 30.2.0
+ jest-leak-detector: 30.2.0
+ jest-message-util: 30.2.0
+ jest-resolve: 30.2.0
+ jest-runtime: 30.2.0
+ jest-util: 30.2.0
+ jest-watcher: 30.2.0
+ jest-worker: 30.2.0
+ p-limit: 3.1.0
+ source-map-support: 0.5.13
+ transitivePeerDependencies:
+ - supports-color
+
jest-runtime@29.7.0:
dependencies:
'@jest/environment': 29.7.0
@@ -12341,6 +13645,33 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ jest-runtime@30.2.0:
+ dependencies:
+ '@jest/environment': 30.2.0
+ '@jest/fake-timers': 30.2.0
+ '@jest/globals': 30.2.0
+ '@jest/source-map': 30.0.1
+ '@jest/test-result': 30.2.0
+ '@jest/transform': 30.2.0
+ '@jest/types': 30.2.0
+ '@types/node': 22.14.1
+ chalk: 4.1.2
+ cjs-module-lexer: 2.2.0
+ collect-v8-coverage: 1.0.3
+ glob: 10.5.0
+ graceful-fs: 4.2.11
+ jest-haste-map: 30.2.0
+ jest-message-util: 30.2.0
+ jest-mock: 30.2.0
+ jest-regex-util: 30.0.1
+ jest-resolve: 30.2.0
+ jest-snapshot: 30.2.0
+ jest-util: 30.2.0
+ slash: 3.0.0
+ strip-bom: 4.0.0
+ transitivePeerDependencies:
+ - supports-color
+
jest-serializer-html@7.1.0:
dependencies:
diffable-html: 4.1.0
@@ -12370,6 +13701,32 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ jest-snapshot@30.2.0:
+ dependencies:
+ '@babel/core': 7.28.3
+ '@babel/generator': 7.28.3
+ '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.3)
+ '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.3)
+ '@babel/types': 7.28.2
+ '@jest/expect-utils': 30.2.0
+ '@jest/get-type': 30.1.0
+ '@jest/snapshot-utils': 30.2.0
+ '@jest/transform': 30.2.0
+ '@jest/types': 30.2.0
+ babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.3)
+ chalk: 4.1.2
+ expect: 30.2.0
+ graceful-fs: 4.2.11
+ jest-diff: 30.2.0
+ jest-matcher-utils: 30.2.0
+ jest-message-util: 30.2.0
+ jest-util: 30.2.0
+ pretty-format: 30.2.0
+ semver: 7.7.2
+ synckit: 0.11.11
+ transitivePeerDependencies:
+ - supports-color
+
jest-styled-components@7.2.0(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)):
dependencies:
'@adobe/css-tools': 4.4.0
@@ -12384,6 +13741,15 @@ snapshots:
graceful-fs: 4.2.11
picomatch: 2.3.1
+ jest-util@30.2.0:
+ dependencies:
+ '@jest/types': 30.2.0
+ '@types/node': 22.14.1
+ chalk: 4.1.2
+ ci-info: 4.3.1
+ graceful-fs: 4.2.11
+ picomatch: 4.0.3
+
jest-validate@29.7.0:
dependencies:
'@jest/types': 29.6.3
@@ -12393,6 +13759,15 @@ snapshots:
leven: 3.1.0
pretty-format: 29.7.0
+ jest-validate@30.2.0:
+ dependencies:
+ '@jest/get-type': 30.1.0
+ '@jest/types': 30.2.0
+ camelcase: 6.3.0
+ chalk: 4.1.2
+ leven: 3.1.0
+ pretty-format: 30.2.0
+
jest-watch-typeahead@2.2.2(jest@29.7.0(@types/node@22.14.1)(babel-plugin-macros@3.1.0)):
dependencies:
ansi-escapes: 6.2.1
@@ -12415,6 +13790,17 @@ snapshots:
jest-util: 29.7.0
string-length: 4.0.2
+ jest-watcher@30.2.0:
+ dependencies:
+ '@jest/test-result': 30.2.0
+ '@jest/types': 30.2.0
+ '@types/node': 22.14.1
+ ansi-escapes: 4.3.2
+ chalk: 4.1.2
+ emittery: 0.13.1
+ jest-util: 30.2.0
+ string-length: 4.0.2
+
jest-websocket-mock@2.5.0:
dependencies:
jest-diff: 29.7.0
@@ -12427,6 +13813,14 @@ snapshots:
merge-stream: 2.0.0
supports-color: 8.1.1
+ jest-worker@30.2.0:
+ dependencies:
+ '@types/node': 22.14.1
+ '@ungap/structured-clone': 1.3.0
+ jest-util: 30.2.0
+ merge-stream: 2.0.0
+ supports-color: 8.1.1
+
jest@29.7.0(@types/node@22.14.1)(babel-plugin-macros@3.1.0):
dependencies:
'@jest/core': 29.7.0(babel-plugin-macros@3.1.0)
@@ -12439,6 +13833,19 @@ snapshots:
- supports-color
- ts-node
+ jest@30.2.0(@types/node@22.14.1)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.9)):
+ dependencies:
+ '@jest/core': 30.2.0(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.9))
+ '@jest/types': 30.2.0
+ import-local: 3.2.0
+ jest-cli: 30.2.0(@types/node@22.14.1)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.9))
+ transitivePeerDependencies:
+ - '@types/node'
+ - babel-plugin-macros
+ - esbuild-register
+ - supports-color
+ - ts-node
+
joi@17.13.3:
dependencies:
'@hapi/hoek': 9.3.0
@@ -12465,60 +13872,54 @@ snapshots:
bezier-easing: 2.1.0
css-mediaquery: 0.1.2
- jsdom@20.0.3:
+ jsdom@25.0.1:
dependencies:
- abab: 2.0.6
- acorn: 8.12.1
- acorn-globals: 7.0.1
- cssom: 0.5.0
- cssstyle: 2.3.0
- data-urls: 3.0.2
+ cssstyle: 4.1.0
+ data-urls: 5.0.0
decimal.js: 10.4.3
- domexception: 4.0.0
- escodegen: 2.1.0
form-data: 4.0.4
- html-encoding-sniffer: 3.0.0
- http-proxy-agent: 5.0.0
- https-proxy-agent: 5.0.1
+ html-encoding-sniffer: 4.0.0
+ http-proxy-agent: 7.0.2
+ https-proxy-agent: 7.0.5
is-potential-custom-element-name: 1.0.1
- nwsapi: 2.2.9
+ nwsapi: 2.2.13
parse5: 7.1.2
+ rrweb-cssom: 0.7.1
saxes: 6.0.0
symbol-tree: 3.2.4
- tough-cookie: 4.1.4
- w3c-xmlserializer: 4.0.0
+ tough-cookie: 5.0.0
+ w3c-xmlserializer: 5.0.0
webidl-conversions: 7.0.0
- whatwg-encoding: 2.0.0
- whatwg-mimetype: 3.0.0
- whatwg-url: 11.0.0
+ whatwg-encoding: 3.1.1
+ whatwg-mimetype: 4.0.0
+ whatwg-url: 14.0.0
ws: 8.18.0
- xml-name-validator: 4.0.0
+ xml-name-validator: 5.0.0
transitivePeerDependencies:
- bufferutil
- supports-color
- utf-8-validate
- jsdom@25.0.1:
+ jsdom@26.1.0:
dependencies:
- cssstyle: 4.1.0
+ cssstyle: 4.6.0
data-urls: 5.0.0
- decimal.js: 10.4.3
- form-data: 4.0.4
+ decimal.js: 10.6.0
html-encoding-sniffer: 4.0.0
http-proxy-agent: 7.0.2
- https-proxy-agent: 7.0.5
+ https-proxy-agent: 7.0.6
is-potential-custom-element-name: 1.0.1
- nwsapi: 2.2.13
- parse5: 7.1.2
- rrweb-cssom: 0.7.1
+ nwsapi: 2.2.23
+ parse5: 7.3.0
+ rrweb-cssom: 0.8.0
saxes: 6.0.0
symbol-tree: 3.2.4
- tough-cookie: 5.0.0
+ tough-cookie: 5.1.2
w3c-xmlserializer: 5.0.0
webidl-conversions: 7.0.0
whatwg-encoding: 3.1.1
whatwg-mimetype: 4.0.0
- whatwg-url: 14.0.0
+ whatwg-url: 14.2.0
ws: 8.18.0
xml-name-validator: 5.0.0
transitivePeerDependencies:
@@ -12817,6 +14218,8 @@ snapshots:
nanoid@3.3.8: {}
+ napi-postinstall@0.3.4: {}
+
natural-compare@1.4.0: {}
negotiator@0.6.3: {}
@@ -12866,7 +14269,7 @@ snapshots:
nwsapi@2.2.13: {}
- nwsapi@2.2.9: {}
+ nwsapi@2.2.23: {}
nyc@15.1.0:
dependencies:
@@ -13040,7 +14443,7 @@ snapshots:
parse-json@5.2.0:
dependencies:
- '@babel/code-frame': 7.26.2
+ '@babel/code-frame': 7.27.1
error-ex: 1.3.2
json-parse-even-better-errors: 2.3.1
lines-and-columns: 1.2.4
@@ -13051,6 +14454,10 @@ snapshots:
dependencies:
entities: 4.4.0
+ parse5@7.3.0:
+ dependencies:
+ entities: 6.0.1
+
path-exists@4.0.0: {}
path-exists@5.0.0: {}
@@ -13084,8 +14491,12 @@ snapshots:
picomatch@2.3.1: {}
+ picomatch@4.0.3: {}
+
pirates@4.0.6: {}
+ pirates@4.0.7: {}
+
pkg-dir@4.2.0:
dependencies:
find-up: 4.1.0
@@ -13138,6 +14549,12 @@ snapshots:
ansi-styles: 5.2.0
react-is: 18.3.1
+ pretty-format@30.2.0:
+ dependencies:
+ '@jest/schemas': 30.0.5
+ ansi-styles: 5.2.0
+ react-is: 18.3.1
+
proc-log@2.0.1: {}
process-on-spawn@1.0.0:
@@ -13192,6 +14609,8 @@ snapshots:
pure-rand@6.0.4: {}
+ pure-rand@7.0.1: {}
+
querystringify@2.2.0: {}
queue-microtask@1.2.3: {}
@@ -13503,6 +14922,8 @@ snapshots:
rrweb-cssom@0.7.1: {}
+ rrweb-cssom@0.8.0: {}
+
run-parallel@1.2.0:
dependencies:
queue-microtask: 1.2.3
@@ -13561,6 +14982,8 @@ snapshots:
semver@7.7.2: {}
+ semver@7.7.3: {}
+
serialize-error@7.0.1:
dependencies:
type-fest: 0.13.1
@@ -13727,7 +15150,7 @@ snapshots:
storybook@9.1.17(@testing-library/dom@10.1.0)(msw@2.4.9(typescript@5.7.2))(prettier@3.7.3)(vite@5.4.8(@types/node@22.14.1)):
dependencies:
'@storybook/global': 5.0.0
- '@testing-library/jest-dom': 6.6.3
+ '@testing-library/jest-dom': 6.9.1
'@testing-library/user-event': 14.6.1(@testing-library/dom@10.1.0)
'@vitest/expect': 3.2.4
'@vitest/mocker': 3.2.4(msw@2.4.9(typescript@5.7.2))(vite@5.4.8(@types/node@22.14.1))
@@ -13926,6 +15349,10 @@ snapshots:
symbol-tree@3.2.4: {}
+ synckit@0.11.11:
+ dependencies:
+ '@pkgr/core': 0.2.9
+
tabbable@6.2.0: {}
tapable@2.2.1: {}
@@ -13984,6 +15411,11 @@ snapshots:
tiny-warning@1.0.3: {}
+ tinyglobby@0.2.15:
+ dependencies:
+ fdir: 6.5.0(picomatch@4.0.3)
+ picomatch: 4.0.3
+
tinyrainbow@2.0.0: {}
tinyspy@4.0.3: {}
@@ -14017,14 +15449,18 @@ snapshots:
dependencies:
tldts: 6.1.50
- tr46@3.0.0:
+ tough-cookie@5.1.2:
dependencies:
- punycode: 2.3.1
+ tldts: 6.1.50
tr46@5.0.0:
dependencies:
punycode: 2.3.1
+ tr46@5.1.1:
+ dependencies:
+ punycode: 2.3.1
+
tree-kill@1.2.2: {}
triple-beam@1.3.0: {}
@@ -14037,6 +15473,10 @@ snapshots:
dependencies:
typescript: 5.7.2
+ ts-api-utils@2.4.0(typescript@5.7.2):
+ dependencies:
+ typescript: 5.7.2
+
ts-dedent@2.2.0: {}
tsconfck@3.1.0(typescript@5.7.2):
@@ -14175,6 +15615,30 @@ snapshots:
acorn: 8.12.1
webpack-virtual-modules: 0.6.2
+ unrs-resolver@1.11.1:
+ dependencies:
+ napi-postinstall: 0.3.4
+ optionalDependencies:
+ '@unrs/resolver-binding-android-arm-eabi': 1.11.1
+ '@unrs/resolver-binding-android-arm64': 1.11.1
+ '@unrs/resolver-binding-darwin-arm64': 1.11.1
+ '@unrs/resolver-binding-darwin-x64': 1.11.1
+ '@unrs/resolver-binding-freebsd-x64': 1.11.1
+ '@unrs/resolver-binding-linux-arm-gnueabihf': 1.11.1
+ '@unrs/resolver-binding-linux-arm-musleabihf': 1.11.1
+ '@unrs/resolver-binding-linux-arm64-gnu': 1.11.1
+ '@unrs/resolver-binding-linux-arm64-musl': 1.11.1
+ '@unrs/resolver-binding-linux-ppc64-gnu': 1.11.1
+ '@unrs/resolver-binding-linux-riscv64-gnu': 1.11.1
+ '@unrs/resolver-binding-linux-riscv64-musl': 1.11.1
+ '@unrs/resolver-binding-linux-s390x-gnu': 1.11.1
+ '@unrs/resolver-binding-linux-x64-gnu': 1.11.1
+ '@unrs/resolver-binding-linux-x64-musl': 1.11.1
+ '@unrs/resolver-binding-wasm32-wasi': 1.11.1
+ '@unrs/resolver-binding-win32-arm64-msvc': 1.11.1
+ '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1
+ '@unrs/resolver-binding-win32-x64-msvc': 1.11.1
+
update-browserslist-db@1.1.3(browserslist@4.24.4):
dependencies:
browserslist: 4.24.4
@@ -14209,7 +15673,7 @@ snapshots:
v8-to-istanbul@9.1.3:
dependencies:
- '@jridgewell/trace-mapping': 0.3.25
+ '@jridgewell/trace-mapping': 0.3.30
'@types/istanbul-lib-coverage': 2.0.3
convert-source-map: 2.0.0
@@ -14248,10 +15712,6 @@ snapshots:
w3c-keyname@2.2.8: {}
- w3c-xmlserializer@4.0.0:
- dependencies:
- xml-name-validator: 4.0.0
-
w3c-xmlserializer@5.0.0:
dependencies:
xml-name-validator: 5.0.0
@@ -14286,28 +15746,22 @@ snapshots:
webpack-virtual-modules@0.6.2: {}
- whatwg-encoding@2.0.0:
- dependencies:
- iconv-lite: 0.6.3
-
whatwg-encoding@3.1.1:
dependencies:
iconv-lite: 0.6.3
whatwg-fetch@3.6.20: {}
- whatwg-mimetype@3.0.0: {}
-
whatwg-mimetype@4.0.0: {}
- whatwg-url@11.0.0:
+ whatwg-url@14.0.0:
dependencies:
- tr46: 3.0.0
+ tr46: 5.0.0
webidl-conversions: 7.0.0
- whatwg-url@14.0.0:
+ whatwg-url@14.2.0:
dependencies:
- tr46: 5.0.0
+ tr46: 5.1.1
webidl-conversions: 7.0.0
which-boxed-primitive@1.1.1:
@@ -14417,9 +15871,12 @@ snapshots:
imurmurhash: 0.1.4
signal-exit: 3.0.7
- ws@8.18.0: {}
+ write-file-atomic@5.0.1:
+ dependencies:
+ imurmurhash: 0.1.4
+ signal-exit: 4.1.0
- xml-name-validator@4.0.0: {}
+ ws@8.18.0: {}
xml-name-validator@5.0.0: {}
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index 9c2a27755e223..a73346a84d073 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -9,6 +9,7 @@ onlyBuiltDependencies:
- msw
- node-pty
- protobufjs
+ - unrs-resolver
# Without this, electron-builder will pull in electron-builder-squirrel-windows (which we don't need)
# and that dep will in turn pull electron-winstaller (which we also don't need). pnpm will then
# start complaining that electron-winstaller is not in onlyBuiltDependencies.
diff --git a/web/packages/build/jest/jest-environment-patched-jsdom.js b/web/packages/build/jest/jest-environment-patched-jsdom.js
index 2b28f94c1b965..1dd71b24fb982 100644
--- a/web/packages/build/jest/jest-environment-patched-jsdom.js
+++ b/web/packages/build/jest/jest-environment-patched-jsdom.js
@@ -23,9 +23,7 @@ export default class PatchedJSDOMEnvironment extends JSDOMEnvironment {
// TODO(sshah): Remove this once JSDOM provides structuredClone.
// https://github.com/jsdom/jsdom/issues/3363
if (!global.structuredClone) {
- global.structuredClone = val => {
- return JSON.parse(JSON.stringify(val));
- };
+ global.structuredClone = structuredClone;
}
// TODO(gzdunek): Remove this once JSDOM provides scrollIntoView.
@@ -49,28 +47,6 @@ export default class PatchedJSDOMEnvironment extends JSDOMEnvironment {
});
}
- // TODO(gzdunek): JSDOM doesn't support AbortSignal.any().
- // Overwriting only this function doesn't help much, something between
- // AbortSignal and AbortController is missing.
- if (!global.AbortSignal.any) {
- global.AbortSignal = AbortSignal;
- global.AbortController = AbortController;
- }
- // TODO(gzdunek): Remove when JSDOM supports Set.prototype.difference.
- // After the update to Node.js 22, we can replace the implementation with
- // global.Set.prototype.difference = Set.prototype.difference.
- if (!global.Set.difference) {
- global.Set.prototype.difference = function (otherSet) {
- const result = new Set();
- for (const value of this) {
- if (!otherSet.has(value)) {
- result.add(value);
- }
- }
- return result;
- };
- }
-
function NullResizeObserver() {
this.observe = () => {};
this.unobserve = () => {};
diff --git a/web/packages/build/package.json b/web/packages/build/package.json
index e5163c1782901..8cf4ea0162b12 100644
--- a/web/packages/build/package.json
+++ b/web/packages/build/package.json
@@ -23,13 +23,13 @@
"eslint-import-resolver-typescript": "^3.6.3",
"eslint-plugin-babel": "^5.3.1",
"eslint-plugin-import": "^2.30.0",
- "eslint-plugin-jest": "^28.8.3",
- "eslint-plugin-jest-dom": "^5.4.0",
+ "eslint-plugin-jest": "^29.2.1",
+ "eslint-plugin-jest-dom": "^5.5.0",
"eslint-plugin-react": "^7.37.0",
"eslint-plugin-react-hooks": "^4.6.2",
"eslint-plugin-testing-library": "^6.3.0",
"eslint-plugin-unused-imports": "^3.2.0",
- "jest-environment-jsdom": "^29.7.0",
+ "jest-environment-jsdom": "^30.2.0",
"jest-fail-on-console": "^3.3.0",
"jsdom": "^25.0.1",
"rollup-plugin-visualizer": "^5.12.0",
diff --git a/web/packages/design/src/Modal/Modal.test.tsx b/web/packages/design/src/Modal/Modal.test.tsx
index 8ffee5e28e7d5..6e1c86eef2ce2 100644
--- a/web/packages/design/src/Modal/Modal.test.tsx
+++ b/web/packages/design/src/Modal/Modal.test.tsx
@@ -138,7 +138,7 @@ test('respects backdropProps prop invisible', () => {
});
expect(screen.getByTestId('backdrop')).toHaveStyle({
- 'background-color': 'transparent',
+ 'background-color': 'rgba(0, 0, 0, 0)',
});
});
diff --git a/web/packages/shared/deepLinks.ts b/web/packages/shared/deepLinks.ts
index acf8bf838721a..4928e8c3c0b6d 100644
--- a/web/packages/shared/deepLinks.ts
+++ b/web/packages/shared/deepLinks.ts
@@ -112,15 +112,18 @@ export function makeDeepLinkWithSafeInput<
? encodeURIComponent(args.username) + '@'
: '';
- const searchParamsString = Object.entries(args.searchParams)
- // filter out params that have no value to prevent a string like "&myparam=null"
- .filter(kv => kv[1] !== null && kv[1] !== undefined)
- .map(kv => kv.map(encodeURIComponent).join('='))
- .join('&');
+ const searchParams = new URLSearchParams();
+ for (const [key, value] of Object.entries(args.searchParams)) {
+ // Filter out params that have no value to prevent a param like "&myparam=null".
+ if (value === null || value === undefined) {
+ continue;
+ }
+ searchParams.set(key, value);
+ }
const url = `${CUSTOM_PROTOCOL}://${encodedUsername}${args.proxyHost}${args.path}`;
- if (searchParamsString !== '') {
- return url + '?' + searchParamsString;
+ if (searchParams.size > 0) {
+ return url + '?' + searchParams.toString();
}
return url;
}
diff --git a/web/packages/shared/redirects/processRedirectUri.test.ts b/web/packages/shared/redirects/processRedirectUri.test.ts
index b0ebce9c92dcb..03c4092067bf5 100644
--- a/web/packages/shared/redirects/processRedirectUri.test.ts
+++ b/web/packages/shared/redirects/processRedirectUri.test.ts
@@ -61,6 +61,11 @@ describe('processRedirectURI', () => {
input: 'https://example.com',
expected: '/web',
},
+ {
+ name: 'URL with empty path with query params',
+ input: 'https://example.com/?foo=bar',
+ expected: '/web?foo=bar',
+ },
{
name: 'relative path',
input: '/custom/path',
@@ -81,13 +86,34 @@ describe('processRedirectURI', () => {
name: 'malformed URL',
input:
'https://example.//attacker.com/enterprise/saml-idp/sso?SAMLRequest=example-authn-request',
- expected: '/web//attacker.com/enterprise/saml-idp/sso',
+ expected:
+ '/web//attacker.com/enterprise/saml-idp/sso?SAMLRequest=example-authn-request',
},
{
name: 'saml idp identity provider initiated SSO URL',
input: 'https://example.com/enterprise/saml-idp/login/example-app',
expected: '/enterprise/saml-idp/login/example-app',
},
+ {
+ name: 'query params with base path',
+ input: '/web/foo?bar=quux',
+ expected: '/web/foo?bar=quux',
+ },
+ {
+ name: 'query params without base path',
+ input: '/foo?bar=quux',
+ expected: '/web/foo?bar=quux',
+ },
+ {
+ name: 'query params with base path in full URL',
+ input: 'https://example.com/web/foo?bar=quux',
+ expected: '/web/foo?bar=quux',
+ },
+ {
+ name: 'query params without base path in full URL',
+ input: 'https://example.com/foo?bar=quux',
+ expected: '/web/foo?bar=quux',
+ },
];
test.each(tests)('$name', ({ input, expected }) => {
diff --git a/web/packages/shared/redirects/processRedirectUri.ts b/web/packages/shared/redirects/processRedirectUri.ts
index e602564b2c00e..7d076c4b32af7 100644
--- a/web/packages/shared/redirects/processRedirectUri.ts
+++ b/web/packages/shared/redirects/processRedirectUri.ts
@@ -24,15 +24,25 @@ const SAML_IDP_INITIATED_SSO_PATH = '/enterprise/saml-idp/login';
* Processes a redirect URI to ensure it's valid and follows the expected format.
*
* This function handles various cases:
- * - Null or empty input: Returns the basePath
- * - Full URLs:
- * - External: Uses only the pathname, prepending the basePath if not already present
- * - Internal: Prepends the basePath if not already present
- * - Relative paths: Prepends the basePath if not already present
- * - Invalid URIs: Returns the basePath
+ * - Null or empty input: Returns the base path ('/web')
+ * - Full URLs: Skips the host and scheme, prepending the base path if not already present
+ * - Relative paths: Prepends the base path if not already present
+ * - Invalid URIs: Returns the base path
+ *
+ * Nobody seems to know why we need to prepend the base path to the URL, so we keep doing it. It
+ * might be related to the URLs we get from SSO redirects [1], but it's unclear why we'd be getting
+ * a URL that's missing the base path and becomes valid only after appending the base path.
+ *
+ * [1]: https://github.com/gravitational/teleport/pull/47221#discussion_r1792248868
+ *
+ * You might ask: why is the browser doing this work if it's then repeated in getRedirectURL in
+ * lib/web/device_trust.go. The answer is that the backend does it only when the authorization is
+ * successful. If the user opts to skip Device Trust, we still need to be able to get them to the
+ * redirect URL using the same logic.
*
* @param redirectUri - The redirect URI to process. Can be null, a relative path, or a full URL.
- * @returns A processed URI string that always starts with the basePath, unless it's an invalid input.
+ * @returns A relative path that always starts with the base path, unless it's a SAML redirect then
+ * the base path is not added.
*
* @example
* processRedirectURI(null) // returns '/web'
@@ -46,34 +56,35 @@ export function processRedirectUri(redirectUri: string | null): string {
if (!redirectUri) {
return BASE_PATH;
}
- try {
- const url = new URL(redirectUri);
- const path = url.pathname;
- // If it already starts with basePath, return as is
- if (path.startsWith(BASE_PATH)) {
- return path;
- }
-
- if (
- path.startsWith(SAML_IDP_INITIATED_SSO_PATH) ||
- path.startsWith(SAML_SP_INITIATED_SSO_PATH)
- ) {
- return path + url.search;
- }
- if (path === '/') {
- return BASE_PATH;
- }
+ // Handle relative paths first.
+ if (redirectUri.startsWith('/')) {
+ return redirectUri.startsWith(BASE_PATH)
+ ? redirectUri
+ : `${BASE_PATH}${redirectUri}`;
+ }
- return `${BASE_PATH}${path.startsWith('/') ? '' : '/'}${path}`;
- } catch (error) {
- // If it's not a valid URL, it might be a relative path
- if (redirectUri.startsWith('/')) {
- return redirectUri.startsWith(BASE_PATH)
- ? redirectUri
- : `${BASE_PATH}${redirectUri}`;
- }
- // For invalid URIs, return the default
+ let url: URL;
+ try {
+ url = new URL(redirectUri);
+ } catch {
return BASE_PATH;
}
+
+ // Do not prepend BASE_PATH to SAML redirects.
+ let path = url.pathname;
+ if (
+ path.startsWith(SAML_IDP_INITIATED_SSO_PATH) ||
+ path.startsWith(SAML_SP_INITIATED_SSO_PATH)
+ ) {
+ return path + url.search;
+ }
+
+ if (path === '/') {
+ path = BASE_PATH;
+ } else if (!path.startsWith(BASE_PATH)) {
+ path = `${BASE_PATH}${path.startsWith('/') ? '' : '/'}${path}`;
+ }
+
+ return path + url.search;
}
diff --git a/web/packages/teleport/src/AppLauncher/AppLauncher.test.tsx b/web/packages/teleport/src/AppLauncher/AppLauncher.test.tsx
index 44540fb19f037..f1ae78e637fcf 100644
--- a/web/packages/teleport/src/AppLauncher/AppLauncher.test.tsx
+++ b/web/packages/teleport/src/AppLauncher/AppLauncher.test.tsx
@@ -76,9 +76,6 @@ const launcherPathTestCases: {
];
describe('app launcher path is properly formed', () => {
- const realLocation = window.location;
- const assignMock = jest.fn();
-
beforeEach(() => {
global.fetch = jest.fn(() => Promise.resolve({})) as jest.Mock;
jest.spyOn(api, 'get').mockResolvedValue({});
@@ -91,15 +88,11 @@ describe('app launcher path is properly formed', () => {
subjectCookieValue: 'subject-cookie-value',
fqdn: '',
});
-
- delete window.location;
- window.location = { ...realLocation, replace: assignMock };
});
- afterEach(() => {
- window.location = realLocation;
- assignMock.mockClear();
- });
+ const windowLocation = {
+ replace: jest.fn(),
+ };
test.each(launcherPathTestCases)(
'$name',
@@ -107,13 +100,13 @@ describe('app launcher path is properly formed', () => {
render(
-
+
);
await waitFor(() =>
- expect(window.location.replace).toHaveBeenCalledWith(
+ expect(windowLocation.replace).toHaveBeenCalledWith(
`https://grafana.localhost/${expectedPath}`
)
);
@@ -253,21 +246,9 @@ const appSessionTestCases: {
];
describe('fqdn is matched', () => {
- const realLocation = window.location;
- const assignMock = jest.fn();
-
beforeEach(() => {
- global.fetch = jest.fn(() => Promise.resolve({})) as jest.Mock;
jest.spyOn(api, 'get').mockResolvedValue({});
jest.spyOn(api, 'post').mockResolvedValue({});
-
- delete window.location;
- window.location = { ...realLocation, replace: assignMock };
- });
-
- afterEach(() => {
- window.location = realLocation;
- assignMock.mockClear();
});
test.each(appSessionTestCases)(
@@ -283,11 +264,14 @@ describe('fqdn is matched', () => {
fqdn: returnedFqdn,
});
jest.spyOn(service, 'createAppSession');
+ const windowLocation = {
+ replace: jest.fn(),
+ };
render(
-
+
);
@@ -301,7 +285,7 @@ describe('fqdn is matched', () => {
});
});
- await waitFor(() => expect(window.location.replace).toHaveBeenCalled());
+ await waitFor(() => expect(windowLocation.replace).toHaveBeenCalled());
expect(screen.queryByText(/access denied/i)).not.toBeInTheDocument();
}
);
@@ -310,6 +294,9 @@ describe('fqdn is matched', () => {
jest.spyOn(service, 'getAppDetails').mockResolvedValue({
fqdn: 'different.fqdn',
});
+ const windowLocation = {
+ replace: jest.fn(),
+ };
render(
{
)}
>
-
+
);
@@ -329,13 +316,16 @@ describe('fqdn is matched', () => {
/failed to match applications with FQDN "test-app.test.teleport:443"/i
)
).toBeInTheDocument();
- expect(window.location.replace).not.toHaveBeenCalled();
+ expect(windowLocation.replace).not.toHaveBeenCalled();
});
test('invalid URL when constructing a new URL with a malformed FQDN', async () => {
jest.spyOn(service, 'getAppDetails').mockResolvedValue({
fqdn: 'invalid.fqdn:3080:3090',
});
+ const windowLocation = {
+ replace: jest.fn(),
+ };
render(
{
)}
>
-
+
);
await screen.findByText(/access denied/i);
expect(screen.getByText(/Failed to parse URL:/i)).toBeInTheDocument();
- expect(window.location.replace).not.toHaveBeenCalled();
+ expect(windowLocation.replace).not.toHaveBeenCalled();
});
});
diff --git a/web/packages/teleport/src/AppLauncher/AppLauncher.tsx b/web/packages/teleport/src/AppLauncher/AppLauncher.tsx
index 08b89a4dd416a..1b47098585ab9 100644
--- a/web/packages/teleport/src/AppLauncher/AppLauncher.tsx
+++ b/web/packages/teleport/src/AppLauncher/AppLauncher.tsx
@@ -29,7 +29,12 @@ import { useMfa } from 'teleport/lib/useMfa';
import service from 'teleport/services/apps';
import { MfaChallengeScope } from 'teleport/services/auth/auth';
-export function AppLauncher() {
+export function AppLauncher({
+ windowLocation = window.location,
+}: {
+ /** Allows overwriting `window.location` in tests. */
+ windowLocation?: Pick;
+}) {
const { attempt, setAttempt } = useAttempt('processing');
const pathParams = useParams();
@@ -100,13 +105,14 @@ export function AppLauncher() {
// Let the target app know of a new auth exchange.
const stateToken = queryParams.get('state');
if (!stateToken) {
- initiateNewAuthExchange({
+ const url = getNewAuthExchangeUrl({
fqdn,
port,
path,
params,
requiredApps,
});
+ windowLocation.replace(url.toString());
return;
}
@@ -139,7 +145,7 @@ export function AppLauncher() {
// This will load an empty HTML with the inline JS containing
// logic to finish the auth exchange.
- window.location.replace(url.toString());
+ windowLocation.replace(url.toString());
} catch (err) {
let statusText = 'Something went wrong';
@@ -217,8 +223,7 @@ function getXTeleportAuthUrl({ fqdn, port }: { fqdn: string; port: string }) {
}
}
-// initiateNewAuthExchange is the first step to gaining access to an
-// application.
+// Returns the URL to gain access to an application.
//
// It can be initiated in two ways:
// 1) user clicked our "launch" app button from the resource list
@@ -226,7 +231,7 @@ function getXTeleportAuthUrl({ fqdn, port }: { fqdn: string; port: string }) {
// 2) user hits the app endpoint directly (eg: cliking on a
// bookmarked URL), in which the server will redirect the user
// to this launcher.
-function initiateNewAuthExchange({
+function getNewAuthExchangeUrl({
fqdn,
port,
params,
@@ -274,7 +279,7 @@ function initiateNewAuthExchange({
url.searchParams.set('arn', params.arn);
}
- window.location.replace(url.toString());
+ return url;
}
function throwFailedToParseUrlError(err: TypeError) {
diff --git a/web/packages/teleport/src/lib/util.test.ts b/web/packages/teleport/src/lib/util.test.ts
index 8e85a268f655f..2c309f379c099 100644
--- a/web/packages/teleport/src/lib/util.test.ts
+++ b/web/packages/teleport/src/lib/util.test.ts
@@ -18,30 +18,17 @@
import { arrayStrDiff, compareByString, generateTshLoginCommand } from './util';
-let windowSpy;
-
-beforeEach(() => {
- windowSpy = jest.spyOn(window, 'window', 'get');
-});
-
-afterEach(() => {
- windowSpy.mockRestore();
-});
-
test('with all params defined', () => {
- windowSpy.mockImplementation(() => ({
- location: {
- hostname: 'my-cluster',
- port: '1234',
- },
- }));
-
expect(
generateTshLoginCommand({
accessRequestId: 'ar-1234',
username: 'llama',
authType: 'local',
clusterId: 'cluster-1234',
+ windowLocation: {
+ hostname: 'my-cluster',
+ port: '1234',
+ },
})
).toBe(
'tsh login --proxy=my-cluster:1234 --auth=local --user=llama cluster-1234 --request-id=ar-1234'
@@ -49,17 +36,12 @@ test('with all params defined', () => {
});
test('no port and access request id', () => {
- windowSpy.mockImplementation(() => ({
- location: {
- hostname: 'my-cluster',
- },
- }));
-
expect(
generateTshLoginCommand({
username: 'llama',
authType: 'sso',
clusterId: 'cluster-1234',
+ windowLocation: { hostname: 'my-cluster' },
})
).toBe('tsh login --proxy=my-cluster:443 cluster-1234');
});
diff --git a/web/packages/teleport/src/lib/util.ts b/web/packages/teleport/src/lib/util.ts
index 38dfe13bd8ca7..390d15264ab54 100644
--- a/web/packages/teleport/src/lib/util.ts
+++ b/web/packages/teleport/src/lib/util.ts
@@ -29,20 +29,25 @@ export const openNewTab = (url: string) => {
document.body.removeChild(element);
};
-export type TshLoginCommand = {
- authType: AuthType;
- clusterId?: string;
- username: string;
- accessRequestId?: string;
-};
-
export function generateTshLoginCommand({
authType,
clusterId = '',
username,
accessRequestId = '',
-}: TshLoginCommand) {
- const { hostname, port } = window.location;
+ windowLocation = window.location,
+}: {
+ authType: AuthType;
+ clusterId?: string;
+ username: string;
+ accessRequestId?: string;
+ /** Allows overwriting `window.location` in tests. */
+ windowLocation?: {
+ hostname: string;
+ /** When empty, the default HTTPS port (443) is used. */
+ port?: string;
+ };
+}) {
+ const { hostname, port } = windowLocation;
const host = `${hostname}:${port || '443'}`;
const requestId = accessRequestId ? ` --request-id=${accessRequestId}` : '';
diff --git a/web/packages/teleterm/src/deepLinks.test.ts b/web/packages/teleterm/src/deepLinks.test.ts
index 3d19f8cbce878..27afb7ab8f3b3 100644
--- a/web/packages/teleterm/src/deepLinks.test.ts
+++ b/web/packages/teleterm/src/deepLinks.test.ts
@@ -218,6 +218,17 @@ describe('makeDeepLinkWithSafeInput followed by parseDeepLink gives the same res
redirect_uri: 'http://cluster.example.com:1337/web/users',
},
},
+ {
+ proxyHost: 'cluster.example.com:1337',
+ path: '/authenticate_web_device',
+ username: 'alice.bobson@example.com',
+ searchParams: {
+ token: '123',
+ id: '123',
+ redirect_uri:
+ 'https://cluster.example.com:1337/web/cluster/enterprise-local/resources?sort=name%3Adesc&pinnedOnly=false&kinds=app',
+ },
+ },
];
test.each(inputs)('%j', input => {
@@ -242,6 +253,14 @@ describe('parseDeepLink followed by makeDeepLinkWithSafeInput gives the same res
'teleport://alice.bobson%40example.com@cluster.example.com:1337/connect_my_computer',
'teleport://alice@cluster.example.com/authenticate_web_device?id=123&token=234',
'teleport://alice@cluster.example.com/authenticate_web_device?id=123&token=234&redirect_uri=http%3A%2F%2Fcluster.example.com%2Fweb%2Fusers',
+ 'teleport://alice@cluster.example.com/authenticate_web_device?id=123&token=234&redirect_uri=http%3A%2F%2Fcluster.example.com%2Fweb%2Fusers',
+ // redirect_uri which includes its own query params.
+ 'teleport://alice@cluster.example.com:3030/authenticate_web_device?id=423535c9-5da5-4b0e-a3cc-4c629ec09848&token=m83K7v2waTYCJJsFRHlKHDWHZ7CszFwBTj5NHmG_32Q&redirect_uri=https%3A%2F%2Fcluster.example.com%3A3030%2Fweb%2Fcluster%2Fenterprise-local%2Fresources%3Fsort%3Dname%253Adesc%26pinnedOnly%3Dfalse%26kinds%3Dapp',
+ // Triple-nested redirect_uri: it points to an app launch URL of the dumper app which is
+ // supposed to redirect to a URL which in itself has a custom_url query param with some kind of
+ // a URL with query params. You can imagine that originally the user wanted to visit this URL:
+ // https://dumper.cluster.example.com:3030/hello?custom_url=https%3A%2F%2Fcluster.example.com%3A3030%2Fweb%2Fcluster%2Fenterprise-local%2Fresources%3Fsort%3Dname%253Adesc%26pinnedOnly%3Dfalse%26kinds%3Dapp
+ 'teleport://alice@cluster.example.com:3030/authenticate_web_device?id=e8fce168-3cb1-4731-90d6-a59b2aeb343e&token=5-8lLKZ0VPU9_dqkx2OhAXLwGMth005QlPtVWHfnvXU&redirect_uri=https%3A%2F%2Fcluster.example.com%3A3030%2Fweb%2Flaunch%2Fdumper.cluster.example.com%3Fpath%3D%252Fhello%26query%3Dcustom_url%253Dhttps%25253A%25252F%25252Fcluster.example.com%25253A3030%25252Fweb%25252Fcluster%25252Fenterprise-local%25252Fresources%25253Fsort%25253Dname%2525253Adesc%252526pinnedOnly%25253Dfalse%252526kinds%25253Dapp',
];
test.each(inputs)('%s', input => {
diff --git a/web/packages/teleterm/src/services/vnet/__snapshots__/diag.test.ts.snap b/web/packages/teleterm/src/services/vnet/__snapshots__/diag.test.ts.snap
index 4d55bb3866f8a..1d93577df84eb 100644
--- a/web/packages/teleterm/src/services/vnet/__snapshots__/diag.test.ts.snap
+++ b/web/packages/teleterm/src/services/vnet/__snapshots__/diag.test.ts.snap
@@ -1,4 +1,4 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
+// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
exports[`reportToText converts report correctly 1`] = `
"VNet Diagnostic Report
diff --git a/web/packages/teleterm/src/ui/DocumentAuthorizeWebSession/DocumentAuthorizeWebSession.test.tsx b/web/packages/teleterm/src/ui/DocumentAuthorizeWebSession/DocumentAuthorizeWebSession.test.tsx
index 5070dbb47dd9e..dadbde3ba1ba4 100644
--- a/web/packages/teleterm/src/ui/DocumentAuthorizeWebSession/DocumentAuthorizeWebSession.test.tsx
+++ b/web/packages/teleterm/src/ui/DocumentAuthorizeWebSession/DocumentAuthorizeWebSession.test.tsx
@@ -38,7 +38,10 @@ const doc: types.DocumentAuthorizeWebSession = {
kind: 'doc.authorize_web_session',
title: 'Authorize Web Session',
webSessionRequest: {
- redirectUri: '',
+ // Triple-nested query params: the URI points to a launch URI of an app to a path with a query
+ // param that contains a URL with query params.
+ redirectUri:
+ 'https://teleport-local.com:3080/web/launch/dumper.teleport-local.com?path=%2Fhello&query=custom_url%3Dhttps%253A%252F%252Fteleport-local.com%253A3080%252Fweb%252Fcluster%252Fenterprise-local%252Fresources%253Fsort%253Dname%25253Adesc%2526pinnedOnly%253Dfalse%2526kinds%253Dapp',
token: '',
id: '',
username: 'alice',
@@ -110,7 +113,7 @@ test('authorizing a session opens its URL and closes document', async () => {
expect(await screen.findByText(/Session Authorized/)).toBeVisible();
expect(window.open).toHaveBeenCalledWith(
- 'https://teleport-local.com:3080/webapi/devices/webconfirm?id=123456789&token=7c8e7438-abe1-4cbc-b3e6-bd233bba967c'
+ 'https://teleport-local.com:3080/webapi/devices/webconfirm?id=123456789&token=7c8e7438-abe1-4cbc-b3e6-bd233bba967c&redirect_uri=https%3A%2F%2Fteleport-local.com%3A3080%2Fweb%2Flaunch%2Fdumper.teleport-local.com%3Fpath%3D%252Fhello%26query%3Dcustom_url%253Dhttps%25253A%25252F%25252Fteleport-local.com%25253A3080%25252Fweb%25252Fcluster%25252Fenterprise-local%25252Fresources%25253Fsort%25253Dname%2525253Adesc%252526pinnedOnly%25253Dfalse%252526kinds%25253Dapp'
);
expect(
appContext.workspacesService
diff --git a/web/packages/teleterm/src/ui/DocumentAuthorizeWebSession/DocumentAuthorizeWebSession.tsx b/web/packages/teleterm/src/ui/DocumentAuthorizeWebSession/DocumentAuthorizeWebSession.tsx
index c527af05bd42b..cbc0141faed48 100644
--- a/web/packages/teleterm/src/ui/DocumentAuthorizeWebSession/DocumentAuthorizeWebSession.tsx
+++ b/web/packages/teleterm/src/ui/DocumentAuthorizeWebSession/DocumentAuthorizeWebSession.tsx
@@ -189,13 +189,17 @@ function buildAuthorizedSessionUrl(
webSessionRequest: WebSessionRequest,
confirmationToken: DeviceConfirmationToken
): string {
- const { redirectUri } = webSessionRequest;
+ const url = `https://${rootCluster.proxyHost}/${confirmPath}`;
- let url = `https://${rootCluster.proxyHost}/${confirmPath}?id=${confirmationToken.id}&token=${confirmationToken.token}`;
- if (redirectUri) {
- url = `${url}&redirect_uri=${redirectUri}`;
+ const qp = new URLSearchParams();
+ qp.set('id', confirmationToken.id);
+ qp.set('token', confirmationToken.token);
+
+ if (webSessionRequest.redirectUri) {
+ qp.set('redirect_uri', webSessionRequest.redirectUri);
}
- return url;
+
+ return url + '?' + qp.toString();
}
function buildUnauthorizedSessionUrl(