diff --git a/examples/web-cli/package.json b/examples/web-cli/package.json index 4dcc79d8c..dc2673899 100644 --- a/examples/web-cli/package.json +++ b/examples/web-cli/package.json @@ -26,10 +26,10 @@ "@vercel/node": "^5.7.15", "@vitejs/plugin-react": "^6.0.1", "autoprefixer": "^10.5.0", - "eslint": "^10.2.1", + "eslint": "^10.3.0", "eslint-plugin-react-hooks": "^7.1.1", "eslint-plugin-react-refresh": "^0.5.2", - "globals": "^17.5.0", + "globals": "^17.6.0", "postcss": "^8.5.14", "tailwindcss": "^4.2.4", "typescript": "~5.9.3", diff --git a/package.json b/package.json index 3e7946295..2eb692b66 100644 --- a/package.json +++ b/package.json @@ -152,22 +152,22 @@ "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", "@types/ws": "^8.5.11", - "@typescript-eslint/eslint-plugin": "^8.58.2", - "@typescript-eslint/parser": "^8.58.2", - "@vitest/coverage-v8": "^4.1.4", + "@typescript-eslint/eslint-plugin": "^8.59.2", + "@typescript-eslint/parser": "^8.59.2", + "@vitest/coverage-v8": "^4.1.5", "@vitest/eslint-plugin": "^1.6.16", - "@vitest/ui": "^4.1.4", + "@vitest/ui": "^4.1.5", "dotenv": "^17.4.2", - "eslint": "^10.2.0", + "eslint": "^10.3.0", "eslint-config-prettier": "^10.1.8", "eslint-plugin-n": "^17.24.0", "eslint-plugin-prettier": "^5.5.5", - "eslint-plugin-react-hooks": "^7.1.0", + "eslint-plugin-react-hooks": "^7.1.1", "eslint-plugin-unicorn": "^64.0.0", "execa": "^9.6.1", "fs-extra": "^11.3.4", "get-port": "^7.2.0", - "globals": "^17.5.0", + "globals": "^17.6.0", "http-server": "^14.1.1", "nock": "^14.0.12", "node-pty": "^1.1.0", @@ -179,7 +179,7 @@ "strip-ansi": "^7.2.0", "ts-node": "11.0.0-beta.1", "typescript": "^5.9.3", - "vitest": "^4.1.4" + "vitest": "^4.1.5" }, "engines": { "node": ">=22.0.0" diff --git a/packages/react-web-cli/package.json b/packages/react-web-cli/package.json index acdffed55..5c1bf8c2a 100644 --- a/packages/react-web-cli/package.json +++ b/packages/react-web-cli/package.json @@ -61,7 +61,7 @@ "react-dom": "^19.2.5", "tsup": "^8.5.1", "typescript": "^5.9.3", - "vite": "8.0.9", + "vite": "8.0.10", "vitest": "^4.1.5" }, "publishConfig": { diff --git a/packages/react-web-cli/src/AblyCliTerminal.test.tsx b/packages/react-web-cli/src/AblyCliTerminal.test.tsx index e0669148d..0702eda3f 100644 --- a/packages/react-web-cli/src/AblyCliTerminal.test.tsx +++ b/packages/react-web-cli/src/AblyCliTerminal.test.tsx @@ -812,7 +812,7 @@ describe("AblyCliTerminal - Connection Status and Animation", () => { // Provide countdown callback and verify it's hooked const callback = vi.mocked(GlobalReconnect.setCountdownCallback).mock - .calls[0][0] as (remaining: number) => void; + .calls[0][0]; act(() => { callback(2000); }); diff --git a/packages/react-web-cli/src/AblyCliTerminal.tsx b/packages/react-web-cli/src/AblyCliTerminal.tsx index 2fa58e2aa..5b1c379f4 100644 --- a/packages/react-web-cli/src/AblyCliTerminal.tsx +++ b/packages/react-web-cli/src/AblyCliTerminal.tsx @@ -3053,9 +3053,7 @@ const AblyCliTerminalInner = ( secondaryTerm.current.writeln( `\r\n--- ${message.payload === "error" ? "Error" : "Session Ended (from server)"}: ${reason} ---`, ); - updateSecondaryConnectionStatus( - message.payload as ConnectionStatus, - ); + updateSecondaryConnectionStatus(message.payload); if ( secondaryTerm.current && diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0e5911d36..86a1e5a4a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -117,10 +117,10 @@ importers: devDependencies: '@eslint/compat': specifier: ^2.0.5 - version: 2.0.5(eslint@10.2.0(jiti@2.6.1)) + version: 2.0.5(eslint@10.3.0(jiti@2.6.1)) '@eslint/js': specifier: ^10.0.1 - version: 10.0.1(eslint@10.2.0(jiti@2.6.1)) + version: 10.0.1(eslint@10.3.0(jiti@2.6.1)) '@oclif/test': specifier: ^4.1.18 version: 4.1.18(@oclif/core@4.11.0) @@ -152,41 +152,41 @@ importers: specifier: ^8.5.11 version: 8.18.1 '@typescript-eslint/eslint-plugin': - specifier: ^8.58.2 - version: 8.58.2(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3) + specifier: ^8.59.2 + version: 8.59.2(@typescript-eslint/parser@8.59.2(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': - specifier: ^8.58.2 - version: 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3) + specifier: ^8.59.2 + version: 8.59.2(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3) '@vitest/coverage-v8': - specifier: ^4.1.4 - version: 4.1.4(vitest@4.1.4) + specifier: ^4.1.5 + version: 4.1.5(vitest@4.1.5) '@vitest/eslint-plugin': specifier: ^1.6.16 - version: 1.6.16(@typescript-eslint/eslint-plugin@8.58.2(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3)(vitest@4.1.4) + version: 1.6.16(@typescript-eslint/eslint-plugin@8.59.2(@typescript-eslint/parser@8.59.2(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3)(vitest@4.1.5) '@vitest/ui': - specifier: ^4.1.4 - version: 4.1.4(vitest@4.1.4) + specifier: ^4.1.5 + version: 4.1.5(vitest@4.1.5) dotenv: specifier: ^17.4.2 version: 17.4.2 eslint: - specifier: ^10.2.0 - version: 10.2.0(jiti@2.6.1) + specifier: ^10.3.0 + version: 10.3.0(jiti@2.6.1) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@10.2.0(jiti@2.6.1)) + version: 10.1.8(eslint@10.3.0(jiti@2.6.1)) eslint-plugin-n: specifier: ^17.24.0 - version: 17.24.0(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3) + version: 17.24.0(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3) eslint-plugin-prettier: specifier: ^5.5.5 - version: 5.5.5(eslint-config-prettier@10.1.8(eslint@10.2.0(jiti@2.6.1)))(eslint@10.2.0(jiti@2.6.1))(prettier@3.8.3) + version: 5.5.5(eslint-config-prettier@10.1.8(eslint@10.3.0(jiti@2.6.1)))(eslint@10.3.0(jiti@2.6.1))(prettier@3.8.3) eslint-plugin-react-hooks: - specifier: ^7.1.0 - version: 7.1.0(eslint@10.2.0(jiti@2.6.1)) + specifier: ^7.1.1 + version: 7.1.1(eslint@10.3.0(jiti@2.6.1)) eslint-plugin-unicorn: specifier: ^64.0.0 - version: 64.0.0(eslint@10.2.0(jiti@2.6.1)) + version: 64.0.0(eslint@10.3.0(jiti@2.6.1)) execa: specifier: ^9.6.1 version: 9.6.1 @@ -197,8 +197,8 @@ importers: specifier: ^7.2.0 version: 7.2.0 globals: - specifier: ^17.5.0 - version: 17.5.0 + specifier: ^17.6.0 + version: 17.6.0 http-server: specifier: ^14.1.1 version: 14.1.1 @@ -233,8 +233,8 @@ importers: specifier: ^5.9.3 version: 5.9.3 vitest: - specifier: ^4.1.4 - version: 4.1.4(@edge-runtime/vm@3.2.0)(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(jsdom@26.1.0)(vite@8.0.11(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)) + specifier: ^4.1.5 + version: 4.1.5(@edge-runtime/vm@3.2.0)(@types/node@25.6.0)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.11(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)) examples/web-cli: dependencies: @@ -265,7 +265,7 @@ importers: version: 4.2.4 '@tailwindcss/vite': specifier: ^4.2.4 - version: 4.2.4(vite@8.0.11(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)) + version: 4.2.4(vite@8.0.10(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)) '@types/react': specifier: ^19.2.14 version: 19.2.14 @@ -277,12 +277,12 @@ importers: version: 5.7.15(rollup@4.59.0) '@vitejs/plugin-react': specifier: ^6.0.1 - version: 6.0.1(vite@8.0.11(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)) + version: 6.0.1(vite@8.0.10(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)) autoprefixer: specifier: ^10.5.0 version: 10.5.0(postcss@8.5.14) eslint: - specifier: ^10.2.1 + specifier: ^10.3.0 version: 10.3.0(jiti@2.6.1) eslint-plugin-react-hooks: specifier: ^7.1.1 @@ -291,8 +291,8 @@ importers: specifier: ^0.5.2 version: 0.5.2(eslint@10.3.0(jiti@2.6.1)) globals: - specifier: ^17.5.0 - version: 17.5.0 + specifier: ^17.6.0 + version: 17.6.0 postcss: specifier: ^8.5.14 version: 8.5.14 @@ -307,10 +307,10 @@ importers: version: 8.59.2(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3) vite: specifier: ^8.0.10 - version: 8.0.11(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0) + version: 8.0.10(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0) vite-tsconfig-paths: specifier: ^6.1.1 - version: 6.1.1(typescript@5.9.3)(vite@8.0.11(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)) + version: 6.1.1(typescript@5.9.3)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)) packages/react-web-cli: dependencies: @@ -347,7 +347,7 @@ importers: version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': specifier: ^6.0.1 - version: 6.0.1(vite@8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)) + version: 6.0.1(vite@8.0.10(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)) '@vitest/ui': specifier: ^4.1.5 version: 4.1.5(vitest@4.1.5) @@ -370,11 +370,11 @@ importers: specifier: ^5.9.3 version: 5.9.3 vite: - specifier: 8.0.9 - version: 8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0) + specifier: 8.0.10 + version: 8.0.10(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0) vitest: specifier: ^4.1.5 - version: 4.1.5(@edge-runtime/vm@3.2.0)(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)) + version: 4.1.5(@edge-runtime/vm@3.2.0)(@types/node@25.6.0)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)) packages: @@ -583,8 +583,8 @@ packages: resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.29.0': - resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} + '@babel/compat-data@7.29.3': + resolution: {integrity: sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg==} engines: {node: '>=6.9.0'} '@babel/core@7.29.0': @@ -629,8 +629,8 @@ packages: resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.29.2': - resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} + '@babel/parser@7.29.3': + resolution: {integrity: sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==} engines: {node: '>=6.0.0'} hasBin: true @@ -716,15 +716,9 @@ packages: '@emnapi/core@1.10.0': resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} - '@emnapi/core@1.9.2': - resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==} - '@emnapi/runtime@1.10.0': resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} - '@emnapi/runtime@1.9.2': - resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==} - '@emnapi/wasi-threads@1.2.1': resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} @@ -1096,10 +1090,6 @@ packages: resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} engines: {node: '>=18.18.0'} - '@humanfs/node@0.16.7': - resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} - engines: {node: '>=18.18.0'} - '@humanfs/node@0.16.8': resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==} engines: {node: '>=18.18.0'} @@ -1525,8 +1515,8 @@ packages: '@open-draft/until@2.1.0': resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} - '@oxc-project/types@0.126.0': - resolution: {integrity: sha512-oGfVtjAgwQVVpfBrbtk4e1XDyWHRFta6BS3GWVzrF8xYBT2VGQAk39yJS/wFSMrZqoiCU4oghT3Ch0HaHGIHcQ==} + '@oxc-project/types@0.127.0': + resolution: {integrity: sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ==} '@oxc-project/types@0.128.0': resolution: {integrity: sha512-huv1Y/LzBJkBVHt3OlC7u0zHBW9qXf1FdD7sGmc1rXc2P1mTwHssYv7jyGx5KAACSCH+9B3Bhn6Z9luHRvf7pQ==} @@ -1558,8 +1548,8 @@ packages: resolution: {integrity: sha512-2FK1hF93Fuf1laSdfiEmJvSJPVIDHEUTz68D3Fi9s0IZrrpaEcj6pTFBTbYvsgC5du4ogrtf5re7yMMvrKNgkw==} engines: {node: ^20.9.0 || ^22.11.0 || ^24, pnpm: ^10.0.0} - '@rolldown/binding-android-arm64@1.0.0-rc.16': - resolution: {integrity: sha512-rhY3k7Bsae9qQfOtph2Pm2jZEA+s8Gmjoz4hhmx70K9iMQ/ddeae+xhRQcM5IuVx5ry1+bGfkvMn7D6MJggVSA==} + '@rolldown/binding-android-arm64@1.0.0-rc.17': + resolution: {integrity: sha512-s70pVGhw4zqGeFnXWvAzJDlvxhlRollagdCCKRgOsgUOH3N1l0LIxf83AtGzmb5SiVM4Hjl5HyarMRfdfj3DaQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] @@ -1570,8 +1560,8 @@ packages: cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.0-rc.16': - resolution: {integrity: sha512-rNz0yK078yrNn3DrdgN+PKiMOW8HfQ92jQiXxwX8yW899ayV00MLVdaCNeVBhG/TbH3ouYVObo8/yrkiectkcQ==} + '@rolldown/binding-darwin-arm64@1.0.0-rc.17': + resolution: {integrity: sha512-4ksWc9n0mhlZpZ9PMZgTGjeOPRu8MB1Z3Tz0Mo02eWfWCHMW1zN82Qz/pL/rC+yQa+8ZnutMF0JjJe7PjwasYw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] @@ -1582,8 +1572,8 @@ packages: cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-rc.16': - resolution: {integrity: sha512-r/OmdR00HmD4i79Z//xO06uEPOq5hRXdhw7nzkxQxwSavs3PSHa1ijntdpOiZ2mzOQ3fVVu8C1M19FoNM+dMUQ==} + '@rolldown/binding-darwin-x64@1.0.0-rc.17': + resolution: {integrity: sha512-SUSDOI6WwUVNcWxd02QEBjLdY1VPHvlEkw6T/8nYG322iYWCTxRb1vzk4E+mWWYehTp7ERibq54LSJGjmouOsw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] @@ -1594,8 +1584,8 @@ packages: cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0-rc.16': - resolution: {integrity: sha512-KcRE5w8h0OnjUatG8pldyD14/CQ5Phs1oxfR+3pKDjboHRo9+MkqQaiIZlZRpsxC15paeXme/I127tUa9TXJ6g==} + '@rolldown/binding-freebsd-x64@1.0.0-rc.17': + resolution: {integrity: sha512-hwnz3nw9dbJ05EDO/PvcjaaewqqDy7Y1rn1UO81l8iIK1GjenME75dl16ajbvSSMfv66WXSRCYKIqfgq2KCfxw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] @@ -1606,8 +1596,8 @@ packages: cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.16': - resolution: {integrity: sha512-bT0guA1bpxEJ/ZhTRniQf7rNF8ybvXOuWbNIeLABaV5NGjx4EtOWBTSRGWFU9ZWVkPOZ+HNFP8RMcBokBiZ0Kg==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.17': + resolution: {integrity: sha512-IS+W7epTcwANmFSQFrS1SivEXHtl1JtuQA9wlxrZTcNi6mx+FDOYrakGevvvTwgj2JvWiK8B29/qD9BELZPyXQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] @@ -1618,8 +1608,8 @@ packages: cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.16': - resolution: {integrity: sha512-+tHktCHWV8BDQSjemUqm/Jl/TPk3QObCTIjmdDy/nlupcujZghmKK2962LYrqFpWu+ai01AN/REOH3NEpqvYQg==} + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.17': + resolution: {integrity: sha512-e6usGaHKW5BMNZOymS1UcEYGowQMWcgZ71Z17Sl/h2+ZziNJ1a9n3Zvcz6LdRyIW5572wBCTH/Z+bKuZouGk9Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] @@ -1630,8 +1620,8 @@ packages: cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.16': - resolution: {integrity: sha512-3fPzdREH806oRLxpTWW1Gt4tQHs0TitZFOECB2xzCFLPKnSOy90gwA7P29cksYilFO6XVRY1kzga0cL2nRjKPg==} + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.17': + resolution: {integrity: sha512-b/CgbwAJpmrRLp02RPfhbudf5tZnN9nsPWK82znefso832etkem8H7FSZwxrOI9djcdTP7U6YfNhbRnh7djErg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] @@ -1642,8 +1632,8 @@ packages: cpu: [arm64] os: [linux] - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.16': - resolution: {integrity: sha512-EKwI1tSrLs7YVw+JPJT/G2dJQ1jl9qlTTTEG0V2Ok/RdOenRfBw2PQdLPyjhIu58ocdBfP7vIRN/pvMsPxs/AQ==} + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.17': + resolution: {integrity: sha512-4EII1iNGRUN5WwGbF/kOh/EIkoDN9HsupgLQoXfY+D1oyJm7/F4t5PYU5n8SWZgG0FEwakyM8pGgwcBYruGTlA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] @@ -1654,8 +1644,8 @@ packages: cpu: [ppc64] os: [linux] - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.16': - resolution: {integrity: sha512-Uknladnb3Sxqu6SEcqBldQyJUpk8NleooZEc0MbRBJ4inEhRYWZX0NJu12vNf2mqAq7gsofAxHrGghiUYjhaLQ==} + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.17': + resolution: {integrity: sha512-AH8oq3XqQo4IibpVXvPeLDI5pzkpYn0WiZAfT05kFzoJ6tQNzwRdDYQ45M8I/gslbodRZwW8uxLhbSBbkv96rA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] @@ -1666,8 +1656,8 @@ packages: cpu: [s390x] os: [linux] - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.16': - resolution: {integrity: sha512-FIb8+uG49sZBtLTn+zt1AJ20TqVcqWeSIyoVt0or7uAWesgKaHbiBh6OpA/k9v0LTt+PTrb1Lao133kP4uVxkg==} + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.17': + resolution: {integrity: sha512-cLnjV3xfo7KslbU41Z7z8BH/E1y5mzUYzAqih1d1MDaIGZRCMqTijqLv76/P7fyHuvUcfGsIpqCdddbxLLK9rA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] @@ -1678,8 +1668,8 @@ packages: cpu: [x64] os: [linux] - '@rolldown/binding-linux-x64-musl@1.0.0-rc.16': - resolution: {integrity: sha512-RuERhF9/EgWxZEXYWCOaViUWHIboceK4/ivdtQ3R0T44NjLkIIlGIAVAuCddFxsZ7vnRHtNQUrt2vR2n2slB2w==} + '@rolldown/binding-linux-x64-musl@1.0.0-rc.17': + resolution: {integrity: sha512-0phclDw1spsL7dUB37sIARuis2tAgomCJXAHZlpt8PXZ4Ba0dRP1e+66lsRqrfhISeN9bEGNjQs+T/Fbd7oYGw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] @@ -1690,8 +1680,8 @@ packages: cpu: [x64] os: [linux] - '@rolldown/binding-openharmony-arm64@1.0.0-rc.16': - resolution: {integrity: sha512-mXcXnvd9GpazCxeUCCnZ2+YF7nut+ZOEbE4GtaiPtyY6AkhZWbK70y1KK3j+RDhjVq5+U8FySkKRb/+w0EeUwA==} + '@rolldown/binding-openharmony-arm64@1.0.0-rc.17': + resolution: {integrity: sha512-0ag/hEgXOwgw4t8QyQvUCxvEg+V0KBcA6YuOx9g0r02MprutRF5dyljgm3EmR02O292UX7UeS6HzWHAl6KgyhA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] @@ -1702,8 +1692,8 @@ packages: cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.0-rc.16': - resolution: {integrity: sha512-3Q2KQxnC8IJOLqXmUMoYwyIPZU9hzRbnHaoV3Euz+VVnjZKcY8ktnNP8T9R4/GGQtb27C/UYKABxesKWb8lsvQ==} + '@rolldown/binding-wasm32-wasi@1.0.0-rc.17': + resolution: {integrity: sha512-LEXei6vo0E5wTGwpkJ4KoT3OZJRnglwldt5ziLzOlc6qqb55z4tWNq2A+PFqCJuvWWdP53CVhG1Z9NtToDPJrA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] @@ -1712,8 +1702,8 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.16': - resolution: {integrity: sha512-tj7XRemQcOcFwv7qhpUxMTBbI5mWMlE4c1Omhg5+h8GuLXzyj8HviYgR+bB2DMDgRqUE+jiDleqSCRjx4aYk/Q==} + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.17': + resolution: {integrity: sha512-gUmyzBl3SPMa6hrqFUth9sVfcLBlYsbMzBx5PlexMroZStgzGqlZ26pYG89rBb45Mnia+oil6YAIFeEWGWhoZA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] @@ -1724,8 +1714,8 @@ packages: cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.16': - resolution: {integrity: sha512-PH5DRZT+F4f2PTXRXR8uJxnBq2po/xFtddyabTJVJs/ZYVHqXPEgNIr35IHTEa6bpa0Q8Awg+ymkTaGnKITw4g==} + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.17': + resolution: {integrity: sha512-3hkiolcUAvPB9FLb3UZdfjVVNWherN1f/skkGWJP/fgSQhYUZpSIRr0/I8ZK9TkF3F7kxvJAk0+IcKvPHk9qQg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -1736,8 +1726,8 @@ packages: cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0-rc.16': - resolution: {integrity: sha512-45+YtqxLYKDWQouLKCrpIZhke+nXxhsw+qAHVzHDVwttyBlHNBVs2K25rDXrZzhpTp9w1FlAlvweV1H++fdZoA==} + '@rolldown/pluginutils@1.0.0-rc.17': + resolution: {integrity: sha512-n8iosDOt6Ig1UhJ2AYqoIhHWh/isz0xpicHTzpKBeotdVsTEcxsSA/i3EVM7gQAj0rU27OLAxCjzlj15IWY7bg==} '@rolldown/pluginutils@1.0.0-rc.18': resolution: {integrity: sha512-CUY5Mnhe64xQBGZEEXQ5WyZwsc1JU3vAZLIxtrsBt3LO6UOb+C8GunVKqe9sT8NeWb4lqSaoJtp2xo6GxT1MNw==} @@ -2294,8 +2284,8 @@ packages: resolution: {integrity: sha512-Y8cK9aggNRsqJVaKUlEYs4s7CvQ1b1ta2DVPyAimb0I2qhzjNk+A+mxvll/klL0RlfuIUei8BF7YWiua4kQqww==} engines: {node: ^20.17.0 || >=22.9.0} - '@tybys/wasm-util@0.10.1': - resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + '@tybys/wasm-util@0.10.2': + resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} '@types/aria-query@5.0.4': resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} @@ -2380,14 +2370,6 @@ packages: '@types/ws@8.18.1': resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} - '@typescript-eslint/eslint-plugin@8.58.2': - resolution: {integrity: sha512-aC2qc5thQahutKjP+cl8cgN9DWe3ZUqVko30CMSZHnFEHyhOYoZSzkGtAI2mcwZ38xeImDucI4dnqsHiOYuuCw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.58.2 - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/eslint-plugin@8.59.2': resolution: {integrity: sha512-j/bwmkBvHUtPNxzuWe5z6BEk3q54YRyGlBXkSsmfoih7zNrBvl5A9A98anlp/7JbyZcWIJ8KXo/3Tq/DjFLtuQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2396,13 +2378,6 @@ packages: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.58.2': - resolution: {integrity: sha512-/Zb/xaIDfxeJnvishjGdcR4jmr7S+bda8PKNhRGdljDM+elXhlvN0FyPSsMnLmJUrVG9aPO6dof80wjMawsASg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.59.2': resolution: {integrity: sha512-plR3pp6D+SSUn1HM7xvSkx12/DhoHInI2YF35KAcVFNZvlC0gtrWqx7Qq1oH2Ssgi0vlFRCTbP+DZc7B9+TtsQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2442,13 +2417,6 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.58.2': - resolution: {integrity: sha512-Z7EloNR/B389FvabdGeTo2XMs4W9TjtPiO9DAsmT0yom0bwlPyRjkJ1uCdW1DvrrrYP50AJZ9Xc3sByZA9+dcg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.59.2': resolution: {integrity: sha512-nhqaj1nmTdVVl/BP5omXNRGO38jn5iosis2vbdmupF2txCf8ylWT8lx+JlvMYYVqzGVKtjojUFoQ3JRWK+mfzQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2531,11 +2499,11 @@ packages: babel-plugin-react-compiler: optional: true - '@vitest/coverage-v8@4.1.4': - resolution: {integrity: sha512-x7FptB5oDruxNPDNY2+S8tCh0pcq7ymCe1gTHcsp733jYjrJl8V1gMUlVysuCD9Kz46Xz9t1akkv08dPcYDs1w==} + '@vitest/coverage-v8@4.1.5': + resolution: {integrity: sha512-38C0/Ddb7HcRG0Z4/DUem8x57d2p9jYgp18mkaYswEOQBGsI1CG4f/hjm0ZCeaJfWhSZ4k7jgs29V1Zom7Ki9A==} peerDependencies: - '@vitest/browser': 4.1.4 - vitest: 4.1.4 + '@vitest/browser': 4.1.5 + vitest: 4.1.5 peerDependenciesMeta: '@vitest/browser': optional: true @@ -2556,23 +2524,9 @@ packages: vitest: optional: true - '@vitest/expect@4.1.4': - resolution: {integrity: sha512-iPBpra+VDuXmBFI3FMKHSFXp3Gx5HfmSCE8X67Dn+bwephCnQCaB7qWK2ldHa+8ncN8hJU8VTMcxjPpyMkUjww==} - '@vitest/expect@4.1.5': resolution: {integrity: sha512-PWBaRY5JoKuRnHlUHfpV/KohFylaDZTupcXN1H9vYryNLOnitSw60Mw9IAE2r67NbwwzBw/Cc/8q9BK3kIX8Kw==} - '@vitest/mocker@4.1.4': - resolution: {integrity: sha512-R9HTZBhW6yCSGbGQnDnH3QHfJxokKN4KB+Yvk9Q1le7eQNYwiCyKxmLmurSpFy6BzJanSLuEUDrD+j97Q+ZLPg==} - peerDependencies: - msw: ^2.4.9 - vite: ^6.0.0 || ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true - '@vitest/mocker@4.1.5': resolution: {integrity: sha512-/x2EmFC4mT4NNzqvC3fmesuV97w5FC903KPmey4gsnJiMQ3Be1IlDKVaDaG8iqaLFHqJ2FVEkxZk5VmeLjIItw==} peerDependencies: @@ -2584,43 +2538,23 @@ packages: vite: optional: true - '@vitest/pretty-format@4.1.4': - resolution: {integrity: sha512-ddmDHU0gjEUyEVLxtZa7xamrpIefdEETu3nZjWtHeZX4QxqJ7tRxSteHVXJOcr8jhiLoGAhkK4WJ3WqBpjx42A==} - '@vitest/pretty-format@4.1.5': resolution: {integrity: sha512-7I3q6l5qr03dVfMX2wCo9FxwSJbPdwKjy2uu/YPpU3wfHvIL4QHwVRp57OfGrDFeUJ8/8QdfBKIV12FTtLn00g==} - '@vitest/runner@4.1.4': - resolution: {integrity: sha512-xTp7VZ5aXP5ZJrn15UtJUWlx6qXLnGtF6jNxHepdPHpMfz/aVPx+htHtgcAL2mDXJgKhpoo2e9/hVJsIeFbytQ==} - '@vitest/runner@4.1.5': resolution: {integrity: sha512-2D+o7Pr82IEO46YPpoA/YU0neeyr6FTerQb5Ro7BUnBuv6NQtT/kmVnczngiMEBhzgqz2UZYl5gArejsyERDSQ==} - '@vitest/snapshot@4.1.4': - resolution: {integrity: sha512-MCjCFgaS8aZz+m5nTcEcgk/xhWv0rEH4Yl53PPlMXOZ1/Ka2VcZU6CJ+MgYCZbcJvzGhQRjVrGQNZqkGPttIKw==} - '@vitest/snapshot@4.1.5': resolution: {integrity: sha512-zypXEt4KH/XgKGPUz4eC2AvErYx0My5hfL8oDb1HzGFpEk1P62bxSohdyOmvz+d9UJwanI68MKwr2EquOaOgMQ==} - '@vitest/spy@4.1.4': - resolution: {integrity: sha512-XxNdAsKW7C+FLydqFJLb5KhJtl3PGCMmYwFRfhvIgxJvLSXhhVI1zM8f1qD3Zg7RCjTSzDVyct6sghs9UEgBEQ==} - '@vitest/spy@4.1.5': resolution: {integrity: sha512-2lNOsh6+R2Idnf1TCZqSwYlKN2E/iDlD8sgU59kYVl+OMDmvldO1VDk39smRfpUNwYpNRVn3w4YfuC7KfbBnkQ==} - '@vitest/ui@4.1.4': - resolution: {integrity: sha512-EgFR7nlj5iTDYZYCvavjFokNYwr3c3ry0sFiCg+N7B233Nwp+NNx7eoF/XvMWDCKY71xXAG3kFkt97ZHBJVL8A==} - peerDependencies: - vitest: 4.1.4 - '@vitest/ui@4.1.5': resolution: {integrity: sha512-3Z9HNFiV0IF1fk0JPiK+7kE1GcaIPefQQIBYur6PM5yFIq6agys3uqP/0t966e1wXfmjbRCHDe7qW236Xjwnag==} peerDependencies: vitest: 4.1.5 - '@vitest/utils@4.1.4': - resolution: {integrity: sha512-13QMT+eysM5uVGa1rG4kegGYNp6cnQcsTc67ELFbhNLQO+vgsygtYJx2khvdt4gVQqSSpC/KT5FZZxUpP3Oatw==} - '@vitest/utils@4.1.5': resolution: {integrity: sha512-76wdkrmfXfqGjueGgnb45ITPyUi1ycZ4IHgC2bhPDUfWHklY/q3MdLOAB+TF1e6xfl8NxNY0ZYaPCFNWSsw3Ug==} @@ -2689,9 +2623,6 @@ packages: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} - ajv@6.14.0: - resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} - ajv@6.15.0: resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} @@ -3328,8 +3259,8 @@ packages: es-module-lexer@1.5.0: resolution: {integrity: sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==} - es-module-lexer@2.0.0: - resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==} + es-module-lexer@2.1.0: + resolution: {integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==} es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} @@ -3407,12 +3338,6 @@ packages: eslint-config-prettier: optional: true - eslint-plugin-react-hooks@7.1.0: - resolution: {integrity: sha512-LDicyhrRFrIaheDYryeM2W8gWyZXnAs4zIr2WVPiOSeTmIu2RjR4x/9N0xLaRWZ+9hssBDGo3AadcohuzAvSvg==} - engines: {node: '>=18'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0 - eslint-plugin-react-hooks@7.1.1: resolution: {integrity: sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==} engines: {node: '>=18'} @@ -3448,16 +3373,6 @@ packages: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@10.2.0: - resolution: {integrity: sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==} - engines: {node: ^20.19.0 || ^22.13.0 || >=24} - hasBin: true - peerDependencies: - jiti: '*' - peerDependenciesMeta: - jiti: - optional: true - eslint@10.3.0: resolution: {integrity: sha512-XbEXaRva5cF0ZQB8w6MluHA0kZZfV2DuCMJ3ozyEOHLwDpZX2Lmm/7Pp0xdJmI0GL1W05VH5VwIFHEm1Vcw2gw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} @@ -3769,8 +3684,8 @@ packages: resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} engines: {node: '>=18'} - globals@17.5.0: - resolution: {integrity: sha512-qoV+HK2yFl/366t2/Cb3+xxPUo5BuMynomoDmiaZBIdbs+0pYbjfZU+twLhGKp4uCZ/+NbtpVepH5bGCxRyy2g==} + globals@17.6.0: + resolution: {integrity: sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA==} engines: {node: '>=18'} globalthis@1.0.4: @@ -4382,8 +4297,8 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@11.3.5: - resolution: {integrity: sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==} + lru-cache@11.3.6: + resolution: {integrity: sha512-Gf/KoL3C/MlI7Bt0PGI9I+TeTC/I6r/csU58N4BSNc4lppLBeKsOdFYkK+dX0ABDUMJNfCHTyPpzwwO21Awd3A==} engines: {node: 20 || >=22} lru-cache@5.1.1: @@ -5084,8 +4999,8 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rolldown@1.0.0-rc.16: - resolution: {integrity: sha512-rzi5WqKzEZw3SooTt7cgm4eqIoujPIyGcJNGFL7iPEuajQw7vxMHUkXylu4/vhCkJGXsgRmxqMKXUpT6FEgl0g==} + rolldown@1.0.0-rc.17: + resolution: {integrity: sha512-ZrT53oAKrtA4+YtBWPQbtPOxIbVDbxT0orcYERKd63VJTF13zPcgXTvD4843L8pcsI7M6MErt8QtON6lrB9tyA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -5450,8 +5365,8 @@ packages: tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - tinyexec@1.1.1: - resolution: {integrity: sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==} + tinyexec@1.1.2: + resolution: {integrity: sha512-dAqSqE/RabpBKI8+h26GfLq6Vb3JVXs30XYQjdMjaj/c2tS8IYYMbIzP599KtRj7c57/wYApb3QjgRgXmrCukA==} engines: {node: '>=18'} tinyglobby@0.2.15: @@ -5700,13 +5615,13 @@ packages: peerDependencies: vite: '*' - vite@8.0.11: - resolution: {integrity: sha512-Jz1mxtUBR5xTT65VOdJZUUeoyLtqljmFkiUXhPTLZka3RDc9vpi/xXkyrnsdRcm2lIi3l3GPMnAidTsEGIj3Ow==} + vite@8.0.10: + resolution: {integrity: sha512-rZuUu9j6J5uotLDs+cAA4O5H4K1SfPliUlQwqa6YEwSrWDZzP4rhm00oJR5snMewjxF5V/K3D4kctsUTsIU9Mw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: '@types/node': ^20.19.0 || >=22.12.0 - '@vitejs/devtools': ^0.1.18 + '@vitejs/devtools': ^0.1.0 esbuild: ^0.27.0 || ^0.28.0 jiti: '>=1.21.0' less: ^4.0.0 @@ -5743,13 +5658,13 @@ packages: yaml: optional: true - vite@8.0.9: - resolution: {integrity: sha512-t7g7GVRpMXjNpa67HaVWI/8BWtdVIQPCL2WoozXXA7LBGEFK4AkkKkHx2hAQf5x1GZSlcmEDPkVLSGahxnEEZw==} + vite@8.0.11: + resolution: {integrity: sha512-Jz1mxtUBR5xTT65VOdJZUUeoyLtqljmFkiUXhPTLZka3RDc9vpi/xXkyrnsdRcm2lIi3l3GPMnAidTsEGIj3Ow==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: '@types/node': ^20.19.0 || >=22.12.0 - '@vitejs/devtools': ^0.1.0 + '@vitejs/devtools': ^0.1.18 esbuild: ^0.27.0 || ^0.28.0 jiti: '>=1.21.0' less: ^4.0.0 @@ -5786,47 +5701,6 @@ packages: yaml: optional: true - vitest@4.1.4: - resolution: {integrity: sha512-tFuJqTxKb8AvfyqMfnavXdzfy3h3sWZRWwfluGbkeR7n0HUev+FmNgZ8SDrRBTVrVCjgH5cA21qGbCffMNtWvg==} - engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@opentelemetry/api': ^1.9.0 - '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.1.4 - '@vitest/browser-preview': 4.1.4 - '@vitest/browser-webdriverio': 4.1.4 - '@vitest/coverage-istanbul': 4.1.4 - '@vitest/coverage-v8': 4.1.4 - '@vitest/ui': 4.1.4 - happy-dom: '*' - jsdom: '*' - vite: ^6.0.0 || ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@opentelemetry/api': - optional: true - '@types/node': - optional: true - '@vitest/browser-playwright': - optional: true - '@vitest/browser-preview': - optional: true - '@vitest/browser-webdriverio': - optional: true - '@vitest/coverage-istanbul': - optional: true - '@vitest/coverage-v8': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - vitest@4.1.5: resolution: {integrity: sha512-9Xx1v3/ih3m9hN+SbfkUyy0JAs72ap3r7joc87XL6jwF0jGg6mFBvQ1SrwaX+h8BlkX6Hz9shdd1uo6AF+ZGpg==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -6032,6 +5906,9 @@ packages: zod@3.25.76: resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + zod@4.4.3: + resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} + snapshots: '@ably/chat@1.3.1(ably@2.21.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': @@ -6567,7 +6444,7 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.29.0': {} + '@babel/compat-data@7.29.3': {} '@babel/core@7.29.0': dependencies: @@ -6576,7 +6453,7 @@ snapshots: '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) '@babel/helpers': 7.29.2 - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.3 '@babel/template': 7.28.6 '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 @@ -6591,7 +6468,7 @@ snapshots: '@babel/generator@7.29.1': dependencies: - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.3 '@babel/types': 7.29.0 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 @@ -6599,7 +6476,7 @@ snapshots: '@babel/helper-compilation-targets@7.28.6': dependencies: - '@babel/compat-data': 7.29.0 + '@babel/compat-data': 7.29.3 '@babel/helper-validator-option': 7.27.1 browserslist: 4.28.2 lru-cache: 5.1.1 @@ -6634,7 +6511,7 @@ snapshots: '@babel/template': 7.28.6 '@babel/types': 7.29.0 - '@babel/parser@7.29.2': + '@babel/parser@7.29.3': dependencies: '@babel/types': 7.29.0 @@ -6643,7 +6520,7 @@ snapshots: '@babel/template@7.28.6': dependencies: '@babel/code-frame': 7.29.0 - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.3 '@babel/types': 7.29.0 '@babel/traverse@7.29.0': @@ -6651,7 +6528,7 @@ snapshots: '@babel/code-frame': 7.29.0 '@babel/generator': 7.29.1 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.3 '@babel/template': 7.28.6 '@babel/types': 7.29.0 debug: 4.4.3(supports-color@8.1.1) @@ -6717,22 +6594,11 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/core@1.9.2': - dependencies: - '@emnapi/wasi-threads': 1.2.1 - tslib: 2.8.1 - optional: true - '@emnapi/runtime@1.10.0': dependencies: tslib: 2.8.1 optional: true - '@emnapi/runtime@1.9.2': - dependencies: - tslib: 2.8.1 - optional: true - '@emnapi/wasi-threads@1.2.1': dependencies: tslib: 2.8.1 @@ -6894,11 +6760,6 @@ snapshots: '@esbuild/win32-x64@0.27.7': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@10.2.0(jiti@2.6.1))': - dependencies: - eslint: 10.2.0(jiti@2.6.1) - eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.9.1(eslint@10.3.0(jiti@2.6.1))': dependencies: eslint: 10.3.0(jiti@2.6.1) @@ -6906,11 +6767,11 @@ snapshots: '@eslint-community/regexpp@4.12.2': {} - '@eslint/compat@2.0.5(eslint@10.2.0(jiti@2.6.1))': + '@eslint/compat@2.0.5(eslint@10.3.0(jiti@2.6.1))': dependencies: '@eslint/core': 1.2.1 optionalDependencies: - eslint: 10.2.0(jiti@2.6.1) + eslint: 10.3.0(jiti@2.6.1) '@eslint/config-array@0.23.5': dependencies: @@ -6928,10 +6789,6 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/js@10.0.1(eslint@10.2.0(jiti@2.6.1))': - optionalDependencies: - eslint: 10.2.0(jiti@2.6.1) - '@eslint/js@10.0.1(eslint@10.3.0(jiti@2.6.1))': optionalDependencies: eslint: 10.3.0(jiti@2.6.1) @@ -6949,11 +6806,6 @@ snapshots: dependencies: '@humanfs/types': 0.15.0 - '@humanfs/node@0.16.7': - dependencies: - '@humanfs/core': 0.19.2 - '@humanwhocodes/retry': 0.4.3 - '@humanfs/node@0.16.8': dependencies: '@humanfs/core': 0.19.2 @@ -7324,14 +7176,7 @@ snapshots: dependencies: '@emnapi/core': 1.10.0 '@emnapi/runtime': 1.10.0 - '@tybys/wasm-util': 0.10.1 - optional: true - - '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': - dependencies: - '@emnapi/core': 1.9.2 - '@emnapi/runtime': 1.9.2 - '@tybys/wasm-util': 0.10.1 + '@tybys/wasm-util': 0.10.2 optional: true '@nodelib/fs.scandir@2.1.5': @@ -7351,7 +7196,7 @@ snapshots: agent-base: 7.1.4 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 - lru-cache: 11.3.5 + lru-cache: 11.3.6 socks-proxy-agent: 8.0.5 transitivePeerDependencies: - supports-color @@ -7454,7 +7299,7 @@ snapshots: '@open-draft/until@2.1.0': {} - '@oxc-project/types@0.126.0': {} + '@oxc-project/types@0.127.0': {} '@oxc-project/types@0.128.0': {} @@ -7479,83 +7324,83 @@ snapshots: '@renovatebot/pep440@4.2.1': {} - '@rolldown/binding-android-arm64@1.0.0-rc.16': + '@rolldown/binding-android-arm64@1.0.0-rc.17': optional: true '@rolldown/binding-android-arm64@1.0.0-rc.18': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-rc.16': + '@rolldown/binding-darwin-arm64@1.0.0-rc.17': optional: true '@rolldown/binding-darwin-arm64@1.0.0-rc.18': optional: true - '@rolldown/binding-darwin-x64@1.0.0-rc.16': + '@rolldown/binding-darwin-x64@1.0.0-rc.17': optional: true '@rolldown/binding-darwin-x64@1.0.0-rc.18': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-rc.16': + '@rolldown/binding-freebsd-x64@1.0.0-rc.17': optional: true '@rolldown/binding-freebsd-x64@1.0.0-rc.18': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.16': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.17': optional: true '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.18': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.16': + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.17': optional: true '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.18': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.16': + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.17': optional: true '@rolldown/binding-linux-arm64-musl@1.0.0-rc.18': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.16': + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.17': optional: true '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.18': optional: true - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.16': + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.17': optional: true '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.18': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.16': + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.17': optional: true '@rolldown/binding-linux-x64-gnu@1.0.0-rc.18': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-rc.16': + '@rolldown/binding-linux-x64-musl@1.0.0-rc.17': optional: true '@rolldown/binding-linux-x64-musl@1.0.0-rc.18': optional: true - '@rolldown/binding-openharmony-arm64@1.0.0-rc.16': + '@rolldown/binding-openharmony-arm64@1.0.0-rc.17': optional: true '@rolldown/binding-openharmony-arm64@1.0.0-rc.18': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-rc.16': + '@rolldown/binding-wasm32-wasi@1.0.0-rc.17': dependencies: - '@emnapi/core': 1.9.2 - '@emnapi/runtime': 1.9.2 - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true '@rolldown/binding-wasm32-wasi@1.0.0-rc.18': @@ -7565,19 +7410,19 @@ snapshots: '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.16': + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.17': optional: true '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.18': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.16': + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.17': optional: true '@rolldown/binding-win32-x64-msvc@1.0.0-rc.18': optional: true - '@rolldown/pluginutils@1.0.0-rc.16': {} + '@rolldown/pluginutils@1.0.0-rc.17': {} '@rolldown/pluginutils@1.0.0-rc.18': {} @@ -8130,12 +7975,12 @@ snapshots: postcss: 8.5.14 tailwindcss: 4.2.4 - '@tailwindcss/vite@4.2.4(vite@8.0.11(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0))': + '@tailwindcss/vite@4.2.4(vite@8.0.10(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0))': dependencies: '@tailwindcss/node': 4.2.4 '@tailwindcss/oxide': 4.2.4 tailwindcss: 4.2.4 - vite: 8.0.11(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0) + vite: 8.0.10(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0) '@testing-library/dom@10.4.0': dependencies: @@ -8189,7 +8034,7 @@ snapshots: '@tufjs/canonical-json': 2.0.0 minimatch: 10.2.3 - '@tybys/wasm-util@0.10.1': + '@tybys/wasm-util@0.10.2': dependencies: tslib: 2.8.1 optional: true @@ -8290,22 +8135,6 @@ snapshots: dependencies: '@types/node': 25.6.0 - '@typescript-eslint/eslint-plugin@8.58.2(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.58.2 - '@typescript-eslint/type-utils': 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.58.2 - eslint: 10.2.0(jiti@2.6.1) - ignore: 7.0.5 - natural-compare: 1.4.0 - ts-api-utils: 2.5.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/eslint-plugin@8.59.2(@typescript-eslint/parser@8.59.2(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 @@ -8322,18 +8151,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.58.2 - '@typescript-eslint/types': 8.58.2 - '@typescript-eslint/typescript-estree': 8.58.2(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.58.2 - debug: 4.4.3(supports-color@8.1.1) - eslint: 10.2.0(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/parser@8.59.2(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.59.2 @@ -8382,18 +8199,6 @@ snapshots: dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@typescript-eslint/types': 8.58.2 - '@typescript-eslint/typescript-estree': 8.58.2(typescript@5.9.3) - '@typescript-eslint/utils': 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3) - debug: 4.4.3(supports-color@8.1.1) - eslint: 10.2.0(jiti@2.6.1) - ts-api-utils: 2.5.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/type-utils@8.59.2(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.59.2 @@ -8440,13 +8245,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.58.2(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0(jiti@2.6.1)) '@typescript-eslint/scope-manager': 8.58.2 '@typescript-eslint/types': 8.58.2 '@typescript-eslint/typescript-estree': 8.58.2(typescript@5.9.3) - eslint: 10.2.0(jiti@2.6.1) + eslint: 10.3.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -8544,20 +8349,15 @@ snapshots: json-schema-to-ts: 1.6.4 ts-morph: 12.0.0 - '@vitejs/plugin-react@6.0.1(vite@8.0.11(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0))': - dependencies: - '@rolldown/pluginutils': 1.0.0-rc.7 - vite: 8.0.11(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0) - - '@vitejs/plugin-react@6.0.1(vite@8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0))': + '@vitejs/plugin-react@6.0.1(vite@8.0.10(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0))': dependencies: '@rolldown/pluginutils': 1.0.0-rc.7 - vite: 8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0) + vite: 8.0.10(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0) - '@vitest/coverage-v8@4.1.4(vitest@4.1.4)': + '@vitest/coverage-v8@4.1.5(vitest@4.1.5)': dependencies: '@bcoe/v8-coverage': 1.0.2 - '@vitest/utils': 4.1.4 + '@vitest/utils': 4.1.5 ast-v8-to-istanbul: 1.0.0 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 @@ -8566,29 +8366,20 @@ snapshots: obug: 2.1.1 std-env: 4.1.0 tinyrainbow: 3.1.0 - vitest: 4.1.4(@edge-runtime/vm@3.2.0)(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(jsdom@26.1.0)(vite@8.0.11(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)) + vitest: 4.1.5(@edge-runtime/vm@3.2.0)(@types/node@25.6.0)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)) - '@vitest/eslint-plugin@1.6.16(@typescript-eslint/eslint-plugin@8.58.2(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3)(vitest@4.1.4)': + '@vitest/eslint-plugin@1.6.16(@typescript-eslint/eslint-plugin@8.59.2(@typescript-eslint/parser@8.59.2(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3)(vitest@4.1.5)': dependencies: '@typescript-eslint/scope-manager': 8.58.2 - '@typescript-eslint/utils': 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 10.2.0(jiti@2.6.1) + '@typescript-eslint/utils': 8.58.2(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 10.3.0(jiti@2.6.1) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.58.2(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.59.2(@typescript-eslint/parser@8.59.2(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3) typescript: 5.9.3 - vitest: 4.1.4(@edge-runtime/vm@3.2.0)(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(jsdom@26.1.0)(vite@8.0.11(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)) + vitest: 4.1.5(@edge-runtime/vm@3.2.0)(@types/node@25.6.0)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.11(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)) transitivePeerDependencies: - supports-color - '@vitest/expect@4.1.4': - dependencies: - '@standard-schema/spec': 1.1.0 - '@types/chai': 5.2.3 - '@vitest/spy': 4.1.4 - '@vitest/utils': 4.1.4 - chai: 6.2.2 - tinyrainbow: 3.1.0 - '@vitest/expect@4.1.5': dependencies: '@standard-schema/spec': 1.1.0 @@ -8598,47 +8389,31 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.4(vite@8.0.11(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0))': + '@vitest/mocker@4.1.5(vite@8.0.10(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0))': dependencies: - '@vitest/spy': 4.1.4 + '@vitest/spy': 4.1.5 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.0.11(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0) + vite: 8.0.10(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0) - '@vitest/mocker@4.1.5(vite@8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0))': + '@vitest/mocker@4.1.5(vite@8.0.11(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0))': dependencies: '@vitest/spy': 4.1.5 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0) - - '@vitest/pretty-format@4.1.4': - dependencies: - tinyrainbow: 3.1.0 + vite: 8.0.11(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0) '@vitest/pretty-format@4.1.5': dependencies: tinyrainbow: 3.1.0 - '@vitest/runner@4.1.4': - dependencies: - '@vitest/utils': 4.1.4 - pathe: 2.0.3 - '@vitest/runner@4.1.5': dependencies: '@vitest/utils': 4.1.5 pathe: 2.0.3 - '@vitest/snapshot@4.1.4': - dependencies: - '@vitest/pretty-format': 4.1.4 - '@vitest/utils': 4.1.4 - magic-string: 0.30.21 - pathe: 2.0.3 - '@vitest/snapshot@4.1.5': dependencies: '@vitest/pretty-format': 4.1.5 @@ -8646,21 +8421,8 @@ snapshots: magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@4.1.4': {} - '@vitest/spy@4.1.5': {} - '@vitest/ui@4.1.4(vitest@4.1.4)': - dependencies: - '@vitest/utils': 4.1.4 - fflate: 0.8.2 - flatted: 3.4.2 - pathe: 2.0.3 - sirv: 3.0.2 - tinyglobby: 0.2.16 - tinyrainbow: 3.1.0 - vitest: 4.1.4(@edge-runtime/vm@3.2.0)(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(jsdom@26.1.0)(vite@8.0.11(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)) - '@vitest/ui@4.1.5(vitest@4.1.5)': dependencies: '@vitest/utils': 4.1.5 @@ -8670,13 +8432,7 @@ snapshots: sirv: 3.0.2 tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vitest: 4.1.5(@edge-runtime/vm@3.2.0)(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)) - - '@vitest/utils@4.1.4': - dependencies: - '@vitest/pretty-format': 4.1.4 - convert-source-map: 2.0.0 - tinyrainbow: 3.1.0 + vitest: 4.1.5(@edge-runtime/vm@3.2.0)(@types/node@25.6.0)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)) '@vitest/utils@4.1.5': dependencies: @@ -8733,13 +8489,6 @@ snapshots: agent-base@7.1.4: {} - ajv@6.14.0: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - ajv@6.15.0: dependencies: fast-deep-equal: 3.1.3 @@ -8984,7 +8733,7 @@ snapshots: '@npmcli/fs': 5.0.0 fs-minipass: 3.0.3 glob: 13.0.6 - lru-cache: 11.3.5 + lru-cache: 11.3.6 minipass: 7.1.3 minipass-collect: 2.0.1 minipass-flush: 1.0.7 @@ -9460,7 +9209,7 @@ snapshots: es-module-lexer@1.5.0: {} - es-module-lexer@2.0.0: {} + es-module-lexer@2.1.0: {} es-object-atoms@1.1.1: dependencies: @@ -9547,28 +9296,28 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-compat-utils@0.5.1(eslint@10.2.0(jiti@2.6.1)): + eslint-compat-utils@0.5.1(eslint@10.3.0(jiti@2.6.1)): dependencies: - eslint: 10.2.0(jiti@2.6.1) + eslint: 10.3.0(jiti@2.6.1) semver: 7.7.4 - eslint-config-prettier@10.1.8(eslint@10.2.0(jiti@2.6.1)): + eslint-config-prettier@10.1.8(eslint@10.3.0(jiti@2.6.1)): dependencies: - eslint: 10.2.0(jiti@2.6.1) + eslint: 10.3.0(jiti@2.6.1) - eslint-plugin-es-x@7.8.0(eslint@10.2.0(jiti@2.6.1)): + eslint-plugin-es-x@7.8.0(eslint@10.3.0(jiti@2.6.1)): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.2 - eslint: 10.2.0(jiti@2.6.1) - eslint-compat-utils: 0.5.1(eslint@10.2.0(jiti@2.6.1)) + eslint: 10.3.0(jiti@2.6.1) + eslint-compat-utils: 0.5.1(eslint@10.3.0(jiti@2.6.1)) - eslint-plugin-n@17.24.0(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-n@17.24.0(eslint@10.3.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0(jiti@2.6.1)) enhanced-resolve: 5.18.1 - eslint: 10.2.0(jiti@2.6.1) - eslint-plugin-es-x: 7.8.0(eslint@10.2.0(jiti@2.6.1)) + eslint: 10.3.0(jiti@2.6.1) + eslint-plugin-es-x: 7.8.0(eslint@10.3.0(jiti@2.6.1)) get-tsconfig: 4.13.7 globals: 15.15.0 globrex: 0.1.2 @@ -9578,34 +9327,23 @@ snapshots: transitivePeerDependencies: - typescript - eslint-plugin-prettier@5.5.5(eslint-config-prettier@10.1.8(eslint@10.2.0(jiti@2.6.1)))(eslint@10.2.0(jiti@2.6.1))(prettier@3.8.3): + eslint-plugin-prettier@5.5.5(eslint-config-prettier@10.1.8(eslint@10.3.0(jiti@2.6.1)))(eslint@10.3.0(jiti@2.6.1))(prettier@3.8.3): dependencies: - eslint: 10.2.0(jiti@2.6.1) + eslint: 10.3.0(jiti@2.6.1) prettier: 3.8.3 prettier-linter-helpers: 1.0.1 synckit: 0.11.12 optionalDependencies: - eslint-config-prettier: 10.1.8(eslint@10.2.0(jiti@2.6.1)) - - eslint-plugin-react-hooks@7.1.0(eslint@10.2.0(jiti@2.6.1)): - dependencies: - '@babel/core': 7.29.0 - '@babel/parser': 7.29.2 - eslint: 10.2.0(jiti@2.6.1) - hermes-parser: 0.25.1 - zod: 3.25.76 - zod-validation-error: 4.0.2(zod@3.25.76) - transitivePeerDependencies: - - supports-color + eslint-config-prettier: 10.1.8(eslint@10.3.0(jiti@2.6.1)) eslint-plugin-react-hooks@7.1.1(eslint@10.3.0(jiti@2.6.1)): dependencies: '@babel/core': 7.29.0 - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.3 eslint: 10.3.0(jiti@2.6.1) hermes-parser: 0.25.1 - zod: 3.25.76 - zod-validation-error: 4.0.2(zod@3.25.76) + zod: 4.4.3 + zod-validation-error: 4.0.2(zod@4.4.3) transitivePeerDependencies: - supports-color @@ -9635,17 +9373,17 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-unicorn@64.0.0(eslint@10.2.0(jiti@2.6.1)): + eslint-plugin-unicorn@64.0.0(eslint@10.3.0(jiti@2.6.1)): dependencies: '@babel/helper-validator-identifier': 7.28.5 - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0(jiti@2.6.1)) change-case: 5.4.4 ci-info: 4.4.0 clean-regexp: 1.0.0 core-js-compat: 3.49.0 - eslint: 10.2.0(jiti@2.6.1) + eslint: 10.3.0(jiti@2.6.1) find-up-simple: 1.0.1 - globals: 17.5.0 + globals: 17.6.0 indent-string: 5.0.0 is-builtin-module: 5.0.0 jsesc: 3.1.0 @@ -9666,43 +9404,6 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.2.0(jiti@2.6.1): - dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.0(jiti@2.6.1)) - '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.23.5 - '@eslint/config-helpers': 0.5.5 - '@eslint/core': 1.2.1 - '@eslint/plugin-kit': 0.7.1 - '@humanfs/node': 0.16.7 - '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.8 - ajv: 6.14.0 - cross-spawn: 7.0.6 - debug: 4.4.3(supports-color@8.1.1) - escape-string-regexp: 4.0.0 - eslint-scope: 9.1.2 - eslint-visitor-keys: 5.0.1 - espree: 11.2.0 - esquery: 1.7.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 8.0.0 - find-up: 5.0.0 - glob-parent: 6.0.2 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - json-stable-stringify-without-jsonify: 1.0.1 - minimatch: 10.2.5 - natural-compare: 1.4.0 - optionator: 0.9.4 - optionalDependencies: - jiti: 2.6.1 - transitivePeerDependencies: - - supports-color - eslint@10.3.0(jiti@2.6.1): dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0(jiti@2.6.1)) @@ -10064,7 +9765,7 @@ snapshots: globals@15.15.0: {} - globals@17.5.0: {} + globals@17.6.0: {} globalthis@1.0.4: dependencies: @@ -10688,7 +10389,7 @@ snapshots: lru-cache@10.4.3: {} - lru-cache@11.3.5: {} + lru-cache@11.3.6: {} lru-cache@5.1.1: dependencies: @@ -10706,7 +10407,7 @@ snapshots: magicast@0.5.2: dependencies: - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.3 '@babel/types': 7.29.0 source-map-js: 1.2.1 @@ -11138,7 +10839,7 @@ snapshots: path-scurry@2.0.2: dependencies: - lru-cache: 11.3.5 + lru-cache: 11.3.6 minipass: 7.1.3 path-to-regexp@3.3.0: {} @@ -11371,26 +11072,26 @@ snapshots: reusify@1.1.0: {} - rolldown@1.0.0-rc.16: + rolldown@1.0.0-rc.17: dependencies: - '@oxc-project/types': 0.126.0 - '@rolldown/pluginutils': 1.0.0-rc.16 + '@oxc-project/types': 0.127.0 + '@rolldown/pluginutils': 1.0.0-rc.17 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-rc.16 - '@rolldown/binding-darwin-arm64': 1.0.0-rc.16 - '@rolldown/binding-darwin-x64': 1.0.0-rc.16 - '@rolldown/binding-freebsd-x64': 1.0.0-rc.16 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.16 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.16 - '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.16 - '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.16 - '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.16 - '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.16 - '@rolldown/binding-linux-x64-musl': 1.0.0-rc.16 - '@rolldown/binding-openharmony-arm64': 1.0.0-rc.16 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.16 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.16 - '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.16 + '@rolldown/binding-android-arm64': 1.0.0-rc.17 + '@rolldown/binding-darwin-arm64': 1.0.0-rc.17 + '@rolldown/binding-darwin-x64': 1.0.0-rc.17 + '@rolldown/binding-freebsd-x64': 1.0.0-rc.17 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.17 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.17 + '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.17 + '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.17 + '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.17 + '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.17 + '@rolldown/binding-linux-x64-musl': 1.0.0-rc.17 + '@rolldown/binding-openharmony-arm64': 1.0.0-rc.17 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.17 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.17 + '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.17 rolldown@1.0.0-rc.18: dependencies: @@ -11855,7 +11556,7 @@ snapshots: tinyexec@0.3.2: {} - tinyexec@1.1.1: {} + tinyexec@1.1.2: {} tinyglobby@0.2.15: dependencies: @@ -12107,22 +11808,22 @@ snapshots: vary@1.1.2: {} - vite-tsconfig-paths@6.1.1(typescript@5.9.3)(vite@8.0.11(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)): + vite-tsconfig-paths@6.1.1(typescript@5.9.3)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)): dependencies: debug: 4.4.3(supports-color@8.1.1) globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.9.3) - vite: 8.0.11(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0) + vite: 8.0.10(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0) transitivePeerDependencies: - supports-color - typescript - vite@8.0.11(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0): + vite@8.0.10(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 postcss: 8.5.14 - rolldown: 1.0.0-rc.18 + rolldown: 1.0.0-rc.17 tinyglobby: 0.2.16 optionalDependencies: '@types/node': 25.6.0 @@ -12131,12 +11832,12 @@ snapshots: jiti: 2.6.1 tsx: 4.21.0 - vite@8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0): + vite@8.0.11(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 postcss: 8.5.14 - rolldown: 1.0.0-rc.16 + rolldown: 1.0.0-rc.18 tinyglobby: 0.2.16 optionalDependencies: '@types/node': 25.6.0 @@ -12145,16 +11846,16 @@ snapshots: jiti: 2.6.1 tsx: 4.21.0 - vitest@4.1.4(@edge-runtime/vm@3.2.0)(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(jsdom@26.1.0)(vite@8.0.11(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)): + vitest@4.1.5(@edge-runtime/vm@3.2.0)(@types/node@25.6.0)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)): dependencies: - '@vitest/expect': 4.1.4 - '@vitest/mocker': 4.1.4(vite@8.0.11(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)) - '@vitest/pretty-format': 4.1.4 - '@vitest/runner': 4.1.4 - '@vitest/snapshot': 4.1.4 - '@vitest/spy': 4.1.4 - '@vitest/utils': 4.1.4 - es-module-lexer: 2.0.0 + '@vitest/expect': 4.1.5 + '@vitest/mocker': 4.1.5(vite@8.0.10(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)) + '@vitest/pretty-format': 4.1.5 + '@vitest/runner': 4.1.5 + '@vitest/snapshot': 4.1.5 + '@vitest/spy': 4.1.5 + '@vitest/utils': 4.1.5 + es-module-lexer: 2.1.0 expect-type: 1.3.0 magic-string: 0.30.21 obug: 2.1.1 @@ -12162,30 +11863,30 @@ snapshots: picomatch: 4.0.4 std-env: 4.1.0 tinybench: 2.9.0 - tinyexec: 1.1.1 + tinyexec: 1.1.2 tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vite: 8.0.11(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0) + vite: 8.0.10(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0) why-is-node-running: 2.3.0 optionalDependencies: '@edge-runtime/vm': 3.2.0 '@types/node': 25.6.0 - '@vitest/coverage-v8': 4.1.4(vitest@4.1.4) - '@vitest/ui': 4.1.4(vitest@4.1.4) + '@vitest/coverage-v8': 4.1.5(vitest@4.1.5) + '@vitest/ui': 4.1.5(vitest@4.1.5) jsdom: 26.1.0 transitivePeerDependencies: - msw - vitest@4.1.5(@edge-runtime/vm@3.2.0)(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)): + vitest@4.1.5(@edge-runtime/vm@3.2.0)(@types/node@25.6.0)(@vitest/coverage-v8@4.1.5)(@vitest/ui@4.1.5)(jsdom@26.1.0)(vite@8.0.11(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)): dependencies: '@vitest/expect': 4.1.5 - '@vitest/mocker': 4.1.5(vite@8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)) + '@vitest/mocker': 4.1.5(vite@8.0.11(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)) '@vitest/pretty-format': 4.1.5 '@vitest/runner': 4.1.5 '@vitest/snapshot': 4.1.5 '@vitest/spy': 4.1.5 '@vitest/utils': 4.1.5 - es-module-lexer: 2.0.0 + es-module-lexer: 2.1.0 expect-type: 1.3.0 magic-string: 0.30.21 obug: 2.1.1 @@ -12193,15 +11894,15 @@ snapshots: picomatch: 4.0.4 std-env: 4.1.0 tinybench: 2.9.0 - tinyexec: 1.1.1 + tinyexec: 1.1.2 tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vite: 8.0.9(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0) + vite: 8.0.11(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0) why-is-node-running: 2.3.0 optionalDependencies: '@edge-runtime/vm': 3.2.0 '@types/node': 25.6.0 - '@vitest/coverage-v8': 4.1.4(vitest@4.1.4) + '@vitest/coverage-v8': 4.1.5(vitest@4.1.5) '@vitest/ui': 4.1.5(vitest@4.1.5) jsdom: 26.1.0 transitivePeerDependencies: @@ -12361,10 +12062,12 @@ snapshots: yoctocolors@2.1.2: {} - zod-validation-error@4.0.2(zod@3.25.76): + zod-validation-error@4.0.2(zod@4.4.3): dependencies: - zod: 3.25.76 + zod: 4.4.3 zod@3.22.4: {} zod@3.25.76: {} + + zod@4.4.3: {} diff --git a/src/base-command.ts b/src/base-command.ts index 1495d8cec..f6a0779c1 100644 --- a/src/base-command.ts +++ b/src/base-command.ts @@ -442,7 +442,7 @@ export abstract class AblyBaseCommand extends InteractiveBaseCommand { if (mock) { // Return mock as appropriate type - return mock as unknown as Ably.Rest | Ably.Realtime; + return mock; } this.fail( @@ -890,8 +890,8 @@ export abstract class AblyBaseCommand extends InteractiveBaseCommand { const suppressCompleted = this.argv.includes("--skip-completed-status"); if (isJsonMode && !suppressCompleted) { const flags: BaseFlags = this.argv.includes("--pretty-json") - ? ({ "pretty-json": true } as BaseFlags) - : ({ json: true } as BaseFlags); + ? { "pretty-json": true } + : { json: true }; const exitCode = err ? 1 : 0; this.log( this.formatJsonRecord( diff --git a/src/chat-base-command.ts b/src/chat-base-command.ts index eda40b9b1..7e416616a 100644 --- a/src/chat-base-command.ts +++ b/src/chat-base-command.ts @@ -130,15 +130,15 @@ export abstract class ChatBaseCommand extends AblyBaseCommand { switch (statusChange.current) { case RoomStatus.Attached: { if (options.successMessage) { - this.logSuccessMessage(options.successMessage, flags as BaseFlags); + this.logSuccessMessage(options.successMessage, flags); } if (options.listeningMessage) { - this.logListening(options.listeningMessage, flags as BaseFlags); + this.logListening(options.listeningMessage, flags); } break; } case RoomStatus.Detached: { - this.logWarning("Disconnected from Ably", flags as BaseFlags); + this.logWarning("Disconnected from Ably", flags); break; } case RoomStatus.Failed: { diff --git a/src/commands/bench/subscriber.ts b/src/commands/bench/subscriber.ts index ee88bf037..ff98b09e7 100644 --- a/src/commands/bench/subscriber.ts +++ b/src/commands/bench/subscriber.ts @@ -3,7 +3,7 @@ import * as Ably from "ably"; import chalk from "chalk"; import Table from "cli-table3"; -import { AblyBaseCommand, type BaseFlags } from "../../base-command.js"; +import { AblyBaseCommand } from "../../base-command.js"; import { clientIdFlag, durationFlag, productApiFlags } from "../../flags.js"; import { formatHeading, formatResource } from "../../utils/output.js"; import type { BenchMessageData, BenchPresenceData } from "../../types/bench.js"; @@ -790,7 +790,7 @@ export default class BenchSubscriber extends AblyBaseCommand { ): Promise { // Wait until the user interrupts or the optional duration elapses const exitReason = await this.waitAndTrackCleanup( - flags as BaseFlags, + flags, "benchSubscriber", flags.duration as number | undefined, ); diff --git a/src/commands/channels/batch-publish.ts b/src/commands/channels/batch-publish.ts index 0b3b6ceae..63e2e01bb 100644 --- a/src/commands/channels/batch-publish.ts +++ b/src/commands/channels/batch-publish.ts @@ -14,12 +14,6 @@ interface BatchMessage { [key: string]: unknown; } -interface BatchContent { - channels: string | string[]; - messages: BatchMessage; - [key: string]: unknown; -} - interface BatchResponseItem { channel: string; messageId?: string; @@ -195,7 +189,7 @@ export default class ChannelsBatchPublish extends AblyBaseCommand { batchContent = { channels, messages: message, - } as BatchContent; + }; } if (!this.shouldSuppressOutput(flags)) { diff --git a/src/commands/channels/delete.ts b/src/commands/channels/delete.ts index 8f170800c..4f9f95d0c 100644 --- a/src/commands/channels/delete.ts +++ b/src/commands/channels/delete.ts @@ -55,10 +55,7 @@ export default class ChannelsDelete extends AblyBaseCommand { ? { description: flags.description } : undefined; - const result = await channel.deleteMessage( - message as Ably.Message, - operation, - ); + const result = await channel.deleteMessage(message, operation); const versionSerial = result.versionSerial; diff --git a/src/commands/channels/publish.ts b/src/commands/channels/publish.ts index ae865fbc3..3eea3b98c 100644 --- a/src/commands/channels/publish.ts +++ b/src/commands/channels/publish.ts @@ -4,7 +4,6 @@ import chalk from "chalk"; import { AblyBaseCommand } from "../../base-command.js"; import { clientIdFlag, productApiFlags } from "../../flags.js"; -import { BaseFlags } from "../../types/cli.js"; import { errorMessage, extractErrorInfo } from "../../utils/errors.js"; import { prepareMessageFromInput } from "../../utils/message.js"; import { formatResource } from "../../utils/output.js"; @@ -289,11 +288,11 @@ export default class ChannelsPublish extends AblyBaseCommand { flags: Record, ): Promise { try { - this.realtime = await this.createAblyRealtimeClient(flags as BaseFlags); + this.realtime = await this.createAblyRealtimeClient(flags); if (!this.realtime) { this.fail( "Failed to create Ably client. Please check your API key and try again.", - flags as BaseFlags, + flags, "channelPublish", ); } @@ -332,7 +331,7 @@ export default class ChannelsPublish extends AblyBaseCommand { return channel.publish(msg); }); } catch (error) { - this.fail(error, flags as BaseFlags, "channelPublish"); + this.fail(error, flags, "channelPublish"); } // Client cleanup is handled by command finally() method } @@ -343,7 +342,7 @@ export default class ChannelsPublish extends AblyBaseCommand { ): Promise { try { // Create REST client - const rest = await this.createAblyRestClient(flags as BaseFlags); + const rest = await this.createAblyRestClient(flags); if (!rest) { return; } @@ -360,7 +359,7 @@ export default class ChannelsPublish extends AblyBaseCommand { return channel.publish(msg); }); } catch (error) { - this.fail(error, flags as BaseFlags, "channelPublish"); + this.fail(error, flags, "channelPublish"); } // No finally block needed here as REST client doesn't maintain a connection } diff --git a/src/commands/env.ts b/src/commands/env.ts index b100083ba..28631e84b 100644 --- a/src/commands/env.ts +++ b/src/commands/env.ts @@ -4,7 +4,6 @@ import pkg from "fast-levenshtein"; import { AblyBaseCommand } from "../base-command.js"; import { ENV_VARS_DATA } from "../data/env-vars.js"; import { coreGlobalFlags } from "../flags.js"; -import { BaseFlags } from "../types/cli.js"; import { getEnvVarSummaries, renderMinimalReference, @@ -59,13 +58,13 @@ export default class EnvCommand extends AblyBaseCommand { : "Run `ably env` to see all supported variables."; this.fail( `Unknown environment variable: ${args.envVarName}. ${hint}`, - flags as BaseFlags, + flags, "env", ); } if (this.shouldOutputJson(flags)) { - this.logJsonResult({ envVar: match }, flags as BaseFlags); + this.logJsonResult({ envVar: match }, flags); return; } @@ -80,7 +79,7 @@ export default class EnvCommand extends AblyBaseCommand { crossCutting: ENV_VARS_DATA.crossCutting, relatedLinks: ENV_VARS_DATA.relatedLinks, }, - flags as BaseFlags, + flags, ); return; } diff --git a/src/commands/interactive.ts b/src/commands/interactive.ts index ff79830cc..4d1b89a93 100644 --- a/src/commands/interactive.ts +++ b/src/commands/interactive.ts @@ -911,13 +911,7 @@ export default class Interactive extends Command { const manifestCommand = this._manifestCache.commands[commandId]; if (manifestCommand?.flags) { for (const [name, flag] of Object.entries(manifestCommand.flags)) { - const flagDef = flag as { - name: string; - char?: string; - description?: string; - type?: string; - hidden?: boolean; - }; + const flagDef = flag; // Skip hidden flags unless in dev mode if (flagDef.hidden && process.env.ABLY_SHOW_DEV_FLAGS !== "true") { continue; @@ -995,13 +989,7 @@ export default class Interactive extends Command { if (manifestCommand?.flags) { // Find flag by name or char for (const [name, flag] of Object.entries(manifestCommand.flags)) { - const flagDef = flag as { - name: string; - char?: string; - description?: string; - type?: string; - hidden?: boolean; - }; + const flagDef = flag; if ( name === flagName || (flagDef.char && flagDef.char === flagName) diff --git a/src/commands/push/batch-publish.ts b/src/commands/push/batch-publish.ts index 5d9fe7d77..a646e01e8 100644 --- a/src/commands/push/batch-publish.ts +++ b/src/commands/push/batch-publish.ts @@ -6,7 +6,6 @@ import { AblyBaseCommand } from "../../base-command.js"; import { CommandError } from "../../errors/command-error.js"; import { forceFlag, productApiFlags } from "../../flags.js"; import { promptForConfirmation } from "../../utils/prompt-confirmation.js"; -import { BaseFlags } from "../../types/cli.js"; import { prepareMessageFromInput } from "../../utils/message.js"; import { formatCountLabel, formatResource } from "../../utils/output.js"; @@ -92,7 +91,7 @@ export default class PushBatchPublish extends AblyBaseCommand { const { args, flags } = await this.parse(PushBatchPublish); try { - const rest = await this.createAblyRestClient(flags as BaseFlags); + const rest = await this.createAblyRestClient(flags); if (!rest) return; let jsonString: string; @@ -102,7 +101,7 @@ export default class PushBatchPublish extends AblyBaseCommand { if (process.stdin.isTTY) { this.fail( 'Missing PAYLOAD. Provide a JSON array, a file path, or "-" to read from stdin.', - flags as BaseFlags, + flags, "pushBatchPublish", ); } @@ -112,11 +111,7 @@ export default class PushBatchPublish extends AblyBaseCommand { } else if (payloadArg.startsWith("@")) { const filePath = path.resolve(payloadArg.slice(1)); if (!fs.existsSync(filePath)) { - this.fail( - `File not found: ${filePath}`, - flags as BaseFlags, - "pushBatchPublish", - ); + this.fail(`File not found: ${filePath}`, flags, "pushBatchPublish"); } jsonString = fs.readFileSync(filePath, "utf8"); } else if ( @@ -126,11 +121,7 @@ export default class PushBatchPublish extends AblyBaseCommand { ) { const filePath = path.resolve(payloadArg); if (!fs.existsSync(filePath)) { - this.fail( - `File not found: ${filePath}`, - flags as BaseFlags, - "pushBatchPublish", - ); + this.fail(`File not found: ${filePath}`, flags, "pushBatchPublish"); } jsonString = fs.readFileSync(filePath, "utf8"); } else if (fs.existsSync(path.resolve(payloadArg))) { @@ -145,23 +136,19 @@ export default class PushBatchPublish extends AblyBaseCommand { } catch { this.fail( "Payload must be a valid JSON array", - flags as BaseFlags, + flags, "pushBatchPublish", ); } if (!Array.isArray(batchPayload)) { - this.fail( - "Payload must be a JSON array", - flags as BaseFlags, - "pushBatchPublish", - ); + this.fail("Payload must be a JSON array", flags, "pushBatchPublish"); } if (batchPayload.length > 10000) { this.fail( "Batch payload cannot exceed 10,000 items", - flags as BaseFlags, + flags, "pushBatchPublish", ); } @@ -185,7 +172,7 @@ export default class PushBatchPublish extends AblyBaseCommand { if (!itemPayload?.notification && !itemPayload?.data) { this.fail( `Item at index ${index} must have a "payload.notification" or "payload.data" field`, - flags as BaseFlags, + flags, "pushBatchPublish", ); } @@ -204,14 +191,14 @@ export default class PushBatchPublish extends AblyBaseCommand { } else { this.fail( `Item at index ${index} has an invalid "channels" field; expected a non-empty string or array of non-empty strings`, - flags as BaseFlags, + flags, "pushBatchPublish", ); } } else { this.fail( `Item at index ${index} must have a "recipient" or "channels" field`, - flags as BaseFlags, + flags, "pushBatchPublish", ); } @@ -256,7 +243,7 @@ export default class PushBatchPublish extends AblyBaseCommand { if (entry.message !== undefined) { this.logWarning( `Item at index ${originalIndex}: "message" is not applicable for recipient-based push and will be ignored`, - flags as BaseFlags, + flags, ); const sanitized = { ...entry }; delete sanitized.message; @@ -272,7 +259,7 @@ export default class PushBatchPublish extends AblyBaseCommand { response, "Batch push publish failed", ), - flags as BaseFlags, + flags, "pushBatchPublish", ); } @@ -299,9 +286,11 @@ export default class PushBatchPublish extends AblyBaseCommand { typeof error?.message === "string" ? error.message : "Unknown error"; - const code = error?.code - ? ` (code: ${String(error.code as string | number)})` - : ""; + const codeVal = error?.code; + const code = + typeof codeVal === "string" || typeof codeVal === "number" + ? ` (code: ${codeVal})` + : ""; failedDetails.push(` Failed: ${message}${code}`); failedItems.push({ ...item, originalIndex }); } @@ -329,7 +318,7 @@ export default class PushBatchPublish extends AblyBaseCommand { ) { this.fail( `Item at index ${originalIndex}: message must not include extras.push; use the payload field to specify push content`, - flags as BaseFlags, + flags, "pushBatchPublish", ); } @@ -395,7 +384,7 @@ export default class PushBatchPublish extends AblyBaseCommand { response, "Batch channel publish failed", ), - flags as BaseFlags, + flags, "pushBatchPublish", ); } @@ -456,7 +445,7 @@ export default class PushBatchPublish extends AblyBaseCommand { ); } } catch (error) { - this.fail(error, flags as BaseFlags, "pushBatchPublish"); + this.fail(error, flags, "pushBatchPublish"); } } diff --git a/src/commands/push/channels/list-channels.ts b/src/commands/push/channels/list-channels.ts index b9ddbf83a..faa93f953 100644 --- a/src/commands/push/channels/list-channels.ts +++ b/src/commands/push/channels/list-channels.ts @@ -2,7 +2,6 @@ import { Flags } from "@oclif/core"; import { AblyBaseCommand } from "../../../base-command.js"; import { productApiFlags } from "../../../flags.js"; -import { BaseFlags } from "../../../types/cli.js"; import { formatCountLabel, formatLimitWarning, @@ -36,7 +35,7 @@ export default class PushChannelsListChannels extends AblyBaseCommand { const { flags } = await this.parse(PushChannelsListChannels); try { - const rest = await this.createAblyRestClient(flags as BaseFlags); + const rest = await this.createAblyRestClient(flags); if (!rest) return; this.logProgress("Fetching channels with push subscriptions", flags); @@ -89,7 +88,7 @@ export default class PushChannelsListChannels extends AblyBaseCommand { if (limitWarning) this.logToStderr(limitWarning); } } catch (error) { - this.fail(error, flags as BaseFlags, "pushChannelListChannels"); + this.fail(error, flags, "pushChannelListChannels"); } } } diff --git a/src/commands/push/channels/list.ts b/src/commands/push/channels/list.ts index a3e875daf..9cbdafb3b 100644 --- a/src/commands/push/channels/list.ts +++ b/src/commands/push/channels/list.ts @@ -2,7 +2,6 @@ import { Args, Flags } from "@oclif/core"; import { AblyBaseCommand } from "../../../base-command.js"; import { productApiFlags } from "../../../flags.js"; -import { BaseFlags } from "../../../types/cli.js"; import { formatClientId, formatCountLabel, @@ -52,7 +51,7 @@ export default class PushChannelsList extends AblyBaseCommand { const { args, flags } = await this.parse(PushChannelsList); try { - const rest = await this.createAblyRestClient(flags as BaseFlags); + const rest = await this.createAblyRestClient(flags); if (!rest) return; this.logProgress( @@ -125,7 +124,7 @@ export default class PushChannelsList extends AblyBaseCommand { if (limitWarning) this.logToStderr(limitWarning); } } catch (error) { - this.fail(error, flags as BaseFlags, "pushChannelList"); + this.fail(error, flags, "pushChannelList"); } } } diff --git a/src/commands/push/channels/remove-where.ts b/src/commands/push/channels/remove-where.ts index 842b177ac..170110cc6 100644 --- a/src/commands/push/channels/remove-where.ts +++ b/src/commands/push/channels/remove-where.ts @@ -2,7 +2,6 @@ import { Args, Flags } from "@oclif/core"; import { AblyBaseCommand } from "../../../base-command.js"; import { forceFlag, productApiFlags } from "../../../flags.js"; -import { BaseFlags } from "../../../types/cli.js"; import { formatResource } from "../../../utils/output.js"; import { promptForConfirmation } from "../../../utils/prompt-confirmation.js"; @@ -38,7 +37,7 @@ export default class PushChannelsRemoveWhere extends AblyBaseCommand { const { args, flags } = await this.parse(PushChannelsRemoveWhere); try { - const rest = await this.createAblyRestClient(flags as BaseFlags); + const rest = await this.createAblyRestClient(flags); if (!rest) return; const params: Record = { @@ -87,7 +86,7 @@ export default class PushChannelsRemoveWhere extends AblyBaseCommand { this.logSuccessMessage("Matching subscriptions removed.", flags); } } catch (error) { - this.fail(error, flags as BaseFlags, "pushChannelRemoveWhere"); + this.fail(error, flags, "pushChannelRemoveWhere"); } } } diff --git a/src/commands/push/channels/remove.ts b/src/commands/push/channels/remove.ts index 1c87133b7..fcdf34931 100644 --- a/src/commands/push/channels/remove.ts +++ b/src/commands/push/channels/remove.ts @@ -2,7 +2,6 @@ import { Args, Flags } from "@oclif/core"; import { AblyBaseCommand } from "../../../base-command.js"; import { forceFlag, productApiFlags } from "../../../flags.js"; -import { BaseFlags } from "../../../types/cli.js"; import { formatResource } from "../../../utils/output.js"; import { promptForConfirmation } from "../../../utils/prompt-confirmation.js"; @@ -41,13 +40,13 @@ export default class PushChannelsRemove extends AblyBaseCommand { if (!flags["device-id"] && !flags["client-id"]) { this.fail( "Either --device-id or --client-id must be provided", - flags as BaseFlags, + flags, "pushChannelRemove", ); } try { - const rest = await this.createAblyRestClient(flags as BaseFlags); + const rest = await this.createAblyRestClient(flags); if (!rest) return; const target = flags["device-id"] @@ -105,7 +104,7 @@ export default class PushChannelsRemove extends AblyBaseCommand { ); } } catch (error) { - this.fail(error, flags as BaseFlags, "pushChannelRemove"); + this.fail(error, flags, "pushChannelRemove"); } } } diff --git a/src/commands/push/channels/save.ts b/src/commands/push/channels/save.ts index 039086a5d..94c105404 100644 --- a/src/commands/push/channels/save.ts +++ b/src/commands/push/channels/save.ts @@ -2,7 +2,6 @@ import { Args, Flags } from "@oclif/core"; import { AblyBaseCommand } from "../../../base-command.js"; import { productApiFlags } from "../../../flags.js"; -import { BaseFlags } from "../../../types/cli.js"; import { formatResource } from "../../../utils/output.js"; export default class PushChannelsSave extends AblyBaseCommand { @@ -40,13 +39,13 @@ export default class PushChannelsSave extends AblyBaseCommand { if (!flags["device-id"] && !flags["client-id"]) { this.fail( "Either --device-id or --client-id must be provided", - flags as BaseFlags, + flags, "pushChannelSave", ); } try { - const rest = await this.createAblyRestClient(flags as BaseFlags); + const rest = await this.createAblyRestClient(flags); if (!rest) return; this.logProgress( @@ -75,7 +74,7 @@ export default class PushChannelsSave extends AblyBaseCommand { ); } } catch (error) { - this.fail(error, flags as BaseFlags, "pushChannelSave"); + this.fail(error, flags, "pushChannelSave"); } } } diff --git a/src/commands/push/devices/get.ts b/src/commands/push/devices/get.ts index 578253912..3c8b72dfa 100644 --- a/src/commands/push/devices/get.ts +++ b/src/commands/push/devices/get.ts @@ -2,7 +2,6 @@ import { Args } from "@oclif/core"; import { AblyBaseCommand } from "../../../base-command.js"; import { productApiFlags } from "../../../flags.js"; -import { BaseFlags } from "../../../types/cli.js"; import { formatDeviceState, formatLabel, @@ -33,7 +32,7 @@ export default class PushDevicesGet extends AblyBaseCommand { const deviceId = args.deviceId; try { - const rest = await this.createAblyRestClient(flags as BaseFlags); + const rest = await this.createAblyRestClient(flags); if (!rest) return; this.logProgress(`Fetching device ${formatResource(deviceId)}`, flags); @@ -86,7 +85,7 @@ export default class PushDevicesGet extends AblyBaseCommand { ); } } catch (error) { - this.fail(error, flags as BaseFlags, "pushDeviceGet"); + this.fail(error, flags, "pushDeviceGet"); } } } diff --git a/src/commands/push/devices/list.ts b/src/commands/push/devices/list.ts index 853191a2f..fba46e165 100644 --- a/src/commands/push/devices/list.ts +++ b/src/commands/push/devices/list.ts @@ -2,7 +2,6 @@ import { Flags } from "@oclif/core"; import { AblyBaseCommand } from "../../../base-command.js"; import { productApiFlags } from "../../../flags.js"; -import { BaseFlags } from "../../../types/cli.js"; import { formatDeviceState, formatHeading, @@ -49,7 +48,7 @@ export default class PushDevicesList extends AblyBaseCommand { const { flags } = await this.parse(PushDevicesList); try { - const rest = await this.createAblyRestClient(flags as BaseFlags); + const rest = await this.createAblyRestClient(flags); if (!rest) return; this.logProgress("Fetching device registrations", flags); @@ -128,7 +127,7 @@ export default class PushDevicesList extends AblyBaseCommand { if (limitWarning) this.logToStderr(limitWarning); } } catch (error) { - this.fail(error, flags as BaseFlags, "pushDeviceList"); + this.fail(error, flags, "pushDeviceList"); } } } diff --git a/src/commands/push/devices/remove-where.ts b/src/commands/push/devices/remove-where.ts index 12880e95c..1947a08a1 100644 --- a/src/commands/push/devices/remove-where.ts +++ b/src/commands/push/devices/remove-where.ts @@ -2,7 +2,6 @@ import { Flags } from "@oclif/core"; import { AblyBaseCommand } from "../../../base-command.js"; import { forceFlag, productApiFlags } from "../../../flags.js"; -import { BaseFlags } from "../../../types/cli.js"; import { promptForConfirmation } from "../../../utils/prompt-confirmation.js"; export default class PushDevicesRemoveWhere extends AblyBaseCommand { @@ -32,13 +31,13 @@ export default class PushDevicesRemoveWhere extends AblyBaseCommand { if (!flags["device-id"] && !flags["client-id"]) { this.fail( "At least one filter is required: --device-id or --client-id", - flags as BaseFlags, + flags, "pushDeviceRemoveWhere", ); } try { - const rest = await this.createAblyRestClient(flags as BaseFlags); + const rest = await this.createAblyRestClient(flags); if (!rest) return; const params: Record = {}; @@ -82,7 +81,7 @@ export default class PushDevicesRemoveWhere extends AblyBaseCommand { this.logSuccessMessage("Matching device registrations removed.", flags); } } catch (error) { - this.fail(error, flags as BaseFlags, "pushDeviceRemoveWhere"); + this.fail(error, flags, "pushDeviceRemoveWhere"); } } } diff --git a/src/commands/push/devices/remove.ts b/src/commands/push/devices/remove.ts index 7354cc664..fcd6da86c 100644 --- a/src/commands/push/devices/remove.ts +++ b/src/commands/push/devices/remove.ts @@ -2,7 +2,6 @@ import { Args } from "@oclif/core"; import { AblyBaseCommand } from "../../../base-command.js"; import { forceFlag, productApiFlags } from "../../../flags.js"; -import { BaseFlags } from "../../../types/cli.js"; import { formatResource } from "../../../utils/output.js"; import { promptForConfirmation } from "../../../utils/prompt-confirmation.js"; @@ -32,7 +31,7 @@ export default class PushDevicesRemove extends AblyBaseCommand { const deviceId = args.deviceId; try { - const rest = await this.createAblyRestClient(flags as BaseFlags); + const rest = await this.createAblyRestClient(flags); if (!rest) return; // In JSON mode, require --force to prevent accidental destructive actions @@ -68,7 +67,7 @@ export default class PushDevicesRemove extends AblyBaseCommand { ); } } catch (error) { - this.fail(error, flags as BaseFlags, "pushDeviceRemove"); + this.fail(error, flags, "pushDeviceRemove"); } } } diff --git a/src/commands/push/devices/save.ts b/src/commands/push/devices/save.ts index c735da94e..2b8519cc6 100644 --- a/src/commands/push/devices/save.ts +++ b/src/commands/push/devices/save.ts @@ -4,7 +4,6 @@ import * as path from "node:path"; import { AblyBaseCommand } from "../../../base-command.js"; import { productApiFlags } from "../../../flags.js"; -import { BaseFlags } from "../../../types/cli.js"; import { formatResource } from "../../../utils/output.js"; export default class PushDevicesSave extends AblyBaseCommand { @@ -71,7 +70,7 @@ export default class PushDevicesSave extends AblyBaseCommand { const { flags } = await this.parse(PushDevicesSave); try { - const rest = await this.createAblyRestClient(flags as BaseFlags); + const rest = await this.createAblyRestClient(flags); if (!rest) return; let deviceData: Record; @@ -82,28 +81,28 @@ export default class PushDevicesSave extends AblyBaseCommand { if (!flags.id) { this.fail( "--id is required when not using --data", - flags as BaseFlags, + flags, "pushDeviceSave", ); } if (!flags.platform) { this.fail( "--platform is required when not using --data", - flags as BaseFlags, + flags, "pushDeviceSave", ); } if (!flags["form-factor"]) { this.fail( "--form-factor is required when not using --data", - flags as BaseFlags, + flags, "pushDeviceSave", ); } if (!flags["transport-type"]) { this.fail( "--transport-type is required when not using --data", - flags as BaseFlags, + flags, "pushDeviceSave", ); } @@ -115,21 +114,21 @@ export default class PushDevicesSave extends AblyBaseCommand { if (!flags["target-url"]) { this.fail( "--target-url is required for web transport", - flags as BaseFlags, + flags, "pushDeviceSave", ); } if (!flags["p256dh-key"]) { this.fail( "--p256dh-key is required for web transport", - flags as BaseFlags, + flags, "pushDeviceSave", ); } if (!flags["auth-secret"]) { this.fail( "--auth-secret is required for web transport", - flags as BaseFlags, + flags, "pushDeviceSave", ); } @@ -145,7 +144,7 @@ export default class PushDevicesSave extends AblyBaseCommand { if (!flags["device-token"]) { this.fail( "--device-token is required for apns/fcm transport", - flags as BaseFlags, + flags, "pushDeviceSave", ); } @@ -172,7 +171,7 @@ export default class PushDevicesSave extends AblyBaseCommand { deviceData.metadata = this.parseJsonObjectFlag( flags.metadata, "--metadata", - flags as BaseFlags, + flags, ); } } @@ -195,7 +194,7 @@ export default class PushDevicesSave extends AblyBaseCommand { ); } } catch (error) { - this.fail(error, flags as BaseFlags, "pushDeviceSave"); + this.fail(error, flags, "pushDeviceSave"); } } @@ -208,11 +207,7 @@ export default class PushDevicesSave extends AblyBaseCommand { if (data.startsWith("@")) { const filePath = path.resolve(data.slice(1)); if (!fs.existsSync(filePath)) { - this.fail( - `File not found: ${filePath}`, - flags as BaseFlags, - "pushDeviceSave", - ); + this.fail(`File not found: ${filePath}`, flags, "pushDeviceSave"); } jsonString = fs.readFileSync(filePath, "utf8"); } @@ -223,17 +218,13 @@ export default class PushDevicesSave extends AblyBaseCommand { } catch { this.fail( "--data must be valid JSON or a path to a JSON file (prefixed with @)", - flags as BaseFlags, + flags, "pushDeviceSave", ); } if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) { - this.fail( - "--data must be a JSON object", - flags as BaseFlags, - "pushDeviceSave", - ); + this.fail("--data must be a JSON object", flags, "pushDeviceSave"); } return parsed as Record; diff --git a/src/commands/push/publish.ts b/src/commands/push/publish.ts index 3fe5453c0..fbef467eb 100644 --- a/src/commands/push/publish.ts +++ b/src/commands/push/publish.ts @@ -4,7 +4,6 @@ import * as path from "node:path"; import { AblyBaseCommand } from "../../base-command.js"; import { forceFlag, productApiFlags } from "../../flags.js"; -import { BaseFlags } from "../../types/cli.js"; import { prepareMessageFromInput } from "../../utils/message.js"; import { formatResource } from "../../utils/output.js"; import { promptForConfirmation } from "../../utils/prompt-confirmation.js"; @@ -102,7 +101,7 @@ export default class PushPublish extends AblyBaseCommand { if (flags.message && !flags.channel) { this.fail( "--message can only be used with --channel (realtime message data is not applicable when publishing directly to a device or client)", - flags as BaseFlags, + flags, "pushPublish", ); } @@ -110,7 +109,7 @@ export default class PushPublish extends AblyBaseCommand { if (!hasDirectRecipient && !flags.channel) { this.fail( "A target is required: --device-id, --client-id, --recipient, or --channel", - flags as BaseFlags, + flags, "pushPublish", ); } @@ -118,18 +117,18 @@ export default class PushPublish extends AblyBaseCommand { if (hasDirectRecipient && flags.channel) { this.logWarning( "--channel is ignored when --device-id, --client-id, or --recipient is provided.", - flags as BaseFlags, + flags, ); if (flags.message) { this.logWarning( "--message is ignored when --device-id, --client-id, or --recipient is provided.", - flags as BaseFlags, + flags, ); } } try { - const rest = await this.createAblyRestClient(flags as BaseFlags); + const rest = await this.createAblyRestClient(flags); if (!rest) return; // Build recipient @@ -142,7 +141,7 @@ export default class PushPublish extends AblyBaseCommand { recipient = this.parseJsonObjectFlag( flags.recipient, "--recipient", - flags as BaseFlags, + flags, ); } @@ -153,11 +152,7 @@ export default class PushPublish extends AblyBaseCommand { if (flags.payload.startsWith("@")) { const filePath = path.resolve(flags.payload.slice(1)); if (!fs.existsSync(filePath)) { - this.fail( - `File not found: ${filePath}`, - flags as BaseFlags, - "pushPublish", - ); + this.fail(`File not found: ${filePath}`, flags, "pushPublish"); } jsonString = fs.readFileSync(filePath, "utf8"); } else if ( @@ -167,11 +162,7 @@ export default class PushPublish extends AblyBaseCommand { ) { const filePath = path.resolve(flags.payload); if (!fs.existsSync(filePath)) { - this.fail( - `File not found: ${filePath}`, - flags as BaseFlags, - "pushPublish", - ); + this.fail(`File not found: ${filePath}`, flags, "pushPublish"); } jsonString = fs.readFileSync(filePath, "utf8"); } else if (fs.existsSync(path.resolve(flags.payload))) { @@ -179,11 +170,7 @@ export default class PushPublish extends AblyBaseCommand { } else { jsonString = flags.payload; } - payload = this.parseJsonObjectFlag( - jsonString, - "--payload", - flags as BaseFlags, - ); + payload = this.parseJsonObjectFlag(jsonString, "--payload", flags); } else { const notification: Record = {}; if (flags.title) notification.title = flags.title; @@ -201,11 +188,7 @@ export default class PushPublish extends AblyBaseCommand { } if (flags.data) { - payload.data = this.parseJsonObjectFlag( - flags.data, - "--data", - flags as BaseFlags, - ); + payload.data = this.parseJsonObjectFlag(flags.data, "--data", flags); } } @@ -217,32 +200,20 @@ export default class PushPublish extends AblyBaseCommand { ) { this.fail( "No push payload provided. Use --payload, --title/--body, or --data to specify notification content", - flags as BaseFlags, + flags, "pushPublish", ); } // Add platform-specific overrides if (flags.apns) { - payload.apns = this.parseJsonObjectFlag( - flags.apns, - "--apns", - flags as BaseFlags, - ); + payload.apns = this.parseJsonObjectFlag(flags.apns, "--apns", flags); } if (flags.fcm) { - payload.fcm = this.parseJsonObjectFlag( - flags.fcm, - "--fcm", - flags as BaseFlags, - ); + payload.fcm = this.parseJsonObjectFlag(flags.fcm, "--fcm", flags); } if (flags.web) { - payload.web = this.parseJsonObjectFlag( - flags.web, - "--web", - flags as BaseFlags, - ); + payload.web = this.parseJsonObjectFlag(flags.web, "--web", flags); } this.logProgress("Publishing push notification", flags); @@ -290,7 +261,7 @@ export default class PushPublish extends AblyBaseCommand { ) { this.fail( "--message must not include extras.push; use the push flags (--title/--body/--payload/etc.) to specify push content", - flags as BaseFlags, + flags, "pushPublish", ); } @@ -331,7 +302,7 @@ export default class PushPublish extends AblyBaseCommand { ); } } catch (error) { - this.fail(error, flags as BaseFlags, "pushPublish"); + this.fail(error, flags, "pushPublish"); } } } diff --git a/src/commands/queues/create.ts b/src/commands/queues/create.ts index 539fe8301..2d68dcf93 100644 --- a/src/commands/queues/create.ts +++ b/src/commands/queues/create.ts @@ -73,10 +73,7 @@ export default class QueuesCreateCommand extends ControlBaseCommand { if (this.shouldOutputJson(flags)) { this.logJsonResult( { - queue: structuredClone(createdQueue) as unknown as Record< - string, - unknown - >, + queue: structuredClone(createdQueue), }, flags, ); diff --git a/src/commands/status.ts b/src/commands/status.ts index 6c3cdcc69..27479c637 100644 --- a/src/commands/status.ts +++ b/src/commands/status.ts @@ -5,7 +5,6 @@ import ora from "ora"; import { AblyBaseCommand } from "../base-command.js"; import { coreGlobalFlags } from "../flags.js"; -import { BaseFlags } from "../types/cli.js"; import openUrl from "../utils/open-url.js"; import { getAgentName, getCliVersion } from "../utils/version.js"; @@ -55,7 +54,7 @@ export default class StatusCommand extends AblyBaseCommand { if (data.status === undefined) { this.fail( "Invalid response from status endpoint: status attribute is missing", - flags as BaseFlags, + flags, "status", ); } @@ -68,7 +67,7 @@ export default class StatusCommand extends AblyBaseCommand { statusUrl: "https://status.ably.com", }, }, - flags as BaseFlags, + flags, ); } else if (data.status) { this.log("No incidents currently reported"); @@ -97,7 +96,7 @@ export default class StatusCommand extends AblyBaseCommand { spinner.fail("Failed to check Ably service status"); } - this.fail(error, flags as BaseFlags, "status"); + this.fail(error, flags, "status"); } } } diff --git a/src/hooks/init/version-flag.ts b/src/hooks/init/version-flag.ts index 6ec59ddc0..e26d04c7c 100644 --- a/src/hooks/init/version-flag.ts +++ b/src/hooks/init/version-flag.ts @@ -53,7 +53,7 @@ const hook: Hook<"init"> = async function (opts) { const jsonOutput = formatJsonString(record, { json: !hasPrettyJsonFlag, prettyJson: hasPrettyJsonFlag, - } as Record); + }); console.log(jsonOutput); handleVersionExit(); } else { diff --git a/src/services/config-manager.ts b/src/services/config-manager.ts index 11d30100c..2ce45c475 100644 --- a/src/services/config-manager.ts +++ b/src/services/config-manager.ts @@ -49,6 +49,8 @@ export interface AblyConfig { accounts: Record; current?: { account?: string; + /** @deprecated Legacy field migrated to account.currentAppId on first load */ + app?: string; }; helpContext?: { conversation: { @@ -772,9 +774,7 @@ export class TomlConfigManager implements ConfigManager { }; // Migrate old config format if needed - move app from current to account.currentAppId - const legacyCurrent = this.config.current as - | (typeof this.config.current & { app?: string }) - | undefined; + const legacyCurrent = this.config.current; if (legacyCurrent?.app) { const currentAccountAlias = this.config.current?.account; if ( diff --git a/src/utils/json-formatter.ts b/src/utils/json-formatter.ts index f895ab9f2..2d3d3023a 100644 --- a/src/utils/json-formatter.ts +++ b/src/utils/json-formatter.ts @@ -21,7 +21,12 @@ export function formatJson(data: unknown): string { } catch { // If JSON serialization fails (e.g. circular reference), return a safe string representation if (typeof data !== "object") { - return String(data as string | number | boolean | bigint | symbol); + if (typeof data === "function") return "[Function]"; + if (typeof data === "symbol") return data.toString(); + if (typeof data === "bigint") return data.toString(); + if (typeof data === "number") return data.toString(); + if (typeof data === "boolean") return data.toString(); + return typeof data === "string" ? data : "undefined"; } try { @@ -85,10 +90,16 @@ function colorValue(value: unknown): string { return chalk.green(`"${value}"`); } + case "bigint": { + return chalk.yellow(value.toString()); + } + + case "symbol": { + return value.toString(); + } + default: { - return typeof value === "object" - ? JSON.stringify(value) - : String(value as string | number | boolean | bigint | symbol); + return typeof value === "object" ? JSON.stringify(value) : "[Function]"; } } } diff --git a/src/utils/message.ts b/src/utils/message.ts index 642f428bb..385fe5a84 100644 --- a/src/utils/message.ts +++ b/src/utils/message.ts @@ -50,7 +50,7 @@ export function prepareMessageFromInput( if ( messageData.extras && typeof messageData.extras === "object" && - Object.keys(messageData.extras as Record).length > 0 + Object.keys(messageData.extras).length > 0 ) { message.extras = messageData.extras as Record; delete messageData.extras; @@ -66,5 +66,5 @@ export function prepareMessageFromInput( message.encoding = flags.encoding as string; } - return message as Ably.Message; + return message; } diff --git a/src/utils/readline-helper.ts b/src/utils/readline-helper.ts index ed176d87f..3c404d25f 100644 --- a/src/utils/readline-helper.ts +++ b/src/utils/readline-helper.ts @@ -42,7 +42,7 @@ export async function runInquirerWithReadlineRestore( // Restore line listeners lineListeners.forEach((listener) => { - interactiveReadline.on("line", listener as (line: string) => void); + interactiveReadline.on("line", listener); }); // Resume readline with a small delay to ensure terminal is ready diff --git a/src/utils/spaces-output.ts b/src/utils/spaces-output.ts index 127e0a97d..d9bae45c9 100644 --- a/src/utils/spaces-output.ts +++ b/src/utils/spaces-output.ts @@ -166,10 +166,7 @@ export function formatCursorBlock( `${indent}${formatLabel("Position Y")} ${cursor.position.y}`, ]; - if ( - cursor.data && - Object.keys(cursor.data as Record).length > 0 - ) { + if (cursor.data && Object.keys(cursor.data).length > 0) { lines.push( `${indent}${formatLabel("Data")} ${JSON.stringify(cursor.data)}`, ); @@ -195,10 +192,7 @@ export function formatLockBlock( formatMemberBlock(lock.member, { indent: memberIndent }), ]; - if ( - lock.attributes && - Object.keys(lock.attributes as Record).length > 0 - ) { + if (lock.attributes && Object.keys(lock.attributes).length > 0) { lines.push( `${indent}${formatLabel("Attributes")} ${JSON.stringify(lock.attributes)}`, ); diff --git a/test/e2e/control-api.test.ts b/test/e2e/control-api.test.ts index 86c729ce6..9198de94b 100644 --- a/test/e2e/control-api.test.ts +++ b/test/e2e/control-api.test.ts @@ -449,11 +449,7 @@ describe.skipIf(!process.env.E2E_ABLY_ACCESS_TOKEN)( }); it("should handle malformed requests", async () => { - await expect( - controlApi.createApp({ name: "" } as unknown as Parameters< - typeof controlApi.createApp - >[0]), - ).rejects.toThrow(); + await expect(controlApi.createApp({ name: "" })).rejects.toThrow(); }); }); diff --git a/test/e2e/web-cli/reconnection.test.ts b/test/e2e/web-cli/reconnection.test.ts index 4aa572f37..36433b39a 100644 --- a/test/e2e/web-cli/reconnection.test.ts +++ b/test/e2e/web-cli/reconnection.test.ts @@ -531,7 +531,7 @@ test.describe("Web CLI Reconnection E2E Tests", () => { } } - window.WebSocket = InterceptWS as unknown as typeof WebSocket; + window.WebSocket = InterceptWS; }); const apiKey = process.env.E2E_ABLY_API_KEY || process.env.ABLY_API_KEY; @@ -672,7 +672,7 @@ test.describe("Web CLI Reconnection E2E Tests", () => { } } - window.WebSocket = InterceptWS as unknown as typeof WebSocket; + window.WebSocket = InterceptWS; }); // Use maxReconnectAttempts=3 for faster testing diff --git a/test/e2e/web-cli/wait-helpers.ts b/test/e2e/web-cli/wait-helpers.ts index c203d3a8e..d62ff9303 100644 --- a/test/e2e/web-cli/wait-helpers.ts +++ b/test/e2e/web-cli/wait-helpers.ts @@ -64,17 +64,11 @@ export async function waitForTerminalReady( // Handle different states while (Date.now() - startTime < effectiveTimeout) { - currentState = (await page.evaluate(() => { + currentState = await page.evaluate(() => { return ( window as Window & { getAblyCliTerminalReactState?: () => unknown } ).getAblyCliTerminalReactState?.(); - })) as - | { - componentConnectionStatus?: string; - isSessionActive?: boolean; - showManualReconnectPrompt?: boolean; - } - | undefined; + }); if ( currentState?.componentConnectionStatus === "connected" && diff --git a/test/hooks/command_not_found/did-you-mean.test.ts b/test/hooks/command_not_found/did-you-mean.test.ts index 799424701..1eb1f26b4 100644 --- a/test/hooks/command_not_found/did-you-mean.test.ts +++ b/test/hooks/command_not_found/did-you-mean.test.ts @@ -64,7 +64,7 @@ async function createTestConfig(): Promise { hidden: false, hiddenAliases: [], load: async () => ({ async run() {} }) as unknown as Command.Class, - } as Command.Loadable, + }, { id: "channels:list", // Add minimum required properties for Command.Loadable type @@ -74,7 +74,7 @@ async function createTestConfig(): Promise { hiddenAliases: [], args: {}, load: async () => ({ async run() {} }) as unknown as Command.Class, - } as Command.Loadable, + }, { id: "help", // Add minimum required properties for Command.Loadable type @@ -84,7 +84,7 @@ async function createTestConfig(): Promise { hiddenAliases: [], args: {}, load: async () => ({ async run() {} }) as unknown as Command.Class, - } as Command.Loadable, + }, ); config.commandIDs.push( "channels:subscribe", @@ -95,7 +95,7 @@ async function createTestConfig(): Promise { config.topics.push({ description: "Channel commands", name: "channels", - } as unknown as (typeof config.topics)[number]); + }); return config; } diff --git a/test/tty/tty-test-helper.ts b/test/tty/tty-test-helper.ts index 01d7c5c50..af9ef3960 100644 --- a/test/tty/tty-test-helper.ts +++ b/test/tty/tty-test-helper.ts @@ -52,7 +52,7 @@ export function spawnTty( name: "xterm-256color", cols: 120, rows: 30, - env: childEnv as Record, + env: childEnv, }); let resolveExit: (value: { code: number }) => void; diff --git a/test/unit/commands/init.test.ts b/test/unit/commands/init.test.ts index d4336b0d1..49aa5862b 100644 --- a/test/unit/commands/init.test.ts +++ b/test/unit/commands/init.test.ts @@ -108,7 +108,7 @@ function mockFetchWithTarball(buffer: Buffer): void { tag_name: TEST_RELEASE.tag, name: TEST_RELEASE.name, }), - } as unknown as Response; + }; } if (url.includes("/git/refs/tags/")) { return { @@ -117,7 +117,7 @@ function mockFetchWithTarball(buffer: Buffer): void { json: async () => ({ object: { sha: TEST_RELEASE.sha, type: "commit", url: "" }, }), - } as unknown as Response; + }; } if (url.includes("/attestations/sha256:")) { return { @@ -126,7 +126,7 @@ function mockFetchWithTarball(buffer: Buffer): void { json: async () => ({ attestations: [{ bundle: { mediaType: "fake-bundle" } }], }), - } as unknown as Response; + }; } if (url.includes("/releases/download/")) { return { @@ -137,13 +137,13 @@ function mockFetchWithTarball(buffer: Buffer): void { buffer.byteOffset, buffer.byteOffset + buffer.byteLength, ), - } as unknown as Response; + }; } return { ok: false, status: 404, statusText: `Unexpected URL: ${url}`, - } as unknown as Response; + }; }); } @@ -286,7 +286,7 @@ describe("init command", () => { ok: false, status: 404, statusText: "Not Found", - } as Response); + }); const { error } = await runCommand( ["init", "--target", "cursor"], diff --git a/test/unit/commands/interactive.test.ts b/test/unit/commands/interactive.test.ts index 4316c074a..73a3f27ff 100644 --- a/test/unit/commands/interactive.test.ts +++ b/test/unit/commands/interactive.test.ts @@ -53,9 +53,9 @@ describe("Interactive Command", () => { .mockImplementation(() => {}); const processExitSpy = vi .spyOn(process, "exit") - .mockImplementation((() => { + .mockImplementation(() => { throw new Error("Process exit called"); - }) as never); + }); try { await cmd.run(); diff --git a/test/unit/commands/skills/install.test.ts b/test/unit/commands/skills/install.test.ts index fb0ab79fc..a7eae75ee 100644 --- a/test/unit/commands/skills/install.test.ts +++ b/test/unit/commands/skills/install.test.ts @@ -118,7 +118,7 @@ function mockFetchWithTarball(buffer: Buffer): void { tag_name: TEST_RELEASE.tag, name: TEST_RELEASE.name, }), - } as unknown as Response; + }; } if (url.includes("/git/refs/tags/")) { return { @@ -127,7 +127,7 @@ function mockFetchWithTarball(buffer: Buffer): void { json: async () => ({ object: { sha: TEST_RELEASE.sha, type: "commit", url: "" }, }), - } as unknown as Response; + }; } if (url.includes("/attestations/sha256:")) { return { @@ -136,7 +136,7 @@ function mockFetchWithTarball(buffer: Buffer): void { json: async () => ({ attestations: [{ bundle: { mediaType: "fake-bundle" } }], }), - } as unknown as Response; + }; } if (url.includes("/releases/download/")) { return { @@ -147,13 +147,13 @@ function mockFetchWithTarball(buffer: Buffer): void { buffer.byteOffset, buffer.byteOffset + buffer.byteLength, ), - } as unknown as Response; + }; } return { ok: false, status: 404, statusText: `Unexpected URL: ${url}`, - } as unknown as Response; + }; }); } @@ -318,7 +318,7 @@ describe("skills:install command", () => { ok: false, status: 404, statusText: "Not Found", - } as Response); + }); const { error } = await runCommand( ["skills:install", "--target", "cursor"], diff --git a/test/unit/help/web-cli-help.test.ts b/test/unit/help/web-cli-help.test.ts index 0138a38da..48d07a969 100644 --- a/test/unit/help/web-cli-help.test.ts +++ b/test/unit/help/web-cli-help.test.ts @@ -70,7 +70,7 @@ describe("CLI Help", function () { // Stub ConfigManager configManagerStub = { getAccessToken: vi.fn(), - } as Partial; + }; // Enable Web CLI mode process.env.ABLY_WEB_CLI_MODE = "true"; diff --git a/test/unit/services/skills-downloader.test.ts b/test/unit/services/skills-downloader.test.ts index 3738ae47a..73e07ce82 100644 --- a/test/unit/services/skills-downloader.test.ts +++ b/test/unit/services/skills-downloader.test.ts @@ -108,7 +108,7 @@ function wireFetch(buffer: Buffer | null, opts: FetchOpts = {}): void { ok: false, status: opts.releaseStatus, statusText: "Not Found", - } as unknown as Response; + }; } return { ok: true, @@ -117,7 +117,7 @@ function wireFetch(buffer: Buffer | null, opts: FetchOpts = {}): void { tag_name: TEST_RELEASE.tag, name: TEST_RELEASE.name, }), - } as unknown as Response; + }; } if (url.includes("/git/refs/tags/")) { return { @@ -126,7 +126,7 @@ function wireFetch(buffer: Buffer | null, opts: FetchOpts = {}): void { json: async () => ({ object: { sha: TEST_RELEASE.sha, type: "commit", url: "" }, }), - } as unknown as Response; + }; } if (url.includes("/attestations/sha256:")) { if ((opts.attestationStatus ?? 200) !== 200) { @@ -134,7 +134,7 @@ function wireFetch(buffer: Buffer | null, opts: FetchOpts = {}): void { ok: false, status: opts.attestationStatus, statusText: "Not Found", - } as unknown as Response; + }; } return { ok: true, @@ -143,7 +143,7 @@ function wireFetch(buffer: Buffer | null, opts: FetchOpts = {}): void { opts.noAttestations ? { attestations: [] } : { attestations: [{ bundle: { mediaType: "fake-bundle" } }] }, - } as unknown as Response; + }; } if (url.includes("/releases/download/")) { if ((opts.assetStatus ?? 200) !== 200) { @@ -151,14 +151,14 @@ function wireFetch(buffer: Buffer | null, opts: FetchOpts = {}): void { ok: false, status: opts.assetStatus, statusText: "Not Found", - } as unknown as Response; + }; } if (buffer === null) { return { ok: false, status: 500, statusText: "Internal Server Error", - } as unknown as Response; + }; } return { ok: true, @@ -168,13 +168,13 @@ function wireFetch(buffer: Buffer | null, opts: FetchOpts = {}): void { buffer.byteOffset, buffer.byteOffset + buffer.byteLength, ), - } as unknown as Response; + }; } return { ok: false, status: 404, statusText: `Unexpected URL: ${url}`, - } as unknown as Response; + }; }); } diff --git a/test/unit/services/stats-display.test.ts b/test/unit/services/stats-display.test.ts index e723f9ec8..4640ffa00 100644 --- a/test/unit/services/stats-display.test.ts +++ b/test/unit/services/stats-display.test.ts @@ -31,7 +31,7 @@ describe("StatsDisplay", () => { it("produces no output for null stats", () => { const display = new StatsDisplay(); - display.display(null as unknown as Parameters[0]); + display.display(null); expect(consoleSpy).not.toHaveBeenCalled(); });